mirror of
https://github.com/immich-app/immich
synced 2025-11-07 17:27:20 +00:00
fix: Use CSS for uppercase text (#22011)
This commit is contained in:
parent
5fb0afb0d0
commit
0f79e0c38e
40 changed files with 118 additions and 123 deletions
|
|
@ -67,7 +67,7 @@
|
||||||
<div class="flex items-center gap-4 text-xl font-semibold text-immich-primary dark:text-immich-dark-primary">
|
<div class="flex items-center gap-4 text-xl font-semibold text-immich-primary dark:text-immich-dark-primary">
|
||||||
<span class="flex items-center gap-2">
|
<span class="flex items-center gap-2">
|
||||||
<Icon path={icon} size="1.25em" class="hidden shrink-0 sm:block" />
|
<Icon path={icon} size="1.25em" class="hidden shrink-0 sm:block" />
|
||||||
{title.toUpperCase()}
|
<span class="uppercase">{title}</span>
|
||||||
</span>
|
</span>
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
{#if jobCounts.failed > 0}
|
{#if jobCounts.failed > 0}
|
||||||
|
|
@ -137,7 +137,7 @@
|
||||||
onClick={() => onCommand({ command: JobCommand.Start, force: false })}
|
onClick={() => onCommand({ command: JobCommand.Start, force: false })}
|
||||||
>
|
>
|
||||||
<Icon path={mdiAlertCircle} size="36" />
|
<Icon path={mdiAlertCircle} size="36" />
|
||||||
{$t('disabled').toUpperCase()}
|
<span class="uppercase">{$t('disabled')}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
|
@ -145,7 +145,7 @@
|
||||||
{#if waitingCount > 0}
|
{#if waitingCount > 0}
|
||||||
<JobTileButton color="gray" onClick={() => onCommand({ command: JobCommand.Empty, force: false })}>
|
<JobTileButton color="gray" onClick={() => onCommand({ command: JobCommand.Empty, force: false })}>
|
||||||
<Icon path={mdiClose} size="24" />
|
<Icon path={mdiClose} size="24" />
|
||||||
{$t('clear').toUpperCase()}
|
<span class="uppercase">{$t('clear')}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
{#if queueStatus.isPaused}
|
{#if queueStatus.isPaused}
|
||||||
|
|
@ -153,12 +153,12 @@
|
||||||
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Resume, force: false })}>
|
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Resume, force: false })}>
|
||||||
<!-- size property is not reactive, so have to use width and height -->
|
<!-- size property is not reactive, so have to use width and height -->
|
||||||
<Icon path={mdiFastForward} {size} />
|
<Icon path={mdiFastForward} {size} />
|
||||||
{$t('resume').toUpperCase()}
|
<span class="uppercase">{$t('resume')}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{:else}
|
{:else}
|
||||||
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Pause, force: false })}>
|
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Pause, force: false })}>
|
||||||
<Icon path={mdiPause} size="24" />
|
<Icon path={mdiPause} size="24" />
|
||||||
{$t('pause').toUpperCase()}
|
<span class="uppercase">{$t('pause')}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
@ -167,25 +167,25 @@
|
||||||
{#if allText}
|
{#if allText}
|
||||||
<JobTileButton color="dark-gray" onClick={() => onCommand({ command: JobCommand.Start, force: true })}>
|
<JobTileButton color="dark-gray" onClick={() => onCommand({ command: JobCommand.Start, force: true })}>
|
||||||
<Icon path={mdiAllInclusive} size="24" />
|
<Icon path={mdiAllInclusive} size="24" />
|
||||||
{allText}
|
<span class="uppercase">{allText}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
{#if refreshText}
|
{#if refreshText}
|
||||||
<JobTileButton color="gray" onClick={() => onCommand({ command: JobCommand.Start, force: undefined })}>
|
<JobTileButton color="gray" onClick={() => onCommand({ command: JobCommand.Start, force: undefined })}>
|
||||||
<Icon path={mdiImageRefreshOutline} size="24" />
|
<Icon path={mdiImageRefreshOutline} size="24" />
|
||||||
{refreshText}
|
<span class="uppercase">{refreshText}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Start, force: false })}>
|
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Start, force: false })}>
|
||||||
<Icon path={mdiSelectionSearch} size="24" />
|
<Icon path={mdiSelectionSearch} size="24" />
|
||||||
{missingText}
|
<span class="uppercase">{missingText}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if !disabled && !multipleButtons && isIdle}
|
{#if !disabled && !multipleButtons && isIdle}
|
||||||
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Start, force: false })}>
|
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Start, force: false })}>
|
||||||
<Icon path={mdiPlay} size="48" />
|
<Icon path={mdiPlay} size="48" />
|
||||||
{missingText}
|
<span class="uppercase">{missingText}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -177,9 +177,9 @@
|
||||||
{disabled}
|
{disabled}
|
||||||
{subtitle}
|
{subtitle}
|
||||||
{description}
|
{description}
|
||||||
allText={allText?.toUpperCase()}
|
{allText}
|
||||||
refreshText={refreshText?.toUpperCase()}
|
{refreshText}
|
||||||
missingText={missingText.toUpperCase()}
|
{missingText}
|
||||||
{jobCounts}
|
{jobCounts}
|
||||||
{queueStatus}
|
{queueStatus}
|
||||||
onCommand={(command) => (handleCommandOverride || handleCommand)(jobName, command)}
|
onCommand={(command) => (handleCommandOverride || handleCommand)(jobName, command)}
|
||||||
|
|
|
||||||
|
|
@ -36,19 +36,19 @@
|
||||||
|
|
||||||
<div class="flex flex-col gap-5">
|
<div class="flex flex-col gap-5">
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm dark:text-immich-dark-fg">{$t('total_usage').toUpperCase()}</p>
|
<p class="text-sm dark:text-immich-dark-fg uppercase">{$t('total_usage')}</p>
|
||||||
|
|
||||||
<div class="mt-5 hidden justify-between lg:flex gap-4">
|
<div class="mt-5 hidden justify-between lg:flex gap-4">
|
||||||
<StatsCard icon={mdiCameraIris} title={$t('photos').toUpperCase()} value={stats.photos} />
|
<StatsCard icon={mdiCameraIris} title={$t('photos')} value={stats.photos} />
|
||||||
<StatsCard icon={mdiPlayCircle} title={$t('videos').toUpperCase()} value={stats.videos} />
|
<StatsCard icon={mdiPlayCircle} title={$t('videos')} value={stats.videos} />
|
||||||
<StatsCard icon={mdiChartPie} title={$t('storage').toUpperCase()} value={statsUsage} unit={statsUsageUnit} />
|
<StatsCard icon={mdiChartPie} title={$t('storage')} value={statsUsage} unit={statsUsageUnit} />
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-5 flex lg:hidden">
|
<div class="mt-5 flex lg:hidden">
|
||||||
<div class="flex flex-col justify-between rounded-3xl bg-subtle p-5 dark:bg-immich-dark-gray">
|
<div class="flex flex-col justify-between rounded-3xl bg-subtle p-5 dark:bg-immich-dark-gray">
|
||||||
<div class="flex flex-wrap gap-x-12">
|
<div class="flex flex-wrap gap-x-12">
|
||||||
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
||||||
<Icon path={mdiCameraIris} size="25" />
|
<Icon path={mdiCameraIris} size="25" />
|
||||||
<p>{$t('photos').toUpperCase()}</p>
|
<p class="uppercase">{$t('photos')}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative text-center font-mono text-2xl font-semibold">
|
<div class="relative text-center font-mono text-2xl font-semibold">
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
<div class="flex flex-wrap gap-x-12">
|
<div class="flex flex-wrap gap-x-12">
|
||||||
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
||||||
<Icon path={mdiPlayCircle} size="25" />
|
<Icon path={mdiPlayCircle} size="25" />
|
||||||
<p>{$t('videos').toUpperCase()}</p>
|
<p class="uppercase">{$t('videos')}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative text-center font-mono text-2xl font-semibold">
|
<div class="relative text-center font-mono text-2xl font-semibold">
|
||||||
|
|
@ -72,7 +72,7 @@
|
||||||
<div class="flex flex-wrap gap-x-7">
|
<div class="flex flex-wrap gap-x-7">
|
||||||
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
||||||
<Icon path={mdiChartPie} size="25" />
|
<Icon path={mdiChartPie} size="25" />
|
||||||
<p>{$t('storage').toUpperCase()}</p>
|
<p class="uppercase">{$t('storage')}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative flex text-center font-mono text-2xl font-semibold">
|
<div class="relative flex text-center font-mono text-2xl font-semibold">
|
||||||
|
|
@ -87,7 +87,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm dark:text-immich-dark-fg">{$t('user_usage_detail').toUpperCase()}</p>
|
<p class="text-sm dark:text-immich-dark-fg uppercase">{$t('user_usage_detail')}</p>
|
||||||
<table class="mt-5 w-full text-start">
|
<table class="mt-5 w-full text-start">
|
||||||
<thead
|
<thead
|
||||||
class="mb-4 flex h-12 w-full rounded-md border bg-gray-50 text-immich-primary dark:border-immich-dark-gray dark:bg-immich-dark-gray dark:text-immich-dark-primary"
|
class="mb-4 flex h-12 w-full rounded-md border bg-gray-50 text-immich-primary dark:border-immich-dark-gray dark:bg-immich-dark-gray dark:text-immich-dark-primary"
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
<div class="flex h-[140px] w-full flex-col justify-between rounded-3xl bg-subtle text-primary p-5">
|
<div class="flex h-[140px] w-full flex-col justify-between rounded-3xl bg-subtle text-primary p-5">
|
||||||
<div class="flex place-items-center gap-4">
|
<div class="flex place-items-center gap-4">
|
||||||
<Icon path={icon} size="40" />
|
<Icon path={icon} size="40" />
|
||||||
<Text size="large" fontWeight="bold">{title}</Text>
|
<Text size="large" fontWeight="bold" class="uppercase">{title}</Text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative mx-auto font-mono text-2xl font-semibold">
|
<div class="relative mx-auto font-mono text-2xl font-semibold">
|
||||||
|
|
|
||||||
|
|
@ -183,7 +183,7 @@
|
||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_timeout').toUpperCase()}
|
label={$t('admin.oauth_timeout')}
|
||||||
description={$t('admin.oauth_timeout_description')}
|
description={$t('admin.oauth_timeout_description')}
|
||||||
required={true}
|
required={true}
|
||||||
bind:value={config.oauth.timeout}
|
bind:value={config.oauth.timeout}
|
||||||
|
|
@ -193,7 +193,7 @@
|
||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_storage_label_claim').toUpperCase()}
|
label={$t('admin.oauth_storage_label_claim')}
|
||||||
description={$t('admin.oauth_storage_label_claim_description')}
|
description={$t('admin.oauth_storage_label_claim_description')}
|
||||||
bind:value={config.oauth.storageLabelClaim}
|
bind:value={config.oauth.storageLabelClaim}
|
||||||
required={true}
|
required={true}
|
||||||
|
|
@ -203,7 +203,7 @@
|
||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_role_claim').toUpperCase()}
|
label={$t('admin.oauth_role_claim')}
|
||||||
description={$t('admin.oauth_role_claim_description')}
|
description={$t('admin.oauth_role_claim_description')}
|
||||||
bind:value={config.oauth.roleClaim}
|
bind:value={config.oauth.roleClaim}
|
||||||
required={true}
|
required={true}
|
||||||
|
|
@ -213,7 +213,7 @@
|
||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_storage_quota_claim').toUpperCase()}
|
label={$t('admin.oauth_storage_quota_claim')}
|
||||||
description={$t('admin.oauth_storage_quota_claim_description')}
|
description={$t('admin.oauth_storage_quota_claim_description')}
|
||||||
bind:value={config.oauth.storageQuotaClaim}
|
bind:value={config.oauth.storageQuotaClaim}
|
||||||
required={true}
|
required={true}
|
||||||
|
|
@ -223,7 +223,7 @@
|
||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.NUMBER}
|
inputType={SettingInputFieldType.NUMBER}
|
||||||
label={$t('admin.oauth_storage_quota_default').toUpperCase()}
|
label={$t('admin.oauth_storage_quota_default')}
|
||||||
description={$t('admin.oauth_storage_quota_default_description')}
|
description={$t('admin.oauth_storage_quota_default_description')}
|
||||||
bind:value={config.oauth.defaultStorageQuota}
|
bind:value={config.oauth.defaultStorageQuota}
|
||||||
required={false}
|
required={false}
|
||||||
|
|
@ -233,7 +233,7 @@
|
||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_button_text').toUpperCase()}
|
label={$t('admin.oauth_button_text')}
|
||||||
bind:value={config.oauth.buttonText}
|
bind:value={config.oauth.buttonText}
|
||||||
required={false}
|
required={false}
|
||||||
disabled={disabled || !config.oauth.enabled}
|
disabled={disabled || !config.oauth.enabled}
|
||||||
|
|
@ -241,21 +241,21 @@
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<SettingSwitch
|
<SettingSwitch
|
||||||
title={$t('admin.oauth_auto_register').toUpperCase()}
|
title={$t('admin.oauth_auto_register')}
|
||||||
subtitle={$t('admin.oauth_auto_register_description')}
|
subtitle={$t('admin.oauth_auto_register_description')}
|
||||||
bind:checked={config.oauth.autoRegister}
|
bind:checked={config.oauth.autoRegister}
|
||||||
disabled={disabled || !config.oauth.enabled}
|
disabled={disabled || !config.oauth.enabled}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<SettingSwitch
|
<SettingSwitch
|
||||||
title={$t('admin.oauth_auto_launch').toUpperCase()}
|
title={$t('admin.oauth_auto_launch')}
|
||||||
subtitle={$t('admin.oauth_auto_launch_description')}
|
subtitle={$t('admin.oauth_auto_launch_description')}
|
||||||
disabled={disabled || !config.oauth.enabled}
|
disabled={disabled || !config.oauth.enabled}
|
||||||
bind:checked={config.oauth.autoLaunch}
|
bind:checked={config.oauth.autoLaunch}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<SettingSwitch
|
<SettingSwitch
|
||||||
title={$t('admin.oauth_mobile_redirect_uri_override').toUpperCase()}
|
title={$t('admin.oauth_mobile_redirect_uri_override')}
|
||||||
subtitle={$t('admin.oauth_mobile_redirect_uri_override_description', {
|
subtitle={$t('admin.oauth_mobile_redirect_uri_override_description', {
|
||||||
values: { callback: 'app.immich:///oauth-callback' },
|
values: { callback: 'app.immich:///oauth-callback' },
|
||||||
})}
|
})}
|
||||||
|
|
@ -267,7 +267,7 @@
|
||||||
{#if config.oauth.mobileOverrideEnabled}
|
{#if config.oauth.mobileOverrideEnabled}
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_mobile_redirect_uri').toUpperCase()}
|
label={$t('admin.oauth_mobile_redirect_uri')}
|
||||||
bind:value={config.oauth.mobileRedirectUri}
|
bind:value={config.oauth.mobileRedirectUri}
|
||||||
required={true}
|
required={true}
|
||||||
disabled={disabled || !config.oauth.enabled}
|
disabled={disabled || !config.oauth.enabled}
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@
|
||||||
<h3 class="text-base font-medium text-immich-primary dark:text-immich-dark-primary">{$t('template')}</h3>
|
<h3 class="text-base font-medium text-immich-primary dark:text-immich-dark-primary">{$t('template')}</h3>
|
||||||
|
|
||||||
<div class="my-2 text-sm">
|
<div class="my-2 text-sm">
|
||||||
<h4>{$t('preview').toUpperCase()}</h4>
|
<h4 class="uppercase">{$t('preview')}</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="text-sm">
|
<p class="text-sm">
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="mt-2 text-sm">
|
<div class="mt-2 text-sm">
|
||||||
<h4>{$t('date_and_time').toUpperCase()}</h4>
|
<h4 class="uppercase">{$t('date_and_time')}</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- eslint-disable svelte/no-useless-mustaches -->
|
<!-- eslint-disable svelte/no-useless-mustaches -->
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="flex gap-[40px]">
|
<div class="flex gap-[40px]">
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('year').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('year')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.yearOptions as yearFormat, index (index)}
|
{#each options.yearOptions as yearFormat, index (index)}
|
||||||
<li>{'{{'}{yearFormat}{'}}'} - {getLuxonExample(yearFormat)}</li>
|
<li>{'{{'}{yearFormat}{'}}'} - {getLuxonExample(yearFormat)}</li>
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('month').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('month')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.monthOptions as monthFormat, index (index)}
|
{#each options.monthOptions as monthFormat, index (index)}
|
||||||
<li>{'{{'}{monthFormat}{'}}'} - {getLuxonExample(monthFormat)}</li>
|
<li>{'{{'}{monthFormat}{'}}'} - {getLuxonExample(monthFormat)}</li>
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('week').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('week')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.weekOptions as weekFormat, index (index)}
|
{#each options.weekOptions as weekFormat, index (index)}
|
||||||
<li>{'{{'}{weekFormat}{'}}'} - {getLuxonExample(weekFormat)}</li>
|
<li>{'{{'}{weekFormat}{'}}'} - {getLuxonExample(weekFormat)}</li>
|
||||||
|
|
@ -54,7 +54,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('day').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('day')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.dayOptions as dayFormat, index (index)}
|
{#each options.dayOptions as dayFormat, index (index)}
|
||||||
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('hour').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('hour')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.hourOptions as dayFormat, index (index)}
|
{#each options.hourOptions as dayFormat, index (index)}
|
||||||
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
||||||
|
|
@ -72,7 +72,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('minute').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('minute')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.minuteOptions as dayFormat, index (index)}
|
{#each options.minuteOptions as dayFormat, index (index)}
|
||||||
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
||||||
|
|
@ -81,7 +81,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('second').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('second')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.secondOptions as dayFormat, index (index)}
|
{#each options.secondOptions as dayFormat, index (index)}
|
||||||
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,13 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="mt-4 text-sm">
|
<div class="mt-4 text-sm">
|
||||||
<h4>{$t('other_variables').toUpperCase()}</h4>
|
<h4 class="uppercase">{$t('other_variables')}</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="p-4 mt-2 text-xs bg-gray-200 rounded-lg dark:bg-gray-700 dark:text-immich-dark-fg">
|
<div class="p-4 mt-2 text-xs bg-gray-200 rounded-lg dark:bg-gray-700 dark:text-immich-dark-fg">
|
||||||
<div class="flex gap-[50px]">
|
<div class="flex gap-[50px]">
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('filename').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('filename')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>{`{{filename}}`} - IMG_123</li>
|
<li>{`{{filename}}`} - IMG_123</li>
|
||||||
<li>{`{{ext}}`} - jpg</li>
|
<li>{`{{ext}}`} - jpg</li>
|
||||||
|
|
@ -17,14 +17,14 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('filetype').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('filetype')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>{`{{filetype}}`} - VID or IMG</li>
|
<li>{`{{filetype}}`} - VID or IMG</li>
|
||||||
<li>{`{{filetypefull}}`} - VIDEO or IMAGE</li>
|
<li>{`{{filetypefull}}`} - VIDEO or IMAGE</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary uppercase">{$t('other').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('other')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>{`{{assetId}}`} - Asset ID</li>
|
<li>{`{{assetId}}`} - Asset ID</li>
|
||||||
<li>{`{{assetIdShort}}`} - Asset ID (last 12 characters)</li>
|
<li>{`{{assetIdShort}}`} - Asset ID (last 12 characters)</li>
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
{#if isOwner && !authManager.isSharedLink}
|
{#if isOwner && !authManager.isSharedLink}
|
||||||
<section class="px-4 mt-4">
|
<section class="px-4 mt-4">
|
||||||
<div class="flex h-10 w-full items-center justify-between text-sm">
|
<div class="flex h-10 w-full items-center justify-between text-sm">
|
||||||
<h2>{$t('tags').toUpperCase()}</h2>
|
<h2 class="uppercase">{$t('tags')}</h2>
|
||||||
</div>
|
</div>
|
||||||
<section class="flex flex-wrap pt-2 gap-1" data-testid="detail-panel-tags">
|
<section class="flex flex-wrap pt-2 gap-1" data-testid="detail-panel-tags">
|
||||||
{#each tags as tag (tag.id)}
|
{#each tags as tag (tag.id)}
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,7 @@
|
||||||
{#if !authManager.isSharedLink && isOwner}
|
{#if !authManager.isSharedLink && isOwner}
|
||||||
<section class="px-4 pt-4 text-sm">
|
<section class="px-4 pt-4 text-sm">
|
||||||
<div class="flex h-10 w-full items-center justify-between">
|
<div class="flex h-10 w-full items-center justify-between">
|
||||||
<h2>{$t('people').toUpperCase()}</h2>
|
<h2 class="uppercase">{$t('people')}</h2>
|
||||||
<div class="flex gap-2 items-center">
|
<div class="flex gap-2 items-center">
|
||||||
{#if people.some((person) => person.isHidden)}
|
{#if people.some((person) => person.isHidden)}
|
||||||
<IconButton
|
<IconButton
|
||||||
|
|
@ -269,10 +269,10 @@
|
||||||
<div class="px-4 py-4">
|
<div class="px-4 py-4">
|
||||||
{#if asset.exifInfo}
|
{#if asset.exifInfo}
|
||||||
<div class="flex h-10 w-full items-center justify-between text-sm">
|
<div class="flex h-10 w-full items-center justify-between text-sm">
|
||||||
<h2>{$t('details').toUpperCase()}</h2>
|
<h2 class="uppercase">{$t('details')}</h2>
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<p class="text-sm">{$t('no_exif_info_available').toUpperCase()}</p>
|
<p class="uppercase text-sm">{$t('no_exif_info_available')}</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if dateTime}
|
{#if dateTime}
|
||||||
|
|
@ -503,7 +503,7 @@
|
||||||
|
|
||||||
{#if currentAlbum && currentAlbum.albumUsers.length > 0 && asset.owner}
|
{#if currentAlbum && currentAlbum.albumUsers.length > 0 && asset.owner}
|
||||||
<section class="px-6 dark:text-immich-dark-fg mt-4">
|
<section class="px-6 dark:text-immich-dark-fg mt-4">
|
||||||
<p class="text-sm">{$t('shared_by').toUpperCase()}</p>
|
<p class="uppercase text-sm">{$t('shared_by')}</p>
|
||||||
<div class="flex gap-4 pt-4">
|
<div class="flex gap-4 pt-4">
|
||||||
<div>
|
<div>
|
||||||
<UserAvatar user={asset.owner} size="md" />
|
<UserAvatar user={asset.owner} size="md" />
|
||||||
|
|
@ -520,7 +520,7 @@
|
||||||
|
|
||||||
{#if albums.length > 0}
|
{#if albums.length > 0}
|
||||||
<section class="px-6 pt-6 dark:text-immich-dark-fg">
|
<section class="px-6 pt-6 dark:text-immich-dark-fg">
|
||||||
<p class="pb-4 text-sm">{$t('appears_in').toUpperCase()}</p>
|
<p class="uppercase pb-4 text-sm">{$t('appears_in')}</p>
|
||||||
{#each albums as album (album.id)}
|
{#each albums as album (album.id)}
|
||||||
<a href="{AppRoute.ALBUMS}/{album.id}">
|
<a href="{AppRoute.ALBUMS}/{album.id}">
|
||||||
<div class="flex gap-4 pt-2 hover:cursor-pointer items-center">
|
<div class="flex gap-4 pt-2 hover:cursor-pointer items-center">
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
transition:fly={{ x: -100, duration: 350 }}
|
transition:fly={{ x: -100, duration: 350 }}
|
||||||
class="fixed bottom-10 start-2 max-h-[270px] w-[315px] rounded-2xl border p-4 text-sm shadow-sm bg-light"
|
class="fixed bottom-10 start-2 max-h-[270px] w-[315px] rounded-2xl border p-4 text-sm shadow-sm bg-light"
|
||||||
>
|
>
|
||||||
<p class="mb-2 text-xs text-gray-500">{$t('downloading').toUpperCase()}</p>
|
<p class="uppercase mb-2 text-xs text-gray-500">{$t('downloading')}</p>
|
||||||
<div class="my-2 mb-2 flex max-h-[200px] flex-col overflow-y-auto text-sm">
|
<div class="my-2 mb-2 flex max-h-[200px] flex-col overflow-y-auto text-sm">
|
||||||
{#each Object.keys(downloadManager.assets) as downloadKey (downloadKey)}
|
{#each Object.keys(downloadManager.assets) as downloadKey (downloadKey)}
|
||||||
{@const download = downloadManager.assets[downloadKey]}
|
{@const download = downloadManager.assets[downloadKey]}
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,7 @@
|
||||||
|
|
||||||
<div class="mt-3 px-4 py-4">
|
<div class="mt-3 px-4 py-4">
|
||||||
<div class="flex h-10 w-full items-center justify-between text-sm">
|
<div class="flex h-10 w-full items-center justify-between text-sm">
|
||||||
<h2>{$t('editor_crop_tool_h2_aspect_ratios').toUpperCase()}</h2>
|
<h2 class="uppercase">{$t('editor_crop_tool_h2_aspect_ratios')}</h2>
|
||||||
</div>
|
</div>
|
||||||
{#each sizesRows as sizesRow, index (index)}
|
{#each sizesRows as sizesRow, index (index)}
|
||||||
<ul class="flex-wrap flex-row flex gap-x-6 py-2 justify-evenly">
|
<ul class="flex-wrap flex-row flex gap-x-6 py-2 justify-evenly">
|
||||||
|
|
@ -145,7 +145,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
{/each}
|
{/each}
|
||||||
<div class="flex h-10 w-full items-center justify-between text-sm">
|
<div class="flex h-10 w-full items-center justify-between text-sm">
|
||||||
<h2>{$t('editor_crop_tool_h2_rotation').toUpperCase()}</h2>
|
<h2 class="uppercase">{$t('editor_crop_tool_h2_rotation')}</h2>
|
||||||
</div>
|
</div>
|
||||||
<ul class="flex-wrap flex-row flex gap-x-6 gap-y-4 justify-center">
|
<ul class="flex-wrap flex-row flex gap-x-6 gap-y-4 justify-center">
|
||||||
<li>
|
<li>
|
||||||
|
|
|
||||||
|
|
@ -469,7 +469,7 @@
|
||||||
|
|
||||||
{#if current.previousMemory}
|
{#if current.previousMemory}
|
||||||
<div class="absolute bottom-4 end-4 text-start text-white">
|
<div class="absolute bottom-4 end-4 text-start text-white">
|
||||||
<p class="text-xs font-semibold text-gray-200">{$t('previous').toUpperCase()}</p>
|
<p class="uppercase text-xs font-semibold text-gray-200">{$t('previous')}</p>
|
||||||
<p class="text-xl">{$memoryLaneTitle(current.previousMemory)}</p>
|
<p class="text-xl">{$memoryLaneTitle(current.previousMemory)}</p>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
@ -618,7 +618,7 @@
|
||||||
|
|
||||||
{#if current.nextMemory}
|
{#if current.nextMemory}
|
||||||
<div class="absolute bottom-4 start-4 text-start text-white">
|
<div class="absolute bottom-4 start-4 text-start text-white">
|
||||||
<p class="text-xs font-semibold text-gray-200">{$t('up_next').toUpperCase()}</p>
|
<p class="uppercase text-xs font-semibold text-gray-200">{$t('up_next')}</p>
|
||||||
<p class="text-xl">{$memoryLaneTitle(current.nextMemory)}</p>
|
<p class="text-xl">{$memoryLaneTitle(current.nextMemory)}</p>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
||||||
|
|
@ -40,8 +40,8 @@
|
||||||
<Icon path={icon} size="30" class="text-immich-primary dark:text-immich-dark-primary" />
|
<Icon path={icon} size="30" class="text-immich-primary dark:text-immich-dark-primary" />
|
||||||
{/if}
|
{/if}
|
||||||
{#if title}
|
{#if title}
|
||||||
<p class="text-xl text-immich-primary dark:text-immich-dark-primary">
|
<p class="uppercase text-xl text-immich-primary dark:text-immich-dark-primary">
|
||||||
{title.toUpperCase()}
|
{title}
|
||||||
</p>
|
</p>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
class="flex flex-col place-items-center place-content-center justify-around h-full w-full text-immich-primary"
|
class="flex flex-col place-items-center place-content-center justify-around h-full w-full text-immich-primary"
|
||||||
>
|
>
|
||||||
<Icon path={sunPath} viewBox={sunViewBox} size="96" />
|
<Icon path={sunPath} viewBox={sunViewBox} size="96" />
|
||||||
<p class="font-semibold text-4xl">{$t('light').toUpperCase()}</p>
|
<p class="uppercase font-semibold text-4xl">{$t('light')}</p>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
class="flex flex-col place-items-center place-content-center justify-around h-full w-full text-immich-dark-primary"
|
class="flex flex-col place-items-center place-content-center justify-around h-full w-full text-immich-dark-primary"
|
||||||
>
|
>
|
||||||
<Icon path={moonPath} viewBox={moonViewBox} size="96" />
|
<Icon path={moonPath} viewBox={moonViewBox} size="96" />
|
||||||
<p class="font-semibold text-4xl">{$t('dark').toUpperCase()}</p>
|
<p class="uppercase font-semibold text-4xl">{$t('dark')}</p>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div id="camera-selection">
|
<div id="camera-selection">
|
||||||
<p class="immich-form-label">{$t('camera').toUpperCase()}</p>
|
<p class="uppercase immich-form-label">{$t('camera')}</p>
|
||||||
|
|
||||||
<div class="grid grid-auto-fit-40 gap-5 mt-1">
|
<div class="grid grid-auto-fit-40 gap-5 mt-1">
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
<div id="date-range-selection" class="grid grid-auto-fit-40 gap-5">
|
<div id="date-range-selection" class="grid grid-auto-fit-40 gap-5">
|
||||||
<label class="immich-form-label" for="start-date">
|
<label class="immich-form-label" for="start-date">
|
||||||
<span>{$t('start_date').toUpperCase()}</span>
|
<span class="uppercase">{$t('start_date')}</span>
|
||||||
<DateInput
|
<DateInput
|
||||||
class="immich-form-input w-full mt-1 hover:cursor-pointer"
|
class="immich-form-input w-full mt-1 hover:cursor-pointer"
|
||||||
type="date"
|
type="date"
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label class="immich-form-label" for="end-date">
|
<label class="immich-form-label" for="end-date">
|
||||||
<span>{$t('end_date').toUpperCase()}</span>
|
<span class="uppercase">{$t('end_date')}</span>
|
||||||
<DateInput
|
<DateInput
|
||||||
class="immich-form-input w-full mt-1 hover:cursor-pointer"
|
class="immich-form-input w-full mt-1 hover:cursor-pointer"
|
||||||
type="date"
|
type="date"
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
<div id="display-options-selection">
|
<div id="display-options-selection">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend class="immich-form-label">{$t('display_options').toUpperCase()}</legend>
|
<legend class="uppercase immich-form-label">{$t('display_options')}</legend>
|
||||||
<div class="flex flex-wrap gap-x-5 gap-y-2 mt-1">
|
<div class="flex flex-wrap gap-x-5 gap-y-2 mt-1">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<Checkbox id="not-in-album-checkbox" size="tiny" bind:checked={filters.isNotInAlbum} />
|
<Checkbox id="not-in-album-checkbox" size="tiny" bind:checked={filters.isNotInAlbum} />
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@
|
||||||
class="absolute w-full rounded-b-3xl border-2 border-t-0 border-gray-200 bg-white pb-5 shadow-2xl transition-all dark:border-gray-700 dark:bg-immich-dark-gray dark:text-gray-300 z-1"
|
class="absolute w-full rounded-b-3xl border-2 border-t-0 border-gray-200 bg-white pb-5 shadow-2xl transition-all dark:border-gray-700 dark:bg-immich-dark-gray dark:text-gray-300 z-1"
|
||||||
>
|
>
|
||||||
<div class="flex items-center justify-between px-5 pt-5 text-xs">
|
<div class="flex items-center justify-between px-5 pt-5 text-xs">
|
||||||
<p class="py-2" aria-hidden={true}>{$t('recent_searches').toUpperCase()}</p>
|
<p class="uppercase py-2" aria-hidden={true}>{$t('recent_searches')}</p>
|
||||||
{#if showClearAll}
|
{#if showClearAll}
|
||||||
<button
|
<button
|
||||||
id={getId(0)}
|
id={getId(0)}
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div id="location-selection">
|
<div id="location-selection">
|
||||||
<p class="immich-form-label">{$t('place').toUpperCase()}</p>
|
<p class="uppercase immich-form-label">{$t('place')}</p>
|
||||||
|
|
||||||
<div class="grid grid-auto-fit-40 gap-5 mt-1">
|
<div class="grid grid-auto-fit-40 gap-5 mt-1">
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
<div id="media-type-selection">
|
<div id="media-type-selection">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend class="immich-form-label">{$t('media_type').toUpperCase()}</legend>
|
<legend class="uppercase immich-form-label">{$t('media_type')}</legend>
|
||||||
<div class="flex flex-wrap gap-x-5 gap-y-2 mt-1">
|
<div class="flex flex-wrap gap-x-5 gap-y-2 mt-1">
|
||||||
<RadioButton name="media-type" id="type-all" bind:group={filteredMedia} label={$t('all')} value={MediaType.All} />
|
<RadioButton name="media-type" id="type-all" bind:group={filteredMedia} label={$t('all')} value={MediaType.All} />
|
||||||
<RadioButton
|
<RadioButton
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@
|
||||||
|
|
||||||
<div id="people-selection" class="max-h-60 -mb-4 overflow-y-auto immich-scrollbar">
|
<div id="people-selection" class="max-h-60 -mb-4 overflow-y-auto immich-scrollbar">
|
||||||
<div class="flex items-center w-full justify-between gap-6">
|
<div class="flex items-center w-full justify-between gap-6">
|
||||||
<p class="immich-form-label py-3">{$t('people').toUpperCase()}</p>
|
<p class="uppercase immich-form-label py-3">{$t('people')}</p>
|
||||||
<SearchBar bind:name placeholder={$t('filter_people')} showLoadingSpinner={false} />
|
<SearchBar bind:name placeholder={$t('filter_people')} showLoadingSpinner={false} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,12 +20,14 @@
|
||||||
|
|
||||||
<div class="grid grid-auto-fit-40 gap-5">
|
<div class="grid grid-auto-fit-40 gap-5">
|
||||||
<label class="immich-form-label" for="start-date">
|
<label class="immich-form-label" for="start-date">
|
||||||
|
<div class="[&_label]:uppercase">
|
||||||
<Combobox
|
<Combobox
|
||||||
label={$t('rating').toUpperCase()}
|
label={$t('rating')}
|
||||||
placeholder={$t('search_rating')}
|
placeholder={$t('search_rating')}
|
||||||
{options}
|
{options}
|
||||||
selectedOption={rating === undefined ? undefined : options[rating]}
|
selectedOption={rating === undefined ? undefined : options[rating]}
|
||||||
onSelect={(r) => (rating = r === undefined ? undefined : Number.parseInt(r.value))}
|
onSelect={(r) => (rating = r === undefined ? undefined : Number.parseInt(r.value))}
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -45,16 +45,18 @@
|
||||||
<div id="location-selection">
|
<div id="location-selection">
|
||||||
<form autocomplete="off" id="create-tag-form">
|
<form autocomplete="off" id="create-tag-form">
|
||||||
<div class="my-4 flex flex-col gap-2">
|
<div class="my-4 flex flex-col gap-2">
|
||||||
|
<div class="[&_label]:uppercase">
|
||||||
<Combobox
|
<Combobox
|
||||||
disabled={selectedTags === null}
|
disabled={selectedTags === null}
|
||||||
onSelect={handleSelect}
|
onSelect={handleSelect}
|
||||||
label={$t('tags').toUpperCase()}
|
label={$t('tags')}
|
||||||
defaultFirstOption
|
defaultFirstOption
|
||||||
options={allTags.map((tag) => ({ id: tag.id, label: tag.value, value: tag.id }))}
|
options={allTags.map((tag) => ({ id: tag.id, label: tag.value, value: tag.id }))}
|
||||||
bind:selectedOption
|
bind:selectedOption
|
||||||
placeholder={$t('search_tags')}
|
placeholder={$t('search_tags')}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<Checkbox
|
<Checkbox
|
||||||
id="untagged-checkbox"
|
id="untagged-checkbox"
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@
|
||||||
|
|
||||||
<div class="mb-4 w-full">
|
<div class="mb-4 w-full">
|
||||||
<div class="flex place-items-center gap-1">
|
<div class="flex place-items-center gap-1">
|
||||||
<label class="font-medium text-immich-primary dark:text-immich-dark-primary text-sm min-h-6" for={label}
|
<label class="font-medium text-immich-primary dark:text-immich-dark-primary text-sm min-h-6 uppercase" for={label}
|
||||||
>{label}</label
|
>{label}</label
|
||||||
>
|
>
|
||||||
{#if required}
|
{#if required}
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@
|
||||||
bind:isSelected={isSharingSelected}
|
bind:isSelected={isSharingSelected}
|
||||||
></SideBarLink>
|
></SideBarLink>
|
||||||
|
|
||||||
<p class="text-xs p-6 dark:text-immich-dark-fg">{$t('library').toUpperCase()}</p>
|
<p class="text-xs p-6 dark:text-immich-dark-fg uppercase">{$t('library')}</p>
|
||||||
|
|
||||||
<SideBarLink
|
<SideBarLink
|
||||||
title={$t('favorites')}
|
title={$t('favorites')}
|
||||||
|
|
|
||||||
|
|
@ -93,14 +93,14 @@
|
||||||
{/if}
|
{/if}
|
||||||
{#if showFallback}
|
{#if showFallback}
|
||||||
<span
|
<span
|
||||||
class="flex h-full w-full select-none items-center justify-center font-medium"
|
class="uppercase flex h-full w-full select-none items-center justify-center font-medium"
|
||||||
class:text-xs={size === 'sm'}
|
class:text-xs={size === 'sm'}
|
||||||
class:text-lg={size === 'lg'}
|
class:text-lg={size === 'lg'}
|
||||||
class:text-xl={size === 'xl'}
|
class:text-xl={size === 'xl'}
|
||||||
class:text-2xl={size === 'xxl'}
|
class:text-2xl={size === 'xxl'}
|
||||||
class:text-3xl={size === 'xxxl'}
|
class:text-3xl={size === 'xxxl'}
|
||||||
>
|
>
|
||||||
{(user.name[0] || '').toUpperCase()}
|
{user.name[0] || ''}
|
||||||
</span>
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
</figure>
|
</figure>
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if link.showMetadata}
|
{#if link.showMetadata}
|
||||||
<Badge rounded="full"><span class="text-xs px-1">{$t('exif').toUpperCase()}</span></Badge>
|
<Badge rounded="full"><span class="uppercase text-xs px-1">{$t('exif')}</span></Badge>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if link.password}
|
{#if link.password}
|
||||||
|
|
|
||||||
|
|
@ -56,16 +56,16 @@
|
||||||
<section class="my-4">
|
<section class="my-4">
|
||||||
{#if currentDevice}
|
{#if currentDevice}
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<h3 class="mb-2 text-xs font-medium text-immich-primary dark:text-immich-dark-primary">
|
<h3 class="uppercase mb-2 text-xs font-medium text-immich-primary dark:text-immich-dark-primary">
|
||||||
{$t('current_device').toUpperCase()}
|
{$t('current_device')}
|
||||||
</h3>
|
</h3>
|
||||||
<DeviceCard device={currentDevice} />
|
<DeviceCard device={currentDevice} />
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{#if otherDevices.length > 0}
|
{#if otherDevices.length > 0}
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<h3 class="mb-2 text-xs font-medium text-immich-primary dark:text-immich-dark-primary">
|
<h3 class="uppercase mb-2 text-xs font-medium text-immich-primary dark:text-immich-dark-primary">
|
||||||
{$t('other_devices').toUpperCase()}
|
{$t('other_devices')}
|
||||||
</h3>
|
</h3>
|
||||||
{#each otherDevices as device, index (device.id)}
|
{#each otherDevices as device, index (device.id)}
|
||||||
<DeviceCard {device} onDelete={() => handleDelete(device)} />
|
<DeviceCard {device} onDelete={() => handleDelete(device)} />
|
||||||
|
|
@ -74,8 +74,8 @@
|
||||||
{/if}
|
{/if}
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
<h3 class="mb-2 text-xs font-medium text-immich-primary dark:text-immich-dark-primary">
|
<h3 class="uppercase mb-2 text-xs font-medium text-immich-primary dark:text-immich-dark-primary">
|
||||||
{$t('log_out_all_devices').toUpperCase()}
|
{$t('log_out_all_devices')}
|
||||||
</h3>
|
</h3>
|
||||||
<div class="flex justify-end">
|
<div class="flex justify-end">
|
||||||
<Button shape="round" color="danger" size="small" onclick={handleDeleteAll}>{$t('log_out_all_devices')}</Button>
|
<Button shape="round" color="danger" size="small" onclick={handleDeleteAll}>{$t('log_out_all_devices')}</Button>
|
||||||
|
|
|
||||||
|
|
@ -158,8 +158,8 @@
|
||||||
<!-- I am sharing my assets with this user -->
|
<!-- I am sharing my assets with this user -->
|
||||||
{#if partner.sharedByMe}
|
{#if partner.sharedByMe}
|
||||||
<hr class="my-4 border border-gray-200 dark:border-gray-700" />
|
<hr class="my-4 border border-gray-200 dark:border-gray-700" />
|
||||||
<p class="text-xs font-medium my-4">
|
<p class="uppercase text-xs font-medium my-4">
|
||||||
{$t('shared_with_partner', { values: { partner: partner.user.name } }).toUpperCase()}
|
{$t('shared_with_partner', { values: { partner: partner.user.name } })}
|
||||||
</p>
|
</p>
|
||||||
<p class="text-md">{$t('partner_can_access', { values: { partner: partner.user.name } })}</p>
|
<p class="text-md">{$t('partner_can_access', { values: { partner: partner.user.name } })}</p>
|
||||||
<ul class="text-sm">
|
<ul class="text-sm">
|
||||||
|
|
@ -177,8 +177,8 @@
|
||||||
<!-- this user is sharing assets with me -->
|
<!-- this user is sharing assets with me -->
|
||||||
{#if partner.sharedWithMe}
|
{#if partner.sharedWithMe}
|
||||||
<hr class="my-4 border border-gray-200 dark:border-gray-700" />
|
<hr class="my-4 border border-gray-200 dark:border-gray-700" />
|
||||||
<p class="text-xs font-medium my-4">
|
<p class="uppercase text-xs font-medium my-4">
|
||||||
{$t('shared_from_partner', { values: { partner: partner.user.name } }).toUpperCase()}
|
{$t('shared_from_partner', { values: { partner: partner.user.name } })}
|
||||||
</p>
|
</p>
|
||||||
<SettingSwitch
|
<SettingSwitch
|
||||||
title={$t('show_in_timeline')}
|
title={$t('show_in_timeline')}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="border border-gray-300 dark:border-immich-dark-gray rounded-3xl pt-1 pb-6 dark:text-white">
|
<div class="border border-gray-300 dark:border-immich-dark-gray rounded-3xl pt-1 pb-6 dark:text-white">
|
||||||
<p class="text-xs font-medium p-4">{$t('organize_your_library').toUpperCase()}</p>
|
<p class="uppercase text-xs font-medium p-4">{$t('organize_your_library')}</p>
|
||||||
|
|
||||||
{#each links as link (link.href)}
|
{#each links as link (link.href)}
|
||||||
<a href={link.href} class="w-full hover:bg-gray-100 dark:hover:bg-immich-dark-gray flex items-center gap-4 p-4">
|
<a href={link.href} class="w-full hover:bg-gray-100 dark:hover:bg-immich-dark-gray flex items-center gap-4 p-4">
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<div class="items-center justify-center">
|
<div class="items-center justify-center">
|
||||||
<div class="py-2">
|
<div class="py-2">
|
||||||
<h2 class="text-gray text-sm mb-2">{$t('settings').toUpperCase()}</h2>
|
<h2 class="uppercase text-gray text-sm mb-2">{$t('settings')}</h2>
|
||||||
<div class="grid p-2 gap-y-2">
|
<div class="grid p-2 gap-y-2">
|
||||||
{#if order}
|
{#if order}
|
||||||
<SettingDropdown
|
<SettingDropdown
|
||||||
|
|
@ -138,7 +138,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="py-2">
|
<div class="py-2">
|
||||||
<div class="text-gray text-sm mb-3">{$t('people').toUpperCase()}</div>
|
<div class="uppercase text-gray text-sm mb-3">{$t('people')}</div>
|
||||||
<div class="p-2">
|
<div class="p-2">
|
||||||
<button type="button" class="flex items-center gap-2" onclick={() => onClose({ action: 'shareUser' })}>
|
<button type="button" class="flex items-center gap-2" onclick={() => onClose({ action: 'shareUser' })}>
|
||||||
<div class="rounded-full w-10 h-10 border border-gray-500 flex items-center justify-center">
|
<div class="rounded-full w-10 h-10 border border-gray-500 flex items-center justify-center">
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
<div class="my-4 flex flex-col gap-2">
|
<div class="my-4 flex flex-col gap-2">
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('tag').toUpperCase()}
|
label={$t('tag')}
|
||||||
bind:value={tagValue}
|
bind:value={tagValue}
|
||||||
required={true}
|
required={true}
|
||||||
autofocus={true}
|
autofocus={true}
|
||||||
|
|
|
||||||
|
|
@ -40,11 +40,7 @@
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<form onsubmit={handleEdit} autocomplete="off" id="edit-tag-form">
|
<form onsubmit={handleEdit} autocomplete="off" id="edit-tag-form">
|
||||||
<div class="my-4 flex flex-col gap-2">
|
<div class="my-4 flex flex-col gap-2">
|
||||||
<SettingInputField
|
<SettingInputField inputType={SettingInputFieldType.COLOR} label={$t('color')} bind:value={tagColor} />
|
||||||
inputType={SettingInputFieldType.COLOR}
|
|
||||||
label={$t('color').toUpperCase()}
|
|
||||||
bind:value={tagColor}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
|
|
|
||||||
|
|
@ -529,7 +529,7 @@
|
||||||
{#if album.assetCount === 0}
|
{#if album.assetCount === 0}
|
||||||
<section id="empty-album" class=" mt-[200px] flex place-content-center place-items-center">
|
<section id="empty-album" class=" mt-[200px] flex place-content-center place-items-center">
|
||||||
<div class="w-[300px]">
|
<div class="w-[300px]">
|
||||||
<p class="text-xs dark:text-immich-dark-fg">{$t('add_photos').toUpperCase()}</p>
|
<p class="uppercase text-xs dark:text-immich-dark-fg">{$t('add_photos')}</p>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onclick={() => (viewMode = AlbumPageViewMode.SELECT_ASSETS)}
|
onclick={() => (viewMode = AlbumPageViewMode.SELECT_ASSETS)}
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@
|
||||||
<Sidebar>
|
<Sidebar>
|
||||||
<SkipLink target={`#${headerId}`} text={$t('skip_to_folders')} breakpoint="md" />
|
<SkipLink target={`#${headerId}`} text={$t('skip_to_folders')} breakpoint="md" />
|
||||||
<section>
|
<section>
|
||||||
<div class="text-xs ps-4 mb-2 dark:text-white">{$t('explorer').toUpperCase()}</div>
|
<div class="uppercase text-xs ps-4 mb-2 dark:text-white">{$t('explorer')}</div>
|
||||||
<div class="h-full">
|
<div class="h-full">
|
||||||
<TreeItems
|
<TreeItems
|
||||||
icons={{ default: mdiFolderOutline, active: mdiFolder }}
|
icons={{ default: mdiFolderOutline, active: mdiFolder }}
|
||||||
|
|
|
||||||
|
|
@ -368,11 +368,11 @@
|
||||||
>
|
>
|
||||||
{#if searchResultAlbums.length > 0}
|
{#if searchResultAlbums.length > 0}
|
||||||
<section>
|
<section>
|
||||||
<div class="ms-6 text-4xl font-medium text-black/70 dark:text-white/80">{$t('albums').toUpperCase()}</div>
|
<div class="uppercase ms-6 text-4xl font-medium text-black/70 dark:text-white/80">{$t('albums')}</div>
|
||||||
<AlbumCardGroup albums={searchResultAlbums} showDateRange showItemCount />
|
<AlbumCardGroup albums={searchResultAlbums} showDateRange showItemCount />
|
||||||
|
|
||||||
<div class="m-6 text-4xl font-medium text-black/70 dark:text-white/80">
|
<div class="uppercase m-6 text-4xl font-medium text-black/70 dark:text-white/80">
|
||||||
{$t('photos_and_videos').toUpperCase()}
|
{$t('photos_and_videos')}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@
|
||||||
<Sidebar>
|
<Sidebar>
|
||||||
<SkipLink target={`#${headerId}`} text={$t('skip_to_tags')} breakpoint="md" />
|
<SkipLink target={`#${headerId}`} text={$t('skip_to_tags')} breakpoint="md" />
|
||||||
<section>
|
<section>
|
||||||
<div class="text-xs ps-4 mb-2 dark:text-white">{$t('explorer').toUpperCase()}</div>
|
<div class="uppercase text-xs ps-4 mb-2 dark:text-white">{$t('explorer')}</div>
|
||||||
<div class="h-full">
|
<div class="h-full">
|
||||||
<TreeItems icons={{ default: mdiTag, active: mdiTag }} {tree} active={tag.path} {getLink} />
|
<TreeItems icons={{ default: mdiTag, active: mdiTag }} {tree} active={tag.path} {getLink} />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -242,14 +242,9 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-span-full">
|
<div class="col-span-full">
|
||||||
<div class="flex flex-col lg:flex-row gap-4 w-full">
|
<div class="flex flex-col lg:flex-row gap-4 w-full">
|
||||||
<StatsCard icon={mdiCameraIris} title={$t('photos').toUpperCase()} value={userStatistics.images} />
|
<StatsCard icon={mdiCameraIris} title={$t('photos')} value={userStatistics.images} />
|
||||||
<StatsCard icon={mdiPlayCircle} title={$t('videos').toUpperCase()} value={userStatistics.videos} />
|
<StatsCard icon={mdiPlayCircle} title={$t('videos')} value={userStatistics.videos} />
|
||||||
<StatsCard
|
<StatsCard icon={mdiChartPie} title={$t('storage')} value={statsUsage} unit={statsUsageUnit} />
|
||||||
icon={mdiChartPie}
|
|
||||||
title={$t('storage').toUpperCase()}
|
|
||||||
value={statsUsage}
|
|
||||||
unit={statsUsageUnit}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|
|
||||||
|
|
@ -156,9 +156,9 @@
|
||||||
<div class="inline-flex w-full items-center justify-center my-4">
|
<div class="inline-flex w-full items-center justify-center my-4">
|
||||||
<hr class="my-4 h-px w-3/4 border-0 bg-gray-200 dark:bg-gray-600" />
|
<hr class="my-4 h-px w-3/4 border-0 bg-gray-200 dark:bg-gray-600" />
|
||||||
<span
|
<span
|
||||||
class="absolute start-1/2 -translate-x-1/2 bg-gray-50 px-3 font-medium text-gray-900 dark:bg-neutral-900 dark:text-white"
|
class="absolute start-1/2 -translate-x-1/2 bg-gray-50 px-3 font-medium text-gray-900 dark:bg-neutral-900 dark:text-white uppercase"
|
||||||
>
|
>
|
||||||
{$t('or').toUpperCase()}
|
{$t('or')}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue