@rfdtech/components 1.7.0 → 1.12.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 (238) hide show
  1. package/README.md +454 -17
  2. package/dist/components/app-header/AppHeader.d.ts +5 -0
  3. package/dist/components/app-header/AppHeader.d.ts.map +1 -0
  4. package/dist/components/app-header/AppHeader.test.d.ts +2 -0
  5. package/dist/components/app-header/AppHeader.test.d.ts.map +1 -0
  6. package/dist/components/app-header/AppHeaderNotifications.d.ts +3 -0
  7. package/dist/components/app-header/AppHeaderNotifications.d.ts.map +1 -0
  8. package/dist/components/app-header/AppHeaderProfile.d.ts +3 -0
  9. package/dist/components/app-header/AppHeaderProfile.d.ts.map +1 -0
  10. package/dist/components/app-header/AppHeaderSearch.d.ts +4 -0
  11. package/dist/components/app-header/AppHeaderSearch.d.ts.map +1 -0
  12. package/dist/components/app-header/index.d.ts +6 -0
  13. package/dist/components/app-header/index.d.ts.map +1 -0
  14. package/dist/components/app-layout/AppBody.d.ts +7 -0
  15. package/dist/components/app-layout/AppBody.d.ts.map +1 -0
  16. package/dist/components/app-layout/AppLayout.d.ts +8 -0
  17. package/dist/components/app-layout/AppLayout.d.ts.map +1 -0
  18. package/dist/components/app-layout/AppLayout.test.d.ts +2 -0
  19. package/dist/components/app-layout/AppLayout.test.d.ts.map +1 -0
  20. package/dist/components/app-layout/AppSidebar.d.ts +8 -0
  21. package/dist/components/app-layout/AppSidebar.d.ts.map +1 -0
  22. package/dist/components/app-layout/index.d.ts +7 -0
  23. package/dist/components/app-layout/index.d.ts.map +1 -0
  24. package/dist/components/bulk-import-modal/BulkImportModal.d.ts.map +1 -1
  25. package/dist/components/bulk-import-modal/hooks/useBulkImportFlow.d.ts.map +1 -1
  26. package/dist/components/bulk-import-modal/steps/MatchColumnsStep.d.ts.map +1 -1
  27. package/dist/components/bulk-import-modal/steps/ValidateDataStep.d.ts.map +1 -1
  28. package/dist/components/card/Card.d.ts +4 -0
  29. package/dist/components/card/Card.d.ts.map +1 -0
  30. package/dist/components/card/Card.test.d.ts +2 -0
  31. package/dist/components/card/Card.test.d.ts.map +1 -0
  32. package/dist/components/card/index.d.ts +3 -0
  33. package/dist/components/card/index.d.ts.map +1 -0
  34. package/dist/components/command/Command.d.ts.map +1 -1
  35. package/dist/components/country-selector/CountrySelector.d.ts +4 -0
  36. package/dist/components/country-selector/CountrySelector.d.ts.map +1 -0
  37. package/dist/components/country-selector/CountrySelector.test.d.ts +2 -0
  38. package/dist/components/country-selector/CountrySelector.test.d.ts.map +1 -0
  39. package/dist/components/country-selector/index.d.ts +3 -0
  40. package/dist/components/country-selector/index.d.ts.map +1 -0
  41. package/dist/components/date-range-selector/DateRangeSelector.d.ts +5 -0
  42. package/dist/components/date-range-selector/DateRangeSelector.d.ts.map +1 -0
  43. package/dist/components/date-range-selector/DateRangeSelector.test.d.ts +2 -0
  44. package/dist/components/date-range-selector/DateRangeSelector.test.d.ts.map +1 -0
  45. package/dist/components/date-range-selector/index.d.ts +3 -0
  46. package/dist/components/date-range-selector/index.d.ts.map +1 -0
  47. package/dist/components/date-selector/DateSelector.d.ts +4 -0
  48. package/dist/components/date-selector/DateSelector.d.ts.map +1 -0
  49. package/dist/components/date-selector/DateSelector.test.d.ts +2 -0
  50. package/dist/components/date-selector/DateSelector.test.d.ts.map +1 -0
  51. package/dist/components/date-selector/index.d.ts +3 -0
  52. package/dist/components/date-selector/index.d.ts.map +1 -0
  53. package/dist/components/dialog/Dialog.d.ts +4 -1
  54. package/dist/components/dialog/Dialog.d.ts.map +1 -1
  55. package/dist/components/dialog/index.d.ts +2 -2
  56. package/dist/components/dialog/index.d.ts.map +1 -1
  57. package/dist/components/draggable/Draggable.d.ts +5 -0
  58. package/dist/components/draggable/Draggable.d.ts.map +1 -0
  59. package/dist/components/draggable/Draggable.test.d.ts +2 -0
  60. package/dist/components/draggable/Draggable.test.d.ts.map +1 -0
  61. package/dist/components/draggable/DraggableContext.d.ts +16 -0
  62. package/dist/components/draggable/DraggableContext.d.ts.map +1 -0
  63. package/dist/components/draggable/hooks/clampPosition.d.ts +10 -0
  64. package/dist/components/draggable/hooks/clampPosition.d.ts.map +1 -0
  65. package/dist/components/draggable/hooks/clampPosition.test.d.ts +2 -0
  66. package/dist/components/draggable/hooks/clampPosition.test.d.ts.map +1 -0
  67. package/dist/components/draggable/hooks/useDraggable.d.ts +3 -0
  68. package/dist/components/draggable/hooks/useDraggable.d.ts.map +1 -0
  69. package/dist/components/draggable/index.d.ts +6 -0
  70. package/dist/components/draggable/index.d.ts.map +1 -0
  71. package/dist/components/dropdown/Dropdown.d.ts +1 -1
  72. package/dist/components/dropdown/Dropdown.d.ts.map +1 -1
  73. package/dist/components/field/Field.d.ts +8 -0
  74. package/dist/components/field/Field.d.ts.map +1 -0
  75. package/dist/components/field/Field.test.d.ts +2 -0
  76. package/dist/components/field/Field.test.d.ts.map +1 -0
  77. package/dist/components/field/FieldContext.d.ts +4 -0
  78. package/dist/components/field/FieldContext.d.ts.map +1 -0
  79. package/dist/components/field/index.d.ts +3 -0
  80. package/dist/components/field/index.d.ts.map +1 -0
  81. package/dist/components/form/Form.d.ts +6 -0
  82. package/dist/components/form/Form.d.ts.map +1 -0
  83. package/dist/components/form/Form.test.d.ts +2 -0
  84. package/dist/components/form/Form.test.d.ts.map +1 -0
  85. package/dist/components/form/FormFieldContext.d.ts +5 -0
  86. package/dist/components/form/FormFieldContext.d.ts.map +1 -0
  87. package/dist/components/form/index.d.ts +3 -0
  88. package/dist/components/form/index.d.ts.map +1 -0
  89. package/dist/components/input/Input.d.ts +4 -0
  90. package/dist/components/input/Input.d.ts.map +1 -0
  91. package/dist/components/input/Input.test.d.ts +2 -0
  92. package/dist/components/input/Input.test.d.ts.map +1 -0
  93. package/dist/components/input/index.d.ts +3 -0
  94. package/dist/components/input/index.d.ts.map +1 -0
  95. package/dist/components/metric-card/MetricCard.d.ts +4 -0
  96. package/dist/components/metric-card/MetricCard.d.ts.map +1 -0
  97. package/dist/components/metric-card/MetricCard.test.d.ts +2 -0
  98. package/dist/components/metric-card/MetricCard.test.d.ts.map +1 -0
  99. package/dist/components/metric-card/index.d.ts +3 -0
  100. package/dist/components/metric-card/index.d.ts.map +1 -0
  101. package/dist/components/network-operator/NetworkOperator.d.ts +4 -0
  102. package/dist/components/network-operator/NetworkOperator.d.ts.map +1 -0
  103. package/dist/components/network-operator/NetworkOperator.test.d.ts +2 -0
  104. package/dist/components/network-operator/NetworkOperator.test.d.ts.map +1 -0
  105. package/dist/components/network-operator/index.d.ts +3 -0
  106. package/dist/components/network-operator/index.d.ts.map +1 -0
  107. package/dist/components/otp-input/OtpInput.d.ts +4 -0
  108. package/dist/components/otp-input/OtpInput.d.ts.map +1 -0
  109. package/dist/components/otp-input/OtpInput.test.d.ts +2 -0
  110. package/dist/components/otp-input/OtpInput.test.d.ts.map +1 -0
  111. package/dist/components/otp-input/index.d.ts +3 -0
  112. package/dist/components/otp-input/index.d.ts.map +1 -0
  113. package/dist/components/phone-number-input/PhoneNumberInput.d.ts +4 -0
  114. package/dist/components/phone-number-input/PhoneNumberInput.d.ts.map +1 -0
  115. package/dist/components/phone-number-input/PhoneNumberInput.test.d.ts +2 -0
  116. package/dist/components/phone-number-input/PhoneNumberInput.test.d.ts.map +1 -0
  117. package/dist/components/phone-number-input/index.d.ts +3 -0
  118. package/dist/components/phone-number-input/index.d.ts.map +1 -0
  119. package/dist/components/sidebar/Sidebar.d.ts +2 -1
  120. package/dist/components/sidebar/Sidebar.d.ts.map +1 -1
  121. package/dist/components/sidebar/index.d.ts +2 -2
  122. package/dist/components/sidebar/index.d.ts.map +1 -1
  123. package/dist/components/sortable/Sortable.d.ts +7 -0
  124. package/dist/components/sortable/Sortable.d.ts.map +1 -0
  125. package/dist/components/sortable/Sortable.test.d.ts +2 -0
  126. package/dist/components/sortable/Sortable.test.d.ts.map +1 -0
  127. package/dist/components/sortable/SortableContext.d.ts +32 -0
  128. package/dist/components/sortable/SortableContext.d.ts.map +1 -0
  129. package/dist/components/sortable/hooks/useSortableDragEnd.d.ts +3 -0
  130. package/dist/components/sortable/hooks/useSortableDragEnd.d.ts.map +1 -0
  131. package/dist/components/sortable/hooks/useSortableDragEnd.test.d.ts +2 -0
  132. package/dist/components/sortable/hooks/useSortableDragEnd.test.d.ts.map +1 -0
  133. package/dist/components/sortable/index.d.ts +4 -0
  134. package/dist/components/sortable/index.d.ts.map +1 -0
  135. package/dist/components/table/Table.d.ts +26 -0
  136. package/dist/components/table/Table.d.ts.map +1 -0
  137. package/dist/components/table/Table.test.d.ts +2 -0
  138. package/dist/components/table/Table.test.d.ts.map +1 -0
  139. package/dist/components/table/TableBulkActions.d.ts +3 -0
  140. package/dist/components/table/TableBulkActions.d.ts.map +1 -0
  141. package/dist/components/table/TableContext.d.ts +6 -0
  142. package/dist/components/table/TableContext.d.ts.map +1 -0
  143. package/dist/components/table/TableHeader.d.ts +10 -0
  144. package/dist/components/table/TableHeader.d.ts.map +1 -0
  145. package/dist/components/table/TablePagination.d.ts +4 -0
  146. package/dist/components/table/TablePagination.d.ts.map +1 -0
  147. package/dist/components/table/index.d.ts +6 -0
  148. package/dist/components/table/index.d.ts.map +1 -0
  149. package/dist/components/textarea/Textarea.d.ts +4 -0
  150. package/dist/components/textarea/Textarea.d.ts.map +1 -0
  151. package/dist/components/textarea/Textarea.test.d.ts +2 -0
  152. package/dist/components/textarea/Textarea.test.d.ts.map +1 -0
  153. package/dist/components/textarea/index.d.ts +3 -0
  154. package/dist/components/textarea/index.d.ts.map +1 -0
  155. package/dist/components/toast/Toast.test.d.ts +2 -0
  156. package/dist/components/toast/Toast.test.d.ts.map +1 -0
  157. package/dist/components/toast/ToastProvider.d.ts +4 -0
  158. package/dist/components/toast/ToastProvider.d.ts.map +1 -0
  159. package/dist/components/toast/Toaster.d.ts +4 -0
  160. package/dist/components/toast/Toaster.d.ts.map +1 -0
  161. package/dist/components/toast/hooks/useToast.d.ts +3 -0
  162. package/dist/components/toast/hooks/useToast.d.ts.map +1 -0
  163. package/dist/components/toast/index.d.ts +5 -0
  164. package/dist/components/toast/index.d.ts.map +1 -0
  165. package/dist/components/upload-field/UploadField.d.ts +4 -0
  166. package/dist/components/upload-field/UploadField.d.ts.map +1 -0
  167. package/dist/components/upload-field/UploadField.test.d.ts +2 -0
  168. package/dist/components/upload-field/UploadField.test.d.ts.map +1 -0
  169. package/dist/components/upload-field/index.d.ts +3 -0
  170. package/dist/components/upload-field/index.d.ts.map +1 -0
  171. package/dist/hooks/index.d.ts +7 -0
  172. package/dist/hooks/index.d.ts.map +1 -1
  173. package/dist/hooks/useDebounce.d.ts +2 -0
  174. package/dist/hooks/useDebounce.d.ts.map +1 -0
  175. package/dist/hooks/useTableFilter.d.ts +19 -0
  176. package/dist/hooks/useTableFilter.d.ts.map +1 -0
  177. package/dist/hooks/useTablePagination.d.ts +20 -0
  178. package/dist/hooks/useTablePagination.d.ts.map +1 -0
  179. package/dist/hooks/useTablePagination.test.d.ts +2 -0
  180. package/dist/hooks/useTablePagination.test.d.ts.map +1 -0
  181. package/dist/hooks/useTableState.d.ts +38 -0
  182. package/dist/hooks/useTableState.d.ts.map +1 -0
  183. package/dist/hooks/useTableState.test.d.ts +2 -0
  184. package/dist/hooks/useTableState.test.d.ts.map +1 -0
  185. package/dist/index.cjs +138 -48
  186. package/dist/index.css +1 -1
  187. package/dist/index.d.ts +20 -1
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +20046 -11207
  190. package/dist/types/app-header.d.ts +58 -0
  191. package/dist/types/app-header.d.ts.map +1 -0
  192. package/dist/types/bulk-import-modal.d.ts +1 -0
  193. package/dist/types/bulk-import-modal.d.ts.map +1 -1
  194. package/dist/types/card.d.ts +12 -0
  195. package/dist/types/card.d.ts.map +1 -0
  196. package/dist/types/country-selector.d.ts +21 -0
  197. package/dist/types/country-selector.d.ts.map +1 -0
  198. package/dist/types/date-range-selector.d.ts +31 -0
  199. package/dist/types/date-range-selector.d.ts.map +1 -0
  200. package/dist/types/date-selector.d.ts +37 -0
  201. package/dist/types/date-selector.d.ts.map +1 -0
  202. package/dist/types/dialog.d.ts +19 -0
  203. package/dist/types/dialog.d.ts.map +1 -1
  204. package/dist/types/draggable.d.ts +49 -0
  205. package/dist/types/draggable.d.ts.map +1 -0
  206. package/dist/types/dropdown.d.ts +1 -0
  207. package/dist/types/dropdown.d.ts.map +1 -1
  208. package/dist/types/field.d.ts +45 -0
  209. package/dist/types/field.d.ts.map +1 -0
  210. package/dist/types/form.d.ts +23 -0
  211. package/dist/types/form.d.ts.map +1 -0
  212. package/dist/types/input.d.ts +10 -0
  213. package/dist/types/input.d.ts.map +1 -0
  214. package/dist/types/metric-card.d.ts +27 -0
  215. package/dist/types/metric-card.d.ts.map +1 -0
  216. package/dist/types/network-operator.d.ts +25 -0
  217. package/dist/types/network-operator.d.ts.map +1 -0
  218. package/dist/types/otp-input.d.ts +16 -0
  219. package/dist/types/otp-input.d.ts.map +1 -0
  220. package/dist/types/phone-number-input.d.ts +17 -0
  221. package/dist/types/phone-number-input.d.ts.map +1 -0
  222. package/dist/types/sidebar.d.ts +7 -0
  223. package/dist/types/sidebar.d.ts.map +1 -1
  224. package/dist/types/sortable.d.ts +36 -0
  225. package/dist/types/sortable.d.ts.map +1 -0
  226. package/dist/types/table.d.ts +109 -0
  227. package/dist/types/table.d.ts.map +1 -0
  228. package/dist/types/textarea.d.ts +10 -0
  229. package/dist/types/textarea.d.ts.map +1 -0
  230. package/dist/types/toast.d.ts +52 -0
  231. package/dist/types/toast.d.ts.map +1 -0
  232. package/dist/types/upload-field.d.ts +25 -0
  233. package/dist/types/upload-field.d.ts.map +1 -0
  234. package/dist/utils/countries.d.ts +764 -0
  235. package/dist/utils/countries.d.ts.map +1 -0
  236. package/dist/utils/slot.d.ts +7 -0
  237. package/dist/utils/slot.d.ts.map +1 -0
  238. package/package.json +24 -3
