@newtonedev/editor 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/Editor.d.ts +1 -1
  2. package/dist/Editor.d.ts.map +1 -1
  3. package/dist/components/ConfiguratorPanel.d.ts +17 -0
  4. package/dist/components/ConfiguratorPanel.d.ts.map +1 -0
  5. package/dist/components/FontPicker.d.ts +4 -2
  6. package/dist/components/FontPicker.d.ts.map +1 -1
  7. package/dist/components/PreviewWindow.d.ts +7 -2
  8. package/dist/components/PreviewWindow.d.ts.map +1 -1
  9. package/dist/components/PrimaryNav.d.ts +7 -0
  10. package/dist/components/PrimaryNav.d.ts.map +1 -0
  11. package/dist/components/Sidebar.d.ts +1 -10
  12. package/dist/components/Sidebar.d.ts.map +1 -1
  13. package/dist/components/TableOfContents.d.ts +2 -1
  14. package/dist/components/TableOfContents.d.ts.map +1 -1
  15. package/dist/components/sections/DynamicRangeSection.d.ts.map +1 -1
  16. package/dist/components/sections/FontsSection.d.ts +3 -1
  17. package/dist/components/sections/FontsSection.d.ts.map +1 -1
  18. package/dist/hooks/useEditorState.d.ts +4 -1
  19. package/dist/hooks/useEditorState.d.ts.map +1 -1
  20. package/dist/index.cjs +2484 -2052
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.ts +2 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2486 -2055
  25. package/dist/index.js.map +1 -1
  26. package/dist/preview/ComponentDetailView.d.ts +7 -1
  27. package/dist/preview/ComponentDetailView.d.ts.map +1 -1
  28. package/dist/preview/ComponentRenderer.d.ts +2 -1
  29. package/dist/preview/ComponentRenderer.d.ts.map +1 -1
  30. package/dist/types.d.ts +17 -0
  31. package/dist/types.d.ts.map +1 -1
  32. package/dist/utils/lookupFontMetrics.d.ts +19 -0
  33. package/dist/utils/lookupFontMetrics.d.ts.map +1 -0
  34. package/dist/utils/measureFonts.d.ts +18 -0
  35. package/dist/utils/measureFonts.d.ts.map +1 -0
  36. package/package.json +1 -1
  37. package/src/Editor.tsx +53 -10
  38. package/src/components/ConfiguratorPanel.tsx +77 -0
  39. package/src/components/FontPicker.tsx +38 -29
  40. package/src/components/PreviewWindow.tsx +14 -1
  41. package/src/components/PrimaryNav.tsx +76 -0
  42. package/src/components/Sidebar.tsx +5 -132
  43. package/src/components/TableOfContents.tsx +41 -78
  44. package/src/components/sections/DynamicRangeSection.tsx +2 -225
  45. package/src/components/sections/FontsSection.tsx +61 -93
  46. package/src/hooks/useEditorState.ts +68 -17
  47. package/src/index.ts +2 -0
  48. package/src/preview/ComponentDetailView.tsx +531 -67
  49. package/src/preview/ComponentRenderer.tsx +6 -4
  50. package/src/types.ts +15 -0
  51. package/src/utils/lookupFontMetrics.ts +52 -0
  52. package/src/utils/measureFonts.ts +41 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/presets.ts","../src/hooks/useHover.ts","../src/hooks/usePresets.ts","../src/hooks/useEditorState.ts","../src/components/EditorShell.tsx","../src/components/sections/ColorsSection.tsx","../src/components/sections/DynamicRangeSection.tsx","../src/components/sections/IconsSection.tsx","../src/components/FontPicker.tsx","../src/components/sections/FontsSection.tsx","../src/components/sections/OthersSection.tsx","../src/components/PresetSelector.tsx","../src/components/Sidebar.tsx","../src/components/EditorHeader.tsx","../src/components/TableOfContents.tsx","../src/preview/ComponentRenderer.tsx","../src/preview/OverviewView.tsx","../src/preview/CategoryView.tsx","../src/preview/IconBrowserView.tsx","../src/preview/ComponentDetailView.tsx","../src/components/PreviewWindow.tsx","../src/components/CodeBlock.tsx","../src/components/RightSidebar.tsx","../src/Editor.tsx"],"names":["useState","useCallback","useRef","useConfigurator","usePreviewColors","useMemo","getComponent","useEffect","useTokens","jsxs","srgbToHex","jsx","SEMANTIC_HUE_RANGES","useWcagValidation","traditionalHueToOklch","hexToPaletteParams","ColorScaleSlider","TextInput","HueSlider","Slider","Select","Toggle","STRENGTH_OPTIONS","HUE_GRADING_STRENGTH_LOW","HUE_GRADING_STRENGTH_MEDIUM","HUE_GRADING_STRENGTH_HARD","resolveLightness","HUE_GRADING_EASING_POWER","findMaxChromaInGamut","clampSrgb","oklchToSrgb","GOOGLE_FONTS","SYSTEM_FONTS","Icon","Fragment","SIDEBAR_WIDTH","Button","CATEGORIES","components","getComponentsByCategory","Card","Frame","Text","Wrapper","getCategory","ICON_CATALOG","generateComponentCode","NewtoneProvider"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Preset } from \"../types\";\n\nexport function findPreset(\n presets: readonly Preset[],\n presetId: string,\n): Preset | undefined {\n return presets.find((p) => p.id === presetId);\n}\n\nexport function updatePresetInArray(\n presets: readonly Preset[],\n presetId: string,\n updater: (preset: Preset) => Preset,\n): readonly Preset[] {\n return presets.map((p) => (p.id === presetId ? updater(p) : p));\n}\n\nexport function presetHasUnpublishedChanges(preset: Preset): boolean {\n if (preset.published_state === null) return true;\n return (\n JSON.stringify(preset.draft_state) !==\n JSON.stringify(preset.published_state)\n );\n}\n","import { useState, useCallback } from \"react\";\n\nexport function useHover() {\n const [isHovered, setIsHovered] = useState(false);\n const onMouseEnter = useCallback(() => setIsHovered(true), []);\n const onMouseLeave = useCallback(() => setIsHovered(false), []);\n return { isHovered, hoverProps: { onMouseEnter, onMouseLeave } };\n}\n","import { useState, useCallback, useRef } from \"react\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { Preset } from \"../types\";\n\ninterface UsePresetsOptions {\n readonly initialPresets: readonly Preset[];\n readonly initialActivePresetId: string;\n readonly initialPublishedPresetId: string | null;\n readonly defaultState: ConfiguratorState;\n readonly onPresetSwitch: (newState: ConfiguratorState) => void;\n readonly getCurrentState: () => ConfiguratorState;\n readonly flushPendingSave: () => Promise<void>;\n readonly persistPresets: (params: {\n readonly presets: readonly Preset[];\n readonly activePresetId: string;\n readonly publishedPresetId: string | null;\n }) => Promise<void>;\n}\n\ninterface UsePresetsReturn {\n readonly presets: readonly Preset[];\n readonly activePresetId: string;\n readonly publishedPresetId: string | null;\n readonly activePreset: Preset;\n readonly switchPreset: (presetId: string) => Promise<void>;\n readonly createPreset: (name: string) => Promise<string>;\n readonly renamePreset: (presetId: string, name: string) => void;\n readonly deletePreset: (presetId: string) => Promise<void>;\n readonly duplicatePreset: (\n presetId: string,\n newName: string,\n ) => Promise<string>;\n readonly updateActivePresetDraftState: (\n state: ConfiguratorState,\n ) => readonly Preset[];\n readonly publishActivePreset: (\n state: ConfiguratorState,\n ) => readonly Preset[];\n readonly revertActivePreset: () => ConfiguratorState | null;\n}\n\nexport function usePresets({\n initialPresets,\n initialActivePresetId,\n initialPublishedPresetId,\n defaultState,\n onPresetSwitch,\n getCurrentState,\n flushPendingSave,\n persistPresets,\n}: UsePresetsOptions): UsePresetsReturn {\n const [presets, setPresets] = useState<readonly Preset[]>(initialPresets);\n const [activePresetId, setActivePresetId] = useState(initialActivePresetId);\n const [publishedPresetId, setPublishedPresetId] = useState<string | null>(\n initialPublishedPresetId,\n );\n const presetsRef = useRef(presets);\n\n // Keep ref in sync\n presetsRef.current = presets;\n\n const activePreset =\n presets.find((p) => p.id === activePresetId) ?? presets[0];\n\n // --- Switch active preset ---\n const switchPreset = useCallback(\n async (presetId: string) => {\n if (presetId === activePresetId) return;\n\n // Flush any pending auto-save for current preset\n await flushPendingSave();\n\n // Save current state into the current preset's draft_state before switching\n const currentState = getCurrentState();\n const updatedPresets = presetsRef.current.map((p) =>\n p.id === activePresetId ? { ...p, draft_state: currentState } : p,\n );\n\n // Find target preset\n const target = updatedPresets.find((p) => p.id === presetId);\n if (!target) return;\n\n // Update state\n setPresets(updatedPresets);\n presetsRef.current = updatedPresets;\n setActivePresetId(presetId);\n\n // Load new preset's draft_state into configurator\n onPresetSwitch(target.draft_state);\n\n // Persist\n await persistPresets({\n presets: updatedPresets,\n activePresetId: presetId,\n publishedPresetId,\n });\n },\n [\n activePresetId,\n publishedPresetId,\n flushPendingSave,\n getCurrentState,\n onPresetSwitch,\n persistPresets,\n ],\n );\n\n // --- Create new preset ---\n const createPreset = useCallback(\n async (name: string): Promise<string> => {\n const newPreset: Preset = {\n id: crypto.randomUUID(),\n name,\n draft_state: defaultState,\n published_state: null,\n };\n const newPresets = [...presetsRef.current, newPreset];\n setPresets(newPresets);\n presetsRef.current = newPresets;\n await persistPresets({\n presets: newPresets,\n activePresetId,\n publishedPresetId,\n });\n return newPreset.id;\n },\n [defaultState, activePresetId, publishedPresetId, persistPresets],\n );\n\n // --- Duplicate preset ---\n const duplicatePreset = useCallback(\n async (presetId: string, newName: string): Promise<string> => {\n const source = presetsRef.current.find((p) => p.id === presetId);\n if (!source) throw new Error(\"Preset not found\");\n\n const newPreset: Preset = {\n id: crypto.randomUUID(),\n name: newName,\n draft_state: source.draft_state,\n published_state: null,\n };\n const newPresets = [...presetsRef.current, newPreset];\n setPresets(newPresets);\n presetsRef.current = newPresets;\n await persistPresets({\n presets: newPresets,\n activePresetId,\n publishedPresetId,\n });\n return newPreset.id;\n },\n [activePresetId, publishedPresetId, persistPresets],\n );\n\n // --- Rename preset ---\n const renamePreset = useCallback(\n (presetId: string, name: string) => {\n const newPresets = presetsRef.current.map((p) =>\n p.id === presetId ? { ...p, name } : p,\n );\n setPresets(newPresets);\n presetsRef.current = newPresets;\n // fire-and-forget\n persistPresets({\n presets: newPresets,\n activePresetId,\n publishedPresetId,\n });\n },\n [activePresetId, publishedPresetId, persistPresets],\n );\n\n // --- Delete preset ---\n const deletePreset = useCallback(\n async (presetId: string) => {\n if (presetsRef.current.length <= 1) return;\n\n const newPresets = presetsRef.current.filter((p) => p.id !== presetId);\n let newActiveId = activePresetId;\n let newPublishedId = publishedPresetId;\n\n // If deleting active preset, switch to first remaining\n if (presetId === activePresetId) {\n newActiveId = newPresets[0].id;\n onPresetSwitch(newPresets[0].draft_state);\n }\n\n // If deleting published preset, clear it\n if (presetId === publishedPresetId) {\n newPublishedId = null;\n }\n\n setPresets(newPresets);\n presetsRef.current = newPresets;\n setActivePresetId(newActiveId);\n setPublishedPresetId(newPublishedId);\n await persistPresets({\n presets: newPresets,\n activePresetId: newActiveId,\n publishedPresetId: newPublishedId,\n });\n },\n [activePresetId, publishedPresetId, onPresetSwitch, persistPresets],\n );\n\n // --- Update active preset's draft_state (called during auto-save) ---\n const updateActivePresetDraftState = useCallback(\n (state: ConfiguratorState): readonly Preset[] => {\n const newPresets = presetsRef.current.map((p) =>\n p.id === activePresetId ? { ...p, draft_state: state } : p,\n );\n setPresets(newPresets);\n presetsRef.current = newPresets;\n return newPresets;\n },\n [activePresetId],\n );\n\n // --- Publish active preset ---\n const publishActivePreset = useCallback(\n (state: ConfiguratorState): readonly Preset[] => {\n const newPresets = presetsRef.current.map((p) =>\n p.id === activePresetId\n ? { ...p, draft_state: state, published_state: state }\n : p,\n );\n setPresets(newPresets);\n presetsRef.current = newPresets;\n setPublishedPresetId(activePresetId);\n return newPresets;\n },\n [activePresetId],\n );\n\n // --- Revert active preset to its published_state ---\n const revertActivePreset = useCallback((): ConfiguratorState | null => {\n return activePreset.published_state;\n }, [activePreset]);\n\n return {\n presets,\n activePresetId,\n publishedPresetId,\n activePreset,\n switchPreset,\n createPreset,\n renamePreset,\n deletePreset,\n duplicatePreset,\n updateActivePresetDraftState,\n publishActivePreset,\n revertActivePreset,\n };\n}\n","import { useState, useCallback, useRef, useEffect, useMemo } from \"react\";\nimport { getComponent } from \"@newtonedev/components\";\nimport type { ColorMode } from \"@newtonedev/components\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport { useConfigurator, usePreviewColors } from \"@newtonedev/configurator\";\nimport { usePresets } from \"./usePresets\";\nimport type {\n Preset,\n SaveStatus,\n PreviewView,\n SidebarSelection,\n EditorPersistence,\n} from \"../types\";\n\ninterface UseEditorStateOptions {\n readonly initialState: ConfiguratorState;\n readonly initialIsPublished: boolean;\n readonly initialPresets: readonly Preset[];\n readonly initialActivePresetId: string;\n readonly initialPublishedPresetId: string | null;\n readonly defaultState: ConfiguratorState;\n readonly persistence: EditorPersistence;\n readonly onNavigate?: (view: PreviewView) => void;\n readonly initialPreviewView?: PreviewView;\n}\n\nexport function useEditorState({\n initialState,\n initialIsPublished,\n initialPresets,\n initialActivePresetId,\n initialPublishedPresetId,\n defaultState,\n persistence,\n onNavigate,\n initialPreviewView,\n}: UseEditorStateOptions) {\n // --- Configurator state management ---\n const {\n state: configuratorState,\n dispatch,\n themeConfig,\n } = useConfigurator(initialState);\n const previewColors = usePreviewColors(configuratorState);\n\n const [saveStatus, setSaveStatus] = useState<SaveStatus>(\"saved\");\n const [isPublished, setIsPublished] = useState(initialIsPublished);\n const [publishing, setPublishing] = useState(false);\n const [colorMode, setColorMode] = useState<ColorMode>(\n initialState.preview.mode,\n );\n const [previewView, setPreviewView] = useState<PreviewView>(\n initialPreviewView ?? { kind: \"overview\" },\n );\n const [sidebarSelection, setSidebarSelection] =\n useState<SidebarSelection>(null);\n const [propOverrides, setPropOverrides] = useState<Record<string, unknown>>(\n {},\n );\n\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const latestStateRef = useRef<ConfiguratorState>(initialState);\n const isInitialMount = useRef(true);\n const initialStateRef = useRef(initialState);\n\n // --- Preset callbacks ---\n\n const handlePresetSwitch = useCallback(\n (newState: ConfiguratorState) => {\n dispatch({ type: \"LOAD_STATE\", state: newState });\n initialStateRef.current = newState;\n isInitialMount.current = true;\n },\n [dispatch],\n );\n\n const flushPendingSave = useCallback(async () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n debounceRef.current = undefined;\n }\n }, []);\n\n // --- Presets ---\n\n const {\n presets,\n activePresetId,\n publishedPresetId,\n activePreset,\n switchPreset,\n createPreset,\n renamePreset,\n deletePreset,\n duplicatePreset,\n updateActivePresetDraftState,\n publishActivePreset,\n revertActivePreset,\n } = usePresets({\n initialPresets,\n initialActivePresetId,\n initialPublishedPresetId,\n defaultState,\n onPresetSwitch: handlePresetSwitch,\n getCurrentState: () => latestStateRef.current,\n flushPendingSave,\n persistPresets: persistence.persistPresets,\n });\n\n // --- Dirty check for revert ---\n\n const isDirty = useMemo(\n () =>\n JSON.stringify(configuratorState) !==\n JSON.stringify(\n activePreset.published_state ?? initialStateRef.current,\n ),\n [configuratorState, activePreset.published_state],\n );\n\n const handleRevert = useCallback(() => {\n const publishedState = revertActivePreset();\n const revertTarget = publishedState ?? defaultState;\n if (\n window.confirm(\n \"Revert all changes to the last published version of this preset?\",\n )\n ) {\n dispatch({ type: \"LOAD_STATE\", state: revertTarget });\n initialStateRef.current = revertTarget;\n }\n }, [dispatch, revertActivePreset, defaultState]);\n\n // --- Prop override helpers ---\n\n const initOverridesFromVariant = useCallback(\n (componentId: string, variantId?: string) => {\n const comp = getComponent(componentId);\n if (!comp) return;\n const variant = variantId\n ? comp.variants.find((v) => v.id === variantId)\n : comp.variants[0];\n if (variant) {\n const overrides: Record<string, unknown> = {};\n for (const prop of comp.editableProps) {\n overrides[prop.name] = variant.props[prop.name] ?? prop.defaultValue;\n }\n setPropOverrides(overrides);\n }\n },\n [],\n );\n\n // --- Preview navigation + right sidebar coordination ---\n\n const handlePreviewNavigate = useCallback(\n (view: PreviewView) => {\n setPreviewView(view);\n onNavigate?.(view);\n\n if (view.kind === \"component\") {\n setSidebarSelection({\n scope: \"component\",\n componentId: view.componentId,\n });\n initOverridesFromVariant(view.componentId);\n } else {\n setSidebarSelection(null);\n setPropOverrides({});\n }\n },\n [onNavigate, initOverridesFromVariant],\n );\n\n const handleSelectVariant = useCallback(\n (variantId: string) => {\n if (previewView.kind === \"component\") {\n setSidebarSelection({\n scope: \"variant\",\n componentId: previewView.componentId,\n variantId,\n });\n initOverridesFromVariant(previewView.componentId, variantId);\n }\n },\n [previewView, initOverridesFromVariant],\n );\n\n const handleCloseSidebar = useCallback(() => {\n setSidebarSelection(null);\n setPropOverrides({});\n }, []);\n\n const handleScopeToComponent = useCallback(() => {\n if (sidebarSelection && sidebarSelection.scope === \"variant\") {\n setSidebarSelection({\n scope: \"component\",\n componentId: sidebarSelection.componentId,\n });\n initOverridesFromVariant(sidebarSelection.componentId);\n }\n }, [sidebarSelection, initOverridesFromVariant]);\n\n const handlePropOverride = useCallback(\n (propName: string, value: unknown) => {\n setPropOverrides((prev) => ({ ...prev, [propName]: value }));\n // Re-open sidebar if closed while viewing a component (e.g. icon browser click)\n setSidebarSelection((prev) => {\n if (prev !== null) return prev;\n if (previewView.kind === \"component\") {\n return { scope: \"component\", componentId: previewView.componentId };\n }\n return prev;\n });\n },\n [previewView],\n );\n\n const handleResetOverrides = useCallback(() => {\n if (sidebarSelection?.scope === \"variant\") {\n initOverridesFromVariant(\n sidebarSelection.componentId,\n sidebarSelection.variantId,\n );\n }\n }, [sidebarSelection, initOverridesFromVariant]);\n\n // --- Draft auto-save ---\n\n const saveDraft = useCallback(\n async (state: ConfiguratorState) => {\n setSaveStatus(\"saving\");\n const updatedPresets = updateActivePresetDraftState(state);\n const { error } = await persistence.onSaveDraft({\n state,\n presets: updatedPresets,\n });\n setSaveStatus(error ? \"error\" : \"saved\");\n },\n [persistence, updateActivePresetDraftState],\n );\n\n const scheduleSave = useCallback(() => {\n setSaveStatus(\"unsaved\");\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n saveDraft(latestStateRef.current);\n }, 2000);\n }, [saveDraft]);\n\n // --- State change detection ---\n\n useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n return;\n }\n latestStateRef.current = configuratorState;\n setIsPublished(false);\n scheduleSave();\n }, [configuratorState, scheduleSave]);\n\n const handleColorModeChange = useCallback(\n (mode: ColorMode) => {\n setColorMode(mode);\n dispatch({ type: \"SET_PREVIEW_MODE\", mode });\n },\n [dispatch],\n );\n\n // --- Publish ---\n\n const handlePublish = useCallback(async () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n setPublishing(true);\n\n const currentState = latestStateRef.current;\n const updatedPresets = publishActivePreset(currentState);\n\n const { error } = await persistence.onPublish({\n state: currentState,\n presets: updatedPresets,\n activePresetId,\n });\n\n if (!error) {\n setSaveStatus(\"saved\");\n setIsPublished(true);\n }\n setPublishing(false);\n }, [activePresetId, publishActivePreset, persistence]);\n\n // --- beforeunload warning ---\n useEffect(() => {\n const handleBeforeUnload = (e: BeforeUnloadEvent) => {\n if (saveStatus === \"unsaved\" || saveStatus === \"saving\") {\n e.preventDefault();\n }\n };\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n return () => {\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\n };\n }, [saveStatus]);\n\n // --- Flush pending save on unmount ---\n useEffect(() => {\n return () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n const state = latestStateRef.current;\n const flushedPresets = updateActivePresetDraftState(state);\n persistence.onSaveDraft({ state, presets: flushedPresets });\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const selectedVariantId =\n sidebarSelection?.scope === \"variant\" ? sidebarSelection.variantId : null;\n\n const selectedComponentId =\n sidebarSelection?.scope === \"component\" ||\n sidebarSelection?.scope === \"variant\"\n ? sidebarSelection.componentId\n : null;\n\n return {\n // Configurator\n configuratorState,\n dispatch,\n themeConfig,\n previewColors,\n\n // Save/publish\n saveStatus,\n isPublished,\n publishing,\n handlePublish,\n saveDraft,\n\n // Preview\n previewView,\n colorMode,\n handlePreviewNavigate,\n handleSelectVariant,\n handleColorModeChange,\n\n // Sidebar\n sidebarSelection,\n selectedComponentId,\n selectedVariantId,\n propOverrides,\n handlePropOverride,\n handleResetOverrides,\n handleCloseSidebar,\n handleScopeToComponent,\n\n // Presets\n presets,\n activePresetId,\n publishedPresetId,\n switchPreset,\n createPreset,\n renamePreset,\n deletePreset,\n duplicatePreset,\n\n // Revert\n isDirty,\n handleRevert,\n\n // For retry button\n latestStateRef,\n } as const;\n}\n","import type { ReactNode } from \"react\";\nimport { useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\n\nconst SIDEBAR_WIDTH = 360;\n\ninterface EditorShellProps {\n readonly sidebar: ReactNode;\n readonly navbar: ReactNode;\n readonly content: ReactNode;\n readonly rightPanel: ReactNode;\n}\n\nexport function EditorShell({\n sidebar,\n navbar,\n content,\n rightPanel,\n}: EditorShellProps) {\n const tokens = useTokens();\n\n return (\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n overflow: \"hidden\",\n backgroundColor: srgbToHex(tokens.background.srgb),\n }}\n >\n <div\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n overflow: \"hidden\",\n minWidth: 0,\n }}\n >\n {navbar}\n\n <div\n style={{\n display: \"flex\",\n flex: 1,\n overflow: \"hidden\",\n }}\n >\n {content}\n </div>\n </div>\n\n <div\n style={{\n position: \"relative\",\n width: SIDEBAR_WIDTH,\n flexShrink: 0,\n overflow: \"hidden\",\n }}\n >\n {sidebar}\n {rightPanel}\n </div>\n </div>\n );\n}\n","import { useState, useMemo, useCallback, useEffect } from \"react\";\nimport {\n HueSlider,\n Slider,\n Select,\n Toggle,\n ColorScaleSlider,\n TextInput,\n useTokens,\n} from \"@newtonedev/components\";\nimport type { ColorMode } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { ColorResult, DynamicRange } from \"newtone\";\nimport type { DesaturationStrength, HueGradingStrength } from \"newtone\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\nimport {\n SEMANTIC_HUE_RANGES,\n useWcagValidation,\n hexToPaletteParams,\n traditionalHueToOklch,\n} from \"@newtonedev/configurator\";\n\nconst STRENGTH_OPTIONS = [\n { label: \"None\", value: \"none\" },\n { label: \"Low\", value: \"low\" },\n { label: \"Medium\", value: \"medium\" },\n { label: \"Hard\", value: \"hard\" },\n];\n\ninterface ColorsSectionProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly previewColors: readonly (readonly ColorResult[])[];\n readonly colorMode: ColorMode;\n readonly onColorModeChange: (mode: ColorMode) => void;\n}\n\n/** Get the hex color at a normalizedValue from the preview colors array */\nfunction getHexAtNv(\n previewColors: readonly ColorResult[],\n nv: number,\n): string {\n const idx = Math.round((1 - nv) * (previewColors.length - 1));\n const clamped = Math.max(0, Math.min(previewColors.length - 1, idx));\n return srgbToHex(previewColors[clamped].srgb);\n}\n\nexport function ColorsSection({\n state,\n dispatch,\n previewColors,\n colorMode,\n onColorModeChange,\n}: ColorsSectionProps) {\n const tokens = useTokens();\n const [activePaletteIndex, setActivePaletteIndex] = useState(0);\n const [modeToggleHovered, setModeToggleHovered] = useState(false);\n\n const palette = state.palettes[activePaletteIndex];\n const hueRange = SEMANTIC_HUE_RANGES[activePaletteIndex];\n const isNeutral = activePaletteIndex === 0;\n\n const activeColor = srgbToHex(tokens.accent.fill.srgb);\n const borderColor = srgbToHex(tokens.border.srgb);\n\n // Resolve effective key color for current mode\n const effectiveKeyColor =\n colorMode === \"dark\" ? palette.keyColorDark : palette.keyColor;\n\n // Mode-aware action types\n const setKeyColorAction =\n colorMode === \"dark\"\n ? (\"SET_PALETTE_KEY_COLOR_DARK\" as const)\n : (\"SET_PALETTE_KEY_COLOR\" as const);\n const clearKeyColorAction =\n colorMode === \"dark\"\n ? (\"CLEAR_PALETTE_KEY_COLOR_DARK\" as const)\n : (\"CLEAR_PALETTE_KEY_COLOR\" as const);\n const hexAction =\n colorMode === \"dark\"\n ? (\"SET_PALETTE_FROM_HEX_DARK\" as const)\n : (\"SET_PALETTE_FROM_HEX\" as const);\n\n // WCAG validation for key color (already mode-aware)\n const wcag = useWcagValidation(state, activePaletteIndex);\n\n // Hex input state\n const [hexText, setHexText] = useState(\"\");\n const [hexError, setHexError] = useState(\"\");\n const [isEditingHex, setIsEditingHex] = useState(false);\n const [isHexUserSet, setIsHexUserSet] = useState(false);\n\n // Reset hex input state when mode changes\n useEffect(() => {\n setHexText(\"\");\n setHexError(\"\");\n setIsEditingHex(false);\n setIsHexUserSet(false);\n }, [colorMode]);\n\n // Compute displayed hex from current key color position\n const currentPreview = previewColors[activePaletteIndex];\n const displayedHex = useMemo(() => {\n if (!currentPreview || currentPreview.length === 0) return \"\";\n const nv = effectiveKeyColor ?? wcag.autoNormalizedValue;\n return getHexAtNv(currentPreview, nv);\n }, [currentPreview, effectiveKeyColor, wcag.autoNormalizedValue]);\n\n // Sync hex text when not actively editing and not user-submitted\n useEffect(() => {\n if (!isEditingHex && !isHexUserSet) {\n setHexText(displayedHex);\n }\n }, [displayedHex, isEditingHex, isHexUserSet]);\n\n // Build dynamic range for hex conversion\n const dynamicRange = useMemo((): DynamicRange => {\n const light =\n state.globalHueGrading.light.strength !== \"none\"\n ? {\n hue: traditionalHueToOklch(state.globalHueGrading.light.hue),\n strength: state.globalHueGrading.light.strength,\n }\n : undefined;\n const dark =\n state.globalHueGrading.dark.strength !== \"none\"\n ? {\n hue: traditionalHueToOklch(state.globalHueGrading.dark.hue),\n strength: state.globalHueGrading.dark.strength,\n }\n : undefined;\n const hueGrading = light || dark ? { light, dark } : undefined;\n return {\n lightest: state.dynamicRange.lightest,\n darkest: state.dynamicRange.darkest,\n ...(hueGrading ? { hueGrading } : {}),\n };\n }, [state.dynamicRange, state.globalHueGrading]);\n\n const handleHexSubmit = useCallback(() => {\n setIsEditingHex(false);\n const trimmed = hexText.trim();\n if (!trimmed) {\n setHexError(\"\");\n return;\n }\n\n const hex = trimmed.startsWith(\"#\") ? trimmed : `#${trimmed}`;\n const params = hexToPaletteParams(hex, dynamicRange);\n\n if (!params) {\n setHexError(\"Invalid hex color\");\n return;\n }\n\n setHexError(\"\");\n setIsHexUserSet(true);\n dispatch({\n type: hexAction,\n index: activePaletteIndex,\n hue: params.hue,\n saturation: params.saturation,\n keyColor: params.normalizedValue,\n });\n }, [hexText, dynamicRange, dispatch, activePaletteIndex, hexAction]);\n\n const handleClearKeyColor = useCallback(() => {\n dispatch({ type: clearKeyColorAction, index: activePaletteIndex });\n setHexError(\"\");\n setIsHexUserSet(false);\n }, [dispatch, activePaletteIndex, clearKeyColorAction]);\n\n // Build WCAG warning message\n const wcagWarning = useMemo(() => {\n if (effectiveKeyColor === undefined || wcag.keyColorContrast === null)\n return undefined;\n if (wcag.passesAA) return undefined;\n const ratio = wcag.keyColorContrast.toFixed(1);\n if (wcag.passesAALargeText) {\n return `Contrast ${ratio}:1 — passes large text (AA) but fails normal text (requires 4.5:1)`;\n }\n return `Contrast ${ratio}:1 — fails WCAG AA (requires 4.5:1 for normal text, 3:1 for large text)`;\n }, [effectiveKeyColor, wcag]);\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n {/* ─── Palette Circles + Mode Toggle ─── */}\n <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>\n {state.palettes.map((_p, index) => {\n const isActive = index === activePaletteIndex;\n const colors = previewColors[index];\n const isNeutralCircle = index === 0;\n\n // Per-mode key color for this palette's circle\n const paletteKeyColor =\n colorMode === \"dark\" ? _p.keyColorDark : _p.keyColor;\n const circleColor =\n !isNeutralCircle && colors\n ? getHexAtNv(\n colors,\n paletteKeyColor ?? wcag.autoNormalizedValue,\n )\n : undefined;\n\n const ringStyle = isActive\n ? `0 0 0 2px ${srgbToHex(tokens.background.srgb)}, 0 0 0 4px ${activeColor}`\n : \"none\";\n\n return (\n <button\n key={index}\n onClick={() => setActivePaletteIndex(index)}\n aria-label={_p.name}\n aria-pressed={isActive}\n style={{\n width: 32,\n height: 32,\n borderRadius: \"50%\",\n border: \"none\",\n cursor: \"pointer\",\n flexShrink: 0,\n boxShadow: ringStyle,\n transition: \"box-shadow 150ms ease\",\n padding: 0,\n overflow: \"hidden\",\n ...(isNeutralCircle\n ? {\n background: colors\n ? `linear-gradient(to right, ${srgbToHex(colors[0].srgb)} 50%, ${srgbToHex(colors[colors.length - 1].srgb)} 50%)`\n : `linear-gradient(to right, #ffffff 50%, #000000 50%)`,\n }\n : { backgroundColor: circleColor ?? borderColor }),\n }}\n />\n );\n })}\n\n {/* Spacer */}\n <div style={{ flex: 1 }} />\n\n {/* Light/Dark Mode Toggle */}\n <button\n onClick={() =>\n onColorModeChange(colorMode === \"light\" ? \"dark\" : \"light\")\n }\n onMouseEnter={() => setModeToggleHovered(true)}\n onMouseLeave={() => setModeToggleHovered(false)}\n aria-label={\n colorMode === \"light\"\n ? \"Switch to dark mode\"\n : \"Switch to light mode\"\n }\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"4px 10px\",\n borderRadius: 6,\n border: `1px solid ${borderColor}`,\n background: modeToggleHovered ? `${borderColor}20` : \"none\",\n cursor: \"pointer\",\n fontSize: 12,\n color: srgbToHex(tokens.textPrimary.srgb),\n transition: \"background-color 150ms ease\",\n }}\n >\n {colorMode === \"light\" ? \"\\u2600\" : \"\\u263E\"}\n <span>{colorMode === \"light\" ? \"Light\" : \"Dark\"}</span>\n </button>\n </div>\n\n {/* ─── Key Color (mode-specific) ─── */}\n {currentPreview &&\n (isNeutral ? (\n <div style={{ display: \"flex\", gap: 1 }}>\n {currentPreview.map((color, i) => (\n <div\n key={i}\n style={{\n flex: 1,\n height: 64,\n borderRadius: 2,\n backgroundColor: srgbToHex(color.srgb),\n }}\n />\n ))}\n </div>\n ) : (\n <div\n style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}\n >\n <ColorScaleSlider\n colors={currentPreview}\n value={effectiveKeyColor ?? wcag.autoNormalizedValue}\n onValueChange={(nv) => {\n setIsHexUserSet(false);\n dispatch({\n type: setKeyColorAction,\n index: activePaletteIndex,\n normalizedValue: nv,\n });\n }}\n trimEnds\n snap\n label=\"Key Color\"\n warning={wcagWarning}\n animateValue\n />\n <div\n style={{\n display: \"flex\",\n gap: 8,\n alignItems: \"flex-end\",\n }}\n >\n <div style={{ flex: 1 }}>\n <TextInput\n label=\"Hex\"\n value={hexText}\n onChangeText={(text) => {\n setIsEditingHex(true);\n setHexText(text);\n setHexError(\"\");\n }}\n onBlur={handleHexSubmit}\n onSubmitEditing={handleHexSubmit}\n placeholder=\"#000000\"\n />\n </div>\n {effectiveKeyColor !== undefined && (\n <button\n onClick={handleClearKeyColor}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"0 0 6px\",\n fontSize: 13,\n fontWeight: 600,\n color: activeColor,\n }}\n >\n Auto\n </button>\n )}\n </div>\n {hexError && (\n <div\n style={{\n fontSize: 12,\n fontWeight: 500,\n color: srgbToHex(tokens.error.fill.srgb),\n }}\n >\n {hexError}\n </div>\n )}\n </div>\n ))}\n\n {/* ─── Divider ─── */}\n <div\n style={{\n height: 1,\n backgroundColor: borderColor,\n margin: \"4px 0\",\n }}\n />\n\n {/* ─── Shared Per-Palette Controls ─── */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <HueSlider\n value={palette.hue}\n onValueChange={(hue) =>\n dispatch({\n type: \"SET_PALETTE_HUE\",\n index: activePaletteIndex,\n hue,\n })\n }\n label=\"Hue\"\n editableValue\n {...(hueRange ? { min: hueRange.min, max: hueRange.max } : {})}\n />\n\n <Slider\n value={palette.saturation}\n onValueChange={(saturation) =>\n dispatch({\n type: \"SET_PALETTE_SATURATION\",\n index: activePaletteIndex,\n saturation,\n })\n }\n min={0}\n max={100}\n label=\"Saturation\"\n editableValue\n />\n\n {/* Desaturation */}\n <div style={{ display: \"flex\", gap: 12, alignItems: \"flex-end\" }}>\n <div style={{ flex: 1 }}>\n <Select\n options={STRENGTH_OPTIONS}\n value={palette.desaturationStrength}\n onValueChange={(strength) =>\n dispatch({\n type: \"SET_PALETTE_DESAT_STRENGTH\",\n index: activePaletteIndex,\n strength: strength as DesaturationStrength,\n })\n }\n label=\"Desaturation\"\n />\n </div>\n {palette.desaturationStrength !== \"none\" && (\n <div style={{ paddingBottom: 2 }}>\n <Toggle\n value={palette.desaturationDirection === \"dark\"}\n onValueChange={(v) =>\n dispatch({\n type: \"SET_PALETTE_DESAT_DIRECTION\",\n index: activePaletteIndex,\n direction: v ? \"dark\" : \"light\",\n })\n }\n label=\"Invert\"\n />\n </div>\n )}\n </div>\n\n {/* Hue Grading */}\n <div style={{ display: \"flex\", gap: 12, alignItems: \"flex-end\" }}>\n <div style={{ flex: 1 }}>\n <Select\n options={STRENGTH_OPTIONS}\n value={palette.hueGradeStrength}\n onValueChange={(strength) =>\n dispatch({\n type: \"SET_PALETTE_HUE_GRADE_STRENGTH\",\n index: activePaletteIndex,\n strength: strength as HueGradingStrength,\n })\n }\n label=\"Hue Grading\"\n />\n </div>\n {palette.hueGradeStrength !== \"none\" && (\n <div style={{ paddingBottom: 2 }}>\n <Toggle\n value={palette.hueGradeDirection === \"dark\"}\n onValueChange={(v) =>\n dispatch({\n type: \"SET_PALETTE_HUE_GRADE_DIRECTION\",\n index: activePaletteIndex,\n direction: v ? \"dark\" : \"light\",\n })\n }\n label=\"Invert\"\n />\n </div>\n )}\n </div>\n\n {palette.hueGradeStrength !== \"none\" && (\n <HueSlider\n value={palette.hueGradeHue}\n onValueChange={(hue) =>\n dispatch({\n type: \"SET_PALETTE_HUE_GRADE_HUE\",\n index: activePaletteIndex,\n hue,\n })\n }\n label=\"Grade Target\"\n editableValue\n />\n )}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useCallback, useMemo, useEffect } from \"react\";\nimport { HueSlider, Select, useTokens } from \"@newtonedev/components\";\nimport {\n srgbToHex,\n resolveLightness,\n findMaxChromaInGamut,\n oklchToSrgb,\n clampSrgb,\n HUE_GRADING_STRENGTH_LOW,\n HUE_GRADING_STRENGTH_MEDIUM,\n HUE_GRADING_STRENGTH_HARD,\n HUE_GRADING_EASING_POWER,\n} from \"newtone\";\nimport type { HueGradingStrength } from \"newtone\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\nimport { traditionalHueToOklch } from \"@newtonedev/configurator\";\n\nconst STRENGTH_OPTIONS = [\n { label: \"None\", value: \"none\" },\n { label: \"Low\", value: \"low\" },\n { label: \"Medium\", value: \"medium\" },\n { label: \"Hard\", value: \"hard\" },\n];\n\n// --- Dual Range Slider ---\n\nconst TRACK_HEIGHT = 8;\nconst THUMB_SIZE = 18;\nconst ZONE_FRAC = 1 / 3;\n\nfunction clamp(v: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, v));\n}\n\n// --- Display ↔ Internal conversions ---\n// Both lightest and darkest are 0–1 slider positions.\n// The engine maps these to OKLCH L via resolveLightest/resolveDarkest.\n// Display: 0–10 integer scale, linearly mapped to 0.0–1.0.\n\nfunction internalToDisplay(internal: number): number {\n return clamp(Math.round(internal * 10), 0, 10);\n}\n\nfunction displayToInternal(display: number): number {\n return clamp(display, 0, 10) / 10;\n}\n\n// --- Position ↔ Display conversions ---\n// Left zone: pos 0 = display 10, pos ZONE_FRAC = display 0\n// Right zone: pos (1-ZONE_FRAC) = display 0, pos 1 = display 10\n\nfunction posToWhitesDisplay(pos: number): number {\n const ratio = clamp(pos / ZONE_FRAC, 0, 1);\n return Math.round(10 * (1 - ratio));\n}\n\nfunction posToBlacksDisplay(pos: number): number {\n const ratio = clamp((pos - (1 - ZONE_FRAC)) / ZONE_FRAC, 0, 1);\n return Math.round(ratio * 10);\n}\n\nfunction whitesDisplayToPos(display: number): number {\n return ((10 - display) / 10) * ZONE_FRAC;\n}\n\nfunction blacksDisplayToPos(display: number): number {\n return 1 - ZONE_FRAC + (display / 10) * ZONE_FRAC;\n}\n\ninterface DualRangeSliderProps {\n readonly whitesValue: number; // internal 0–1\n readonly blacksValue: number; // internal 0–1\n readonly onWhitesChange: (v: number) => void;\n readonly onBlacksChange: (v: number) => void;\n}\n\nfunction DualRangeSlider({\n whitesValue,\n blacksValue,\n onWhitesChange,\n onBlacksChange,\n}: DualRangeSliderProps) {\n const tokens = useTokens();\n const trackRef = useRef<HTMLDivElement>(null);\n const [activeThumb, setActiveThumb] = useState<\n \"whites\" | \"blacks\" | null\n >(null);\n\n const interactiveColor = srgbToHex(tokens.accent.fill.srgb);\n const borderColor = srgbToHex(tokens.border.srgb);\n\n const wDisplay = internalToDisplay(whitesValue);\n const bDisplay = internalToDisplay(blacksValue);\n const wPos = whitesDisplayToPos(wDisplay);\n const bPos = blacksDisplayToPos(bDisplay);\n\n const getPosRatio = useCallback((clientX: number): number => {\n if (!trackRef.current) return 0;\n const rect = trackRef.current.getBoundingClientRect();\n return clamp((clientX - rect.left) / rect.width, 0, 1);\n }, []);\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n e.preventDefault();\n const pos = getPosRatio(e.clientX);\n\n if (pos <= ZONE_FRAC) {\n setActiveThumb(\"whites\");\n onWhitesChange(displayToInternal(posToWhitesDisplay(pos)));\n } else if (pos >= 1 - ZONE_FRAC) {\n setActiveThumb(\"blacks\");\n onBlacksChange(displayToInternal(posToBlacksDisplay(pos)));\n } else {\n return; // dead zone\n }\n\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n },\n [getPosRatio, onWhitesChange, onBlacksChange],\n );\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!activeThumb) return;\n const pos = getPosRatio(e.clientX);\n\n if (activeThumb === \"whites\") {\n onWhitesChange(displayToInternal(posToWhitesDisplay(pos)));\n } else {\n onBlacksChange(displayToInternal(posToBlacksDisplay(pos)));\n }\n },\n [activeThumb, getPosRatio, onWhitesChange, onBlacksChange],\n );\n\n const handlePointerUp = useCallback(() => {\n setActiveThumb(null);\n }, []);\n\n const trackTop = (THUMB_SIZE - TRACK_HEIGHT) / 2;\n\n return (\n <div style={{ padding: `0 ${THUMB_SIZE / 2}px` }}>\n <div\n ref={trackRef}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n style={{\n position: \"relative\",\n height: THUMB_SIZE,\n cursor: activeThumb ? \"grabbing\" : \"pointer\",\n touchAction: \"none\",\n userSelect: \"none\",\n }}\n >\n {/* Gradient track */}\n <div\n style={{\n position: \"absolute\",\n left: 0,\n right: 0,\n top: trackTop,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n background: \"linear-gradient(to right, white, black)\",\n border: `1px solid ${borderColor}`,\n boxSizing: \"border-box\",\n }}\n />\n\n {/* Accent fill between thumbs */}\n <div\n style={{\n position: \"absolute\",\n left: `${wPos * 100}%`,\n width: `${(bPos - wPos) * 100}%`,\n top: trackTop,\n height: TRACK_HEIGHT,\n backgroundColor: interactiveColor,\n }}\n />\n\n {/* Whites thumb (left) */}\n <div\n style={{\n position: \"absolute\",\n left: `calc(${wPos * 100}% - ${THUMB_SIZE / 2}px)`,\n top: 0,\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: interactiveColor,\n pointerEvents: \"none\",\n zIndex: activeThumb === \"whites\" ? 2 : 1,\n }}\n />\n\n {/* Blacks thumb (right) */}\n <div\n style={{\n position: \"absolute\",\n left: `calc(${bPos * 100}% - ${THUMB_SIZE / 2}px)`,\n top: 0,\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: interactiveColor,\n pointerEvents: \"none\",\n zIndex: activeThumb === \"blacks\" ? 2 : 1,\n }}\n />\n </div>\n </div>\n );\n}\n\n// --- Numeric Input ---\n\ninterface RangeInputProps {\n readonly display: number; // 0–10 integer\n readonly onCommit: (internal: number) => void;\n readonly toInternal: (display: number) => number;\n}\n\nfunction RangeInput({ display, onCommit, toInternal }: RangeInputProps) {\n const tokens = useTokens();\n const [text, setText] = useState(String(display));\n const [isEditing, setIsEditing] = useState(false);\n\n const displayText = isEditing ? text : String(display);\n\n const commit = () => {\n setIsEditing(false);\n const parsed = parseInt(text, 10);\n if (isNaN(parsed)) {\n setText(String(display));\n return;\n }\n const clamped = clamp(Math.round(parsed), 0, 10);\n onCommit(toInternal(clamped));\n setText(String(clamped));\n };\n\n return (\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={displayText}\n onChange={(e) => {\n setIsEditing(true);\n setText(e.target.value);\n }}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commit();\n }}\n style={{\n width: 40,\n padding: \"2px 6px\",\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n borderRadius: 4,\n backgroundColor: \"transparent\",\n color: srgbToHex(tokens.textPrimary.srgb),\n fontFamily: \"inherit\",\n fontSize: 12,\n fontWeight: 500,\n textAlign: \"center\",\n outline: \"none\",\n }}\n />\n );\n}\n\n// --- Dynamic Range Graph ---\n\nconst GRAPH_HEIGHT = 80;\nconst GRAPH_COLS = 256;\nconst GRAPH_ROWS = 64;\n\nfunction strengthToFactor(strength: HueGradingStrength): number {\n switch (strength) {\n case \"none\":\n return 0;\n case \"low\":\n return HUE_GRADING_STRENGTH_LOW;\n case \"medium\":\n return HUE_GRADING_STRENGTH_MEDIUM;\n case \"hard\":\n return HUE_GRADING_STRENGTH_HARD;\n }\n}\n\nfunction blendHues(\n lightHue: number,\n darkHue: number,\n wLight: number,\n wDark: number,\n): number {\n const totalW = wLight + wDark;\n if (totalW === 0) return 0;\n const delta = (((darkHue - lightHue + 180) % 360) + 360) % 360 - 180;\n const t = wDark / totalW;\n const result = lightHue + delta * t;\n return ((result % 360) + 360) % 360;\n}\n\ninterface GraphData {\n readonly buffer: Uint8ClampedArray;\n readonly curvePoints: readonly { readonly x: number; readonly y: number }[];\n}\n\nfunction computeGraphData(state: ConfiguratorState): GraphData {\n const { dynamicRange, globalHueGrading } = state;\n\n const lightActive = globalHueGrading.light.strength !== \"none\";\n const darkActive = globalHueGrading.dark.strength !== \"none\";\n const lightOklchHue = traditionalHueToOklch(globalHueGrading.light.hue);\n const darkOklchHue = traditionalHueToOklch(globalHueGrading.dark.hue);\n const lightFactor = strengthToFactor(globalHueGrading.light.strength);\n const darkFactor = strengthToFactor(globalHueGrading.dark.strength);\n\n const buffer = new Uint8ClampedArray(GRAPH_COLS * GRAPH_ROWS * 4);\n\n for (let col = 0; col < GRAPH_COLS; col++) {\n const nv = 1 - col / (GRAPH_COLS - 1);\n const L = resolveLightness(dynamicRange, nv);\n\n // Easing weights for hue blend at top row (assumes hard strength)\n const wLight = lightActive ? Math.pow(nv, HUE_GRADING_EASING_POWER) : 0;\n const wDark = darkActive\n ? Math.pow(1 - nv, HUE_GRADING_EASING_POWER)\n : 0;\n const totalW = wLight + wDark;\n\n let topHue: number;\n let topChroma: number;\n\n if (totalW === 0) {\n topHue = 0;\n topChroma = 0;\n } else {\n if (!lightActive) {\n topHue = darkOklchHue;\n } else if (!darkActive) {\n topHue = lightOklchHue;\n } else {\n topHue = blendHues(lightOklchHue, darkOklchHue, wLight, wDark);\n }\n topChroma =\n findMaxChromaInGamut(L, topHue) * Math.min(totalW, 1);\n }\n\n for (let row = 0; row < GRAPH_ROWS; row++) {\n const gradingIntensity = row / (GRAPH_ROWS - 1);\n const C = topChroma * gradingIntensity;\n const srgb = clampSrgb(oklchToSrgb({ L, C, h: topHue }));\n\n // Canvas Y=0 is top; row=0 is bottom of our graph\n const canvasY = GRAPH_ROWS - 1 - row;\n const idx = (canvasY * GRAPH_COLS + col) * 4;\n buffer[idx] = Math.round(srgb.r * 255);\n buffer[idx + 1] = Math.round(srgb.g * 255);\n buffer[idx + 2] = Math.round(srgb.b * 255);\n buffer[idx + 3] = 255;\n }\n }\n\n // 26-step curve points\n const curvePoints: { x: number; y: number }[] = [];\n for (let i = 0; i < 26; i++) {\n const nv = 1 - i / 25;\n const x = (i / 25) * (GRAPH_COLS - 1);\n\n const lightContrib =\n Math.pow(nv, HUE_GRADING_EASING_POWER) *\n (lightFactor / HUE_GRADING_STRENGTH_HARD);\n const darkContrib =\n Math.pow(1 - nv, HUE_GRADING_EASING_POWER) *\n (darkFactor / HUE_GRADING_STRENGTH_HARD);\n const y = clamp(lightContrib + darkContrib, 0, 1);\n\n curvePoints.push({ x, y });\n }\n\n return { buffer, curvePoints };\n}\n\ninterface DynamicRangeGraphProps {\n readonly state: ConfiguratorState;\n}\n\nfunction DynamicRangeGraph({ state }: DynamicRangeGraphProps) {\n const tokens = useTokens();\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n const graphData = useMemo(\n () => computeGraphData(state),\n [\n state.dynamicRange.lightest,\n state.dynamicRange.darkest,\n state.globalHueGrading.light.strength,\n state.globalHueGrading.light.hue,\n state.globalHueGrading.dark.strength,\n state.globalHueGrading.dark.hue,\n ],\n );\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n canvas.width = GRAPH_COLS;\n canvas.height = GRAPH_ROWS;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n\n // Draw gradient from pre-computed buffer\n const imageData = ctx.createImageData(GRAPH_COLS, GRAPH_ROWS);\n imageData.data.set(graphData.buffer);\n ctx.putImageData(imageData, 0, 0);\n\n // Draw 26-step curve overlay\n const curveColor = srgbToHex(tokens.accent.fill.srgb);\n const { curvePoints } = graphData;\n\n if (curvePoints.length < 2) return;\n\n const mapped = curvePoints.map((p) => ({\n cx: p.x,\n cy: (1 - p.y) * (GRAPH_ROWS - 1),\n }));\n\n // Smooth Catmull-Rom spline\n ctx.beginPath();\n ctx.strokeStyle = curveColor;\n ctx.lineWidth = 1.5;\n ctx.lineJoin = \"round\";\n ctx.lineCap = \"round\";\n\n ctx.moveTo(mapped[0].cx, mapped[0].cy);\n for (let i = 0; i < mapped.length - 1; i++) {\n const p0 = mapped[Math.max(0, i - 1)];\n const p1 = mapped[i];\n const p2 = mapped[i + 1];\n const p3 = mapped[Math.min(mapped.length - 1, i + 2)];\n\n const cp1x = p1.cx + (p2.cx - p0.cx) / 6;\n const cp1y = p1.cy + (p2.cy - p0.cy) / 6;\n const cp2x = p2.cx - (p3.cx - p1.cx) / 6;\n const cp2y = p2.cy - (p3.cy - p1.cy) / 6;\n\n ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, p2.cx, p2.cy);\n }\n ctx.stroke();\n\n // Draw dots at each of the 26 steps\n ctx.fillStyle = curveColor;\n for (const p of mapped) {\n ctx.beginPath();\n ctx.arc(p.cx, p.cy, 2, 0, Math.PI * 2);\n ctx.fill();\n }\n }, [graphData, tokens]);\n\n const borderColor = srgbToHex(tokens.border.srgb);\n\n return (\n <canvas\n ref={canvasRef}\n style={{\n width: \"100%\",\n height: GRAPH_HEIGHT,\n borderRadius: 6,\n border: `1px solid ${borderColor}`,\n display: \"block\",\n overflow: \"hidden\",\n }}\n />\n );\n}\n\n// --- Section ---\n\ninterface DynamicRangeSectionProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}\n\nexport function DynamicRangeSection({\n state,\n dispatch,\n}: DynamicRangeSectionProps) {\n const tokens = useTokens();\n const labelColor = srgbToHex(tokens.textSecondary.srgb);\n\n const labelStyle = {\n fontSize: 11,\n fontWeight: 600 as const,\n color: labelColor,\n textTransform: \"uppercase\" as const,\n letterSpacing: 0.5,\n };\n\n const wDisplay = internalToDisplay(state.dynamicRange.lightest);\n const bDisplay = internalToDisplay(state.dynamicRange.darkest);\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n {/* Dynamic range graph */}\n <DynamicRangeGraph state={state} />\n\n {/* Labels above slider */}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <span style={labelStyle}>Whites</span>\n <span style={labelStyle}>Blacks</span>\n </div>\n\n {/* Dual range slider */}\n <DualRangeSlider\n whitesValue={state.dynamicRange.lightest}\n blacksValue={state.dynamicRange.darkest}\n onWhitesChange={(v) => dispatch({ type: \"SET_LIGHTEST\", value: v })}\n onBlacksChange={(v) => dispatch({ type: \"SET_DARKEST\", value: v })}\n />\n\n {/* Numeric inputs below slider */}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <RangeInput\n display={wDisplay}\n onCommit={(v) => dispatch({ type: \"SET_LIGHTEST\", value: v })}\n toInternal={displayToInternal}\n />\n <RangeInput\n display={bDisplay}\n onCommit={(v) => dispatch({ type: \"SET_DARKEST\", value: v })}\n toInternal={displayToInternal}\n />\n </div>\n\n {/* Global Hue Grading — Light End */}\n <div style={{ ...labelStyle, marginTop: 4 }}>\n Global Hue Grading — Light\n </div>\n <div style={{ display: \"flex\", gap: 12 }}>\n <div style={{ flex: 1 }}>\n <Select\n options={STRENGTH_OPTIONS}\n value={state.globalHueGrading.light.strength}\n onValueChange={(s) =>\n dispatch({\n type: \"SET_GLOBAL_GRADE_LIGHT_STRENGTH\",\n strength: s as HueGradingStrength,\n })\n }\n label=\"Strength\"\n />\n </div>\n {state.globalHueGrading.light.strength !== \"none\" && (\n <div style={{ flex: 1 }}>\n <HueSlider\n value={state.globalHueGrading.light.hue}\n onValueChange={(hue) =>\n dispatch({ type: \"SET_GLOBAL_GRADE_LIGHT_HUE\", hue })\n }\n label=\"Target Hue\"\n showValue\n />\n </div>\n )}\n </div>\n\n {/* Global Hue Grading — Dark End */}\n <div style={{ ...labelStyle, marginTop: 4 }}>\n Global Hue Grading — Dark\n </div>\n <div style={{ display: \"flex\", gap: 12 }}>\n <div style={{ flex: 1 }}>\n <Select\n options={STRENGTH_OPTIONS}\n value={state.globalHueGrading.dark.strength}\n onValueChange={(s) =>\n dispatch({\n type: \"SET_GLOBAL_GRADE_DARK_STRENGTH\",\n strength: s as HueGradingStrength,\n })\n }\n label=\"Strength\"\n />\n </div>\n {state.globalHueGrading.dark.strength !== \"none\" && (\n <div style={{ flex: 1 }}>\n <HueSlider\n value={state.globalHueGrading.dark.hue}\n onValueChange={(hue) =>\n dispatch({ type: \"SET_GLOBAL_GRADE_DARK_HUE\", hue })\n }\n label=\"Target Hue\"\n showValue\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { Select } from \"@newtonedev/components\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\n\nconst ICON_VARIANT_OPTIONS = [\n { label: \"Outlined\", value: \"outlined\" },\n { label: \"Rounded\", value: \"rounded\" },\n { label: \"Sharp\", value: \"sharp\" },\n];\n\nconst ICON_WEIGHT_OPTIONS = [\n { label: \"100\", value: \"100\" },\n { label: \"200\", value: \"200\" },\n { label: \"300\", value: \"300\" },\n { label: \"400\", value: \"400\" },\n { label: \"500\", value: \"500\" },\n { label: \"600\", value: \"600\" },\n { label: \"700\", value: \"700\" },\n];\n\ninterface IconsSectionProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}\n\nexport function IconsSection({ state, dispatch }: IconsSectionProps) {\n const variant = state.icons?.variant ?? \"rounded\";\n const weight = state.icons?.weight ?? 400;\n return (\n <div style={{ display: \"flex\", gap: 12 }}>\n <div style={{ flex: 1 }}>\n <Select\n options={ICON_VARIANT_OPTIONS}\n value={variant}\n onValueChange={(v) =>\n dispatch({\n type: \"SET_ICON_VARIANT\",\n variant: v as \"outlined\" | \"rounded\" | \"sharp\",\n })\n }\n label=\"Variant\"\n />\n </div>\n <div style={{ flex: 1 }}>\n <Select\n options={ICON_WEIGHT_OPTIONS}\n value={weight.toString()}\n onValueChange={(v) =>\n dispatch({\n type: \"SET_ICON_WEIGHT\",\n weight: parseInt(v) as\n | 100\n | 200\n | 300\n | 400\n | 500\n | 600\n | 700,\n })\n }\n label=\"Weight\"\n />\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useMemo, useCallback } from \"react\";\nimport { useTokens } from \"@newtonedev/components\";\nimport {\n GOOGLE_FONTS,\n SYSTEM_FONTS,\n} from \"@newtonedev/components\";\nimport type { GoogleFontEntry, SystemFontEntry, FontConfig } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\n\ntype FontSlot = \"default\" | \"display\" | \"mono\";\n\ninterface FontPickerProps {\n readonly label: string;\n readonly slot: FontSlot;\n readonly currentFont: FontConfig;\n readonly onSelect: (font: FontConfig) => void;\n}\n\n/** Preload all curated Google Fonts for preview on first dropdown open. */\nlet previewLoaded = false;\nfunction preloadFontsForPreview() {\n if (previewLoaded || typeof document === \"undefined\") return;\n previewLoaded = true;\n const families = GOOGLE_FONTS.map(\n (f) => `family=${f.family.replace(/ /g, \"+\")}:wght@400`,\n ).join(\"&\");\n const url = `https://fonts.googleapis.com/css2?${families}&display=swap`;\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n document.head.appendChild(link);\n}\n\nfunction googleFontToConfig(entry: GoogleFontEntry): FontConfig {\n return {\n type: \"google\",\n family: entry.family,\n fallback: entry.fallback,\n };\n}\n\nfunction systemFontToConfig(entry: SystemFontEntry): FontConfig {\n return {\n type: \"system\",\n family: entry.family,\n fallback: entry.fallback,\n };\n}\n\nconst CATEGORY_LABELS: Record<string, string> = {\n \"sans-serif\": \"Sans Serif\",\n serif: \"Serif\",\n monospace: \"Monospace\",\n display: \"Display\",\n};\n\nconst CATEGORY_ORDER: readonly string[] = [\n \"sans-serif\",\n \"serif\",\n \"monospace\",\n \"display\",\n];\nconst MONO_CATEGORY_ORDER: readonly string[] = [\n \"monospace\",\n \"sans-serif\",\n \"serif\",\n \"display\",\n];\n\nexport function FontPicker({\n label,\n slot,\n currentFont,\n onSelect,\n}: FontPickerProps) {\n const tokens = useTokens();\n const [isOpen, setIsOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const labelColor = srgbToHex(tokens.textSecondary.srgb);\n const textColor = srgbToHex(tokens.textPrimary.srgb);\n const bgColor = srgbToHex(tokens.backgroundElevated.srgb);\n const borderColor = srgbToHex(tokens.border.srgb);\n const hoverColor = srgbToHex(tokens.backgroundSunken.srgb);\n const interactiveColor = srgbToHex(tokens.accent.fill.srgb);\n\n useEffect(() => {\n if (!isOpen) return;\n function handleMouseDown(e: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"mousedown\", handleMouseDown);\n return () => document.removeEventListener(\"mousedown\", handleMouseDown);\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n preloadFontsForPreview();\n requestAnimationFrame(() => searchInputRef.current?.focus());\n }\n }, [isOpen]);\n\n const categoryOrder = slot === \"mono\" ? MONO_CATEGORY_ORDER : CATEGORY_ORDER;\n\n const filteredGoogleFonts = useMemo(() => {\n const query = search.toLowerCase().trim();\n const fonts = query\n ? GOOGLE_FONTS.filter((f) => f.family.toLowerCase().includes(query))\n : GOOGLE_FONTS;\n\n const grouped: Record<string, GoogleFontEntry[]> = {};\n for (const cat of categoryOrder) {\n const inCategory = fonts.filter((f) => f.category === cat);\n if (inCategory.length > 0) {\n grouped[cat] = inCategory;\n }\n }\n return grouped;\n }, [search, categoryOrder]);\n\n const filteredSystemFonts = useMemo(() => {\n const query = search.toLowerCase().trim();\n return query\n ? SYSTEM_FONTS.filter((f) => f.family.toLowerCase().includes(query))\n : [...SYSTEM_FONTS];\n }, [search]);\n\n const handleSelect = useCallback(\n (font: FontConfig) => {\n onSelect(font);\n setIsOpen(false);\n setSearch(\"\");\n },\n [onSelect],\n );\n\n const fontFamily = currentFont.family.includes(\" \")\n ? `\"${currentFont.family}\"`\n : currentFont.family;\n\n return (\n <div ref={containerRef} style={{ position: \"relative\" }}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n style={{\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"6px 10px\",\n borderRadius: 6,\n border: `1px solid ${isOpen ? interactiveColor : borderColor}`,\n background: \"transparent\",\n cursor: \"pointer\",\n outline: \"none\",\n }}\n >\n <span style={{ fontSize: 12, color: labelColor }}>{label}</span>\n <span\n style={{\n fontSize: 12,\n color: textColor,\n fontFamily: `${fontFamily}, ${currentFont.fallback}`,\n maxWidth: 140,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {currentFont.family}\n </span>\n </button>\n\n {isOpen && (\n <div\n style={{\n position: \"absolute\",\n top: \"calc(100% + 4px)\",\n left: 0,\n right: 0,\n zIndex: 100,\n background: bgColor,\n border: `1px solid ${borderColor}`,\n borderRadius: 8,\n boxShadow: \"0 4px 16px rgba(0,0,0,0.15)\",\n maxHeight: 320,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n >\n <div style={{ padding: \"8px 8px 4px\" }}>\n <input\n ref={searchInputRef}\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search fonts...\"\n style={{\n width: \"100%\",\n padding: \"6px 8px\",\n fontSize: 12,\n borderRadius: 4,\n border: `1px solid ${borderColor}`,\n background: \"transparent\",\n color: textColor,\n outline: \"none\",\n boxSizing: \"border-box\",\n }}\n />\n </div>\n\n <div style={{ overflowY: \"auto\", padding: \"4px 0\" }}>\n {filteredSystemFonts.length > 0 && (\n <div>\n <div\n style={{\n fontSize: 10,\n fontWeight: 600,\n color: labelColor,\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n padding: \"6px 12px 2px\",\n }}\n >\n System\n </div>\n {filteredSystemFonts.map((f) => (\n <FontOption\n key={f.family}\n family={f.family}\n fallback={f.fallback}\n isSelected={\n currentFont.family === f.family &&\n currentFont.type === \"system\"\n }\n textColor={textColor}\n hoverColor={hoverColor}\n interactiveColor={interactiveColor}\n onSelect={() => handleSelect(systemFontToConfig(f))}\n />\n ))}\n </div>\n )}\n\n {Object.entries(filteredGoogleFonts).map(([category, fonts]) => (\n <div key={category}>\n <div\n style={{\n fontSize: 10,\n fontWeight: 600,\n color: labelColor,\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n padding: \"8px 12px 2px\",\n }}\n >\n {CATEGORY_LABELS[category] ?? category}\n </div>\n {fonts.map((f) => (\n <FontOption\n key={f.family}\n family={f.family}\n fallback={f.fallback}\n isSelected={\n currentFont.family === f.family &&\n currentFont.type === \"google\"\n }\n textColor={textColor}\n hoverColor={hoverColor}\n interactiveColor={interactiveColor}\n onSelect={() => handleSelect(googleFontToConfig(f))}\n />\n ))}\n </div>\n ))}\n\n {filteredSystemFonts.length === 0 &&\n Object.keys(filteredGoogleFonts).length === 0 && (\n <div\n style={{\n padding: \"12px\",\n fontSize: 12,\n color: labelColor,\n textAlign: \"center\",\n }}\n >\n No fonts found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction FontOption({\n family,\n fallback,\n isSelected,\n textColor,\n hoverColor,\n interactiveColor,\n onSelect,\n}: {\n readonly family: string;\n readonly fallback: string;\n readonly isSelected: boolean;\n readonly textColor: string;\n readonly hoverColor: string;\n readonly interactiveColor: string;\n readonly onSelect: () => void;\n}) {\n const [hovered, setHovered] = useState(false);\n const fontFamily = family.includes(\" \") ? `\"${family}\"` : family;\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"5px 12px\",\n fontSize: 13,\n fontFamily: `${fontFamily}, ${fallback}`,\n color: isSelected ? interactiveColor : textColor,\n background: hovered ? hoverColor : \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n textAlign: \"left\",\n outline: \"none\",\n fontWeight: isSelected ? 600 : 400,\n }}\n >\n {family}\n </button>\n );\n}\n","import { Slider, useTokens } from \"@newtonedev/components\";\nimport type { FontConfig } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\nimport { FontPicker } from \"../FontPicker\";\n\nconst DEFAULT_FONT_DEFAULT: FontConfig = {\n type: \"system\",\n family: \"system-ui\",\n fallback:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n};\n\nconst DEFAULT_FONT_DISPLAY: FontConfig = {\n type: \"system\",\n family: \"system-ui\",\n fallback:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n};\n\nconst DEFAULT_FONT_MONO: FontConfig = {\n type: \"system\",\n family: \"ui-monospace\",\n fallback: \"SFMono-Regular, Menlo, Monaco, Consolas, monospace\",\n};\n\ninterface FontsSectionProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}\n\nexport function FontsSection({ state, dispatch }: FontsSectionProps) {\n const tokens = useTokens();\n\n const baseSize = state.typography?.scale.baseSize ?? 16;\n const ratio = state.typography?.scale.ratio ?? 1.25;\n\n const labelColor = srgbToHex(tokens.textSecondary.srgb);\n\n const handleFontChange = (\n slot: \"default\" | \"display\" | \"mono\",\n font: FontConfig,\n ) => {\n const actionType = {\n default: \"SET_FONT_DEFAULT\",\n display: \"SET_FONT_DISPLAY\",\n mono: \"SET_FONT_MONO\",\n }[slot] as \"SET_FONT_DEFAULT\" | \"SET_FONT_DISPLAY\" | \"SET_FONT_MONO\";\n dispatch({ type: actionType, font });\n };\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <div>\n <div\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: labelColor,\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n marginBottom: 8,\n }}\n >\n Scale\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <Slider\n value={baseSize}\n onValueChange={(v) =>\n dispatch({ type: \"SET_TYPOGRAPHY_BASE_SIZE\", baseSize: v })\n }\n min={12}\n max={24}\n step={1}\n label=\"Base Size\"\n showValue\n />\n <Slider\n value={Math.round(ratio * 100)}\n onValueChange={(v) =>\n dispatch({ type: \"SET_TYPOGRAPHY_RATIO\", ratio: v / 100 })\n }\n min={110}\n max={150}\n step={5}\n label=\"Scale Ratio\"\n showValue\n />\n </div>\n </div>\n\n <div>\n <div\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: labelColor,\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n marginBottom: 8,\n }}\n >\n Fonts\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n <FontPicker\n label=\"Default\"\n slot=\"default\"\n currentFont={state.typography?.fonts.default ?? DEFAULT_FONT_DEFAULT}\n onSelect={(font) => handleFontChange(\"default\", font)}\n />\n <FontPicker\n label=\"Display\"\n slot=\"display\"\n currentFont={\n state.typography?.fonts.display ?? DEFAULT_FONT_DISPLAY\n }\n onSelect={(font) => handleFontChange(\"display\", font)}\n />\n <FontPicker\n label=\"Mono\"\n slot=\"mono\"\n currentFont={state.typography?.fonts.mono ?? DEFAULT_FONT_MONO}\n onSelect={(font) => handleFontChange(\"mono\", font)}\n />\n </div>\n </div>\n </div>\n );\n}\n","import { Slider, Select, useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { ConfiguratorState, SpacingPreset } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\n\ninterface OthersSectionProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}\n\nexport function OthersSection({ state, dispatch }: OthersSectionProps) {\n const tokens = useTokens();\n\n const spacingPreset = state.spacing?.preset ?? 'md';\n const intensity = state.roundness?.intensity ?? 0.5;\n\n const spacingOptions: Array<{ value: SpacingPreset; label: string }> = [\n { value: 'xs', label: 'Extra Small' },\n { value: 'sm', label: 'Small' },\n { value: 'md', label: 'Medium' },\n { value: 'lg', label: 'Large' },\n { value: 'xl', label: 'Extra Large' },\n ];\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <div>\n <div\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n marginBottom: 8,\n }}\n >\n Spacing\n </div>\n <Select\n value={spacingPreset}\n onValueChange={(preset) =>\n dispatch({ type: \"SET_SPACING_PRESET\", preset: preset as SpacingPreset })\n }\n options={spacingOptions}\n label=\"Preset\"\n />\n </div>\n\n <div>\n <div\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n marginBottom: 8,\n }}\n >\n Roundness\n </div>\n <Slider\n value={Math.round(intensity * 100)}\n onValueChange={(v) =>\n dispatch({ type: \"SET_ROUNDNESS_INTENSITY\", intensity: v / 100 })\n }\n min={0}\n max={100}\n label=\"Intensity\"\n showValue\n />\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { useTokens, Icon } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { Preset } from \"../types\";\nimport { presetHasUnpublishedChanges } from \"../utils/presets\";\n\ninterface PresetSelectorProps {\n readonly presets: readonly Preset[];\n readonly activePresetId: string;\n readonly publishedPresetId: string | null;\n readonly onSwitchPreset: (presetId: string) => void;\n readonly onCreatePreset: (name: string) => Promise<string>;\n readonly onRenamePreset: (presetId: string, name: string) => void;\n readonly onDeletePreset: (presetId: string) => Promise<void>;\n readonly onDuplicatePreset: (\n presetId: string,\n name: string,\n ) => Promise<string>;\n}\n\nexport function PresetSelector({\n presets,\n activePresetId,\n publishedPresetId,\n onSwitchPreset,\n onCreatePreset,\n onRenamePreset,\n onDeletePreset,\n onDuplicatePreset,\n}: PresetSelectorProps) {\n const tokens = useTokens();\n const [isOpen, setIsOpen] = useState(false);\n const [renamingId, setRenamingId] = useState<string | null>(null);\n const [renameValue, setRenameValue] = useState(\"\");\n const [menuOpenId, setMenuOpenId] = useState<string | null>(null);\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [hoveredAction, setHoveredAction] = useState<string | null>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const renameInputRef = useRef<HTMLInputElement>(null);\n\n const activePreset = presets.find((p) => p.id === activePresetId);\n\n const borderColor = srgbToHex(tokens.border.srgb);\n const bgColor = srgbToHex(tokens.background.srgb);\n const textPrimary = srgbToHex(tokens.textPrimary.srgb);\n const textSecondary = srgbToHex(tokens.textSecondary.srgb);\n const interactiveColor = srgbToHex(tokens.accent.fill.srgb);\n const warningColor = srgbToHex(tokens.warning.fill.srgb);\n const errorColor = srgbToHex(tokens.error.fill.srgb);\n const hoverBg = `${borderColor}18`;\n const activeBg = `${interactiveColor}14`;\n\n useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false);\n setMenuOpenId(null);\n setRenamingId(null);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen]);\n\n useEffect(() => {\n if (renamingId && renameInputRef.current) {\n renameInputRef.current.focus();\n renameInputRef.current.select();\n }\n }, [renamingId]);\n\n const handleCreate = useCallback(async () => {\n const name = `Preset ${presets.length + 1}`;\n const newId = await onCreatePreset(name);\n onSwitchPreset(newId);\n setIsOpen(false);\n }, [presets.length, onCreatePreset, onSwitchPreset]);\n\n const handleStartRename = useCallback(\n (presetId: string, currentName: string) => {\n setRenamingId(presetId);\n setRenameValue(currentName);\n setMenuOpenId(null);\n },\n [],\n );\n\n const handleCommitRename = useCallback(() => {\n if (renamingId && renameValue.trim()) {\n onRenamePreset(renamingId, renameValue.trim());\n }\n setRenamingId(null);\n }, [renamingId, renameValue, onRenamePreset]);\n\n const handleDelete = useCallback(\n async (presetId: string) => {\n if (presets.length <= 1) return;\n if (window.confirm(\"Delete this preset? This cannot be undone.\")) {\n await onDeletePreset(presetId);\n }\n setMenuOpenId(null);\n },\n [presets.length, onDeletePreset],\n );\n\n const handleDuplicate = useCallback(\n async (presetId: string, sourceName: string) => {\n const newId = await onDuplicatePreset(presetId, `${sourceName} (copy)`);\n onSwitchPreset(newId);\n setMenuOpenId(null);\n setIsOpen(false);\n },\n [onDuplicatePreset, onSwitchPreset],\n );\n\n return (\n <div ref={dropdownRef} style={{ position: \"relative\" }}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"4px 10px\",\n borderRadius: 6,\n border: `1px solid ${borderColor}`,\n backgroundColor: \"transparent\",\n color: textPrimary,\n fontSize: 12,\n fontWeight: 500,\n cursor: \"pointer\",\n maxWidth: 160,\n }}\n >\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {activePreset?.name ?? \"Default\"}\n </span>\n <Icon\n name=\"expand_more\"\n size={14}\n style={{\n transform: isOpen ? \"rotate(180deg)\" : \"none\",\n transition: \"transform 150ms ease\",\n flexShrink: 0,\n } as any}\n />\n </button>\n\n {isOpen && (\n <div\n style={{\n position: \"absolute\",\n top: \"calc(100% + 4px)\",\n left: 0,\n width: 260,\n backgroundColor: bgColor,\n border: `1px solid ${borderColor}`,\n borderRadius: 8,\n boxShadow: \"0 4px 12px rgba(0,0,0,0.15)\",\n zIndex: 100,\n overflow: \"hidden\",\n }}\n >\n <div style={{ maxHeight: 240, overflowY: \"auto\", padding: \"4px 0\" }}>\n {presets.map((preset) => {\n const isActive = preset.id === activePresetId;\n const isPublishedPreset = preset.id === publishedPresetId;\n const hasChanges = presetHasUnpublishedChanges(preset);\n const isHovered = hoveredId === preset.id;\n const isRenaming = renamingId === preset.id;\n const isMenuShown = menuOpenId === preset.id;\n\n return (\n <div\n key={preset.id}\n onMouseEnter={() => setHoveredId(preset.id)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: \"6px 12px\",\n backgroundColor: isActive\n ? activeBg\n : isHovered\n ? hoverBg\n : \"transparent\",\n cursor: isRenaming ? \"default\" : \"pointer\",\n transition: \"background-color 100ms ease\",\n position: \"relative\",\n }}\n >\n {isRenaming ? (\n <input\n ref={renameInputRef}\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onBlur={handleCommitRename}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleCommitRename();\n if (e.key === \"Escape\") setRenamingId(null);\n }}\n style={{\n flex: 1,\n fontSize: 13,\n padding: \"2px 6px\",\n border: `1px solid ${interactiveColor}`,\n borderRadius: 4,\n backgroundColor: bgColor,\n color: textPrimary,\n outline: \"none\",\n }}\n />\n ) : (\n <>\n <div\n onClick={() => {\n onSwitchPreset(preset.id);\n setIsOpen(false);\n }}\n style={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n minWidth: 0,\n }}\n >\n <span\n style={{\n fontSize: 13,\n fontWeight: isActive ? 600 : 400,\n color: textPrimary,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {preset.name}\n </span>\n {hasChanges && (\n <span\n title=\"Unpublished changes\"\n style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n backgroundColor: warningColor,\n flexShrink: 0,\n }}\n />\n )}\n {isPublishedPreset && (\n <span\n style={{\n fontSize: 10,\n fontWeight: 600,\n color: interactiveColor,\n padding: \"1px 4px\",\n borderRadius: 3,\n border: `1px solid ${interactiveColor}`,\n flexShrink: 0,\n lineHeight: \"14px\",\n }}\n >\n API\n </span>\n )}\n </div>\n\n {(isHovered || isMenuShown) && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n setMenuOpenId(isMenuShown ? null : preset.id);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 24,\n height: 24,\n border: \"none\",\n background: \"none\",\n color: textSecondary,\n cursor: \"pointer\",\n borderRadius: 4,\n flexShrink: 0,\n }}\n >\n <Icon name=\"more_vert\" size={14} color={textSecondary} />\n </button>\n )}\n </>\n )}\n\n {isMenuShown && !isRenaming && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: -140,\n width: 130,\n backgroundColor: bgColor,\n border: `1px solid ${borderColor}`,\n borderRadius: 6,\n boxShadow: \"0 2px 8px rgba(0,0,0,0.12)\",\n zIndex: 101,\n overflow: \"hidden\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleStartRename(preset.id, preset.name);\n }}\n onMouseEnter={() => setHoveredAction(\"rename\")}\n onMouseLeave={() => setHoveredAction(null)}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"8px 12px\",\n border: \"none\",\n backgroundColor:\n hoveredAction === \"rename\"\n ? hoverBg\n : \"transparent\",\n color: textPrimary,\n fontSize: 12,\n textAlign: \"left\",\n cursor: \"pointer\",\n }}\n >\n Rename\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleDuplicate(preset.id, preset.name);\n }}\n onMouseEnter={() => setHoveredAction(\"duplicate\")}\n onMouseLeave={() => setHoveredAction(null)}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"8px 12px\",\n border: \"none\",\n backgroundColor:\n hoveredAction === \"duplicate\"\n ? hoverBg\n : \"transparent\",\n color: textPrimary,\n fontSize: 12,\n textAlign: \"left\",\n cursor: \"pointer\",\n }}\n >\n Duplicate\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(preset.id);\n }}\n onMouseEnter={() => setHoveredAction(\"delete\")}\n onMouseLeave={() => setHoveredAction(null)}\n disabled={presets.length <= 1}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"8px 12px\",\n border: \"none\",\n backgroundColor:\n hoveredAction === \"delete\"\n ? hoverBg\n : \"transparent\",\n color:\n presets.length <= 1 ? textSecondary : errorColor,\n fontSize: 12,\n textAlign: \"left\",\n cursor:\n presets.length <= 1 ? \"not-allowed\" : \"pointer\",\n opacity: presets.length <= 1 ? 0.5 : 1,\n }}\n >\n Delete\n </button>\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n <button\n onClick={handleCreate}\n onMouseEnter={() => setHoveredAction(\"create\")}\n onMouseLeave={() => setHoveredAction(null)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n width: \"100%\",\n padding: \"10px 12px\",\n border: \"none\",\n borderTop: `1px solid ${borderColor}`,\n backgroundColor:\n hoveredAction === \"create\" ? hoverBg : \"transparent\",\n color: textSecondary,\n fontSize: 13,\n cursor: \"pointer\",\n }}\n >\n <Icon name=\"add\" size={14} color={textSecondary} />\n New preset\n </button>\n </div>\n )}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { useTokens, Icon } from \"@newtonedev/components\";\nimport type { ColorMode } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { ColorResult } from \"newtone\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\nimport {\n ColorsSection,\n DynamicRangeSection,\n IconsSection,\n FontsSection,\n OthersSection,\n} from \"./sections\";\nimport { PresetSelector } from \"./PresetSelector\";\nimport type { Preset } from \"../types\";\n\nconst SIDEBAR_WIDTH = 360;\n\nconst ACCORDION_SECTIONS = [\n { id: \"dynamic-range\", label: \"Dynamic Range\", icon: \"contrast\" },\n { id: \"colors\", label: \"Colors\", icon: \"palette\" },\n { id: \"fonts\", label: \"Fonts\", icon: \"text_fields\" },\n { id: \"icons\", label: \"Icons\", icon: \"grid_view\" },\n { id: \"others\", label: \"Others\", icon: \"tune\" },\n] as const;\n\ninterface SidebarProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly previewColors: readonly (readonly ColorResult[])[];\n readonly isDirty: boolean;\n readonly onRevert: () => void;\n readonly presets: readonly Preset[];\n readonly activePresetId: string;\n readonly publishedPresetId: string | null;\n readonly onSwitchPreset: (presetId: string) => void;\n readonly onCreatePreset: (name: string) => Promise<string>;\n readonly onRenamePreset: (presetId: string, name: string) => void;\n readonly onDeletePreset: (presetId: string) => Promise<void>;\n readonly onDuplicatePreset: (\n presetId: string,\n name: string,\n ) => Promise<string>;\n readonly colorMode: ColorMode;\n readonly onColorModeChange: (mode: ColorMode) => void;\n}\n\nexport function Sidebar({\n state,\n dispatch,\n previewColors,\n isDirty,\n onRevert,\n presets,\n activePresetId,\n publishedPresetId,\n onSwitchPreset,\n onCreatePreset,\n onRenamePreset,\n onDeletePreset,\n onDuplicatePreset,\n colorMode,\n onColorModeChange,\n}: SidebarProps) {\n const tokens = useTokens();\n const [openSections, setOpenSections] = useState<Set<string>>(\n new Set([\"dynamic-range\", \"colors\"]),\n );\n const [hoveredSectionId, setHoveredSectionId] = useState<string | null>(null);\n\n const borderColor = srgbToHex(tokens.border.srgb);\n const bgColor = srgbToHex(tokens.background.srgb);\n const hoverBg = `${borderColor}10`;\n\n const toggleSection = (id: string) => {\n setOpenSections((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const renderSectionContent = (sectionId: string) => {\n switch (sectionId) {\n case \"dynamic-range\":\n return <DynamicRangeSection state={state} dispatch={dispatch} />;\n case \"colors\":\n return (\n <ColorsSection\n state={state}\n dispatch={dispatch}\n previewColors={previewColors}\n colorMode={colorMode}\n onColorModeChange={onColorModeChange}\n />\n );\n case \"icons\":\n return <IconsSection state={state} dispatch={dispatch} />;\n case \"fonts\":\n return <FontsSection state={state} dispatch={dispatch} />;\n case \"others\":\n return <OthersSection state={state} dispatch={dispatch} />;\n default:\n return null;\n }\n };\n\n return (\n <div\n style={{\n width: SIDEBAR_WIDTH,\n flexShrink: 0,\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100vh\",\n borderLeft: `1px solid ${borderColor}`,\n backgroundColor: bgColor,\n }}\n >\n {/* Sticky Header */}\n <div\n style={{\n flexShrink: 0,\n padding: \"16px 20px\",\n borderBottom: `1px solid ${borderColor}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span\n style={{\n fontSize: 16,\n fontWeight: 700,\n color: srgbToHex(tokens.textPrimary.srgb),\n }}\n >\n newtone\n </span>\n <PresetSelector\n presets={presets}\n activePresetId={activePresetId}\n publishedPresetId={publishedPresetId}\n onSwitchPreset={onSwitchPreset}\n onCreatePreset={onCreatePreset}\n onRenamePreset={onRenamePreset}\n onDeletePreset={onDeletePreset}\n onDuplicatePreset={onDuplicatePreset}\n />\n </div>\n\n {/* Scrollable Accordion Area */}\n <div\n style={{\n flex: 1,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n }}\n >\n {ACCORDION_SECTIONS.map((section) => {\n const isOpen = openSections.has(section.id);\n const isHovered = hoveredSectionId === section.id;\n\n return (\n <div key={section.id}>\n <button\n onClick={() => toggleSection(section.id)}\n onMouseEnter={() => setHoveredSectionId(section.id)}\n onMouseLeave={() => setHoveredSectionId(null)}\n aria-expanded={isOpen}\n aria-controls={`section-${section.id}`}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n padding: \"12px 20px\",\n border: \"none\",\n borderBottom: `1px solid ${borderColor}`,\n background: isHovered ? hoverBg : \"none\",\n cursor: \"pointer\",\n fontSize: 14,\n fontWeight: 500,\n color: srgbToHex(tokens.textPrimary.srgb),\n transition: \"background-color 100ms ease\",\n }}\n >\n <span style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <Icon name={section.icon} size={16} />\n {section.label}\n </span>\n <Icon\n name=\"expand_more\"\n size={16}\n style={{\n transform: isOpen ? \"rotate(180deg)\" : \"none\",\n transition: \"transform 150ms ease\",\n } as any}\n />\n </button>\n {isOpen && (\n <div\n id={`section-${section.id}`}\n role=\"region\"\n aria-label={section.label}\n style={{\n padding: \"16px 20px\",\n borderBottom: `1px solid ${borderColor}`,\n }}\n >\n {renderSectionContent(section.id)}\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* Sticky Footer */}\n <div\n style={{\n flexShrink: 0,\n padding: \"12px 20px\",\n borderTop: `1px solid ${borderColor}`,\n }}\n >\n <button\n disabled={!isDirty}\n onClick={onRevert}\n aria-label=\"Revert all changes to the last saved version\"\n style={{\n width: \"100%\",\n padding: \"8px 16px\",\n borderRadius: 6,\n border: `1px solid ${borderColor}`,\n backgroundColor: \"transparent\",\n color: isDirty\n ? srgbToHex(tokens.textPrimary.srgb)\n : srgbToHex(tokens.textSecondary.srgb),\n fontSize: 13,\n cursor: isDirty ? \"pointer\" : \"not-allowed\",\n opacity: isDirty ? 1 : 0.5,\n }}\n >\n Revert Changes\n </button>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { useTokens, Button } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { SaveStatus } from \"../types\";\n\ninterface EditorHeaderProps {\n readonly saveStatus: SaveStatus;\n readonly isPublished: boolean;\n readonly publishing: boolean;\n readonly onPublish: () => void;\n readonly onRetry: () => void;\n readonly headerSlots?: {\n readonly left?: ReactNode;\n readonly right?: ReactNode;\n };\n}\n\nconst STATUS_LABEL: Record<SaveStatus, string> = {\n saved: \"Saved\",\n saving: \"Saving...\",\n unsaved: \"Unsaved changes\",\n error: \"Save failed\",\n};\n\nexport function EditorHeader({\n saveStatus,\n isPublished,\n publishing,\n onPublish,\n onRetry,\n headerSlots,\n}: EditorHeaderProps) {\n const tokens = useTokens();\n const borderColor = srgbToHex(tokens.border.srgb);\n\n const statusColor: Record<SaveStatus, string> = {\n saved: srgbToHex(tokens.success.fill.srgb),\n saving: srgbToHex(tokens.warning.fill.srgb),\n unsaved: srgbToHex(tokens.textSecondary.srgb),\n error: srgbToHex(tokens.error.fill.srgb),\n };\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"12px 24px\",\n borderBottom: `1px solid ${borderColor}`,\n backgroundColor: srgbToHex(tokens.background.srgb),\n flexShrink: 0,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 16 }}>\n {headerSlots?.left}\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n <span\n style={{\n fontSize: 12,\n color: statusColor[saveStatus],\n fontWeight: 500,\n }}\n >\n {STATUS_LABEL[saveStatus]}\n </span>\n {saveStatus === \"error\" && (\n <Button variant=\"tertiary\" semantic=\"neutral\" size=\"sm\" icon=\"refresh\" onPress={onRetry}>\n Retry\n </Button>\n )}\n <Button\n variant=\"primary\"\n size=\"sm\"\n icon=\"publish\"\n onPress={onPublish}\n disabled={isPublished || publishing}\n >\n {publishing ? \"Publishing...\" : isPublished ? \"Published\" : \"Publish\"}\n </Button>\n {headerSlots?.right}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport {\n useTokens,\n CATEGORIES,\n getComponentsByCategory,\n} from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { PreviewView } from \"../types\";\n\ninterface TableOfContentsProps {\n readonly activeView: PreviewView;\n readonly selectedComponentId: string | null;\n readonly onNavigate: (view: PreviewView) => void;\n}\n\nconst TOC_WIDTH = 220;\n\nexport function TableOfContents({\n activeView,\n selectedComponentId,\n onNavigate,\n}: TableOfContentsProps) {\n const tokens = useTokens();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n\n const borderColor = srgbToHex(tokens.border.srgb);\n const activeColor = srgbToHex(tokens.accent.fill.srgb);\n const textPrimary = srgbToHex(tokens.textPrimary.srgb);\n const textSecondary = srgbToHex(tokens.textSecondary.srgb);\n const hoverBg = `${borderColor}20`;\n\n const isOverviewActive = activeView.kind === \"overview\";\n\n return (\n <nav\n aria-label=\"Component navigation\"\n style={{\n width: TOC_WIDTH,\n flexShrink: 0,\n overflowY: \"auto\",\n borderRight: `1px solid ${borderColor}`,\n padding: \"16px 0\",\n backgroundColor: srgbToHex(tokens.background.srgb),\n }}\n >\n <button\n onClick={() => onNavigate({ kind: \"overview\" })}\n onMouseEnter={() => setHoveredId(\"overview\")}\n onMouseLeave={() => setHoveredId(null)}\n aria-current={isOverviewActive ? \"page\" : undefined}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"6px 20px\",\n border: \"none\",\n background: isOverviewActive\n ? `${activeColor}14`\n : hoveredId === \"overview\"\n ? hoverBg\n : \"none\",\n cursor: \"pointer\",\n textAlign: \"left\",\n fontSize: 13,\n fontWeight: isOverviewActive ? 600 : 400,\n color: isOverviewActive ? activeColor : textPrimary,\n transition: \"background-color 100ms ease\",\n }}\n >\n Overview\n </button>\n\n {CATEGORIES.map((category) => {\n const components = getComponentsByCategory(category.id);\n const isCategoryActive =\n activeView.kind === \"category\" &&\n activeView.categoryId === category.id;\n\n return (\n <div key={category.id} style={{ marginTop: 16 }}>\n <button\n onClick={() =>\n onNavigate({ kind: \"category\", categoryId: category.id })\n }\n onMouseEnter={() => setHoveredId(`cat-${category.id}`)}\n onMouseLeave={() => setHoveredId(null)}\n aria-current={isCategoryActive ? \"page\" : undefined}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"6px 20px\",\n border: \"none\",\n background: isCategoryActive\n ? `${activeColor}14`\n : hoveredId === `cat-${category.id}`\n ? hoverBg\n : \"none\",\n cursor: \"pointer\",\n textAlign: \"left\",\n fontSize: 11,\n fontWeight: 600,\n color: isCategoryActive ? activeColor : textSecondary,\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n transition: \"background-color 100ms ease\",\n }}\n >\n {category.name}\n </button>\n\n {components.map((comp) => {\n const isComponentActive =\n (activeView.kind === \"component\" &&\n activeView.componentId === comp.id) ||\n selectedComponentId === comp.id;\n\n return (\n <button\n key={comp.id}\n onClick={() =>\n onNavigate({ kind: \"component\", componentId: comp.id })\n }\n onMouseEnter={() => setHoveredId(comp.id)}\n onMouseLeave={() => setHoveredId(null)}\n aria-current={isComponentActive ? \"page\" : undefined}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"4px 20px 4px 32px\",\n border: \"none\",\n background: isComponentActive\n ? `${activeColor}14`\n : hoveredId === comp.id\n ? hoverBg\n : \"none\",\n cursor: \"pointer\",\n textAlign: \"left\",\n fontSize: 13,\n fontWeight: isComponentActive ? 600 : 400,\n color: isComponentActive ? activeColor : textPrimary,\n transition: \"background-color 100ms ease\",\n }}\n >\n {comp.name}\n </button>\n );\n })}\n </div>\n );\n })}\n </nav>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport {\n Button,\n Card,\n TextInput,\n Select,\n Toggle,\n Slider,\n HueSlider,\n Frame,\n Text,\n Icon,\n Wrapper,\n useTokens,\n} from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\n\ninterface ComponentRendererProps {\n readonly componentId: string;\n readonly props: Record<string, unknown>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyProps = any;\n\nfunction StatefulToggle(props: AnyProps) {\n const [value, setValue] = useState(props.value as boolean);\n return <Toggle {...props} value={value} onValueChange={setValue} />;\n}\n\nfunction StatefulSlider(props: AnyProps) {\n const [value, setValue] = useState(props.value as number);\n return <Slider {...props} value={value} onValueChange={setValue} />;\n}\n\nfunction StatefulHueSlider(props: AnyProps) {\n const [value, setValue] = useState(props.value as number);\n return <HueSlider {...props} value={value} onValueChange={setValue} />;\n}\n\nfunction StatefulTextInput(props: AnyProps) {\n const [value, setValue] = useState((props.value as string) ?? \"\");\n return <TextInput {...props} value={value} onChangeText={setValue} />;\n}\n\nfunction StatefulSelect(props: AnyProps) {\n const [value, setValue] = useState(props.value as string);\n return <Select {...props} value={value} onValueChange={setValue} />;\n}\n\nfunction CardPreview(props: AnyProps) {\n const tokens = useTokens();\n return (\n <Card {...props} style={{ padding: 20, minWidth: 200 }}>\n <div\n style={{\n fontSize: 14,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n marginBottom: 8,\n }}\n >\n Card Title\n </div>\n <div\n style={{\n fontSize: 13,\n color: srgbToHex(tokens.textSecondary.srgb),\n lineHeight: 1.4,\n }}\n >\n Sample card content at elevation {String(props.elevation ?? 0)}.\n </div>\n </Card>\n );\n}\n\nfunction FramePreview(props: AnyProps) {\n return (\n <Frame {...props} style={{ minWidth: 200, minHeight: 60 }}>\n <Text size=\"sm\">Frame content</Text>\n </Frame>\n );\n}\n\nfunction WrapperPreview(props: AnyProps) {\n return (\n <Wrapper {...props} style={{ minWidth: 200 }}>\n <Text size=\"sm\">Item 1</Text>\n <Text size=\"sm\">Item 2</Text>\n <Text size=\"sm\">Item 3</Text>\n </Wrapper>\n );\n}\n\nexport function ComponentRenderer({ componentId, props }: ComponentRendererProps) {\n const noop = useCallback(() => {}, []);\n\n switch (componentId) {\n case \"button\": {\n const icon = (props.icon as string) || undefined;\n return (\n <Button\n variant={props.variant as AnyProps}\n semantic={props.semantic as AnyProps}\n size={props.size as AnyProps}\n icon={icon}\n iconPosition={props.iconPosition as AnyProps}\n disabled={props.disabled as AnyProps}\n onPress={noop}\n >\n Button\n </Button>\n );\n }\n case \"text-input\":\n return <StatefulTextInput {...props} />;\n case \"select\":\n return <StatefulSelect {...props} />;\n case \"toggle\":\n return <StatefulToggle {...props} />;\n case \"slider\":\n return <StatefulSlider {...props} />;\n case \"hue-slider\":\n return <StatefulHueSlider {...props} />;\n case \"card\":\n return <CardPreview {...props} />;\n case \"text\":\n return (\n <Text\n size={props.size as AnyProps}\n weight={props.weight as AnyProps}\n color={props.color as AnyProps}\n font={props.font as AnyProps}\n >\n The quick brown fox\n </Text>\n );\n case \"icon\":\n return (\n <Icon\n name={(props.name as string) ?? \"home\"}\n size={props.size as AnyProps}\n fill={props.fill as AnyProps}\n />\n );\n case \"frame\":\n return (\n <FramePreview {...props} />\n );\n case \"wrapper\":\n return (\n <WrapperPreview {...props} />\n );\n default:\n return null;\n }\n}\n","import { useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport { CATEGORIES, getComponentsByCategory } from \"@newtonedev/components\";\nimport { ComponentRenderer } from \"./ComponentRenderer\";\nimport { useHover } from \"../hooks/useHover\";\n\ninterface OverviewViewProps {\n readonly onNavigateToCategory: (categoryId: string) => void;\n readonly onNavigateToComponent: (componentId: string) => void;\n}\n\nexport function OverviewView({\n onNavigateToCategory,\n onNavigateToComponent,\n}: OverviewViewProps) {\n const tokens = useTokens();\n\n return (\n <div style={{ padding: 32 }}>\n <h2\n style={{\n fontSize: 22,\n fontWeight: 700,\n color: srgbToHex(tokens.textPrimary.srgb),\n margin: 0,\n marginBottom: 4,\n }}\n >\n Component Library\n </h2>\n <p\n style={{\n fontSize: 14,\n color: srgbToHex(tokens.textSecondary.srgb),\n margin: 0,\n marginBottom: 32,\n }}\n >\n Browse components to see how your color system affects them.\n </p>\n\n {CATEGORIES.map((category) => {\n const components = getComponentsByCategory(category.id);\n if (components.length === 0) return null;\n\n return (\n <div key={category.id} style={{ marginBottom: 32 }}>\n <button\n onClick={() => onNavigateToCategory(category.id)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n margin: 0,\n marginBottom: 16,\n display: \"block\",\n }}\n >\n <span\n style={{\n fontSize: 16,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n }}\n >\n {category.name}\n </span>\n <span\n style={{\n fontSize: 13,\n color: srgbToHex(tokens.textSecondary.srgb),\n marginLeft: 8,\n }}\n >\n {category.description}\n </span>\n </button>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(240px, 1fr))\",\n gap: 16,\n }}\n >\n {components.map((component) => (\n <ComponentCard\n key={component.id}\n componentId={component.id}\n name={component.name}\n description={component.description}\n defaultVariantProps={component.variants[0]?.props ?? {}}\n onClick={() => onNavigateToComponent(component.id)}\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction ComponentCard({\n componentId,\n name,\n description,\n defaultVariantProps,\n onClick,\n}: {\n readonly componentId: string;\n readonly name: string;\n readonly description: string;\n readonly defaultVariantProps: Record<string, unknown>;\n readonly onClick: () => void;\n}) {\n const tokens = useTokens();\n const { isHovered, hoverProps } = useHover();\n\n return (\n <button\n onClick={onClick}\n {...hoverProps}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 20,\n borderRadius: 12,\n border: `1px solid ${srgbToHex(\n isHovered ? tokens.accent.fill.srgb : tokens.border.srgb,\n )}`,\n backgroundColor: srgbToHex(tokens.backgroundElevated.srgb),\n cursor: \"pointer\",\n textAlign: \"left\",\n transform: isHovered ? \"translateY(-1px)\" : \"none\",\n boxShadow: isHovered ? \"0 2px 8px rgba(0,0,0,0.08)\" : \"none\",\n transition:\n \"border-color 150ms ease, transform 150ms ease, box-shadow 150ms ease\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 16,\n marginBottom: 16,\n borderRadius: 8,\n backgroundColor: srgbToHex(tokens.background.srgb),\n minHeight: 60,\n }}\n >\n <ComponentRenderer componentId={componentId} props={defaultVariantProps} />\n </div>\n <span\n style={{\n fontSize: 14,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n marginBottom: 4,\n }}\n >\n {name}\n </span>\n <span\n style={{\n fontSize: 12,\n color: srgbToHex(tokens.textSecondary.srgb),\n lineHeight: 1.4,\n }}\n >\n {description}\n </span>\n </button>\n );\n}\n","import { useState } from \"react\";\nimport { useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport { getCategory, getComponentsByCategory } from \"@newtonedev/components\";\nimport { ComponentRenderer } from \"./ComponentRenderer\";\n\ninterface CategoryViewProps {\n readonly categoryId: string;\n readonly onNavigateToComponent: (componentId: string) => void;\n}\n\nexport function CategoryView({\n categoryId,\n onNavigateToComponent,\n}: CategoryViewProps) {\n const tokens = useTokens();\n const category = getCategory(categoryId);\n const components = getComponentsByCategory(categoryId);\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n\n if (!category) return null;\n\n return (\n <div style={{ padding: 32 }}>\n <h2\n style={{\n fontSize: 22,\n fontWeight: 700,\n color: srgbToHex(tokens.textPrimary.srgb),\n margin: 0,\n marginBottom: 4,\n }}\n >\n {category.name}\n </h2>\n <p\n style={{\n fontSize: 14,\n color: srgbToHex(tokens.textSecondary.srgb),\n margin: 0,\n marginBottom: 32,\n }}\n >\n {category.description}\n </p>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(280px, 1fr))\",\n gap: 20,\n }}\n >\n {components.map((component) => {\n const isHovered = hoveredId === component.id;\n\n return (\n <button\n key={component.id}\n onClick={() => onNavigateToComponent(component.id)}\n onMouseEnter={() => setHoveredId(component.id)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 24,\n borderRadius: 12,\n border: `1px solid ${srgbToHex(\n isHovered ? tokens.accent.fill.srgb : tokens.border.srgb,\n )}`,\n backgroundColor: srgbToHex(tokens.backgroundElevated.srgb),\n cursor: \"pointer\",\n textAlign: \"left\",\n transform: isHovered ? \"translateY(-1px)\" : \"none\",\n boxShadow: isHovered\n ? \"0 2px 8px rgba(0,0,0,0.08)\"\n : \"none\",\n transition:\n \"border-color 150ms ease, transform 150ms ease, box-shadow 150ms ease\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 20,\n marginBottom: 16,\n borderRadius: 8,\n backgroundColor: srgbToHex(tokens.background.srgb),\n minHeight: 60,\n }}\n >\n <ComponentRenderer\n componentId={component.id}\n props={component.variants[0]?.props ?? {}}\n />\n </div>\n <span\n style={{\n fontSize: 15,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n marginBottom: 4,\n }}\n >\n {component.name}\n </span>\n <span\n style={{\n fontSize: 13,\n color: srgbToHex(tokens.textSecondary.srgb),\n lineHeight: 1.4,\n }}\n >\n {component.description}\n </span>\n <span\n style={{\n fontSize: 12,\n color: srgbToHex(tokens.textSecondary.srgb),\n marginTop: 8,\n }}\n >\n {component.variants.length} variant\n {component.variants.length !== 1 ? \"s\" : \"\"}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useMemo } from \"react\";\nimport { Icon, useTokens, ICON_CATALOG } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\n\ninterface IconBrowserViewProps {\n readonly selectedIconName: string;\n readonly onIconSelect: (name: string) => void;\n}\n\nexport function IconBrowserView({\n selectedIconName,\n onIconSelect,\n}: IconBrowserViewProps) {\n const tokens = useTokens();\n const [search, setSearch] = useState(\"\");\n const [hoveredIcon, setHoveredIcon] = useState<string | null>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const filteredCategories = useMemo(() => {\n const q = search.toLowerCase().trim();\n if (!q) return ICON_CATALOG;\n return ICON_CATALOG\n .map((cat) => ({\n ...cat,\n icons: cat.icons.filter((name) => name.includes(q)),\n }))\n .filter((cat) => cat.icons.length > 0);\n }, [search]);\n\n // Scroll to selected icon when it changes externally (user types in sidebar)\n useEffect(() => {\n if (!selectedIconName || !scrollRef.current) return;\n const el = scrollRef.current.querySelector(\n `[data-icon=\"${selectedIconName}\"]`,\n );\n if (el) {\n el.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n }\n }, [selectedIconName]);\n\n const accentColor = srgbToHex(tokens.accent.fill.srgb);\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n minHeight: 0,\n }}\n >\n {/* Search */}\n <div style={{ padding: \"0 32px\", flexShrink: 0 }}>\n <div style={{ position: \"relative\" }}>\n <Icon\n name=\"search\"\n size={18}\n color={srgbToHex(tokens.textTertiary.srgb)}\n style={{\n position: \"absolute\",\n left: 10,\n top: 9,\n pointerEvents: \"none\",\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Search icons...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{\n width: \"100%\",\n padding: \"8px 12px 8px 34px\",\n borderRadius: 8,\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n color: srgbToHex(tokens.textPrimary.srgb),\n fontSize: 13,\n boxSizing: \"border-box\",\n outline: \"none\",\n }}\n />\n </div>\n </div>\n\n {/* Icon grid */}\n <div\n ref={scrollRef}\n style={{\n flex: 1,\n overflowY: \"auto\",\n padding: \"16px 32px 32px\",\n }}\n >\n {filteredCategories.length === 0 && (\n <p\n style={{\n fontSize: 13,\n color: srgbToHex(tokens.textTertiary.srgb),\n textAlign: \"center\",\n marginTop: 32,\n }}\n >\n No icons found\n </p>\n )}\n\n {filteredCategories.map((category) => (\n <div key={category.id} style={{ marginBottom: 24 }}>\n <h3\n style={{\n fontSize: 12,\n fontWeight: 600,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n margin: \"0 0 8px\",\n }}\n >\n {category.label}\n </h3>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(80px, 1fr))\",\n gap: 6,\n }}\n >\n {category.icons.map((name) => {\n const isSelected = selectedIconName === name;\n const isHovered = hoveredIcon === name;\n\n const borderColor = isSelected\n ? accentColor\n : isHovered\n ? `${accentColor}66`\n : \"transparent\";\n\n return (\n <button\n key={name}\n data-icon={name}\n onClick={() => onIconSelect(name)}\n onMouseEnter={() => setHoveredIcon(name)}\n onMouseLeave={() => setHoveredIcon(null)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 4,\n padding: \"8px 4px 6px\",\n borderRadius: 8,\n border: `2px solid ${borderColor}`,\n backgroundColor: isSelected\n ? srgbToHex(tokens.backgroundElevated.srgb)\n : \"transparent\",\n cursor: \"pointer\",\n transition: \"border-color 150ms ease\",\n }}\n >\n <Icon name={name} size={40} />\n <span\n style={{\n fontSize: 10,\n color: isSelected\n ? accentColor\n : srgbToHex(tokens.textTertiary.srgb),\n fontWeight: isSelected ? 600 : 400,\n maxWidth: \"100%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {name}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport { getComponent } from \"@newtonedev/components\";\nimport { ComponentRenderer } from \"./ComponentRenderer\";\nimport { IconBrowserView } from \"./IconBrowserView\";\n\ninterface ComponentDetailViewProps {\n readonly componentId: string;\n readonly selectedVariantId: string | null;\n readonly onSelectVariant: (variantId: string) => void;\n readonly propOverrides?: Record<string, unknown>;\n readonly onPropOverride?: (name: string, value: unknown) => void;\n}\n\nexport function ComponentDetailView({\n componentId,\n selectedVariantId,\n onSelectVariant,\n propOverrides,\n onPropOverride,\n}: ComponentDetailViewProps) {\n const tokens = useTokens();\n const component = getComponent(componentId);\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n\n if (!component) return null;\n\n if (componentId === \"icon\" && propOverrides && onPropOverride) {\n return (\n <div\n style={{\n padding: \"32px 0 0\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <div style={{ padding: \"0 32px\", marginBottom: 24 }}>\n <h2\n style={{\n fontSize: 22,\n fontWeight: 700,\n color: srgbToHex(tokens.textPrimary.srgb),\n margin: 0,\n marginBottom: 4,\n }}\n >\n {component.name}\n </h2>\n <p\n style={{\n fontSize: 14,\n color: srgbToHex(tokens.textSecondary.srgb),\n margin: 0,\n }}\n >\n {component.description}\n </p>\n </div>\n <IconBrowserView\n selectedIconName={(propOverrides.name as string) ?? \"add\"}\n onIconSelect={(name) => onPropOverride(\"name\", name)}\n />\n </div>\n );\n }\n\n const interactiveColor = srgbToHex(tokens.accent.fill.srgb);\n\n return (\n <div style={{ padding: 32 }}>\n <h2\n style={{\n fontSize: 22,\n fontWeight: 700,\n color: srgbToHex(tokens.textPrimary.srgb),\n margin: 0,\n marginBottom: 4,\n }}\n >\n {component.name}\n </h2>\n <p\n style={{\n fontSize: 14,\n color: srgbToHex(tokens.textSecondary.srgb),\n margin: 0,\n marginBottom: 32,\n }}\n >\n {component.description}\n </p>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: 16,\n }}\n >\n {component.variants.map((variant) => {\n const isSelected = selectedVariantId === variant.id;\n const isHovered = hoveredId === variant.id;\n\n const borderColor = isSelected\n ? interactiveColor\n : isHovered\n ? `${interactiveColor}66`\n : srgbToHex(tokens.border.srgb);\n\n return (\n <button\n key={variant.id}\n onClick={() => onSelectVariant(variant.id)}\n onMouseEnter={() => setHoveredId(variant.id)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n padding: 16,\n borderRadius: 12,\n border: `2px solid ${borderColor}`,\n backgroundColor: srgbToHex(tokens.backgroundElevated.srgb),\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"border-color 150ms ease\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 20,\n marginBottom: 12,\n borderRadius: 8,\n backgroundColor: srgbToHex(tokens.background.srgb),\n minHeight: 56,\n }}\n >\n <ComponentRenderer\n componentId={componentId}\n props={variant.props}\n />\n </div>\n <span\n style={{\n fontSize: 13,\n fontWeight: isSelected ? 600 : 500,\n color: isSelected\n ? interactiveColor\n : srgbToHex(tokens.textPrimary.srgb),\n }}\n >\n {variant.label}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useCallback } from \"react\";\nimport { useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport { OverviewView } from \"../preview/OverviewView\";\nimport { CategoryView } from \"../preview/CategoryView\";\nimport { ComponentDetailView } from \"../preview/ComponentDetailView\";\nimport type { PreviewView } from \"../types\";\n\ninterface PreviewWindowProps {\n readonly view: PreviewView;\n readonly selectedVariantId: string | null;\n readonly onNavigate: (view: PreviewView) => void;\n readonly onSelectVariant: (variantId: string) => void;\n readonly propOverrides?: Record<string, unknown>;\n readonly onPropOverride?: (name: string, value: unknown) => void;\n}\n\nexport function PreviewWindow({\n view,\n selectedVariantId,\n onNavigate,\n onSelectVariant,\n propOverrides,\n onPropOverride,\n}: PreviewWindowProps) {\n const tokens = useTokens();\n\n const handleNavigateToCategory = useCallback(\n (categoryId: string) => onNavigate({ kind: \"category\", categoryId }),\n [onNavigate],\n );\n\n const handleNavigateToComponent = useCallback(\n (componentId: string) => onNavigate({ kind: \"component\", componentId }),\n [onNavigate],\n );\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n backgroundColor: srgbToHex(tokens.background.srgb),\n }}\n >\n <div style={{ flex: 1, overflowY: \"auto\" }}>\n {view.kind === \"overview\" && (\n <OverviewView\n onNavigateToCategory={handleNavigateToCategory}\n onNavigateToComponent={handleNavigateToComponent}\n />\n )}\n {view.kind === \"category\" && (\n <CategoryView\n categoryId={view.categoryId}\n onNavigateToComponent={handleNavigateToComponent}\n />\n )}\n {view.kind === \"component\" && (\n <ComponentDetailView\n componentId={view.componentId}\n selectedVariantId={selectedVariantId}\n onSelectVariant={onSelectVariant}\n propOverrides={propOverrides}\n onPropOverride={onPropOverride}\n />\n )}\n </div>\n </div>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport { useTokens, Icon } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\n\nexport function CopyButton({ text }: { readonly text: string }) {\n const tokens = useTokens();\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [text]);\n\n return (\n <button\n onClick={handleCopy}\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 4,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: srgbToHex(\n copied ? tokens.accent.fill.srgb : tokens.textTertiary.srgb,\n ),\n transition: \"color 150ms ease\",\n }}\n >\n <Icon\n name={copied ? \"check\" : \"content_copy\"}\n size={16}\n color={srgbToHex(\n copied ? tokens.accent.fill.srgb : tokens.textTertiary.srgb,\n )}\n />\n </button>\n );\n}\n\nexport function CodeBlock({\n code,\n}: {\n readonly code: string;\n}) {\n const tokens = useTokens();\n\n return (\n <div\n style={{\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n borderRadius: 8,\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"flex-end\",\n padding: \"4px 8px\",\n borderBottom: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n }}\n >\n <CopyButton text={code} />\n </div>\n <pre\n style={{\n padding: \"12px 16px\",\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n fontSize: 13,\n lineHeight: 1.5,\n fontFamily: \"'SF Mono', 'Fira Code', 'Fira Mono', Menlo, monospace\",\n color: srgbToHex(tokens.textPrimary.srgb),\n margin: 0,\n }}\n >\n <code>{code}</code>\n </pre>\n </div>\n );\n}\n","import { useCallback, type KeyboardEvent } from \"react\";\nimport { useTokens, getComponent, generateComponentCode, Select, NewtoneProvider, Icon } from \"@newtonedev/components\";\nimport type { EditableProp, NewtoneThemeConfig, ColorMode } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport { ComponentRenderer } from \"../preview/ComponentRenderer\";\nimport type { SidebarSelection } from \"../types\";\n\ninterface RightSidebarProps {\n readonly selection: SidebarSelection;\n readonly propOverrides: Record<string, unknown>;\n readonly onPropOverride: (name: string, value: unknown) => void;\n readonly onResetOverrides: () => void;\n readonly onClose: () => void;\n readonly onScopeToComponent: () => void;\n readonly previewConfig: NewtoneThemeConfig;\n readonly colorMode: ColorMode;\n}\n\nexport function RightSidebar({\n selection,\n propOverrides,\n onPropOverride,\n onResetOverrides,\n onClose,\n onScopeToComponent,\n previewConfig,\n colorMode,\n}: RightSidebarProps) {\n const tokens = useTokens();\n const visible = selection !== null;\n\n const component = selection ? getComponent(selection.componentId) : null;\n const variant =\n selection?.scope === \"variant\"\n ? component?.variants.find((v) => v.id === selection.variantId)\n : null;\n\n const code = component ? generateComponentCode(component, propOverrides) : \"\";\n\n return (\n <aside\n aria-label=\"Component inspector\"\n style={{\n position: \"absolute\",\n inset: 0,\n zIndex: 1,\n transform: visible ? \"translateX(0)\" : \"translateX(100%)\",\n opacity: visible ? 1 : 0,\n transition: \"transform 200ms ease, opacity 150ms ease\",\n display: \"flex\",\n flexDirection: \"column\",\n backgroundColor: srgbToHex(tokens.background.srgb),\n borderLeft: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n }}\n >\n {selection && component && (\n <>\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"12px 16px\",\n borderBottom: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n flexShrink: 0,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, minWidth: 0 }}>\n <button\n onClick={onClose}\n aria-label=\"Back to controls\"\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 4,\n color: srgbToHex(tokens.textSecondary.srgb),\n fontSize: 16,\n lineHeight: 1,\n flexShrink: 0,\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <Icon name=\"arrow_back\" size={16} color={srgbToHex(tokens.textSecondary.srgb)} />\n </button>\n {selection.scope === \"variant\" && variant ? (\n <>\n <button\n onClick={onScopeToComponent}\n aria-label={`Back to ${component.name} overview`}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n fontSize: 14,\n fontWeight: 500,\n color: srgbToHex(tokens.accent.fill.srgb),\n whiteSpace: \"nowrap\",\n }}\n >\n {component.name}\n </button>\n <span\n style={{\n fontSize: 13,\n color: srgbToHex(tokens.textSecondary.srgb),\n }}\n >\n /\n </span>\n <span\n style={{\n fontSize: 14,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {variant.label}\n </span>\n </>\n ) : (\n <span\n style={{\n fontSize: 14,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n }}\n >\n {component.name}\n </span>\n )}\n </div>\n </div>\n\n {/* Body */}\n <div\n style={{\n flex: 1,\n overflowY: \"auto\",\n padding: 16,\n }}\n >\n {/* Live Preview */}\n <div\n style={{\n marginBottom: 20,\n borderRadius: 8,\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n overflow: \"hidden\",\n }}\n >\n <NewtoneProvider\n config={previewConfig}\n initialMode={colorMode}\n key={colorMode}\n >\n <PreviewSurface\n componentId={selection.componentId}\n propOverrides={propOverrides}\n />\n </NewtoneProvider>\n </div>\n\n <h3\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n margin: 0,\n marginBottom: 16,\n }}\n >\n Properties\n </h3>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n {component.editableProps.map((prop) => (\n <PropControl\n key={prop.name}\n prop={prop}\n value={propOverrides[prop.name] ?? prop.defaultValue}\n onChange={(value) => onPropOverride(prop.name, value)}\n />\n ))}\n </div>\n\n {selection.scope === \"variant\" && (\n <button\n onClick={onResetOverrides}\n aria-label=\"Reset properties to variant defaults\"\n style={{\n marginTop: 20,\n width: \"100%\",\n padding: \"8px 12px\",\n borderRadius: 6,\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n backgroundColor: \"transparent\",\n color: srgbToHex(tokens.textSecondary.srgb),\n fontSize: 13,\n cursor: \"pointer\",\n }}\n >\n Reset to variant defaults\n </button>\n )}\n\n <h3\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n margin: 0,\n marginTop: 24,\n marginBottom: 12,\n }}\n >\n Code\n </h3>\n\n <CodeBlock code={code} />\n </div>\n </>\n )}\n </aside>\n );\n}\n\nfunction PreviewSurface({\n componentId,\n propOverrides,\n}: {\n readonly componentId: string;\n readonly propOverrides: Record<string, unknown>;\n}) {\n const previewTokens = useTokens();\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 24,\n height: 120,\n backgroundColor: srgbToHex(previewTokens.backgroundElevated.srgb),\n }}\n >\n <ComponentRenderer componentId={componentId} props={propOverrides} />\n </div>\n );\n}\n\nfunction PropControl({\n prop,\n value,\n onChange,\n}: {\n readonly prop: EditableProp;\n readonly value: unknown;\n readonly onChange: (value: unknown) => void;\n}) {\n const tokens = useTokens();\n\n const handleToggleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n onChange(!value);\n }\n },\n [onChange, value],\n );\n\n const inputStyle = {\n width: \"100%\",\n padding: \"6px 10px\",\n borderRadius: 6,\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n color: srgbToHex(tokens.textPrimary.srgb),\n fontSize: 13,\n fontFamily: \"'SF Mono', 'Fira Code', Menlo, monospace\",\n boxSizing: \"border-box\" as const,\n };\n\n return (\n <div>\n <div style={{ marginBottom: 4 }}>\n <span\n style={{\n fontSize: 12,\n fontWeight: 500,\n color: srgbToHex(tokens.textPrimary.srgb),\n }}\n >\n {prop.label}\n </span>\n </div>\n\n {prop.control === \"select\" && prop.options && (\n <Select\n options={prop.options.map((o) => ({\n label: o.label,\n value: String(o.value),\n }))}\n value={String(value)}\n onValueChange={(v) => {\n const option = prop.options!.find((o) => String(o.value) === v);\n if (option) onChange(option.value);\n }}\n size=\"sm\"\n />\n )}\n\n {prop.control === \"text\" && (\n <input\n type=\"text\"\n value={String(value)}\n onChange={(e) => onChange(e.target.value)}\n style={inputStyle}\n />\n )}\n\n {prop.control === \"number\" && (\n <input\n type=\"number\"\n value={Number(value)}\n onChange={(e) => onChange(Number(e.target.value))}\n style={inputStyle}\n />\n )}\n\n {prop.control === \"discrete-slider\" && prop.options && (() => {\n const options = prop.options!;\n const currentIndex = options.findIndex((o) => o.value === value);\n const idx = currentIndex >= 0 ? currentIndex : 0;\n\n return (\n <div>\n <input\n type=\"range\"\n min={0}\n max={options.length - 1}\n step={1}\n value={idx}\n onChange={(e) => onChange(options[Number(e.target.value)].value)}\n aria-label={prop.label}\n style={{\n width: \"100%\",\n accentColor: srgbToHex(tokens.accent.fill.srgb),\n cursor: \"pointer\",\n }}\n />\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: 2,\n }}\n >\n {options.map((o) => (\n <span\n key={String(o.value)}\n style={{\n fontSize: 11,\n fontFamily: \"'SF Mono', 'Fira Code', Menlo, monospace\",\n color: o.value === value\n ? srgbToHex(tokens.textPrimary.srgb)\n : srgbToHex(tokens.textTertiary.srgb),\n fontWeight: o.value === value ? 600 : 400,\n }}\n >\n {o.label}\n </span>\n ))}\n </div>\n </div>\n );\n })()}\n\n {prop.control === \"toggle\" && (\n <div\n role=\"switch\"\n aria-checked={!!value}\n aria-label={prop.label}\n tabIndex={0}\n onClick={() => onChange(!value)}\n onKeyDown={handleToggleKeyDown}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n cursor: \"pointer\",\n }}\n >\n <div\n style={{\n width: 36,\n height: 20,\n borderRadius: 10,\n backgroundColor: value\n ? srgbToHex(tokens.accent.fill.srgb)\n : srgbToHex(tokens.border.srgb),\n position: \"relative\",\n transition: \"background-color 150ms ease\",\n flexShrink: 0,\n }}\n >\n <div\n style={{\n width: 16,\n height: 16,\n borderRadius: 8,\n backgroundColor: \"#fff\",\n position: \"absolute\",\n top: 2,\n left: value ? 18 : 2,\n transition: \"left 150ms ease\",\n }}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport { NewtoneProvider } from \"@newtonedev/components\";\nimport type { NewtoneThemeConfig } from \"@newtonedev/components\";\nimport { useEditorState } from \"./hooks/useEditorState\";\nimport { EditorShell } from \"./components/EditorShell\";\nimport { Sidebar } from \"./components/Sidebar\";\nimport { EditorHeader } from \"./components/EditorHeader\";\nimport { TableOfContents } from \"./components/TableOfContents\";\nimport { PreviewWindow } from \"./components/PreviewWindow\";\nimport { RightSidebar } from \"./components/RightSidebar\";\nimport type { EditorProps } from \"./types\";\n\nexport function Editor({\n initialState,\n initialIsPublished,\n initialPresets,\n initialActivePresetId,\n initialPublishedPresetId,\n defaultState,\n chromeThemeConfig,\n persistence,\n headerSlots,\n onNavigate,\n initialPreviewView,\n}: EditorProps) {\n const editor = useEditorState({\n initialState,\n initialIsPublished,\n initialPresets,\n initialActivePresetId,\n initialPublishedPresetId,\n defaultState,\n persistence,\n onNavigate,\n initialPreviewView,\n });\n\n // Merge token overrides from chrome config into the preview config.\n // Token overrides (from Token Tuner) are stored separately from configurator\n // state, but should apply to the preview so components render accurately.\n const previewConfig: NewtoneThemeConfig = useMemo(\n () =>\n chromeThemeConfig.tokenOverrides\n ? { ...editor.themeConfig, tokenOverrides: chromeThemeConfig.tokenOverrides }\n : editor.themeConfig,\n [editor.themeConfig, chromeThemeConfig.tokenOverrides],\n );\n\n return (\n <NewtoneProvider config={chromeThemeConfig}>\n <EditorShell\n sidebar={\n <Sidebar\n state={editor.configuratorState}\n dispatch={editor.dispatch}\n previewColors={editor.previewColors}\n isDirty={editor.isDirty}\n onRevert={editor.handleRevert}\n presets={editor.presets}\n activePresetId={editor.activePresetId}\n publishedPresetId={editor.publishedPresetId}\n onSwitchPreset={editor.switchPreset}\n onCreatePreset={editor.createPreset}\n onRenamePreset={editor.renamePreset}\n onDeletePreset={editor.deletePreset}\n onDuplicatePreset={editor.duplicatePreset}\n colorMode={editor.colorMode}\n onColorModeChange={editor.handleColorModeChange}\n />\n }\n navbar={\n <EditorHeader\n saveStatus={editor.saveStatus}\n isPublished={editor.isPublished}\n publishing={editor.publishing}\n onPublish={editor.handlePublish}\n onRetry={() => editor.saveDraft(editor.latestStateRef.current)}\n headerSlots={headerSlots}\n />\n }\n content={\n <div\n style={{\n flex: 1,\n display: \"flex\",\n overflow: \"hidden\",\n minWidth: 0,\n }}\n >\n <TableOfContents\n activeView={editor.previewView}\n selectedComponentId={editor.selectedComponentId}\n onNavigate={editor.handlePreviewNavigate}\n />\n <div\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n minWidth: 0,\n }}\n >\n <NewtoneProvider\n config={previewConfig}\n initialMode={editor.colorMode}\n key={editor.colorMode}\n >\n <div style={{ flex: 1, overflowY: \"auto\", minWidth: 0 }}>\n <PreviewWindow\n view={editor.previewView}\n selectedVariantId={editor.selectedVariantId}\n onNavigate={editor.handlePreviewNavigate}\n onSelectVariant={editor.handleSelectVariant}\n propOverrides={editor.propOverrides}\n onPropOverride={editor.handlePropOverride}\n />\n </div>\n </NewtoneProvider>\n </div>\n </div>\n }\n rightPanel={\n <RightSidebar\n selection={editor.sidebarSelection}\n propOverrides={editor.propOverrides}\n onPropOverride={editor.handlePropOverride}\n onResetOverrides={editor.handleResetOverrides}\n onClose={editor.handleCloseSidebar}\n onScopeToComponent={editor.handleScopeToComponent}\n previewConfig={previewConfig}\n colorMode={editor.colorMode}\n />\n }\n />\n </NewtoneProvider>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/presets.ts","../src/hooks/useHover.ts","../src/hooks/usePresets.ts","../src/utils/measureFonts.ts","../src/utils/lookupFontMetrics.ts","../src/hooks/useEditorState.ts","../src/components/EditorShell.tsx","../src/components/PresetSelector.tsx","../src/components/Sidebar.tsx","../src/components/EditorHeader.tsx","../src/components/PrimaryNav.tsx","../src/components/sections/ColorsSection.tsx","../src/components/sections/DynamicRangeSection.tsx","../src/components/sections/IconsSection.tsx","../../../../newtone-fonts/src/defaults.ts","../../../../newtone-fonts/src/scale/breakpoints.ts","../../../../newtone-fonts/src/catalog.ts","../../../../newtone-fonts/src/responsive/scoring.ts","../../../../newtone-fonts/src/responsive/resolve.ts","../src/components/FontPicker.tsx","../src/components/sections/FontsSection.tsx","../src/components/sections/OthersSection.tsx","../src/components/ConfiguratorPanel.tsx","../src/components/TableOfContents.tsx","../src/preview/ComponentRenderer.tsx","../src/preview/OverviewView.tsx","../src/preview/CategoryView.tsx","../src/preview/IconBrowserView.tsx","../src/preview/ComponentDetailView.tsx","../src/components/PreviewWindow.tsx","../src/components/CodeBlock.tsx","../src/components/RightSidebar.tsx","../src/Editor.tsx"],"names":["useState","useCallback","useRef","measureAvgCharWidth","useConfigurator","usePreviewColors","CATEGORIES","useMemo","getComponent","getComponentsByCategory","useEffect","useTokens","jsxs","srgbToHex","jsx","Icon","Fragment","SIDEBAR_WIDTH","Button","SEMANTIC_HUE_RANGES","useWcagValidation","traditionalHueToOklch","hexToPaletteParams","ColorScaleSlider","TextInput","HueSlider","Slider","Select","Toggle","STRENGTH_OPTIONS","components","Card","Frame","Text","Wrapper","getCategory","ICON_CATALOG","useNewtoneTheme","NewtoneProvider","generateComponentCode"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Preset } from \"../types\";\n\nexport function findPreset(\n presets: readonly Preset[],\n presetId: string,\n): Preset | undefined {\n return presets.find((p) => p.id === presetId);\n}\n\nexport function updatePresetInArray(\n presets: readonly Preset[],\n presetId: string,\n updater: (preset: Preset) => Preset,\n): readonly Preset[] {\n return presets.map((p) => (p.id === presetId ? updater(p) : p));\n}\n\nexport function presetHasUnpublishedChanges(preset: Preset): boolean {\n if (preset.published_state === null) return true;\n return (\n JSON.stringify(preset.draft_state) !==\n JSON.stringify(preset.published_state)\n );\n}\n","import { useState, useCallback } from \"react\";\n\nexport function useHover() {\n const [isHovered, setIsHovered] = useState(false);\n const onMouseEnter = useCallback(() => setIsHovered(true), []);\n const onMouseLeave = useCallback(() => setIsHovered(false), []);\n return { isHovered, hoverProps: { onMouseEnter, onMouseLeave } };\n}\n","import { useState, useCallback, useRef } from \"react\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { Preset } from \"../types\";\n\ninterface UsePresetsOptions {\n readonly initialPresets: readonly Preset[];\n readonly initialActivePresetId: string;\n readonly initialPublishedPresetId: string | null;\n readonly defaultState: ConfiguratorState;\n readonly onPresetSwitch: (newState: ConfiguratorState) => void;\n readonly getCurrentState: () => ConfiguratorState;\n readonly flushPendingSave: () => Promise<void>;\n readonly persistPresets: (params: {\n readonly presets: readonly Preset[];\n readonly activePresetId: string;\n readonly publishedPresetId: string | null;\n }) => Promise<void>;\n}\n\ninterface UsePresetsReturn {\n readonly presets: readonly Preset[];\n readonly activePresetId: string;\n readonly publishedPresetId: string | null;\n readonly activePreset: Preset;\n readonly switchPreset: (presetId: string) => Promise<void>;\n readonly createPreset: (name: string) => Promise<string>;\n readonly renamePreset: (presetId: string, name: string) => void;\n readonly deletePreset: (presetId: string) => Promise<void>;\n readonly duplicatePreset: (\n presetId: string,\n newName: string,\n ) => Promise<string>;\n readonly updateActivePresetDraftState: (\n state: ConfiguratorState,\n ) => readonly Preset[];\n readonly publishActivePreset: (\n state: ConfiguratorState,\n ) => readonly Preset[];\n readonly revertActivePreset: () => ConfiguratorState | null;\n}\n\nexport function usePresets({\n initialPresets,\n initialActivePresetId,\n initialPublishedPresetId,\n defaultState,\n onPresetSwitch,\n getCurrentState,\n flushPendingSave,\n persistPresets,\n}: UsePresetsOptions): UsePresetsReturn {\n const [presets, setPresets] = useState<readonly Preset[]>(initialPresets);\n const [activePresetId, setActivePresetId] = useState(initialActivePresetId);\n const [publishedPresetId, setPublishedPresetId] = useState<string | null>(\n initialPublishedPresetId,\n );\n const presetsRef = useRef(presets);\n\n // Keep ref in sync\n presetsRef.current = presets;\n\n const activePreset =\n presets.find((p) => p.id === activePresetId) ?? presets[0];\n\n // --- Switch active preset ---\n const switchPreset = useCallback(\n async (presetId: string) => {\n if (presetId === activePresetId) return;\n\n // Flush any pending auto-save for current preset\n await flushPendingSave();\n\n // Save current state into the current preset's draft_state before switching\n const currentState = getCurrentState();\n const updatedPresets = presetsRef.current.map((p) =>\n p.id === activePresetId ? { ...p, draft_state: currentState } : p,\n );\n\n // Find target preset\n const target = updatedPresets.find((p) => p.id === presetId);\n if (!target) return;\n\n // Update state\n setPresets(updatedPresets);\n presetsRef.current = updatedPresets;\n setActivePresetId(presetId);\n\n // Load new preset's draft_state into configurator\n onPresetSwitch(target.draft_state);\n\n // Persist\n await persistPresets({\n presets: updatedPresets,\n activePresetId: presetId,\n publishedPresetId,\n });\n },\n [\n activePresetId,\n publishedPresetId,\n flushPendingSave,\n getCurrentState,\n onPresetSwitch,\n persistPresets,\n ],\n );\n\n // --- Create new preset ---\n const createPreset = useCallback(\n async (name: string): Promise<string> => {\n const newPreset: Preset = {\n id: crypto.randomUUID(),\n name,\n draft_state: defaultState,\n published_state: null,\n };\n const newPresets = [...presetsRef.current, newPreset];\n setPresets(newPresets);\n presetsRef.current = newPresets;\n await persistPresets({\n presets: newPresets,\n activePresetId,\n publishedPresetId,\n });\n return newPreset.id;\n },\n [defaultState, activePresetId, publishedPresetId, persistPresets],\n );\n\n // --- Duplicate preset ---\n const duplicatePreset = useCallback(\n async (presetId: string, newName: string): Promise<string> => {\n const source = presetsRef.current.find((p) => p.id === presetId);\n if (!source) throw new Error(\"Preset not found\");\n\n const newPreset: Preset = {\n id: crypto.randomUUID(),\n name: newName,\n draft_state: source.draft_state,\n published_state: null,\n };\n const newPresets = [...presetsRef.current, newPreset];\n setPresets(newPresets);\n presetsRef.current = newPresets;\n await persistPresets({\n presets: newPresets,\n activePresetId,\n publishedPresetId,\n });\n return newPreset.id;\n },\n [activePresetId, publishedPresetId, persistPresets],\n );\n\n // --- Rename preset ---\n const renamePreset = useCallback(\n (presetId: string, name: string) => {\n const newPresets = presetsRef.current.map((p) =>\n p.id === presetId ? { ...p, name } : p,\n );\n setPresets(newPresets);\n presetsRef.current = newPresets;\n // fire-and-forget\n persistPresets({\n presets: newPresets,\n activePresetId,\n publishedPresetId,\n });\n },\n [activePresetId, publishedPresetId, persistPresets],\n );\n\n // --- Delete preset ---\n const deletePreset = useCallback(\n async (presetId: string) => {\n if (presetsRef.current.length <= 1) return;\n\n const newPresets = presetsRef.current.filter((p) => p.id !== presetId);\n let newActiveId = activePresetId;\n let newPublishedId = publishedPresetId;\n\n // If deleting active preset, switch to first remaining\n if (presetId === activePresetId) {\n newActiveId = newPresets[0].id;\n onPresetSwitch(newPresets[0].draft_state);\n }\n\n // If deleting published preset, clear it\n if (presetId === publishedPresetId) {\n newPublishedId = null;\n }\n\n setPresets(newPresets);\n presetsRef.current = newPresets;\n setActivePresetId(newActiveId);\n setPublishedPresetId(newPublishedId);\n await persistPresets({\n presets: newPresets,\n activePresetId: newActiveId,\n publishedPresetId: newPublishedId,\n });\n },\n [activePresetId, publishedPresetId, onPresetSwitch, persistPresets],\n );\n\n // --- Update active preset's draft_state (called during auto-save) ---\n const updateActivePresetDraftState = useCallback(\n (state: ConfiguratorState): readonly Preset[] => {\n const newPresets = presetsRef.current.map((p) =>\n p.id === activePresetId ? { ...p, draft_state: state } : p,\n );\n setPresets(newPresets);\n presetsRef.current = newPresets;\n return newPresets;\n },\n [activePresetId],\n );\n\n // --- Publish active preset ---\n const publishActivePreset = useCallback(\n (state: ConfiguratorState): readonly Preset[] => {\n const newPresets = presetsRef.current.map((p) =>\n p.id === activePresetId\n ? { ...p, draft_state: state, published_state: state }\n : p,\n );\n setPresets(newPresets);\n presetsRef.current = newPresets;\n setPublishedPresetId(activePresetId);\n return newPresets;\n },\n [activePresetId],\n );\n\n // --- Revert active preset to its published_state ---\n const revertActivePreset = useCallback((): ConfiguratorState | null => {\n return activePreset.published_state;\n }, [activePreset]);\n\n return {\n presets,\n activePresetId,\n publishedPresetId,\n activePreset,\n switchPreset,\n createPreset,\n renamePreset,\n deletePreset,\n duplicatePreset,\n updateActivePresetDraftState,\n publishActivePreset,\n revertActivePreset,\n };\n}\n","import type { FontScope } from '@newtonedev/fonts';\nimport type { FontSlot } from '@newtonedev/components';\nimport { measureAvgCharWidth } from '@newtonedev/components';\n\n/**\n * Measure avgCharWidth ratios for all font scopes at publish time.\n *\n * Deduplicates by font family name so a font used in multiple scopes is\n * measured only once. Waits for fonts to load via `document.fonts.ready`\n * before measuring, since the editor always preloads fonts for preview.\n *\n * Called in `handlePublish` before writing to persistence so that calibration\n * data is included in the published config served to consumer sites.\n *\n * @param fonts - The typography.fonts record from ConfiguratorState.\n * @returns Map of fontFamily → avgCharWidthRatio (e.g. `{ \"Inter\": 0.52 }`).\n * Returns empty object if called outside a browser context.\n */\nexport async function measureFontCalibrations(\n fonts: Record<FontScope, FontSlot> | undefined,\n): Promise<Record<string, number>> {\n if (!fonts || typeof document === 'undefined') return {};\n\n const calibrations: Record<string, number> = {};\n const seen = new Set<string>();\n\n for (const slot of Object.values(fonts) as FontSlot[]) {\n const { family, fallback } = slot.config;\n if (seen.has(family)) continue;\n seen.add(family);\n\n const ratio = await measureAvgCharWidth(\n family,\n slot.weights.regular,\n fallback,\n );\n calibrations[family] = ratio;\n }\n\n return calibrations;\n}\n","import type { FontScope } from '@newtonedev/fonts';\nimport type { FontSlot } from '@newtonedev/components';\nimport type { FontRuntimeMetrics } from '@newtonedev/fonts';\n\n/**\n * Look up FontRuntimeMetrics for all font scopes from the font manifest.\n *\n * Called at publish time alongside measureFontCalibrations. Fetches the\n * manifest JSON from the given URL and extracts metrics for each unique\n * font family in the current typography configuration.\n *\n * Deduplicates by family name so a font used in multiple scopes is\n * looked up only once. Returns empty object if manifest is unavailable.\n *\n * @param fonts - The typography.fonts record from ConfiguratorState.\n * @param manifestUrl - URL of the font manifest (e.g., Supabase Storage public URL).\n * @returns Map of fontFamily → FontRuntimeMetrics.\n */\nexport async function lookupFontMetrics(\n fonts: Record<FontScope, FontSlot> | undefined,\n manifestUrl: string | undefined,\n): Promise<Record<string, FontRuntimeMetrics>> {\n if (!fonts || !manifestUrl) return {};\n\n try {\n const res = await fetch(manifestUrl);\n if (!res.ok) return {};\n const manifest = await res.json();\n\n const result: Record<string, FontRuntimeMetrics> = {};\n const seen = new Set<string>();\n\n for (const slot of Object.values(fonts) as FontSlot[]) {\n const family = slot.config.family;\n if (seen.has(family)) continue;\n seen.add(family);\n\n const entry = manifest.families?.[family];\n if (entry?.metrics) {\n result[family] = {\n naturalLineHeightRatio: entry.metrics.naturalLineHeightRatio,\n verticalCenterOffset: entry.metrics.verticalCenterOffset,\n features: entry.metrics.features ?? [],\n };\n }\n }\n\n return result;\n } catch {\n return {};\n }\n}\n","import { useState, useCallback, useRef, useEffect, useMemo } from \"react\";\nimport { getComponent, CATEGORIES, getComponentsByCategory } from \"@newtonedev/components\";\nimport type { ColorMode } from \"@newtonedev/components\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport { useConfigurator, usePreviewColors } from \"@newtonedev/configurator\";\nimport { usePresets } from \"./usePresets\";\nimport type {\n Preset,\n SaveStatus,\n PreviewView,\n SidebarSelection,\n EditorPersistence,\n} from \"../types\";\nimport { measureFontCalibrations } from \"../utils/measureFonts\";\nimport { lookupFontMetrics } from \"../utils/lookupFontMetrics\";\n\ninterface UseEditorStateOptions {\n readonly initialState: ConfiguratorState;\n readonly initialIsPublished: boolean;\n readonly initialPresets: readonly Preset[];\n readonly initialActivePresetId: string;\n readonly initialPublishedPresetId: string | null;\n readonly defaultState: ConfiguratorState;\n readonly persistence: EditorPersistence;\n readonly onNavigate?: (view: PreviewView) => void;\n readonly initialPreviewView?: PreviewView;\n readonly manifestUrl?: string;\n}\n\nexport function useEditorState({\n initialState,\n initialIsPublished,\n initialPresets,\n initialActivePresetId,\n initialPublishedPresetId,\n defaultState,\n persistence,\n onNavigate,\n initialPreviewView,\n manifestUrl,\n}: UseEditorStateOptions) {\n // --- Configurator state management ---\n const {\n state: configuratorState,\n dispatch,\n themeConfig,\n } = useConfigurator(initialState);\n const previewColors = usePreviewColors(configuratorState);\n\n const [saveStatus, setSaveStatus] = useState<SaveStatus>(\"saved\");\n const [isPublished, setIsPublished] = useState(initialIsPublished);\n const [publishing, setPublishing] = useState(false);\n const [colorMode, setColorMode] = useState<ColorMode>(\n initialState.preview.mode,\n );\n const [previewView, setPreviewView] = useState<PreviewView>(\n initialPreviewView ?? { kind: \"overview\" },\n );\n const [activeSectionId, setActiveSectionId] = useState<string>(\n CATEGORIES[0]?.id ?? \"colors\",\n );\n const [sidebarSelection, setSidebarSelection] =\n useState<SidebarSelection>(null);\n const [propOverrides, setPropOverrides] = useState<Record<string, unknown>>(\n {},\n );\n\n const debounceRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const latestStateRef = useRef<ConfiguratorState>(initialState);\n const isInitialMount = useRef(true);\n const initialStateRef = useRef(initialState);\n\n // --- Preset callbacks ---\n\n const handlePresetSwitch = useCallback(\n (newState: ConfiguratorState) => {\n dispatch({ type: \"LOAD_STATE\", state: newState });\n initialStateRef.current = newState;\n isInitialMount.current = true;\n },\n [dispatch],\n );\n\n const flushPendingSave = useCallback(async () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n debounceRef.current = undefined;\n }\n }, []);\n\n // --- Presets ---\n\n const {\n presets,\n activePresetId,\n publishedPresetId,\n activePreset,\n switchPreset,\n createPreset,\n renamePreset,\n deletePreset,\n duplicatePreset,\n updateActivePresetDraftState,\n publishActivePreset,\n revertActivePreset,\n } = usePresets({\n initialPresets,\n initialActivePresetId,\n initialPublishedPresetId,\n defaultState,\n onPresetSwitch: handlePresetSwitch,\n getCurrentState: () => latestStateRef.current,\n flushPendingSave,\n persistPresets: persistence.persistPresets,\n });\n\n // --- Dirty check for revert ---\n\n const isDirty = useMemo(\n () =>\n JSON.stringify(configuratorState) !==\n JSON.stringify(\n activePreset.published_state ?? initialStateRef.current,\n ),\n [configuratorState, activePreset.published_state],\n );\n\n const handleRevert = useCallback(() => {\n const publishedState = revertActivePreset();\n const revertTarget = publishedState ?? defaultState;\n if (\n window.confirm(\n \"Revert all changes to the last published version of this preset?\",\n )\n ) {\n dispatch({ type: \"LOAD_STATE\", state: revertTarget });\n initialStateRef.current = revertTarget;\n }\n }, [dispatch, revertActivePreset, defaultState]);\n\n // --- Prop override helpers ---\n\n const initOverridesFromVariant = useCallback(\n (componentId: string, variantId?: string) => {\n const comp = getComponent(componentId);\n if (!comp) return;\n const variant = variantId\n ? comp.variants.find((v) => v.id === variantId)\n : comp.variants[0];\n if (variant) {\n const overrides: Record<string, unknown> = {};\n for (const prop of comp.editableProps) {\n overrides[prop.name] = variant.props[prop.name] ?? prop.defaultValue;\n }\n setPropOverrides(overrides);\n }\n },\n [],\n );\n\n // --- Preview navigation + right sidebar coordination ---\n\n const handlePreviewNavigate = useCallback(\n (view: PreviewView) => {\n setPreviewView(view);\n onNavigate?.(view);\n\n if (view.kind === \"component\") {\n const comp = getComponent(view.componentId);\n const firstVariantId = comp?.variants[0]?.id;\n setSidebarSelection(\n firstVariantId\n ? { scope: \"variant\", componentId: view.componentId, variantId: firstVariantId }\n : { scope: \"component\", componentId: view.componentId },\n );\n initOverridesFromVariant(view.componentId);\n } else {\n setSidebarSelection(null);\n setPropOverrides({});\n }\n },\n [onNavigate, initOverridesFromVariant],\n );\n\n const handleSectionChange = useCallback(\n (sectionId: string) => {\n setActiveSectionId(sectionId);\n\n const sectionComponents = getComponentsByCategory(sectionId);\n if (sectionComponents.length === 1) {\n // Single-component sections (e.g. Typography, Symbols) skip\n // the category overview and navigate directly to the component.\n const comp = sectionComponents[0];\n const view: PreviewView = { kind: \"component\", componentId: comp.id };\n setPreviewView(view);\n onNavigate?.(view);\n const firstVariantId = comp.variants[0]?.id;\n setSidebarSelection(\n firstVariantId\n ? { scope: \"variant\", componentId: comp.id, variantId: firstVariantId }\n : { scope: \"component\", componentId: comp.id },\n );\n initOverridesFromVariant(comp.id);\n } else {\n const view: PreviewView = { kind: \"category\", categoryId: sectionId };\n setPreviewView(view);\n onNavigate?.(view);\n setSidebarSelection(null);\n setPropOverrides({});\n }\n },\n [onNavigate, initOverridesFromVariant],\n );\n\n const handleSelectVariant = useCallback(\n (variantId: string) => {\n if (previewView.kind === \"component\") {\n setSidebarSelection({\n scope: \"variant\",\n componentId: previewView.componentId,\n variantId,\n });\n initOverridesFromVariant(previewView.componentId, variantId);\n }\n },\n [previewView, initOverridesFromVariant],\n );\n\n const handleCloseSidebar = useCallback(() => {\n setSidebarSelection(null);\n setPropOverrides({});\n }, []);\n\n const handleScopeToComponent = useCallback(() => {\n if (sidebarSelection && sidebarSelection.scope === \"variant\") {\n setSidebarSelection({\n scope: \"component\",\n componentId: sidebarSelection.componentId,\n });\n initOverridesFromVariant(sidebarSelection.componentId);\n }\n }, [sidebarSelection, initOverridesFromVariant]);\n\n const handlePropOverride = useCallback(\n (propName: string, value: unknown) => {\n setPropOverrides((prev) => ({ ...prev, [propName]: value }));\n // Re-open sidebar if closed while viewing a component (e.g. icon browser click)\n setSidebarSelection((prev) => {\n if (prev !== null) return prev;\n if (previewView.kind === \"component\") {\n return { scope: \"component\", componentId: previewView.componentId };\n }\n return prev;\n });\n },\n [previewView],\n );\n\n const handleResetOverrides = useCallback(() => {\n if (sidebarSelection?.scope === \"variant\") {\n initOverridesFromVariant(\n sidebarSelection.componentId,\n sidebarSelection.variantId,\n );\n }\n }, [sidebarSelection, initOverridesFromVariant]);\n\n // --- Draft auto-save ---\n\n const saveDraft = useCallback(\n async (state: ConfiguratorState) => {\n setSaveStatus(\"saving\");\n const updatedPresets = updateActivePresetDraftState(state);\n const { error } = await persistence.onSaveDraft({\n state,\n presets: updatedPresets,\n });\n setSaveStatus(error ? \"error\" : \"saved\");\n },\n [persistence, updateActivePresetDraftState],\n );\n\n const scheduleSave = useCallback(() => {\n setSaveStatus(\"unsaved\");\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n saveDraft(latestStateRef.current);\n }, 2000);\n }, [saveDraft]);\n\n // --- State change detection ---\n\n useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n return;\n }\n latestStateRef.current = configuratorState;\n setIsPublished(false);\n scheduleSave();\n }, [configuratorState, scheduleSave]);\n\n const handleColorModeChange = useCallback(\n (mode: ColorMode) => {\n setColorMode(mode);\n dispatch({ type: \"SET_PREVIEW_MODE\", mode });\n },\n [dispatch],\n );\n\n // --- Publish ---\n\n const handlePublish = useCallback(async () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n setPublishing(true);\n\n try {\n const currentState = latestStateRef.current;\n const updatedPresets = publishActivePreset(currentState);\n const [calibrations, fontMetrics] = await Promise.all([\n measureFontCalibrations(currentState.typography?.fonts),\n lookupFontMetrics(currentState.typography?.fonts, manifestUrl),\n ]);\n\n const { error } = await persistence.onPublish({\n state: currentState,\n presets: updatedPresets,\n activePresetId,\n calibrations,\n fontMetrics,\n });\n\n if (!error) {\n setSaveStatus(\"saved\");\n setIsPublished(true);\n }\n } finally {\n setPublishing(false);\n }\n }, [activePresetId, publishActivePreset, persistence, manifestUrl]);\n\n // --- beforeunload warning ---\n useEffect(() => {\n const handleBeforeUnload = (e: BeforeUnloadEvent) => {\n if (saveStatus === \"unsaved\" || saveStatus === \"saving\") {\n e.preventDefault();\n }\n };\n window.addEventListener(\"beforeunload\", handleBeforeUnload);\n return () => {\n window.removeEventListener(\"beforeunload\", handleBeforeUnload);\n };\n }, [saveStatus]);\n\n // --- Flush pending save on unmount ---\n useEffect(() => {\n return () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n const state = latestStateRef.current;\n const flushedPresets = updateActivePresetDraftState(state);\n persistence.onSaveDraft({ state, presets: flushedPresets });\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const selectedVariantId =\n sidebarSelection?.scope === \"variant\" ? sidebarSelection.variantId : null;\n\n const selectedComponentId =\n sidebarSelection?.scope === \"component\" ||\n sidebarSelection?.scope === \"variant\"\n ? sidebarSelection.componentId\n : null;\n\n return {\n // Configurator\n configuratorState,\n dispatch,\n themeConfig,\n previewColors,\n\n // Save/publish\n saveStatus,\n isPublished,\n publishing,\n handlePublish,\n saveDraft,\n\n // Preview\n previewView,\n colorMode,\n activeSectionId,\n handlePreviewNavigate,\n handleSectionChange,\n handleSelectVariant,\n handleColorModeChange,\n\n // Sidebar\n sidebarSelection,\n selectedComponentId,\n selectedVariantId,\n propOverrides,\n handlePropOverride,\n handleResetOverrides,\n handleCloseSidebar,\n handleScopeToComponent,\n\n // Presets\n presets,\n activePresetId,\n publishedPresetId,\n switchPreset,\n createPreset,\n renamePreset,\n deletePreset,\n duplicatePreset,\n\n // Revert\n isDirty,\n handleRevert,\n\n // For retry button\n latestStateRef,\n } as const;\n}\n","import type { ReactNode } from \"react\";\nimport { useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\n\nconst SIDEBAR_WIDTH = 360;\n\ninterface EditorShellProps {\n readonly sidebar: ReactNode;\n readonly navbar: ReactNode;\n readonly content: ReactNode;\n readonly rightPanel: ReactNode;\n}\n\nexport function EditorShell({\n sidebar,\n navbar,\n content,\n rightPanel,\n}: EditorShellProps) {\n const tokens = useTokens();\n\n return (\n <div\n style={{\n display: \"flex\",\n height: \"100%\",\n overflow: \"hidden\",\n backgroundColor: srgbToHex(tokens.background.srgb),\n }}\n >\n <div\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n overflow: \"hidden\",\n minWidth: 0,\n }}\n >\n {navbar}\n\n <div\n style={{\n display: \"flex\",\n flex: 1,\n overflow: \"hidden\",\n }}\n >\n {content}\n </div>\n </div>\n\n <div\n style={{\n position: \"relative\",\n width: SIDEBAR_WIDTH,\n flexShrink: 0,\n overflow: \"hidden\",\n }}\n >\n {sidebar}\n {rightPanel}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from \"react\";\nimport { useTokens, Icon } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { Preset } from \"../types\";\nimport { presetHasUnpublishedChanges } from \"../utils/presets\";\n\ninterface PresetSelectorProps {\n readonly presets: readonly Preset[];\n readonly activePresetId: string;\n readonly publishedPresetId: string | null;\n readonly onSwitchPreset: (presetId: string) => void;\n readonly onCreatePreset: (name: string) => Promise<string>;\n readonly onRenamePreset: (presetId: string, name: string) => void;\n readonly onDeletePreset: (presetId: string) => Promise<void>;\n readonly onDuplicatePreset: (\n presetId: string,\n name: string,\n ) => Promise<string>;\n}\n\nexport function PresetSelector({\n presets,\n activePresetId,\n publishedPresetId,\n onSwitchPreset,\n onCreatePreset,\n onRenamePreset,\n onDeletePreset,\n onDuplicatePreset,\n}: PresetSelectorProps) {\n const tokens = useTokens();\n const [isOpen, setIsOpen] = useState(false);\n const [renamingId, setRenamingId] = useState<string | null>(null);\n const [renameValue, setRenameValue] = useState(\"\");\n const [menuOpenId, setMenuOpenId] = useState<string | null>(null);\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [hoveredAction, setHoveredAction] = useState<string | null>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const renameInputRef = useRef<HTMLInputElement>(null);\n\n const activePreset = presets.find((p) => p.id === activePresetId);\n\n const borderColor = srgbToHex(tokens.border.srgb);\n const bgColor = srgbToHex(tokens.background.srgb);\n const textPrimary = srgbToHex(tokens.textPrimary.srgb);\n const textSecondary = srgbToHex(tokens.textSecondary.srgb);\n const interactiveColor = srgbToHex(tokens.accent.fill.srgb);\n const warningColor = srgbToHex(tokens.warning.fill.srgb);\n const errorColor = srgbToHex(tokens.error.fill.srgb);\n const hoverBg = `${borderColor}18`;\n const activeBg = `${interactiveColor}14`;\n\n useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false);\n setMenuOpenId(null);\n setRenamingId(null);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen]);\n\n useEffect(() => {\n if (renamingId && renameInputRef.current) {\n renameInputRef.current.focus();\n renameInputRef.current.select();\n }\n }, [renamingId]);\n\n const handleCreate = useCallback(async () => {\n const name = `Preset ${presets.length + 1}`;\n const newId = await onCreatePreset(name);\n onSwitchPreset(newId);\n setIsOpen(false);\n }, [presets.length, onCreatePreset, onSwitchPreset]);\n\n const handleStartRename = useCallback(\n (presetId: string, currentName: string) => {\n setRenamingId(presetId);\n setRenameValue(currentName);\n setMenuOpenId(null);\n },\n [],\n );\n\n const handleCommitRename = useCallback(() => {\n if (renamingId && renameValue.trim()) {\n onRenamePreset(renamingId, renameValue.trim());\n }\n setRenamingId(null);\n }, [renamingId, renameValue, onRenamePreset]);\n\n const handleDelete = useCallback(\n async (presetId: string) => {\n if (presets.length <= 1) return;\n if (window.confirm(\"Delete this preset? This cannot be undone.\")) {\n await onDeletePreset(presetId);\n }\n setMenuOpenId(null);\n },\n [presets.length, onDeletePreset],\n );\n\n const handleDuplicate = useCallback(\n async (presetId: string, sourceName: string) => {\n const newId = await onDuplicatePreset(presetId, `${sourceName} (copy)`);\n onSwitchPreset(newId);\n setMenuOpenId(null);\n setIsOpen(false);\n },\n [onDuplicatePreset, onSwitchPreset],\n );\n\n return (\n <div ref={dropdownRef} style={{ position: \"relative\" }}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"4px 10px\",\n borderRadius: 6,\n border: `1px solid ${borderColor}`,\n backgroundColor: \"transparent\",\n color: textPrimary,\n fontSize: 12,\n fontWeight: 500,\n cursor: \"pointer\",\n maxWidth: 160,\n }}\n >\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {activePreset?.name ?? \"Default\"}\n </span>\n <Icon\n name=\"expand_more\"\n size={14}\n style={{\n transform: isOpen ? \"rotate(180deg)\" : \"none\",\n transition: \"transform 150ms ease\",\n flexShrink: 0,\n } as any}\n />\n </button>\n\n {isOpen && (\n <div\n style={{\n position: \"absolute\",\n top: \"calc(100% + 4px)\",\n left: 0,\n width: 260,\n backgroundColor: bgColor,\n border: `1px solid ${borderColor}`,\n borderRadius: 8,\n boxShadow: \"0 4px 12px rgba(0,0,0,0.15)\",\n zIndex: 100,\n overflow: \"hidden\",\n }}\n >\n <div style={{ maxHeight: 240, overflowY: \"auto\", padding: \"4px 0\" }}>\n {presets.map((preset) => {\n const isActive = preset.id === activePresetId;\n const isPublishedPreset = preset.id === publishedPresetId;\n const hasChanges = presetHasUnpublishedChanges(preset);\n const isHovered = hoveredId === preset.id;\n const isRenaming = renamingId === preset.id;\n const isMenuShown = menuOpenId === preset.id;\n\n return (\n <div\n key={preset.id}\n onMouseEnter={() => setHoveredId(preset.id)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: \"6px 12px\",\n backgroundColor: isActive\n ? activeBg\n : isHovered\n ? hoverBg\n : \"transparent\",\n cursor: isRenaming ? \"default\" : \"pointer\",\n transition: \"background-color 100ms ease\",\n position: \"relative\",\n }}\n >\n {isRenaming ? (\n <input\n ref={renameInputRef}\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onBlur={handleCommitRename}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleCommitRename();\n if (e.key === \"Escape\") setRenamingId(null);\n }}\n style={{\n flex: 1,\n fontSize: 13,\n padding: \"2px 6px\",\n border: `1px solid ${interactiveColor}`,\n borderRadius: 4,\n backgroundColor: bgColor,\n color: textPrimary,\n outline: \"none\",\n }}\n />\n ) : (\n <>\n <div\n onClick={() => {\n onSwitchPreset(preset.id);\n setIsOpen(false);\n }}\n style={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n minWidth: 0,\n }}\n >\n <span\n style={{\n fontSize: 13,\n fontWeight: isActive ? 600 : 400,\n color: textPrimary,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {preset.name}\n </span>\n {hasChanges && (\n <span\n title=\"Unpublished changes\"\n style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n backgroundColor: warningColor,\n flexShrink: 0,\n }}\n />\n )}\n {isPublishedPreset && (\n <span\n style={{\n fontSize: 10,\n fontWeight: 600,\n color: interactiveColor,\n padding: \"1px 4px\",\n borderRadius: 3,\n border: `1px solid ${interactiveColor}`,\n flexShrink: 0,\n lineHeight: \"14px\",\n }}\n >\n API\n </span>\n )}\n </div>\n\n {(isHovered || isMenuShown) && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n setMenuOpenId(isMenuShown ? null : preset.id);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 24,\n height: 24,\n border: \"none\",\n background: \"none\",\n color: textSecondary,\n cursor: \"pointer\",\n borderRadius: 4,\n flexShrink: 0,\n }}\n >\n <Icon name=\"more_vert\" size={14} color={textSecondary} />\n </button>\n )}\n </>\n )}\n\n {isMenuShown && !isRenaming && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: -140,\n width: 130,\n backgroundColor: bgColor,\n border: `1px solid ${borderColor}`,\n borderRadius: 6,\n boxShadow: \"0 2px 8px rgba(0,0,0,0.12)\",\n zIndex: 101,\n overflow: \"hidden\",\n }}\n >\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleStartRename(preset.id, preset.name);\n }}\n onMouseEnter={() => setHoveredAction(\"rename\")}\n onMouseLeave={() => setHoveredAction(null)}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"8px 12px\",\n border: \"none\",\n backgroundColor:\n hoveredAction === \"rename\"\n ? hoverBg\n : \"transparent\",\n color: textPrimary,\n fontSize: 12,\n textAlign: \"left\",\n cursor: \"pointer\",\n }}\n >\n Rename\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleDuplicate(preset.id, preset.name);\n }}\n onMouseEnter={() => setHoveredAction(\"duplicate\")}\n onMouseLeave={() => setHoveredAction(null)}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"8px 12px\",\n border: \"none\",\n backgroundColor:\n hoveredAction === \"duplicate\"\n ? hoverBg\n : \"transparent\",\n color: textPrimary,\n fontSize: 12,\n textAlign: \"left\",\n cursor: \"pointer\",\n }}\n >\n Duplicate\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(preset.id);\n }}\n onMouseEnter={() => setHoveredAction(\"delete\")}\n onMouseLeave={() => setHoveredAction(null)}\n disabled={presets.length <= 1}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"8px 12px\",\n border: \"none\",\n backgroundColor:\n hoveredAction === \"delete\"\n ? hoverBg\n : \"transparent\",\n color:\n presets.length <= 1 ? textSecondary : errorColor,\n fontSize: 12,\n textAlign: \"left\",\n cursor:\n presets.length <= 1 ? \"not-allowed\" : \"pointer\",\n opacity: presets.length <= 1 ? 0.5 : 1,\n }}\n >\n Delete\n </button>\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n <button\n onClick={handleCreate}\n onMouseEnter={() => setHoveredAction(\"create\")}\n onMouseLeave={() => setHoveredAction(null)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n width: \"100%\",\n padding: \"10px 12px\",\n border: \"none\",\n borderTop: `1px solid ${borderColor}`,\n backgroundColor:\n hoveredAction === \"create\" ? hoverBg : \"transparent\",\n color: textSecondary,\n fontSize: 13,\n cursor: \"pointer\",\n }}\n >\n <Icon name=\"add\" size={14} color={textSecondary} />\n New preset\n </button>\n </div>\n )}\n </div>\n );\n}\n","import { useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport { PresetSelector } from \"./PresetSelector\";\nimport type { Preset } from \"../types\";\n\nconst SIDEBAR_WIDTH = 360;\n\ninterface SidebarProps {\n readonly isDirty: boolean;\n readonly onRevert: () => void;\n readonly presets: readonly Preset[];\n readonly activePresetId: string;\n readonly publishedPresetId: string | null;\n readonly onSwitchPreset: (presetId: string) => void;\n readonly onCreatePreset: (name: string) => Promise<string>;\n readonly onRenamePreset: (presetId: string, name: string) => void;\n readonly onDeletePreset: (presetId: string) => Promise<void>;\n readonly onDuplicatePreset: (\n presetId: string,\n name: string,\n ) => Promise<string>;\n}\n\nexport function Sidebar({\n isDirty,\n onRevert,\n presets,\n activePresetId,\n publishedPresetId,\n onSwitchPreset,\n onCreatePreset,\n onRenamePreset,\n onDeletePreset,\n onDuplicatePreset,\n}: SidebarProps) {\n const tokens = useTokens();\n\n const borderColor = srgbToHex(tokens.border.srgb);\n const bgColor = srgbToHex(tokens.background.srgb);\n\n return (\n <div\n style={{\n width: SIDEBAR_WIDTH,\n flexShrink: 0,\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100vh\",\n borderLeft: `1px solid ${borderColor}`,\n backgroundColor: bgColor,\n }}\n >\n {/* Header */}\n <div\n style={{\n flexShrink: 0,\n padding: \"16px 20px\",\n borderBottom: `1px solid ${borderColor}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span\n style={{\n fontSize: 16,\n fontWeight: 700,\n color: srgbToHex(tokens.textPrimary.srgb),\n }}\n >\n newtone\n </span>\n <PresetSelector\n presets={presets}\n activePresetId={activePresetId}\n publishedPresetId={publishedPresetId}\n onSwitchPreset={onSwitchPreset}\n onCreatePreset={onCreatePreset}\n onRenamePreset={onRenamePreset}\n onDeletePreset={onDeletePreset}\n onDuplicatePreset={onDuplicatePreset}\n />\n </div>\n\n {/* Content area (empty for now) */}\n <div\n style={{\n flex: 1,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n }}\n />\n\n {/* Footer */}\n <div\n style={{\n flexShrink: 0,\n padding: \"12px 20px\",\n borderTop: `1px solid ${borderColor}`,\n }}\n >\n <button\n disabled={!isDirty}\n onClick={onRevert}\n aria-label=\"Revert all changes to the last saved version\"\n style={{\n width: \"100%\",\n padding: \"8px 16px\",\n borderRadius: 6,\n border: `1px solid ${borderColor}`,\n backgroundColor: \"transparent\",\n color: isDirty\n ? srgbToHex(tokens.textPrimary.srgb)\n : srgbToHex(tokens.textSecondary.srgb),\n fontSize: 13,\n cursor: isDirty ? \"pointer\" : \"not-allowed\",\n opacity: isDirty ? 1 : 0.5,\n }}\n >\n Revert Changes\n </button>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { useTokens, Button } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { SaveStatus } from \"../types\";\n\ninterface EditorHeaderProps {\n readonly saveStatus: SaveStatus;\n readonly isPublished: boolean;\n readonly publishing: boolean;\n readonly onPublish: () => void;\n readonly onRetry: () => void;\n readonly headerSlots?: {\n readonly left?: ReactNode;\n readonly right?: ReactNode;\n };\n}\n\nconst STATUS_LABEL: Record<SaveStatus, string> = {\n saved: \"Saved\",\n saving: \"Saving...\",\n unsaved: \"Unsaved changes\",\n error: \"Save failed\",\n};\n\nexport function EditorHeader({\n saveStatus,\n isPublished,\n publishing,\n onPublish,\n onRetry,\n headerSlots,\n}: EditorHeaderProps) {\n const tokens = useTokens();\n const borderColor = srgbToHex(tokens.border.srgb);\n\n const statusColor: Record<SaveStatus, string> = {\n saved: srgbToHex(tokens.success.fill.srgb),\n saving: srgbToHex(tokens.warning.fill.srgb),\n unsaved: srgbToHex(tokens.textSecondary.srgb),\n error: srgbToHex(tokens.error.fill.srgb),\n };\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"12px 24px\",\n borderBottom: `1px solid ${borderColor}`,\n backgroundColor: srgbToHex(tokens.background.srgb),\n flexShrink: 0,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 16 }}>\n {headerSlots?.left}\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n <span\n style={{\n fontSize: 12,\n color: statusColor[saveStatus],\n fontWeight: 500,\n }}\n >\n {STATUS_LABEL[saveStatus]}\n </span>\n {saveStatus === \"error\" && (\n <Button variant=\"tertiary\" semantic=\"neutral\" size=\"sm\" icon=\"refresh\" onPress={onRetry}>\n Retry\n </Button>\n )}\n <Button\n variant=\"primary\"\n size=\"sm\"\n icon=\"publish\"\n onPress={onPublish}\n disabled={isPublished || publishing}\n >\n {publishing ? \"Publishing...\" : isPublished ? \"Published\" : \"Publish\"}\n </Button>\n {headerSlots?.right}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { useTokens, Icon, CATEGORIES } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\n\ninterface PrimaryNavProps {\n readonly activeSectionId: string | null;\n readonly onSelectSection: (sectionId: string) => void;\n}\n\nconst NAV_WIDTH = 60;\n\nexport function PrimaryNav({ activeSectionId, onSelectSection }: PrimaryNavProps) {\n const tokens = useTokens();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n\n const bg = srgbToHex(tokens.background.srgb);\n const borderColor = srgbToHex(tokens.border.srgb);\n const activeBg = srgbToHex(tokens.backgroundInteractive.srgb);\n const iconColor = srgbToHex(tokens.textSecondary.srgb);\n const activeIconColor = srgbToHex(tokens.textPrimary.srgb);\n\n return (\n <nav\n aria-label=\"Section navigation\"\n style={{\n width: NAV_WIDTH,\n flexShrink: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n paddingTop: 12,\n gap: 4,\n backgroundColor: bg,\n borderRight: `1px solid ${borderColor}`,\n }}\n >\n {CATEGORIES.map((category) => {\n const isActive = activeSectionId === category.id;\n const isHovered = hoveredId === category.id;\n\n return (\n <button\n key={category.id}\n onClick={() => onSelectSection(category.id)}\n onMouseEnter={() => setHoveredId(category.id)}\n onMouseLeave={() => setHoveredId(null)}\n title={category.name}\n aria-current={isActive ? \"page\" : undefined}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 44,\n height: 44,\n borderRadius: 12,\n border: \"none\",\n backgroundColor: isActive\n ? activeBg\n : isHovered\n ? `${borderColor}20`\n : \"transparent\",\n cursor: \"pointer\",\n transition: \"background-color 150ms\",\n }}\n >\n <Icon\n name={category.icon ?? \"circle\"}\n size={24}\n color={isActive ? activeIconColor : iconColor}\n />\n </button>\n );\n })}\n </nav>\n );\n}\n","import { useState, useMemo, useCallback, useEffect } from \"react\";\nimport {\n HueSlider,\n Slider,\n Select,\n Toggle,\n ColorScaleSlider,\n TextInput,\n useTokens,\n} from \"@newtonedev/components\";\nimport type { ColorMode } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { ColorResult, DynamicRange } from \"newtone\";\nimport type { DesaturationStrength, HueGradingStrength } from \"newtone\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\nimport {\n SEMANTIC_HUE_RANGES,\n useWcagValidation,\n hexToPaletteParams,\n traditionalHueToOklch,\n} from \"@newtonedev/configurator\";\n\nconst STRENGTH_OPTIONS = [\n { label: \"None\", value: \"none\" },\n { label: \"Low\", value: \"low\" },\n { label: \"Medium\", value: \"medium\" },\n { label: \"Hard\", value: \"hard\" },\n];\n\ninterface ColorsSectionProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly previewColors: readonly (readonly ColorResult[])[];\n readonly colorMode: ColorMode;\n readonly onColorModeChange: (mode: ColorMode) => void;\n}\n\n/** Get the hex color at a normalizedValue from the preview colors array */\nfunction getHexAtNv(\n previewColors: readonly ColorResult[],\n nv: number,\n): string {\n const idx = Math.round((1 - nv) * (previewColors.length - 1));\n const clamped = Math.max(0, Math.min(previewColors.length - 1, idx));\n return srgbToHex(previewColors[clamped].srgb);\n}\n\nexport function ColorsSection({\n state,\n dispatch,\n previewColors,\n colorMode,\n onColorModeChange,\n}: ColorsSectionProps) {\n const tokens = useTokens();\n const [activePaletteIndex, setActivePaletteIndex] = useState(0);\n const [modeToggleHovered, setModeToggleHovered] = useState(false);\n\n const palette = state.palettes[activePaletteIndex];\n const hueRange = SEMANTIC_HUE_RANGES[activePaletteIndex];\n const isNeutral = activePaletteIndex === 0;\n\n const activeColor = srgbToHex(tokens.accent.fill.srgb);\n const borderColor = srgbToHex(tokens.border.srgb);\n\n // Resolve effective key color for current mode\n const effectiveKeyColor =\n colorMode === \"dark\" ? palette.keyColorDark : palette.keyColor;\n\n // Mode-aware action types\n const setKeyColorAction =\n colorMode === \"dark\"\n ? (\"SET_PALETTE_KEY_COLOR_DARK\" as const)\n : (\"SET_PALETTE_KEY_COLOR\" as const);\n const clearKeyColorAction =\n colorMode === \"dark\"\n ? (\"CLEAR_PALETTE_KEY_COLOR_DARK\" as const)\n : (\"CLEAR_PALETTE_KEY_COLOR\" as const);\n const hexAction =\n colorMode === \"dark\"\n ? (\"SET_PALETTE_FROM_HEX_DARK\" as const)\n : (\"SET_PALETTE_FROM_HEX\" as const);\n\n // WCAG validation for key color (already mode-aware)\n const wcag = useWcagValidation(state, activePaletteIndex);\n\n // Hex input state\n const [hexText, setHexText] = useState(\"\");\n const [hexError, setHexError] = useState(\"\");\n const [isEditingHex, setIsEditingHex] = useState(false);\n const [isHexUserSet, setIsHexUserSet] = useState(false);\n\n // Reset hex input state when mode changes\n useEffect(() => {\n setHexText(\"\");\n setHexError(\"\");\n setIsEditingHex(false);\n setIsHexUserSet(false);\n }, [colorMode]);\n\n // Compute displayed hex from current key color position\n const currentPreview = previewColors[activePaletteIndex];\n const displayedHex = useMemo(() => {\n if (!currentPreview || currentPreview.length === 0) return \"\";\n const nv = effectiveKeyColor ?? wcag.autoNormalizedValue;\n return getHexAtNv(currentPreview, nv);\n }, [currentPreview, effectiveKeyColor, wcag.autoNormalizedValue]);\n\n // Sync hex text when not actively editing and not user-submitted\n useEffect(() => {\n if (!isEditingHex && !isHexUserSet) {\n setHexText(displayedHex);\n }\n }, [displayedHex, isEditingHex, isHexUserSet]);\n\n // Build dynamic range for hex conversion\n const dynamicRange = useMemo((): DynamicRange => {\n const light =\n state.globalHueGrading.light.strength !== \"none\"\n ? {\n hue: traditionalHueToOklch(state.globalHueGrading.light.hue),\n strength: state.globalHueGrading.light.strength,\n }\n : undefined;\n const dark =\n state.globalHueGrading.dark.strength !== \"none\"\n ? {\n hue: traditionalHueToOklch(state.globalHueGrading.dark.hue),\n strength: state.globalHueGrading.dark.strength,\n }\n : undefined;\n const hueGrading = light || dark ? { light, dark } : undefined;\n return {\n lightest: state.dynamicRange.lightest,\n darkest: state.dynamicRange.darkest,\n ...(hueGrading ? { hueGrading } : {}),\n };\n }, [state.dynamicRange, state.globalHueGrading]);\n\n const handleHexSubmit = useCallback(() => {\n setIsEditingHex(false);\n const trimmed = hexText.trim();\n if (!trimmed) {\n setHexError(\"\");\n return;\n }\n\n const hex = trimmed.startsWith(\"#\") ? trimmed : `#${trimmed}`;\n const params = hexToPaletteParams(hex, dynamicRange);\n\n if (!params) {\n setHexError(\"Invalid hex color\");\n return;\n }\n\n setHexError(\"\");\n setIsHexUserSet(true);\n dispatch({\n type: hexAction,\n index: activePaletteIndex,\n hue: params.hue,\n saturation: params.saturation,\n keyColor: params.normalizedValue,\n });\n }, [hexText, dynamicRange, dispatch, activePaletteIndex, hexAction]);\n\n const handleClearKeyColor = useCallback(() => {\n dispatch({ type: clearKeyColorAction, index: activePaletteIndex });\n setHexError(\"\");\n setIsHexUserSet(false);\n }, [dispatch, activePaletteIndex, clearKeyColorAction]);\n\n // Build WCAG warning message\n const wcagWarning = useMemo(() => {\n if (effectiveKeyColor === undefined || wcag.keyColorContrast === null)\n return undefined;\n if (wcag.passesAA) return undefined;\n const ratio = wcag.keyColorContrast.toFixed(1);\n if (wcag.passesAALargeText) {\n return `Contrast ${ratio}:1 — passes large text (AA) but fails normal text (requires 4.5:1)`;\n }\n return `Contrast ${ratio}:1 — fails WCAG AA (requires 4.5:1 for normal text, 3:1 for large text)`;\n }, [effectiveKeyColor, wcag]);\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n {/* ─── Palette Circles + Mode Toggle ─── */}\n <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>\n {state.palettes.map((_p, index) => {\n const isActive = index === activePaletteIndex;\n const colors = previewColors[index];\n const isNeutralCircle = index === 0;\n\n // Per-mode key color for this palette's circle\n const paletteKeyColor =\n colorMode === \"dark\" ? _p.keyColorDark : _p.keyColor;\n const circleColor =\n !isNeutralCircle && colors\n ? getHexAtNv(\n colors,\n paletteKeyColor ?? wcag.autoNormalizedValue,\n )\n : undefined;\n\n const ringStyle = isActive\n ? `0 0 0 2px ${srgbToHex(tokens.background.srgb)}, 0 0 0 4px ${activeColor}`\n : \"none\";\n\n return (\n <button\n key={index}\n onClick={() => setActivePaletteIndex(index)}\n aria-label={_p.name}\n aria-pressed={isActive}\n style={{\n width: 32,\n height: 32,\n borderRadius: \"50%\",\n border: \"none\",\n cursor: \"pointer\",\n flexShrink: 0,\n boxShadow: ringStyle,\n transition: \"box-shadow 150ms ease\",\n padding: 0,\n overflow: \"hidden\",\n ...(isNeutralCircle\n ? {\n background: colors\n ? `linear-gradient(to right, ${srgbToHex(colors[0].srgb)} 50%, ${srgbToHex(colors[colors.length - 1].srgb)} 50%)`\n : `linear-gradient(to right, #ffffff 50%, #000000 50%)`,\n }\n : { backgroundColor: circleColor ?? borderColor }),\n }}\n />\n );\n })}\n\n {/* Spacer */}\n <div style={{ flex: 1 }} />\n\n {/* Light/Dark Mode Toggle */}\n <button\n onClick={() =>\n onColorModeChange(colorMode === \"light\" ? \"dark\" : \"light\")\n }\n onMouseEnter={() => setModeToggleHovered(true)}\n onMouseLeave={() => setModeToggleHovered(false)}\n aria-label={\n colorMode === \"light\"\n ? \"Switch to dark mode\"\n : \"Switch to light mode\"\n }\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"4px 10px\",\n borderRadius: 6,\n border: `1px solid ${borderColor}`,\n background: modeToggleHovered ? `${borderColor}20` : \"none\",\n cursor: \"pointer\",\n fontSize: 12,\n color: srgbToHex(tokens.textPrimary.srgb),\n transition: \"background-color 150ms ease\",\n }}\n >\n {colorMode === \"light\" ? \"\\u2600\" : \"\\u263E\"}\n <span>{colorMode === \"light\" ? \"Light\" : \"Dark\"}</span>\n </button>\n </div>\n\n {/* ─── Key Color (mode-specific) ─── */}\n {currentPreview &&\n (isNeutral ? (\n <div style={{ display: \"flex\", gap: 1 }}>\n {currentPreview.map((color, i) => (\n <div\n key={i}\n style={{\n flex: 1,\n height: 64,\n borderRadius: 2,\n backgroundColor: srgbToHex(color.srgb),\n }}\n />\n ))}\n </div>\n ) : (\n <div\n style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}\n >\n <ColorScaleSlider\n colors={currentPreview}\n value={effectiveKeyColor ?? wcag.autoNormalizedValue}\n onValueChange={(nv) => {\n setIsHexUserSet(false);\n dispatch({\n type: setKeyColorAction,\n index: activePaletteIndex,\n normalizedValue: nv,\n });\n }}\n trimEnds\n snap\n label=\"Key Color\"\n warning={wcagWarning}\n animateValue\n />\n <div\n style={{\n display: \"flex\",\n gap: 8,\n alignItems: \"flex-end\",\n }}\n >\n <div style={{ flex: 1 }}>\n <TextInput\n label=\"Hex\"\n value={hexText}\n onChangeText={(text) => {\n setIsEditingHex(true);\n setHexText(text);\n setHexError(\"\");\n }}\n onBlur={handleHexSubmit}\n onSubmitEditing={handleHexSubmit}\n placeholder=\"#000000\"\n />\n </div>\n {effectiveKeyColor !== undefined && (\n <button\n onClick={handleClearKeyColor}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"0 0 6px\",\n fontSize: 13,\n fontWeight: 600,\n color: activeColor,\n }}\n >\n Auto\n </button>\n )}\n </div>\n {hexError && (\n <div\n style={{\n fontSize: 12,\n fontWeight: 500,\n color: srgbToHex(tokens.error.fill.srgb),\n }}\n >\n {hexError}\n </div>\n )}\n </div>\n ))}\n\n {/* ─── Divider ─── */}\n <div\n style={{\n height: 1,\n backgroundColor: borderColor,\n margin: \"4px 0\",\n }}\n />\n\n {/* ─── Shared Per-Palette Controls ─── */}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <HueSlider\n value={palette.hue}\n onValueChange={(hue) =>\n dispatch({\n type: \"SET_PALETTE_HUE\",\n index: activePaletteIndex,\n hue,\n })\n }\n label=\"Hue\"\n editableValue\n {...(hueRange ? { min: hueRange.min, max: hueRange.max } : {})}\n />\n\n <Slider\n value={palette.saturation}\n onValueChange={(saturation) =>\n dispatch({\n type: \"SET_PALETTE_SATURATION\",\n index: activePaletteIndex,\n saturation,\n })\n }\n min={0}\n max={100}\n label=\"Saturation\"\n editableValue\n />\n\n {/* Desaturation */}\n <div style={{ display: \"flex\", gap: 12, alignItems: \"flex-end\" }}>\n <div style={{ flex: 1 }}>\n <Select\n options={STRENGTH_OPTIONS}\n value={palette.desaturationStrength}\n onValueChange={(strength) =>\n dispatch({\n type: \"SET_PALETTE_DESAT_STRENGTH\",\n index: activePaletteIndex,\n strength: strength as DesaturationStrength,\n })\n }\n label=\"Desaturation\"\n />\n </div>\n {palette.desaturationStrength !== \"none\" && (\n <div style={{ paddingBottom: 2 }}>\n <Toggle\n value={palette.desaturationDirection === \"dark\"}\n onValueChange={(v) =>\n dispatch({\n type: \"SET_PALETTE_DESAT_DIRECTION\",\n index: activePaletteIndex,\n direction: v ? \"dark\" : \"light\",\n })\n }\n label=\"Invert\"\n />\n </div>\n )}\n </div>\n\n {/* Hue Grading */}\n <div style={{ display: \"flex\", gap: 12, alignItems: \"flex-end\" }}>\n <div style={{ flex: 1 }}>\n <Select\n options={STRENGTH_OPTIONS}\n value={palette.hueGradeStrength}\n onValueChange={(strength) =>\n dispatch({\n type: \"SET_PALETTE_HUE_GRADE_STRENGTH\",\n index: activePaletteIndex,\n strength: strength as HueGradingStrength,\n })\n }\n label=\"Hue Grading\"\n />\n </div>\n {palette.hueGradeStrength !== \"none\" && (\n <div style={{ paddingBottom: 2 }}>\n <Toggle\n value={palette.hueGradeDirection === \"dark\"}\n onValueChange={(v) =>\n dispatch({\n type: \"SET_PALETTE_HUE_GRADE_DIRECTION\",\n index: activePaletteIndex,\n direction: v ? \"dark\" : \"light\",\n })\n }\n label=\"Invert\"\n />\n </div>\n )}\n </div>\n\n {palette.hueGradeStrength !== \"none\" && (\n <HueSlider\n value={palette.hueGradeHue}\n onValueChange={(hue) =>\n dispatch({\n type: \"SET_PALETTE_HUE_GRADE_HUE\",\n index: activePaletteIndex,\n hue,\n })\n }\n label=\"Grade Target\"\n editableValue\n />\n )}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useCallback } from \"react\";\nimport { HueSlider, Select, useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { HueGradingStrength } from \"newtone\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\n\nconst STRENGTH_OPTIONS = [\n { label: \"None\", value: \"none\" },\n { label: \"Low\", value: \"low\" },\n { label: \"Medium\", value: \"medium\" },\n { label: \"Hard\", value: \"hard\" },\n];\n\n// --- Dual Range Slider ---\n\nconst TRACK_HEIGHT = 8;\nconst THUMB_SIZE = 18;\nconst ZONE_FRAC = 1 / 3;\n\nfunction clamp(v: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, v));\n}\n\n// --- Display ↔ Internal conversions ---\n// Both lightest and darkest are 0–1 slider positions.\n// The engine maps these to OKLCH L via resolveLightest/resolveDarkest.\n// Display: 0–10 integer scale, linearly mapped to 0.0–1.0.\n\nfunction internalToDisplay(internal: number): number {\n return clamp(Math.round(internal * 10), 0, 10);\n}\n\nfunction displayToInternal(display: number): number {\n return clamp(display, 0, 10) / 10;\n}\n\n// --- Position ↔ Display conversions ---\n// Left zone: pos 0 = display 10, pos ZONE_FRAC = display 0\n// Right zone: pos (1-ZONE_FRAC) = display 0, pos 1 = display 10\n\nfunction posToWhitesDisplay(pos: number): number {\n const ratio = clamp(pos / ZONE_FRAC, 0, 1);\n return Math.round(10 * (1 - ratio));\n}\n\nfunction posToBlacksDisplay(pos: number): number {\n const ratio = clamp((pos - (1 - ZONE_FRAC)) / ZONE_FRAC, 0, 1);\n return Math.round(ratio * 10);\n}\n\nfunction whitesDisplayToPos(display: number): number {\n return ((10 - display) / 10) * ZONE_FRAC;\n}\n\nfunction blacksDisplayToPos(display: number): number {\n return 1 - ZONE_FRAC + (display / 10) * ZONE_FRAC;\n}\n\ninterface DualRangeSliderProps {\n readonly whitesValue: number; // internal 0–1\n readonly blacksValue: number; // internal 0–1\n readonly onWhitesChange: (v: number) => void;\n readonly onBlacksChange: (v: number) => void;\n}\n\nfunction DualRangeSlider({\n whitesValue,\n blacksValue,\n onWhitesChange,\n onBlacksChange,\n}: DualRangeSliderProps) {\n const tokens = useTokens();\n const trackRef = useRef<HTMLDivElement>(null);\n const [activeThumb, setActiveThumb] = useState<\n \"whites\" | \"blacks\" | null\n >(null);\n\n const interactiveColor = srgbToHex(tokens.accent.fill.srgb);\n const borderColor = srgbToHex(tokens.border.srgb);\n\n const wDisplay = internalToDisplay(whitesValue);\n const bDisplay = internalToDisplay(blacksValue);\n const wPos = whitesDisplayToPos(wDisplay);\n const bPos = blacksDisplayToPos(bDisplay);\n\n const getPosRatio = useCallback((clientX: number): number => {\n if (!trackRef.current) return 0;\n const rect = trackRef.current.getBoundingClientRect();\n return clamp((clientX - rect.left) / rect.width, 0, 1);\n }, []);\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n e.preventDefault();\n const pos = getPosRatio(e.clientX);\n\n if (pos <= ZONE_FRAC) {\n setActiveThumb(\"whites\");\n onWhitesChange(displayToInternal(posToWhitesDisplay(pos)));\n } else if (pos >= 1 - ZONE_FRAC) {\n setActiveThumb(\"blacks\");\n onBlacksChange(displayToInternal(posToBlacksDisplay(pos)));\n } else {\n return; // dead zone\n }\n\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n },\n [getPosRatio, onWhitesChange, onBlacksChange],\n );\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!activeThumb) return;\n const pos = getPosRatio(e.clientX);\n\n if (activeThumb === \"whites\") {\n onWhitesChange(displayToInternal(posToWhitesDisplay(pos)));\n } else {\n onBlacksChange(displayToInternal(posToBlacksDisplay(pos)));\n }\n },\n [activeThumb, getPosRatio, onWhitesChange, onBlacksChange],\n );\n\n const handlePointerUp = useCallback(() => {\n setActiveThumb(null);\n }, []);\n\n const trackTop = (THUMB_SIZE - TRACK_HEIGHT) / 2;\n\n return (\n <div style={{ padding: `0 ${THUMB_SIZE / 2}px` }}>\n <div\n ref={trackRef}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n style={{\n position: \"relative\",\n height: THUMB_SIZE,\n cursor: activeThumb ? \"grabbing\" : \"pointer\",\n touchAction: \"none\",\n userSelect: \"none\",\n }}\n >\n {/* Gradient track */}\n <div\n style={{\n position: \"absolute\",\n left: 0,\n right: 0,\n top: trackTop,\n height: TRACK_HEIGHT,\n borderRadius: TRACK_HEIGHT / 2,\n background: \"linear-gradient(to right, white, black)\",\n border: `1px solid ${borderColor}`,\n boxSizing: \"border-box\",\n }}\n />\n\n {/* Accent fill between thumbs */}\n <div\n style={{\n position: \"absolute\",\n left: `${wPos * 100}%`,\n width: `${(bPos - wPos) * 100}%`,\n top: trackTop,\n height: TRACK_HEIGHT,\n backgroundColor: interactiveColor,\n }}\n />\n\n {/* Whites thumb (left) */}\n <div\n style={{\n position: \"absolute\",\n left: `calc(${wPos * 100}% - ${THUMB_SIZE / 2}px)`,\n top: 0,\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: interactiveColor,\n pointerEvents: \"none\",\n zIndex: activeThumb === \"whites\" ? 2 : 1,\n }}\n />\n\n {/* Blacks thumb (right) */}\n <div\n style={{\n position: \"absolute\",\n left: `calc(${bPos * 100}% - ${THUMB_SIZE / 2}px)`,\n top: 0,\n width: THUMB_SIZE,\n height: THUMB_SIZE,\n borderRadius: THUMB_SIZE / 2,\n backgroundColor: interactiveColor,\n pointerEvents: \"none\",\n zIndex: activeThumb === \"blacks\" ? 2 : 1,\n }}\n />\n </div>\n </div>\n );\n}\n\n// --- Numeric Input ---\n\ninterface RangeInputProps {\n readonly display: number; // 0–10 integer\n readonly onCommit: (internal: number) => void;\n readonly toInternal: (display: number) => number;\n}\n\nfunction RangeInput({ display, onCommit, toInternal }: RangeInputProps) {\n const tokens = useTokens();\n const [text, setText] = useState(String(display));\n const [isEditing, setIsEditing] = useState(false);\n\n const displayText = isEditing ? text : String(display);\n\n const commit = () => {\n setIsEditing(false);\n const parsed = parseInt(text, 10);\n if (isNaN(parsed)) {\n setText(String(display));\n return;\n }\n const clamped = clamp(Math.round(parsed), 0, 10);\n onCommit(toInternal(clamped));\n setText(String(clamped));\n };\n\n return (\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={displayText}\n onChange={(e) => {\n setIsEditing(true);\n setText(e.target.value);\n }}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") commit();\n }}\n style={{\n width: 40,\n padding: \"2px 6px\",\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n borderRadius: 4,\n backgroundColor: \"transparent\",\n color: srgbToHex(tokens.textPrimary.srgb),\n fontFamily: \"inherit\",\n fontSize: 12,\n fontWeight: 500,\n textAlign: \"center\",\n outline: \"none\",\n }}\n />\n );\n}\n\n// --- Section ---\n\ninterface DynamicRangeSectionProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}\n\nexport function DynamicRangeSection({\n state,\n dispatch,\n}: DynamicRangeSectionProps) {\n const tokens = useTokens();\n const labelColor = srgbToHex(tokens.textSecondary.srgb);\n\n const labelStyle = {\n fontSize: 11,\n fontWeight: 600 as const,\n color: labelColor,\n textTransform: \"uppercase\" as const,\n letterSpacing: 0.5,\n };\n\n const wDisplay = internalToDisplay(state.dynamicRange.lightest);\n const bDisplay = internalToDisplay(state.dynamicRange.darkest);\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n {/* Labels above slider */}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <span style={labelStyle}>Whites</span>\n <span style={labelStyle}>Blacks</span>\n </div>\n\n {/* Dual range slider */}\n <DualRangeSlider\n whitesValue={state.dynamicRange.lightest}\n blacksValue={state.dynamicRange.darkest}\n onWhitesChange={(v) => dispatch({ type: \"SET_LIGHTEST\", value: v })}\n onBlacksChange={(v) => dispatch({ type: \"SET_DARKEST\", value: v })}\n />\n\n {/* Numeric inputs below slider */}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <RangeInput\n display={wDisplay}\n onCommit={(v) => dispatch({ type: \"SET_LIGHTEST\", value: v })}\n toInternal={displayToInternal}\n />\n <RangeInput\n display={bDisplay}\n onCommit={(v) => dispatch({ type: \"SET_DARKEST\", value: v })}\n toInternal={displayToInternal}\n />\n </div>\n\n {/* Global Hue Grading — Light End */}\n <div style={{ ...labelStyle, marginTop: 4 }}>\n Global Hue Grading — Light\n </div>\n <div style={{ display: \"flex\", gap: 12 }}>\n <div style={{ flex: 1 }}>\n <Select\n options={STRENGTH_OPTIONS}\n value={state.globalHueGrading.light.strength}\n onValueChange={(s) =>\n dispatch({\n type: \"SET_GLOBAL_GRADE_LIGHT_STRENGTH\",\n strength: s as HueGradingStrength,\n })\n }\n label=\"Strength\"\n />\n </div>\n {state.globalHueGrading.light.strength !== \"none\" && (\n <div style={{ flex: 1 }}>\n <HueSlider\n value={state.globalHueGrading.light.hue}\n onValueChange={(hue) =>\n dispatch({ type: \"SET_GLOBAL_GRADE_LIGHT_HUE\", hue })\n }\n label=\"Target Hue\"\n showValue\n />\n </div>\n )}\n </div>\n\n {/* Global Hue Grading — Dark End */}\n <div style={{ ...labelStyle, marginTop: 4 }}>\n Global Hue Grading — Dark\n </div>\n <div style={{ display: \"flex\", gap: 12 }}>\n <div style={{ flex: 1 }}>\n <Select\n options={STRENGTH_OPTIONS}\n value={state.globalHueGrading.dark.strength}\n onValueChange={(s) =>\n dispatch({\n type: \"SET_GLOBAL_GRADE_DARK_STRENGTH\",\n strength: s as HueGradingStrength,\n })\n }\n label=\"Strength\"\n />\n </div>\n {state.globalHueGrading.dark.strength !== \"none\" && (\n <div style={{ flex: 1 }}>\n <HueSlider\n value={state.globalHueGrading.dark.hue}\n onValueChange={(hue) =>\n dispatch({ type: \"SET_GLOBAL_GRADE_DARK_HUE\", hue })\n }\n label=\"Target Hue\"\n showValue\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { Select } from \"@newtonedev/components\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\n\nconst ICON_VARIANT_OPTIONS = [\n { label: \"Outlined\", value: \"outlined\" },\n { label: \"Rounded\", value: \"rounded\" },\n { label: \"Sharp\", value: \"sharp\" },\n];\n\nconst ICON_WEIGHT_OPTIONS = [\n { label: \"100\", value: \"100\" },\n { label: \"200\", value: \"200\" },\n { label: \"300\", value: \"300\" },\n { label: \"400\", value: \"400\" },\n { label: \"500\", value: \"500\" },\n { label: \"600\", value: \"600\" },\n { label: \"700\", value: \"700\" },\n];\n\ninterface IconsSectionProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}\n\nexport function IconsSection({ state, dispatch }: IconsSectionProps) {\n const variant = state.icons?.variant ?? \"rounded\";\n const weight = state.icons?.weight ?? 400;\n return (\n <div style={{ display: \"flex\", gap: 12 }}>\n <div style={{ flex: 1 }}>\n <Select\n options={ICON_VARIANT_OPTIONS}\n value={variant}\n onValueChange={(v) =>\n dispatch({\n type: \"SET_ICON_VARIANT\",\n variant: v as \"outlined\" | \"rounded\" | \"sharp\",\n })\n }\n label=\"Variant\"\n />\n </div>\n <div style={{ flex: 1 }}>\n <Select\n options={ICON_WEIGHT_OPTIONS}\n value={weight.toString()}\n onValueChange={(v) =>\n dispatch({\n type: \"SET_ICON_WEIGHT\",\n weight: parseInt(v) as\n | 100\n | 200\n | 300\n | 400\n | 500\n | 600\n | 700,\n })\n }\n label=\"Weight\"\n />\n </div>\n </div>\n );\n}\n","import type { FontSizeScale, LineHeightScale, RoleScales, FontWeights, FontSlot, FontScope, BreakpointKey, Breakpoints, TextRole } from './types';\n\n/** Primitive font size scale — 16 steps from 10px to 64px */\nexport const DEFAULT_FONT_SIZES: FontSizeScale = {\n '01': 10, '02': 11, '03': 12, '04': 14,\n '05': 16, '06': 18, '07': 20, '08': 22,\n '09': 24, '10': 28, '11': 32, '12': 36,\n '13': 40, '14': 48, '15': 56, '16': 64,\n};\n\n/** Primitive line height scale — 16 steps from 14px to 72px */\nexport const DEFAULT_LINE_HEIGHTS: LineHeightScale = {\n '01': 14, '02': 16, '03': 18, '04': 20,\n '05': 22, '06': 24, '07': 26, '08': 28,\n '09': 30, '10': 34, '11': 38, '12': 42,\n '13': 48, '14': 56, '15': 64, '16': 72,\n};\n\n/** Default role mapping — pairs fontSizes and lineHeights for each role x size */\nexport const DEFAULT_ROLE_SCALES: RoleScales = {\n headline: {\n sm: { fontSize: 36, lineHeight: 44 },\n md: { fontSize: 48, lineHeight: 56 },\n lg: { fontSize: 56, lineHeight: 64 },\n },\n title: {\n sm: { fontSize: 24, lineHeight: 32 },\n md: { fontSize: 32, lineHeight: 40 },\n lg: { fontSize: 40, lineHeight: 48 },\n },\n heading: {\n sm: { fontSize: 18, lineHeight: 24 },\n md: { fontSize: 22, lineHeight: 28 },\n lg: { fontSize: 28, lineHeight: 36 },\n },\n subheading: {\n sm: { fontSize: 16, lineHeight: 24 },\n md: { fontSize: 18, lineHeight: 28 },\n lg: { fontSize: 20, lineHeight: 28 },\n },\n body: {\n sm: { fontSize: 14, lineHeight: 20 },\n md: { fontSize: 16, lineHeight: 24 },\n lg: { fontSize: 18, lineHeight: 28 },\n },\n label: {\n sm: { fontSize: 12, lineHeight: 16 },\n md: { fontSize: 14, lineHeight: 20 },\n lg: { fontSize: 16, lineHeight: 24 },\n },\n caption: {\n sm: { fontSize: 11, lineHeight: 16 },\n md: { fontSize: 12, lineHeight: 16 },\n lg: { fontSize: 14, lineHeight: 20 },\n },\n};\n\n/**\n * @deprecated Use SEMANTIC_WEIGHT_MAP instead.\n */\nexport const DEFAULT_WEIGHTS: FontWeights = { regular: 400, medium: 500, bold: 700 };\n\n/**\n * Fixed mapping from semantic weight tokens to CSS font-weight values.\n * Used by the Text component and spans to resolve 'regular'/'medium'/'bold'.\n * Not user-configurable — weight is set per-role via roleWeights.\n */\nexport const SEMANTIC_WEIGHT_MAP = { regular: 400, medium: 500, bold: 700 } as const;\n\n/**\n * Default CSS font-weight per text role.\n * These are the initial values shown in the editor preview weight controls.\n * Users override them per-role; overrides are stored in `roleWeights`.\n */\nexport const ROLE_DEFAULT_WEIGHTS: Record<TextRole, number> = {\n headline: 700,\n title: 700,\n heading: 500,\n subheading: 500,\n body: 400,\n label: 500,\n caption: 400,\n};\n\n/** Default font slot configurations using system fonts */\nexport const DEFAULT_FONT_SLOTS: Record<FontScope, FontSlot> = {\n main: {\n config: { type: 'system', family: 'system-ui', fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif' },\n weights: DEFAULT_WEIGHTS,\n },\n display: {\n config: { type: 'system', family: 'system-ui', fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif' },\n weights: DEFAULT_WEIGHTS,\n },\n mono: {\n config: { type: 'system', family: 'ui-monospace', fallback: 'SFMono-Regular, Menlo, Monaco, Consolas, monospace' },\n weights: DEFAULT_WEIGHTS,\n },\n currency: {\n config: { type: 'system', family: 'system-ui', fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif' },\n weights: DEFAULT_WEIGHTS,\n },\n};\n\n/** Default type scale offset — center position (identity, no change). */\nexport const DEFAULT_TYPE_SCALE_OFFSET = 0.5;\n\n// ── Breakpoints ──────────────────────────────────────────────────────\n\n/** Default viewport-width breakpoints: mobile (0+), tablet (768+), desktop (1024+). */\nexport const DEFAULT_BREAKPOINTS: Breakpoints = {\n sm: { minWidth: 0 },\n md: { minWidth: 768 },\n lg: { minWidth: 1024 },\n};\n\n/**\n * Per-role scale factor at each breakpoint. lg = 1.0 (baseline).\n * Display roles compress most on small screens; body/caption barely change.\n *\n * Resulting sizes at defaults (role/md):\n * headline: 48px (lg) → 40px (md) → 32px (sm)\n * title: 32px (lg) → 28px (md) → 24px (sm)\n * body: 16px (lg) → 16px (md) → 15px (sm)\n * caption: 12px (lg) → 12px (md) → 12px (sm)\n */\nexport const BREAKPOINT_ROLE_SCALE: Record<BreakpointKey, Record<TextRole, number>> = {\n sm: { headline: 0.67, title: 0.75, heading: 0.82, subheading: 0.9, body: 0.94, label: 0.96, caption: 1.0 },\n md: { headline: 0.83, title: 0.88, heading: 0.92, subheading: 0.95, body: 0.97, label: 0.98, caption: 1.0 },\n lg: { headline: 1.0, title: 1.0, heading: 1.0, subheading: 1.0, body: 1.0, label: 1.0, caption: 1.0 },\n};\n","import type {\n BreakpointKey,\n Breakpoints,\n BreakpointRoleScales,\n RoleSizeStep,\n RoleScales,\n TextRole,\n TextSize,\n} from '../types';\nimport { DEFAULT_BREAKPOINTS, BREAKPOINT_ROLE_SCALE } from '../defaults';\n\n/** All breakpoint keys ordered from largest to smallest for matching. */\nconst BP_DESCENDING: readonly BreakpointKey[] = ['lg', 'md', 'sm'];\n\n/** All text roles. */\nconst ALL_ROLES: readonly TextRole[] = [\n 'headline', 'title', 'heading', 'subheading', 'body', 'label', 'caption',\n];\n\n/** All size steps. */\nconst ALL_SIZES: readonly TextSize[] = ['sm', 'md', 'lg'];\n\n/**\n * Determine the active breakpoint for a given viewport width.\n *\n * Iterates from the largest breakpoint down, returning the first whose\n * `minWidth` is ≤ the given width.\n *\n * @param width - Viewport width in px.\n * @param breakpoints - Breakpoint definitions (defaults to DEFAULT_BREAKPOINTS).\n * @returns The matching BreakpointKey.\n */\nexport function getBreakpointForWidth(\n width: number,\n breakpoints: Breakpoints = DEFAULT_BREAKPOINTS,\n): BreakpointKey {\n for (const key of BP_DESCENDING) {\n if (width >= breakpoints[key].minWidth) return key;\n }\n return 'sm';\n}\n\n/**\n * Scale a single RoleSizeStep by a factor.\n *\n * fontSize is rounded to the nearest integer.\n * lineHeight is scaled proportionally and snapped to the 4px grid.\n *\n * @param step - The base role size step.\n * @param scale - Multiplier to apply (1.0 = no change).\n * @returns A new RoleSizeStep with scaled values.\n */\nexport function scaleRoleStep(step: RoleSizeStep, scale: number): RoleSizeStep {\n return {\n fontSize: Math.round(step.fontSize * scale),\n lineHeight: Math.round((step.lineHeight * scale) / 4) * 4,\n };\n}\n\n/**\n * Compute pre-resolved role scales for every breakpoint.\n *\n * For each breakpoint × role × size, applies the corresponding scale factor\n * from `scaleFactors` (defaulting to BREAKPOINT_ROLE_SCALE) to produce\n * a complete RoleScales object per breakpoint.\n *\n * Used by theme config builders to embed per-breakpoint values in the\n * published theme JSON, so CSS-only consumers can generate @media rules\n * without importing newtone-fonts.\n *\n * @param roleScales - The base role scales (lg/desktop values).\n * @param scaleFactors - Per-breakpoint × per-role multipliers.\n * @returns BreakpointRoleScales with all values pre-computed.\n */\nexport function computeBreakpointRoleScales(\n roleScales: RoleScales,\n scaleFactors: Record<BreakpointKey, Record<TextRole, number>> = BREAKPOINT_ROLE_SCALE,\n): BreakpointRoleScales {\n const result: Record<string, Record<string, Record<string, RoleSizeStep>>> = {};\n\n for (const bp of BP_DESCENDING) {\n const bpResult: Record<string, Record<string, RoleSizeStep>> = {};\n for (const role of ALL_ROLES) {\n const roleResult: Record<string, RoleSizeStep> = {};\n const scale = scaleFactors[bp][role];\n for (const size of ALL_SIZES) {\n const step = roleScales[role][size];\n roleResult[size] = scale === 1.0 ? step : scaleRoleStep(step, scale);\n }\n bpResult[role] = roleResult;\n }\n result[bp] = bpResult;\n }\n\n return result as unknown as BreakpointRoleScales;\n}\n","import type { SystemFontEntry } from './types';\n\n/** System fonts available on all platforms — no download needed. */\nexport const SYSTEM_FONTS: readonly SystemFontEntry[] = [\n { family: 'system-ui', category: 'sans-serif', fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif' },\n { family: 'ui-serif', category: 'serif', fallback: '\"Iowan Old Style\", \"Apple Garamond\", Baskerville, Georgia, serif' },\n { family: 'ui-monospace', category: 'monospace', fallback: 'SFMono-Regular, Menlo, Monaco, Consolas, monospace' },\n];\n","/**\n * Evaluate line break quality for a text block at a candidate fontSize.\n *\n * Used by the responsive typography engine to compare how different\n * fontSize candidates produce line breaks within a container. Higher\n * scores indicate better typographic quality.\n *\n * @param lineWidths - Array of measured line widths in px, in order.\n * Each entry is the rendered width of that line of text.\n * @param containerWidth - The available container width in px.\n * @returns Quality score from 0 (poor) to 1 (perfect).\n * Single-line text always scores 1.0. Empty input scores 1.0.\n */\nexport function scoreLineBreaks(\n lineWidths: readonly number[],\n containerWidth: number,\n): number {\n // Edge cases: empty or single-line text is always perfect\n if (lineWidths.length <= 1) return 1.0;\n // Guard against zero/negative container width\n if (containerWidth <= 0) return 0;\n\n const lineCount = lineWidths.length;\n\n // ── Signal 1: Last-line ratio (widow detection) ──\n // Ideal: last line fills 40-80% of container width.\n // Terrible: last line < 15% (orphan word) or > 95% (almost full — awkward).\n const lastLineWidth = lineWidths[lineCount - 1]!;\n const lastLineRatio = Math.max(0, Math.min(1, lastLineWidth / containerWidth));\n\n let widowScore: number;\n if (lastLineRatio >= 0.4 && lastLineRatio <= 0.8) {\n // Sweet spot\n widowScore = 1.0;\n } else if (lastLineRatio < 0.4) {\n // Steeper penalty below 0.15 (true orphan)\n widowScore = lastLineRatio < 0.15\n ? lastLineRatio / 0.15 * 0.3 // 0.0 -> 0.3 across [0, 0.15]\n : 0.3 + (lastLineRatio - 0.15) / 0.25 * 0.7; // 0.3 -> 1.0 across [0.15, 0.4]\n } else {\n // lastLineRatio > 0.8 — mild penalty (nearly full last line is not bad)\n widowScore = 1.0 - (lastLineRatio - 0.8) / 0.2 * 0.3; // 1.0 -> 0.7 across [0.8, 1.0]\n }\n\n // ── Signal 2: Line length variance (rag quality) ──\n // Measures how consistent line lengths are (excluding the last line).\n // Lower variance = better rag shape.\n let ragScore: number;\n if (lineCount <= 2) {\n // Only 2 lines total — rag variance is not meaningful, use neutral score\n ragScore = 0.8;\n } else {\n // Coefficient of variation of lines 0..n-2 (excluding last line)\n const bodyLines = lineWidths.slice(0, lineCount - 1);\n const mean = bodyLines.reduce((sum, w) => sum + w, 0) / bodyLines.length;\n if (mean <= 0) {\n ragScore = 0;\n } else {\n const variance = bodyLines.reduce((sum, w) => sum + (w - mean) ** 2, 0) / bodyLines.length;\n const stdDev = Math.sqrt(variance);\n const cv = stdDev / mean;\n // cv close to 0 = even lines = good rag\n // cv > 0.15 = very uneven = bad rag\n ragScore = Math.max(0, 1.0 - cv / 0.15);\n }\n }\n\n // ── Combine signals ──\n // Widow detection weighted more heavily — a single orphan word is more\n // visually jarring than moderate rag variance.\n const WIDOW_WEIGHT = 0.65;\n const RAG_WEIGHT = 0.35;\n\n return WIDOW_WEIGHT * widowScore + RAG_WEIGHT * ragScore;\n}\n","import type { TextRole, TextSize, RoleScales } from '../types';\nimport { scoreLineBreaks } from './scoring';\n\n/**\n * Configuration for responsive text sizing.\n */\nexport interface ResponsiveTextConfig {\n /** The role scale to draw base sizes from */\n readonly role: TextRole;\n /** The size step within the role (sm/md/lg) */\n readonly size: TextSize;\n /** Enable responsive scaling based on content length */\n readonly responsive?: boolean;\n /** Minimum fontSize the algorithm will scale down to (px) */\n readonly minFontSize?: number;\n /** Maximum fontSize — usually the role's natural size */\n readonly maxFontSize?: number;\n /**\n * Font family name used to look up the calibrated avgCharWidth ratio.\n * When provided and a matching entry exists in `calibrations`, the\n * calibrated ratio is used instead of the 0.55 fallback.\n */\n readonly fontFamily?: string;\n}\n\n/**\n * Inputs for the responsive sizing algorithm (provided by the measuring component).\n * Measurement strategy: ResizeObserver on the text container.\n */\nexport interface ResponsiveMeasurement {\n /** Available container width in px (from ResizeObserver) */\n readonly containerWidth: number;\n /** Character count of the text content */\n readonly characterCount: number;\n}\n\n/**\n * Output of the responsive sizing algorithm.\n */\nexport interface ResolvedTextSize {\n readonly fontSize: number;\n readonly lineHeight: number;\n /** Whether the size was scaled down from the role default */\n readonly wasScaled: boolean;\n}\n\n/**\n * Estimate per-line widths for a block of text at a given fontSize.\n *\n * Uses the provided avgCharWidth ratio (defaulting to 0.55) to estimate\n * how many characters fit per line and how wide each line is.\n *\n * @param characterCount - Total character count of the text.\n * @param containerWidth - Available container width in px.\n * @param fontSize - Candidate fontSize in px.\n * @param avgCharWidthRatio - Ratio of avgCharWidth to fontSize (default 0.55).\n * @returns Array of line widths in px. Single-element array if text fits on one line.\n */\nexport function estimateLineWidths(\n characterCount: number,\n containerWidth: number,\n fontSize: number,\n avgCharWidthRatio = 0.55,\n): number[] {\n const avgCharWidth = fontSize * avgCharWidthRatio;\n const totalWidth = characterCount * avgCharWidth;\n\n if (totalWidth <= containerWidth) {\n return [totalWidth]; // single line\n }\n\n const charsPerLine = Math.max(1, Math.floor(containerWidth / avgCharWidth));\n const lines: number[] = [];\n let remaining = characterCount;\n\n while (remaining > 0) {\n const charsInLine = Math.min(remaining, charsPerLine);\n lines.push(charsInLine * avgCharWidth);\n remaining -= charsInLine;\n }\n\n return lines;\n}\n\n/**\n * Resolve responsive text size for a given role, size step, and container measurement.\n *\n * Algorithm (estimation-based MVP):\n * 1. Passthrough if `responsive` is false or no measurement is provided.\n * 2. If text fits on one line at maxFontSize, return maxFontSize immediately.\n * 3. Otherwise, iterate from maxFontSize down to minFontSize in 1px steps,\n * estimate line widths at each candidate, score with `scoreLineBreaks`,\n * and track the best-scoring candidate.\n * 4. Return early (largest candidate) when score ≥ 0.95 (good enough).\n * 5. lineHeight scales proportionally with fontSize (step ratio), rounded to 4px grid.\n *\n * Calibration:\n * When `config.fontFamily` is set and a matching entry exists in `calibrations`,\n * the calibrated avgCharWidth ratio is used instead of the 0.55 universal fallback.\n * Accuracy improves through three layers: editor-time canvas measurement (Layer 1),\n * client-side localStorage cache (Layer 2), and cross-site rolling averages (Layer 3).\n *\n * @param config - Role, size, and optional font family for lookup.\n * @param roleScales - Base role scales (before any type scale offset).\n * @param measurement - Container width + character count from ResizeObserver.\n * @param calibrations - Per-font avgCharWidth ratios (fontFamily → ratio).\n */\nexport function resolveResponsiveSize(\n config: ResponsiveTextConfig,\n roleScales: RoleScales,\n measurement?: ResponsiveMeasurement,\n calibrations?: Record<string, number>,\n): ResolvedTextSize {\n const step = roleScales[config.role][config.size];\n\n // Passthrough: responsive disabled or no measurement available\n if (!config.responsive || !measurement) {\n return { fontSize: step.fontSize, lineHeight: step.lineHeight, wasScaled: false };\n }\n\n // Resolve the best available avgCharWidth ratio\n const ratio = config.fontFamily ? (calibrations?.[config.fontFamily] ?? 0.55) : 0.55;\n\n const maxFs = config.maxFontSize ?? step.fontSize;\n const minFs = config.minFontSize ?? Math.max(8, Math.round(step.fontSize * 0.7));\n const lineHeightRatio = step.lineHeight / step.fontSize;\n\n // Single-line fast path: if text fits without wrapping at max size, use it\n const singleLineWidths = estimateLineWidths(measurement.characterCount, measurement.containerWidth, maxFs, ratio);\n if (singleLineWidths.length <= 1) {\n return {\n fontSize: maxFs,\n lineHeight: Math.round((maxFs * lineHeightRatio) / 4) * 4,\n wasScaled: false,\n };\n }\n\n // Iterate from max down to min; track best-scoring candidate\n let bestFontSize = minFs;\n let bestScore = -1;\n\n for (let fs = maxFs; fs >= minFs; fs--) {\n const lineWidths = estimateLineWidths(measurement.characterCount, measurement.containerWidth, fs, ratio);\n const score = scoreLineBreaks(lineWidths, measurement.containerWidth);\n\n if (score > bestScore) {\n bestScore = score;\n bestFontSize = fs;\n }\n\n // Good enough — stop early and use the largest qualifying candidate\n if (score >= 0.95) break;\n }\n\n return {\n fontSize: bestFontSize,\n lineHeight: Math.round((bestFontSize * lineHeightRatio) / 4) * 4,\n wasScaled: bestFontSize < maxFs,\n };\n}\n","import { useState, useRef, useEffect, useMemo, useCallback } from \"react\";\nimport { useTokens } from \"@newtonedev/components\";\nimport type { FontConfig } from \"@newtonedev/components\";\nimport { SYSTEM_FONTS } from \"@newtonedev/fonts\";\nimport type { GoogleFontEntry, SystemFontEntry } from \"@newtonedev/fonts\";\nimport { srgbToHex } from \"newtone\";\n\ntype FontSlot = \"default\" | \"display\" | \"mono\" | \"currency\";\n\ninterface FontPickerProps {\n readonly label: string;\n readonly slot: FontSlot;\n readonly currentFont: FontConfig;\n readonly onSelect: (font: FontConfig) => void;\n readonly fontCatalog?: readonly GoogleFontEntry[];\n}\n\n/** Preload curated Google Fonts for preview on first dropdown open. */\nlet previewLoadedKey = \"\";\nfunction preloadFontsForPreview(catalog: readonly GoogleFontEntry[]) {\n if (catalog.length === 0 || typeof document === \"undefined\") return;\n // Re-preload if the catalog changes (e.g. new fonts curated)\n const key = catalog.map((f) => f.family).join(\",\");\n if (key === previewLoadedKey) return;\n previewLoadedKey = key;\n const families = catalog.map(\n (f) => `family=${f.family.replace(/ /g, \"+\")}:wght@400`,\n ).join(\"&\");\n const url = `https://fonts.googleapis.com/css2?${families}&display=swap`;\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n document.head.appendChild(link);\n}\n\nfunction googleFontToConfig(entry: GoogleFontEntry): FontConfig {\n return {\n type: \"google\",\n family: entry.family,\n fallback: entry.fallback,\n };\n}\n\nfunction systemFontToConfig(entry: SystemFontEntry): FontConfig {\n return {\n type: \"system\",\n family: entry.family,\n fallback: entry.fallback,\n };\n}\n\nconst CATEGORY_LABELS: Record<string, string> = {\n \"sans-serif\": \"Sans Serif\",\n serif: \"Serif\",\n monospace: \"Monospace\",\n display: \"Display\",\n};\n\nconst CATEGORY_ORDER: readonly string[] = [\n \"sans-serif\",\n \"serif\",\n \"monospace\",\n \"display\",\n];\n\nexport function FontPicker({\n label,\n slot,\n currentFont,\n onSelect,\n fontCatalog = [],\n}: FontPickerProps) {\n const tokens = useTokens();\n const [isOpen, setIsOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const labelColor = srgbToHex(tokens.textSecondary.srgb);\n const textColor = srgbToHex(tokens.textPrimary.srgb);\n const bgColor = srgbToHex(tokens.backgroundElevated.srgb);\n const borderColor = srgbToHex(tokens.border.srgb);\n const hoverColor = srgbToHex(tokens.backgroundSunken.srgb);\n const interactiveColor = srgbToHex(tokens.accent.fill.srgb);\n\n useEffect(() => {\n if (!isOpen) return;\n function handleMouseDown(e: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"mousedown\", handleMouseDown);\n return () => document.removeEventListener(\"mousedown\", handleMouseDown);\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n preloadFontsForPreview(fontCatalog);\n requestAnimationFrame(() => searchInputRef.current?.focus());\n }\n }, [isOpen, fontCatalog]);\n\n const filteredGoogleFonts = useMemo(() => {\n const query = search.toLowerCase().trim();\n let fonts: readonly GoogleFontEntry[] = query\n ? fontCatalog.filter((f) => f.family.toLowerCase().includes(query))\n : fontCatalog;\n\n if (slot === \"mono\") {\n fonts = fonts.filter((f) => f.category === \"monospace\");\n } else if (slot === \"currency\") {\n fonts = fonts.filter((f) => f.category === \"monospace\" || f.category === \"sans-serif\");\n }\n\n const grouped: Record<string, GoogleFontEntry[]> = {};\n for (const cat of CATEGORY_ORDER) {\n const inCategory = fonts.filter((f) => f.category === cat);\n if (inCategory.length > 0) {\n grouped[cat] = inCategory;\n }\n }\n return grouped;\n }, [search, slot, fontCatalog]);\n\n const filteredSystemFonts = useMemo(() => {\n const query = search.toLowerCase().trim();\n let fonts = query\n ? SYSTEM_FONTS.filter((f) => f.family.toLowerCase().includes(query))\n : [...SYSTEM_FONTS];\n\n if (slot === \"mono\") {\n fonts = fonts.filter((f) => f.category === \"monospace\");\n } else if (slot === \"currency\") {\n fonts = fonts.filter((f) => f.category !== \"serif\");\n }\n\n return fonts;\n }, [search, slot]);\n\n const handleSelect = useCallback(\n (font: FontConfig) => {\n onSelect(font);\n setIsOpen(false);\n setSearch(\"\");\n },\n [onSelect],\n );\n\n const fontFamily = currentFont.family.includes(\" \")\n ? `\"${currentFont.family}\"`\n : currentFont.family;\n\n return (\n <div ref={containerRef} style={{ position: \"relative\" }}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n style={{\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n padding: \"6px 10px\",\n borderRadius: 6,\n border: `1px solid ${isOpen ? interactiveColor : borderColor}`,\n background: \"transparent\",\n cursor: \"pointer\",\n outline: \"none\",\n }}\n >\n <span style={{ fontSize: 12, color: labelColor }}>{label}</span>\n <span\n style={{\n fontSize: 12,\n color: textColor,\n fontFamily: `${fontFamily}, ${currentFont.fallback}`,\n maxWidth: 140,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {currentFont.family}\n </span>\n </button>\n\n {isOpen && (\n <div\n style={{\n position: \"absolute\",\n top: \"calc(100% + 4px)\",\n left: 0,\n right: 0,\n zIndex: 100,\n background: bgColor,\n border: `1px solid ${borderColor}`,\n borderRadius: 8,\n boxShadow: \"0 4px 16px rgba(0,0,0,0.15)\",\n maxHeight: 320,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n >\n <div style={{ padding: \"8px 8px 4px\" }}>\n <input\n ref={searchInputRef}\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search fonts...\"\n style={{\n width: \"100%\",\n padding: \"6px 8px\",\n fontSize: 12,\n borderRadius: 4,\n border: `1px solid ${borderColor}`,\n background: \"transparent\",\n color: textColor,\n outline: \"none\",\n boxSizing: \"border-box\",\n }}\n />\n </div>\n\n <div style={{ overflowY: \"auto\", padding: \"4px 0\" }}>\n {filteredSystemFonts.length > 0 && (\n <div>\n <div\n style={{\n fontSize: 10,\n fontWeight: 600,\n color: labelColor,\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n padding: \"6px 12px 2px\",\n }}\n >\n System\n </div>\n {filteredSystemFonts.map((f) => (\n <FontOption\n key={f.family}\n family={f.family}\n fallback={f.fallback}\n isSelected={\n currentFont.family === f.family &&\n currentFont.type === \"system\"\n }\n textColor={textColor}\n hoverColor={hoverColor}\n interactiveColor={interactiveColor}\n onSelect={() => handleSelect(systemFontToConfig(f))}\n />\n ))}\n </div>\n )}\n\n {Object.entries(filteredGoogleFonts).map(([category, fonts]) => (\n <div key={category}>\n <div\n style={{\n fontSize: 10,\n fontWeight: 600,\n color: labelColor,\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n padding: \"8px 12px 2px\",\n }}\n >\n {CATEGORY_LABELS[category] ?? category}\n </div>\n {fonts.map((f) => (\n <FontOption\n key={f.family}\n family={f.family}\n fallback={f.fallback}\n isSelected={\n currentFont.family === f.family &&\n currentFont.type === \"google\"\n }\n textColor={textColor}\n hoverColor={hoverColor}\n interactiveColor={interactiveColor}\n onSelect={() => handleSelect(googleFontToConfig(f))}\n />\n ))}\n </div>\n ))}\n\n {filteredSystemFonts.length === 0 &&\n Object.keys(filteredGoogleFonts).length === 0 && (\n <div\n style={{\n padding: \"12px\",\n fontSize: 12,\n color: labelColor,\n textAlign: \"center\",\n }}\n >\n No fonts found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction FontOption({\n family,\n fallback,\n isSelected,\n textColor,\n hoverColor,\n interactiveColor,\n onSelect,\n}: {\n readonly family: string;\n readonly fallback: string;\n readonly isSelected: boolean;\n readonly textColor: string;\n readonly hoverColor: string;\n readonly interactiveColor: string;\n readonly onSelect: () => void;\n}) {\n const [hovered, setHovered] = useState(false);\n const fontFamily = family.includes(\" \") ? `\"${family}\"` : family;\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"5px 12px\",\n fontSize: 13,\n fontFamily: `${fontFamily}, ${fallback}`,\n color: isSelected ? interactiveColor : textColor,\n background: hovered ? hoverColor : \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n textAlign: \"left\",\n outline: \"none\",\n fontWeight: isSelected ? 600 : 400,\n }}\n >\n {family}\n </button>\n );\n}\n","import { Slider } from \"@newtonedev/components\";\nimport { useTokens } from \"@newtonedev/components\";\nimport type { FontConfig } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { ConfiguratorState, FontScope, FontSlotConfig } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\nimport type { GoogleFontEntry } from \"@newtonedev/fonts\";\nimport { FontPicker } from \"../FontPicker\";\n\nconst DEFAULT_FONT_SYSTEM: FontConfig = {\n type: \"system\",\n family: \"system-ui\",\n fallback:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n};\n\nconst DEFAULT_FONT_MONO: FontConfig = {\n type: \"system\",\n family: \"ui-monospace\",\n fallback: \"SFMono-Regular, Menlo, Monaco, Consolas, monospace\",\n};\n\nfunction getDefaultFontConfig(scope: FontScope): FontConfig {\n return scope === \"mono\" ? DEFAULT_FONT_MONO : DEFAULT_FONT_SYSTEM;\n}\n\nfunction getCurrentFontConfig(\n state: ConfiguratorState,\n scope: FontScope,\n): FontConfig {\n return state.typography?.fonts[scope]?.config ?? getDefaultFontConfig(scope);\n}\n\ninterface FontsSectionProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly fontCatalog?: readonly GoogleFontEntry[];\n}\n\nconst FONT_SCOPES: readonly { scope: FontScope; label: string; slot: \"default\" | \"display\" | \"mono\" | \"currency\" }[] = [\n { scope: \"main\", label: \"Main\", slot: \"default\" },\n { scope: \"display\", label: \"Display\", slot: \"display\" },\n { scope: \"mono\", label: \"Mono\", slot: \"mono\" },\n { scope: \"currency\", label: \"Currency\", slot: \"currency\" },\n];\n\nexport function FontsSection({ state, dispatch, fontCatalog }: FontsSectionProps) {\n const tokens = useTokens();\n\n const labelColor = srgbToHex(tokens.textSecondary.srgb);\n\n const handleFontChange = (scope: FontScope, font: FontConfig) => {\n // Preserve existing weight slots when switching font family\n const weights = state.typography?.fonts[scope]?.weights ?? { regular: 400, medium: 500, bold: 700 };\n const slotConfig: FontSlotConfig = { config: font, weights };\n dispatch({ type: \"SET_FONT\", scope, font: slotConfig });\n };\n\n const sectionLabelStyle = {\n fontSize: 11,\n fontWeight: 600 as const,\n color: labelColor,\n textTransform: \"uppercase\" as const,\n letterSpacing: 0.5,\n marginBottom: 8,\n };\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <div>\n <div style={sectionLabelStyle}>Fonts</div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n {FONT_SCOPES.map(({ scope, label, slot }) => (\n <FontPicker\n key={scope}\n label={label}\n slot={slot}\n currentFont={getCurrentFontConfig(state, scope)}\n onSelect={(font) => handleFontChange(scope, font)}\n fontCatalog={fontCatalog}\n />\n ))}\n </div>\n </div>\n <div>\n <div style={sectionLabelStyle}>Type Scale</div>\n <Slider\n value={Math.round((state.typography?.typeScaleOffset ?? 0.5) * 100)}\n onValueChange={(v) =>\n dispatch({ type: \"SET_TYPE_SCALE_OFFSET\", offset: v / 100 })\n }\n min={0}\n max={100}\n label=\"Scale\"\n showValue\n />\n </div>\n </div>\n );\n}\n","import { Slider, Select, useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { ConfiguratorState, SpacingPreset } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\n\ninterface OthersSectionProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}\n\nexport function OthersSection({ state, dispatch }: OthersSectionProps) {\n const tokens = useTokens();\n\n const spacingPreset = state.spacing?.preset ?? 'md';\n const intensity = state.roundness?.intensity ?? 0.5;\n\n const spacingOptions: Array<{ value: SpacingPreset; label: string }> = [\n { value: 'xs', label: 'Extra Small' },\n { value: 'sm', label: 'Small' },\n { value: 'md', label: 'Medium' },\n { value: 'lg', label: 'Large' },\n { value: 'xl', label: 'Extra Large' },\n ];\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <div>\n <div\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n marginBottom: 8,\n }}\n >\n Spacing\n </div>\n <Select\n value={spacingPreset}\n onValueChange={(preset) =>\n dispatch({ type: \"SET_SPACING_PRESET\", preset: preset as SpacingPreset })\n }\n options={spacingOptions}\n label=\"Preset\"\n />\n </div>\n\n <div>\n <div\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n marginBottom: 8,\n }}\n >\n Roundness\n </div>\n <Slider\n value={Math.round(intensity * 100)}\n onValueChange={(v) =>\n dispatch({ type: \"SET_ROUNDNESS_INTENSITY\", intensity: v / 100 })\n }\n min={0}\n max={100}\n label=\"Intensity\"\n showValue\n />\n </div>\n </div>\n );\n}\n","import { useTokens } from \"@newtonedev/components\";\nimport type { ColorMode } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { ColorResult } from \"newtone\";\nimport type { ConfiguratorState } from \"@newtonedev/configurator\";\nimport type { ConfiguratorAction } from \"@newtonedev/configurator\";\nimport type { GoogleFontEntry } from \"@newtonedev/fonts\";\nimport {\n ColorsSection,\n DynamicRangeSection,\n IconsSection,\n FontsSection,\n OthersSection,\n} from \"./sections\";\n\ninterface ConfiguratorPanelProps {\n readonly activeSectionId: string;\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly previewColors: readonly (readonly ColorResult[])[];\n readonly colorMode: ColorMode;\n readonly onColorModeChange: (mode: ColorMode) => void;\n readonly fontCatalog?: readonly GoogleFontEntry[];\n}\n\nconst PANEL_WIDTH = 280;\n\nexport function ConfiguratorPanel({\n activeSectionId,\n state,\n dispatch,\n previewColors,\n colorMode,\n onColorModeChange,\n fontCatalog,\n}: ConfiguratorPanelProps) {\n const tokens = useTokens();\n const borderColor = srgbToHex(tokens.border.srgb);\n\n return (\n <div\n style={{\n width: PANEL_WIDTH,\n flexShrink: 0,\n overflowY: \"auto\",\n borderRight: `1px solid ${borderColor}`,\n padding: 20,\n backgroundColor: srgbToHex(tokens.background.srgb),\n display: \"flex\",\n flexDirection: \"column\",\n gap: 24,\n }}\n >\n {activeSectionId === \"colors\" && (\n <>\n <DynamicRangeSection state={state} dispatch={dispatch} />\n <ColorsSection\n state={state}\n dispatch={dispatch}\n previewColors={previewColors}\n colorMode={colorMode}\n onColorModeChange={onColorModeChange}\n />\n </>\n )}\n {activeSectionId === \"typography\" && (\n <FontsSection state={state} dispatch={dispatch} fontCatalog={fontCatalog} />\n )}\n {activeSectionId === \"symbols\" && (\n <IconsSection state={state} dispatch={dispatch} />\n )}\n {activeSectionId === \"layout\" && (\n <OthersSection state={state} dispatch={dispatch} />\n )}\n </div>\n );\n}\n","import { useState } from \"react\";\nimport {\n useTokens,\n getComponentsByCategory,\n} from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { PreviewView } from \"../types\";\n\ninterface TableOfContentsProps {\n readonly activeSectionId: string;\n readonly activeView: PreviewView;\n readonly selectedComponentId: string | null;\n readonly onNavigate: (view: PreviewView) => void;\n}\n\nconst TOC_WIDTH = 220;\n\nexport function TableOfContents({\n activeSectionId,\n activeView,\n selectedComponentId,\n onNavigate,\n}: TableOfContentsProps) {\n const tokens = useTokens();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n\n const borderColor = srgbToHex(tokens.border.srgb);\n const activeColor = srgbToHex(tokens.accent.fill.srgb);\n const textPrimary = srgbToHex(tokens.textPrimary.srgb);\n const hoverBg = `${borderColor}20`;\n\n const components = getComponentsByCategory(activeSectionId);\n\n const isOverviewActive =\n activeView.kind === \"overview\" ||\n (activeView.kind === \"category\" && activeView.categoryId === activeSectionId);\n\n return (\n <nav\n aria-label=\"Component navigation\"\n style={{\n width: TOC_WIDTH,\n flexShrink: 0,\n overflowY: \"auto\",\n borderRight: `1px solid ${borderColor}`,\n padding: \"16px 0\",\n backgroundColor: srgbToHex(tokens.background.srgb),\n }}\n >\n <button\n onClick={() => onNavigate({ kind: \"category\", categoryId: activeSectionId })}\n onMouseEnter={() => setHoveredId(\"overview\")}\n onMouseLeave={() => setHoveredId(null)}\n aria-current={isOverviewActive ? \"page\" : undefined}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"6px 20px\",\n border: \"none\",\n background: isOverviewActive\n ? `${activeColor}14`\n : hoveredId === \"overview\"\n ? hoverBg\n : \"none\",\n cursor: \"pointer\",\n textAlign: \"left\",\n fontSize: 13,\n fontWeight: isOverviewActive ? 600 : 400,\n color: isOverviewActive ? activeColor : textPrimary,\n transition: \"background-color 100ms ease\",\n }}\n >\n Overview\n </button>\n\n {components.map((comp) => {\n const isComponentActive =\n (activeView.kind === \"component\" &&\n activeView.componentId === comp.id) ||\n selectedComponentId === comp.id;\n\n return (\n <button\n key={comp.id}\n onClick={() =>\n onNavigate({ kind: \"component\", componentId: comp.id })\n }\n onMouseEnter={() => setHoveredId(comp.id)}\n onMouseLeave={() => setHoveredId(null)}\n aria-current={isComponentActive ? \"page\" : undefined}\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"4px 20px\",\n border: \"none\",\n background: isComponentActive\n ? `${activeColor}14`\n : hoveredId === comp.id\n ? hoverBg\n : \"none\",\n cursor: \"pointer\",\n textAlign: \"left\",\n fontSize: 13,\n fontWeight: isComponentActive ? 600 : 400,\n color: isComponentActive ? activeColor : textPrimary,\n transition: \"background-color 100ms ease\",\n }}\n >\n {comp.name}\n </button>\n );\n })}\n </nav>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport {\n Button,\n Card,\n TextInput,\n Select,\n Toggle,\n Slider,\n HueSlider,\n Frame,\n Text,\n Icon,\n Wrapper,\n useTokens,\n} from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\n\ninterface ComponentRendererProps {\n readonly componentId: string;\n readonly props: Record<string, unknown>;\n readonly previewText?: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyProps = any;\n\nfunction StatefulToggle(props: AnyProps) {\n const [value, setValue] = useState(props.value as boolean);\n return <Toggle {...props} value={value} onValueChange={setValue} />;\n}\n\nfunction StatefulSlider(props: AnyProps) {\n const [value, setValue] = useState(props.value as number);\n return <Slider {...props} value={value} onValueChange={setValue} />;\n}\n\nfunction StatefulHueSlider(props: AnyProps) {\n const [value, setValue] = useState(props.value as number);\n return <HueSlider {...props} value={value} onValueChange={setValue} />;\n}\n\nfunction StatefulTextInput(props: AnyProps) {\n const [value, setValue] = useState((props.value as string) ?? \"\");\n return <TextInput {...props} value={value} onChangeText={setValue} />;\n}\n\nfunction StatefulSelect(props: AnyProps) {\n const [value, setValue] = useState(props.value as string);\n return <Select {...props} value={value} onValueChange={setValue} />;\n}\n\nfunction CardPreview(props: AnyProps) {\n const tokens = useTokens();\n return (\n <Card {...props} style={{ padding: 20, minWidth: 200 }}>\n <div\n style={{\n fontSize: 14,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n marginBottom: 8,\n }}\n >\n Card Title\n </div>\n <div\n style={{\n fontSize: 13,\n color: srgbToHex(tokens.textSecondary.srgb),\n lineHeight: 1.4,\n }}\n >\n Sample card content at elevation {String(props.elevation ?? 0)}.\n </div>\n </Card>\n );\n}\n\nfunction FramePreview(props: AnyProps) {\n return (\n <Frame {...props} style={{ minWidth: 200, minHeight: 60 }}>\n <Text size=\"sm\">Frame content</Text>\n </Frame>\n );\n}\n\nfunction WrapperPreview(props: AnyProps) {\n return (\n <Wrapper {...props} style={{ minWidth: 200 }}>\n <Text size=\"sm\">Item 1</Text>\n <Text size=\"sm\">Item 2</Text>\n <Text size=\"sm\">Item 3</Text>\n </Wrapper>\n );\n}\n\nexport function ComponentRenderer({ componentId, props, previewText }: ComponentRendererProps) {\n const noop = useCallback(() => {}, []);\n\n switch (componentId) {\n case \"button\": {\n const icon = (props.icon as string) || undefined;\n return (\n <Button\n variant={props.variant as AnyProps}\n semantic={props.semantic as AnyProps}\n size={props.size as AnyProps}\n icon={icon}\n iconPosition={props.iconPosition as AnyProps}\n disabled={props.disabled as AnyProps}\n onPress={noop}\n >\n Button\n </Button>\n );\n }\n case \"text-input\":\n return <StatefulTextInput {...props} />;\n case \"select\":\n return <StatefulSelect {...props} />;\n case \"toggle\":\n return <StatefulToggle {...props} />;\n case \"slider\":\n return <StatefulSlider {...props} />;\n case \"hue-slider\":\n return <StatefulHueSlider {...props} />;\n case \"card\":\n return <CardPreview {...props} />;\n case \"text\":\n return (\n <Text\n scope={props.scope as AnyProps}\n role={props.role as AnyProps}\n size={props.size as AnyProps}\n color={props.color as AnyProps}\n responsive\n >\n {previewText || \"The quick brown fox\"}\n </Text>\n );\n case \"icon\":\n return (\n <Icon\n name={(props.name as string) ?? \"home\"}\n size={props.size as AnyProps}\n fill={props.fill as AnyProps}\n />\n );\n case \"frame\":\n return (\n <FramePreview {...props} />\n );\n case \"wrapper\":\n return (\n <WrapperPreview {...props} />\n );\n default:\n return null;\n }\n}\n","import { useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport { CATEGORIES, getComponentsByCategory } from \"@newtonedev/components\";\nimport { ComponentRenderer } from \"./ComponentRenderer\";\nimport { useHover } from \"../hooks/useHover\";\n\ninterface OverviewViewProps {\n readonly onNavigateToCategory: (categoryId: string) => void;\n readonly onNavigateToComponent: (componentId: string) => void;\n}\n\nexport function OverviewView({\n onNavigateToCategory,\n onNavigateToComponent,\n}: OverviewViewProps) {\n const tokens = useTokens();\n\n return (\n <div style={{ padding: 32 }}>\n <h2\n style={{\n fontSize: 22,\n fontWeight: 700,\n color: srgbToHex(tokens.textPrimary.srgb),\n margin: 0,\n marginBottom: 4,\n }}\n >\n Component Library\n </h2>\n <p\n style={{\n fontSize: 14,\n color: srgbToHex(tokens.textSecondary.srgb),\n margin: 0,\n marginBottom: 32,\n }}\n >\n Browse components to see how your color system affects them.\n </p>\n\n {CATEGORIES.map((category) => {\n const components = getComponentsByCategory(category.id);\n if (components.length === 0) return null;\n\n return (\n <div key={category.id} style={{ marginBottom: 32 }}>\n <button\n onClick={() => onNavigateToCategory(category.id)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n margin: 0,\n marginBottom: 16,\n display: \"block\",\n }}\n >\n <span\n style={{\n fontSize: 16,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n }}\n >\n {category.name}\n </span>\n <span\n style={{\n fontSize: 13,\n color: srgbToHex(tokens.textSecondary.srgb),\n marginLeft: 8,\n }}\n >\n {category.description}\n </span>\n </button>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(240px, 1fr))\",\n gap: 16,\n }}\n >\n {components.map((component) => (\n <ComponentCard\n key={component.id}\n componentId={component.id}\n name={component.name}\n description={component.description}\n defaultVariantProps={component.variants[0]?.props ?? {}}\n onClick={() => onNavigateToComponent(component.id)}\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction ComponentCard({\n componentId,\n name,\n description,\n defaultVariantProps,\n onClick,\n}: {\n readonly componentId: string;\n readonly name: string;\n readonly description: string;\n readonly defaultVariantProps: Record<string, unknown>;\n readonly onClick: () => void;\n}) {\n const tokens = useTokens();\n const { isHovered, hoverProps } = useHover();\n\n return (\n <button\n onClick={onClick}\n {...hoverProps}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 20,\n borderRadius: 12,\n border: `1px solid ${srgbToHex(\n isHovered ? tokens.accent.fill.srgb : tokens.border.srgb,\n )}`,\n backgroundColor: srgbToHex(tokens.backgroundElevated.srgb),\n cursor: \"pointer\",\n textAlign: \"left\",\n transform: isHovered ? \"translateY(-1px)\" : \"none\",\n boxShadow: isHovered ? \"0 2px 8px rgba(0,0,0,0.08)\" : \"none\",\n transition:\n \"border-color 150ms ease, transform 150ms ease, box-shadow 150ms ease\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 16,\n marginBottom: 16,\n borderRadius: 8,\n backgroundColor: srgbToHex(tokens.background.srgb),\n minHeight: 60,\n }}\n >\n <ComponentRenderer componentId={componentId} props={defaultVariantProps} />\n </div>\n <span\n style={{\n fontSize: 14,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n marginBottom: 4,\n }}\n >\n {name}\n </span>\n <span\n style={{\n fontSize: 12,\n color: srgbToHex(tokens.textSecondary.srgb),\n lineHeight: 1.4,\n }}\n >\n {description}\n </span>\n </button>\n );\n}\n","import { useState } from \"react\";\nimport { useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport { getCategory, getComponentsByCategory } from \"@newtonedev/components\";\nimport { ComponentRenderer } from \"./ComponentRenderer\";\n\ninterface CategoryViewProps {\n readonly categoryId: string;\n readonly onNavigateToComponent: (componentId: string) => void;\n}\n\nexport function CategoryView({\n categoryId,\n onNavigateToComponent,\n}: CategoryViewProps) {\n const tokens = useTokens();\n const category = getCategory(categoryId);\n const components = getComponentsByCategory(categoryId);\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n\n if (!category) return null;\n\n return (\n <div style={{ padding: 32 }}>\n <h2\n style={{\n fontSize: 22,\n fontWeight: 700,\n color: srgbToHex(tokens.textPrimary.srgb),\n margin: 0,\n marginBottom: 4,\n }}\n >\n {category.name}\n </h2>\n <p\n style={{\n fontSize: 14,\n color: srgbToHex(tokens.textSecondary.srgb),\n margin: 0,\n marginBottom: 32,\n }}\n >\n {category.description}\n </p>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(280px, 1fr))\",\n gap: 20,\n }}\n >\n {components.map((component) => {\n const isHovered = hoveredId === component.id;\n\n return (\n <button\n key={component.id}\n onClick={() => onNavigateToComponent(component.id)}\n onMouseEnter={() => setHoveredId(component.id)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 24,\n borderRadius: 12,\n border: `1px solid ${srgbToHex(\n isHovered ? tokens.accent.fill.srgb : tokens.border.srgb,\n )}`,\n backgroundColor: srgbToHex(tokens.backgroundElevated.srgb),\n cursor: \"pointer\",\n textAlign: \"left\",\n transform: isHovered ? \"translateY(-1px)\" : \"none\",\n boxShadow: isHovered\n ? \"0 2px 8px rgba(0,0,0,0.08)\"\n : \"none\",\n transition:\n \"border-color 150ms ease, transform 150ms ease, box-shadow 150ms ease\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 20,\n marginBottom: 16,\n borderRadius: 8,\n backgroundColor: srgbToHex(tokens.background.srgb),\n minHeight: 60,\n }}\n >\n <ComponentRenderer\n componentId={component.id}\n props={component.variants[0]?.props ?? {}}\n />\n </div>\n <span\n style={{\n fontSize: 15,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n marginBottom: 4,\n }}\n >\n {component.name}\n </span>\n <span\n style={{\n fontSize: 13,\n color: srgbToHex(tokens.textSecondary.srgb),\n lineHeight: 1.4,\n }}\n >\n {component.description}\n </span>\n <span\n style={{\n fontSize: 12,\n color: srgbToHex(tokens.textSecondary.srgb),\n marginTop: 8,\n }}\n >\n {component.variants.length} variant\n {component.variants.length !== 1 ? \"s\" : \"\"}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect, useMemo } from \"react\";\nimport { Icon, useTokens, ICON_CATALOG } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\n\ninterface IconBrowserViewProps {\n readonly selectedIconName: string;\n readonly onIconSelect: (name: string) => void;\n}\n\nexport function IconBrowserView({\n selectedIconName,\n onIconSelect,\n}: IconBrowserViewProps) {\n const tokens = useTokens();\n const [search, setSearch] = useState(\"\");\n const [hoveredIcon, setHoveredIcon] = useState<string | null>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const filteredCategories = useMemo(() => {\n const q = search.toLowerCase().trim();\n if (!q) return ICON_CATALOG;\n return ICON_CATALOG\n .map((cat) => ({\n ...cat,\n icons: cat.icons.filter((name) => name.includes(q)),\n }))\n .filter((cat) => cat.icons.length > 0);\n }, [search]);\n\n // Scroll to selected icon when it changes externally (user types in sidebar)\n useEffect(() => {\n if (!selectedIconName || !scrollRef.current) return;\n const el = scrollRef.current.querySelector(\n `[data-icon=\"${selectedIconName}\"]`,\n );\n if (el) {\n el.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n }\n }, [selectedIconName]);\n\n const accentColor = srgbToHex(tokens.accent.fill.srgb);\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n minHeight: 0,\n }}\n >\n {/* Search */}\n <div style={{ padding: \"0 32px\", flexShrink: 0 }}>\n <div style={{ position: \"relative\" }}>\n <Icon\n name=\"search\"\n size={18}\n color={srgbToHex(tokens.textTertiary.srgb)}\n style={{\n position: \"absolute\",\n left: 10,\n top: 9,\n pointerEvents: \"none\",\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Search icons...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{\n width: \"100%\",\n padding: \"8px 12px 8px 34px\",\n borderRadius: 8,\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n color: srgbToHex(tokens.textPrimary.srgb),\n fontSize: 13,\n boxSizing: \"border-box\",\n outline: \"none\",\n }}\n />\n </div>\n </div>\n\n {/* Icon grid */}\n <div\n ref={scrollRef}\n style={{\n flex: 1,\n overflowY: \"auto\",\n padding: \"16px 32px 32px\",\n }}\n >\n {filteredCategories.length === 0 && (\n <p\n style={{\n fontSize: 13,\n color: srgbToHex(tokens.textTertiary.srgb),\n textAlign: \"center\",\n marginTop: 32,\n }}\n >\n No icons found\n </p>\n )}\n\n {filteredCategories.map((category) => (\n <div key={category.id} style={{ marginBottom: 24 }}>\n <h3\n style={{\n fontSize: 12,\n fontWeight: 600,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n margin: \"0 0 8px\",\n }}\n >\n {category.label}\n </h3>\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(80px, 1fr))\",\n gap: 6,\n }}\n >\n {category.icons.map((name) => {\n const isSelected = selectedIconName === name;\n const isHovered = hoveredIcon === name;\n\n const borderColor = isSelected\n ? accentColor\n : isHovered\n ? `${accentColor}66`\n : \"transparent\";\n\n return (\n <button\n key={name}\n data-icon={name}\n onClick={() => onIconSelect(name)}\n onMouseEnter={() => setHoveredIcon(name)}\n onMouseLeave={() => setHoveredIcon(null)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 4,\n padding: \"8px 4px 6px\",\n borderRadius: 8,\n border: `2px solid ${borderColor}`,\n backgroundColor: isSelected\n ? srgbToHex(tokens.backgroundElevated.srgb)\n : \"transparent\",\n cursor: \"pointer\",\n transition: \"border-color 150ms ease\",\n }}\n >\n <Icon name={name} size={40} />\n <span\n style={{\n fontSize: 10,\n color: isSelected\n ? accentColor\n : srgbToHex(tokens.textTertiary.srgb),\n fontWeight: isSelected ? 600 : 400,\n maxWidth: \"100%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {name}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useState, useCallback, useMemo, useRef, useEffect } from \"react\";\nimport { useTokens, useNewtoneTheme, NewtoneProvider } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport { getComponent } from \"@newtonedev/components\";\nimport type { TextRole, BreakpointKey, TextSize, RoleScales } from \"@newtonedev/fonts\";\nimport { ROLE_DEFAULT_WEIGHTS, BREAKPOINT_ROLE_SCALE, scaleRoleStep, resolveResponsiveSize } from \"@newtonedev/fonts\";\nimport { ComponentRenderer } from \"./ComponentRenderer\";\nimport { IconBrowserView } from \"./IconBrowserView\";\nimport type { EditorFontEntry } from \"../types\";\n\n/** Variant IDs that map to unique text roles and get inline weight controls. */\nconst ROLE_VARIANT_IDS = new Set([\n \"body\",\n \"headline\",\n \"title\",\n \"heading\",\n \"subheading\",\n \"label\",\n \"caption\",\n]);\n\ninterface ComponentDetailViewProps {\n readonly componentId: string;\n readonly selectedVariantId: string | null;\n readonly onSelectVariant: (variantId: string) => void;\n readonly propOverrides?: Record<string, unknown>;\n readonly onPropOverride?: (name: string, value: unknown) => void;\n readonly roleWeights?: Partial<Record<TextRole, number>>;\n readonly onRoleWeightChange?: (role: TextRole, weight: number) => void;\n readonly fontCatalog?: readonly EditorFontEntry[];\n readonly scopeFontMap?: Record<string, string>;\n}\n\n/**\n * Determine what kind of weight control to show for a font.\n * Returns 'slider' for variable fonts (smooth) and fixed-weight fonts (with stops),\n * or 'none' for single-weight fonts.\n */\nfunction getWeightControlType(\n family: string | undefined,\n fontCatalog: readonly EditorFontEntry[] | undefined,\n): { type: \"slider\"; min: number; max: number; stops?: readonly number[] } | { type: \"none\" } {\n if (!family) return { type: \"none\" };\n\n const entry = fontCatalog?.find((f) => f.family === family);\n\n if (entry) {\n if (entry.isVariable) {\n return {\n type: \"slider\",\n min: entry.weightAxisRange?.min ?? 100,\n max: entry.weightAxisRange?.max ?? 900,\n };\n }\n if (entry.availableWeights && entry.availableWeights.length > 1) {\n const sorted = [...entry.availableWeights].sort((a, b) => a - b);\n return { type: \"slider\", min: sorted[0], max: sorted[sorted.length - 1], stops: sorted };\n }\n return { type: \"none\" };\n }\n\n // Not in catalog — system font or unknown → treat as variable\n return { type: \"slider\", min: 100, max: 900 };\n}\n\n/**\n * Unified weight slider. Smooth for variable fonts, snaps to stops for fixed-weight fonts.\n * Renders tick marks when stops are provided.\n */\nfunction WeightSlider({\n value,\n min,\n max,\n stops,\n onChange,\n textColor,\n accentColor,\n}: {\n readonly value: number;\n readonly min: number;\n readonly max: number;\n readonly stops?: readonly number[];\n readonly onChange: (v: number) => void;\n readonly textColor: string;\n readonly accentColor: string;\n}) {\n const snap = useCallback(\n (v: number) => {\n if (!stops) return v;\n return stops.reduce((prev, curr) =>\n Math.abs(curr - v) < Math.abs(prev - v) ? curr : prev,\n );\n },\n [stops],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(snap(Number(e.target.value)));\n },\n [onChange, snap],\n );\n\n const range = max - min;\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n flexShrink: 0,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div style={{ position: \"relative\", width: 80 }}>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={1}\n value={value}\n onChange={handleChange}\n style={{\n width: 80,\n accentColor,\n cursor: \"pointer\",\n display: \"block\",\n }}\n />\n {stops && range > 0 && (\n <div\n style={{\n position: \"relative\",\n width: 80,\n height: 4,\n marginTop: -2,\n pointerEvents: \"none\",\n }}\n >\n {stops.map((s) => (\n <div\n key={s}\n style={{\n position: \"absolute\",\n left: `${((s - min) / range) * 100}%`,\n width: 2,\n height: 4,\n backgroundColor: s === value ? accentColor : textColor,\n opacity: s === value ? 1 : 0.3,\n borderRadius: 1,\n transform: \"translateX(-50%)\",\n }}\n />\n ))}\n </div>\n )}\n </div>\n <span\n style={{\n fontSize: 11,\n fontWeight: 500,\n color: textColor,\n width: 28,\n textAlign: \"right\",\n fontVariantNumeric: \"tabular-nums\",\n }}\n >\n {value}\n </span>\n </div>\n );\n}\n\nconst PREVIEW_TEXT = \"The quick brown fox\";\n\n/**\n * Measures its container width via ResizeObserver and displays the live\n * resolved fontSize/lineHeight from resolveResponsiveSize.\n */\nfunction TextAnnotation({\n role,\n roleScales,\n fontFamily,\n calibrations,\n weight,\n textColor,\n accentColor,\n previewText = PREVIEW_TEXT,\n}: {\n readonly role: TextRole;\n readonly roleScales: RoleScales;\n readonly fontFamily?: string;\n readonly calibrations?: Record<string, number>;\n readonly weight: number;\n readonly textColor: string;\n readonly accentColor: string;\n readonly previewText?: string;\n}) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n\n useEffect(() => {\n const el = containerRef.current?.parentElement;\n if (!el) return;\n const observer = new ResizeObserver((entries) => {\n const w = entries[0]?.contentRect.width;\n if (w && w > 0) setContainerWidth(w);\n });\n observer.observe(el);\n return () => observer.disconnect();\n }, []);\n\n const step = roleScales[role].md;\n const minFs = Math.max(8, Math.round(step.fontSize * 0.7));\n const maxFs = step.fontSize;\n\n const resolved = useMemo(() => {\n if (containerWidth == null) return { fontSize: maxFs, lineHeight: step.lineHeight };\n return resolveResponsiveSize(\n {\n role,\n size: \"md\" as TextSize,\n responsive: true,\n fontFamily,\n maxFontSize: maxFs,\n minFontSize: minFs,\n },\n roleScales,\n { containerWidth, characterCount: previewText.length },\n calibrations,\n );\n }, [role, step, roleScales, fontFamily, calibrations, containerWidth, minFs, maxFs]);\n\n const range = maxFs - minFs;\n const position = range > 0 ? ((resolved.fontSize - minFs) / range) * 100 : 100;\n\n return (\n <div\n ref={containerRef}\n style={{\n marginTop: 4,\n fontSize: 10,\n color: textColor,\n fontVariantNumeric: \"tabular-nums\",\n letterSpacing: 0.2,\n }}\n >\n <span>{resolved.fontSize}/{resolved.lineHeight} · {weight}</span>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n marginTop: 3,\n }}\n >\n <span style={{ width: 16, textAlign: \"right\", flexShrink: 0 }}>{minFs}</span>\n <div\n style={{\n flex: 1,\n height: 1,\n backgroundColor: textColor,\n opacity: 0.3,\n position: \"relative\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n left: `${position}%`,\n top: \"50%\",\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n backgroundColor: accentColor,\n transform: \"translate(-50%, -50%)\",\n }}\n />\n </div>\n <span style={{ width: 16, flexShrink: 0 }}>{maxFs}</span>\n </div>\n </div>\n );\n}\n\nexport function ComponentDetailView({\n componentId,\n selectedVariantId,\n onSelectVariant,\n propOverrides,\n onPropOverride,\n roleWeights,\n onRoleWeightChange,\n fontCatalog,\n scopeFontMap,\n}: ComponentDetailViewProps) {\n const tokens = useTokens();\n const { config } = useNewtoneTheme();\n const component = getComponent(componentId);\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [previewBreakpoint, setPreviewBreakpoint] = useState<BreakpointKey>(\"lg\");\n const [previewText, setPreviewText] = useState(PREVIEW_TEXT);\n\n const scaledConfig = useMemo(() => {\n if (previewBreakpoint === \"lg\") return config;\n const scales = BREAKPOINT_ROLE_SCALE[previewBreakpoint];\n const baseRoles = config.typography.roles;\n const scaledRoles = {} as Record<string, Record<string, { fontSize: number; lineHeight: number }>>;\n for (const role of Object.keys(baseRoles) as TextRole[]) {\n const scale = scales[role];\n scaledRoles[role] = {} as Record<string, { fontSize: number; lineHeight: number }>;\n for (const size of [\"sm\", \"md\", \"lg\"] as TextSize[]) {\n const step = baseRoles[role][size];\n scaledRoles[role][size] = scale === 1.0 ? step : scaleRoleStep(step, scale);\n }\n }\n return { ...config, typography: { ...config.typography, roles: scaledRoles as unknown as typeof config.typography.roles } };\n }, [config, previewBreakpoint]);\n\n if (!component) return null;\n\n if (componentId === \"icon\" && propOverrides && onPropOverride) {\n return (\n <div\n style={{\n padding: \"32px 0 0\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <div style={{ padding: \"0 32px\", marginBottom: 24 }}>\n <h2\n style={{\n fontSize: 22,\n fontWeight: 700,\n color: srgbToHex(tokens.textPrimary.srgb),\n margin: 0,\n marginBottom: 4,\n }}\n >\n {component.name}\n </h2>\n <p\n style={{\n fontSize: 14,\n color: srgbToHex(tokens.textSecondary.srgb),\n margin: 0,\n }}\n >\n {component.description}\n </p>\n </div>\n <IconBrowserView\n selectedIconName={(propOverrides.name as string) ?? \"add\"}\n onIconSelect={(name) => onPropOverride(\"name\", name)}\n />\n </div>\n );\n }\n\n const interactiveColor = srgbToHex(tokens.accent.fill.srgb);\n const isTextComponent = componentId === \"text\";\n\n return (\n <div style={{ padding: 32 }}>\n <h2\n style={{\n fontSize: 22,\n fontWeight: 700,\n color: srgbToHex(tokens.textPrimary.srgb),\n margin: 0,\n marginBottom: 4,\n }}\n >\n {component.name}\n </h2>\n <p\n style={{\n fontSize: 14,\n color: srgbToHex(tokens.textSecondary.srgb),\n margin: 0,\n marginBottom: isTextComponent ? 16 : 32,\n }}\n >\n {component.description}\n </p>\n\n {isTextComponent && (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12, marginBottom: 16 }}>\n <input\n type=\"text\"\n value={previewText}\n onChange={(e) => setPreviewText(e.target.value)}\n placeholder={PREVIEW_TEXT}\n style={{\n width: \"100%\",\n padding: \"8px 12px\",\n fontSize: 14,\n fontFamily: \"'SF Mono', 'Fira Code', Menlo, monospace\",\n color: srgbToHex(tokens.textPrimary.srgb),\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n borderRadius: 8,\n boxSizing: \"border-box\",\n outline: \"none\",\n }}\n />\n <div style={{ display: \"flex\", gap: 2 }}>\n {([\"sm\", \"md\", \"lg\"] as const).map((bp) => {\n const isActive = previewBreakpoint === bp;\n return (\n <button\n key={bp}\n onClick={() => setPreviewBreakpoint(bp)}\n style={{\n padding: \"4px 10px\",\n fontSize: 11,\n fontWeight: isActive ? 600 : 400,\n color: isActive ? interactiveColor : srgbToHex(tokens.textSecondary.srgb),\n backgroundColor: isActive ? `${interactiveColor}18` : \"transparent\",\n border: `1px solid ${isActive ? interactiveColor : srgbToHex(tokens.border.srgb)}`,\n borderRadius: 4,\n cursor: \"pointer\",\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n }}\n >\n {bp}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {component.previewLayout === \"list\" ? (\n <NewtoneProvider config={scaledConfig}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n {component.variants.map((variant) => {\n const isSelected = selectedVariantId === variant.id;\n const isHovered = hoveredId === variant.id;\n\n const borderColor = isSelected\n ? interactiveColor\n : isHovered\n ? `${interactiveColor}66`\n : srgbToHex(tokens.border.srgb);\n\n // Weight control for text roles\n const showWeightControl =\n isTextComponent &&\n ROLE_VARIANT_IDS.has(variant.id) &&\n onRoleWeightChange;\n\n const role = variant.props.role as string | undefined;\n const scope = (variant.props.scope as string) ?? \"main\";\n\n let weightControl: React.ReactNode = null;\n if (showWeightControl && role) {\n const family = scopeFontMap?.[scope];\n const controlInfo = getWeightControlType(family, fontCatalog);\n const currentWeight =\n roleWeights?.[role as TextRole] ??\n ROLE_DEFAULT_WEIGHTS[role as TextRole] ??\n 400;\n\n if (controlInfo.type === \"slider\") {\n // Snap to closest stop for fixed-weight fonts\n const displayWeight = controlInfo.stops\n ? controlInfo.stops.reduce((prev, curr) =>\n Math.abs(curr - currentWeight) < Math.abs(prev - currentWeight) ? curr : prev,\n )\n : currentWeight;\n\n weightControl = (\n <WeightSlider\n value={displayWeight}\n min={controlInfo.min}\n max={controlInfo.max}\n stops={controlInfo.stops}\n onChange={(w) =>\n onRoleWeightChange(role as TextRole, w)\n }\n textColor={srgbToHex(tokens.textSecondary.srgb)}\n accentColor={interactiveColor}\n />\n );\n }\n }\n\n return (\n <button\n key={variant.id}\n onClick={() => onSelectVariant(variant.id)}\n onMouseEnter={() => setHoveredId(variant.id)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 16,\n padding: \"12px 16px\",\n borderRadius: 12,\n border: `2px solid ${borderColor}`,\n backgroundColor: srgbToHex(tokens.backgroundElevated.srgb),\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"border-color 150ms ease\",\n }}\n >\n <span\n style={{\n fontSize: 11,\n fontWeight: 500,\n color: isSelected\n ? interactiveColor\n : srgbToHex(tokens.textSecondary.srgb),\n width: 88,\n flexShrink: 0,\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n }}\n >\n {variant.label}\n </span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <ComponentRenderer\n componentId={componentId}\n props={variant.props}\n previewText={previewText}\n />\n {isTextComponent && role && scaledConfig.typography.roles[role as TextRole] && (\n <TextAnnotation\n role={role as TextRole}\n roleScales={scaledConfig.typography.roles}\n fontFamily={scopeFontMap?.[scope]}\n calibrations={scaledConfig.typography.calibrations}\n weight={\n roleWeights?.[role as TextRole] ??\n ROLE_DEFAULT_WEIGHTS[role as TextRole] ??\n 400\n }\n textColor={srgbToHex(tokens.textTertiary.srgb)}\n accentColor={interactiveColor}\n previewText={previewText}\n />\n )}\n </div>\n {weightControl && <>{weightControl}</>}\n </button>\n );\n })}\n </div>\n </NewtoneProvider>\n ) : (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: 16,\n }}\n >\n {component.variants.map((variant) => {\n const isSelected = selectedVariantId === variant.id;\n const isHovered = hoveredId === variant.id;\n\n const borderColor = isSelected\n ? interactiveColor\n : isHovered\n ? `${interactiveColor}66`\n : srgbToHex(tokens.border.srgb);\n\n return (\n <button\n key={variant.id}\n onClick={() => onSelectVariant(variant.id)}\n onMouseEnter={() => setHoveredId(variant.id)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n padding: 16,\n borderRadius: 12,\n border: `2px solid ${borderColor}`,\n backgroundColor: srgbToHex(tokens.backgroundElevated.srgb),\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"border-color 150ms ease\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 20,\n marginBottom: 12,\n borderRadius: 8,\n backgroundColor: srgbToHex(tokens.background.srgb),\n minHeight: 56,\n }}\n >\n <ComponentRenderer\n componentId={componentId}\n props={variant.props}\n />\n </div>\n <span\n style={{\n fontSize: 13,\n fontWeight: isSelected ? 600 : 500,\n color: isSelected\n ? interactiveColor\n : srgbToHex(tokens.textPrimary.srgb),\n }}\n >\n {variant.label}\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import { useCallback } from \"react\";\nimport { useTokens } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport type { TextRole } from \"@newtonedev/fonts\";\nimport { OverviewView } from \"../preview/OverviewView\";\nimport { CategoryView } from \"../preview/CategoryView\";\nimport { ComponentDetailView } from \"../preview/ComponentDetailView\";\nimport type { PreviewView, EditorFontEntry } from \"../types\";\n\ninterface PreviewWindowProps {\n readonly view: PreviewView;\n readonly selectedVariantId: string | null;\n readonly onNavigate: (view: PreviewView) => void;\n readonly onSelectVariant: (variantId: string) => void;\n readonly propOverrides?: Record<string, unknown>;\n readonly onPropOverride?: (name: string, value: unknown) => void;\n readonly roleWeights?: Partial<Record<TextRole, number>>;\n readonly onRoleWeightChange?: (role: TextRole, weight: number) => void;\n readonly fontCatalog?: readonly EditorFontEntry[];\n readonly scopeFontMap?: Record<string, string>;\n}\n\nexport function PreviewWindow({\n view,\n selectedVariantId,\n onNavigate,\n onSelectVariant,\n propOverrides,\n onPropOverride,\n roleWeights,\n onRoleWeightChange,\n fontCatalog,\n scopeFontMap,\n}: PreviewWindowProps) {\n const tokens = useTokens();\n\n const handleNavigateToCategory = useCallback(\n (categoryId: string) => onNavigate({ kind: \"category\", categoryId }),\n [onNavigate],\n );\n\n const handleNavigateToComponent = useCallback(\n (componentId: string) => onNavigate({ kind: \"component\", componentId }),\n [onNavigate],\n );\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n backgroundColor: srgbToHex(tokens.background.srgb),\n }}\n >\n <div style={{ flex: 1, overflowY: \"auto\" }}>\n {view.kind === \"overview\" && (\n <OverviewView\n onNavigateToCategory={handleNavigateToCategory}\n onNavigateToComponent={handleNavigateToComponent}\n />\n )}\n {view.kind === \"category\" && (\n <CategoryView\n categoryId={view.categoryId}\n onNavigateToComponent={handleNavigateToComponent}\n />\n )}\n {view.kind === \"component\" && (\n <ComponentDetailView\n componentId={view.componentId}\n selectedVariantId={selectedVariantId}\n onSelectVariant={onSelectVariant}\n propOverrides={propOverrides}\n onPropOverride={onPropOverride}\n roleWeights={roleWeights}\n onRoleWeightChange={onRoleWeightChange}\n fontCatalog={fontCatalog}\n scopeFontMap={scopeFontMap}\n />\n )}\n </div>\n </div>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport { useTokens, Icon } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\n\nexport function CopyButton({ text }: { readonly text: string }) {\n const tokens = useTokens();\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [text]);\n\n return (\n <button\n onClick={handleCopy}\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 4,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: srgbToHex(\n copied ? tokens.accent.fill.srgb : tokens.textTertiary.srgb,\n ),\n transition: \"color 150ms ease\",\n }}\n >\n <Icon\n name={copied ? \"check\" : \"content_copy\"}\n size={16}\n color={srgbToHex(\n copied ? tokens.accent.fill.srgb : tokens.textTertiary.srgb,\n )}\n />\n </button>\n );\n}\n\nexport function CodeBlock({\n code,\n}: {\n readonly code: string;\n}) {\n const tokens = useTokens();\n\n return (\n <div\n style={{\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n borderRadius: 8,\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"flex-end\",\n padding: \"4px 8px\",\n borderBottom: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n }}\n >\n <CopyButton text={code} />\n </div>\n <pre\n style={{\n padding: \"12px 16px\",\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n fontSize: 13,\n lineHeight: 1.5,\n fontFamily: \"'SF Mono', 'Fira Code', 'Fira Mono', Menlo, monospace\",\n color: srgbToHex(tokens.textPrimary.srgb),\n margin: 0,\n }}\n >\n <code>{code}</code>\n </pre>\n </div>\n );\n}\n","import { useCallback, type KeyboardEvent } from \"react\";\nimport { useTokens, getComponent, generateComponentCode, Select, NewtoneProvider, Icon } from \"@newtonedev/components\";\nimport type { EditableProp, NewtoneThemeConfig, ColorMode } from \"@newtonedev/components\";\nimport { srgbToHex } from \"newtone\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport { ComponentRenderer } from \"../preview/ComponentRenderer\";\nimport type { SidebarSelection } from \"../types\";\n\ninterface RightSidebarProps {\n readonly selection: SidebarSelection;\n readonly propOverrides: Record<string, unknown>;\n readonly onPropOverride: (name: string, value: unknown) => void;\n readonly onResetOverrides: () => void;\n readonly onClose: () => void;\n readonly onScopeToComponent: () => void;\n readonly previewConfig: NewtoneThemeConfig;\n readonly colorMode: ColorMode;\n}\n\nexport function RightSidebar({\n selection,\n propOverrides,\n onPropOverride,\n onResetOverrides,\n onClose,\n onScopeToComponent,\n previewConfig,\n colorMode,\n}: RightSidebarProps) {\n const tokens = useTokens();\n const visible = selection !== null;\n\n const component = selection ? getComponent(selection.componentId) : null;\n const variant =\n selection?.scope === \"variant\"\n ? component?.variants.find((v) => v.id === selection.variantId)\n : null;\n\n const code = component ? generateComponentCode(component, propOverrides) : \"\";\n\n return (\n <aside\n aria-label=\"Component inspector\"\n style={{\n position: \"absolute\",\n inset: 0,\n zIndex: 1,\n transform: visible ? \"translateX(0)\" : \"translateX(100%)\",\n opacity: visible ? 1 : 0,\n transition: \"transform 200ms ease, opacity 150ms ease\",\n display: \"flex\",\n flexDirection: \"column\",\n backgroundColor: srgbToHex(tokens.background.srgb),\n borderLeft: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n }}\n >\n {selection && component && (\n <>\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"12px 16px\",\n borderBottom: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n flexShrink: 0,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, minWidth: 0 }}>\n <button\n onClick={onClose}\n aria-label=\"Back to controls\"\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 4,\n color: srgbToHex(tokens.textSecondary.srgb),\n fontSize: 16,\n lineHeight: 1,\n flexShrink: 0,\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <Icon name=\"arrow_back\" size={16} color={srgbToHex(tokens.textSecondary.srgb)} />\n </button>\n {selection.scope === \"variant\" && variant ? (\n <>\n <button\n onClick={onScopeToComponent}\n aria-label={`Back to ${component.name} overview`}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n fontSize: 14,\n fontWeight: 500,\n color: srgbToHex(tokens.accent.fill.srgb),\n whiteSpace: \"nowrap\",\n }}\n >\n {component.name}\n </button>\n <span\n style={{\n fontSize: 13,\n color: srgbToHex(tokens.textSecondary.srgb),\n }}\n >\n /\n </span>\n <span\n style={{\n fontSize: 14,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {variant.label}\n </span>\n </>\n ) : (\n <span\n style={{\n fontSize: 14,\n fontWeight: 600,\n color: srgbToHex(tokens.textPrimary.srgb),\n }}\n >\n {component.name}\n </span>\n )}\n </div>\n </div>\n\n {/* Body */}\n <div\n style={{\n flex: 1,\n overflowY: \"auto\",\n padding: 16,\n }}\n >\n {/* Live Preview */}\n <div\n style={{\n marginBottom: 20,\n borderRadius: 8,\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n overflow: \"hidden\",\n }}\n >\n <NewtoneProvider\n config={previewConfig}\n initialMode={colorMode}\n key={colorMode}\n >\n <PreviewSurface\n componentId={selection.componentId}\n propOverrides={propOverrides}\n />\n </NewtoneProvider>\n </div>\n\n <h3\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n margin: 0,\n marginBottom: 16,\n }}\n >\n Properties\n </h3>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n {component.editableProps.map((prop) => (\n <PropControl\n key={prop.name}\n prop={prop}\n value={propOverrides[prop.name] ?? prop.defaultValue}\n onChange={(value) => onPropOverride(prop.name, value)}\n />\n ))}\n </div>\n\n {selection.scope === \"variant\" && (\n <button\n onClick={onResetOverrides}\n aria-label=\"Reset properties to variant defaults\"\n style={{\n marginTop: 20,\n width: \"100%\",\n padding: \"8px 12px\",\n borderRadius: 6,\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n backgroundColor: \"transparent\",\n color: srgbToHex(tokens.textSecondary.srgb),\n fontSize: 13,\n cursor: \"pointer\",\n }}\n >\n Reset to variant defaults\n </button>\n )}\n\n <h3\n style={{\n fontSize: 13,\n fontWeight: 600,\n color: srgbToHex(tokens.textSecondary.srgb),\n textTransform: \"uppercase\",\n letterSpacing: 0.5,\n margin: 0,\n marginTop: 24,\n marginBottom: 12,\n }}\n >\n Code\n </h3>\n\n <CodeBlock code={code} />\n </div>\n </>\n )}\n </aside>\n );\n}\n\nfunction PreviewSurface({\n componentId,\n propOverrides,\n}: {\n readonly componentId: string;\n readonly propOverrides: Record<string, unknown>;\n}) {\n const previewTokens = useTokens();\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 24,\n height: 120,\n backgroundColor: srgbToHex(previewTokens.backgroundElevated.srgb),\n }}\n >\n <ComponentRenderer componentId={componentId} props={propOverrides} />\n </div>\n );\n}\n\nfunction PropControl({\n prop,\n value,\n onChange,\n}: {\n readonly prop: EditableProp;\n readonly value: unknown;\n readonly onChange: (value: unknown) => void;\n}) {\n const tokens = useTokens();\n\n const handleToggleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n onChange(!value);\n }\n },\n [onChange, value],\n );\n\n const inputStyle = {\n width: \"100%\",\n padding: \"6px 10px\",\n borderRadius: 6,\n border: `1px solid ${srgbToHex(tokens.border.srgb)}`,\n backgroundColor: srgbToHex(tokens.backgroundSunken.srgb),\n color: srgbToHex(tokens.textPrimary.srgb),\n fontSize: 13,\n fontFamily: \"'SF Mono', 'Fira Code', Menlo, monospace\",\n boxSizing: \"border-box\" as const,\n };\n\n return (\n <div>\n <div style={{ marginBottom: 4 }}>\n <span\n style={{\n fontSize: 12,\n fontWeight: 500,\n color: srgbToHex(tokens.textPrimary.srgb),\n }}\n >\n {prop.label}\n </span>\n </div>\n\n {prop.control === \"select\" && prop.options && (\n <Select\n options={prop.options.map((o) => ({\n label: o.label,\n value: String(o.value),\n }))}\n value={String(value)}\n onValueChange={(v) => {\n const option = prop.options!.find((o) => String(o.value) === v);\n if (option) onChange(option.value);\n }}\n size=\"sm\"\n />\n )}\n\n {prop.control === \"text\" && (\n <input\n type=\"text\"\n value={String(value)}\n onChange={(e) => onChange(e.target.value)}\n style={inputStyle}\n />\n )}\n\n {prop.control === \"number\" && (\n <input\n type=\"number\"\n value={Number(value)}\n onChange={(e) => onChange(Number(e.target.value))}\n style={inputStyle}\n />\n )}\n\n {prop.control === \"discrete-slider\" && prop.options && (() => {\n const options = prop.options!;\n const currentIndex = options.findIndex((o) => o.value === value);\n const idx = currentIndex >= 0 ? currentIndex : 0;\n\n return (\n <div>\n <input\n type=\"range\"\n min={0}\n max={options.length - 1}\n step={1}\n value={idx}\n onChange={(e) => onChange(options[Number(e.target.value)].value)}\n aria-label={prop.label}\n style={{\n width: \"100%\",\n accentColor: srgbToHex(tokens.accent.fill.srgb),\n cursor: \"pointer\",\n }}\n />\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: 2,\n }}\n >\n {options.map((o) => (\n <span\n key={String(o.value)}\n style={{\n fontSize: 11,\n fontFamily: \"'SF Mono', 'Fira Code', Menlo, monospace\",\n color: o.value === value\n ? srgbToHex(tokens.textPrimary.srgb)\n : srgbToHex(tokens.textTertiary.srgb),\n fontWeight: o.value === value ? 600 : 400,\n }}\n >\n {o.label}\n </span>\n ))}\n </div>\n </div>\n );\n })()}\n\n {prop.control === \"toggle\" && (\n <div\n role=\"switch\"\n aria-checked={!!value}\n aria-label={prop.label}\n tabIndex={0}\n onClick={() => onChange(!value)}\n onKeyDown={handleToggleKeyDown}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 8,\n cursor: \"pointer\",\n }}\n >\n <div\n style={{\n width: 36,\n height: 20,\n borderRadius: 10,\n backgroundColor: value\n ? srgbToHex(tokens.accent.fill.srgb)\n : srgbToHex(tokens.border.srgb),\n position: \"relative\",\n transition: \"background-color 150ms ease\",\n flexShrink: 0,\n }}\n >\n <div\n style={{\n width: 16,\n height: 16,\n borderRadius: 8,\n backgroundColor: \"#fff\",\n position: \"absolute\",\n top: 2,\n left: value ? 18 : 2,\n transition: \"left 150ms ease\",\n }}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { useMemo, useCallback } from \"react\";\nimport { NewtoneProvider } from \"@newtonedev/components\";\nimport type { NewtoneThemeConfig } from \"@newtonedev/components\";\nimport type { TextRole } from \"@newtonedev/fonts\";\nimport { useEditorState } from \"./hooks/useEditorState\";\nimport { EditorShell } from \"./components/EditorShell\";\nimport { Sidebar } from \"./components/Sidebar\";\nimport { EditorHeader } from \"./components/EditorHeader\";\nimport { PrimaryNav } from \"./components/PrimaryNav\";\nimport { ConfiguratorPanel } from \"./components/ConfiguratorPanel\";\nimport { TableOfContents } from \"./components/TableOfContents\";\nimport { PreviewWindow } from \"./components/PreviewWindow\";\nimport { RightSidebar } from \"./components/RightSidebar\";\nimport type { EditorProps } from \"./types\";\n\nexport function Editor({\n initialState,\n initialIsPublished,\n initialPresets,\n initialActivePresetId,\n initialPublishedPresetId,\n defaultState,\n chromeThemeConfig,\n persistence,\n headerSlots,\n onNavigate,\n initialPreviewView,\n manifestUrl,\n fontCatalog,\n}: EditorProps) {\n const editor = useEditorState({\n initialState,\n initialIsPublished,\n initialPresets,\n initialActivePresetId,\n initialPublishedPresetId,\n defaultState,\n persistence,\n onNavigate,\n initialPreviewView,\n manifestUrl,\n });\n\n // Per-role weight state and handler\n const roleWeights = editor.configuratorState.typography?.roleWeights;\n const handleRoleWeightChange = useCallback(\n (role: TextRole, weight: number) => {\n editor.dispatch({ type: \"SET_ROLE_WEIGHT\", role, weight });\n },\n [editor.dispatch],\n );\n\n // Map font scopes to family names for weight metadata lookup\n const scopeFontMap = useMemo((): Record<string, string> => {\n const fonts = editor.configuratorState.typography?.fonts;\n if (!fonts) return {};\n const map: Record<string, string> = {};\n if (fonts.main?.config?.family) map.main = fonts.main.config.family;\n if (fonts.display?.config?.family) map.display = fonts.display.config.family;\n if (fonts.mono?.config?.family) map.mono = fonts.mono.config.family;\n if (fonts.currency?.config?.family) map.currency = fonts.currency.config.family;\n return map;\n }, [editor.configuratorState.typography?.fonts]);\n\n // Merge token overrides from chrome config into the preview config.\n // Token overrides (from Token Tuner) are stored separately from configurator\n // state, but should apply to the preview so components render accurately.\n const previewConfig: NewtoneThemeConfig = useMemo(\n () =>\n chromeThemeConfig.tokenOverrides\n ? { ...editor.themeConfig, tokenOverrides: chromeThemeConfig.tokenOverrides }\n : editor.themeConfig,\n [editor.themeConfig, chromeThemeConfig.tokenOverrides],\n );\n\n return (\n <NewtoneProvider config={chromeThemeConfig}>\n <EditorShell\n sidebar={\n <Sidebar\n isDirty={editor.isDirty}\n onRevert={editor.handleRevert}\n presets={editor.presets}\n activePresetId={editor.activePresetId}\n publishedPresetId={editor.publishedPresetId}\n onSwitchPreset={editor.switchPreset}\n onCreatePreset={editor.createPreset}\n onRenamePreset={editor.renamePreset}\n onDeletePreset={editor.deletePreset}\n onDuplicatePreset={editor.duplicatePreset}\n />\n }\n navbar={\n <EditorHeader\n saveStatus={editor.saveStatus}\n isPublished={editor.isPublished}\n publishing={editor.publishing}\n onPublish={editor.handlePublish}\n onRetry={() => editor.saveDraft(editor.latestStateRef.current)}\n headerSlots={headerSlots}\n />\n }\n content={\n <div\n style={{\n flex: 1,\n display: \"flex\",\n overflow: \"hidden\",\n minWidth: 0,\n }}\n >\n <PrimaryNav\n activeSectionId={editor.activeSectionId}\n onSelectSection={editor.handleSectionChange}\n />\n {editor.activeSectionId === \"components\" ? (\n <TableOfContents\n activeSectionId={editor.activeSectionId}\n activeView={editor.previewView}\n selectedComponentId={editor.selectedComponentId}\n onNavigate={editor.handlePreviewNavigate}\n />\n ) : (\n <ConfiguratorPanel\n activeSectionId={editor.activeSectionId}\n state={editor.configuratorState}\n dispatch={editor.dispatch}\n previewColors={editor.previewColors}\n colorMode={editor.colorMode}\n onColorModeChange={editor.handleColorModeChange}\n fontCatalog={fontCatalog}\n />\n )}\n <div\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n minWidth: 0,\n }}\n >\n <NewtoneProvider\n config={previewConfig}\n initialMode={editor.colorMode}\n key={editor.colorMode}\n >\n <div style={{ flex: 1, overflowY: \"auto\", minWidth: 0 }}>\n <PreviewWindow\n view={editor.previewView}\n selectedVariantId={editor.selectedVariantId}\n onNavigate={editor.handlePreviewNavigate}\n onSelectVariant={editor.handleSelectVariant}\n propOverrides={editor.propOverrides}\n onPropOverride={editor.handlePropOverride}\n roleWeights={roleWeights}\n onRoleWeightChange={handleRoleWeightChange}\n fontCatalog={fontCatalog}\n scopeFontMap={scopeFontMap}\n />\n </div>\n </NewtoneProvider>\n </div>\n </div>\n }\n rightPanel={\n <RightSidebar\n selection={editor.sidebarSelection}\n propOverrides={editor.propOverrides}\n onPropOverride={editor.handlePropOverride}\n onResetOverrides={editor.handleResetOverrides}\n onClose={editor.handleCloseSidebar}\n onScopeToComponent={editor.handleScopeToComponent}\n previewConfig={previewConfig}\n colorMode={editor.colorMode}\n />\n }\n />\n </NewtoneProvider>\n );\n}\n"]}