@getdom/studio 0.1.0 → 0.2.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 (101) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +53 -1
  3. package/SKILL.md +21 -1
  4. package/package.json +6 -2
  5. package/public/llms.txt +13 -2
  6. package/src/pages/_layout/componentCatalog.generated.js +1185 -44
  7. package/src/pages/_layout/componentLoaders.js +41 -0
  8. package/src/pages/_layout/componentManager.js +38 -27
  9. package/src/pages/_layout/componentRuntimeRecords.js +3 -1
  10. package/src/pages/charts/_shared/ChartContainer.vue +67 -0
  11. package/src/pages/charts/_shared/ChartLegend.vue +22 -0
  12. package/src/pages/charts/_shared/ChartTooltip.vue +18 -0
  13. package/src/pages/charts/_shared/DonutRenderer.vue +33 -0
  14. package/src/pages/charts/_shared/XYChart.vue +140 -0
  15. package/src/pages/charts/_shared/XYRenderer.vue +90 -0
  16. package/src/pages/charts/_shared/chartProps.js +23 -0
  17. package/src/pages/charts/_shared/chartUtils.js +95 -0
  18. package/src/pages/charts/area-chart/DomAreaChart.vue +27 -0
  19. package/src/pages/charts/bar-chart/DomBarChart.vue +29 -0
  20. package/src/pages/charts/date-range-picker/DomDateRangePicker.vue +104 -0
  21. package/src/pages/charts/date-range-picker/dateRange.js +69 -0
  22. package/src/pages/charts/donut-chart/DomDonutChart.vue +117 -0
  23. package/src/pages/charts/line-chart/DomLineChart.vue +26 -0
  24. package/src/pages/charts/metric-card/DomMetricCard.vue +49 -0
  25. package/src/pages/charts/sparkline/DomSparkline.vue +30 -0
  26. package/src/pages/components/_shared/media/MediaDeviceSelect.vue +28 -0
  27. package/src/pages/components/_shared/media/useMediaInput.js +200 -0
  28. package/src/pages/components/audio-controls/DomAudioControls.vue +91 -0
  29. package/src/pages/components/audio-input/DomAudioInput.vue +58 -0
  30. package/src/pages/components/button/DomButton.vue +10 -4
  31. package/src/pages/components/button/buttonStyles.js +5 -0
  32. package/src/pages/components/camera-input/DomCameraInput.vue +75 -0
  33. package/src/pages/components/command-palette/DomCommandPalette.vue +12 -2
  34. package/src/pages/components/dialog/DomDialog.vue +338 -36
  35. package/src/pages/components/icon-button/DomIconButton.vue +8 -2
  36. package/src/pages/components/menu-stack/DomMenuStack.vue +111 -0
  37. package/src/pages/components/menu-stack/menuTree.js +35 -0
  38. package/src/pages/components/popover/DomPopover.vue +1 -53
  39. package/src/pages/components/popover/popover.css +50 -0
  40. package/src/pages/components/video-feed/DomVideoFeed.vue +551 -0
  41. package/src/pages/data/agent-chat/DomAgentChatShell.vue +1 -0
  42. package/src/pages/data/agent-chat/DomAgentConversation.vue +1 -0
  43. package/src/pages/data/agent-chat/DomAgentConversationList.vue +1 -0
  44. package/src/pages/data/gantt/DomGantt.vue +788 -0
  45. package/src/pages/data/gantt/ganttTime.js +223 -0
  46. package/src/pages/data/month-calendar/DomMonthCalendar.vue +84 -9
  47. package/src/pages/data/notification-inbox/DomNotificationInbox.vue +505 -0
  48. package/src/pages/data/notification-inbox/notificationPresentation.js +34 -0
  49. package/src/pages/designer/_shared/ControlIconButton.vue +62 -0
  50. package/src/pages/designer/_shared/StyleControlSection.vue +59 -0
  51. package/src/pages/designer/_shared/cssEditorContext.js +19 -0
  52. package/src/pages/designer/backdrop-editor/BackdropControl.vue +57 -0
  53. package/src/pages/designer/backdrop-editor/DomBackdropEditor.vue +33 -0
  54. package/src/pages/designer/backdrop-editor/backdropModel.js +39 -0
  55. package/src/pages/designer/background-editor/BackgroundLayers.vue +210 -0
  56. package/src/pages/designer/background-editor/DomBackgroundEditor.vue +33 -0
  57. package/src/pages/designer/background-editor/backgroundModel.js +102 -0
  58. package/src/pages/designer/border-editor/BorderControl.vue +72 -0
  59. package/src/pages/designer/border-editor/DomBorderEditor.vue +34 -0
  60. package/src/pages/designer/border-editor/borderModel.js +21 -0
  61. package/src/pages/designer/color-swatch/DomColorSwatch.vue +95 -0
  62. package/src/pages/designer/frame/DomDesignerFrame.vue +16 -0
  63. package/src/pages/designer/frame/DomFrameLayoutEditor.vue +41 -0
  64. package/src/pages/designer/frame/frameLayout.js +93 -0
  65. package/src/pages/designer/layers/DomDesignerLayers.vue +11 -0
  66. package/src/pages/designer/shadow-editor/DomShadowEditor.vue +32 -0
  67. package/src/pages/designer/shadow-editor/ShadowLayers.vue +185 -0
  68. package/src/pages/designer/shadow-editor/shadowModel.js +73 -0
  69. package/src/pages/designer/stage/DesignerBounds.vue +31 -0
  70. package/src/pages/designer/stage/DomDesignerStage.vue +237 -0
  71. package/src/pages/designer/stage/SpacingGuides.vue +33 -0
  72. package/src/pages/designer/stage/resizeGeometry.js +15 -0
  73. package/src/pages/designer/stage/snapGeometry.js +69 -0
  74. package/src/pages/designer/stage/snapPipeline.js +17 -0
  75. package/src/pages/designer/stage/spacingGeometry.js +129 -0
  76. package/src/pages/forms/native-select/DomNativeSelect.vue +8 -3
  77. package/src/pages/forms/number-input/DomNumberInput.vue +39 -3
  78. package/src/pages/forms/range-input/DomRangeInput.vue +75 -23
  79. package/src/pages/forms/textarea-composer/DomTextareaComposer.vue +91 -9
  80. package/src/pages/forms/toggle/DomToggle.vue +1 -1
  81. package/src/pages/lib/headless/base.js +10 -5
  82. package/src/pages/lib/headless/dialog.js +25 -6
  83. package/src/pages/lib/headless/drawer.js +49 -21
  84. package/src/pages/lib/vue/index.d.ts +1161 -14
  85. package/src/pages/lib/vue/index.js +43 -0
  86. package/src/pages/mobile/_shared/interactionMath.js +46 -0
  87. package/src/pages/mobile/_shared/useKeyboardViewport.js +91 -0
  88. package/src/pages/mobile/action-sheet/DomActionSheet.vue +102 -65
  89. package/src/pages/mobile/bottom-nav/DomAppBottomNav.vue +4 -2
  90. package/src/pages/mobile/bottom-sheet/DomBottomSheet.vue +221 -0
  91. package/src/pages/mobile/list-item/DomAppListItem.vue +6 -6
  92. package/src/pages/mobile/profile/DomAppProfile.vue +42 -0
  93. package/src/pages/mobile/safe-area/DomSafeArea.vue +6 -6
  94. package/src/pages/mobile/shell/DomAppShell.vue +60 -9
  95. package/src/pages/mobile/stack/DomAppStack.vue +214 -55
  96. package/src/pages/mobile/swipe-actions/DomSwipeActions.vue +346 -0
  97. package/src/pages/mobile/top-bar/DomAppTopBar.vue +3 -3
  98. package/src/pages/visual/audio-visualizer/DomAudioVisualizer.vue +143 -0
  99. package/src/style.css +2 -445
  100. package/src/tailwind.css +351 -0
  101. package/src/theme.css +99 -0
