@auronui/styles 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DATA_ATTRIBUTES.md +163 -0
- package/LICENSE +21 -0
- package/README.md +54 -0
- package/base/base.css +40 -0
- package/components/accordion.css +201 -0
- package/components/alert-dialog.css +307 -0
- package/components/alert.css +143 -0
- package/components/aspect-ratio.css +8 -0
- package/components/autocomplete.css +685 -0
- package/components/avatar.css +78 -0
- package/components/badge.css +186 -0
- package/components/breadcrumbs.css +76 -0
- package/components/button-group.css +126 -0
- package/components/button.css +282 -0
- package/components/calendar-year-picker.css +193 -0
- package/components/calendar.css +332 -0
- package/components/card.css +225 -0
- package/components/checkbox-group.css +7 -0
- package/components/checkbox.css +268 -0
- package/components/chip.css +227 -0
- package/components/close-button.css +65 -0
- package/components/collapsible-group.css +7 -0
- package/components/collapsible.css +74 -0
- package/components/color-area.css +81 -0
- package/components/color-field.css +99 -0
- package/components/color-input-group.css +153 -0
- package/components/color-picker.css +121 -0
- package/components/color-slider.css +266 -0
- package/components/color-swatch-picker.css +247 -0
- package/components/color-swatch.css +42 -0
- package/components/combo-box.css +203 -0
- package/components/date-input-group.css +125 -0
- package/components/date-input.css +529 -0
- package/components/date-picker.css +86 -0
- package/components/date-range-field.css +538 -0
- package/components/date-range-picker.css +93 -0
- package/components/description.css +4 -0
- package/components/drawer.css +222 -0
- package/components/dropdown.css +67 -0
- package/components/empty-state.css +4 -0
- package/components/error-message.css +13 -0
- package/components/field-error.css +19 -0
- package/components/fieldset.css +39 -0
- package/components/header.css +7 -0
- package/components/index.css +164 -0
- package/components/input-otp.css +124 -0
- package/components/input.css +603 -0
- package/components/kbd.css +27 -0
- package/components/label.css +28 -0
- package/components/link.css +144 -0
- package/components/list-box-item.css +29 -0
- package/components/list-box-section.css +13 -0
- package/components/list-box.css +11 -0
- package/components/menu-item.css +68 -0
- package/components/menu-section.css +18 -0
- package/components/menu.css +7 -0
- package/components/meter.css +104 -0
- package/components/modal.css +335 -0
- package/components/number-field.css +395 -0
- package/components/pagination.css +157 -0
- package/components/popover.css +96 -0
- package/components/progress-bar.css +126 -0
- package/components/progress-circle.css +82 -0
- package/components/radio-group.css +47 -0
- package/components/radio.css +157 -0
- package/components/range-calendar.css +402 -0
- package/components/scroll-area.css +70 -0
- package/components/scroll-shadow.css +77 -0
- package/components/select.css +649 -0
- package/components/separator.css +59 -0
- package/components/skeleton.css +48 -0
- package/components/slider.css +155 -0
- package/components/spinner.css +42 -0
- package/components/splitter.css +74 -0
- package/components/stepper.css +160 -0
- package/components/surface.css +23 -0
- package/components/switch-group.css +17 -0
- package/components/switch.css +194 -0
- package/components/table.css +341 -0
- package/components/tabs.css +262 -0
- package/components/tag-group.css +66 -0
- package/components/tag.css +99 -0
- package/components/textarea.css +536 -0
- package/components/time-field.css +530 -0
- package/components/toast.css +267 -0
- package/components/toggle-button-group.css +174 -0
- package/components/toggle-button.css +149 -0
- package/components/toolbar.css +32 -0
- package/components/tooltip.css +47 -0
- package/components/tree.css +81 -0
- package/index.css +29 -0
- package/package.json +415 -0
- package/src/components/accordion/accordion.styles.ts +46 -0
- package/src/components/accordion/index.ts +1 -0
- package/src/components/alert/alert.styles.ts +37 -0
- package/src/components/alert/index.ts +1 -0
- package/src/components/alert-dialog/alert-dialog.styles.ts +72 -0
- package/src/components/alert-dialog/index.ts +1 -0
- package/src/components/aspect-ratio/aspect-ratio.styles.ts +10 -0
- package/src/components/aspect-ratio/index.ts +1 -0
- package/src/components/autocomplete/autocomplete.styles.ts +86 -0
- package/src/components/autocomplete/index.ts +1 -0
- package/src/components/avatar/avatar.styles.ts +53 -0
- package/src/components/avatar/index.ts +1 -0
- package/src/components/badge/badge.styles.ts +77 -0
- package/src/components/badge/index.ts +1 -0
- package/src/components/breadcrumbs/breadcrumbs.styles.ts +14 -0
- package/src/components/breadcrumbs/index.ts +1 -0
- package/src/components/button/__tests__/button.styles.test.ts +79 -0
- package/src/components/button/button.styles.ts +65 -0
- package/src/components/button/index.ts +1 -0
- package/src/components/button-group/button-group.styles.ts +32 -0
- package/src/components/button-group/index.ts +1 -0
- package/src/components/calendar/calendar.styles.ts +60 -0
- package/src/components/calendar/index.ts +1 -0
- package/src/components/calendar-year-picker/calendar-year-picker.styles.ts +15 -0
- package/src/components/calendar-year-picker/index.ts +1 -0
- package/src/components/card/card.styles.ts +65 -0
- package/src/components/card/index.ts +1 -0
- package/src/components/checkbox/checkbox.styles.ts +27 -0
- package/src/components/checkbox/index.ts +1 -0
- package/src/components/checkbox-group/checkbox-group.styles.ts +18 -0
- package/src/components/checkbox-group/index.ts +1 -0
- package/src/components/chip/chip.styles.ts +65 -0
- package/src/components/chip/index.ts +1 -0
- package/src/components/close-button/close-button.styles.ts +17 -0
- package/src/components/close-button/index.ts +1 -0
- package/src/components/collapsible/collapsible.styles.ts +25 -0
- package/src/components/collapsible/index.ts +1 -0
- package/src/components/collapsible-group/collapsible-group.styles.ts +13 -0
- package/src/components/collapsible-group/index.ts +1 -0
- package/src/components/color-area/color-area.styles.ts +23 -0
- package/src/components/color-area/index.ts +1 -0
- package/src/components/color-field/color-field.styles.ts +18 -0
- package/src/components/color-field/index.ts +1 -0
- package/src/components/color-input-group/color-input-group.styles.ts +34 -0
- package/src/components/color-input-group/index.ts +1 -0
- package/src/components/color-picker/color-picker.styles.ts +13 -0
- package/src/components/color-picker/index.ts +1 -0
- package/src/components/color-slider/color-slider.styles.ts +14 -0
- package/src/components/color-slider/index.ts +1 -0
- package/src/components/color-swatch/color-swatch.styles.ts +26 -0
- package/src/components/color-swatch/index.ts +1 -0
- package/src/components/color-swatch-picker/color-swatch-picker.styles.ts +54 -0
- package/src/components/color-swatch-picker/index.ts +1 -0
- package/src/components/combo-box/combo-box.styles.ts +26 -0
- package/src/components/combo-box/index.ts +1 -0
- package/src/components/date-input/date-input.styles.ts +86 -0
- package/src/components/date-input/index.ts +1 -0
- package/src/components/date-picker/date-picker.styles.ts +14 -0
- package/src/components/date-picker/index.ts +1 -0
- package/src/components/date-range-field/date-range-field.styles.ts +87 -0
- package/src/components/date-range-field/index.ts +1 -0
- package/src/components/date-range-picker/date-range-picker.styles.ts +14 -0
- package/src/components/date-range-picker/index.ts +1 -0
- package/src/components/description/description.styles.ts +9 -0
- package/src/components/description/index.ts +1 -0
- package/src/components/drawer/drawer.styles.ts +55 -0
- package/src/components/drawer/index.ts +1 -0
- package/src/components/dropdown/dropdown.styles.ts +14 -0
- package/src/components/dropdown/index.ts +1 -0
- package/src/components/empty-state/empty-state.styles.ts +9 -0
- package/src/components/empty-state/index.ts +1 -0
- package/src/components/error-message/error-message.styles.ts +9 -0
- package/src/components/error-message/index.ts +1 -0
- package/src/components/fieldset/fieldset.styles.ts +29 -0
- package/src/components/fieldset/index.ts +1 -0
- package/src/components/header/header.styles.ts +5 -0
- package/src/components/header/index.ts +1 -0
- package/src/components/index.ts +84 -0
- package/src/components/input/index.ts +1 -0
- package/src/components/input/input.styles.ts +87 -0
- package/src/components/input-otp/index.ts +1 -0
- package/src/components/input-otp/input-otp.styles.ts +30 -0
- package/src/components/kbd/index.ts +1 -0
- package/src/components/kbd/kbd.styles.ts +20 -0
- package/src/components/label/index.ts +1 -0
- package/src/components/label/label.styles.ts +25 -0
- package/src/components/link/index.ts +1 -0
- package/src/components/link/link.styles.ts +38 -0
- package/src/components/list-box/index.ts +1 -0
- package/src/components/list-box/list-box.styles.ts +18 -0
- package/src/components/list-box-item/index.ts +1 -0
- package/src/components/list-box-item/list-box-item.styles.ts +25 -0
- package/src/components/list-box-section/index.ts +1 -0
- package/src/components/list-box-section/list-box-section.styles.ts +13 -0
- package/src/components/menu/index.ts +1 -0
- package/src/components/menu/menu.styles.ts +9 -0
- package/src/components/menu-item/index.ts +1 -0
- package/src/components/menu-item/menu-item.styles.ts +26 -0
- package/src/components/menu-section/index.ts +1 -0
- package/src/components/menu-section/menu-section.styles.ts +14 -0
- package/src/components/meter/index.ts +1 -0
- package/src/components/meter/meter.styles.ts +48 -0
- package/src/components/modal/index.ts +1 -0
- package/src/components/modal/modal.styles.ts +70 -0
- package/src/components/number-field/index.ts +1 -0
- package/src/components/number-field/number-field.styles.ts +80 -0
- package/src/components/pagination/index.ts +1 -0
- package/src/components/pagination/pagination.styles.ts +32 -0
- package/src/components/popover/index.ts +1 -0
- package/src/components/popover/popover.styles.ts +14 -0
- package/src/components/progress-bar/index.ts +1 -0
- package/src/components/progress-bar/progress-bar.styles.ts +97 -0
- package/src/components/progress-circle/index.ts +1 -0
- package/src/components/progress-circle/progress-circle.styles.ts +74 -0
- package/src/components/radio/index.ts +1 -0
- package/src/components/radio/radio.styles.ts +14 -0
- package/src/components/radio-group/index.ts +1 -0
- package/src/components/radio-group/radio-group.styles.ts +18 -0
- package/src/components/range-calendar/index.ts +1 -0
- package/src/components/range-calendar/range-calendar.styles.ts +60 -0
- package/src/components/scroll-shadow/index.ts +1 -0
- package/src/components/scroll-shadow/scroll-shadow.styles.ts +37 -0
- package/src/components/select/index.ts +1 -0
- package/src/components/select/select.styles.ts +86 -0
- package/src/components/separator/index.ts +1 -0
- package/src/components/separator/separator.styles.ts +25 -0
- package/src/components/skeleton/index.ts +1 -0
- package/src/components/skeleton/skeleton.styles.ts +21 -0
- package/src/components/slider/index.ts +1 -0
- package/src/components/slider/slider.styles.ts +40 -0
- package/src/components/spinner/index.ts +1 -0
- package/src/components/spinner/spinner.styles.ts +28 -0
- package/src/components/splitter/index.ts +1 -0
- package/src/components/splitter/splitter.styles.ts +28 -0
- package/src/components/stepper/index.ts +1 -0
- package/src/components/stepper/stepper.styles.ts +57 -0
- package/src/components/surface/index.ts +1 -0
- package/src/components/surface/surface.styles.ts +20 -0
- package/src/components/switch/index.ts +1 -0
- package/src/components/switch/switch.styles.ts +31 -0
- package/src/components/switch-group/index.ts +1 -0
- package/src/components/switch-group/switch-group.styles.ts +25 -0
- package/src/components/table/index.ts +1 -0
- package/src/components/table/table.styles.ts +47 -0
- package/src/components/tabs/index.ts +1 -0
- package/src/components/tabs/tabs.styles.ts +31 -0
- package/src/components/tag/index.ts +1 -0
- package/src/components/tag/tag.styles.ts +37 -0
- package/src/components/tag-group/index.ts +1 -0
- package/src/components/tag-group/tag-group.styles.ts +12 -0
- package/src/components/text/index.ts +1 -0
- package/src/components/text/text.styles.ts +29 -0
- package/src/components/textarea/index.ts +1 -0
- package/src/components/textarea/textarea.styles.ts +86 -0
- package/src/components/time-field/index.ts +1 -0
- package/src/components/time-field/time-field.styles.ts +86 -0
- package/src/components/toast/index.ts +1 -0
- package/src/components/toast/toast.styles.ts +67 -0
- package/src/components/toggle-button/index.ts +1 -0
- package/src/components/toggle-button/toggle-button.styles.ts +28 -0
- package/src/components/toggle-button-group/index.ts +1 -0
- package/src/components/toggle-button-group/toggle-button-group.styles.ts +39 -0
- package/src/components/toolbar/index.ts +1 -0
- package/src/components/toolbar/toolbar.styles.ts +23 -0
- package/src/components/tooltip/index.ts +1 -0
- package/src/components/tooltip/tooltip.styles.ts +12 -0
- package/src/components/tree/index.ts +1 -0
- package/src/components/tree/tree.styles.ts +33 -0
- package/src/index.ts +5 -0
- package/src/utils/index.ts +15 -0
- package/themes/default/components/index.css +6 -0
- package/themes/default/index.css +8 -0
- package/themes/default/variables.css +168 -0
- package/themes/shared/theme.css +196 -0
- package/utilities/index.css +244 -0
- package/variants/index.css +106 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/* -------------------------------------------------------------------------------------------------
|
|
2
|
+
* Toast Component Styles
|
|
3
|
+
* Block: toast
|
|
4
|
+
* ------------------------------------------------------------------------------------------------- */
|
|
5
|
+
|
|
6
|
+
/* Toast Region - Fixed container that stacks toasts along Y axis */
|
|
7
|
+
.toast-region {
|
|
8
|
+
@apply pointer-events-none fixed z-50 outline-none;
|
|
9
|
+
@apply w-[calc(100vw-2rem)] sm:w-auto;
|
|
10
|
+
|
|
11
|
+
display: flex;
|
|
12
|
+
gap: 0.5rem;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.toast-region:focus-visible {
|
|
16
|
+
@apply outline-2 outline-offset-2 outline-focus;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
* Bottom positions: column
|
|
21
|
+
* Newest is last in DOM → visual bottom → nearest to screen edge
|
|
22
|
+
*/
|
|
23
|
+
.toast-region--bottom {
|
|
24
|
+
@apply bottom-4 left-1/2 -translate-x-1/2;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.toast-region--bottom-start {
|
|
29
|
+
@apply bottom-4 left-4;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.toast-region--bottom-end {
|
|
34
|
+
@apply right-4 bottom-4;
|
|
35
|
+
flex-direction: column;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/*
|
|
39
|
+
* Top positions: column-reverse
|
|
40
|
+
* Newest is last in DOM → visually first → nearest to top edge
|
|
41
|
+
*/
|
|
42
|
+
.toast-region--top {
|
|
43
|
+
@apply top-4 left-1/2 -translate-x-1/2;
|
|
44
|
+
flex-direction: column-reverse;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.toast-region--top-start {
|
|
48
|
+
@apply top-4 left-4;
|
|
49
|
+
flex-direction: column-reverse;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.toast-region--top-end {
|
|
53
|
+
@apply top-4 right-4;
|
|
54
|
+
flex-direction: column-reverse;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* -------------------------------------------------------------------------------------------------
|
|
58
|
+
* Block: toast
|
|
59
|
+
* ------------------------------------------------------------------------------------------------- */
|
|
60
|
+
|
|
61
|
+
.toast {
|
|
62
|
+
--toast-width: 360px;
|
|
63
|
+
|
|
64
|
+
@apply relative pointer-events-auto flex w-full items-start gap-3;
|
|
65
|
+
@apply rounded-2xl border border-border bg-overlay px-4 py-3.5 shadow-overlay;
|
|
66
|
+
|
|
67
|
+
/* Clamp to viewport on mobile, fixed width on sm+ */
|
|
68
|
+
min-width: min(calc(100vw - 2rem), var(--toast-width));
|
|
69
|
+
max-width: var(--toast-width);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.toast:focus-visible {
|
|
73
|
+
@apply outline-2 outline-offset-2 outline-focus;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* -------------------------------------------------------------------------------------------------
|
|
77
|
+
* Elements
|
|
78
|
+
* ------------------------------------------------------------------------------------------------- */
|
|
79
|
+
|
|
80
|
+
.toast__content {
|
|
81
|
+
@apply flex min-w-0 flex-1 flex-col gap-0.5;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.toast__indicator {
|
|
85
|
+
@apply mt-0.5 flex shrink-0 items-center justify-center select-none;
|
|
86
|
+
@apply size-5 rounded-full;
|
|
87
|
+
|
|
88
|
+
[data-slot="toast-default-icon"] {
|
|
89
|
+
@apply size-3.5;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.toast__title {
|
|
94
|
+
@apply text-sm font-semibold leading-5 text-overlay-foreground;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.toast__description {
|
|
98
|
+
@apply text-xs leading-[1.125rem] text-muted;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.toast__close-button {
|
|
102
|
+
@apply -mr-1 -mt-0.5 shrink-0 opacity-40;
|
|
103
|
+
|
|
104
|
+
transition: opacity 200ms ease;
|
|
105
|
+
@apply motion-reduce:transition-none;
|
|
106
|
+
|
|
107
|
+
@media (hover: hover) {
|
|
108
|
+
&:hover,
|
|
109
|
+
&[data-hovered="true"] {
|
|
110
|
+
@apply opacity-100;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.toast__action {
|
|
116
|
+
@apply shrink-0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* -------------------------------------------------------------------------------------------------
|
|
120
|
+
* Variant modifiers
|
|
121
|
+
* ------------------------------------------------------------------------------------------------- */
|
|
122
|
+
|
|
123
|
+
.toast--default {
|
|
124
|
+
/* uses base bg-overlay + border-border */
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.toast--accent {
|
|
128
|
+
background-color: color-mix(in oklab, var(--accent) 8%, var(--overlay));
|
|
129
|
+
border-color: color-mix(in oklab, var(--accent) 28%, transparent);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.toast--accent .toast__title {
|
|
133
|
+
@apply text-accent;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.toast--accent .toast__indicator {
|
|
137
|
+
background-color: color-mix(in oklab, var(--accent) 15%, transparent);
|
|
138
|
+
@apply text-accent;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.toast--success {
|
|
142
|
+
background-color: color-mix(in oklab, var(--success) 8%, var(--overlay));
|
|
143
|
+
border-color: color-mix(in oklab, var(--success) 28%, transparent);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.toast--success .toast__title {
|
|
147
|
+
@apply text-success;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.toast--success .toast__indicator {
|
|
151
|
+
background-color: color-mix(in oklab, var(--success) 15%, transparent);
|
|
152
|
+
@apply text-success;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.toast--warning {
|
|
156
|
+
background-color: color-mix(in oklab, var(--warning) 9%, var(--overlay));
|
|
157
|
+
border-color: color-mix(in oklab, var(--warning) 30%, transparent);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.toast--warning .toast__title {
|
|
161
|
+
@apply text-warning;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.toast--warning .toast__indicator {
|
|
165
|
+
background-color: color-mix(in oklab, var(--warning) 15%, transparent);
|
|
166
|
+
@apply text-warning;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.toast--danger {
|
|
170
|
+
background-color: color-mix(in oklab, var(--danger) 8%, var(--overlay));
|
|
171
|
+
border-color: color-mix(in oklab, var(--danger) 30%, transparent);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.toast--danger .toast__title {
|
|
175
|
+
@apply text-danger;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.toast--danger .toast__indicator {
|
|
179
|
+
background-color: color-mix(in oklab, var(--danger) 15%, transparent);
|
|
180
|
+
@apply text-danger;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* -------------------------------------------------------------------------------------------------
|
|
184
|
+
* Enter/exit animations
|
|
185
|
+
* Reka sets data-state="open"/"closed" on ToastRoot.
|
|
186
|
+
* Corner toasts slide from the nearest screen edge.
|
|
187
|
+
* Center toasts slide from top or bottom.
|
|
188
|
+
* ------------------------------------------------------------------------------------------------- */
|
|
189
|
+
|
|
190
|
+
.toast--bottom-end[data-state="open"],
|
|
191
|
+
.toast--top-end[data-state="open"] {
|
|
192
|
+
animation: toast-enter-right 0.3s cubic-bezier(0.16, 1, 0.3, 1);
|
|
193
|
+
}
|
|
194
|
+
.toast--bottom-end[data-state="closed"],
|
|
195
|
+
.toast--top-end[data-state="closed"] {
|
|
196
|
+
animation: toast-exit-right 0.2s ease-in forwards;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.toast--bottom-start[data-state="open"],
|
|
200
|
+
.toast--top-start[data-state="open"] {
|
|
201
|
+
animation: toast-enter-left 0.3s cubic-bezier(0.16, 1, 0.3, 1);
|
|
202
|
+
}
|
|
203
|
+
.toast--bottom-start[data-state="closed"],
|
|
204
|
+
.toast--top-start[data-state="closed"] {
|
|
205
|
+
animation: toast-exit-left 0.2s ease-in forwards;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.toast--bottom[data-state="open"] {
|
|
209
|
+
animation: toast-enter-bottom 0.3s cubic-bezier(0.16, 1, 0.3, 1);
|
|
210
|
+
}
|
|
211
|
+
.toast--bottom[data-state="closed"] {
|
|
212
|
+
animation: toast-exit-bottom 0.2s ease-in forwards;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.toast--top[data-state="open"] {
|
|
216
|
+
animation: toast-enter-top 0.3s cubic-bezier(0.16, 1, 0.3, 1);
|
|
217
|
+
}
|
|
218
|
+
.toast--top[data-state="closed"] {
|
|
219
|
+
animation: toast-exit-top 0.2s ease-in forwards;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
@media (prefers-reduced-motion: reduce) {
|
|
223
|
+
[class*="toast--"][data-state="open"],
|
|
224
|
+
[class*="toast--"][data-state="closed"] {
|
|
225
|
+
animation: none;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/* -------------------------------------------------------------------------------------------------
|
|
230
|
+
* Keyframes
|
|
231
|
+
* ------------------------------------------------------------------------------------------------- */
|
|
232
|
+
|
|
233
|
+
@keyframes toast-enter-right {
|
|
234
|
+
from { translate: calc(100% + 1rem) 0; opacity: 0; }
|
|
235
|
+
to { translate: 0 0; opacity: 1; }
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
@keyframes toast-exit-right {
|
|
239
|
+
to { translate: calc(100% + 1rem) 0; opacity: 0; }
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
@keyframes toast-enter-left {
|
|
243
|
+
from { translate: calc(-100% - 1rem) 0; opacity: 0; }
|
|
244
|
+
to { translate: 0 0; opacity: 1; }
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
@keyframes toast-exit-left {
|
|
248
|
+
to { translate: calc(-100% - 1rem) 0; opacity: 0; }
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
@keyframes toast-enter-bottom {
|
|
252
|
+
from { translate: 0 calc(100% + 1rem); opacity: 0; }
|
|
253
|
+
to { translate: 0 0; opacity: 1; }
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
@keyframes toast-exit-bottom {
|
|
257
|
+
to { translate: 0 calc(100% + 1rem); opacity: 0; }
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
@keyframes toast-enter-top {
|
|
261
|
+
from { translate: 0 calc(-100% - 1rem); opacity: 0; }
|
|
262
|
+
to { translate: 0 0; opacity: 1; }
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
@keyframes toast-exit-top {
|
|
266
|
+
to { translate: 0 calc(-100% - 1rem); opacity: 0; }
|
|
267
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
ToggleButtonGroup - Groups multiple ToggleButtons into a unified control
|
|
3
|
+
========================================================================== */
|
|
4
|
+
|
|
5
|
+
/* Base styles */
|
|
6
|
+
.toggle-button-group {
|
|
7
|
+
@apply inline-flex h-auto w-fit items-center justify-center gap-0;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* ==========================================================================
|
|
11
|
+
Orientation variants
|
|
12
|
+
========================================================================== */
|
|
13
|
+
|
|
14
|
+
.toggle-button-group--horizontal {
|
|
15
|
+
@apply flex-row rounded-3xl;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.toggle-button-group--vertical {
|
|
19
|
+
@apply flex-col rounded-lg;
|
|
20
|
+
|
|
21
|
+
& .toggle-button {
|
|
22
|
+
@apply w-full;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
& .toggle-button:first-child {
|
|
26
|
+
@apply !rounded-t-lg rounded-b-none;
|
|
27
|
+
}
|
|
28
|
+
& .toggle-button:last-child {
|
|
29
|
+
@apply !rounded-b-lg rounded-t-none;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* ==========================================================================
|
|
34
|
+
Full width modifier
|
|
35
|
+
========================================================================== */
|
|
36
|
+
|
|
37
|
+
.toggle-button-group--full-width {
|
|
38
|
+
@apply w-full;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* ==========================================================================
|
|
42
|
+
Attached mode (default) - unified group border with dividers between buttons
|
|
43
|
+
========================================================================== */
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* The GROUP container owns the outer border (via ring/box-shadow).
|
|
47
|
+
* Individual buttons suppress their own background so the group background
|
|
48
|
+
* shows through. A thin divider renders between adjacent siblings.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
/* Group container: outer ring acts as the shared border for all contained buttons */
|
|
52
|
+
.toggle-button-group:not(.toggle-button-group--detached) {
|
|
53
|
+
box-shadow: 0 0 0 1px color-mix(in oklab, currentColor 20%, transparent);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Suppress individual button backgrounds inside attached group so the
|
|
57
|
+
group background shows through as a single unified surface */
|
|
58
|
+
.toggle-button-group:not(.toggle-button-group--detached) .toggle-button {
|
|
59
|
+
--toggle-button-bg: transparent;
|
|
60
|
+
--toggle-button-bg-hover: color-mix(in oklab, currentColor 8%, transparent);
|
|
61
|
+
--toggle-button-bg-pressed: color-mix(in oklab, currentColor 12%, transparent);
|
|
62
|
+
@apply rounded-none;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* Divider between adjacent buttons — horizontal group: vertical line */
|
|
66
|
+
.toggle-button-group--horizontal:not(.toggle-button-group--detached) .toggle-button + .toggle-button {
|
|
67
|
+
border-inline-start: 1px solid color-mix(in oklab, currentColor 20%, transparent);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Divider between adjacent buttons — vertical group: horizontal line */
|
|
71
|
+
.toggle-button-group--vertical:not(.toggle-button-group--detached) .toggle-button + .toggle-button {
|
|
72
|
+
border-block-start: 1px solid color-mix(in oklab, currentColor 20%, transparent);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Apply border radius to first button (start edge) */
|
|
76
|
+
.toggle-button-group--horizontal .toggle-button:first-child {
|
|
77
|
+
@apply rounded-s-3xl;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Apply border radius to last button (end edge) */
|
|
81
|
+
.toggle-button-group--horizontal .toggle-button:last-child {
|
|
82
|
+
@apply rounded-e-3xl;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* If only one button, apply both rounded edges */
|
|
86
|
+
.toggle-button-group--horizontal .toggle-button:first-child:last-child {
|
|
87
|
+
@apply rounded-3xl;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Apply border radius to first button (top edge) in vertical */
|
|
91
|
+
.toggle-button-group--vertical .toggle-button:first-child {
|
|
92
|
+
@apply rounded-t-3xl;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Apply border radius to last button (bottom edge) in vertical */
|
|
96
|
+
.toggle-button-group--vertical .toggle-button:last-child {
|
|
97
|
+
@apply rounded-b-3xl;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* If only one button in vertical, apply all rounded edges */
|
|
101
|
+
.toggle-button-group--vertical .toggle-button:first-child:last-child {
|
|
102
|
+
@apply rounded-3xl;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* Remove scale transform on active/pressed state for buttons in group */
|
|
106
|
+
.toggle-button-group .toggle-button:active,
|
|
107
|
+
.toggle-button-group .toggle-button:active {
|
|
108
|
+
transform: none;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* Override focus ring to use inset style so it stays within button bounds */
|
|
112
|
+
.toggle-button-group .toggle-button:focus-visible:not(:focus),
|
|
113
|
+
.toggle-button-group .toggle-button:focus-visible {
|
|
114
|
+
--tw-ring-offset-width: 0px;
|
|
115
|
+
@apply ring-inset;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* Full width: stretch each toggle button */
|
|
119
|
+
.toggle-button-group--full-width .toggle-button {
|
|
120
|
+
@apply flex-1;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* ==========================================================================
|
|
124
|
+
Separator (compound component)
|
|
125
|
+
========================================================================== */
|
|
126
|
+
|
|
127
|
+
.toggle-button-group__separator {
|
|
128
|
+
@apply bg-current opacity-15;
|
|
129
|
+
|
|
130
|
+
border-radius: 4px;
|
|
131
|
+
position: absolute;
|
|
132
|
+
pointer-events: none;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Transitions
|
|
136
|
+
* CRITICAL: motion-reduce must be AFTER transition for correct override specificity
|
|
137
|
+
*/
|
|
138
|
+
transition: opacity 300ms var(--ease-smooth);
|
|
139
|
+
@apply motion-reduce:transition-none;
|
|
140
|
+
|
|
141
|
+
/* Horizontal orientation - vertical divider */
|
|
142
|
+
.toggle-button-group--horizontal & {
|
|
143
|
+
left: -1px;
|
|
144
|
+
top: 25%;
|
|
145
|
+
width: 1px;
|
|
146
|
+
height: 50%;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* Vertical orientation - horizontal divider */
|
|
150
|
+
.toggle-button-group--vertical & {
|
|
151
|
+
left: 25%;
|
|
152
|
+
top: -1px;
|
|
153
|
+
width: 50%;
|
|
154
|
+
height: 1px;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* ==========================================================================
|
|
159
|
+
Detached mode - buttons separated with gaps
|
|
160
|
+
========================================================================== */
|
|
161
|
+
|
|
162
|
+
.toggle-button-group--detached {
|
|
163
|
+
@apply gap-1;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* Restore border radius in detached mode */
|
|
167
|
+
.toggle-button-group--detached .toggle-button {
|
|
168
|
+
@apply rounded-3xl;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* Hide separators in detached mode */
|
|
172
|
+
.toggle-button-group--detached .toggle-button-group__separator {
|
|
173
|
+
display: none;
|
|
174
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
ToggleButton - Interactive toggle control for on/off states
|
|
3
|
+
========================================================================== */
|
|
4
|
+
|
|
5
|
+
/* Base styles */
|
|
6
|
+
.toggle-button {
|
|
7
|
+
@apply relative isolate inline-flex h-10 w-fit origin-center items-center justify-center gap-2 rounded-3xl px-4 text-sm font-medium whitespace-nowrap outline-none select-none no-highlight md:h-9;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Transitions
|
|
11
|
+
* CRITICAL: motion-reduce must be AFTER transition for correct override specificity
|
|
12
|
+
*/
|
|
13
|
+
transition:
|
|
14
|
+
transform 300ms var(--ease-smooth),
|
|
15
|
+
background-color 300ms var(--ease-out),
|
|
16
|
+
box-shadow 300ms var(--ease-out);
|
|
17
|
+
@apply transform-gpu motion-reduce:transition-none;
|
|
18
|
+
|
|
19
|
+
/* Cursor */
|
|
20
|
+
cursor: var(--cursor-interactive);
|
|
21
|
+
|
|
22
|
+
/* Default tokens (unselected state) */
|
|
23
|
+
--toggle-button-bg: var(--color-default);
|
|
24
|
+
--toggle-button-bg-hover: var(--color-default-hover);
|
|
25
|
+
--toggle-button-bg-pressed: var(--color-default-hover);
|
|
26
|
+
--toggle-button-fg: currentColor;
|
|
27
|
+
|
|
28
|
+
/* Selected state tokens */
|
|
29
|
+
--toggle-button-bg-selected: var(--color-accent-soft);
|
|
30
|
+
--toggle-button-bg-selected-hover: var(--color-accent-soft-hover);
|
|
31
|
+
--toggle-button-bg-selected-pressed: var(--color-accent-soft-hover);
|
|
32
|
+
--toggle-button-fg-selected: var(--color-accent-soft-foreground);
|
|
33
|
+
|
|
34
|
+
background-color: var(--toggle-button-bg);
|
|
35
|
+
color: var(--toggle-button-fg);
|
|
36
|
+
|
|
37
|
+
/* Focus state */
|
|
38
|
+
&:focus-visible:not(:focus),
|
|
39
|
+
&[data-focus-visible="true"] {
|
|
40
|
+
@apply status-focused;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Disabled state */
|
|
44
|
+
&:disabled,
|
|
45
|
+
&[aria-disabled="true"] {
|
|
46
|
+
@apply status-disabled;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* Hover */
|
|
50
|
+
@media (hover: hover) {
|
|
51
|
+
&:hover,
|
|
52
|
+
&[data-hovered="true"] {
|
|
53
|
+
background-color: var(--toggle-button-bg-hover);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Active / pressed */
|
|
58
|
+
&:active,
|
|
59
|
+
&[data-pressed="true"] {
|
|
60
|
+
background-color: var(--toggle-button-bg-pressed);
|
|
61
|
+
transform: scale(0.97);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* Selected state */
|
|
65
|
+
&[data-state="on"] {
|
|
66
|
+
background-color: var(--toggle-button-bg-selected);
|
|
67
|
+
color: var(--toggle-button-fg-selected);
|
|
68
|
+
|
|
69
|
+
@media (hover: hover) {
|
|
70
|
+
&:hover,
|
|
71
|
+
&[data-hovered="true"] {
|
|
72
|
+
background-color: var(--toggle-button-bg-selected-hover);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&:active,
|
|
77
|
+
&[data-pressed="true"] {
|
|
78
|
+
background-color: var(--toggle-button-bg-selected-pressed);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* SVG icon styling */
|
|
83
|
+
& svg {
|
|
84
|
+
@apply pointer-events-none -mx-0.5 my-0.5 size-5 shrink-0 self-center sm:my-1 sm:size-4;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* ==========================================================================
|
|
89
|
+
Size variants
|
|
90
|
+
========================================================================== */
|
|
91
|
+
|
|
92
|
+
.toggle-button--sm {
|
|
93
|
+
@apply h-9 px-3 md:h-8;
|
|
94
|
+
|
|
95
|
+
& svg {
|
|
96
|
+
@apply size-4;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
&:active,
|
|
100
|
+
&[data-pressed="true"] {
|
|
101
|
+
transform: scale(0.98);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.toggle-button--md {
|
|
106
|
+
/* No styles as this is the default size */
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.toggle-button--lg {
|
|
110
|
+
@apply h-11 text-base md:h-10;
|
|
111
|
+
|
|
112
|
+
&:active,
|
|
113
|
+
&[data-pressed="true"] {
|
|
114
|
+
transform: scale(0.96);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* ==========================================================================
|
|
119
|
+
Variant styles
|
|
120
|
+
========================================================================== */
|
|
121
|
+
|
|
122
|
+
.toggle-button--default {
|
|
123
|
+
--toggle-button-bg: var(--color-default);
|
|
124
|
+
--toggle-button-bg-hover: var(--color-default-hover);
|
|
125
|
+
--toggle-button-bg-pressed: var(--color-default-hover);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.toggle-button--ghost {
|
|
129
|
+
--toggle-button-bg: transparent;
|
|
130
|
+
--toggle-button-bg-hover: var(--color-default);
|
|
131
|
+
--toggle-button-bg-pressed: var(--color-default);
|
|
132
|
+
--toggle-button-fg: var(--color-default-foreground);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* ==========================================================================
|
|
136
|
+
Icon-only modifier
|
|
137
|
+
========================================================================== */
|
|
138
|
+
|
|
139
|
+
.toggle-button--icon-only {
|
|
140
|
+
@apply w-10 p-0 md:w-9;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.toggle-button--icon-only.toggle-button--sm {
|
|
144
|
+
@apply w-9 md:w-8;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.toggle-button--icon-only.toggle-button--lg {
|
|
148
|
+
@apply w-11 md:w-10;
|
|
149
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
Toolbar - Container for interactive controls with arrow key navigation
|
|
3
|
+
========================================================================== */
|
|
4
|
+
|
|
5
|
+
/* Base styles */
|
|
6
|
+
.toolbar {
|
|
7
|
+
@apply grid w-fit grid-flow-col items-center gap-2;
|
|
8
|
+
|
|
9
|
+
.separator--vertical {
|
|
10
|
+
@apply h-1/2 self-center;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.separator--horizontal {
|
|
14
|
+
@apply w-1/2 justify-center justify-self-center;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* Orientation variants */
|
|
19
|
+
.toolbar--horizontal {
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.toolbar--vertical {
|
|
23
|
+
@apply grid-flow-row items-start justify-start;
|
|
24
|
+
.button-group {
|
|
25
|
+
@apply justify-start;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Attached variant */
|
|
30
|
+
.toolbar--attached {
|
|
31
|
+
@apply rounded-full bg-surface p-1 shadow-overlay;
|
|
32
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* Tooltip component styles */
|
|
2
|
+
|
|
3
|
+
/* Base tooltip styles */
|
|
4
|
+
.tooltip {
|
|
5
|
+
@apply max-w-xs text-xs break-all;
|
|
6
|
+
/* box-shadow: var(--shadow-overlay); */
|
|
7
|
+
will-change: opacity, transform;
|
|
8
|
+
|
|
9
|
+
/* Arrow styling */
|
|
10
|
+
& [data-slot="overlay-arrow"] {
|
|
11
|
+
@apply stroke-border/40;
|
|
12
|
+
fill: var(--overlay);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Arrow rotation based on placement */
|
|
16
|
+
&[data-placement="bottom"] [data-slot="overlay-arrow"] {
|
|
17
|
+
rotate: 180deg;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&[data-placement="left"] [data-slot="overlay-arrow"] {
|
|
21
|
+
rotate: -90deg;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&[data-placement="right"] [data-slot="overlay-arrow"] {
|
|
25
|
+
rotate: 90deg;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* Tooltip trigger */
|
|
30
|
+
.tooltip__trigger {
|
|
31
|
+
@apply inline-block;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Transitions
|
|
35
|
+
* CRITICAL: motion-reduce must be AFTER transition for correct override specificity
|
|
36
|
+
*/
|
|
37
|
+
transition:
|
|
38
|
+
color 300ms var(--ease-smooth),
|
|
39
|
+
background-color 300ms var(--ease-smooth),
|
|
40
|
+
box-shadow 300ms var(--ease-out);
|
|
41
|
+
@apply motion-reduce:transition-none;
|
|
42
|
+
|
|
43
|
+
&:focus-visible:not(:focus),
|
|
44
|
+
&[data-focus-visible="true"] {
|
|
45
|
+
@apply status-focused;
|
|
46
|
+
}
|
|
47
|
+
}
|