@dashforge/tw 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/README.md +45 -0
  3. package/dist/index.esm.js +3985 -476
  4. package/dist/src/components/Accordion/Accordion.d.ts.map +1 -1
  5. package/dist/src/components/Accordion/accordion.types.d.ts +7 -0
  6. package/dist/src/components/Accordion/accordion.types.d.ts.map +1 -1
  7. package/dist/src/components/Alert/Alert.d.ts +1 -1
  8. package/dist/src/components/Alert/Alert.d.ts.map +1 -1
  9. package/dist/src/components/Alert/alert.types.d.ts +17 -0
  10. package/dist/src/components/Alert/alert.types.d.ts.map +1 -1
  11. package/dist/src/components/AppShell/AppShell.d.ts.map +1 -1
  12. package/dist/src/components/AppShell/appShell.types.d.ts +7 -0
  13. package/dist/src/components/AppShell/appShell.types.d.ts.map +1 -1
  14. package/dist/src/components/Autocomplete/Autocomplete.d.ts.map +1 -1
  15. package/dist/src/components/Autocomplete/autocomplete.types.d.ts +47 -1
  16. package/dist/src/components/Autocomplete/autocomplete.types.d.ts.map +1 -1
  17. package/dist/src/components/Avatar/Avatar.d.ts.map +1 -1
  18. package/dist/src/components/Avatar/avatar.types.d.ts +17 -1
  19. package/dist/src/components/Avatar/avatar.types.d.ts.map +1 -1
  20. package/dist/src/components/Badge/Badge.d.ts.map +1 -1
  21. package/dist/src/components/Badge/badge.types.d.ts +27 -2
  22. package/dist/src/components/Badge/badge.types.d.ts.map +1 -1
  23. package/dist/src/components/Box/Box.d.ts.map +1 -1
  24. package/dist/src/components/Box/box.types.d.ts +64 -1
  25. package/dist/src/components/Box/box.types.d.ts.map +1 -1
  26. package/dist/src/components/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  27. package/dist/src/components/Breadcrumbs/breadcrumbs.types.d.ts +26 -1
  28. package/dist/src/components/Breadcrumbs/breadcrumbs.types.d.ts.map +1 -1
  29. package/dist/src/components/Button/Button.d.ts.map +1 -1
  30. package/dist/src/components/Button/button.types.d.ts +53 -1
  31. package/dist/src/components/Button/button.types.d.ts.map +1 -1
  32. package/dist/src/components/Calendar/Calendar.d.ts.map +1 -1
  33. package/dist/src/components/Calendar/calendar.types.d.ts +16 -0
  34. package/dist/src/components/Calendar/calendar.types.d.ts.map +1 -1
  35. package/dist/src/components/Card/Card.d.ts.map +1 -1
  36. package/dist/src/components/Card/card.types.d.ts +17 -0
  37. package/dist/src/components/Card/card.types.d.ts.map +1 -1
  38. package/dist/src/components/Checkbox/Checkbox.d.ts.map +1 -1
  39. package/dist/src/components/Checkbox/checkbox.types.d.ts +19 -1
  40. package/dist/src/components/Checkbox/checkbox.types.d.ts.map +1 -1
  41. package/dist/src/components/Chip/Chip.d.ts.map +1 -1
  42. package/dist/src/components/Chip/chip.types.d.ts +40 -1
  43. package/dist/src/components/Chip/chip.types.d.ts.map +1 -1
  44. package/dist/src/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -1
  45. package/dist/src/components/ConfirmDialog/confirmDialog.types.d.ts +30 -2
  46. package/dist/src/components/ConfirmDialog/confirmDialog.types.d.ts.map +1 -1
  47. package/dist/src/components/Container/Container.d.ts.map +1 -1
  48. package/dist/src/components/Container/container.types.d.ts +29 -1
  49. package/dist/src/components/Container/container.types.d.ts.map +1 -1
  50. package/dist/src/components/DataGrid/DataGrid.d.ts +1 -1
  51. package/dist/src/components/DataGrid/DataGrid.d.ts.map +1 -1
  52. package/dist/src/components/DataGrid/dataGrid.types.d.ts +124 -10
  53. package/dist/src/components/DataGrid/dataGrid.types.d.ts.map +1 -1
  54. package/dist/src/components/DatePicker/DatePicker.d.ts +1 -1
  55. package/dist/src/components/DatePicker/DatePicker.d.ts.map +1 -1
  56. package/dist/src/components/DatePicker/datePicker.types.d.ts +18 -0
  57. package/dist/src/components/DatePicker/datePicker.types.d.ts.map +1 -1
  58. package/dist/src/components/DateRangePicker/DateRangePicker.d.ts +1 -1
  59. package/dist/src/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  60. package/dist/src/components/DateRangePicker/dateRangePicker.types.d.ts +18 -0
  61. package/dist/src/components/DateRangePicker/dateRangePicker.types.d.ts.map +1 -1
  62. package/dist/src/components/DateTimePicker/DateTimePicker.d.ts +1 -1
  63. package/dist/src/components/DateTimePicker/DateTimePicker.d.ts.map +1 -1
  64. package/dist/src/components/DateTimePicker/dateTimePicker.types.d.ts +20 -0
  65. package/dist/src/components/DateTimePicker/dateTimePicker.types.d.ts.map +1 -1
  66. package/dist/src/components/Dialog/Dialog.d.ts.map +1 -1
  67. package/dist/src/components/Dialog/dialog.types.d.ts +25 -1
  68. package/dist/src/components/Dialog/dialog.types.d.ts.map +1 -1
  69. package/dist/src/components/Divider/Divider.d.ts.map +1 -1
  70. package/dist/src/components/Divider/divider.types.d.ts +37 -1
  71. package/dist/src/components/Divider/divider.types.d.ts.map +1 -1
  72. package/dist/src/components/Drawer/Drawer.d.ts +21 -0
  73. package/dist/src/components/Drawer/Drawer.d.ts.map +1 -0
  74. package/dist/src/components/Drawer/drawer.types.d.ts +311 -0
  75. package/dist/src/components/Drawer/drawer.types.d.ts.map +1 -0
  76. package/dist/src/components/Drawer/drawer.variants.d.ts +177 -0
  77. package/dist/src/components/Drawer/drawer.variants.d.ts.map +1 -0
  78. package/dist/src/components/Grid/Grid.d.ts.map +1 -1
  79. package/dist/src/components/Grid/grid.types.d.ts +16 -0
  80. package/dist/src/components/Grid/grid.types.d.ts.map +1 -1
  81. package/dist/src/components/IconButton/IconButton.d.ts.map +1 -1
  82. package/dist/src/components/IconButton/iconButton.types.d.ts +40 -1
  83. package/dist/src/components/IconButton/iconButton.types.d.ts.map +1 -1
  84. package/dist/src/components/LeftNav/LeftNav.d.ts.map +1 -1
  85. package/dist/src/components/LeftNav/leftNav.types.d.ts +26 -6
  86. package/dist/src/components/LeftNav/leftNav.types.d.ts.map +1 -1
  87. package/dist/src/components/Link/Link.d.ts +15 -0
  88. package/dist/src/components/Link/Link.d.ts.map +1 -0
  89. package/dist/src/components/Link/link.types.d.ts +169 -0
  90. package/dist/src/components/Link/link.types.d.ts.map +1 -0
  91. package/dist/src/components/Link/link.variants.d.ts +107 -0
  92. package/dist/src/components/Link/link.variants.d.ts.map +1 -0
  93. package/dist/src/components/Menu/Menu.d.ts +1 -1
  94. package/dist/src/components/Menu/Menu.d.ts.map +1 -1
  95. package/dist/src/components/Menu/menu.types.d.ts +20 -0
  96. package/dist/src/components/Menu/menu.types.d.ts.map +1 -1
  97. package/dist/src/components/NumberField/NumberField.d.ts.map +1 -1
  98. package/dist/src/components/NumberField/numberField.types.d.ts +47 -1
  99. package/dist/src/components/NumberField/numberField.types.d.ts.map +1 -1
  100. package/dist/src/components/OTPField/OTPField.d.ts.map +1 -1
  101. package/dist/src/components/OTPField/otpField.types.d.ts +35 -1
  102. package/dist/src/components/OTPField/otpField.types.d.ts.map +1 -1
  103. package/dist/src/components/Pagination/Pagination.d.ts.map +1 -1
  104. package/dist/src/components/Pagination/pagination.types.d.ts +26 -1
  105. package/dist/src/components/Pagination/pagination.types.d.ts.map +1 -1
  106. package/dist/src/components/Popover/Popover.d.ts.map +1 -1
  107. package/dist/src/components/Popover/popover.types.d.ts +29 -0
  108. package/dist/src/components/Popover/popover.types.d.ts.map +1 -1
  109. package/dist/src/components/Progress/Progress.d.ts +20 -0
  110. package/dist/src/components/Progress/Progress.d.ts.map +1 -0
  111. package/dist/src/components/Progress/progress.types.d.ts +200 -0
  112. package/dist/src/components/Progress/progress.types.d.ts.map +1 -0
  113. package/dist/src/components/Progress/progress.variants.d.ts +224 -0
  114. package/dist/src/components/Progress/progress.variants.d.ts.map +1 -0
  115. package/dist/src/components/RadioGroup/RadioGroup.d.ts.map +1 -1
  116. package/dist/src/components/RadioGroup/radioGroup.types.d.ts +25 -1
  117. package/dist/src/components/RadioGroup/radioGroup.types.d.ts.map +1 -1
  118. package/dist/src/components/Select/Select.d.ts +14 -0
  119. package/dist/src/components/Select/Select.d.ts.map +1 -0
  120. package/dist/src/components/Select/select.types.d.ts +272 -0
  121. package/dist/src/components/Select/select.types.d.ts.map +1 -0
  122. package/dist/src/components/Select/select.variants.d.ts +204 -0
  123. package/dist/src/components/Select/select.variants.d.ts.map +1 -0
  124. package/dist/src/components/Skeleton/Skeleton.d.ts.map +1 -1
  125. package/dist/src/components/Skeleton/skeleton.types.d.ts +25 -1
  126. package/dist/src/components/Skeleton/skeleton.types.d.ts.map +1 -1
  127. package/dist/src/components/Slider/Slider.d.ts +15 -0
  128. package/dist/src/components/Slider/Slider.d.ts.map +1 -0
  129. package/dist/src/components/Slider/slider.types.d.ts +268 -0
  130. package/dist/src/components/Slider/slider.types.d.ts.map +1 -0
  131. package/dist/src/components/Slider/slider.variants.d.ts +313 -0
  132. package/dist/src/components/Slider/slider.variants.d.ts.map +1 -0
  133. package/dist/src/components/Snackbar/Snackbar.d.ts.map +1 -1
  134. package/dist/src/components/Snackbar/snackbar.types.d.ts +29 -5
  135. package/dist/src/components/Snackbar/snackbar.types.d.ts.map +1 -1
  136. package/dist/src/components/Spinner/Spinner.d.ts.map +1 -1
  137. package/dist/src/components/Spinner/spinner.types.d.ts +22 -2
  138. package/dist/src/components/Spinner/spinner.types.d.ts.map +1 -1
  139. package/dist/src/components/Stack/Stack.d.ts.map +1 -1
  140. package/dist/src/components/Stack/stack.types.d.ts +53 -2
  141. package/dist/src/components/Stack/stack.types.d.ts.map +1 -1
  142. package/dist/src/components/Stack/stack.variants.d.ts +23 -0
  143. package/dist/src/components/Stack/stack.variants.d.ts.map +1 -1
  144. package/dist/src/components/Stepper/Step.d.ts +30 -0
  145. package/dist/src/components/Stepper/Step.d.ts.map +1 -0
  146. package/dist/src/components/Stepper/Stepper.d.ts +15 -0
  147. package/dist/src/components/Stepper/Stepper.d.ts.map +1 -0
  148. package/dist/src/components/Stepper/StepperContext.d.ts +8 -0
  149. package/dist/src/components/Stepper/StepperContext.d.ts.map +1 -0
  150. package/dist/src/components/Stepper/stepper.types.d.ts +358 -0
  151. package/dist/src/components/Stepper/stepper.types.d.ts.map +1 -0
  152. package/dist/src/components/Stepper/stepper.variants.d.ts +253 -0
  153. package/dist/src/components/Stepper/stepper.variants.d.ts.map +1 -0
  154. package/dist/src/components/Stepper/useStep.d.ts +53 -0
  155. package/dist/src/components/Stepper/useStep.d.ts.map +1 -0
  156. package/dist/src/components/Switch/Switch.d.ts.map +1 -1
  157. package/dist/src/components/Switch/switch.types.d.ts +44 -1
  158. package/dist/src/components/Switch/switch.types.d.ts.map +1 -1
  159. package/dist/src/components/Table/Table.d.ts +1 -1
  160. package/dist/src/components/Table/Table.d.ts.map +1 -1
  161. package/dist/src/components/Table/table.types.d.ts +103 -8
  162. package/dist/src/components/Table/table.types.d.ts.map +1 -1
  163. package/dist/src/components/Tabs/Tabs.d.ts.map +1 -1
  164. package/dist/src/components/Tabs/tabs.types.d.ts +26 -1
  165. package/dist/src/components/Tabs/tabs.types.d.ts.map +1 -1
  166. package/dist/src/components/TextField/TextField.d.ts.map +1 -1
  167. package/dist/src/components/TextField/textField.types.d.ts +30 -1
  168. package/dist/src/components/TextField/textField.types.d.ts.map +1 -1
  169. package/dist/src/components/Textarea/Textarea.d.ts.map +1 -1
  170. package/dist/src/components/Textarea/textarea.types.d.ts +51 -1
  171. package/dist/src/components/Textarea/textarea.types.d.ts.map +1 -1
  172. package/dist/src/components/TimePicker/TimePicker.d.ts +1 -1
  173. package/dist/src/components/TimePicker/TimePicker.d.ts.map +1 -1
  174. package/dist/src/components/TimePicker/timePicker.types.d.ts +18 -0
  175. package/dist/src/components/TimePicker/timePicker.types.d.ts.map +1 -1
  176. package/dist/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  177. package/dist/src/components/Tooltip/tooltip.types.d.ts +30 -0
  178. package/dist/src/components/Tooltip/tooltip.types.d.ts.map +1 -1
  179. package/dist/src/components/TopBar/TopBar.d.ts.map +1 -1
  180. package/dist/src/components/TopBar/topBar.types.d.ts +25 -1
  181. package/dist/src/components/TopBar/topBar.types.d.ts.map +1 -1
  182. package/dist/src/components/Typography/Typography.d.ts.map +1 -1
  183. package/dist/src/components/Typography/typography.types.d.ts +47 -1
  184. package/dist/src/components/Typography/typography.types.d.ts.map +1 -1
  185. package/dist/src/components/Typography/typography.variants.d.ts +2 -2
  186. package/dist/src/components/Typography/typography.variants.d.ts.map +1 -1
  187. package/dist/src/hooks/useStandaloneFieldWarning.d.ts +38 -0
  188. package/dist/src/hooks/useStandaloneFieldWarning.d.ts.map +1 -0
  189. package/dist/src/index.d.ts +61 -41
  190. package/dist/src/index.d.ts.map +1 -1
  191. package/package.json +6 -5
