ctc-component-library 0.3.0 → 1.0.0-alpha.4

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 (235) hide show
  1. package/DESIGN.md +408 -0
  2. package/MIGRATION.md +301 -0
  3. package/README.md +41 -72
  4. package/dist/components/Alert/Alert.d.ts +14 -0
  5. package/dist/components/Alert/Alert.js +73 -0
  6. package/dist/components/Alert/index.d.ts +1 -0
  7. package/dist/components/Alert/index.js +2 -0
  8. package/dist/components/Avatar/Avatar.d.ts +5 -0
  9. package/dist/components/Avatar/Avatar.js +25 -0
  10. package/dist/components/Avatar/index.d.ts +1 -0
  11. package/dist/components/Avatar/index.js +2 -0
  12. package/dist/components/Badge/Badge.d.ts +23 -0
  13. package/dist/components/Badge/Badge.js +159 -0
  14. package/dist/components/Badge/index.d.ts +2 -0
  15. package/dist/components/Badge/index.js +2 -0
  16. package/dist/components/Button/Button.d.ts +7 -0
  17. package/dist/components/Button/Button.js +46 -0
  18. package/dist/components/Button/button.variants.d.ts +22 -0
  19. package/dist/components/Button/button.variants.js +61 -0
  20. package/dist/components/Button/index.d.ts +2 -0
  21. package/dist/components/Button/index.js +3 -0
  22. package/dist/components/Checkbox/Checkbox.d.ts +9 -0
  23. package/dist/components/Checkbox/Checkbox.js +36 -0
  24. package/dist/components/Checkbox/index.d.ts +1 -0
  25. package/dist/components/Checkbox/index.js +2 -0
  26. package/dist/components/Chip/Chip.d.ts +17 -0
  27. package/dist/components/Chip/Chip.js +59 -0
  28. package/dist/components/Chip/index.d.ts +2 -0
  29. package/dist/components/Chip/index.js +2 -0
  30. package/dist/components/Combobox/Combobox.d.ts +31 -0
  31. package/dist/components/Combobox/Combobox.js +97 -0
  32. package/dist/components/Combobox/index.d.ts +1 -0
  33. package/dist/components/Combobox/index.js +2 -0
  34. package/dist/components/DataTable/DataTable.d.ts +24 -0
  35. package/dist/components/DataTable/DataTable.js +74 -0
  36. package/dist/components/DataTable/Table.d.ts +9 -0
  37. package/dist/components/DataTable/Table.js +57 -0
  38. package/dist/components/DataTable/index.d.ts +3 -0
  39. package/dist/components/DataTable/index.js +3 -0
  40. package/dist/components/DatePicker/DatePicker.d.ts +20 -0
  41. package/dist/components/DatePicker/DatePicker.js +73 -0
  42. package/dist/components/DatePicker/index.d.ts +1 -0
  43. package/dist/components/DatePicker/index.js +2 -0
  44. package/dist/components/Dialog/Dialog.d.ts +21 -0
  45. package/dist/components/Dialog/Dialog.js +51 -0
  46. package/dist/components/Dialog/index.d.ts +1 -0
  47. package/dist/components/Dialog/index.js +2 -0
  48. package/dist/components/Field/Field.d.ts +22 -0
  49. package/dist/components/Field/Field.js +43 -0
  50. package/dist/components/Field/index.d.ts +1 -0
  51. package/dist/components/Field/index.js +2 -0
  52. package/dist/components/Icon/Icon.d.ts +7 -0
  53. package/dist/components/Icon/Icon.js +13 -0
  54. package/dist/components/Icon/index.d.ts +13 -0
  55. package/dist/components/Icon/index.js +2 -0
  56. package/dist/components/Input/Input.d.ts +41 -0
  57. package/dist/components/Input/Input.js +87 -0
  58. package/dist/components/Input/index.d.ts +1 -0
  59. package/dist/components/Input/index.js +2 -0
  60. package/dist/components/Label/Label.d.ts +3 -0
  61. package/dist/components/Label/Label.js +13 -0
  62. package/dist/components/Label/index.js +2 -0
  63. package/dist/components/MultiSelect/MultiSelect.d.ts +23 -0
  64. package/dist/components/MultiSelect/MultiSelect.js +98 -0
  65. package/dist/components/MultiSelect/index.d.ts +1 -0
  66. package/dist/components/MultiSelect/index.js +2 -0
  67. package/dist/components/NumberInput/NumberInput.d.ts +11 -0
  68. package/dist/components/NumberInput/NumberInput.js +58 -0
  69. package/dist/components/NumberInput/index.d.ts +1 -0
  70. package/dist/components/NumberInput/index.js +2 -0
  71. package/dist/components/Popover/Popover.d.ts +12 -0
  72. package/dist/components/Popover/Popover.js +20 -0
  73. package/dist/components/Popover/index.d.ts +1 -0
  74. package/dist/components/Popover/index.js +2 -0
  75. package/dist/components/RadioGroup/RadioGroup.d.ts +12 -0
  76. package/dist/components/RadioGroup/RadioGroup.js +42 -0
  77. package/dist/components/RadioGroup/index.d.ts +1 -0
  78. package/dist/components/RadioGroup/index.js +2 -0
  79. package/dist/components/Select/Select.d.ts +15 -0
  80. package/dist/components/Select/Select.js +82 -0
  81. package/dist/components/Select/index.d.ts +1 -0
  82. package/dist/components/Select/index.js +2 -0
  83. package/dist/components/Spinner/Spinner.d.ts +9 -0
  84. package/dist/components/Spinner/Spinner.js +24 -0
  85. package/dist/components/Spinner/index.d.ts +1 -0
  86. package/dist/components/Spinner/index.js +2 -0
  87. package/dist/components/Switch/Switch.d.ts +7 -0
  88. package/dist/components/Switch/Switch.js +23 -0
  89. package/dist/components/Switch/index.d.ts +1 -0
  90. package/dist/components/Switch/index.js +2 -0
  91. package/dist/components/Tabs/Tabs.d.ts +17 -0
  92. package/dist/components/Tabs/Tabs.js +78 -0
  93. package/dist/components/Tabs/index.d.ts +1 -0
  94. package/dist/components/Tabs/index.js +2 -0
  95. package/dist/components/TimePicker/TimePicker.d.ts +20 -0
  96. package/dist/components/TimePicker/TimePicker.js +62 -0
  97. package/dist/components/TimePicker/index.d.ts +1 -0
  98. package/dist/components/TimePicker/index.js +2 -0
  99. package/dist/components/Toast/Toast.d.ts +57 -0
  100. package/dist/components/Toast/Toast.js +40 -0
  101. package/dist/components/Toast/index.d.ts +1 -0
  102. package/dist/components/Toast/index.js +2 -0
  103. package/dist/components/Tooltip/Tooltip.d.ts +12 -0
  104. package/dist/components/Tooltip/Tooltip.js +23 -0
  105. package/dist/components/Tooltip/index.d.ts +1 -0
  106. package/dist/components/Tooltip/index.js +2 -0
  107. package/dist/components/Typography/Typography.d.ts +13 -0
  108. package/dist/components/Typography/Typography.js +63 -0
  109. package/dist/components/Typography/index.d.ts +1 -0
  110. package/dist/components/Typography/index.js +2 -0
  111. package/dist/lib/cn.d.ts +2 -0
  112. package/dist/lib/cn.js +6 -0
  113. package/dist/presets/SelectCountry/SelectCountry.d.ts +16 -0
  114. package/dist/presets/SelectCountry/SelectCountry.js +21 -0
  115. package/dist/presets/SelectCountry/countries.d.ts +11 -0
  116. package/dist/presets/SelectCountry/countries.js +120 -0
  117. package/dist/presets/SelectCountry/index.d.ts +2 -0
  118. package/dist/presets/SelectCountry/index.js +3 -0
  119. package/dist/presets/SelectPhone/SelectPhone.d.ts +15 -0
  120. package/dist/presets/SelectPhone/SelectPhone.js +21 -0
  121. package/dist/presets/SelectPhone/index.d.ts +2 -0
  122. package/dist/presets/SelectPhone/index.js +3 -0
  123. package/dist/presets/SelectPhone/phoneCodes.d.ts +7 -0
  124. package/dist/presets/SelectPhone/phoneCodes.js +131 -0
  125. package/dist/tailwind-preset.d.ts +10 -0
  126. package/dist/tailwind-preset.js +4 -0
  127. package/dist/test-setup.d.ts +0 -0
  128. package/dist/theme/colors.d.ts +57 -0
  129. package/dist/theme/colors.js +59 -0
  130. package/dist/theme/index.d.ts +3 -0
  131. package/dist/theme/index.js +4 -0
  132. package/dist/theme/shapes.d.ts +17 -0
  133. package/dist/theme/shapes.js +18 -0
  134. package/dist/theme/spacing.d.ts +18 -0
  135. package/dist/theme/spacing.js +19 -0
  136. package/dist/theme.css +2 -0
  137. package/llms.txt +310 -748
  138. package/package.json +193 -69
  139. package/dist/index.css +0 -1
  140. package/dist/index.d.ts +0 -9
  141. package/dist/index.es.js +0 -45363
  142. package/dist/src/commons/colors.d.ts +0 -47
  143. package/dist/src/commons/colors.es.js +0 -50
  144. package/dist/src/commons/shapes.d.ts +0 -15
  145. package/dist/src/commons/shapes.es.js +0 -18
  146. package/dist/src/commons/spacing.d.ts +0 -15
  147. package/dist/src/commons/spacing.es.js +0 -18
  148. package/dist/src/components/atoms/Avatar/Avatar.d.ts +0 -2
  149. package/dist/src/components/atoms/Avatar/index.d.ts +0 -2
  150. package/dist/src/components/atoms/Avatar/types.d.ts +0 -7
  151. package/dist/src/components/atoms/Badge/Badge.d.ts +0 -3
  152. package/dist/src/components/atoms/Badge/index.d.ts +0 -2
  153. package/dist/src/components/atoms/Badge/types.d.ts +0 -18
  154. package/dist/src/components/atoms/Button/Button.d.ts +0 -3
  155. package/dist/src/components/atoms/Button/ButtonV2.d.ts +0 -4
  156. package/dist/src/components/atoms/Button/index.d.ts +0 -4
  157. package/dist/src/components/atoms/Button/types.d.ts +0 -35
  158. package/dist/src/components/atoms/Checkbox/Checkbox.d.ts +0 -3
  159. package/dist/src/components/atoms/Checkbox/index.d.ts +0 -2
  160. package/dist/src/components/atoms/Checkbox/types.d.ts +0 -18
  161. package/dist/src/components/atoms/Datepicker/Datepicker.d.ts +0 -3
  162. package/dist/src/components/atoms/Datepicker/index.d.ts +0 -2
  163. package/dist/src/components/atoms/Datepicker/types.d.ts +0 -9
  164. package/dist/src/components/atoms/Icon/Icon.d.ts +0 -3
  165. package/dist/src/components/atoms/Icon/index.d.ts +0 -3
  166. package/dist/src/components/atoms/Icon/types.d.ts +0 -11
  167. package/dist/src/components/atoms/InputNumber/InputNumber.d.ts +0 -3
  168. package/dist/src/components/atoms/InputNumber/index.d.ts +0 -2
  169. package/dist/src/components/atoms/InputNumber/types.d.ts +0 -7
  170. package/dist/src/components/atoms/Label/Label.d.ts +0 -9
  171. package/dist/src/components/atoms/Popover/Popover.d.ts +0 -2
  172. package/dist/src/components/atoms/Popover/index.d.ts +0 -2
  173. package/dist/src/components/atoms/Popover/types.d.ts +0 -8
  174. package/dist/src/components/atoms/RadioButton/RadioButton.d.ts +0 -3
  175. package/dist/src/components/atoms/RadioButton/index.d.ts +0 -2
  176. package/dist/src/components/atoms/RadioButton/types.d.ts +0 -20
  177. package/dist/src/components/atoms/TextInput/TextInput.d.ts +0 -12
  178. package/dist/src/components/atoms/TextInput/index.d.ts +0 -1
  179. package/dist/src/components/atoms/TextInput/types.d.ts +0 -5
  180. package/dist/src/components/atoms/Timepicker/TimePicker.d.ts +0 -3
  181. package/dist/src/components/atoms/Timepicker/index.d.ts +0 -2
  182. package/dist/src/components/atoms/Timepicker/types.d.ts +0 -15
  183. package/dist/src/components/atoms/Toast/Toast.d.ts +0 -20
  184. package/dist/src/components/atoms/Toast/index.d.ts +0 -1
  185. package/dist/src/components/atoms/Toggle/Toggle.d.ts +0 -3
  186. package/dist/src/components/atoms/Toggle/index.d.ts +0 -2
  187. package/dist/src/components/atoms/Toggle/types.d.ts +0 -6
  188. package/dist/src/components/atoms/Typography/Typography.d.ts +0 -7
  189. package/dist/src/components/atoms/Typography/index.d.ts +0 -2
  190. package/dist/src/components/atoms/Typography/types.d.ts +0 -38
  191. package/dist/src/components/atoms/index.d.ts +0 -16
  192. package/dist/src/components/atoms/tooltips/Tooltip/Tooltip.d.ts +0 -2
  193. package/dist/src/components/atoms/tooltips/Tooltip/index.d.ts +0 -2
  194. package/dist/src/components/atoms/tooltips/Tooltip/types.d.ts +0 -10
  195. package/dist/src/components/atoms/tooltips/TooltipWrapper/TooltipWrapper.d.ts +0 -2
  196. package/dist/src/components/atoms/tooltips/TooltipWrapper/index.d.ts +0 -2
  197. package/dist/src/components/atoms/tooltips/TooltipWrapper/types.d.ts +0 -11
  198. package/dist/src/components/atoms/tooltips/index.d.ts +0 -2
  199. package/dist/src/components/index.d.ts +0 -3
  200. package/dist/src/components/molecules/Table/Table.d.ts +0 -3
  201. package/dist/src/components/molecules/Table/index.d.ts +0 -2
  202. package/dist/src/components/molecules/Table/types.d.ts +0 -28
  203. package/dist/src/components/molecules/alert/Alert.d.ts +0 -15
  204. package/dist/src/components/molecules/alert/index.d.ts +0 -1
  205. package/dist/src/components/molecules/dropdowns/Dropdown/Dropdown.d.ts +0 -3
  206. package/dist/src/components/molecules/dropdowns/Dropdown/index.d.ts +0 -2
  207. package/dist/src/components/molecules/dropdowns/Dropdown/types.d.ts +0 -33
  208. package/dist/src/components/molecules/dropdowns/DropdownCountry/DropdownCountry.d.ts +0 -5
  209. package/dist/src/components/molecules/dropdowns/DropdownCountry/index.d.ts +0 -1
  210. package/dist/src/components/molecules/dropdowns/DropdownFilter/DropdownFilter.d.ts +0 -3
  211. package/dist/src/components/molecules/dropdowns/DropdownFilter/index.d.ts +0 -1
  212. package/dist/src/components/molecules/dropdowns/DropdownFilter/types.d.ts +0 -38
  213. package/dist/src/components/molecules/dropdowns/DropdownMultiple/DropdownMultiple.d.ts +0 -3
  214. package/dist/src/components/molecules/dropdowns/DropdownMultiple/index.d.ts +0 -2
  215. package/dist/src/components/molecules/dropdowns/DropdownMultiple/types.d.ts +0 -11
  216. package/dist/src/components/molecules/dropdowns/DropdownPhone/DropdownPhone.d.ts +0 -6
  217. package/dist/src/components/molecules/dropdowns/DropdownPhone/index.d.ts +0 -1
  218. package/dist/src/components/molecules/dropdowns/index.d.ts +0 -5
  219. package/dist/src/components/molecules/index.d.ts +0 -4
  220. package/dist/src/components/molecules/tabs/Tab/Tab.d.ts +0 -3
  221. package/dist/src/components/molecules/tabs/Tab/index.d.ts +0 -2
  222. package/dist/src/components/molecules/tabs/Tab/types.d.ts +0 -16
  223. package/dist/src/components/molecules/tabs/TabButton/TabButton.d.ts +0 -3
  224. package/dist/src/components/molecules/tabs/TabButton/index.d.ts +0 -2
  225. package/dist/src/components/molecules/tabs/TabButton/types.d.ts +0 -15
  226. package/dist/src/components/molecules/tabs/index.d.ts +0 -2
  227. package/dist/src/components/organisms/Modal/Modal.d.ts +0 -3
  228. package/dist/src/components/organisms/Modal/ModalV2.d.ts +0 -53
  229. package/dist/src/components/organisms/Modal/index.d.ts +0 -3
  230. package/dist/src/components/organisms/Modal/types.d.ts +0 -24
  231. package/dist/src/components/organisms/index.d.ts +0 -1
  232. package/dist/src/constants/countries.d.ts +0 -7
  233. package/dist/src/hooks/useClickOutside.d.ts +0 -2
  234. package/dist/src/vite-env.d.ts +0 -1
  235. /package/dist/{src/components/atoms → components}/Label/index.d.ts +0 -0
