@techsio/ui-kit 0.7.0 → 0.10.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.
Files changed (40) hide show
  1. package/dist/atoms/badge.js +5 -5
  2. package/dist/atoms/button.js +15 -15
  3. package/dist/atoms/checkbox.js +2 -2
  4. package/dist/atoms/figma/image.figma.js +2 -2
  5. package/dist/atoms/figma/numeric-input.figma.js +1 -1
  6. package/dist/atoms/figma/textarea.figma.js +3 -3
  7. package/dist/atoms/input.js +9 -9
  8. package/dist/atoms/numeric-input.js +5 -5
  9. package/dist/atoms/rating.js +1 -1
  10. package/dist/atoms/status-text.js +6 -6
  11. package/dist/atoms/textarea.js +5 -5
  12. package/dist/atoms/tooltip.js +3 -3
  13. package/dist/molecules/tabs.js +11 -10
  14. package/dist/src/atoms/button.d.ts.map +1 -1
  15. package/dist/src/atoms/link.d.ts.map +1 -1
  16. package/dist/src/atoms/status-text.d.ts.map +1 -1
  17. package/dist/src/molecules/tabs.d.ts +4 -4
  18. package/dist/src/molecules/tabs.d.ts.map +1 -1
  19. package/dist/stories/molecules/tabs.stories.d.ts.map +1 -1
  20. package/package.json +1 -1
  21. package/src/tokens/_tokens-base.css +7 -0
  22. package/src/tokens/components/atoms/_badge.css +13 -70
  23. package/src/tokens/components/atoms/_button.css +14 -215
  24. package/src/tokens/components/atoms/_checkbox.css +15 -45
  25. package/src/tokens/components/atoms/_icon.css +16 -58
  26. package/src/tokens/components/atoms/_image.css +5 -5
  27. package/src/tokens/components/atoms/_input.css +12 -75
  28. package/src/tokens/components/atoms/_label.css +7 -8
  29. package/src/tokens/components/atoms/_link.css +5 -0
  30. package/src/tokens/components/atoms/_numeric-input.css +4 -63
  31. package/src/tokens/components/atoms/_rating.css +4 -23
  32. package/src/tokens/components/atoms/_skeleton.css +20 -26
  33. package/src/tokens/components/atoms/_status-text.css +11 -22
  34. package/src/tokens/components/atoms/_textarea.css +29 -82
  35. package/src/tokens/components/atoms/_tooltip.css +15 -18
  36. package/src/tokens/components/components.css +1 -0
  37. package/src/tokens/components/molecules/_product-card.css +16 -22
  38. package/src/tokens/figma/dark/variables.css +1353 -1174
  39. package/src/tokens/figma/light/variables.css +1353 -1174
  40. package/src/tokens/figma/variables.css +1589 -0
