@spartan-ng/cli 0.0.1-alpha.720 → 1.0.1-alpha.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.
Files changed (69) hide show
  1. package/README.md +3 -3
  2. package/package.json +3 -2
  3. package/src/generators/base/generator.js +1 -2
  4. package/src/generators/base/generator.js.map +1 -1
  5. package/src/generators/base/lib/initialize-angular-library.d.ts +1 -1
  6. package/src/generators/base/lib/initialize-angular-library.js.map +1 -1
  7. package/src/generators/base/lib/styles/transform-style-map.d.ts +2 -0
  8. package/src/generators/base/lib/styles/transform-style-map.js +5 -4
  9. package/src/generators/base/lib/styles/transform-style-map.js.map +1 -1
  10. package/src/generators/base/schema.d.ts +2 -0
  11. package/src/generators/migrate-helm-libraries/generator.js +2 -2
  12. package/src/generators/migrate-helm-libraries/generator.js.map +1 -1
  13. package/src/generators/migrate-helm-libraries/schema.d.ts +2 -0
  14. package/src/generators/migrate-hlm/generator.js +1 -1
  15. package/src/generators/migrate-hlm/generator.js.map +1 -1
  16. package/src/generators/ui/generator.d.ts +2 -0
  17. package/src/generators/ui/generator.js +7 -4
  18. package/src/generators/ui/generator.js.map +1 -1
  19. package/src/generators/ui/libs/autocomplete/files/lib/hlm-autocomplete-input.ts.template +37 -33
  20. package/src/generators/ui/libs/breadcrumb/files/lib/hlm-breadcrumb-ellipsis.ts.template +11 -17
  21. package/src/generators/ui/libs/calendar/files/lib/hlm-calendar-multi.ts.template +1 -1
  22. package/src/generators/ui/libs/calendar/files/lib/hlm-calendar-range.ts.template +1 -1
  23. package/src/generators/ui/libs/calendar/files/lib/hlm-calendar.ts.template +1 -1
  24. package/src/generators/ui/libs/combobox/files/lib/hlm-combobox-input.ts.template +47 -42
  25. package/src/generators/ui/libs/context-menu/files/lib/hlm-context-menu-trigger.ts.template +8 -14
  26. package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker-anchor.ts.template +4 -2
  27. package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker-input.ts.template +49 -37
  28. package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker-multi.ts.template +6 -6
  29. package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker-trigger.ts.template +1 -1
  30. package/src/generators/ui/libs/date-picker/files/lib/hlm-date-picker.ts.template +6 -6
  31. package/src/generators/ui/libs/date-picker/files/lib/hlm-date-range-picker.ts.template +9 -6
  32. package/src/generators/ui/libs/dropdown-menu/files/index.ts.template +1 -0
  33. package/src/generators/ui/libs/dropdown-menu/files/lib/hlm-dropdown-menu-checkbox.ts.template +2 -0
  34. package/src/generators/ui/libs/dropdown-menu/files/lib/hlm-dropdown-menu-focus-on-hover.ts.template +35 -0
  35. package/src/generators/ui/libs/dropdown-menu/files/lib/hlm-dropdown-menu-item.ts.template +2 -0
  36. package/src/generators/ui/libs/dropdown-menu/files/lib/hlm-dropdown-menu-radio.ts.template +2 -0
  37. package/src/generators/ui/libs/dropdown-menu/files/lib/hlm-dropdown-menu-sub-trigger.ts.template +8 -11
  38. package/src/generators/ui/libs/dropdown-menu/files/lib/hlm-dropdown-menu-sub.ts.template +11 -25
  39. package/src/generators/ui/libs/dropdown-menu/files/lib/hlm-dropdown-menu-trigger.ts.template +7 -14
  40. package/src/generators/ui/libs/dropdown-menu/files/lib/hlm-dropdown-menu.ts.template +11 -25
  41. package/src/generators/ui/libs/input-otp/files/lib/hlm-input-otp-fake-caret.ts.template +7 -4
  42. package/src/generators/ui/libs/menubar/files/lib/hlm-menubar-trigger.ts.template +8 -14
  43. package/src/generators/ui/libs/pagination/files/lib/hlm-numbered-pagination-query-params.ts.template +65 -62
  44. package/src/generators/ui/libs/popover/files/lib/hlm-popover-content.ts.template +1 -4
  45. package/src/generators/ui/libs/sheet/files/lib/hlm-sheet-overlay.ts.template +1 -6
  46. package/src/generators/ui/libs/sidebar/files/lib/hlm-sidebar.service.ts.template +1 -1
  47. package/src/generators/ui/libs/tooltip/files/lib/hlm-tooltip.ts.template +1 -1
  48. package/src/generators/ui/style-luma.css +9 -9
  49. package/src/generators/ui/style-lyra.css +7 -7
  50. package/src/generators/ui/style-maia.css +9 -9
  51. package/src/generators/ui/style-mira.css +9 -9
  52. package/src/generators/ui/style-nova.css +40 -10
  53. package/src/generators/ui/style-vega.css +457 -311
  54. package/src/generators/ui/supported-ui-libraries.json +44 -46
  55. package/src/index.d.ts +2 -2
  56. package/src/index.js +4 -3
  57. package/src/index.js.map +1 -1
  58. package/src/utils/config.d.ts +9 -2
  59. package/src/utils/config.js +28 -4
  60. package/src/utils/config.js.map +1 -1
  61. package/src/utils/supported-styles.d.ts +2 -0
  62. package/src/utils/supported-styles.js +7 -0
  63. package/src/utils/supported-styles.js.map +1 -0
  64. package/src/registry/index.d.ts +0 -1
  65. package/src/registry/index.js +0 -5
  66. package/src/registry/index.js.map +0 -1
  67. package/src/registry/schema.d.ts +0 -2180
  68. package/src/registry/schema.js +0 -175
  69. package/src/registry/schema.js.map +0 -1
