@hyddenlabs/hydn-ui 0.3.0-alpha.99 → 0.3.1

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 (649) hide show
  1. package/README.md +46 -29
  2. package/dist/components/branding/google-logo.d.ts +14 -0
  3. package/dist/components/branding/google-logo.d.ts.map +1 -0
  4. package/dist/components/branding/google-logo.js +49 -0
  5. package/dist/components/branding/google-logo.js.map +1 -0
  6. package/dist/components/branding/hydden-logo.d.ts +14 -0
  7. package/dist/components/branding/hydden-logo.d.ts.map +1 -0
  8. package/dist/components/branding/hydden-logo.js +8 -0
  9. package/dist/components/branding/hydden-logo.js.map +1 -0
  10. package/dist/components/branding/microsoft-logo.d.ts +14 -0
  11. package/dist/components/branding/microsoft-logo.d.ts.map +1 -0
  12. package/dist/components/branding/microsoft-logo.js +25 -0
  13. package/dist/components/branding/microsoft-logo.js.map +1 -0
  14. package/dist/components/data-display/avatar/avatar.d.ts +24 -0
  15. package/dist/components/data-display/avatar/avatar.d.ts.map +1 -0
  16. package/dist/components/data-display/avatar/avatar.js +25 -0
  17. package/dist/components/data-display/avatar/avatar.js.map +1 -0
  18. package/dist/components/data-display/avatar/index.d.ts +3 -0
  19. package/dist/components/data-display/avatar/index.d.ts.map +1 -0
  20. package/dist/components/data-display/badge/badge.d.ts +24 -0
  21. package/dist/components/data-display/badge/badge.d.ts.map +1 -0
  22. package/dist/components/data-display/badge/badge.js +27 -0
  23. package/dist/components/data-display/badge/badge.js.map +1 -0
  24. package/dist/components/data-display/badge/index.d.ts +5 -0
  25. package/dist/components/data-display/badge/index.d.ts.map +1 -0
  26. package/dist/components/data-display/badge/status-label.d.ts +25 -0
  27. package/dist/components/data-display/badge/status-label.d.ts.map +1 -0
  28. package/dist/components/data-display/badge/status-label.js +63 -0
  29. package/dist/components/data-display/badge/status-label.js.map +1 -0
  30. package/dist/components/data-display/chip/chip.d.ts +42 -0
  31. package/dist/components/data-display/chip/chip.d.ts.map +1 -0
  32. package/dist/components/data-display/chip/chip.js +79 -0
  33. package/dist/components/data-display/chip/chip.js.map +1 -0
  34. package/dist/components/data-display/chip/index.d.ts +3 -0
  35. package/dist/components/data-display/chip/index.d.ts.map +1 -0
  36. package/dist/components/data-display/code-block/code-block.d.ts +17 -0
  37. package/dist/components/data-display/code-block/code-block.d.ts.map +1 -0
  38. package/dist/components/data-display/code-block/code-block.js +34 -0
  39. package/dist/components/data-display/code-block/code-block.js.map +1 -0
  40. package/dist/components/data-display/data-table/data-table.d.ts +226 -0
  41. package/dist/components/data-display/data-table/data-table.d.ts.map +1 -0
  42. package/dist/components/data-display/data-table/data-table.js +404 -0
  43. package/dist/components/data-display/data-table/data-table.js.map +1 -0
  44. package/dist/components/data-display/data-table/index.d.ts +5 -0
  45. package/dist/components/data-display/data-table/index.d.ts.map +1 -0
  46. package/dist/components/data-display/data-table/use-table.d.ts +42 -0
  47. package/dist/components/data-display/data-table/use-table.d.ts.map +1 -0
  48. package/dist/components/data-display/data-table/use-table.js +120 -0
  49. package/dist/components/data-display/data-table/use-table.js.map +1 -0
  50. package/dist/components/data-display/empty-state/empty-state.d.ts +8 -0
  51. package/dist/components/data-display/empty-state/empty-state.d.ts.map +1 -0
  52. package/dist/components/data-display/empty-state/empty-state.js +17 -0
  53. package/dist/components/data-display/empty-state/empty-state.js.map +1 -0
  54. package/dist/components/data-display/empty-state/index.d.ts +3 -0
  55. package/dist/components/data-display/empty-state/index.d.ts.map +1 -0
  56. package/dist/components/data-display/list/index.d.ts +3 -0
  57. package/dist/components/data-display/list/index.d.ts.map +1 -0
  58. package/dist/components/data-display/list/list.d.ts +31 -0
  59. package/dist/components/data-display/list/list.d.ts.map +1 -0
  60. package/dist/components/data-display/list/list.js +16 -0
  61. package/dist/components/data-display/list/list.js.map +1 -0
  62. package/dist/components/data-display/table/index.d.ts +3 -0
  63. package/dist/components/data-display/table/index.d.ts.map +1 -0
  64. package/dist/components/data-display/table/table.d.ts +101 -0
  65. package/dist/components/data-display/table/table.d.ts.map +1 -0
  66. package/dist/components/data-display/table/table.js +98 -0
  67. package/dist/components/data-display/table/table.js.map +1 -0
  68. package/dist/components/data-display/timeline/index.d.ts +3 -0
  69. package/dist/components/data-display/timeline/index.d.ts.map +1 -0
  70. package/dist/components/data-display/timeline/timeline.d.ts +57 -0
  71. package/dist/components/data-display/timeline/timeline.d.ts.map +1 -0
  72. package/dist/components/data-display/timeline/timeline.js +52 -0
  73. package/dist/components/data-display/timeline/timeline.js.map +1 -0
  74. package/dist/components/feedback/alert/alert.d.ts +27 -0
  75. package/dist/components/feedback/alert/alert.d.ts.map +1 -0
  76. package/dist/components/feedback/alert/alert.js +86 -0
  77. package/dist/components/feedback/alert/alert.js.map +1 -0
  78. package/dist/components/feedback/alert/index.d.ts +3 -0
  79. package/dist/components/feedback/alert/index.d.ts.map +1 -0
  80. package/dist/components/feedback/dialog/delete-dialog.d.ts +41 -0
  81. package/dist/components/feedback/dialog/delete-dialog.d.ts.map +1 -0
  82. package/dist/components/feedback/dialog/delete-dialog.js +52 -0
  83. package/dist/components/feedback/dialog/delete-dialog.js.map +1 -0
  84. package/dist/components/feedback/dialog/dialog.d.ts +24 -0
  85. package/dist/components/feedback/dialog/dialog.d.ts.map +1 -0
  86. package/dist/components/feedback/dialog/dialog.js +15 -0
  87. package/dist/components/feedback/dialog/dialog.js.map +1 -0
  88. package/dist/components/feedback/dialog/index.d.ts +5 -0
  89. package/dist/components/feedback/dialog/index.d.ts.map +1 -0
  90. package/dist/components/feedback/error-page/error-400.d.ts +22 -0
  91. package/dist/components/feedback/error-page/error-400.d.ts.map +1 -0
  92. package/dist/components/feedback/error-page/error-400.js +28 -0
  93. package/dist/components/feedback/error-page/error-400.js.map +1 -0
  94. package/dist/components/feedback/error-page/error-401.d.ts +26 -0
  95. package/dist/components/feedback/error-page/error-401.d.ts.map +1 -0
  96. package/dist/components/feedback/error-page/error-401.js +33 -0
  97. package/dist/components/feedback/error-page/error-401.js.map +1 -0
  98. package/dist/components/feedback/error-page/error-403.d.ts +26 -0
  99. package/dist/components/feedback/error-page/error-403.d.ts.map +1 -0
  100. package/dist/components/feedback/error-page/error-403.js +33 -0
  101. package/dist/components/feedback/error-page/error-403.js.map +1 -0
  102. package/dist/components/feedback/error-page/error-404.d.ts +26 -0
  103. package/dist/components/feedback/error-page/error-404.d.ts.map +1 -0
  104. package/dist/components/feedback/error-page/error-404.js +33 -0
  105. package/dist/components/feedback/error-page/error-404.js.map +1 -0
  106. package/dist/components/feedback/error-page/index.d.ts +9 -0
  107. package/dist/components/feedback/error-page/index.d.ts.map +1 -0
  108. package/dist/components/feedback/loading-container/index.d.ts +3 -0
  109. package/dist/components/feedback/loading-container/index.d.ts.map +1 -0
  110. package/dist/components/feedback/loading-container/loading-container.d.ts +16 -0
  111. package/dist/components/feedback/loading-container/loading-container.d.ts.map +1 -0
  112. package/dist/components/feedback/loading-container/loading-container.js +28 -0
  113. package/dist/components/feedback/loading-container/loading-container.js.map +1 -0
  114. package/dist/components/feedback/modal/index.d.ts +3 -0
  115. package/dist/components/feedback/modal/index.d.ts.map +1 -0
  116. package/dist/components/feedback/modal/modal.d.ts +33 -0
  117. package/dist/components/feedback/modal/modal.d.ts.map +1 -0
  118. package/dist/components/feedback/modal/modal.js +88 -0
  119. package/dist/components/feedback/modal/modal.js.map +1 -0
  120. package/dist/components/feedback/overlay/useOverlay.d.ts +24 -0
  121. package/dist/components/feedback/overlay/useOverlay.d.ts.map +1 -0
  122. package/dist/components/feedback/overlay/useOverlay.js +119 -0
  123. package/dist/components/feedback/overlay/useOverlay.js.map +1 -0
  124. package/dist/components/feedback/popover/index.d.ts +3 -0
  125. package/dist/components/feedback/popover/index.d.ts.map +1 -0
  126. package/dist/components/feedback/popover/popover.d.ts +25 -0
  127. package/dist/components/feedback/popover/popover.d.ts.map +1 -0
  128. package/dist/components/feedback/popover/popover.js +118 -0
  129. package/dist/components/feedback/popover/popover.js.map +1 -0
  130. package/dist/components/feedback/progress-bar/index.d.ts +3 -0
  131. package/dist/components/feedback/progress-bar/index.d.ts.map +1 -0
  132. package/dist/components/feedback/progress-bar/progress-bar.d.ts +22 -0
  133. package/dist/components/feedback/progress-bar/progress-bar.d.ts.map +1 -0
  134. package/dist/components/feedback/progress-bar/progress-bar.js +27 -0
  135. package/dist/components/feedback/progress-bar/progress-bar.js.map +1 -0
  136. package/dist/components/feedback/skeleton/index.d.ts +3 -0
  137. package/dist/components/feedback/skeleton/index.d.ts.map +1 -0
  138. package/dist/components/feedback/skeleton/skeleton.d.ts +19 -0
  139. package/dist/components/feedback/skeleton/skeleton.d.ts.map +1 -0
  140. package/dist/components/feedback/skeleton/skeleton.js +28 -0
  141. package/dist/components/feedback/skeleton/skeleton.js.map +1 -0
  142. package/dist/components/feedback/smooth-transition/index.d.ts +3 -0
  143. package/dist/components/feedback/smooth-transition/index.d.ts.map +1 -0
  144. package/dist/components/feedback/smooth-transition/smooth-transition.d.ts +68 -0
  145. package/dist/components/feedback/smooth-transition/smooth-transition.d.ts.map +1 -0
  146. package/dist/components/feedback/smooth-transition/smooth-transition.js +89 -0
  147. package/dist/components/feedback/smooth-transition/smooth-transition.js.map +1 -0
  148. package/dist/components/feedback/spinner/index.d.ts +3 -0
  149. package/dist/components/feedback/spinner/index.d.ts.map +1 -0
  150. package/dist/components/feedback/spinner/spinner.d.ts +21 -0
  151. package/dist/components/feedback/spinner/spinner.d.ts.map +1 -0
  152. package/dist/components/feedback/spinner/spinner.js +27 -0
  153. package/dist/components/feedback/spinner/spinner.js.map +1 -0
  154. package/dist/components/feedback/toast/index.d.ts +3 -0
  155. package/dist/components/feedback/toast/index.d.ts.map +1 -0
  156. package/dist/components/feedback/toast/toast.d.ts +23 -0
  157. package/dist/components/feedback/toast/toast.d.ts.map +1 -0
  158. package/dist/components/feedback/toast/toast.js +45 -0
  159. package/dist/components/feedback/toast/toast.js.map +1 -0
  160. package/dist/components/feedback/tooltip/index.d.ts +3 -0
  161. package/dist/components/feedback/tooltip/index.d.ts.map +1 -0
  162. package/dist/components/feedback/tooltip/tooltip.d.ts +39 -0
  163. package/dist/components/feedback/tooltip/tooltip.d.ts.map +1 -0
  164. package/dist/components/feedback/tooltip/tooltip.js +129 -0
  165. package/dist/components/feedback/tooltip/tooltip.js.map +1 -0
  166. package/dist/components/forms/button/button-with-icon.d.ts +18 -0
  167. package/dist/components/forms/button/button-with-icon.d.ts.map +1 -0
  168. package/dist/components/forms/button/button-with-icon.js +15 -0
  169. package/dist/components/forms/button/button-with-icon.js.map +1 -0
  170. package/dist/components/forms/button/button.d.ts +66 -0
  171. package/dist/components/forms/button/button.d.ts.map +1 -0
  172. package/dist/components/forms/button/button.examples.d.ts +73 -0
  173. package/dist/components/forms/button/button.examples.d.ts.map +1 -0
  174. package/dist/components/forms/button/button.js +118 -0
  175. package/dist/components/forms/button/button.js.map +1 -0
  176. package/dist/components/forms/button/icon-button.d.ts +23 -0
  177. package/dist/components/forms/button/icon-button.d.ts.map +1 -0
  178. package/dist/components/forms/button/icon-button.js +85 -0
  179. package/dist/components/forms/button/icon-button.js.map +1 -0
  180. package/dist/components/forms/button/index.d.ts +10 -0
  181. package/dist/components/forms/button/index.d.ts.map +1 -0
  182. package/dist/components/forms/button/inline-button.d.ts +45 -0
  183. package/dist/components/forms/button/inline-button.d.ts.map +1 -0
  184. package/dist/components/forms/button/inline-button.js +59 -0
  185. package/dist/components/forms/button/inline-button.js.map +1 -0
  186. package/dist/components/forms/button-group/button-group.d.ts +20 -0
  187. package/dist/components/forms/button-group/button-group.d.ts.map +1 -0
  188. package/dist/components/forms/button-group/button-group.js +24 -0
  189. package/dist/components/forms/button-group/button-group.js.map +1 -0
  190. package/dist/components/forms/button-group/index.d.ts +3 -0
  191. package/dist/components/forms/button-group/index.d.ts.map +1 -0
  192. package/dist/components/forms/calendar/calendar.d.ts +37 -0
  193. package/dist/components/forms/calendar/calendar.d.ts.map +1 -0
  194. package/dist/components/forms/calendar/calendar.js +131 -0
  195. package/dist/components/forms/calendar/calendar.js.map +1 -0
  196. package/dist/components/forms/calendar/index.d.ts +3 -0
  197. package/dist/components/forms/calendar/index.d.ts.map +1 -0
  198. package/dist/components/forms/checkbox/checkbox.d.ts +31 -0
  199. package/dist/components/forms/checkbox/checkbox.d.ts.map +1 -0
  200. package/dist/components/forms/checkbox/checkbox.js +39 -0
  201. package/dist/components/forms/checkbox/checkbox.js.map +1 -0
  202. package/dist/components/forms/checkbox/index.d.ts +3 -0
  203. package/dist/components/forms/checkbox/index.d.ts.map +1 -0
  204. package/dist/components/forms/code/code.d.ts +32 -0
  205. package/dist/components/forms/code/code.d.ts.map +1 -0
  206. package/dist/components/forms/code/code.js +31 -0
  207. package/dist/components/forms/code/code.js.map +1 -0
  208. package/dist/components/forms/code/index.d.ts +1 -0
  209. package/dist/components/forms/code/index.d.ts.map +1 -0
  210. package/dist/components/forms/date-picker/date-picker.d.ts +72 -0
  211. package/dist/components/forms/date-picker/date-picker.d.ts.map +1 -0
  212. package/dist/components/forms/date-picker/date-picker.js +173 -0
  213. package/dist/components/forms/date-picker/date-picker.js.map +1 -0
  214. package/dist/components/forms/date-picker/index.d.ts +3 -0
  215. package/dist/components/forms/date-picker/index.d.ts.map +1 -0
  216. package/dist/components/forms/editable-text/editable-text.d.ts +59 -0
  217. package/dist/components/forms/editable-text/editable-text.d.ts.map +1 -0
  218. package/dist/components/forms/editable-text/editable-text.js +188 -0
  219. package/dist/components/forms/editable-text/editable-text.js.map +1 -0
  220. package/dist/components/forms/editable-text/index.d.ts +3 -0
  221. package/dist/components/forms/editable-text/index.d.ts.map +1 -0
  222. package/dist/components/forms/fieldset/fieldset.d.ts +46 -0
  223. package/dist/components/forms/fieldset/fieldset.d.ts.map +1 -0
  224. package/dist/components/forms/fieldset/fieldset.js +40 -0
  225. package/dist/components/forms/fieldset/fieldset.js.map +1 -0
  226. package/dist/components/forms/fieldset/index.d.ts +3 -0
  227. package/dist/components/forms/fieldset/index.d.ts.map +1 -0
  228. package/dist/components/forms/form/form-example.d.ts +11 -0
  229. package/dist/components/forms/form/form-example.d.ts.map +1 -0
  230. package/dist/components/forms/form/form.d.ts +44 -0
  231. package/dist/components/forms/form/form.d.ts.map +1 -0
  232. package/dist/components/forms/form/form.js +39 -0
  233. package/dist/components/forms/form/form.js.map +1 -0
  234. package/dist/components/forms/form/index.d.ts +3 -0
  235. package/dist/components/forms/form/index.d.ts.map +1 -0
  236. package/dist/components/forms/form-checkbox/form-checkbox.d.ts +27 -0
  237. package/dist/components/forms/form-checkbox/form-checkbox.d.ts.map +1 -0
  238. package/dist/components/forms/form-checkbox/form-checkbox.js +58 -0
  239. package/dist/components/forms/form-checkbox/form-checkbox.js.map +1 -0
  240. package/dist/components/forms/form-checkbox/index.d.ts +3 -0
  241. package/dist/components/forms/form-checkbox/index.d.ts.map +1 -0
  242. package/dist/components/forms/form-checkbox-group/form-checkbox-group.d.ts +40 -0
  243. package/dist/components/forms/form-checkbox-group/form-checkbox-group.d.ts.map +1 -0
  244. package/dist/components/forms/form-checkbox-group/form-checkbox-group.js +74 -0
  245. package/dist/components/forms/form-checkbox-group/form-checkbox-group.js.map +1 -0
  246. package/dist/components/forms/form-field/form-field.d.ts +53 -0
  247. package/dist/components/forms/form-field/form-field.d.ts.map +1 -0
  248. package/dist/components/forms/form-field/form-field.js +56 -0
  249. package/dist/components/forms/form-field/form-field.js.map +1 -0
  250. package/dist/components/forms/form-field/index.d.ts +3 -0
  251. package/dist/components/forms/form-field/index.d.ts.map +1 -0
  252. package/dist/components/forms/form-input/form-input.d.ts +60 -0
  253. package/dist/components/forms/form-input/form-input.d.ts.map +1 -0
  254. package/dist/components/forms/form-input/form-input.js +53 -0
  255. package/dist/components/forms/form-input/form-input.js.map +1 -0
  256. package/dist/components/forms/form-select/form-select.d.ts +32 -0
  257. package/dist/components/forms/form-select/form-select.d.ts.map +1 -0
  258. package/dist/components/forms/form-select/form-select.js +34 -0
  259. package/dist/components/forms/form-select/form-select.js.map +1 -0
  260. package/dist/components/forms/form-textarea/form-textarea.d.ts +31 -0
  261. package/dist/components/forms/form-textarea/form-textarea.d.ts.map +1 -0
  262. package/dist/components/forms/form-textarea/form-textarea.js +34 -0
  263. package/dist/components/forms/form-textarea/form-textarea.js.map +1 -0
  264. package/dist/components/forms/input/index.d.ts +3 -0
  265. package/dist/components/forms/input/index.d.ts.map +1 -0
  266. package/dist/components/forms/input/input.d.ts +71 -0
  267. package/dist/components/forms/input/input.d.ts.map +1 -0
  268. package/dist/components/forms/input/input.js +64 -0
  269. package/dist/components/forms/input/input.js.map +1 -0
  270. package/dist/components/forms/input-group/index.d.ts +3 -0
  271. package/dist/components/forms/input-group/index.d.ts.map +1 -0
  272. package/dist/components/forms/input-group/input-group.d.ts +43 -0
  273. package/dist/components/forms/input-group/input-group.d.ts.map +1 -0
  274. package/dist/components/forms/input-group/input-group.js +55 -0
  275. package/dist/components/forms/input-group/input-group.js.map +1 -0
  276. package/dist/components/forms/multi-select/index.d.ts +3 -0
  277. package/dist/components/forms/multi-select/index.d.ts.map +1 -0
  278. package/dist/components/forms/multi-select/multi-select.d.ts +75 -0
  279. package/dist/components/forms/multi-select/multi-select.d.ts.map +1 -0
  280. package/dist/components/forms/multi-select/multi-select.js +259 -0
  281. package/dist/components/forms/multi-select/multi-select.js.map +1 -0
  282. package/dist/components/forms/radio/index.d.ts +3 -0
  283. package/dist/components/forms/radio/index.d.ts.map +1 -0
  284. package/dist/components/forms/radio/radio.d.ts +31 -0
  285. package/dist/components/forms/radio/radio.d.ts.map +1 -0
  286. package/dist/components/forms/radio/radio.js +74 -0
  287. package/dist/components/forms/radio/radio.js.map +1 -0
  288. package/dist/components/forms/radio-group/index.d.ts +3 -0
  289. package/dist/components/forms/radio-group/index.d.ts.map +1 -0
  290. package/dist/components/forms/radio-group/radio-group.d.ts +32 -0
  291. package/dist/components/forms/radio-group/radio-group.d.ts.map +1 -0
  292. package/dist/components/forms/radio-group/radio-group.js +28 -0
  293. package/dist/components/forms/radio-group/radio-group.js.map +1 -0
  294. package/dist/components/forms/select/index.d.ts +5 -0
  295. package/dist/components/forms/select/index.d.ts.map +1 -0
  296. package/dist/components/forms/select/select-item.d.ts +16 -0
  297. package/dist/components/forms/select/select-item.d.ts.map +1 -0
  298. package/dist/components/forms/select/select-item.js +9 -0
  299. package/dist/components/forms/select/select-item.js.map +1 -0
  300. package/dist/components/forms/select/select.d.ts +52 -0
  301. package/dist/components/forms/select/select.d.ts.map +1 -0
  302. package/dist/components/forms/select/select.js +51 -0
  303. package/dist/components/forms/select/select.js.map +1 -0
  304. package/dist/components/forms/slider/index.d.ts +3 -0
  305. package/dist/components/forms/slider/index.d.ts.map +1 -0
  306. package/dist/components/forms/slider/slider.d.ts +21 -0
  307. package/dist/components/forms/slider/slider.d.ts.map +1 -0
  308. package/dist/components/forms/slider/slider.js +65 -0
  309. package/dist/components/forms/slider/slider.js.map +1 -0
  310. package/dist/components/forms/switch/index.d.ts +3 -0
  311. package/dist/components/forms/switch/index.d.ts.map +1 -0
  312. package/dist/components/forms/switch/switch.d.ts +30 -0
  313. package/dist/components/forms/switch/switch.d.ts.map +1 -0
  314. package/dist/components/forms/switch/switch.js +104 -0
  315. package/dist/components/forms/switch/switch.js.map +1 -0
  316. package/dist/components/forms/textarea/index.d.ts +3 -0
  317. package/dist/components/forms/textarea/index.d.ts.map +1 -0
  318. package/dist/components/forms/textarea/textarea.d.ts +54 -0
  319. package/dist/components/forms/textarea/textarea.d.ts.map +1 -0
  320. package/dist/components/forms/textarea/textarea.js +55 -0
  321. package/dist/components/forms/textarea/textarea.js.map +1 -0
  322. package/dist/components/index.d.ts +124 -0
  323. package/dist/components/index.d.ts.map +1 -0
  324. package/dist/components/layout/accordion/accordion.d.ts +30 -0
  325. package/dist/components/layout/accordion/accordion.d.ts.map +1 -0
  326. package/dist/components/layout/accordion/accordion.js +38 -0
  327. package/dist/components/layout/accordion/accordion.js.map +1 -0
  328. package/dist/components/layout/accordion/index.d.ts +3 -0
  329. package/dist/components/layout/accordion/index.d.ts.map +1 -0
  330. package/dist/components/layout/action-card/action-card.d.ts +37 -0
  331. package/dist/components/layout/action-card/action-card.d.ts.map +1 -0
  332. package/dist/components/layout/action-card/action-card.js +104 -0
  333. package/dist/components/layout/action-card/action-card.js.map +1 -0
  334. package/dist/components/layout/action-card/index.d.ts +3 -0
  335. package/dist/components/layout/action-card/index.d.ts.map +1 -0
  336. package/dist/components/layout/card/card-actions.d.ts +47 -0
  337. package/dist/components/layout/card/card-actions.d.ts.map +1 -0
  338. package/dist/components/layout/card/card-actions.js +30 -0
  339. package/dist/components/layout/card/card-actions.js.map +1 -0
  340. package/dist/components/layout/card/card-body.d.ts +26 -0
  341. package/dist/components/layout/card/card-body.d.ts.map +1 -0
  342. package/dist/components/layout/card/card-body.js +22 -0
  343. package/dist/components/layout/card/card-body.js.map +1 -0
  344. package/dist/components/layout/card/card-figure.d.ts +50 -0
  345. package/dist/components/layout/card/card-figure.d.ts.map +1 -0
  346. package/dist/components/layout/card/card-figure.js +27 -0
  347. package/dist/components/layout/card/card-figure.js.map +1 -0
  348. package/dist/components/layout/card/card-footer.d.ts +46 -0
  349. package/dist/components/layout/card/card-footer.d.ts.map +1 -0
  350. package/dist/components/layout/card/card-footer.js +39 -0
  351. package/dist/components/layout/card/card-footer.js.map +1 -0
  352. package/dist/components/layout/card/card-header.d.ts +41 -0
  353. package/dist/components/layout/card/card-header.d.ts.map +1 -0
  354. package/dist/components/layout/card/card-header.js +27 -0
  355. package/dist/components/layout/card/card-header.js.map +1 -0
  356. package/dist/components/layout/card/card-title.d.ts +43 -0
  357. package/dist/components/layout/card/card-title.d.ts.map +1 -0
  358. package/dist/components/layout/card/card-title.js +21 -0
  359. package/dist/components/layout/card/card-title.js.map +1 -0
  360. package/dist/components/layout/card/card.d.ts +74 -0
  361. package/dist/components/layout/card/card.d.ts.map +1 -0
  362. package/dist/components/layout/card/card.js +64 -0
  363. package/dist/components/layout/card/card.js.map +1 -0
  364. package/dist/components/layout/card/index.d.ts +15 -0
  365. package/dist/components/layout/card/index.d.ts.map +1 -0
  366. package/dist/components/layout/container/container.d.ts +33 -0
  367. package/dist/components/layout/container/container.d.ts.map +1 -0
  368. package/dist/components/layout/container/container.js +36 -0
  369. package/dist/components/layout/container/container.js.map +1 -0
  370. package/dist/components/layout/container/index.d.ts +3 -0
  371. package/dist/components/layout/container/index.d.ts.map +1 -0
  372. package/dist/components/layout/divider/divider.d.ts +15 -0
  373. package/dist/components/layout/divider/divider.d.ts.map +1 -0
  374. package/dist/components/layout/divider/divider.js +10 -0
  375. package/dist/components/layout/divider/divider.js.map +1 -0
  376. package/dist/components/layout/divider/index.d.ts +3 -0
  377. package/dist/components/layout/divider/index.d.ts.map +1 -0
  378. package/dist/components/layout/drawer/drawer.d.ts +35 -0
  379. package/dist/components/layout/drawer/drawer.d.ts.map +1 -0
  380. package/dist/components/layout/drawer/drawer.js +108 -0
  381. package/dist/components/layout/drawer/drawer.js.map +1 -0
  382. package/dist/components/layout/drawer/index.d.ts +3 -0
  383. package/dist/components/layout/drawer/index.d.ts.map +1 -0
  384. package/dist/components/layout/feature-section/feature-section.d.ts +36 -0
  385. package/dist/components/layout/feature-section/feature-section.d.ts.map +1 -0
  386. package/dist/components/layout/feature-section/feature-section.js +37 -0
  387. package/dist/components/layout/feature-section/feature-section.js.map +1 -0
  388. package/dist/components/layout/feature-section/index.d.ts +3 -0
  389. package/dist/components/layout/feature-section/index.d.ts.map +1 -0
  390. package/dist/components/layout/footer/footer.d.ts +37 -0
  391. package/dist/components/layout/footer/footer.d.ts.map +1 -0
  392. package/dist/components/layout/footer/footer.js +36 -0
  393. package/dist/components/layout/footer/footer.js.map +1 -0
  394. package/dist/components/layout/footer/index.d.ts +3 -0
  395. package/dist/components/layout/footer/index.d.ts.map +1 -0
  396. package/dist/components/layout/grid/grid.d.ts +66 -0
  397. package/dist/components/layout/grid/grid.d.ts.map +1 -0
  398. package/dist/components/layout/grid/grid.js +62 -0
  399. package/dist/components/layout/grid/grid.js.map +1 -0
  400. package/dist/components/layout/grid/index.d.ts +3 -0
  401. package/dist/components/layout/grid/index.d.ts.map +1 -0
  402. package/dist/components/layout/hero/hero.d.ts +61 -0
  403. package/dist/components/layout/hero/hero.d.ts.map +1 -0
  404. package/dist/components/layout/hero/hero.js +79 -0
  405. package/dist/components/layout/hero/hero.js.map +1 -0
  406. package/dist/components/layout/hero/index.d.ts +3 -0
  407. package/dist/components/layout/hero/index.d.ts.map +1 -0
  408. package/dist/components/layout/left-nav-layout/index.d.ts +7 -0
  409. package/dist/components/layout/left-nav-layout/index.d.ts.map +1 -0
  410. package/dist/components/layout/left-nav-layout/left-nav-item.d.ts +56 -0
  411. package/dist/components/layout/left-nav-layout/left-nav-item.d.ts.map +1 -0
  412. package/dist/components/layout/left-nav-layout/left-nav-item.js +105 -0
  413. package/dist/components/layout/left-nav-layout/left-nav-item.js.map +1 -0
  414. package/dist/components/layout/left-nav-layout/left-nav-layout.d.ts +67 -0
  415. package/dist/components/layout/left-nav-layout/left-nav-layout.d.ts.map +1 -0
  416. package/dist/components/layout/left-nav-layout/left-nav-layout.js +182 -0
  417. package/dist/components/layout/left-nav-layout/left-nav-layout.js.map +1 -0
  418. package/dist/components/layout/left-nav-layout/left-nav-section.d.ts +40 -0
  419. package/dist/components/layout/left-nav-layout/left-nav-section.d.ts.map +1 -0
  420. package/dist/components/layout/left-nav-layout/left-nav-section.js +119 -0
  421. package/dist/components/layout/left-nav-layout/left-nav-section.js.map +1 -0
  422. package/dist/components/layout/page/index.d.ts +3 -0
  423. package/dist/components/layout/page/index.d.ts.map +1 -0
  424. package/dist/components/layout/page/page.d.ts +17 -0
  425. package/dist/components/layout/page/page.d.ts.map +1 -0
  426. package/dist/components/layout/page/page.js +9 -0
  427. package/dist/components/layout/page/page.js.map +1 -0
  428. package/dist/components/layout/page-header/index.d.ts +3 -0
  429. package/dist/components/layout/page-header/index.d.ts.map +1 -0
  430. package/dist/components/layout/page-header/page-header.d.ts +21 -0
  431. package/dist/components/layout/page-header/page-header.d.ts.map +1 -0
  432. package/dist/components/layout/page-header/page-header.js +18 -0
  433. package/dist/components/layout/page-header/page-header.js.map +1 -0
  434. package/dist/components/layout/page-transition/index.d.ts +3 -0
  435. package/dist/components/layout/page-transition/index.d.ts.map +1 -0
  436. package/dist/components/layout/page-transition/page-transition.d.ts +52 -0
  437. package/dist/components/layout/page-transition/page-transition.d.ts.map +1 -0
  438. package/dist/components/layout/page-transition/page-transition.js +43 -0
  439. package/dist/components/layout/page-transition/page-transition.js.map +1 -0
  440. package/dist/components/layout/section/index.d.ts +3 -0
  441. package/dist/components/layout/section/index.d.ts.map +1 -0
  442. package/dist/components/layout/section/section.d.ts +35 -0
  443. package/dist/components/layout/section/section.d.ts.map +1 -0
  444. package/dist/components/layout/section/section.js +18 -0
  445. package/dist/components/layout/section/section.js.map +1 -0
  446. package/dist/components/layout/section-header/index.d.ts +3 -0
  447. package/dist/components/layout/section-header/index.d.ts.map +1 -0
  448. package/dist/components/layout/section-header/section-header.d.ts +23 -0
  449. package/dist/components/layout/section-header/section-header.d.ts.map +1 -0
  450. package/dist/components/layout/section-header/section-header.js +18 -0
  451. package/dist/components/layout/section-header/section-header.js.map +1 -0
  452. package/dist/components/layout/settings-page/index.d.ts +4 -0
  453. package/dist/components/layout/settings-page/index.d.ts.map +1 -0
  454. package/dist/components/layout/settings-page/setting-item.d.ts +52 -0
  455. package/dist/components/layout/settings-page/setting-item.d.ts.map +1 -0
  456. package/dist/components/layout/settings-page/setting-item.js +31 -0
  457. package/dist/components/layout/settings-page/setting-item.js.map +1 -0
  458. package/dist/components/layout/settings-page/settings-page.d.ts +37 -0
  459. package/dist/components/layout/settings-page/settings-page.d.ts.map +1 -0
  460. package/dist/components/layout/settings-page/settings-page.js +18 -0
  461. package/dist/components/layout/settings-page/settings-page.js.map +1 -0
  462. package/dist/components/layout/settings-page/settings-section.d.ts +35 -0
  463. package/dist/components/layout/settings-page/settings-section.d.ts.map +1 -0
  464. package/dist/components/layout/settings-page/settings-section.js +17 -0
  465. package/dist/components/layout/settings-page/settings-section.js.map +1 -0
  466. package/dist/components/layout/stack/index.d.ts +3 -0
  467. package/dist/components/layout/stack/index.d.ts.map +1 -0
  468. package/dist/components/layout/stack/stack.d.ts +33 -0
  469. package/dist/components/layout/stack/stack.d.ts.map +1 -0
  470. package/dist/components/layout/stack/stack.js +44 -0
  471. package/dist/components/layout/stack/stack.js.map +1 -0
  472. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +61 -0
  473. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  474. package/dist/components/navigation/breadcrumbs/breadcrumbs.js +30 -0
  475. package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -0
  476. package/dist/components/navigation/breadcrumbs/index.d.ts +3 -0
  477. package/dist/components/navigation/breadcrumbs/index.d.ts.map +1 -0
  478. package/dist/components/navigation/dropdown/dropdown.d.ts +83 -0
  479. package/dist/components/navigation/dropdown/dropdown.d.ts.map +1 -0
  480. package/dist/components/navigation/dropdown/dropdown.js +295 -0
  481. package/dist/components/navigation/dropdown/dropdown.js.map +1 -0
  482. package/dist/components/navigation/dropdown/index.d.ts +5 -0
  483. package/dist/components/navigation/dropdown/index.d.ts.map +1 -0
  484. package/dist/components/navigation/nav/index.d.ts +3 -0
  485. package/dist/components/navigation/nav/index.d.ts.map +1 -0
  486. package/dist/components/navigation/nav/nav.d.ts +24 -0
  487. package/dist/components/navigation/nav/nav.d.ts.map +1 -0
  488. package/dist/components/navigation/nav/nav.js +32 -0
  489. package/dist/components/navigation/nav/nav.js.map +1 -0
  490. package/dist/components/navigation/nav-dropdown/index.d.ts +5 -0
  491. package/dist/components/navigation/nav-dropdown/index.d.ts.map +1 -0
  492. package/dist/components/navigation/nav-dropdown/nav-dropdown-item.d.ts +17 -0
  493. package/dist/components/navigation/nav-dropdown/nav-dropdown-item.d.ts.map +1 -0
  494. package/dist/components/navigation/nav-dropdown/nav-dropdown-item.js +17 -0
  495. package/dist/components/navigation/nav-dropdown/nav-dropdown-item.js.map +1 -0
  496. package/dist/components/navigation/nav-dropdown/nav-dropdown.d.ts +20 -0
  497. package/dist/components/navigation/nav-dropdown/nav-dropdown.d.ts.map +1 -0
  498. package/dist/components/navigation/nav-dropdown/nav-dropdown.js +24 -0
  499. package/dist/components/navigation/nav-dropdown/nav-dropdown.js.map +1 -0
  500. package/dist/components/navigation/navbar/index.d.ts +9 -0
  501. package/dist/components/navigation/navbar/index.d.ts.map +1 -0
  502. package/dist/components/navigation/navbar/navbar-brand.d.ts +23 -0
  503. package/dist/components/navigation/navbar/navbar-brand.d.ts.map +1 -0
  504. package/dist/components/navigation/navbar/navbar-brand.js +21 -0
  505. package/dist/components/navigation/navbar/navbar-brand.js.map +1 -0
  506. package/dist/components/navigation/navbar/navbar-link.d.ts +23 -0
  507. package/dist/components/navigation/navbar/navbar-link.d.ts.map +1 -0
  508. package/dist/components/navigation/navbar/navbar-link.js +34 -0
  509. package/dist/components/navigation/navbar/navbar-link.js.map +1 -0
  510. package/dist/components/navigation/navbar/navbar-toggle.d.ts +34 -0
  511. package/dist/components/navigation/navbar/navbar-toggle.d.ts.map +1 -0
  512. package/dist/components/navigation/navbar/navbar-toggle.js +37 -0
  513. package/dist/components/navigation/navbar/navbar-toggle.js.map +1 -0
  514. package/dist/components/navigation/navbar/navbar.d.ts +33 -0
  515. package/dist/components/navigation/navbar/navbar.d.ts.map +1 -0
  516. package/dist/components/navigation/navbar/navbar.js +40 -0
  517. package/dist/components/navigation/navbar/navbar.js.map +1 -0
  518. package/dist/components/navigation/notification-dropdown/index.d.ts +3 -0
  519. package/dist/components/navigation/notification-dropdown/index.d.ts.map +1 -0
  520. package/dist/components/navigation/notification-dropdown/notification-dropdown.d.ts +59 -0
  521. package/dist/components/navigation/notification-dropdown/notification-dropdown.d.ts.map +1 -0
  522. package/dist/components/navigation/notification-dropdown/notification-dropdown.js +456 -0
  523. package/dist/components/navigation/notification-dropdown/notification-dropdown.js.map +1 -0
  524. package/dist/components/navigation/pagination/index.d.ts +3 -0
  525. package/dist/components/navigation/pagination/index.d.ts.map +1 -0
  526. package/dist/components/navigation/pagination/pagination.d.ts +21 -0
  527. package/dist/components/navigation/pagination/pagination.d.ts.map +1 -0
  528. package/dist/components/navigation/pagination/pagination.js +72 -0
  529. package/dist/components/navigation/pagination/pagination.js.map +1 -0
  530. package/dist/components/navigation/scroll-nav/index.d.ts +3 -0
  531. package/dist/components/navigation/scroll-nav/index.d.ts.map +1 -0
  532. package/dist/components/navigation/scroll-nav/scroll-nav.d.ts +53 -0
  533. package/dist/components/navigation/scroll-nav/scroll-nav.d.ts.map +1 -0
  534. package/dist/components/navigation/scroll-nav/scroll-nav.js +188 -0
  535. package/dist/components/navigation/scroll-nav/scroll-nav.js.map +1 -0
  536. package/dist/components/navigation/sidebar/index.d.ts +3 -0
  537. package/dist/components/navigation/sidebar/index.d.ts.map +1 -0
  538. package/dist/components/navigation/sidebar/sidebar.d.ts +18 -0
  539. package/dist/components/navigation/sidebar/sidebar.d.ts.map +1 -0
  540. package/dist/components/navigation/sidebar/sidebar.js +41 -0
  541. package/dist/components/navigation/sidebar/sidebar.js.map +1 -0
  542. package/dist/components/navigation/stepper/index.d.ts +3 -0
  543. package/dist/components/navigation/stepper/index.d.ts.map +1 -0
  544. package/dist/components/navigation/stepper/stepper.d.ts +50 -0
  545. package/dist/components/navigation/stepper/stepper.d.ts.map +1 -0
  546. package/dist/components/navigation/stepper/stepper.js +159 -0
  547. package/dist/components/navigation/stepper/stepper.js.map +1 -0
  548. package/dist/components/navigation/tabs/index.d.ts +3 -0
  549. package/dist/components/navigation/tabs/index.d.ts.map +1 -0
  550. package/dist/components/navigation/tabs/tabs.d.ts +32 -0
  551. package/dist/components/navigation/tabs/tabs.d.ts.map +1 -0
  552. package/dist/components/navigation/tabs/tabs.js +61 -0
  553. package/dist/components/navigation/tabs/tabs.js.map +1 -0
  554. package/dist/components/system/auth-provider/auth-provider.d.ts +103 -0
  555. package/dist/components/system/auth-provider/auth-provider.d.ts.map +1 -0
  556. package/dist/components/system/auth-provider/auth-provider.js +118 -0
  557. package/dist/components/system/auth-provider/auth-provider.js.map +1 -0
  558. package/dist/components/system/auth-provider/auth-utils.d.ts +32 -0
  559. package/dist/components/system/auth-provider/auth-utils.d.ts.map +1 -0
  560. package/dist/components/system/auth-provider/auth-utils.js +83 -0
  561. package/dist/components/system/auth-provider/auth-utils.js.map +1 -0
  562. package/dist/components/system/auth-provider/index.d.ts +4 -0
  563. package/dist/components/system/auth-provider/index.d.ts.map +1 -0
  564. package/dist/components/system/color-mode-toggle/color-mode-toggle.d.ts +18 -0
  565. package/dist/components/system/color-mode-toggle/color-mode-toggle.d.ts.map +1 -0
  566. package/dist/components/system/color-mode-toggle/color-mode-toggle.js +27 -0
  567. package/dist/components/system/color-mode-toggle/color-mode-toggle.js.map +1 -0
  568. package/dist/components/system/color-mode-toggle/index.d.ts +3 -0
  569. package/dist/components/system/color-mode-toggle/index.d.ts.map +1 -0
  570. package/dist/components/system/error-boundary/error-boundary.d.ts +21 -0
  571. package/dist/components/system/error-boundary/error-boundary.d.ts.map +1 -0
  572. package/dist/components/system/icon/icon.d.ts +35 -0
  573. package/dist/components/system/icon/icon.d.ts.map +1 -0
  574. package/dist/components/system/icon/icon.js +83 -0
  575. package/dist/components/system/icon/icon.js.map +1 -0
  576. package/dist/components/system/icon/index.d.ts +3 -0
  577. package/dist/components/system/icon/index.d.ts.map +1 -0
  578. package/dist/components/system/theme-provider/index.d.ts +3 -0
  579. package/dist/components/system/theme-provider/index.d.ts.map +1 -0
  580. package/dist/components/system/theme-provider/theme-provider.d.ts +40 -0
  581. package/dist/components/system/theme-provider/theme-provider.d.ts.map +1 -0
  582. package/dist/components/system/theme-provider/theme-provider.js +55 -0
  583. package/dist/components/system/theme-provider/theme-provider.js.map +1 -0
  584. package/dist/components/typography/code/code.d.ts +24 -0
  585. package/dist/components/typography/code/code.d.ts.map +1 -0
  586. package/dist/components/typography/code/code.js +18 -0
  587. package/dist/components/typography/code/code.js.map +1 -0
  588. package/dist/components/typography/code/index.d.ts +3 -0
  589. package/dist/components/typography/code/index.d.ts.map +1 -0
  590. package/dist/components/typography/heading/heading.d.ts +32 -0
  591. package/dist/components/typography/heading/heading.d.ts.map +1 -0
  592. package/dist/components/typography/heading/heading.js +39 -0
  593. package/dist/components/typography/heading/heading.js.map +1 -0
  594. package/dist/components/typography/heading/index.d.ts +3 -0
  595. package/dist/components/typography/heading/index.d.ts.map +1 -0
  596. package/dist/components/typography/link/index.d.ts +3 -0
  597. package/dist/components/typography/link/index.d.ts.map +1 -0
  598. package/dist/components/typography/link/link.d.ts +44 -0
  599. package/dist/components/typography/link/link.d.ts.map +1 -0
  600. package/dist/components/typography/link/link.js +72 -0
  601. package/dist/components/typography/link/link.js.map +1 -0
  602. package/dist/components/typography/text/index.d.ts +3 -0
  603. package/dist/components/typography/text/index.d.ts.map +1 -0
  604. package/dist/components/typography/text/text.d.ts +104 -0
  605. package/dist/components/typography/text/text.d.ts.map +1 -0
  606. package/dist/components/typography/text/text.js +148 -0
  607. package/dist/components/typography/text/text.js.map +1 -0
  608. package/dist/components.d.ts +2 -0
  609. package/dist/components.d.ts.map +1 -0
  610. package/dist/hooks/useDebounce.d.ts +29 -0
  611. package/dist/hooks/useDebounce.d.ts.map +1 -0
  612. package/dist/hooks/useDebounce.js +26 -0
  613. package/dist/hooks/useDebounce.js.map +1 -0
  614. package/dist/hooks/useScrollReset.d.ts +11 -0
  615. package/dist/hooks/useScrollReset.d.ts.map +1 -0
  616. package/dist/hooks/useScrollReset.js +55 -0
  617. package/dist/hooks/useScrollReset.js.map +1 -0
  618. package/dist/humans.txt +8 -0
  619. package/dist/icons/logo.svg +9 -0
  620. package/dist/index.d.ts +7 -1170
  621. package/dist/index.d.ts.map +1 -0
  622. package/dist/index.js +287 -4333
  623. package/dist/index.js.map +1 -1
  624. package/dist/manifest.json +16 -0
  625. package/dist/node_modules/clsx/dist/clsx.js +18 -0
  626. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  627. package/dist/robots.txt +5 -0
  628. package/dist/sitemap.xml +8 -0
  629. package/dist/staticwebapp.config.json +23 -0
  630. package/dist/style.css +2 -2
  631. package/dist/styles.d.ts +9 -0
  632. package/dist/theme/hydn-presets.d.ts +4 -0
  633. package/dist/theme/hydn-presets.d.ts.map +1 -0
  634. package/dist/theme/size-tokens.d.ts +686 -0
  635. package/dist/theme/size-tokens.d.ts.map +1 -0
  636. package/dist/theme/size-tokens.js +636 -0
  637. package/dist/theme/size-tokens.js.map +1 -0
  638. package/dist/theme/tokens.d.ts +116 -0
  639. package/dist/theme/tokens.d.ts.map +1 -0
  640. package/dist/theme/tokens.js +164 -0
  641. package/dist/theme/tokens.js.map +1 -0
  642. package/dist/utils/debounce.d.ts +7 -0
  643. package/dist/utils/debounce.d.ts.map +1 -0
  644. package/dist/utils/debounce.js +40 -0
  645. package/dist/utils/debounce.js.map +1 -0
  646. package/package.json +49 -43
  647. package/dist/index.cjs +0 -4425
  648. package/dist/index.cjs.map +0 -1
  649. package/dist/index.d.cts +0 -1170
