mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-03-08 01:53:30 +01:00
3.1 KiB
3.1 KiB
STYLE-003: Style Presets — CHANGELOG
2026-02-18 — Implementation Complete
New files created
Data layer (noodl-editor)
models/StylePresets/StylePresetTypes.ts—StylePresetandPresetPreviewinterfacesmodels/StylePresets/presets/ModernPreset.ts— Default (clean blue, 8px radius, soft shadows)models/StylePresets/presets/MinimalPreset.ts— Monochromatic, 2–4px radius, no shadowsmodels/StylePresets/presets/PlayfulPreset.ts— Purple/pink, very rounded (16px), tinted shadowsmodels/StylePresets/presets/EnterprisePreset.ts— Dark navy, conservative 4px radius, barely-there shadowsmodels/StylePresets/presets/SoftPreset.ts— Indigo, 12px radius, ultra-light shadowsmodels/StylePresets/presets/index.ts— barrelmodels/StylePresets/StylePresetsModel.ts—getAllPresets,getPreset,getDefaultPreset,setPendingPresetId,consumePendingPresetmodels/StylePresets/index.ts— public surface
UI layer (noodl-core-ui)
components/StylePresets/PresetCard.tsx— Mini mockup card with primary swatch, text lines, surface stripcomponents/StylePresets/PresetCard.module.scss— Card styles with selection ringcomponents/StylePresets/PresetSelector.tsx— Horizontal grid + description below selectedcomponents/StylePresets/PresetSelector.module.scsscomponents/StylePresets/index.ts— barrel
Modified files
models/StyleTokensModel/StyleTokensModel.ts
- Added
applyPreset(tokens)public method — bulk-sets tokens without undo - Added
_applyAndClearPendingPreset()private method — called from_bindListenersreload path - Added
consumePendingPresetimport and call in thereloadclosure
preview/launcher/Launcher/components/CreateProjectModal/CreateProjectModal.tsx
- Added
presets?: PresetDisplayInfo[]prop - Added
selectedPresetIdlocal state (default'modern') - Renders
<PresetSelector>when presets provided - Extended
onConfirmsignature to includepresetId: string
pages/ProjectsPage/ProjectsPage.tsx
- Added
getAllPresets,setPendingPresetIdimports - Added
STYLE_PRESETSmodule-level constant - Updated
handleCreateProjectConfirm(name, location, presetId)to callsetPendingPresetId(presetId) - Passes
presets={STYLE_PRESETS}to<CreateProjectModal> - Error path clears pending preset via
setPendingPresetId(null)
Architecture — pending preset flow
User picks preset → CreateProjectModal.onConfirm(name, loc, presetId)
→ ProjectsPage.handleCreateProjectConfirm
→ setPendingPresetId(presetId) // stored in module-level var
→ LocalProjectsModel.newProject(...)
→ route to editor
→ StyleTokensModel._bindListeners reload fires (ProjectModel.instanceHasChanged)
→ _applyAndClearPendingPreset()
→ consumePendingPreset() reads + clears _pendingPresetId
→ applyPreset(preset.tokens)
→ setToken() x N → _store() → ProjectModel.instance.setMetaData('designTokens', ...)
→ tokens persisted to project.json
Modern preset has tokens: {} so it is a no-op (defaults already apply).