+
Changes to environment variables require a redeploy
or reboot of local dev server
diff --git a/src/photo/ViewSwitcher.tsx b/src/site/ViewSwitcher.tsx
similarity index 91%
rename from src/photo/ViewSwitcher.tsx
rename to src/site/ViewSwitcher.tsx
index 2f82744f..02a7969b 100644
--- a/src/photo/ViewSwitcher.tsx
+++ b/src/site/ViewSwitcher.tsx
@@ -1,7 +1,7 @@
import Switcher from '@/components/Switcher';
import SwitcherItem from '@/components/SwitcherItem';
-import IconFullFrame from '@/icons/IconFullFrame';
-import IconGrid from '@/icons/IconGrid';
+import IconFullFrame from '@/site/IconFullFrame';
+import IconGrid from '@/site/IconGrid';
import { PATH_GRID } from '@/site/paths';
import { BiLockAlt } from 'react-icons/bi';
diff --git a/src/site/globals.css b/src/site/globals.css
index 5118a39d..71026ab4 100644
--- a/src/site/globals.css
+++ b/src/site/globals.css
@@ -14,7 +14,7 @@
label {
@apply
font-sans font-medium block uppercase text-xs
- text-gray-500 dark:text-gray-400
+ text-medium
tracking-wider
}
button, .button,
@@ -46,7 +46,7 @@
}
input[type=file] {
@apply
- block font-mono w-full text-gray-500 dark:text-gray-400
+ block font-mono w-full text-medium
file:bg-white dark:file:bg-gray-950
file:mr-2 file:my-2 file:px-4 file:py-1.5 file:rounded-md
file:border-solid file:border
@@ -95,7 +95,7 @@
}
button.primary.disabled, .button.primary.disabled {
@apply
- text-extra-dim
+ text-medium
}
/* Toasts */
.toaster [data-sonner-toast] {
@@ -112,14 +112,14 @@
@apply
text-gray-100 dark:text-gray-900
}
+ .text-medium {
+ @apply
+ text-gray-500 dark:text-gray-400
+ }
.text-dim {
@apply
text-gray-400 dark:text-gray-500
}
- .text-extra-dim {
- @apply
- text-gray-500 dark:text-gray-400
- }
.text-icon {
@apply
text-gray-800 dark:text-gray-200
diff --git a/src/vendors/fujifilm/PhotoFujifilmSimulation.tsx b/src/vendors/fujifilm/PhotoFujifilmSimulation.tsx
index 7b20a7d8..4805e9b9 100644
--- a/src/vendors/fujifilm/PhotoFujifilmSimulation.tsx
+++ b/src/vendors/fujifilm/PhotoFujifilmSimulation.tsx
@@ -1,44 +1,30 @@
/* eslint-disable max-len */
-import { FujifilmSimulation, getLabelForFilmSimulation } from '@/vendors/fujifilm';
+import { cc } from '@/utility/css';
+import {
+ FujifilmSimulation,
+ getLabelForFilmSimulation,
+} from '@/vendors/fujifilm';
+import PhotoFujifilmSimulationIcon from './PhotoFujifilmSimulationIcon';
-export default function PhotoFilmSimulation({
+export default function PhotoFujifilmSimulation({
simulation,
}: {
simulation: FujifilmSimulation;
}) {
- const contentForSimulation = () => {
- switch (simulation) {
- default:
- return (
- <>
-
-
-
-
-
-
-
-
-
- >
- );
- }
- };
-
+ const { small, medium, large } = getLabelForFilmSimulation(simulation);
return (
-
+
+
+
+ {small}
+ {medium}
);
}
diff --git a/src/vendors/fujifilm/PhotoFujifilmSimulationIcon.tsx b/src/vendors/fujifilm/PhotoFujifilmSimulationIcon.tsx
new file mode 100644
index 00000000..ebb5977c
--- /dev/null
+++ b/src/vendors/fujifilm/PhotoFujifilmSimulationIcon.tsx
@@ -0,0 +1,142 @@
+/* eslint-disable max-len */
+import {
+ FujifilmSimulation,
+ getLabelForFilmSimulation,
+} from '@/vendors/fujifilm';
+
+export default function PhotoFujifilmSimulationIcon({
+ simulation,
+}: {
+ simulation: FujifilmSimulation;
+}) {
+ const contentForSimulation = (): JSX.Element => {
+ switch (simulation) {
+ case 'monochrome': return <>
+
+
+ >;
+ case 'monochrome-ye': return <>
+
+
+
+ >;
+ case 'monochrome-r': return <>
+
+
+
+ >;
+ case 'monochrome-g': return <>
+
+
+
+ >;
+ case 'sepia': return <>
+
+
+
+ >;
+ case 'acros': return <>
+
+
+ >;
+ case 'acros-ye': return <>
+
+
+
+ >;
+ case 'acros-r': return <>
+
+
+
+ >;
+ case 'acros-g': return <>
+
+
+
+ >;
+ case 'provia': return <>
+
+
+
+ >;
+ case 'portrait': return <>
+
+
+ >;
+ case 'portrait-saturation': return <>
+
+
+
+ >;
+ case 'portrait-skin-tone': return <>
+
+
+ >;
+ case 'portrait-sharpness': return <>
+
+
+
+ >;
+ case 'portrait-ex': return <>
+
+
+
+ >;
+ case 'velvia': return <>
+
+
+ >;
+ case 'pro-neg-std': return <>
+
+
+
+ >;
+ case 'pro-neg-hi': return <>
+
+
+
+ >;
+ case 'classic-chrome': return <>
+
+
+
+ >;
+ case 'eterna': return <>
+
+
+ >;
+ case 'classic-neg': return <>
+
+
+
+ >;
+ case 'eterna-bleach-bypass': return <>
+
+
+
+ >;
+ case 'nostalgic-neg': return <>
+
+
+
+ >;
+ case 'reala': return <>
+
+
+ >;
+ }
+ };
+
+ return (
+
+ );
+}
diff --git a/src/vendors/fujifilm/index.ts b/src/vendors/fujifilm/index.ts
index 9656952d..edef8813 100644
--- a/src/vendors/fujifilm/index.ts
+++ b/src/vendors/fujifilm/index.ts
@@ -86,43 +86,149 @@ const getFujifilmMode = (
}
};
-const FILM_SIMULATION_LABELS: Record
= {
- 'monochrome': 'Monochrome',
- 'monochrome-ye': 'Monochrome + Yellow Filter',
- 'monochrome-r': 'Monochrome + Red Filter',
- 'monochrome-g': 'Monochrome + Green Filter',
- 'sepia': 'Sepia',
- 'acros': 'ACROS',
- 'acros-ye': 'ACROS + Yellow Filter',
- 'acros-r': 'ACROS + Red Filter',
- 'acros-g': 'ACROS + Green Filter',
- 'provia': 'PROVIA / Standard',
- 'portrait': 'Studio Portrait',
- 'portrait-saturation': 'Studio Portrait + Enhanced Saturation',
- 'portrait-skin-tone': 'ASTIA / Soft',
- 'portrait-sharpness': 'Studio Portrait + Enhanced Sharpness',
- 'portrait-ex': 'Studio Portrait Ex',
- 'velvia': 'Velvia / Vivid',
- 'pro-neg-std': 'PRO Neg. Std',
- 'pro-neg-hi': 'PRO Neg. Hi',
- 'classic-chrome': 'Classic Chrome',
- 'eterna': 'ETERNA / Cinema',
- 'classic-neg': 'Classic Neg.',
- 'eterna-bleach-bypass': 'ETERNA Bleach Bypass',
- 'nostalgic-neg': 'Nostalgic Neg.',
- 'reala': 'REALA ACE',
+interface FujifilmSimulationLabel {
+ small: string
+ medium: string
+ large: string
+}
+
+const FILM_SIMULATION_LABELS: Record<
+ FujifilmSimulation,
+ FujifilmSimulationLabel
+> = {
+ 'monochrome': {
+ small: 'Monochrome',
+ medium: 'Monochrome',
+ large: 'Monochrome',
+ },
+ 'monochrome-ye': {
+ small: 'Monochrome+Ye',
+ medium: 'Monochrome+Ye',
+ large: 'Monochrome + Yellow Filter',
+ },
+ 'monochrome-r': {
+ small: 'Monochrome+R',
+ medium: 'Monochrome+R',
+ large: 'Monochrome + Red Filter',
+ },
+ 'monochrome-g': {
+ small: 'Monochrome+G',
+ medium: 'Monochrome+G',
+ large: 'Monochrome + Green Filter',
+ },
+ 'sepia': {
+ small: 'Sepia',
+ medium: 'Sepia',
+ large: 'Sepia',
+ },
+ 'acros': {
+ small: 'ACROS',
+ medium: 'ACROS',
+ large: 'ACROS',
+ },
+ 'acros-ye': {
+ small: 'ACROS+Ye',
+ medium: 'ACROS+Ye',
+ large: 'ACROS + Yellow Filter',
+ },
+ 'acros-r': {
+ small: 'ACROS+R',
+ medium: 'ACROS+R',
+ large: 'ACROS + Red Filter',
+ },
+ 'acros-g': {
+ small: 'ACROS+G',
+ medium: 'ACROS+G',
+ large: 'ACROS + Green Filter',
+ },
+ 'provia': {
+ small: 'PROVIA',
+ medium: 'PROVIA/Std',
+ large: 'PROVIA / Standard',
+ },
+ 'portrait': {
+ small: 'Portrait',
+ medium: 'Portrait',
+ large: 'Studio Portrait',
+ },
+ 'portrait-saturation': {
+ small: 'Portrait+Sat.',
+ medium: 'Portrait+Sat.',
+ large: 'Studio Portrait + Enhanced Saturation',
+ },
+ 'portrait-skin-tone': {
+ small: 'ASTIA',
+ medium: 'ASTIA/Soft',
+ large: 'ASTIA / Soft',
+ },
+ 'portrait-sharpness': {
+ small: 'Portrait+Sharp.',
+ medium: 'Portrait+Sharp.',
+ large: 'Studio Portrait + Enhanced Sharpness',
+ },
+ 'portrait-ex': {
+ small: 'Portrait+Ex',
+ medium: 'Portrait+Ex',
+ large: 'Studio Portrait + Ex',
+ },
+ 'velvia': {
+ small: 'Velvia',
+ medium: 'Velvia/Vivid',
+ large: 'Velvia / Vivid',
+ },
+ 'pro-neg-std': {
+ small: 'PRO Neg. Std',
+ medium: 'PRO Neg. Std',
+ large: 'PRO Neg. Std',
+ },
+ 'pro-neg-hi': {
+ small: 'PRO Neg. Hi',
+ medium: 'PRO Neg. Hi',
+ large: 'PRO Neg. Hi',
+ },
+ 'classic-chrome': {
+ small: 'Classic Chrome',
+ medium: 'Classic Chrome',
+ large: 'Classic Chrome',
+ },
+ 'eterna': {
+ small: 'ETERNA',
+ medium: 'ETERNA/Cinema',
+ large: 'ETERNA / Cinema',
+ },
+ 'classic-neg': {
+ small: 'Classic Neg.',
+ medium: 'Classic Neg.',
+ large: 'Classic Neg.',
+ },
+ 'eterna-bleach-bypass': {
+ small: 'ETERNA Bypass',
+ medium: 'ETERNA Bypass',
+ large: 'ETERNA Bleach Bypass',
+ },
+ 'nostalgic-neg': {
+ small: 'Nostalgic Neg.',
+ medium: 'Nostalgic Neg.',
+ large: 'Nostalgic Neg.',
+ },
+ 'reala': {
+ small: 'REALA',
+ medium: 'REALA ACE',
+ large: 'REALA ACE',
+ },
};
export const FILM_SIMULATION_FORM_INPUT_OPTIONS = Object
.entries(FILM_SIMULATION_LABELS)
.map(([value, label]) => (
- { value, label } as { value: FujifilmSimulation, label: string }
+ { value, label: label.large } as
+ { value: FujifilmSimulation, label: string }
))
.sort((a, b) => a.label.localeCompare(b.label));
export const getLabelForFilmSimulation = (
simulation: FujifilmSimulation
-): string =>
+) =>
FILM_SIMULATION_LABELS[simulation];
const parseFujifilmMakerNote = (