package/README.md CHANGED
@@ -92,6 +92,65 @@ openWith({ userId: "42" });
92
92
  Exports: `useSearchParamOverlay`, `useDialogSearchParam`, `useModalSearchParam`, `createSearchParamAdapter`, `createBrowserSearchParamAdapter`, `readOverlayData`, `writeOverlayData`, `clearOverlayData`, `getDataPrefix`. Types: `SearchParamOverlayState`, `SearchParamOverlayData`, `SearchParamAdapter`, `UseSearchParamOverlayOptions`, `UseSearchParamOverlayReturn`.
93
93
 
94
94
 
95
+ ## AppHeader
96
+
97
+ Compound header bar with `AppHeader`, `AppHeaderSearch`, `AppHeaderActions`, `AppHeaderNotifications`, and `AppHeaderProfile`. Nest search on the left and group switcher, notifications, and profile inside `AppHeaderActions` on the right.
98
+
99
+ See the [AppHeader](/docs/app-header) docs page for props and exported types.
100
+
101
+ ```tsx
102
+ import {
103
+ AppHeader,
104
+ AppHeaderActions,
105
+ AppHeaderSearch,
106
+ AppHeaderNotifications,
107
+ AppHeaderProfile,
108
+ AppSwitcher,
109
+ } from "@rfdtech/components";
110
+
111
+ <AppHeader>
112
+ <AppHeaderSearch onSearch={setQuery} data={results} />
113
+ <AppHeaderActions>
114
+ <AppSwitcher apps={apps} />
115
+ <AppHeaderNotifications loading={loading}>
116
+ {notifications.map((n) => (
117
+ <div key={n.id} className="gsl-notif-popover__item">
118
+ <div className="gsl-notif-popover__body-text">{n.text}</div>
119
+ <div className="gsl-notif-popover__body-time">{n.time}</div>
120
+ </div>
121
+ ))}
122
+ </AppHeaderNotifications>
123
+ <AppHeaderProfile user={{ name: "Kwame", role: "Admin", initials: "KA" }} variant="basic">
124
+ <button className="gsl-profile-popover__action">Settings</button>
125
+ </AppHeaderProfile>
126
+ </AppHeaderActions>
127
+ </AppHeader>
128
+ ```
129
+
130
+ Props: `AppHeader` — `className`, `children`. `AppHeaderActions` — `className`, `children`. Exported types: `AppHeaderProps`, `AppHeaderActionsProps`, `AppHeaderSearchProps`, `AppHeaderSearchDataGroup`, `AppHeaderSearchItem`, `AppHeaderNotificationsProps`, `AppHeaderProfileProps`, `AppUser`.
131
+
132
+
133
+ ## AppLayout
134
+
135
+ Application layout container that auto-positions `AppHeader`, `AppSidebar`, and `AppBody` by component type. Sidebar on the left, header sticky at the top, main content filling the rest. See the [AppLayout](/docs/app-layout) docs page for props and exported types.
136
+
137
+ ```tsx
138
+ import { AppLayout, AppSidebar, AppBody } from "@rfdtech/components";
139
+
140
+ <AppLayout>
141
+ <AppHeader>
142
+ <AppHeaderActions>
143
+ <AppSwitcher apps={apps} />
144
+ </AppHeaderActions>
145
+ </AppHeader>
146
+ <AppSidebar>{/* sidebar */}</AppSidebar>
147
+ <AppBody>{/* page */}</AppBody>
148
+ </AppLayout>
149
+ ```
150
+
151
+ Props: `AppLayout` — `children`, `className`. `AppSidebar` — `children`, `className`. `AppBody` — `children`, `className`. Exported types: `AppLayoutProps`, `AppSidebarProps`, `AppBodyProps`.
152
+
153
+
95
154
  ## AppSwitcher
