@evolve.ui/theme-system 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{allThemes-CFS_9-tk.cjs → allThemes-3d8nhymo.cjs} +12 -2
- package/allThemes-3d8nhymo.cjs.map +1 -0
- package/{allThemes-OV-ayn4C.mjs → allThemes-Abn6KDm7.mjs} +7 -3
- package/allThemes-Abn6KDm7.mjs.map +1 -0
- package/allThemes.cjs +1 -1
- package/allThemes.d.cts +1 -0
- package/allThemes.d.cts.map +1 -1
- package/allThemes.d.mts +1 -0
- package/allThemes.d.mts.map +1 -1
- package/allThemes.mjs +1 -1
- package/brands-CE0wIkKX.d.cts +58 -0
- package/brands-CE0wIkKX.d.cts.map +1 -0
- package/brands-CE0wIkKX.d.mts +58 -0
- package/brands-CE0wIkKX.d.mts.map +1 -0
- package/brands.cjs +16 -13
- package/brands.cjs.map +1 -1
- package/brands.d.cts +2 -2
- package/brands.d.mts +2 -2
- package/brands.mjs +16 -13
- package/brands.mjs.map +1 -1
- package/css/EverydayHarbor.css +377 -0
- package/css/EverydayHarbor.effects.css +650 -0
- package/{default-b-tgfyxR.cjs → default-B6VWF0Js.cjs} +237 -36
- package/default-B6VWF0Js.cjs.map +1 -0
- package/{default-B2n4PnsJ.mjs → default-BogJDhKE.mjs} +238 -37
- package/default-BogJDhKE.mjs.map +1 -0
- package/effects.cjs +26 -0
- package/effects.cjs.map +1 -0
- package/effects.d.cts +22 -0
- package/effects.d.cts.map +1 -0
- package/effects.d.mts +22 -0
- package/effects.d.mts.map +1 -0
- package/effects.mjs +22 -0
- package/effects.mjs.map +1 -0
- package/evolve-ui.entries.json +5 -0
- package/index.cjs +12 -5
- package/index.cjs.map +1 -1
- package/index.d.cts +108 -4
- package/index.d.cts.map +1 -1
- package/index.d.mts +108 -4
- package/index.d.mts.map +1 -1
- package/index.mjs +9 -6
- package/index.mjs.map +1 -1
- package/package.json +5 -1
- package/{plugin-DPtvp4lp.cjs → plugin-B3PF4RMI.cjs} +299 -110
- package/plugin-B3PF4RMI.cjs.map +1 -0
- package/{plugin-D4eCyUJe.mjs → plugin-D6aLCeNB.mjs} +258 -111
- package/plugin-D6aLCeNB.mjs.map +1 -0
- package/src/effects/__fixtures__/fixtureLayer.ts +88 -0
- package/src/effects/brands/EverydayHarbor.ts +392 -0
- package/src/effects/classes.ts +19 -0
- package/src/effects/emit.ts +314 -0
- package/src/effects/hooks.ts +493 -0
- package/src/effects/index.ts +2 -0
- package/src/effects/layers.ts +18 -0
- package/src/effects/rules.ts +90 -0
- package/src/effects/rules.typecheck.ts +50 -0
- package/src/effects/tokens.ts +148 -0
- package/src/effects/validate.ts +683 -0
- package/src/effects/vocabulary.ts +32 -0
- package/src/index.ts +3 -0
- package/src/tailwind/animation.ts +30 -0
- package/src/tailwind/borderWidth.ts +14 -0
- package/src/tailwind/plugin.ts +230 -239
- package/src/tailwind/reducedMotion.ts +164 -0
- package/src/tailwind/text.ts +4 -2
- package/src/themeValues.snapshot.ts +6735 -0
- package/src/themes/EverydayHarbor.ts +147 -0
- package/src/themes/allThemes.ts +2 -0
- package/src/themes/brandSources.ts +37 -0
- package/src/themes/brands.ts +41 -15
- package/src/themes/contrastFloors.ts +26 -0
- package/src/themes/inkRamps.ts +43 -0
- package/src/themes/runtime/buildTheme.ts +6 -19
- package/src/themes/runtime/everydayHarbor.ts +3 -0
- package/src/themes/semanticColorTokenSteps.ts +5 -2
- package/src/themes/themeValues.ts +374 -0
- package/src/themes/wcag.ts +48 -0
- package/tailwind/plugin.cjs +5 -1
- package/tailwind/plugin.d.cts +458 -1
- package/tailwind/plugin.d.cts.map +1 -1
- package/tailwind/plugin.d.mts +458 -1
- package/tailwind/plugin.d.mts.map +1 -1
- package/tailwind/plugin.mjs +2 -2
- package/themes/runtime/default.cjs +1 -1
- package/themes/runtime/default.mjs +1 -1
- package/themes/themeType.d.cts +1 -1
- package/themes/themeType.d.mts +1 -1
- package/allThemes-CFS_9-tk.cjs.map +0 -1
- package/allThemes-OV-ayn4C.mjs.map +0 -1
- package/brands-n30rolHQ.d.cts +0 -33
- package/brands-n30rolHQ.d.cts.map +0 -1
- package/brands-n30rolHQ.d.mts +0 -33
- package/brands-n30rolHQ.d.mts.map +0 -1
- package/default-B2n4PnsJ.mjs.map +0 -1
- package/default-b-tgfyxR.cjs.map +0 -1
- package/plugin-D4eCyUJe.mjs.map +0 -1
- package/plugin-DPtvp4lp.cjs.map +0 -1
- package/src/themes/generate.ts +0 -46
|
@@ -2,6 +2,52 @@ const require_fontFamily = require("./fontFamily-BBoee6cS.cjs");
|
|
|
2
2
|
const require_spacing = require("./spacing-B2mhXYOl.cjs");
|
|
3
3
|
let tailwindcss_plugin_js = require("tailwindcss/plugin.js");
|
|
4
4
|
tailwindcss_plugin_js = require_fontFamily.__toESM(tailwindcss_plugin_js);
|
|
5
|
+
//#region src/tailwind/animation.ts
|
|
6
|
+
/**
|
|
7
|
+
* Animation registry for the theme system
|
|
8
|
+
*
|
|
9
|
+
* The `animate-*` utilities this library registers, extracted from `plugin.ts` so the
|
|
10
|
+
* reduced-motion policy can be checked against them (see `./reducedMotion`). These sit under
|
|
11
|
+
* `theme.extend`, so Tailwind's own defaults (`spin`, `ping`, `pulse`, `bounce`, `none`) survive
|
|
12
|
+
* alongside them — the resolved registry is this object layered over `defaultTheme.animation`,
|
|
13
|
+
* and the policy must cover both.
|
|
14
|
+
*
|
|
15
|
+
* Keyframes stay in `plugin.ts` next to the `addBase` block that emits some of them.
|
|
16
|
+
*/
|
|
17
|
+
const animation = {
|
|
18
|
+
fadeIn: "fadeIn .2s ease-in-out",
|
|
19
|
+
fadeInOpacity: "fadeInOpacity 0.5s ease-in-out",
|
|
20
|
+
fadeInScaled: "fadeInScaled .2s ease-in",
|
|
21
|
+
fadeOut: "fadeOut .2s ease-in-out",
|
|
22
|
+
loading: "loading 1.4s infinite ease-in-out",
|
|
23
|
+
"progress-completion": "shrink 0.15s ease-in-out both, grow 0.15s ease-in-out 0.15s both",
|
|
24
|
+
"progress-icon-fade-in": "fadeInOpacity 0.15s ease-in-out 0.15s both",
|
|
25
|
+
"progress-wave": "progressWave 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, progressWaveRotate 1568ms linear infinite both",
|
|
26
|
+
saveButtonPulse: "saveButtonPulse 500ms cubic-bezier(0.34, 1.56, 0.64, 1)",
|
|
27
|
+
saveButtonWiggle: "saveButtonWiggle 500ms ease-in-out",
|
|
28
|
+
saveHeartColorFlash: "saveHeartColorFlash 500ms cubic-bezier(0.45, 0, 0.55, 1)",
|
|
29
|
+
saveHeartPop: "saveHeartPop 480ms cubic-bezier(0.34, 1.56, 0.64, 1)",
|
|
30
|
+
saveHeartTwirlBloom: "saveHeartTwirlBloom 500ms cubic-bezier(0.45, 0, 0.55, 1)",
|
|
31
|
+
saveLabelShimmer: "saveLabelShimmer 500ms ease-in-out",
|
|
32
|
+
slideDown: "slideDown 0.3s ease-in forwards",
|
|
33
|
+
slideUp: "slideUp 0.3s ease-out forwards"
|
|
34
|
+
};
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/tailwind/borderWidth.ts
|
|
37
|
+
/**
|
|
38
|
+
* Border width scale the theme ships.
|
|
39
|
+
*
|
|
40
|
+
* These match the widths Tailwind uses when a plugin does not replace `borderWidth`.
|
|
41
|
+
* They sit on the theme object so the value snapshot locks the same scale.
|
|
42
|
+
*/
|
|
43
|
+
const borderWidth = {
|
|
44
|
+
DEFAULT: "1px",
|
|
45
|
+
0: "0px",
|
|
46
|
+
2: "2px",
|
|
47
|
+
4: "4px",
|
|
48
|
+
8: "8px"
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
5
51
|
//#region src/tailwind/colors.ts
|
|
6
52
|
/**
|
|
7
53
|
* Color configuration for Tailwind CSS
|
|
@@ -191,6 +237,120 @@ const colors = {
|
|
|
191
237
|
}
|
|
192
238
|
};
|
|
193
239
|
//#endregion
|
|
240
|
+
//#region src/tailwind/reducedMotion.ts
|
|
241
|
+
const REDUCED_MOTION_POLICY = {
|
|
242
|
+
fadeIn: {
|
|
243
|
+
reason: "Opacity only, but collapsed alongside fadeInScaled so a modal opens the same way in both variants (ComposableModal picks between them on hasContentPager).",
|
|
244
|
+
tier: "instant"
|
|
245
|
+
},
|
|
246
|
+
fadeInOpacity: {
|
|
247
|
+
reason: "Opacity and visibility only; collapsing a fade is not a motion regression.",
|
|
248
|
+
tier: "instant"
|
|
249
|
+
},
|
|
250
|
+
fadeInScaled: {
|
|
251
|
+
reason: "Scales 0.7 to 1.",
|
|
252
|
+
tier: "instant"
|
|
253
|
+
},
|
|
254
|
+
fadeOut: {
|
|
255
|
+
reason: "Scales 1 to 0.7. Modal close depends on its animationend, so it is collapsed rather than removed.",
|
|
256
|
+
tier: "instant"
|
|
257
|
+
},
|
|
258
|
+
loading: {
|
|
259
|
+
reason: "Infinite indeterminate loading indicator (LoadingDot). Collapsing it removes the only signal that work is in progress.",
|
|
260
|
+
tier: "retain"
|
|
261
|
+
},
|
|
262
|
+
"progress-completion": {
|
|
263
|
+
reason: "Scales. Zeroing the delay matters here: the composite is \"shrink 0.15s both, grow 0.15s ease-in-out 0.15s both\", so a duration-only collapse would hold the ring at scale(0.5) for 150ms and then snap.",
|
|
264
|
+
tier: "instant"
|
|
265
|
+
},
|
|
266
|
+
"progress-icon-fade-in": {
|
|
267
|
+
reason: "Opacity only, but its 0.15s delay sequences it after progress-completion. Retaining it would leave a completed ProgressCircle ring with an empty centre for 150ms.",
|
|
268
|
+
tier: "instant"
|
|
269
|
+
},
|
|
270
|
+
"progress-wave": {
|
|
271
|
+
reason: "Infinite indeterminate progress indicator (ProgressCircle). Same essential-feedback rationale as loading.",
|
|
272
|
+
tier: "retain"
|
|
273
|
+
},
|
|
274
|
+
saveButtonPulse: {
|
|
275
|
+
reason: "Scales.",
|
|
276
|
+
tier: "instant"
|
|
277
|
+
},
|
|
278
|
+
saveButtonWiggle: {
|
|
279
|
+
reason: "Rotates and scales.",
|
|
280
|
+
tier: "instant"
|
|
281
|
+
},
|
|
282
|
+
saveHeartColorFlash: {
|
|
283
|
+
reason: "Animates fill only, but it was already gated before DS-95 and must stay gated. Shipped via .hui-fb-color-flash, not the animate-* utility (which has no call sites), so it needs the explicit selector below.",
|
|
284
|
+
selectors: [".hui-fb-color-flash .hui-fb-icon-frame svg path"],
|
|
285
|
+
tier: "instant"
|
|
286
|
+
},
|
|
287
|
+
saveHeartPop: {
|
|
288
|
+
reason: "Scales.",
|
|
289
|
+
tier: "instant"
|
|
290
|
+
},
|
|
291
|
+
saveHeartTwirlBloom: {
|
|
292
|
+
reason: "Rotates 180 degrees at 1.15x scale.",
|
|
293
|
+
tier: "instant"
|
|
294
|
+
},
|
|
295
|
+
saveLabelShimmer: {
|
|
296
|
+
reason: "Animates background-position. The .hui-fb-shimmer paint block in plugin.ts separately drops the gradient under reduce so the label stays legible.",
|
|
297
|
+
tier: "instant"
|
|
298
|
+
},
|
|
299
|
+
slideDown: {
|
|
300
|
+
reason: "Translates on Y. Collapsed rather than removed so CookieConsent still receives animationend.",
|
|
301
|
+
tier: "instant"
|
|
302
|
+
},
|
|
303
|
+
slideUp: {
|
|
304
|
+
reason: "Translates on Y. Same animationend rationale as slideDown.",
|
|
305
|
+
tier: "instant"
|
|
306
|
+
},
|
|
307
|
+
bounce: {
|
|
308
|
+
reason: "Translates on Y.",
|
|
309
|
+
tier: "instant"
|
|
310
|
+
},
|
|
311
|
+
none: {
|
|
312
|
+
reason: "Not an animation — animate-none is the absence utility.",
|
|
313
|
+
tier: "n/a"
|
|
314
|
+
},
|
|
315
|
+
ping: {
|
|
316
|
+
reason: "Scales and fades. No in-repo call site, but consumers can use it.",
|
|
317
|
+
tier: "instant"
|
|
318
|
+
},
|
|
319
|
+
pulse: {
|
|
320
|
+
reason: "Infinite, but opacity only — the conventional skeleton-loading indicator. Retained as essential feedback with no motion component.",
|
|
321
|
+
tier: "retain"
|
|
322
|
+
},
|
|
323
|
+
spin: {
|
|
324
|
+
reason: "Infinite indeterminate spinner (LoadingSpinner, ProgressCircle). A Tailwind default rather than a local entry, which is exactly why the policy is keyed on the resolved registry.",
|
|
325
|
+
tier: "retain"
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
const REDUCE_QUERY = "@media (prefers-reduced-motion: reduce)";
|
|
329
|
+
const COLLAPSED_DECLARATIONS = {
|
|
330
|
+
"animation-delay": "0ms !important",
|
|
331
|
+
"animation-duration": "1ms !important",
|
|
332
|
+
"animation-iteration-count": "1 !important"
|
|
333
|
+
};
|
|
334
|
+
/**
|
|
335
|
+
* Builds the `@media (prefers-reduced-motion: reduce)` block for `addBase`.
|
|
336
|
+
*
|
|
337
|
+
* Emitted from `addBase` rather than `addComponents` deliberately: `addComponents` is subject to
|
|
338
|
+
* caching discrepancies in this monorepo's Storybook build that stop newly added rules landing.
|
|
339
|
+
*/
|
|
340
|
+
const buildReducedMotionBase = () => {
|
|
341
|
+
const rules = {};
|
|
342
|
+
const addRule = (selector) => {
|
|
343
|
+
if (rules[selector]) throw new Error(`Duplicate reduced-motion selector: ${selector}`);
|
|
344
|
+
rules[selector] = { ...COLLAPSED_DECLARATIONS };
|
|
345
|
+
};
|
|
346
|
+
Object.entries(REDUCED_MOTION_POLICY).forEach(([key, entry]) => {
|
|
347
|
+
if (entry.tier !== "instant") return;
|
|
348
|
+
addRule(`.animate-${key}.animate-${key}`);
|
|
349
|
+
entry.selectors?.forEach(addRule);
|
|
350
|
+
});
|
|
351
|
+
return { [REDUCE_QUERY]: rules };
|
|
352
|
+
};
|
|
353
|
+
//#endregion
|
|
194
354
|
//#region src/tailwind/text.ts
|
|
195
355
|
const textComponents = {
|
|
196
356
|
".hui-link-md": {
|
|
@@ -266,9 +426,9 @@ const textComponents = {
|
|
|
266
426
|
letterSpacing: require_spacing.wrapVar(require_spacing.letterSpacingH3),
|
|
267
427
|
lineHeight: "30px",
|
|
268
428
|
[`@media (width < ${require_spacing.screens.smMax.max})`]: {
|
|
269
|
-
fontSize: "
|
|
429
|
+
fontSize: "18px",
|
|
270
430
|
letterSpacing: require_spacing.wrapVar(require_spacing.letterSpacingH3Mobile),
|
|
271
|
-
lineHeight: "
|
|
431
|
+
lineHeight: "27px"
|
|
272
432
|
}
|
|
273
433
|
},
|
|
274
434
|
".hui-text-h4": {
|
|
@@ -345,109 +505,13 @@ const autofillStyles = {
|
|
|
345
505
|
"-webkit-box-shadow": "0 0 0 12px rgb(var(--color-background-primary)) inset !important",
|
|
346
506
|
"box-shadow": "0 0 0 12px rgb(var(--color-background-primary)) inset !important"
|
|
347
507
|
};
|
|
348
|
-
const
|
|
349
|
-
addComponents(textComponents);
|
|
350
|
-
addComponents({
|
|
351
|
-
".hui-autofill-transparent": {
|
|
352
|
-
"&:-webkit-autofill": autofillStyles,
|
|
353
|
-
"&:-webkit-autofill:active": autofillStyles,
|
|
354
|
-
"&:-webkit-autofill:focus": autofillStyles,
|
|
355
|
-
"&:-webkit-autofill:hover": autofillStyles
|
|
356
|
-
},
|
|
357
|
-
".hui-focus-visible-outline": { "@apply focus-visible:outline-focus-primary focus-visible:outline focus-visible:outline-4": {} },
|
|
358
|
-
".hui-focus-visible-outline-inverse": { "@apply focus-visible:outline-focus-inverse focus-visible:outline focus-visible:outline-4": {} },
|
|
359
|
-
".scrollbar-default": {
|
|
360
|
-
"&::-webkit-scrollbar": { display: "block" },
|
|
361
|
-
"-ms-overflow-style": "auto",
|
|
362
|
-
"scrollbar-width": "auto"
|
|
363
|
-
},
|
|
364
|
-
".scrollbar-hide": {
|
|
365
|
-
"&::-webkit-scrollbar": { display: "none" },
|
|
366
|
-
"-ms-overflow-style": "none",
|
|
367
|
-
"scrollbar-width": "none"
|
|
368
|
-
}
|
|
369
|
-
});
|
|
370
|
-
addBase({
|
|
371
|
-
"@keyframes saveButtonWiggle": {
|
|
372
|
-
"0%, 100%": { transform: "rotate(0deg) scale(1)" },
|
|
373
|
-
"10%": { transform: "rotate(-6deg) scale(1.03)" },
|
|
374
|
-
"25%": { transform: "rotate(5deg) scale(1.03)" },
|
|
375
|
-
"40%": { transform: "rotate(-4deg) scale(1.02)" },
|
|
376
|
-
"55%": { transform: "rotate(3deg) scale(1.02)" },
|
|
377
|
-
"70%": { transform: "rotate(-1.5deg) scale(1.01)" },
|
|
378
|
-
"85%": { transform: "rotate(0.5deg) scale(1)" }
|
|
379
|
-
},
|
|
380
|
-
"@keyframes saveHeartTwirlBloom": {
|
|
381
|
-
"0%": { transform: "rotateY(0deg) scale(1)" },
|
|
382
|
-
"50%": { transform: "rotateY(180deg) scale(1.35)" },
|
|
383
|
-
"100%": { transform: "rotateY(360deg) scale(1)" }
|
|
384
|
-
},
|
|
385
|
-
"@keyframes saveHeartColorFlash": {
|
|
386
|
-
"0%": { fill: "rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))" },
|
|
387
|
-
"40%": { fill: "rgb(var(--hui-save-color-critical-300, var(--color-critical-300)))" },
|
|
388
|
-
"60%": { fill: "rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))" },
|
|
389
|
-
"100%": { fill: "rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))" }
|
|
390
|
-
},
|
|
391
|
-
"@keyframes saveLabelShimmer": {
|
|
392
|
-
"0%": { backgroundPosition: "200% center" },
|
|
393
|
-
"100%": { backgroundPosition: "-200% center" }
|
|
394
|
-
},
|
|
395
|
-
"@keyframes saveButtonPulse": {
|
|
396
|
-
"0%": { transform: "scale(1)" },
|
|
397
|
-
"35%": { transform: "scale(1.08)" },
|
|
398
|
-
"65%": { transform: "scale(0.97)" },
|
|
399
|
-
"100%": { transform: "scale(1)" }
|
|
400
|
-
},
|
|
401
|
-
"@keyframes saveHeartPop": {
|
|
402
|
-
"0%": { transform: "scale(1)" },
|
|
403
|
-
"20%": { transform: "scale(0.6)" },
|
|
404
|
-
"60%": { transform: "scale(1.35)" },
|
|
405
|
-
"100%": { transform: "scale(1)" }
|
|
406
|
-
},
|
|
407
|
-
".hui-fb-shimmer": {
|
|
408
|
-
lineHeight: "normal",
|
|
409
|
-
backgroundImage: "linear-gradient(90deg, currentColor 0%, currentColor 20%, rgb(var(--hui-save-color-critical-200, var(--color-critical-200))) 33%, rgb(var(--hui-save-color-critical-500, var(--color-critical-500))) 50%, rgb(var(--hui-save-color-tertiary-400, var(--color-tertiary-400))) 67%, currentColor 80%, currentColor 100%)",
|
|
410
|
-
backgroundSize: "200% 100%",
|
|
411
|
-
backgroundClip: "text",
|
|
412
|
-
"-webkit-background-clip": "text",
|
|
413
|
-
"-webkit-text-fill-color": "transparent",
|
|
414
|
-
"@media (prefers-reduced-motion: reduce)": {
|
|
415
|
-
backgroundImage: "none !important",
|
|
416
|
-
"-webkit-text-fill-color": "currentColor !important"
|
|
417
|
-
}
|
|
418
|
-
},
|
|
419
|
-
".hui-fb-color-flash .hui-fb-icon-frame svg path": {
|
|
420
|
-
animation: "saveHeartColorFlash 1100ms cubic-bezier(0.45, 0, 0.55, 1) 1",
|
|
421
|
-
animationFillMode: "forwards"
|
|
422
|
-
},
|
|
423
|
-
"@media (prefers-reduced-motion: reduce)": { ".hui-fb-color-flash .hui-fb-icon-frame svg path": { animation: "none !important" } }
|
|
424
|
-
});
|
|
425
|
-
matchUtilities({ "grid-area": (value) => {
|
|
426
|
-
return { "grid-area": value };
|
|
427
|
-
} });
|
|
428
|
-
}, { theme: {
|
|
508
|
+
const tailwindTheme = {
|
|
429
509
|
borderRadius: require_spacing.borderRadius,
|
|
510
|
+
borderWidth,
|
|
430
511
|
boxShadow: require_fontFamily.boxShadow,
|
|
431
512
|
colors,
|
|
432
513
|
extend: {
|
|
433
|
-
animation
|
|
434
|
-
fadeIn: "fadeIn .2s ease-in-out",
|
|
435
|
-
fadeInOpacity: "fadeInOpacity 0.5s ease-in-out",
|
|
436
|
-
fadeInScaled: "fadeInScaled .2s ease-in",
|
|
437
|
-
fadeOut: "fadeOut .2s ease-in-out",
|
|
438
|
-
loading: "loading 1.4s infinite ease-in-out",
|
|
439
|
-
"progress-completion": "shrink 0.15s ease-in-out both, grow 0.15s ease-in-out 0.15s both",
|
|
440
|
-
"progress-icon-fade-in": "fadeInOpacity 0.15s ease-in-out 0.15s both",
|
|
441
|
-
"progress-wave": "progressWave 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, progressWaveRotate 1568ms linear infinite both",
|
|
442
|
-
saveButtonPulse: "saveButtonPulse 500ms cubic-bezier(0.34, 1.56, 0.64, 1)",
|
|
443
|
-
saveButtonWiggle: "saveButtonWiggle 1.3s cubic-bezier(0.36, 0, 0.66, -0.56)",
|
|
444
|
-
saveHeartColorFlash: "saveHeartColorFlash 1100ms cubic-bezier(0.45, 0, 0.55, 1)",
|
|
445
|
-
saveHeartPop: "saveHeartPop 480ms cubic-bezier(0.34, 1.56, 0.64, 1)",
|
|
446
|
-
saveHeartTwirlBloom: "saveHeartTwirlBloom 1100ms cubic-bezier(0.45, 0, 0.55, 1)",
|
|
447
|
-
saveLabelShimmer: "saveLabelShimmer 1100ms ease-in-out",
|
|
448
|
-
slideDown: "slideDown 0.3s ease-in forwards",
|
|
449
|
-
slideUp: "slideUp 0.3s ease-out forwards"
|
|
450
|
-
},
|
|
514
|
+
animation,
|
|
451
515
|
keyframes: {
|
|
452
516
|
fadeIn: {
|
|
453
517
|
from: { opacity: "0" },
|
|
@@ -517,11 +581,11 @@ const themePlugin = (0, tailwindcss_plugin_js.default)(({ addBase, addComponents
|
|
|
517
581
|
},
|
|
518
582
|
saveButtonWiggle: {
|
|
519
583
|
"0%, 100%": { transform: "rotate(0deg) scale(1)" },
|
|
520
|
-
"10%": { transform: "rotate(-
|
|
521
|
-
"25%": { transform: "rotate(5deg) scale(1.
|
|
522
|
-
"40%": { transform: "rotate(-
|
|
523
|
-
"55%": { transform: "rotate(
|
|
524
|
-
"70%": { transform: "rotate(-
|
|
584
|
+
"10%": { transform: "rotate(-4deg) scale(1.02)" },
|
|
585
|
+
"25%": { transform: "rotate(3.5deg) scale(1.02)" },
|
|
586
|
+
"40%": { transform: "rotate(-2.5deg) scale(1.015)" },
|
|
587
|
+
"55%": { transform: "rotate(2deg) scale(1.015)" },
|
|
588
|
+
"70%": { transform: "rotate(-1deg) scale(1.01)" },
|
|
525
589
|
"85%": { transform: "rotate(0.5deg) scale(1)" }
|
|
526
590
|
},
|
|
527
591
|
saveHeartColorFlash: {
|
|
@@ -538,8 +602,8 @@ const themePlugin = (0, tailwindcss_plugin_js.default)(({ addBase, addComponents
|
|
|
538
602
|
},
|
|
539
603
|
saveHeartTwirlBloom: {
|
|
540
604
|
"0%": { transform: "rotateY(0deg) scale(1)" },
|
|
541
|
-
"
|
|
542
|
-
"100%": { transform: "rotateY(
|
|
605
|
+
"30%": { transform: "rotateY(54deg) scale(1.15)" },
|
|
606
|
+
"100%": { transform: "rotateY(180deg) scale(1)" }
|
|
543
607
|
},
|
|
544
608
|
saveLabelShimmer: {
|
|
545
609
|
"0%": { backgroundPosition: "200% center" },
|
|
@@ -577,14 +641,139 @@ const themePlugin = (0, tailwindcss_plugin_js.default)(({ addBase, addComponents
|
|
|
577
641
|
},
|
|
578
642
|
fontFamily: require_fontFamily.fontFamily,
|
|
579
643
|
screens: require_spacing.screens
|
|
580
|
-
}
|
|
644
|
+
};
|
|
645
|
+
const pluginComponentStyles = {
|
|
646
|
+
".hui-autofill-transparent": {
|
|
647
|
+
"&:-webkit-autofill": autofillStyles,
|
|
648
|
+
"&:-webkit-autofill:active": autofillStyles,
|
|
649
|
+
"&:-webkit-autofill:focus": autofillStyles,
|
|
650
|
+
"&:-webkit-autofill:hover": autofillStyles
|
|
651
|
+
},
|
|
652
|
+
".hui-focus-visible-outline": { "@apply focus-visible:outline-focus-primary focus-visible:outline focus-visible:outline-4": {} },
|
|
653
|
+
".hui-focus-visible-outline-inverse": { "@apply focus-visible:outline-focus-inverse focus-visible:outline focus-visible:outline-4": {} },
|
|
654
|
+
".scrollbar-default": {
|
|
655
|
+
"&::-webkit-scrollbar": { display: "block" },
|
|
656
|
+
"-ms-overflow-style": "auto",
|
|
657
|
+
"scrollbar-width": "auto"
|
|
658
|
+
},
|
|
659
|
+
".scrollbar-hide": {
|
|
660
|
+
"&::-webkit-scrollbar": { display: "none" },
|
|
661
|
+
"-ms-overflow-style": "none",
|
|
662
|
+
"scrollbar-width": "none"
|
|
663
|
+
}
|
|
664
|
+
};
|
|
665
|
+
const pluginBaseStyles = {
|
|
666
|
+
"@keyframes saveButtonWiggle": {
|
|
667
|
+
"0%, 100%": { transform: "rotate(0deg) scale(1)" },
|
|
668
|
+
"10%": { transform: "rotate(-4deg) scale(1.02)" },
|
|
669
|
+
"25%": { transform: "rotate(3.5deg) scale(1.02)" },
|
|
670
|
+
"40%": { transform: "rotate(-2.5deg) scale(1.015)" },
|
|
671
|
+
"55%": { transform: "rotate(2deg) scale(1.015)" },
|
|
672
|
+
"70%": { transform: "rotate(-1deg) scale(1.01)" },
|
|
673
|
+
"85%": { transform: "rotate(0.5deg) scale(1)" }
|
|
674
|
+
},
|
|
675
|
+
"@keyframes saveHeartTwirlBloom": {
|
|
676
|
+
"0%": { transform: "rotateY(0deg) scale(1)" },
|
|
677
|
+
"30%": { transform: "rotateY(54deg) scale(1.15)" },
|
|
678
|
+
"100%": { transform: "rotateY(180deg) scale(1)" }
|
|
679
|
+
},
|
|
680
|
+
"@keyframes saveHeartColorFlash": {
|
|
681
|
+
"0%": { fill: "rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))" },
|
|
682
|
+
"40%": { fill: "rgb(var(--hui-save-color-critical-300, var(--color-critical-300)))" },
|
|
683
|
+
"60%": { fill: "rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))" },
|
|
684
|
+
"100%": { fill: "rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))" }
|
|
685
|
+
},
|
|
686
|
+
"@keyframes saveLabelShimmer": {
|
|
687
|
+
"0%": { backgroundPosition: "200% center" },
|
|
688
|
+
"100%": { backgroundPosition: "-200% center" }
|
|
689
|
+
},
|
|
690
|
+
"@keyframes saveButtonPulse": {
|
|
691
|
+
"0%": { transform: "scale(1)" },
|
|
692
|
+
"35%": { transform: "scale(1.08)" },
|
|
693
|
+
"65%": { transform: "scale(0.97)" },
|
|
694
|
+
"100%": { transform: "scale(1)" }
|
|
695
|
+
},
|
|
696
|
+
"@keyframes saveHeartPop": {
|
|
697
|
+
"0%": { transform: "scale(1)" },
|
|
698
|
+
"20%": { transform: "scale(0.6)" },
|
|
699
|
+
"60%": { transform: "scale(1.35)" },
|
|
700
|
+
"100%": { transform: "scale(1)" }
|
|
701
|
+
},
|
|
702
|
+
".hui-fb-shimmer": {
|
|
703
|
+
lineHeight: "normal",
|
|
704
|
+
backgroundImage: "linear-gradient(90deg, currentColor 0%, currentColor 20%, rgb(var(--hui-save-color-critical-200, var(--color-critical-200))) 33%, rgb(var(--hui-save-color-critical-500, var(--color-critical-500))) 50%, rgb(var(--hui-save-color-tertiary-400, var(--color-tertiary-400))) 67%, currentColor 80%, currentColor 100%)",
|
|
705
|
+
backgroundSize: "200% 100%",
|
|
706
|
+
backgroundClip: "text",
|
|
707
|
+
"-webkit-background-clip": "text",
|
|
708
|
+
"-webkit-text-fill-color": "transparent",
|
|
709
|
+
"@media (prefers-reduced-motion: reduce)": {
|
|
710
|
+
backgroundImage: "none !important",
|
|
711
|
+
"-webkit-text-fill-color": "currentColor !important"
|
|
712
|
+
}
|
|
713
|
+
},
|
|
714
|
+
".hui-fb-color-flash .hui-fb-icon-frame svg path": {
|
|
715
|
+
animation: "saveHeartColorFlash 500ms cubic-bezier(0.45, 0, 0.55, 1) 1",
|
|
716
|
+
animationFillMode: "forwards"
|
|
717
|
+
},
|
|
718
|
+
...buildReducedMotionBase()
|
|
719
|
+
};
|
|
720
|
+
const themePlugin = (0, tailwindcss_plugin_js.default)(({ addBase, addComponents, matchUtilities }) => {
|
|
721
|
+
addComponents(textComponents);
|
|
722
|
+
addComponents(pluginComponentStyles);
|
|
723
|
+
addBase(pluginBaseStyles);
|
|
724
|
+
matchUtilities({ "grid-area": (value) => {
|
|
725
|
+
return { "grid-area": value };
|
|
726
|
+
} });
|
|
727
|
+
}, { theme: tailwindTheme });
|
|
581
728
|
//#endregion
|
|
729
|
+
Object.defineProperty(exports, "REDUCED_MOTION_POLICY", {
|
|
730
|
+
enumerable: true,
|
|
731
|
+
get: function() {
|
|
732
|
+
return REDUCED_MOTION_POLICY;
|
|
733
|
+
}
|
|
734
|
+
});
|
|
735
|
+
Object.defineProperty(exports, "animation", {
|
|
736
|
+
enumerable: true,
|
|
737
|
+
get: function() {
|
|
738
|
+
return animation;
|
|
739
|
+
}
|
|
740
|
+
});
|
|
741
|
+
Object.defineProperty(exports, "autofillStyles", {
|
|
742
|
+
enumerable: true,
|
|
743
|
+
get: function() {
|
|
744
|
+
return autofillStyles;
|
|
745
|
+
}
|
|
746
|
+
});
|
|
747
|
+
Object.defineProperty(exports, "buildReducedMotionBase", {
|
|
748
|
+
enumerable: true,
|
|
749
|
+
get: function() {
|
|
750
|
+
return buildReducedMotionBase;
|
|
751
|
+
}
|
|
752
|
+
});
|
|
582
753
|
Object.defineProperty(exports, "colors", {
|
|
583
754
|
enumerable: true,
|
|
584
755
|
get: function() {
|
|
585
756
|
return colors;
|
|
586
757
|
}
|
|
587
758
|
});
|
|
759
|
+
Object.defineProperty(exports, "pluginBaseStyles", {
|
|
760
|
+
enumerable: true,
|
|
761
|
+
get: function() {
|
|
762
|
+
return pluginBaseStyles;
|
|
763
|
+
}
|
|
764
|
+
});
|
|
765
|
+
Object.defineProperty(exports, "pluginComponentStyles", {
|
|
766
|
+
enumerable: true,
|
|
767
|
+
get: function() {
|
|
768
|
+
return pluginComponentStyles;
|
|
769
|
+
}
|
|
770
|
+
});
|
|
771
|
+
Object.defineProperty(exports, "tailwindTheme", {
|
|
772
|
+
enumerable: true,
|
|
773
|
+
get: function() {
|
|
774
|
+
return tailwindTheme;
|
|
775
|
+
}
|
|
776
|
+
});
|
|
588
777
|
Object.defineProperty(exports, "textComponents", {
|
|
589
778
|
enumerable: true,
|
|
590
779
|
get: function() {
|
|
@@ -598,4 +787,4 @@ Object.defineProperty(exports, "themePlugin", {
|
|
|
598
787
|
}
|
|
599
788
|
});
|
|
600
789
|
|
|
601
|
-
//# sourceMappingURL=plugin-
|
|
790
|
+
//# sourceMappingURL=plugin-B3PF4RMI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-B3PF4RMI.cjs","names":["wrapVariableOpacity","wrapVar","colorBackgroundCriticalDark","colorBackgroundCriticalLight","colorBackgroundDisabled","wrapOpacity","colorBackgroundHover","colorBackgroundHoverInverse","colorBackgroundInfoDark","colorBackgroundInfoLight","colorBackgroundInverse","colorBackgroundOverlay","colorBackgroundPressed","colorBackgroundPressedInverse","colorBackgroundPrimary","colorBackgroundSecondary","colorBackgroundSubdued","colorBackgroundSuccessDark","colorBackgroundSuccessLight","colorBackgroundTertiary","colorBackgroundWarningDark","colorBackgroundWarningLight","colorBorderBlack","colorBorderCritical","colorBorderDisabled","colorBorderHover","colorBorderInfo","colorBorderInverse","colorBorderPrimary","colorBorderSecondary","colorBorderSelected","colorBorderSuccess","colorBorderTertiary","colorBorderWarning","colorCritical100","colorCritical200","colorCritical300","colorCritical400","colorCritical50","colorCritical500","colorCritical600","colorCritical700","colorCritical800","colorCritical900","colorFocusInverse","colorFocusPrimary","colorIconCritical","colorIconPrimary","colorIconDisabled","colorIconSecondary","colorIconInfo","colorIconInverse","colorIconSuccess","colorIconWarning","colorInfo100","colorInfo200","colorInfo300","colorInfo400","colorInfo50","colorInfo500","colorInfo600","colorInfo700","colorInfo800","colorInfo900","colorLinkDisabled","colorLinkHover","colorLinkInverse","colorLinkInverseDisabled","colorLinkInverseHover","colorLinkInversePressed","colorLinkMonochrome","colorLinkPressed","colorLinkPrimary","colorLinkSecondary","colorPrimary100","colorPrimary200","colorPrimary300","colorPrimary400","colorPrimary50","colorPrimary500","colorPrimary600","colorPrimary700","colorPrimary800","colorPrimary900","colorSecondary100","colorSecondary200","colorSecondary300","colorSecondary400","colorSecondary50","colorSecondary500","colorSecondary600","colorSecondary700","colorSecondary800","colorSecondary900","colorSuccess100","colorSuccess200","colorSuccess300","colorSuccess400","colorSuccess50","colorSuccess500","colorSuccess600","colorSuccess700","colorSuccess800","colorSuccess900","colorSurface100","colorSurface200","colorSurface300","colorSurface400","colorSurface50","colorSurface500","colorSurface600","colorSurface700","colorSurface800","colorSurface900","colorTertiary100","colorTertiary200","colorTertiary300","colorTertiary400","colorTertiary50","colorTertiary500","colorTertiary600","colorTertiary700","colorTertiary800","colorTertiary900","colorTextCritical","colorTextDisabled","colorTextInactive","colorTextInfo","colorTextInverse","colorTextPrimary","colorTextSecondary","colorTextSuccess","colorTextWarning","colorWarning100","colorWarning200","colorWarning300","colorWarning400","colorWarning50","colorWarning500","colorWarning600","colorWarning700","colorWarning800","colorWarning900","fontFamily","wrapVar","fontWeightBodyPrimary","letterSpacingBodyPrimary","fontWeightBodySecondary","letterSpacingBodySecondary","fontWeightCaption","letterSpacingCaption","fontWeightH1","letterSpacingH1","screens","letterSpacingH1Mobile","fontWeightH2","letterSpacingH2","letterSpacingH2Mobile","fontWeightH3","letterSpacingH3","letterSpacingH3Mobile","fontWeightH4","letterSpacingH4","fontWeightH5","letterSpacingH5","fontWeightH6","letterSpacingH6","textTransformH6","fontWeightLabelMini","letterSpacingLabelMini","textTransformLabelMini","fontWeightLabelStrong","letterSpacingLabelStrong","wrapVar","widthDense","widthPage"],"sources":["../src/tailwind/animation.ts","../src/tailwind/borderWidth.ts","../src/tailwind/colors.ts","../src/tailwind/reducedMotion.ts","../src/tailwind/text.ts","../src/tailwind/width.ts","../src/tailwind/plugin.ts"],"sourcesContent":["/**\n * Animation registry for the theme system\n *\n * The `animate-*` utilities this library registers, extracted from `plugin.ts` so the\n * reduced-motion policy can be checked against them (see `./reducedMotion`). These sit under\n * `theme.extend`, so Tailwind's own defaults (`spin`, `ping`, `pulse`, `bounce`, `none`) survive\n * alongside them — the resolved registry is this object layered over `defaultTheme.animation`,\n * and the policy must cover both.\n *\n * Keyframes stay in `plugin.ts` next to the `addBase` block that emits some of them.\n */\nexport const animation = {\n fadeIn: 'fadeIn .2s ease-in-out',\n fadeInOpacity: 'fadeInOpacity 0.5s ease-in-out',\n fadeInScaled: 'fadeInScaled .2s ease-in',\n fadeOut: 'fadeOut .2s ease-in-out',\n loading: 'loading 1.4s infinite ease-in-out',\n 'progress-completion': 'shrink 0.15s ease-in-out both, grow 0.15s ease-in-out 0.15s both',\n 'progress-icon-fade-in': 'fadeInOpacity 0.15s ease-in-out 0.15s both',\n 'progress-wave':\n 'progressWave 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, progressWaveRotate 1568ms linear infinite both',\n saveButtonPulse: 'saveButtonPulse 500ms cubic-bezier(0.34, 1.56, 0.64, 1)',\n saveButtonWiggle: 'saveButtonWiggle 500ms ease-in-out',\n saveHeartColorFlash: 'saveHeartColorFlash 500ms cubic-bezier(0.45, 0, 0.55, 1)',\n saveHeartPop: 'saveHeartPop 480ms cubic-bezier(0.34, 1.56, 0.64, 1)',\n saveHeartTwirlBloom: 'saveHeartTwirlBloom 500ms cubic-bezier(0.45, 0, 0.55, 1)',\n saveLabelShimmer: 'saveLabelShimmer 500ms ease-in-out',\n slideDown: 'slideDown 0.3s ease-in forwards',\n slideUp: 'slideUp 0.3s ease-out forwards',\n};\n","/**\n * Border width scale the theme ships.\n *\n * These match the widths Tailwind uses when a plugin does not replace `borderWidth`.\n * They sit on the theme object so the value snapshot locks the same scale.\n */\n\nexport const borderWidth = {\n DEFAULT: '1px',\n 0: '0px',\n 2: '2px',\n 4: '4px',\n 8: '8px',\n};\n","/**\n * Color configuration for Tailwind CSS\n *\n * Maps CSS custom properties to Tailwind color utilities using nested objects.\n * Uses wrapVariableOpacity() for dynamic alpha support (e.g., `bg-primary-500/50`)\n * and wrapOpacity() for fixed opacity values.\n *\n * @see https://tailwindcss.com/docs/customizing-colors#using-css-variables\n * Internal reference: Hammer UI patterns\n * Ported from the upstream theme system.\n */\n\nimport { wrapOpacity, wrapVar, wrapVariableOpacity } from '../utils/wrapVar';\nimport {\n colorBackgroundCriticalDark,\n colorBackgroundCriticalLight,\n colorBackgroundDisabled,\n colorBackgroundHover,\n colorBackgroundHoverInverse,\n colorBackgroundInfoDark,\n colorBackgroundInfoLight,\n colorBackgroundInverse,\n colorBackgroundOverlay,\n colorBackgroundPressed,\n colorBackgroundPressedInverse,\n colorBackgroundPrimary,\n colorBackgroundSecondary,\n colorBackgroundSubdued,\n colorBackgroundSuccessDark,\n colorBackgroundSuccessLight,\n colorBackgroundTertiary,\n colorBackgroundWarningDark,\n colorBackgroundWarningLight,\n colorBorderBlack,\n colorBorderCritical,\n colorBorderDisabled,\n colorBorderHover,\n colorBorderInfo,\n colorBorderInverse,\n colorBorderPrimary,\n colorBorderSecondary,\n colorBorderSelected,\n colorBorderSuccess,\n colorBorderTertiary,\n colorBorderWarning,\n colorCritical100,\n colorCritical200,\n colorCritical300,\n colorCritical400,\n colorCritical50,\n colorCritical500,\n colorCritical600,\n colorCritical700,\n colorCritical800,\n colorCritical900,\n colorFocusInverse,\n colorFocusPrimary,\n colorIconCritical,\n colorIconDisabled,\n colorIconInfo,\n colorIconInverse,\n colorIconPrimary,\n colorIconSecondary,\n colorIconSuccess,\n colorIconWarning,\n colorInfo100,\n colorInfo200,\n colorInfo300,\n colorInfo400,\n colorInfo50,\n colorInfo500,\n colorInfo600,\n colorInfo700,\n colorInfo800,\n colorInfo900,\n colorLinkDisabled,\n colorLinkHover,\n colorLinkInverse,\n colorLinkInverseDisabled,\n colorLinkInverseHover,\n colorLinkInversePressed,\n colorLinkMonochrome,\n colorLinkPressed,\n colorLinkPrimary,\n colorLinkSecondary,\n colorPrimary100,\n colorPrimary200,\n colorPrimary300,\n colorPrimary400,\n colorPrimary50,\n colorPrimary500,\n colorPrimary600,\n colorPrimary700,\n colorPrimary800,\n colorPrimary900,\n colorSecondary100,\n colorSecondary200,\n colorSecondary300,\n colorSecondary400,\n colorSecondary50,\n colorSecondary500,\n colorSecondary600,\n colorSecondary700,\n colorSecondary800,\n colorSecondary900,\n colorSuccess100,\n colorSuccess200,\n colorSuccess300,\n colorSuccess400,\n colorSuccess50,\n colorSuccess500,\n colorSuccess600,\n colorSuccess700,\n colorSuccess800,\n colorSuccess900,\n colorSurface100,\n colorSurface200,\n colorSurface300,\n colorSurface400,\n colorSurface50,\n colorSurface500,\n colorSurface600,\n colorSurface700,\n colorSurface800,\n colorSurface900,\n colorTertiary100,\n colorTertiary200,\n colorTertiary300,\n colorTertiary400,\n colorTertiary50,\n colorTertiary500,\n colorTertiary600,\n colorTertiary700,\n colorTertiary800,\n colorTertiary900,\n colorTextCritical,\n colorTextDisabled,\n colorTextInactive,\n colorTextInfo,\n colorTextInverse,\n colorTextPrimary,\n colorTextSecondary,\n colorTextSuccess,\n colorTextWarning,\n colorWarning100,\n colorWarning200,\n colorWarning300,\n colorWarning400,\n colorWarning50,\n colorWarning500,\n colorWarning600,\n colorWarning700,\n colorWarning800,\n colorWarning900,\n} from './cssVars';\n\nexport const colors: Record<string, Record<string, string> | string> = {\n background: {\n 'critical-dark': wrapVariableOpacity(wrapVar(colorBackgroundCriticalDark)),\n 'critical-light': wrapVariableOpacity(wrapVar(colorBackgroundCriticalLight)),\n disabled: wrapVariableOpacity(wrapVar(colorBackgroundDisabled)),\n hover: wrapOpacity(wrapVar(colorBackgroundHover), 5),\n 'hover-inverse': wrapOpacity(wrapVar(colorBackgroundHoverInverse), 5),\n 'info-dark': wrapVariableOpacity(wrapVar(colorBackgroundInfoDark)),\n 'info-light': wrapVariableOpacity(wrapVar(colorBackgroundInfoLight)),\n inverse: wrapVariableOpacity(wrapVar(colorBackgroundInverse)),\n overlay: wrapOpacity(wrapVar(colorBackgroundOverlay), 40),\n pressed: wrapOpacity(wrapVar(colorBackgroundPressed), 20),\n 'pressed-inverse': wrapOpacity(wrapVar(colorBackgroundPressedInverse), 20),\n primary: wrapVariableOpacity(wrapVar(colorBackgroundPrimary)),\n secondary: wrapVariableOpacity(wrapVar(colorBackgroundSecondary)),\n subdued: wrapVariableOpacity(wrapVar(colorBackgroundSubdued)),\n 'success-dark': wrapVariableOpacity(wrapVar(colorBackgroundSuccessDark)),\n 'success-light': wrapVariableOpacity(wrapVar(colorBackgroundSuccessLight)),\n tertiary: wrapVariableOpacity(wrapVar(colorBackgroundTertiary)),\n 'warning-dark': wrapVariableOpacity(wrapVar(colorBackgroundWarningDark)),\n 'warning-light': wrapVariableOpacity(wrapVar(colorBackgroundWarningLight)),\n },\n border: {\n black: wrapVariableOpacity(wrapVar(colorBorderBlack)),\n critical: wrapVariableOpacity(wrapVar(colorBorderCritical)),\n disabled: wrapVariableOpacity(wrapVar(colorBorderDisabled)),\n hover: wrapVariableOpacity(wrapVar(colorBorderHover)),\n info: wrapVariableOpacity(wrapVar(colorBorderInfo)),\n inverse: wrapVariableOpacity(wrapVar(colorBorderInverse)),\n primary: wrapVariableOpacity(wrapVar(colorBorderPrimary)),\n secondary: wrapVariableOpacity(wrapVar(colorBorderSecondary)),\n selected: wrapVariableOpacity(wrapVar(colorBorderSelected)),\n success: wrapVariableOpacity(wrapVar(colorBorderSuccess)),\n tertiary: wrapVariableOpacity(wrapVar(colorBorderTertiary)),\n warning: wrapVariableOpacity(wrapVar(colorBorderWarning)),\n },\n critical: {\n '100': wrapVariableOpacity(wrapVar(colorCritical100)),\n '200': wrapVariableOpacity(wrapVar(colorCritical200)),\n '300': wrapVariableOpacity(wrapVar(colorCritical300)),\n '400': wrapVariableOpacity(wrapVar(colorCritical400)),\n '50': wrapVariableOpacity(wrapVar(colorCritical50)),\n '500': wrapVariableOpacity(wrapVar(colorCritical500)),\n '600': wrapVariableOpacity(wrapVar(colorCritical600)),\n '700': wrapVariableOpacity(wrapVar(colorCritical700)),\n '800': wrapVariableOpacity(wrapVar(colorCritical800)),\n '900': wrapVariableOpacity(wrapVar(colorCritical900)),\n },\n current: 'currentColor',\n focus: {\n inverse: wrapOpacity(wrapVar(colorFocusInverse), 50),\n primary: wrapOpacity(wrapVar(colorFocusPrimary), 50),\n },\n 'focus-inverse': wrapVariableOpacity(wrapVar(colorFocusInverse)),\n 'focus-primary': wrapVariableOpacity(wrapVar(colorFocusPrimary)),\n icon: {\n critical: wrapVariableOpacity(wrapVar(colorIconCritical)),\n default: wrapVariableOpacity(wrapVar(colorIconPrimary)),\n disabled: wrapVariableOpacity(wrapVar(colorIconDisabled)),\n hover: wrapVariableOpacity(wrapVar(colorIconSecondary)),\n info: wrapVariableOpacity(wrapVar(colorIconInfo)),\n inverse: wrapVariableOpacity(wrapVar(colorIconInverse)),\n primary: wrapVariableOpacity(wrapVar(colorIconPrimary)),\n secondary: wrapVariableOpacity(wrapVar(colorIconSecondary)),\n success: wrapVariableOpacity(wrapVar(colorIconSuccess)),\n warning: wrapVariableOpacity(wrapVar(colorIconWarning)),\n },\n info: {\n '100': wrapVariableOpacity(wrapVar(colorInfo100)),\n '200': wrapVariableOpacity(wrapVar(colorInfo200)),\n '300': wrapVariableOpacity(wrapVar(colorInfo300)),\n '400': wrapVariableOpacity(wrapVar(colorInfo400)),\n '50': wrapVariableOpacity(wrapVar(colorInfo50)),\n '500': wrapVariableOpacity(wrapVar(colorInfo500)),\n '600': wrapVariableOpacity(wrapVar(colorInfo600)),\n '700': wrapVariableOpacity(wrapVar(colorInfo700)),\n '800': wrapVariableOpacity(wrapVar(colorInfo800)),\n '900': wrapVariableOpacity(wrapVar(colorInfo900)),\n },\n link: {\n disabled: wrapVariableOpacity(wrapVar(colorLinkDisabled)),\n hover: wrapVariableOpacity(wrapVar(colorLinkHover)),\n inverse: wrapVariableOpacity(wrapVar(colorLinkInverse)),\n 'inverse-disabled': wrapVariableOpacity(wrapVar(colorLinkInverseDisabled)),\n 'inverse-hover': wrapVariableOpacity(wrapVar(colorLinkInverseHover)),\n 'inverse-pressed': wrapVariableOpacity(wrapVar(colorLinkInversePressed)),\n monochrome: wrapVariableOpacity(wrapVar(colorLinkMonochrome)),\n pressed: wrapVariableOpacity(wrapVar(colorLinkPressed)),\n primary: wrapVariableOpacity(wrapVar(colorLinkPrimary)),\n secondary: wrapVariableOpacity(wrapVar(colorLinkSecondary)),\n },\n primary: {\n '100': wrapVariableOpacity(wrapVar(colorPrimary100)),\n '200': wrapVariableOpacity(wrapVar(colorPrimary200)),\n '300': wrapVariableOpacity(wrapVar(colorPrimary300)),\n '400': wrapVariableOpacity(wrapVar(colorPrimary400)),\n '50': wrapVariableOpacity(wrapVar(colorPrimary50)),\n '500': wrapVariableOpacity(wrapVar(colorPrimary500)),\n '600': wrapVariableOpacity(wrapVar(colorPrimary600)),\n '700': wrapVariableOpacity(wrapVar(colorPrimary700)),\n '800': wrapVariableOpacity(wrapVar(colorPrimary800)),\n '900': wrapVariableOpacity(wrapVar(colorPrimary900)),\n },\n secondary: {\n '100': wrapVariableOpacity(wrapVar(colorSecondary100)),\n '200': wrapVariableOpacity(wrapVar(colorSecondary200)),\n '300': wrapVariableOpacity(wrapVar(colorSecondary300)),\n '400': wrapVariableOpacity(wrapVar(colorSecondary400)),\n '50': wrapVariableOpacity(wrapVar(colorSecondary50)),\n '500': wrapVariableOpacity(wrapVar(colorSecondary500)),\n '600': wrapVariableOpacity(wrapVar(colorSecondary600)),\n '700': wrapVariableOpacity(wrapVar(colorSecondary700)),\n '800': wrapVariableOpacity(wrapVar(colorSecondary800)),\n '900': wrapVariableOpacity(wrapVar(colorSecondary900)),\n },\n success: {\n '100': wrapVariableOpacity(wrapVar(colorSuccess100)),\n '200': wrapVariableOpacity(wrapVar(colorSuccess200)),\n '300': wrapVariableOpacity(wrapVar(colorSuccess300)),\n '400': wrapVariableOpacity(wrapVar(colorSuccess400)),\n '50': wrapVariableOpacity(wrapVar(colorSuccess50)),\n '500': wrapVariableOpacity(wrapVar(colorSuccess500)),\n '600': wrapVariableOpacity(wrapVar(colorSuccess600)),\n '700': wrapVariableOpacity(wrapVar(colorSuccess700)),\n '800': wrapVariableOpacity(wrapVar(colorSuccess800)),\n '900': wrapVariableOpacity(wrapVar(colorSuccess900)),\n },\n surface: {\n '100': wrapVariableOpacity(wrapVar(colorSurface100)),\n '200': wrapVariableOpacity(wrapVar(colorSurface200)),\n '300': wrapVariableOpacity(wrapVar(colorSurface300)),\n '400': wrapVariableOpacity(wrapVar(colorSurface400)),\n '50': wrapVariableOpacity(wrapVar(colorSurface50)),\n '500': wrapVariableOpacity(wrapVar(colorSurface500)),\n '600': wrapVariableOpacity(wrapVar(colorSurface600)),\n '700': wrapVariableOpacity(wrapVar(colorSurface700)),\n '800': wrapVariableOpacity(wrapVar(colorSurface800)),\n '900': wrapVariableOpacity(wrapVar(colorSurface900)),\n },\n tertiary: {\n '100': wrapVariableOpacity(wrapVar(colorTertiary100)),\n '200': wrapVariableOpacity(wrapVar(colorTertiary200)),\n '300': wrapVariableOpacity(wrapVar(colorTertiary300)),\n '400': wrapVariableOpacity(wrapVar(colorTertiary400)),\n '50': wrapVariableOpacity(wrapVar(colorTertiary50)),\n '500': wrapVariableOpacity(wrapVar(colorTertiary500)),\n '600': wrapVariableOpacity(wrapVar(colorTertiary600)),\n '700': wrapVariableOpacity(wrapVar(colorTertiary700)),\n '800': wrapVariableOpacity(wrapVar(colorTertiary800)),\n '900': wrapVariableOpacity(wrapVar(colorTertiary900)),\n },\n text: {\n critical: wrapVariableOpacity(wrapVar(colorTextCritical)),\n disabled: wrapVariableOpacity(wrapVar(colorTextDisabled)),\n inactive: wrapVariableOpacity(wrapVar(colorTextInactive)),\n info: wrapVariableOpacity(wrapVar(colorTextInfo)),\n inverse: wrapVariableOpacity(wrapVar(colorTextInverse)),\n primary: wrapVariableOpacity(wrapVar(colorTextPrimary)),\n secondary: wrapVariableOpacity(wrapVar(colorTextSecondary)),\n success: wrapVariableOpacity(wrapVar(colorTextSuccess)),\n warning: wrapVariableOpacity(wrapVar(colorTextWarning)),\n },\n transparent: 'transparent',\n warning: {\n '100': wrapVariableOpacity(wrapVar(colorWarning100)),\n '200': wrapVariableOpacity(wrapVar(colorWarning200)),\n '300': wrapVariableOpacity(wrapVar(colorWarning300)),\n '400': wrapVariableOpacity(wrapVar(colorWarning400)),\n '50': wrapVariableOpacity(wrapVar(colorWarning50)),\n '500': wrapVariableOpacity(wrapVar(colorWarning500)),\n '600': wrapVariableOpacity(wrapVar(colorWarning600)),\n '700': wrapVariableOpacity(wrapVar(colorWarning700)),\n '800': wrapVariableOpacity(wrapVar(colorWarning800)),\n '900': wrapVariableOpacity(wrapVar(colorWarning900)),\n },\n};\n","/**\n * Reduced-motion policy for the animation registry (DS-95 / audit findings SA-02 + SA-03).\n *\n * Every animation Tailwind resolves for this library — the local `theme.extend.animation`\n * entries *and* Tailwind's own defaults — gets exactly one entry here. `reducedMotion.spec.ts`\n * fails if the two key sets ever diverge, so a new animation cannot ship untriaged.\n *\n * ## Why duration-collapse rather than `animation: none`\n *\n * `animation: none` fires no `animationend`. `Modal/ComposableModal` and\n * `Modal/hooks/useCloseModal` both depend on that event to finish closing — `useCloseModal`\n * clears a 450ms watchdog there that otherwise logs an error and rejects an awaited promise. A\n * naive `none` gate would strand the modal open *for reduced-motion users only*, which is worse\n * than the gap it fixes. Collapsing the duration keeps the event, and keeps `forwards`/`both`\n * fill end-states intact (`slideUp`, `slideDown`, `progress-completion`).\n *\n * ## Why the doubled class selector\n *\n * Tailwind emits `base` before `utilities`. A consumer building with `important: true` gets\n * `!important` utilities too, and two equal-specificity `!important` rules resolve by source\n * order — the utility would win. `.animate-x.animate-x` (0-2-0) beats it on specificity instead,\n * and is inert for everyone else.\n *\n * Two known limitations, both external-consumer only:\n * - `prefix` renames the utility classes (`.tw-animate-*`), which these selectors will not match.\n * - `important: '#selector'` (the selector strategy, not `important: true`) emits\n * `#selector .animate-x` at specificity 0-1-0 *plus* an id — which outranks 0-2-0 regardless\n * of `!important`. The doubled class only defends against `important: true`.\n *\n * Components in this repo hardcode unprefixed class strings and no in-repo config sets either\n * option, so neither affects this monorepo.\n */\nexport type ReducedMotionTier =\n /** Collapse to ~1ms under reduce. The animation still runs, so `animationend` still fires. */\n | 'instant'\n /** Left alone — infinite indeterminate status indicators, where stopping removes feedback. */\n | 'retain'\n /** Not an animation (`animate-none` is the absence utility). */\n | 'n/a';\n\n/**\n * `selectors` is only meaningful on `instant` entries — nothing is emitted for `retain`/`n/a`,\n * so allowing it there would let a future entry declare a selector that silently does nothing.\n * The union makes that a type error rather than a quiet no-op.\n */\nexport type ReducedMotionPolicyEntry =\n | {\n /** Why this tier was chosen. Asserted non-empty, so every entry carries a justification. */\n reason: string;\n /**\n * Extra selectors for animations applied through a component class rather than an\n * `animate-*` utility. Emitted verbatim, so they are written at full specificity.\n */\n selectors?: readonly string[];\n tier: 'instant';\n }\n | { reason: string; selectors?: never; tier: 'n/a' | 'retain' };\n\nexport const REDUCED_MOTION_POLICY: Record<string, ReducedMotionPolicyEntry> = {\n // --- Local registry (theme.extend.animation) ---\n fadeIn: {\n reason: 'Opacity only, but collapsed alongside fadeInScaled so a modal opens the same way in both variants (ComposableModal picks between them on hasContentPager).',\n tier: 'instant',\n },\n fadeInOpacity: {\n reason: 'Opacity and visibility only; collapsing a fade is not a motion regression.',\n tier: 'instant',\n },\n fadeInScaled: { reason: 'Scales 0.7 to 1.', tier: 'instant' },\n fadeOut: {\n reason: 'Scales 1 to 0.7. Modal close depends on its animationend, so it is collapsed rather than removed.',\n tier: 'instant',\n },\n loading: {\n reason: 'Infinite indeterminate loading indicator (LoadingDot). Collapsing it removes the only signal that work is in progress.',\n tier: 'retain',\n },\n 'progress-completion': {\n reason: 'Scales. Zeroing the delay matters here: the composite is \"shrink 0.15s both, grow 0.15s ease-in-out 0.15s both\", so a duration-only collapse would hold the ring at scale(0.5) for 150ms and then snap.',\n tier: 'instant',\n },\n 'progress-icon-fade-in': {\n reason: 'Opacity only, but its 0.15s delay sequences it after progress-completion. Retaining it would leave a completed ProgressCircle ring with an empty centre for 150ms.',\n tier: 'instant',\n },\n 'progress-wave': {\n reason: 'Infinite indeterminate progress indicator (ProgressCircle). Same essential-feedback rationale as loading.',\n tier: 'retain',\n },\n saveButtonPulse: { reason: 'Scales.', tier: 'instant' },\n saveButtonWiggle: { reason: 'Rotates and scales.', tier: 'instant' },\n saveHeartColorFlash: {\n reason: 'Animates fill only, but it was already gated before DS-95 and must stay gated. Shipped via .hui-fb-color-flash, not the animate-* utility (which has no call sites), so it needs the explicit selector below.',\n selectors: ['.hui-fb-color-flash .hui-fb-icon-frame svg path'],\n tier: 'instant',\n },\n saveHeartPop: { reason: 'Scales.', tier: 'instant' },\n saveHeartTwirlBloom: { reason: 'Rotates 180 degrees at 1.15x scale.', tier: 'instant' },\n saveLabelShimmer: {\n reason: 'Animates background-position. The .hui-fb-shimmer paint block in plugin.ts separately drops the gradient under reduce so the label stays legible.',\n tier: 'instant',\n },\n slideDown: {\n reason: 'Translates on Y. Collapsed rather than removed so CookieConsent still receives animationend.',\n tier: 'instant',\n },\n slideUp: { reason: 'Translates on Y. Same animationend rationale as slideDown.', tier: 'instant' },\n\n // --- Tailwind defaults, which survive theme.extend and are reachable by consumers ---\n bounce: { reason: 'Translates on Y.', tier: 'instant' },\n none: { reason: 'Not an animation — animate-none is the absence utility.', tier: 'n/a' },\n ping: { reason: 'Scales and fades. No in-repo call site, but consumers can use it.', tier: 'instant' },\n pulse: {\n reason: 'Infinite, but opacity only — the conventional skeleton-loading indicator. Retained as essential feedback with no motion component.',\n tier: 'retain',\n },\n spin: {\n reason: 'Infinite indeterminate spinner (LoadingSpinner, ProgressCircle). A Tailwind default rather than a local entry, which is exactly why the policy is keyed on the resolved registry.',\n tier: 'retain',\n },\n};\n\nconst REDUCE_QUERY = '@media (prefers-reduced-motion: reduce)';\n\nconst COLLAPSED_DECLARATIONS = {\n 'animation-delay': '0ms !important',\n 'animation-duration': '1ms !important',\n 'animation-iteration-count': '1 !important',\n};\n\n/**\n * Builds the `@media (prefers-reduced-motion: reduce)` block for `addBase`.\n *\n * Emitted from `addBase` rather than `addComponents` deliberately: `addComponents` is subject to\n * caching discrepancies in this monorepo's Storybook build that stop newly added rules landing.\n */\nexport const buildReducedMotionBase = () => {\n const rules: Record<string, typeof COLLAPSED_DECLARATIONS> = {};\n\n const addRule = (selector: string) => {\n if (rules[selector]) {\n // Two policy entries claiming one selector would silently overwrite each other.\n // Every rule emits identical declarations today, so this can only fire on a\n // genuine authoring mistake — fail loudly rather than ship half a gate.\n throw new Error(`Duplicate reduced-motion selector: ${selector}`);\n }\n\n rules[selector] = { ...COLLAPSED_DECLARATIONS };\n };\n\n Object.entries(REDUCED_MOTION_POLICY).forEach(([key, entry]) => {\n if (entry.tier !== 'instant') {\n return;\n }\n\n // Doubled class (0-2-0) so an `important: true` consumer's utility cannot win on\n // source order — Tailwind emits `base` before `utilities`.\n addRule(`.animate-${key}.animate-${key}`);\n\n entry.selectors?.forEach(addRule);\n });\n\n return { [REDUCE_QUERY]: rules };\n};\n","/**\n * Typography component classes for Tailwind CSS plugin\n *\n * Defines .hui-text-* and .hui-link-* utility classes that apply\n * complete typography styles (font, size, weight, spacing, line-height).\n *\n * Internal reference: Hammer UI patterns\n * Ported from the upstream theme system.\n */\n\nimport { CSSRuleObject } from 'tailwindcss/types/config';\n\nimport { wrapVar } from '../utils/wrapVar';\nimport {\n fontWeightBodyPrimary,\n fontWeightBodySecondary,\n fontWeightCaption,\n fontWeightH1,\n fontWeightH2,\n fontWeightH3,\n fontWeightH4,\n fontWeightH5,\n fontWeightH6,\n fontWeightLabelMini,\n fontWeightLabelStrong,\n letterSpacingBodyPrimary,\n letterSpacingBodySecondary,\n letterSpacingCaption,\n letterSpacingH1,\n letterSpacingH1Mobile,\n letterSpacingH2,\n letterSpacingH2Mobile,\n letterSpacingH3,\n letterSpacingH3Mobile,\n letterSpacingH4,\n letterSpacingH5,\n letterSpacingH6,\n letterSpacingLabelMini,\n letterSpacingLabelStrong,\n textTransformH6,\n textTransformLabelMini,\n} from './cssVars';\nimport { fontFamily } from './fontFamily';\nimport { screens } from './screens';\n\nexport const textComponents = {\n '.hui-link-md': {\n fontFamily: fontFamily.primary,\n fontSize: '16px',\n fontWeight: wrapVar(fontWeightBodyPrimary),\n letterSpacing: wrapVar(letterSpacingBodyPrimary),\n lineHeight: '24px',\n },\n '.hui-link-sm': {\n fontFamily: fontFamily.primary,\n fontSize: '14px',\n fontWeight: wrapVar(fontWeightBodyPrimary),\n letterSpacing: wrapVar(letterSpacingBodyPrimary),\n lineHeight: '22px',\n },\n '.hui-link-xs': {\n fontFamily: fontFamily.primary,\n fontSize: '12px',\n fontWeight: wrapVar(fontWeightBodyPrimary),\n letterSpacing: wrapVar(letterSpacingBodyPrimary),\n lineHeight: '18px',\n },\n '.hui-text-body-primary': {\n fontFamily: fontFamily.primary,\n fontSize: '16px',\n fontWeight: wrapVar(fontWeightBodyPrimary),\n letterSpacing: wrapVar(letterSpacingBodyPrimary),\n lineHeight: '24px',\n },\n '.hui-text-body-secondary': {\n fontFamily: fontFamily.primary,\n fontSize: '14px',\n fontWeight: wrapVar(fontWeightBodySecondary),\n letterSpacing: wrapVar(letterSpacingBodySecondary),\n lineHeight: '22px',\n },\n '.hui-text-caption': {\n fontFamily: fontFamily.primary,\n fontSize: '12px',\n fontWeight: wrapVar(fontWeightCaption),\n letterSpacing: wrapVar(letterSpacingCaption),\n lineHeight: '18px',\n },\n '.hui-text-h1': {\n fontFamily: fontFamily.secondary,\n fontSize: '32px',\n fontWeight: wrapVar(fontWeightH1),\n letterSpacing: wrapVar(letterSpacingH1),\n lineHeight: '48px',\n [`@media (width < ${screens.smMax.max})`]: {\n fontSize: '24px',\n letterSpacing: wrapVar(letterSpacingH1Mobile),\n lineHeight: '36px',\n },\n },\n '.hui-text-h2': {\n fontFamily: fontFamily.secondary,\n fontSize: '24px',\n fontWeight: wrapVar(fontWeightH2),\n letterSpacing: wrapVar(letterSpacingH2),\n lineHeight: '36px',\n [`@media (width < ${screens.smMax.max})`]: {\n fontSize: '20px',\n letterSpacing: wrapVar(letterSpacingH2Mobile),\n lineHeight: '30px',\n },\n },\n '.hui-text-h3': {\n fontFamily: fontFamily.secondary,\n fontSize: '20px',\n fontWeight: wrapVar(fontWeightH3),\n letterSpacing: wrapVar(letterSpacingH3),\n lineHeight: '30px',\n [`@media (width < ${screens.smMax.max})`]: {\n // 18px/27px, not 16px/24px: at 16px this rule rendered identically to `.hui-text-h4`\n // below the breakpoint, collapsing two adjacent heading levels (DS-97 / SA-04).\n fontSize: '18px',\n letterSpacing: wrapVar(letterSpacingH3Mobile),\n lineHeight: '27px',\n },\n },\n '.hui-text-h4': {\n fontFamily: fontFamily.secondary,\n fontSize: '16px',\n fontWeight: wrapVar(fontWeightH4),\n letterSpacing: wrapVar(letterSpacingH4),\n lineHeight: '24px',\n },\n '.hui-text-h5': {\n fontFamily: fontFamily.primary,\n fontSize: '16px',\n fontWeight: wrapVar(fontWeightH5),\n letterSpacing: wrapVar(letterSpacingH5),\n lineHeight: '24px',\n },\n '.hui-text-h6': {\n fontFamily: fontFamily.primary,\n fontSize: '14px',\n fontWeight: wrapVar(fontWeightH6),\n letterSpacing: wrapVar(letterSpacingH6),\n lineHeight: '22px',\n textTransform: wrapVar(textTransformH6),\n },\n '.hui-text-label-mini': {\n fontFamily: fontFamily.primary,\n fontSize: '12px',\n fontWeight: wrapVar(fontWeightLabelMini),\n letterSpacing: wrapVar(letterSpacingLabelMini),\n lineHeight: '14px',\n textTransform: wrapVar(textTransformLabelMini),\n },\n '.hui-text-label-mini-strong': {\n fontFamily: fontFamily.primary,\n fontSize: '12px',\n fontWeight: wrapVar(fontWeightLabelStrong),\n letterSpacing: wrapVar(letterSpacingLabelMini),\n lineHeight: '14px',\n textTransform: wrapVar(textTransformLabelMini),\n },\n '.hui-text-label-strong': {\n fontFamily: fontFamily.primary,\n fontSize: '14px',\n fontWeight: wrapVar(fontWeightLabelStrong),\n letterSpacing: wrapVar(letterSpacingLabelStrong),\n lineHeight: '22px',\n },\n} satisfies Record<string, CSSRuleObject>;\n","/**\n * Layout width configuration for Tailwind CSS\n *\n * Internal reference: Hammer UI patterns\n * Ported from the upstream theme system.\n */\n\nimport { wrapVar } from '../utils/wrapVar';\nimport { widthDense, widthPage } from './cssVars';\n\nexport const width = {\n dense: wrapVar(widthDense),\n page: wrapVar(widthPage),\n} as const;\n","/**\n * Main Tailwind CSS plugin for the theme system\n *\n * Composes all theme configuration modules (colors, spacing, typography, etc.)\n * into a single Tailwind plugin. The plugin's second argument defines the complete\n * theme, so consumers only need `plugins: [themePlugin]` — no separate theme extension.\n *\n * Internal reference: Hammer UI patterns\n * Ported from the upstream theme system.\n */\n\nimport plugin from 'tailwindcss/plugin';\n\nimport { animation } from './animation';\nimport { borderRadius } from './borderRadius';\nimport { borderWidth } from './borderWidth';\nimport { boxShadow } from './boxShadow';\nimport { colors } from './colors';\nimport { fontFamily } from './fontFamily';\nimport { buildReducedMotionBase } from './reducedMotion';\nimport { screens } from './screens';\nimport { spacing } from './spacing';\nimport { textComponents } from './text';\nimport { width } from './width';\n\nexport const autofillStyles = {\n '-webkit-box-shadow': '0 0 0 12px rgb(var(--color-background-primary)) inset !important',\n 'box-shadow': '0 0 0 12px rgb(var(--color-background-primary)) inset !important',\n};\n\nexport const tailwindTheme = {\n borderRadius,\n borderWidth,\n boxShadow,\n colors,\n extend: {\n animation,\n keyframes: {\n fadeIn: {\n from: {\n opacity: '0',\n },\n to: {\n opacity: '1',\n },\n },\n fadeInOpacity: {\n from: {\n opacity: '0',\n visibility: 'hidden',\n },\n to: {\n opacity: '1',\n visibility: 'visible',\n },\n },\n fadeInScaled: {\n from: {\n opacity: '0',\n transform: 'scale(0.7)',\n },\n to: {\n opacity: '1',\n transform: 'scale(1)',\n },\n },\n fadeOut: {\n from: {\n opacity: '1',\n transform: 'scale(1)',\n },\n to: {\n opacity: '0',\n transform: 'scale(0.7)',\n },\n },\n grow: {\n from: { transform: 'scale(0.5)' },\n to: { transform: 'scale(1)' },\n },\n loading: {\n '0%, 100%, 80%': { transform: 'scale(0)' },\n '40%': { transform: 'scale(1)' },\n },\n progressWave: {\n '0%': {\n strokeDasharray: 'var(--progress-wave-start)',\n strokeDashoffset: '0',\n },\n '100%': {\n strokeDasharray: 'var(--progress-wave-end)',\n strokeDashoffset: 'var(--progress-wave-full)',\n },\n '50%': {\n strokeDasharray: 'var(--progress-wave-mid)',\n strokeDashoffset: 'var(--progress-wave-offset)',\n },\n },\n progressWaveRotate: {\n '0%': { transform: 'rotate(-90deg)' },\n '100%': { transform: 'rotate(270deg)' },\n },\n saveButtonPulse: {\n '0%': { transform: 'scale(1)' },\n '35%': { transform: 'scale(1.08)' },\n '65%': { transform: 'scale(0.97)' },\n '100%': { transform: 'scale(1)' },\n },\n saveButtonWiggle: {\n '0%, 100%': { transform: 'rotate(0deg) scale(1)' },\n '10%': { transform: 'rotate(-4deg) scale(1.02)' },\n '25%': { transform: 'rotate(3.5deg) scale(1.02)' },\n '40%': { transform: 'rotate(-2.5deg) scale(1.015)' },\n '55%': { transform: 'rotate(2deg) scale(1.015)' },\n '70%': { transform: 'rotate(-1deg) scale(1.01)' },\n '85%': { transform: 'rotate(0.5deg) scale(1)' },\n },\n saveHeartColorFlash: {\n '0%': {\n fill: 'rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))',\n },\n '40%': {\n fill: 'rgb(var(--hui-save-color-critical-300, var(--color-critical-300)))',\n },\n '60%': {\n fill: 'rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))',\n },\n '100%': {\n fill: 'rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))',\n },\n },\n saveHeartPop: {\n '0%': { transform: 'scale(1)' },\n '20%': { transform: 'scale(0.6)' },\n '60%': { transform: 'scale(1.35)' },\n '100%': { transform: 'scale(1)' },\n },\n saveHeartTwirlBloom: {\n '0%': { transform: 'rotateY(0deg) scale(1)' },\n '30%': { transform: 'rotateY(54deg) scale(1.15)' },\n '100%': { transform: 'rotateY(180deg) scale(1)' },\n },\n saveLabelShimmer: {\n '0%': { backgroundPosition: '200% center' },\n '100%': { backgroundPosition: '-200% center' },\n },\n shrink: {\n from: { transform: 'scale(1)' },\n to: { transform: 'scale(0.5)' },\n },\n slideDown: {\n '0%': { opacity: '1', transform: 'translateY(0)' },\n '100%': { opacity: '0', transform: 'translateY(100%)' },\n },\n slideUp: {\n '0%': { opacity: '0', transform: 'translateY(100%)' },\n '100%': { opacity: '1', transform: 'translateY(0)' },\n },\n },\n\n maxWidth: width,\n minWidth: width,\n spacing,\n width,\n },\n fontFamily,\n screens,\n};\n\nexport const pluginComponentStyles = {\n '.hui-autofill-transparent': {\n '&:-webkit-autofill': autofillStyles,\n '&:-webkit-autofill:active': autofillStyles,\n '&:-webkit-autofill:focus': autofillStyles,\n '&:-webkit-autofill:hover': autofillStyles,\n },\n '.hui-focus-visible-outline': {\n '@apply focus-visible:outline-focus-primary focus-visible:outline focus-visible:outline-4': {},\n },\n '.hui-focus-visible-outline-inverse': {\n '@apply focus-visible:outline-focus-inverse focus-visible:outline focus-visible:outline-4': {},\n },\n '.scrollbar-default': {\n /* Safari and Chrome */\n '&::-webkit-scrollbar': {\n display: 'block',\n },\n /* IE and Edge */\n '-ms-overflow-style': 'auto',\n /* Firefox */\n 'scrollbar-width': 'auto',\n },\n '.scrollbar-hide': {\n /* Safari and Chrome */\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n /* IE and Edge */\n '-ms-overflow-style': 'none',\n /* Firefox */\n 'scrollbar-width': 'none',\n },\n};\n\n// Save/Favorite button keyframes — emitted unconditionally via addBase so they are\n// available in all consumer builds regardless of Tailwind content scanning.\n// The corresponding animate-* utilities are registered in theme.extend.animation.\nexport const pluginBaseStyles = {\n '@keyframes saveButtonWiggle': {\n '0%, 100%': { transform: 'rotate(0deg) scale(1)' },\n '10%': { transform: 'rotate(-4deg) scale(1.02)' },\n '25%': { transform: 'rotate(3.5deg) scale(1.02)' },\n '40%': { transform: 'rotate(-2.5deg) scale(1.015)' },\n '55%': { transform: 'rotate(2deg) scale(1.015)' },\n '70%': { transform: 'rotate(-1deg) scale(1.01)' },\n '85%': { transform: 'rotate(0.5deg) scale(1)' },\n },\n '@keyframes saveHeartTwirlBloom': {\n '0%': { transform: 'rotateY(0deg) scale(1)' },\n '30%': { transform: 'rotateY(54deg) scale(1.15)' },\n '100%': { transform: 'rotateY(180deg) scale(1)' },\n },\n '@keyframes saveHeartColorFlash': {\n '0%': {\n fill: 'rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))',\n },\n '40%': {\n fill: 'rgb(var(--hui-save-color-critical-300, var(--color-critical-300)))',\n },\n '60%': {\n fill: 'rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))',\n },\n '100%': {\n fill: 'rgb(var(--hui-save-color-critical-500, var(--color-critical-500)))',\n },\n },\n '@keyframes saveLabelShimmer': {\n '0%': { backgroundPosition: '200% center' },\n '100%': { backgroundPosition: '-200% center' },\n },\n '@keyframes saveButtonPulse': {\n '0%': { transform: 'scale(1)' },\n '35%': { transform: 'scale(1.08)' },\n '65%': { transform: 'scale(0.97)' },\n '100%': { transform: 'scale(1)' },\n },\n '@keyframes saveHeartPop': {\n '0%': { transform: 'scale(1)' },\n '20%': { transform: 'scale(0.6)' },\n '60%': { transform: 'scale(1.35)' },\n '100%': { transform: 'scale(1)' },\n },\n // Save/Favorite button animated variant — shimmer and color-flash helpers.\n // Placed in addBase (not addComponents) so Vite's PostCSS pipeline emits\n // them unconditionally. addComponents is subject to caching discrepancies\n // in this monorepo's Storybook build that prevent new rules from landing.\n '.hui-fb-shimmer': {\n lineHeight: 'normal',\n backgroundImage:\n 'linear-gradient(90deg, currentColor 0%, currentColor 20%, rgb(var(--hui-save-color-critical-200, var(--color-critical-200))) 33%, rgb(var(--hui-save-color-critical-500, var(--color-critical-500))) 50%, rgb(var(--hui-save-color-tertiary-400, var(--color-tertiary-400))) 67%, currentColor 80%, currentColor 100%)',\n backgroundSize: '200% 100%',\n backgroundClip: 'text',\n '-webkit-background-clip': 'text',\n '-webkit-text-fill-color': 'transparent',\n '@media (prefers-reduced-motion: reduce)': {\n backgroundImage: 'none !important',\n '-webkit-text-fill-color': 'currentColor !important',\n },\n },\n '.hui-fb-color-flash .hui-fb-icon-frame svg path': {\n animation: 'saveHeartColorFlash 500ms cubic-bezier(0.45, 0, 0.55, 1) 1',\n animationFillMode: 'forwards',\n },\n // Reduced-motion gating for the whole animation registry (DS-95). This replaces the\n // per-selector `animation: none` block that used to live here — see\n // `./reducedMotion` for why duration-collapse rather than removal, and why the\n // `.hui-fb-shimmer` paint block above is a deliberate exception to it.\n ...buildReducedMotionBase(),\n};\n\nexport const themePlugin = plugin(\n ({ addBase, addComponents, matchUtilities }) => {\n // https://tailwindcss.com/docs/plugins#css-in-js-syntax\n addComponents(textComponents);\n addComponents(pluginComponentStyles);\n addBase(pluginBaseStyles);\n\n matchUtilities({\n 'grid-area': (value) => {\n return {\n 'grid-area': value,\n };\n },\n });\n },\n {\n theme: tailwindTheme,\n }\n);\n"],"mappings":"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"}
|