@@ -1,1245 +1,1391 @@
1
- .style-vega :where(:not([class~='not-style-vega'], [class~='not-style-vega'] *)) {
2
- &.spartan-rtl-flip {
1
+ .style-vega {
2
+ .spartan-rtl-flip {
3
3
  @apply rtl:rotate-180;
4
4
  }
5
5
 
6
6
  /* MARK: Accordion */
7
- &.spartan-accordion-item {
7
+ .spartan-accordion-item {
8
8
  @apply not-last:border-b;
9
9
  }
10
10
 
11
- &.spartan-accordion-trigger {
11
+ .spartan-accordion-trigger {
12
12
  @apply focus-visible:ring-ring/50 focus-visible:border-ring focus-visible:after:border-ring **:data-[slot=accordion-trigger-icon]:text-muted-foreground! rounded-md py-4 text-start text-sm font-medium hover:underline focus-visible:ring-3 **:data-[slot=accordion-trigger-icon]:ms-auto **:data-[slot=accordion-trigger-icon]:text-[length:--spacing(4)];
13
13
  }
14
14
 
15
- &.spartan-accordion-content {
15
+ .spartan-accordion-content {
16
16
  @apply text-sm;
17
17
  }
18
18
 
19
- &.spartan-accordion-content-inner {
19
+ .spartan-accordion-content-inner {
20
20
  @apply pt-0 pb-4;
21
21
  }
22
22
 
23
23
  /* MARK: Alert Dialog */
24
- &.spartan-alert-dialog-overlay {
25
- @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;
24
+ .spartan-alert-dialog-overlay {
25
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 isolate bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;
26
26
  }
27
27
 
28
- &.spartan-alert-dialog-content {
28
+ .spartan-alert-dialog-content {
29
29
  @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-popover text-popover-foreground ring-foreground/10 gap-6 rounded-xl p-6 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg;
30
30
  }
31
31
 
32
- &.spartan-alert-dialog-header {
32
+ .spartan-alert-dialog-header {
33
33
  @apply grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-start sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr];
34
34
  }
35
35
 
36
- &.spartan-alert-dialog-media {
36
+ .spartan-alert-dialog-media {
37
37
  @apply bg-muted mb-2 inline-flex size-16 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[ng-icon:not([class*='text-'])]:text-[length:--spacing(8)];
38
38
  }
39
39
 
40
- &.spartan-alert-dialog-title {
40
+ .spartan-alert-dialog-title {
41
41
  @apply text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2;
42
42
  }
43
43
 
44
- &.spartan-alert-dialog-description {
44
+ .spartan-alert-dialog-description {
45
45
  @apply text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3;
46
46
  }
47
47
 
48
48
  /* MARK: Alert */
49
- &.spartan-alert {
49
+ .spartan-alert {
50
50
  @apply grid gap-0.5 rounded-lg border px-4 py-3 text-start text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>ng-icon]:grid-cols-[auto_1fr] has-[>ng-icon]:gap-x-2.5 *:[ng-icon]:row-span-2 *:[ng-icon]:translate-y-0.5 *:[ng-icon]:text-current *:[ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
51
51
  }
52
52
 
53
- &.spartan-alert-variant-default {
53
+ .spartan-alert-variant-default {
54
54
  @apply bg-card text-card-foreground;
55
55
  }
56
56
 
57
- &.spartan-alert-variant-destructive {
57
+ .spartan-alert-variant-destructive {
58
58
  @apply text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[ng-icon]:text-current;
59
59
  }
60
60
 
61
- &.spartan-alert-title {
61
+ .spartan-alert-title {
62
62
  @apply font-medium group-has-[>ng-icon]/alert:col-start-2;
63
63
  }
64
64
 
65
- &.spartan-alert-description {
65
+ .spartan-alert-description {
66
66
  @apply text-muted-foreground text-sm text-balance md:text-pretty [&_p:not(:last-child)]:mb-4;
67
67
  }
68
68
 
69
- &.spartan-alert-action {
69
+ .spartan-alert-action {
70
70
  @apply absolute end-3 top-2.5;
71
71
  }
72
72
 
73
73
  /* MARK: Autocomplete */
74
- &.spartan-autocomplete-content {
74
+ .spartan-autocomplete-content {
75
75
  @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 max-h-72 min-w-36 overflow-hidden rounded-md shadow-md ring-1 duration-100;
76
76
  }
77
77
 
78
- &.spartan-autocomplete-label {
78
+ .spartan-autocomplete-label {
79
79
  @apply text-muted-foreground px-2 py-1.5 text-xs;
80
80
  }
81
81
 
82
- &.spartan-autocomplete-item {
82
+ .spartan-autocomplete-item {
83
83
  @apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground gap-2 rounded-sm py-1.5 ps-2 pe-8 text-sm;
84
84
  }
85
85
 
86
- &.spartan-autocomplete-item-indicator {
86
+ .spartan-autocomplete-item-indicator {
87
87
  @apply absolute end-2 flex items-center justify-center text-[length:--spacing(4)];
88
88
  }
89
89
 
90
- &.spartan-autocomplete-empty {
90
+ .spartan-autocomplete-empty {
91
91
  @apply text-muted-foreground hidden w-full items-center justify-center gap-2 py-2 text-center text-sm group-data-empty/autocomplete-content:flex;
92
92
  }
93
93
 
94
- &.spartan-autocomplete-list {
94
+ .spartan-autocomplete-list {
95
95
  @apply no-scrollbar max-h-[calc(--spacing(72)---spacing(9))] scroll-py-1 p-1 data-empty:p-0;
96
96
  }
97
97
 
98
- &.spartan-autocomplete-separator {
98
+ .spartan-autocomplete-separator {
99
99
  @apply bg-border -mx-1 my-1 h-px;
100
100
  }
101
101
 
102
- &.spartan-autocomplete-status {
102
+ .spartan-autocomplete-status {
103
103
  @apply text-muted-foreground gap-2 px-3 py-2 text-sm;
104
104
  }
105
105
 
106
106
  /* MARK: Avatar */
107
- &.spartan-avatar {
107
+ .spartan-avatar {
108
108
  @apply size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;
109
109
  }
110
110
 
111
- &.spartan-avatar-fallback {
111
+ .spartan-avatar-fallback {
112
112
  @apply bg-muted text-muted-foreground rounded-full;
113
113
  }
114
114
 
115
- &.spartan-avatar-image {
115
+ .spartan-avatar-image {
116
116
  @apply rounded-full;
117
117
  }
118
118
 
119
- &.spartan-avatar-badge {
119
+ .spartan-avatar-badge {
120
120
  @apply bg-primary text-primary-foreground ring-background;
121
121
  }
122
122
 
123
- &.spartan-avatar-group-count {
123
+ .spartan-avatar-group-count {
124
124
  @apply bg-muted text-muted-foreground size-8 rounded-full text-sm group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>ng-icon]:text-[length:--spacing(4)] group-has-data-[size=lg]/avatar-group:[&>ng-icon]:text-[length:--spacing(5)] group-has-data-[size=sm]/avatar-group:[&>ng-icon]:text-[length:--spacing(3)];
125
125
  }
126
126
 
127
127
  /* MARK: Badge */
128
- &.spartan-badge {
128
+ .spartan-badge {
129
129
  @apply h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 [&>ng-icon]:text-[length:--spacing(3)];
130
130
  }
131
131
 
132
- &.spartan-badge-variant-default {
132
+ .spartan-badge-variant-default {
133
133
  @apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;
134
134
  }
135
135
 
136
- &.spartan-badge-variant-secondary {
136
+ .spartan-badge-variant-secondary {
137
137
  @apply bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80;
138
138
  }
139
139
 
140
- &.spartan-badge-variant-outline {
140
+ .spartan-badge-variant-outline {
141
141
  @apply border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground;
142
142
  }
143
143
 
144
- &.spartan-badge-variant-destructive {
144
+ .spartan-badge-variant-destructive {
145
145
  @apply bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20;
146
146
  }
147
147
 
148
- &.spartan-badge-variant-ghost {
148
+ .spartan-badge-variant-ghost {
149
149
  @apply hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50;
150
150
  }
151
151
 
152
- &.spartan-badge-variant-link {
152
+ .spartan-badge-variant-link {
153
153
  @apply text-primary underline-offset-4 hover:underline;
154
154
  }
155
155
 
156
156
  /* MARK: Breadcrumb */
157
- &.spartan-breadcrumb-list {
157
+ .spartan-breadcrumb-list {
158
158
  @apply text-muted-foreground gap-1.5 text-sm sm:gap-2.5;
159
159
  }
160
160
 
161
- &.spartan-breadcrumb-item {
161
+ .spartan-breadcrumb-item {
162
162
  @apply gap-1.5;
163
163
  }
164
164
 
165
- &.spartan-breadcrumb-link {
165
+ .spartan-breadcrumb-link {
166
166
  @apply hover:text-foreground transition-colors;
167
167
  }
168
168
 
169
- &.spartan-breadcrumb-page {
169
+ .spartan-breadcrumb-page {
170
170
  @apply text-foreground font-normal;
171
171
  }
172
172
 
173
- &.spartan-breadcrumb-separator {
173
+ .spartan-breadcrumb-separator {
174
174
  @apply [&>ng-icon]:text-[length:--spacing(3.5)];
175
175
  }
176
176
 
177
- &.spartan-breadcrumb-ellipsis {
177
+ .spartan-breadcrumb-ellipsis {
178
178
  @apply size-5 [&>ng-icon]:text-[length:--spacing(4)];
179
179
  }
180
180
 
181
181
  /* MARK: Button */
182
- &.spartan-button {
182
+ .spartan-button {
183
183
  @apply focus-visible:border-ring focus-visible:ring-ring/50 data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 data-[matches-spartan-invalid=true]:border-destructive dark:data-[matches-spartan-invalid=true]:border-destructive/50 rounded-md border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 active:not-aria-[haspopup]:translate-y-px data-[matches-spartan-invalid=true]:ring-3 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
184
184
  }
185
185
 
186
- &.spartan-button-variant-default {
186
+ .spartan-button-variant-default {
187
187
  @apply bg-primary text-primary-foreground hover:bg-primary/80;
188
188
  }
189
189
 
190
- &.spartan-button-variant-outline {
190
+ .spartan-button-variant-outline {
191
191
  @apply border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground shadow-xs;
192
192
  }
193
193
 
194
- &.spartan-button-variant-secondary {
194
+ .spartan-button-variant-secondary {
195
195
  @apply bg-secondary text-secondary-foreground aria-expanded:bg-secondary aria-expanded:text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)];
196
196
  }
197
197
 
198
- &.spartan-button-variant-ghost {
198
+ .spartan-button-variant-ghost {
199
199
  @apply hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground;
200
200
  }
201
201
 
202
- &.spartan-button-variant-destructive {
202
+ .spartan-button-variant-destructive {
203
203
  @apply bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30;
204
204
  }
205
205
 
206
- &.spartan-button-variant-link {
206
+ .spartan-button-variant-link {
207
207
  @apply text-primary underline-offset-4 hover:underline;
208
208
  }
209
209
 
210
- &.spartan-button-size-xs {
210
+ .spartan-button-size-xs {
211
211
  @apply h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(3)];
212
212
  }
213
213
 
214
- &.spartan-button-size-sm {
214
+ .spartan-button-size-sm {
215
215
  @apply h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5;
216
216
  }
217
217
 
218
- &.spartan-button-size-default {
218
+ .spartan-button-size-default {
219
219
  @apply h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2;
220
220
  }
221
221
 
222
- &.spartan-button-size-lg {
222
+ .spartan-button-size-lg {
223
223
  @apply h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2;
224
224
  }
225
225
 
226
- &.spartan-button-size-icon-xs {
226
+ .spartan-button-size-icon-xs {
227
227
  @apply size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(3)];
228
228
  }
229
229
 
230
- &.spartan-button-size-icon-sm {
230
+ .spartan-button-size-icon-sm {
231
231
  @apply size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md;
232
232
  }
233
233
 
234
- &.spartan-button-size-icon {
234
+ .spartan-button-size-icon {
235
235
  @apply size-9;
236
236
  }
237
237
 
238
- &.spartan-button-size-icon-lg {
238
+ .spartan-button-size-icon-lg {
239
239
  @apply size-10;
240
240
  }
241
241
 
242
242
  /* MARK: Button Group */
243
- &.spartan-button-group {
243
+ .spartan-button-group {
244
244
  @apply has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md;
245
245
  }
246
246
 
247
- &.spartan-button-group-orientation-horizontal {
248
- @apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-e-md!;
247
+ .spartan-button-group-orientation-horizontal {
248
+ @apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-e-md;
249
249
  }
250
250
 
251
- &.spartan-button-group-orientation-vertical {
252
- @apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md!;
251
+ .spartan-button-group-orientation-vertical {
252
+ @apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md;
253
253
  }
254
254
 
255
- &.spartan-button-group-text {
255
+ .spartan-button-group-text {
256
256
  @apply bg-muted gap-2 rounded-md border px-2.5 text-sm font-medium shadow-xs [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
257
257
  }
258
258
 
259
- &.spartan-button-group-separator {
259
+ .spartan-button-group-separator {
260
260
  @apply bg-input;
261
261
  }
262
262
 
263
263
  /* MARK: Calendar */
264
- &.spartan-calendar {
264
+ .spartan-calendar {
265
265
  @apply p-3 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(8)];
266
266
  }
267
267
 
268
- &.spartan-calendar-caption-label {
268
+ .spartan-calendar-dropdown-root {
269
+ @apply has-focus:border-ring border-input has-focus:ring-ring/50 border shadow-xs has-focus:ring-3;
270
+ }
271
+
272
+ .spartan-calendar-caption-label {
269
273
  @apply h-8 pr-1 pl-2;
270
274
  }
271
275
 
272
276
  /* MARK: Card */
273
- &.spartan-card {
277
+ .spartan-card {
274
278
  @apply ring-foreground/10 bg-card text-card-foreground gap-(--card-spacing) overflow-hidden rounded-xl py-(--card-spacing) text-sm shadow-xs ring-1 [--card-spacing:--spacing(6)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl;
275
279
  }
276
280
 
277
- &.spartan-card-header {
281
+ .spartan-card-header {
278
282
  @apply gap-1 rounded-t-xl px-(--card-spacing) [.border-b]:pb-(--card-spacing);
279
283
  }
280
284
 
281
- &.spartan-card-title {
285
+ .spartan-card-title {
282
286
  @apply text-base leading-normal font-medium group-data-[size=sm]/card:text-sm;
283
287
  }
284
288
 
285
- &.spartan-card-description {
289
+ .spartan-card-description {
286
290
  @apply text-muted-foreground text-sm;
287
291
  }
288
292
 
289
- &.spartan-card-content {
293
+ .spartan-card-content {
290
294
  @apply px-(--card-spacing);
291
295
  }
292
296
 
293
- &.spartan-card-footer {
297
+ .spartan-card-footer {
294
298
  @apply rounded-b-xl px-(--card-spacing) [.border-t]:pt-(--card-spacing);
295
299
  }
296
300
 
297
301
  /* MARK: Carousel */
298
- &.spartan-carousel-previous {
302
+ .spartan-carousel-previous {
299
303
  @apply rounded-full;
300
304
  }
301
305
 
302
- &.spartan-carousel-next {
306
+ .spartan-carousel-next {
303
307
  @apply rounded-full;
304
308
  }
305
309
 
306
310
  /* MARK: Chart */
307
- &.spartan-chart-tooltip {
311
+ .spartan-chart-tooltip {
308
312
  @apply border-border/50 bg-background gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl;
309
313
  }
310
314
 
311
315
  /* MARK: Checkbox */
312
- &.spartan-checkbox {
316
+ .spartan-checkbox {
313
317
  @apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary data-[matches-spartan-invalid=true]:aria-checked:border-primary data-[matches-spartan-invalid=true]:border-destructive dark:data-[matches-spartan-invalid=true]:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/50 data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 flex size-4 items-center justify-center rounded-[4px] border shadow-xs transition-shadow group-has-disabled/field:opacity-50 focus-visible:ring-3 data-[matches-spartan-invalid=true]:ring-3;
314
318
  }
315
319
 
316
- &.spartan-checkbox-indicator {
320
+ .spartan-checkbox-indicator {
317
321
  @apply [&>ng-icon]:text-[length:--spacing(3.5)];
318
322
  }
319
323
 
320
324
  /* MARK: Combobox */
321
- &.spartan-combobox-content {
325
+ .spartan-combobox-content {
322
326
  @apply bg-popover text-popover-foreground data-open:animate-in **:has-[[data-slot=input-group-control]:focus-visible]:border-input data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 **:data-[slot=input-group]:bg-input/30 **:data-[slot=input-group]:border-input/30 max-h-72 min-w-36 overflow-hidden rounded-md shadow-md ring-1 duration-100 **:has-[[data-slot=input-group-control]:focus-visible]:ring-0 **:data-[slot=input-group]:m-1 **:data-[slot=input-group]:mb-0 **:data-[slot=input-group]:h-8 **:data-[slot=input-group]:shadow-none;
323
327
  }
324
328
 
325
- &.spartan-combobox-label {
329
+ .spartan-combobox-label {
326
330
  @apply text-muted-foreground px-2 py-1.5 text-xs;
327
331
  }
328
332
 
329
- &.spartan-combobox-item {
333
+ .spartan-combobox-item {
330
334
  @apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground gap-2 rounded-sm py-1.5 ps-2 pe-8 text-sm;
331
335
  }
332
336
 
333
- &.spartan-combobox-item-indicator {
337
+ .spartan-combobox-item-indicator {
334
338
  @apply absolute end-2 flex items-center justify-center text-[length:--spacing(4)];
335
339
  }
336
340
 
337
- &.spartan-combobox-empty {
341
+ .spartan-combobox-empty {
338
342
  @apply text-muted-foreground hidden w-full items-center justify-center gap-2 py-2 text-center text-sm group-data-empty/combobox-content:flex;
339
343
  }
340
344
 
341
- &.spartan-combobox-list {
345
+ .spartan-combobox-list {
342
346
  @apply no-scrollbar max-h-[calc(--spacing(72)---spacing(9))] scroll-py-1 p-1 data-empty:p-0;
343
347
  }
344
348
 
345
- &.spartan-combobox-separator {
349
+ .spartan-combobox-separator {
346
350
  @apply bg-border -mx-1 my-1 h-px;
347
351
  }
348
352
 
349
- &.spartan-combobox-trigger {
353
+ .spartan-combobox-trigger {
350
354
  @apply data-placeholder:text-muted-foreground;
351
355
  }
352
356
 
353
- &.spartan-combobox-trigger-icon {
357
+ .spartan-combobox-trigger-icon {
354
358
  @apply text-muted-foreground text-[length:--spacing(4)];
355
359
  }
356
360
 
357
- &.spartan-combobox-chips {
361
+ .spartan-combobox-chips {
358
362
  @apply dark:bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/50 data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 data-[matches-spartan-invalid=true]:border-destructive dark:data-[matches-spartan-invalid=true]:border-destructive/50 flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border bg-transparent bg-clip-padding px-2.5 py-1.5 text-sm shadow-xs transition-[color,box-shadow] focus-within:ring-3 has-data-[slot=combobox-chip]:px-1.5 data-[matches-spartan-invalid=true]:ring-3;
359
363
  }
360
364
 
361
- &.spartan-combobox-chip {
365
+ .spartan-combobox-chip {
362
366
  @apply bg-muted text-foreground flex h-[calc(--spacing(5.5))] w-fit items-center justify-center gap-1 rounded-sm px-1.5 text-xs font-medium whitespace-nowrap has-data-[slot=combobox-chip-remove]:pe-0;
363
367
  }
364
368
 
365
- &.spartan-combobox-chip-input {
369
+ .spartan-combobox-chip-input {
366
370
  @apply placeholder:text-muted-foreground;
367
371
  }
368
372
 
369
- &.spartan-combobox-chip-remove {
373
+ .spartan-combobox-chip-remove {
370
374
  @apply -ms-1 opacity-50 hover:opacity-100;
371
375
  }
372
376
 
373
- &.spartan-combobox-placeholder {
377
+ .spartan-combobox-placeholder {
374
378
  @apply gap-2 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
375
379
  }
376
380
 
377
- &.spartan-combobox-status {
378
- @apply text-muted-foreground gap-2 py-2 text-sm;
381
+ .spartan-combobox-status {
382
+ @apply text-muted-foreground gap-2 px-3 py-2 text-sm;
379
383
  }
380
384
 
381
385
  /* MARK: Command */
382
- &.spartan-command {
383
- @apply bg-popover text-popover-foreground rounded-xl p-1;
386
+ .spartan-command {
387
+ @apply bg-popover text-popover-foreground rounded-xl! p-1;
388
+ }
389
+
390
+ .spartan-command-dialog {
391
+ @apply rounded-xl!;
384
392
  }
385
393
 
386
- &.spartan-command-input-wrapper {
394
+ .spartan-command-input-wrapper {
387
395
  @apply p-1 pb-0;
388
396
  }
389
397
 
390
- &.spartan-command-input-group {
398
+ .spartan-command-input-group {
391
399
  @apply bg-input/30 border-input/30 h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!;
392
400
  }
393
401
 
394
- &.spartan-command-input-icon {
402
+ .spartan-command-input-icon {
395
403
  @apply shrink-0 text-[length:--spacing(4)] opacity-50;
396
404
  }
397
405
 
398
- &.spartan-command-input {
406
+ .spartan-command-input {
399
407
  @apply w-full text-sm;
400
408
  }
401
409
 
402
- &.spartan-command-list {
410
+ .spartan-command-list {
403
411
  @apply no-scrollbar max-h-72 scroll-py-1 outline-none;
404
412
  }
405
413
 
406
- &.spartan-command-empty {
414
+ .spartan-command-empty {
407
415
  @apply py-6 text-center text-sm;
408
416
  }
409
417
 
410
- &.spartan-command-group {
418
+ .spartan-command-group {
411
419
  @apply text-foreground **:data-[slot=command-group-label]:text-muted-foreground overflow-hidden p-1 **:data-[slot=command-group-label]:px-2 **:data-[slot=command-group-label]:py-1.5 **:data-[slot=command-group-label]:text-xs **:data-[slot=command-group-label]:font-medium;
412
420
  }
413
421
 
414
- &.spartan-command-separator {
422
+ .spartan-command-separator {
415
423
  @apply bg-border -mx-1 h-px w-auto;
416
424
  }
417
425
 
418
- &.spartan-command-item {
426
+ .spartan-command-item {
419
427
  @apply data-selected:bg-muted data-selected:text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
420
428
  }
421
429
 
422
- &.spartan-command-shortcut {
430
+ .spartan-command-shortcut {
423
431
  @apply text-muted-foreground group-data-[selected]/command-item:text-foreground ms-auto text-xs tracking-widest;
424
432
  }
425
433
 
426
434
  /* MARK: Context Menu */
427
- /* uses dropdown menu styles */
435
+ .spartan-context-menu-content {
436
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-36 rounded-md p-1 shadow-md ring-1 duration-100;
437
+ }
438
+
439
+ .spartan-context-menu-content-logical {
440
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
441
+ }
442
+
443
+ .spartan-context-menu-item {
444
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[ng-icon]:text-destructive focus:*:[ng-icon]:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_ng-icon:not([class*='text-'])]:text-[calc(var(--spacing)*4)];
445
+ }
446
+
447
+ .spartan-context-menu-checkbox-item {
448
+ @apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm data-inset:pl-8 [&_ng-icon:not([class*='text-'])]:text-[calc(var(--spacing)*4)];
449
+ }
450
+
451
+ .spartan-context-menu-radio-item {
452
+ @apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm data-inset:pl-8 [&_ng-icon:not([class*='text-'])]:text-[calc(var(--spacing)*4)];
453
+ }
454
+
455
+ .spartan-context-menu-item-indicator {
456
+ @apply absolute end-2;
457
+ }
458
+
459
+ .spartan-context-menu-label {
460
+ @apply text-muted-foreground px-2 py-1.5 text-xs font-medium data-inset:pl-8;
461
+ }
462
+
463
+ .spartan-context-menu-separator {
464
+ @apply bg-border -mx-1 my-1 h-px;
465
+ }
466
+
467
+ .spartan-context-menu-shortcut {
468
+ @apply text-muted-foreground group-focus/context-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;
469
+ }
470
+
471
+ .spartan-context-menu-sub-trigger {
472
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_ng-icon:not([class*='text-'])]:text-[calc(var(--spacing)*4)];
473
+ }
474
+
475
+ .spartan-context-menu-sub-content {
476
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 bg-popover text-popover-foreground min-w-32 rounded-md border p-1 shadow-lg duration-100;
477
+ }
478
+
479
+ .spartan-context-menu-subcontent {
480
+ @apply shadow-lg;
481
+ }
428
482
 
429
483
  /* MARK: Date Picker */
430
- &.spartan-date-picker-trigger {
484
+ .spartan-date-picker-trigger {
431
485
  @apply data-placeholder:text-muted-foreground;
432
486
  }
433
487
 
434
488
  /* MARK: Dialog */
435
- &.spartan-dialog-overlay {
436
- @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;
489
+ .spartan-dialog-overlay {
490
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 isolate bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;
437
491
  }
438
492
 
439
- &.spartan-dialog-content {
493
+ .spartan-dialog-content {
440
494
  @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-6 rounded-xl p-6 text-sm ring-1 duration-100 sm:max-w-md;
441
495
  }
442
496
 
443
- &.spartan-dialog-close {
497
+ .spartan-dialog-close {
444
498
  @apply absolute end-4 top-4;
445
499
  }
446
500
 
447
- &.spartan-dialog-header {
501
+ .spartan-dialog-header {
448
502
  @apply gap-2;
449
503
  }
450
504
 
451
- &.spartan-dialog-footer {
505
+ .spartan-dialog-footer {
452
506
  @apply gap-2;
453
507
  }
454
508
 
455
- &.spartan-dialog-title {
509
+ .spartan-dialog-title {
456
510
  @apply leading-none font-medium;
457
511
  }
458
512
 
459
- &.spartan-dialog-description {
513
+ .spartan-dialog-description {
460
514
  @apply text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3;
461
515
  }
462
516
 
463
517
  /* MARK: Drawer */
464
- &.spartan-drawer-overlay {
518
+ .spartan-drawer-overlay {
465
519
  @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 supports-backdrop-filter:backdrop-blur-xs;
466
520
  }
467
521
 
468
- &.spartan-drawer-content {
522
+ .spartan-drawer-content {
469
523
  @apply bg-background fixed z-50 flex h-auto flex-col text-sm data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm;
470
524
  touch-action: none;
471
525
  }
472
526
 
473
- &.spartan-drawer-handle {
527
+ .spartan-drawer-handle {
474
528
  @apply bg-muted mx-auto mt-4 hidden h-1.5 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block;
475
529
  }
476
530
 
477
- &.spartan-drawer-header {
531
+ .spartan-drawer-header {
478
532
  @apply gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-start;
479
533
  }
480
534
 
481
- &.spartan-drawer-title {
535
+ .spartan-drawer-title {
482
536
  @apply text-foreground font-medium;
483
537
  }
484
538
 
485
- &.spartan-drawer-description {
539
+ .spartan-drawer-description {
486
540
  @apply text-muted-foreground text-sm;
487
541
  }
488
542
 
489
- &.spartan-drawer-footer {
543
+ .spartan-drawer-footer {
490
544
  @apply gap-2 p-4;
491
545
  }
492
546
 
493
547
  /* MARK: Dropdown Menu */
494
- &.spartan-dropdown-menu-content {
495
- @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-md p-1 shadow-md ring-1 duration-100;
548
+ .spartan-dropdown-menu-content {
549
+ @apply motion-safe:data-open:animate-in motion-safe:data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-md p-1 shadow-md ring-1 duration-100;
496
550
  }
497
551
 
498
- &.spartan-dropdown-menu-item {
552
+ .spartan-dropdown-menu-content-logical {
553
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
554
+ }
555
+
556
+ .spartan-dropdown-menu-item {
499
557
  @apply hover:bg-accent focus:bg-accent hover:text-accent-foreground focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:hover:bg-destructive/10 data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:hover:bg-destructive/20 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:hover:text-destructive data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[ng-icon]:text-destructive not-data-[variant=destructive]:hover:**:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-inset:ps-8 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
500
558
  }
501
559
 
502
- &.spartan-dropdown-menu-checkbox-item {
560
+ .spartan-dropdown-menu-checkbox-item {
503
561
  @apply hover:bg-accent focus:bg-accent hover:text-accent-foreground focus:text-accent-foreground gap-2 rounded-sm py-1.5 ps-2 pe-8 text-sm data-inset:ps-8 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
504
562
  }
505
563
 
506
- &.spartan-dropdown-menu-radio-item {
564
+ .spartan-dropdown-menu-radio-item {
507
565
  @apply hover:bg-accent focus:bg-accent hover:text-accent-foreground focus:text-accent-foreground gap-2 rounded-sm py-1.5 ps-2 pe-8 text-sm data-inset:ps-8 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
508
566
  }
509
567
 
510
- &.spartan-dropdown-menu-item-indicator {
568
+ .spartan-dropdown-menu-item-indicator {
511
569
  @apply absolute end-2 flex items-center justify-center [&_ng-icon]:text-[length:--spacing(4)];
512
570
  }
513
571
 
514
- &.spartan-dropdown-menu-label {
572
+ .spartan-dropdown-menu-label {
515
573
  @apply text-muted-foreground px-2 py-1.5 text-xs font-medium data-inset:ps-8;
516
574
  }
517
575
 
518
- &.spartan-dropdown-menu-separator {
576
+ .spartan-dropdown-menu-separator {
519
577
  @apply bg-border -mx-1 my-1 h-px;
520
578
  }
521
579
 
522
- &.spartan-dropdown-menu-shortcut {
523
- @apply text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ms-auto text-xs tracking-widest;
580
+ .spartan-dropdown-menu-shortcut {
581
+ @apply text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;
524
582
  }
525
583
 
526
- &.spartan-dropdown-menu-sub-content {
527
- @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-24 rounded-md p-1 shadow-lg ring-1 duration-100;
584
+ .spartan-dropdown-menu-sub-content {
585
+ @apply motion-safe:data-open:animate-in motion-safe:data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-md p-1 shadow-lg ring-1 duration-100;
528
586
  }
529
587
 
530
588
  /* MARK: Empty */
531
- &.spartan-empty {
589
+ .spartan-empty {
532
590
  @apply gap-4 rounded-lg border-dashed p-12;
533
591
  }
534
592
 
535
- &.spartan-empty-header {
593
+ .spartan-empty-header {
536
594
  @apply gap-2;
537
595
  }
538
596
 
539
- &.spartan-empty-media {
597
+ .spartan-empty-media {
540
598
  @apply mb-2;
541
599
  }
542
600
 
543
- &.spartan-empty-media-default {
601
+ .spartan-empty-media-default {
544
602
  @apply bg-transparent;
545
603
  }
546
604
 
547
- &.spartan-empty-media-icon {
605
+ .spartan-empty-media-icon {
548
606
  @apply bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(6)];
549
607
  }
550
608
 
551
- &.spartan-empty-title {
609
+ .spartan-empty-title {
552
610
  @apply text-lg font-medium tracking-tight;
553
611
  }
554
612
 
555
- &.spartan-empty-description {
613
+ .spartan-empty-description {
556
614
  @apply text-sm/relaxed;
557
615
  }
558
616
 
559
- &.spartan-empty-content {
617
+ .spartan-empty-content {
560
618
  @apply gap-4 text-sm;
561
619
  }
562
620
 
563
621
  /* MARK: Field */
564
- &.spartan-field-set {
622
+ .spartan-field-set {
565
623
  @apply gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3;
566
624
  }
567
625
 
568
- &.spartan-field-legend {
626
+ .spartan-field-legend {
569
627
  @apply mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base;
570
628
  }
571
629
 
572
- &.spartan-field-group {
630
+ .spartan-field-group {
573
631
  @apply gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4;
574
632
  }
575
633
 
576
- &.spartan-field {
634
+ .spartan-field {
577
635
  @apply data-[matches-spartan-invalid=true]:text-destructive gap-3;
578
636
  }
579
637
 
580
- &.spartan-field-content {
638
+ .spartan-field-content {
581
639
  @apply gap-1;
582
640
  }
583
641
 
584
- &.spartan-field-label {
642
+ .spartan-field-label {
585
643
  @apply has-data-checked:bg-primary/5 has-data-checked:border-primary/30 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10 gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border *:data-[slot=field]:p-3;
586
644
  }
587
645
 
588
- &.spartan-field-title {
646
+ .spartan-field-title {
589
647
  @apply gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50;
590
648
  }
591
649
 
592
- &.spartan-field-description {
650
+ .spartan-field-description {
593
651
  @apply text-muted-foreground text-start text-sm [[data-variant=legend]+&]:-mt-1.5;
594
652
  }
595
653
 
596
- &.spartan-field-separator {
654
+ .spartan-field-separator {
597
655
  @apply -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2;
598
656
  }
599
657
 
600
- &.spartan-field-separator-content {
658
+ .spartan-field-separator-content {
601
659
  @apply text-muted-foreground px-2;
602
660
  }
603
661
 
604
- &.spartan-field-error {
662
+ .spartan-field-error {
605
663
  @apply text-destructive text-sm;
606
664
  }
607
665
 
608
666
  /* MARK: Hover Card */
609
- &.spartan-hover-card-content {
667
+ .spartan-hover-card-content {
610
668
  @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground w-64 rounded-lg p-4 text-sm shadow-md ring-1 duration-100;
611
669
  }
612
670
 
671
+ .spartan-hover-card-content-logical {
672
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
673
+ }
674
+
613
675
  /* MARK: Input */
614
- &.spartan-input {
676
+ .spartan-input {
615
677
  @apply dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 data-[matches-spartan-invalid=true]:border-destructive dark:data-[matches-spartan-invalid=true]:border-destructive/50 h-9 rounded-md border bg-transparent px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] file:h-7 file:text-sm file:font-medium focus-visible:ring-3 data-[matches-spartan-invalid=true]:ring-3 md:text-sm;
616
678
  }
617
679
 
618
680
  /* MARK: Input OTP */
619
- &.spartan-input-otp {
681
+ .spartan-input-otp {
620
682
  @apply gap-2;
621
683
  }
622
684
 
623
- &.spartan-input-otp-group {
685
+ .spartan-input-otp-group {
624
686
  @apply data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 data-[matches-spartan-invalid=true]:border-destructive rounded-md data-[matches-spartan-invalid=true]:ring-3;
625
687
  }
626
688
 
627
- &.spartan-input-otp-slot {
689
+ .spartan-input-otp-slot {
628
690
  @apply dark:bg-input/30 border-input has-[brn-input-otp-slot[data-active="true"]]:border-ring has-[brn-input-otp-slot[data-active="true"]]:ring-ring/50 has-[brn-input-otp-slot[data-active="true"]]:data-[matches-spartan-invalid=true]:ring-destructive/20 dark:has-[brn-input-otp-slot[data-active="true"]]:data-[matches-spartan-invalid=true]:ring-destructive/40 data-[matches-spartan-invalid=true]:border-destructive has-[brn-input-otp-slot[data-active="true"]]:data-[matches-spartan-invalid=true]:border-destructive size-9 border-y border-e text-sm shadow-xs transition-all outline-none first:rounded-s-md first:border-s last:rounded-e-md has-[brn-input-otp-slot[data-active="true"]]:ring-3;
629
691
  }
630
692
 
631
- &.spartan-input-otp-caret-line {
693
+ .spartan-input-otp-caret-line {
632
694
  @apply animate-caret-blink bg-foreground h-4 w-px duration-1000;
633
695
  }
634
696
 
635
- &.spartan-input-otp-separator {
697
+ .spartan-input-otp-separator {
636
698
  @apply [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
637
699
  }
638
700
 
639
701
  /* MARK: Item */
640
- &.spartan-item {
702
+ .spartan-item {
641
703
  @apply [a]:hover:bg-muted rounded-md border text-sm;
642
704
  }
643
705
 
644
- &.spartan-item-variant-default {
706
+ .spartan-item-variant-default {
645
707
  @apply border-transparent;
646
708
  }
647
709
 
648
- &.spartan-item-variant-outline {
710
+ .spartan-item-variant-outline {
649
711
  @apply border-border;
650
712
  }
651
713
 
652
- &.spartan-item-variant-muted {
714
+ .spartan-item-variant-muted {
653
715
  @apply bg-muted/50 border-transparent;
654
716
  }
655
717
 
656
- &.spartan-item-size-default {
718
+ .spartan-item-size-default {
657
719
  @apply gap-3.5 px-4 py-3.5;
658
720
  }
659
721
 
660
- &.spartan-item-size-sm {
722
+ .spartan-item-size-sm {
661
723
  @apply gap-2.5 px-3 py-2.5;
662
724
  }
663
725
 
664
- &.spartan-item-size-xs {
726
+ .spartan-item-size-xs {
665
727
  @apply gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0;
666
728
  }
667
729
 
668
- &.spartan-item-media {
730
+ .spartan-item-media {
669
731
  @apply gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start;
670
732
  }
671
733
 
672
- &.spartan-item-media-variant-default {
734
+ .spartan-item-media-variant-default {
673
735
  @apply bg-transparent;
674
736
  }
675
737
 
676
- &.spartan-item-media-variant-icon {
738
+ .spartan-item-media-variant-icon {
677
739
  @apply [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
678
740
  }
679
741
 
680
- &.spartan-item-media-variant-image {
742
+ .spartan-item-media-variant-image {
681
743
  @apply size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover;
682
744
  }
683
745
 
684
- &.spartan-item-content {
746
+ .spartan-item-content {
685
747
  @apply gap-1 group-data-[size=xs]/item:gap-0;
686
748
  }
687
749
 
688
- &.spartan-item-title {
750
+ .spartan-item-title {
689
751
  @apply gap-2 text-sm leading-snug font-medium underline-offset-4;
690
752
  }
691
753
 
692
- &.spartan-item-description {
754
+ .spartan-item-description {
693
755
  @apply text-muted-foreground text-start text-sm leading-normal group-data-[size=xs]/item:text-xs;
694
756
  }
695
757
 
696
- &.spartan-item-actions {
758
+ .spartan-item-actions {
697
759
  @apply gap-2;
698
760
  }
699
761
 
700
- &.spartan-item-header {
762
+ .spartan-item-header {
701
763
  @apply gap-2;
702
764
  }
703
765
 
704
- &.spartan-item-footer {
766
+ .spartan-item-footer {
705
767
  @apply gap-2;
706
768
  }
707
769
 
708
- &.spartan-item-group {
770
+ .spartan-item-group {
709
771
  @apply gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2;
710
772
  }
711
773
 
712
- &.spartan-item-separator {
774
+ .spartan-item-separator {
713
775
  @apply my-2;
714
776
  }
715
777
 
716
778
  /* MARK: Kbd */
717
- &.spartan-kbd {
779
+ .spartan-kbd {
718
780
  @apply bg-muted text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 h-5 w-fit min-w-5 gap-1 rounded-sm px-1 font-sans text-xs font-medium [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(3)];
719
781
  }
720
782
 
721
- &.spartan-kbd-group {
783
+ .spartan-kbd-group {
722
784
  @apply gap-1;
723
785
  }
724
786
 
725
787
  /* MARK: Label */
726
- &.spartan-label {
788
+ .spartan-label {
727
789
  @apply gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50;
728
790
  }
729
791
 
730
792
  /* MARK: Menubar */
731
- &.spartan-menubar {
793
+ .spartan-menubar {
732
794
  @apply bg-background h-9 gap-1 rounded-md border p-1 shadow-xs;
733
795
  }
734
796
 
735
- &.spartan-menubar-trigger {
797
+ .spartan-menubar-trigger {
736
798
  @apply hover:bg-muted aria-expanded:bg-muted rounded-sm px-2 py-1 text-sm font-medium;
737
799
  }
738
800
 
801
+ .spartan-menubar-content {
802
+ @apply bg-popover text-popover-foreground data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-md p-1 shadow-md ring-1 duration-100;
803
+ }
804
+
805
+ .spartan-menubar-content-logical {
806
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
807
+ }
808
+
809
+ .spartan-menubar-item {
810
+ @apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[ng-icon]:text-destructive! not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-disabled:opacity-50 data-inset:pl-8 [&_ng-icon:not([class*='text-'])]:text-[calc(var(--spacing)*4)];
811
+ }
812
+
813
+ .spartan-menubar-checkbox-item {
814
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-md py-1.5 pr-2 pl-8 text-sm data-inset:pl-8;
815
+ }
816
+
817
+ .spartan-menubar-checkbox-item-indicator {
818
+ @apply start-2 size-4 [&_ng-icon:not([class*='text-'])]:text-[calc(var(--spacing)*4)];
819
+ }
820
+
821
+ .spartan-menubar-radio-item {
822
+ @apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-md py-1.5 pr-2 pl-8 text-sm data-disabled:opacity-50 data-inset:pl-8 [&_ng-icon:not([class*='text-'])]:text-[calc(var(--spacing)*4)];
823
+ }
824
+
825
+ .spartan-menubar-radio-item-indicator {
826
+ @apply start-2 size-4 [&_ng-icon:not([class*='text-'])]:text-[calc(var(--spacing)*4)];
827
+ }
828
+
829
+ .spartan-menubar-label {
830
+ @apply px-2 py-1.5 text-sm font-medium data-inset:pl-8;
831
+ }
832
+
833
+ .spartan-menubar-separator {
834
+ @apply bg-border;
835
+ }
836
+
837
+ .spartan-menubar-shortcut {
838
+ @apply text-muted-foreground group-focus/menubar-item:text-accent-foreground text-xs tracking-widest;
839
+ }
840
+
841
+ .spartan-menubar-sub-trigger {
842
+ @apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_ng-icon:not([class*='text-'])]:text-[calc(var(--spacing)*4)];
843
+ }
844
+
845
+ .spartan-menubar-sub-content {
846
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-md p-1 shadow-lg ring-1 duration-100;
847
+ }
848
+
739
849
  /* MARK: Navigation Menu */
740
- &.spartan-navigation-menu {
850
+ .spartan-navigation-menu {
741
851
  @apply max-w-max;
742
852
  }
743
853
 
744
- &.spartan-navigation-menu-list {
854
+ .spartan-navigation-menu-list {
745
855
  @apply gap-0;
746
856
  }
747
857
 
748
- &.spartan-navigation-menu-trigger {
858
+ .spartan-navigation-menu-trigger {
749
859
  @apply bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 rounded-md px-4 py-2 text-sm font-medium transition-all focus-visible:ring-3 focus-visible:outline-1 disabled:opacity-50;
750
860
  }
751
861
 
752
- &.spartan-navigation-menu-trigger-icon {
753
- @apply relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180;
862
+ .spartan-navigation-menu-trigger-icon {
863
+ @apply relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180;
754
864
  }
755
865
 
756
- &.spartan-navigation-menu-link {
757
- @apply data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-1.5 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
866
+ .spartan-navigation-menu-content {
867
+ @apply data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-2 pr-2.5 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300;
758
868
  }
759
869
 
760
- &.spartan-navigation-menu-popup {
870
+ .spartan-navigation-menu-viewport {
871
+ @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-95 data-open:zoom-in-90 ring-foreground/10 rounded-lg shadow ring-1 duration-100;
872
+ }
873
+
874
+ .spartan-navigation-menu-link {
875
+ @apply data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-1.5 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 [&_ng-icon:not([class*='text-'])]:text-[calc(var(--spacing)*4)];
876
+ }
877
+
878
+ .spartan-navigation-menu-indicator {
879
+ @apply data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in;
880
+ }
881
+
882
+ .spartan-navigation-menu-indicator-arrow {
883
+ @apply bg-border rounded-tl-sm shadow-md;
884
+ }
885
+
886
+ .spartan-navigation-menu-positioner {
887
+ @apply transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0;
888
+ }
889
+
890
+ .spartan-navigation-menu-popup {
761
891
  @apply bg-popover text-popover-foreground ring-foreground/10 rounded-lg shadow ring-1 transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0;
762
892
  }
763
893
 
764
894
  /* MARK: Native Select */
765
- &.spartan-native-select {
895
+ .spartan-native-select {
766
896
  @apply border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 data-[matches-spartan-invalid=true]:border-destructive dark:data-[matches-spartan-invalid=true]:border-destructive/50 h-9 w-full min-w-0 appearance-none rounded-md border bg-transparent py-1 ps-2.5 pe-8 text-sm shadow-xs transition-[color,box-shadow] select-none focus-visible:ring-3 data-[matches-spartan-invalid=true]:ring-3 data-[size=sm]:h-8;
767
897
  }
768
898
 
769
- &.spartan-native-select-icon {
899
+ .spartan-native-select-icon {
770
900
  @apply text-muted-foreground end-2.5 top-1/2 -translate-y-1/2 text-[length:--spacing(4)];
771
901
  }
772
902
 
773
903
  /* MARK: Pagination */
774
- &.spartan-pagination-content {
904
+ .spartan-pagination-content {
775
905
  @apply gap-1;
776
906
  }
777
907
 
778
- &.spartan-pagination-ellipsis {
908
+ .spartan-pagination-ellipsis {
779
909
  @apply size-9 items-center justify-center [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
780
910
  }
781
911
 
782
- &.spartan-pagination-previous {
912
+ .spartan-pagination-previous {
783
913
  @apply ps-2!;
784
914
  }
785
915
 
786
- &.spartan-pagination-next {
916
+ .spartan-pagination-next {
787
917
  @apply pe-2!;
788
918
  }
789
919
 
790
920
  /* MARK: Popover */
791
- &.spartan-popover-content {
921
+ .spartan-popover-content {
792
922
  @apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 flex flex-col gap-4 rounded-md p-4 text-sm shadow-md ring-1 duration-100;
793
923
  }
794
924
 
795
- &.spartan-popover-header {
925
+ .spartan-popover-content-logical {
926
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
927
+ }
928
+
929
+ .spartan-popover-header {
796
930
  @apply flex flex-col gap-1 text-sm;
797
931
  }
798
932
 
799
- &.spartan-popover-title {
933
+ .spartan-popover-title {
800
934
  @apply font-medium;
801
935
  }
802
936
 
803
- &.spartan-popover-description {
937
+ .spartan-popover-description {
804
938
  @apply text-muted-foreground;
805
939
  }
806
940
 
807
941
  /* MARK: Progress */
808
- &.spartan-progress {
942
+ .spartan-progress {
809
943
  @apply bg-muted h-1.5 rounded-full;
810
944
  }
811
945
 
812
- &.spartan-progress-track {
946
+ .spartan-progress-track {
813
947
  @apply bg-muted h-1.5 rounded-full;
814
948
  }
815
949
 
816
- &.spartan-progress-indicator {
950
+ .spartan-progress-indicator {
817
951
  @apply bg-primary;
818
952
  }
819
953
 
820
- &.spartan-progress-label {
954
+ .spartan-progress-label {
821
955
  @apply text-sm font-medium;
822
956
  }
823
957
 
824
- &.spartan-progress-value {
958
+ .spartan-progress-value {
825
959
  @apply text-muted-foreground ms-auto text-sm tabular-nums;
826
960
  }
827
961
 
828
962
  /* MARK: Radio Group */
829
- &.spartan-radio-group {
963
+ .spartan-radio-group {
830
964
  @apply grid gap-3;
831
965
  }
832
966
 
833
- &.spartan-radio-group-item {
967
+ .spartan-radio-group-item {
834
968
  @apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary data-[matches-spartan-invalid=true]:aria-checked:border-primary data-[matches-spartan-invalid=true]:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 dark:data-[matches-spartan-invalid=true]:border-destructive/50 flex size-4 rounded-full focus-visible:ring-3 data-[matches-spartan-invalid=true]:ring-3;
835
969
  }
836
970
 
837
- &.spartan-radio-group-indicator {
971
+ .spartan-radio-group-indicator {
838
972
  @apply flex size-4 items-center justify-center;
839
973
  }
840
974
 
841
- &.spartan-radio-group-indicator-icon {
975
+ .spartan-radio-group-indicator-icon {
842
976
  @apply bg-primary-foreground absolute start-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full;
843
977
  }
844
978
 
845
979
  /* MARK: Resizable */
846
- &.spartan-resizable-handle-icon {
980
+ .spartan-resizable-handle-icon {
847
981
  @apply bg-border h-6 w-1 rounded-lg;
848
982
  }
849
983
 
850
984
  /* MARK: Scroll Area */
851
- &.spartan-scroll-area {
985
+ .spartan-scroll-area {
852
986
  @apply rounded-md [--scrollbar-thumb-shape:9999px];
853
987
  }
854
988
 
855
989
  /* MARK: Select */
856
- &.spartan-select-trigger {
990
+ .spartan-select-trigger {
857
991
  @apply border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 data-[matches-spartan-invalid=true]:border-destructive dark:data-[matches-spartan-invalid=true]:border-destructive/50 gap-1.5 rounded-md border bg-transparent py-2 ps-2.5 pe-2 text-sm shadow-xs transition-[color,box-shadow] focus-visible:ring-3 data-[matches-spartan-invalid=true]:ring-3 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:gap-1.5;
858
992
  }
859
993
 
860
- &.spartan-select-trigger-icon {
994
+ .spartan-select-trigger-icon {
861
995
  @apply text-muted-foreground text-[length:--spacing(4)];
862
996
  }
863
997
 
864
- &.spartan-select-content {
998
+ .spartan-select-content {
865
999
  @apply bg-popover no-scrollbar text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 max-h-72 min-w-36 flex-col rounded-md shadow-md ring-1 duration-100;
866
1000
  }
867
1001
 
868
- &.spartan-select-label {
1002
+ .spartan-select-label {
869
1003
  @apply text-muted-foreground px-2 py-1.5 text-xs;
870
1004
  }
871
1005
 
872
- &.spartan-select-item {
1006
+ .spartan-select-item {
873
1007
  @apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground gap-2 rounded-sm py-1.5 ps-2 pe-8 text-sm *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;
874
1008
  }
875
1009
 
876
- &.spartan-select-item-indicator {
1010
+ .spartan-select-item-indicator {
877
1011
  @apply absolute end-2 flex items-center justify-center text-[length:--spacing(4)];
878
1012
  }
879
1013
 
880
- &.spartan-select-group {
1014
+ .spartan-select-group {
881
1015
  @apply scroll-my-1 p-1;
882
1016
  }
883
1017
 
884
- &.spartan-select-separator {
1018
+ .spartan-select-separator {
885
1019
  @apply bg-border -mx-1 my-1 h-px;
886
1020
  }
887
1021
 
888
- &.spartan-select-scroll-up-button {
1022
+ .spartan-select-scroll-up-button {
889
1023
  @apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
890
1024
  }
891
1025
 
892
- &.spartan-select-scroll-down-button {
1026
+ .spartan-select-scroll-down-button {
893
1027
  @apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
894
1028
  }
895
1029
 
896
- &.spartan-select-placeholder {
1030
+ .spartan-select-placeholder {
897
1031
  @apply gap-2 [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
898
1032
  }
899
1033
 
900
- &.spartan-select-values-content {
1034
+ .spartan-select-values-content {
901
1035
  @apply gap-2;
902
1036
  }
903
1037
 
904
1038
  /* MARK: Separator */
905
- &.spartan-separator {
1039
+ .spartan-separator {
906
1040
  @apply bg-border shrink-0;
907
1041
  }
908
1042
 
909
- &.spartan-separator-horizontal {
1043
+ .spartan-separator-horizontal {
910
1044
  @apply h-px w-full;
911
1045
  }
912
1046
 
913
- &.spartan-separator-vertical {
1047
+ .spartan-separator-vertical {
914
1048
  @apply h-full w-px;
915
1049
  }
916
1050
 
917
1051
  /* MARK: Sheet */
918
- &.spartan-sheet-overlay {
919
- @apply bg-black/10 supports-backdrop-filter:backdrop-blur-xs;
1052
+ .spartan-sheet-overlay {
1053
+ @apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 isolate bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;
920
1054
  }
921
1055
 
922
- &.spartan-sheet-content {
1056
+ .spartan-sheet-content {
923
1057
  @apply bg-popover text-popover-foreground fixed flex flex-col gap-4 bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm;
924
1058
  }
925
1059
 
926
- &.spartan-sheet-close {
1060
+ .spartan-sheet-close {
927
1061
  @apply absolute end-4 top-4;
928
1062
  }
929
1063
 
930
- &.spartan-sheet-header {
1064
+ .spartan-sheet-header {
931
1065
  @apply gap-1.5 p-4;
932
1066
  }
933
1067
 
934
- &.spartan-sheet-footer {
1068
+ .spartan-sheet-footer {
935
1069
  @apply gap-2 p-4;
936
1070
  }
937
1071
 
938
- &.spartan-sheet-title {
1072
+ .spartan-sheet-title {
939
1073
  @apply text-foreground font-medium;
940
1074
  }
941
1075
 
942
- &.spartan-sheet-description {
1076
+ .spartan-sheet-description {
943
1077
  @apply text-muted-foreground text-sm;
944
1078
  }
945
1079
 
946
1080
  /* MARK: Sidebar */
947
- &.spartan-sidebar-gap {
1081
+ .spartan-sidebar-gap {
948
1082
  @apply transition-[width] duration-200 ease-linear;
949
1083
  }
950
1084
 
951
- &.spartan-sidebar-inner {
1085
+ .spartan-sidebar-inner {
952
1086
  @apply bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1;
953
1087
  }
954
1088
 
955
- &.spartan-sidebar-rail {
1089
+ .spartan-sidebar-rail {
956
1090
  @apply hover:after:bg-sidebar-border;
957
1091
  }
958
1092
 
959
- &.spartan-sidebar-inset {
1093
+ .spartan-sidebar-inset {
960
1094
  @apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ms-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ms-2;
961
1095
  }
962
1096
 
963
- &.spartan-sidebar-input {
1097
+ .spartan-sidebar-input {
964
1098
  @apply bg-background h-8 w-full shadow-none;
965
1099
  }
966
1100
 
967
- &.spartan-sidebar-header {
1101
+ .spartan-sidebar-header {
968
1102
  @apply gap-2 p-2;
969
1103
  }
970
1104
 
971
- &.spartan-sidebar-content {
1105
+ .spartan-sidebar-content {
972
1106
  @apply no-scrollbar gap-2;
973
1107
  }
974
1108
 
975
- &.spartan-sidebar-footer {
1109
+ .spartan-sidebar-footer {
976
1110
  @apply gap-2 p-2;
977
1111
  }
978
1112
 
979
- &.spartan-sidebar-separator {
1113
+ .spartan-sidebar-separator {
980
1114
  @apply bg-sidebar-border mx-2;
981
1115
  }
982
1116
 
983
- &.spartan-sidebar-group {
1117
+ .spartan-sidebar-group {
984
1118
  @apply p-2;
985
1119
  }
986
1120
 
987
- &.spartan-sidebar-menu {
1121
+ .spartan-sidebar-menu {
988
1122
  @apply gap-1;
989
1123
  }
990
1124
 
991
- &.spartan-sidebar-group-content {
1125
+ .spartan-sidebar-group-content {
992
1126
  @apply text-sm;
993
1127
  }
994
1128
 
995
- &.spartan-sidebar-group-label {
1129
+ .spartan-sidebar-group-label {
996
1130
  @apply text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>ng-icon]:text-[length:--spacing(4)];
997
1131
  }
998
1132
 
999
- &.spartan-sidebar-group-action {
1133
+ .spartan-sidebar-group-action {
1000
1134
  @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute end-3 top-3.5 w-5 rounded-md p-0 focus-visible:ring-2 [&>ng-icon]:text-[length:--spacing(4)];
1001
1135
  }
1002
1136
 
1003
- &.spartan-sidebar-menu-button {
1137
+ .spartan-sidebar-menu-button {
1004
1138
  @apply ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-md p-2 text-start text-sm transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pe-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium;
1005
1139
  }
1006
1140
 
1007
- &.spartan-sidebar-menu-button-variant-default {
1141
+ .spartan-sidebar-menu-button-variant-default {
1008
1142
  @apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;
1009
1143
  }
1010
1144
 
1011
- &.spartan-sidebar-menu-button-variant-outline {
1145
+ .spartan-sidebar-menu-button-variant-outline {
1012
1146
  @apply bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_var(--sidebar-border)] hover:shadow-[0_0_0_1px_var(--sidebar-accent)];
1013
1147
  }
1014
1148
 
1015
- &.spartan-sidebar-menu-button-size-default {
1149
+ .spartan-sidebar-menu-button-size-default {
1016
1150
  @apply h-8 text-sm;
1017
1151
  }
1018
1152
 
1019
- &.spartan-sidebar-menu-button-size-sm {
1153
+ .spartan-sidebar-menu-button-size-sm {
1020
1154
  @apply h-7 text-xs;
1021
1155
  }
1022
1156
 
1023
- &.spartan-sidebar-menu-button-size-lg {
1157
+ .spartan-sidebar-menu-button-size-lg {
1024
1158
  @apply h-12 text-sm group-data-[collapsible=icon]:p-0!;
1025
1159
  }
1026
1160
 
1027
- &.spartan-sidebar-menu-action {
1161
+ .spartan-sidebar-menu-action {
1028
1162
  @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute end-1 top-1.5 aspect-square w-5 rounded-md p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>ng-icon]:text-[length:--spacing(4)];
1029
1163
  }
1030
1164
 
1031
- &.spartan-sidebar-menu-badge {
1165
+ .spartan-sidebar-menu-badge {
1032
1166
  @apply text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute end-1 flex h-5 min-w-5 rounded-md px-1 text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1;
1033
1167
  }
1034
1168
 
1035
- &.spartan-sidebar-menu-skeleton {
1169
+ .spartan-sidebar-menu-skeleton {
1036
1170
  @apply h-8 gap-2 rounded-md px-2;
1037
1171
  }
1038
1172
 
1039
- &.spartan-sidebar-menu-skeleton-icon {
1173
+ .spartan-sidebar-menu-skeleton-icon {
1040
1174
  @apply size-4 rounded-md;
1041
1175
  }
1042
1176
 
1043
- &.spartan-sidebar-menu-skeleton-text {
1177
+ .spartan-sidebar-menu-skeleton-text {
1044
1178
  @apply h-4;
1045
1179
  }
1046
1180
 
1047
- &.spartan-sidebar-menu-sub {
1181
+ .spartan-sidebar-menu-sub {
1048
1182
  @apply border-sidebar-border mx-3.5 translate-x-px gap-1 border-s px-2.5 py-0.5 group-data-[collapsible=icon]:hidden rtl:-translate-x-px;
1049
1183
  }
1050
1184
 
1051
- &.spartan-sidebar-menu-sub-button {
1185
+ .spartan-sidebar-menu-sub-button {
1052
1186
  @apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>ng-icon]:text-[length:--spacing(4)];
1053
1187
  }
1054
1188
 
1055
1189
  /* MARK: Skeleton */
1056
- &.spartan-skeleton {
1190
+ .spartan-skeleton {
1057
1191
  @apply bg-muted rounded-md;
1058
1192
  }
1059
1193
 
1060
1194
  /* MARK: Slider */
1061
- &.spartan-slider {
1195
+ .spartan-slider {
1062
1196
  @apply data-vertical:min-h-40;
1063
1197
  }
1064
1198
 
1065
- &.spartan-slider-track {
1199
+ .spartan-slider-track {
1066
1200
  @apply bg-muted rounded-full data-horizontal:h-1.5 data-horizontal:w-full data-vertical:h-full data-vertical:w-1.5;
1067
1201
  }
1068
1202
 
1069
- &.spartan-slider-range {
1203
+ .spartan-slider-range {
1070
1204
  @apply bg-primary;
1071
1205
  }
1072
1206
 
1073
- &.spartan-slider-thumb {
1207
+ .spartan-slider-thumb {
1074
1208
  @apply border-primary ring-ring/50 size-4 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden;
1075
1209
  }
1076
1210
 
1077
- &.spartan-slider-ticks {
1211
+ .spartan-slider-ticks {
1078
1212
  @apply px-2 group-data-vertical:px-0 group-data-vertical:py-2;
1079
1213
  }
1080
1214
 
1081
1215
  /* MARK: Sonner */
1082
- &.spartan-toast {
1216
+ .spartan-toast {
1083
1217
  @apply rounded-2xl!;
1084
1218
  }
1085
1219
 
1086
1220
  /* MARK: Switch */
1087
- &.spartan-switch {
1221
+ .spartan-switch {
1088
1222
  @apply data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/50 data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 data-[matches-spartan-invalid=true]:border-destructive dark:data-[matches-spartan-invalid=true]:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent shadow-xs focus-visible:ring-3 data-[matches-spartan-invalid=true]:ring-3 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px];
1089
1223
  }
1090
1224
 
1091
- &.spartan-switch-thumb {
1225
+ .spartan-switch-thumb {
1092
1226
  @apply bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-unchecked:translate-x-0 data-checked:ltr:translate-x-[calc(100%-2px)] data-checked:rtl:-translate-x-[calc(100%-2px)];
1093
1227
  }
1094
1228
 
1095
1229
  /* MARK: Table */
1096
- &.spartan-table-container {
1230
+ .spartan-table-container {
1097
1231
  @apply relative w-full overflow-x-auto;
1098
1232
  }
1099
1233
 
1100
- &.spartan-table {
1234
+ .spartan-table {
1101
1235
  @apply w-full caption-bottom text-sm;
1102
1236
  }
1103
1237
 
1104
- &.spartan-table-header {
1238
+ .spartan-table-header {
1105
1239
  @apply [&_tr]:border-b;
1106
1240
  }
1107
1241
 
1108
- &.spartan-table-body {
1242
+ .spartan-table-body {
1109
1243
  @apply [&_tr:last-child]:border-0;
1110
1244
  }
1111
1245
 
1112
- &.spartan-table-footer {
1246
+ .spartan-table-footer {
1113
1247
  @apply bg-muted/50 border-t font-medium [&>tr]:last:border-b-0;
1114
1248
  }
1115
1249
 
1116
- &.spartan-table-row {
1250
+ .spartan-table-row {
1117
1251
  @apply hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors;
1118
1252
  }
1119
1253
 
1120
- &.spartan-table-head {
1254
+ .spartan-table-head {
1121
1255
  @apply text-foreground h-10 px-2 text-start align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pe-0;
1122
1256
  }
1123
1257
 
1124
- &.spartan-table-cell {
1258
+ .spartan-table-cell {
1125
1259
  @apply p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pe-0;
1126
1260
  }
1127
1261
 
1128
- &.spartan-table-caption {
1262
+ .spartan-table-caption {
1129
1263
  @apply text-muted-foreground mt-4 text-sm;
1130
1264
  }
1131
1265
 
1132
1266
  /* MARK: Tabs */
1133
- &.spartan-tabs {
1267
+ .spartan-tabs {
1134
1268
  @apply gap-2;
1135
1269
  }
1136
1270
 
1137
- &.spartan-tabs-list {
1271
+ .spartan-tabs-list {
1138
1272
  @apply rounded-lg p-[3px] group-data-horizontal/tabs:h-9 data-[variant=line]:rounded-none;
1139
1273
  }
1140
1274
 
1141
- &.spartan-tabs-trigger {
1275
+ .spartan-tabs-trigger {
1142
1276
  @apply gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
1143
1277
  }
1144
1278
 
1145
- &.spartan-tabs-content {
1279
+ .spartan-tabs-content {
1146
1280
  @apply text-sm;
1147
1281
  }
1148
1282
 
1149
1283
  /* MARK: Textarea */
1150
- &.spartan-textarea {
1284
+ .spartan-textarea {
1151
1285
  @apply border-input dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 data-[matches-spartan-invalid=true]:border-destructive dark:data-[matches-spartan-invalid=true]:border-destructive/50 rounded-md border bg-transparent px-2.5 py-2 text-base shadow-xs transition-[color,box-shadow] focus-visible:ring-3 data-[matches-spartan-invalid=true]:ring-3 md:text-sm;
1152
1286
  }
1153
1287
 
1154
1288
  /* MARK: Toggle */
1155
- &.spartan-toggle {
1289
+ .spartan-toggle {
1156
1290
  @apply hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 data-[matches-spartan-invalid=true]:ring-destructive/20 dark:data-[matches-spartan-invalid=true]:ring-destructive/40 data-[matches-spartan-invalid=true]:border-destructive dark:data-[matches-spartan-invalid=true]:border-destructive/50 gap-1 rounded-md text-sm font-medium transition-[color,box-shadow] [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
1157
1291
  }
1158
1292
 
1159
- &.spartan-toggle-variant-default {
1293
+ .spartan-toggle-variant-default {
1160
1294
  @apply bg-transparent;
1161
1295
  }
1162
1296
 
1163
- &.spartan-toggle-variant-outline {
1297
+ .spartan-toggle-variant-outline {
1164
1298
  @apply border-input hover:bg-muted border bg-transparent shadow-xs;
1165
1299
  }
1166
1300
 
1167
- &.spartan-toggle-size-default {
1301
+ .spartan-toggle-size-default {
1168
1302
  @apply h-9 min-w-9 px-2.5;
1169
1303
  }
1170
1304
 
1171
- &.spartan-toggle-size-sm {
1305
+ .spartan-toggle-size-sm {
1172
1306
  @apply h-8 min-w-8 px-2.5;
1173
1307
  }
1174
1308
 
1175
- &.spartan-toggle-size-lg {
1309
+ .spartan-toggle-size-lg {
1176
1310
  @apply h-10 min-w-10 px-2.5;
1177
1311
  }
1178
1312
 
1179
1313
  /* MARK: Toggle Group */
1180
- &.spartan-toggle-group {
1314
+ .spartan-toggle-group {
1181
1315
  @apply rounded-md data-[spacing=0]:data-[variant=outline]:shadow-xs;
1182
1316
  }
1183
1317
 
1184
- &.spartan-toggle-group-item {
1318
+ .spartan-toggle-group-item {
1185
1319
  @apply data-[state=on]:bg-muted group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-[spacing=0]/toggle-group:shadow-none group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-s-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-e-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md;
1186
1320
  }
1187
1321
 
1188
1322
  /* MARK: Tooltip */
1189
- &.spartan-tooltip-content {
1323
+ .spartan-tooltip-content {
1190
1324
  @apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 rounded-md px-3 py-1.5 text-xs;
1191
1325
  }
1192
1326
 
1327
+ .spartan-tooltip-content-logical {
1328
+ @apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;
1329
+ }
1330
+
1331
+ .spartan-tooltip-arrow {
1332
+ @apply size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px];
1333
+ }
1334
+
1335
+ .spartan-tooltip-arrow-logical {
1336
+ @apply data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2;
1337
+ }
1338
+
1193
1339
  /* MARK: Input Group */
1194
- &.spartan-input-group {
1340
+ .spartan-input-group {
1195
1341
  @apply border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][data-matches-spartan-invalid=true]]:ring-destructive/20 has-[[data-slot][data-matches-spartan-invalid=true]]:border-destructive dark:has-[[data-slot][data-matches-spartan-invalid=true]]:ring-destructive/40 h-9 rounded-md border shadow-xs transition-[color,box-shadow] in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][data-matches-spartan-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pe-1.5 has-[>[data-align=inline-start]]:[&>input]:ps-1.5;
1196
1342
  }
1197
1343
 
1198
- &.spartan-input-group-addon {
1344
+ .spartan-input-group-addon {
1199
1345
  @apply text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
1200
1346
  }
1201
1347
 
1202
- &.spartan-input-group-addon-align-inline-start {
1348
+ .spartan-input-group-addon-align-inline-start {
1203
1349
  @apply ps-2 has-[>button]:-ms-1 has-[>kbd]:ms-[-0.15rem];
1204
1350
  }
1205
1351
 
1206
- &.spartan-input-group-addon-align-inline-end {
1352
+ .spartan-input-group-addon-align-inline-end {
1207
1353
  @apply pe-2 has-[>button]:-me-1 has-[>kbd]:me-[-0.15rem];
1208
1354
  }
1209
1355
 
1210
- &.spartan-input-group-addon-align-block-start {
1356
+ .spartan-input-group-addon-align-block-start {
1211
1357
  @apply px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2;
1212
1358
  }
1213
1359
 
1214
- &.spartan-input-group-addon-align-block-end {
1360
+ .spartan-input-group-addon-align-block-end {
1215
1361
  @apply px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2;
1216
1362
  }
1217
1363
 
1218
- &.spartan-input-group-button {
1364
+ .spartan-input-group-button {
1219
1365
  @apply gap-2 text-sm;
1220
1366
  }
1221
1367
 
1222
- &.spartan-input-group-button-size-xs {
1368
+ .spartan-input-group-button-size-xs {
1223
1369
  @apply h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>ng-icon:not([class*='text-'])]:text-[length:--spacing(3.5)];
1224
1370
  }
1225
1371
 
1226
- &.spartan-input-group-button-size-icon-xs {
1372
+ .spartan-input-group-button-size-icon-xs {
1227
1373
  @apply size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>ng-icon]:p-0;
1228
1374
  }
1229
1375
 
1230
- &.spartan-input-group-button-size-icon-sm {
1376
+ .spartan-input-group-button-size-icon-sm {
1231
1377
  @apply size-8 p-0 has-[>ng-icon]:p-0;
1232
1378
  }
1233
1379
 
1234
- &.spartan-input-group-text {
1380
+ .spartan-input-group-text {
1235
1381
  @apply text-muted-foreground gap-2 text-sm [&_ng-icon:not([class*='text-'])]:text-[length:--spacing(4)];
1236
1382
  }
1237
1383
 
1238
- &.spartan-input-group-input {
1384
+ .spartan-input-group-input {
1239
1385
  @apply rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 data-[matches-spartan-invalid=true]:ring-0 dark:bg-transparent;
1240
1386
  }
1241
1387
 
1242
- &.spartan-input-group-textarea {
1388
+ .spartan-input-group-textarea {
1243
1389
  @apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 data-[matches-spartan-invalid=true]:ring-0 dark:bg-transparent;
1244
1390
  }
1245
1391
  }