feat(panel): collapse the film simulations into a PHOTO STYLE chip

This commit is contained in:
2026-09-11 08:54:38 +07:00
parent 6adf0b5933
commit d66ae3dc59
+33 -18
View File
@@ -20,6 +20,7 @@ type TabId = 'recipes' | 'iq' | 'wb' | 'filters' | 'frame' | 'watermark';
// Choice-group keys that open a strip above the chip row: color chrome groups
// (wb tab) and the D.RANGE selector (iq tab).
type GroupKey =
| 'style'
| 'cx'
| 'cxb'
| 'dr'
@@ -243,8 +244,12 @@ export default function AdjustmentPanel({
const toggleGroup = (g: GroupKey) => {
haptic();
const next = openGroup === g ? null : g;
// Opening an options strip closes any open slider row (single-row rule).
if (next) onOpenParamChange(null);
// Opening an options strip closes any open slider row and the expanded
// recipe strip (single-strip rule).
if (next) {
onOpenParamChange(null);
setShowRecipes(false);
}
setOpenGroup(next);
};
@@ -471,6 +476,23 @@ export default function AdjustmentPanel({
],
onPick: (v) => onUpdateCropRatio(v as CropRatio),
},
// PHOTO STYLE: the eight film simulations, collapsed into one strip chip.
// Its value is the applied sim's id — or '' when a saved recipe is active
// (then the chip reads as "not the startup sim" and glows amber). The label
// carries no value on purpose: the top bar already names the active look.
style: {
label: 'PHOTO STYLE', off: 'sim-provia',
value: FILM_SIMS.some((s) => s.id === currentRecipeId) ? currentRecipeId : '',
options: FILM_SIMS.map((s) => ({ v: s.id, d: s.name })),
onPick: (v) => {
const sim = FILM_SIMS.find((s) => s.id === v);
if (!sim) return;
// Same deliberate switch as the old inline chips: collapse the RECIPES
// strip so it never lingers over the freshly-applied sim.
setShowRecipes(false);
onSelectRecipe(filmSimToRecipe(sim));
},
},
gpsTime: {
label: 'TIME', off: 'ON',
value: gpsWm.showTime === false ? 'OFF' : 'ON',
@@ -490,27 +512,20 @@ export default function AdjustmentPanel({
const chipsRow = (() => {
switch (activeTab) {
case 'recipes': {
// Main row: the six standard film simulations, then the RECIPES toggle
// (expands the user/bundled recipe strip above) and CREATE (quick-input
// modal). Recipes themselves are no longer inline chips here.
// Main row: PHOTO STYLE (the eight film simulations, in a strip of its
// own), then the RECIPES toggle (expands the user/bundled recipe strip
// above) and CREATE (quick-input modal). Recipes themselves are no
// longer inline chips here.
const chips: ChipDef[] = [
...FILM_SIMS.map((s) => ({
key: s.id,
label: s.name,
active: currentRecipeId === s.id,
// Choosing a simulation is a deliberate switch away from the saved
// recipes: collapse the RECIPES strip above so it never lingers
// over the freshly-applied sim.
onPress: () => {
setShowRecipes(false);
onSelectRecipe(filmSimToRecipe(s));
},
})),
groupChip('style'),
{
key: 'recipes-toggle',
label: 'RECIPES',
active: showRecipes,
onPress: () => setShowRecipes((v) => !v),
onPress: () => {
setOpenGroup(null);
setShowRecipes((v) => !v);
},
},
{
key: 'create',