@cueplusplus/ui 0.1.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/dist/charts/_token.js +39 -0
- package/dist/charts/container.d.ts +58 -0
- package/dist/charts/container.js +77 -0
- package/dist/charts/index.d.ts +5 -0
- package/dist/charts/index.js +5 -0
- package/dist/charts/ramps.d.ts +140 -0
- package/dist/charts/ramps.js +615 -0
- package/dist/charts/theme.d.ts +112 -0
- package/dist/charts/theme.js +165 -0
- package/dist/charts/tones.d.ts +111 -0
- package/dist/charts/tones.js +127 -0
- package/dist/chat/_glyphs.js +55 -0
- package/dist/chat/agent-color.d.ts +84 -0
- package/dist/chat/agent-color.js +101 -0
- package/dist/chat/agent-pile.d.ts +55 -0
- package/dist/chat/agent-pile.js +121 -0
- package/dist/chat/ask-box.d.ts +88 -0
- package/dist/chat/ask-box.js +341 -0
- package/dist/chat/composer.d.ts +66 -0
- package/dist/chat/composer.js +144 -0
- package/dist/chat/delegation-card.d.ts +60 -0
- package/dist/chat/delegation-card.js +129 -0
- package/dist/chat/index.d.ts +8 -0
- package/dist/chat/index.js +8 -0
- package/dist/chat/message-list.d.ts +39 -0
- package/dist/chat/message-list.js +105 -0
- package/dist/chat/message.d.ts +47 -0
- package/dist/chat/message.js +108 -0
- package/dist/chrome/_glyphs.js +101 -0
- package/dist/chrome/_tabs-scroll.d.ts +62 -0
- package/dist/chrome/_tabs-scroll.js +68 -0
- package/dist/chrome/_tree.d.ts +75 -0
- package/dist/chrome/_tree.js +49 -0
- package/dist/chrome/empty-state.d.ts +37 -0
- package/dist/chrome/empty-state.js +57 -0
- package/dist/chrome/eyebrow.d.ts +29 -0
- package/dist/chrome/eyebrow.js +36 -0
- package/dist/chrome/index.d.ts +17 -0
- package/dist/chrome/index.js +17 -0
- package/dist/chrome/navigation-menu.d.ts +80 -0
- package/dist/chrome/navigation-menu.js +121 -0
- package/dist/chrome/page-shell.d.ts +38 -0
- package/dist/chrome/page-shell.js +66 -0
- package/dist/chrome/panel.d.ts +55 -0
- package/dist/chrome/panel.js +67 -0
- package/dist/chrome/row.d.ts +82 -0
- package/dist/chrome/row.js +106 -0
- package/dist/chrome/scroll-area.d.ts +39 -0
- package/dist/chrome/scroll-area.js +70 -0
- package/dist/chrome/section-header.d.ts +42 -0
- package/dist/chrome/section-header.js +79 -0
- package/dist/chrome/segmented-control.d.ts +58 -0
- package/dist/chrome/segmented-control.js +76 -0
- package/dist/chrome/status-bar.d.ts +46 -0
- package/dist/chrome/status-bar.js +56 -0
- package/dist/chrome/tabs.d.ts +80 -0
- package/dist/chrome/tabs.js +176 -0
- package/dist/chrome/title-bar.d.ts +37 -0
- package/dist/chrome/title-bar.js +45 -0
- package/dist/chrome/toolbar.d.ts +46 -0
- package/dist/chrome/toolbar.js +62 -0
- package/dist/chrome/tree.d.ts +98 -0
- package/dist/chrome/tree.js +248 -0
- package/dist/color/_checker.js +14 -0
- package/dist/color/_convert.d.ts +52 -0
- package/dist/color/_convert.js +66 -0
- package/dist/color/_glyphs.js +28 -0
- package/dist/color/_thumb.js +15 -0
- package/dist/color/_value.js +28 -0
- package/dist/color/color-area.d.ts +27 -0
- package/dist/color/color-area.js +40 -0
- package/dist/color/color-field.d.ts +32 -0
- package/dist/color/color-field.js +43 -0
- package/dist/color/color-picker.d.ts +71 -0
- package/dist/color/color-picker.js +178 -0
- package/dist/color/color-slider.d.ts +31 -0
- package/dist/color/color-slider.js +51 -0
- package/dist/color/color-swatch.d.ts +32 -0
- package/dist/color/color-swatch.js +44 -0
- package/dist/color/index.d.ts +7 -0
- package/dist/color/index.js +7 -0
- package/dist/configurator/_export.d.ts +78 -0
- package/dist/configurator/_export.js +261 -0
- package/dist/configurator/_glyphs.js +92 -0
- package/dist/configurator/_overrides.d.ts +247 -0
- package/dist/configurator/_overrides.js +514 -0
- package/dist/configurator/configurator.d.ts +71 -0
- package/dist/configurator/configurator.js +279 -0
- package/dist/configurator/export-dialog.d.ts +30 -0
- package/dist/configurator/export-dialog.js +121 -0
- package/dist/configurator/index.d.ts +8 -0
- package/dist/configurator/index.js +8 -0
- package/dist/configurator/panel-sections.d.ts +86 -0
- package/dist/configurator/panel-sections.js +316 -0
- package/dist/configurator/token-editor.d.ts +74 -0
- package/dist/configurator/token-editor.js +149 -0
- package/dist/configurator/use-zoom.d.ts +87 -0
- package/dist/configurator/use-zoom.js +113 -0
- package/dist/date/_glyphs.js +34 -0
- package/dist/date/_segments.js +55 -0
- package/dist/date/_trigger.js +31 -0
- package/dist/date/calendar.d.ts +25 -0
- package/dist/date/calendar.js +125 -0
- package/dist/date/date-field.d.ts +34 -0
- package/dist/date/date-field.js +41 -0
- package/dist/date/date-picker.d.ts +69 -0
- package/dist/date/date-picker.js +89 -0
- package/dist/date/date-range-picker.d.ts +65 -0
- package/dist/date/date-range-picker.js +92 -0
- package/dist/date/index.d.ts +6 -0
- package/dist/date/index.js +6 -0
- package/dist/date/time-field.d.ts +29 -0
- package/dist/date/time-field.js +36 -0
- package/dist/dmx/_ramp.d.ts +77 -0
- package/dist/dmx/_ramp.js +169 -0
- package/dist/dmx/_readout.js +53 -0
- package/dist/dmx/_universe.d.ts +105 -0
- package/dist/dmx/_universe.js +112 -0
- package/dist/dmx/channel-matrix.d.ts +81 -0
- package/dist/dmx/channel-matrix.js +285 -0
- package/dist/dmx/dmx-bar.d.ts +50 -0
- package/dist/dmx/dmx-bar.js +107 -0
- package/dist/dmx/dmx-strip.d.ts +41 -0
- package/dist/dmx/dmx-strip.js +196 -0
- package/dist/dmx/index.d.ts +7 -0
- package/dist/dmx/index.js +7 -0
- package/dist/dmx/universe-grid.d.ts +61 -0
- package/dist/dmx/universe-grid.js +182 -0
- package/dist/flow/_frame.d.ts +52 -0
- package/dist/flow/_frame.js +38 -0
- package/dist/flow/controls.d.ts +41 -0
- package/dist/flow/controls.js +53 -0
- package/dist/flow/flow.css +121 -0
- package/dist/flow/handles.d.ts +40 -0
- package/dist/flow/handles.js +61 -0
- package/dist/flow/index.d.ts +7 -0
- package/dist/flow/index.js +7 -0
- package/dist/flow/node-card.d.ts +71 -0
- package/dist/flow/node-card.js +102 -0
- package/dist/flow/signal-edge.d.ts +60 -0
- package/dist/flow/signal-edge.js +108 -0
- package/dist/flow/use-flow-theme.d.ts +69 -0
- package/dist/flow/use-flow-theme.js +109 -0
- package/dist/forms/_chassis.d.ts +64 -0
- package/dist/forms/_chassis.js +59 -0
- package/dist/forms/_glyphs.js +143 -0
- package/dist/forms/_listbox.js +55 -0
- package/dist/forms/autocomplete.d.ts +61 -0
- package/dist/forms/autocomplete.js +88 -0
- package/dist/forms/button-group.d.ts +47 -0
- package/dist/forms/button-group.js +52 -0
- package/dist/forms/checkbox.d.ts +51 -0
- package/dist/forms/checkbox.js +98 -0
- package/dist/forms/combobox.d.ts +73 -0
- package/dist/forms/combobox.js +108 -0
- package/dist/forms/env-var-input.d.ts +74 -0
- package/dist/forms/env-var-input.js +116 -0
- package/dist/forms/field.d.ts +89 -0
- package/dist/forms/field.js +102 -0
- package/dist/forms/file-upload.d.ts +113 -0
- package/dist/forms/file-upload.js +232 -0
- package/dist/forms/index.d.ts +26 -0
- package/dist/forms/index.js +26 -0
- package/dist/forms/input-group.d.ts +31 -0
- package/dist/forms/input-group.js +54 -0
- package/dist/forms/input.d.ts +33 -0
- package/dist/forms/input.js +36 -0
- package/dist/forms/multi-select.d.ts +62 -0
- package/dist/forms/multi-select.js +107 -0
- package/dist/forms/number-field.d.ts +38 -0
- package/dist/forms/number-field.js +64 -0
- package/dist/forms/otp-field.d.ts +54 -0
- package/dist/forms/otp-field.js +59 -0
- package/dist/forms/password-input.d.ts +46 -0
- package/dist/forms/password-input.js +62 -0
- package/dist/forms/radio-group.d.ts +50 -0
- package/dist/forms/radio-group.js +64 -0
- package/dist/forms/rating.d.ts +69 -0
- package/dist/forms/rating.js +103 -0
- package/dist/forms/scrub-input.d.ts +81 -0
- package/dist/forms/scrub-input.js +249 -0
- package/dist/forms/search-input.d.ts +54 -0
- package/dist/forms/search-input.js +112 -0
- package/dist/forms/select.d.ts +75 -0
- package/dist/forms/select.js +91 -0
- package/dist/forms/slider.d.ts +44 -0
- package/dist/forms/slider.js +65 -0
- package/dist/forms/switch.d.ts +36 -0
- package/dist/forms/switch.js +71 -0
- package/dist/forms/tags-input.d.ts +69 -0
- package/dist/forms/tags-input.js +148 -0
- package/dist/forms/textarea.d.ts +27 -0
- package/dist/forms/textarea.js +37 -0
- package/dist/forms/toggle-group.d.ts +41 -0
- package/dist/forms/toggle-group.js +56 -0
- package/dist/forms/toggle.d.ts +41 -0
- package/dist/forms/toggle.js +100 -0
- package/dist/index.d.ts +112 -0
- package/dist/index.js +104 -0
- package/dist/instruments/_ansi.js +116 -0
- package/dist/instruments/_glyphs.js +90 -0
- package/dist/instruments/_motion.js +56 -0
- package/dist/instruments/_rem.js +21 -0
- package/dist/instruments/app-window-frame.d.ts +48 -0
- package/dist/instruments/app-window-frame.js +76 -0
- package/dist/instruments/copy-button.d.ts +41 -0
- package/dist/instruments/copy-button.js +112 -0
- package/dist/instruments/data-table.d.ts +168 -0
- package/dist/instruments/data-table.js +212 -0
- package/dist/instruments/group-bar.d.ts +63 -0
- package/dist/instruments/group-bar.js +122 -0
- package/dist/instruments/index.d.ts +13 -0
- package/dist/instruments/index.js +13 -0
- package/dist/instruments/log-viewer.d.ts +74 -0
- package/dist/instruments/log-viewer.js +215 -0
- package/dist/instruments/meter.d.ts +77 -0
- package/dist/instruments/meter.js +96 -0
- package/dist/instruments/progress.d.ts +45 -0
- package/dist/instruments/progress.js +61 -0
- package/dist/instruments/seam-grid.d.ts +66 -0
- package/dist/instruments/seam-grid.js +78 -0
- package/dist/instruments/sparkline.d.ts +39 -0
- package/dist/instruments/sparkline.js +85 -0
- package/dist/instruments/stat.d.ts +35 -0
- package/dist/instruments/stat.js +59 -0
- package/dist/instruments/table.d.ts +51 -0
- package/dist/instruments/table.js +92 -0
- package/dist/instruments/terminal-frame.d.ts +89 -0
- package/dist/instruments/terminal-frame.js +256 -0
- package/dist/instruments/two-step-button.d.ts +47 -0
- package/dist/instruments/two-step-button.js +147 -0
- package/dist/instruments/usage-chart.d.ts +55 -0
- package/dist/instruments/usage-chart.js +235 -0
- package/dist/layout/_collapse.js +46 -0
- package/dist/layout/_glyphs.js +45 -0
- package/dist/layout/accordion.d.ts +52 -0
- package/dist/layout/accordion.js +81 -0
- package/dist/layout/breadcrumb.d.ts +35 -0
- package/dist/layout/breadcrumb.js +67 -0
- package/dist/layout/card.d.ts +51 -0
- package/dist/layout/card.js +76 -0
- package/dist/layout/carousel.d.ts +96 -0
- package/dist/layout/carousel.js +211 -0
- package/dist/layout/collapsible.d.ts +74 -0
- package/dist/layout/collapsible.js +126 -0
- package/dist/layout/container.d.ts +27 -0
- package/dist/layout/container.js +40 -0
- package/dist/layout/description-list.d.ts +24 -0
- package/dist/layout/description-list.js +37 -0
- package/dist/layout/grid.d.ts +40 -0
- package/dist/layout/grid.js +48 -0
- package/dist/layout/index.d.ts +15 -0
- package/dist/layout/index.js +15 -0
- package/dist/layout/item.d.ts +65 -0
- package/dist/layout/item.js +100 -0
- package/dist/layout/link.d.ts +48 -0
- package/dist/layout/link.js +63 -0
- package/dist/layout/pagination.d.ts +54 -0
- package/dist/layout/pagination.js +121 -0
- package/dist/layout/resizable.d.ts +38 -0
- package/dist/layout/resizable.js +68 -0
- package/dist/layout/sidebar.d.ts +67 -0
- package/dist/layout/sidebar.js +129 -0
- package/dist/layout/stack.d.ts +46 -0
- package/dist/layout/stack.js +62 -0
- package/dist/layout/stepper.d.ts +49 -0
- package/dist/layout/stepper.js +81 -0
- package/dist/layout/timeline.d.ts +43 -0
- package/dist/layout/timeline.js +63 -0
- package/dist/lib/aria-class.js +24 -0
- package/dist/lib/cn.js +18 -0
- package/dist/lib/compose.js +38 -0
- package/dist/lib/cva.d.ts +18 -0
- package/dist/lib/cva.js +65 -0
- package/dist/midi/_notes.d.ts +101 -0
- package/dist/midi/_notes.js +183 -0
- package/dist/midi/_ruler.d.ts +100 -0
- package/dist/midi/_ruler.js +105 -0
- package/dist/midi/_time.d.ts +107 -0
- package/dist/midi/_time.js +130 -0
- package/dist/midi/index.d.ts +9 -0
- package/dist/midi/index.js +9 -0
- package/dist/midi/musical-time-input.d.ts +48 -0
- package/dist/midi/musical-time-input.js +154 -0
- package/dist/midi/piano-keyboard.d.ts +50 -0
- package/dist/midi/piano-keyboard.js +193 -0
- package/dist/midi/spectrum-visualizer.d.ts +65 -0
- package/dist/midi/spectrum-visualizer.js +213 -0
- package/dist/midi/threshold-rail.d.ts +72 -0
- package/dist/midi/threshold-rail.js +214 -0
- package/dist/midi/timeline-ruler.d.ts +83 -0
- package/dist/midi/timeline-ruler.js +152 -0
- package/dist/overlays/_debounce.js +34 -0
- package/dist/overlays/_glyphs.js +59 -0
- package/dist/overlays/_surface.d.ts +70 -0
- package/dist/overlays/_surface.js +70 -0
- package/dist/overlays/_wheel.js +42 -0
- package/dist/overlays/alert-dialog.d.ts +67 -0
- package/dist/overlays/alert-dialog.js +117 -0
- package/dist/overlays/command-palette.d.ts +93 -0
- package/dist/overlays/command-palette.js +193 -0
- package/dist/overlays/context-menu.d.ts +64 -0
- package/dist/overlays/context-menu.js +78 -0
- package/dist/overlays/dialog.d.ts +72 -0
- package/dist/overlays/dialog.js +124 -0
- package/dist/overlays/drawer.d.ts +75 -0
- package/dist/overlays/drawer.js +151 -0
- package/dist/overlays/dropdown-menu.d.ts +79 -0
- package/dist/overlays/dropdown-menu.js +156 -0
- package/dist/overlays/hover-card.d.ts +58 -0
- package/dist/overlays/hover-card.js +91 -0
- package/dist/overlays/index.d.ts +15 -0
- package/dist/overlays/index.js +15 -0
- package/dist/overlays/info-tip.d.ts +41 -0
- package/dist/overlays/info-tip.js +45 -0
- package/dist/overlays/menubar.d.ts +72 -0
- package/dist/overlays/menubar.js +100 -0
- package/dist/overlays/popover.d.ts +66 -0
- package/dist/overlays/popover.js +114 -0
- package/dist/overlays/sheet.d.ts +78 -0
- package/dist/overlays/sheet.js +131 -0
- package/dist/overlays/toast.d.ts +106 -0
- package/dist/overlays/toast.js +146 -0
- package/dist/overlays/tooltip.d.ts +57 -0
- package/dist/overlays/tooltip.js +95 -0
- package/dist/primitives/avatar.d.ts +51 -0
- package/dist/primitives/avatar.js +93 -0
- package/dist/primitives/button.d.ts +46 -0
- package/dist/primitives/button.js +94 -0
- package/dist/primitives/chip.d.ts +47 -0
- package/dist/primitives/chip.js +152 -0
- package/dist/primitives/icon-button.d.ts +41 -0
- package/dist/primitives/icon-button.js +59 -0
- package/dist/primitives/index.d.ts +10 -0
- package/dist/primitives/index.js +10 -0
- package/dist/primitives/kbd.d.ts +17 -0
- package/dist/primitives/kbd.js +24 -0
- package/dist/primitives/separator.d.ts +25 -0
- package/dist/primitives/separator.js +30 -0
- package/dist/primitives/skeleton.d.ts +20 -0
- package/dist/primitives/skeleton.js +27 -0
- package/dist/primitives/spinner.d.ts +26 -0
- package/dist/primitives/spinner.js +31 -0
- package/dist/primitives/status-dot.d.ts +44 -0
- package/dist/primitives/status-dot.js +50 -0
- package/dist/styles.css +19 -0
- package/dist/system/density.d.ts +33 -0
- package/dist/system/density.js +49 -0
- package/dist/system/index.d.ts +8 -0
- package/dist/system/index.js +7 -0
- package/dist/system/portal.d.ts +51 -0
- package/dist/system/portal.js +122 -0
- package/dist/system/prepaint.d.ts +38 -0
- package/dist/system/prepaint.js +37 -0
- package/dist/system/theme-provider.d.ts +72 -0
- package/dist/system/theme-provider.js +252 -0
- package/dist/system/use-density.d.ts +33 -0
- package/dist/system/use-density.js +84 -0
- package/dist/system/use-isomorphic-layout-effect.js +15 -0
- package/dist/system/use-theme.d.ts +19 -0
- package/dist/system/use-theme.js +25 -0
- package/dist/theming/_presets.d.ts +11 -0
- package/dist/theming/_presets.js +487 -0
- package/dist/theming/contrast.d.ts +110 -0
- package/dist/theming/contrast.js +167 -0
- package/dist/theming/create-theme.d.ts +165 -0
- package/dist/theming/create-theme.js +442 -0
- package/dist/theming/index.d.ts +5 -0
- package/dist/theming/index.js +5 -0
- package/dist/theming/serialize.d.ts +145 -0
- package/dist/theming/serialize.js +165 -0
- package/package.json +216 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { ThemeContext } from "./theme-provider.js";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
//#region src/system/use-theme.ts
|
|
5
|
+
/**
|
|
6
|
+
* Read and drive the ambient theme state.
|
|
7
|
+
*
|
|
8
|
+
* Returns `{ theme, density, mode, resolvedMode, setTheme, setDensity, setMode }`.
|
|
9
|
+
* `density` here is the *provider's* level — a nested `<Density>` island does not
|
|
10
|
+
* change it; use `useDensity()` when you want the level that actually applies
|
|
11
|
+
* where you are.
|
|
12
|
+
*
|
|
13
|
+
* @throws If called outside a `<ThemeProvider>`. Theme state is never guessed:
|
|
14
|
+
* a missing provider is a wiring bug, not a fallback situation.
|
|
15
|
+
* @example
|
|
16
|
+
* const { resolvedMode, setMode } = useTheme();
|
|
17
|
+
* <Switch checked={resolvedMode === "light"} onCheckedChange={(on) => setMode(on ? "light" : "dark")} />
|
|
18
|
+
*/
|
|
19
|
+
function useTheme() {
|
|
20
|
+
const context = React.useContext(ThemeContext);
|
|
21
|
+
if (context === null) throw new Error("useTheme() must be called inside a <ThemeProvider>.");
|
|
22
|
+
return context;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { useTheme };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Density, ThemeName } from "@cueplusplus/tokens";
|
|
2
|
+
//#region src/theming/_presets.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* The colour tokens every theme block declares, in the order the tokens build
|
|
5
|
+
* emits them. A generated theme is complete exactly when it covers this list.
|
|
6
|
+
*/
|
|
7
|
+
declare const THEME_COLOR_TOKENS: readonly ["bg", "sunken", "surface-1", "surface-2", "surface-3", "fg", "fg-muted", "fg-subtle", "border", "border-strong", "border-overlay", "accent", "accent-hover", "accent-fg", "ok", "busy", "warn", "danger", "info", "selection", "focus", "data-ground", "scrim"];
|
|
8
|
+
/** One of the colour tokens a theme block owns. */
|
|
9
|
+
type ThemeColorToken = (typeof THEME_COLOR_TOKENS)[number];
|
|
10
|
+
//#endregion
|
|
11
|
+
export { THEME_COLOR_TOKENS, ThemeColorToken };
|
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
//#region src/theming/_presets.ts
|
|
2
|
+
/**
|
|
3
|
+
* The colour tokens every theme block declares, in the order the tokens build
|
|
4
|
+
* emits them. A generated theme is complete exactly when it covers this list.
|
|
5
|
+
*/
|
|
6
|
+
const THEME_COLOR_TOKENS = [
|
|
7
|
+
"bg",
|
|
8
|
+
"sunken",
|
|
9
|
+
"surface-1",
|
|
10
|
+
"surface-2",
|
|
11
|
+
"surface-3",
|
|
12
|
+
"fg",
|
|
13
|
+
"fg-muted",
|
|
14
|
+
"fg-subtle",
|
|
15
|
+
"border",
|
|
16
|
+
"border-strong",
|
|
17
|
+
"border-overlay",
|
|
18
|
+
"accent",
|
|
19
|
+
"accent-hover",
|
|
20
|
+
"accent-fg",
|
|
21
|
+
"ok",
|
|
22
|
+
"busy",
|
|
23
|
+
"warn",
|
|
24
|
+
"danger",
|
|
25
|
+
"info",
|
|
26
|
+
"selection",
|
|
27
|
+
"focus",
|
|
28
|
+
"data-ground",
|
|
29
|
+
"scrim"
|
|
30
|
+
];
|
|
31
|
+
/** The shipped presets, keyed by name. */
|
|
32
|
+
const THEME_PRESETS = {
|
|
33
|
+
cue: {
|
|
34
|
+
dark: {
|
|
35
|
+
"bg": "#0a0a0a",
|
|
36
|
+
"sunken": "#000000",
|
|
37
|
+
"surface-1": "#121212",
|
|
38
|
+
"surface-2": "#1a1a1a",
|
|
39
|
+
"surface-3": "#242424",
|
|
40
|
+
"fg": "#f5f5f7",
|
|
41
|
+
"fg-muted": "rgba(255,255,255,0.55)",
|
|
42
|
+
"fg-subtle": "rgba(255,255,255,0.35)",
|
|
43
|
+
"border": "rgba(255,255,255,0.10)",
|
|
44
|
+
"border-strong": "rgba(255,255,255,0.25)",
|
|
45
|
+
"border-overlay": "rgba(255,255,255,0.25)",
|
|
46
|
+
"accent": "#ffffff",
|
|
47
|
+
"accent-hover": "rgba(255,255,255,0.85)",
|
|
48
|
+
"accent-fg": "#0a0a0a",
|
|
49
|
+
"ok": "#ffffff",
|
|
50
|
+
"busy": "#ffffff",
|
|
51
|
+
"warn": "#ffffff",
|
|
52
|
+
"danger": "#ff5f57",
|
|
53
|
+
"info": "#ffffff",
|
|
54
|
+
"selection": "rgba(255,255,255,0.20)",
|
|
55
|
+
"focus": "#ffffff",
|
|
56
|
+
"data-ground": "#000000",
|
|
57
|
+
"scrim": "rgba(0,0,0,0.55)"
|
|
58
|
+
},
|
|
59
|
+
light: {
|
|
60
|
+
"bg": "#fcfcfc",
|
|
61
|
+
"sunken": "#f0f0f0",
|
|
62
|
+
"surface-1": "#ffffff",
|
|
63
|
+
"surface-2": "#f6f6f6",
|
|
64
|
+
"surface-3": "#ededed",
|
|
65
|
+
"fg": "#0a0a0a",
|
|
66
|
+
"fg-muted": "rgba(0,0,0,0.55)",
|
|
67
|
+
"fg-subtle": "rgba(0,0,0,0.35)",
|
|
68
|
+
"border": "rgba(0,0,0,0.10)",
|
|
69
|
+
"border-strong": "rgba(0,0,0,0.25)",
|
|
70
|
+
"border-overlay": "rgba(0,0,0,0.25)",
|
|
71
|
+
"accent": "#0a0a0a",
|
|
72
|
+
"accent-hover": "rgba(0,0,0,0.85)",
|
|
73
|
+
"accent-fg": "#fcfcfc",
|
|
74
|
+
"ok": "#0a0a0a",
|
|
75
|
+
"busy": "#0a0a0a",
|
|
76
|
+
"warn": "#0a0a0a",
|
|
77
|
+
"danger": "#d03030",
|
|
78
|
+
"info": "#0a0a0a",
|
|
79
|
+
"selection": "rgba(0,0,0,0.20)",
|
|
80
|
+
"focus": "#0a0a0a",
|
|
81
|
+
"data-ground": "#000000",
|
|
82
|
+
"scrim": "rgba(0,0,0,0.55)"
|
|
83
|
+
},
|
|
84
|
+
fonts: { "font-mono": "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" }
|
|
85
|
+
},
|
|
86
|
+
terminal: {
|
|
87
|
+
dark: {
|
|
88
|
+
"bg": "hsl(240 10% 6%)",
|
|
89
|
+
"sunken": "hsl(240 12% 4%)",
|
|
90
|
+
"surface-1": "hsl(240 8% 9%)",
|
|
91
|
+
"surface-2": "hsl(240 6% 14%)",
|
|
92
|
+
"surface-3": "hsl(240 6% 16%)",
|
|
93
|
+
"fg": "hsl(240 5% 96%)",
|
|
94
|
+
"fg-muted": "hsl(240 4% 56%)",
|
|
95
|
+
"fg-subtle": "hsl(240 4% 40%)",
|
|
96
|
+
"border": "hsl(240 6% 18%)",
|
|
97
|
+
"border-strong": "hsl(240 6% 26%)",
|
|
98
|
+
"border-overlay": "hsl(240 6% 26%)",
|
|
99
|
+
"accent": "hsl(180 100% 50%)",
|
|
100
|
+
"accent-hover": "hsl(180 100% 42%)",
|
|
101
|
+
"accent-fg": "hsl(240 10% 6%)",
|
|
102
|
+
"ok": "hsl(142 76% 50%)",
|
|
103
|
+
"busy": "hsl(180 100% 50%)",
|
|
104
|
+
"warn": "hsl(38 100% 55%)",
|
|
105
|
+
"danger": "hsl(0 72% 51%)",
|
|
106
|
+
"info": "hsl(180 100% 50%)",
|
|
107
|
+
"selection": "hsl(180 100% 50% / 0.25)",
|
|
108
|
+
"focus": "hsl(180 100% 50%)",
|
|
109
|
+
"data-ground": "#000000",
|
|
110
|
+
"scrim": "rgba(0,0,0,0.55)"
|
|
111
|
+
},
|
|
112
|
+
light: {
|
|
113
|
+
"bg": "hsl(0 0% 99%)",
|
|
114
|
+
"sunken": "hsl(240 5% 92%)",
|
|
115
|
+
"surface-1": "#ffffff",
|
|
116
|
+
"surface-2": "hsl(240 5% 96%)",
|
|
117
|
+
"surface-3": "hsl(240 5% 94%)",
|
|
118
|
+
"fg": "hsl(240 6% 10%)",
|
|
119
|
+
"fg-muted": "hsl(240 4% 46%)",
|
|
120
|
+
"fg-subtle": "hsl(240 4% 60%)",
|
|
121
|
+
"border": "hsl(240 6% 90%)",
|
|
122
|
+
"border-strong": "hsl(240 6% 80%)",
|
|
123
|
+
"border-overlay": "hsl(240 6% 80%)",
|
|
124
|
+
"accent": "hsl(240 6% 10%)",
|
|
125
|
+
"accent-hover": "hsl(240 6% 22%)",
|
|
126
|
+
"accent-fg": "hsl(0 0% 98%)",
|
|
127
|
+
"ok": "hsl(142 71% 45%)",
|
|
128
|
+
"busy": "hsl(187 100% 33%)",
|
|
129
|
+
"warn": "hsl(38 92% 50%)",
|
|
130
|
+
"danger": "hsl(0 72% 45%)",
|
|
131
|
+
"info": "hsl(187 100% 33%)",
|
|
132
|
+
"selection": "hsl(187 100% 33% / 0.18)",
|
|
133
|
+
"focus": "hsl(240 6% 10%)",
|
|
134
|
+
"data-ground": "#000000",
|
|
135
|
+
"scrim": "rgba(0,0,0,0.55)"
|
|
136
|
+
},
|
|
137
|
+
fonts: {}
|
|
138
|
+
},
|
|
139
|
+
signal: {
|
|
140
|
+
dark: {
|
|
141
|
+
"bg": "#1a1a1a",
|
|
142
|
+
"sunken": "#141414",
|
|
143
|
+
"surface-1": "#222222",
|
|
144
|
+
"surface-2": "#2a2a2a",
|
|
145
|
+
"surface-3": "#333333",
|
|
146
|
+
"fg": "#cccccc",
|
|
147
|
+
"fg-muted": "#888888",
|
|
148
|
+
"fg-subtle": "#666666",
|
|
149
|
+
"border": "#333333",
|
|
150
|
+
"border-strong": "#3e3e3e",
|
|
151
|
+
"border-overlay": "#555555",
|
|
152
|
+
"accent": "#ff6a2e",
|
|
153
|
+
"accent-hover": "#ff8552",
|
|
154
|
+
"accent-fg": "#1a1a1a",
|
|
155
|
+
"ok": "#00cc66",
|
|
156
|
+
"busy": "#ff6a2e",
|
|
157
|
+
"warn": "#ff9500",
|
|
158
|
+
"danger": "#ff3333",
|
|
159
|
+
"info": "#3b82f6",
|
|
160
|
+
"selection": "rgba(255,106,46,0.16)",
|
|
161
|
+
"focus": "#ff6a2e",
|
|
162
|
+
"data-ground": "#000000",
|
|
163
|
+
"scrim": "rgba(0,0,0,0.55)"
|
|
164
|
+
},
|
|
165
|
+
light: {
|
|
166
|
+
"bg": "#f5f5f5",
|
|
167
|
+
"sunken": "#ececec",
|
|
168
|
+
"surface-1": "#ffffff",
|
|
169
|
+
"surface-2": "#f0f0f0",
|
|
170
|
+
"surface-3": "#e8e8e8",
|
|
171
|
+
"fg": "#1f1f1f",
|
|
172
|
+
"fg-muted": "#5c5c5c",
|
|
173
|
+
"fg-subtle": "#8a8a8a",
|
|
174
|
+
"border": "#e0e0e0",
|
|
175
|
+
"border-strong": "#cfcfcf",
|
|
176
|
+
"border-overlay": "#b5b5b5",
|
|
177
|
+
"accent": "#d9541a",
|
|
178
|
+
"accent-hover": "#c04a17",
|
|
179
|
+
"accent-fg": "#ffffff",
|
|
180
|
+
"ok": "#009e50",
|
|
181
|
+
"busy": "#d9541a",
|
|
182
|
+
"warn": "#cc7700",
|
|
183
|
+
"danger": "#d42020",
|
|
184
|
+
"info": "#1a6fd4",
|
|
185
|
+
"selection": "rgba(217,84,26,0.18)",
|
|
186
|
+
"focus": "#d9541a",
|
|
187
|
+
"data-ground": "#000000",
|
|
188
|
+
"scrim": "rgba(0,0,0,0.35)"
|
|
189
|
+
},
|
|
190
|
+
fonts: { "font-mono": "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" }
|
|
191
|
+
},
|
|
192
|
+
venu: {
|
|
193
|
+
dark: {
|
|
194
|
+
"bg": "hsl(0 0% 9%)",
|
|
195
|
+
"sunken": "hsl(0 0% 7%)",
|
|
196
|
+
"surface-1": "hsl(0 0% 11%)",
|
|
197
|
+
"surface-2": "hsl(0 0% 13%)",
|
|
198
|
+
"surface-3": "hsl(0 0% 15%)",
|
|
199
|
+
"fg": "hsl(240 4% 87%)",
|
|
200
|
+
"fg-muted": "hsl(0 0% 65%)",
|
|
201
|
+
"fg-subtle": "hsl(0 0% 33%)",
|
|
202
|
+
"border": "hsl(0 0% 22%)",
|
|
203
|
+
"border-strong": "hsl(0 0% 31%)",
|
|
204
|
+
"border-overlay": "hsl(0 0% 13%)",
|
|
205
|
+
"accent": "hsl(27 94% 53%)",
|
|
206
|
+
"accent-hover": "hsl(27 94% 48%)",
|
|
207
|
+
"accent-fg": "#ffffff",
|
|
208
|
+
"ok": "hsl(166 79% 38%)",
|
|
209
|
+
"busy": "hsl(27 94% 53%)",
|
|
210
|
+
"warn": "hsl(27 88% 52%)",
|
|
211
|
+
"danger": "hsl(0 87% 62%)",
|
|
212
|
+
"info": "hsl(209 89% 54%)",
|
|
213
|
+
"selection": "hsl(212 63% 23%)",
|
|
214
|
+
"focus": "hsl(27 94% 53%)",
|
|
215
|
+
"data-ground": "#000000",
|
|
216
|
+
"scrim": "rgba(0,0,0,0.55)"
|
|
217
|
+
},
|
|
218
|
+
light: {
|
|
219
|
+
"bg": "#f5f5f5",
|
|
220
|
+
"sunken": "#e8e8e8",
|
|
221
|
+
"surface-1": "#ffffff",
|
|
222
|
+
"surface-2": "#f0f0f0",
|
|
223
|
+
"surface-3": "#e4e4e4",
|
|
224
|
+
"fg": "#17171a",
|
|
225
|
+
"fg-muted": "#555555",
|
|
226
|
+
"fg-subtle": "#999999",
|
|
227
|
+
"border": "#dcdcdc",
|
|
228
|
+
"border-strong": "#c4c4c4",
|
|
229
|
+
"border-overlay": "#e4e4e4",
|
|
230
|
+
"accent": "#e06510",
|
|
231
|
+
"accent-hover": "#c85a0e",
|
|
232
|
+
"accent-fg": "#ffffff",
|
|
233
|
+
"ok": "#0e8c70",
|
|
234
|
+
"busy": "#e06510",
|
|
235
|
+
"warn": "#c05e10",
|
|
236
|
+
"danger": "#cc2f2f",
|
|
237
|
+
"info": "#1a75d2",
|
|
238
|
+
"selection": "#cce0ff",
|
|
239
|
+
"focus": "#e06510",
|
|
240
|
+
"data-ground": "#000000",
|
|
241
|
+
"scrim": "rgba(0,0,0,0.35)"
|
|
242
|
+
},
|
|
243
|
+
fonts: { "font-mono": "\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" }
|
|
244
|
+
},
|
|
245
|
+
hivehub: {
|
|
246
|
+
dark: {
|
|
247
|
+
"bg": "hsl(222 47% 5%)",
|
|
248
|
+
"sunken": "hsl(222 47% 4%)",
|
|
249
|
+
"surface-1": "hsl(222 47% 8%)",
|
|
250
|
+
"surface-2": "hsl(222 47% 11%)",
|
|
251
|
+
"surface-3": "hsl(222 47% 13%)",
|
|
252
|
+
"fg": "hsl(0 0% 98%)",
|
|
253
|
+
"fg-muted": "hsl(0 0% 65%)",
|
|
254
|
+
"fg-subtle": "hsl(0 0% 45%)",
|
|
255
|
+
"border": "hsl(222 47% 15%)",
|
|
256
|
+
"border-strong": "hsl(222 47% 20%)",
|
|
257
|
+
"border-overlay": "hsl(222 47% 20%)",
|
|
258
|
+
"accent": "hsl(27 94% 53%)",
|
|
259
|
+
"accent-hover": "hsl(27 94% 48%)",
|
|
260
|
+
"accent-fg": "#ffffff",
|
|
261
|
+
"ok": "hsl(142 76% 36%)",
|
|
262
|
+
"busy": "hsl(38 92% 50%)",
|
|
263
|
+
"warn": "hsl(38 92% 50%)",
|
|
264
|
+
"danger": "hsl(0 72% 51%)",
|
|
265
|
+
"info": "hsl(221 83% 62%)",
|
|
266
|
+
"selection": "hsl(27 94% 53% / 0.2)",
|
|
267
|
+
"focus": "hsl(27 94% 53%)",
|
|
268
|
+
"data-ground": "#000000",
|
|
269
|
+
"scrim": "rgba(0,0,0,0.8)"
|
|
270
|
+
},
|
|
271
|
+
light: {
|
|
272
|
+
"bg": "hsl(222 30% 97%)",
|
|
273
|
+
"sunken": "hsl(222 28% 94%)",
|
|
274
|
+
"surface-1": "#ffffff",
|
|
275
|
+
"surface-2": "hsl(222 30% 95%)",
|
|
276
|
+
"surface-3": "hsl(222 25% 92%)",
|
|
277
|
+
"fg": "hsl(222 30% 12%)",
|
|
278
|
+
"fg-muted": "hsl(222 12% 38%)",
|
|
279
|
+
"fg-subtle": "hsl(222 10% 55%)",
|
|
280
|
+
"border": "hsl(222 25% 88%)",
|
|
281
|
+
"border-strong": "hsl(222 20% 78%)",
|
|
282
|
+
"border-overlay": "hsl(222 20% 78%)",
|
|
283
|
+
"accent": "#e06510",
|
|
284
|
+
"accent-hover": "#c85a0e",
|
|
285
|
+
"accent-fg": "#ffffff",
|
|
286
|
+
"ok": "hsl(142 70% 30%)",
|
|
287
|
+
"busy": "hsl(38 92% 40%)",
|
|
288
|
+
"warn": "hsl(38 92% 40%)",
|
|
289
|
+
"danger": "#c62828",
|
|
290
|
+
"info": "#2f6fd0",
|
|
291
|
+
"selection": "rgba(224,101,16,0.15)",
|
|
292
|
+
"focus": "#e06510",
|
|
293
|
+
"data-ground": "#000000",
|
|
294
|
+
"scrim": "rgba(15,23,42,0.45)"
|
|
295
|
+
},
|
|
296
|
+
fonts: {}
|
|
297
|
+
},
|
|
298
|
+
dusk: {
|
|
299
|
+
dark: {
|
|
300
|
+
"bg": "#0C1411",
|
|
301
|
+
"sunken": "#08100D",
|
|
302
|
+
"surface-1": "#101C17",
|
|
303
|
+
"surface-2": "#15241E",
|
|
304
|
+
"surface-3": "#1a2c24",
|
|
305
|
+
"fg": "#E9EFEA",
|
|
306
|
+
"fg-muted": "#A7B3AC",
|
|
307
|
+
"fg-subtle": "#6E7D75",
|
|
308
|
+
"border": "#1E2A25",
|
|
309
|
+
"border-strong": "#2C3A33",
|
|
310
|
+
"border-overlay": "#2C3A33",
|
|
311
|
+
"accent": "#E8A33D",
|
|
312
|
+
"accent-hover": "#F2B85A",
|
|
313
|
+
"accent-fg": "#20160A",
|
|
314
|
+
"ok": "#6BBF95",
|
|
315
|
+
"busy": "#D98E4B",
|
|
316
|
+
"warn": "#D98E4B",
|
|
317
|
+
"danger": "#D9694B",
|
|
318
|
+
"info": "#5B8DEF",
|
|
319
|
+
"selection": "#1B1F16",
|
|
320
|
+
"focus": "#E8A33D",
|
|
321
|
+
"data-ground": "#000000",
|
|
322
|
+
"scrim": "rgba(4,8,6,0.62)"
|
|
323
|
+
},
|
|
324
|
+
light: {
|
|
325
|
+
"bg": "#F4F5F1",
|
|
326
|
+
"sunken": "#E9EBE3",
|
|
327
|
+
"surface-1": "#FAF8F0",
|
|
328
|
+
"surface-2": "#EDEFE8",
|
|
329
|
+
"surface-3": "#E4E7DD",
|
|
330
|
+
"fg": "#14201B",
|
|
331
|
+
"fg-muted": "#46554D",
|
|
332
|
+
"fg-subtle": "#76837B",
|
|
333
|
+
"border": "#DEE1D7",
|
|
334
|
+
"border-strong": "#C3CABD",
|
|
335
|
+
"border-overlay": "#C3CABD",
|
|
336
|
+
"accent": "#9A6516",
|
|
337
|
+
"accent-hover": "#7E5210",
|
|
338
|
+
"accent-fg": "#FFFDF7",
|
|
339
|
+
"ok": "#2C7D55",
|
|
340
|
+
"busy": "#96591D",
|
|
341
|
+
"warn": "#96591D",
|
|
342
|
+
"danger": "#A23C22",
|
|
343
|
+
"info": "#2563EB",
|
|
344
|
+
"selection": "rgba(154,101,22,0.18)",
|
|
345
|
+
"focus": "#9A6516",
|
|
346
|
+
"data-ground": "#000000",
|
|
347
|
+
"scrim": "rgba(4,8,6,0.62)"
|
|
348
|
+
},
|
|
349
|
+
fonts: { "font-mono": "\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" }
|
|
350
|
+
},
|
|
351
|
+
luma: {
|
|
352
|
+
dark: {
|
|
353
|
+
"bg": "#181818",
|
|
354
|
+
"sunken": "#111111",
|
|
355
|
+
"surface-1": "#1d1d1d",
|
|
356
|
+
"surface-2": "#212121",
|
|
357
|
+
"surface-3": "#2a2a2a",
|
|
358
|
+
"fg": "#d6d6dd",
|
|
359
|
+
"fg-muted": "#a6a6a6",
|
|
360
|
+
"fg-subtle": "#535353",
|
|
361
|
+
"border": "#2a2a2a",
|
|
362
|
+
"border-strong": "#383838",
|
|
363
|
+
"border-overlay": "#383838",
|
|
364
|
+
"accent": "#edbd6a",
|
|
365
|
+
"accent-hover": "#d9a850",
|
|
366
|
+
"accent-fg": "#181818",
|
|
367
|
+
"ok": "#15ac91",
|
|
368
|
+
"busy": "#edbd6a",
|
|
369
|
+
"warn": "#ea7620",
|
|
370
|
+
"danger": "#f14c4c",
|
|
371
|
+
"info": "#228df2",
|
|
372
|
+
"selection": "rgba(237,189,106,0.22)",
|
|
373
|
+
"focus": "#edbd6a",
|
|
374
|
+
"data-ground": "#000000",
|
|
375
|
+
"scrim": "rgba(0,0,0,0.55)"
|
|
376
|
+
},
|
|
377
|
+
light: {
|
|
378
|
+
"bg": "#f5f5f5",
|
|
379
|
+
"sunken": "#e0e0e0",
|
|
380
|
+
"surface-1": "#ffffff",
|
|
381
|
+
"surface-2": "#f0f0f0",
|
|
382
|
+
"surface-3": "#e8e8e8",
|
|
383
|
+
"fg": "#1a1a1a",
|
|
384
|
+
"fg-muted": "#555555",
|
|
385
|
+
"fg-subtle": "#999999",
|
|
386
|
+
"border": "#e0e0e0",
|
|
387
|
+
"border-strong": "#cccccc",
|
|
388
|
+
"border-overlay": "#999999",
|
|
389
|
+
"accent": "#b8862f",
|
|
390
|
+
"accent-hover": "#9c7226",
|
|
391
|
+
"accent-fg": "#ffffff",
|
|
392
|
+
"ok": "#0e8c70",
|
|
393
|
+
"busy": "#b8862f",
|
|
394
|
+
"warn": "#d06a10",
|
|
395
|
+
"danger": "#d03030",
|
|
396
|
+
"info": "#1a75d2",
|
|
397
|
+
"selection": "rgba(184,134,47,0.20)",
|
|
398
|
+
"focus": "#b8862f",
|
|
399
|
+
"data-ground": "#000000",
|
|
400
|
+
"scrim": "rgba(0,0,0,0.55)"
|
|
401
|
+
},
|
|
402
|
+
fonts: { "font-mono": "\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" }
|
|
403
|
+
},
|
|
404
|
+
snuffle: {
|
|
405
|
+
dark: {
|
|
406
|
+
"bg": "#1a1a1a",
|
|
407
|
+
"sunken": "#141414",
|
|
408
|
+
"surface-1": "#202020",
|
|
409
|
+
"surface-2": "#262626",
|
|
410
|
+
"surface-3": "#2b2b2b",
|
|
411
|
+
"fg": "#cccccc",
|
|
412
|
+
"fg-muted": "#8a8a8a",
|
|
413
|
+
"fg-subtle": "#6f6f6f",
|
|
414
|
+
"border": "#333333",
|
|
415
|
+
"border-strong": "#8a8a8a",
|
|
416
|
+
"border-overlay": "#333333",
|
|
417
|
+
"accent": "#e0568a",
|
|
418
|
+
"accent-hover": "#e97aa2",
|
|
419
|
+
"accent-fg": "#1a1a1a",
|
|
420
|
+
"ok": "#7bc47f",
|
|
421
|
+
"busy": "#e6c53a",
|
|
422
|
+
"warn": "#e6c53a",
|
|
423
|
+
"danger": "#e0563b",
|
|
424
|
+
"info": "#5ac8fa",
|
|
425
|
+
"selection": "#e0568a",
|
|
426
|
+
"focus": "#e0568a",
|
|
427
|
+
"data-ground": "#000000",
|
|
428
|
+
"scrim": "rgba(0,0,0,0.55)"
|
|
429
|
+
},
|
|
430
|
+
light: {
|
|
431
|
+
"bg": "#f6f6f6",
|
|
432
|
+
"sunken": "#ededed",
|
|
433
|
+
"surface-1": "#ffffff",
|
|
434
|
+
"surface-2": "#f0f0f0",
|
|
435
|
+
"surface-3": "#e9e9e9",
|
|
436
|
+
"fg": "#262626",
|
|
437
|
+
"fg-muted": "#6b6b6b",
|
|
438
|
+
"fg-subtle": "#999999",
|
|
439
|
+
"border": "#dddddd",
|
|
440
|
+
"border-strong": "#bdbdbd",
|
|
441
|
+
"border-overlay": "#dddddd",
|
|
442
|
+
"accent": "#b83560",
|
|
443
|
+
"accent-hover": "#9c2c51",
|
|
444
|
+
"accent-fg": "#ffffff",
|
|
445
|
+
"ok": "#3d8b41",
|
|
446
|
+
"busy": "#8f7a14",
|
|
447
|
+
"warn": "#8f7a14",
|
|
448
|
+
"danger": "#b8402b",
|
|
449
|
+
"info": "#157fb3",
|
|
450
|
+
"selection": "rgba(184,53,96,0.18)",
|
|
451
|
+
"focus": "#b83560",
|
|
452
|
+
"data-ground": "#000000",
|
|
453
|
+
"scrim": "rgba(0,0,0,0.35)"
|
|
454
|
+
},
|
|
455
|
+
fonts: { "font-mono": "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" }
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
/**
|
|
459
|
+
* The base type stacks, restated by a theme block when the preset overrides
|
|
460
|
+
* nothing — a theme block has no more specificity than the `:root` defaults it
|
|
461
|
+
* has to beat, and `:root` carries the *default* theme's font override. A silent
|
|
462
|
+
* theme would inherit cue's JetBrains Mono instead of the base stack, so every
|
|
463
|
+
* block says what it owns. Mirrors `build.mjs`'s `THEME_FONTS` handling.
|
|
464
|
+
*/
|
|
465
|
+
const BASE_FONT_STACKS = {
|
|
466
|
+
"font-sans": "Geist, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", \"Helvetica Neue\", sans-serif",
|
|
467
|
+
"font-mono": "ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace",
|
|
468
|
+
"font-display": "Geist, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif"
|
|
469
|
+
};
|
|
470
|
+
/**
|
|
471
|
+
* The radius multiplier each density level contributes.
|
|
472
|
+
*
|
|
473
|
+
* Geometry belongs to the density axis, so a theme that wants rounder corners
|
|
474
|
+
* cannot simply declare `--cue-radius-scale`: its block would outrank the density
|
|
475
|
+
* block and freeze ultra-compact's 0.75 at 1. {@link createTheme} instead
|
|
476
|
+
* multiplies the two and emits one crossed rule per density that differs from the
|
|
477
|
+
* default — which is why this ladder has to be known here.
|
|
478
|
+
*/
|
|
479
|
+
const DENSITY_RADIUS_SCALE = {
|
|
480
|
+
"ultra-compact": .75,
|
|
481
|
+
"normal": 1,
|
|
482
|
+
"large": 1
|
|
483
|
+
};
|
|
484
|
+
/** The default density, whose radius scale the uncrossed theme block carries. */
|
|
485
|
+
const DEFAULT_DENSITY_LEVEL = "normal";
|
|
486
|
+
//#endregion
|
|
487
|
+
export { BASE_FONT_STACKS, DEFAULT_DENSITY_LEVEL, DENSITY_RADIUS_SCALE, THEME_COLOR_TOKENS, THEME_PRESETS };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
//#region src/theming/contrast.d.ts
|
|
2
|
+
/** Non-text and large-text AA: UI components, graphics, status dots. */
|
|
3
|
+
declare const WCAG_AA_NON_TEXT = 3;
|
|
4
|
+
/** Body-text AA. The floor for anything a reader is expected to read. */
|
|
5
|
+
declare const WCAG_AA_TEXT = 4.5;
|
|
6
|
+
/** Body-text AAA. What this portfolio holds its primary ink to. */
|
|
7
|
+
declare const WCAG_AAA_TEXT = 7;
|
|
8
|
+
/**
|
|
9
|
+
* WCAG relative luminance: 0 for black, 1 for white.
|
|
10
|
+
*
|
|
11
|
+
* Alpha is ignored — a translucent colour has no luminance of its own, only one
|
|
12
|
+
* in front of something. {@link contrastRatio} is where that composite happens.
|
|
13
|
+
*
|
|
14
|
+
* @param color - Any CSS colour string.
|
|
15
|
+
* @returns Relative luminance in `[0, 1]`.
|
|
16
|
+
* @throws TypeError if the value is not a colour.
|
|
17
|
+
* @example
|
|
18
|
+
* relativeLuminance("#767676"); // → 0.1845…
|
|
19
|
+
*/
|
|
20
|
+
declare function relativeLuminance(color: string): number;
|
|
21
|
+
/**
|
|
22
|
+
* WCAG contrast ratio between two colours, from 1:1 to 21:1.
|
|
23
|
+
*
|
|
24
|
+
* Symmetric, because a ratio has no direction — the arguments are named for
|
|
25
|
+
* readability, not for order. A **translucent foreground is composited over the
|
|
26
|
+
* background first**, which is not decoration: half this system's `fg-muted`
|
|
27
|
+
* tokens are white-alpha ink, and measuring them raw would report the ratio of
|
|
28
|
+
* pure white and pass everything.
|
|
29
|
+
*
|
|
30
|
+
* @param foreground - The ink. Composited over `background` if it has alpha.
|
|
31
|
+
* @param background - The ground. Its own alpha is ignored — nothing is behind it.
|
|
32
|
+
* @returns The ratio, `>= 1`.
|
|
33
|
+
* @throws TypeError naming whichever value could not be read.
|
|
34
|
+
* @example
|
|
35
|
+
* contrastRatio("#767676", "#ffffff"); // → 4.5422…
|
|
36
|
+
*/
|
|
37
|
+
declare function contrastRatio(foreground: string, background: string): number;
|
|
38
|
+
/** One pair a theme is checked on. */
|
|
39
|
+
interface ContrastRequirement {
|
|
40
|
+
/** `"<foreground>/<background>"` — stable, and readable in a failure message. */
|
|
41
|
+
id: string;
|
|
42
|
+
/** Bare token name of the ink. */
|
|
43
|
+
foreground: string;
|
|
44
|
+
/** Bare token name of the ground. */
|
|
45
|
+
background: string;
|
|
46
|
+
/** The ratio the pair has to reach. */
|
|
47
|
+
minimum: number;
|
|
48
|
+
/** Why this minimum, in one line — the configurator surfaces it. */
|
|
49
|
+
reason: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The eight pairs that decide whether a theme is usable.
|
|
53
|
+
*
|
|
54
|
+
* Not every pair in the palette: the ones a reader's comprehension actually
|
|
55
|
+
* depends on. Primary ink is held to AAA because it carries the prose; secondary
|
|
56
|
+
* ink and accent ink to AA because they carry labels; the five status colours to
|
|
57
|
+
* the non-text AA floor because they are read as *signals* — a dot, a rim, a bar
|
|
58
|
+
* — never as body copy.
|
|
59
|
+
*/
|
|
60
|
+
declare const CONTRAST_REQUIREMENTS: readonly ContrastRequirement[];
|
|
61
|
+
/** One measured pair. */
|
|
62
|
+
interface ContrastCheck extends ContrastRequirement {
|
|
63
|
+
/** Which block the pair was measured in. */
|
|
64
|
+
mode: "dark" | "light";
|
|
65
|
+
/** The colour the foreground token resolved to. */
|
|
66
|
+
foregroundValue: string;
|
|
67
|
+
/** The colour the background token resolved to. */
|
|
68
|
+
backgroundValue: string;
|
|
69
|
+
/** The measured ratio. */
|
|
70
|
+
ratio: number;
|
|
71
|
+
/** Whether {@link ContrastRequirement.minimum} was reached. */
|
|
72
|
+
passes: boolean;
|
|
73
|
+
/** Whether the values were derived rather than authored — see the light variant. */
|
|
74
|
+
provisional: boolean;
|
|
75
|
+
}
|
|
76
|
+
/** One block's worth of resolved colours. */
|
|
77
|
+
interface ContrastInput {
|
|
78
|
+
/** Which block these are. */
|
|
79
|
+
mode: "dark" | "light";
|
|
80
|
+
/** Bare token name → resolved CSS colour. Pairs with a missing token are skipped. */
|
|
81
|
+
tokens: Readonly<Record<string, string>>;
|
|
82
|
+
/** Mark the resulting checks provisional. Defaults to `false`. */
|
|
83
|
+
provisional?: boolean;
|
|
84
|
+
}
|
|
85
|
+
/** Every pair, measured, plus the verdict. */
|
|
86
|
+
interface ContrastReport {
|
|
87
|
+
/** True when nothing failed. */
|
|
88
|
+
passes: boolean;
|
|
89
|
+
/** True when any measured block was derived rather than authored. */
|
|
90
|
+
provisional: boolean;
|
|
91
|
+
/** Every pair that could be measured, in requirement order, dark block first. */
|
|
92
|
+
checks: readonly ContrastCheck[];
|
|
93
|
+
/** The subset that failed. Empty when {@link ContrastReport.passes}. */
|
|
94
|
+
failures: readonly ContrastCheck[];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Measure every requirement against every block handed in.
|
|
98
|
+
*
|
|
99
|
+
* A pair whose tokens are missing is **skipped**, not failed: the report says
|
|
100
|
+
* what it measured, and a caller checking a partial palette should not be told
|
|
101
|
+
* that a colour it never supplied is unreadable.
|
|
102
|
+
*
|
|
103
|
+
* @param inputs - One entry per block, dark first by convention.
|
|
104
|
+
* @returns The report.
|
|
105
|
+
* @example
|
|
106
|
+
* contrastReport([{ mode: "dark", tokens: { fg: "#fff", bg: "#000" } }]).passes; // → true
|
|
107
|
+
*/
|
|
108
|
+
declare function contrastReport(inputs: readonly ContrastInput[]): ContrastReport;
|
|
109
|
+
//#endregion
|
|
110
|
+
export { CONTRAST_REQUIREMENTS, ContrastCheck, ContrastInput, ContrastReport, ContrastRequirement, WCAG_AAA_TEXT, WCAG_AA_NON_TEXT, WCAG_AA_TEXT, contrastRatio, contrastReport, relativeLuminance };
|