@newtonedev/editor 0.1.7 → 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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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","useTokens","srgbToHex","useEffect","jsxs","jsx","SIDEBAR_WIDTH","CATEGORIES","Icon","useMemo","STRENGTH_OPTIONS","Select","HueSlider","Slider","Fragment","getComponentsByCategory","Toggle","TextInput","Button","getComponent","NewtoneProvider"],"mappings":"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","file":"index.js","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 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 setPublishing(false);\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"]}
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","useTokens","srgbToHex","useEffect","jsxs","jsx","SIDEBAR_WIDTH","CATEGORIES","Icon","useMemo","STRENGTH_OPTIONS","Select","HueSlider","Slider","Fragment","getComponentsByCategory","Toggle","TextInput","Button","getComponent","NewtoneProvider"],"mappings":"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","file":"index.js","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"]}