package/llms.txt CHANGED
@@ -1,782 +1,344 @@
1
- # ctc-component-library v0.1.100
2
-
3
- > CTC's React component library built with TypeScript, SCSS, and Ant Design foundations.
4
- > Provides atoms, molecules, and organisms following atomic design principles.
5
-
6
- > Generated on 2026-03-05
7
-
8
- ## Installation & Usage
9
-
10
- ```tsx
11
- import { ComponentName } from 'ctc-component-library';
12
- import 'ctc-component-library/dist/styles.css';
13
- ```
14
-
15
- ### Theme Imports
16
-
17
- ```tsx
18
- import { colors } from 'ctc-component-library/theme/colors';
19
- import { shapes } from 'ctc-component-library/theme/shapes';
20
- import { spacing } from 'ctc-component-library/theme/spacing';
21
- ```
22
-
23
- ## Component Index
24
-
25
- ### Atoms
26
- - Avatar
27
- - Badge
28
- - Button (has V2)
29
- - Checkbox
30
- - Datepicker
31
- - Icon
32
- - InputNumber
33
- - Label
34
- - Popover
35
- - RadioButton
36
- - TextInput
37
- - Timepicker
38
- - Toast
39
- - Toggle
40
- - Typography
41
- - tooltips
42
-
43
- ### Molecules
44
- - Table
45
- - alert
46
- - dropdowns
47
- - tabs
48
-
49
- ### Organisms
50
- - Modal (has V2)
51
-
52
- ---
53
-
54
- ## Design Tokens
55
-
56
- ### Colors (`colors`)
57
-
58
- ```ts
59
- export const colors = {
60
- neutrals: {
61
- Gray100: '#171a1a',
62
- Gray80: '#303333',
63
- Gray60: '#494d4b',
64
- Gray40: '#b9bfbd',
65
- Gray20: '#edf2f0',
66
- Gray00: '#fcfffe'
67
- },
68
- mainB2B: {
69
- MainGreenDark: '#001f19',
70
- MainGreenDefault: '#1e5349',
71
- MainGreenLight: '#6be3cd',
72
- MainGreenLighter: '#d9fff5'
73
- },
74
- mainB2C: {
75
- MainBlueDark: '#1d5bbc',
76
- MainBlueDefault: '#468eff',
77
- MainBlueLight: '#abccff',
78
- MainBlueLighter: '#e2edff'
79
- },
80
- secondary: {
81
- SecondaryPurpleDark: '#9335cc',
82
- SecondayPurpleDefault: '#c15cff',
83
- SecondayPurpleLight: '#dea8ff',
84
- SecondayPurpleLighter: '#f9eeff',
85
- SecondaryOrangeDark: '#ac5734',
86
- SecondaryOrangeDefault: '#e57b43',
87
- SecondaryOrangeLight: '#ffaa7d',
88
- SecondaryOrangeLighter: '#ffefe7'
89
- },
90
- status: {
91
- ErrorMain: '#c00808',
92
- ErrorLight: '#ffe5e5',
93
- SuccessMain: '#206614',
94
- SuccessLight: '#c15cff',
95
- AlertMain: '#9f760b',
96
- AlertLight: '#fff1cc'
97
- },
98
- opacity: {
99
- Opacidad100: 1,
100
- Opacidad80: 0.8,
101
- Opacidad60: 0.6,
102
- Opacidad40: 0.4,
103
- Opacidad20: 0.2
104
- }
105
- };
106
- ```
107
-
108
- ### Shapes (`shapes`) — border-radius values in px
109
-
110
- ```ts
111
- export const shapes = {
112
- x1: 4,
113
- x2: 8,
114
- x3: 12,
115
- x4: 16,
116
- x5: 20,
117
- x6: 24,
118
- x8: 32,
119
- x10: 40,
120
- x12: 48,
121
- x14: 56,
122
- x16: 64,
123
- x18: 72,
124
- x20: 80
125
- };
126
- ```
127
-
128
- ### Spacing (`spacing`) — spacing values in px
129
-
130
- ```ts
131
- export const spacing = {
132
- x1: 4,
133
- x2: 8,
134
- x3: 12,
135
- x4: 16,
136
- x5: 20,
137
- x6: 24,
138
- x8: 32,
139
- x10: 40,
140
- x12: 48,
141
- x14: 56,
142
- x16: 64,
143
- x18: 72,
144
- x20: 80
145
- };
146
- ```
147
-
148
- ---
149
-
150
- ## Atoms
1
+ # ctc-component-library
151
2
 
