@cdx-ui/components 0.0.1-alpha.14 → 0.0.1-alpha.15

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 (120) hide show
  1. package/README.md +1 -1
  2. package/lib/commonjs/components/Box/Box.js +1 -0
  3. package/lib/commonjs/components/Box/Box.js.map +1 -1
  4. package/lib/commonjs/components/Button/index.js +28 -13
  5. package/lib/commonjs/components/Button/index.js.map +1 -1
  6. package/lib/commonjs/components/Button/styles.js +324 -140
  7. package/lib/commonjs/components/Button/styles.js.map +1 -1
  8. package/lib/commonjs/components/Checkbox/index.js +18 -11
  9. package/lib/commonjs/components/Checkbox/index.js.map +1 -1
  10. package/lib/commonjs/components/Checkbox/styles.js +17 -16
  11. package/lib/commonjs/components/Checkbox/styles.js.map +1 -1
  12. package/lib/commonjs/components/Heading/index.js.map +1 -1
  13. package/lib/commonjs/components/Heading/styles.js +3 -2
  14. package/lib/commonjs/components/Heading/styles.js.map +1 -1
  15. package/lib/commonjs/components/Icon/index.js +2 -1
  16. package/lib/commonjs/components/Icon/index.js.map +1 -1
  17. package/lib/commonjs/components/Input/index.js +10 -16
  18. package/lib/commonjs/components/Input/index.js.map +1 -1
  19. package/lib/commonjs/components/Input/styles.js +16 -30
  20. package/lib/commonjs/components/Input/styles.js.map +1 -1
  21. package/lib/commonjs/components/Link/styles.js +6 -1
  22. package/lib/commonjs/components/Link/styles.js.map +1 -1
  23. package/lib/commonjs/components/Select/index.js +11 -12
  24. package/lib/commonjs/components/Select/index.js.map +1 -1
  25. package/lib/commonjs/components/Select/styles.js +29 -53
  26. package/lib/commonjs/components/Select/styles.js.map +1 -1
  27. package/lib/commonjs/components/Stack/styles.js +2 -14
  28. package/lib/commonjs/components/Stack/styles.js.map +1 -1
  29. package/lib/commonjs/components/Text/index.js.map +1 -1
  30. package/lib/commonjs/components/Text/styles.js +3 -2
  31. package/lib/commonjs/components/Text/styles.js.map +1 -1
  32. package/lib/commonjs/styles/index.js +17 -0
  33. package/lib/commonjs/styles/index.js.map +1 -0
  34. package/lib/commonjs/styles/primitives.js +123 -0
  35. package/lib/commonjs/styles/primitives.js.map +1 -0
  36. package/lib/module/components/Box/Box.js +1 -0
  37. package/lib/module/components/Box/Box.js.map +1 -1
  38. package/lib/module/components/Button/index.js +29 -14
  39. package/lib/module/components/Button/index.js.map +1 -1
  40. package/lib/module/components/Button/styles.js +323 -139
  41. package/lib/module/components/Button/styles.js.map +1 -1
  42. package/lib/module/components/Checkbox/index.js +19 -12
  43. package/lib/module/components/Checkbox/index.js.map +1 -1
  44. package/lib/module/components/Checkbox/styles.js +17 -16
  45. package/lib/module/components/Checkbox/styles.js.map +1 -1
  46. package/lib/module/components/Heading/index.js.map +1 -1
  47. package/lib/module/components/Heading/styles.js +3 -2
  48. package/lib/module/components/Heading/styles.js.map +1 -1
  49. package/lib/module/components/Icon/index.js +2 -1
  50. package/lib/module/components/Icon/index.js.map +1 -1
  51. package/lib/module/components/Input/index.js +10 -16
  52. package/lib/module/components/Input/index.js.map +1 -1
  53. package/lib/module/components/Input/styles.js +16 -30
  54. package/lib/module/components/Input/styles.js.map +1 -1
  55. package/lib/module/components/Link/styles.js +6 -1
  56. package/lib/module/components/Link/styles.js.map +1 -1
  57. package/lib/module/components/Select/index.js +12 -13
  58. package/lib/module/components/Select/index.js.map +1 -1
  59. package/lib/module/components/Select/styles.js +29 -53
  60. package/lib/module/components/Select/styles.js.map +1 -1
  61. package/lib/module/components/Stack/styles.js +2 -14
  62. package/lib/module/components/Stack/styles.js.map +1 -1
  63. package/lib/module/components/Text/index.js.map +1 -1
  64. package/lib/module/components/Text/styles.js +3 -2
  65. package/lib/module/components/Text/styles.js.map +1 -1
  66. package/lib/module/styles/index.js +4 -0
  67. package/lib/module/styles/index.js.map +1 -0
  68. package/lib/module/styles/primitives.js +119 -0
  69. package/lib/module/styles/primitives.js.map +1 -0
  70. package/lib/typescript/components/Box/Box.d.ts +1 -0
  71. package/lib/typescript/components/Box/Box.d.ts.map +1 -1
  72. package/lib/typescript/components/Button/index.d.ts +6 -3
  73. package/lib/typescript/components/Button/index.d.ts.map +1 -1
  74. package/lib/typescript/components/Button/styles.d.ts +14 -8
  75. package/lib/typescript/components/Button/styles.d.ts.map +1 -1
  76. package/lib/typescript/components/Checkbox/index.d.ts +6 -4
  77. package/lib/typescript/components/Checkbox/index.d.ts.map +1 -1
  78. package/lib/typescript/components/Checkbox/styles.d.ts +4 -4
  79. package/lib/typescript/components/Checkbox/styles.d.ts.map +1 -1
  80. package/lib/typescript/components/Heading/index.d.ts +6 -2
  81. package/lib/typescript/components/Heading/index.d.ts.map +1 -1
  82. package/lib/typescript/components/Heading/styles.d.ts.map +1 -1
  83. package/lib/typescript/components/Icon/index.d.ts +1 -2
  84. package/lib/typescript/components/Icon/index.d.ts.map +1 -1
  85. package/lib/typescript/components/Input/index.d.ts +6 -4
  86. package/lib/typescript/components/Input/index.d.ts.map +1 -1
  87. package/lib/typescript/components/Input/styles.d.ts +5 -7
  88. package/lib/typescript/components/Input/styles.d.ts.map +1 -1
  89. package/lib/typescript/components/Link/styles.d.ts.map +1 -1
  90. package/lib/typescript/components/Select/index.d.ts +6 -3
  91. package/lib/typescript/components/Select/index.d.ts.map +1 -1
  92. package/lib/typescript/components/Select/styles.d.ts +6 -8
  93. package/lib/typescript/components/Select/styles.d.ts.map +1 -1
  94. package/lib/typescript/components/Stack/styles.d.ts.map +1 -1
  95. package/lib/typescript/components/Text/index.d.ts +6 -2
  96. package/lib/typescript/components/Text/index.d.ts.map +1 -1
  97. package/lib/typescript/components/Text/styles.d.ts.map +1 -1
  98. package/lib/typescript/styles/index.d.ts +2 -0
  99. package/lib/typescript/styles/index.d.ts.map +1 -0
  100. package/lib/typescript/styles/primitives.d.ts +85 -0
  101. package/lib/typescript/styles/primitives.d.ts.map +1 -0
  102. package/package.json +4 -4
  103. package/src/components/Box/Box.tsx +1 -0
  104. package/src/components/Button/index.tsx +23 -15
  105. package/src/components/Button/styles.ts +353 -149
  106. package/src/components/Checkbox/index.tsx +15 -21
  107. package/src/components/Checkbox/styles.ts +33 -24
  108. package/src/components/Heading/index.tsx +4 -1
  109. package/src/components/Heading/styles.tsx +3 -2
  110. package/src/components/Icon/index.tsx +7 -2
  111. package/src/components/Input/index.tsx +9 -20
  112. package/src/components/Input/styles.ts +42 -37
  113. package/src/components/Link/styles.ts +10 -1
  114. package/src/components/Select/index.tsx +12 -11
  115. package/src/components/Select/styles.ts +63 -74
  116. package/src/components/Stack/styles.ts +2 -14
  117. package/src/components/Text/index.tsx +2 -1
  118. package/src/components/Text/styles.tsx +3 -2
  119. package/src/styles/index.ts +1 -0
  120. package/src/styles/primitives.ts +107 -0