@@ -0,0 +1,351 @@
1
+ @source "./pages/**/*.{vue,js}";
2
+ @source inline("transition duration-1000 ease-in ease-out opacity-0 opacity-100 scale-50 scale-100");
3
+ @custom-variant dark (&:where([data-theme='dark'], [data-theme='dark'] *));
4
+
5
+ /*
6
+ * The month calendar always responds to its own container. Tailwind expands
7
+ * theme(...) while compiling the combined app stylesheet, so consumer @theme
8
+ * overrides remain the single source of truth for its sensible defaults.
9
+ */
10
+ .dom-month-calendar__grid {
11
+ --dom-month-calendar-day-min-height: 7.5rem;
12
+ --dom-month-calendar-day-headers-display: none;
13
+ --dom-month-calendar-row-rail-align: center;
14
+ --dom-month-calendar-row-rail-direction: row;
15
+ --dom-month-calendar-row-rail-justify: space-between;
16
+ --dom-month-calendar-row-rail-min-height: 2.5rem;
17
+ --dom-month-calendar-week-columns: minmax(0, 1fr);
18
+ }
19
+
20
+ .dom-month-calendar__continuous-mobile-header {
21
+ display: flex;
22
+ }
23
+
24
+ @container (min-width: theme(--breakpoint-lg)) {
25
+ .dom-month-calendar__continuous-mobile-header {
26
+ display: none;
27
+ }
28
+
29
+ .dom-month-calendar__grid {
30
+ --dom-month-calendar-day-min-height: 11rem;
31
+ --dom-month-calendar-day-headers-display: grid;
32
+ --dom-month-calendar-row-rail-align: flex-start;
33
+ --dom-month-calendar-row-rail-direction: column;
34
+ --dom-month-calendar-row-rail-justify: flex-start;
35
+ --dom-month-calendar-row-rail-min-height: 11rem;
36
+ --dom-month-calendar-week-columns: var(--dom-month-calendar-wide-week-columns);
37
+ --dom-month-calendar-wide-border-left-width: 1px;
38
+ --dom-month-calendar-wide-border-top-width: 0;
39
+ --dom-month-calendar-wide-boundary-gradient: linear-gradient(var(--dom-month-calendar-boundary-color), var(--dom-month-calendar-boundary-color));
40
+ --dom-month-calendar-wide-boundary-left-size: 2px 100%;
41
+ --dom-month-calendar-wide-boundary-top-size: 100% 2px;
42
+ }
43
+ }
44
+
45
+ @theme inline {
46
+ --color-canvas: var(--canvas);
47
+ --color-canvas-fg: var(--canvas-fg);
48
+ --color-primary: var(--primary);
49
+ --color-primary-fg: var(--primary-fg);
50
+ --color-secondary: var(--secondary);
51
+ --color-secondary-fg: var(--secondary-fg);
52
+ --color-muted: var(--muted);
53
+ --color-muted-fg: var(--muted-fg);
54
+ --color-accent: var(--accent);
55
+ --color-accent-fg: var(--accent-fg);
56
+ --color-destructive: var(--destructive);
57
+ --color-destructive-fg: var(--destructive-fg);
58
+ --color-success: var(--success);
59
+ --color-success-fg: var(--success-fg);
60
+ --color-warning: var(--warning);
61
+ --color-warning-fg: var(--warning-fg);
62
+ --color-border: var(--border);
63
+ --color-input: var(--input);
64
+ --color-ring: var(--ring);
65
+ --radius-sm: calc(var(--radius) * 0.6);
66
+ --radius-md: calc(var(--radius) * 0.8);
67
+ --radius-lg: var(--radius);
68
+ --radius-xl: calc(var(--radius) * 1.4);
69
+ --radius-2xl: calc(var(--radius) * 1.8);
70
+ --radius-3xl: calc(var(--radius) * 2.2);
71
+ --radius-4xl: calc(var(--radius) * 2.6);
72
+ }
73
+
74
+ @layer utilities {
75
+ .skin-card {
76
+ background-color: var(--skin-card-bg, var(--canvas));
77
+ background-image: var(--skin-card-bg-image, none);
78
+ border-color: var(--skin-card-border, var(--border));
79
+ border-style: var(--skin-card-border-style, solid);
80
+ border-width: var(--skin-card-border-width, 1px);
81
+ box-shadow: var(--skin-card-shadow, var(--shadow-xs));
82
+ color: var(--skin-card-fg, var(--canvas-fg));
83
+ backdrop-filter: var(--skin-card-backdrop, none);
84
+ -webkit-backdrop-filter: var(--skin-card-backdrop, none);
85
+ }
86
+
87
+ .skin-popover {
88
+ background-color: var(--skin-popover-bg, var(--canvas));
89
+ background-image: var(--skin-popover-bg-image, none);
90
+ border-color: var(--skin-popover-border, var(--border));
91
+ border-style: var(--skin-popover-border-style, solid);
92
+ border-width: var(--skin-popover-border-width, 1px);
93
+ box-shadow: var(--skin-popover-shadow, var(--shadow-lg));
94
+ color: var(--skin-popover-fg, var(--canvas-fg));
95
+ backdrop-filter: var(--skin-popover-backdrop, none);
96
+ -webkit-backdrop-filter: var(--skin-popover-backdrop, none);
97
+ }
98
+
99
+ .skin-overlay {
100
+ background-color: var(--skin-overlay-bg, var(--canvas));
101
+ background-image: var(--skin-overlay-bg-image, none);
102
+ border-color: var(--skin-overlay-border, var(--border));
103
+ border-style: var(--skin-overlay-border-style, solid);
104
+ border-width: var(--skin-overlay-border-width, 1px);
105
+ box-shadow: var(--skin-overlay-shadow, var(--shadow-2xl));
106
+ color: var(--skin-overlay-fg, var(--canvas-fg));
107
+ backdrop-filter: var(--skin-overlay-backdrop, blur(20px) saturate(1.12));
108
+ -webkit-backdrop-filter: var(--skin-overlay-backdrop, blur(20px) saturate(1.12));
109
+ }
110
+
111
+ .skin-control {
112
+ background-color: var(--skin-control-bg, var(--secondary));
113
+ background-image: var(--skin-control-bg-image, none);
114
+ border-color: var(--skin-control-border, var(--border));
115
+ border-style: var(--skin-control-border-style, solid);
116
+ border-width: var(--skin-control-border-width, 1px);
117
+ box-shadow: var(--skin-control-shadow, var(--shadow-xs));
118
+ color: var(--skin-control-fg, var(--secondary-fg));
119
+ backdrop-filter: var(--skin-control-backdrop, none);
120
+ -webkit-backdrop-filter: var(--skin-control-backdrop, none);
121
+ }
122
+
123
+ .skin-action {
124
+ background-color: var(--skin-action-bg, var(--primary));
125
+ background-image: var(--skin-action-bg-image, linear-gradient(to bottom, color-mix(in oklch, white 10%, transparent), transparent));
126
+ border-color: var(--skin-action-border, color-mix(in oklch, var(--primary) 80%, var(--border)));
127
+ border-style: var(--skin-action-border-style, solid);
128
+ border-width: var(--skin-action-border-width, 1px);
129
+ box-shadow: var(--skin-action-shadow, var(--shadow-sm));
130
+ color: var(--skin-action-fg, var(--primary-fg));
131
+ backdrop-filter: var(--skin-action-backdrop, none);
132
+ -webkit-backdrop-filter: var(--skin-action-backdrop, none);
133
+ }
134
+ }
135
+
136
+ /* DOM Studio custom-elements: hide pre-upgrade light-DOM children so SSR'd
137
+ * dialog / popover content doesn't render in flow before the JS module
138
+ * loads and the shadow DOM takes over. Trigger slots stay visible. */
139
+ dom-dialog:not(:defined) > *:not([slot="trigger"]),
140
+ dom-popover:not(:defined) > *:not([slot="trigger"]) {
141
+ display: none;
142
+ }
143
+
144
+ /* Shiki code blocks. Shiki emits dual-theme styles in one render — the inline
145
+ * styles carry the light colours and the dark colours as CSS variables.
146
+ * Override those vars when [data-theme="dark"] is on the root. */
147
+ .dom-shiki {
148
+ min-width: 0;
149
+ max-width: 100%;
150
+ overflow-x: auto;
151
+ }
152
+ .dom-shiki .shiki {
153
+ box-sizing: border-box;
154
+ margin: 0;
155
+ min-width: 0;
156
+ max-width: 100%;
157
+ overflow-x: auto;
158
+ padding: 1rem;
159
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
160
+ font-size: 12.5px;
161
+ line-height: 1.65;
162
+ }
163
+ .dom-shiki .shiki,
164
+ .dom-shiki .shiki code {
165
+ background-color: inherit;
166
+ }
167
+ [data-theme="dark"] .dom-shiki .shiki:not([data-theme="light"] *),
168
+ [data-theme="dark"] .dom-shiki .shiki span:not([data-theme="light"] *),
169
+ .dom-code[data-theme="dark"] > .dom-shiki .shiki,
170
+ .dom-code[data-theme="dark"] > .dom-shiki .shiki span {
171
+ color: var(--shiki-dark) !important;
172
+ background-color: var(--shiki-dark-bg) !important;
173
+ }
174
+ [data-theme="dark"] .dom-shiki .shiki span:not([data-theme="light"] *),
175
+ .dom-code[data-theme="dark"] > .dom-shiki .shiki span {
176
+ font-style: var(--shiki-dark-font-style) !important;
177
+ font-weight: var(--shiki-dark-font-weight) !important;
178
+ text-decoration: var(--shiki-dark-text-decoration) !important;
179
+ }
180
+ [data-theme="dark"] .dom-code-token:not([data-theme="light"] *) {
181
+ background-color: var(--shiki-dark-bg) !important;
182
+ color: var(--shiki-dark) !important;
183
+ font-style: var(--shiki-dark-font-style) !important;
184
+ font-weight: var(--shiki-dark-font-weight) !important;
185
+ text-decoration: var(--shiki-dark-text-decoration) !important;
186
+ }
187
+
188
+ @layer components {
189
+ .skin-input {
190
+ background-color: var(--skin-input-bg, var(--canvas));
191
+ background-image: var(--skin-input-bg-image, none);
192
+ border-color: var(--skin-input-border, var(--input));
193
+ border-style: var(--skin-input-border-style, solid);
194
+ border-width: var(--skin-input-border-width, 1px);
195
+ box-shadow: var(--skin-input-shadow, inset 0 1px 2px rgb(15 23 42 / 0.1));
196
+ color: var(--skin-input-fg, var(--canvas-fg));
197
+ backdrop-filter: var(--skin-input-backdrop, none);
198
+ -webkit-backdrop-filter: var(--skin-input-backdrop, none);
199
+ @apply w-full rounded-lg px-3 py-2 text-sm outline-none transition placeholder:text-muted-fg focus:border-ring focus:ring-2 focus:ring-ring/30 disabled:opacity-50;
200
+ }
201
+
202
+ dom-dropdown[open] > [slot="trigger"].skin-input,
203
+ dom-dropdown[open] > [data-trigger].skin-input {
204
+ @apply border-ring ring-2 ring-ring/30;
205
+ }
206
+
207
+ .dom-floating-transition {
208
+ --dom-floating-enter-x: 0px;
209
+ --dom-floating-enter-y: -10px;
210
+ --dom-floating-origin: top center;
211
+ --dom-floating-scale: 0.975;
212
+ --dom-floating-enter-opacity-duration: 190ms;
213
+ --dom-floating-enter-transform-duration: 260ms;
214
+ --dom-floating-leave-opacity-duration: 190ms;
215
+ --dom-floating-leave-transform-duration: 260ms;
216
+ --dom-floating-enter-easing: cubic-bezier(0.16, 1, 0.3, 1);
217
+ --dom-floating-leave-easing: cubic-bezier(0.25, 0.1, 0.25, 1);
218
+ --dom-popover-arrow-x: 50%;
219
+ --dom-popover-arrow-y: auto;
220
+ opacity: 0;
221
+ transform: translate3d(var(--dom-floating-enter-x), var(--dom-floating-enter-y), 0) scale(var(--dom-floating-scale));
222
+ transform-origin: var(--dom-floating-origin);
223
+ transition:
224
+ opacity var(--dom-floating-enter-opacity-duration) var(--dom-floating-enter-easing),
225
+ transform var(--dom-floating-enter-transform-duration) var(--dom-floating-enter-easing);
226
+ will-change: opacity, transform;
227
+ animation: none;
228
+ }
229
+
230
+ @keyframes dom-floating-scale-fade-opacity-in {
231
+ from { opacity: 0; }
232
+ to { opacity: 1; }
233
+ }
234
+
235
+ @keyframes dom-floating-scale-fade-opacity-out {
236
+ from { opacity: 1; }
237
+ to { opacity: 0; }
238
+ }
239
+
240
+ @keyframes dom-floating-scale-fade-transform-in {
241
+ from { transform: translate3d(var(--dom-floating-enter-x), var(--dom-floating-enter-y), 0) scale(var(--dom-floating-scale)); }
242
+ to { transform: translate3d(0, 0, 0) scale(1); }
243
+ }
244
+
245
+ @keyframes dom-floating-scale-fade-transform-out {
246
+ from { transform: translate3d(0, 0, 0) scale(1); }
247
+ to { transform: translate3d(var(--dom-floating-enter-x), var(--dom-floating-enter-y), 0) scale(var(--dom-floating-scale)); }
248
+ }
249
+
250
+ .dom-floating-transition:popover-open,
251
+ .dom-floating-transition[data-floating-open="true"] {
252
+ opacity: 1;
253
+ transform: translate3d(0, 0, 0) scale(1);
254
+ }
255
+
256
+ .dom-floating-transition[data-entering="from"]:popover-open,
257
+ .dom-floating-transition[data-entering="from"][data-floating-open="true"],
258
+ .dom-floating-transition[data-leaving="to"]:popover-open,
259
+ .dom-floating-transition[data-leaving="to"][data-floating-open="true"] {
260
+ opacity: 0;
261
+ transform: translate3d(var(--dom-floating-enter-x), var(--dom-floating-enter-y), 0) scale(var(--dom-floating-scale));
262
+ }
263
+
264
+ .dom-floating-transition[data-entering="to"]:popover-open,
265
+ .dom-floating-transition[data-entering="to"][data-floating-open="true"],
266
+ .dom-floating-transition[data-leaving="from"]:popover-open,
267
+ .dom-floating-transition[data-leaving="from"][data-floating-open="true"] {
268
+ opacity: 1;
269
+ transform: translate3d(0, 0, 0) scale(1);
270
+ }
271
+
272
+ .dom-floating-transition[data-floating-effect="scale-fade"][data-entering="to"]:popover-open,
273
+ .dom-floating-transition[data-floating-effect="scale-fade"][data-entering="to"][data-floating-open="true"] {
274
+ animation:
275
+ dom-floating-scale-fade-opacity-in var(--dom-floating-enter-opacity-duration) var(--dom-floating-enter-easing) both,
276
+ dom-floating-scale-fade-transform-in var(--dom-floating-enter-transform-duration) var(--dom-floating-enter-easing) both;
277
+ }
278
+
279
+ .dom-floating-transition[data-leaving="to"]:popover-open {
280
+ transition:
281
+ opacity var(--dom-floating-leave-opacity-duration) linear,
282
+ transform var(--dom-floating-leave-transform-duration) var(--dom-floating-leave-easing);
283
+ }
284
+
285
+ .dom-floating-transition[data-leaving="to"][data-floating-open="true"] {
286
+ transition:
287
+ opacity var(--dom-floating-leave-opacity-duration) linear,
288
+ transform var(--dom-floating-leave-transform-duration) var(--dom-floating-leave-easing);
289
+ }
290
+
291
+ .dom-floating-transition[data-floating-effect="scale-fade"][data-leaving="to"]:popover-open,
292
+ .dom-floating-transition[data-floating-effect="scale-fade"][data-leaving="to"][data-floating-open="true"] {
293
+ transition: none;
294
+ animation:
295
+ dom-floating-scale-fade-opacity-out var(--dom-floating-leave-opacity-duration) linear both,
296
+ dom-floating-scale-fade-transform-out var(--dom-floating-leave-transform-duration) var(--dom-floating-leave-easing) both;
297
+ }
298
+
299
+ @starting-style {
300
+ .dom-floating-transition:popover-open {
301
+ opacity: 0;
302
+ transform: translate3d(var(--dom-floating-enter-x), var(--dom-floating-enter-y), 0) scale(var(--dom-floating-scale));
303
+ }
304
+ }
305
+
306
+ .dom-floating-transition:not([data-animate-placement]) {
307
+ transition-property: opacity;
308
+ }
309
+
310
+ .dom-floating-transition[data-side="top"] {
311
+ --dom-floating-enter-y: 10px;
312
+ --dom-floating-origin: bottom center;
313
+ }
314
+
315
+ .dom-floating-transition[data-side="bottom"] {
316
+ --dom-floating-enter-y: -10px;
317
+ --dom-floating-origin: top center;
318
+ }
319
+
320
+ .dom-floating-transition[data-side="left"] {
321
+ --dom-floating-enter-x: 10px;
322
+ --dom-floating-enter-y: 0px;
323
+ --dom-floating-origin: center right;
324
+ }
325
+
326
+ .dom-floating-transition[data-side="right"] {
327
+ --dom-floating-enter-x: -10px;
328
+ --dom-floating-enter-y: 0px;
329
+ --dom-floating-origin: center left;
330
+ }
331
+
332
+ .dom-floating-transition[data-floating-effect="fade"] {
333
+ --dom-floating-enter-x: 0px;
334
+ --dom-floating-enter-y: 0px;
335
+ --dom-floating-scale: 1;
336
+ --dom-floating-enter-transform-duration: 0ms;
337
+ --dom-floating-leave-transform-duration: 0ms;
338
+ }
339
+
340
+ [data-invalid] .skin-input,
341
+ .skin-input[data-invalid] {
342
+ @apply border-destructive focus:border-destructive focus:ring-destructive/25;
343
+ }
344
+
345
+ [data-invalid] dom-dropdown[open] > [slot="trigger"].skin-input,
346
+ [data-invalid] dom-dropdown[open] > [data-trigger].skin-input,
347
+ dom-dropdown[open] > [slot="trigger"].skin-input[aria-invalid="true"],
348
+ dom-dropdown[open] > [data-trigger].skin-input[aria-invalid="true"] {
349
+ @apply border-destructive ring-2 ring-destructive/25;
350
+ }
351
+ }
package/src/theme.css ADDED
@@ -0,0 +1,99 @@
1
+ :root,
2
+ [data-theme="light"] {
3
+ color-scheme: light;
4
+ --radius: 0.625rem;
5
+ --device-frame: oklch(0.205 0 0);
6
+ --video-canvas: oklch(0.145 0 0);
7
+ --video-fg: oklch(0.985 0 0);
8
+ --shadow-xs: 0 1px 1px 0 rgb(15 23 42 / 0.04);
9
+ --shadow-sm: 0 1px 2px 0 rgb(15 23 42 / 0.06);
10
+ --shadow-md: 0 3px 8px -2px rgb(15 23 42 / 0.12), 0 1px 2px -1px rgb(15 23 42 / 0.08);
11
+ --shadow-lg: 0 8px 20px -6px rgb(15 23 42 / 0.16), 0 2px 6px -2px rgb(15 23 42 / 0.08);
12
+ --shadow-xl: 0 18px 44px -18px rgb(15 23 42 / 0.24), 0 8px 18px -12px rgb(15 23 42 / 0.16);
13
+ --shadow-2xl: 0 24px 60px -18px rgb(15 23 42 / 0.24), 0 8px 20px -10px rgb(15 23 42 / 0.14);
14
+ --chart-1: oklch(0.55 0.19 257);
15
+ --chart-2: oklch(0.58 0.13 175);
16
+ --chart-3: oklch(0.65 0.16 65);
17
+ --chart-4: oklch(0.56 0.19 305);
18
+ --chart-5: oklch(0.6 0.19 20);
19
+ --canvas: #fff;
20
+ --canvas-fg: oklch(0.145 0 0);
21
+ --primary: oklch(0.205 0 0);
22
+ --primary-fg: oklch(0.985 0 0);
23
+ --secondary: oklch(0.97 0 0);
24
+ --secondary-fg: oklch(0.205 0 0);
25
+ --muted: oklch(0.97 0 0);
26
+ --muted-fg: oklch(0.5 0 0);
27
+ --accent: oklch(0.97 0 0);
28
+ --accent-fg: oklch(0.205 0 0);
29
+ --destructive: oklch(0.577 0.245 27.325);
30
+ --destructive-fg: oklch(0.985 0 0);
31
+ --success: oklch(0.57 0.194 149.35);
32
+ --success-fg: oklch(0.985 0 0);
33
+ --warning: oklch(0.7 0.2 84);
34
+ --warning-fg: oklch(0.28 0.07 46);
35
+ --border: oklch(0.922 0 0);
36
+ --input: oklch(0.922 0 0);
37
+ --ring: oklch(0.708 0 0);
38
+ }
39
+
40
+ [data-theme="dark"] {
41
+ color-scheme: dark;
42
+ --shadow-xs: 0 1px 1px 0 rgb(0 0 0 / 0.28);
43
+ --shadow-sm: 0 1px 0 0 rgb(255 255 255 / 0.04) inset, 0 1px 2px 0 rgb(0 0 0 / 0.34);
44
+ --shadow-md: 0 1px 0 0 rgb(255 255 255 / 0.04) inset, 0 8px 18px -10px rgb(0 0 0 / 0.52), 0 2px 5px -3px rgb(0 0 0 / 0.44);
45
+ --shadow-lg: 0 1px 0 0 rgb(255 255 255 / 0.05) inset, 0 16px 34px -18px rgb(0 0 0 / 0.58), 0 5px 12px -8px rgb(0 0 0 / 0.5);
46
+ --shadow-xl: 0 1px 0 0 rgb(255 255 255 / 0.05) inset, 0 24px 52px -24px rgb(0 0 0 / 0.68), 0 10px 22px -14px rgb(0 0 0 / 0.56);
47
+ --shadow-2xl: 0 1px 0 0 rgb(255 255 255 / 0.06) inset, 0 34px 76px -30px rgb(0 0 0 / 0.72), 0 16px 34px -20px rgb(0 0 0 / 0.58);
48
+ --chart-1: oklch(0.72 0.15 257);
49
+ --chart-2: oklch(0.75 0.13 175);
50
+ --chart-3: oklch(0.8 0.15 75);
51
+ --chart-4: oklch(0.73 0.16 305);
52
+ --chart-5: oklch(0.74 0.16 20);
53
+ --canvas: oklch(0.145 0 0);
54
+ --canvas-fg: oklch(0.985 0 0);
55
+ --primary: oklch(0.922 0 0);
56
+ --primary-fg: oklch(0.205 0 0);
57
+ --secondary: oklch(0.269 0 0);
58
+ --secondary-fg: oklch(0.985 0 0);
59
+ --muted: oklch(0.269 0 0);
60
+ --muted-fg: oklch(0.708 0 0);
61
+ --accent: oklch(0.269 0 0);
62
+ --accent-fg: oklch(0.985 0 0);
63
+ --destructive: oklch(0.704 0.191 22.216);
64
+ --destructive-fg: oklch(0.985 0 0);
65
+ --success: oklch(0.696 0.17 162.48);
66
+ --success-fg: oklch(0.145 0 0);
67
+ --warning: oklch(0.769 0.188 70.08);
68
+ --warning-fg: oklch(0.145 0 0);
69
+ --border: oklch(1 0 0 / 10%);
70
+ --input: oklch(1 0 0 / 15%);
71
+ --ring: oklch(0.556 0 0);
72
+ }
73
+
74
+ * {
75
+ box-sizing: border-box;
76
+ }
77
+
78
+ html,
79
+ body,
80
+ #app {
81
+ min-height: 100%;
82
+ }
83
+
84
+ body {
85
+ margin: 0;
86
+ font-family:
87
+ "Plus Jakarta Sans Variable",
88
+ "Plus Jakarta Sans",
89
+ ui-sans-serif,
90
+ system-ui,
91
+ -apple-system,
92
+ BlinkMacSystemFont,
93
+ "Segoe UI",
94
+ sans-serif;
95
+ background: var(--canvas);
96
+ color: var(--canvas-fg);
97
+ text-rendering: optimizeLegibility;
98
+ -webkit-font-smoothing: antialiased;
99
+ }