152
- ### Avatar
153
-
154
- **Path:** `src/components/atoms/Avatar`
155
-
156
- **Exported types:** `AvatarProps`
157
-
158
- <details>
159
- <summary>Type definitions</summary>
3
+ > Librería de componentes React de Crack the Code — v1.0.0-alpha.4. React + TypeScript + Tailwind v4 + Radix + class-variance-authority (cva). **Solo subpath imports** (sin barrel raíz) para tree-shaking real. Este archivo se regenera en cada build desde el código fuente.
160
4
 
161
- ```typescript
162
- export interface AvatarProps {
163
- text: string;
164
- textColor?: string;
165
- dataTestid?: string;
166
- backgroundColor: string;
167
- customClassName?: string;
168
- }
169
- ```
170
-
171
- </details>
172
-
173
- ---
174
-
175
- ### Badge
5
+ ## Cómo están construidos los componentes
176
6
 
177
- **Path:** `src/components/atoms/Badge`
7
+ - **Import por subpath:** cada componente vive en su propio entrypoint, ej. `import { Button } from 'ctc-component-library/button'`. No existe `import … from 'ctc-component-library'`.
8
+ - **Theme:** importar una vez en el root del consumer: `import 'ctc-component-library/theme.css'` (tokens + base + fuentes + utilities precompiladas). Consumers con Tailwind v4 pueden además usar el preset `ctc-component-library/tw-preset`.
9
+ - **Tokens en TS:** `ctc-component-library/theme` exporta `colors`, `spacing`, `shapes` (y sus tipos) para codegen/lógica.
10
+ - **Estilos:** Tailwind v4 utility classes + `class-variance-authority` para variantes. `cn()` (clsx + tailwind-merge) para componer clases.
11
+ - **Primitivos:** los compound components (Dialog, Select, Tabs, Popover, Tooltip…) envuelven Radix UI; respetan su API de partes (Trigger/Content/…).
12
+ - **Peer deps:** React `^18.2 || ^19`, react-dom idem.
178
13
 
179
- **Exported types:** `BadgeProps`, `BadgePropsStatusText`
14
+ ## Componentes (26)
180
15
 
181
- <details>
182
- <summary>Type definitions</summary>
16
+ ### Alert
183
17
 
