@adea-ai/ui 0.61.0 → 0.61.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/r/accordion.json +3 -1
- package/dist/r/account-menu.json +2 -1
- package/dist/r/alert-dialog.json +3 -1
- package/dist/r/alert.json +3 -1
- package/dist/r/app-shell.json +3 -1
- package/dist/r/aspect-ratio.json +3 -1
- package/dist/r/avatar.json +3 -1
- package/dist/r/badge.json +3 -1
- package/dist/r/board.json +3 -1
- package/dist/r/breadcrumb.json +3 -1
- package/dist/r/button-group.json +2 -1
- package/dist/r/button.json +3 -1
- package/dist/r/calendar.json +2 -1
- package/dist/r/card.json +3 -1
- package/dist/r/carousel.json +2 -1
- package/dist/r/chart.json +3 -1
- package/dist/r/checkbox.json +3 -1
- package/dist/r/code-block.json +2 -1
- package/dist/r/collapsible.json +3 -1
- package/dist/r/combobox.json +3 -1
- package/dist/r/command.json +3 -1
- package/dist/r/context-menu.json +3 -1
- package/dist/r/conversation.json +2 -1
- package/dist/r/detail-panel.json +2 -1
- package/dist/r/dialog.json +3 -1
- package/dist/r/diff-block.json +3 -1
- package/dist/r/drawer.json +3 -1
- package/dist/r/dropdown-menu.json +3 -1
- package/dist/r/empty.json +3 -1
- package/dist/r/entity-icon.json +3 -1
- package/dist/r/field.json +3 -1
- package/dist/r/hover-card.json +3 -1
- package/dist/r/input-group.json +3 -1
- package/dist/r/input-otp.json +3 -1
- package/dist/r/input.json +3 -1
- package/dist/r/item.json +3 -1
- package/dist/r/kbd.json +3 -1
- package/dist/r/label.json +3 -1
- package/dist/r/lib.json +50 -0
- package/dist/r/list-row.json +3 -1
- package/dist/r/menubar.json +3 -1
- package/dist/r/modal-dialog.json +2 -1
- package/dist/r/motion.json +22 -0
- package/dist/r/navigation-menu.json +3 -1
- package/dist/r/page.json +3 -1
- package/dist/r/pagination.json +3 -1
- package/dist/r/panel.json +3 -1
- package/dist/r/popover.json +3 -1
- package/dist/r/progress.json +3 -1
- package/dist/r/radio-group.json +3 -1
- package/dist/r/registry.json +320 -73
- package/dist/r/resizable.json +3 -1
- package/dist/r/scroll-area.json +3 -1
- package/dist/r/select.json +3 -1
- package/dist/r/separator.json +3 -1
- package/dist/r/settings.json +3 -1
- package/dist/r/sheet.json +2 -1
- package/dist/r/side-rail.json +3 -1
- package/dist/r/sidebar-nav.json +3 -1
- package/dist/r/skeleton.json +3 -1
- package/dist/r/slider.json +3 -1
- package/dist/r/spinner.json +3 -1
- package/dist/r/src/components/composites/account-menu/account-menu.tsx +150 -0
- package/dist/r/src/components/composites/account-menu/index.ts +1 -0
- package/dist/r/src/components/composites/list-row/index.ts +1 -0
- package/dist/r/src/components/composites/list-row/list-row.tsx +116 -0
- package/dist/r/src/components/composites/settings/index.ts +1 -0
- package/dist/r/src/components/composites/settings/settings.tsx +142 -0
- package/dist/r/src/components/composites/stat/index.ts +9 -0
- package/dist/r/src/components/composites/stat/stat.tsx +155 -0
- package/dist/r/src/components/composites/update-dialog/index.ts +7 -0
- package/dist/r/src/components/composites/update-dialog/update-dialog.tsx +529 -0
- package/dist/r/src/components/composites/workspace-mark/index.ts +1 -0
- package/dist/r/src/components/composites/workspace-mark/workspace-mark.tsx +72 -0
- package/dist/r/src/components/conversation/conversation-avatar.tsx +60 -0
- package/dist/r/src/components/conversation/conversation-surface.tsx +107 -0
- package/dist/r/src/components/conversation/index.ts +25 -0
- package/dist/r/src/components/conversation/message-composer.tsx +239 -0
- package/dist/r/src/components/conversation/message-row.tsx +387 -0
- package/dist/r/src/components/conversation/thread-panel.tsx +141 -0
- package/dist/r/src/components/layout/app-shell/app-shell.tsx +92 -0
- package/dist/r/src/components/layout/app-shell/index.ts +1 -0
- package/dist/r/src/components/layout/page/index.ts +9 -0
- package/dist/r/src/components/layout/page/page.tsx +122 -0
- package/dist/r/src/components/layout/panel/index.ts +12 -0
- package/dist/r/src/components/layout/panel/panel.tsx +166 -0
- package/dist/r/src/components/layout/side-rail/index.ts +12 -0
- package/dist/r/src/components/layout/side-rail/side-rail-context.ts +42 -0
- package/dist/r/src/components/layout/side-rail/side-rail.tsx +405 -0
- package/dist/r/src/components/layout/sidebar-nav/index.ts +14 -0
- package/dist/r/src/components/layout/sidebar-nav/sidebar-nav.tsx +244 -0
- package/dist/r/src/components/layout/status-bar/index.ts +1 -0
- package/dist/r/src/components/layout/status-bar/status-bar.tsx +73 -0
- package/dist/r/src/components/layout/top-bar/index.ts +10 -0
- package/dist/r/src/components/layout/top-bar/top-bar.tsx +166 -0
- package/dist/r/src/components/motion/index.ts +2 -0
- package/dist/r/src/components/motion/presence.tsx +32 -0
- package/dist/r/src/components/theme/appearance-panel.tsx +179 -0
- package/dist/r/src/components/theme/index.ts +22 -0
- package/dist/r/src/components/theme/theme-picker.tsx +174 -0
- package/dist/r/src/components/theme/theme-provider.tsx +309 -0
- package/dist/r/src/components/theme/theme-toggle.tsx +64 -0
- package/dist/r/src/components/ui/accordion/accordion.tsx +66 -0
- package/dist/r/src/components/ui/accordion/index.ts +1 -0
- package/dist/r/src/components/ui/alert/alert.tsx +95 -0
- package/dist/r/src/components/ui/alert/index.ts +1 -0
- package/dist/r/src/components/ui/alert-dialog/alert-dialog.tsx +176 -0
- package/dist/r/src/components/ui/alert-dialog/index.ts +13 -0
- package/dist/r/src/components/ui/aspect-ratio/aspect-ratio.tsx +38 -0
- package/dist/r/src/components/ui/aspect-ratio/index.ts +1 -0
- package/dist/r/src/components/ui/avatar/avatar.tsx +114 -0
- package/dist/r/src/components/ui/avatar/index.ts +9 -0
- package/dist/r/src/components/ui/badge/badge.tsx +59 -0
- package/dist/r/src/components/ui/badge/index.ts +1 -0
- package/dist/r/src/components/ui/board/board.tsx +254 -0
- package/dist/r/src/components/ui/board/index.ts +10 -0
- package/dist/r/src/components/ui/breadcrumb/breadcrumb.tsx +117 -0
- package/dist/r/src/components/ui/breadcrumb/index.ts +9 -0
- package/dist/r/src/components/ui/button/button.tsx +89 -0
- package/dist/r/src/components/ui/button/index.ts +1 -0
- package/dist/r/src/components/ui/button-group/button-group.tsx +92 -0
- package/dist/r/src/components/ui/button-group/index.ts +6 -0
- package/dist/r/src/components/ui/calendar/calendar.tsx +277 -0
- package/dist/r/src/components/ui/calendar/index.ts +1 -0
- package/dist/r/src/components/ui/card/card.tsx +82 -0
- package/dist/r/src/components/ui/card/index.ts +10 -0
- package/dist/r/src/components/ui/carousel/carousel.tsx +209 -0
- package/dist/r/src/components/ui/carousel/index.ts +1 -0
- package/dist/r/src/components/ui/chart/chart.tsx +413 -0
- package/dist/r/src/components/ui/chart/index.ts +17 -0
- package/dist/r/src/components/ui/checkbox/checkbox.tsx +99 -0
- package/dist/r/src/components/ui/checkbox/index.ts +1 -0
- package/dist/r/src/components/ui/code-block/code-block.tsx +238 -0
- package/dist/r/src/components/ui/code-block/index.ts +1 -0
- package/dist/r/src/components/ui/collapsible/collapsible.tsx +54 -0
- package/dist/r/src/components/ui/collapsible/index.ts +1 -0
- package/dist/r/src/components/ui/combobox/combobox.tsx +142 -0
- package/dist/r/src/components/ui/combobox/index.ts +10 -0
- package/dist/r/src/components/ui/command/command.tsx +214 -0
- package/dist/r/src/components/ui/command/index.ts +12 -0
- package/dist/r/src/components/ui/context-menu/context-menu.tsx +163 -0
- package/dist/r/src/components/ui/context-menu/index.ts +15 -0
- package/dist/r/src/components/ui/detail-panel/detail-panel.tsx +161 -0
- package/dist/r/src/components/ui/detail-panel/index.ts +9 -0
- package/dist/r/src/components/ui/dialog/dialog.tsx +138 -0
- package/dist/r/src/components/ui/dialog/index.ts +14 -0
- package/dist/r/src/components/ui/diff-block/diff-block.tsx +286 -0
- package/dist/r/src/components/ui/diff-block/index.ts +11 -0
- package/dist/r/src/components/ui/drawer/drawer.tsx +144 -0
- package/dist/r/src/components/ui/drawer/index.ts +13 -0
- package/dist/r/src/components/ui/dropdown-menu/dropdown-menu.tsx +203 -0
- package/dist/r/src/components/ui/dropdown-menu/index.ts +18 -0
- package/dist/r/src/components/ui/empty/empty.tsx +104 -0
- package/dist/r/src/components/ui/empty/index.ts +10 -0
- package/dist/r/src/components/ui/entity-icon/entity-icon.tsx +154 -0
- package/dist/r/src/components/ui/entity-icon/index.ts +1 -0
- package/dist/r/src/components/ui/field/field.tsx +131 -0
- package/dist/r/src/components/ui/field/index.ts +11 -0
- package/dist/r/src/components/ui/hover-card/hover-card.tsx +48 -0
- package/dist/r/src/components/ui/hover-card/index.ts +1 -0
- package/dist/r/src/components/ui/input/index.ts +1 -0
- package/dist/r/src/components/ui/input/input.tsx +41 -0
- package/dist/r/src/components/ui/input-group/index.ts +8 -0
- package/dist/r/src/components/ui/input-group/input-group.tsx +111 -0
- package/dist/r/src/components/ui/input-otp/index.ts +1 -0
- package/dist/r/src/components/ui/input-otp/input-otp.tsx +108 -0
- package/dist/r/src/components/ui/item/index.ts +10 -0
- package/dist/r/src/components/ui/item/item.tsx +146 -0
- package/dist/r/src/components/ui/kbd/index.ts +1 -0
- package/dist/r/src/components/ui/kbd/kbd.tsx +42 -0
- package/dist/r/src/components/ui/label/index.ts +1 -0
- package/dist/r/src/components/ui/label/label.tsx +36 -0
- package/dist/r/src/components/ui/menubar/index.ts +16 -0
- package/dist/r/src/components/ui/menubar/menubar.tsx +190 -0
- package/dist/r/src/components/ui/modal-dialog/index.ts +1 -0
- package/dist/r/src/components/ui/modal-dialog/modal-dialog.tsx +95 -0
- package/dist/r/src/components/ui/navigation-menu/index.ts +13 -0
- package/dist/r/src/components/ui/navigation-menu/navigation-menu.tsx +229 -0
- package/dist/r/src/components/ui/pagination/index.ts +8 -0
- package/dist/r/src/components/ui/pagination/pagination.tsx +144 -0
- package/dist/r/src/components/ui/popover/index.ts +10 -0
- package/dist/r/src/components/ui/popover/popover.tsx +81 -0
- package/dist/r/src/components/ui/progress/index.ts +1 -0
- package/dist/r/src/components/ui/progress/progress.tsx +67 -0
- package/dist/r/src/components/ui/radio-group/index.ts +1 -0
- package/dist/r/src/components/ui/radio-group/radio-group.tsx +78 -0
- package/dist/r/src/components/ui/resizable/index.ts +6 -0
- package/dist/r/src/components/ui/resizable/resizable.tsx +74 -0
- package/dist/r/src/components/ui/scroll-area/index.ts +1 -0
- package/dist/r/src/components/ui/scroll-area/scroll-area.tsx +66 -0
- package/dist/r/src/components/ui/select/index.ts +11 -0
- package/dist/r/src/components/ui/select/select.tsx +188 -0
- package/dist/r/src/components/ui/separator/index.ts +1 -0
- package/dist/r/src/components/ui/separator/separator.tsx +40 -0
- package/dist/r/src/components/ui/sheet/index.ts +13 -0
- package/dist/r/src/components/ui/sheet/sheet.tsx +132 -0
- package/dist/r/src/components/ui/skeleton/index.ts +1 -0
- package/dist/r/src/components/ui/skeleton/skeleton.tsx +28 -0
- package/dist/r/src/components/ui/slider/index.ts +1 -0
- package/dist/r/src/components/ui/slider/slider.tsx +81 -0
- package/dist/r/src/components/ui/spinner/index.ts +1 -0
- package/dist/r/src/components/ui/spinner/spinner.tsx +58 -0
- package/dist/r/src/components/ui/status-chip/index.ts +8 -0
- package/dist/r/src/components/ui/status-chip/status-chip.tsx +142 -0
- package/dist/r/src/components/ui/switch/index.ts +1 -0
- package/dist/r/src/components/ui/switch/switch.tsx +100 -0
- package/dist/r/src/components/ui/table/index.ts +11 -0
- package/dist/r/src/components/ui/table/table.tsx +125 -0
- package/dist/r/src/components/ui/tabs/index.ts +8 -0
- package/dist/r/src/components/ui/tabs/tabs.tsx +77 -0
- package/dist/r/src/components/ui/textarea/index.ts +1 -0
- package/dist/r/src/components/ui/textarea/textarea.tsx +36 -0
- package/dist/r/src/components/ui/toast/index.ts +1 -0
- package/dist/r/src/components/ui/toast/toast.tsx +220 -0
- package/dist/r/src/components/ui/toggle/index.ts +1 -0
- package/dist/r/src/components/ui/toggle/toggle.tsx +60 -0
- package/dist/r/src/components/ui/toggle-group/index.ts +6 -0
- package/dist/r/src/components/ui/toggle-group/toggle-group.tsx +66 -0
- package/dist/r/src/components/ui/tooltip/index.ts +9 -0
- package/dist/r/src/components/ui/tooltip/tooltip.tsx +102 -0
- package/dist/r/src/lib/keyed-rows.ts +68 -0
- package/dist/r/src/lib/overlay.ts +70 -0
- package/dist/r/src/lib/themes.ts +490 -0
- package/dist/r/src/lib/tokens.ts +688 -0
- package/dist/r/src/lib/utils.ts +76 -0
- package/dist/r/src/lib/variants.ts +62 -0
- package/dist/r/src/lib/version-notes.ts +65 -0
- package/dist/r/src/styles/base.css +644 -0
- package/dist/r/src/styles/fonts.css +26 -0
- package/dist/r/src/styles/globals.css +18 -0
- package/dist/r/src/styles/theme.css +864 -0
- package/dist/r/stat.json +3 -1
- package/dist/r/status-bar.json +3 -1
- package/dist/r/status-chip.json +2 -1
- package/dist/r/switch.json +3 -1
- package/dist/r/table.json +3 -1
- package/dist/r/tabs.json +3 -1
- package/dist/r/textarea.json +3 -1
- package/dist/r/theming.json +42 -0
- package/dist/r/toast.json +3 -1
- package/dist/r/toggle-group.json +2 -1
- package/dist/r/toggle.json +3 -1
- package/dist/r/tooltip.json +3 -1
- package/dist/r/top-bar.json +3 -1
- package/dist/r/update-dialog.json +2 -1
- package/dist/r/workspace-mark.json +2 -1
- package/package.json +1 -1
- package/registry.json +320 -73
|
@@ -0,0 +1,644 @@
|
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
* Adea base layer
|
|
3
|
+
* ============================================================================
|
|
4
|
+
*
|
|
5
|
+
* Framework-neutral CSS that the components depend on but that carries no
|
|
6
|
+
* token values (those live in `theme.css`):
|
|
7
|
+
*
|
|
8
|
+
* - the component-state variants Kobalte and corvu emit data attributes for
|
|
9
|
+
* - keyframes and entrance animations
|
|
10
|
+
* - the named utilities the design system exposes to consumers
|
|
11
|
+
* - the base layer: focus ring, scrollbars, selection, reduced-motion
|
|
12
|
+
*
|
|
13
|
+
* Everything here ships as CSS. Nothing in this file may be duplicated in a
|
|
14
|
+
* component's class list.
|
|
15
|
+
* ========================================================================== */
|
|
16
|
+
|
|
17
|
+
@import 'tw-animate-css';
|
|
18
|
+
|
|
19
|
+
/* --- State variants ------------------------------------------------------
|
|
20
|
+
* Kobalte and corvu communicate state through data attributes. Spelling the
|
|
21
|
+
* mapping once here means a component writes `data-open:opacity-100` and gets
|
|
22
|
+
* the right behaviour from either library.
|
|
23
|
+
* ------------------------------------------------------------------------ */
|
|
24
|
+
@custom-variant data-open {
|
|
25
|
+
&:where([data-state='open']),
|
|
26
|
+
&:where([data-open]:not([data-open='false'])) {
|
|
27
|
+
@slot;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@custom-variant data-closed {
|
|
32
|
+
&:where([data-state='closed']),
|
|
33
|
+
&:where([data-closed]:not([data-closed='false'])) {
|
|
34
|
+
@slot;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Kobalte marks every expanded disclosure and every open overlay with
|
|
39
|
+
`data-expanded`; the `data-state` spelling is kept too so a component
|
|
40
|
+
written against either protocol behaves the same. */
|
|
41
|
+
@custom-variant data-expanded {
|
|
42
|
+
&:where([data-state='expanded']),
|
|
43
|
+
&:where([data-expanded]:not([data-expanded='false'])) {
|
|
44
|
+
@slot;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@custom-variant data-checked {
|
|
49
|
+
&:where([data-state='checked']),
|
|
50
|
+
&:where([data-checked]:not([data-checked='false'])) {
|
|
51
|
+
@slot;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@custom-variant data-unchecked {
|
|
56
|
+
&:where([data-state='unchecked']),
|
|
57
|
+
&:where([data-unchecked]:not([data-unchecked='false'])) {
|
|
58
|
+
@slot;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@custom-variant data-selected {
|
|
63
|
+
&:where([data-selected='true']) {
|
|
64
|
+
@slot;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@custom-variant data-disabled {
|
|
69
|
+
&:where([data-disabled='true']),
|
|
70
|
+
&:where([data-disabled]:not([data-disabled='false'])) {
|
|
71
|
+
@slot;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@custom-variant data-highlighted {
|
|
76
|
+
&:where([data-highlighted]) {
|
|
77
|
+
@slot;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@custom-variant data-invalid {
|
|
82
|
+
&:where([data-invalid='true']),
|
|
83
|
+
&:where([data-invalid]:not([data-invalid='false'])) {
|
|
84
|
+
@slot;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@custom-variant data-active {
|
|
89
|
+
&:where([data-state='active']),
|
|
90
|
+
&:where([data-active]:not([data-active='false'])) {
|
|
91
|
+
@slot;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@custom-variant data-horizontal {
|
|
96
|
+
&:where([data-orientation='horizontal']) {
|
|
97
|
+
@slot;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@custom-variant data-vertical {
|
|
102
|
+
&:where([data-orientation='vertical']) {
|
|
103
|
+
@slot;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* --- Keyframes -----------------------------------------------------------
|
|
108
|
+
* Entrances only. Exits reuse the same geometry inverted through
|
|
109
|
+
* `tw-animate-css`, and state changes use a transition rather than a keyframe
|
|
110
|
+
* so they stay interruptible.
|
|
111
|
+
* ------------------------------------------------------------------------ */
|
|
112
|
+
@theme inline {
|
|
113
|
+
@keyframes ds-rise {
|
|
114
|
+
from {
|
|
115
|
+
opacity: 0;
|
|
116
|
+
transform: translateY(8px);
|
|
117
|
+
}
|
|
118
|
+
to {
|
|
119
|
+
opacity: 1;
|
|
120
|
+
transform: translateY(0);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@keyframes ds-scale-in {
|
|
125
|
+
from {
|
|
126
|
+
opacity: 0;
|
|
127
|
+
transform: scale(0.96);
|
|
128
|
+
}
|
|
129
|
+
to {
|
|
130
|
+
opacity: 1;
|
|
131
|
+
transform: scale(1);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
@keyframes ds-shimmer {
|
|
136
|
+
from {
|
|
137
|
+
background-position: 100% 0;
|
|
138
|
+
}
|
|
139
|
+
to {
|
|
140
|
+
background-position: 0 0;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
@keyframes ds-indeterminate {
|
|
145
|
+
from {
|
|
146
|
+
transform: translateX(-100%);
|
|
147
|
+
}
|
|
148
|
+
to {
|
|
149
|
+
transform: translateX(400%);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@keyframes ds-caret {
|
|
154
|
+
0%,
|
|
155
|
+
100% {
|
|
156
|
+
opacity: 1;
|
|
157
|
+
}
|
|
158
|
+
50% {
|
|
159
|
+
opacity: 0;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* --- Named utilities ----------------------------------------------------- */
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Visible to a screen reader, invisible on screen.
|
|
168
|
+
*
|
|
169
|
+
* This is the single most important utility in the system and it must be
|
|
170
|
+
* available in every build, which is why it lives here rather than in the
|
|
171
|
+
* optional stylesheet. `display: none` would remove the content from the
|
|
172
|
+
* accessibility tree as well; this clips it to a pixel instead, so the text is
|
|
173
|
+
* still announced, still translatable, and still reachable by find-in-page.
|
|
174
|
+
*/
|
|
175
|
+
@utility visually-hidden {
|
|
176
|
+
position: absolute;
|
|
177
|
+
width: 1px;
|
|
178
|
+
height: 1px;
|
|
179
|
+
padding: 0;
|
|
180
|
+
margin: -1px;
|
|
181
|
+
overflow: hidden;
|
|
182
|
+
clip-path: inset(50%);
|
|
183
|
+
white-space: nowrap;
|
|
184
|
+
border-width: 0;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Reverses `visually-hidden` at a breakpoint, for a label that is only visible
|
|
189
|
+
* when there is room for it. Written as a companion because the two rules have
|
|
190
|
+
* to travel together to stay correct.
|
|
191
|
+
*/
|
|
192
|
+
@utility visually-hidden-until-* {
|
|
193
|
+
@media (width >= --value(--breakpoint-*)) {
|
|
194
|
+
position: static;
|
|
195
|
+
width: auto;
|
|
196
|
+
height: auto;
|
|
197
|
+
padding: 0;
|
|
198
|
+
margin: 0;
|
|
199
|
+
overflow: visible;
|
|
200
|
+
clip-path: none;
|
|
201
|
+
white-space: normal;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
@utility no-scrollbar {
|
|
206
|
+
-ms-overflow-style: none;
|
|
207
|
+
scrollbar-width: none;
|
|
208
|
+
|
|
209
|
+
&::-webkit-scrollbar {
|
|
210
|
+
display: none;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* The drag region of a frameless desktop window.
|
|
216
|
+
*
|
|
217
|
+
* Both macOS and Windows need draggable chrome and both need the controls
|
|
218
|
+
* inside it to opt back out — otherwise a button in the title bar drags the
|
|
219
|
+
* window instead of pressing. Keeping the pair together keeps the opt-out next
|
|
220
|
+
* to the opt-in instead of in a platform switch.
|
|
221
|
+
*/
|
|
222
|
+
@utility window-drag {
|
|
223
|
+
-webkit-app-region: drag;
|
|
224
|
+
app-region: drag;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
@utility window-no-drag {
|
|
228
|
+
-webkit-app-region: no-drag;
|
|
229
|
+
app-region: no-drag;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Inset the shell clear of the native window controls: the macOS traffic-light
|
|
234
|
+
* cluster (84px) and the Windows caption overlay (142px).
|
|
235
|
+
*
|
|
236
|
+
* Applied to the top bar's inline padding so its content box is what remains,
|
|
237
|
+
* which is why the search field stays optically centred in the space the user
|
|
238
|
+
* can actually see rather than in the window.
|
|
239
|
+
*/
|
|
240
|
+
@utility window-inset-macos {
|
|
241
|
+
padding-inline-start: 84px;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
@utility window-inset-windows {
|
|
245
|
+
padding-inline-end: 142px;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* iOS/macOS display-cutout and home-indicator insets, resolved once.
|
|
250
|
+
*
|
|
251
|
+
* `--safe-top` is deliberately 0 outside a standalone display: with browser
|
|
252
|
+
* chrome on screen the user agent's own bar already clears the status bar, so a
|
|
253
|
+
* non-zero `env()` there paints a dead band above the header.
|
|
254
|
+
*/
|
|
255
|
+
@utility p-safe {
|
|
256
|
+
padding-top: var(--safe-top, env(safe-area-inset-top, 0px));
|
|
257
|
+
padding-right: env(safe-area-inset-right, 0px);
|
|
258
|
+
padding-bottom: env(safe-area-inset-bottom, 0px);
|
|
259
|
+
padding-left: env(safe-area-inset-left, 0px);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
@utility pb-safe {
|
|
263
|
+
padding-bottom: env(safe-area-inset-bottom, 0px);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Truncate to one line inside a flex child.
|
|
268
|
+
*
|
|
269
|
+
* Tailwind's `truncate` is the same declaration; this exists as a named
|
|
270
|
+
* intent so a reviewer can see that `min-width: 0` — the part that is easy to
|
|
271
|
+
* forget and that makes the ellipsis actually appear inside a flex row — was
|
|
272
|
+
* deliberate rather than incidental.
|
|
273
|
+
*/
|
|
274
|
+
@utility text-truncate {
|
|
275
|
+
overflow: hidden;
|
|
276
|
+
text-overflow: ellipsis;
|
|
277
|
+
white-space: nowrap;
|
|
278
|
+
min-width: 0;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* A fade at the top and bottom edge of a scroll box, so a long list reads as
|
|
283
|
+
* continuing rather than ending at the fold.
|
|
284
|
+
*/
|
|
285
|
+
@utility scroll-shadow-y {
|
|
286
|
+
-webkit-mask-image: linear-gradient(
|
|
287
|
+
to bottom,
|
|
288
|
+
transparent 0,
|
|
289
|
+
#000 2rem,
|
|
290
|
+
#000 calc(100% - 2rem),
|
|
291
|
+
transparent 100%
|
|
292
|
+
);
|
|
293
|
+
mask-image: linear-gradient(
|
|
294
|
+
to bottom,
|
|
295
|
+
transparent 0,
|
|
296
|
+
#000 2rem,
|
|
297
|
+
#000 calc(100% - 2rem),
|
|
298
|
+
transparent 100%
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* A hairline rule that survives a fractional device pixel ratio. Used for the
|
|
304
|
+
* rail and panel divides, where a blurry seam is the first thing the eye finds.
|
|
305
|
+
*/
|
|
306
|
+
@utility hairline-x {
|
|
307
|
+
background-image: linear-gradient(to right, var(--border), var(--border));
|
|
308
|
+
background-size: 1px 100%;
|
|
309
|
+
background-repeat: no-repeat;
|
|
310
|
+
background-position: right center;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
@utility hairline-y {
|
|
314
|
+
background-image: linear-gradient(to bottom, var(--border), var(--border));
|
|
315
|
+
background-size: 100% 1px;
|
|
316
|
+
background-repeat: no-repeat;
|
|
317
|
+
background-position: center bottom;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
@utility animate-rise {
|
|
321
|
+
animation: ds-rise var(--duration-slow) var(--ease-out) backwards;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
@utility animate-scale-in {
|
|
325
|
+
animation: ds-scale-in var(--duration-normal) var(--ease-out) backwards;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
@utility animate-indeterminate {
|
|
329
|
+
animation: ds-indeterminate 1.4s ease-in-out infinite;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
@utility animate-caret {
|
|
333
|
+
animation: ds-caret 1.1s step-end infinite;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/* A skeleton shimmer that pauses for reduced motion — see the media query at
|
|
337
|
+
the foot of this file. */
|
|
338
|
+
@utility animate-shimmer {
|
|
339
|
+
background-image: linear-gradient(
|
|
340
|
+
90deg,
|
|
341
|
+
transparent 0%,
|
|
342
|
+
color-mix(in oklch, var(--foreground) 8%, transparent) 50%,
|
|
343
|
+
transparent 100%
|
|
344
|
+
);
|
|
345
|
+
background-size: 200% 100%;
|
|
346
|
+
background-repeat: no-repeat;
|
|
347
|
+
animation: ds-shimmer 1.6s ease-in-out infinite;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* A streaming caret: the block that trails the last character of a turn that is
|
|
352
|
+
* still arriving. It is a caret rather than a spinner because the text is already
|
|
353
|
+
* readable and growing — the reader wants to know *where* the stream is, not that
|
|
354
|
+
* something is happening somewhere.
|
|
355
|
+
*
|
|
356
|
+
* `inline-block` with a `1ch` width so it sits in the text flow, and the blink is
|
|
357
|
+
* a step rather than a fade so it reads as a terminal cursor. It is removed under
|
|
358
|
+
* `prefers-reduced-motion` — the accessibility block below zeroes the duration,
|
|
359
|
+
* which would leave a static block; the component hides it there instead.
|
|
360
|
+
*/
|
|
361
|
+
@utility streaming-caret {
|
|
362
|
+
display: inline-block;
|
|
363
|
+
width: 0.5ch;
|
|
364
|
+
height: 1em;
|
|
365
|
+
margin-left: 0.1em;
|
|
366
|
+
translate: 0 0.1em;
|
|
367
|
+
background: var(--foreground);
|
|
368
|
+
animation: ds-caret 1s steps(2, start) infinite;
|
|
369
|
+
|
|
370
|
+
@media (prefers-reduced-motion: reduce) {
|
|
371
|
+
display: none;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
@keyframes ds-caret {
|
|
376
|
+
0%,
|
|
377
|
+
50% {
|
|
378
|
+
opacity: 1;
|
|
379
|
+
}
|
|
380
|
+
50.01%,
|
|
381
|
+
100% {
|
|
382
|
+
opacity: 0;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/* The glass treatment used by the top bar, the rail, and floating overlays.
|
|
387
|
+
`--glass-*` are private: a consumer chooses *whether* to be glassy through
|
|
388
|
+
the component prop, not by reaching for these. */
|
|
389
|
+
@utility glass-panel {
|
|
390
|
+
background: color-mix(in oklch, var(--chrome) calc(var(--chrome-alpha) * 100%), transparent);
|
|
391
|
+
backdrop-filter: blur(18px) saturate(1.6);
|
|
392
|
+
-webkit-backdrop-filter: blur(18px) saturate(1.6);
|
|
393
|
+
box-shadow: inset 0 1px 0 oklch(1 0 0 / 0.08);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
@utility glass-surface {
|
|
397
|
+
background: color-mix(in oklch, var(--card) 72%, transparent);
|
|
398
|
+
backdrop-filter: blur(12px) saturate(1.4);
|
|
399
|
+
-webkit-backdrop-filter: blur(12px) saturate(1.4);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/* The focus ring. Applied by components that cannot use the global outline
|
|
403
|
+
because they need the ring to follow their own radius. */
|
|
404
|
+
@utility focus-ring {
|
|
405
|
+
transition:
|
|
406
|
+
border-color var(--duration-normal) var(--ease-out),
|
|
407
|
+
box-shadow var(--duration-normal) var(--ease-out);
|
|
408
|
+
|
|
409
|
+
&:focus-visible {
|
|
410
|
+
outline: none;
|
|
411
|
+
border-color: var(--ring);
|
|
412
|
+
box-shadow: 0 0 0 3px var(--primary-subtle);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/* --- Scrollbars ----------------------------------------------------------
|
|
417
|
+
* Themed, thin, and out of the way. A default scrollbar is the single most
|
|
418
|
+
* obvious "this is a web page" tell in a desktop application: on macOS it is
|
|
419
|
+
* an overlay that vanishes, but on Windows and Linux it is a 15px chrome bar
|
|
420
|
+
* with the platform's own palette, which no theme can reach.
|
|
421
|
+
*
|
|
422
|
+
* The thumb is `--muted` at rest and `--foreground` on hover, so it is visible
|
|
423
|
+
* against every surface without a per-theme value, and it never competes with
|
|
424
|
+
* content for attention.
|
|
425
|
+
* ------------------------------------------------------------------------ */
|
|
426
|
+
::-webkit-scrollbar {
|
|
427
|
+
width: 10px;
|
|
428
|
+
height: 10px;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
::-webkit-scrollbar-track {
|
|
432
|
+
background: transparent;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
::-webkit-scrollbar-thumb {
|
|
436
|
+
border: 3px solid transparent;
|
|
437
|
+
border-radius: 9999px;
|
|
438
|
+
background: var(--muted);
|
|
439
|
+
background-clip: content-box;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
::-webkit-scrollbar-thumb:hover {
|
|
443
|
+
background: var(--muted-foreground);
|
|
444
|
+
background-clip: content-box;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
::-webkit-scrollbar-corner {
|
|
448
|
+
background: transparent;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/* Firefox, which has no ::-webkit-scrollbar. */
|
|
452
|
+
@supports (scrollbar-width: thin) {
|
|
453
|
+
* {
|
|
454
|
+
scrollbar-width: thin;
|
|
455
|
+
scrollbar-color: var(--muted) transparent;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* An auto-hiding scrollbar, for a horizontal scroller inside a bordered
|
|
461
|
+
* surface — a code block, a diff, a wide table. The bar appears on hover and
|
|
462
|
+
* while the region has focus, so the surface reads as continuous code at rest
|
|
463
|
+
* and the affordance is there the moment a reader needs it.
|
|
464
|
+
*/
|
|
465
|
+
@utility scroll-fade {
|
|
466
|
+
&::-webkit-scrollbar {
|
|
467
|
+
height: 6px;
|
|
468
|
+
width: 6px;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
&::-webkit-scrollbar-thumb {
|
|
472
|
+
border: 0;
|
|
473
|
+
border-radius: 9999px;
|
|
474
|
+
background: transparent;
|
|
475
|
+
transition: background var(--duration-normal) var(--ease-out);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
&:hover::-webkit-scrollbar-thumb,
|
|
479
|
+
&:focus-within::-webkit-scrollbar-thumb {
|
|
480
|
+
background: var(--muted-foreground);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
@supports (scrollbar-width: thin) {
|
|
484
|
+
scrollbar-width: thin;
|
|
485
|
+
scrollbar-color: transparent transparent;
|
|
486
|
+
|
|
487
|
+
&:hover,
|
|
488
|
+
&:focus-within {
|
|
489
|
+
scrollbar-color: var(--muted-foreground) transparent;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/* --- Base layer ---------------------------------------------------------- */
|
|
495
|
+
@layer base {
|
|
496
|
+
*,
|
|
497
|
+
*::before,
|
|
498
|
+
*::after {
|
|
499
|
+
border-color: var(--border);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
* {
|
|
503
|
+
/* A ring is drawn outside the box so it can never shift layout. */
|
|
504
|
+
outline-color: var(--ring);
|
|
505
|
+
outline-offset: 2px;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
html {
|
|
509
|
+
/* From Chromium 140 the viewport propagates overscroll-behavior from the
|
|
510
|
+
ROOT element, so a `body` declaration is ignored and the macOS
|
|
511
|
+
rubber-band bounce returns inside a desktop webview. */
|
|
512
|
+
overscroll-behavior-y: none;
|
|
513
|
+
-webkit-font-smoothing: antialiased;
|
|
514
|
+
-moz-osx-font-smoothing: grayscale;
|
|
515
|
+
/* The interface default: 14px/1.55, matching the `text-sm` rung. */
|
|
516
|
+
font-family: var(--font-sans);
|
|
517
|
+
font-size: var(--text-sm);
|
|
518
|
+
line-height: var(--text-sm--line-height);
|
|
519
|
+
font-synthesis-weight: none;
|
|
520
|
+
text-rendering: optimizeLegibility;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
body {
|
|
524
|
+
margin: 0;
|
|
525
|
+
background: var(--background);
|
|
526
|
+
color: var(--foreground);
|
|
527
|
+
transition:
|
|
528
|
+
background-color var(--duration-normal) var(--ease-out),
|
|
529
|
+
color var(--duration-normal) var(--ease-out);
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/* Keyboard focus only. `:focus-visible` rather than `:focus` so a pointer
|
|
533
|
+
click never paints a ring. */
|
|
534
|
+
:focus-visible {
|
|
535
|
+
outline: 2px solid var(--ring);
|
|
536
|
+
outline-offset: 2px;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
::selection {
|
|
540
|
+
background: var(--primary-subtle);
|
|
541
|
+
color: var(--foreground);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
/* Product expectation: every enabled control shows the pointer cursor
|
|
545
|
+
regardless of Tailwind preflight. */
|
|
546
|
+
button:not(:disabled),
|
|
547
|
+
[role='button']:not([aria-disabled='true']),
|
|
548
|
+
[role='tab']:not([aria-disabled='true']),
|
|
549
|
+
[role='menuitem']:not([aria-disabled='true']),
|
|
550
|
+
[role='option']:not([aria-disabled='true']) {
|
|
551
|
+
cursor: pointer;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
button,
|
|
555
|
+
input,
|
|
556
|
+
select,
|
|
557
|
+
textarea {
|
|
558
|
+
font: inherit;
|
|
559
|
+
letter-spacing: inherit;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/* Scrollbars. The thumb is `--muted-foreground`, the lightest rung that
|
|
563
|
+
clears the WCAG 1.4.11 3:1 non-text floor against every surface a scroll
|
|
564
|
+
box sits on; it darkens to `--foreground` on hover so the affordance
|
|
565
|
+
reads as live. */
|
|
566
|
+
::-webkit-scrollbar {
|
|
567
|
+
width: 10px;
|
|
568
|
+
height: 10px;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
::-webkit-scrollbar-track {
|
|
572
|
+
background: transparent;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
::-webkit-scrollbar-thumb {
|
|
576
|
+
background: color-mix(in oklch, var(--muted-foreground) 45%, transparent);
|
|
577
|
+
border: 3px solid transparent;
|
|
578
|
+
border-radius: 9999px;
|
|
579
|
+
background-clip: content-box;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
::-webkit-scrollbar-thumb:hover {
|
|
583
|
+
background: color-mix(in oklch, var(--muted-foreground) 75%, transparent);
|
|
584
|
+
background-clip: content-box;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
::-webkit-scrollbar-corner {
|
|
588
|
+
background: transparent;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
code,
|
|
592
|
+
kbd,
|
|
593
|
+
pre,
|
|
594
|
+
samp {
|
|
595
|
+
font-family: var(--font-mono);
|
|
596
|
+
font-feature-settings: 'liga' 0;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
/* --- Accessibility overrides ---------------------------------------------
|
|
601
|
+
* Kept last so they win the cascade against the rules above.
|
|
602
|
+
* ------------------------------------------------------------------------ */
|
|
603
|
+
@media (prefers-reduced-motion: reduce) {
|
|
604
|
+
*,
|
|
605
|
+
*::before,
|
|
606
|
+
*::after {
|
|
607
|
+
animation-duration: 0.01ms !important;
|
|
608
|
+
animation-iteration-count: 1 !important;
|
|
609
|
+
animation-delay: 0s !important;
|
|
610
|
+
transition-duration: 0.01ms !important;
|
|
611
|
+
scroll-behavior: auto !important;
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
616
|
+
.glass-panel,
|
|
617
|
+
.glass-surface {
|
|
618
|
+
backdrop-filter: none !important;
|
|
619
|
+
-webkit-backdrop-filter: none !important;
|
|
620
|
+
background: var(--background) !important;
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
@media (prefers-contrast: more) {
|
|
625
|
+
:root {
|
|
626
|
+
--border: var(--foreground);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
.glass-panel,
|
|
630
|
+
.glass-surface {
|
|
631
|
+
background: var(--background) !important;
|
|
632
|
+
border: 1px solid var(--foreground) !important;
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
/* An engine without backdrop-filter would render the glass tint alone, which
|
|
637
|
+
is 3-8% alpha — effectively a transparent panel. Fall back to a solid
|
|
638
|
+
surface instead, keeping borders and shadows so panels stay delimited. */
|
|
639
|
+
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
640
|
+
.glass-panel,
|
|
641
|
+
.glass-surface {
|
|
642
|
+
background: var(--background) !important;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* The design system's typefaces, self-hosted.
|
|
2
|
+
*
|
|
3
|
+
* Four families, all variable, all resolved from `node_modules` at build time —
|
|
4
|
+
* a desktop app must not fetch a font at runtime, or the first paint after a cold
|
|
5
|
+
* start shows a fallback face and then reflows.
|
|
6
|
+
*
|
|
7
|
+
* Space Grotesk the interface default, and the face the visual language was
|
|
8
|
+
* drawn against
|
|
9
|
+
* JetBrains Mono code, terminals, ids, paths
|
|
10
|
+
* Geist an alternative interface face; cortana already ships it
|
|
11
|
+
* Geist Mono its monospace counterpart
|
|
12
|
+
*
|
|
13
|
+
* The family is a *selection*, not a constant: `theme.css` exposes a `data-font`
|
|
14
|
+
* axis, so a user can pick a face the way they pick an accent, and the system
|
|
15
|
+
* default (`system`) is always available for someone who wants their OS's own.
|
|
16
|
+
*
|
|
17
|
+
* Consumers import this after the theme:
|
|
18
|
+
*
|
|
19
|
+
* @import '@adea-ai/ui/globals.css';
|
|
20
|
+
* @import '@adea-ai/ui/fonts.css';
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
@import '@fontsource-variable/space-grotesk';
|
|
24
|
+
@import '@fontsource-variable/jetbrains-mono';
|
|
25
|
+
@import '@fontsource-variable/geist';
|
|
26
|
+
@import '@fontsource-variable/geist-mono';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* The Adea design system's prebuilt stylesheet.
|
|
2
|
+
*
|
|
3
|
+
* Import this one file to get Tailwind, the base layer, every token, and the
|
|
4
|
+
* named utilities the components use. It is the entry the shadcn CLI and
|
|
5
|
+
* @shadcn/lint discover, so it must stay the file that imports Tailwind.
|
|
6
|
+
*
|
|
7
|
+
* @import '@adea-ai/ui/globals.css';
|
|
8
|
+
* @import '@adea-ai/ui/fonts.css'; <- optional, self-hosted typefaces
|
|
9
|
+
*
|
|
10
|
+
* A consumer that already imports Tailwind itself should import `theme.css`
|
|
11
|
+
* and `base.css` directly instead, and must not import this file.
|
|
12
|
+
*
|
|
13
|
+
* Tokens live in `theme.css` only. This file must never duplicate them.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
@import 'tailwindcss';
|
|
17
|
+
@import './base.css';
|
|
18
|
+
@import './theme.css';
|