96
155
 
97
156
  Google Apps–style 9-dot launcher for switching between GSL systems. Drop it into your header to let users jump between products. Pass `apps` directly from your own data layer; use `loading` while data is being fetched.
@@ -173,7 +232,7 @@ Four-step modal wizard for importing spreadsheet data (.xlsx, .xls, .csv). Parsi
173
232
  ### Usage
174
233
 
175
234
  ```tsx
176
- import { BulkImportModal } from "@rfdtech/components";
235
+ import { BulkImportModal, useModalSearchParam } from "@rfdtech/components";
177
236
 
178
237
  const fields = [
179
238
  { key: "email", label: "Email", required: true },
@@ -181,13 +240,18 @@ const fields = [
181
240
  { key: "student_id", label: "Student ID" },
182
241
  ];
183
242
 
243
+ const { open, onOpenChange, openWith } = useModalSearchParam("bulk-import");
244
+
245
+ <button type="button" onClick={() => openWith()}>Import students</button>
246
+
184
247
  <BulkImportModal
185
248
  open={open}
186
- onOpenChange={setOpen}
249
+ onOpenChange={onOpenChange}
187
250
  title="Import students"
188
251
  fields={fields}
189
252
  onComplete={(result) => {
190
253
  console.log(result.rows, result.errors);
254
+ onOpenChange(false);
191
255
  }}
192
256
  />
193
257
  ```
