@visualli/core 0.2.0 → 0.2.1
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/{chunk-TPLJJKAU.js → chunk-64PUANNH.js} +2 -2
- package/dist/{chunk-KVSM3APM.js → chunk-ITDZ72JE.js} +2 -2
- package/dist/{chunk-LV3EXUQY.js → chunk-RFMUATWB.js} +2 -2
- package/dist/{chunk-LV3EXUQY.js.map → chunk-RFMUATWB.js.map} +1 -1
- package/dist/{chunk-7NJWM7ZE.js → chunk-WO4JAAKP.js} +3 -3
- package/dist/config/index.cjs.map +1 -1
- package/dist/config/index.d.cts +4 -4
- package/dist/config/index.d.ts +4 -4
- package/dist/config/index.js +2 -2
- package/dist/constants/index.d.cts +2 -2
- package/dist/constants/index.d.ts +2 -2
- package/dist/{designSystem-BOrZHfEq.d.cts → designSystem-D49xVfr8.d.cts} +1 -1
- package/dist/{designSystem-BOrZHfEq.d.ts → designSystem-D49xVfr8.d.ts} +1 -1
- package/dist/{ideaSize-CLDKeyqD.d.cts → ideaSize-BTJu6thN.d.cts} +1 -1
- package/dist/{ideaSize-DxxGy2E8.d.ts → ideaSize-RKbms8K6.d.ts} +1 -1
- package/dist/{index-CcPRwVUL.d.ts → index-CcF0Jvmb.d.ts} +1 -1
- package/dist/{index-BmILeKj6.d.cts → index-Dt--T2l8.d.cts} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -5
- package/dist/layout/index.d.cts +2 -2
- package/dist/layout/index.d.ts +2 -2
- package/dist/{mindmap-C3Qr0qKW.d.cts → mindmap-BO3YD5qu.d.cts} +1 -1
- package/dist/{mindmap-DHeVa86G.d.ts → mindmap-D0Of0jaZ.d.ts} +1 -1
- package/dist/parser/index.cjs.map +1 -1
- package/dist/parser/index.d.cts +3 -3
- package/dist/parser/index.d.ts +3 -3
- package/dist/parser/index.js +3 -3
- package/dist/theme/index.cjs +1 -1
- package/dist/theme/index.cjs.map +1 -1
- package/dist/theme/index.d.cts +2 -2
- package/dist/theme/index.d.ts +2 -2
- package/dist/theme/index.js +2 -2
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/viewport/index.d.cts +2 -2
- package/dist/viewport/index.d.ts +2 -2
- package/package.json +1 -1
- package/src/generated/designSystem.ts +1 -1
- /package/dist/{chunk-TPLJJKAU.js.map → chunk-64PUANNH.js.map} +0 -0
- /package/dist/{chunk-KVSM3APM.js.map → chunk-ITDZ72JE.js.map} +0 -0
- /package/dist/{chunk-7NJWM7ZE.js.map → chunk-WO4JAAKP.js.map} +0 -0
package/dist/theme/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/theme/index.ts","../../src/generated/designSystem.ts","../../src/generated/geometry/color.ts"],"sourcesContent":["// ─── Theme resolution ────────────────────────────────────────────────────────\n//\n// Everything visual comes from the generated design-system modules. This file\n// only decides WHICH of the 8 themes applies and resolves document colours with\n// the design system's colour rule. No colour literals live here.\n//\n// Dependencies: ../generated/designSystem.ts (generated from design-system/).\n\nimport {\n CANVAS_STYLE,\n DESIGN_SYSTEM_VERSION,\n METRICS,\n METRICS_REDUCED_MOTION,\n THEME_NAMES,\n TOKENS,\n TOPICS,\n TYPE_STYLES,\n type ThemeName,\n type TopicName,\n} from '../generated/designSystem.js';\nimport { TOPIC_ORDER, customColor, topicFor, topicFromName } from '../generated/geometry/color.js';\n\nexport { topicFromName, customColor };\n\nexport { CANVAS_STYLE, DESIGN_SYSTEM_VERSION, METRICS, METRICS_REDUCED_MOTION, THEME_NAMES, TOKENS, TOPICS, TYPE_STYLES };\nexport type { ThemeName, TopicName };\n\n// ── Theme selection ───────────────────────────────────────────────────────────\n\n/** Theme families: each resolves to its light or dark member. */\nexport type ThemeFamily = 'standard' | 'focus' | 'colorsafe' | 'contrast';\n\n/**\n * Anything a consumer may pass as `theme`:\n * - one of the 8 design-system themes ('light', 'dark', 'focus-light', ...)\n * - a family name ('focus' | 'colorsafe' | 'contrast') -> light/dark per the reader's scheme\n * - 'auto' -> light/dark per prefers-color-scheme (contrast under forced-colors)\n *\n * 'light' | 'dark' | 'auto' are the pre-0.2 values, kept as aliases for one release.\n */\nexport type ThemeInput = ThemeName | 'auto' | 'focus' | 'colorsafe' | 'contrast';\n\nexport interface ThemeEnv {\n /** prefers-color-scheme: dark */\n prefersDark?: boolean;\n /** forced-colors: active (Windows high contrast etc.) */\n forcedColors?: boolean;\n}\n\nconst FAMILIES: ReadonlySet<string> = new Set(['focus', 'colorsafe', 'contrast']);\n\nexport function isThemeName(v: unknown): v is ThemeName {\n return typeof v === 'string' && (THEME_NAMES as readonly string[]).includes(v);\n}\n\n/** Resolve any accepted `theme` value to one concrete design-system theme. */\nexport function resolveTheme(input: ThemeInput | undefined, env: ThemeEnv = {}): ThemeName {\n const scheme = env.prefersDark ? 'dark' : 'light';\n if (input === undefined || input === 'auto') return env.forcedColors ? (`contrast-${scheme}` as ThemeName) : scheme;\n if (FAMILIES.has(input)) return `${input}-${scheme}` as ThemeName;\n return isThemeName(input) ? input : 'light';\n}\n\nexport const isDarkTheme = (name: ThemeName): boolean => name.endsWith('dark');\nexport const isContrastTheme = (name: ThemeName): boolean => name.startsWith('contrast');\nexport const isFocusTheme = (name: ThemeName): boolean => name.startsWith('focus');\n\n/** All tokens of a theme (already merged over the light defaults). */\nexport const getTokens = (name: ThemeName): Readonly<Record<string, string>> => TOKENS[name];\n\n/** One token of a theme. Throws on an unknown key so typos fail loudly in tests. */\nexport function token(name: ThemeName, key: string): string {\n const v = TOKENS[name][key];\n if (v === undefined) throw new Error(`Unknown design-system token \"${key}\"`);\n return v;\n}\n\n// ── Comfort settings ──────────────────────────────────────────────────────────\n\nexport interface Comfort {\n /** Atkinson Hyperlegible for map labels instead of the handwritten faces (`data-type=\"readable\"`). */\n readableType?: boolean;\n /** Larger UI and label text (`data-scale=\"lg\"`). */\n largerText?: boolean;\n /** Skip transitions and reveal animations (`data-motion=\"reduced\"`). 'system' follows prefers-reduced-motion. */\n reducedMotion?: boolean | 'system';\n}\n\nexport interface ResolvedComfort { readableType: boolean; largerText: boolean; reducedMotion: boolean }\n\nexport function resolveComfort(c: Comfort | undefined, env: { prefersReducedMotion?: boolean } = {}): ResolvedComfort {\n const rm = c?.reducedMotion;\n return {\n readableType: !!c?.readableType,\n largerText: !!c?.largerText,\n reducedMotion: rm === undefined || rm === 'system' ? !!env.prefersReducedMotion : rm,\n };\n}\n\n/** Numeric design-system tokens (px / ms stripped). */\nexport type Metrics = { readonly [K in keyof typeof METRICS]: number };\n\n/** Numeric tokens with the reduced-motion overrides applied when requested. */\nexport function metricsFor(comfort: ResolvedComfort): Metrics {\n return comfort.reducedMotion ? { ...METRICS, ...METRICS_REDUCED_MOTION } : METRICS;\n}\n\n/** Multiplier the spec applies to label sizes under `data-scale=\"lg\"` (`--vi-label-scale`). */\nexport const labelScale = (c: ResolvedComfort): number => (c.largerText ? 1.15 : 1);\n\n// ── Topic palette ─────────────────────────────────────────────────────────────\n\nexport interface TopicStyle { topic: TopicName; fill: string; ring: string }\n\n/** Fill + ring colour of a topic in a theme. */\nexport function topicStyle(theme: ThemeName, topic: TopicName): TopicStyle {\n const t = TOKENS[theme];\n return { topic, fill: t[`topic-${topic}`]!, ring: t[`topic-${topic}-ring`]! };\n}\n\n/** An idea's colour by the design system's colour rule (geometry/color.ts, verbatim): a topic name → that topic; no\n * colour → the topics in sibling order; any other colour → custom, drawn as given (customColor: the colour as the fill,\n * the fill darkened by CUSTOM.ringShade as the ring). A custom colour doesn't follow themes. */\nexport interface IdeaColor { topic: TopicName | null; custom: { fill: string; ring: string | null } | null }\n\nexport function ideaColor(color: string | null | undefined, siblingIndex: number): IdeaColor {\n const topic = topicFor(color, siblingIndex);\n return topic ? { topic, custom: null } : { topic: null, custom: customColor(color!) };\n}\n\n/** Fill + ring an idea is drawn with in a theme: its topic's, or its custom colour (ring: the `edge` token when the\n * colour has no darker shade, i.e. isn't a 6-digit hex). */\nexport function ideaStyle(theme: ThemeName, c: { topic?: TopicName | null; custom?: IdeaColor['custom'] }): { fill: string; ring: string } {\n if (c.custom) return { fill: c.custom.fill, ring: c.custom.ring ?? TOKENS[theme]['edge']! };\n return topicStyle(theme, c.topic ?? TOPIC_ORDER[0]);\n}\n","// GENERATED by scripts/gen-design-system.mjs from design-system/ (tokens/tokens.json, tokens/tokens.css). Do not edit.\n// Change the design system instead; the next `npm run build` regenerates this file.\n\n/** Version of the design system these modules were generated from. */\nexport const DESIGN_SYSTEM_VERSION = \"0.2.0\" as const;\n\nexport const THEME_NAMES = [\n \"light\",\n \"dark\",\n \"focus-light\",\n \"focus-dark\",\n \"colorsafe-light\",\n \"colorsafe-dark\",\n \"contrast-light\",\n \"contrast-dark\"\n] as const;\nexport type ThemeName = (typeof THEME_NAMES)[number];\n\n/** Every token for every theme (each theme already merged over \"light\"). Keys match the CSS custom properties. */\nexport const TOKENS: Readonly<Record<ThemeName, Readonly<Record<string, string>>>> = {\n \"light\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#f6f3ee\",\n \"surface\": \"#ffffff\",\n \"surface-sunken\": \"#f0ece5\",\n \"surface-overlay\": \"#ffffff\",\n \"line\": \"#e4dfd6\",\n \"line-strong\": \"#7a7f94\",\n \"ink\": \"#182140\",\n \"ink-muted\": \"#4f5671\",\n \"ink-subtle\": \"#5f647c\",\n \"action\": \"#182140\",\n \"on-action\": \"#ffffff\",\n \"focus\": \"#325e8c\",\n \"link\": \"#2f5a87\",\n \"selection\": \"rgba(18, 199, 211, 0.28)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#2a3048\",\n \"edge-label\": \"#4f5671\",\n \"topic-teal\": \"#87f2f8\",\n \"topic-teal-ring\": \"#00cdd5\",\n \"topic-harbor\": \"#bcdbff\",\n \"topic-harbor-ring\": \"#76b2f5\",\n \"topic-iris\": \"#e0c8fe\",\n \"topic-iris-ring\": \"#bd96ea\",\n \"topic-berry\": \"#ffbdc4\",\n \"topic-berry-ring\": \"#f47e8f\",\n \"topic-coral\": \"#ffc7b2\",\n \"topic-coral-ring\": \"#f38e65\",\n \"topic-amber\": \"#ffcf9d\",\n \"topic-amber-ring\": \"#eb9c38\",\n \"topic-sun\": \"#ffea94\",\n \"topic-sun-ring\": \"#dfbd04\",\n \"topic-stone\": \"#e0dacf\",\n \"topic-stone-ring\": \"#bab09f\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(24, 33, 64, 0.06), 0 8px 24px rgba(24, 33, 64, 0.08)\",\n \"shadow-pop\": \"0 2px 4px rgba(24, 33, 64, 0.08), 0 16px 40px rgba(24, 33, 64, 0.14)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"dark\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#0f1220\",\n \"surface\": \"#171b2b\",\n \"surface-sunken\": \"#0f1220\",\n \"surface-overlay\": \"#212639\",\n \"line\": \"#2b3148\",\n \"line-strong\": \"#6c7392\",\n \"ink\": \"#eef0f7\",\n \"ink-muted\": \"#b3b8cc\",\n \"ink-subtle\": \"#8f95ae\",\n \"action\": \"#f6f3ee\",\n \"on-action\": \"#182140\",\n \"focus\": \"#12c7d3\",\n \"link\": \"#5fd8e1\",\n \"selection\": \"rgba(18, 199, 211, 0.32)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#c9cddc\",\n \"edge-label\": \"#b3b8cc\",\n \"topic-teal\": \"#87f2f8\",\n \"topic-teal-ring\": \"#0fc5cd\",\n \"topic-harbor\": \"#bcdbff\",\n \"topic-harbor-ring\": \"#73aceb\",\n \"topic-iris\": \"#e0c8fe\",\n \"topic-iris-ring\": \"#b691e1\",\n \"topic-berry\": \"#ffbdc4\",\n \"topic-berry-ring\": \"#eb798a\",\n \"topic-coral\": \"#ffc7b2\",\n \"topic-coral-ring\": \"#ea8962\",\n \"topic-amber\": \"#ffcf9d\",\n \"topic-amber-ring\": \"#e29737\",\n \"topic-sun\": \"#ffea94\",\n \"topic-sun-ring\": \"#d8b70a\",\n \"topic-stone\": \"#e0dacf\",\n \"topic-stone-ring\": \"#b4a999\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(0, 0, 0, 0.40), 0 8px 24px rgba(0, 0, 0, 0.35)\",\n \"shadow-pop\": \"0 2px 4px rgba(0, 0, 0, 0.50), 0 16px 40px rgba(0, 0, 0, 0.50)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"focus-light\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#f4f2ee\",\n \"surface\": \"#ffffff\",\n \"surface-sunken\": \"#f0ece5\",\n \"surface-overlay\": \"#ffffff\",\n \"line\": \"#e4dfd6\",\n \"line-strong\": \"#7a7f94\",\n \"ink\": \"#182140\",\n \"ink-muted\": \"#4f5671\",\n \"ink-subtle\": \"#5f647c\",\n \"action\": \"#182140\",\n \"on-action\": \"#ffffff\",\n \"focus\": \"#325e8c\",\n \"link\": \"#2f5a87\",\n \"selection\": \"rgba(18, 199, 211, 0.28)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#5a6079\",\n \"edge-label\": \"#5a6079\",\n \"topic-teal\": \"#bce8ea\",\n \"topic-teal-ring\": \"#67c6cb\",\n \"topic-harbor\": \"#c9d9ec\",\n \"topic-harbor-ring\": \"#8bb2de\",\n \"topic-iris\": \"#d9cfe8\",\n \"topic-iris-ring\": \"#b79ed4\",\n \"topic-berry\": \"#edc6c9\",\n \"topic-berry-ring\": \"#da9099\",\n \"topic-coral\": \"#eecec1\",\n \"topic-coral-ring\": \"#db9b82\",\n \"topic-amber\": \"#eed4ba\",\n \"topic-amber-ring\": \"#d6a570\",\n \"topic-sun\": \"#f4eac1\",\n \"topic-sun-ring\": \"#d2bf73\",\n \"topic-stone\": \"#dddad5\",\n \"topic-stone-ring\": \"#bab09f\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(24, 33, 64, 0.06), 0 8px 24px rgba(24, 33, 64, 0.08)\",\n \"shadow-pop\": \"0 2px 4px rgba(24, 33, 64, 0.08), 0 16px 40px rgba(24, 33, 64, 0.14)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"focus-dark\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#12141c\",\n \"surface\": \"#171b2b\",\n \"surface-sunken\": \"#0f1220\",\n \"surface-overlay\": \"#212639\",\n \"line\": \"#2b3148\",\n \"line-strong\": \"#6c7392\",\n \"ink\": \"#eef0f7\",\n \"ink-muted\": \"#b3b8cc\",\n \"ink-subtle\": \"#8f95ae\",\n \"action\": \"#f6f3ee\",\n \"on-action\": \"#182140\",\n \"focus\": \"#12c7d3\",\n \"link\": \"#5fd8e1\",\n \"selection\": \"rgba(18, 199, 211, 0.32)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#a9aec0\",\n \"edge-label\": \"#b3b8cc\",\n \"topic-teal\": \"#bce8ea\",\n \"topic-teal-ring\": \"#71bdc1\",\n \"topic-harbor\": \"#c9d9ec\",\n \"topic-harbor-ring\": \"#8cabce\",\n \"topic-iris\": \"#d9cfe8\",\n \"topic-iris-ring\": \"#ae9bc6\",\n \"topic-berry\": \"#edc6c9\",\n \"topic-berry-ring\": \"#cc8e95\",\n \"topic-coral\": \"#eecec1\",\n \"topic-coral-ring\": \"#cd9884\",\n \"topic-amber\": \"#eed4ba\",\n \"topic-amber-ring\": \"#c9a176\",\n \"topic-sun\": \"#f4eac1\",\n \"topic-sun-ring\": \"#c9b97a\",\n \"topic-stone\": \"#dddad5\",\n \"topic-stone-ring\": \"#b4a999\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(24, 33, 64, 0.06), 0 8px 24px rgba(24, 33, 64, 0.08)\",\n \"shadow-pop\": \"0 2px 4px rgba(24, 33, 64, 0.08), 0 16px 40px rgba(24, 33, 64, 0.14)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"colorsafe-light\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#f6f3ee\",\n \"surface\": \"#ffffff\",\n \"surface-sunken\": \"#f0ece5\",\n \"surface-overlay\": \"#ffffff\",\n \"line\": \"#e4dfd6\",\n \"line-strong\": \"#7a7f94\",\n \"ink\": \"#182140\",\n \"ink-muted\": \"#4f5671\",\n \"ink-subtle\": \"#5f647c\",\n \"action\": \"#182140\",\n \"on-action\": \"#ffffff\",\n \"focus\": \"#325e8c\",\n \"link\": \"#2f5a87\",\n \"selection\": \"rgba(18, 199, 211, 0.28)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#2a3048\",\n \"edge-label\": \"#4f5671\",\n \"topic-teal\": \"#b0ecbc\",\n \"topic-teal-ring\": \"#6cc982\",\n \"topic-harbor\": \"#abdbfe\",\n \"topic-harbor-ring\": \"#60b4ec\",\n \"topic-iris\": \"#f6bde2\",\n \"topic-iris-ring\": \"#dc87c0\",\n \"topic-berry\": \"#feb79e\",\n \"topic-berry-ring\": \"#ec7f58\",\n \"topic-coral\": \"#fece96\",\n \"topic-coral-ring\": \"#e49d41\",\n \"topic-amber\": \"#b2e8fa\",\n \"topic-amber-ring\": \"#5cc4e2\",\n \"topic-sun\": \"#f6f097\",\n \"topic-sun-ring\": \"#d0c637\",\n \"topic-stone\": \"#dbdbdb\",\n \"topic-stone-ring\": \"#b7afb1\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(24, 33, 64, 0.06), 0 8px 24px rgba(24, 33, 64, 0.08)\",\n \"shadow-pop\": \"0 2px 4px rgba(24, 33, 64, 0.08), 0 16px 40px rgba(24, 33, 64, 0.14)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"colorsafe-dark\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#0f1220\",\n \"surface\": \"#171b2b\",\n \"surface-sunken\": \"#0f1220\",\n \"surface-overlay\": \"#212639\",\n \"line\": \"#2b3148\",\n \"line-strong\": \"#6c7392\",\n \"ink\": \"#eef0f7\",\n \"ink-muted\": \"#b3b8cc\",\n \"ink-subtle\": \"#8f95ae\",\n \"action\": \"#f6f3ee\",\n \"on-action\": \"#182140\",\n \"focus\": \"#12c7d3\",\n \"link\": \"#5fd8e1\",\n \"selection\": \"rgba(18, 199, 211, 0.32)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#c9cddc\",\n \"edge-label\": \"#b3b8cc\",\n \"topic-teal\": \"#b0ecbc\",\n \"topic-teal-ring\": \"#69c27e\",\n \"topic-harbor\": \"#abdbfe\",\n \"topic-harbor-ring\": \"#5eade2\",\n \"topic-iris\": \"#f6bde2\",\n \"topic-iris-ring\": \"#d383b9\",\n \"topic-berry\": \"#feb79e\",\n \"topic-berry-ring\": \"#e37a55\",\n \"topic-coral\": \"#fece96\",\n \"topic-coral-ring\": \"#db9840\",\n \"topic-amber\": \"#b2e8fa\",\n \"topic-amber-ring\": \"#5bbdda\",\n \"topic-sun\": \"#f6f097\",\n \"topic-sun-ring\": \"#c9bf37\",\n \"topic-stone\": \"#dbdbdb\",\n \"topic-stone-ring\": \"#b1a8aa\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(24, 33, 64, 0.06), 0 8px 24px rgba(24, 33, 64, 0.08)\",\n \"shadow-pop\": \"0 2px 4px rgba(24, 33, 64, 0.08), 0 16px 40px rgba(24, 33, 64, 0.14)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"contrast-light\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#ffffff\",\n \"surface\": \"#ffffff\",\n \"surface-sunken\": \"#f2f2f2\",\n \"surface-overlay\": \"#ffffff\",\n \"line\": \"#5c6178\",\n \"line-strong\": \"#000000\",\n \"ink\": \"#000000\",\n \"ink-muted\": \"#1f2433\",\n \"ink-subtle\": \"#3a3f52\",\n \"action\": \"#000000\",\n \"on-action\": \"#ffffff\",\n \"focus\": \"#0b4a8f\",\n \"link\": \"#0b4a8f\",\n \"selection\": \"rgba(18, 199, 211, 0.28)\",\n \"node-ink\": \"#000000\",\n \"edge\": \"#000000\",\n \"edge-label\": \"#1f2433\",\n \"topic-teal\": \"#87f2f8\",\n \"topic-teal-ring\": \"#006b70\",\n \"topic-harbor\": \"#bcdbff\",\n \"topic-harbor-ring\": \"#0e599d\",\n \"topic-iris\": \"#e0c8fe\",\n \"topic-iris-ring\": \"#683b92\",\n \"topic-berry\": \"#ffbdc4\",\n \"topic-berry-ring\": \"#96173a\",\n \"topic-coral\": \"#ffc7b2\",\n \"topic-coral-ring\": \"#923400\",\n \"topic-amber\": \"#ffcf9d\",\n \"topic-amber-ring\": \"#7e4d00\",\n \"topic-sun\": \"#ffea94\",\n \"topic-sun-ring\": \"#7a6600\",\n \"topic-stone\": \"#e0dacf\",\n \"topic-stone-ring\": \"#63594b\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"none\",\n \"shadow-pop\": \"none\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"contrast-dark\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#000000\",\n \"surface\": \"#000000\",\n \"surface-sunken\": \"#0d0d0d\",\n \"surface-overlay\": \"#0d0d0d\",\n \"line\": \"#9aa0b8\",\n \"line-strong\": \"#ffffff\",\n \"ink\": \"#ffffff\",\n \"ink-muted\": \"#e6e8f0\",\n \"ink-subtle\": \"#c8ccda\",\n \"action\": \"#ffffff\",\n \"on-action\": \"#000000\",\n \"focus\": \"#5fe8f0\",\n \"link\": \"#7ff0f5\",\n \"selection\": \"rgba(18, 199, 211, 0.32)\",\n \"node-ink\": \"#000000\",\n \"edge\": \"#ffffff\",\n \"edge-label\": \"#e6e8f0\",\n \"topic-teal\": \"#87f2f8\",\n \"topic-teal-ring\": \"#64eff7\",\n \"topic-harbor\": \"#bcdbff\",\n \"topic-harbor-ring\": \"#b0d5fe\",\n \"topic-iris\": \"#e0c8fe\",\n \"topic-iris-ring\": \"#dcbfff\",\n \"topic-berry\": \"#ffbdc4\",\n \"topic-berry-ring\": \"#feb3bb\",\n \"topic-coral\": \"#ffc7b2\",\n \"topic-coral-ring\": \"#ffbea5\",\n \"topic-amber\": \"#ffcf9d\",\n \"topic-amber-ring\": \"#ffc78a\",\n \"topic-sun\": \"#ffea94\",\n \"topic-sun-ring\": \"#ffe26d\",\n \"topic-stone\": \"#e0dacf\",\n \"topic-stone-ring\": \"#ddd3c2\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"none\",\n \"shadow-pop\": \"none\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n }\n};\n\n/** Topic palette names (token pairs `topic-<name>` / `topic-<name>-ring`). */\nexport const TOPICS = [\n \"teal\",\n \"harbor\",\n \"iris\",\n \"berry\",\n \"coral\",\n \"amber\",\n \"sun\",\n \"stone\"\n] as const;\nexport type TopicName = (typeof TOPICS)[number];\n\n/** Numeric tokens (px / ms stripped), camel-cased: nodeWidth, nodeStroke, edgeWidth, edgeGap, durationBase, zoomMin ... */\nexport const METRICS = {\n \"space1\": 4,\n \"space2\": 8,\n \"space3\": 12,\n \"space4\": 16,\n \"space7\": 48,\n \"radiusSm\": 10,\n \"radiusMd\": 16,\n \"radiusLg\": 24,\n \"radiusPill\": 999,\n \"nodeWidth\": 200,\n \"nodeHeight\": 148,\n \"nodeStroke\": 3,\n \"edgeWidth\": 2.5,\n \"edgeGap\": 15,\n \"edgeArcMax\": 45,\n \"immersionAlpha\": 0.15,\n \"zoomMin\": 0.3,\n \"zoomMax\": 5,\n \"durationInstant\": 100,\n \"durationQuick\": 160,\n \"durationBase\": 240,\n \"durationZoom\": 500,\n \"durationReveal\": 420,\n \"staggerReveal\": 70,\n \"zChrome\": 10,\n \"zCard\": 20,\n \"zMenu\": 40\n} as const;\n/** Overrides applied when motion is reduced. */\nexport const METRICS_REDUCED_MOTION = {\n \"durationInstant\": 120,\n \"durationQuick\": 0,\n \"durationBase\": 0,\n \"durationZoom\": 0,\n \"durationReveal\": 0,\n \"staggerReveal\": 0\n} as const;\n\n/** Canvas type styles (family is a token name: font-hand, font-note, font-ui ...). */\nexport const TYPE_STYLES = {\n \"heading\": {\n \"family\": \"font-ui\",\n \"size\": 17,\n \"lineHeight\": 24,\n \"weight\": 700\n },\n \"body\": {\n \"family\": \"font-ui\",\n \"size\": 15,\n \"lineHeight\": 22,\n \"weight\": 400\n },\n \"body-sm\": {\n \"family\": \"font-ui\",\n \"size\": 13,\n \"lineHeight\": 18,\n \"weight\": 400\n },\n \"label\": {\n \"family\": \"font-ui\",\n \"size\": 13,\n \"lineHeight\": 16,\n \"weight\": 600,\n \"letterSpacing\": 0.01\n },\n \"caption\": {\n \"family\": \"font-ui\",\n \"size\": 12,\n \"lineHeight\": 16,\n \"weight\": 400\n },\n \"node-root\": {\n \"family\": \"font-hand\",\n \"size\": 30,\n \"lineHeight\": 34,\n \"weight\": 700\n },\n \"node-label\": {\n \"family\": \"font-hand\",\n \"size\": 22,\n \"lineHeight\": 26,\n \"weight\": 700\n },\n \"edge-label\": {\n \"family\": \"font-note\",\n \"size\": 18,\n \"lineHeight\": 20,\n \"weight\": 500\n },\n \"annotation\": {\n \"family\": \"font-note\",\n \"size\": 24,\n \"lineHeight\": 26,\n \"weight\": 600\n }\n} as const;\n\n/** Canvas styling extracted from css/spec.css (node labels, hover, shadows, connector dashes, group frames). */\nexport const CANVAS_STYLE = {\n \"node\": {\n \"selectedStrokeWidth\": 4,\n \"hoverRingsRotate\": -2,\n \"hoverRingsScale\": 1.015,\n \"hoverLift\": -2,\n \"dimmedOpacity\": 1,\n \"dimmedOpacityFocus\": 0.4,\n \"dimmedOpacityTouch\": 0.6,\n \"dimmedOpacityFocusTouch\": 0.4,\n \"shadowLight\": \"0 6px 14px rgba(24, 33, 64, .10)\",\n \"shadowDark\": \"0 0 22px rgba(255, 255, 255, .10)\"\n },\n \"edge\": {\n \"dash\": [\n 7,\n 7\n ],\n \"labelWeight\": 500,\n \"labelSize\": 18,\n \"readableLabelSize\": 14,\n \"readableLabelWeight\": 600,\n \"labelHaloWidth\": 5\n },\n \"group\": {\n \"strokeWidth\": 1.5,\n \"dash\": [\n 10,\n 6\n ],\n \"labelWeight\": 700,\n \"labelLineHeight\": 1.1,\n \"labelSize\": 26,\n \"labelPadding\": {\n \"top\": 6,\n \"x\": 22,\n \"bottom\": 8\n },\n \"labelMaxWidth\": 420,\n \"labelBorderWidth\": 1.5,\n \"labelFill\": \"topic-stone\",\n \"labelBorder\": \"topic-stone-ring\",\n \"labelInk\": \"node-ink\",\n \"contrastLabelBorderWidth\": 2,\n \"contrastLabelBorder\": \"line-strong\"\n }\n} as const;\n","// Generated from visualli.ai design-system/components/src/color.ts — do not edit here.\n/* Which topic an idea is drawn in. A `.visualli` file's `data.color` may name one of the eight topics or be any\n other color, or be missing. Every renderer resolves it with this rule, so a file looks the same everywhere:\n a topic name ('teal', 'Harbor ') → that topic (case and surrounding spaces don't matter);\n no color → the topics in order, by the idea's position among its siblings (so siblings differ);\n anything else (e.g. '#b7e7f3') → null: not a topic — drawn as given (customColor): the color as the fill, and\n the fill darkened (CUSTOM.ringShade) as the ring; a custom color doesn't follow themes.\n No dependencies, so it can travel alone. */\n\n/** The eight topics, in the order missing colors cycle through. */\nexport const TOPIC_ORDER = ['teal', 'harbor', 'iris', 'berry', 'coral', 'amber', 'sun', 'stone'] as const;\nexport type TopicName = (typeof TOPIC_ORDER)[number];\n\n/** The topic a color names, or null. */\nexport function topicFromName(color: string | null | undefined): TopicName | null {\n if (!color) return null;\n const c = color.trim().toLowerCase();\n return (TOPIC_ORDER as readonly string[]).includes(c) ? (c as TopicName) : null;\n}\n\n/** The topic for an idea: its named topic; with no color, the next topic in sibling order; null for any other color. */\nexport function topicFor(color: string | null | undefined, siblingIndex: number): TopicName | null {\n if (!color || !color.trim()) return TOPIC_ORDER[((siblingIndex % TOPIC_ORDER.length) + TOPIC_ORDER.length) % TOPIC_ORDER.length];\n return topicFromName(color);\n}\n\n/** A custom (non-topic) color: drawn as given, with a darker ring. */\nexport const CUSTOM = { /** The ring is the fill with each RGB channel multiplied by this. */ ringShade: 0.78 } as const;\n\n/** Fill and ring for a custom color. `ring` is null when the color isn't a 6-digit hex (use the `edge` token then). */\nexport function customColor(color: string): { fill: string; ring: string | null } {\n const m = /^#?([0-9a-f]{6})$/i.exec((color || '').trim());\n if (!m) return { fill: color, ring: null };\n const n = parseInt(m[1], 16), f = CUSTOM.ringShade;\n const r = Math.round(((n >> 16) & 255) * f), g = Math.round(((n >> 8) & 255) * f), b = Math.round((n & 255) * f);\n return { fill: color.trim(), ring: '#' + ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1) };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/theme/index.ts","../../src/generated/designSystem.ts","../../src/generated/geometry/color.ts"],"sourcesContent":["// ─── Theme resolution ────────────────────────────────────────────────────────\n//\n// Everything visual comes from the generated design-system modules. This file\n// only decides WHICH of the 8 themes applies and resolves document colours with\n// the design system's colour rule. No colour literals live here.\n//\n// Dependencies: ../generated/designSystem.ts (generated from design-system/).\n\nimport {\n CANVAS_STYLE,\n DESIGN_SYSTEM_VERSION,\n METRICS,\n METRICS_REDUCED_MOTION,\n THEME_NAMES,\n TOKENS,\n TOPICS,\n TYPE_STYLES,\n type ThemeName,\n type TopicName,\n} from '../generated/designSystem.js';\nimport { TOPIC_ORDER, customColor, topicFor, topicFromName } from '../generated/geometry/color.js';\n\nexport { topicFromName, customColor };\n\nexport { CANVAS_STYLE, DESIGN_SYSTEM_VERSION, METRICS, METRICS_REDUCED_MOTION, THEME_NAMES, TOKENS, TOPICS, TYPE_STYLES };\nexport type { ThemeName, TopicName };\n\n// ── Theme selection ───────────────────────────────────────────────────────────\n\n/** Theme families: each resolves to its light or dark member. */\nexport type ThemeFamily = 'standard' | 'focus' | 'colorsafe' | 'contrast';\n\n/**\n * Anything a consumer may pass as `theme`:\n * - one of the 8 design-system themes ('light', 'dark', 'focus-light', ...)\n * - a family name ('focus' | 'colorsafe' | 'contrast') -> light/dark per the reader's scheme\n * - 'auto' -> light/dark per prefers-color-scheme (contrast under forced-colors)\n *\n * 'light' | 'dark' | 'auto' are the pre-0.2 values, kept as aliases for one release.\n */\nexport type ThemeInput = ThemeName | 'auto' | 'focus' | 'colorsafe' | 'contrast';\n\nexport interface ThemeEnv {\n /** prefers-color-scheme: dark */\n prefersDark?: boolean;\n /** forced-colors: active (Windows high contrast etc.) */\n forcedColors?: boolean;\n}\n\nconst FAMILIES: ReadonlySet<string> = new Set(['focus', 'colorsafe', 'contrast']);\n\nexport function isThemeName(v: unknown): v is ThemeName {\n return typeof v === 'string' && (THEME_NAMES as readonly string[]).includes(v);\n}\n\n/** Resolve any accepted `theme` value to one concrete design-system theme. */\nexport function resolveTheme(input: ThemeInput | undefined, env: ThemeEnv = {}): ThemeName {\n const scheme = env.prefersDark ? 'dark' : 'light';\n if (input === undefined || input === 'auto') return env.forcedColors ? (`contrast-${scheme}` as ThemeName) : scheme;\n if (FAMILIES.has(input)) return `${input}-${scheme}` as ThemeName;\n return isThemeName(input) ? input : 'light';\n}\n\nexport const isDarkTheme = (name: ThemeName): boolean => name.endsWith('dark');\nexport const isContrastTheme = (name: ThemeName): boolean => name.startsWith('contrast');\nexport const isFocusTheme = (name: ThemeName): boolean => name.startsWith('focus');\n\n/** All tokens of a theme (already merged over the light defaults). */\nexport const getTokens = (name: ThemeName): Readonly<Record<string, string>> => TOKENS[name];\n\n/** One token of a theme. Throws on an unknown key so typos fail loudly in tests. */\nexport function token(name: ThemeName, key: string): string {\n const v = TOKENS[name][key];\n if (v === undefined) throw new Error(`Unknown design-system token \"${key}\"`);\n return v;\n}\n\n// ── Comfort settings ──────────────────────────────────────────────────────────\n\nexport interface Comfort {\n /** Atkinson Hyperlegible for map labels instead of the handwritten faces (`data-type=\"readable\"`). */\n readableType?: boolean;\n /** Larger UI and label text (`data-scale=\"lg\"`). */\n largerText?: boolean;\n /** Skip transitions and reveal animations (`data-motion=\"reduced\"`). 'system' follows prefers-reduced-motion. */\n reducedMotion?: boolean | 'system';\n}\n\nexport interface ResolvedComfort { readableType: boolean; largerText: boolean; reducedMotion: boolean }\n\nexport function resolveComfort(c: Comfort | undefined, env: { prefersReducedMotion?: boolean } = {}): ResolvedComfort {\n const rm = c?.reducedMotion;\n return {\n readableType: !!c?.readableType,\n largerText: !!c?.largerText,\n reducedMotion: rm === undefined || rm === 'system' ? !!env.prefersReducedMotion : rm,\n };\n}\n\n/** Numeric design-system tokens (px / ms stripped). */\nexport type Metrics = { readonly [K in keyof typeof METRICS]: number };\n\n/** Numeric tokens with the reduced-motion overrides applied when requested. */\nexport function metricsFor(comfort: ResolvedComfort): Metrics {\n return comfort.reducedMotion ? { ...METRICS, ...METRICS_REDUCED_MOTION } : METRICS;\n}\n\n/** Multiplier the spec applies to label sizes under `data-scale=\"lg\"` (`--vi-label-scale`). */\nexport const labelScale = (c: ResolvedComfort): number => (c.largerText ? 1.15 : 1);\n\n// ── Topic palette ─────────────────────────────────────────────────────────────\n\nexport interface TopicStyle { topic: TopicName; fill: string; ring: string }\n\n/** Fill + ring colour of a topic in a theme. */\nexport function topicStyle(theme: ThemeName, topic: TopicName): TopicStyle {\n const t = TOKENS[theme];\n return { topic, fill: t[`topic-${topic}`]!, ring: t[`topic-${topic}-ring`]! };\n}\n\n/** An idea's colour by the design system's colour rule (geometry/color.ts, verbatim): a topic name → that topic; no\n * colour → the topics in sibling order; any other colour → custom, drawn as given (customColor: the colour as the fill,\n * the fill darkened by CUSTOM.ringShade as the ring). A custom colour doesn't follow themes. */\nexport interface IdeaColor { topic: TopicName | null; custom: { fill: string; ring: string | null } | null }\n\nexport function ideaColor(color: string | null | undefined, siblingIndex: number): IdeaColor {\n const topic = topicFor(color, siblingIndex);\n return topic ? { topic, custom: null } : { topic: null, custom: customColor(color!) };\n}\n\n/** Fill + ring an idea is drawn with in a theme: its topic's, or its custom colour (ring: the `edge` token when the\n * colour has no darker shade, i.e. isn't a 6-digit hex). */\nexport function ideaStyle(theme: ThemeName, c: { topic?: TopicName | null; custom?: IdeaColor['custom'] }): { fill: string; ring: string } {\n if (c.custom) return { fill: c.custom.fill, ring: c.custom.ring ?? TOKENS[theme]['edge']! };\n return topicStyle(theme, c.topic ?? TOPIC_ORDER[0]);\n}\n","// GENERATED by scripts/gen-design-system.mjs from design-system/ (tokens/tokens.json, tokens/tokens.css). Do not edit.\n// Change the design system instead; the next `npm run build` regenerates this file.\n\n/** Version of the design system these modules were generated from. */\nexport const DESIGN_SYSTEM_VERSION = \"0.2.1\" as const;\n\nexport const THEME_NAMES = [\n \"light\",\n \"dark\",\n \"focus-light\",\n \"focus-dark\",\n \"colorsafe-light\",\n \"colorsafe-dark\",\n \"contrast-light\",\n \"contrast-dark\"\n] as const;\nexport type ThemeName = (typeof THEME_NAMES)[number];\n\n/** Every token for every theme (each theme already merged over \"light\"). Keys match the CSS custom properties. */\nexport const TOKENS: Readonly<Record<ThemeName, Readonly<Record<string, string>>>> = {\n \"light\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#f6f3ee\",\n \"surface\": \"#ffffff\",\n \"surface-sunken\": \"#f0ece5\",\n \"surface-overlay\": \"#ffffff\",\n \"line\": \"#e4dfd6\",\n \"line-strong\": \"#7a7f94\",\n \"ink\": \"#182140\",\n \"ink-muted\": \"#4f5671\",\n \"ink-subtle\": \"#5f647c\",\n \"action\": \"#182140\",\n \"on-action\": \"#ffffff\",\n \"focus\": \"#325e8c\",\n \"link\": \"#2f5a87\",\n \"selection\": \"rgba(18, 199, 211, 0.28)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#2a3048\",\n \"edge-label\": \"#4f5671\",\n \"topic-teal\": \"#87f2f8\",\n \"topic-teal-ring\": \"#00cdd5\",\n \"topic-harbor\": \"#bcdbff\",\n \"topic-harbor-ring\": \"#76b2f5\",\n \"topic-iris\": \"#e0c8fe\",\n \"topic-iris-ring\": \"#bd96ea\",\n \"topic-berry\": \"#ffbdc4\",\n \"topic-berry-ring\": \"#f47e8f\",\n \"topic-coral\": \"#ffc7b2\",\n \"topic-coral-ring\": \"#f38e65\",\n \"topic-amber\": \"#ffcf9d\",\n \"topic-amber-ring\": \"#eb9c38\",\n \"topic-sun\": \"#ffea94\",\n \"topic-sun-ring\": \"#dfbd04\",\n \"topic-stone\": \"#e0dacf\",\n \"topic-stone-ring\": \"#bab09f\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(24, 33, 64, 0.06), 0 8px 24px rgba(24, 33, 64, 0.08)\",\n \"shadow-pop\": \"0 2px 4px rgba(24, 33, 64, 0.08), 0 16px 40px rgba(24, 33, 64, 0.14)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"dark\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#0f1220\",\n \"surface\": \"#171b2b\",\n \"surface-sunken\": \"#0f1220\",\n \"surface-overlay\": \"#212639\",\n \"line\": \"#2b3148\",\n \"line-strong\": \"#6c7392\",\n \"ink\": \"#eef0f7\",\n \"ink-muted\": \"#b3b8cc\",\n \"ink-subtle\": \"#8f95ae\",\n \"action\": \"#f6f3ee\",\n \"on-action\": \"#182140\",\n \"focus\": \"#12c7d3\",\n \"link\": \"#5fd8e1\",\n \"selection\": \"rgba(18, 199, 211, 0.32)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#c9cddc\",\n \"edge-label\": \"#b3b8cc\",\n \"topic-teal\": \"#87f2f8\",\n \"topic-teal-ring\": \"#0fc5cd\",\n \"topic-harbor\": \"#bcdbff\",\n \"topic-harbor-ring\": \"#73aceb\",\n \"topic-iris\": \"#e0c8fe\",\n \"topic-iris-ring\": \"#b691e1\",\n \"topic-berry\": \"#ffbdc4\",\n \"topic-berry-ring\": \"#eb798a\",\n \"topic-coral\": \"#ffc7b2\",\n \"topic-coral-ring\": \"#ea8962\",\n \"topic-amber\": \"#ffcf9d\",\n \"topic-amber-ring\": \"#e29737\",\n \"topic-sun\": \"#ffea94\",\n \"topic-sun-ring\": \"#d8b70a\",\n \"topic-stone\": \"#e0dacf\",\n \"topic-stone-ring\": \"#b4a999\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(0, 0, 0, 0.40), 0 8px 24px rgba(0, 0, 0, 0.35)\",\n \"shadow-pop\": \"0 2px 4px rgba(0, 0, 0, 0.50), 0 16px 40px rgba(0, 0, 0, 0.50)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"focus-light\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#f4f2ee\",\n \"surface\": \"#ffffff\",\n \"surface-sunken\": \"#f0ece5\",\n \"surface-overlay\": \"#ffffff\",\n \"line\": \"#e4dfd6\",\n \"line-strong\": \"#7a7f94\",\n \"ink\": \"#182140\",\n \"ink-muted\": \"#4f5671\",\n \"ink-subtle\": \"#5f647c\",\n \"action\": \"#182140\",\n \"on-action\": \"#ffffff\",\n \"focus\": \"#325e8c\",\n \"link\": \"#2f5a87\",\n \"selection\": \"rgba(18, 199, 211, 0.28)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#5a6079\",\n \"edge-label\": \"#5a6079\",\n \"topic-teal\": \"#bce8ea\",\n \"topic-teal-ring\": \"#67c6cb\",\n \"topic-harbor\": \"#c9d9ec\",\n \"topic-harbor-ring\": \"#8bb2de\",\n \"topic-iris\": \"#d9cfe8\",\n \"topic-iris-ring\": \"#b79ed4\",\n \"topic-berry\": \"#edc6c9\",\n \"topic-berry-ring\": \"#da9099\",\n \"topic-coral\": \"#eecec1\",\n \"topic-coral-ring\": \"#db9b82\",\n \"topic-amber\": \"#eed4ba\",\n \"topic-amber-ring\": \"#d6a570\",\n \"topic-sun\": \"#f4eac1\",\n \"topic-sun-ring\": \"#d2bf73\",\n \"topic-stone\": \"#dddad5\",\n \"topic-stone-ring\": \"#bab09f\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(24, 33, 64, 0.06), 0 8px 24px rgba(24, 33, 64, 0.08)\",\n \"shadow-pop\": \"0 2px 4px rgba(24, 33, 64, 0.08), 0 16px 40px rgba(24, 33, 64, 0.14)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"focus-dark\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#12141c\",\n \"surface\": \"#171b2b\",\n \"surface-sunken\": \"#0f1220\",\n \"surface-overlay\": \"#212639\",\n \"line\": \"#2b3148\",\n \"line-strong\": \"#6c7392\",\n \"ink\": \"#eef0f7\",\n \"ink-muted\": \"#b3b8cc\",\n \"ink-subtle\": \"#8f95ae\",\n \"action\": \"#f6f3ee\",\n \"on-action\": \"#182140\",\n \"focus\": \"#12c7d3\",\n \"link\": \"#5fd8e1\",\n \"selection\": \"rgba(18, 199, 211, 0.32)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#a9aec0\",\n \"edge-label\": \"#b3b8cc\",\n \"topic-teal\": \"#bce8ea\",\n \"topic-teal-ring\": \"#71bdc1\",\n \"topic-harbor\": \"#c9d9ec\",\n \"topic-harbor-ring\": \"#8cabce\",\n \"topic-iris\": \"#d9cfe8\",\n \"topic-iris-ring\": \"#ae9bc6\",\n \"topic-berry\": \"#edc6c9\",\n \"topic-berry-ring\": \"#cc8e95\",\n \"topic-coral\": \"#eecec1\",\n \"topic-coral-ring\": \"#cd9884\",\n \"topic-amber\": \"#eed4ba\",\n \"topic-amber-ring\": \"#c9a176\",\n \"topic-sun\": \"#f4eac1\",\n \"topic-sun-ring\": \"#c9b97a\",\n \"topic-stone\": \"#dddad5\",\n \"topic-stone-ring\": \"#b4a999\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(24, 33, 64, 0.06), 0 8px 24px rgba(24, 33, 64, 0.08)\",\n \"shadow-pop\": \"0 2px 4px rgba(24, 33, 64, 0.08), 0 16px 40px rgba(24, 33, 64, 0.14)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"colorsafe-light\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#f6f3ee\",\n \"surface\": \"#ffffff\",\n \"surface-sunken\": \"#f0ece5\",\n \"surface-overlay\": \"#ffffff\",\n \"line\": \"#e4dfd6\",\n \"line-strong\": \"#7a7f94\",\n \"ink\": \"#182140\",\n \"ink-muted\": \"#4f5671\",\n \"ink-subtle\": \"#5f647c\",\n \"action\": \"#182140\",\n \"on-action\": \"#ffffff\",\n \"focus\": \"#325e8c\",\n \"link\": \"#2f5a87\",\n \"selection\": \"rgba(18, 199, 211, 0.28)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#2a3048\",\n \"edge-label\": \"#4f5671\",\n \"topic-teal\": \"#b0ecbc\",\n \"topic-teal-ring\": \"#6cc982\",\n \"topic-harbor\": \"#abdbfe\",\n \"topic-harbor-ring\": \"#60b4ec\",\n \"topic-iris\": \"#f6bde2\",\n \"topic-iris-ring\": \"#dc87c0\",\n \"topic-berry\": \"#feb79e\",\n \"topic-berry-ring\": \"#ec7f58\",\n \"topic-coral\": \"#fece96\",\n \"topic-coral-ring\": \"#e49d41\",\n \"topic-amber\": \"#b2e8fa\",\n \"topic-amber-ring\": \"#5cc4e2\",\n \"topic-sun\": \"#f6f097\",\n \"topic-sun-ring\": \"#d0c637\",\n \"topic-stone\": \"#dbdbdb\",\n \"topic-stone-ring\": \"#b7afb1\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(24, 33, 64, 0.06), 0 8px 24px rgba(24, 33, 64, 0.08)\",\n \"shadow-pop\": \"0 2px 4px rgba(24, 33, 64, 0.08), 0 16px 40px rgba(24, 33, 64, 0.14)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"colorsafe-dark\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#0f1220\",\n \"surface\": \"#171b2b\",\n \"surface-sunken\": \"#0f1220\",\n \"surface-overlay\": \"#212639\",\n \"line\": \"#2b3148\",\n \"line-strong\": \"#6c7392\",\n \"ink\": \"#eef0f7\",\n \"ink-muted\": \"#b3b8cc\",\n \"ink-subtle\": \"#8f95ae\",\n \"action\": \"#f6f3ee\",\n \"on-action\": \"#182140\",\n \"focus\": \"#12c7d3\",\n \"link\": \"#5fd8e1\",\n \"selection\": \"rgba(18, 199, 211, 0.32)\",\n \"node-ink\": \"#182140\",\n \"edge\": \"#c9cddc\",\n \"edge-label\": \"#b3b8cc\",\n \"topic-teal\": \"#b0ecbc\",\n \"topic-teal-ring\": \"#69c27e\",\n \"topic-harbor\": \"#abdbfe\",\n \"topic-harbor-ring\": \"#5eade2\",\n \"topic-iris\": \"#f6bde2\",\n \"topic-iris-ring\": \"#d383b9\",\n \"topic-berry\": \"#feb79e\",\n \"topic-berry-ring\": \"#e37a55\",\n \"topic-coral\": \"#fece96\",\n \"topic-coral-ring\": \"#db9840\",\n \"topic-amber\": \"#b2e8fa\",\n \"topic-amber-ring\": \"#5bbdda\",\n \"topic-sun\": \"#f6f097\",\n \"topic-sun-ring\": \"#c9bf37\",\n \"topic-stone\": \"#dbdbdb\",\n \"topic-stone-ring\": \"#b1a8aa\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"0 1px 2px rgba(24, 33, 64, 0.06), 0 8px 24px rgba(24, 33, 64, 0.08)\",\n \"shadow-pop\": \"0 2px 4px rgba(24, 33, 64, 0.08), 0 16px 40px rgba(24, 33, 64, 0.14)\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"contrast-light\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#ffffff\",\n \"surface\": \"#ffffff\",\n \"surface-sunken\": \"#f2f2f2\",\n \"surface-overlay\": \"#ffffff\",\n \"line\": \"#5c6178\",\n \"line-strong\": \"#000000\",\n \"ink\": \"#000000\",\n \"ink-muted\": \"#1f2433\",\n \"ink-subtle\": \"#3a3f52\",\n \"action\": \"#000000\",\n \"on-action\": \"#ffffff\",\n \"focus\": \"#0b4a8f\",\n \"link\": \"#0b4a8f\",\n \"selection\": \"rgba(18, 199, 211, 0.28)\",\n \"node-ink\": \"#000000\",\n \"edge\": \"#000000\",\n \"edge-label\": \"#1f2433\",\n \"topic-teal\": \"#87f2f8\",\n \"topic-teal-ring\": \"#006b70\",\n \"topic-harbor\": \"#bcdbff\",\n \"topic-harbor-ring\": \"#0e599d\",\n \"topic-iris\": \"#e0c8fe\",\n \"topic-iris-ring\": \"#683b92\",\n \"topic-berry\": \"#ffbdc4\",\n \"topic-berry-ring\": \"#96173a\",\n \"topic-coral\": \"#ffc7b2\",\n \"topic-coral-ring\": \"#923400\",\n \"topic-amber\": \"#ffcf9d\",\n \"topic-amber-ring\": \"#7e4d00\",\n \"topic-sun\": \"#ffea94\",\n \"topic-sun-ring\": \"#7a6600\",\n \"topic-stone\": \"#e0dacf\",\n \"topic-stone-ring\": \"#63594b\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"none\",\n \"shadow-pop\": \"none\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n },\n \"contrast-dark\": {\n \"font-display\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, sans-serif\",\n \"font-ui\": \"\\\"Atkinson Hyperlegible Next\\\", system-ui, -apple-system, \\\"Segoe UI\\\", sans-serif\",\n \"font-hand\": \"Kalam, \\\"Atkinson Hyperlegible Next\\\", cursive\",\n \"font-note\": \"Caveat, Kalam, cursive\",\n \"font-mono\": \"\\\"Atkinson Hyperlegible Mono\\\", ui-monospace, \\\"SF Mono\\\", Menlo, monospace\",\n \"canvas\": \"#000000\",\n \"surface\": \"#000000\",\n \"surface-sunken\": \"#0d0d0d\",\n \"surface-overlay\": \"#0d0d0d\",\n \"line\": \"#9aa0b8\",\n \"line-strong\": \"#ffffff\",\n \"ink\": \"#ffffff\",\n \"ink-muted\": \"#e6e8f0\",\n \"ink-subtle\": \"#c8ccda\",\n \"action\": \"#ffffff\",\n \"on-action\": \"#000000\",\n \"focus\": \"#5fe8f0\",\n \"link\": \"#7ff0f5\",\n \"selection\": \"rgba(18, 199, 211, 0.32)\",\n \"node-ink\": \"#000000\",\n \"edge\": \"#ffffff\",\n \"edge-label\": \"#e6e8f0\",\n \"topic-teal\": \"#87f2f8\",\n \"topic-teal-ring\": \"#64eff7\",\n \"topic-harbor\": \"#bcdbff\",\n \"topic-harbor-ring\": \"#b0d5fe\",\n \"topic-iris\": \"#e0c8fe\",\n \"topic-iris-ring\": \"#dcbfff\",\n \"topic-berry\": \"#ffbdc4\",\n \"topic-berry-ring\": \"#feb3bb\",\n \"topic-coral\": \"#ffc7b2\",\n \"topic-coral-ring\": \"#ffbea5\",\n \"topic-amber\": \"#ffcf9d\",\n \"topic-amber-ring\": \"#ffc78a\",\n \"topic-sun\": \"#ffea94\",\n \"topic-sun-ring\": \"#ffe26d\",\n \"topic-stone\": \"#e0dacf\",\n \"topic-stone-ring\": \"#ddd3c2\",\n \"space-1\": \"4px\",\n \"space-2\": \"8px\",\n \"space-3\": \"12px\",\n \"space-4\": \"16px\",\n \"space-7\": \"48px\",\n \"radius-sm\": \"10px\",\n \"radius-md\": \"16px\",\n \"radius-lg\": \"24px\",\n \"radius-pill\": \"999px\",\n \"shadow-float\": \"none\",\n \"shadow-pop\": \"none\",\n \"node-width\": \"200px\",\n \"node-height\": \"148px\",\n \"node-stroke\": \"3px\",\n \"edge-width\": \"2.5px\",\n \"edge-gap\": \"15px\",\n \"edge-arc-max\": \"45px\",\n \"immersion-alpha\": \"0.15\",\n \"zoom-min\": \"0.3\",\n \"zoom-max\": \"5\",\n \"duration-instant\": \"100ms\",\n \"duration-quick\": \"160ms\",\n \"duration-base\": \"240ms\",\n \"duration-zoom\": \"500ms\",\n \"duration-reveal\": \"420ms\",\n \"stagger-reveal\": \"70ms\",\n \"ease-zoom\": \"cubic-bezier(0.2, 0.8, 0.2, 1)\",\n \"ease-standard\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"ease-bloom\": \"cubic-bezier(0.34, 1.4, 0.64, 1)\",\n \"z-chrome\": \"10\",\n \"z-card\": \"20\",\n \"z-menu\": \"40\"\n }\n};\n\n/** Topic palette names (token pairs `topic-<name>` / `topic-<name>-ring`). */\nexport const TOPICS = [\n \"teal\",\n \"harbor\",\n \"iris\",\n \"berry\",\n \"coral\",\n \"amber\",\n \"sun\",\n \"stone\"\n] as const;\nexport type TopicName = (typeof TOPICS)[number];\n\n/** Numeric tokens (px / ms stripped), camel-cased: nodeWidth, nodeStroke, edgeWidth, edgeGap, durationBase, zoomMin ... */\nexport const METRICS = {\n \"space1\": 4,\n \"space2\": 8,\n \"space3\": 12,\n \"space4\": 16,\n \"space7\": 48,\n \"radiusSm\": 10,\n \"radiusMd\": 16,\n \"radiusLg\": 24,\n \"radiusPill\": 999,\n \"nodeWidth\": 200,\n \"nodeHeight\": 148,\n \"nodeStroke\": 3,\n \"edgeWidth\": 2.5,\n \"edgeGap\": 15,\n \"edgeArcMax\": 45,\n \"immersionAlpha\": 0.15,\n \"zoomMin\": 0.3,\n \"zoomMax\": 5,\n \"durationInstant\": 100,\n \"durationQuick\": 160,\n \"durationBase\": 240,\n \"durationZoom\": 500,\n \"durationReveal\": 420,\n \"staggerReveal\": 70,\n \"zChrome\": 10,\n \"zCard\": 20,\n \"zMenu\": 40\n} as const;\n/** Overrides applied when motion is reduced. */\nexport const METRICS_REDUCED_MOTION = {\n \"durationInstant\": 120,\n \"durationQuick\": 0,\n \"durationBase\": 0,\n \"durationZoom\": 0,\n \"durationReveal\": 0,\n \"staggerReveal\": 0\n} as const;\n\n/** Canvas type styles (family is a token name: font-hand, font-note, font-ui ...). */\nexport const TYPE_STYLES = {\n \"heading\": {\n \"family\": \"font-ui\",\n \"size\": 17,\n \"lineHeight\": 24,\n \"weight\": 700\n },\n \"body\": {\n \"family\": \"font-ui\",\n \"size\": 15,\n \"lineHeight\": 22,\n \"weight\": 400\n },\n \"body-sm\": {\n \"family\": \"font-ui\",\n \"size\": 13,\n \"lineHeight\": 18,\n \"weight\": 400\n },\n \"label\": {\n \"family\": \"font-ui\",\n \"size\": 13,\n \"lineHeight\": 16,\n \"weight\": 600,\n \"letterSpacing\": 0.01\n },\n \"caption\": {\n \"family\": \"font-ui\",\n \"size\": 12,\n \"lineHeight\": 16,\n \"weight\": 400\n },\n \"node-root\": {\n \"family\": \"font-hand\",\n \"size\": 30,\n \"lineHeight\": 34,\n \"weight\": 700\n },\n \"node-label\": {\n \"family\": \"font-hand\",\n \"size\": 22,\n \"lineHeight\": 26,\n \"weight\": 700\n },\n \"edge-label\": {\n \"family\": \"font-note\",\n \"size\": 18,\n \"lineHeight\": 20,\n \"weight\": 500\n },\n \"annotation\": {\n \"family\": \"font-note\",\n \"size\": 24,\n \"lineHeight\": 26,\n \"weight\": 600\n }\n} as const;\n\n/** Canvas styling extracted from css/spec.css (node labels, hover, shadows, connector dashes, group frames). */\nexport const CANVAS_STYLE = {\n \"node\": {\n \"selectedStrokeWidth\": 4,\n \"hoverRingsRotate\": -2,\n \"hoverRingsScale\": 1.015,\n \"hoverLift\": -2,\n \"dimmedOpacity\": 1,\n \"dimmedOpacityFocus\": 0.4,\n \"dimmedOpacityTouch\": 0.6,\n \"dimmedOpacityFocusTouch\": 0.4,\n \"shadowLight\": \"0 6px 14px rgba(24, 33, 64, .10)\",\n \"shadowDark\": \"0 0 22px rgba(255, 255, 255, .10)\"\n },\n \"edge\": {\n \"dash\": [\n 7,\n 7\n ],\n \"labelWeight\": 500,\n \"labelSize\": 18,\n \"readableLabelSize\": 14,\n \"readableLabelWeight\": 600,\n \"labelHaloWidth\": 5\n },\n \"group\": {\n \"strokeWidth\": 1.5,\n \"dash\": [\n 10,\n 6\n ],\n \"labelWeight\": 700,\n \"labelLineHeight\": 1.1,\n \"labelSize\": 26,\n \"labelPadding\": {\n \"top\": 6,\n \"x\": 22,\n \"bottom\": 8\n },\n \"labelMaxWidth\": 420,\n \"labelBorderWidth\": 1.5,\n \"labelFill\": \"topic-stone\",\n \"labelBorder\": \"topic-stone-ring\",\n \"labelInk\": \"node-ink\",\n \"contrastLabelBorderWidth\": 2,\n \"contrastLabelBorder\": \"line-strong\"\n }\n} as const;\n","// Generated from visualli.ai design-system/components/src/color.ts — do not edit here.\n/* Which topic an idea is drawn in. A `.visualli` file's `data.color` may name one of the eight topics or be any\n other color, or be missing. Every renderer resolves it with this rule, so a file looks the same everywhere:\n a topic name ('teal', 'Harbor ') → that topic (case and surrounding spaces don't matter);\n no color → the topics in order, by the idea's position among its siblings (so siblings differ);\n anything else (e.g. '#b7e7f3') → null: not a topic — drawn as given (customColor): the color as the fill, and\n the fill darkened (CUSTOM.ringShade) as the ring; a custom color doesn't follow themes.\n No dependencies, so it can travel alone. */\n\n/** The eight topics, in the order missing colors cycle through. */\nexport const TOPIC_ORDER = ['teal', 'harbor', 'iris', 'berry', 'coral', 'amber', 'sun', 'stone'] as const;\nexport type TopicName = (typeof TOPIC_ORDER)[number];\n\n/** The topic a color names, or null. */\nexport function topicFromName(color: string | null | undefined): TopicName | null {\n if (!color) return null;\n const c = color.trim().toLowerCase();\n return (TOPIC_ORDER as readonly string[]).includes(c) ? (c as TopicName) : null;\n}\n\n/** The topic for an idea: its named topic; with no color, the next topic in sibling order; null for any other color. */\nexport function topicFor(color: string | null | undefined, siblingIndex: number): TopicName | null {\n if (!color || !color.trim()) return TOPIC_ORDER[((siblingIndex % TOPIC_ORDER.length) + TOPIC_ORDER.length) % TOPIC_ORDER.length];\n return topicFromName(color);\n}\n\n/** A custom (non-topic) color: drawn as given, with a darker ring. */\nexport const CUSTOM = { /** The ring is the fill with each RGB channel multiplied by this. */ ringShade: 0.78 } as const;\n\n/** Fill and ring for a custom color. `ring` is null when the color isn't a 6-digit hex (use the `edge` token then). */\nexport function customColor(color: string): { fill: string; ring: string | null } {\n const m = /^#?([0-9a-f]{6})$/i.exec((color || '').trim());\n if (!m) return { fill: color, ring: null };\n const n = parseInt(m[1], 16), f = CUSTOM.ringShade;\n const r = Math.round(((n >> 16) & 255) * f), g = Math.round(((n >> 8) & 255) * f), b = Math.round((n & 255) * f);\n return { fill: color.trim(), ring: '#' + ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1) };\n}\n"],"mappings":"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","names":[]}
|
package/dist/theme/index.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { C as CANVAS_STYLE, D as DESIGN_SYSTEM_VERSION, M as METRICS, b as METRICS_REDUCED_MOTION, c as THEME_NAMES, d as TOKENS, e as TOPICS, f as TYPE_STYLES, a as ThemeName, T as TopicName } from '../designSystem-
|
|
2
|
-
export { a as Comfort, I as IdeaColor, M as Metrics, R as ResolvedComfort, b as ThemeEnv, c as ThemeFamily, d as ThemeInput, e as TopicStyle, f as customColor, g as getTokens, i as ideaColor, h as ideaStyle, j as isContrastTheme, k as isDarkTheme, l as isFocusTheme, m as isThemeName, n as labelScale, o as metricsFor, r as resolveComfort, p as resolveTheme, t as token, s as topicFromName, u as topicStyle } from '../index-
|
|
1
|
+
export { C as CANVAS_STYLE, D as DESIGN_SYSTEM_VERSION, M as METRICS, b as METRICS_REDUCED_MOTION, c as THEME_NAMES, d as TOKENS, e as TOPICS, f as TYPE_STYLES, a as ThemeName, T as TopicName } from '../designSystem-D49xVfr8.cjs';
|
|
2
|
+
export { a as Comfort, I as IdeaColor, M as Metrics, R as ResolvedComfort, b as ThemeEnv, c as ThemeFamily, d as ThemeInput, e as TopicStyle, f as customColor, g as getTokens, i as ideaColor, h as ideaStyle, j as isContrastTheme, k as isDarkTheme, l as isFocusTheme, m as isThemeName, n as labelScale, o as metricsFor, r as resolveComfort, p as resolveTheme, t as token, s as topicFromName, u as topicStyle } from '../index-Dt--T2l8.cjs';
|
package/dist/theme/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { C as CANVAS_STYLE, D as DESIGN_SYSTEM_VERSION, M as METRICS, b as METRICS_REDUCED_MOTION, c as THEME_NAMES, d as TOKENS, e as TOPICS, f as TYPE_STYLES, a as ThemeName, T as TopicName } from '../designSystem-
|
|
2
|
-
export { a as Comfort, I as IdeaColor, M as Metrics, R as ResolvedComfort, b as ThemeEnv, c as ThemeFamily, d as ThemeInput, e as TopicStyle, f as customColor, g as getTokens, i as ideaColor, h as ideaStyle, j as isContrastTheme, k as isDarkTheme, l as isFocusTheme, m as isThemeName, n as labelScale, o as metricsFor, r as resolveComfort, p as resolveTheme, t as token, s as topicFromName, u as topicStyle } from '../index-
|
|
1
|
+
export { C as CANVAS_STYLE, D as DESIGN_SYSTEM_VERSION, M as METRICS, b as METRICS_REDUCED_MOTION, c as THEME_NAMES, d as TOKENS, e as TOPICS, f as TYPE_STYLES, a as ThemeName, T as TopicName } from '../designSystem-D49xVfr8.js';
|
|
2
|
+
export { a as Comfort, I as IdeaColor, M as Metrics, R as ResolvedComfort, b as ThemeEnv, c as ThemeFamily, d as ThemeInput, e as TopicStyle, f as customColor, g as getTokens, i as ideaColor, h as ideaStyle, j as isContrastTheme, k as isDarkTheme, l as isFocusTheme, m as isThemeName, n as labelScale, o as metricsFor, r as resolveComfort, p as resolveTheme, t as token, s as topicFromName, u as topicStyle } from '../index-CcF0Jvmb.js';
|
package/dist/theme/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
token,
|
|
15
15
|
topicFromName,
|
|
16
16
|
topicStyle
|
|
17
|
-
} from "../chunk-
|
|
17
|
+
} from "../chunk-ITDZ72JE.js";
|
|
18
18
|
import {
|
|
19
19
|
CANVAS_STYLE,
|
|
20
20
|
DESIGN_SYSTEM_VERSION,
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
TOKENS,
|
|
25
25
|
TOPICS,
|
|
26
26
|
TYPE_STYLES
|
|
27
|
-
} from "../chunk-
|
|
27
|
+
} from "../chunk-RFMUATWB.js";
|
|
28
28
|
export {
|
|
29
29
|
CANVAS_STYLE,
|
|
30
30
|
DESIGN_SYSTEM_VERSION,
|
package/dist/types/index.d.cts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { F as FlatNode, b as MindMapConfig, M as MindMapConnection, c as MindMapData, d as MindMapNode, e as NodeMap, N as NodeSelection, R as RenderConfig, S as SpatialBounds, T as TopLevelConnection, V as ViewportState } from '../mindmap-
|
|
1
|
+
export { F as FlatNode, b as MindMapConfig, M as MindMapConnection, c as MindMapData, d as MindMapNode, e as NodeMap, N as NodeSelection, R as RenderConfig, S as SpatialBounds, T as TopLevelConnection, V as ViewportState } from '../mindmap-BO3YD5qu.cjs';
|
|
2
2
|
export { S as SemanticAnchor, V as VisualliDocument, a as VisualliMeta } from '../document-MEJEfxl3.cjs';
|
|
3
3
|
export { L as LayerConnection, a as LayerContainer, b as LayerNode, V as VisualliLayer, c as VisualliRenderConnection, d as VisualliRenderNode } from '../layer-B2A3Ki48.cjs';
|
|
4
4
|
import { Meta, Layer } from '@visualli/bindings';
|
|
5
5
|
export { Connection, Container, Extension, Layer, Meta, Node } from '@visualli/bindings';
|
|
6
|
-
import '../designSystem-
|
|
6
|
+
import '../designSystem-D49xVfr8.cjs';
|
|
7
7
|
|
|
8
8
|
type VisualliFragment = Meta | Layer;
|
|
9
9
|
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { F as FlatNode, b as MindMapConfig, M as MindMapConnection, c as MindMapData, d as MindMapNode, e as NodeMap, N as NodeSelection, R as RenderConfig, S as SpatialBounds, T as TopLevelConnection, V as ViewportState } from '../mindmap-
|
|
1
|
+
export { F as FlatNode, b as MindMapConfig, M as MindMapConnection, c as MindMapData, d as MindMapNode, e as NodeMap, N as NodeSelection, R as RenderConfig, S as SpatialBounds, T as TopLevelConnection, V as ViewportState } from '../mindmap-D0Of0jaZ.js';
|
|
2
2
|
export { S as SemanticAnchor, V as VisualliDocument, a as VisualliMeta } from '../document-BFBwn93X.js';
|
|
3
3
|
export { L as LayerConnection, a as LayerContainer, b as LayerNode, V as VisualliLayer, c as VisualliRenderConnection, d as VisualliRenderNode } from '../layer-B2A3Ki48.js';
|
|
4
4
|
import { Meta, Layer } from '@visualli/bindings';
|
|
5
5
|
export { Connection, Container, Extension, Layer, Meta, Node } from '@visualli/bindings';
|
|
6
|
-
import '../designSystem-
|
|
6
|
+
import '../designSystem-D49xVfr8.js';
|
|
7
7
|
|
|
8
8
|
type VisualliFragment = Meta | Layer;
|
|
9
9
|
|
package/dist/viewport/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Change the design system instead; the next `npm run build` regenerates this file.
|
|
3
3
|
|
|
4
4
|
/** Version of the design system these modules were generated from. */
|
|
5
|
-
export const DESIGN_SYSTEM_VERSION = "0.2.
|
|
5
|
+
export const DESIGN_SYSTEM_VERSION = "0.2.1" as const;
|
|
6
6
|
|
|
7
7
|
export const THEME_NAMES = [
|
|
8
8
|
"light",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|