184
- ```typescript
185
- import { IconProps } from '../Icon/types';
18
+ - **Import:** `import { Alert, AlertTitle, AlertDescription } from 'ctc-component-library/alert'`
19
+ - **Exports:** `Alert`, `AlertTitle`, `AlertDescription`, `type AlertProps`
20
+ - **Variantes (cva):**
21
+ - `variant`: `info` | `success` | `warning` | `destructive` — default `info`
22
+ - `size`: `sm` | `lg` — default `lg`
23
+ - **AlertProps** (extends `React.HTMLAttributes<HTMLDivElement>`, `VariantProps<typeof alertVariants>`):
24
+ - `hideIcon?: boolean`
25
+ - `onDismiss?: () => void`
186
26
 
187
- export interface BadgeProps {
188
- text?: string | React.ReactNode;
189
- icon?: boolean;
190
- dataTestid?: string;
191
- type: 'quiet' | 'loud';
192
- customClassName?: string;
193
- iconType?: IconProps['type'];
194
- iconName?: IconProps['iconName'];
195
- customStyles?: React.CSSProperties;
196
- version?: 'full' | 'minimal' | 'dot';
197
- variant?: 'big' | 'medium' | 'small';
198
- status: 'active' | 'inactive' | 'risk' | 'new';
199
- }
200
-
201
- export type BadgePropsStatusText = {
202
- [key in BadgeProps['status']]: string;
203
- };
204
- ```
27
+ ### Avatar
205
28
 
206
- </details>
29
+ - **Import:** `import { Avatar, AvatarImage, AvatarFallback } from 'ctc-component-library/avatar'`
30
+ - **Exports:** `Avatar`, `AvatarImage`, `AvatarFallback`
207
31
 
208
- ---
32
+ ### Badge
33
+ Badge — pixel-perfect to Figma
34
+
35
+ - **Import:** `import { Badge, BadgeDot, BadgeMinimal } from 'ctc-component-library/badge'`
36
+ - **Exports:** `Badge`, `BadgeDot`, `BadgeMinimal`, `type BadgeProps`, `type BadgeDotProps`, `type BadgeMinimalProps`
37
+ - **Variantes (cva):**
38
+ - `variant`: `success` | `destructive` | `alert` | `purple` | `brand` | `skyblue` | `neutral` | `outline` — default `neutral`
39
+ - `tone`: `quiet` | `loud` — default `quiet`
40
+ - `size`: `sm` | `md` | `lg` — default `md`
41
+ - **BadgeProps** (extends `React.HTMLAttributes<HTMLSpanElement>`, `VariantProps<typeof badgeVariants>`):
42
+ - `icon?: React.ReactNode`
43
+ - **BadgeDotProps** (extends `React.HTMLAttributes<HTMLSpanElement>`):
44
+ - `variant?: NonNullable<BadgeProps['variant']>`
45
+ - `size?: 'sm' | 'md'`
46
+ - **BadgeMinimalProps** (extends `React.HTMLAttributes<HTMLSpanElement>`):
47
+ - `variant?: NonNullable<BadgeProps['variant']>`
48
+ - `size?: 'sm' | 'md'`
209
49
 
210
50
  ### Button
211
51
 
212
- **Path:** `src/components/atoms/Button`
213
-
214
- **Exported types:** `ButtonProps`, `ButtonPropsV2`
215
-
216
- <details>
217
- <summary>Type definitions</summary>
218
-
219
- ```typescript
220
- import { MaterialSymbol } from '@material-symbols/font-400';
221
-
222
- export interface ButtonProps {
223
- btnType?: 'button' | 'submit' | 'reset' | undefined;
224
- icon?: MaterialSymbol;
225
- text?: string;
226
- primaryVariant?: 'neutral' | 'success' | 'error';
227
- disabled?: boolean;
228
- dataTestid?: string;
229
- underline?: boolean;
230
- customBtnClassName?: string;
231
- iconPosition?: 'left' | 'right';
232
- customStyles?: React.CSSProperties;
233
- type: 'primary' | 'secondary' | 'tertiary';
234
- iconType?: 'outlined' | 'rounded' | 'sharp';
235
- size?: 'small' | 'medium' | 'big';
236
- onClick?: () => void;
237
- }
238
-
239
- // v2
240
- type PrimaryVariant = 'neutral' | 'success' | 'error' | 'skyblue';
241
-
242
- export interface ButtonPropsV2
243
- extends React.ButtonHTMLAttributes<HTMLButtonElement> {
244
- variant?: 'primary' | 'secondary' | 'tertiary';
245
- primaryVariant?: PrimaryVariant;
246
- size?: 'small' | 'medium' | 'big';
247
- disabled?: boolean;
248
- preffix?: React.ReactNode;
249
- suffix?: React.ReactNode;
250
- dataTestid?: string;
251
- loading?: boolean;
252
- iconOnly?: boolean;
253
- underline?: boolean;
254
- fullWidth?: boolean;
255
- }
256
- ```
257
-
258
- </details>
259
-
260
- > **Note:** This component has a V2 version. Prefer V2 for new implementations.
261
-
262
- ---
52
+ - **Import:** `import { Button, buttonVariants } from 'ctc-component-library/button'`
53
+ - **Exports:** `Button`, `type ButtonProps`, `buttonVariants`, `type ButtonVariants`
54
+ - **Variantes (cva):**
55
+ - `variant`: `brand` | `skyblue` | `default` | `success` | `destructive` | `outline` | `outline-skyblue` | `ghost` — default `brand`
56
+ - `size`: `sm` | `md` | `lg` — default `md`
57
+ - `iconOnly`: `true` | `false` — default `false`
58
+ - `fullWidth`: `true` | `false` — default `false`
59
+ - **ButtonProps** (extends `React.ButtonHTMLAttributes<HTMLButtonElement>`, `ButtonVariants`):
60
+ - `asChild?: boolean`
61
+ - `loading?: boolean`
263
62
 
264
63
  ### Checkbox
265
64
 