@@ -0,0 +1,177 @@
1
+ import { type VariantProps } from 'tailwind-variants';
2
+ /**
3
+ * `<Drawer>` variant recipe — edge-anchored sliding panel.
4
+ *
5
+ * Slots:
6
+ * - `overlay` — backdrop (rendered only when `variant='temporary'`)
7
+ * - `content` — the drawer panel itself (positioned + sized)
8
+ * - `header` — top region holding title + close button
9
+ * - `title` — the accessible heading
10
+ * - `closeButton` — the `×` button (top-right of header)
11
+ * - `body` — main scrollable content region
12
+ * - `footer` — bottom action bar (rendered when `footer` prop is set)
13
+ * - `resizeHandle` — drag handle on the free edge (rendered when `resize=true`)
14
+ *
15
+ * Axes:
16
+ * - `position` — which viewport edge the drawer anchors to. Drives the
17
+ * translate direction on open/close + which side gets a
18
+ * border.
19
+ * - `size` — bounded-axis preset (width for left/right, height for
20
+ * top/bottom). Applied programmatically in `Drawer.tsx`
21
+ * because the same size name maps to a different axis
22
+ * depending on `position`.
23
+ * - `variant` — `'temporary'` (modal, backdrop, focus trap, scroll
24
+ * lock) or `'persistent'` (non-modal, no backdrop,
25
+ * coexists with the surrounding content).
26
+ *
27
+ * Motion is gated by `prefers-reduced-motion`: slide animations collapse
28
+ * to instantaneous appear/disappear for users who opt out.
29
+ */
30
+ export declare const drawerVariants: import("tailwind-variants").TVReturnType<{
31
+ position: {
32
+ right: {
33
+ content: string[];
34
+ resizeHandle: string;
35
+ };
36
+ left: {
37
+ content: string[];
38
+ resizeHandle: string;
39
+ };
40
+ top: {
41
+ content: string[];
42
+ resizeHandle: string;
43
+ };
44
+ bottom: {
45
+ content: string[];
46
+ resizeHandle: string;
47
+ };
48
+ };
49
+ variant: {
50
+ temporary: {};
51
+ persistent: {};
52
+ sticky: {};
53
+ };
54
+ size: {
55
+ sm: {};
56
+ md: {};
57
+ lg: {};
58
+ full: {};
59
+ };
60
+ }, {
61
+ overlay: string[];
62
+ content: string[];
63
+ header: string[];
64
+ title: string;
65
+ closeButton: string[];
66
+ body: string;
67
+ footer: string[];
68
+ resizeHandle: string[];
69
+ }, undefined, {
70
+ position: {
71
+ right: {
72
+ content: string[];
73
+ resizeHandle: string;
74
+ };
75
+ left: {
76
+ content: string[];
77
+ resizeHandle: string;
78
+ };
79
+ top: {
80
+ content: string[];
81
+ resizeHandle: string;
82
+ };
83
+ bottom: {
84
+ content: string[];
85
+ resizeHandle: string;
86
+ };
87
+ };
88
+ variant: {
89
+ temporary: {};
90
+ persistent: {};
91
+ sticky: {};
92
+ };
93
+ size: {
94
+ sm: {};
95
+ md: {};
96
+ lg: {};
97
+ full: {};
98
+ };
99
+ }, {
100
+ overlay: string[];
101
+ content: string[];
102
+ header: string[];
103
+ title: string;
104
+ closeButton: string[];
105
+ body: string;
106
+ footer: string[];
107
+ resizeHandle: string[];
108
+ }, import("tailwind-variants").TVReturnType<{
109
+ position: {
110
+ right: {
111
+ content: string[];
112
+ resizeHandle: string;
113
+ };
114
+ left: {
115
+ content: string[];
116
+ resizeHandle: string;
117
+ };
118
+ top: {
119
+ content: string[];
120
+ resizeHandle: string;
121
+ };
122
+ bottom: {
123
+ content: string[];
124
+ resizeHandle: string;
125
+ };
126
+ };
127
+ variant: {
128
+ temporary: {};
129
+ persistent: {};
130
+ sticky: {};
131
+ };
132
+ size: {
133
+ sm: {};
134
+ md: {};
135
+ lg: {};
136
+ full: {};
137
+ };
138
+ }, {
139
+ overlay: string[];
140
+ content: string[];
141
+ header: string[];
142
+ title: string;
143
+ closeButton: string[];
144
+ body: string;
145
+ footer: string[];
146
+ resizeHandle: string[];
147
+ }, undefined, unknown, unknown, undefined>>;
148
+ export type DrawerVariants = VariantProps<typeof drawerVariants>;
149
+ /**
150
+ * Size presets. Each entry maps a size name to a Tailwind class for
151
+ * both the horizontal axis (used by left/right drawers → width) and the
152
+ * vertical axis (used by top/bottom drawers → height).
153
+ *
154
+ * `full` uses `w-screen` / `h-screen` for a full-viewport drawer — the
155
+ * mobile-fullscreen pattern.
156
+ *
157
+ * Values in px (approximate):
158
+ * sm → 256 (w-64) / 192 (h-48)
159
+ * md → 320 (w-80) / 288 (h-72)
160
+ * lg → 384 (w-96) / 384 (h-96)
161
+ * full → 100vw / 100vh
162
+ */
163
+ export declare const DRAWER_SIZE_PRESETS: Record<NonNullable<DrawerVariants['size']>, {
164
+ x: string;
165
+ y: string;
166
+ xPx: number;
167
+ yPx: number;
168
+ }>;
169
+ /**
170
+ * Whether a position places the drawer on a horizontal edge (left/right),
171
+ * in which case the bounded axis is width — versus a vertical edge
172
+ * (top/bottom), where the bounded axis is height. Used everywhere the
173
+ * component needs to decide whether to work with `w-*` classes and `x`
174
+ * axis coordinates, or `h-*` and `y`.
175
+ */
176
+ export declare function isHorizontalDrawer(position: NonNullable<DrawerVariants['position']>): boolean;
177
+ //# sourceMappingURL=drawer.variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer.variants.d.ts","sourceRoot":"","sources":["../../../../src/components/Drawer/drawer.variants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CA0IzB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAEjE;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EACnC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAMnD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAChD,OAAO,CAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../../../src/components/Grid/Grid.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,SAAS,EAKV,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,IAAI,mGAwGhB,CAAC"}
1
+ {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../../../src/components/Grid/Grid.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,SAAS,EAKV,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,IAAI,mGAsHhB,CAAC"}
@@ -99,5 +99,21 @@ interface GridCommonProps extends Omit<HTMLAttributes<HTMLDivElement>, 'classNam
99
99
  * `<Grid>` props — discriminated union: container OR item, never both.
100
100
  */
101
101
  export type GridProps = (GridContainerProps | GridItemProps) & GridCommonProps;
102
+ /**
103
+ * Subset of `<Grid container>` props theme-configurable via
104
+ * `theme.components.Grid.defaults` (Option C).
105
+ *
106
+ * Only container-role axes are exposed — item breakpoints (`xs`, `sm`,
107
+ * `md`, `lg`, `xl`) are per-instance responsive layout choices and are
108
+ * intentionally excluded.
109
+ */
110
+ export type GridVariantProps = Pick<GridContainerProps, 'cols' | 'spacing' | 'spacingX' | 'spacingY' | 'autoFlow'>;
111
+ declare module '@dashforge/tw-tokens' {
112
+ interface TWComponentDefaults {
113
+ Grid?: {
114
+ defaults?: Partial<GridVariantProps>;
115
+ };
116
+ }
117
+ }
102
118
  export {};
103
119
  //# sourceMappingURL=grid.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grid.types.d.ts","sourceRoot":"","sources":["../../../../src/components/Grid/grid.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEzD;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GACf,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAChD,MAAM,GACN,MAAM,CAAC;AAEX;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,SAAS,EAAE,IAAI,CAAC;IAChB,qCAAqC;IACrC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC9B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;CAChE;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,0DAA0D;IAC1D,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,oCAAoC;IACpC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,oCAAoC;IACpC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,oCAAoC;IACpC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,oCAAoC;IACpC,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED;;;GAGG;AACH,UAAU,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC;IACjF,gFAAgF;IAChF,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,kBAAkB,GAAG,aAAa,CAAC,GAAG,eAAe,CAAC"}
1
+ {"version":3,"file":"grid.types.d.ts","sourceRoot":"","sources":["../../../../src/components/Grid/grid.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEzD;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GACf,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAChD,MAAM,GACN,MAAM,CAAC;AAEX;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,SAAS,EAAE,IAAI,CAAC;IAChB,qCAAqC;IACrC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC9B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;CAChE;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,0DAA0D;IAC1D,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,oCAAoC;IACpC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,oCAAoC;IACpC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,oCAAoC;IACpC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,oCAAoC;IACpC,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED;;;GAGG;AACH,UAAU,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC;IACjF,gFAAgF;IAChF,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,kBAAkB,GAAG,aAAa,CAAC,GAAG,eAAe,CAAC;AAE/E;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,kBAAkB,EAClB,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAC1D,CAAC;AAEF,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,mBAAmB;QAC3B,IAAI,CAAC,EAAE;YACL,QAAQ,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;SACtC,CAAC;KACH;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../../src/components/IconButton/IconButton.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAY7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,UAAU,+GAgFtB,CAAC"}
1
+ {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../../src/components/IconButton/IconButton.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAY7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,UAAU,+GAkFtB,CAAC"}
@@ -3,6 +3,19 @@ import type { ClassValue } from 'tailwind-variants';
3
3
  import type { Engine } from '@dashforge/ui-core';
4
4
  import type { AccessRequirement } from '@dashforge/rbac';
5
5
  import type { ButtonVariants } from '../Button/button.variants.js';
6
+ /**
7
+ * Subset of `<IconButton>` props theme-configurable via
8
+ * `theme.components.IconButton.defaults` (Option C). Same variant axes
9
+ * as `<Button>` since IconButton reuses `buttonVariants`.
10
+ */
11
+ export type IconButtonVariantProps = Pick<ButtonVariants, 'variant' | 'color' | 'size' | 'loading'>;
12
+ declare module '@dashforge/tw-tokens' {
13
+ interface TWComponentDefaults {
14
+ IconButton?: {
15
+ defaults?: Partial<IconButtonVariantProps>;
16
+ };
17
+ }
18
+ }
6
19
  /**
7
20
  * Props for `<IconButton>`.
8
21
  *
@@ -50,7 +63,33 @@ import type { ButtonVariants } from '../Button/button.variants.js';
50
63
  * </IconButton>
51
64
  * ```
52
65
  */
53
- export interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'color' | 'children'>, Pick<ButtonVariants, 'variant' | 'color' | 'size' | 'loading'> {
66
+ export interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'color' | 'children'> {
67
+ /**
68
+ * Semantic intent role — same axis as `<Button>`, though the
69
+ * default here is `'neutral'` (icon-only surfaces usually deserve
70
+ * a subtler default variant than solid + primary).
71
+ * @default 'neutral'
72
+ */
73
+ color?: ButtonVariants['color'];
74
+ /**
75
+ * Visual treatment. Same axis as `<Button>`; default is `'ghost'`
76
+ * because icon-only actions are typically secondary.
77
+ * @default 'ghost'
78
+ */
79
+ variant?: ButtonVariants['variant'];
80
+ /**
81
+ * Square hit-area tier — matches Button's height scale so a
82
+ * `<Button size="md">` and `<IconButton size="md">` align in the
83
+ * same row.
84
+ * @default 'md'
85
+ */
86
+ size?: ButtonVariants['size'];
87
+ /**
88
+ * When `true`, replace the icon with a `<Spinner>`, short-circuit
89
+ * clicks, and set `aria-busy="true"`.
90
+ * @default false
91
+ */
92
+ loading?: ButtonVariants['loading'];
54
93
  /**
55
94
  * The icon — typically an SVG element from the consumer's icon
56
95
  * library (Lucide / Phosphor / Tabler / inline SVG). A single
@@ -1 +1 @@
1
- {"version":3,"file":"iconButton.types.d.ts","sourceRoot":"","sources":["../../../../src/components/IconButton/iconButton.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,WAAW,eACf,SAAQ,IAAI,CACR,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,OAAO,GAAG,UAAU,CACrB,EACD,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAChE;;;;OAIG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAE3B;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAE1C;;;OAGG;IACH,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB"}
1
+ {"version":3,"file":"iconButton.types.d.ts","sourceRoot":"","sources":["../../../../src/components/IconButton/iconButton.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,cAAc,EACd,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CACzC,CAAC;AAEF,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,mBAAmB;QAC3B,UAAU,CAAC,EAAE;YACX,QAAQ,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;SAC5C,CAAC;KACH;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,WAAW,eACf,SAAQ,IAAI,CACR,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,OAAO,GAAG,UAAU,CACrB;IACH;;;;;OAKG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAEhC;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAEpC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAE9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAEpC;;;;OAIG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAE3B;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAE1C;;;OAGG;IACH,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"LeftNav.d.ts","sourceRoot":"","sources":["../../../../src/components/LeftNav/LeftNav.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,oBAAoB,CAAC;AA+M5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,2CAkF1C"}
1
+ {"version":3,"file":"LeftNav.d.ts","sourceRoot":"","sources":["../../../../src/components/LeftNav/LeftNav.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,oBAAoB,CAAC;AAiN5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,2CAqF1C"}
@@ -1,6 +1,19 @@
1
1
  import type { ReactNode, ComponentType, AnchorHTMLAttributes, Ref } from 'react';
2
2
  import type { AccessRequirement } from '@dashforge/rbac';
3
3
  import type { LeftNavVariants } from './leftNav.variants.js';
4
+ /**
5
+ * Subset of `<LeftNav>` props theme-configurable via
6
+ * `theme.components.LeftNav.defaults` (Option C).
7
+ */
8
+ export type LeftNavVariantProps = Pick<LeftNavVariants, 'width' | 'collapsed'>;
9
+ declare module '@dashforge/tw-tokens' {
10
+ interface TWComponentDefaults {
11
+ LeftNav?: {
12
+ defaults?: Partial<LeftNavVariantProps>;
13
+ slotProps?: LeftNavSlotProps;
14
+ };
15
+ }
16
+ }
4
17
  /**
5
18
  * One row in the LeftNav. May be either a clickable item OR a group
6
19
  * (a header that owns nested children, optionally collapsible).
@@ -105,15 +118,22 @@ export interface LeftNavSlotProps {
105
118
  * component renders the actual nav content and exposes a `collapsed`
106
119
  * prop for the icon-only "rail" rendering.
107
120
  */
108
- export interface LeftNavProps extends LeftNavVariants {
121
+ export interface LeftNavProps {
122
+ /**
123
+ * Expanded-mode width tier — sm:w-48, md:w-60, lg:w-72.
124
+ * @default 'md'
125
+ */
126
+ width?: LeftNavVariants['width'];
127
+ /**
128
+ * Rail mode — icons only, labels visually hidden but kept in DOM
129
+ * for a11y (`sr-only`). Group children collapse under a caret.
130
+ * @default false
131
+ */
132
+ collapsed?: LeftNavVariants['collapsed'];
133
+ /** Nav items — a mix of `LeftNavItem` and `LeftNavGroup`. */
109
134
  items: LeftNavNode[];
110
135
  /** Currently-active item id (highlight + `aria-current="page"`). */
111
136
  activeId?: string;
112
- /**
113
- * Icon-only rail mode. When `true`, labels and group children are
114
- * visually hidden (kept for screen readers via `sr-only`).
115
- */
116
- collapsed?: boolean;
117
137
  /** Fired when the user clicks the collapse-toggle button. */
118
138
  onCollapseChange?: (collapsed: boolean) => void;
119
139
  /** Fired when a group's expanded state changes (controlled or not). */
@@ -1 +1 @@
1
- {"version":3,"file":"leftNav.types.d.ts","sourceRoot":"","sources":["../../../../src/components/LeftNav/leftNav.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"leftNav.types.d.ts","sourceRoot":"","sources":["../../../../src/components/LeftNav/leftNav.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { LinkProps } from './link.types.js';
2
+ /**
3
+ * Dashforge TW `<Link>` — token-driven anchor primitive.
4
+ *
5
+ * Every visual axis (color / underline / weight / size) is
6
+ * theme-configurable via `theme.components.Link.defaults` (Option C),
7
+ * so a DS "Link is primary + semibold + uppercase" specification lives
8
+ * in the theme, not in every JSX call site. A bare `<Link>text</Link>`
9
+ * inherits that identity everywhere.
10
+ *
11
+ * See {@link LinkProps} for the full API surface and the router-
12
+ * integration example via `asChild`.
13
+ */
14
+ export declare const Link: import("react").ForwardRefExoticComponent<LinkProps & import("react").RefAttributes<HTMLAnchorElement>>;
15
+ //# sourceMappingURL=Link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../../src/components/Link/Link.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,IAAI,yGAqGf,CAAC"}
@@ -0,0 +1,169 @@
1
+ import type { AnchorHTMLAttributes, ReactNode } from 'react';
2
+ import type { LinkVariants } from './link.variants.js';
3
+ /**
4
+ * Subset of `<Link>` props theme-configurable via
5
+ * `theme.components.Link.defaults` (Option C).
6
+ */
7
+ export type LinkVariantProps = Pick<LinkVariants, 'color' | 'underline' | 'weight' | 'size'>;
8
+ /**
9
+ * Per-slot override map. Each entry accepts a `{ className?: string }`
10
+ * merged via `tailwind-merge` at render time.
11
+ *
12
+ * Slots:
13
+ * - `root` — the `<a>` (or, with `asChild`, the polymorphic
14
+ * host). `sx` is a shortcut for `slotProps.root.className`.
15
+ * - `startIcon` — the leading icon wrapper (`<span>` inline-flex).
16
+ * - `endIcon` — the trailing icon wrapper (`<span>` inline-flex).
17
+ */
18
+ export interface LinkSlotProps {
19
+ root?: {
20
+ className?: string;
21
+ };
22
+ startIcon?: {
23
+ className?: string;
24
+ };
25
+ endIcon?: {
26
+ className?: string;
27
+ };
28
+ }
29
+ declare module '@dashforge/tw-tokens' {
30
+ interface TWComponentDefaults {
31
+ Link?: {
32
+ defaults?: Partial<LinkVariantProps>;
33
+ slotProps?: LinkSlotProps;
34
+ };
35
+ }
36
+ }
37
+ /**
38
+ * Props for `<Link>` — the token-driven anchor primitive.
39
+ *
40
+ * Every visual axis is opt-in AND `theme.components.Link.defaults`
41
+ * configurable, so a DS that says "Link is primary + semibold +
42
+ * uppercase" writes it once in the theme and bare `<Link>text</Link>`
43
+ * renders that identity everywhere. No hardcoded design language
44
+ * inside the component.
45
+ *
46
+ * Precedence (lowest → highest):
47
+ * 1. `defaultVariants` in `linkVariants` (primary / hover / normal / md).
48
+ * 2. `theme.components.Link.defaults`.
49
+ * 3. Instance props (`<Link color="danger">`).
50
+ * 4. `sx` (tailwind-merge, last).
51
+ *
52
+ * @example Minimal
53
+ * ```tsx
54
+ * <Link href="/dashboard">Go to dashboard</Link>
55
+ * ```
56
+ *
57
+ * @example Theme-driven DS identity (Option C)
58
+ * ```tsx
59
+ * patchTheme({
60
+ * components: {
61
+ * Link: {
62
+ * defaults: { color: 'primary', weight: 'semibold', underline: 'always', size: 'sm' },
63
+ * },
64
+ * },
65
+ * });
66
+ * // then anywhere:
67
+ * <Link href="/x">go to page</Link>
68
+ * ```
69
+ *
70
+ * @example With optional icons
71
+ * ```tsx
72
+ * <Link href="/docs" endIcon={<ChevronRight size={14} />}>Read docs</Link>
73
+ * <Link href="/logo" startIcon={<img src="https://s3.example.com/logo.svg" width={16} alt="" />}>Brand</Link>
74
+ * ```
75
+ *
76
+ * @example External — no auto-glyph; the dev owns the visual affordance
77
+ * ```tsx
78
+ * <Link href="https://external.example.com" external endIcon={<ExternalLinkIcon size={12} />}>
79
+ * Docs
80
+ * </Link>
81
+ * ```
82
+ *
83
+ * @example Router integration via `asChild` (Radix Slot pattern)
84
+ * ```tsx
85
+ * <Link asChild color="primary" underline="hover">
86
+ * <NextLink to="/settings">Settings</NextLink>
87
+ * </Link>
88
+ * // The <NextLink> receives Link's classes directly — no wrapping <a>.
89
+ * ```
90
+ */
91
+ export interface LinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className' | 'color'> {
92
+ /**
93
+ * Color intent. `inherit` opts out for links on coloured surfaces.
94
+ * @default (theme.components.Link.defaults.color ?? 'primary')
95
+ */
96
+ color?: LinkVariants['color'];
97
+ /**
98
+ * Underline behavior. `always` for prose, `hover` for buttons/nav,
99
+ * `none` for icon-heavy links where the underline would be visual noise.
100
+ * @default (theme.components.Link.defaults.underline ?? 'hover')
101
+ */
102
+ underline?: LinkVariants['underline'];
103
+ /**
104
+ * Font weight override. Matches Typography's `weight`.
105
+ * @default (theme.components.Link.defaults.weight ?? 'normal')
106
+ */
107
+ weight?: LinkVariants['weight'];
108
+ /**
109
+ * Font size step. Matches Typography's caption / body / subtitle scale.
110
+ * @default (theme.components.Link.defaults.size ?? 'md')
111
+ */
112
+ size?: LinkVariants['size'];
113
+ /**
114
+ * Icon rendered BEFORE the link text. Accepts any `ReactNode` —
115
+ * a lucide/Radix icon, an inline `<svg>`, an `<img src="...">`
116
+ * (S3 / CDN URL included). Ignored when `asChild` is true (the
117
+ * consumer child renders its own content).
118
+ */
119
+ startIcon?: ReactNode;
120
+ /**
121
+ * Icon rendered AFTER the link text. Same acceptance as `startIcon`.
122
+ * Common uses: chevron, external-link glyph, download icon. Ignored
123
+ * when `asChild` is true.
124
+ */
125
+ endIcon?: ReactNode;
126
+ /**
127
+ * When true, applies `target="_blank"` + `rel="noopener noreferrer"`
128
+ * on the rendered `<a>`. Consumer-supplied `target` / `rel` on the
129
+ * same instance are honoured (not overwritten).
130
+ *
131
+ * **Does NOT append any visual glyph** — the caller owns that choice.
132
+ * Pass an icon via `endIcon` for the standard `↗` affordance.
133
+ *
134
+ * @default false
135
+ */
136
+ external?: boolean;
137
+ /**
138
+ * Radix Slot polymorphism. When true, the Link's styles paint onto
139
+ * the single React child (matching the pattern used by
140
+ * `<Button asChild>`, `<Chip asChild>`, etc.). Idiomatic for router
141
+ * integration:
142
+ *
143
+ * ```tsx
144
+ * <Link asChild>
145
+ * <NextLink to="/x">Go</NextLink>
146
+ * </Link>
147
+ * ```
148
+ *
149
+ * With `asChild=true`, `startIcon` / `endIcon` are ignored — the
150
+ * consumer child renders its own content and the Slot has no seam to
151
+ * inject a wrapper.
152
+ *
153
+ * @default false
154
+ */
155
+ asChild?: boolean;
156
+ /**
157
+ * Utility-class escape hatch. Appended to the variant chain and
158
+ * resolved via `tailwind-merge` so consumer classes win over the
159
+ * variant defaults on the same axis (Dashforge idiom).
160
+ */
161
+ sx?: string;
162
+ /**
163
+ * Per-slot overrides. Each slot accepts a `{ className?: string }`
164
+ * override — see the `LinkSlotProps` type for the three slot names
165
+ * (`root`, `startIcon`, `endIcon`).
166
+ */
167
+ slotProps?: LinkSlotProps;
168
+ }
169
+ //# sourceMappingURL=link.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.types.d.ts","sourceRoot":"","sources":["../../../../src/components/Link/link.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,YAAY,EACZ,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAC1C,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,SAAS,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC;AAED,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,mBAAmB;QAC3B,IAAI,CAAC,EAAE;YACL,QAAQ,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACrC,SAAS,CAAC,EAAE,aAAa,CAAC;SAC3B,CAAC;KACH;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAM,WAAW,SACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IAC5E;;;OAGG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAE9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAEtC;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEhC;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAE5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ;;;;OAIG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B"}
@@ -0,0 +1,107 @@
1
+ import { type VariantProps } from 'tailwind-variants';
2
+ /**
3
+ * `linkVariants` — the token-driven recipe for `<Link>`.
4
+ *
5
+ * Every axis maps to Dashforge palette tokens routed through
6
+ * `dashforgePreset()`. The DS anchors visual identity via
7
+ * `theme.components.Link.defaults` (Option C): once the design system
8
+ * defines "Link is primary, semibold, always-underlined at size sm",
9
+ * a bare `<Link>text</Link>` renders exactly that — no per-instance
10
+ * repetition.
11
+ *
12
+ * Axes:
13
+ * - `color` — palette intent. Matches `Typography.color` so a
14
+ * Link inside a paragraph inherits the same intent
15
+ * language. `inherit` opts out (used when the link
16
+ * sits on a coloured surface and should paint the
17
+ * surface text colour).
18
+ * - `underline` — `always` (persistent), `hover` (on hover/focus),
19
+ * `none` (never). Persistent underline is idiomatic
20
+ * for prose; `hover` is idiomatic for buttons/nav.
21
+ * - `weight` — font-weight step. Overlaps intentionally with
22
+ * Typography's `weight`.
23
+ * - `size` — font-size step, matches Typography scale
24
+ * (`text-xs → text-lg`).
25
+ *
26
+ * `dark:` variants are applied on the color palettes (except `neutral`,
27
+ * which auto-inverts via the preset CSS-var swap — double-inverting it
28
+ * would break dark mode) — same rationale as `Typography` and `Chip`.
29
+ */
30
+ export declare const linkVariants: import("tailwind-variants").TVReturnType<{
31
+ color: {
32
+ inherit: string;
33
+ primary: string;
34
+ secondary: string;
35
+ neutral: string;
36
+ muted: string;
37
+ };
38
+ underline: {
39
+ always: string;
40
+ hover: string;
41
+ none: string;
42
+ };
43
+ weight: {
44
+ normal: string;
45
+ medium: string;
46
+ semibold: string;
47
+ bold: string;
48
+ };
49
+ size: {
50
+ xs: string;
51
+ sm: string;
52
+ md: string;
53
+ lg: string;
54
+ };
55
+ }, undefined, string[], {
56
+ color: {
57
+ inherit: string;
58
+ primary: string;
59
+ secondary: string;
60
+ neutral: string;
61
+ muted: string;
62
+ };
63
+ underline: {
64
+ always: string;
65
+ hover: string;
66
+ none: string;
67
+ };
68
+ weight: {
69
+ normal: string;
70
+ medium: string;
71
+ semibold: string;
72
+ bold: string;
73
+ };
74
+ size: {
75
+ xs: string;
76
+ sm: string;
77
+ md: string;
78
+ lg: string;
79
+ };
80
+ }, undefined, import("tailwind-variants").TVReturnType<{
81
+ color: {
82
+ inherit: string;
83
+ primary: string;
84
+ secondary: string;
85
+ neutral: string;
86
+ muted: string;
87
+ };
88
+ underline: {
89
+ always: string;
90
+ hover: string;
91
+ none: string;
92
+ };
93
+ weight: {
94
+ normal: string;
95
+ medium: string;
96
+ semibold: string;
97
+ bold: string;
98
+ };
99
+ size: {
100
+ xs: string;
101
+ sm: string;
102
+ md: string;
103
+ lg: string;
104
+ };
105
+ }, undefined, string[], unknown, unknown, undefined>>;
106
+ export type LinkVariants = VariantProps<typeof linkVariants>;
107
+ //# sourceMappingURL=link.variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.variants.d.ts","sourceRoot":"","sources":["../../../../src/components/Link/link.variants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDA8CvB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC"}