@@ -1,66 +1,7 @@
1
- @theme static {
2
- /* === BASE TOKEN MAPPING === */
3
- --color-numeric-input-bg: var(--color-form-control-bg);
4
- --color-numeric-input-hover: oklch(
5
- from var(--color-numeric-input-bg) calc(l + var(--state-hover)) c h
6
- );
7
- --color-numeric-input-focus: oklch(
8
- from var(--color-numeric-input-bg) calc(l + var(--state-active)) c h
9
- );
10
- --color-numeric-input-border: var(--color-form-control-border);
11
- --color-numeric-input-border-hover: var(--color-form-control-border-hover);
12
- --color-numeric-input-border-focus: var(--color-form-control-border-focus);
13
- --color-numeric-input-fg: var(--color-input-fg);
14
-
15
- --color-numeric-input-bg-disabled: var(--color-form-control-bg-disabled);
16
- --color-numeric-input-fg-disabled: var(--color-form-control-fg-disabled);
17
- --color-numeric-input-border-disabled: var(
18
- --color-form-control-border-disabled
19
- );
20
-
21
- --color-numeric-input-invalid-border: var(--color-danger);
22
- --color-numeric-input-invalid-bg: --alpha(var(--color-danger) / 10%);
23
-
24
- /* ==== TYPOGRAPHY ==== */
25
- --text-numeric-input-sm: var(--text-sm);
26
- --text-numeric-input-md: var(--text-md);
27
- --text-numeric-input-lg: var(--text-lg);
28
-
29
- /* === INPUT === */
30
- --color-numeric-input-input-bg: transparent;
31
- --color-numeric-input-input-bg-hover: var(--color-numeric-input-hover);
32
- --color-numeric-input-input-bg-focus: var(--color-numeric-input-focus);
33
- --padding-numeric-input-input-sm: var(--spacing-100);
34
- --padding-numeric-input-input-md: var(--spacing-150);
35
- --padding-numeric-input-input-lg: var(--spacing-200);
36
-
37
- /* === TRIGGER === */
38
- --color-numeric-input-trigger-container-bg: var(--color-form-control-border);
39
- --color-numeric-input-trigger-bg: var(--color-numeric-input-bg);
40
- --color-numeric-input-trigger-bg-hover: oklch(
41
- from var(--color-numeric-input-trigger-bg) calc(l + var(--state-hover)) c h
42
- );
43
- --color-numeric-input-trigger-fg: var(--color-numeric-input-fg);
44
- --color-numeric-input-trigger-fg-hover: var(--color-primary);
45
- --padding-numeric-input-trigger-x: var(--spacing-150);
46
- --padding-numeric-input-trigger-y: 0rem;
47
-
48
- /* === ROOT GAP === */
49
- --gap-numeric-input-root-sm: 0rem;
50
- --gap-numeric-input-root-md: 0rem;
51
- --gap-numeric-input-root-lg: 0rem;
52
-
53
- /* === INCREMENT BUTTON === */
54
-
55
- --radius-numeric-input: var(--radius-form-control);
56
- --radius-numeric-input-sm: var(--radius-form-control-sm);
57
- --radius-numeric-input-md: var(--radius-form-control-md);
58
- --radius-numeric-input-lg: var(--radius-form-control-lg);
59
- --border-width-numeric-input: var(--border-width-input);
60
-
61
- /* === FOCUS RING === */
62
- --color-numeric-input-ring: var(--color-ring);
63
- }
1
+ /*
2
+ * NumericInput runtime tokens fully come from libs/ui/src/tokens/figma/variables.css.
3
+ * Only the semantic glyph aliases remain here.
4
+ */
64
5
 