266
- **Path:** `src/components/atoms/Checkbox`
267
-
268
- **Exported types:** `CheckboxProps`
269
-
270
- <details>
271
- <summary>Type definitions</summary>
272
-
273
- ```typescript
274
- export interface CheckboxProps extends React.HTMLAttributes<HTMLInputElement> {
275
- checked?: boolean;
276
- labelPosition?: 'left' | 'right';
277
- inputSize?: 'medium' | 'small';
278
- id: string;
279
- dataTestId?: string;
280
- customClassName?: string;
281
- labelClassName?: string;
282
- checkboxClassName?: string;
283
- inputClassName?: string;
284
- customStyles?: React.CSSProperties;
285
- children?: React.ReactNode;
286
- backgroundColor?: string;
287
- borderRadius?: string;
288
- disabled?: boolean;
289
- onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
290
- }
291
- ```
292
-
293
- </details>
294
-
295
- ---
296
-
297
- ### Datepicker
298
-
299
- **Path:** `src/components/atoms/Datepicker`
300
-
301
- **Exported types:** `DatepickerProps`
302
-
303
- <details>
304
- <summary>Type definitions</summary>
305
-
306
- ```typescript
307
- import { DatePickerProps as AntDatePickerProps } from 'antd';
308
-
309
- export interface DatepickerProps extends Omit<AntDatePickerProps, 'picker'> {
310
- dataTestId?: string;
311
- disabled?: boolean;
312
- customClassName?: string;
313
- dateFormat?: string;
314
- popupCustomClassName?: string;
315
- errors?: string[] | string;
316
- }
317
- ```
318
-
319
- </details>
320
-
321
- ---
65
+ - **Import:** `import { Checkbox } from 'ctc-component-library/checkbox'`
66
+ - **Exports:** `Checkbox`, `type CheckboxProps`
67
+ - **CheckboxProps** (extends `React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Roo…`):
68
+ - `size?: 'sm' | 'lg'`
69
+ - `variant?: 'default' | 'skyblue'`
70
+
71
+ ### Chip
72
+
73
+ - **Import:** `import { Chip, ChipGroup } from 'ctc-component-library/chip'`
74
+ - **Exports:** `Chip`, `ChipGroup`, `type ChipProps`, `type DismissibleChipProps`, `type SelectableChipProps`
75
+ - **DismissibleChipProps** (extends `React.HTMLAttributes<HTMLDivElement>`):
76
+ - `variant: 'dismissible'`
77
+ - `disabled?: boolean`
78
+ - `onDismiss?: () => void`
79
+ - **SelectableChipProps** (extends `React.ButtonHTMLAttributes<HTMLButtonElement>`):
80
+ - `variant?: 'choice' | 'multi'`
81
+ - `selected?: boolean`
82
+ - **ChipProps:** `DismissibleChipProps | SelectableChipProps`
83
+ - **ChipGroupProps** (extends `React.HTMLAttributes<HTMLDivElement>`):
84
+ - `stagger?: boolean`
85
+
86
+ ### Combobox
87
+
88
+ - **Import:** `import { Combobox } from 'ctc-component-library/combobox'`
89
+ - **Exports:** `Combobox`, `type ComboboxProps`, `type ComboboxOption`
90
+ - **ComboboxProps**:
91
+ - `options: ComboboxOption[]`
92
+ - `value?: string`
93
+ - `defaultValue?: string`
94
+ - `onValueChange?: (value: string) => void`
95
+ - `placeholder?: string`
96
+ - `searchPlaceholder?: string`
97
+ - `emptyText?: string`
98
+ - `disabled?: boolean`
99
+ - `size?: 'sm' | 'lg'`
100
+ - `className?: string`
101
+ - `onSearch?: (query: string) => void`
102
+ - `searching?: boolean`
103
+ - `hasMore?: boolean`
104
+ - `onEndReached?: () => void`
105
+ - `loading?: boolean`
106
+
107
+ ### DataTable
108
+
109
+ - **Import:** `import { DataTable, Table, TableHeader, TableBody, … } from 'ctc-component-library/data-table'`
110
+ - **Exports:** `DataTable`, `type DataTableProps`, `type ExpandableConfig`, `Table`, `TableHeader`, `TableBody`, `TableFooter`, `TableHead`, `TableRow`, `TableCell`, `TableCaption`, `type ColumnDef`, `type ColumnFiltersState`, `type SortingState`
111
+ - **DataTableProps**:
112
+ - `columns: ColumnDef<T>[]`
113
+ - `data: T[]`
114
+ - `expandable?: ExpandableConfig<T>`
115
+ - `className?: string`
116
+ - `emptyText?: string`
117
+ - `loading?: boolean`
118
+ - `'data-testid'?: string`
119
+
120
+ ### DatePicker
121
+ Capitalize first letter of weekday name (e.g. "lun." → "Lun") and trim trailing periods
122
+
123
+ - **Import:** `import { DatePicker } from 'ctc-component-library/date-picker'`
124
+ - **Exports:** `DatePicker`, `type DatePickerProps`
125
+ - **DatePickerProps**:
126
+ - `value?: Date`
127
+ - `defaultValue?: Date`
128
+ - `onValueChange?: (date: Date | undefined) => void`
129
+ - `placeholder?: string`
130
+ - `disabled?: boolean`
131
+ - `locale?: string`
132
+ - `size?: 'sm' | 'lg'`
133
+ - `className?: string`
134
+ - `calendarProps?: Omit<DayPickerProps, 'mode' | 'selected' | 'onSelect'>`
135
+ - `'data-testid'?: string`
136
+
137
+ ### Dialog
138
+
139
+ - **Import:** `import { Dialog, DialogTrigger, DialogPortal, DialogClose, … } from 'ctc-component-library/dialog'`
140
+ - **Exports:** `Dialog`, `DialogTrigger`, `DialogPortal`, `DialogClose`, `DialogOverlay`, `DialogContent`, `DialogHeader`, `DialogFooter`, `DialogTitle`, `DialogDescription`, `type DialogContentProps`
141
+ - **DialogContentProps** (extends `React.ComponentPropsWithoutRef<typeof DialogPrimitive.Conte…`):
142
+ - `hideCloseButton?: boolean`
143
+
144
+ ### Field
145
+ Visual size, paired with the input it labels
146
+
147
+ - **Import:** `import { FieldGroup, Field, FieldLabel, FieldDescription, … } from 'ctc-component-library/field'`
148
+ - **Exports:** `FieldGroup`, `Field`, `FieldLabel`, `FieldDescription`, `FieldSet`, `FieldLegend`, `type FieldProps`, `type FieldLabelProps`
149
+ - **FieldProps** (extends `React.HTMLAttributes<HTMLDivElement>`):
150
+ - `asChild?: boolean`
151
+ - `'data-invalid'?: boolean`
152
+ - `'data-disabled'?: boolean`
153
+ - **FieldLabelProps** (extends `React.LabelHTMLAttributes<HTMLLabelElement>`):
154
+ - `size?: 'sm' | 'lg'`
322
155
 
323
156
  ### Icon
324
157
 
325
- **Path:** `src/components/atoms/Icon`
326
-
327
- **Exported types:** `IconProps`
328
-
329
- <details>
330
- <summary>Type definitions</summary>
331
-
332
- ```typescript
333
- import { MaterialSymbol } from '@material-symbols/font-400';
334
-
335
- export interface IconProps extends React.HTMLAttributes<HTMLSpanElement> {
336
- iconName: MaterialSymbol;
337
- customClassName?: string;
338
- type?: 'outlined' | 'rounded' | 'sharp';
339
- customStyles?: React.CSSProperties;
340
- dataTestId?: string;
341
- /** A number value translates to px */
342
- size?: string;
343
- }
344
- ```
345
-
346
- </details>
158
+ - **Import:** `import { Icon } from 'ctc-component-library/icon'`
159
+ - **Exports:** `Icon`, `type IconProps`, `type PhosphorIconType`, `type PhosphorIconProps`
160
+ - **IconProps** (extends `Omit<PhosphorIconProps, 'ref'>`):
161
+ - `icon: PhosphorIconType`
347
162
 
348
- ---
163
+ ### Input
164
+ Input — pixel-perfect to Figma spec
349
165
 
350
- ### InputNumber
351
-
352
- **Path:** `src/components/atoms/InputNumber`
353
-
354
- **Exported types:** `InputNumberProps`
355
-
356
- <details>
357
- <summary>Type definitions</summary>
358
-
359
- ```typescript
360
- import { InputProps } from 'antd';
361
-
362
- export interface InputNumberProps extends InputProps {
363
- customClassName?: string;
364
- disabled?: boolean;
365
- dataTestid?: string;
366
- numberType?: 'decimal' | 'integer';
367
- }
368
- ```
369
-
370
- </details>
371
-
372
- ---
166
+ - **Import:** `import { Input, inputVariants, InputGroup, InputGroupInput, … } from 'ctc-component-library/input'`
167
+ - **Exports:** `Input`, `inputVariants`, `InputGroup`, `InputGroupInput`, `InputGroupPrefix`, `InputGroupSuffix`, `InputGroupBadge`, `type InputProps`, `type InputGroupProps`
168
+ - **Variantes (cva):**
169
+ - `size`: `sm` | `lg` — default `sm`
170
+ - **InputProps** (extends `Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>`, `VariantProps<typeof inputVariants>`)
171
+ - **InputGroupProps** (extends `React.HTMLAttributes<HTMLDivElement>`):
172
+ - `size?: 'sm' | 'lg'`
173
+ - `disabled?: boolean`
174
+ - `invalid?: boolean`
373
175
 
374
176
  ### Label
375
177
 