@@ -343,6 +407,21 @@ import { Button } from "@rfdtech/components";
343
407
  Props: `variant`, `size`, `loading`, `loadingLabel`, `classNames`, and standard `button` attributes. Exported types: `ButtonProps`, `ButtonClassNames`, `ButtonVariant`, `ButtonSize`.
344
408
 
345
409
 
410
+ ## Card
411
+
412
+ Surface card wrapper with optional header and design tokens for padding and background. Uses `--gsl-surface-card` for background and `--gsl-card-padding` for inner spacing. See the [Card](/docs/card) docs page for props and exported types.
413
+
414
+ ```tsx
415
+ import { Card } from "@rfdtech/components";
416
+
417
+ <Card header="Profile">
418
+ <p>Content goes here.</p>
419
+ </Card>
420
+ ```
421
+
422
+ Props: `header`, `children`, `classNames`, `className`, plus standard `div` attributes. Exported types: `CardProps`, `CardClassNames`.
423
+
424
+
346
425
  ## Checkbox
347
426
 
348
427
  Accessible checkbox with optional label and part-level `classNames`. See the [Checkbox](/docs/checkbox) docs page for props and exported types.
@@ -366,6 +445,57 @@ import { Checkbox } from "@rfdtech/components";
366
445
  Props: `checked`, `defaultChecked`, `onCheckedChange`, `label`, `disabled`, `required`, `name`, `value`, `id`, `aria-label`, `classNames`, `className`. Exported types: `CheckboxProps`, `CheckboxClassNames`.
367
446
 
368
447
 
448
+ ## CountrySelector
449
+
450
+ Country selector dropdown with flag emoji, country name, search filtering, and keyboard navigation. Built on `@radix-ui/react-popover`. See the [CountrySelector](/docs/country-selector) docs page for props and exported types.
451
+
452
+ ```tsx
453
+ import { CountrySelector } from "@rfdtech/components";
454
+
455
+ <CountrySelector onChange={(code) => console.log(code)} />
456
+
457
+ <CountrySelector defaultValue="US" />
458
+ ```
459
+
460
+ Props: `value`, `defaultValue`, `onChange`, `placeholder`, `invalid`, `disabled`, `classNames`, `className`. Exported types: `CountrySelectorProps`, `CountrySelectorClassNames`.
461
+
462
+
463
+ ## DateRangeSelector
464
+
465
+ Date range picker with a single trigger showing the selected range, a calendar popover for two-click range selection, and auto-swap to keep start before end. See the [DateRangeSelector](/docs/date-range-selector) docs page for props and exported types.
466
+
467
+ ```tsx
468
+ import { DateRangeSelector } from "@rfdtech/components";
469
+
470
+ <DateRangeSelector onChange={(range) => console.log(range)} />
471
+
472
+ <DateRangeSelector
473
+ defaultValue={{ start: new Date(2026, 5, 1), end: new Date(2026, 5, 18) }}
474
+ />
475
+ ```
476
+
477
+ Props: `value`, `defaultValue`, `onChange`, `placeholder`, `formatOptions`, `invalid`, `disabled`, `min`, `max`, `classNames`, `className`. Exported types: `DateRangeSelectorProps`, `DateRangeSelectorClassNames`, `DateRangeValue`.
478
+
479
+
480
+ ## DateSelector
481
+
482
+ Date picker for choosing a single date from a calendar grid. Built on `@radix-ui/react-popover`. See the [DateSelector](/docs/date-selector) docs page for props and exported types.
483
+
484
+ ```tsx
485
+ import { DateSelector } from "@rfdtech/components";
486
+
487
+ <DateSelector onChange={(date) => console.log(date)} />
488
+
489
+ <DateSelector
490
+ placeholder="Pick a date"
491
+ min={new Date(2025, 0, 1)}
492
+ max={new Date(2026, 11, 31)}
493
+ />
494
+ ```
495
+
496
+ Props: `value`, `defaultValue`, `onChange`, `placeholder`, `formatOptions`, `invalid`, `disabled`, `min`, `max`, `classNames`, `className`. Exported types: `DateSelectorProps`, `DateSelectorClassNames`.
497
+
498
+
369
499
  ## Command