@@ -1,58 +1,58 @@
1
1
  import { Platform } from 'react-native';
2
2
  import { cva, type VariantProps } from 'class-variance-authority';
3
+ import {
4
+ COLOR_BG_PRIMARY,
5
+ COLOR_BORDER_DEFAULT,
6
+ COLOR_TEXT_MUTED,
7
+ COLOR_TEXT_PRIMARY,
8
+ DISABLED_CURSOR,
9
+ DISABLED_OPACITY,
10
+ RADIUS_SM,
11
+ RADIUS_MD,
12
+ SHADOW_SM,
13
+ SHADOW_MD,
14
+ SIZE_SCALE,
15
+ TRANSITION_COLORS,
16
+ } from '../../styles/primitives';
3
17
 
4
18
  // ── Trigger ─────────────────────────────────────────────────
5
19
 
6
20
  export const selectTriggerVariants = cva(
7
21
  [
8
22
  'flex-row items-center justify-between',
9
- 'rounded-lg',
10
- 'transition-colors duration-150',
11
- 'data-[disabled=true]:opacity-60 data-[disabled=true]:cursor-not-allowed data-[disabled=true]:pointer-events-none',
23
+ RADIUS_SM,
24
+ SHADOW_SM,
25
+ TRANSITION_COLORS,
26
+ COLOR_BG_PRIMARY,
27
+ `border ${COLOR_BORDER_DEFAULT}`,
28
+ DISABLED_OPACITY,
29
+ DISABLED_CURSOR,
12
30
  'data-[readonly=true]:cursor-default',
13
- 'data-[focus-visible=true]:ring-2 data-[focus-visible=true]:ring-blue-500 data-[focus-visible=true]:ring-offset-2',
31
+ 'data-[state=open]:border-slate-900',
32
+ 'data-[invalid=true]:border-red-500',
33
+ 'data-[readonly=true]:bg-slate-50',
34
+ Platform.select({
35
+ default: 'data-[active=true]:border-slate-300',
36
+ web: [
37
+ 'data-[hover=true]:border-slate-300 data-[active=true]:data-[hover=true]:border-slate-400',
38
+ 'data-[focus-visible=true]:ring-2 data-[focus-visible=true]:ring-slate-400/50 data-[focus-visible=true]:ring-offset-2',
39
+ 'data-[state=open]:ring-2 data-[state=open]:ring-slate-400/50',
40
+ ].join(' '),
41
+ }),
14
42
  ],
15
43
  {
16
44
  variants: {
17
45
  variant: {
18
- outline: [
19
- 'bg-white border border-gray-300',
20
- Platform.select({
21
- default: 'data-[active=true]:border-gray-400',
22
- web: 'data-[hover=true]:border-gray-400 data-[active=true]:data-[hover=true]:border-gray-500',
23
- }),
24
- 'data-[state=open]:data-[invalid=false]:border-blue-500',
25
- 'data-[invalid=true]:border-red-500',
26
- 'data-[readonly=true]:bg-gray-50',
27
- ],
28
- filled: [
29
- 'bg-gray-100 border border-transparent',
30
- Platform.select({
31
- default: 'data-[active=true]:bg-gray-200',
32
- web: 'data-[hover=true]:bg-gray-200 data-[active=true]:data-[hover=true]:bg-gray-300',
33
- }),
34
- 'data-[state=open]:border-blue-500',
35
- 'data-[invalid=true]:border-red-500 data-[invalid=true]:border',
36
- 'data-[readonly=true]:bg-gray-200',
37
- ],
38
- ghost: [
39
- 'bg-transparent border border-transparent',
40
- Platform.select({
41
- default: 'data-[active=true]:bg-gray-100',
42
- web: 'data-[hover=true]:bg-gray-50 data-[active=true]:data-[hover=true]:bg-gray-100',
43
- }),
44
- 'data-[invalid=true]:border-red-500 data-[invalid=true]:border',
45
- ],
46
+ outline: [],
46
47
  },
47
48
  size: {
48
- sm: 'h-8 px-2.5 gap-1.5',
49
- md: 'h-10 px-3 gap-2',
50
- lg: 'h-12 px-4 gap-2.5',
49
+ default: `${SIZE_SCALE.default.height} ${SIZE_SCALE.default.px} ${SIZE_SCALE.default.gap}`,
50
+ small: `${SIZE_SCALE.small.height} ${SIZE_SCALE.small.px} ${SIZE_SCALE.small.gap}`,
51
51
  },
52
52
  },
53
53
  defaultVariants: {
54
54
  variant: 'outline',
55
- size: 'md',
55
+ size: 'default',
56
56
  },
57
57
  },
58
58
  );