376
- **Path:** `src/components/atoms/Label`
377
-
378
- <details>
379
- <summary>Type definitions</summary>
380
-
381
- ```typescript
382
- type LabelProps = PropsWithChildren<{
383
- required?: boolean;
384
- disclaimer?: React.ReactNode;
385
- requiredClassName?: string;
386
- }> &
387
- TypographyProps &
388
- React.LabelHTMLAttributes<HTMLLabelElement>;
389
- ```
390
-
391
- </details>
392
-
393
- ---
178
+ - **Import:** `import { Label } from 'ctc-component-library/label'`
179
+ - **Exports:** `Label`
180
+
181
+ ### MultiSelect
182
+
183
+ - **Import:** `import { MultiSelect } from 'ctc-component-library/multi-select'`
184
+ - **Exports:** `MultiSelect`, `type MultiSelectProps`, `type MultiSelectOption`
185
+ - **MultiSelectProps**:
186
+ - `options: MultiSelectOption[]`
187
+ - `value?: string[]`
188
+ - `defaultValue?: string[]`
189
+ - `onValueChange?: (value: string[]) => void`
190
+ - `placeholder?: string`
191
+ - `searchPlaceholder?: string`
192
+ - `emptyText?: string`
193
+ - `maxTags?: number`
194
+ - `disabled?: boolean`
195
+ - `size?: 'sm' | 'lg'`
196
+ - `className?: string`
197
+
198
+ ### NumberInput
199
+
200
+ - **Import:** `import { NumberInput } from 'ctc-component-library/number-input'`
201
+ - **Exports:** `NumberInput`, `type NumberInputProps`
202
+ - **NumberInputProps** (extends `Omit<InputProps, 'type' | 'value' | 'defaultValue' | 'onCha…`):
203
+ - `value?: number`
204
+ - `defaultValue?: number`
205
+ - `min?: number`
206
+ - `max?: number`
207
+ - `step?: number`
208
+ - `onValueChange?: (value: number | undefined) => void`
394
209
 
395
210
  ### Popover
396
211
 
397
- **Path:** `src/components/atoms/Popover`
398
-
399
- **Exported types:** `PopoverProps`
400
-
401
- <details>
402
- <summary>Type definitions</summary>
403
-
404
- ```typescript
405
- import {PopoverProps as AntDPopoverProps} from 'antd'
406
-
407
- export interface PopoverProps extends AntDPopoverProps{
408
- dataTestid?: string;
409
- customClassName?: string;
410
- children: React.ReactNode;
411
- customStyles?: React.CSSProperties;
412
- }
413
- ```
414
-
415
- </details>
416
-
417
- ---
418
-
419
- ### RadioButton
420
-
421
- **Path:** `src/components/atoms/RadioButton`
422
-
423
- **Exported types:** `RadioOption`, `RadioButtonProps`
424
-
425
- <details>
426
- <summary>Type definitions</summary>
427
-
428
- ```typescript
429
- import { RadioChangeEvent, RadioGroupProps } from 'antd';
430
-
431
- export interface RadioOption {
432
- label: string | number | boolean;
433
- value: string | number | boolean;
434
- disabled?: boolean;
435
- checked?: boolean;
436
- defaultChecked?: boolean;
437
- }
438
-
439
- export interface RadioButtonProps extends RadioGroupProps {
440
- options: RadioOption[];
441
- dataTestid?: string;
442
- disabledItem?: string;
443
- defaultCheckedItem?: string;
444
- checkedItem?: string;
445
- customClassName?: string;
446
- customStyles?: React.CSSProperties;
447
- disabledGroup?: boolean;
448
- onChange?: (e: RadioChangeEvent) => void;
449
- }
450
- ```
451
-
452
- </details>
453
-
454
- ---
455
-
456
- ### TextInput
457
-
458
- **Path:** `src/components/atoms/TextInput`
459
-
460
- **Exported types:** `InputSize`
461
-
462
- <details>
463
- <summary>Type definitions</summary>
464
-
465
- ```typescript
466
- export const INPUT_SIZE = {
467
- small: 'small',
468
- big: 'big'
469
- } as const;
470
-
471
- export type InputSize = (typeof INPUT_SIZE)[keyof typeof INPUT_SIZE];
472
- ```
473
-
474
- </details>
475
-
476
- ---
477
-
478
- ### Timepicker
479
-
480
- **Path:** `src/components/atoms/Timepicker`
481
-
482
- **Exported types:** `TimepickerProps`
483
-
484
- <details>
485
- <summary>Type definitions</summary>
486
-
487
- ```typescript
488
- export interface TimepickerProps {
489
- dataTestId?: string;
490
- disabled?: boolean;
491
- customClassName?: string;
492
- customStyles?: React.CSSProperties;
493
- time?: { hour: string | number; minutes: string | number };
494
- onTimeChange?: (newTime: {
495
- hour: string | number;
496
- minutes: string | number;
497
- }) => void;
498
- }
499
- ```
500
-
501
- </details>
502
-
503
- ---
212
+ - **Import:** `import { Popover, PopoverTrigger, PopoverAnchor, PopoverClose, … } from 'ctc-component-library/popover'`
213
+ - **Exports:** `Popover`, `PopoverTrigger`, `PopoverAnchor`, `PopoverClose`, `PopoverPortal`, `PopoverContent`, `type PopoverContentProps`
214
+ - **PopoverContentProps** (extends `React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Cont…`):
215
+ - `arrow?: boolean`
216
+
217
+ ### RadioGroup
218
+
219
+ - **Import:** `import { RadioGroup, RadioGroupItem } from 'ctc-component-library/radio-group'`
220
+ - **Exports:** `RadioGroup`, `RadioGroupItem`
221
+ - **RadioGroupProps** (extends `React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.R…`):
222
+ - `size?: 'sm' | 'lg'`
223
+ - `variant?: RadioVariant`
224
+
225
+ ### Select
226
+
227
+ - **Import:** `import { Select, SelectGroup, SelectValue, SelectTrigger, … } from 'ctc-component-library/select'`
228
+ - **Exports:** `Select`, `SelectGroup`, `SelectValue`, `SelectTrigger`, `SelectContent`, `SelectLabel`, `SelectItem`, `SelectSeparator`, `SelectScrollUpButton`, `SelectScrollDownButton`, `type SelectTriggerProps`
229
+ - **SelectTriggerProps** (extends `React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigg…`):
230
+ - `size?: 'sm' | 'lg'`
231
+
232
+ ### Spinner
233
+
234
+ - **Import:** `import { Spinner } from 'ctc-component-library/spinner'`
235
+ - **Exports:** `Spinner`, `type SpinnerProps`
236
+ - **Variantes (cva):**
237
+ - `size`: `sm` | `md` | `lg` — default `md`
238
+ - **SpinnerProps** (extends `React.SVGAttributes<SVGSVGElement>`, `VariantProps<typeof spinnerVariants>`)
239
+
240
+ ### Switch
241
+
242
+ - **Import:** `import { Switch } from 'ctc-component-library/switch'`
243
+ - **Exports:** `Switch`, `type SwitchProps`
244
+ - **SwitchProps** (extends `React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>`):
245
+ - `size?: 'sm' | 'lg'`
246
+
247
+ ### Tabs
248
+
249
+ - **Import:** `import { Tabs, TabsList, TabsTrigger, TabsContent } from 'ctc-component-library/tabs'`
250
+ - **Exports:** `Tabs`, `TabsList`, `TabsTrigger`, `TabsContent`, `type TabsProps`
251
+ - **TabsProps** (extends `React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root>`):
252
+ - `variant?: TabsVariant`
253
+ - `size?: TabsSize`
254
+ - `spacing?: TabsSpacing`
255
+
256
+ ### TimePicker
257
+
258
+ - **Import:** `import { TimePicker } from 'ctc-component-library/time-picker'`
259
+ - **Exports:** `TimePicker`, `type TimePickerProps`, `type TimeValue`
260
+ - **TimePickerProps**:
261
+ - `value?: TimeValue`
262
+ - `defaultValue?: TimeValue`
263
+ - `onValueChange?: (value: TimeValue) => void`
264
+ - `minuteStep?: number`
265
+ - `hour12?: boolean`
266
+ - `disabled?: boolean`
267
+ - `size?: 'sm' | 'lg'`
268
+ - `className?: string`
269
+ - `'data-testid'?: string`
504
270
 
505
271
  ### Toast
272
+ CTC-themed Toaster. Mount once at the root of the app
506
273
 
