@theokit/ui 0.13.0 → 0.14.0
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/CHANGELOG.md +62 -0
- package/README.md +5 -5
- package/dist/chunk-DMVWZWU5.js +62 -0
- package/dist/chunk-DMVWZWU5.js.map +1 -0
- package/dist/{chunk-M6JIC5PU.js → chunk-ETMMPUFO.js} +3 -3
- package/dist/{chunk-M6JIC5PU.js.map → chunk-ETMMPUFO.js.map} +1 -1
- package/dist/{chunk-VT7VSYH5.js → chunk-KE773ODY.js} +4 -4
- package/dist/{chunk-VT7VSYH5.js.map → chunk-KE773ODY.js.map} +1 -1
- package/dist/{chunk-BYZ6OFH4.js → chunk-KPYORAP6.js} +6 -6
- package/dist/chunk-KPYORAP6.js.map +1 -0
- package/dist/chunk-UCGROAS4.js +61 -0
- package/dist/chunk-UCGROAS4.js.map +1 -0
- package/dist/{chunk-LKRNUSKZ.js → chunk-W6KORCLX.js} +4 -4
- package/dist/chunk-W6KORCLX.js.map +1 -0
- package/dist/components.css +1 -1
- package/dist/composites/metric-card/index.js +5 -0
- package/dist/composites/metric-card/index.js.map +1 -0
- package/dist/composites/stability-bundle-viewer/index.js +1 -1
- package/dist/composites/status-indicator/index.js +4 -0
- package/dist/composites/status-indicator/index.js.map +1 -0
- package/dist/index.d.ts +165 -40
- package/dist/index.js +863 -612
- package/dist/index.js.map +1 -1
- package/dist/{plugin-D5xmXqYb.d.ts → plugin-Atb0VKtr.d.ts} +1 -1
- package/dist/preset-v3-legacy.js +1 -1
- package/dist/preset-v3-legacy.js.map +1 -1
- package/dist/primitives/gateway-status-indicator/index.js +1 -1
- package/dist/primitives/run-status-pill/index.js +1 -1
- package/dist/primitives/update-banner/index.js +1 -1
- package/dist/slide/index.d.ts +2 -2
- package/dist/slide/plugins/emoji/index.d.ts +1 -1
- package/dist/slide/plugins/math/index.d.ts +1 -1
- package/dist/slide/plugins/mermaid/index.d.ts +1 -1
- package/dist/slide/plugins/shiki/index.d.ts +1 -1
- package/dist/slide-deck/index.d.ts +1 -1
- package/dist/tokens-v4.css +77 -41
- package/dist/tokens.css +158 -73
- package/dist/whiteboard/index.d.ts +2 -2
- package/package.json +18 -2
- package/registry/index.json +12 -0
- package/registry/r/metric-card.json +23 -0
- package/registry/r/safe-href.json +1 -1
- package/registry/r/status-indicator.json +20 -0
- package/registry/r/tailwind-preset.json +1 -1
- package/registry/r/theme-provider.json +6 -6
- package/registry/r/tokens.json +1 -1
- package/dist/chunk-BYZ6OFH4.js.map +0 -1
- package/dist/chunk-LKRNUSKZ.js.map +0 -1
|
@@ -169,4 +169,4 @@ interface PluginComposer {
|
|
|
169
169
|
*/
|
|
170
170
|
declare function composePlugins(plugins: SlidePlugin[]): PluginComposer;
|
|
171
171
|
|
|
172
|
-
export { type MergedSanitizeExtensions as M, type PluginComposer as P, type
|
|
172
|
+
export { type MergedSanitizeExtensions as M, type PluginComposer as P, type SlideValidationError as S, type SlidePlugin as a, type SlideFrontmatter as b, type SlideInput as c, type SlideSanitizeExtension as d, type SlideValidationErrorCode as e, composePlugins as f, slideInput as g, slideTheme as h, slideFrontmatter as s };
|
package/dist/preset-v3-legacy.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/styles/tailwind-preset.ts","../src/preset-v3-legacy.ts"],"names":[],"mappings":"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","file":"preset-v3-legacy.js","sourcesContent":["/**\n * Theo UI Tailwind preset — Violet Forge identity.\n *\n * Single source of truth for the design system's utility-level tokens:\n * - colors mapped to CSS variables (HSL split via `hsl(var(--x) / <alpha>)`)\n * - Geist-inspired typescale (display / title / body / label / code tiers)\n * - radii, shadows, motion timing & duration, keyframes\n * - tailwindcss-animate plugin\n *\n * Consumed by:\n * - `tailwind.config.ts` (this repo) via `presets: [theoUIPreset]`\n * - registry/r/tailwind-preset.json (shipped to consumers via shadcn CLI)\n *\n * Consumers integrate as:\n *\n * import type { Config } from \"tailwindcss\";\n * import { theoUIPreset } from \"./styles/tailwind-preset\";\n *\n * export default {\n * darkMode: \"class\",\n * content: [\"./src/**\\/*.{ts,tsx}\"],\n * presets: [theoUIPreset],\n * } satisfies Config;\n *\n * Note: `darkMode` and `content` are NOT in the preset — they are consumer\n * decisions. The preset only contains `theme.extend.*` and `plugins`.\n */\n\nimport type { Config } from \"tailwindcss\";\nimport animate from \"tailwindcss-animate\";\n\nconst hsl = (token: string) => `hsl(var(${token}) / <alpha-value>)`;\n\nexport const theoUIPreset: Partial<Config> = {\n theme: {\n container: {\n center: true,\n padding: \"1rem\",\n screens: {\n \"2xl\": \"1280px\",\n },\n },\n extend: {\n colors: {\n background: hsl(\"--background\"),\n foreground: hsl(\"--foreground\"),\n card: {\n DEFAULT: hsl(\"--card\"),\n foreground: hsl(\"--card-foreground\"),\n },\n popover: {\n DEFAULT: hsl(\"--popover\"),\n foreground: hsl(\"--popover-foreground\"),\n },\n primary: {\n DEFAULT: hsl(\"--primary\"),\n deep: hsl(\"--primary-deep\"),\n glow: hsl(\"--primary-glow\"),\n foreground: hsl(\"--primary-foreground\"),\n },\n secondary: {\n DEFAULT: hsl(\"--secondary\"),\n foreground: hsl(\"--secondary-foreground\"),\n },\n accent: {\n DEFAULT: hsl(\"--accent\"),\n deep: hsl(\"--accent-deep\"),\n foreground: hsl(\"--accent-foreground\"),\n },\n muted: {\n DEFAULT: hsl(\"--muted\"),\n foreground: hsl(\"--muted-foreground\"),\n },\n success: {\n DEFAULT: hsl(\"--success\"),\n foreground: hsl(\"--success-foreground\"),\n },\n warning: {\n DEFAULT: hsl(\"--warning\"),\n foreground: hsl(\"--warning-foreground\"),\n },\n destructive: {\n DEFAULT: hsl(\"--destructive\"),\n foreground: hsl(\"--destructive-foreground\"),\n },\n info: {\n DEFAULT: hsl(\"--info\"),\n foreground: hsl(\"--info-foreground\"),\n },\n border: hsl(\"--border\"),\n input: hsl(\"--input\"),\n ring: hsl(\"--ring\"),\n },\n fontFamily: {\n display: \"var(--font-display)\",\n sans: \"var(--font-body)\",\n mono: \"var(--font-mono)\",\n },\n /* Geist-inspired Violet Forge typescale.\n *\n * Three strict weights: 400 (body), 500 (UI), 600 (display/headings).\n * Letter-spacing scales with size — aggressive negative on display.\n * Mirrors the Vercel/Geist vocabulary while keeping Theo's identity.\n */\n fontSize: {\n // Display tier — aggressive compression, content-led headlines\n \"display-2xl\": [\"64px\", { lineHeight: \"1\", letterSpacing: \"-0.0464em\", fontWeight: \"600\" }],\n \"display-xl\": [\"48px\", { lineHeight: \"1.05\", letterSpacing: \"-0.05em\", fontWeight: \"600\" }],\n \"display-lg\": [\"40px\", { lineHeight: \"1.1\", letterSpacing: \"-0.05em\", fontWeight: \"600\" }],\n \"display-md\": [\"32px\", { lineHeight: \"1.2\", letterSpacing: \"-0.04em\", fontWeight: \"600\" }],\n headline: [\"28px\", { lineHeight: \"1.25\", letterSpacing: \"-0.035em\", fontWeight: \"600\" }],\n // Title tier — section / card heads\n \"title-lg\": [\"24px\", { lineHeight: \"1.33\", letterSpacing: \"-0.04em\", fontWeight: \"600\" }],\n \"title-md\": [\"20px\", { lineHeight: \"1.4\", letterSpacing: \"-0.03em\", fontWeight: \"600\" }],\n // Body tier — FAANG-density realignment 2026-05-22: body-md is the\n // industry-standard 14px (shadcn / Vercel Geist / Linear / Stripe /\n // Mantine). The previous 15px was idiosyncratic. body-sm (14px label\n // weight) remains separate via its line-height / weight signature.\n \"body-lg\": [\"18px\", { lineHeight: \"1.56\", letterSpacing: \"-0.01em\", fontWeight: \"400\" }],\n \"body-md\": [\"14px\", { lineHeight: \"1.43\", letterSpacing: \"0\", fontWeight: \"400\" }],\n \"body-sm\": [\"13px\", { lineHeight: \"1.46\", fontWeight: \"400\" }],\n // Label tier — used on buttons, nav, secondary actions\n label: [\"14px\", { lineHeight: \"1.43\", fontWeight: \"500\" }],\n \"label-caps\": [\"12px\", { lineHeight: \"1.33\", letterSpacing: \"0.04em\", fontWeight: \"500\" }],\n // Mono — code surfaces, technical labels\n \"code-md\": [\"14px\", { lineHeight: \"1.5\", fontWeight: \"400\" }],\n \"code-sm\": [\"13px\", { lineHeight: \"1.54\", fontWeight: \"500\" }],\n },\n borderRadius: {\n none: \"var(--radius-none)\",\n sm: \"var(--radius-sm)\",\n md: \"var(--radius-md)\",\n lg: \"var(--radius-lg)\",\n xl: \"var(--radius-xl)\",\n \"2xl\": \"var(--radius-2xl)\",\n full: \"var(--radius-full)\",\n },\n boxShadow: {\n sm: \"var(--shadow-sm)\",\n md: \"var(--shadow-md)\",\n lg: \"var(--shadow-lg)\",\n glow: \"var(--shadow-glow)\",\n \"glow-strong\": \"var(--shadow-glow-strong)\",\n },\n transitionTimingFunction: {\n \"out-soft\": \"var(--ease-out-soft)\",\n snap: \"var(--ease-snap)\",\n },\n transitionDuration: {\n fast: \"var(--duration-fast)\",\n base: \"var(--duration-base)\",\n slow: \"var(--duration-slow)\",\n },\n keyframes: {\n \"fade-in-up\": {\n \"0%\": { opacity: \"0\", transform: \"translateY(8px)\" },\n \"100%\": { opacity: \"1\", transform: \"translateY(0)\" },\n },\n \"pulse-glow\": {\n \"0%, 100%\": { boxShadow: \"0 0 0 0 hsl(var(--primary) / 0.5)\" },\n \"50%\": { boxShadow: \"0 0 0 8px hsl(var(--primary) / 0)\" },\n },\n },\n animation: {\n \"fade-in-up\": \"fade-in-up var(--duration-base) var(--ease-out-soft) both\",\n \"pulse-glow\": \"pulse-glow 1.5s var(--ease-in-out) infinite\",\n },\n },\n },\n plugins: [animate],\n};\n","/**\n * `@theokit/ui/preset-v3-legacy` — Tailwind v3 JS preset (legacy path).\n *\n * Default-export a `Partial<Config>` mirroring the design tokens shipped\n * in `@theokit/ui/tokens.css`. Adds a `content` field covering the\n * library's published artifact tree so v3-based Tailwind builds emit\n * the utilities used by `@theokit/ui` components.\n *\n * **Tailwind v4 consumers MUST use `@theokit/ui/preset.css`**, not this\n * file — Tailwind v4 dropped the JS preset format entirely. This file\n * exists for any remaining `tailwindcss@^3` consumer (notably the\n * shadcn-style copy-paste registry path); new code should not import\n * from this subpath.\n *\n * The token surface is delegated to `./styles/tailwind-preset.ts` (the\n * existing source of truth used by the local Ladle dev surface and the\n * shadcn registry).\n *\n * v3 consumer usage:\n *\n * // tailwind.config.ts (Tailwind v3 only)\n * import preset from \"@theokit/ui/preset-v3-legacy\";\n * export default {\n * presets: [preset],\n * content: [\"./app/**\\/*.{ts,tsx}\"],\n * };\n *\n * See RFC 0008 follow-up.\n */\nimport type { Config } from \"tailwindcss\";\nimport { theoUIPreset } from \"./styles/tailwind-preset.js\";\n\nconst LIBRARY_CONTENT_GLOBS: string[] = [\n // Resolved relative to the consumer's `tailwind.config.{ts,js}`.\n \"./node_modules/@theokit/ui/dist/**/*.{js,mjs,cjs}\",\n // Yarn PnP / pnpm hoist fallback — Tailwind's globbing tolerates both.\n \"./node_modules/@theokit/ui/dist/**/*.{ts,tsx}\",\n];\n\n// `theoUIPreset` is shape-compatible with v3 `Partial<Config>` at runtime\n// (tokens, theme, plugins, darkMode, etc are all carried through), but the\n// pnpm hoist places `tailwindcss@3` types alongside `tailwindcss@4` types in\n// the workspace — `theoUIPreset`'s inferred shape uses the v4 `UserConfig`\n// presets array type, which TS sees as incompatible with v3's `Config.presets`\n// (different element type). This file is the v3 LEGACY entry; its runtime\n// works for v3 consumers regardless. The cast bridges the v3/v4 type seam.\nconst preset = {\n ...theoUIPreset,\n content: LIBRARY_CONTENT_GLOBS,\n} as unknown as Partial<Config>;\n\nexport default preset;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/styles/tailwind-preset.ts","../src/preset-v3-legacy.ts"],"names":[],"mappings":"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","file":"preset-v3-legacy.js","sourcesContent":["/**\n * Theo UI Tailwind preset — Violet Forge identity.\n *\n * Single source of truth for the design system's utility-level tokens:\n * - colors mapped to CSS variables (HSL split via `hsl(var(--x) / <alpha>)`)\n * - Geist-inspired typescale (display / title / body / label / code tiers)\n * - radii, shadows, motion timing & duration, keyframes\n * - tailwindcss-animate plugin\n *\n * Consumed by:\n * - `tailwind.config.ts` (this repo) via `presets: [theoUIPreset]`\n * - registry/r/tailwind-preset.json (shipped to consumers via shadcn CLI)\n *\n * Consumers integrate as:\n *\n * import type { Config } from \"tailwindcss\";\n * import { theoUIPreset } from \"./styles/tailwind-preset\";\n *\n * export default {\n * darkMode: \"class\",\n * content: [\"./src/**\\/*.{ts,tsx}\"],\n * presets: [theoUIPreset],\n * } satisfies Config;\n *\n * Note: `darkMode` and `content` are NOT in the preset — they are consumer\n * decisions. The preset only contains `theme.extend.*` and `plugins`.\n */\n\nimport type { Config } from \"tailwindcss\";\nimport animate from \"tailwindcss-animate\";\n\n// Post-T2.4 (ADR-0005): tokens are OKLCH. The previous `hsl(var(--x) / <alpha>)`\n// pattern resolves to `hsl(oklch(...))` which is invalid CSS — utilities\n// silently fall back to transparent. OKLCH relative-color syntax preserves\n// Tailwind's `<alpha-value>` slot for opacity modifiers (e.g. `bg-primary/50`).\nconst hsl = (token: string) => `oklch(from var(${token}) l c h / <alpha-value>)`;\n\nexport const theoUIPreset: Partial<Config> = {\n theme: {\n container: {\n center: true,\n padding: \"1rem\",\n screens: {\n \"2xl\": \"1280px\",\n },\n },\n extend: {\n colors: {\n background: hsl(\"--background\"),\n foreground: hsl(\"--foreground\"),\n card: {\n DEFAULT: hsl(\"--card\"),\n foreground: hsl(\"--card-foreground\"),\n },\n popover: {\n DEFAULT: hsl(\"--popover\"),\n foreground: hsl(\"--popover-foreground\"),\n },\n primary: {\n DEFAULT: hsl(\"--primary\"),\n deep: hsl(\"--primary-deep\"),\n glow: hsl(\"--primary-glow\"),\n foreground: hsl(\"--primary-foreground\"),\n },\n secondary: {\n DEFAULT: hsl(\"--secondary\"),\n foreground: hsl(\"--secondary-foreground\"),\n },\n accent: {\n DEFAULT: hsl(\"--accent\"),\n deep: hsl(\"--accent-deep\"),\n foreground: hsl(\"--accent-foreground\"),\n },\n muted: {\n DEFAULT: hsl(\"--muted\"),\n foreground: hsl(\"--muted-foreground\"),\n },\n success: {\n DEFAULT: hsl(\"--success\"),\n foreground: hsl(\"--success-foreground\"),\n },\n warning: {\n DEFAULT: hsl(\"--warning\"),\n foreground: hsl(\"--warning-foreground\"),\n },\n destructive: {\n DEFAULT: hsl(\"--destructive\"),\n foreground: hsl(\"--destructive-foreground\"),\n },\n info: {\n DEFAULT: hsl(\"--info\"),\n foreground: hsl(\"--info-foreground\"),\n },\n border: hsl(\"--border\"),\n input: hsl(\"--input\"),\n ring: hsl(\"--ring\"),\n },\n fontFamily: {\n display: \"var(--font-display)\",\n sans: \"var(--font-body)\",\n mono: \"var(--font-mono)\",\n },\n /* Geist-inspired Violet Forge typescale.\n *\n * Three strict weights: 400 (body), 500 (UI), 600 (display/headings).\n * Letter-spacing scales with size — aggressive negative on display.\n * Mirrors the Vercel/Geist vocabulary while keeping Theo's identity.\n */\n fontSize: {\n // Display tier — aggressive compression, content-led headlines\n \"display-2xl\": [\"64px\", { lineHeight: \"1\", letterSpacing: \"-0.0464em\", fontWeight: \"600\" }],\n \"display-xl\": [\"48px\", { lineHeight: \"1.05\", letterSpacing: \"-0.05em\", fontWeight: \"600\" }],\n \"display-lg\": [\"40px\", { lineHeight: \"1.1\", letterSpacing: \"-0.05em\", fontWeight: \"600\" }],\n \"display-md\": [\"32px\", { lineHeight: \"1.2\", letterSpacing: \"-0.04em\", fontWeight: \"600\" }],\n headline: [\"28px\", { lineHeight: \"1.25\", letterSpacing: \"-0.035em\", fontWeight: \"600\" }],\n // Title tier — section / card heads\n \"title-lg\": [\"24px\", { lineHeight: \"1.33\", letterSpacing: \"-0.04em\", fontWeight: \"600\" }],\n \"title-md\": [\"20px\", { lineHeight: \"1.4\", letterSpacing: \"-0.03em\", fontWeight: \"600\" }],\n // Body tier — FAANG-density realignment 2026-05-22: body-md is the\n // industry-standard 14px (shadcn / Vercel Geist / Linear / Stripe /\n // Mantine). The previous 15px was idiosyncratic. body-sm (14px label\n // weight) remains separate via its line-height / weight signature.\n \"body-lg\": [\"18px\", { lineHeight: \"1.56\", letterSpacing: \"-0.01em\", fontWeight: \"400\" }],\n \"body-md\": [\"14px\", { lineHeight: \"1.43\", letterSpacing: \"0\", fontWeight: \"400\" }],\n \"body-sm\": [\"13px\", { lineHeight: \"1.46\", fontWeight: \"400\" }],\n // Label tier — used on buttons, nav, secondary actions\n label: [\"14px\", { lineHeight: \"1.43\", fontWeight: \"500\" }],\n \"label-caps\": [\"12px\", { lineHeight: \"1.33\", letterSpacing: \"0.04em\", fontWeight: \"500\" }],\n // Mono — code surfaces, technical labels\n \"code-md\": [\"14px\", { lineHeight: \"1.5\", fontWeight: \"400\" }],\n \"code-sm\": [\"13px\", { lineHeight: \"1.54\", fontWeight: \"500\" }],\n },\n borderRadius: {\n none: \"var(--radius-none)\",\n sm: \"var(--radius-sm)\",\n md: \"var(--radius-md)\",\n lg: \"var(--radius-lg)\",\n xl: \"var(--radius-xl)\",\n \"2xl\": \"var(--radius-2xl)\",\n full: \"var(--radius-full)\",\n },\n boxShadow: {\n sm: \"var(--shadow-sm)\",\n md: \"var(--shadow-md)\",\n lg: \"var(--shadow-lg)\",\n glow: \"var(--shadow-glow)\",\n \"glow-strong\": \"var(--shadow-glow-strong)\",\n },\n transitionTimingFunction: {\n \"out-soft\": \"var(--ease-out-soft)\",\n snap: \"var(--ease-snap)\",\n },\n transitionDuration: {\n fast: \"var(--duration-fast)\",\n base: \"var(--duration-base)\",\n slow: \"var(--duration-slow)\",\n },\n keyframes: {\n \"fade-in-up\": {\n \"0%\": { opacity: \"0\", transform: \"translateY(8px)\" },\n \"100%\": { opacity: \"1\", transform: \"translateY(0)\" },\n },\n \"pulse-glow\": {\n \"0%, 100%\": { boxShadow: \"0 0 0 0 hsl(var(--primary) / 0.5)\" },\n \"50%\": { boxShadow: \"0 0 0 8px hsl(var(--primary) / 0)\" },\n },\n },\n animation: {\n \"fade-in-up\": \"fade-in-up var(--duration-base) var(--ease-out-soft) both\",\n \"pulse-glow\": \"pulse-glow 1.5s var(--ease-in-out) infinite\",\n },\n },\n },\n plugins: [animate],\n};\n","/**\n * `@theokit/ui/preset-v3-legacy` — Tailwind v3 JS preset (legacy path).\n *\n * Default-export a `Partial<Config>` mirroring the design tokens shipped\n * in `@theokit/ui/tokens.css`. Adds a `content` field covering the\n * library's published artifact tree so v3-based Tailwind builds emit\n * the utilities used by `@theokit/ui` components.\n *\n * **Tailwind v4 consumers MUST use `@theokit/ui/preset.css`**, not this\n * file — Tailwind v4 dropped the JS preset format entirely. This file\n * exists for any remaining `tailwindcss@^3` consumer (notably the\n * shadcn-style copy-paste registry path); new code should not import\n * from this subpath.\n *\n * The token surface is delegated to `./styles/tailwind-preset.ts` (the\n * existing source of truth used by the local Ladle dev surface and the\n * shadcn registry).\n *\n * v3 consumer usage:\n *\n * // tailwind.config.ts (Tailwind v3 only)\n * import preset from \"@theokit/ui/preset-v3-legacy\";\n * export default {\n * presets: [preset],\n * content: [\"./app/**\\/*.{ts,tsx}\"],\n * };\n *\n * See RFC 0008 follow-up.\n */\nimport type { Config } from \"tailwindcss\";\nimport { theoUIPreset } from \"./styles/tailwind-preset.js\";\n\nconst LIBRARY_CONTENT_GLOBS: string[] = [\n // Resolved relative to the consumer's `tailwind.config.{ts,js}`.\n \"./node_modules/@theokit/ui/dist/**/*.{js,mjs,cjs}\",\n // Yarn PnP / pnpm hoist fallback — Tailwind's globbing tolerates both.\n \"./node_modules/@theokit/ui/dist/**/*.{ts,tsx}\",\n];\n\n// `theoUIPreset` is shape-compatible with v3 `Partial<Config>` at runtime\n// (tokens, theme, plugins, darkMode, etc are all carried through), but the\n// pnpm hoist places `tailwindcss@3` types alongside `tailwindcss@4` types in\n// the workspace — `theoUIPreset`'s inferred shape uses the v4 `UserConfig`\n// presets array type, which TS sees as incompatible with v3's `Config.presets`\n// (different element type). This file is the v3 LEGACY entry; its runtime\n// works for v3 consumers regardless. The cast bridges the v3/v4 type seam.\nconst preset = {\n ...theoUIPreset,\n content: LIBRARY_CONTENT_GLOBS,\n} as unknown as Partial<Config>;\n\nexport default preset;\n"]}
|
package/dist/slide/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FC, ReactElement, RefObject } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
export { P as PluginComposer,
|
|
2
|
+
import { S as SlideValidationError, a as SlidePlugin, b as SlideFrontmatter, M as MergedSanitizeExtensions, c as SlideInput } from '../plugin-Atb0VKtr.js';
|
|
3
|
+
export { P as PluginComposer, d as SlideSanitizeExtension, e as SlideValidationErrorCode, f as composePlugins, s as slideFrontmatter, g as slideInput, h as slideTheme } from '../plugin-Atb0VKtr.js';
|
|
4
4
|
import { Root, Element } from 'hast';
|
|
5
5
|
import { Root as Root$1 } from 'mdast';
|
|
6
6
|
import * as hast_util_sanitize from 'hast-util-sanitize';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { FC, ReactNode, Dispatch, RefObject } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { a as SlidePlugin } from '../plugin-Atb0VKtr.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import 'hast';
|
|
6
6
|
import 'mdast';
|
package/dist/tokens-v4.css
CHANGED
|
@@ -14,51 +14,67 @@
|
|
|
14
14
|
* `bg-primary`, `text-muted-foreground`, `border-border`, etc. emit
|
|
15
15
|
* a className with no matching CSS rule.
|
|
16
16
|
*
|
|
17
|
-
* The indirection (`--color-primary:
|
|
17
|
+
* The indirection (`--color-primary: var(--primary)`) preserves the
|
|
18
18
|
* runtime theme cascade — browsers resolve `var(--color-primary)` →
|
|
19
|
-
* `
|
|
19
|
+
* `var(--primary)` → current `[data-theme]` value at paint time.
|
|
20
20
|
*
|
|
21
21
|
* See RFC 0008 follow-up.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
/* `@theme inline` (Tailwind v4 keyword) preserves the var() reference at
|
|
25
|
+
* runtime instead of inlining the value at build time. Without `inline`,
|
|
26
|
+
* `--color-primary: var(--primary)` would resolve to whatever `--primary`
|
|
27
|
+
* was when Tailwind compiled the CSS — breaking the theme cascade.
|
|
28
|
+
* See https://tailwindcss.com/docs/theme#using-your-theme-variables-in-arbitrary-values
|
|
29
|
+
*/
|
|
30
|
+
@theme inline {
|
|
25
31
|
/* Color tokens ------------------------------------------------------ */
|
|
26
|
-
--color-background:
|
|
27
|
-
--color-foreground:
|
|
28
|
-
|
|
29
|
-
--color-card:
|
|
30
|
-
--color-card-foreground:
|
|
31
|
-
|
|
32
|
-
--color-popover:
|
|
33
|
-
--color-popover-foreground:
|
|
34
|
-
|
|
35
|
-
--color-primary:
|
|
36
|
-
--color-primary-deep:
|
|
37
|
-
--color-primary-glow:
|
|
38
|
-
--color-primary-foreground:
|
|
39
|
-
|
|
40
|
-
--color-secondary:
|
|
41
|
-
--color-secondary-foreground:
|
|
42
|
-
|
|
43
|
-
--color-accent:
|
|
44
|
-
--color-accent-deep:
|
|
45
|
-
--color-accent-foreground:
|
|
46
|
-
|
|
47
|
-
--color-muted:
|
|
48
|
-
--color-muted-foreground:
|
|
49
|
-
|
|
50
|
-
--color-border:
|
|
51
|
-
--color-input:
|
|
52
|
-
--color-ring:
|
|
53
|
-
|
|
54
|
-
--color-success:
|
|
55
|
-
--color-success-foreground:
|
|
56
|
-
--color-warning:
|
|
57
|
-
--color-warning-foreground:
|
|
58
|
-
--color-destructive:
|
|
59
|
-
--color-destructive-foreground:
|
|
60
|
-
--color-info:
|
|
61
|
-
--color-info-foreground:
|
|
32
|
+
--color-background: var(--background);
|
|
33
|
+
--color-foreground: var(--foreground);
|
|
34
|
+
|
|
35
|
+
--color-card: var(--card);
|
|
36
|
+
--color-card-foreground: var(--card-foreground);
|
|
37
|
+
|
|
38
|
+
--color-popover: var(--popover);
|
|
39
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
40
|
+
|
|
41
|
+
--color-primary: var(--primary);
|
|
42
|
+
--color-primary-deep: var(--primary-deep);
|
|
43
|
+
--color-primary-glow: var(--primary-glow);
|
|
44
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
45
|
+
|
|
46
|
+
--color-secondary: var(--secondary);
|
|
47
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
48
|
+
|
|
49
|
+
--color-accent: var(--accent);
|
|
50
|
+
--color-accent-deep: var(--accent-deep);
|
|
51
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
52
|
+
|
|
53
|
+
--color-muted: var(--muted);
|
|
54
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
55
|
+
|
|
56
|
+
--color-border: var(--border);
|
|
57
|
+
--color-input: var(--input);
|
|
58
|
+
--color-ring: var(--ring);
|
|
59
|
+
|
|
60
|
+
--color-success: var(--success);
|
|
61
|
+
--color-success-foreground: var(--success-foreground);
|
|
62
|
+
--color-warning: var(--warning);
|
|
63
|
+
--color-warning-foreground: var(--warning-foreground);
|
|
64
|
+
--color-destructive: var(--destructive);
|
|
65
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
66
|
+
--color-info: var(--info);
|
|
67
|
+
--color-info-foreground: var(--info-foreground);
|
|
68
|
+
|
|
69
|
+
/* Status group (D4) ------------------------------------------------- */
|
|
70
|
+
--color-status-online: var(--status-online);
|
|
71
|
+
--color-status-online-foreground: var(--status-online-foreground);
|
|
72
|
+
--color-status-offline: var(--status-offline);
|
|
73
|
+
--color-status-offline-foreground: var(--status-offline-foreground);
|
|
74
|
+
--color-status-degraded: var(--status-degraded);
|
|
75
|
+
--color-status-degraded-foreground: var(--status-degraded-foreground);
|
|
76
|
+
--color-status-info: var(--status-info);
|
|
77
|
+
--color-status-info-foreground: var(--status-info-foreground);
|
|
62
78
|
|
|
63
79
|
/* Fonts ------------------------------------------------------------- */
|
|
64
80
|
--font-display: var(--font-display);
|
|
@@ -157,6 +173,26 @@
|
|
|
157
173
|
--ease-out-soft: var(--ease-out-soft);
|
|
158
174
|
--ease-snap: var(--ease-snap);
|
|
159
175
|
|
|
176
|
+
/* Container queries (T5.5) — Tailwind v4 native @container support.
|
|
177
|
+
* Sizes drive `@<size>:<utility>` variants for container-relative responsive
|
|
178
|
+
* design (components that adapt to their parent's width, not the viewport).
|
|
179
|
+
* Default sizes mirror Tailwind v4 defaults; declared explicitly so the
|
|
180
|
+
* preset ships consistent values.
|
|
181
|
+
*/
|
|
182
|
+
--container-3xs: 16rem;
|
|
183
|
+
--container-2xs: 18rem;
|
|
184
|
+
--container-xs: 20rem;
|
|
185
|
+
--container-sm: 24rem;
|
|
186
|
+
--container-md: 28rem;
|
|
187
|
+
--container-lg: 32rem;
|
|
188
|
+
--container-xl: 36rem;
|
|
189
|
+
--container-2xl: 42rem;
|
|
190
|
+
--container-3xl: 48rem;
|
|
191
|
+
--container-4xl: 56rem;
|
|
192
|
+
--container-5xl: 64rem;
|
|
193
|
+
--container-6xl: 72rem;
|
|
194
|
+
--container-7xl: 80rem;
|
|
195
|
+
|
|
160
196
|
/* Animations — declare so `animate-fade-in-up` and `animate-pulse-glow`
|
|
161
197
|
* resolve. Keyframes are declared below (outside @theme — Tailwind v4
|
|
162
198
|
* picks them up via the @keyframes namespace).
|
|
@@ -179,9 +215,9 @@
|
|
|
179
215
|
@keyframes pulse-glow {
|
|
180
216
|
0%,
|
|
181
217
|
100% {
|
|
182
|
-
box-shadow: 0 0 0 0
|
|
218
|
+
box-shadow: 0 0 0 0 color-mix(in oklch, var(--primary) 50%, transparent);
|
|
183
219
|
}
|
|
184
220
|
50% {
|
|
185
|
-
box-shadow: 0 0 0 8px
|
|
221
|
+
box-shadow: 0 0 0 8px transparent;
|
|
186
222
|
}
|
|
187
223
|
}
|
package/dist/tokens.css
CHANGED
|
@@ -24,48 +24,70 @@
|
|
|
24
24
|
* primary (violet) + accent (burnt sienna) tokens below — never from
|
|
25
25
|
* surface tints.
|
|
26
26
|
*/
|
|
27
|
-
--background: 0 0
|
|
28
|
-
--foreground: 0 0
|
|
27
|
+
--background: oklch(1 0 0); /* #FFFFFF */
|
|
28
|
+
--foreground: oklch(0.146 0 0); /* #0A0A0A */
|
|
29
29
|
|
|
30
|
-
--card: 0 0
|
|
31
|
-
--card-foreground: 0 0
|
|
30
|
+
--card: oklch(1 0 0); /* #FFFFFF */
|
|
31
|
+
--card-foreground: oklch(0.146 0 0);
|
|
32
32
|
|
|
33
|
-
--popover: 0 0
|
|
34
|
-
--popover-foreground: 0 0
|
|
33
|
+
--popover: oklch(1 0 0);
|
|
34
|
+
--popover-foreground: oklch(0.146 0 0);
|
|
35
35
|
|
|
36
|
-
/* Primary — Theo violet (equity) -------------------------------------
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
/* Primary — Theo violet (equity) ------------------------------------- *
|
|
37
|
+
* Post-T3.1 (ADR-0006): -deep and -glow are derived algorithmically via
|
|
38
|
+
* OKLCH relative-color syntax. Themes that need a per-token override may
|
|
39
|
+
* still declare these explicitly — the cascade resolves the override.
|
|
40
|
+
* `max()`/`min()` clamps protect dark/light themes from L overflow (EC-7).
|
|
41
|
+
*/
|
|
42
|
+
--primary: oklch(0.542 0.245 293); /* #7C3AED */
|
|
43
|
+
--primary-deep: oklch(from var(--primary) max(0.05, calc(l - 0.16)) c h);
|
|
44
|
+
--primary-glow: oklch(from var(--primary) min(0.95, calc(l + 0.18)) c h);
|
|
45
|
+
--primary-foreground: oklch(1 0 0);
|
|
41
46
|
|
|
42
47
|
/* Secondary — neutral muted ----------------------------------------- */
|
|
43
|
-
--secondary: 0 0
|
|
44
|
-
--secondary-foreground: 0 0
|
|
48
|
+
--secondary: oklch(0.97 0 0); /* #F5F5F5 */
|
|
49
|
+
--secondary-foreground: oklch(0.146 0 0);
|
|
45
50
|
|
|
46
|
-
/* Accent — burnt sienna ---------------------------------------------
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
--accent
|
|
51
|
+
/* Accent — burnt sienna --------------------------------------------- *
|
|
52
|
+
* T3.1: accent-deep derived. Override path identical to primary.
|
|
53
|
+
*/
|
|
54
|
+
--accent: oklch(0.621 0.132 39); /* #C96442 */
|
|
55
|
+
--accent-deep: oklch(from var(--accent) max(0.05, calc(l - 0.13)) c h);
|
|
56
|
+
--accent-foreground: oklch(1 0 0);
|
|
50
57
|
|
|
51
58
|
/* Muted ------------------------------------------------------------- */
|
|
52
|
-
--muted: 0 0
|
|
53
|
-
--muted-foreground: 0 0
|
|
59
|
+
--muted: oklch(0.97 0 0);
|
|
60
|
+
--muted-foreground: oklch(0.555 0 0); /* #737373 */
|
|
54
61
|
|
|
55
62
|
/* Surfaces, borders, inputs ----------------------------------------- */
|
|
56
|
-
--border: 0 0
|
|
57
|
-
--input: 0 0
|
|
58
|
-
--ring:
|
|
63
|
+
--border: oklch(0.931 0 0); /* #E8E8E8 — Vercel-style hairline */
|
|
64
|
+
--input: oklch(0.931 0 0);
|
|
65
|
+
--ring: oklch(0.542 0.245 293); /* matches primary */
|
|
59
66
|
|
|
60
67
|
/* Semantics --------------------------------------------------------- */
|
|
61
|
-
--success:
|
|
62
|
-
--success-foreground: 0 0
|
|
63
|
-
--warning:
|
|
64
|
-
--warning-foreground: 0 0
|
|
65
|
-
--destructive: 0
|
|
66
|
-
--destructive-foreground: 0 0
|
|
67
|
-
--info:
|
|
68
|
-
--info-foreground: 0 0
|
|
68
|
+
--success: oklch(0.611 0.161 149.7); /* #16A34A */
|
|
69
|
+
--success-foreground: oklch(1 0 0);
|
|
70
|
+
--warning: oklch(0.67 0.154 60.6); /* #D97706 */
|
|
71
|
+
--warning-foreground: oklch(1 0 0);
|
|
72
|
+
--destructive: oklch(0.579 0.214 27.2); /* #DC2626 */
|
|
73
|
+
--destructive-foreground: oklch(1 0 0);
|
|
74
|
+
--info: oklch(0.626 0.186 259.6); /* #3B82F6 */
|
|
75
|
+
--info-foreground: oklch(1 0 0);
|
|
76
|
+
|
|
77
|
+
/* Status (D4 — operational state group) ----------------------------- *
|
|
78
|
+
* Separate from semantic group (success/destructive/warning/info, which
|
|
79
|
+
* are action-result colors). Status describes component liveness:
|
|
80
|
+
* online (alive), offline (dead), degraded (alive-but-slow), info (flag).
|
|
81
|
+
* Defaults mirror semantic counterparts; themes override for distinction.
|
|
82
|
+
*/
|
|
83
|
+
--status-online: oklch(0.611 0.161 149.7);
|
|
84
|
+
--status-online-foreground: oklch(1 0 0);
|
|
85
|
+
--status-offline: oklch(0.579 0.214 27.2);
|
|
86
|
+
--status-offline-foreground: oklch(1 0 0);
|
|
87
|
+
--status-degraded: oklch(0.67 0.154 60.6);
|
|
88
|
+
--status-degraded-foreground: oklch(1 0 0);
|
|
89
|
+
--status-info: oklch(0.626 0.186 259.6);
|
|
90
|
+
--status-info-foreground: oklch(1 0 0);
|
|
69
91
|
|
|
70
92
|
/* Radii ------------------------------------------------------------- */
|
|
71
93
|
--radius-none: 0px;
|
|
@@ -95,13 +117,16 @@
|
|
|
95
117
|
|
|
96
118
|
/* Elevation — theme-aware (uses --foreground for shadow ink,
|
|
97
119
|
* --primary for the signature glow, so swapping themes recolors them).
|
|
120
|
+
* Post-T2.5: tokens are OKLCH; we compose alpha via color-mix(in oklch, ...)
|
|
121
|
+
* which is perceptually correct AND works with any color-space variable.
|
|
98
122
|
*/
|
|
99
|
-
--shadow-sm: 0 1px 2px 0
|
|
100
|
-
--shadow-md: 0 2px 8px -2px
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
--shadow-glow
|
|
123
|
+
--shadow-sm: 0 1px 2px 0 color-mix(in oklch, var(--foreground) 6%, transparent);
|
|
124
|
+
--shadow-md: 0 2px 8px -2px color-mix(in oklch, var(--foreground) 8%, transparent), 0 1px 3px
|
|
125
|
+
color-mix(in oklch, var(--foreground) 6%, transparent);
|
|
126
|
+
--shadow-lg: 0 12px 32px -8px color-mix(in oklch, var(--foreground) 12%, transparent), 0 4px 12px
|
|
127
|
+
color-mix(in oklch, var(--foreground) 8%, transparent);
|
|
128
|
+
--shadow-glow: 0 0 24px color-mix(in oklch, var(--primary) 25%, transparent);
|
|
129
|
+
--shadow-glow-strong: 0 0 32px color-mix(in oklch, var(--primary) 40%, transparent);
|
|
105
130
|
|
|
106
131
|
/* Motion ------------------------------------------------------------ */
|
|
107
132
|
--ease-out-soft: cubic-bezier(0.22, 1, 0.36, 1);
|
|
@@ -129,51 +154,102 @@
|
|
|
129
154
|
* the theme NAME, never the literal `"dark"`.
|
|
130
155
|
*/
|
|
131
156
|
.dark {
|
|
132
|
-
--background: 0 0
|
|
133
|
-
--foreground: 0 0
|
|
157
|
+
--background: oklch(0.146 0 0); /* #0A0A0A */
|
|
158
|
+
--foreground: oklch(0.97 0 0); /* #F5F5F5 */
|
|
159
|
+
|
|
160
|
+
--card: oklch(0.182 0 0); /* #121212 */
|
|
161
|
+
--card-foreground: oklch(0.97 0 0);
|
|
134
162
|
|
|
135
|
-
--
|
|
136
|
-
--
|
|
163
|
+
--popover: oklch(0.204 0 0); /* #171717 */
|
|
164
|
+
--popover-foreground: oklch(0.97 0 0);
|
|
137
165
|
|
|
138
|
-
--
|
|
139
|
-
--
|
|
166
|
+
--primary: oklch(0.542 0.245 293);
|
|
167
|
+
--primary-deep: oklch(from var(--primary) max(0.05, calc(l - 0.16)) c h);
|
|
168
|
+
--primary-glow: oklch(from var(--primary) min(0.95, calc(l + 0.18)) c h);
|
|
169
|
+
--primary-foreground: oklch(1 0 0);
|
|
140
170
|
|
|
141
|
-
--
|
|
142
|
-
--
|
|
143
|
-
--primary-glow: 263 90% 76%;
|
|
144
|
-
--primary-foreground: 0 0% 100%;
|
|
171
|
+
--secondary: oklch(0.227 0 0); /* #1C1C1C */
|
|
172
|
+
--secondary-foreground: oklch(0.97 0 0);
|
|
145
173
|
|
|
146
|
-
--
|
|
147
|
-
--
|
|
174
|
+
--accent: oklch(0.621 0.132 39);
|
|
175
|
+
--accent-deep: oklch(from var(--accent) max(0.05, calc(l - 0.13)) c h);
|
|
176
|
+
--accent-foreground: oklch(1 0 0);
|
|
148
177
|
|
|
149
|
-
--
|
|
150
|
-
--
|
|
151
|
-
--accent-foreground: 0 0% 100%;
|
|
178
|
+
--muted: oklch(0.227 0 0);
|
|
179
|
+
--muted-foreground: oklch(0.683 0 0); /* #999 — Vercel gray-500 */
|
|
152
180
|
|
|
153
|
-
--
|
|
154
|
-
--
|
|
181
|
+
--border: oklch(0.28 0 0); /* #292929 */
|
|
182
|
+
--input: oklch(0.227 0 0);
|
|
183
|
+
--ring: oklch(0.542 0.245 293);
|
|
155
184
|
|
|
156
|
-
--
|
|
157
|
-
--
|
|
158
|
-
--
|
|
185
|
+
--success: oklch(0.814 0.192 155.7); /* #22E58C */
|
|
186
|
+
--success-foreground: oklch(0.146 0 0);
|
|
187
|
+
--warning: oklch(0.77 0.165 70.6); /* #F59E0B */
|
|
188
|
+
--warning-foreground: oklch(0.146 0 0);
|
|
189
|
+
--destructive: oklch(0.677 0.213 15.6); /* #FF4F6D */
|
|
190
|
+
--destructive-foreground: oklch(0.146 0 0);
|
|
191
|
+
--info: oklch(0.732 0.142 254.4); /* #5FB3FF */
|
|
192
|
+
--info-foreground: oklch(0.146 0 0);
|
|
159
193
|
|
|
160
|
-
|
|
161
|
-
--
|
|
162
|
-
--
|
|
163
|
-
--
|
|
164
|
-
--
|
|
165
|
-
--
|
|
166
|
-
--
|
|
167
|
-
--info
|
|
194
|
+
/* Status (D4 — dark mode mirror of light defaults) ------------------ */
|
|
195
|
+
--status-online: oklch(0.814 0.192 155.7);
|
|
196
|
+
--status-online-foreground: oklch(0.146 0 0);
|
|
197
|
+
--status-offline: oklch(0.677 0.213 15.6);
|
|
198
|
+
--status-offline-foreground: oklch(0.146 0 0);
|
|
199
|
+
--status-degraded: oklch(0.77 0.165 70.6);
|
|
200
|
+
--status-degraded-foreground: oklch(0.146 0 0);
|
|
201
|
+
--status-info: oklch(0.732 0.142 254.4);
|
|
202
|
+
--status-info-foreground: oklch(0.146 0 0);
|
|
168
203
|
|
|
169
204
|
/* In dark mode, shadows are heavier ink (against the dark surface) and
|
|
170
205
|
* the glow brightens. Both still derive from theme tokens.
|
|
206
|
+
* Post-T2.5: OKLCH-aware composition via color-mix() — black ink via
|
|
207
|
+
* the literal oklch(0 0 0) (no theme indirection needed).
|
|
171
208
|
*/
|
|
172
|
-
--shadow-sm: 0 1px 2px 0
|
|
173
|
-
--shadow-md: 0 2px 8px -2px
|
|
174
|
-
--shadow-lg: 0 12px 32px -8px
|
|
175
|
-
--shadow-glow: 0 0 24px
|
|
176
|
-
--shadow-glow-strong: 0 0 36px
|
|
209
|
+
--shadow-sm: 0 1px 2px 0 oklch(0 0 0 / 0.4);
|
|
210
|
+
--shadow-md: 0 2px 8px -2px oklch(0 0 0 / 0.5), 0 1px 3px oklch(0 0 0 / 0.4);
|
|
211
|
+
--shadow-lg: 0 12px 32px -8px oklch(0 0 0 / 0.6), 0 4px 12px oklch(0 0 0 / 0.4);
|
|
212
|
+
--shadow-glow: 0 0 24px color-mix(in oklch, var(--primary-glow) 40%, transparent);
|
|
213
|
+
--shadow-glow-strong: 0 0 36px color-mix(in oklch, var(--primary-glow) 60%, transparent);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* Forced colors (Windows High Contrast Mode) — D7 / ADR-0008 ----------- *
|
|
217
|
+
* Maps Theo's semantic tokens to system colors so the UI remains usable
|
|
218
|
+
* (and required by WCAG 1.4.1) when the OS forces a high-contrast palette.
|
|
219
|
+
* Decorative textures opt out via `forced-color-adjust: none` (the dotted
|
|
220
|
+
* patterns and hero glow would invert into solid blocks otherwise).
|
|
221
|
+
*
|
|
222
|
+
* Reference: MDN forced-colors media query, WCAG 2.2 SC 1.4.1.
|
|
223
|
+
*/
|
|
224
|
+
@media (forced-colors: active) {
|
|
225
|
+
:root,
|
|
226
|
+
.dark {
|
|
227
|
+
--background: Canvas;
|
|
228
|
+
--foreground: CanvasText;
|
|
229
|
+
--card: Canvas;
|
|
230
|
+
--card-foreground: CanvasText;
|
|
231
|
+
--popover: Canvas;
|
|
232
|
+
--popover-foreground: CanvasText;
|
|
233
|
+
--primary: Highlight;
|
|
234
|
+
--primary-foreground: HighlightText;
|
|
235
|
+
--secondary: ButtonFace;
|
|
236
|
+
--secondary-foreground: ButtonText;
|
|
237
|
+
--accent: Highlight;
|
|
238
|
+
--accent-foreground: HighlightText;
|
|
239
|
+
--muted: ButtonFace;
|
|
240
|
+
--muted-foreground: GrayText;
|
|
241
|
+
--border: ButtonBorder;
|
|
242
|
+
--input: ButtonBorder;
|
|
243
|
+
--ring: Highlight;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/* Texture utilities are decorative — keep them out of the system-color map. */
|
|
247
|
+
.bg-dotted-violet,
|
|
248
|
+
.bg-dotted-violet-strong,
|
|
249
|
+
.bg-hero-glow,
|
|
250
|
+
.bg-paper-grain {
|
|
251
|
+
forced-color-adjust: none;
|
|
252
|
+
}
|
|
177
253
|
}
|
|
178
254
|
|
|
179
255
|
/* Reduced motion — neutralizes durations and transitions for users who
|
|
@@ -200,22 +276,31 @@
|
|
|
200
276
|
}
|
|
201
277
|
}
|
|
202
278
|
|
|
203
|
-
/* Texture utilities (signature) ----------------------------------------
|
|
279
|
+
/* Texture utilities (signature) ---------------------------------------- *
|
|
280
|
+
* Post-T2.5: tokens are OKLCH; we compose alpha via color-mix(in oklch, …),
|
|
281
|
+
* which is perceptually correct and works with any color-space variable.
|
|
282
|
+
*/
|
|
204
283
|
@layer utilities {
|
|
205
284
|
.bg-dotted-violet {
|
|
206
|
-
background-image: radial-gradient(
|
|
285
|
+
background-image: radial-gradient(
|
|
286
|
+
color-mix(in oklch, var(--primary) 8%, transparent) 1px,
|
|
287
|
+
transparent 1px
|
|
288
|
+
);
|
|
207
289
|
background-size: 20px 20px;
|
|
208
290
|
}
|
|
209
291
|
|
|
210
292
|
.bg-dotted-violet-strong {
|
|
211
|
-
background-image: radial-gradient(
|
|
293
|
+
background-image: radial-gradient(
|
|
294
|
+
color-mix(in oklch, var(--primary) 16%, transparent) 1px,
|
|
295
|
+
transparent 1px
|
|
296
|
+
);
|
|
212
297
|
background-size: 20px 20px;
|
|
213
298
|
}
|
|
214
299
|
|
|
215
300
|
.bg-hero-glow {
|
|
216
301
|
background-image: radial-gradient(
|
|
217
302
|
ellipse 60% 50% at 70% 0%,
|
|
218
|
-
|
|
303
|
+
color-mix(in oklch, var(--primary) 18%, transparent) 0%,
|
|
219
304
|
transparent 60%
|
|
220
305
|
);
|
|
221
306
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -253,6 +253,6 @@ interface WhiteboardProps {
|
|
|
253
253
|
/** Accessible label for the SVG (defaults to "Whiteboard diagram"). */
|
|
254
254
|
"aria-label"?: string;
|
|
255
255
|
}
|
|
256
|
-
declare function Whiteboard({ data, className, initialZoom, initialCenter, fitOnLoad, onValidationError, "aria-label": ariaLabel, }: WhiteboardProps):
|
|
256
|
+
declare function Whiteboard({ data, className, initialZoom, initialCenter, fitOnLoad, onValidationError, "aria-label": ariaLabel, }: WhiteboardProps): react_jsx_runtime.JSX.Element;
|
|
257
257
|
|
|
258
258
|
export { type ValidationError, type ValidationResult, Whiteboard, type WhiteboardData, type WhiteboardProps, validateScene };
|