@vireo-ai/trellis-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.
Files changed (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/package.json +84 -0
  4. package/src/theme.css +536 -0
  5. package/trellis_ui/static/trellis_ui/css/styles.css +4382 -0
  6. package/trellis_ui/static/trellis_ui/js/esm/chunks/cally-TZl4LpyH.js +1134 -0
  7. package/trellis_ui/static/trellis_ui/js/esm/chunks/cally-TZl4LpyH.js.map +1 -0
  8. package/trellis_ui/static/trellis_ui/js/esm/chunks/dist-DMX3Q5Zu.js +551 -0
  9. package/trellis_ui/static/trellis_ui/js/esm/chunks/dist-DMX3Q5Zu.js.map +1 -0
  10. package/trellis_ui/static/trellis_ui/js/esm/index.js +14181 -0
  11. package/trellis_ui/static/trellis_ui/js/esm/index.js.map +1 -0
  12. package/trellis_ui/static/trellis_ui/js/index.js +10 -0
  13. package/types/bindings/disclosure.d.ts +3 -0
  14. package/types/bindings/index.d.ts +7 -0
  15. package/types/bindings/motion.d.ts +3 -0
  16. package/types/bindings/state.d.ts +3 -0
  17. package/types/bindings/types.d.ts +35 -0
  18. package/types/components/accordion/contract.d.ts +29 -0
  19. package/types/components/accordion/index.d.ts +44 -0
  20. package/types/components/action/contract.d.ts +14 -0
  21. package/types/components/action/index.d.ts +2 -0
  22. package/types/components/app/contract.d.ts +29 -0
  23. package/types/components/app/index.d.ts +2 -0
  24. package/types/components/badge/contract.d.ts +42 -0
  25. package/types/components/badge/index.d.ts +0 -0
  26. package/types/components/box/contract.d.ts +44 -0
  27. package/types/components/box/index.d.ts +2 -0
  28. package/types/components/brand/contract.d.ts +18 -0
  29. package/types/components/brand/index.d.ts +0 -0
  30. package/types/components/button/contract.d.ts +34 -0
  31. package/types/components/button/index.d.ts +3 -0
  32. package/types/components/card/contract.d.ts +56 -0
  33. package/types/components/card/index.d.ts +0 -0
  34. package/types/components/checkbox/contract.d.ts +85 -0
  35. package/types/components/checkbox/index.d.ts +34 -0
  36. package/types/components/combobox/contract.d.ts +57 -0
  37. package/types/components/combobox/index.d.ts +74 -0
  38. package/types/components/common.d.ts +61 -0
  39. package/types/components/date-picker/contract.d.ts +86 -0
  40. package/types/components/date-picker/index.d.ts +70 -0
  41. package/types/components/dropdown/contract.d.ts +18 -0
  42. package/types/components/dropdown/index.d.ts +53 -0
  43. package/types/components/field/contract.d.ts +67 -0
  44. package/types/components/field/index.d.ts +11 -0
  45. package/types/components/file-upload/contract.d.ts +60 -0
  46. package/types/components/file-upload/index.d.ts +35 -0
  47. package/types/components/frame/contract.d.ts +60 -0
  48. package/types/components/frame/index.d.ts +2 -0
  49. package/types/components/heading/contract.d.ts +8 -0
  50. package/types/components/heading/index.d.ts +0 -0
  51. package/types/components/image/contract.d.ts +19 -0
  52. package/types/components/image/index.d.ts +1 -0
  53. package/types/components/index.d.ts +1 -0
  54. package/types/components/input/contract.d.ts +49 -0
  55. package/types/components/input/index.d.ts +17 -0
  56. package/types/components/menu/contract.d.ts +34 -0
  57. package/types/components/menu/index.d.ts +0 -0
  58. package/types/components/modal/contract.d.ts +56 -0
  59. package/types/components/modal/index.d.ts +85 -0
  60. package/types/components/overlay/contract.d.ts +13 -0
  61. package/types/components/overlay/index.d.ts +0 -0
  62. package/types/components/radio/contract.d.ts +55 -0
  63. package/types/components/radio/index.d.ts +28 -0
  64. package/types/components/runtime.d.ts +35 -0
  65. package/types/components/scroll-area/contract.d.ts +23 -0
  66. package/types/components/scroll-area/index.d.ts +68 -0
  67. package/types/components/select/contract.d.ts +90 -0
  68. package/types/components/select/index.d.ts +92 -0
  69. package/types/components/separator/contract.d.ts +7 -0
  70. package/types/components/separator/index.d.ts +0 -0
  71. package/types/components/sidebar/contract.d.ts +66 -0
  72. package/types/components/sidebar/index.d.ts +106 -0
  73. package/types/components/slider/contract.d.ts +56 -0
  74. package/types/components/slider/index.d.ts +40 -0
  75. package/types/components/spacer/index.d.ts +0 -0
  76. package/types/components/stream/index.d.ts +0 -0
  77. package/types/components/switch/contract.d.ts +57 -0
  78. package/types/components/switch/index.d.ts +24 -0
  79. package/types/components/table/contract.d.ts +99 -0
  80. package/types/components/table/index.d.ts +2 -0
  81. package/types/components/tabs/contract.d.ts +25 -0
  82. package/types/components/tabs/index.d.ts +60 -0
  83. package/types/components/text/contract.d.ts +10 -0
  84. package/types/components/text/index.d.ts +0 -0
  85. package/types/components/textarea/contract.d.ts +22 -0
  86. package/types/components/textarea/index.d.ts +0 -0
  87. package/types/components/theme/contract.d.ts +6 -0
  88. package/types/components/theme/index.d.ts +0 -0
  89. package/types/components/toast/contract.d.ts +28 -0
  90. package/types/components/toast/index.d.ts +27 -0
  91. package/types/index.d.ts +46 -0
  92. package/types/motion/animate.d.ts +49 -0
  93. package/types/motion/index.d.ts +24 -0
  94. package/types/motion/presence.d.ts +34 -0
  95. package/types/motion/reduced-motion.d.ts +9 -0
  96. package/types/motion/stream.d.ts +18 -0
  97. package/types/motion/targets.d.ts +31 -0
  98. package/types/motion/view.d.ts +22 -0
  99. package/types/runtime/anchored-popover.d.ts +20 -0
  100. package/types/runtime/class-name.d.ts +9 -0
  101. package/types/runtime/codecs.d.ts +66 -0
  102. package/types/runtime/collection-navigation.d.ts +33 -0
  103. package/types/runtime/confirm.d.ts +18 -0
  104. package/types/runtime/create.d.ts +8 -0
  105. package/types/runtime/dismissable-layer.d.ts +8 -0
  106. package/types/runtime/dom.d.ts +39 -0
  107. package/types/runtime/form-control.d.ts +44 -0
  108. package/types/runtime/index.d.ts +85 -0
  109. package/types/runtime/manifest.d.ts +49 -0
  110. package/types/runtime/option-data.d.ts +5 -0
  111. package/types/runtime/props.d.ts +9 -0
  112. package/types/runtime/resizable.d.ts +36 -0
  113. package/types/runtime/scroll-lock.d.ts +3 -0
  114. package/types/runtime/stream.d.ts +47 -0
  115. package/types/runtime/styles.d.ts +28 -0
  116. package/types/runtime/theme.d.ts +17 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tristan Robinette
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # Trellis UI
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@vireo-ai/trellis-ui",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Django-native UI toolkit for building realtime and interactive web apps.",
6
+ "license": "MIT",
7
+ "main": "./trellis_ui/static/trellis_ui/js/esm/index.js",
8
+ "module": "./trellis_ui/static/trellis_ui/js/esm/index.js",
9
+ "types": "./types/index.d.ts",
10
+ "sideEffects": true,
11
+ "files": [
12
+ "LICENSE",
13
+ "README.md",
14
+ "types/**/*.d.ts",
15
+ "src/theme.css",
16
+ "trellis_ui/static/trellis_ui/css/styles.css",
17
+ "trellis_ui/static/trellis_ui/js/index.js",
18
+ "trellis_ui/static/trellis_ui/js/esm/**/*.js",
19
+ "trellis_ui/static/trellis_ui/js/esm/**/*.js.map",
20
+ "!types/components/manifests.d.ts",
21
+ "!types/components/styles.d.ts",
22
+ "!types/components/**/manifest.d.ts",
23
+ "!types/components/**/styles.d.ts"
24
+ ],
25
+ "exports": {
26
+ ".": {
27
+ "types": "./types/index.d.ts",
28
+ "import": "./trellis_ui/static/trellis_ui/js/esm/index.js",
29
+ "default": "./trellis_ui/static/trellis_ui/js/esm/index.js"
30
+ },
31
+ "./cdn": "./trellis_ui/static/trellis_ui/js/index.js",
32
+ "./theme.css": "./src/theme.css",
33
+ "./styles.css": "./trellis_ui/static/trellis_ui/css/styles.css",
34
+ "./package.json": "./package.json"
35
+ },
36
+ "dependencies": {
37
+ "@alpinejs/morph": "^3.15.12",
38
+ "@atlaskit/pragmatic-drag-and-drop": "^2.0.1",
39
+ "@floating-ui/dom": "^1.6.13",
40
+ "@imacrayon/alpine-ajax": "^0.12.7",
41
+ "alpinejs": "^3.14.8",
42
+ "cally": "^0.9.2",
43
+ "clsx": "^2.1.1",
44
+ "motion": "^12.42.0"
45
+ },
46
+ "devDependencies": {
47
+ "@axe-core/playwright": "^4.11.3",
48
+ "@playwright/test": "^1.61.0",
49
+ "@tailwindcss/cli": "^4.0.0",
50
+ "@tailwindcss/typography": "^0.5.20",
51
+ "@tailwindcss/vite": "^4.3.2",
52
+ "@types/alpinejs": "^3.13.11",
53
+ "@types/node": "^25.9.3",
54
+ "@types/prismjs": "^1.26.6",
55
+ "event-source-plus": "^0.1.15",
56
+ "jsdom": "^29.1.1",
57
+ "prismjs": "^1.30.0",
58
+ "tailwindcss": "^4.0.0",
59
+ "typescript": "^6.0.3",
60
+ "vite": "^8.0.16",
61
+ "vitest": "^4.1.9"
62
+ },
63
+ "scripts": {
64
+ "typecheck": "tsc --noEmit",
65
+ "test": "vitest run --no-file-parallelism",
66
+ "test:browser": "playwright test",
67
+ "test:watch": "vitest",
68
+ "prek": "uv run prek",
69
+ "clean:types": "node -e \"require('node:fs').rmSync('types', { recursive: true, force: true })\"",
70
+ "build:manifests": "vite build --config vite.manifests.config.ts && python3 scripts/generate_ui_events.py",
71
+ "build:types": "pnpm run clean:types && tsc -p tsconfig.build.json",
72
+ "build:js": "vite build && vite build --config vite.esm.config.ts && pnpm run build:types",
73
+ "build:css": "tailwindcss -i ./src/theme.css -o ./trellis_ui/static/trellis_ui/css/styles.css",
74
+ "build:package": "pnpm run build:css && pnpm run build:js && pnpm run build:manifests",
75
+ "build": "pnpm run build:package",
76
+ "check": "pnpm run build:package && pnpm run typecheck && pnpm test && uv run pytest && pnpm run test:browser",
77
+ "check:packages": "pnpm pack --dry-run && uv build --sdist --wheel",
78
+ "check:release": "pnpm run check && pnpm run check:packages",
79
+ "publish:npm": "pnpm run check:release && pnpm publish --access public",
80
+ "publish:pypi": "pnpm run build:package && uv build --sdist --wheel && uv publish dist/django_trellis-${npm_package_version}.tar.gz dist/django_trellis-${npm_package_version}-py3-none-any.whl",
81
+ "publish:all": "pnpm run check:release && pnpm publish --access public && uv publish dist/django_trellis-${npm_package_version}.tar.gz dist/django_trellis-${npm_package_version}-py3-none-any.whl",
82
+ "dev:css": "tailwindcss -i ./src/theme.css -o ./trellis_ui/static/trellis_ui/css/styles.css --watch"
83
+ }
84
+ }
package/src/theme.css ADDED
@@ -0,0 +1,536 @@
1
+ @import "tailwindcss";
2
+ @import "./components.css";
3
+
4
+ @source "../docs/**/*.html";
5
+ @source "../trellis_ui/templates/**/*.html";
6
+ @source "./**/*.ts";
7
+ @source not "../docs/static/**";
8
+ @source not "../trellis_ui/static/**";
9
+
10
+ @custom-variant dark (&:where(.dark, .dark *));
11
+ @custom-variant ui-interactive (&:is([data-ui-interactive]));
12
+ @custom-variant ui-interactive-surface (&:is([data-ui-interactive="surface"]));
13
+ @custom-variant ui-active (&:is(:active, :focus-visible, [data-active], [data-highlighted]));
14
+ @custom-variant ui-selected (&:is([data-selected], [aria-selected="true"], [data-current], [aria-current]:not([aria-current="false"]), [data-checked], [aria-checked="true"], [data-pressed], [aria-pressed="true"]));
15
+
16
+ /*
17
+ Root theme for the Trellis UI component system.
18
+
19
+ Token layers:
20
+ 1. Primitive scales: Radix-inspired color steps, type, space, radius.
21
+ 2. Semantic aliases: app, surface, foreground, border, focus, overlay.
22
+ 3. Component aliases: control, button, field, panel, popover, menu, nav.
23
+
24
+ Project themes should override semantic and component aliases first.
25
+ Primitive scale overrides are supported for full re-skinning.
26
+
27
+ CSS ownership:
28
+ - TypeScript style recipes own class composition, variants, sizes, and parts.
29
+ - This file owns imports, Tailwind sources and variants, tokens, utilities,
30
+ global theme rules, and generic reusable behavior.
31
+ - Colocated component CSS owns selector-only styling that recipes cannot
32
+ express cleanly, such as pseudo-elements, ::part(...), :has(...), native
33
+ quirks, and child-order selectors.
34
+ */
35
+
36
+ @theme {
37
+ --font-sans: Inter var, Lexend, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
38
+ --font-mono: Geist Mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
39
+
40
+ --text-xs: 0.75rem;
41
+ --text-xs--line-height: 1rem;
42
+ --text-sm: 0.875rem;
43
+ --text-sm--line-height: 1.25rem;
44
+ --text-base: 1rem;
45
+ --text-base--line-height: 1.5rem;
46
+ --text-lg: 1.125rem;
47
+ --text-lg--line-height: 1.625rem;
48
+ --text-xl: 1.25rem;
49
+ --text-xl--line-height: 1.75rem;
50
+ --text-2xl: 1.875rem;
51
+ --text-2xl--line-height: 2.375rem;
52
+
53
+ --font-weight-normal: 400;
54
+ --font-weight-medium: 500;
55
+ --font-weight-semibold: 600;
56
+ --font-weight-bold: 700;
57
+
58
+ --spacing-0: 0;
59
+ --spacing-1: 0.25rem;
60
+ --spacing-2: 0.5rem;
61
+ --spacing-3: 0.75rem;
62
+ --spacing-4: 1rem;
63
+ --spacing-5: 1.25rem;
64
+ --spacing-6: 1.5rem;
65
+ --spacing-8: 2rem;
66
+ --spacing-10: 2.5rem;
67
+ --spacing-12: 3rem;
68
+ --spacing-popover: var(--ui-popover-padding);
69
+ --spacing-combobox-listbox: var(--ui-combobox-listbox-max-height);
70
+ --spacing-menu-item: var(--ui-menu-item-height);
71
+ --spacing-menu-item-x: var(--ui-menu-item-padding-x);
72
+ --spacing-icon: var(--ui-icon-size);
73
+ --spacing-icon-xs: var(--ui-icon-size-xs);
74
+ --spacing-icon-sm: var(--ui-icon-size-sm);
75
+ --spacing-icon-lg: var(--ui-icon-size-lg);
76
+ --spacing-scrollbar: var(--ui-scrollbar-size);
77
+ --spacing-scrollbar-inset: var(--ui-scrollbar-inset);
78
+ --spacing-control: var(--ui-control-gap);
79
+
80
+ --radius-1: 1px;
81
+ --radius-2: 2px;
82
+ --radius-3: 4px;
83
+ --radius-4: 6px;
84
+ --radius-5: 8px;
85
+ --radius-6: 12px;
86
+ --radius-full: 9999px;
87
+ --radius-control: var(--ui-control-radius);
88
+ --radius-scrollbar-thumb: var(--ui-scrollbar-thumb-radius);
89
+
90
+ --spacing-control-xs: 1.25rem;
91
+ --spacing-control-sm: 1.5rem;
92
+ --spacing-control-md: 1.75rem;
93
+ --spacing-control-lg: 2rem;
94
+ --spacing-control-xlg: 2.25rem;
95
+
96
+ --shadow-border: var(--ui-shadow-border);
97
+ --shadow-border-hover: var(--ui-shadow-border-hover);
98
+ --shadow-1: 0 1px 2px rgb(0 0 0 / 0.04);
99
+ --shadow-2: 0 1px 2px rgb(0 0 0 / 0.05), 0 8px 24px rgb(0 0 0 / 0.08);
100
+ --shadow-3: 0 2px 4px rgb(0 0 0 / 0.05), 0 16px 48px rgb(0 0 0 / 0.14);
101
+ --shadow-popover: var(--ui-popover-shadow);
102
+ --shadow-panel: var(--ui-panel-shadow);
103
+ --shadow-inset: inset 0 1px 1px rgb(0 0 0 / 0.04);
104
+ --shadow-control: var(--ui-control-shadow);
105
+ --shadow-focus: 0 0 0 3px var(--color-focus-a4);
106
+ --shadow-danger-focus: var(--shadow-control), 0 0 0 3px var(--color-danger-a4);
107
+
108
+ --container-content: 72rem;
109
+ --container-reading: 42rem;
110
+ --z-index-popover: 50;
111
+ --z-index-dialog: 60;
112
+ --z-index-toast: 70;
113
+ }
114
+
115
+ @theme {
116
+ /* Base, neutral scale. */
117
+ --color-base-1: #fcfcfd;
118
+ --color-base-2: #f9f9fb;
119
+ --color-base-3: #f0f0f3;
120
+ --color-base-4: #e8e8ec;
121
+ --color-base-5: #e0e1e6;
122
+ --color-base-6: #d9d9e0;
123
+ --color-base-7: #cdced6;
124
+ --color-base-8: #b9bbc6;
125
+ --color-base-9: #8b8d98;
126
+ --color-base-10: #80838d;
127
+ --color-base-11: #60646c;
128
+ --color-base-12: #1c2024;
129
+
130
+ --color-base-a1: #00005503;
131
+ --color-base-a2: #00005506;
132
+ --color-base-a3: #0000330f;
133
+ --color-base-a4: #00002d17;
134
+ --color-base-a5: #0009321f;
135
+ --color-base-a6: #00002f26;
136
+ --color-base-a7: #00062e32;
137
+ --color-base-a8: #00083046;
138
+ --color-base-a9: #00051d74;
139
+ --color-base-a10: #00071b7f;
140
+ --color-base-a11: #0007149f;
141
+ --color-base-a12: #000509e3;
142
+
143
+ /* Accent defaults to blue. Projects can remap this to any Radix scale. */
144
+ --color-accent-1: #fbfdff;
145
+ --color-accent-2: #f4faff;
146
+ --color-accent-3: #e6f4fe;
147
+ --color-accent-4: #d5efff;
148
+ --color-accent-5: #c2e5ff;
149
+ --color-accent-6: #acd8fc;
150
+ --color-accent-7: #8ec8f6;
151
+ --color-accent-8: #5eb1ef;
152
+ --color-accent-9: #0090ff;
153
+ --color-accent-10: #0588f0;
154
+ --color-accent-11: #0d74ce;
155
+ --color-accent-12: #113264;
156
+
157
+ --color-accent-a1: #0080ff04;
158
+ --color-accent-a2: #008cff0b;
159
+ --color-accent-a3: #008ff519;
160
+ --color-accent-a4: #009eff2a;
161
+ --color-accent-a5: #0093ff3d;
162
+ --color-accent-a6: #0088f653;
163
+ --color-accent-a7: #0083eb71;
164
+ --color-accent-a8: #0084e6a1;
165
+ --color-accent-a9: #0090ff;
166
+ --color-accent-a10: #0086f0fa;
167
+ --color-accent-a11: #006dcbf2;
168
+ --color-accent-a12: #002359ee;
169
+
170
+ --color-danger-1: #fffcfc;
171
+ --color-danger-2: #fff7f7;
172
+ --color-danger-3: #feebec;
173
+ --color-danger-4: #ffdbdc;
174
+ --color-danger-5: #ffcdce;
175
+ --color-danger-6: #fdbdbe;
176
+ --color-danger-7: #f4a9aa;
177
+ --color-danger-8: #eb8e90;
178
+ --color-danger-9: #e5484d;
179
+ --color-danger-10: #dc3e42;
180
+ --color-danger-11: #ce2c31;
181
+ --color-danger-12: #641723;
182
+
183
+ --color-danger-a1: #ff000003;
184
+ --color-danger-a2: #ff000008;
185
+ --color-danger-a3: #f3000d14;
186
+ --color-danger-a4: #ff000824;
187
+ --color-danger-a5: #ff000632;
188
+ --color-danger-a6: #f8000442;
189
+ --color-danger-a7: #df000356;
190
+ --color-danger-a8: #d2000571;
191
+ --color-danger-a9: #db0007b7;
192
+ --color-danger-a10: #d10005c1;
193
+ --color-danger-a11: #c40006d3;
194
+ --color-danger-a12: #55000de8;
195
+
196
+ --color-success-1: #fbfefc;
197
+ --color-success-2: #f4fbf6;
198
+ --color-success-3: #e6f6eb;
199
+ --color-success-4: #d6f1df;
200
+ --color-success-5: #c4e8d1;
201
+ --color-success-6: #adddc0;
202
+ --color-success-7: #8eceaa;
203
+ --color-success-8: #5bb98b;
204
+ --color-success-9: #30a46c;
205
+ --color-success-10: #2b9a66;
206
+ --color-success-11: #218358;
207
+ --color-success-12: #193b2d;
208
+
209
+ --color-success-a1: #00c04004;
210
+ --color-success-a2: #00a32f0b;
211
+ --color-success-a3: #00a43319;
212
+ --color-success-a4: #00a83829;
213
+ --color-success-a5: #019c393b;
214
+ --color-success-a6: #00963c52;
215
+ --color-success-a7: #00914071;
216
+ --color-success-a8: #00924ba4;
217
+ --color-success-a9: #008f4acf;
218
+ --color-success-a10: #008647d4;
219
+ --color-success-a11: #00713fde;
220
+ --color-success-a12: #002616e6;
221
+
222
+ --color-warning-1: #fefdfb;
223
+ --color-warning-2: #fefbe9;
224
+ --color-warning-3: #fff7c2;
225
+ --color-warning-4: #ffee9c;
226
+ --color-warning-5: #fbe577;
227
+ --color-warning-6: #f3d673;
228
+ --color-warning-7: #e9c162;
229
+ --color-warning-8: #e2a336;
230
+ --color-warning-9: #ffc53d;
231
+ --color-warning-10: #ffba18;
232
+ --color-warning-11: #ab6400;
233
+ --color-warning-12: #4f3422;
234
+
235
+ --color-warning-a1: #c0800004;
236
+ --color-warning-a2: #f4d10016;
237
+ --color-warning-a3: #ffde003d;
238
+ --color-warning-a4: #ffd40063;
239
+ --color-warning-a5: #f8cf0088;
240
+ --color-warning-a6: #eab5008c;
241
+ --color-warning-a7: #dc9b009d;
242
+ --color-warning-a8: #da8a00c9;
243
+ --color-warning-a9: #ffb300c2;
244
+ --color-warning-a10: #ffb300e7;
245
+ --color-warning-a11: #ab6400;
246
+ --color-warning-a12: #341500dd;
247
+ }
248
+
249
+ @theme {
250
+ /* Semantic aliases that produce Tailwind utilities. */
251
+ --color-app: var(--color-base-1);
252
+ --color-app-subtle: var(--color-base-2);
253
+ --color-surface: #ffffff;
254
+ --color-surface-muted: var(--color-base-2);
255
+ --color-surface-raised: #ffffff;
256
+ --color-foreground: var(--color-base-12);
257
+ --color-foreground-muted: var(--color-base-11);
258
+ --color-foreground-subtle: var(--color-base-10);
259
+ --color-border: var(--color-base-a5);
260
+ --color-border-interactive: var(--color-base-a6);
261
+ --color-border-strong: var(--color-base-a7);
262
+ --color-control: var(--ui-control-bg);
263
+ --color-control-hover: var(--ui-control-bg-hover);
264
+ --color-control-active: var(--ui-control-bg-active);
265
+ --color-control-fg: var(--ui-control-fg);
266
+ --color-control-placeholder: var(--ui-control-placeholder);
267
+ --color-control-border: var(--ui-control-border);
268
+ --color-control-border-focus: var(--ui-control-border-focus);
269
+ --color-control-border-invalid: var(--ui-control-border-invalid);
270
+ --color-control-border-invalid-focus: var(--ui-control-border-invalid-focus);
271
+ --color-focus: var(--color-accent-8);
272
+ --color-focus-a4: color-mix(in srgb, var(--color-focus) var(--ui-focus-strength), transparent);
273
+ --color-overlay: rgb(0 0 0 / 0.35);
274
+ --color-accent-solid: var(--color-accent-11);
275
+ --color-accent-solid-hover: var(--color-accent-12);
276
+ --color-accent-contrast: white;
277
+ --color-accent-surface: color-mix(in srgb, var(--color-accent-9) var(--ui-accent-strength), var(--color-surface));
278
+ --color-accent-surface-hover: color-mix(in srgb, var(--color-accent-9) var(--ui-accent-hover-strength), var(--color-surface));
279
+ --color-accent-border: color-mix(in srgb, var(--color-accent-9) var(--ui-accent-border-strength), var(--color-border));
280
+ --color-accent-text: var(--color-accent-11);
281
+ --color-danger-solid: var(--color-danger-11);
282
+ --color-danger-solid-hover: var(--color-danger-12);
283
+ --color-danger-contrast: white;
284
+ --color-danger-surface: var(--color-danger-3);
285
+ --color-danger-surface-hover: var(--color-danger-4);
286
+ --color-danger-border: var(--color-danger-7);
287
+ --color-danger-text: var(--color-danger-11);
288
+ --color-success-solid: var(--color-success-9);
289
+ --color-success-solid-hover: var(--color-success-10);
290
+ --color-success-contrast: white;
291
+ --color-success-surface: var(--color-success-3);
292
+ --color-success-surface-hover: var(--color-success-4);
293
+ --color-success-border: var(--color-success-7);
294
+ --color-success-text: var(--color-success-11);
295
+ --color-warning-solid: var(--color-warning-9);
296
+ --color-warning-solid-hover: var(--color-warning-10);
297
+ --color-warning-contrast: var(--color-warning-12);
298
+ --color-warning-surface: var(--color-warning-3);
299
+ --color-warning-surface-hover: var(--color-warning-4);
300
+ --color-warning-border: var(--color-warning-7);
301
+ --color-warning-text: var(--color-warning-11);
302
+ --color-popover: var(--ui-popover-bg);
303
+ --color-popover-fg: var(--ui-popover-fg);
304
+ --color-popover-border: var(--ui-popover-border);
305
+ --color-toast: var(--ui-toast-bg);
306
+ --color-menu-item-hover: var(--ui-menu-item-bg-hover);
307
+ --color-menu-item-active: var(--ui-menu-item-bg-active);
308
+ --color-menu-item-fg: var(--ui-menu-item-fg);
309
+ --color-menu-item-muted: var(--ui-menu-item-fg-muted);
310
+ --color-menu-item-danger-hover: var(--ui-menu-item-danger-bg-hover);
311
+ --color-menu-item-danger-fg: var(--ui-menu-item-danger-fg);
312
+ --color-menu-separator: var(--ui-menu-separator);
313
+ --color-menu-heading-fg: var(--ui-menu-heading-fg);
314
+ --color-interactive-hover: var(--ui-interactive-bg-hover);
315
+ --color-interactive-active: var(--ui-interactive-bg-active);
316
+ --color-interactive-selected: var(--ui-interactive-bg-selected);
317
+ --color-interactive-selected-hover: var(--ui-interactive-bg-selected-hover);
318
+ --color-icon: var(--ui-icon-fg);
319
+ --color-scrollbar-thumb: var(--ui-scrollbar-thumb-bg);
320
+ --color-scrollbar-thumb-hover: var(--ui-scrollbar-thumb-bg-hover);
321
+ --shadow-interactive-hover: var(--ui-interactive-shadow-hover);
322
+ --shadow-interactive-selected: var(--ui-interactive-shadow-selected);
323
+ --shadow-interactive-focus: var(--shadow-focus), var(--shadow-border-hover);
324
+ }
325
+
326
+ :root {
327
+ color-scheme: light;
328
+
329
+ --ui-bg: var(--color-app);
330
+ --ui-bg-subtle: var(--color-app-subtle);
331
+ --ui-fg: var(--color-foreground);
332
+ --ui-fg-muted: var(--color-foreground-muted);
333
+ --ui-fg-subtle: var(--color-foreground-subtle);
334
+ --ui-border: var(--color-border);
335
+ --ui-border-interactive: var(--color-border-interactive);
336
+ --ui-interactive-bg-hover: var(--color-base-a2);
337
+ --ui-interactive-bg-active: var(--color-base-a3);
338
+ --ui-interactive-bg-selected: var(--color-accent-surface);
339
+ --ui-interactive-bg-selected-hover: var(--color-accent-surface-hover);
340
+ --ui-interactive-shadow-hover: var(--shadow-border-hover);
341
+ --ui-interactive-shadow-selected: 0 0 0 1px var(--color-accent-border);
342
+ --ui-focus: var(--color-focus);
343
+ --ui-focus-ring: var(--shadow-focus);
344
+ --ui-overlay: var(--color-overlay);
345
+ --ui-shadow-border:
346
+ 0px 0px 0px 1px rgb(0 0 0 / 0.06),
347
+ 0px 1px 2px -1px rgb(0 0 0 / 0.06),
348
+ 0px 2px 4px 0px rgb(0 0 0 / 0.04);
349
+ --ui-shadow-border-hover:
350
+ 0px 0px 0px 1px rgb(0 0 0 / 0.08),
351
+ 0px 1px 2px -1px rgb(0 0 0 / 0.08),
352
+ 0px 2px 4px 0px rgb(0 0 0 / 0.06);
353
+ --ui-accent-strength: 12%;
354
+ --ui-accent-hover-strength: 16%;
355
+ --ui-accent-border-strength: 38%;
356
+ --ui-focus-strength: 24%;
357
+
358
+ --ui-font-weight-normal: var(--font-weight-normal);
359
+ --ui-font-weight-medium: var(--font-weight-medium);
360
+ --ui-font-weight-semibold: var(--font-weight-semibold);
361
+ --ui-letter-spacing: 0;
362
+
363
+ --ui-border-width: 1px;
364
+ --ui-border-width-strong: 2px;
365
+
366
+ --ui-control-height-xs: var(--spacing-control-xs);
367
+ --ui-control-height-sm: var(--spacing-control-sm);
368
+ --ui-control-height-md: var(--spacing-control-md);
369
+ --ui-control-height-lg: var(--spacing-control-lg);
370
+ --ui-control-height-xlg: var(--spacing-control-xlg);
371
+ --ui-control-padding-x: 0.75rem;
372
+ --ui-control-gap: 0.5rem;
373
+ --ui-control-radius: var(--radius-3);
374
+ --ui-control-bg: var(--color-surface);
375
+ --ui-control-bg-hover: var(--color-base-a2);
376
+ --ui-control-bg-active: var(--color-base-a3);
377
+ --ui-control-fg: var(--color-foreground);
378
+ --ui-control-placeholder: var(--color-foreground-subtle);
379
+ --ui-control-border: var(--color-border);
380
+ --ui-control-border-hover: color-mix(in srgb, var(--ui-control-border) 88%, var(--ui-fg) 12%);
381
+ --ui-control-border-focus: var(--color-accent-9);
382
+ --ui-control-border-invalid: var(--color-danger-border);
383
+ --ui-control-border-invalid-hover: color-mix(in srgb, var(--ui-control-border-invalid) 84%, var(--color-danger-text) 16%);
384
+ --ui-control-border-invalid-focus: var(--color-danger-9);
385
+ --ui-control-shadow: var(--shadow-inset);
386
+ --ui-panel-shadow:
387
+ var(--ui-shadow-border),
388
+ 0px 2px 4px rgb(0 0 0 / 0.05),
389
+ 0px 16px 48px rgb(0 0 0 / 0.14);
390
+
391
+ --ui-popover-bg: var(--color-surface-raised);
392
+ --ui-popover-fg: var(--color-foreground);
393
+ --ui-popover-border: var(--color-border);
394
+ --ui-popover-radius: var(--radius-4);
395
+ --ui-popover-shadow:
396
+ var(--ui-shadow-border),
397
+ 0px 1px 2px rgb(0 0 0 / 0.05),
398
+ 0px 8px 24px rgb(0 0 0 / 0.08);
399
+ --ui-popover-padding: 0.375rem;
400
+ --ui-popover-z: var(--z-index-popover);
401
+ --ui-toast-bg: var(--color-surface-raised);
402
+ --ui-toast-stack-peek: 8px;
403
+
404
+ --ui-combobox-listbox-max-height: 16rem;
405
+
406
+ --ui-menu-item-height: var(--spacing-control-lg);
407
+ --ui-menu-item-padding-x: 0.625rem;
408
+ --ui-menu-item-radius: var(--radius-3);
409
+ --ui-menu-item-bg-hover: var(--color-base-a2);
410
+ --ui-menu-item-bg-active: var(--color-base-a3);
411
+ --ui-menu-item-fg: var(--color-foreground);
412
+ --ui-menu-item-fg-muted: var(--color-foreground-muted);
413
+ --ui-menu-item-danger-fg: var(--color-danger-text);
414
+ --ui-menu-item-danger-bg-hover: var(--color-danger-a3);
415
+ --ui-menu-separator: var(--color-base-a5);
416
+ --ui-menu-heading-fg: var(--color-foreground-muted);
417
+ --ui-icon-size-xs: 0.75rem;
418
+ --ui-icon-size-sm: 0.875rem;
419
+ --ui-icon-size: var(--ui-icon-size-sm);
420
+ --ui-icon-size-lg: 1rem;
421
+ --ui-icon-fg: var(--color-foreground-subtle);
422
+ --ui-scrollbar-size: 0.375rem;
423
+ --ui-scrollbar-inset: 0.125rem;
424
+ --ui-scrollbar-thumb-bg: var(--color-base-a5);
425
+ --ui-scrollbar-thumb-bg-hover: var(--color-base-a7);
426
+ --ui-scrollbar-thumb-radius: var(--radius-full);
427
+
428
+ }
429
+
430
+ @utility max-h-xs {
431
+ max-height: var(--container-xs);
432
+ }
433
+
434
+ @utility max-h-sm {
435
+ max-height: var(--container-sm);
436
+ }
437
+
438
+ @utility max-h-md {
439
+ max-height: var(--container-md);
440
+ }
441
+
442
+ @utility max-h-lg {
443
+ max-height: var(--container-lg);
444
+ }
445
+
446
+ @utility max-h-xl {
447
+ max-height: var(--container-xl);
448
+ }
449
+
450
+ @utility max-h-prose {
451
+ max-height: 65ch;
452
+ }
453
+
454
+ @layer components {
455
+ [data-ui-control]:where([data-variant="outline"], [data-variant="enhanced"]):is(:hover, :active):not(:focus-within):not([data-state="open"]):not([data-disabled]):not([data-invalid]) {
456
+ border-color: var(--ui-control-border-hover);
457
+ }
458
+
459
+ [data-ui-control]:where([data-variant="outline"], [data-variant="enhanced"]):focus-within:not([data-invalid]),
460
+ [data-ui-control]:where([data-variant="outline"], [data-variant="enhanced"])[data-state="open"]:not([data-invalid]) {
461
+ border-color: var(--ui-control-border-focus);
462
+ }
463
+
464
+ [data-ui-control]:where([data-variant="outline"], [data-variant="enhanced"])[data-invalid]:is(:hover, :active):not(:focus-within):not([data-state="open"]):not([data-disabled]) {
465
+ border-color: var(--ui-control-border-invalid-hover);
466
+ }
467
+
468
+ [data-ui-control]:where([data-variant="outline"], [data-variant="enhanced"])[data-invalid]:focus-within:not([data-disabled]),
469
+ [data-ui-control]:where([data-variant="outline"], [data-variant="enhanced"])[data-invalid][data-state="open"]:not([data-disabled]) {
470
+ border-color: var(--ui-control-border-invalid-focus);
471
+ box-shadow: var(--shadow-control), 0 0 0 3px var(--color-danger-a4);
472
+ }
473
+
474
+ [data-ui-control]:where([data-variant="outline"], [data-variant="enhanced"]):has(:focus-visible):not([data-invalid]) {
475
+ box-shadow: var(--shadow-control), var(--shadow-focus);
476
+ }
477
+ }
478
+
479
+ .dark {
480
+ color-scheme: dark;
481
+
482
+ --color-base-1: #111213;
483
+ --color-base-2: #131415;
484
+ --color-base-3: #151617;
485
+ --color-base-4: #191a1c;
486
+ --color-base-5: #1f2023;
487
+ --color-base-6: #292b2f;
488
+ --color-base-7: #373a40;
489
+ --color-base-8: #515861;
490
+ --color-base-9: #686e76;
491
+ --color-base-10: #7b8088;
492
+ --color-base-11: #a7abb1;
493
+ --color-base-12: #edeef0;
494
+ --color-base-a1: #00000000;
495
+ --color-base-a2: #ffffff09;
496
+ --color-base-a3: #ffffff12;
497
+ --color-base-a4: #ffffff1b;
498
+ --color-base-a5: #ffffff22;
499
+ --color-base-a6: #ffffff2c;
500
+ --color-base-a7: #ffffff3b;
501
+ --color-base-a8: #ffffff55;
502
+ --color-base-a9: #ffffff64;
503
+ --color-base-a10: #ffffff72;
504
+ --color-base-a11: #ffffffaf;
505
+ --color-base-a12: #ffffffed;
506
+
507
+ --color-app: var(--color-base-2);
508
+ --color-app-subtle: var(--color-base-1);
509
+ --color-surface: var(--color-base-2);
510
+ --color-surface-muted: var(--color-base-1);
511
+ --color-surface-raised: var(--color-base-3);
512
+ --ui-toast-bg: var(--color-base-4);
513
+ --color-foreground: var(--color-base-12);
514
+ --color-foreground-muted: var(--color-base-11);
515
+ --color-foreground-subtle: var(--color-base-10);
516
+ --color-border: var(--color-base-a3);
517
+ --color-border-interactive: var(--color-base-a4);
518
+ --color-border-strong: var(--color-base-a5);
519
+ --color-overlay: rgb(0 0 0 / 0.55);
520
+ --ui-accent-strength: 16%;
521
+ --ui-accent-hover-strength: 20%;
522
+ --ui-accent-border-strength: 46%;
523
+ --ui-focus-strength: 32%;
524
+ --color-accent-contrast: white;
525
+ --color-accent-text: var(--color-accent-8);
526
+ --color-danger-surface: var(--color-danger-a3);
527
+ --color-danger-surface-hover: var(--color-danger-a4);
528
+ --color-danger-border: var(--color-danger-a7);
529
+ --color-danger-text: var(--color-danger-8);
530
+ --color-success-text: var(--color-success-8);
531
+ --color-warning-text: var(--color-warning-8);
532
+ --ui-shadow-border: 0 0 0 1px rgb(255 255 255 / 0.07);
533
+ --ui-shadow-border-hover: 0 0 0 1px rgb(255 255 255 / 0.11);
534
+ --ui-popover-shadow: var(--ui-shadow-border);
535
+ --ui-panel-shadow: var(--ui-shadow-border);
536
+ }