507
- **Path:** `src/components/atoms/Toast`
508
-
509
- <details>
510
- <summary>Type definitions</summary>
511
-
512
- ```typescript
513
- type NotificationType = 'success' | 'error' | 'loading';
274
+ - **Import:** `import { Toaster, toast } from 'ctc-component-library/toast'`
275
+ - **Exports:** `Toaster`, `toast`, `type ToasterProps`
514
276
 
515
- type Toast = Omit<ArgsProps, 'message'> & {
516
- debug?: boolean;
517
- action?: React.ReactNode;
518
- };
277
+ ### Tooltip
278
+ TooltipProvider with CTC defaults: 400ms delay before showing,
519
279
 
520
- interface ToastContextProps {
521
- toast: {
522
- contextHolder: React.ReactNode;
523
- success: (message: React.ReactNode, props?: Toast) => void;
524
- error: (message: React.ReactNode, props?: Toast) => void;
525
- loading: (message: React.ReactNode, props?: Toast) => void;
526
- close: () => void;
527
- };
528
- }
529
- ```
530
-
531
- </details>
532
-
533
- ---
534
-
535
- ### Toggle
536
-
537
- **Path:** `src/components/atoms/Toggle`
538
-
539
- **Exported types:** `ToggleProps`
540
-
541
- <details>
542
- <summary>Type definitions</summary>
543
-
544
- ```typescript
545
- import { SwitchProps } from 'antd';
546
-
547
- export interface ToggleProps extends SwitchProps {
548
- dataTestId?: string;
549
- disabled?: boolean;
550
- customClassName?: string;
551
- }
552
- ```
553
-
554
- </details>
555
-
556
- ---
280
+ - **Import:** `import { TooltipProvider, Tooltip, TooltipTrigger, TooltipPortal, … } from 'ctc-component-library/tooltip'`
281
+ - **Exports:** `TooltipProvider`, `Tooltip`, `TooltipTrigger`, `TooltipPortal`, `TooltipContent`
557
282
 
558
283
  ### Typography
559
284
 