65
6
  @utility token-icon-numeric-input-increment {
66
7
  @apply token-icon-increment;
@@ -1,30 +1,11 @@
1
- @theme static {
2
- /* === BASE COLORS === */
3
- --color-rating-fg: var(--color-highlight);
4
- --color-rating-fg-active: var(--color-warning);
1
+ /*
2
+ * Rating runtime tokens fully come from libs/ui/src/tokens/figma/variables.css.
3
+ * Only the semantic glyph aliases remain here.
4
+ */
5
5
 
6
- /* === DISABLED STATES === */
7
- --color-rating-fg-disabled: var(--color-fg-disabled);
8
-
9
- /* === SPACING === */
10
- --spacing-rating-sm: var(--spacing-100);
11
- --spacing-rating-md: var(--spacing-150);
12
- --spacing-rating-lg: var(--spacing-200);
13
-
14
- /* === TYPOGRAPHY === */
15
- --text-rating-sm: var(--text-icon-sm);
16
- --text-rating-md: var(--text-icon-md);
17
- --text-rating-lg: var(--text-icon-lg);
18
-
19
- /* === FOCUS RING === */
20
- --color-rating-ring: var(--color-ring);
21
- }
22
-
23
- /* Semantic tokens for rating icons */
24
6
  @utility token-icon-rating {
25
7
  @apply token-icon-star;
26
8
  }
27
-
28
9
  @utility token-icon-rating-half {
29
10
  @apply token-icon-star-half;
30
11
  }
@@ -1,34 +1,30 @@
1
- @theme static {
2
- /* === BASE COLOR MAPPING === */
3
- /* Background colors using reference layer */
4
- --color-skeleton-bg: var(--color-overlay);
5
- --color-skeleton-bg-primary: var(--color-skeleton-bg);
6
- --color-skeleton-bg-secondary: var(--color-surface);
1
+ /*
2
+ * Skeleton runtime tokens come from libs/ui/src/tokens/figma/variables.css
3
+ * (colors, sizing, radius, durations).
4
+ *
5
+ * Kept here:
6
+ * - `--duration-skeleton-pulse-{slow,normal,fast}` — Figma exports
7
+ * `--duration-skeleton-{slow,normal,fast}` (no `-pulse-` infix), but
8
+ * the @utility blocks below reference the `-pulse-` names.
9
+ * - `--spacing-skeleton-text-{sm,md,lg,xl}` — alias bridges so the
10
+ * `gap-skeleton-text-{size}` utility resolves; Figma exports only
11
+ * `--spacing-skeleton-{size}` without the `-text-` infix.
12
+ * - `@keyframes skeleton-pulse` + `@utility animate-skeleton-pulse-*`
13
+ * + reduced-motion overrides — all are runtime-CSS constructs that
14
+ * Figma can't model.
15
+ */
7
16
 
8
- /* === ANIMATION === */
9
- /* Use global motion tokens for consistent behavior */
17
+ @theme static {
10
18
  --duration-skeleton-pulse-slow: 3s;
11
19
  --duration-skeleton-pulse-normal: 2s;
12
20
  --duration-skeleton-pulse-fast: 1s;
13
21
 
14
- /* === SPACING === */
15
- --spacing-skeleton-text-sm: var(--spacing-100);
16
- --spacing-skeleton-text-md: var(--spacing-150);
17
- --spacing-skeleton-text-lg: var(--spacing-200);
18
- --spacing-skeleton-text-xl: var(--spacing-250);
19
-
20
- /* === SIZING === */
21
- --size-skeleton-circle-sm: 2rem;
22
- --size-skeleton-circle-md: 3rem;
23
- --size-skeleton-circle-lg: 4rem;
24
- --size-skeleton-circle-xl: 6rem;
25
- --height-skeleton-text-line: 1rem; /* Match text line height */
26
-
27
- /* === BORDERS & RADIUS === */
28
- --radius-skeleton-text: var(--radius-sm);
22
+ --spacing-skeleton-text-sm: var(--spacing-skeleton-sm);
23
+ --spacing-skeleton-text-md: var(--spacing-skeleton-md);
24
+ --spacing-skeleton-text-lg: var(--spacing-skeleton-lg);
25
+ --spacing-skeleton-text-xl: var(--spacing-skeleton-xl);
29
26
  }
30
27
 
31
- /* === ANIMATIONS === */
32
28
  @keyframes skeleton-pulse {
33
29
  0%,
34
30
  100% {
@@ -65,8 +61,6 @@
65
61
  }
66
62
  }
67
63
 
68
- /* Display reduced motion for storybook without having to
69
- enable the prefers-reduced-motion feature in DevTools */
70
64
  @layer utilities {
71
65
  .force-reduced-motion {
72
66
  animation: none;
@@ -1,32 +1,21 @@
1
- @theme {
2
- /* Status colors */
3
- --color-status-text-fg-error: var(--color-danger);
4
- --color-status-text-fg-success: var(--color-success);
5
- --color-status-text-fg-warning: var(--color-warning);
6
- --color-status-text-fg-default: var(--color-fg-secondary);
7
-
8
- /* Text sizes - inherit from input sizing */
9
- --text-status-text-sm: var(--text-input-sm);
10
- --text-status-text-md: var(--text-input-md);
11
- --text-status-text-lg: var(--text-input-lg);
12
-
13
- /* Icon gap - spacing between icon and text */
14
- --spacing-status-text-icon-gap-sm: var(--spacing-50);
15
- --spacing-status-text-icon-gap-md: var(--spacing-100);
16
- --spacing-status-text-icon-gap-lg: var(--spacing-200);
17
-
18
- --spacing-status-text-icon: var(--spacing-50);
19
- --spacing-status-text-icon-long-text: var(--spacing-100);
20
- }
1
+ /*
2
+ * StatusText — runtime tokens fully come from libs/ui/src/tokens/figma/variables.css.
3
+ * Only the semantic glyph aliases remain here.
4
+ *
5
+ * Note: Figma's `--color-status-text-fg` resolves to `--color-fg-secondary`
6
+ * (single value, same across modes), while the atom previously hand-picked
7
+ * a brighter dark-mode value. In light mode both resolve to the same
8
+ * oklch(0.494 …), so the storybook visual is byte-identical. If dark-mode
9
+ * status-text needs more contrast, add a `light-dark()` to the Figma
10
+ * `color/fg/secondary` semantic instead of overriding here.
11
+ */
21
12
 
22
13
  @utility token-icon-status-text-success {
23
14
  @apply token-icon-success;
24
15
  }
25
-
26
16
  @utility token-icon-status-text-warning {
27
17
  @apply token-icon-warning;
28
18
  }
29
-
30
19
  @utility token-icon-status-text-error {
31
20
  @apply token-icon-error;
32
21
  }
@@ -1,91 +1,38 @@
1
+ /*
2
+ * Textarea — runtime tokens come from libs/ui/src/tokens/figma/variables.css.
3
+ *
4
+ * Kept here (Figma doesn't export):
5
+ * - `--opacity-borderless` constant.
6
+ * - `--color-textarea-bg-borderless*` derived via `--alpha()` from the
7
+ * base bg, and `--color-textarea-placeholder-danger` derived from
8
+ * the validation border. These are runtime CSS function calls that
9
+ * can't be modelled as static Figma variables.
10
+ * - `--color-textarea-border-{danger,success,warning}-focus` — the
11
+ * focus state isn't separately exported (atom convention falls back
12
+ * to the `-base` value).
13
+ */
14
+
1
15
  @theme static {
2
16
  --opacity-borderless: 60%;
3
- /* === BASE COLOR MAPPING === */
4
- --color-textarea-base: var(--color-form-control-bg);
5
- --color-textarea-success: var(--color-success);
6
- --color-textarea-warning: var(--color-warning);
7
- --color-textarea-danger: var(--color-danger);
8
-
9
- /* === DERIVED COLORS === */
10
- /* Background colors - using reference layer */
11
- --color-textarea-bg: var(--color-textarea-base);
12
- --color-textarea-bg-borderless: --alpha(
13
- var(--color-textarea-base) /
14
- var(--opacity-borderless)
15
- );
16
-
17
- /* Foreground colors */
18
- --color-textarea-fg: var(--color-fg-primary);
19
- --color-textarea-placeholder: var(--color-form-control-placeholder);
20
- --color-textarea-fg-disabled: var(--color-form-control-fg-disabled);
21
-
22
- /* Border colors */
23
- --color-textarea-border: var(--color-form-control-border);
24
- --color-textarea-border-success: var(--color-textarea-success);
25
- --color-textarea-border-warning: var(--color-textarea-warning);
26
- --color-textarea-border-danger: var(--color-textarea-danger);
27
- --color-textarea-border-disabled: var(--color-form-control-border-disabled);
28
-
29
- /* === STATE VARIATIONS === */
30
- /* Default hover/focus states */
31
- --color-textarea-bg-hover: oklch(
32
- from var(--color-textarea-base) calc(l + var(--state-hover)) c h
33
- );
34
- --color-textarea-bg-focus: oklch(
35
- from var(--color-textarea-base) calc(l + var(--state-active)) c h
36
- );
37
-
38
- /* Border states */
39
- --color-textarea-border-hover: var(--color-form-control-border-hover);
40
- --color-textarea-border-focus: var(--color-textarea-accent);
41
-
42
- /* === VALIDATION STATES === */
43
- /* Success variant */
44
- --color-textarea-border-success-hover: oklch(
45
- from var(--color-textarea-success) calc(l + var(--state-hover)) c h
46
- );
47
- --color-textarea-border-success-focus: var(--color-textarea-success);
48
17
 
49
- /* Warning variant */
50
- --color-textarea-border-warning-hover: oklch(
51
- from var(--color-textarea-warning) calc(l + var(--state-hover)) c h
52
- );
53
- --color-textarea-border-warning-focus: var(--color-textarea-warning);
18
+ /* Validation focus — fall back to base (Figma exports no focus variant). */
19
+ --color-textarea-border-danger-focus: var(--color-textarea-border-danger-base);
20
+ --color-textarea-border-success-focus: var(--color-textarea-border-success-base);
21
+ --color-textarea-border-warning-focus: var(--color-textarea-border-warning-base);
54
22
 
55
- /* Danger variant */
56
- --color-textarea-border-danger-hover: oklch(
57
- from var(--color-textarea-danger) calc(l + var(--state-hover)) c h
58
- );
59
- --color-textarea-border-danger-focus: var(--color-textarea-danger);
23
+ /* Placeholder-on-danger (not in Figma) */
24
+ /* stylelint-disable scss/operator-no-newline-after -- biome wraps long lines */
60
25
  --color-textarea-placeholder-danger: --alpha(
61
- var(--color-textarea-danger) /
26
+ var(--color-textarea-border-danger-base) /
62
27
  var(--opacity-placeholder)
63
28
  );
64
29
 
65
- /* Borderless variant */
66
- --color-textarea-bg-borderless-hover: var(--color-textarea-base);
67
-
68
- --color-textarea-bg-borderless-focus: var(--color-textarea-base);
69
-
70
- /* === DISABLED STATES === */
71
- --color-textarea-bg-disabled: var(--color-form-control-bg-disabled);
72
-
73
- /* === SPACING === */
74
- --padding-textarea-sm: var(--padding-input-sm);
75
- --padding-textarea-md: var(--padding-input-md);
76
- --padding-textarea-lg: var(--padding-input-lg);
77
-
78
- /* === TYPOGRAPHY === */
79
- --text-textarea-sm: var(--text-sm);
80
- --text-textarea-md: var(--text-md);
81
- --text-textarea-lg: var(--text-lg);
82
-
83
- /* === BORDERS & RADIUS === */
84
- --border-textarea-width: var(--border-width-form-control);
85
- --radius-textarea: var(--radius-form-control);
86
- --radius-textarea-sm: var(--radius-form-control-sm);
87
- --radius-textarea-md: var(--radius-form-control-md);
88
-
89
- /* === FOCUS RING === */
90
- --color-textarea-ring: var(--color-form-control-ring);
30
+ /* Borderless variant (not in Figma) */
31
+ --color-textarea-bg-borderless: --alpha(
32
+ var(--color-textarea-bg) /
33
+ var(--opacity-borderless)
34
+ );
35
+ /* stylelint-enable scss/operator-no-newline-after */
36
+ --color-textarea-bg-borderless-hover: var(--color-textarea-bg);
37
+ --color-textarea-bg-borderless-focus: var(--color-textarea-bg);
91
38
  }
@@ -1,21 +1,18 @@
1
- @theme static {
2
- /* === BASE TOKEN MAPPING === */
3
- --color-tooltip-bg: var(--color-overlay);
4
- --color-tooltip-border: var(--color-border-primary);
5
-
6
- /* === SIZING & SPACING === */
7
- --padding-tooltip-sm: var(--spacing-150) var(--spacing-200);
8
- --padding-tooltip-md: var(--spacing-200) var(--spacing-250);
9
- --padding-tooltip-lg: var(--spacing-250) var(--spacing-350);
1
+ /*
2
+ * Tooltip runtime tokens come from libs/ui/src/tokens/figma/variables.css.
3
+ *
4
+ * Kept here (Figma doesn't export these exact names):
5
+ * - `--padding-tooltip-{sm,md,lg}` combined shorthands for the
6
+ * `p-tooltip-{size}` utility (Figma has split x/y axes).
7
+ * - `--tooltip-arrow-size` and `--tooltip-arrow-background`
8
+ * Zag.js requires these exact CSS variable names.
9
+ */
10
10
 
11
- --text-tooltip-sm: var(--text-xs);
12
- --text-tooltip-md: var(--text-sm);
13
- --text-tooltip-lg: var(--text-md);
14
-
15
- --radius-tooltip: var(--radius-md);
16
- --shadow-tooltip: var(--shadow-md);
11
+ @theme static {
12
+ --padding-tooltip-sm: var(--padding-tooltip-y-sm) var(--padding-tooltip-x-sm);
13
+ --padding-tooltip-md: var(--padding-tooltip-y-md) var(--padding-tooltip-x-md);
14
+ --padding-tooltip-lg: var(--padding-tooltip-y-lg) var(--padding-tooltip-x-lg);
17
15
 
18
- /* Required for Zag.js */
19
- --tooltip-arrow-size: var(--spacing-150);
20
- --tooltip-arrow-background: var(--color-tooltip-bg);
16
+ --tooltip-arrow-size: var(--spacing-tooltip-arrow);
17
+ --tooltip-arrow-background: var(--color-tooltip-arrow);
21
18
  }
@@ -8,6 +8,7 @@
8
8
  @import "./atoms/_image.css";
9
9
  @import "./atoms/_input.css";
10
10
  @import "./atoms/_label.css";
11
+ @import "./atoms/_link.css";
11
12
  @import "./atoms/_numeric-input.css";
12
13
  @import "./atoms/_rating.css";
13
14
  @import "./atoms/_skeleton.css";
@@ -16,30 +16,24 @@
16
16
  --color-product-card-stock-fg-limited-stock: var(--color-warning);
17
17
  --color-product-card-stock-fg-out-of-stock: var(--color-danger);
18
18
 
19
- /* === STATE VARIATIONS === */
20
- /* Add to cart button */
21
- --color-product-card-button-cart-bg: var(--color-button-primary);
22
- --color-product-card-button-cart-bg-hover: oklch(
23
- from var(--color-product-card-button-cart-bg) calc(l + var(--state-hover)) c
24
- h
25
- );
26
- --color-product-card-button-cart-fg: var(--color-button-fg);
19
+ /* === Button slots ===
20
+ * Per @KaiUweCZE on #425: keep ProductCard button tokens linked to the
21
+ * Button atom's token layer so a brand-driven Button retheme propagates
22
+ * automatically and hover values match Figma's hand-picked colors
23
+ * instead of the old `oklch(... calc(l + var(--state-hover)) ...)`
24
+ * derivation. cart/detail/wishlist map to primary/secondary/tertiary.
25
+ */
26
+ --color-product-card-button-cart-bg: var(--color-button-bg-primary-base);
27
+ --color-product-card-button-cart-bg-hover: var(--color-button-bg-primary-hover);
28
+ --color-product-card-button-cart-fg: var(--color-button-fg-primary);
27
29
 
28
- /* Detail button */
29
- --color-product-card-button-detail-bg: var(--color-button-secondary);
30
- --color-product-card-button-detail-bg-hover: oklch(
31
- from var(--color-product-card-button-detail-bg) calc(l + var(--state-hover))
32
- c h
33
- );
34
- --color-product-card-button-detail-fg: var(--color-button-fg);
30
+ --color-product-card-button-detail-bg: var(--color-button-bg-secondary-base);
31
+ --color-product-card-button-detail-bg-hover: var(--color-button-bg-secondary-hover);
32
+ --color-product-card-button-detail-fg: var(--color-button-fg-secondary);
35
33
 
36
- /* Wishlist button */
37
- --color-product-card-button-wishlist-bg: var(--color-button-tertiary);
38
- --color-product-card-button-wishlist-bg-hover: oklch(
39
- from var(--color-product-card-button-wishlist-bg)
40
- calc(l + var(--state-hover)) c h
41
- );
42
- --color-product-card-button-wishlist-fg: var(--color-button-fg);
34
+ --color-product-card-button-wishlist-bg: var(--color-button-bg-tertiary-base);
35
+ --color-product-card-button-wishlist-bg-hover: var(--color-button-bg-tertiary-hover);
36
+ --color-product-card-button-wishlist-fg: var(--color-button-fg-tertiary);
43
37
 
44
38
  /* === SPACING === */
45
39
  --spacing-product-card-padding: var(--spacing-150);