@@ -0,0 +1,59 @@
1
+ import { ButtonProps } from '../../forms/button/button';
2
+ export type NotificationType = 'info' | 'success' | 'warning' | 'error';
3
+ export type Notification = {
4
+ /** Unique identifier for the notification */
5
+ id: string;
6
+ /** Notification title/heading */
7
+ title: string;
8
+ /** Notification message/body */
9
+ message: string;
10
+ /** ISO timestamp string or Date object - component will parse and format */
11
+ timestamp: string | Date;
12
+ /** Read/unread status */
13
+ isRead: boolean;
14
+ /** Type determines icon color */
15
+ type: NotificationType;
16
+ };
17
+ export type NotificationDropdownProps = {
18
+ /** Array of notifications to display */
19
+ notifications: Notification[];
20
+ /** Callback when a notification is clicked */
21
+ onNotificationClick?: (notification: Notification) => void;
22
+ /** Callback when a notification is dismissed */
23
+ onNotificationDismiss?: (notificationId: string) => void;
24
+ /** Callback when "Mark all as read" is clicked */
25
+ onMarkAllAsRead?: () => void;
26
+ /** Callback when "Clear all" is clicked */
27
+ onClearAll?: () => void;
28
+ /** Custom empty state message */
29
+ emptyStateMessage?: string;
30
+ /** Custom header text - default "Notifications" */
31
+ headerText?: string;
32
+ /** Size variant */
33
+ size?: ButtonProps['size'];
34
+ /** Button variant for the trigger */
35
+ variant?: ButtonProps['variant'];
36
+ /** Button style for the trigger */
37
+ buttonStyle?: ButtonProps['style'];
38
+ /** Optional trigger icon (defaults to bell icon) */
39
+ triggerIcon?: string;
40
+ /** Badge display mode: 'full' (count + indicator), 'indicator' (dot only), 'none' (no badge) */
41
+ badgeMode?: 'full' | 'indicator' | 'none';
42
+ /** Alignment of the dropdown menu */
43
+ align?: 'start' | 'center' | 'end';
44
+ /** Maximum width for the dropdown menu */
45
+ maxWidth?: string;
46
+ /** Additional className for the trigger container */
47
+ className?: string;
48
+ /** Additional className for the dropdown menu */
49
+ menuClassName?: string;
50
+ };
51
+ /**
52
+ * NotificationDropdown component - specialized dropdown for notifications
53
+ */
54
+ declare function NotificationDropdown({ notifications, onNotificationClick, onNotificationDismiss, onMarkAllAsRead, onClearAll, emptyStateMessage, headerText, size, variant, buttonStyle, triggerIcon, badgeMode, align, maxWidth, className, menuClassName }: Readonly<NotificationDropdownProps>): import("react/jsx-runtime").JSX.Element;
55
+ declare namespace NotificationDropdown {
56
+ var displayName: string;
57
+ }
58
+ export default NotificationDropdown;
59
+ //# sourceMappingURL=notification-dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-dropdown.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/notification-dropdown/notification-dropdown.tsx"],"names":[],"mappings":"AAEA,OAAe,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGrE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAExE,MAAM,MAAM,YAAY,GAAG;IACzB,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,yBAAyB;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,iCAAiC;IACjC,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,wCAAwC;IACxC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,8CAA8C;IAC9C,mBAAmB,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3D,gDAAgD;IAChD,qBAAqB,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,qCAAqC;IACrC,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACjC,mCAAmC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC1C,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAuCF;;GAEG;AACH,iBAAS,oBAAoB,CAAC,EAC5B,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,iBAAsC,EACtC,UAA4B,EAC5B,IAAW,EACX,OAAmB,EACnB,WAAqB,EACrB,WAAoB,EACpB,SAAkB,EAClB,KAAa,EACb,QAAkB,EAClB,SAAc,EACd,aAAkB,EACnB,EAAE,QAAQ,CAAC,yBAAyB,CAAC,2CAkRrC;kBAnSQ,oBAAoB;;;AAuS7B,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,456 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { useState, useRef, useCallback, useEffect, useLayoutEffect } from "react";
3
+ import { createPortal } from "react-dom";
4
+ import Button from "../../forms/button/button.js";
5
+ import { Icon } from "../../system/icon/icon.js";
6
+ const notificationTypeIcons = {
7
+ info: "info-circle",
8
+ success: "circle-check",
9
+ warning: "alert-triangle",
10
+ error: "alert-circle"
11
+ };
12
+ const notificationTypeColors = {
13
+ info: "text-info",
14
+ success: "text-success",
15
+ warning: "text-warning",
16
+ error: "text-error"
17
+ };
18
+ function formatRelativeTime(timestamp) {
19
+ const date = typeof timestamp === "string" ? new Date(timestamp) : timestamp;
20
+ const now = /* @__PURE__ */ new Date();
21
+ const diffMs = now.getTime() - date.getTime();
22
+ const diffSecs = Math.floor(diffMs / 1e3);
23
+ const diffMins = Math.floor(diffSecs / 60);
24
+ const diffHours = Math.floor(diffMins / 60);
25
+ const diffDays = Math.floor(diffHours / 24);
26
+ if (diffSecs < 60) return "Just now";
27
+ if (diffMins < 60) return `${diffMins} min ago`;
28
+ if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? "s" : ""} ago`;
29
+ if (diffDays < 7) return `${diffDays} day${diffDays > 1 ? "s" : ""} ago`;
30
+ return date.toLocaleDateString(void 0, { month: "short", day: "numeric" });
31
+ }
32
+ function NotificationDropdown({
33
+ notifications,
34
+ onNotificationClick,
35
+ onNotificationDismiss,
36
+ onMarkAllAsRead,
37
+ onClearAll,
38
+ emptyStateMessage = "No notifications",
39
+ headerText = "Notifications",
40
+ size = "md",
41
+ variant = "neutral",
42
+ buttonStyle = "ghost",
43
+ triggerIcon = "bell",
44
+ badgeMode = "full",
45
+ align = "end",
46
+ maxWidth = "400px",
47
+ className = "",
48
+ menuClassName = ""
49
+ }) {
50
+ const [isOpen, setIsOpen] = useState(false);
51
+ const dropdownRef = useRef(null);
52
+ const triggerRef = useRef(null);
53
+ const menuRef = useRef(null);
54
+ const notificationRefs = useRef([]);
55
+ const [menuPosition, setMenuPosition] = useState(null);
56
+ const [activeIndex, setActiveIndex] = useState(-1);
57
+ const close = useCallback(() => setIsOpen(false), []);
58
+ const open = useCallback(() => setIsOpen(true), []);
59
+ const unreadCount = notifications.filter((n) => !n.isRead).length;
60
+ const hasUnread = unreadCount > 0;
61
+ useEffect(() => {
62
+ if (!isOpen) return;
63
+ const handleKey = (e) => {
64
+ const notificationItems = notificationRefs.current.filter(Boolean);
65
+ if (e.key === "ArrowDown" || e.key === "ArrowUp") {
66
+ e.preventDefault();
67
+ if (notificationItems.length === 0) return;
68
+ let nextIndex = activeIndex;
69
+ if (e.key === "ArrowDown") {
70
+ nextIndex = activeIndex < notificationItems.length - 1 ? activeIndex + 1 : 0;
71
+ } else {
72
+ nextIndex = activeIndex > 0 ? activeIndex - 1 : notificationItems.length - 1;
73
+ }
74
+ setActiveIndex(nextIndex);
75
+ notificationItems[nextIndex]?.focus();
76
+ return;
77
+ }
78
+ if (e.key === "Home") {
79
+ e.preventDefault();
80
+ if (notificationItems.length > 0) {
81
+ setActiveIndex(0);
82
+ notificationItems[0]?.focus();
83
+ }
84
+ return;
85
+ }
86
+ if (e.key === "End") {
87
+ e.preventDefault();
88
+ if (notificationItems.length > 0) {
89
+ const lastIndex = notificationItems.length - 1;
90
+ setActiveIndex(lastIndex);
91
+ notificationItems[lastIndex]?.focus();
92
+ }
93
+ return;
94
+ }
95
+ if (e.key === "Escape") {
96
+ e.preventDefault();
97
+ close();
98
+ triggerRef.current?.focus();
99
+ }
100
+ };
101
+ document.addEventListener("keydown", handleKey);
102
+ return () => document.removeEventListener("keydown", handleKey);
103
+ }, [isOpen, close, activeIndex]);
104
+ useLayoutEffect(() => {
105
+ let raf;
106
+ if (isOpen && notifications.length > 0) {
107
+ const notificationItems = notificationRefs.current.filter(Boolean);
108
+ if (notificationItems.length > 0) {
109
+ raf = requestAnimationFrame(() => {
110
+ setActiveIndex(0);
111
+ notificationItems[0]?.focus();
112
+ });
113
+ }
114
+ } else if (!isOpen) {
115
+ raf = requestAnimationFrame(() => {
116
+ setActiveIndex(-1);
117
+ });
118
+ }
119
+ return () => {
120
+ if (raf) cancelAnimationFrame(raf);
121
+ };
122
+ }, [isOpen, notifications.length]);
123
+ useEffect(() => {
124
+ if (!isOpen) return;
125
+ const handleClickOutside = (event) => {
126
+ const isClickInTrigger = dropdownRef.current && dropdownRef.current.contains(event.target);
127
+ const isClickInMenu = menuRef.current && menuRef.current.contains(event.target);
128
+ if (!isClickInTrigger && !isClickInMenu) {
129
+ close();
130
+ }
131
+ };
132
+ document.addEventListener("mousedown", handleClickOutside);
133
+ return () => document.removeEventListener("mousedown", handleClickOutside);
134
+ }, [isOpen, close]);
135
+ useLayoutEffect(() => {
136
+ if (isOpen && triggerRef.current) {
137
+ const rect = triggerRef.current.getBoundingClientRect();
138
+ setMenuPosition({
139
+ top: rect.bottom,
140
+ left: rect.left,
141
+ width: rect.width
142
+ });
143
+ } else {
144
+ setMenuPosition(null);
145
+ }
146
+ }, [isOpen]);
147
+ useEffect(() => {
148
+ if (!isOpen) return;
149
+ const handleScrollOrResize = (event) => {
150
+ if (event && event.target && menuRef.current?.contains(event.target)) {
151
+ return;
152
+ }
153
+ close();
154
+ };
155
+ window.addEventListener("scroll", handleScrollOrResize, true);
156
+ window.addEventListener("resize", handleScrollOrResize);
157
+ return () => {
158
+ window.removeEventListener("scroll", handleScrollOrResize, true);
159
+ window.removeEventListener("resize", handleScrollOrResize);
160
+ };
161
+ }, [isOpen, close]);
162
+ const getAlignmentStyle = () => {
163
+ if (!menuPosition) return {};
164
+ const baseStyle = {
165
+ top: menuPosition.top + 4,
166
+ maxWidth: maxWidth || void 0
167
+ };
168
+ if (align === "start") {
169
+ baseStyle.left = menuPosition.left;
170
+ } else if (align === "end") {
171
+ baseStyle.right = window.innerWidth - (menuPosition.left + menuPosition.width);
172
+ } else {
173
+ baseStyle.left = menuPosition.left + menuPosition.width / 2;
174
+ baseStyle.transform = "translateX(-50%)";
175
+ }
176
+ return baseStyle;
177
+ };
178
+ const handleNotificationClick = (notification) => {
179
+ onNotificationClick?.(notification);
180
+ close();
181
+ };
182
+ const handleDismiss = (e, notificationId) => {
183
+ e.stopPropagation();
184
+ if (notifications.length === 1) {
185
+ close();
186
+ }
187
+ onNotificationDismiss?.(notificationId);
188
+ };
189
+ const handleMarkAllAsRead = () => {
190
+ onMarkAllAsRead?.();
191
+ };
192
+ const handleClearAll = () => {
193
+ onClearAll?.();
194
+ close();
195
+ };
196
+ const registerNotification = useCallback((el, index) => {
197
+ notificationRefs.current[index] = el;
198
+ }, []);
199
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
200
+ /* @__PURE__ */ jsx("div", { ref: dropdownRef, className: `inline-block relative ${className}`, children: /* @__PURE__ */ jsx(
201
+ Button,
202
+ {
203
+ ref: triggerRef,
204
+ variant,
205
+ style: buttonStyle,
206
+ onClick: () => isOpen ? close() : open(),
207
+ "aria-expanded": isOpen,
208
+ "aria-haspopup": "true",
209
+ "aria-label": "Notifications",
210
+ size,
211
+ children: /* @__PURE__ */ jsxs("span", { className: "relative", children: [
212
+ /* @__PURE__ */ jsx(Icon, { name: triggerIcon, size, color: "currentColor" }),
213
+ (badgeMode === "indicator" || badgeMode === "full") && hasUnread && /* @__PURE__ */ jsx("span", { className: "absolute -top-0.5 -right-0.5 w-2 h-2 bg-info rounded-full" }),
214
+ badgeMode === "full" && unreadCount > 0 && /* @__PURE__ */ jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-4.5 h-4.5 flex items-center justify-center bg-info text-info-foreground text-[10px] font-semibold rounded-full px-1", children: unreadCount > 99 ? "99+" : unreadCount })
215
+ ] })
216
+ }
217
+ ) }),
218
+ isOpen && menuPosition && createPortal(
219
+ /* @__PURE__ */ jsxs(
220
+ "div",
221
+ {
222
+ ref: menuRef,
223
+ className: `fixed bg-popover text-popover-foreground border border-border rounded-md shadow-lg z-50 w-96 max-h-128 overflow-hidden origin-top animate-scaleIn focus:outline-none flex flex-col ${menuClassName}`,
224
+ style: getAlignmentStyle(),
225
+ role: "menu",
226
+ "aria-label": headerText,
227
+ tabIndex: -1,
228
+ children: [
229
+ notifications.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-3 border-b border-border bg-muted/30", children: [
230
+ /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold select-none", children: headerText }),
231
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
232
+ hasUnread && onMarkAllAsRead && /* @__PURE__ */ jsx(
233
+ "button",
234
+ {
235
+ type: "button",
236
+ onClick: handleMarkAllAsRead,
237
+ className: "text-xs text-primary hover:text-primary-hover transition-colors cursor-pointer",
238
+ children: "Mark all read"
239
+ }
240
+ ),
241
+ onClearAll && /* @__PURE__ */ jsx(
242
+ "button",
243
+ {
244
+ type: "button",
245
+ onClick: handleClearAll,
246
+ className: "text-xs text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
247
+ children: "Clear all"
248
+ }
249
+ )
250
+ ] })
251
+ ] }),
252
+ /* @__PURE__ */ jsx("div", { className: "overflow-y-auto flex-1 overflow-x-hidden [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:bg-transparent hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/20 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb:hover]:bg-muted-foreground/30", children: notifications.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center py-12 px-4 text-center", children: [
253
+ /* @__PURE__ */ jsx(Icon, { name: "bell-off", size: "xl", color: "currentColor", className: "text-muted-foreground mb-3" }),
254
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: emptyStateMessage })
255
+ ] }) : /* @__PURE__ */ jsx("div", { className: "grid divide-y divide-border", children: notifications.map((notification, index) => /* @__PURE__ */ jsx(
256
+ NotificationItem,
257
+ {
258
+ notification,
259
+ onClick: () => handleNotificationClick(notification),
260
+ onDismiss: (e) => handleDismiss(e, notification.id),
261
+ showDismissButton: !!onNotificationDismiss,
262
+ registerRef: (el) => registerNotification(el, index)
263
+ },
264
+ notification.id
265
+ )) }) })
266
+ ]
267
+ }
268
+ ),
269
+ document.body
270
+ )
271
+ ] });
272
+ }
273
+ NotificationDropdown.displayName = "NotificationDropdown";
274
+ function NotificationItem({
275
+ notification,
276
+ onClick,
277
+ onDismiss,
278
+ showDismissButton,
279
+ registerRef
280
+ }) {
281
+ const typeIcon = notificationTypeIcons[notification.type];
282
+ const typeColor = notificationTypeColors[notification.type];
283
+ const [swipeX, setSwipeX] = useState(0);
284
+ const [isSwiping, setIsSwiping] = useState(false);
285
+ const [isDismissing, setIsDismissing] = useState(false);
286
+ const [isHorizontalSwipe, setIsHorizontalSwipe] = useState(false);
287
+ const startXRef = useRef(0);
288
+ const startYRef = useRef(0);
289
+ const currentXRef = useRef(0);
290
+ const initialSwipeXRef = useRef(0);
291
+ const itemRef = useRef(null);
292
+ const PARTIAL_OPEN_AMOUNT = -80;
293
+ const handleTouchStart = useCallback(
294
+ (e) => {
295
+ startXRef.current = e.touches[0].clientX;
296
+ startYRef.current = e.touches[0].clientY;
297
+ currentXRef.current = e.touches[0].clientX;
298
+ initialSwipeXRef.current = swipeX;
299
+ setIsSwiping(true);
300
+ setIsHorizontalSwipe(false);
301
+ },
302
+ [swipeX]
303
+ );
304
+ const handleTouchMove = useCallback(
305
+ (e) => {
306
+ if (!isSwiping) return;
307
+ const currentY = e.touches[0].clientY;
308
+ currentXRef.current = e.touches[0].clientX;
309
+ const diffX = Math.abs(currentXRef.current - startXRef.current);
310
+ const diffY = Math.abs(currentY - startYRef.current);
311
+ if (!isHorizontalSwipe && diffX > 5 && diffX > diffY) {
312
+ setIsHorizontalSwipe(true);
313
+ }
314
+ if (isHorizontalSwipe || diffX > diffY && diffX > 5) {
315
+ e.preventDefault();
316
+ }
317
+ const diff = currentXRef.current - startXRef.current;
318
+ const newPosition = initialSwipeXRef.current + diff;
319
+ if (newPosition <= 0) {
320
+ setSwipeX(newPosition);
321
+ }
322
+ },
323
+ [isSwiping, isHorizontalSwipe]
324
+ );
325
+ const handleTouchEnd = useCallback(
326
+ (e) => {
327
+ if (!isSwiping) return;
328
+ const itemWidth = itemRef.current?.offsetWidth || 0;
329
+ const swipeDistance = Math.abs(swipeX);
330
+ const dismissThreshold = itemWidth * 0.75;
331
+ const revealThreshold = itemWidth * 0.3;
332
+ if (swipeDistance >= dismissThreshold) {
333
+ setSwipeX(-itemWidth);
334
+ requestAnimationFrame(() => {
335
+ setIsDismissing(true);
336
+ });
337
+ setTimeout(() => {
338
+ onDismiss(e);
339
+ }, 300);
340
+ } else if (swipeDistance >= revealThreshold) {
341
+ setSwipeX(PARTIAL_OPEN_AMOUNT);
342
+ } else {
343
+ setSwipeX(0);
344
+ }
345
+ setIsSwiping(false);
346
+ },
347
+ [isSwiping, swipeX, onDismiss, PARTIAL_OPEN_AMOUNT]
348
+ );
349
+ const handleTrashClick = useCallback(
350
+ (e) => {
351
+ e.stopPropagation();
352
+ const itemWidth = itemRef.current?.offsetWidth || 0;
353
+ setSwipeX(-itemWidth);
354
+ requestAnimationFrame(() => {
355
+ setIsDismissing(true);
356
+ });
357
+ setTimeout(() => {
358
+ onDismiss(e);
359
+ }, 300);
360
+ },
361
+ [onDismiss]
362
+ );
363
+ const handleXButtonClick = useCallback(
364
+ (e) => {
365
+ e.stopPropagation();
366
+ requestAnimationFrame(() => {
367
+ setIsDismissing(true);
368
+ });
369
+ setTimeout(() => {
370
+ onDismiss(e);
371
+ }, 300);
372
+ },
373
+ [onDismiss]
374
+ );
375
+ const setRefs = useCallback(
376
+ (el) => {
377
+ itemRef.current = el;
378
+ registerRef(el);
379
+ },
380
+ [registerRef]
381
+ );
382
+ const isTouchDevice = typeof window !== "undefined" && (window.matchMedia("(pointer: coarse)").matches || "ontouchstart" in window);
383
+ return /* @__PURE__ */ jsxs(
384
+ "div",
385
+ {
386
+ className: "relative overflow-hidden transition-[max-height,opacity,margin] duration-300 ease-out",
387
+ style: {
388
+ maxHeight: isDismissing ? "0px" : "200px",
389
+ opacity: isDismissing ? 0 : 1,
390
+ marginTop: isDismissing ? "-1px" : "0px",
391
+ marginBottom: isDismissing ? "-1px" : "0px"
392
+ },
393
+ children: [
394
+ isTouchDevice && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-error flex items-center justify-end px-6", children: /* @__PURE__ */ jsx(
395
+ "button",
396
+ {
397
+ type: "button",
398
+ onClick: handleTrashClick,
399
+ className: "p-2 hover:bg-error-foreground/10 rounded transition-colors cursor-pointer",
400
+ "aria-label": "Delete notification",
401
+ children: /* @__PURE__ */ jsx(Icon, { name: "trash", size: "md", color: "currentColor", className: "text-error-foreground" })
402
+ }
403
+ ) }),
404
+ /* @__PURE__ */ jsx(
405
+ "div",
406
+ {
407
+ ref: setRefs,
408
+ role: "button",
409
+ tabIndex: 0,
410
+ onClick,
411
+ onKeyDown: (e) => {
412
+ if (e.key === "Enter" || e.key === " ") {
413
+ e.preventDefault();
414
+ onClick();
415
+ }
416
+ },
417
+ onTouchStart: handleTouchStart,
418
+ onTouchMove: handleTouchMove,
419
+ onTouchEnd: handleTouchEnd,
420
+ style: {
421
+ transform: `translateX(${swipeX}px)`,
422
+ transition: isSwiping ? "none" : "transform 0.2s ease-out",
423
+ touchAction: "pan-y"
424
+ },
425
+ className: `w-full text-left px-4 py-3 hover:bg-muted/50 relative group cursor-pointer ${!notification.isRead ? "bg-muted/20" : ""} bg-popover`,
426
+ children: /* @__PURE__ */ jsxs("div", { className: "flex gap-3", children: [
427
+ /* @__PURE__ */ jsxs("div", { className: "relative shrink-0 pt-0.5", children: [
428
+ /* @__PURE__ */ jsx(Icon, { name: typeIcon, size: "md", color: "currentColor", className: typeColor }),
429
+ !notification.isRead && /* @__PURE__ */ jsx("span", { className: "absolute -top-0.5 -right-0.5 w-2 h-2 bg-info rounded-full ring-2 ring-popover" })
430
+ ] }),
431
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0 pr-6", children: [
432
+ /* @__PURE__ */ jsx("div", { className: "flex items-start justify-between gap-2 mb-1", children: /* @__PURE__ */ jsx("h4", { className: "text-sm font-semibold text-foreground line-clamp-1", children: notification.title }) }),
433
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground/80 line-clamp-2 mb-1.5", children: notification.message }),
434
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: formatRelativeTime(notification.timestamp) })
435
+ ] }),
436
+ showDismissButton && /* @__PURE__ */ jsx(
437
+ "button",
438
+ {
439
+ type: "button",
440
+ onClick: handleXButtonClick,
441
+ className: "absolute top-3 right-3 opacity-0 group-hover:opacity-100 transition-opacity p-1 hover:bg-muted rounded cursor-pointer",
442
+ "aria-label": "Dismiss notification",
443
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "sm", color: "currentColor", className: "text-muted-foreground" })
444
+ }
445
+ )
446
+ ] })
447
+ }
448
+ )
449
+ ]
450
+ }
451
+ );
452
+ }
453
+ export {
454
+ NotificationDropdown as default
455
+ };
456
+ //# sourceMappingURL=notification-dropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-dropdown.js","sources":["../../../../src/components/navigation/notification-dropdown/notification-dropdown.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useLayoutEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport Button, { type ButtonProps } from '../../forms/button/button';\nimport { Icon } from '@/components/system/icon';\n\nexport type NotificationType = 'info' | 'success' | 'warning' | 'error';\n\nexport type Notification = {\n /** Unique identifier for the notification */\n id: string;\n /** Notification title/heading */\n title: string;\n /** Notification message/body */\n message: string;\n /** ISO timestamp string or Date object - component will parse and format */\n timestamp: string | Date;\n /** Read/unread status */\n isRead: boolean;\n /** Type determines icon color */\n type: NotificationType;\n};\n\nexport type NotificationDropdownProps = {\n /** Array of notifications to display */\n notifications: Notification[];\n /** Callback when a notification is clicked */\n onNotificationClick?: (notification: Notification) => void;\n /** Callback when a notification is dismissed */\n onNotificationDismiss?: (notificationId: string) => void;\n /** Callback when \"Mark all as read\" is clicked */\n onMarkAllAsRead?: () => void;\n /** Callback when \"Clear all\" is clicked */\n onClearAll?: () => void;\n /** Custom empty state message */\n emptyStateMessage?: string;\n /** Custom header text - default \"Notifications\" */\n headerText?: string;\n /** Size variant */\n size?: ButtonProps['size'];\n /** Button variant for the trigger */\n variant?: ButtonProps['variant'];\n /** Button style for the trigger */\n buttonStyle?: ButtonProps['style'];\n /** Optional trigger icon (defaults to bell icon) */\n triggerIcon?: string;\n /** Badge display mode: 'full' (count + indicator), 'indicator' (dot only), 'none' (no badge) */\n badgeMode?: 'full' | 'indicator' | 'none';\n /** Alignment of the dropdown menu */\n align?: 'start' | 'center' | 'end';\n /** Maximum width for the dropdown menu */\n maxWidth?: string;\n /** Additional className for the trigger container */\n className?: string;\n /** Additional className for the dropdown menu */\n menuClassName?: string;\n};\n\n// Icon mapping for notification types\nconst notificationTypeIcons: Record<NotificationType, string> = {\n info: 'info-circle',\n success: 'circle-check',\n warning: 'alert-triangle',\n error: 'alert-circle'\n};\n\n// Color mapping for notification type icons\nconst notificationTypeColors: Record<NotificationType, string> = {\n info: 'text-info',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error'\n};\n\n/**\n * Format timestamp to relative time (e.g., \"2 min ago\", \"3 hours ago\")\n */\nfunction formatRelativeTime(timestamp: string | Date): string {\n const date = typeof timestamp === 'string' ? new Date(timestamp) : timestamp;\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSecs = Math.floor(diffMs / 1000);\n const diffMins = Math.floor(diffSecs / 60);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffSecs < 60) return 'Just now';\n if (diffMins < 60) return `${diffMins} min ago`;\n if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;\n if (diffDays < 7) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;\n\n // For older notifications, show the date\n return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n}\n\n/**\n * NotificationDropdown component - specialized dropdown for notifications\n */\nfunction NotificationDropdown({\n notifications,\n onNotificationClick,\n onNotificationDismiss,\n onMarkAllAsRead,\n onClearAll,\n emptyStateMessage = 'No notifications',\n headerText = 'Notifications',\n size = 'md',\n variant = 'neutral',\n buttonStyle = 'ghost',\n triggerIcon = 'bell',\n badgeMode = 'full',\n align = 'end',\n maxWidth = '400px',\n className = '',\n menuClassName = ''\n}: Readonly<NotificationDropdownProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const notificationRefs = useRef<Array<HTMLDivElement | null>>([]);\n const [menuPosition, setMenuPosition] = useState<{ top: number; left: number; width: number } | null>(null);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n\n const close = useCallback(() => setIsOpen(false), []);\n const open = useCallback(() => setIsOpen(true), []);\n\n const unreadCount = notifications.filter((n) => !n.isRead).length;\n const hasUnread = unreadCount > 0;\n\n // Handle keyboard\n useEffect(() => {\n if (!isOpen) return;\n const handleKey = (e: KeyboardEvent) => {\n const notificationItems = notificationRefs.current.filter(Boolean);\n\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n if (notificationItems.length === 0) return;\n\n let nextIndex = activeIndex;\n if (e.key === 'ArrowDown') {\n nextIndex = activeIndex < notificationItems.length - 1 ? activeIndex + 1 : 0;\n } else {\n nextIndex = activeIndex > 0 ? activeIndex - 1 : notificationItems.length - 1;\n }\n\n setActiveIndex(nextIndex);\n notificationItems[nextIndex]?.focus();\n return;\n }\n\n if (e.key === 'Home') {\n e.preventDefault();\n if (notificationItems.length > 0) {\n setActiveIndex(0);\n notificationItems[0]?.focus();\n }\n return;\n }\n\n if (e.key === 'End') {\n e.preventDefault();\n if (notificationItems.length > 0) {\n const lastIndex = notificationItems.length - 1;\n setActiveIndex(lastIndex);\n notificationItems[lastIndex]?.focus();\n }\n return;\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n close();\n triggerRef.current?.focus();\n }\n };\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [isOpen, close, activeIndex]);\n\n useLayoutEffect(() => {\n let raf: number | undefined;\n if (isOpen && notifications.length > 0) {\n const notificationItems = notificationRefs.current.filter(Boolean);\n if (notificationItems.length > 0) {\n raf = requestAnimationFrame(() => {\n setActiveIndex(0);\n notificationItems[0]?.focus();\n });\n }\n } else if (!isOpen) {\n raf = requestAnimationFrame(() => {\n setActiveIndex(-1);\n });\n }\n return () => {\n if (raf) cancelAnimationFrame(raf);\n };\n }, [isOpen, notifications.length]);\n\n // Outside click close\n useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (event: MouseEvent) => {\n const isClickInTrigger = dropdownRef.current && dropdownRef.current.contains(event.target as Node);\n const isClickInMenu = menuRef.current && menuRef.current.contains(event.target as Node);\n\n if (!isClickInTrigger && !isClickInMenu) {\n close();\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, close]);\n\n useLayoutEffect(() => {\n if (isOpen && triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n setMenuPosition({\n top: rect.bottom,\n left: rect.left,\n width: rect.width\n });\n } else {\n setMenuPosition(null);\n }\n }, [isOpen]);\n\n // Close on scroll or resize\n useEffect(() => {\n if (!isOpen) return;\n\n const handleScrollOrResize = (event?: Event) => {\n if (event && event.target && menuRef.current?.contains(event.target as Node)) {\n return;\n }\n close();\n };\n\n window.addEventListener('scroll', handleScrollOrResize, true);\n window.addEventListener('resize', handleScrollOrResize);\n\n return () => {\n window.removeEventListener('scroll', handleScrollOrResize, true);\n window.removeEventListener('resize', handleScrollOrResize);\n };\n }, [isOpen, close]);\n\n const getAlignmentStyle = (): React.CSSProperties => {\n if (!menuPosition) return {};\n const baseStyle: React.CSSProperties = {\n top: menuPosition.top + 4,\n maxWidth: maxWidth || undefined\n };\n\n if (align === 'start') {\n baseStyle.left = menuPosition.left;\n } else if (align === 'end') {\n baseStyle.right = window.innerWidth - (menuPosition.left + menuPosition.width);\n } else {\n baseStyle.left = menuPosition.left + menuPosition.width / 2;\n baseStyle.transform = 'translateX(-50%)';\n }\n\n return baseStyle;\n };\n\n const handleNotificationClick = (notification: Notification) => {\n onNotificationClick?.(notification);\n // Optionally close the dropdown after clicking a notification\n close();\n };\n\n const handleDismiss = (e: React.MouseEvent, notificationId: string) => {\n e.stopPropagation();\n\n // If this is the last notification, close the dropdown after animation\n if (notifications.length === 1) {\n close();\n }\n\n onNotificationDismiss?.(notificationId);\n };\n\n const handleMarkAllAsRead = () => {\n onMarkAllAsRead?.();\n };\n\n const handleClearAll = () => {\n onClearAll?.();\n close();\n };\n\n const registerNotification = useCallback((el: HTMLDivElement | null, index: number) => {\n notificationRefs.current[index] = el;\n }, []);\n\n return (\n <>\n <div ref={dropdownRef} className={`inline-block relative ${className}`}>\n <Button\n ref={triggerRef}\n variant={variant}\n style={buttonStyle}\n onClick={() => (isOpen ? close() : open())}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n aria-label=\"Notifications\"\n size={size}\n >\n <span className=\"relative\">\n <Icon name={triggerIcon} size={size} color=\"currentColor\" />\n {(badgeMode === 'indicator' || badgeMode === 'full') && hasUnread && (\n <span className=\"absolute -top-0.5 -right-0.5 w-2 h-2 bg-info rounded-full\" />\n )}\n {badgeMode === 'full' && unreadCount > 0 && (\n <span className=\"absolute -top-1.5 -right-1.5 min-w-4.5 h-4.5 flex items-center justify-center bg-info text-info-foreground text-[10px] font-semibold rounded-full px-1\">\n {unreadCount > 99 ? '99+' : unreadCount}\n </span>\n )}\n </span>\n </Button>\n </div>\n {isOpen &&\n menuPosition &&\n createPortal(\n <div\n ref={menuRef}\n className={`fixed bg-popover text-popover-foreground border border-border rounded-md shadow-lg z-50 w-96 max-h-128 overflow-hidden origin-top animate-scaleIn focus:outline-none flex flex-col ${menuClassName}`}\n style={getAlignmentStyle()}\n role=\"menu\"\n aria-label={headerText}\n tabIndex={-1}\n >\n {/* Header with actions */}\n {notifications.length > 0 && (\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-border bg-muted/30\">\n <h3 className=\"text-sm font-semibold select-none\">{headerText}</h3>\n <div className=\"flex items-center gap-2\">\n {hasUnread && onMarkAllAsRead && (\n <button\n type=\"button\"\n onClick={handleMarkAllAsRead}\n className=\"text-xs text-primary hover:text-primary-hover transition-colors cursor-pointer\"\n >\n Mark all read\n </button>\n )}\n {onClearAll && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className=\"text-xs text-muted-foreground hover:text-foreground transition-colors cursor-pointer\"\n >\n Clear all\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Notifications list or empty state */}\n <div className=\"overflow-y-auto flex-1 overflow-x-hidden [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:bg-transparent hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/20 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb:hover]:bg-muted-foreground/30\">\n {notifications.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-12 px-4 text-center\">\n <Icon name=\"bell-off\" size=\"xl\" color=\"currentColor\" className=\"text-muted-foreground mb-3\" />\n <p className=\"text-sm text-muted-foreground\">{emptyStateMessage}</p>\n </div>\n ) : (\n <div className=\"grid divide-y divide-border\">\n {notifications.map((notification, index) => (\n <NotificationItem\n key={notification.id}\n notification={notification}\n onClick={() => handleNotificationClick(notification)}\n onDismiss={(e) => handleDismiss(e, notification.id)}\n showDismissButton={!!onNotificationDismiss}\n registerRef={(el) => registerNotification(el, index)}\n />\n ))}\n </div>\n )}\n </div>\n </div>,\n document.body\n )}\n </>\n );\n}\n\nNotificationDropdown.displayName = 'NotificationDropdown';\n\nexport default NotificationDropdown;\n\n// NotificationItem component\ntype NotificationItemProps = {\n notification: Notification;\n onClick: () => void;\n onDismiss: (e: React.MouseEvent) => void;\n showDismissButton: boolean;\n registerRef: (el: HTMLDivElement | null) => void;\n};\n\nfunction NotificationItem({\n notification,\n onClick,\n onDismiss,\n showDismissButton,\n registerRef\n}: Readonly<NotificationItemProps>) {\n const typeIcon = notificationTypeIcons[notification.type];\n const typeColor = notificationTypeColors[notification.type];\n const [swipeX, setSwipeX] = useState(0);\n const [isSwiping, setIsSwiping] = useState(false);\n const [isDismissing, setIsDismissing] = useState(false);\n const [isHorizontalSwipe, setIsHorizontalSwipe] = useState(false);\n const startXRef = useRef(0);\n const startYRef = useRef(0);\n const currentXRef = useRef(0);\n const initialSwipeXRef = useRef(0); // Track position when touch starts\n const itemRef = useRef<HTMLDivElement | null>(null);\n const PARTIAL_OPEN_AMOUNT = -80; // How far to slide to reveal delete button\n\n const handleTouchStart = useCallback(\n (e: React.TouchEvent) => {\n startXRef.current = e.touches[0].clientX;\n startYRef.current = e.touches[0].clientY;\n currentXRef.current = e.touches[0].clientX;\n initialSwipeXRef.current = swipeX; // Remember where we are\n setIsSwiping(true);\n setIsHorizontalSwipe(false);\n },\n [swipeX]\n );\n\n const handleTouchMove = useCallback(\n (e: React.TouchEvent) => {\n if (!isSwiping) return;\n\n const currentY = e.touches[0].clientY;\n currentXRef.current = e.touches[0].clientX;\n\n const diffX = Math.abs(currentXRef.current - startXRef.current);\n const diffY = Math.abs(currentY - startYRef.current);\n\n // Detect horizontal swipe early and lock it in\n if (!isHorizontalSwipe && diffX > 5 && diffX > diffY) {\n setIsHorizontalSwipe(true);\n }\n\n // If this is a horizontal swipe, always prevent default\n if (isHorizontalSwipe || (diffX > diffY && diffX > 5)) {\n e.preventDefault();\n }\n\n const diff = currentXRef.current - startXRef.current;\n const newPosition = initialSwipeXRef.current + diff;\n\n // Only allow left swipe (negative values) and don't go past 0 (right)\n if (newPosition <= 0) {\n setSwipeX(newPosition);\n }\n },\n [isSwiping, isHorizontalSwipe]\n );\n\n const handleTouchEnd = useCallback(\n (e: React.TouchEvent) => {\n if (!isSwiping) return;\n const itemWidth = itemRef.current?.offsetWidth || 0;\n const swipeDistance = Math.abs(swipeX);\n const dismissThreshold = itemWidth * 0.75; // 75% for auto-dismiss\n const revealThreshold = itemWidth * 0.3; // 30% to reveal delete button\n\n if (swipeDistance >= dismissThreshold) {\n // Large swipe: complete the swipe animation then dismiss\n setSwipeX(-itemWidth);\n // Delay state change to ensure transition triggers\n requestAnimationFrame(() => {\n setIsDismissing(true);\n });\n setTimeout(() => {\n onDismiss(e as unknown as React.MouseEvent);\n }, 300);\n } else if (swipeDistance >= revealThreshold) {\n // Medium swipe: snap to partial open state showing delete button\n setSwipeX(PARTIAL_OPEN_AMOUNT);\n } else {\n // Small swipe: snap back closed\n setSwipeX(0);\n }\n setIsSwiping(false);\n },\n [isSwiping, swipeX, onDismiss, PARTIAL_OPEN_AMOUNT]\n );\n\n const handleTrashClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n const itemWidth = itemRef.current?.offsetWidth || 0;\n // Animate out then dismiss\n setSwipeX(-itemWidth);\n // Delay state change to ensure transition triggers\n requestAnimationFrame(() => {\n setIsDismissing(true);\n });\n setTimeout(() => {\n onDismiss(e);\n }, 300);\n },\n [onDismiss]\n );\n\n const handleXButtonClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n // Trigger collapse animation\n requestAnimationFrame(() => {\n setIsDismissing(true);\n });\n setTimeout(() => {\n onDismiss(e);\n }, 300);\n },\n [onDismiss]\n );\n\n const setRefs = useCallback(\n (el: HTMLDivElement | null) => {\n itemRef.current = el;\n registerRef(el);\n },\n [registerRef]\n );\n\n // Detect if this is a touch device\n const isTouchDevice =\n typeof window !== 'undefined' && (window.matchMedia('(pointer: coarse)').matches || 'ontouchstart' in window);\n\n return (\n <div\n className=\"relative overflow-hidden transition-[max-height,opacity,margin] duration-300 ease-out\"\n style={{\n maxHeight: isDismissing ? '0px' : '200px',\n opacity: isDismissing ? 0 : 1,\n marginTop: isDismissing ? '-1px' : '0px',\n marginBottom: isDismissing ? '-1px' : '0px'\n }}\n >\n {/* Red delete background - revealed on swipe (touch devices only) */}\n {isTouchDevice && (\n <div className=\"absolute inset-0 bg-error flex items-center justify-end px-6\">\n <button\n type=\"button\"\n onClick={handleTrashClick}\n className=\"p-2 hover:bg-error-foreground/10 rounded transition-colors cursor-pointer\"\n aria-label=\"Delete notification\"\n >\n <Icon name=\"trash\" size=\"md\" color=\"currentColor\" className=\"text-error-foreground\" />\n </button>\n </div>\n )}\n\n {/* Notification content */}\n <div\n ref={setRefs}\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n }}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n style={{\n transform: `translateX(${swipeX}px)`,\n transition: isSwiping ? 'none' : 'transform 0.2s ease-out',\n touchAction: 'pan-y'\n }}\n className={`w-full text-left px-4 py-3 hover:bg-muted/50 relative group cursor-pointer ${\n !notification.isRead ? 'bg-muted/20' : ''\n } bg-popover`}\n >\n <div className=\"flex gap-3\">\n {/* Icon with unread indicator */}\n <div className=\"relative shrink-0 pt-0.5\">\n <Icon name={typeIcon} size=\"md\" color=\"currentColor\" className={typeColor} />\n {!notification.isRead && (\n <span className=\"absolute -top-0.5 -right-0.5 w-2 h-2 bg-info rounded-full ring-2 ring-popover\" />\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0 pr-6\">\n <div className=\"flex items-start justify-between gap-2 mb-1\">\n <h4 className=\"text-sm font-semibold text-foreground line-clamp-1\">{notification.title}</h4>\n </div>\n <p className=\"text-sm text-foreground/80 line-clamp-2 mb-1.5\">{notification.message}</p>\n <span className=\"text-xs text-muted-foreground\">{formatRelativeTime(notification.timestamp)}</span>\n </div>\n\n {/* Dismiss button */}\n {showDismissButton && (\n <button\n type=\"button\"\n onClick={handleXButtonClick}\n className=\"absolute top-3 right-3 opacity-0 group-hover:opacity-100 transition-opacity p-1 hover:bg-muted rounded cursor-pointer\"\n aria-label=\"Dismiss notification\"\n >\n <Icon name=\"x\" size=\"sm\" color=\"currentColor\" className=\"text-muted-foreground\" />\n </button>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { default } from './pagination';
2
+ export type { PaginationProps } from './pagination';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/pagination/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type PaginationProps = {
2
+ /** The currently active page number */
3
+ currentPage: number;
4
+ /** Total number of pages available */
5
+ totalPages: number;
6
+ /** Callback fired when a page is selected */
7
+ onPageChange: (page: number) => void;
8
+ /** Number of page buttons to show on each side of current page (defaults to 1) */
9
+ siblingCount?: number;
10
+ /** Additional CSS classes for the pagination container */
11
+ className?: string;
12
+ };
13
+ /**
14
+ * Pagination - Page controls with active state
15
+ */
16
+ declare function Pagination({ currentPage, totalPages, onPageChange, siblingCount, className }: Readonly<PaginationProps>): import("react/jsx-runtime").JSX.Element;
17
+ declare namespace Pagination {
18
+ var displayName: string;
19
+ }
20
+ export default Pagination;
21
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/pagination/pagination.tsx"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,iBAAS,UAAU,CAAC,EAClB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAgB,EAChB,SAAc,EACf,EAAE,QAAQ,CAAC,eAAe,CAAC,2CA8E3B;kBApFQ,UAAU;;;AAwFnB,eAAe,UAAU,CAAC"}