560
- **Path:** `src/components/atoms/Typography`
561
-
562
- **Exported types:** `TypographyProps`
563
-
564
- <details>
565
- <summary>Type definitions</summary>
566
-
567
- ```typescript
568
- export interface TypographyProps extends React.HTMLAttributes<HTMLElement> {
569
- /**
570
- *
571
- * h1 - font-family: "Roca One", serif; font-weight: lighter; font-size: 56px; letter-spacing: 0,2px; line-height: 60px
572
- *
573
- * h2 - font-family: "Roca One", serif; font-weight: lighter; font-size: 48px; letter-spacing: 0,3px; line-height: 55px
574
- *
575
- * h3 - font-family: "Roca One", serif; font-weight: lighter; font-size: 34px; letter-spacing: 0,4px; line-height: 40px
576
- *
577
- * h4 - font-family: "Roca One", serif; font-weight: lighter; font-size: 24px; letter-spacing: 0.4px; line-height: 30px
578
- *
579
- * h5 - font-family: "Roca One", serif; font-weight: lighter; font-size: 20px; letter-spacing: 0.4px; line-height: 25px
580
- *
581
- * body1 - font-family: "NT Bau", sans-serif; font-weight: normal; font-size: 24px; line-height: 30px
582
- *
583
- * body2 - font-family: "NT Bau", sans-serif; font-weight: normal; font-size: 20px; line-height: 24px
584
- *
585
- * body3 - font-family: "NT Bau", sans-serif; font-weight: normal; font-size: 18px; line-height: 24px
586
- *
587
- * body4 - font-family: "NT Bau", sans-serif; font-weight: normal; font-size: 16px; line-height: 22px
588
- *
589
- * body5 - font-family: "NT Bau", sans-serif; font-weight: normal; font-size: 14px; line-height: 20px
590
- *
591
- * body6 - font-family: "NT Bau", sans-serif; font-weight: normal; font-size: 12px; line-height: 16px
592
- *
593
- * button1 - font-family: "NT Bau", sans-serif; font-weight: normal; font-size: 18px; line-height: 0px
594
- *
595
- * button2 - font-family: "NT Bau", sans-serif; font-weight: normal; font-size: 16px; line-height: 0px
596
- *
597
- */
598
- variant:
599
- | 'h1'
600
- | 'h2'
601
- | 'h3'
602
- | 'h4'
603
- | 'h5'
604
- | 'body1'
605
- | 'body2'
606
- | 'body3'
607
- | 'body4'
608
- | 'body5'
609
- | 'body6'
610
- | 'button1'
611
- | 'button2';
612
- dataTestid?: string;
613
- underline?: boolean;
614
- className?: string;
615
- customStyles?: React.CSSProperties;
616
- bolder?: boolean;
617
- }
618
- ```
619
-
620
- </details>
621
-
622
- ---
623
-
624
- ### tooltips
625
-
626
- **Path:** `src/components/atoms/tooltips`
627
-
628
- ---
629
-
630
- ## Molecules
631
-
632
- ### Table
633
-
634
- **Path:** `src/components/molecules/Table`
635
-
636
- **Exported types:** `TableExpandableConfig`, `TableProps`
637
-
638
- <details>
639
- <summary>Type definitions</summary>
640
-
641
- ```typescript
642
- import { ColumnsType } from 'antd/es/table';
643
- import { TableProps as TablePropsAntD } from 'antd';
644
- import { TablePaginationConfig } from 'antd/es/table';
645
- import { FilterValue, SorterResult } from 'antd/es/table/interface';
646
- import type { ExpandableConfig } from 'antd/es/table/interface';
647
-
648
- export type { ExpandableConfig };
649
-
650
- export interface TableExpandableConfig<T> extends ExpandableConfig<T> {
651
- expandedRowData?: (record: T) => T[];
652
- expandedRowColumns?: ColumnsType<T>;
653
- alignSubRowsWithParent?: boolean;
654
- expandedRowNestedClassName?: string;
655
- expandedRowNestedStyle?: React.CSSProperties;
656
- }
657
-
658
- export interface TableProps<T>
659
- extends Omit<TablePropsAntD<T>, 'columns' | 'data' | 'onChange'> {
660
- columns: ColumnsType<T>;
661
- heightBodyScrollable?: number;
662
- widthBodyScrollable?: number;
663
- onChange?: (
664
- pagination: TablePaginationConfig,
665
- filters: Record<string, FilterValue | null>,
666
- sorter: SorterResult<T> | SorterResult<T>[],
667
- extra: { currentDataSource: T[]; action: 'paginate' | 'sort' | 'filter' }
668
- ) => void;
669
- data: T[];
670
- dataTestid?: string;
671
- className?: string;
672
- customStyles?: React.CSSProperties;
673
- expandable?: TableExpandableConfig<T>;
674
- }
675
- ```
676
-
677
- </details>
678
-
679
- ---
680
-
681
- ### alert
682
-
683
- **Path:** `src/components/molecules/alert`
684
-
685
- **Exported types:** `AlertVariant`, `AlertSize`
686
-
687
- <details>
688
- <summary>Type definitions</summary>
689
-
690
- ```typescript
691
- type AlertVariant = 'destructive' | 'warning' | 'success' | 'info';
692
-
693
- type AlertSize = 'small' | 'big';
694
-
695
- type AlertChildrenProps<T extends React.ElementType> =
696
- React.ComponentProps<T> & {
697
- children: ReactNode;
698
- };
699
-
700
- type AlertProps = AlertChildrenProps<'div'> & {
701
- variant?: AlertVariant;
702
- size?: AlertSize;
703
- };
704
- ```
705
-
706
- </details>
707
-
708
- ---
709
-
710
- ### dropdowns
711
-
712
- **Path:** `src/components/molecules/dropdowns`
713
-
714
- ---
715
-
716
- ### tabs
717
-
718
- **Path:** `src/components/molecules/tabs`
719
-
720
- ---
721
-
722
- ## Organisms
723
-
724
- ### Modal
725
-
726
- **Path:** `src/components/organisms/Modal`
727
-
728
- **Exported types:** `ModalProps`
729
-
730
- <details>
731
- <summary>Type definitions</summary>
732
-
733
- ```typescript
734
- import { ModalProps as AntDModalProps } from 'antd';
735
-
736
- import { ButtonProps } from '../../atoms/Button/types';
737
-
738
- export interface ModalProps extends AntDModalProps {
739
- title?: string;
740
- description?: string;
741
- linkButtonUnderline?: boolean;
742
- type?: 'big' | 'small';
743
- isModalOpen: boolean;
744
- primaryButtonText?: string;
745
- primaryButtonVariant?: 'neutral' | 'success' | 'error';
746
- primaryButtonSize?: ButtonProps['size'];
747
- linkButtonText?: string;
748
- bodyContent?: React.ReactNode;
749
- bigTypeContent?: React.ReactNode;
750
- customStyles?: React.CSSProperties;
751
- primaryButtonIsDisabled?: boolean;
752
- dataTestId?: string;
753
- customClassName?: string;
754
- handlePrimaryButton?: () => void;
755
- handleLinkButton?: () => void;
756
- handleClose?: () => void;
757
- maskClosable?: boolean;
758
- }
759
- ```
760
-
761
- </details>
762
-
763
- > **Note:** This component has a V2 version. Prefer V2 for new implementations.
764
-
765
- ---
766
-
767
- ## Common Patterns
768
-
769
- ### Error handling
770
- Most form components accept `errors: string | string[]` to display validation messages.
771
-
772
- ### Sizes
773
- Most components support `size: "small" | "big"` (default: `"small"`). Buttons also support `"medium"`.
774
-
775
- ### Custom styling
776
- All components accept `customClassName` and `customStyles` for overrides.
777
-
778
- ### Testing
779
- All components expose `dataTestid` (or `dataTestId`) for test selectors.
780
-
781
- ### CSS classes
782
- BEM convention: `ctc-{component}`, `ctc-{component}--{modifier}`.
285
+ - **Import:** `import { Typography } from 'ctc-component-library/typography'`
286
+ - **Exports:** `Typography`, `type TypographyProps`
287
+ - **Variantes (cva):**
288
+ - `variant`: `h1` | `h2` | `h3` | `h4` | `h5` | `body-1` | `body-2` | `body-3` | `body-4` | `body-5` | `body-6` | `button-1` | `button-2` — default `body-4`
289
+ - `underline`: `true` | `false` — default `false`
290
+ - `bolder`: `true` | `false` — default `false`
291
+ - **TypographyProps** (extends `React.HTMLAttributes<HTMLElement>`, `VariantProps<typeof typographyVariants>`):
292
+ - `asChild?: boolean`
293
+ - `as?: keyof React.JSX.IntrinsicElements`
294
+
295
+ ## Presets (2)
296
+
297
+ Composiciones pre-armadas sobre los componentes base.
298
+
299
+ ### SelectCountry
300
+
301
+ - **Import:** `import { SelectCountry, countries } from 'ctc-component-library/select-country'`
302
+ - **Exports:** `SelectCountry`, `type SelectCountryProps`, `countries`, `type Country`
303
+ - **SelectCountryProps**:
304
+ - `value?: string`
305
+ - `defaultValue?: string`
306
+ - `onValueChange?: (code: string) => void`
307
+ - `countries?: Country[]`
308
+ - `placeholder?: string`
309
+ - `disabled?: boolean`
310
+ - `size?: 'sm' | 'lg'`
311
+ - `className?: string`
312
+
313
+ ### SelectPhone
314
+
315
+ - **Import:** `import { SelectPhone, phoneCodes } from 'ctc-component-library/select-phone'`
316
+ - **Exports:** `SelectPhone`, `type SelectPhoneProps`, `phoneCodes`, `type PhoneCode`
317
+ - **SelectPhoneProps**:
318
+ - `value?: string`
319
+ - `defaultValue?: string`
320
+ - `onValueChange?: (code: string) => void`
321
+ - `codes?: PhoneCode[]`
322
+ - `placeholder?: string`
323
+ - `disabled?: boolean`
324
+ - `size?: 'sm' | 'lg'`
325
+ - `className?: string`
326
+
327
+ ## Theme tokens
328
+
329
+ ### TS (`ctc-component-library/theme`)
330
+ - `colors`: `{"neutrals":{"Gray100":"#171a1a","Gray80":"#303333","Gray60":"#494d4b","Gray40":"#b9bfbd","Gray20":"#edf2f0","Gray00":"#fcfffe"},"primary":{"Dark":"#001f19","Default":"#1e5349","Light":"#6be3d7","Lighter":"#daf2f0"},"skyblue":{"Default":"#468eff","Hover":"#84b2fb","Lighter":"#e2f2ff"},"secondary":{"Dark":"#1d5bbc","Default":"#1d5bbc","Light":"#bfe1fc","Lighter":"#e2f2ff"},"purple":{"Dark":"#5a52ad","Default":"#756dc8","Light":"#aea7f9","Lighter":"#dddaff"},"orange":{"Dark":"#ac5734","Default":"#e57b43","Light":"#ffaa7d","Lighter":"#ffefe7"},"status":{"Error":"#c00808","ErrorHover":"#cc3939","ErrorLight":"#ffe5e5","Success":"#206614","SuccessHover":"#4c8543","SuccessLight":"#e5ffea","Alert":"#9f760b","AlertLight":"#fff1cc"},"opacity":{"Opacidad100":1,"Opacidad80":0.8,"Opacidad60":0.6,"Opacidad40":0.4,"Opacidad20":0.2}}`
331
+ - `spacing`: `{"zero":0,"x1":4,"x2":8,"x3":12,"x4":16,"x5":20,"x6":24,"x8":32,"x10":40,"x12":48,"x14":56,"x16":64,"x18":72,"x20":80}`
332
+ - `shapes`: `{"x1":4,"x2":8,"x3":12,"x4":16,"x5":20,"x6":24,"x8":32,"x10":40,"x12":48,"x14":56,"x16":64,"x18":72,"x20":80}`
333
+
334
+ ### CSS custom properties (`@theme` en theme.css)
335
+ - **color** (42): `--color-gray-100`, `--color-gray-80`, `--color-gray-60`, `--color-gray-40`, `--color-gray-20`, `--color-gray-00`, `--color-primary-dark`, `--color-primary`, `--color-primary-light`, `--color-primary-lighter`, `--color-skyblue`, `--color-skyblue-hover`, `--color-skyblue-lighter`, `--color-secondary-dark`, `--color-secondary`, `--color-secondary-light`, `--color-secondary-lighter`, `--color-purple-dark`, `--color-purple`, `--color-purple-light`, `--color-purple-lighter`, `--color-orange-dark`, `--color-orange`, `--color-orange-light`, …
336
+ - **spacing** (13): `--spacing-x1`, `--spacing-x2`, `--spacing-x3`, `--spacing-x4`, `--spacing-x5`, `--spacing-x6`, `--spacing-x8`, `--spacing-x10`, `--spacing-x12`, `--spacing-x14`, `--spacing-x16`, `--spacing-x18`, `--spacing-x20`
337
+ - **radius** (13): `--radius-x1`, `--radius-x2`, `--radius-x3`, `--radius-x4`, `--radius-x5`, `--radius-x6`, `--radius-x8`, `--radius-x10`, `--radius-x12`, `--radius-x14`, `--radius-x16`, `--radius-x18`, `--radius-x20`
338
+ - **font** (2): `--font-display`, `--font-sans`
339
+ - **motion** (22): `--ease-out`, `--ease-in-out`, `--ease-drawer`, `--ease-back`, `--duration-instant`, `--duration-fast`, `--duration-base`, `--duration-slow`, `--duration-tooltip`, `--duration-switch`, `--stagger-step`, `--press-scale`, `--modal-open-dur`, `--modal-close-dur`, `--modal-scale`, `--modal-scale-close`, `--modal-ease`, `--dropdown-open-dur`, `--dropdown-close-dur`, `--dropdown-pre-scale`, `--dropdown-closing-scale`, `--dropdown-ease`
340
+
341
+ ## Referencias
342
+
343
+ - [DESIGN.md](./DESIGN.md) — spec del design system (paletas, tipografía, escalas).
344
+ - [MIGRATION.md](./MIGRATION.md) — guía de migración v0.x → v1.