370
500
 
371
501
  Compound command menu primitives for searchable, keyboard-navigable action lists. Supports inline pickers and modal palettes via `CommandDialog`. See the [Command](/docs/command) docs page for props and exported types.
@@ -380,7 +510,7 @@ import {
380
510
  CommandItem,
381
511
  CommandList,
382
512
  CommandShortcut,
383
- useCommandShortcut,
513
+ useDialogSearchParam,
384
514
  } from "@rfdtech/components";
385
515
 
386
516
  <Command label="Field picker">
@@ -395,7 +525,11 @@ import {
395
525
  </CommandList>
396
526
  </Command>
397
527
 
398
- <CommandDialog open={open} onOpenChange={setOpen} shortcut label="Command menu">
528
+ const { open, onOpenChange, openWith } = useDialogSearchParam("command-menu");
529
+
530
+ <Button onClick={() => openWith()}>Open command menu</Button>
531
+
532
+ <CommandDialog open={open} onOpenChange={onOpenChange} shortcut label="Command menu">
399
533
  <CommandInput placeholder="Type a command..." />
400
534
  <CommandList>
401
535
  <CommandItem onSelect={() => go("/dashboard")}>Dashboard</CommandItem>
@@ -457,6 +591,89 @@ import { Dropdown } from "@rfdtech/components";
457
591
  Props: `value`, `onValueChange`, `options`, `placeholder`, `clearable`, `disabled`, `aria-label`, `classNames`, `className`. Exported types: `DropdownProps`, `DropdownOption`, `DropdownClassNames`.
458
592
 
459
593
 
594
+ ## Form
595
+
596
+ Field, Input, and Textarea primitives for accessible form layouts. See the [Form](/docs/form) docs page for props and exported types.
597
+
598
+ ```tsx
599
+ import {
600
+ Field,
601
+ FieldControl,
602
+ FieldDescription,
603
+ FieldLabel,
604
+ Input,
605
+ Textarea,
606
+ } from "@rfdtech/components";
607
+
608
+ <Field>
609
+ <FieldLabel>Email</FieldLabel>
610
+ <FieldControl>
611
+ <Input type="email" placeholder="you@example.com" />
612
+ </FieldControl>
613
+ <FieldDescription>We will never share your email.</FieldDescription>
614
+ </Field>
615
+ ```
616
+
617
+ Exports: `Field`, `FieldLabel`, `FieldDescription`, `FieldError`, `FieldControl`, `Input`, `Textarea`. Types: `FieldProps`, `FieldClassNames`, `InputProps`, `TextareaProps`.
618
+
619
+
620
+ ## FormField
621
+
622
+ react-hook-form adapters with Zod validation support. See the [FormField](/docs/form-field) docs page for props and exported types.
623
+
624
+ ```bash
625
+ npm install react-hook-form zod @hookform/resolvers
626
+ ```
627
+
628
+ ```tsx
629
+ import { zodResolver } from "@hookform/resolvers/zod";
630
+ import { useForm } from "react-hook-form";
631
+ import { z } from "zod";
632
+ import {
633
+ Button,
634
+ Field,
635
+ FieldControl,
636
+ FieldError,
637
+ FieldLabel,
638
+ Form,
639
+ FormField,
640
+ Input,
641
+ } from "@rfdtech/components";
642
+
643
+ const formSchema = z.object({
644
+ email: z.string().min(1, "Email is required").email("Enter a valid email address"),
645
+ });
646
+
647
+ type FormValues = z.infer<typeof formSchema>;
648
+
649
+ const form = useForm<FormValues>({
650
+ resolver: zodResolver(formSchema),
651
+ defaultValues: { email: "" },
652
+ });
653
+
654
+ <Form {...form}>
655
+ <form onSubmit={form.handleSubmit(onSubmit)}>
656
+ <FormField
657
+ control={form.control}
658
+ name="email"
659
+ render={({ field, fieldState }) => (
660
+ <Field invalid={!!fieldState.error}>
661
+ <FieldLabel>Email</FieldLabel>
662
+ <FieldControl>
663
+ <Input type="email" {...field} />
664
+ </FieldControl>
665
+ <FieldError>{fieldState.error?.message}</FieldError>
666
+ </Field>
667
+ )}
668
+ />
669
+ <Button type="submit">Save</Button>
670
+ </form>
671
+ </Form>
672
+ ```
673
+
674
+ Exports: `Form`, `FormField`, `useFormField`. Types: `FormProps`, `FormFieldProps`, `UseFormFieldReturn`.
675
+
676
+
460
677
  ## Dialog
461
678
 
462
679
  Compound dialog primitives for modal overlays. See the [Dialog](/docs/dialog) docs page for props and exported types.
@@ -470,18 +687,25 @@ import {
470
687
  DialogOverlay,
471
688
  DialogPortal,
472
689
  DialogTitle,
473
- DialogTrigger,
690
+ useDialogSearchParam,
474
691
  } from "@rfdtech/components";
475
692
 
476
- <Dialog open={open} onOpenChange={setOpen}>
477
- <DialogTrigger asChild>
478
- <Button variant="secondary">Edit profile</Button>
479
- </DialogTrigger>
693
+ const { open, data, onOpenChange, openWith } = useDialogSearchParam<{
694
+ userId: string;
695
+ }>("edit-profile");
696
+
697
+ <Button variant="secondary" onClick={() => openWith({ userId: "42" })}>
698
+ Edit profile
699
+ </Button>
700
+
701
+ <Dialog open={open} onOpenChange={onOpenChange}>
480
702
  <DialogPortal>
481
703
  <DialogOverlay />
482
704
  <DialogContent showCloseButton>
483
705
  <DialogTitle>Edit profile</DialogTitle>
484
- <DialogDescription>Make changes here.</DialogDescription>
706
+ <DialogDescription>
707
+ Make changes here. Editing user {data?.userId}.
708
+ </DialogDescription>
485
709
  </DialogContent>
486
710
  </DialogPortal>
487
711
  </Dialog>
@@ -490,6 +714,45 @@ import {
490
714
  Props: `Dialog` — `open`, `defaultOpen`, `onOpenChange`. `DialogContent` — `showCloseButton`, `classNames`, `className`. Styled parts also support part-level `classNames`. Exported types: `DialogOverlayProps`, `DialogContentProps`, `DialogTitleProps`, `DialogDescriptionProps`, and related `*ClassNames` interfaces.
491
715
 
492
716
 
717
+ ## Draggable
718
+
719
+ Repositionable panel primitive with optional handle and bounded pointer dragging. See the [Draggable](/docs/draggable) docs page for props and exported types.
720
+
721
+ ```tsx
722
+ import { Draggable, DraggableHandle } from "@rfdtech/components";
723
+
724
+ <div style={{ position: "relative", height: 240 }}>
725
+ <Draggable defaultPosition={{ x: 24, y: 24 }} bounds="parent">
726
+ <DraggableHandle aria-label="Drag card" />
727
+ <div>Drag me</div>
728
+ </Draggable>
729
+ </div>
730
+ ```
731
+
732
+ Exports: `Draggable`, `DraggableHandle`, `useDraggable`, `clampPosition`. Types: `DraggableProps`, `DraggableHandleProps`, `DraggablePosition`, `DraggableBounds`, `DraggableAxis`, `UseDraggableOptions`, `UseDraggableReturn`.
733
+
734
+
735
+ ## MetricCard
736
+
737
+ Compact dashboard card for displaying a metric value, label, trend indicator, and optional icon or description. Variants (`default`, `primary`, `success`, `warning`, `error`) only affect the trend color — background and text stay neutral. Use the `color` prop for custom accent colors.
738
+
739
+ See the [MetricCard](/docs/metric-card) docs page for props and exported types.
740
+
741
+ ```tsx
742
+ import { MetricCard } from "@rfdtech/components";
743
+
744
+ <MetricCard
745
+ label="Revenue"
746
+ value="$128.4k"
747
+ trend="up"
748
+ trendValue="+12.5%"
749
+ description="Total revenue this quarter"
750
+ />
751
+ ```
752
+
753
+ Props: `label`, `value`, `icon`, `description`, `trend`, `trendValue`, `variant`, `color`, `classNames`, `className`, plus standard `div` attributes. Exported types: `MetricCardProps`, `MetricCardClassNames`, `MetricCardVariant`, `MetricTrend`.
754
+
755
+
493
756
  ## Modal
494
757
 
495
758
  Compound modal primitives for near full-viewport overlays with header, body, and footer slots. See the [Modal](/docs/modal) docs page for props and exported types.
@@ -506,13 +769,16 @@ import {
506
769
  ModalOverlay,
507
770
  ModalPortal,
508
771
  ModalTitle,
509
- ModalTrigger,
772
+ useModalSearchParam,
510
773
  } from "@rfdtech/components";
511
774
 
512
- <Modal open={open} onOpenChange={setOpen}>
513
- <ModalTrigger asChild>
514
- <Button variant="secondary">Review changes</Button>
515
- </ModalTrigger>
775
+ const { open, onOpenChange, openWith } = useModalSearchParam("review-changes");
776
+
777
+ <Button variant="secondary" onClick={() => openWith()}>
778
+ Review changes
779
+ </Button>
780
+
781
+ <Modal open={open} onOpenChange={onOpenChange}>
516
782
  <ModalPortal>
517
783
  <ModalOverlay />
518
784
  <ModalContent showCloseButton>
@@ -522,8 +788,8 @@ import {
522
788
  </ModalHeader>
523
789
  <ModalBody>{children}</ModalBody>
524
790
  <ModalFooter>
525
- <Button variant="ghost" onClick={() => setOpen(false)}>Cancel</Button>
526
- <Button onClick={() => setOpen(false)}>Publish</Button>
791
+ <Button variant="ghost" onClick={() => onOpenChange(false)}>Cancel</Button>
792
+ <Button onClick={() => onOpenChange(false)}>Publish</Button>
527
793
  </ModalFooter>
528
794
  </ModalContent>
529
795
  </ModalPortal>
@@ -533,6 +799,51 @@ import {
533
799
  Props: `Modal` — `open`, `defaultOpen`, `onOpenChange`. `ModalContent` — `showCloseButton`, `classNames`, `className`. Layout parts (`ModalHeader`, `ModalBody`, `ModalFooter`) support part-level `classNames`. Exported types: `ModalOverlayProps`, `ModalContentProps`, `ModalHeaderProps`, `ModalTitleProps`, `ModalDescriptionProps`, `ModalBodyProps`, `ModalFooterProps`, and related `*ClassNames` interfaces.
534
800
 
535
801
 
802
+ ## NetworkOperator
803
+
804
+ Network operator selector with operator image thumbnails (MTN, Vodafone, AirtelTigo, Glo), search filtering, and keyboard navigation. Built on `@radix-ui/react-popover`. See the [NetworkOperator](/docs/network-operator) docs page for props and exported types.
805
+
806
+ ```tsx
807
+ import { NetworkOperator } from "@rfdtech/components";
808
+
809
+ <NetworkOperator onChange={(value) => console.log(value)} />
810
+
811
+ <NetworkOperator defaultValue="mtn" />
812
+ ```
813
+
814
+ Props: `value`, `defaultValue`, `onChange`, `options`, `placeholder`, `invalid`, `disabled`, `classNames`, `className`. Exported types: `NetworkOperatorProps`, `NetworkOperatorOption`, `NetworkOperatorClassNames`.
815
+
816
+
817
+ ## OtpInput
818
+
819
+ One-time password input with configurable digit length, paste support, keyboard navigation (arrow keys, backspace), auto-focus advancement, and `onComplete` callback. See the [OtpInput](/docs/otp-input) docs page for props and exported types.
820
+
821
+ ```tsx
822
+ import { OtpInput } from "@rfdtech/components";
823
+
824
+ <OtpInput onChange={(val) => console.log(val)} />
825
+
826
+ <OtpInput length={4} onComplete={(val) => console.log("Done:", val)} />
827
+ ```
828
+
829
+ Props: `length`, `value`, `onChange`, `onComplete`, `invalid`, `disabled`, `name`, `classNames`, `className`. Exported types: `OtpInputProps`, `OtpInputClassNames`.
830
+
831
+
832
+ ## PhoneNumberInput
833
+
834
+ Phone number input with a country code selector (flag + dial code prefix) that auto-detects the country from the number prefix as the user types. Built on `@radix-ui/react-popover`. See the [PhoneNumberInput](/docs/phone-number-input) docs page for props and exported types.
835
+
836
+ ```tsx
837
+ import { PhoneNumberInput } from "@rfdtech/components";
838
+
839
+ <PhoneNumberInput defaultCountry="GH" onChange={(val) => console.log(val)} />
840
+
841
+ <PhoneNumberInput value="+2332054321022" />
842
+ ```
843
+
844
+ Props: `value`, `defaultValue`, `onChange`, `invalid`, `disabled`, `classNames`, `className`. Exported types: `PhoneNumberInputProps`, `PhoneNumberInputClassNames`.
845
+
846
+
536
847
  ## Popover
537
848
 
538
849
  Compound popover primitives for floating panels. See the [Popover](/docs/popover) docs page for props and exported types.
@@ -687,6 +998,84 @@ import {
687
998
  Props: `Sheet` — `open`, `defaultOpen`, `onOpenChange`. `SheetContent` — `side`, `showCloseButton`, `classNames`, `className`. Layout parts support part-level `classNames`. Exported types: `SheetSide`, `SheetOverlayProps`, `SheetContentProps`, `SheetHeaderProps`, `SheetTitleProps`, `SheetDescriptionProps`, `SheetBodyProps`, `SheetFooterProps`, and related `*ClassNames` interfaces.
688
999
 
689
1000
 
1001
+ ## Sortable
1002
+
1003
+ Reorderable list primitive with optional drag handles and keyboard support. See the [Sortable](/docs/sortable) docs page for props and exported types.
1004
+
1005
+ ```tsx
1006
+ import { useState } from "react";
1007
+ import {
1008
+ Sortable,
1009
+ SortableHandle,
1010
+ SortableItem,
1011
+ SortableList,
1012
+ } from "@rfdtech/components";
1013
+
1014
+ const [items, setItems] = useState(["alpha", "beta", "gamma"]);
1015
+
1016
+ <Sortable items={items} onReorder={setItems}>
1017
+ <SortableList>
1018
+ {items.map((id) => (
1019
+ <SortableItem key={id} id={id}>
1020
+ <SortableHandle aria-label={`Reorder ${id}`} />
1021
+ <span>{id}</span>
1022
+ </SortableItem>
1023
+ ))}
1024
+ </SortableList>
1025
+ </Sortable>
1026
+ ```
1027
+
1028
+ Exports: `Sortable`, `SortableList`, `SortableItem`, `SortableHandle`, `reorderItems`. Types: `SortableProps`, `SortableListProps`, `SortableItemProps`, `SortableHandleProps`, `SortableId`, `SortableStrategy`, `SortableClassNames`.
1029
+
1030
+
1031
+ ## Table
1032
+
1033
+ Compound table with URL-driven search, pagination, filter, sort, row selection, bulk actions, and loading skeletons. See the [Table](/docs/table) docs page for props and exported types.
1034
+
1035
+ ```tsx
1036
+ import { useState } from "react";
1037
+ import {
1038
+ Table,
1039
+ TableHeader,
1040
+ TableSearch,
1041
+ TableContent,
1042
+ TableBulkActions,
1043
+ TableFooter,
1044
+ TablePagination,
1045
+ } from "@rfdtech/components";
1046
+
1047
+ const [selected, setSelected] = useState<Set<string | number>>(new Set());
1048
+
1049
+ <Table paramPrefix="users">
1050
+ <TableHeader>
1051
+ <TableSearch placeholder="Search users..." />
1052
+ </TableHeader>
1053
+ <TableContent
1054
+ selectable
1055
+ selectedIds={selected}
1056
+ onSelectionChange={setSelected}
1057
+ columns={[
1058
+ { id: "name", header: "Name", accessorKey: "name", sortable: true },
1059
+ { id: "email", header: "Email", accessorKey: "email", sortable: true },
1060
+ ]}
1061
+ data={users}
1062
+ rowKey={(u) => u.id}
1063
+ />
1064
+ <TableBulkActions
1065
+ selectedIds={selected}
1066
+ actions={[
1067
+ { id: "delete", label: "Delete", icon: <Trash2 size={14} />, onClick: (ids) => handleDelete(ids), destructive: true },
1068
+ ]}
1069
+ />
1070
+ <TableFooter>
1071
+ <TablePagination totalPages={5} totalItems={50} />
1072
+ </TableFooter>
1073
+ </Table>
1074
+ ```
1075
+
1076
+ Props: `paramPrefix`, `classNames`, `className`. Exports: `Table`, `TableHeader`, `TableSearch`, `TableFilter`, `TableContent`, `TableBulkActions`, `TableFooter`, `TablePagination`. Types: `TableProps`, `TableHeaderProps`, `TableContentProps`, `TableFooterProps`, `TableSearchProps`, `TableFilterProps`, `TableBulkActionsProps`, `TableBulkAction`, `TableBulkActionsClassNames`, `TableClassNames`, `PaginationControlsProps`, `TableColumn`.
1077
+
1078
+
690
1079
  ## Tabs
691
1080
 
692
1081
  Compound tabs primitives for switching between related panels. See the [Tabs](/docs/tabs) docs page for props and exported types.
@@ -706,6 +1095,54 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@rfdtech/components";
706
1095
 
707
1096
  Exports: `Tabs`, `TabsList`, `TabsTrigger`, `TabsContent`. Props: `Tabs` — `value`, `defaultValue`, `onValueChange`, `orientation`, `activationMode`, `variant`, `classNames`, `className`, `children`. `TabsTrigger` — `value`, `disabled`, `classNames`, `className`. Exported types: `TabsProps`, `TabsListProps`, `TabsTriggerProps`, `TabsContentProps`, `TabsVariant`, `TabsClassNames`, `TabsListClassNames`, `TabsTriggerClassNames`, `TabsContentClassNames`.
708
1097
 
1098
+
1099
+ ## Toast
1100
+
1101
+ Transient notifications with an imperative `useToast` hook, powered by Sonner. See the [Toast](/docs/toast) docs page for props and exported types.
1102
+
1103
+ ```tsx
1104
+ import { CheckCircle2 } from "lucide-react";
1105
+ import { ToastProvider, Toaster, useToast } from "@rfdtech/components";
1106
+
1107
+ <ToastProvider>
1108
+ <App />
1109
+ <Toaster />
1110
+ </ToastProvider>
1111
+
1112
+ const { toast } = useToast();
1113
+
1114
+ toast({
1115
+ title: "Profile saved",
1116
+ description: "Your changes were applied.",
1117
+ variant: "success",
1118
+ icon: <CheckCircle2 size={18} strokeWidth={2} aria-hidden />,
1119
+ });
1120
+ ```
1121
+
1122
+ Exports: `ToastProvider`, `Toaster`, `useToast`. Types: `ToastOptions`, `ToastVariant`, `ToastProviderProps`, `ToasterProps`, `UseToastReturn`, `ToastClassNames`, `ToastAction`, `ToastReturn`.
1123
+
1124
+
1125
+ ## UploadField
1126
+
1127
+ File upload with dashed-border dropzone, cloud upload icon, auto-generated file type/size support text, file cards with type icons, and a primary action button. See the [UploadField](/docs/upload-field) docs page for props and exported types.
1128
+
1129
+ ```tsx
1130
+ import { UploadField } from "@rfdtech/components";
1131
+
1132
+ <UploadField
1133
+ accept=".csv"
1134
+ maxSize={10 * 1024 * 1024}
1135
+ onChange={(file) => console.log(file)}
1136
+ />
1137
+
1138
+ <UploadField accept="image/*" maxSize={5 * 1024 * 1024} />
1139
+ ```
1140
+
1141
+ Props: `accept`, `multiple`, `maxSize`, `value`, `onChange`, `invalid`, `disabled`, `name`, `classNames`, `className`. Exported types: `UploadFieldProps`, `UploadFieldClassNames`.
1142
+
1143
+ Props: `accept`, `multiple`, `maxSize`, `value`, `onChange`, `invalid`, `disabled`, `placeholder`, `classNames`, `className`. Exported types: `UploadFieldProps`, `UploadFieldClassNames`.
1144
+
1145
+
709
1146
  ## Development
710
1147
 
711
1148
  ```bash
@@ -0,0 +1,5 @@
1
+ import type { AppHeaderProps, AppHeaderActionsProps } from "../../types/app-header";
2
+ import "./styles/app-header.css";
3
+ export declare const AppHeader: import("react").ForwardRefExoticComponent<AppHeaderProps & import("react").RefAttributes<HTMLDivElement>>;
4
+ export declare const AppHeaderActions: import("react").ForwardRefExoticComponent<AppHeaderActionsProps & import("react").RefAttributes<HTMLDivElement>>;
5
+ //# sourceMappingURL=AppHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppHeader.d.ts","sourceRoot":"","sources":["../../../src/components/app-header/AppHeader.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,yBAAyB,CAAC;AAEjC,eAAO,MAAM,SAAS,2GAQrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,kHAQ5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AppHeader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppHeader.test.d.ts","sourceRoot":"","sources":["../../../src/components/app-header/AppHeader.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { AppHeaderNotificationsProps } from "../../types/app-header";
2
+ export declare const AppHeaderNotifications: import("react").ForwardRefExoticComponent<AppHeaderNotificationsProps & import("react").RefAttributes<HTMLButtonElement>>;
3
+ //# sourceMappingURL=AppHeaderNotifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppHeaderNotifications.d.ts","sourceRoot":"","sources":["../../../src/components/app-header/AppHeaderNotifications.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAK1E,eAAO,MAAM,sBAAsB,2HA8ClC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AppHeaderProfileProps } from "../../types/app-header";
2
+ export declare const AppHeaderProfile: import("react").ForwardRefExoticComponent<AppHeaderProfileProps & import("react").RefAttributes<HTMLDivElement>>;
3
+ //# sourceMappingURL=AppHeaderProfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppHeaderProfile.d.ts","sourceRoot":"","sources":["../../../src/components/app-header/AppHeaderProfile.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAW,MAAM,wBAAwB,CAAC;AAK7E,eAAO,MAAM,gBAAgB,kHAmG3B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AppHeaderSearchProps } from "../../types/app-header";
2
+ import "./styles/app-header.css";
3
+ export declare const AppHeaderSearch: import("react").ForwardRefExoticComponent<AppHeaderSearchProps & import("react").RefAttributes<HTMLInputElement>>;
4
+ //# sourceMappingURL=AppHeaderSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppHeaderSearch.d.ts","sourceRoot":"","sources":["../../../src/components/app-header/AppHeaderSearch.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,oBAAoB,EAGrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,yBAAyB,CAAC;AAEjC,eAAO,MAAM,eAAe,mHAyE1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { AppHeader, AppHeaderActions } from "./AppHeader";
2
+ export { AppHeaderSearch } from "./AppHeaderSearch";
3
+ export { AppHeaderNotifications } from "./AppHeaderNotifications";
4
+ export { AppHeaderProfile } from "./AppHeaderProfile";
5
+ export type { AppHeaderProps, AppHeaderActionsProps, AppHeaderSearchProps, AppHeaderSearchDataGroup, AppHeaderSearchItem, AppHeaderNotificationsProps, AppHeaderProfileProps, AppUser, } from "../../types/app-header";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/app-header/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,OAAO,GACR,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type ReactNode } from "react";
2
+ export interface AppBodyProps {
3
+ children?: ReactNode;
4
+ className?: string;
5
+ }
6
+ export declare const AppBody: import("react").ForwardRefExoticComponent<AppBodyProps & import("react").RefAttributes<HTMLElement>>;
7
+ //# sourceMappingURL=AppBody.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppBody.d.ts","sourceRoot":"","sources":["../../../src/components/app-layout/AppBody.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,OAAO,sGAQnB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type ReactNode } from "react";
2
+ import "./styles/app-layout.css";
3
+ export interface AppLayoutProps {
4
+ children?: ReactNode;
5
+ className?: string;
6
+ }
7
+ export declare const AppLayout: import("react").ForwardRefExoticComponent<AppLayoutProps & import("react").RefAttributes<HTMLDivElement>>;
8
+ //# sourceMappingURL=AppLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppLayout.d.ts","sourceRoot":"","sources":["../../../src/components/app-layout/AppLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,yBAAyB,CAAC;AAEjC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,2GA4BrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AppLayout.test.d.ts.map