@@ -60,23 +60,21 @@ export const selectTriggerVariants = cva(
60
60
  // ── Value ───────────────────────────────────────────────────
61
61
 
62
62
  export const selectValueVariants = cva(
63
- ['flex-1', 'data-[placeholder=true]:text-gray-400', 'data-[invalid=true]:text-red-600'],
63
+ [
64
+ 'flex-1',
65
+ 'data-[placeholder=true]:text-slate-400',
66
+ 'data-[invalid=true]:text-red-600',
67
+ COLOR_TEXT_PRIMARY,
68
+ ],
64
69
  {
65
70
  variants: {
66
- variant: {
67
- outline: 'text-gray-900',
68
- filled: 'text-gray-900',
69
- ghost: 'text-gray-900',
70
- },
71
71
  size: {
72
- sm: 'text-sm',
73
- md: 'text-base',
74
- lg: 'text-lg',
72
+ default: SIZE_SCALE.default.text,
73
+ small: SIZE_SCALE.small.text,
75
74
  },
76
75
  },
77
76
  defaultVariants: {
78
- variant: 'outline',
79
- size: 'md',
77
+ size: 'default',
80
78
  },
81
79
  },
82
80
  );
@@ -84,23 +82,16 @@ export const selectValueVariants = cva(
84
82
  // ── Icon ────────────────────────────────────────────────────
85
83
 
86
84
  export const selectIconVariants = cva(
87
- ['items-center justify-center', 'data-[invalid=true]:text-red-500'],
85
+ ['items-center justify-center', COLOR_TEXT_MUTED, 'data-[invalid=true]:text-red-500'],
88
86
  {
89
87
  variants: {
90
- variant: {
91
- outline: 'text-gray-500',
92
- filled: 'text-gray-500',
93
- ghost: 'text-gray-400',
94
- },
95
88
  size: {
96
- sm: 'h-4 w-4',
97
- md: 'h-5 w-5',
98
- lg: 'h-6 w-6',
89
+ default: 'h-5 w-5',
90
+ small: 'h-4 w-4',
99
91
  },
100
92
  },
101
93
  defaultVariants: {
102
- variant: 'outline',
103
- size: 'md',
94
+ size: 'default',
104
95
  },
105
96
  },
106
97
  );
@@ -108,12 +99,12 @@ export const selectIconVariants = cva(
108
99
  // ── Content ─────────────────────────────────────────────────
109
100
 
110
101
  export const selectContentVariants = cva([
111
- 'bg-white',
112
- 'border border-gray-200',
102
+ COLOR_BG_PRIMARY,
103
+ `border ${COLOR_BORDER_DEFAULT}`,
113
104
  'overflow-hidden',
114
- 'rounded-lg',
105
+ RADIUS_MD,
115
106
  Platform.select({
116
- web: 'shadow-lg',
107
+ web: SHADOW_MD,
117
108
  default: '',
118
109
  }),
119
110
  'max-h-60',
@@ -127,22 +118,21 @@ export const selectItemVariants = cva(
127
118
  'flex-row items-center',
128
119
  'transition-colors duration-100',
129
120
  'data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none',
130
- 'data-[state=checked]:bg-blue-50',
121
+ 'data-[state=checked]:bg-slate-50 data-[state=checked]:font-medium',
131
122
  Platform.select({
132
- default: 'data-[active=true]:bg-gray-100',
133
- web: 'data-[hover=true]:bg-gray-100 data-[active=true]:data-[hover=true]:bg-gray-200 data-[highlighted=true]:bg-blue-50',
123
+ default: 'data-[active=true]:bg-slate-100',
124
+ web: 'data-[hover=true]:bg-slate-50 data-[active=true]:data-[hover=true]:bg-slate-100 data-[highlighted=true]:bg-slate-50',
134
125
  }),
135
126
  ],
136
127
  {
137
128
  variants: {
138
129
  size: {
139
- sm: 'px-2.5 py-1.5',
140
- md: 'px-3 py-2',
141
- lg: 'px-4 py-2.5',
130
+ default: 'px-3 py-2',
131
+ small: 'px-2.5 py-1.5',
142
132
  },
143
133
  },
144
134
  defaultVariants: {
145
- size: 'md',
135
+ size: 'default',
146
136
  },
147
137
  },
148
138
  );
@@ -150,17 +140,16 @@ export const selectItemVariants = cva(
150
140
  // ── ItemLabel ───────────────────────────────────────────────
151
141
 
152
142
  export const selectItemLabelVariants = cva(
153
- ['text-gray-900', 'data-[state=checked]:font-semibold', 'data-[state=checked]:text-blue-700'],
143
+ [COLOR_TEXT_PRIMARY, 'data-[state=checked]:font-medium'],
154
144
  {
155
145
  variants: {
156
146
  size: {
157
- sm: 'text-sm',
158
- md: 'text-base',
159
- lg: 'text-lg',
147
+ default: SIZE_SCALE.default.text,
148
+ small: SIZE_SCALE.small.text,
160
149
  },
161
150
  },
162
151
  defaultVariants: {
163
- size: 'md',
152
+ size: 'default',
164
153
  },
165
154
  },
166
155
  );
@@ -16,13 +16,7 @@ export const hStackRootVariants = cva([], {
16
16
  true: 'flex-row-reverse',
17
17
  false: 'flex-row',
18
18
  },
19
- space: {
20
- xs: spaceMap.xs,
21
- sm: spaceMap.sm,
22
- md: spaceMap.md,
23
- lg: spaceMap.lg,
24
- xl: spaceMap.xl,
25
- },
19
+ space: spaceMap,
26
20
  },
27
21
  defaultVariants: {
28
22
  reversed: false,
@@ -35,13 +29,7 @@ export const vStackRootVariants = cva([], {
35
29
  true: 'flex-col-reverse',
36
30
  false: 'flex-col',
37
31
  },
38
- space: {
39
- xs: spaceMap.xs,
40
- sm: spaceMap.sm,
41
- md: spaceMap.md,
42
- lg: spaceMap.lg,
43
- xl: spaceMap.xl,
44
- },
32
+ space: spaceMap,
45
33
  },
46
34
  defaultVariants: {
47
35
  reversed: false,
@@ -3,7 +3,8 @@ import { Text as RNText } from 'react-native';
3
3
  import { cn } from '@cdx-ui/utils';
4
4
  import { textStyle, TextVariantProps } from './styles';
5
5
 
6
- export type TextProps = TextVariantProps & ComponentPropsWithoutRef<typeof RNText>;
6
+ export type TextProps = TextVariantProps &
7
+ ComponentPropsWithoutRef<typeof RNText> & { className?: string };
7
8
 
8
9
  export const Text = forwardRef<ComponentRef<typeof RNText>, TextProps>(function Text(
9
10
  { className, size = 'md', ...props },
@@ -1,11 +1,12 @@
1
1
  import { Platform } from 'react-native';
2
2
  import { cva, type VariantProps } from 'class-variance-authority';
3
+ import { COLOR_TEXT_PRIMARY } from '../../styles/primitives';
3
4
 
4
5
  export const textStyle = cva(
5
6
  [
6
- 'text-foreground font-body',
7
+ `${COLOR_TEXT_PRIMARY} font-normal`,
7
8
  Platform.select({
8
- web: 'font-sans tracking-sm my-0 bg-transparent border-0 box-border display-inline list-none margin-0 padding-0 position-relative text-start no-underline whitespace-pre-wrap word-wrap-break-word',
9
+ web: 'font-sans my-0 bg-transparent display-inline no-underline',
9
10
  default: '',
10
11
  }),
11
12
  ],
@@ -0,0 +1 @@
1
+ export * from './primitives';
@@ -0,0 +1,107 @@
1
+ // packages/components/src/styles/primitives.ts
2
+ // Semantic constants for CDX UI component styling.
3
+ // See docs/visual-revamp-plan.md for rationale and usage.
4
+
5
+ // ─── Colors ──────────────────────────────────────────────
6
+ // Surface & background
7
+ export const COLOR_BG_PRIMARY = 'bg-white';
8
+ export const COLOR_BG_SUBTLE = 'bg-slate-50';
9
+ export const COLOR_BG_MUTED = 'bg-slate-100';
10
+ export const COLOR_BG_INVERSE = 'bg-slate-900';
11
+
12
+ // Border
13
+ export const COLOR_BORDER_DEFAULT = 'border-slate-200';
14
+ export const COLOR_BORDER_STRONG = 'border-slate-300';
15
+ export const COLOR_BORDER_FOCUS = 'border-slate-900';
16
+ export const COLOR_BORDER_INVALID = 'border-red-500';
17
+
18
+ // Text
19
+ export const COLOR_TEXT_PRIMARY = 'text-slate-900';
20
+ export const COLOR_TEXT_SECONDARY = 'text-slate-500';
21
+ export const COLOR_TEXT_MUTED = 'text-slate-400';
22
+ export const COLOR_TEXT_INVERSE = 'text-white';
23
+ export const COLOR_TEXT_PLACEHOLDER = 'text-slate-400';
24
+ export const COLOR_TEXT_INVALID = 'text-red-600';
25
+
26
+ // Brand / Action
27
+ export const COLOR_BRAND_DEFAULT = 'bg-slate-900';
28
+ export const COLOR_BRAND_HOVER = 'bg-slate-800';
29
+ export const COLOR_BRAND_ACTIVE = 'bg-slate-700';
30
+
31
+ // Accent (for checked states, active indicators)
32
+ export const COLOR_ACCENT_DEFAULT = 'bg-slate-900';
33
+ export const COLOR_ACCENT_BORDER = 'border-slate-900';
34
+
35
+ // Semantic colors (danger, warning, success, info)
36
+ // Kept for Button's 5-color system
37
+ export const SEMANTIC_COLORS = {
38
+ action: {
39
+ bg: 'bg-slate-900',
40
+ bgHover: 'bg-slate-800',
41
+ bgActive: 'bg-slate-700',
42
+ border: 'border-slate-900',
43
+ text: 'text-slate-900',
44
+ ring: 'ring-slate-400/50',
45
+ },
46
+ danger: {
47
+ bg: 'bg-red-600',
48
+ bgHover: 'bg-red-700',
49
+ bgActive: 'bg-red-800',
50
+ border: 'border-red-600',
51
+ text: 'text-red-600',
52
+ ring: 'ring-red-400/50',
53
+ },
54
+ warning: {
55
+ bg: 'bg-amber-500',
56
+ bgHover: 'bg-amber-600',
57
+ bgActive: 'bg-amber-700',
58
+ border: 'border-amber-500',
59
+ text: 'text-amber-600',
60
+ ring: 'ring-amber-400/50',
61
+ },
62
+ success: {
63
+ bg: 'bg-green-600',
64
+ bgHover: 'bg-green-700',
65
+ bgActive: 'bg-green-800',
66
+ border: 'border-green-600',
67
+ text: 'text-green-600',
68
+ ring: 'ring-green-400/50',
69
+ },
70
+ info: {
71
+ bg: 'bg-sky-500',
72
+ bgHover: 'bg-sky-600',
73
+ bgActive: 'bg-sky-700',
74
+ border: 'border-sky-500',
75
+ text: 'text-sky-600',
76
+ ring: 'ring-sky-400/50',
77
+ },
78
+ } as const;
79
+
80
+ // ─── Focus ───────────────────────────────────────────────
81
+ export const FOCUS_RING = 'ring-2 ring-slate-400/50 ring-offset-2';
82
+
83
+ // ─── Radius ──────────────────────────────────────────────
84
+ export const RADIUS_SM = 'rounded-lg'; // buttons, inputs, checkboxes
85
+ export const RADIUS_MD = 'rounded-xl'; // cards, dropdowns, modals
86
+ export const RADIUS_FULL = 'rounded-full'; // pills, avatars, switches
87
+
88
+ // ─── Shadows ─────────────────────────────────────────────
89
+ export const SHADOW_SM = 'shadow-sm';
90
+ export const SHADOW_MD = 'shadow-md';
91
+
92
+ // ─── Sizing ──────────────────────────────────────────────
93
+ // Unified size scale for interactive/form components (Button, Input, Select, Checkbox).
94
+ // Only two sizes: 'default' (regular) and 'small' (compact).
95
+ // NOTE: Text and Heading use a separate typography scale (xs/sm/md/lg/xl) — not this.
96
+ export const SIZE_SCALE = {
97
+ default: { height: 'h-10', px: 'px-4', gap: 'gap-2', text: 'text-base' },
98
+ small: { height: 'h-8', px: 'px-3', gap: 'gap-1.5', text: 'text-sm' },
99
+ } as const;
100
+
101
+ // ─── Transitions ─────────────────────────────────────────
102
+ export const TRANSITION_COLORS = 'transition-colors duration-150';
103
+
104
+ // ─── Disabled ────────────────────────────────────────────
105
+ export const DISABLED_OPACITY = 'data-[disabled=true]:opacity-50';
106
+ export const DISABLED_CURSOR =
107
+ 'data-[disabled=true]:cursor-not-allowed data-[disabled=true]:pointer-events-none';