astralkit 0.3.0 → 0.3.2

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/tailwind.cjs CHANGED
@@ -1,416 +1,416 @@
1
- /**
2
- * AstralKit Tailwind CSS v3 Compatibility Plugin
3
- *
4
- * Registers all ak-* design tokens as Tailwind theme extensions
5
- * so that utility classes like bg-ak-bg, text-ak-text, p-ak-2, etc.
6
- * work in Tailwind v3 projects.
7
- *
8
- * Usage (tailwind.config.js):
9
- * const astralkit = require('astralkit/tailwind')
10
- * module.exports = { plugins: [astralkit] }
11
- *
12
- * In Tailwind v4, this plugin is NOT needed — the @theme directive
13
- * in astralkit/theme handles everything automatically.
14
- */
15
-
16
- const plugin = require('tailwindcss/plugin')
17
-
18
- // Shared spacing map — used by spacing, width, height, minWidth, minHeight, maxWidth
19
- // In Tailwind v4 spacing auto-feeds all sizing utils; in v3 we must extend each explicitly
20
- const AK_SPACING = {
21
- 'ak-0': 'var(--spacing-ak-0)',
22
- 'ak-px': 'var(--spacing-ak-px)',
23
- 'ak-0_5': 'var(--spacing-ak-0_5)',
24
- 'ak-0.5': 'var(--spacing-ak-0_5)',
25
- 'ak-1': 'var(--spacing-ak-1)',
26
- 'ak-1_5': 'var(--spacing-ak-1_5)',
27
- 'ak-1.5': 'var(--spacing-ak-1_5)',
28
- 'ak-2': 'var(--spacing-ak-2)',
29
- 'ak-2_5': 'var(--spacing-ak-2_5)',
30
- 'ak-2.5': 'var(--spacing-ak-2_5)',
31
- 'ak-3': 'var(--spacing-ak-3)',
32
- 'ak-3_5': 'var(--spacing-ak-3_5)',
33
- 'ak-3.5': 'var(--spacing-ak-3_5)',
34
- 'ak-4': 'var(--spacing-ak-4)',
35
- 'ak-4_5': 'var(--spacing-ak-4_5)',
36
- 'ak-4.5': 'var(--spacing-ak-4_5)',
37
- 'ak-5': 'var(--spacing-ak-5)',
38
- 'ak-5_5': 'var(--spacing-ak-5_5)',
39
- 'ak-5.5': 'var(--spacing-ak-5_5)',
40
- 'ak-6': 'var(--spacing-ak-6)',
41
- 'ak-7': 'var(--spacing-ak-7)',
42
- 'ak-8': 'var(--spacing-ak-8)',
43
- 'ak-10': 'var(--spacing-ak-10)',
44
- 'ak-12': 'var(--spacing-ak-12)',
45
- 'ak-16': 'var(--spacing-ak-16)',
46
- 'ak-20': 'var(--spacing-ak-20)',
47
- 'ak-24': 'var(--spacing-ak-24)',
48
- 'ak-mobile-bar': 'var(--spacing-ak-mobile-bar)',
49
- }
50
-
51
- module.exports = plugin(
52
- // Plugin function — intentionally empty.
53
- // Token values (CSS custom properties) now live in astralkit-utilities.css
54
- // inside @layer ak-tokens. This eliminates duplication and enables
55
- // native CSS @layer for cascade control.
56
- // Compatible with Tailwind v3 and v4.
57
- function () {},
58
-
59
- // Config — extends Tailwind's theme with ak-* utilities
60
- {
61
- theme: {
62
- extend: {
63
- /* ── Colors ──
64
- Every ak-* color token becomes a Tailwind color utility:
65
- bg-ak-bg, text-ak-text, border-ak-border, etc. */
66
- colors: {
67
- // Neutral scale
68
- 'ak-neutral-0': 'var(--color-ak-neutral-0)',
69
- 'ak-neutral-50': 'var(--color-ak-neutral-50)',
70
- 'ak-neutral-100': 'var(--color-ak-neutral-100)',
71
- 'ak-neutral-200': 'var(--color-ak-neutral-200)',
72
- 'ak-neutral-300': 'var(--color-ak-neutral-300)',
73
- 'ak-neutral-400': 'var(--color-ak-neutral-400)',
74
- 'ak-neutral-500': 'var(--color-ak-neutral-500)',
75
- 'ak-neutral-600': 'var(--color-ak-neutral-600)',
76
- 'ak-neutral-700': 'var(--color-ak-neutral-700)',
77
- 'ak-neutral-800': 'var(--color-ak-neutral-800)',
78
- 'ak-neutral-900': 'var(--color-ak-neutral-900)',
79
- 'ak-neutral-950': 'var(--color-ak-neutral-950)',
80
-
81
- // Primary scale
82
- 'ak-primary-50': 'var(--color-ak-primary-50)',
83
- 'ak-primary-100': 'var(--color-ak-primary-100)',
84
- 'ak-primary-200': 'var(--color-ak-primary-200)',
85
- 'ak-primary-300': 'var(--color-ak-primary-300)',
86
- 'ak-primary-400': 'var(--color-ak-primary-400)',
87
- 'ak-primary-500': 'var(--color-ak-primary-500)',
88
- 'ak-primary-600': 'var(--color-ak-primary-600)',
89
- 'ak-primary-700': 'var(--color-ak-primary-700)',
90
- 'ak-primary-800': 'var(--color-ak-primary-800)',
91
- 'ak-primary-900': 'var(--color-ak-primary-900)',
92
- 'ak-primary-950': 'var(--color-ak-primary-950)',
93
-
94
- // Primary action
95
- 'ak-primary': 'var(--color-ak-primary)',
96
- 'ak-primary-hover': 'var(--color-ak-primary-hover)',
97
- 'ak-primary-active': 'var(--color-ak-primary-active)',
98
-
99
- // Semantic surfaces
100
- 'ak-bg': 'var(--color-ak-bg)',
101
- 'ak-surface': 'var(--color-ak-surface)',
102
- 'ak-surface-2': 'var(--color-ak-surface-2)',
103
- 'ak-hover': 'var(--color-ak-hover)',
104
- 'ak-active': 'var(--color-ak-active)',
105
- 'ak-elevated': 'var(--color-ak-elevated)',
106
- 'ak-on-primary': 'var(--color-ak-on-primary)',
107
- 'ak-primary-subtle': 'var(--color-ak-primary-subtle)',
108
- 'ak-overlay': 'var(--color-ak-overlay)',
109
-
110
- // Semantic text
111
- 'ak-text': 'var(--color-ak-text)',
112
- 'ak-text-secondary': 'var(--color-ak-text-secondary)',
113
- 'ak-text-muted': 'var(--color-ak-text-muted)',
114
- 'ak-text-disabled': 'var(--color-ak-text-disabled)',
115
- 'ak-text-inverse': 'var(--color-ak-text-inverse)',
116
- 'ak-text-link': 'var(--color-ak-text-link)',
117
- 'ak-text-placeholder':'var(--color-ak-text-placeholder)',
118
-
119
- // Semantic border
120
- 'ak-border': 'var(--color-ak-border)',
121
- 'ak-border-subtle': 'var(--color-ak-border-subtle)',
122
- 'ak-border-strong': 'var(--color-ak-border-strong)',
123
- 'ak-border-focus': 'var(--color-ak-border-focus)',
124
-
125
- // Status
126
- 'ak-success': 'var(--color-ak-success)',
127
- 'ak-success-subtle': 'var(--color-ak-success-subtle)',
128
- 'ak-success-text': 'var(--color-ak-success-text)',
129
- 'ak-warning': 'var(--color-ak-warning)',
130
- 'ak-warning-subtle': 'var(--color-ak-warning-subtle)',
131
- 'ak-warning-text': 'var(--color-ak-warning-text)',
132
- 'ak-danger': 'var(--color-ak-danger)',
133
- 'ak-danger-subtle': 'var(--color-ak-danger-subtle)',
134
- 'ak-danger-text': 'var(--color-ak-danger-text)',
135
- 'ak-info': 'var(--color-ak-info)',
136
- 'ak-info-subtle': 'var(--color-ak-info-subtle)',
137
- 'ak-info-text': 'var(--color-ak-info-text)',
138
- 'ak-chart-1': 'var(--color-ak-chart-1)',
139
- 'ak-chart-2': 'var(--color-ak-chart-2)',
140
- 'ak-chart-3': 'var(--color-ak-chart-3)',
141
- 'ak-chart-4': 'var(--color-ak-chart-4)',
142
- 'ak-chart-5': 'var(--color-ak-chart-5)',
143
- 'ak-chart-6': 'var(--color-ak-chart-6)',
144
-
145
- // Neobrutalist
146
- 'ak-brutal-ink': 'var(--color-ak-brutal-ink)',
147
- 'ak-brutal-face': 'var(--color-ak-brutal-face)',
148
- 'ak-brutal-face-dark': 'var(--color-ak-brutal-face-dark)',
149
- 'ak-brutal-on-face': 'var(--color-ak-brutal-on-face)',
150
- 'ak-brutal-on-face-dark': 'var(--color-ak-brutal-on-face-dark)',
151
- },
152
-
153
- /* ── Spacing ──
154
- p-ak-2, m-ak-3, gap-ak-1, etc.
155
- In v3, spacing doesn't auto-feed into w-/h-/min-w-/min-h-/max-w-
156
- so we also spread AK_SPACING into those configs below. */
157
- spacing: {
158
- ...AK_SPACING,
159
- // Fluid spacing
160
- 'ak-fl-3xs': 'clamp(0.25rem, 0.21rem + 0.14vw, 0.375rem)',
161
- 'ak-fl-2xs': 'clamp(0.5rem, 0.43rem + 0.28vw, 0.75rem)',
162
- 'ak-fl-xs': 'clamp(0.75rem, 0.65rem + 0.42vw, 1rem)',
163
- 'ak-fl-sm': 'clamp(1rem, 0.86rem + 0.56vw, 1.5rem)',
164
- 'ak-fl-md': 'clamp(1.5rem, 1.29rem + 0.83vw, 2rem)',
165
- 'ak-fl-lg': 'clamp(2rem, 1.72rem + 1.11vw, 3rem)',
166
- 'ak-fl-xl': 'clamp(3rem, 2.5rem + 1.85vw, 4.5rem)',
167
- 'ak-fl-2xl': 'clamp(4rem, 3.22rem + 2.78vw, 6rem)',
168
- 'ak-fl-3xl': 'clamp(6rem, 4.86rem + 4.17vw, 9rem)',
169
- // Fluid space pairs
170
- 'ak-fl-xs-md': 'clamp(0.75rem, 0.43rem + 1.39vw, 2rem)',
171
- 'ak-fl-xs-lg': 'clamp(0.75rem, 0.14rem + 2.78vw, 3rem)',
172
- 'ak-fl-sm-lg': 'clamp(1rem, 0.43rem + 2.78vw, 3rem)',
173
- 'ak-fl-sm-xl': 'clamp(1rem, 0rem + 4.17vw, 4.5rem)',
174
- 'ak-fl-md-xl': 'clamp(1.5rem, 0.57rem + 3.47vw, 4.5rem)',
175
- 'ak-fl-md-2xl': 'clamp(1.5rem, 0rem + 5.56vw, 6rem)',
176
- 'ak-fl-lg-2xl': 'clamp(2rem, 0.57rem + 5.56vw, 6rem)',
177
- 'ak-fl-xl-3xl': 'clamp(3rem, 0.57rem + 8.33vw, 9rem)',
178
- 'ak-fl-page-margin': 'var(--spacing-ak-fl-page-margin)',
179
- },
180
-
181
- /* ── Font Family ── */
182
- fontFamily: {
183
- 'ak-sans': ['DM Sans', 'system-ui', '-apple-system', 'sans-serif'],
184
- 'ak-serif': ['DM Serif Display', 'Georgia', 'serif'],
185
- 'ak-mono': ['JetBrains Mono', 'Fira Code', 'ui-monospace', 'monospace'],
186
- },
187
-
188
- /* ── Font Size ──
189
- text-ak-base, text-ak-lg, text-ak-fl-2xl, etc. */
190
- fontSize: {
191
- // Static scale
192
- 'ak-2xs': 'var(--text-ak-2xs)',
193
- 'ak-xs': 'var(--text-ak-xs)',
194
- 'ak-sm': 'var(--text-ak-sm)',
195
- 'ak-base': 'var(--text-ak-base)',
196
- 'ak-lg': 'var(--text-ak-lg)',
197
- 'ak-xl': 'var(--text-ak-xl)',
198
- 'ak-2xl': 'var(--text-ak-2xl)',
199
- 'ak-3xl': 'var(--text-ak-3xl)',
200
- 'ak-4xl': 'var(--text-ak-4xl)',
201
- 'ak-5xl': 'var(--text-ak-5xl)',
202
- 'ak-6xl': 'var(--text-ak-6xl)',
203
- 'ak-7xl': 'var(--text-ak-7xl)',
204
- 'ak-8xl': 'var(--text-ak-8xl)',
205
- 'ak-9xl': 'var(--text-ak-9xl)',
206
- // Fluid scale
207
- 'ak-fl-xs': 'clamp(0.6875rem, 0.67rem + 0.06vw, 0.75rem)',
208
- 'ak-fl-sm': 'clamp(0.75rem, 0.71rem + 0.12vw, 0.875rem)',
209
- 'ak-fl-base': 'clamp(0.875rem, 0.84rem + 0.12vw, 1rem)',
210
- 'ak-fl-lg': 'clamp(1rem, 0.96rem + 0.12vw, 1.125rem)',
211
- 'ak-fl-xl': 'clamp(1.125rem, 1.09rem + 0.12vw, 1.25rem)',
212
- 'ak-fl-2xl': 'clamp(1.25rem, 1.18rem + 0.23vw, 1.5rem)',
213
- 'ak-fl-3xl': 'clamp(1.5rem, 1.39rem + 0.35vw, 1.875rem)',
214
- 'ak-fl-4xl': 'clamp(1.875rem, 1.76rem + 0.35vw, 2.25rem)',
215
- 'ak-fl-5xl': 'clamp(2.25rem, 2.03rem + 0.69vw, 3rem)',
216
- 'ak-fl-6xl': 'clamp(3rem, 2.78rem + 0.69vw, 3.75rem)',
217
- 'ak-fl-7xl': 'clamp(3.5rem, 3.2rem + 0.93vw, 4.5rem)',
218
- 'ak-fl-8xl': 'clamp(4.5rem, 4.06rem + 1.39vw, 6rem)',
219
- 'ak-fl-9xl': 'clamp(5.25rem, 4.73rem + 1.62vw, 7rem)',
220
- // Display scale
221
- 'ak-display-xs': 'clamp(0.75rem, 0.7rem + 0.15vw, 0.875rem)',
222
- 'ak-display-sm': 'clamp(0.875rem, 0.83rem + 0.19vw, 1rem)',
223
- 'ak-display-base': 'clamp(1rem, 0.94rem + 0.28vw, 1.1875rem)',
224
- 'ak-display-lg': 'clamp(1.125rem, 1.01rem + 0.52vw, 1.5rem)',
225
- 'ak-display-xl': 'clamp(1.25rem, 1.07rem + 0.83vw, 1.875rem)',
226
- 'ak-display-2xl': 'clamp(1.5rem, 1.2rem + 1.11vw, 2.25rem)',
227
- 'ak-display-3xl': 'clamp(1.875rem, 1.42rem + 1.67vw, 3rem)',
228
- 'ak-display-4xl': 'clamp(2.25rem, 1.58rem + 2.5vw, 3.75rem)',
229
- 'ak-display-5xl': 'clamp(3rem, 2.07rem + 3.47vw, 5.25rem)',
230
- 'ak-display-6xl': 'clamp(3.75rem, 2.5rem + 4.63vw, 7rem)',
231
- 'ak-display-7xl': 'clamp(4.5rem, 3.06rem + 5.56vw, 8rem)',
232
- 'ak-display-8xl': 'clamp(5rem, 3.06rem + 6.94vw, 9rem)',
233
- 'ak-display-9xl': 'clamp(5.5rem, 3.06rem + 7.64vw, 10rem)',
234
- },
235
-
236
- /* ── Line Height ── */
237
- lineHeight: {
238
- 'ak-display': 'var(--leading-ak-display)',
239
- 'ak-tighter': 'var(--leading-ak-tighter)',
240
- 'ak-none': 'var(--leading-ak-none)',
241
- 'ak-tight': 'var(--leading-ak-tight)',
242
- 'ak-snug': 'var(--leading-ak-snug)',
243
- 'ak-normal': 'var(--leading-ak-normal)',
244
- 'ak-relaxed': 'var(--leading-ak-relaxed)',
245
- 'ak-prose': 'var(--leading-ak-prose)',
246
- 'ak-loose': 'var(--leading-ak-loose)',
247
- },
248
-
249
- /* ── Letter Spacing ── */
250
- letterSpacing: {
251
- 'ak-tighter': 'var(--tracking-ak-tighter)',
252
- 'ak-tight': 'var(--tracking-ak-tight)',
253
- 'ak-subtle': 'var(--tracking-ak-subtle)',
254
- 'ak-normal': 'var(--tracking-ak-normal)',
255
- 'ak-wide': 'var(--tracking-ak-wide)',
256
- 'ak-wider': 'var(--tracking-ak-wider)',
257
- 'ak-widest': 'var(--tracking-ak-widest)',
258
- 'ak-section': 'var(--tracking-ak-section)',
259
- },
260
-
261
- /* ── Border Radius ── */
262
- borderRadius: {
263
- 'ak-none': 'var(--radius-ak-none)',
264
- 'ak-sm': 'var(--radius-ak-sm)',
265
- 'ak-md': 'var(--radius-ak-md)',
266
- 'ak-lg': 'var(--radius-ak-lg)',
267
- 'ak-xl': 'var(--radius-ak-xl)',
268
- 'ak-2xl': 'var(--radius-ak-2xl)',
269
- 'ak-3xl': 'var(--radius-ak-3xl)',
270
- 'ak-full': 'var(--radius-ak-full)',
271
- 'ak-input': 'var(--radius-ak-input)',
272
- // Neobrutalist
273
- 'ak-brutal': 'var(--radius-ak-brutal)',
274
- 'ak-brutal-sm': 'var(--radius-ak-brutal-sm)',
275
- },
276
-
277
- /* ── Border Width ── */
278
- borderWidth: {
279
- 'ak-brutal': 'var(--border-ak-brutal)',
280
- 'ak-brutal-lg': 'var(--border-ak-brutal-lg)',
281
- },
282
-
283
- /* ── Box Shadow ── */
284
- boxShadow: {
285
- 'ak-xs': 'var(--shadow-ak-xs)',
286
- 'ak-sm': 'var(--shadow-ak-sm)',
287
- 'ak-md': 'var(--shadow-ak-md)',
288
- 'ak-lg': 'var(--shadow-ak-lg)',
289
- 'ak-xl': 'var(--shadow-ak-xl)',
290
- 'ak-2xl': 'var(--shadow-ak-2xl)',
291
- 'ak-focus': 'var(--shadow-ak-focus)',
292
- 'ak-focus-primary': 'var(--shadow-ak-focus-primary)',
293
- 'ak-focus-danger': 'var(--shadow-ak-focus-danger)',
294
- 'ak-focus-success': 'var(--shadow-ak-focus-success)',
295
- // Neobrutalist
296
- 'ak-brutal-xs': 'var(--shadow-ak-brutal-xs)',
297
- 'ak-brutal-sm': 'var(--shadow-ak-brutal-sm)',
298
- 'ak-brutal': 'var(--shadow-ak-brutal)',
299
- 'ak-brutal-lg': 'var(--shadow-ak-brutal-lg)',
300
- 'ak-brutal-xl': 'var(--shadow-ak-brutal-xl)',
301
- 'ak-brutal-none': '0 0 0 0 #000',
302
- },
303
-
304
- /* ── Max Width (containers) ── */
305
- maxWidth: {
306
- 'ak-page': 'var(--container-ak-page)',
307
- 'ak-xs': 'var(--container-ak-xs)',
308
- 'ak-sm': 'var(--container-ak-sm)',
309
- 'ak-md': 'var(--container-ak-md)',
310
- 'ak-lg': 'var(--container-ak-lg)',
311
- 'ak-xl': 'var(--container-ak-xl)',
312
- 'ak-2xl': 'var(--container-ak-2xl)',
313
- 'ak-3xl': 'var(--container-ak-3xl)',
314
- 'ak-4xl': 'var(--container-ak-4xl)',
315
- 'ak-prose': 'var(--container-ak-prose)',
316
- },
317
-
318
- /* ── Z-Index (Chakra-inspired scale) ── */
319
- zIndex: {
320
- 'ak-base': 'var(--z-ak-base)',
321
- 'ak-docked': 'var(--z-ak-docked)',
322
- 'ak-dropdown': 'var(--z-ak-dropdown)',
323
- 'ak-sticky': 'var(--z-ak-sticky)',
324
- 'ak-banner': 'var(--z-ak-banner)',
325
- 'ak-overlay': 'var(--z-ak-overlay)',
326
- 'ak-modal': 'var(--z-ak-modal)',
327
- 'ak-popover': 'var(--z-ak-popover)',
328
- 'ak-toast': 'var(--z-ak-toast)',
329
- 'ak-tooltip': 'var(--z-ak-tooltip)',
330
- },
331
-
332
- /* ── Height ── (spacing + named heights) */
333
- height: {
334
- ...AK_SPACING,
335
- 'ak-nav': 'var(--height-ak-nav)',
336
- 'ak-touch': 'var(--height-ak-touch)',
337
- 'ak-control-sm': 'var(--height-ak-control-sm)',
338
- 'ak-control-md': 'var(--height-ak-control-md)',
339
- 'ak-control-lg': 'var(--height-ak-control-lg)',
340
- 'ak-control-xl': 'var(--height-ak-control-xl)',
341
- 'ak-row-compact': 'var(--height-ak-row-compact)',
342
- 'ak-row-default': 'var(--height-ak-row-default)',
343
- 'ak-row-comfortable': 'var(--height-ak-row-comfortable)',
344
- },
345
-
346
- /* ── Min Height ── */
347
- minHeight: {
348
- ...AK_SPACING,
349
- 'ak-nav': 'var(--height-ak-nav)',
350
- 'ak-touch': 'var(--height-ak-touch)',
351
- 'ak-touch-min': 'var(--size-ak-touch-min)',
352
- 'ak-control-sm': 'var(--height-ak-control-sm)',
353
- 'ak-control-md': 'var(--height-ak-control-md)',
354
- 'ak-control-lg': 'var(--height-ak-control-lg)',
355
- 'ak-control-xl': 'var(--height-ak-control-xl)',
356
- 'ak-row-compact': 'var(--height-ak-row-compact)',
357
- 'ak-row-default': 'var(--height-ak-row-default)',
358
- 'ak-row-comfortable': 'var(--height-ak-row-comfortable)',
359
- },
360
-
361
- /* ── Width ── */
362
- width: {
363
- ...AK_SPACING,
364
- 'ak-touch': 'var(--width-ak-touch)',
365
- 'ak-panel-width': 'var(--size-ak-panel-width)',
366
- 'ak-sidebar-collapsed': 'var(--width-ak-sidebar-collapsed)',
367
- 'ak-sidebar-expanded': 'var(--width-ak-sidebar-expanded)',
368
- },
369
-
370
- /* ── Min Width ── */
371
- minWidth: {
372
- ...AK_SPACING,
373
- 'ak-touch': 'var(--width-ak-touch)',
374
- 'ak-panel-width': 'var(--size-ak-panel-width)',
375
- 'ak-sidebar-collapsed': 'var(--width-ak-sidebar-collapsed)',
376
- },
377
-
378
- /* ── Size (width + height shorthand) ── */
379
- size: {
380
- ...AK_SPACING,
381
- 'ak-icon-xs': 'var(--size-ak-icon-xs)',
382
- 'ak-icon-sm': 'var(--size-ak-icon-sm)',
383
- 'ak-icon-md': 'var(--size-ak-icon-md)',
384
- 'ak-icon-lg': 'var(--size-ak-icon-lg)',
385
- 'ak-icon-xl': 'var(--size-ak-icon-xl)',
386
- 'ak-icon-2xl': 'var(--size-ak-icon-2xl)',
387
- 'ak-icon-3xl': 'var(--size-ak-icon-3xl)',
388
- 'ak-avatar-sm': 'var(--size-ak-avatar-sm)',
389
- 'ak-avatar-md': 'var(--size-ak-avatar-md)',
390
- 'ak-avatar-lg': 'var(--size-ak-avatar-lg)',
391
- 'ak-avatar-xl': 'var(--size-ak-avatar-xl)',
392
- 'ak-avatar-2xl': 'var(--size-ak-avatar-2xl)',
393
- 'ak-avatar-3xl': 'var(--size-ak-avatar-3xl)',
394
- 'ak-touch': 'var(--width-ak-touch)',
395
- 'ak-touch-min': 'var(--size-ak-touch-min)',
396
- },
397
-
398
- /* ── Transition Duration ── */
399
- transitionDuration: {
400
- 'ak-fast': 'var(--duration-ak-fast)',
401
- 'ak-base': 'var(--duration-ak-base)',
402
- 'ak-slow': 'var(--duration-ak-slow)',
403
- },
404
-
405
- /* ── Transition Timing Function ── */
406
- transitionTimingFunction: {
407
- 'ak-default': 'var(--ease-ak-default)',
408
- 'ak-in': 'var(--ease-ak-in)',
409
- 'ak-out': 'var(--ease-ak-out)',
410
- 'ak-spring': 'var(--ease-ak-spring)',
411
- 'ak-bounce': 'var(--ease-ak-bounce)',
412
- },
413
- },
414
- },
415
- }
416
- )
1
+ /**
2
+ * AstralKit Tailwind CSS v3 Compatibility Plugin
3
+ *
4
+ * Registers all ak-* design tokens as Tailwind theme extensions
5
+ * so that utility classes like bg-ak-bg, text-ak-text, p-ak-2, etc.
6
+ * work in Tailwind v3 projects.
7
+ *
8
+ * Usage (tailwind.config.js):
9
+ * const astralkit = require('astralkit/tailwind')
10
+ * module.exports = { plugins: [astralkit] }
11
+ *
12
+ * In Tailwind v4, this plugin is NOT needed — the @theme directive
13
+ * in astralkit/theme-v4 handles everything automatically.
14
+ */
15
+
16
+ const plugin = require('tailwindcss/plugin')
17
+
18
+ // Shared spacing map — used by spacing, width, height, minWidth, minHeight, maxWidth
19
+ // In Tailwind v4 spacing auto-feeds all sizing utils; in v3 we must extend each explicitly
20
+ const AK_SPACING = {
21
+ 'ak-0': 'var(--spacing-ak-0)',
22
+ 'ak-px': 'var(--spacing-ak-px)',
23
+ 'ak-0_5': 'var(--spacing-ak-0_5)',
24
+ 'ak-0.5': 'var(--spacing-ak-0_5)',
25
+ 'ak-1': 'var(--spacing-ak-1)',
26
+ 'ak-1_5': 'var(--spacing-ak-1_5)',
27
+ 'ak-1.5': 'var(--spacing-ak-1_5)',
28
+ 'ak-2': 'var(--spacing-ak-2)',
29
+ 'ak-2_5': 'var(--spacing-ak-2_5)',
30
+ 'ak-2.5': 'var(--spacing-ak-2_5)',
31
+ 'ak-3': 'var(--spacing-ak-3)',
32
+ 'ak-3_5': 'var(--spacing-ak-3_5)',
33
+ 'ak-3.5': 'var(--spacing-ak-3_5)',
34
+ 'ak-4': 'var(--spacing-ak-4)',
35
+ 'ak-4_5': 'var(--spacing-ak-4_5)',
36
+ 'ak-4.5': 'var(--spacing-ak-4_5)',
37
+ 'ak-5': 'var(--spacing-ak-5)',
38
+ 'ak-5_5': 'var(--spacing-ak-5_5)',
39
+ 'ak-5.5': 'var(--spacing-ak-5_5)',
40
+ 'ak-6': 'var(--spacing-ak-6)',
41
+ 'ak-7': 'var(--spacing-ak-7)',
42
+ 'ak-8': 'var(--spacing-ak-8)',
43
+ 'ak-10': 'var(--spacing-ak-10)',
44
+ 'ak-12': 'var(--spacing-ak-12)',
45
+ 'ak-16': 'var(--spacing-ak-16)',
46
+ 'ak-20': 'var(--spacing-ak-20)',
47
+ 'ak-24': 'var(--spacing-ak-24)',
48
+ 'ak-mobile-bar': 'var(--spacing-ak-mobile-bar)',
49
+ }
50
+
51
+ module.exports = plugin(
52
+ // Plugin function — intentionally empty.
53
+ // Token values (CSS custom properties) now live in astralkit-utilities.css
54
+ // inside @layer ak-tokens. This eliminates duplication and enables
55
+ // native CSS @layer for cascade control.
56
+ // Compatible with Tailwind v3 and v4.
57
+ function () {},
58
+
59
+ // Config — extends Tailwind's theme with ak-* utilities
60
+ {
61
+ theme: {
62
+ extend: {
63
+ /* ── Colors ──
64
+ Every ak-* color token becomes a Tailwind color utility:
65
+ bg-ak-bg, text-ak-text, border-ak-border, etc. */
66
+ colors: {
67
+ // Neutral scale
68
+ 'ak-neutral-0': 'var(--color-ak-neutral-0)',
69
+ 'ak-neutral-50': 'var(--color-ak-neutral-50)',
70
+ 'ak-neutral-100': 'var(--color-ak-neutral-100)',
71
+ 'ak-neutral-200': 'var(--color-ak-neutral-200)',
72
+ 'ak-neutral-300': 'var(--color-ak-neutral-300)',
73
+ 'ak-neutral-400': 'var(--color-ak-neutral-400)',
74
+ 'ak-neutral-500': 'var(--color-ak-neutral-500)',
75
+ 'ak-neutral-600': 'var(--color-ak-neutral-600)',
76
+ 'ak-neutral-700': 'var(--color-ak-neutral-700)',
77
+ 'ak-neutral-800': 'var(--color-ak-neutral-800)',
78
+ 'ak-neutral-900': 'var(--color-ak-neutral-900)',
79
+ 'ak-neutral-950': 'var(--color-ak-neutral-950)',
80
+
81
+ // Primary scale
82
+ 'ak-primary-50': 'var(--color-ak-primary-50)',
83
+ 'ak-primary-100': 'var(--color-ak-primary-100)',
84
+ 'ak-primary-200': 'var(--color-ak-primary-200)',
85
+ 'ak-primary-300': 'var(--color-ak-primary-300)',
86
+ 'ak-primary-400': 'var(--color-ak-primary-400)',
87
+ 'ak-primary-500': 'var(--color-ak-primary-500)',
88
+ 'ak-primary-600': 'var(--color-ak-primary-600)',
89
+ 'ak-primary-700': 'var(--color-ak-primary-700)',
90
+ 'ak-primary-800': 'var(--color-ak-primary-800)',
91
+ 'ak-primary-900': 'var(--color-ak-primary-900)',
92
+ 'ak-primary-950': 'var(--color-ak-primary-950)',
93
+
94
+ // Primary action
95
+ 'ak-primary': 'var(--color-ak-primary)',
96
+ 'ak-primary-hover': 'var(--color-ak-primary-hover)',
97
+ 'ak-primary-active': 'var(--color-ak-primary-active)',
98
+
99
+ // Semantic surfaces
100
+ 'ak-bg': 'var(--color-ak-bg)',
101
+ 'ak-surface': 'var(--color-ak-surface)',
102
+ 'ak-surface-2': 'var(--color-ak-surface-2)',
103
+ 'ak-hover': 'var(--color-ak-hover)',
104
+ 'ak-active': 'var(--color-ak-active)',
105
+ 'ak-elevated': 'var(--color-ak-elevated)',
106
+ 'ak-on-primary': 'var(--color-ak-on-primary)',
107
+ 'ak-primary-subtle': 'var(--color-ak-primary-subtle)',
108
+ 'ak-overlay': 'var(--color-ak-overlay)',
109
+
110
+ // Semantic text
111
+ 'ak-text': 'var(--color-ak-text)',
112
+ 'ak-text-secondary': 'var(--color-ak-text-secondary)',
113
+ 'ak-text-muted': 'var(--color-ak-text-muted)',
114
+ 'ak-text-disabled': 'var(--color-ak-text-disabled)',
115
+ 'ak-text-inverse': 'var(--color-ak-text-inverse)',
116
+ 'ak-text-link': 'var(--color-ak-text-link)',
117
+ 'ak-text-placeholder':'var(--color-ak-text-placeholder)',
118
+
119
+ // Semantic border
120
+ 'ak-border': 'var(--color-ak-border)',
121
+ 'ak-border-subtle': 'var(--color-ak-border-subtle)',
122
+ 'ak-border-strong': 'var(--color-ak-border-strong)',
123
+ 'ak-border-focus': 'var(--color-ak-border-focus)',
124
+
125
+ // Status
126
+ 'ak-success': 'var(--color-ak-success)',
127
+ 'ak-success-subtle': 'var(--color-ak-success-subtle)',
128
+ 'ak-success-text': 'var(--color-ak-success-text)',
129
+ 'ak-warning': 'var(--color-ak-warning)',
130
+ 'ak-warning-subtle': 'var(--color-ak-warning-subtle)',
131
+ 'ak-warning-text': 'var(--color-ak-warning-text)',
132
+ 'ak-danger': 'var(--color-ak-danger)',
133
+ 'ak-danger-subtle': 'var(--color-ak-danger-subtle)',
134
+ 'ak-danger-text': 'var(--color-ak-danger-text)',
135
+ 'ak-info': 'var(--color-ak-info)',
136
+ 'ak-info-subtle': 'var(--color-ak-info-subtle)',
137
+ 'ak-info-text': 'var(--color-ak-info-text)',
138
+ 'ak-chart-1': 'var(--color-ak-chart-1)',
139
+ 'ak-chart-2': 'var(--color-ak-chart-2)',
140
+ 'ak-chart-3': 'var(--color-ak-chart-3)',
141
+ 'ak-chart-4': 'var(--color-ak-chart-4)',
142
+ 'ak-chart-5': 'var(--color-ak-chart-5)',
143
+ 'ak-chart-6': 'var(--color-ak-chart-6)',
144
+
145
+ // Neobrutalist
146
+ 'ak-brutal-ink': 'var(--color-ak-brutal-ink)',
147
+ 'ak-brutal-face': 'var(--color-ak-brutal-face)',
148
+ 'ak-brutal-face-dark': 'var(--color-ak-brutal-face-dark)',
149
+ 'ak-brutal-on-face': 'var(--color-ak-brutal-on-face)',
150
+ 'ak-brutal-on-face-dark': 'var(--color-ak-brutal-on-face-dark)',
151
+ },
152
+
153
+ /* ── Spacing ──
154
+ p-ak-2, m-ak-3, gap-ak-1, etc.
155
+ In v3, spacing doesn't auto-feed into w-/h-/min-w-/min-h-/max-w-
156
+ so we also spread AK_SPACING into those configs below. */
157
+ spacing: {
158
+ ...AK_SPACING,
159
+ // Fluid spacing
160
+ 'ak-fl-3xs': 'clamp(0.25rem, 0.21rem + 0.14vw, 0.375rem)',
161
+ 'ak-fl-2xs': 'clamp(0.5rem, 0.43rem + 0.28vw, 0.75rem)',
162
+ 'ak-fl-xs': 'clamp(0.75rem, 0.65rem + 0.42vw, 1rem)',
163
+ 'ak-fl-sm': 'clamp(1rem, 0.86rem + 0.56vw, 1.5rem)',
164
+ 'ak-fl-md': 'clamp(1.5rem, 1.29rem + 0.83vw, 2rem)',
165
+ 'ak-fl-lg': 'clamp(2rem, 1.72rem + 1.11vw, 3rem)',
166
+ 'ak-fl-xl': 'clamp(3rem, 2.5rem + 1.85vw, 4.5rem)',
167
+ 'ak-fl-2xl': 'clamp(4rem, 3.22rem + 2.78vw, 6rem)',
168
+ 'ak-fl-3xl': 'clamp(6rem, 4.86rem + 4.17vw, 9rem)',
169
+ // Fluid space pairs
170
+ 'ak-fl-xs-md': 'clamp(0.75rem, 0.43rem + 1.39vw, 2rem)',
171
+ 'ak-fl-xs-lg': 'clamp(0.75rem, 0.14rem + 2.78vw, 3rem)',
172
+ 'ak-fl-sm-lg': 'clamp(1rem, 0.43rem + 2.78vw, 3rem)',
173
+ 'ak-fl-sm-xl': 'clamp(1rem, 0rem + 4.17vw, 4.5rem)',
174
+ 'ak-fl-md-xl': 'clamp(1.5rem, 0.57rem + 3.47vw, 4.5rem)',
175
+ 'ak-fl-md-2xl': 'clamp(1.5rem, 0rem + 5.56vw, 6rem)',
176
+ 'ak-fl-lg-2xl': 'clamp(2rem, 0.57rem + 5.56vw, 6rem)',
177
+ 'ak-fl-xl-3xl': 'clamp(3rem, 0.57rem + 8.33vw, 9rem)',
178
+ 'ak-fl-page-margin': 'var(--spacing-ak-fl-page-margin)',
179
+ },
180
+
181
+ /* ── Font Family ── */
182
+ fontFamily: {
183
+ 'ak-sans': ['DM Sans', 'system-ui', '-apple-system', 'sans-serif'],
184
+ 'ak-serif': ['DM Serif Display', 'Georgia', 'serif'],
185
+ 'ak-mono': ['JetBrains Mono', 'Fira Code', 'ui-monospace', 'monospace'],
186
+ },
187
+
188
+ /* ── Font Size ──
189
+ text-ak-base, text-ak-lg, text-ak-fl-2xl, etc. */
190
+ fontSize: {
191
+ // Static scale
192
+ 'ak-2xs': 'var(--text-ak-2xs)',
193
+ 'ak-xs': 'var(--text-ak-xs)',
194
+ 'ak-sm': 'var(--text-ak-sm)',
195
+ 'ak-base': 'var(--text-ak-base)',
196
+ 'ak-lg': 'var(--text-ak-lg)',
197
+ 'ak-xl': 'var(--text-ak-xl)',
198
+ 'ak-2xl': 'var(--text-ak-2xl)',
199
+ 'ak-3xl': 'var(--text-ak-3xl)',
200
+ 'ak-4xl': 'var(--text-ak-4xl)',
201
+ 'ak-5xl': 'var(--text-ak-5xl)',
202
+ 'ak-6xl': 'var(--text-ak-6xl)',
203
+ 'ak-7xl': 'var(--text-ak-7xl)',
204
+ 'ak-8xl': 'var(--text-ak-8xl)',
205
+ 'ak-9xl': 'var(--text-ak-9xl)',
206
+ // Fluid scale
207
+ 'ak-fl-xs': 'clamp(0.6875rem, 0.67rem + 0.06vw, 0.75rem)',
208
+ 'ak-fl-sm': 'clamp(0.75rem, 0.71rem + 0.12vw, 0.875rem)',
209
+ 'ak-fl-base': 'clamp(0.875rem, 0.84rem + 0.12vw, 1rem)',
210
+ 'ak-fl-lg': 'clamp(1rem, 0.96rem + 0.12vw, 1.125rem)',
211
+ 'ak-fl-xl': 'clamp(1.125rem, 1.09rem + 0.12vw, 1.25rem)',
212
+ 'ak-fl-2xl': 'clamp(1.25rem, 1.18rem + 0.23vw, 1.5rem)',
213
+ 'ak-fl-3xl': 'clamp(1.5rem, 1.39rem + 0.35vw, 1.875rem)',
214
+ 'ak-fl-4xl': 'clamp(1.875rem, 1.76rem + 0.35vw, 2.25rem)',
215
+ 'ak-fl-5xl': 'clamp(2.25rem, 2.03rem + 0.69vw, 3rem)',
216
+ 'ak-fl-6xl': 'clamp(3rem, 2.78rem + 0.69vw, 3.75rem)',
217
+ 'ak-fl-7xl': 'clamp(3.5rem, 3.2rem + 0.93vw, 4.5rem)',
218
+ 'ak-fl-8xl': 'clamp(4.5rem, 4.06rem + 1.39vw, 6rem)',
219
+ 'ak-fl-9xl': 'clamp(5.25rem, 4.73rem + 1.62vw, 7rem)',
220
+ // Display scale
221
+ 'ak-display-xs': 'clamp(0.75rem, 0.7rem + 0.15vw, 0.875rem)',
222
+ 'ak-display-sm': 'clamp(0.875rem, 0.83rem + 0.19vw, 1rem)',
223
+ 'ak-display-base': 'clamp(1rem, 0.94rem + 0.28vw, 1.1875rem)',
224
+ 'ak-display-lg': 'clamp(1.125rem, 1.01rem + 0.52vw, 1.5rem)',
225
+ 'ak-display-xl': 'clamp(1.25rem, 1.07rem + 0.83vw, 1.875rem)',
226
+ 'ak-display-2xl': 'clamp(1.5rem, 1.2rem + 1.11vw, 2.25rem)',
227
+ 'ak-display-3xl': 'clamp(1.875rem, 1.42rem + 1.67vw, 3rem)',
228
+ 'ak-display-4xl': 'clamp(2.25rem, 1.58rem + 2.5vw, 3.75rem)',
229
+ 'ak-display-5xl': 'clamp(3rem, 2.07rem + 3.47vw, 5.25rem)',
230
+ 'ak-display-6xl': 'clamp(3.75rem, 2.5rem + 4.63vw, 7rem)',
231
+ 'ak-display-7xl': 'clamp(4.5rem, 3.06rem + 5.56vw, 8rem)',
232
+ 'ak-display-8xl': 'clamp(5rem, 3.06rem + 6.94vw, 9rem)',
233
+ 'ak-display-9xl': 'clamp(5.5rem, 3.06rem + 7.64vw, 10rem)',
234
+ },
235
+
236
+ /* ── Line Height ── */
237
+ lineHeight: {
238
+ 'ak-display': 'var(--leading-ak-display)',
239
+ 'ak-tighter': 'var(--leading-ak-tighter)',
240
+ 'ak-none': 'var(--leading-ak-none)',
241
+ 'ak-tight': 'var(--leading-ak-tight)',
242
+ 'ak-snug': 'var(--leading-ak-snug)',
243
+ 'ak-normal': 'var(--leading-ak-normal)',
244
+ 'ak-relaxed': 'var(--leading-ak-relaxed)',
245
+ 'ak-prose': 'var(--leading-ak-prose)',
246
+ 'ak-loose': 'var(--leading-ak-loose)',
247
+ },
248
+
249
+ /* ── Letter Spacing ── */
250
+ letterSpacing: {
251
+ 'ak-tighter': 'var(--tracking-ak-tighter)',
252
+ 'ak-tight': 'var(--tracking-ak-tight)',
253
+ 'ak-subtle': 'var(--tracking-ak-subtle)',
254
+ 'ak-normal': 'var(--tracking-ak-normal)',
255
+ 'ak-wide': 'var(--tracking-ak-wide)',
256
+ 'ak-wider': 'var(--tracking-ak-wider)',
257
+ 'ak-widest': 'var(--tracking-ak-widest)',
258
+ 'ak-section': 'var(--tracking-ak-section)',
259
+ },
260
+
261
+ /* ── Border Radius ── */
262
+ borderRadius: {
263
+ 'ak-none': 'var(--radius-ak-none)',
264
+ 'ak-sm': 'var(--radius-ak-sm)',
265
+ 'ak-md': 'var(--radius-ak-md)',
266
+ 'ak-lg': 'var(--radius-ak-lg)',
267
+ 'ak-xl': 'var(--radius-ak-xl)',
268
+ 'ak-2xl': 'var(--radius-ak-2xl)',
269
+ 'ak-3xl': 'var(--radius-ak-3xl)',
270
+ 'ak-full': 'var(--radius-ak-full)',
271
+ 'ak-input': 'var(--radius-ak-input)',
272
+ // Neobrutalist
273
+ 'ak-brutal': 'var(--radius-ak-brutal)',
274
+ 'ak-brutal-sm': 'var(--radius-ak-brutal-sm)',
275
+ },
276
+
277
+ /* ── Border Width ── */
278
+ borderWidth: {
279
+ 'ak-brutal': 'var(--border-ak-brutal)',
280
+ 'ak-brutal-lg': 'var(--border-ak-brutal-lg)',
281
+ },
282
+
283
+ /* ── Box Shadow ── */
284
+ boxShadow: {
285
+ 'ak-xs': 'var(--shadow-ak-xs)',
286
+ 'ak-sm': 'var(--shadow-ak-sm)',
287
+ 'ak-md': 'var(--shadow-ak-md)',
288
+ 'ak-lg': 'var(--shadow-ak-lg)',
289
+ 'ak-xl': 'var(--shadow-ak-xl)',
290
+ 'ak-2xl': 'var(--shadow-ak-2xl)',
291
+ 'ak-focus': 'var(--shadow-ak-focus)',
292
+ 'ak-focus-primary': 'var(--shadow-ak-focus-primary)',
293
+ 'ak-focus-danger': 'var(--shadow-ak-focus-danger)',
294
+ 'ak-focus-success': 'var(--shadow-ak-focus-success)',
295
+ // Neobrutalist
296
+ 'ak-brutal-xs': 'var(--shadow-ak-brutal-xs)',
297
+ 'ak-brutal-sm': 'var(--shadow-ak-brutal-sm)',
298
+ 'ak-brutal': 'var(--shadow-ak-brutal)',
299
+ 'ak-brutal-lg': 'var(--shadow-ak-brutal-lg)',
300
+ 'ak-brutal-xl': 'var(--shadow-ak-brutal-xl)',
301
+ 'ak-brutal-none': '0 0 0 0 #000',
302
+ },
303
+
304
+ /* ── Max Width (containers) ── */
305
+ maxWidth: {
306
+ 'ak-page': 'var(--container-ak-page)',
307
+ 'ak-xs': 'var(--container-ak-xs)',
308
+ 'ak-sm': 'var(--container-ak-sm)',
309
+ 'ak-md': 'var(--container-ak-md)',
310
+ 'ak-lg': 'var(--container-ak-lg)',
311
+ 'ak-xl': 'var(--container-ak-xl)',
312
+ 'ak-2xl': 'var(--container-ak-2xl)',
313
+ 'ak-3xl': 'var(--container-ak-3xl)',
314
+ 'ak-4xl': 'var(--container-ak-4xl)',
315
+ 'ak-prose': 'var(--container-ak-prose)',
316
+ },
317
+
318
+ /* ── Z-Index (Chakra-inspired scale) ── */
319
+ zIndex: {
320
+ 'ak-base': 'var(--z-ak-base)',
321
+ 'ak-docked': 'var(--z-ak-docked)',
322
+ 'ak-dropdown': 'var(--z-ak-dropdown)',
323
+ 'ak-sticky': 'var(--z-ak-sticky)',
324
+ 'ak-banner': 'var(--z-ak-banner)',
325
+ 'ak-overlay': 'var(--z-ak-overlay)',
326
+ 'ak-modal': 'var(--z-ak-modal)',
327
+ 'ak-popover': 'var(--z-ak-popover)',
328
+ 'ak-toast': 'var(--z-ak-toast)',
329
+ 'ak-tooltip': 'var(--z-ak-tooltip)',
330
+ },
331
+
332
+ /* ── Height ── (spacing + named heights) */
333
+ height: {
334
+ ...AK_SPACING,
335
+ 'ak-nav': 'var(--height-ak-nav)',
336
+ 'ak-touch': 'var(--height-ak-touch)',
337
+ 'ak-control-sm': 'var(--height-ak-control-sm)',
338
+ 'ak-control-md': 'var(--height-ak-control-md)',
339
+ 'ak-control-lg': 'var(--height-ak-control-lg)',
340
+ 'ak-control-xl': 'var(--height-ak-control-xl)',
341
+ 'ak-row-compact': 'var(--height-ak-row-compact)',
342
+ 'ak-row-default': 'var(--height-ak-row-default)',
343
+ 'ak-row-comfortable': 'var(--height-ak-row-comfortable)',
344
+ },
345
+
346
+ /* ── Min Height ── */
347
+ minHeight: {
348
+ ...AK_SPACING,
349
+ 'ak-nav': 'var(--height-ak-nav)',
350
+ 'ak-touch': 'var(--height-ak-touch)',
351
+ 'ak-touch-min': 'var(--size-ak-touch-min)',
352
+ 'ak-control-sm': 'var(--height-ak-control-sm)',
353
+ 'ak-control-md': 'var(--height-ak-control-md)',
354
+ 'ak-control-lg': 'var(--height-ak-control-lg)',
355
+ 'ak-control-xl': 'var(--height-ak-control-xl)',
356
+ 'ak-row-compact': 'var(--height-ak-row-compact)',
357
+ 'ak-row-default': 'var(--height-ak-row-default)',
358
+ 'ak-row-comfortable': 'var(--height-ak-row-comfortable)',
359
+ },
360
+
361
+ /* ── Width ── */
362
+ width: {
363
+ ...AK_SPACING,
364
+ 'ak-touch': 'var(--width-ak-touch)',
365
+ 'ak-panel-width': 'var(--size-ak-panel-width)',
366
+ 'ak-sidebar-collapsed': 'var(--width-ak-sidebar-collapsed)',
367
+ 'ak-sidebar-expanded': 'var(--width-ak-sidebar-expanded)',
368
+ },
369
+
370
+ /* ── Min Width ── */
371
+ minWidth: {
372
+ ...AK_SPACING,
373
+ 'ak-touch': 'var(--width-ak-touch)',
374
+ 'ak-panel-width': 'var(--size-ak-panel-width)',
375
+ 'ak-sidebar-collapsed': 'var(--width-ak-sidebar-collapsed)',
376
+ },
377
+
378
+ /* ── Size (width + height shorthand) ── */
379
+ size: {
380
+ ...AK_SPACING,
381
+ 'ak-icon-xs': 'var(--size-ak-icon-xs)',
382
+ 'ak-icon-sm': 'var(--size-ak-icon-sm)',
383
+ 'ak-icon-md': 'var(--size-ak-icon-md)',
384
+ 'ak-icon-lg': 'var(--size-ak-icon-lg)',
385
+ 'ak-icon-xl': 'var(--size-ak-icon-xl)',
386
+ 'ak-icon-2xl': 'var(--size-ak-icon-2xl)',
387
+ 'ak-icon-3xl': 'var(--size-ak-icon-3xl)',
388
+ 'ak-avatar-sm': 'var(--size-ak-avatar-sm)',
389
+ 'ak-avatar-md': 'var(--size-ak-avatar-md)',
390
+ 'ak-avatar-lg': 'var(--size-ak-avatar-lg)',
391
+ 'ak-avatar-xl': 'var(--size-ak-avatar-xl)',
392
+ 'ak-avatar-2xl': 'var(--size-ak-avatar-2xl)',
393
+ 'ak-avatar-3xl': 'var(--size-ak-avatar-3xl)',
394
+ 'ak-touch': 'var(--width-ak-touch)',
395
+ 'ak-touch-min': 'var(--size-ak-touch-min)',
396
+ },
397
+
398
+ /* ── Transition Duration ── */
399
+ transitionDuration: {
400
+ 'ak-fast': 'var(--duration-ak-fast)',
401
+ 'ak-base': 'var(--duration-ak-base)',
402
+ 'ak-slow': 'var(--duration-ak-slow)',
403
+ },
404
+
405
+ /* ── Transition Timing Function ── */
406
+ transitionTimingFunction: {
407
+ 'ak-default': 'var(--ease-ak-default)',
408
+ 'ak-in': 'var(--ease-ak-in)',
409
+ 'ak-out': 'var(--ease-ak-out)',
410
+ 'ak-spring': 'var(--ease-ak-spring)',
411
+ 'ak-bounce': 'var(--ease-ak-bounce)',
412
+ },
413
+ },
414
+ },
415
+ }
416
+ )