@banzamel/mineralui 0.9.0 → 0.10.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 (783) hide show
  1. package/README.md +152 -151
  2. package/dist/AmericanExpressIcon-Bpk-Yz4y.js +1794 -0
  3. package/dist/AmericanExpressIcon-Bpk-Yz4y.js.map +1 -0
  4. package/dist/AmericanExpressIcon-Duhw7WXn.cjs +2 -0
  5. package/dist/AmericanExpressIcon-Duhw7WXn.cjs.map +1 -0
  6. package/dist/AppShell-BGFVRml6.js +659 -0
  7. package/dist/AppShell-BGFVRml6.js.map +1 -0
  8. package/dist/AppShell-ButYSI7U.cjs +2 -0
  9. package/dist/AppShell-ButYSI7U.cjs.map +1 -0
  10. package/dist/ArrowDownIcon-DzDirevG.js +21 -0
  11. package/dist/ArrowDownIcon-DzDirevG.js.map +1 -0
  12. package/dist/ArrowDownIcon-EfyFLBHR.cjs +2 -0
  13. package/dist/ArrowDownIcon-EfyFLBHR.cjs.map +1 -0
  14. package/dist/Avatar-Ba4TdSXp.cjs +2 -0
  15. package/dist/Avatar-Ba4TdSXp.cjs.map +1 -0
  16. package/dist/Avatar-BzokUdR4.js +50 -0
  17. package/dist/Avatar-BzokUdR4.js.map +1 -0
  18. package/dist/Badge-BF8-zXDl.js +15 -0
  19. package/dist/Badge-BF8-zXDl.js.map +1 -0
  20. package/dist/Badge-CivRCrzY.cjs +2 -0
  21. package/dist/Badge-CivRCrzY.cjs.map +1 -0
  22. package/dist/BrandMoreIcons-Cb4cXa_M.cjs +2 -0
  23. package/dist/BrandMoreIcons-Cb4cXa_M.cjs.map +1 -0
  24. package/dist/BrandMoreIcons-DnusZA-G.js +825 -0
  25. package/dist/BrandMoreIcons-DnusZA-G.js.map +1 -0
  26. package/dist/Button-BUd8Dkdx.cjs +2 -0
  27. package/dist/Button-BUd8Dkdx.cjs.map +1 -0
  28. package/dist/Button-BnxXh7zp.js +52 -0
  29. package/dist/Button-BnxXh7zp.js.map +1 -0
  30. package/dist/CalendarBoard-DidNBym4.js +998 -0
  31. package/dist/CalendarBoard-DidNBym4.js.map +1 -0
  32. package/dist/CalendarBoard-DvGimf8K.cjs +2 -0
  33. package/dist/CalendarBoard-DvGimf8K.cjs.map +1 -0
  34. package/dist/CalendarIcon-D74I9hJl.cjs +2 -0
  35. package/dist/CalendarIcon-D74I9hJl.cjs.map +1 -0
  36. package/dist/CalendarIcon-gvWV3ioD.js +29 -0
  37. package/dist/CalendarIcon-gvWV3ioD.js.map +1 -0
  38. package/dist/Card-AbIdSFmm.cjs +2 -0
  39. package/dist/Card-AbIdSFmm.cjs.map +1 -0
  40. package/dist/Card-B_4TR7gc.js +55 -0
  41. package/dist/Card-B_4TR7gc.js.map +1 -0
  42. package/dist/CardGrid-Cm0qx9ue.cjs +2 -0
  43. package/dist/CardGrid-Cm0qx9ue.cjs.map +1 -0
  44. package/dist/CardGrid-nqnCwmTD.js +581 -0
  45. package/dist/CardGrid-nqnCwmTD.js.map +1 -0
  46. package/dist/Checkbox-B4t7uzS2.js +60 -0
  47. package/dist/Checkbox-B4t7uzS2.js.map +1 -0
  48. package/dist/Checkbox-BXetIDRT.cjs +2 -0
  49. package/dist/Checkbox-BXetIDRT.cjs.map +1 -0
  50. package/dist/ChevronDownIcon-BDiyHPT4.js +15 -0
  51. package/dist/ChevronDownIcon-BDiyHPT4.js.map +1 -0
  52. package/dist/ChevronDownIcon-CkT_O5e5.cjs +2 -0
  53. package/dist/ChevronDownIcon-CkT_O5e5.cjs.map +1 -0
  54. package/dist/ChevronLeftIcon-DVwatRi0.cjs +2 -0
  55. package/dist/ChevronLeftIcon-DVwatRi0.cjs.map +1 -0
  56. package/dist/ChevronLeftIcon-lTktpFVi.js +15 -0
  57. package/dist/ChevronLeftIcon-lTktpFVi.js.map +1 -0
  58. package/dist/ChevronRightIcon-1oaUsxM2.js +15 -0
  59. package/dist/ChevronRightIcon-1oaUsxM2.js.map +1 -0
  60. package/dist/ChevronRightIcon-Bxqjb5s0.cjs +2 -0
  61. package/dist/ChevronRightIcon-Bxqjb5s0.cjs.map +1 -0
  62. package/dist/ClockIcon-CTHDAJUU.js +19 -0
  63. package/dist/ClockIcon-CTHDAJUU.js.map +1 -0
  64. package/dist/ClockIcon-DeDZlnTQ.cjs +2 -0
  65. package/dist/ClockIcon-DeDZlnTQ.cjs.map +1 -0
  66. package/dist/CloseIcon-5btDsUxB.cjs +2 -0
  67. package/dist/CloseIcon-5btDsUxB.cjs.map +1 -0
  68. package/dist/CloseIcon-DGl8CDLK.js +15 -0
  69. package/dist/CloseIcon-DGl8CDLK.js.map +1 -0
  70. package/dist/ColorPicker-BqE5PvW5.js +457 -0
  71. package/dist/ColorPicker-BqE5PvW5.js.map +1 -0
  72. package/dist/ColorPicker-DlrPaM8W.cjs +2 -0
  73. package/dist/ColorPicker-DlrPaM8W.cjs.map +1 -0
  74. package/dist/DropdownMenu-Bf1l4spO.js +139 -0
  75. package/dist/DropdownMenu-Bf1l4spO.js.map +1 -0
  76. package/dist/DropdownMenu-CvUG4QEC.cjs +2 -0
  77. package/dist/DropdownMenu-CvUG4QEC.cjs.map +1 -0
  78. package/dist/FileExtIcons-BecWBncW.js +145 -0
  79. package/dist/FileExtIcons-BecWBncW.js.map +1 -0
  80. package/dist/FileExtIcons-FTFddWmg.cjs +2 -0
  81. package/dist/FileExtIcons-FTFddWmg.cjs.map +1 -0
  82. package/dist/FolderOpenIcon-BAxBjkbK.js +31 -0
  83. package/dist/FolderOpenIcon-BAxBjkbK.js.map +1 -0
  84. package/dist/FolderOpenIcon-D2fsAXLM.cjs +2 -0
  85. package/dist/FolderOpenIcon-D2fsAXLM.cjs.map +1 -0
  86. package/dist/Heading-CALsycVL.cjs +2 -0
  87. package/dist/Heading-CALsycVL.cjs.map +1 -0
  88. package/dist/Heading-DtcgehrI.js +17 -0
  89. package/dist/Heading-DtcgehrI.js.map +1 -0
  90. package/dist/I18nProvider-CAnFu85r.js +69 -0
  91. package/dist/I18nProvider-CAnFu85r.js.map +1 -0
  92. package/dist/I18nProvider-CiYjTmgv.cjs +2 -0
  93. package/dist/I18nProvider-CiYjTmgv.cjs.map +1 -0
  94. package/dist/Icon-B-s6VJr5.cjs +2 -0
  95. package/dist/Icon-B-s6VJr5.cjs.map +1 -0
  96. package/dist/Icon-B848Vysm.js +45 -0
  97. package/dist/Icon-B848Vysm.js.map +1 -0
  98. package/dist/InputFile-C6Y-y8CQ.cjs +2 -0
  99. package/dist/InputFile-C6Y-y8CQ.cjs.map +1 -0
  100. package/dist/InputFile-DicC8Tbv.js +1356 -0
  101. package/dist/InputFile-DicC8Tbv.js.map +1 -0
  102. package/dist/InputSearch-BO_j0nAW.js +218 -0
  103. package/dist/InputSearch-BO_j0nAW.js.map +1 -0
  104. package/dist/InputSearch-Bk5YFz09.cjs +2 -0
  105. package/dist/InputSearch-Bk5YFz09.cjs.map +1 -0
  106. package/dist/Kbd-qcCkiDkW.js +55 -0
  107. package/dist/Kbd-qcCkiDkW.js.map +1 -0
  108. package/dist/Kbd-wmU-rhWO.cjs +2 -0
  109. package/dist/Kbd-wmU-rhWO.cjs.map +1 -0
  110. package/dist/Link-D3lmTu3R.js +30 -0
  111. package/dist/Link-D3lmTu3R.js.map +1 -0
  112. package/dist/Link-DSIStgFG.cjs +2 -0
  113. package/dist/Link-DSIStgFG.cjs.map +1 -0
  114. package/dist/MPagination-C-Ff4orL.js +103 -0
  115. package/dist/MPagination-C-Ff4orL.js.map +1 -0
  116. package/dist/MPagination-CVy14D9v.cjs +2 -0
  117. package/dist/MPagination-CVy14D9v.cjs.map +1 -0
  118. package/dist/MasonryItem-BsD5OuYt.js +368 -0
  119. package/dist/MasonryItem-BsD5OuYt.js.map +1 -0
  120. package/dist/MasonryItem-CBxzCuRr.cjs +2 -0
  121. package/dist/MasonryItem-CBxzCuRr.cjs.map +1 -0
  122. package/dist/MenuIcon-mX5bSTAp.js +20 -0
  123. package/dist/MenuIcon-mX5bSTAp.js.map +1 -0
  124. package/dist/MenuIcon-x1LjLPWp.cjs +2 -0
  125. package/dist/MenuIcon-x1LjLPWp.cjs.map +1 -0
  126. package/dist/Modal-BDDrW5HI.js +56 -0
  127. package/dist/Modal-BDDrW5HI.js.map +1 -0
  128. package/dist/Modal-DrtVZtb1.cjs +2 -0
  129. package/dist/Modal-DrtVZtb1.cjs.map +1 -0
  130. package/dist/NeutralIcon-BPZ3coWv.js +67 -0
  131. package/dist/NeutralIcon-BPZ3coWv.js.map +1 -0
  132. package/dist/NeutralIcon-CScIXs8_.cjs +2 -0
  133. package/dist/NeutralIcon-CScIXs8_.cjs.map +1 -0
  134. package/dist/PhoneIcon-CPGZ1D2-.cjs +2 -0
  135. package/dist/PhoneIcon-CPGZ1D2-.cjs.map +1 -0
  136. package/dist/PhoneIcon-DXlB7Uz0.js +38 -0
  137. package/dist/PhoneIcon-DXlB7Uz0.js.map +1 -0
  138. package/dist/Popconfirm-BJtyFjdY.js +200 -0
  139. package/dist/Popconfirm-BJtyFjdY.js.map +1 -0
  140. package/dist/Popconfirm-DQqBq_OP.cjs +2 -0
  141. package/dist/Popconfirm-DQqBq_OP.cjs.map +1 -0
  142. package/dist/Popover-BLYlu0jf.js +95 -0
  143. package/dist/Popover-BLYlu0jf.js.map +1 -0
  144. package/dist/Popover-BfCYHGUU.cjs +2 -0
  145. package/dist/Popover-BfCYHGUU.cjs.map +1 -0
  146. package/dist/Portal-CeUZ2xET.cjs +2 -0
  147. package/dist/Portal-CeUZ2xET.cjs.map +1 -0
  148. package/dist/Portal-s54PuE_l.js +10 -0
  149. package/dist/Portal-s54PuE_l.js.map +1 -0
  150. package/dist/QrCode-CP1sYiXF.js +371 -0
  151. package/dist/QrCode-CP1sYiXF.js.map +1 -0
  152. package/dist/QrCode-scUXUrNj.cjs +2 -0
  153. package/dist/QrCode-scUXUrNj.cjs.map +1 -0
  154. package/dist/SearchIcon-DDahNpBX.js +24 -0
  155. package/dist/SearchIcon-DDahNpBX.js.map +1 -0
  156. package/dist/SearchIcon-DeKs76RI.cjs +2 -0
  157. package/dist/SearchIcon-DeKs76RI.cjs.map +1 -0
  158. package/dist/Slider-BgHTWUXS.cjs +2 -0
  159. package/dist/Slider-BgHTWUXS.cjs.map +1 -0
  160. package/dist/Slider-BvnJPPAf.js +75 -0
  161. package/dist/Slider-BvnJPPAf.js.map +1 -0
  162. package/dist/Stack-DzFHpLMS.cjs +2 -0
  163. package/dist/Stack-DzFHpLMS.cjs.map +1 -0
  164. package/dist/Stack-xUXSOKqN.js +40 -0
  165. package/dist/Stack-xUXSOKqN.js.map +1 -0
  166. package/dist/StarFillIcon-D4HEOD6y.cjs +2 -0
  167. package/dist/StarFillIcon-D4HEOD6y.cjs.map +1 -0
  168. package/dist/StarFillIcon-tMWVk8tT.js +25 -0
  169. package/dist/StarFillIcon-tMWVk8tT.js.map +1 -0
  170. package/dist/Surface-BVk3r7ws.cjs +2 -0
  171. package/dist/Surface-BVk3r7ws.cjs.map +1 -0
  172. package/dist/Surface-E8hELelv.js +40 -0
  173. package/dist/Surface-E8hELelv.js.map +1 -0
  174. package/dist/Text-DOVuH0uw.js +39 -0
  175. package/dist/Text-DOVuH0uw.js.map +1 -0
  176. package/dist/Text-DUuY1RDL.cjs +2 -0
  177. package/dist/Text-DUuY1RDL.cjs.map +1 -0
  178. package/dist/ThemeProvider-CCWDIXiA.cjs +2 -0
  179. package/dist/ThemeProvider-CCWDIXiA.cjs.map +1 -0
  180. package/dist/ThemeProvider-COEImCNH.js +132 -0
  181. package/dist/ThemeProvider-COEImCNH.js.map +1 -0
  182. package/dist/TimePicker-BXbuLCDX.js +1204 -0
  183. package/dist/TimePicker-BXbuLCDX.js.map +1 -0
  184. package/dist/TimePicker-DDhkqier.cjs +2 -0
  185. package/dist/TimePicker-DDhkqier.cjs.map +1 -0
  186. package/dist/ToastProvider-DRz62qKU.cjs +2 -0
  187. package/dist/ToastProvider-DRz62qKU.cjs.map +1 -0
  188. package/dist/ToastProvider-Dlgk48v1.js +234 -0
  189. package/dist/ToastProvider-Dlgk48v1.js.map +1 -0
  190. package/dist/Toggle-BACN6Wrk.cjs +2 -0
  191. package/dist/Toggle-BACN6Wrk.cjs.map +1 -0
  192. package/dist/Toggle-D9M7aDWh.js +140 -0
  193. package/dist/Toggle-D9M7aDWh.js.map +1 -0
  194. package/dist/ZoomInIcon-CtoKX0Ri.cjs +2 -0
  195. package/dist/ZoomInIcon-CtoKX0Ri.cjs.map +1 -0
  196. package/dist/ZoomInIcon-UNvzc9zU.js +113 -0
  197. package/dist/ZoomInIcon-UNvzc9zU.js.map +1 -0
  198. package/dist/appearanceProps-65LbXIeI.cjs +2 -0
  199. package/dist/appearanceProps-65LbXIeI.cjs.map +1 -0
  200. package/dist/appearanceProps-8tN47e1u.js +8 -0
  201. package/dist/appearanceProps-8tN47e1u.js.map +1 -0
  202. package/dist/cards.cjs +2 -0
  203. package/dist/cards.d.ts +3 -0
  204. package/dist/cards.js +8 -0
  205. package/dist/cn-BIeeqGZv.js +8 -0
  206. package/dist/cn-BIeeqGZv.js.map +1 -0
  207. package/dist/cn-BOmEz3Rt.cjs +2 -0
  208. package/dist/cn-BOmEz3Rt.cjs.map +1 -0
  209. package/dist/components/cards/Card/Card.d.ts +5 -0
  210. package/dist/components/cards/Card/Card.types.d.ts +16 -0
  211. package/dist/components/cards/Card/index.d.ts +2 -0
  212. package/dist/components/cards/CardBusiness/CardBusiness.d.ts +2 -0
  213. package/dist/components/cards/CardBusiness/CardBusiness.types.d.ts +33 -0
  214. package/dist/components/cards/CardBusiness/index.d.ts +2 -0
  215. package/dist/components/cards/CardGrid/CardGrid.d.ts +2 -0
  216. package/dist/components/cards/CardGrid/CardGrid.types.d.ts +27 -0
  217. package/dist/components/cards/CardGrid/index.d.ts +2 -0
  218. package/dist/components/cards/CardPayment/CardPayment.d.ts +2 -0
  219. package/dist/components/cards/CardPayment/CardPayment.types.d.ts +13 -0
  220. package/dist/components/cards/CardPayment/index.d.ts +2 -0
  221. package/dist/components/cards/CardService/CardService.d.ts +2 -0
  222. package/dist/components/cards/CardService/CardService.types.d.ts +37 -0
  223. package/dist/components/cards/CardService/index.d.ts +2 -0
  224. package/dist/components/cards/index.d.ts +10 -0
  225. package/dist/components/controls/Button/Button.d.ts +2 -0
  226. package/dist/components/controls/Button/Button.types.d.ts +22 -0
  227. package/dist/components/controls/Button/index.d.ts +2 -0
  228. package/dist/components/controls/Checkbox/Checkbox.d.ts +3 -0
  229. package/dist/components/controls/Checkbox/Checkbox.types.d.ts +24 -0
  230. package/dist/components/controls/Checkbox/index.d.ts +2 -0
  231. package/dist/components/controls/Radio/Radio.d.ts +3 -0
  232. package/dist/components/controls/Radio/Radio.types.d.ts +47 -0
  233. package/dist/components/controls/Radio/RadioContext.d.ts +3 -0
  234. package/dist/components/controls/Radio/RadioGroup.d.ts +2 -0
  235. package/dist/components/controls/Radio/index.d.ts +3 -0
  236. package/dist/components/controls/Slider/Slider.d.ts +2 -0
  237. package/dist/components/controls/Slider/Slider.types.d.ts +17 -0
  238. package/dist/components/controls/Slider/index.d.ts +2 -0
  239. package/dist/components/controls/Toggle/Toggle.d.ts +2 -0
  240. package/dist/components/controls/Toggle/Toggle.types.d.ts +20 -0
  241. package/dist/components/controls/Toggle/index.d.ts +2 -0
  242. package/dist/components/controls/index.d.ts +10 -0
  243. package/dist/components/data/CalendarBoard/CalendarBoard.d.ts +7 -0
  244. package/dist/components/data/CalendarBoard/CalendarBoard.types.d.ts +117 -0
  245. package/dist/components/data/CalendarBoard/index.d.ts +2 -0
  246. package/dist/components/data/DataTable/DataTable.d.ts +2 -0
  247. package/dist/components/data/DataTable/DataTable.types.d.ts +34 -0
  248. package/dist/components/data/DataTable/index.d.ts +2 -0
  249. package/dist/components/data/TaskList/TaskList.d.ts +2 -0
  250. package/dist/components/data/TaskList/TaskList.types.d.ts +14 -0
  251. package/dist/components/data/TaskList/index.d.ts +2 -0
  252. package/dist/components/data/TreeView/TreeView.d.ts +2 -0
  253. package/dist/components/data/TreeView/TreeView.types.d.ts +63 -0
  254. package/dist/components/data/TreeView/index.d.ts +2 -0
  255. package/dist/components/data/index.d.ts +8 -0
  256. package/dist/components/display/Accordion/Accordion.d.ts +3 -0
  257. package/dist/components/display/Accordion/Accordion.types.d.ts +16 -0
  258. package/dist/components/display/Accordion/index.d.ts +2 -0
  259. package/dist/components/display/Collapsible/Collapsible.d.ts +2 -0
  260. package/dist/components/display/Collapsible/Collapsible.types.d.ts +10 -0
  261. package/dist/components/display/Collapsible/index.d.ts +2 -0
  262. package/dist/components/display/ColorPicker/ColorPicker.d.ts +2 -0
  263. package/dist/components/display/ColorPicker/ColorPicker.types.d.ts +11 -0
  264. package/dist/components/display/ColorPicker/index.d.ts +2 -0
  265. package/dist/components/display/CountUp/CountUp.d.ts +2 -0
  266. package/dist/components/display/CountUp/CountUp.types.d.ts +10 -0
  267. package/dist/components/display/CountUp/index.d.ts +2 -0
  268. package/dist/components/display/ProgressBar/ProgressBar.d.ts +2 -0
  269. package/dist/components/display/ProgressBar/ProgressBar.types.d.ts +12 -0
  270. package/dist/components/display/ProgressBar/index.d.ts +2 -0
  271. package/dist/components/display/QrCode/QrCode.d.ts +2 -0
  272. package/dist/components/display/QrCode/QrCode.types.d.ts +8 -0
  273. package/dist/components/display/QrCode/index.d.ts +2 -0
  274. package/dist/components/display/Rating/Rating.d.ts +2 -0
  275. package/dist/components/display/Rating/Rating.types.d.ts +10 -0
  276. package/dist/components/display/Rating/index.d.ts +2 -0
  277. package/dist/components/display/TimeAgo/TimeAgo.d.ts +2 -0
  278. package/dist/components/display/TimeAgo/TimeAgo.types.d.ts +11 -0
  279. package/dist/components/display/TimeAgo/index.d.ts +2 -0
  280. package/dist/components/display/index.d.ts +16 -0
  281. package/dist/components/dropdowns/Autocomplete/Autocomplete.d.ts +2 -0
  282. package/dist/components/dropdowns/Autocomplete/Autocomplete.types.d.ts +38 -0
  283. package/dist/components/dropdowns/Autocomplete/index.d.ts +2 -0
  284. package/dist/components/dropdowns/DatePicker/DatePicker.d.ts +2 -0
  285. package/dist/components/dropdowns/DatePicker/DatePicker.types.d.ts +33 -0
  286. package/dist/components/dropdowns/DatePicker/index.d.ts +2 -0
  287. package/dist/components/dropdowns/DateRangePicker/DateRangePicker.d.ts +2 -0
  288. package/dist/components/dropdowns/DateRangePicker/DateRangePicker.types.d.ts +50 -0
  289. package/dist/components/dropdowns/DateRangePicker/index.d.ts +2 -0
  290. package/dist/components/dropdowns/Select/Select.d.ts +2 -0
  291. package/dist/components/dropdowns/Select/Select.types.d.ts +39 -0
  292. package/dist/components/dropdowns/Select/index.d.ts +2 -0
  293. package/dist/components/dropdowns/TimePicker/TimePicker.d.ts +2 -0
  294. package/dist/components/dropdowns/TimePicker/TimePicker.types.d.ts +30 -0
  295. package/dist/components/dropdowns/TimePicker/index.d.ts +2 -0
  296. package/dist/components/dropdowns/index.d.ts +10 -0
  297. package/dist/components/feedback/Alert/Alert.d.ts +2 -0
  298. package/dist/components/feedback/Alert/Alert.types.d.ts +9 -0
  299. package/dist/components/feedback/Alert/index.d.ts +2 -0
  300. package/dist/components/feedback/Badge/Badge.d.ts +2 -0
  301. package/dist/components/feedback/Badge/Badge.types.d.ts +9 -0
  302. package/dist/components/feedback/Badge/index.d.ts +2 -0
  303. package/dist/components/feedback/Banner/Banner.d.ts +2 -0
  304. package/dist/components/feedback/Banner/Banner.types.d.ts +12 -0
  305. package/dist/components/feedback/Banner/index.d.ts +2 -0
  306. package/dist/components/feedback/Loader/Loader.d.ts +2 -0
  307. package/dist/components/feedback/Loader/Loader.types.d.ts +9 -0
  308. package/dist/components/feedback/Loader/index.d.ts +2 -0
  309. package/dist/components/feedback/Spinner/Spinner.d.ts +2 -0
  310. package/dist/components/feedback/Spinner/Spinner.types.d.ts +7 -0
  311. package/dist/components/feedback/Spinner/index.d.ts +2 -0
  312. package/dist/components/feedback/Tag/Tag.d.ts +2 -0
  313. package/dist/components/feedback/Tag/Tag.types.d.ts +12 -0
  314. package/dist/components/feedback/Tag/index.d.ts +2 -0
  315. package/dist/components/feedback/Toast/Toast.types.d.ts +27 -0
  316. package/dist/components/feedback/Toast/ToastContext.d.ts +3 -0
  317. package/dist/components/feedback/Toast/ToastItem.d.ts +5 -0
  318. package/dist/components/feedback/Toast/ToastProvider.d.ts +4 -0
  319. package/dist/components/feedback/Toast/index.d.ts +3 -0
  320. package/dist/components/feedback/index.d.ts +14 -0
  321. package/dist/components/form/Form/Form.d.ts +2 -0
  322. package/dist/components/form/Form/Form.types.d.ts +42 -0
  323. package/dist/components/form/Form/FormContext.d.ts +3 -0
  324. package/dist/components/form/Form/index.d.ts +5 -0
  325. package/dist/components/form/Form/useFormField.d.ts +13 -0
  326. package/dist/components/form/index.d.ts +2 -0
  327. package/dist/components/inputs/Input/Input.d.ts +3 -0
  328. package/dist/components/inputs/Input/Input.types.d.ts +49 -0
  329. package/dist/components/inputs/Input/index.d.ts +2 -0
  330. package/dist/components/inputs/InputCreditCard/InputCreditCard.d.ts +3 -0
  331. package/dist/components/inputs/InputCreditCard/InputCreditCard.types.d.ts +12 -0
  332. package/dist/components/inputs/InputCreditCard/index.d.ts +2 -0
  333. package/dist/components/inputs/InputCurrency/InputCurrency.d.ts +3 -0
  334. package/dist/components/inputs/InputCurrency/InputCurrency.types.d.ts +13 -0
  335. package/dist/components/inputs/InputCurrency/index.d.ts +2 -0
  336. package/dist/components/inputs/InputEmail/InputEmail.d.ts +3 -0
  337. package/dist/components/inputs/InputEmail/InputEmail.types.d.ts +8 -0
  338. package/dist/components/inputs/InputEmail/index.d.ts +2 -0
  339. package/dist/components/inputs/InputFile/CropEditor.d.ts +11 -0
  340. package/dist/components/inputs/InputFile/InputFile.d.ts +3 -0
  341. package/dist/components/inputs/InputFile/InputFile.types.d.ts +29 -0
  342. package/dist/components/inputs/InputFile/index.d.ts +2 -0
  343. package/dist/components/inputs/InputGroup/InputGroup.d.ts +3 -0
  344. package/dist/components/inputs/InputGroup/InputGroup.types.d.ts +14 -0
  345. package/dist/components/inputs/InputGroup/index.d.ts +2 -0
  346. package/dist/components/inputs/InputIBAN/InputIBAN.d.ts +3 -0
  347. package/dist/components/inputs/InputIBAN/InputIBAN.types.d.ts +10 -0
  348. package/dist/components/inputs/InputIBAN/index.d.ts +2 -0
  349. package/dist/components/inputs/InputName/InputName.d.ts +3 -0
  350. package/dist/components/inputs/InputName/InputName.types.d.ts +10 -0
  351. package/dist/components/inputs/InputName/index.d.ts +2 -0
  352. package/dist/components/inputs/InputNumber/InputNumber.d.ts +3 -0
  353. package/dist/components/inputs/InputNumber/InputNumber.types.d.ts +10 -0
  354. package/dist/components/inputs/InputNumber/index.d.ts +2 -0
  355. package/dist/components/inputs/InputOTP/InputOTP.d.ts +3 -0
  356. package/dist/components/inputs/InputOTP/InputOTP.types.d.ts +15 -0
  357. package/dist/components/inputs/InputOTP/index.d.ts +2 -0
  358. package/dist/components/inputs/InputPassword/InputPassword.d.ts +3 -0
  359. package/dist/components/inputs/InputPassword/InputPassword.types.d.ts +7 -0
  360. package/dist/components/inputs/InputPassword/index.d.ts +2 -0
  361. package/dist/components/inputs/InputPhone/InputPhone.d.ts +3 -0
  362. package/dist/components/inputs/InputPhone/InputPhone.types.d.ts +10 -0
  363. package/dist/components/inputs/InputPhone/index.d.ts +2 -0
  364. package/dist/components/inputs/InputPostCode/InputPostCode.d.ts +3 -0
  365. package/dist/components/inputs/InputPostCode/InputPostCode.types.d.ts +12 -0
  366. package/dist/components/inputs/InputPostCode/index.d.ts +2 -0
  367. package/dist/components/inputs/InputSearch/InputSearch.d.ts +3 -0
  368. package/dist/components/inputs/InputSearch/InputSearch.types.d.ts +5 -0
  369. package/dist/components/inputs/InputSearch/index.d.ts +2 -0
  370. package/dist/components/inputs/InputSlider/InputSlider.d.ts +3 -0
  371. package/dist/components/inputs/InputSlider/InputSlider.types.d.ts +12 -0
  372. package/dist/components/inputs/InputSlider/index.d.ts +2 -0
  373. package/dist/components/inputs/InputTaxId/InputTaxId.d.ts +3 -0
  374. package/dist/components/inputs/InputTaxId/InputTaxId.types.d.ts +11 -0
  375. package/dist/components/inputs/InputTaxId/index.d.ts +2 -0
  376. package/dist/components/inputs/Textarea/Textarea.d.ts +3 -0
  377. package/dist/components/inputs/Textarea/Textarea.types.d.ts +41 -0
  378. package/dist/components/inputs/Textarea/index.d.ts +2 -0
  379. package/dist/components/inputs/index.d.ts +34 -0
  380. package/dist/components/layout/AppShell/AppShell.d.ts +4 -0
  381. package/dist/components/layout/AppShell/AppShell.types.d.ts +7 -0
  382. package/dist/components/layout/AppShell/index.d.ts +2 -0
  383. package/dist/components/layout/Container/Container.d.ts +2 -0
  384. package/dist/components/layout/Container/Container.types.d.ts +10 -0
  385. package/dist/components/layout/Container/index.d.ts +2 -0
  386. package/dist/components/layout/Divider/Divider.d.ts +2 -0
  387. package/dist/components/layout/Divider/Divider.types.d.ts +9 -0
  388. package/dist/components/layout/Divider/index.d.ts +2 -0
  389. package/dist/components/layout/Grid/Grid.d.ts +2 -0
  390. package/dist/components/layout/Grid/Grid.types.d.ts +10 -0
  391. package/dist/components/layout/Grid/index.d.ts +2 -0
  392. package/dist/components/layout/Inline/Inline.d.ts +2 -0
  393. package/dist/components/layout/Inline/Inline.types.d.ts +15 -0
  394. package/dist/components/layout/Inline/index.d.ts +2 -0
  395. package/dist/components/layout/MBreadcrumb/MBreadcrumb.d.ts +2 -0
  396. package/dist/components/layout/MBreadcrumb/MBreadcrumb.types.d.ts +11 -0
  397. package/dist/components/layout/MBreadcrumb/index.d.ts +2 -0
  398. package/dist/components/layout/MFooter/MFooter.d.ts +2 -0
  399. package/dist/components/layout/MFooter/MFooter.types.d.ts +11 -0
  400. package/dist/components/layout/MFooter/index.d.ts +2 -0
  401. package/dist/components/layout/MGrid/MGrid.d.ts +3 -0
  402. package/dist/components/layout/MGrid/MGrid.types.d.ts +21 -0
  403. package/dist/components/layout/MGrid/index.d.ts +2 -0
  404. package/dist/components/layout/MHeader/MHeader.d.ts +2 -0
  405. package/dist/components/layout/MHeader/MHeader.types.d.ts +13 -0
  406. package/dist/components/layout/MHeader/index.d.ts +2 -0
  407. package/dist/components/layout/MNavbar/MNavbar.d.ts +2 -0
  408. package/dist/components/layout/MNavbar/MNavbar.types.d.ts +18 -0
  409. package/dist/components/layout/MNavbar/index.d.ts +2 -0
  410. package/dist/components/layout/MNavs/MNavs.d.ts +2 -0
  411. package/dist/components/layout/MNavs/MNavs.types.d.ts +19 -0
  412. package/dist/components/layout/MNavs/index.d.ts +2 -0
  413. package/dist/components/layout/MPagination/MPagination.d.ts +2 -0
  414. package/dist/components/layout/MPagination/MPagination.types.d.ts +10 -0
  415. package/dist/components/layout/MPagination/index.d.ts +2 -0
  416. package/dist/components/layout/MSidebar/MSidebar.d.ts +9 -0
  417. package/dist/components/layout/MSidebar/MSidebar.types.d.ts +60 -0
  418. package/dist/components/layout/MSidebar/index.d.ts +2 -0
  419. package/dist/components/layout/MSubNav/MSubNav.d.ts +2 -0
  420. package/dist/components/layout/MSubNav/MSubNav.types.d.ts +14 -0
  421. package/dist/components/layout/MSubNav/index.d.ts +2 -0
  422. package/dist/components/layout/MTabs/MTabs.d.ts +2 -0
  423. package/dist/components/layout/MTabs/MTabs.types.d.ts +28 -0
  424. package/dist/components/layout/MTabs/index.d.ts +2 -0
  425. package/dist/components/layout/Section/Section.d.ts +2 -0
  426. package/dist/components/layout/Section/Section.types.d.ts +13 -0
  427. package/dist/components/layout/Section/index.d.ts +2 -0
  428. package/dist/components/layout/Stack/Stack.d.ts +2 -0
  429. package/dist/components/layout/Stack/Stack.types.d.ts +11 -0
  430. package/dist/components/layout/Stack/index.d.ts +2 -0
  431. package/dist/components/layout/Surface/Surface.d.ts +2 -0
  432. package/dist/components/layout/Surface/Surface.types.d.ts +13 -0
  433. package/dist/components/layout/Surface/index.d.ts +2 -0
  434. package/dist/components/layout/index.d.ts +36 -0
  435. package/dist/components/media/Avatar/Avatar.d.ts +2 -0
  436. package/dist/components/media/Avatar/Avatar.types.d.ts +19 -0
  437. package/dist/components/media/Avatar/index.d.ts +2 -0
  438. package/dist/components/media/Carousel/Carousel.d.ts +2 -0
  439. package/dist/components/media/Carousel/Carousel.types.d.ts +12 -0
  440. package/dist/components/media/Carousel/index.d.ts +2 -0
  441. package/dist/components/media/Gallery/Gallery.d.ts +2 -0
  442. package/dist/components/media/Gallery/Gallery.types.d.ts +14 -0
  443. package/dist/components/media/Gallery/index.d.ts +2 -0
  444. package/dist/components/media/Image/Image.d.ts +2 -0
  445. package/dist/components/media/Image/Image.types.d.ts +13 -0
  446. package/dist/components/media/Image/index.d.ts +2 -0
  447. package/dist/components/media/Masonry/Masonry.d.ts +2 -0
  448. package/dist/components/media/Masonry/Masonry.types.d.ts +7 -0
  449. package/dist/components/media/Masonry/index.d.ts +2 -0
  450. package/dist/components/media/MasonryItem/MasonryItem.d.ts +3 -0
  451. package/dist/components/media/MasonryItem/MasonryItem.types.d.ts +14 -0
  452. package/dist/components/media/MasonryItem/index.d.ts +2 -0
  453. package/dist/components/media/ShowcaseCarousel/ShowcaseCarousel.d.ts +2 -0
  454. package/dist/components/media/ShowcaseCarousel/ShowcaseCarousel.types.d.ts +19 -0
  455. package/dist/components/media/ShowcaseCarousel/index.d.ts +2 -0
  456. package/dist/components/media/ShowcaseCarouselItem/ShowcaseCarouselItem.d.ts +3 -0
  457. package/dist/components/media/ShowcaseCarouselItem/ShowcaseCarouselItem.types.d.ts +16 -0
  458. package/dist/components/media/ShowcaseCarouselItem/index.d.ts +2 -0
  459. package/dist/components/media/index.d.ts +16 -0
  460. package/dist/components/overlays/Drawer/Drawer.d.ts +5 -0
  461. package/dist/components/overlays/Drawer/Drawer.types.d.ts +17 -0
  462. package/dist/components/overlays/Drawer/index.d.ts +2 -0
  463. package/dist/components/overlays/DropdownMenu/DropdownMenu.d.ts +9 -0
  464. package/dist/components/overlays/DropdownMenu/DropdownMenu.types.d.ts +32 -0
  465. package/dist/components/overlays/DropdownMenu/index.d.ts +2 -0
  466. package/dist/components/overlays/Modal/Modal.d.ts +2 -0
  467. package/dist/components/overlays/Modal/Modal.types.d.ts +12 -0
  468. package/dist/components/overlays/Modal/index.d.ts +2 -0
  469. package/dist/components/overlays/Popconfirm/Popconfirm.d.ts +2 -0
  470. package/dist/components/overlays/Popconfirm/Popconfirm.types.d.ts +18 -0
  471. package/dist/components/overlays/Popconfirm/index.d.ts +2 -0
  472. package/dist/components/overlays/Tooltip/Tooltip.d.ts +2 -0
  473. package/dist/components/overlays/Tooltip/Tooltip.types.d.ts +9 -0
  474. package/dist/components/overlays/Tooltip/index.d.ts +2 -0
  475. package/dist/components/overlays/index.d.ts +10 -0
  476. package/dist/components/primitives/Popover/Popover.d.ts +2 -0
  477. package/dist/components/primitives/Popover/Popover.types.d.ts +14 -0
  478. package/dist/components/primitives/Popover/index.d.ts +2 -0
  479. package/dist/components/primitives/Portal/Portal.d.ts +2 -0
  480. package/dist/components/primitives/Portal/Portal.types.d.ts +5 -0
  481. package/dist/components/primitives/Portal/index.d.ts +2 -0
  482. package/dist/components/primitives/index.d.ts +4 -0
  483. package/dist/components/typography/Code/Code.d.ts +2 -0
  484. package/dist/components/typography/Code/Code.types.d.ts +7 -0
  485. package/dist/components/typography/Code/index.d.ts +2 -0
  486. package/dist/components/typography/Heading/Heading.d.ts +281 -0
  487. package/dist/components/typography/Heading/Heading.types.d.ts +9 -0
  488. package/dist/components/typography/Heading/index.d.ts +2 -0
  489. package/dist/components/typography/Kbd/Kbd.d.ts +2 -0
  490. package/dist/components/typography/Kbd/Kbd.types.d.ts +6 -0
  491. package/dist/components/typography/Kbd/index.d.ts +2 -0
  492. package/dist/components/typography/Link/Link.d.ts +2 -0
  493. package/dist/components/typography/Link/Link.types.d.ts +15 -0
  494. package/dist/components/typography/Link/index.d.ts +2 -0
  495. package/dist/components/typography/List/List.d.ts +4 -0
  496. package/dist/components/typography/List/List.types.d.ts +8 -0
  497. package/dist/components/typography/List/index.d.ts +2 -0
  498. package/dist/components/typography/SubText/SubText.d.ts +2 -0
  499. package/dist/components/typography/SubText/SubText.types.d.ts +9 -0
  500. package/dist/components/typography/SubText/index.d.ts +2 -0
  501. package/dist/components/typography/Text/Text.d.ts +2 -0
  502. package/dist/components/typography/Text/Text.types.d.ts +16 -0
  503. package/dist/components/typography/Text/index.d.ts +2 -0
  504. package/dist/components/typography/index.d.ts +14 -0
  505. package/dist/controls.cjs +2 -0
  506. package/dist/controls.d.ts +3 -0
  507. package/dist/controls.js +6 -0
  508. package/dist/creditCards-CUM63Oia.cjs +2 -0
  509. package/dist/creditCards-CUM63Oia.cjs.map +1 -0
  510. package/dist/creditCards-pLOxJ6gs.js +129 -0
  511. package/dist/creditCards-pLOxJ6gs.js.map +1 -0
  512. package/dist/data.cjs +2 -0
  513. package/dist/data.d.ts +3 -0
  514. package/dist/data.js +16 -0
  515. package/dist/dateUtils-D3rghkxq.js +67 -0
  516. package/dist/dateUtils-D3rghkxq.js.map +1 -0
  517. package/dist/dateUtils-a8oMntCI.cjs +2 -0
  518. package/dist/dateUtils-a8oMntCI.cjs.map +1 -0
  519. package/dist/display.cjs +2 -0
  520. package/dist/display.d.ts +3 -0
  521. package/dist/display.js +6 -0
  522. package/dist/dropdowns.cjs +2 -0
  523. package/dist/dropdowns.d.ts +3 -0
  524. package/dist/dropdowns.js +4 -0
  525. package/dist/feedback.cjs +2 -0
  526. package/dist/feedback.d.ts +3 -0
  527. package/dist/feedback.js +6 -0
  528. package/dist/form.cjs +2 -0
  529. package/dist/form.d.ts +3 -0
  530. package/dist/form.js +3 -0
  531. package/dist/formatters-C3tjM3rj.cjs +2 -0
  532. package/dist/formatters-C3tjM3rj.cjs.map +1 -0
  533. package/dist/formatters-CtZdwLSU.js +89 -0
  534. package/dist/formatters-CtZdwLSU.js.map +1 -0
  535. package/dist/i18n/I18nProvider.d.ts +18 -0
  536. package/dist/i18n/index.d.ts +2 -0
  537. package/dist/i18n.cjs +2 -0
  538. package/dist/i18n.d.ts +2 -0
  539. package/dist/i18n.entry.d.ts +1 -0
  540. package/dist/i18n.js +3 -0
  541. package/dist/icons/Icon.d.ts +2 -0
  542. package/dist/icons/Icon.types.d.ts +8 -0
  543. package/dist/icons/glyphs/AmericanExpressIcon.d.ts +3 -0
  544. package/dist/icons/glyphs/ArrowDownIcon.d.ts +2 -0
  545. package/dist/icons/glyphs/ArrowLeftIcon.d.ts +2 -0
  546. package/dist/icons/glyphs/ArrowRightIcon.d.ts +2 -0
  547. package/dist/icons/glyphs/ArrowUpDownIcon.d.ts +2 -0
  548. package/dist/icons/glyphs/ArrowUpIcon.d.ts +2 -0
  549. package/dist/icons/glyphs/BankIcon.d.ts +2 -0
  550. package/dist/icons/glyphs/BellIcon.d.ts +2 -0
  551. package/dist/icons/glyphs/BoltIcon.d.ts +2 -0
  552. package/dist/icons/glyphs/BoxIcon.d.ts +2 -0
  553. package/dist/icons/glyphs/BrandIcons.d.ts +21 -0
  554. package/dist/icons/glyphs/BrandMoreIcons.d.ts +27 -0
  555. package/dist/icons/glyphs/BugIcon.d.ts +2 -0
  556. package/dist/icons/glyphs/BuildingIcon.d.ts +2 -0
  557. package/dist/icons/glyphs/CalendarIcon.d.ts +2 -0
  558. package/dist/icons/glyphs/CameraIcon.d.ts +2 -0
  559. package/dist/icons/glyphs/CartIcon.d.ts +2 -0
  560. package/dist/icons/glyphs/ChartIcon.d.ts +2 -0
  561. package/dist/icons/glyphs/ChatIcon.d.ts +2 -0
  562. package/dist/icons/glyphs/ChatsIcon.d.ts +2 -0
  563. package/dist/icons/glyphs/CheckCircleIcon.d.ts +2 -0
  564. package/dist/icons/glyphs/CheckIcon.d.ts +2 -0
  565. package/dist/icons/glyphs/ChevronDownIcon.d.ts +2 -0
  566. package/dist/icons/glyphs/ChevronLeftIcon.d.ts +2 -0
  567. package/dist/icons/glyphs/ChevronRightIcon.d.ts +2 -0
  568. package/dist/icons/glyphs/ChevronUpIcon.d.ts +2 -0
  569. package/dist/icons/glyphs/ClickIcon.d.ts +2 -0
  570. package/dist/icons/glyphs/ClipboardIcon.d.ts +2 -0
  571. package/dist/icons/glyphs/ClockIcon.d.ts +2 -0
  572. package/dist/icons/glyphs/CloseIcon.d.ts +2 -0
  573. package/dist/icons/glyphs/CommentIcon.d.ts +2 -0
  574. package/dist/icons/glyphs/CopyIcon.d.ts +2 -0
  575. package/dist/icons/glyphs/CopyrightIcon.d.ts +2 -0
  576. package/dist/icons/glyphs/CreditCardIcon.d.ts +2 -0
  577. package/dist/icons/glyphs/CubeIcon.d.ts +2 -0
  578. package/dist/icons/glyphs/DashboardIcon.d.ts +2 -0
  579. package/dist/icons/glyphs/DatabaseIcon.d.ts +2 -0
  580. package/dist/icons/glyphs/DeviceMonitorIcon.d.ts +2 -0
  581. package/dist/icons/glyphs/DevicePhoneIcon.d.ts +2 -0
  582. package/dist/icons/glyphs/DeviceTabletIcon.d.ts +2 -0
  583. package/dist/icons/glyphs/DocCopyIcon.d.ts +2 -0
  584. package/dist/icons/glyphs/DocIcon.d.ts +2 -0
  585. package/dist/icons/glyphs/DocPlusIcon.d.ts +2 -0
  586. package/dist/icons/glyphs/DollarIcon.d.ts +2 -0
  587. package/dist/icons/glyphs/DownloadIcon.d.ts +2 -0
  588. package/dist/icons/glyphs/EditIcon.d.ts +2 -0
  589. package/dist/icons/glyphs/EllipsisVerticalIcon.d.ts +2 -0
  590. package/dist/icons/glyphs/ErrorIcon.d.ts +2 -0
  591. package/dist/icons/glyphs/EuroIcon.d.ts +2 -0
  592. package/dist/icons/glyphs/ExternalLinkIcon.d.ts +2 -0
  593. package/dist/icons/glyphs/EyeIcon.d.ts +2 -0
  594. package/dist/icons/glyphs/EyeOffIcon.d.ts +2 -0
  595. package/dist/icons/glyphs/FileArchiveIcon.d.ts +2 -0
  596. package/dist/icons/glyphs/FileCodeIcon.d.ts +2 -0
  597. package/dist/icons/glyphs/FileExtIcons.d.ts +27 -0
  598. package/dist/icons/glyphs/FileIcon.d.ts +2 -0
  599. package/dist/icons/glyphs/FileImageIcon.d.ts +2 -0
  600. package/dist/icons/glyphs/FilePdfIcon.d.ts +2 -0
  601. package/dist/icons/glyphs/FileTextIcon.d.ts +2 -0
  602. package/dist/icons/glyphs/FileVideoIcon.d.ts +2 -0
  603. package/dist/icons/glyphs/FilterIcon.d.ts +2 -0
  604. package/dist/icons/glyphs/FlagArIcon.d.ts +2 -0
  605. package/dist/icons/glyphs/FlagBrIcon.d.ts +2 -0
  606. package/dist/icons/glyphs/FlagCaIcon.d.ts +2 -0
  607. package/dist/icons/glyphs/FlagCnIcon.d.ts +2 -0
  608. package/dist/icons/glyphs/FlagCzIcon.d.ts +2 -0
  609. package/dist/icons/glyphs/FlagDeIcon.d.ts +2 -0
  610. package/dist/icons/glyphs/FlagEsIcon.d.ts +2 -0
  611. package/dist/icons/glyphs/FlagFrIcon.d.ts +2 -0
  612. package/dist/icons/glyphs/FlagGbIcon.d.ts +2 -0
  613. package/dist/icons/glyphs/FlagInIcon.d.ts +2 -0
  614. package/dist/icons/glyphs/FlagItIcon.d.ts +2 -0
  615. package/dist/icons/glyphs/FlagJpIcon.d.ts +2 -0
  616. package/dist/icons/glyphs/FlagMxIcon.d.ts +2 -0
  617. package/dist/icons/glyphs/FlagPlIcon.d.ts +2 -0
  618. package/dist/icons/glyphs/FlagRuIcon.d.ts +2 -0
  619. package/dist/icons/glyphs/FlagSkIcon.d.ts +2 -0
  620. package/dist/icons/glyphs/FlagUaIcon.d.ts +2 -0
  621. package/dist/icons/glyphs/FlagUsIcon.d.ts +2 -0
  622. package/dist/icons/glyphs/FolderIcon.d.ts +2 -0
  623. package/dist/icons/glyphs/FolderOpenIcon.d.ts +2 -0
  624. package/dist/icons/glyphs/FolderPlusIcon.d.ts +2 -0
  625. package/dist/icons/glyphs/FormIcon.d.ts +2 -0
  626. package/dist/icons/glyphs/GalleryIcon.d.ts +2 -0
  627. package/dist/icons/glyphs/GlobeIcon.d.ts +2 -0
  628. package/dist/icons/glyphs/GroupIcon.d.ts +2 -0
  629. package/dist/icons/glyphs/HeartFillIcon.d.ts +2 -0
  630. package/dist/icons/glyphs/HeartIcon.d.ts +2 -0
  631. package/dist/icons/glyphs/HelpIcon.d.ts +2 -0
  632. package/dist/icons/glyphs/HomeIcon.d.ts +2 -0
  633. package/dist/icons/glyphs/IdCardIcon.d.ts +2 -0
  634. package/dist/icons/glyphs/ImageIcon.d.ts +2 -0
  635. package/dist/icons/glyphs/InfoIcon.d.ts +2 -0
  636. package/dist/icons/glyphs/KanbanIcon.d.ts +2 -0
  637. package/dist/icons/glyphs/LayoutIcon.d.ts +2 -0
  638. package/dist/icons/glyphs/LightbulbIcon.d.ts +2 -0
  639. package/dist/icons/glyphs/LinkIcon.d.ts +2 -0
  640. package/dist/icons/glyphs/LockIcon.d.ts +2 -0
  641. package/dist/icons/glyphs/LockOpenIcon.d.ts +2 -0
  642. package/dist/icons/glyphs/MagicIcon.d.ts +2 -0
  643. package/dist/icons/glyphs/MailIcon.d.ts +2 -0
  644. package/dist/icons/glyphs/MailOpenIcon.d.ts +2 -0
  645. package/dist/icons/glyphs/MenuIcon.d.ts +2 -0
  646. package/dist/icons/glyphs/MinusIcon.d.ts +2 -0
  647. package/dist/icons/glyphs/MoonIcon.d.ts +2 -0
  648. package/dist/icons/glyphs/MoreIcon.d.ts +3 -0
  649. package/dist/icons/glyphs/NeutralIcon.d.ts +2 -0
  650. package/dist/icons/glyphs/PaletteIcon.d.ts +2 -0
  651. package/dist/icons/glyphs/PhoneIcon.d.ts +2 -0
  652. package/dist/icons/glyphs/PinIcon.d.ts +2 -0
  653. package/dist/icons/glyphs/PlusIcon.d.ts +2 -0
  654. package/dist/icons/glyphs/ProtectIcon.d.ts +2 -0
  655. package/dist/icons/glyphs/PuzzleIcon.d.ts +2 -0
  656. package/dist/icons/glyphs/RefreshIcon.d.ts +2 -0
  657. package/dist/icons/glyphs/SearchIcon.d.ts +2 -0
  658. package/dist/icons/glyphs/SendIcon.d.ts +2 -0
  659. package/dist/icons/glyphs/SettingsIcon.d.ts +2 -0
  660. package/dist/icons/glyphs/SidebarIcon.d.ts +2 -0
  661. package/dist/icons/glyphs/Signal1Icon.d.ts +2 -0
  662. package/dist/icons/glyphs/Signal2Icon.d.ts +2 -0
  663. package/dist/icons/glyphs/Signal3Icon.d.ts +2 -0
  664. package/dist/icons/glyphs/Signal4Icon.d.ts +2 -0
  665. package/dist/icons/glyphs/SlidersIcon.d.ts +2 -0
  666. package/dist/icons/glyphs/SortIcon.d.ts +2 -0
  667. package/dist/icons/glyphs/StarFillIcon.d.ts +2 -0
  668. package/dist/icons/glyphs/StarIcon.d.ts +2 -0
  669. package/dist/icons/glyphs/SuccessIcon.d.ts +2 -0
  670. package/dist/icons/glyphs/SunIcon.d.ts +2 -0
  671. package/dist/icons/glyphs/TagIcon.d.ts +2 -0
  672. package/dist/icons/glyphs/TeamIcon.d.ts +2 -0
  673. package/dist/icons/glyphs/TerminalIcon.d.ts +2 -0
  674. package/dist/icons/glyphs/TranslateIcon.d.ts +2 -0
  675. package/dist/icons/glyphs/TrashIcon.d.ts +2 -0
  676. package/dist/icons/glyphs/UploadIcon.d.ts +2 -0
  677. package/dist/icons/glyphs/UserIcon.d.ts +2 -0
  678. package/dist/icons/glyphs/UsersIcon.d.ts +2 -0
  679. package/dist/icons/glyphs/WarningIcon.d.ts +2 -0
  680. package/dist/icons/glyphs/WindowIcon.d.ts +2 -0
  681. package/dist/icons/glyphs/ZoomInIcon.d.ts +2 -0
  682. package/dist/icons/glyphs/ZoomOutIcon.d.ts +2 -0
  683. package/dist/icons/glyphs/fileMark.d.ts +9 -0
  684. package/dist/icons/index.d.ts +142 -0
  685. package/dist/icons.cjs +2 -0
  686. package/dist/icons.d.ts +2 -0
  687. package/dist/icons.entry.d.ts +3 -0
  688. package/dist/icons.js +20 -0
  689. package/dist/index.cjs +2 -4
  690. package/dist/index.d.ts +183 -3062
  691. package/dist/index.js +63 -8896
  692. package/dist/inputs.cjs +2 -0
  693. package/dist/inputs.d.ts +3 -0
  694. package/dist/inputs.js +6 -0
  695. package/dist/layout.cjs +2 -0
  696. package/dist/layout.d.ts +3 -0
  697. package/dist/layout.js +9 -0
  698. package/dist/layoutProps-CY4cnDrW.js +29 -0
  699. package/dist/layoutProps-CY4cnDrW.js.map +1 -0
  700. package/dist/layoutProps-Dw_ZW6ot.cjs +2 -0
  701. package/dist/layoutProps-Dw_ZW6ot.cjs.map +1 -0
  702. package/dist/locale-C_PRdyIv.cjs +2 -0
  703. package/dist/locale-C_PRdyIv.cjs.map +1 -0
  704. package/dist/locale-DofwII5P.js +58 -0
  705. package/dist/locale-DofwII5P.js.map +1 -0
  706. package/dist/media.cjs +2 -0
  707. package/dist/media.d.ts +3 -0
  708. package/dist/media.js +7 -0
  709. package/dist/overlays.cjs +2 -0
  710. package/dist/overlays.d.ts +3 -0
  711. package/dist/overlays.js +8 -0
  712. package/dist/primitives.cjs +2 -0
  713. package/dist/primitives.d.ts +3 -0
  714. package/dist/primitives.js +4 -0
  715. package/dist/style-runtime.cjs +2 -0
  716. package/dist/style-runtime.js +2 -0
  717. package/dist/styles.css +1 -1
  718. package/dist/theme/ThemeProvider.d.ts +20 -0
  719. package/dist/theme/index.d.ts +3 -0
  720. package/dist/theme/types.d.ts +50 -0
  721. package/dist/theme.cjs +2 -0
  722. package/dist/theme.d.ts +2 -0
  723. package/dist/theme.entry.d.ts +1 -0
  724. package/dist/theme.js +3 -0
  725. package/dist/typography.cjs +2 -0
  726. package/dist/typography.d.ts +3 -0
  727. package/dist/typography.js +6 -0
  728. package/dist/useClickOutside-CS-Mc6ne.cjs +2 -0
  729. package/dist/useClickOutside-CS-Mc6ne.cjs.map +1 -0
  730. package/dist/useClickOutside-Dcye4Ut0.js +16 -0
  731. package/dist/useClickOutside-Dcye4Ut0.js.map +1 -0
  732. package/dist/useDebounce-C3jbJOKC.cjs +2 -0
  733. package/dist/useDebounce-C3jbJOKC.cjs.map +1 -0
  734. package/dist/useDebounce-D-v3IRXp.js +21 -0
  735. package/dist/useDebounce-D-v3IRXp.js.map +1 -0
  736. package/dist/useFormField-Bz4d7m8u.cjs +2 -0
  737. package/dist/useFormField-Bz4d7m8u.cjs.map +1 -0
  738. package/dist/useFormField-jOnRqGD2.js +166 -0
  739. package/dist/useFormField-jOnRqGD2.js.map +1 -0
  740. package/dist/useGhostText-BNcH5o9H.js +51 -0
  741. package/dist/useGhostText-BNcH5o9H.js.map +1 -0
  742. package/dist/useGhostText-CoYhBGCg.cjs +2 -0
  743. package/dist/useGhostText-CoYhBGCg.cjs.map +1 -0
  744. package/dist/useInteractionEffect-B5_UpgTt.js +40 -0
  745. package/dist/useInteractionEffect-B5_UpgTt.js.map +1 -0
  746. package/dist/useInteractionEffect-BaJeiUns.cjs +2 -0
  747. package/dist/useInteractionEffect-BaJeiUns.cjs.map +1 -0
  748. package/dist/useKeyboardNav-CmUKtJag.js +43 -0
  749. package/dist/useKeyboardNav-CmUKtJag.js.map +1 -0
  750. package/dist/useKeyboardNav-DJtFz7Fx.cjs +2 -0
  751. package/dist/useKeyboardNav-DJtFz7Fx.cjs.map +1 -0
  752. package/dist/useReveal-Fg-i8hhZ.js +23 -0
  753. package/dist/useReveal-Fg-i8hhZ.js.map +1 -0
  754. package/dist/useReveal-p1cSTlUT.cjs +2 -0
  755. package/dist/useReveal-p1cSTlUT.cjs.map +1 -0
  756. package/dist/utils/appearanceProps.d.ts +6 -0
  757. package/dist/utils/cn.d.ts +1 -0
  758. package/dist/utils/creditCards.d.ts +16 -0
  759. package/dist/utils/dateUtils.d.ts +17 -0
  760. package/dist/utils/formatters.d.ts +21 -0
  761. package/dist/utils/layoutProps.d.ts +25 -0
  762. package/dist/utils/locale.d.ts +13 -0
  763. package/dist/utils/postalCodes.d.ts +21 -0
  764. package/dist/utils/relativeTime.d.ts +16 -0
  765. package/dist/utils/useClickOutside.d.ts +2 -0
  766. package/dist/utils/useControllableString.d.ts +7 -0
  767. package/dist/utils/useDebounce.d.ts +2 -0
  768. package/dist/utils/useGhostText.d.ts +28 -0
  769. package/dist/utils/useInteractionEffect.d.ts +15 -0
  770. package/dist/utils/useKeyboardNav.d.ts +14 -0
  771. package/dist/utils/useReveal.d.ts +2 -0
  772. package/dist/utils/validators.d.ts +19 -0
  773. package/dist/utils.cjs +2 -0
  774. package/dist/utils.d.ts +2 -0
  775. package/dist/utils.entry.d.ts +20 -0
  776. package/dist/utils.js +13 -0
  777. package/dist/validators-B7cSTrU_.cjs +2 -0
  778. package/dist/validators-B7cSTrU_.cjs.map +1 -0
  779. package/dist/validators-Y1nYXhNR.js +378 -0
  780. package/dist/validators-Y1nYXhNR.js.map +1 -0
  781. package/package.json +226 -1
  782. package/dist/index.cjs.map +0 -1
  783. package/dist/index.js.map +0 -1
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from 'react';
2
+ import { MineralTheme, MineralMode, MineralModePreference } from './types';
3
+ interface ThemeContextValue {
4
+ theme: MineralTheme;
5
+ mode: MineralModePreference;
6
+ resolvedMode: MineralMode;
7
+ setMode: (next: MineralModePreference) => void;
8
+ toggleMode: () => void;
9
+ }
10
+ export type MineralThemeScope = 'body' | 'wrapper';
11
+ interface MineralThemeProviderProps {
12
+ theme?: MineralTheme;
13
+ mode?: MineralModePreference;
14
+ persist?: boolean;
15
+ scope?: MineralThemeScope;
16
+ children: ReactNode;
17
+ }
18
+ export declare function MineralThemeProvider({ theme, mode: modeProp, persist, scope, children, }: MineralThemeProviderProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function useTheme(): ThemeContextValue;
20
+ export {};
@@ -0,0 +1,3 @@
1
+ export { MineralThemeProvider as MThemeProvider, useTheme as useMTheme, MineralThemeProvider, useTheme, } from './ThemeProvider';
2
+ export type { MineralThemeScope } from './ThemeProvider';
3
+ export type { MineralTheme, MineralMode, MineralModePreference, MineralColor, MineralSize, MineralFontColor, } from './types';
@@ -0,0 +1,50 @@
1
+ export type MineralMode = 'dark' | 'light';
2
+ export type MineralModePreference = MineralMode | 'system';
3
+ export type MineralFontColor = 'default' | 'muted' | 'heading' | 'inverted' | 'inherit' | 'primary' | 'neutral' | 'success' | 'error' | 'warning' | 'info' | 'danger';
4
+ export interface MineralTheme {
5
+ primaryRgb?: string;
6
+ primary?: string;
7
+ primaryDark?: string;
8
+ primaryLight?: string;
9
+ neutralRgb?: string;
10
+ neutral?: string;
11
+ dark?: string;
12
+ darkLight?: string;
13
+ surface?: string;
14
+ surfaceContrast?: string;
15
+ pageBg?: string;
16
+ pageText?: string;
17
+ text?: string;
18
+ textSecondary?: string;
19
+ textHeading?: string;
20
+ border?: string;
21
+ borderHover?: string;
22
+ borderFocus?: string;
23
+ successRgb?: string;
24
+ success?: string;
25
+ errorRgb?: string;
26
+ error?: string;
27
+ warningRgb?: string;
28
+ warning?: string;
29
+ infoRgb?: string;
30
+ info?: string;
31
+ fontFamily?: string;
32
+ fontFamilySans?: string;
33
+ fontFamilyMono?: string;
34
+ fontFamilyHeading?: string;
35
+ fontColorDefault?: string;
36
+ fontColorMuted?: string;
37
+ fontColorHeading?: string;
38
+ fontColorInverted?: string;
39
+ fontColorPrimary?: string;
40
+ fontColorNeutral?: string;
41
+ fontColorSuccess?: string;
42
+ fontColorError?: string;
43
+ fontColorWarning?: string;
44
+ fontColorInfo?: string;
45
+ radiusSm?: string;
46
+ radiusMd?: string;
47
+ radiusLg?: string;
48
+ }
49
+ export type MineralColor = 'primary' | 'neutral' | 'success' | 'error' | 'warning' | 'info' | 'danger';
50
+ export type MineralSize = 'sm' | 'md' | 'lg';
package/dist/theme.cjs ADDED
@@ -0,0 +1,2 @@
1
+ require('./style-runtime.cjs')
2
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./ThemeProvider-CCWDIXiA.cjs`);exports.MThemeProvider=e.t,exports.MineralThemeProvider=e.t,exports.useMTheme=e.n,exports.useTheme=e.n;
@@ -0,0 +1,2 @@
1
+ export * from './theme.entry'
2
+ export {}
@@ -0,0 +1 @@
1
+ export * from './theme';
package/dist/theme.js ADDED
@@ -0,0 +1,3 @@
1
+ import './style-runtime.js'
2
+ import { n as e, t } from "./ThemeProvider-COEImCNH.js";
3
+ export { t as MThemeProvider, t as MineralThemeProvider, e as useMTheme, e as useTheme };
@@ -0,0 +1,2 @@
1
+ require('./style-runtime.cjs')
2
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./Heading-CALsycVL.cjs`),t=require(`./Text-DUuY1RDL.cjs`),n=require(`./Link-DSIStgFG.cjs`),r=require(`./Kbd-wmU-rhWO.cjs`);exports.Code=r.a,exports.MCode=r.a,exports.Heading=e.t,exports.MHeading=e.t,exports.Kbd=r.t,exports.MKbd=r.t,exports.List=r.r,exports.MList=r.r,exports.ListItem=r.i,exports.MListItem=r.i,exports.MLink=n.t,exports.MSubText=r.n,exports.SubText=r.n,exports.MText=t.t,exports.Text=t.t;
@@ -0,0 +1,3 @@
1
+ export * from './components/typography';
2
+ export { Heading as MHeading, Text as MText, SubText as MSubText, MLink, Code as MCode, List as MList, ListItem as MListItem, Kbd as MKbd, } from './components/typography';
3
+ export type { HeadingProps as MHeadingProps, TextProps as MTextProps, TextAlign as MTextAlign, SubTextProps as MSubTextProps, SubTextSize as MSubTextSize, CodeProps as MCodeProps, ListProps as MListProps, KbdProps as MKbdProps, } from './components/typography';
@@ -0,0 +1,6 @@
1
+ import './style-runtime.js'
2
+ import { t as e } from "./Heading-DtcgehrI.js";
3
+ import { t } from "./Text-DOVuH0uw.js";
4
+ import { t as n } from "./Link-D3lmTu3R.js";
5
+ import { a as r, i, n as a, r as o, t as s } from "./Kbd-qcCkiDkW.js";
6
+ export { r as Code, r as MCode, e as Heading, e as MHeading, s as Kbd, s as MKbd, o as List, o as MList, i as ListItem, i as MListItem, n as MLink, a as MSubText, a as SubText, t as MText, t as Text };
@@ -0,0 +1,2 @@
1
+ let e=require(`react`);function t(t,n){(0,e.useEffect)(()=>{let e=e=>{!t.current||t.current.contains(e.target)||n()};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e)}},[t,n])}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
2
+ //# sourceMappingURL=useClickOutside-CS-Mc6ne.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClickOutside-CS-Mc6ne.cjs","names":[],"sources":["../src/utils/useClickOutside.ts"],"sourcesContent":["import {useEffect, type RefObject} from 'react'\n\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [ref, handler])\n}\n"],"mappings":"uBAGA,SAAgB,EAAgB,EAAoC,EAA2B,EAC3F,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAY,GAA+B,CACzC,CAAC,EAAI,SAAW,EAAI,QAAQ,SAAS,EAAE,OAAe,EAC1D,GAAS,EAKb,OAFA,SAAS,iBAAiB,YAAa,EAAS,CAChD,SAAS,iBAAiB,aAAc,EAAS,KACpC,CACT,SAAS,oBAAoB,YAAa,EAAS,CACnD,SAAS,oBAAoB,aAAc,EAAS,GAEzD,CAAC,EAAK,EAAQ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { useEffect as e } from "react";
2
+ //#region src/utils/useClickOutside.ts
3
+ function t(t, n) {
4
+ e(() => {
5
+ let e = (e) => {
6
+ !t.current || t.current.contains(e.target) || n();
7
+ };
8
+ return document.addEventListener("mousedown", e), document.addEventListener("touchstart", e), () => {
9
+ document.removeEventListener("mousedown", e), document.removeEventListener("touchstart", e);
10
+ };
11
+ }, [t, n]);
12
+ }
13
+ //#endregion
14
+ export { t };
15
+
16
+ //# sourceMappingURL=useClickOutside-Dcye4Ut0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClickOutside-Dcye4Ut0.js","names":[],"sources":["../src/utils/useClickOutside.ts"],"sourcesContent":["import {useEffect, type RefObject} from 'react'\n\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [ref, handler])\n}\n"],"mappings":";;AAGA,SAAgB,EAAgB,GAAoC,GAA2B;AAC3F,SAAgB;EACZ,IAAM,KAAY,MAA+B;AACzC,IAAC,EAAI,WAAW,EAAI,QAAQ,SAAS,EAAE,OAAe,IAC1D,GAAS;;AAKb,SAFA,SAAS,iBAAiB,aAAa,EAAS,EAChD,SAAS,iBAAiB,cAAc,EAAS,QACpC;AAET,GADA,SAAS,oBAAoB,aAAa,EAAS,EACnD,SAAS,oBAAoB,cAAc,EAAS;;IAEzD,CAAC,GAAK,EAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ let e=require(`react`);function t(t,n){let[r,i]=(0,e.useState)(t);return(0,e.useEffect)(()=>{let e=setTimeout(()=>i(t),n);return()=>clearTimeout(e)},[t,n]),r}function n(t,n){let r=(0,e.useRef)(t);r.current=t;let i=(0,e.useRef)(null);return(0,e.useCallback)(((...e)=>{i.current&&clearTimeout(i.current),i.current=setTimeout(()=>r.current(...e),n)}),[n])}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
2
+ //# sourceMappingURL=useDebounce-C3jbJOKC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebounce-C3jbJOKC.cjs","names":[],"sources":["../src/utils/useDebounce.ts"],"sourcesContent":["import {useState, useEffect, useRef, useCallback} from 'react'\n\n// Expose a value only after it stays stable for the given delay.\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = useState(value)\n\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay)\n return () => clearTimeout(timer)\n }, [value, delay])\n\n return debounced\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n// Wrap a callback so repeated calls collapse into the latest invocation.\nexport function useDebouncedCallback<T extends (...args: any[]) => void>(callback: T, delay: number): T {\n const callbackRef = useRef(callback)\n callbackRef.current = callback\n const timerRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n return useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((...args: any[]) => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => callbackRef.current(...args), delay)\n }) as T,\n [delay]\n )\n}\n"],"mappings":"uBAGA,SAAgB,EAAe,EAAU,EAAkB,CACvD,GAAM,CAAC,EAAW,IAAA,EAAA,EAAA,UAAyB,EAAM,CAOjD,OALA,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAQ,eAAiB,EAAa,EAAM,CAAE,EAAM,CAC1D,UAAa,aAAa,EAAM,EACjC,CAAC,EAAO,EAAM,CAAC,CAEX,EAKX,SAAgB,EAAyD,EAAa,EAAkB,CACpG,IAAM,GAAA,EAAA,EAAA,QAAqB,EAAS,CACpC,EAAY,QAAU,EACtB,IAAM,GAAA,EAAA,EAAA,QAAiD,KAAK,CAE5D,OAAA,EAAA,EAAA,eAEM,GAAG,IAAgB,CACb,EAAS,SAAS,aAAa,EAAS,QAAQ,CACpD,EAAS,QAAU,eAAiB,EAAY,QAAQ,GAAG,EAAK,CAAE,EAAM,GAE5E,CAAC,EAAM,CACV"}
@@ -0,0 +1,21 @@
1
+ import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
2
+ //#region src/utils/useDebounce.ts
3
+ function i(e, n) {
4
+ let [i, a] = r(e);
5
+ return t(() => {
6
+ let t = setTimeout(() => a(e), n);
7
+ return () => clearTimeout(t);
8
+ }, [e, n]), i;
9
+ }
10
+ function a(t, r) {
11
+ let i = n(t);
12
+ i.current = t;
13
+ let a = n(null);
14
+ return e(((...e) => {
15
+ a.current && clearTimeout(a.current), a.current = setTimeout(() => i.current(...e), r);
16
+ }), [r]);
17
+ }
18
+ //#endregion
19
+ export { a as n, i as t };
20
+
21
+ //# sourceMappingURL=useDebounce-D-v3IRXp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebounce-D-v3IRXp.js","names":[],"sources":["../src/utils/useDebounce.ts"],"sourcesContent":["import {useState, useEffect, useRef, useCallback} from 'react'\n\n// Expose a value only after it stays stable for the given delay.\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = useState(value)\n\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay)\n return () => clearTimeout(timer)\n }, [value, delay])\n\n return debounced\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n// Wrap a callback so repeated calls collapse into the latest invocation.\nexport function useDebouncedCallback<T extends (...args: any[]) => void>(callback: T, delay: number): T {\n const callbackRef = useRef(callback)\n callbackRef.current = callback\n const timerRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n return useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((...args: any[]) => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => callbackRef.current(...args), delay)\n }) as T,\n [delay]\n )\n}\n"],"mappings":";;AAGA,SAAgB,EAAe,GAAU,GAAkB;CACvD,IAAM,CAAC,GAAW,KAAgB,EAAS,EAAM;AAOjD,QALA,QAAgB;EACZ,IAAM,IAAQ,iBAAiB,EAAa,EAAM,EAAE,EAAM;AAC1D,eAAa,aAAa,EAAM;IACjC,CAAC,GAAO,EAAM,CAAC,EAEX;;AAKX,SAAgB,EAAyD,GAAa,GAAkB;CACpG,IAAM,IAAc,EAAO,EAAS;AACpC,GAAY,UAAU;CACtB,IAAM,IAAW,EAAsC,KAAK;AAE5D,QAAO,IAED,GAAG,MAAgB;AAEjB,EADI,EAAS,WAAS,aAAa,EAAS,QAAQ,EACpD,EAAS,UAAU,iBAAiB,EAAY,QAAQ,GAAG,EAAK,EAAE,EAAM;KAE5E,CAAC,EAAM,CACV"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./validators-B7cSTrU_.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);var r=(0,t.createContext)(null);function i(){return(0,t.useContext)(r)}function a({initialValues:i={},onSubmit:a,onChange:o,validationMode:s=`onBlur`,children:c,className:l,style:u,noValidate:d=!0}){let[f,p]=(0,t.useState)({...i}),[m,h]=(0,t.useState)({}),[g,_]=(0,t.useState)({}),[v,y]=(0,t.useState)(!1),b=(0,t.useRef)(new Map),x=(0,t.useCallback)(e=>{b.current.set(e.name,e)},[]),S=(0,t.useCallback)(e=>{b.current.delete(e)},[]),C=(0,t.useCallback)((t,n)=>{let r=b.current.get(t);if(!r)return{valid:!0};let i=n===void 0?f[t]:n,a=i==null?``:String(i);if(r.required){let t=e.f(a);if(!t.valid)return t}if(r.validate)for(let e of r.validate){let t=e(a);if(!t.valid)return t}return{valid:!0}},[f]),w=(0,t.useCallback)(e=>{let t=C(e);return h(n=>{if(t.valid){let t={...n};return delete t[e],t}return{...n,[e]:t.error}}),t},[C]),T=(0,t.useCallback)(()=>{let e=!0,t={};for(let[n]of b.current){let r=C(n);r.valid||(e=!1,t[n]=r.error)}h(t);let n={};for(let[e]of b.current)n[e]=!0;return _(n),e},[C]),E=(0,t.useCallback)((e,t)=>{p(n=>{let r={...n,[e]:t};return o?.(r),r}),s===`onChange`&&g[e]&&setTimeout(()=>w(e),0)},[o,s,g,w]),D=(0,t.useCallback)((e,t)=>{h(n=>({...n,[e]:t}))},[]),O=(0,t.useCallback)((e,t)=>{_(n=>({...n,[e]:t})),s===`onBlur`&&t&&w(e)},[s,w]),k=(0,t.useCallback)(()=>{p({...i}),h({}),_({}),y(!1)},[i]),A=(0,t.useCallback)(async e=>{if(e.preventDefault(),v||!T())return;y(!0);let t={setSubmitting:y,resetForm:k,setFieldError:D};try{await a?.(f,t)}finally{y(!1)}},[v,T,f,a,k,D]),j=(0,t.useMemo)(()=>({values:f,errors:m,touched:g,registerField:x,unregisterField:S,setFieldValue:E,setFieldError:D,setFieldTouched:O,validateField:w,validateAll:T,resetForm:k,isSubmitting:v}),[f,m,g,x,S,E,D,O,w,T,k,v]);return(0,n.jsx)(r.Provider,{value:j,children:(0,n.jsx)(`form`,{onSubmit:A,noValidate:d,className:`form${l?` ${l}`:``}`,style:u,children:typeof c==`function`?c(j):c})})}function o(e,n){let r=i();(0,t.useEffect)(()=>{if(r)return r.registerField({name:e,validate:n?.validate,required:n?.required}),()=>r.unregisterField(e)},[r,e,n?.validate,n?.required]);let a=(0,t.useCallback)(t=>{r?.setFieldValue(e,t)},[r,e]),o=(0,t.useCallback)(()=>{r?.setFieldTouched(e,!0)},[r,e]);return{value:r?.values[e]??``,error:r?.errors[e],touched:r?.touched[e]??!1,onChange:a,onBlur:o}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
2
+ //# sourceMappingURL=useFormField-Bz4d7m8u.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormField-Bz4d7m8u.cjs","names":[],"sources":["../src/components/form/Form/FormContext.ts","../src/components/form/Form/Form.tsx","../src/components/form/Form/useFormField.ts"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {FormContextValue} from './Form.types'\n\nexport const FormContext = createContext<FormContextValue | null>(null)\n\n// Read the nearest form context to integrate custom fields with shared state.\nexport function useFormContext(): FormContextValue | null {\n return useContext(FormContext)\n}\n","import {useState, useRef, useCallback, useMemo} from 'react'\nimport type * as React from 'react'\nimport type {FormProps, FieldRegistration, FormContextValue, FormHelpers} from './Form.types'\nimport {FormContext} from './FormContext'\nimport {validateRequired} from '../../../utils/validators'\nimport type {ValidationResult} from '../../../utils/validators'\nimport './Form.css'\n\n// Coordinate form values, validation state and submit helpers through context.\nexport function Form({\n initialValues = {},\n onSubmit,\n onChange,\n validationMode = 'onBlur',\n children,\n className,\n style,\n noValidate = true,\n}: FormProps) {\n const [values, setValues] = useState<Record<string, unknown>>({...initialValues})\n const [errors, setErrors] = useState<Record<string, string>>({})\n const [touched, setTouched] = useState<Record<string, boolean>>({})\n const [isSubmitting, setIsSubmitting] = useState(false)\n const fieldsRef = useRef<Map<string, FieldRegistration>>(new Map())\n\n // Track mounted fields so validation stays aligned with active inputs.\n const registerField = useCallback((reg: FieldRegistration) => {\n fieldsRef.current.set(reg.name, reg)\n }, [])\n\n const unregisterField = useCallback((name: string) => {\n fieldsRef.current.delete(name)\n }, [])\n\n // Run required and custom validators without mutating visible error state yet.\n const validateFieldInternal = useCallback(\n (name: string, val?: unknown): ValidationResult => {\n const reg = fieldsRef.current.get(name)\n if (!reg) return {valid: true}\n\n const fieldValue = val !== undefined ? val : values[name]\n const strValue = fieldValue != null ? String(fieldValue) : ''\n\n // Required check\n if (reg.required) {\n const reqResult = validateRequired(strValue)\n if (!reqResult.valid) return reqResult\n }\n\n // Custom validators\n if (reg.validate) {\n for (const validator of reg.validate) {\n const result = validator(strValue)\n if (!result.valid) return result\n }\n }\n\n return {valid: true}\n },\n [values]\n )\n\n // Persist the latest validation result for a single field.\n const validateField = useCallback(\n (name: string): ValidationResult => {\n const result = validateFieldInternal(name)\n setErrors((prev) => {\n if (result.valid) {\n const next = {...prev}\n delete next[name]\n return next\n }\n return {...prev, [name]: result.error!}\n })\n return result\n },\n [validateFieldInternal]\n )\n\n // Validate every registered field before submit.\n const validateAll = useCallback((): boolean => {\n let allValid = true\n const newErrors: Record<string, string> = {}\n\n for (const [name] of fieldsRef.current) {\n const result = validateFieldInternal(name)\n if (!result.valid) {\n allValid = false\n newErrors[name] = result.error!\n }\n }\n\n setErrors(newErrors)\n // Mark all as touched\n const allTouched: Record<string, boolean> = {}\n for (const [name] of fieldsRef.current) {\n allTouched[name] = true\n }\n setTouched(allTouched)\n\n return allValid\n }, [validateFieldInternal])\n\n // Update field values and trigger onChange or validation according to mode.\n const setFieldValue = useCallback(\n (name: string, val: unknown) => {\n setValues((prev) => {\n const next = {...prev, [name]: val}\n onChange?.(next)\n return next\n })\n\n if (validationMode === 'onChange' && touched[name]) {\n // Defer validation to next tick so values are updated\n setTimeout(() => validateField(name), 0)\n }\n },\n [onChange, validationMode, touched, validateField]\n )\n\n const setFieldError = useCallback((name: string, error: string) => {\n setErrors((prev) => ({...prev, [name]: error}))\n }, [])\n\n // Mark fields as touched so blur validation can start surfacing errors.\n const setFieldTouched = useCallback(\n (name: string, isTouched: boolean) => {\n setTouched((prev) => ({...prev, [name]: isTouched}))\n if (validationMode === 'onBlur' && isTouched) {\n validateField(name)\n }\n },\n [validationMode, validateField]\n )\n\n const resetForm = useCallback(() => {\n setValues({...initialValues})\n setErrors({})\n setTouched({})\n setIsSubmitting(false)\n }, [initialValues])\n\n // Guard submit flow with validation and a single in-flight submission state.\n const handleSubmit = useCallback(\n async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n if (isSubmitting) return\n\n const valid = validateAll()\n if (!valid) return\n\n setIsSubmitting(true)\n const helpers: FormHelpers = {\n setSubmitting: setIsSubmitting,\n resetForm,\n setFieldError,\n }\n\n try {\n await onSubmit?.(values, helpers)\n } finally {\n setIsSubmitting(false)\n }\n },\n [isSubmitting, validateAll, values, onSubmit, resetForm, setFieldError]\n )\n\n // Memoize the public form context to limit downstream re-renders.\n const ctx = useMemo<FormContextValue>(\n () => ({\n values,\n errors,\n touched,\n registerField,\n unregisterField,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n validateField,\n validateAll,\n resetForm,\n isSubmitting,\n }),\n [\n values,\n errors,\n touched,\n registerField,\n unregisterField,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n validateField,\n validateAll,\n resetForm,\n isSubmitting,\n ]\n )\n\n return (\n <FormContext.Provider value={ctx}>\n <form\n onSubmit={handleSubmit}\n noValidate={noValidate}\n className={`form${className ? ` ${className}` : ''}`}\n style={style}\n >\n {typeof children === 'function' ? children(ctx) : children}\n </form>\n </FormContext.Provider>\n )\n}\n","import {useEffect, useCallback} from 'react'\nimport {useFormContext} from './FormContext'\nimport type {ValidatorFn} from '../../../utils/validators'\n\nexport interface UseFormFieldOptions {\n validate?: ValidatorFn[]\n required?: boolean\n}\n\nexport interface UseFormFieldReturn {\n value: unknown\n error: string | undefined\n touched: boolean\n onChange: (value: unknown) => void\n onBlur: () => void\n}\n\n// Connect a field name to the nearest form context and expose field-level helpers.\nexport function useFormField(name: string, options?: UseFormFieldOptions): UseFormFieldReturn {\n const ctx = useFormContext()\n\n // Register the field definition so the form can validate and reset it centrally.\n useEffect(() => {\n if (!ctx) return\n ctx.registerField({\n name,\n validate: options?.validate,\n required: options?.required,\n })\n return () => ctx.unregisterField(name)\n }, [ctx, name, options?.validate, options?.required])\n\n // Forward value updates into the form state.\n const onChange = useCallback(\n (val: unknown) => {\n ctx?.setFieldValue(name, val)\n },\n [ctx, name]\n )\n\n // Mark the field as touched when the control loses focus.\n const onBlur = useCallback(() => {\n ctx?.setFieldTouched(name, true)\n }, [ctx, name])\n\n return {\n value: ctx?.values[name] ?? '',\n error: ctx?.errors[name],\n touched: ctx?.touched[name] ?? false,\n onChange,\n onBlur,\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ import { f as e } from "./validators-Y1nYXhNR.js";
2
+ import { createContext as t, useCallback as n, useContext as r, useEffect as i, useMemo as a, useRef as o, useState as s } from "react";
3
+ import { jsx as c } from "react/jsx-runtime";
4
+ //#region src/components/form/Form/FormContext.ts
5
+ var l = t(null);
6
+ function u() {
7
+ return r(l);
8
+ }
9
+ //#endregion
10
+ //#region src/components/form/Form/Form.tsx
11
+ function d({ initialValues: t = {}, onSubmit: r, onChange: i, validationMode: u = "onBlur", children: d, className: f, style: p, noValidate: m = !0 }) {
12
+ let [h, g] = s({ ...t }), [_, v] = s({}), [y, b] = s({}), [x, S] = s(!1), C = o(/* @__PURE__ */ new Map()), w = n((e) => {
13
+ C.current.set(e.name, e);
14
+ }, []), T = n((e) => {
15
+ C.current.delete(e);
16
+ }, []), E = n((t, n) => {
17
+ let r = C.current.get(t);
18
+ if (!r) return { valid: !0 };
19
+ let i = n === void 0 ? h[t] : n, a = i == null ? "" : String(i);
20
+ if (r.required) {
21
+ let t = e(a);
22
+ if (!t.valid) return t;
23
+ }
24
+ if (r.validate) for (let e of r.validate) {
25
+ let t = e(a);
26
+ if (!t.valid) return t;
27
+ }
28
+ return { valid: !0 };
29
+ }, [h]), D = n((e) => {
30
+ let t = E(e);
31
+ return v((n) => {
32
+ if (t.valid) {
33
+ let t = { ...n };
34
+ return delete t[e], t;
35
+ }
36
+ return {
37
+ ...n,
38
+ [e]: t.error
39
+ };
40
+ }), t;
41
+ }, [E]), O = n(() => {
42
+ let e = !0, t = {};
43
+ for (let [n] of C.current) {
44
+ let r = E(n);
45
+ r.valid || (e = !1, t[n] = r.error);
46
+ }
47
+ v(t);
48
+ let n = {};
49
+ for (let [e] of C.current) n[e] = !0;
50
+ return b(n), e;
51
+ }, [E]), k = n((e, t) => {
52
+ g((n) => {
53
+ let r = {
54
+ ...n,
55
+ [e]: t
56
+ };
57
+ return i?.(r), r;
58
+ }), u === "onChange" && y[e] && setTimeout(() => D(e), 0);
59
+ }, [
60
+ i,
61
+ u,
62
+ y,
63
+ D
64
+ ]), A = n((e, t) => {
65
+ v((n) => ({
66
+ ...n,
67
+ [e]: t
68
+ }));
69
+ }, []), j = n((e, t) => {
70
+ b((n) => ({
71
+ ...n,
72
+ [e]: t
73
+ })), u === "onBlur" && t && D(e);
74
+ }, [u, D]), M = n(() => {
75
+ g({ ...t }), v({}), b({}), S(!1);
76
+ }, [t]), N = n(async (e) => {
77
+ if (e.preventDefault(), x || !O()) return;
78
+ S(!0);
79
+ let t = {
80
+ setSubmitting: S,
81
+ resetForm: M,
82
+ setFieldError: A
83
+ };
84
+ try {
85
+ await r?.(h, t);
86
+ } finally {
87
+ S(!1);
88
+ }
89
+ }, [
90
+ x,
91
+ O,
92
+ h,
93
+ r,
94
+ M,
95
+ A
96
+ ]), P = a(() => ({
97
+ values: h,
98
+ errors: _,
99
+ touched: y,
100
+ registerField: w,
101
+ unregisterField: T,
102
+ setFieldValue: k,
103
+ setFieldError: A,
104
+ setFieldTouched: j,
105
+ validateField: D,
106
+ validateAll: O,
107
+ resetForm: M,
108
+ isSubmitting: x
109
+ }), [
110
+ h,
111
+ _,
112
+ y,
113
+ w,
114
+ T,
115
+ k,
116
+ A,
117
+ j,
118
+ D,
119
+ O,
120
+ M,
121
+ x
122
+ ]);
123
+ return /* @__PURE__ */ c(l.Provider, {
124
+ value: P,
125
+ children: /* @__PURE__ */ c("form", {
126
+ onSubmit: N,
127
+ noValidate: m,
128
+ className: `form${f ? ` ${f}` : ""}`,
129
+ style: p,
130
+ children: typeof d == "function" ? d(P) : d
131
+ })
132
+ });
133
+ }
134
+ //#endregion
135
+ //#region src/components/form/Form/useFormField.ts
136
+ function f(e, t) {
137
+ let r = u();
138
+ i(() => {
139
+ if (r) return r.registerField({
140
+ name: e,
141
+ validate: t?.validate,
142
+ required: t?.required
143
+ }), () => r.unregisterField(e);
144
+ }, [
145
+ r,
146
+ e,
147
+ t?.validate,
148
+ t?.required
149
+ ]);
150
+ let a = n((t) => {
151
+ r?.setFieldValue(e, t);
152
+ }, [r, e]), o = n(() => {
153
+ r?.setFieldTouched(e, !0);
154
+ }, [r, e]);
155
+ return {
156
+ value: r?.values[e] ?? "",
157
+ error: r?.errors[e],
158
+ touched: r?.touched[e] ?? !1,
159
+ onChange: a,
160
+ onBlur: o
161
+ };
162
+ }
163
+ //#endregion
164
+ export { d as n, u as r, f as t };
165
+
166
+ //# sourceMappingURL=useFormField-jOnRqGD2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormField-jOnRqGD2.js","names":[],"sources":["../src/components/form/Form/FormContext.ts","../src/components/form/Form/Form.tsx","../src/components/form/Form/useFormField.ts"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {FormContextValue} from './Form.types'\n\nexport const FormContext = createContext<FormContextValue | null>(null)\n\n// Read the nearest form context to integrate custom fields with shared state.\nexport function useFormContext(): FormContextValue | null {\n return useContext(FormContext)\n}\n","import {useState, useRef, useCallback, useMemo} from 'react'\nimport type * as React from 'react'\nimport type {FormProps, FieldRegistration, FormContextValue, FormHelpers} from './Form.types'\nimport {FormContext} from './FormContext'\nimport {validateRequired} from '../../../utils/validators'\nimport type {ValidationResult} from '../../../utils/validators'\nimport './Form.css'\n\n// Coordinate form values, validation state and submit helpers through context.\nexport function Form({\n initialValues = {},\n onSubmit,\n onChange,\n validationMode = 'onBlur',\n children,\n className,\n style,\n noValidate = true,\n}: FormProps) {\n const [values, setValues] = useState<Record<string, unknown>>({...initialValues})\n const [errors, setErrors] = useState<Record<string, string>>({})\n const [touched, setTouched] = useState<Record<string, boolean>>({})\n const [isSubmitting, setIsSubmitting] = useState(false)\n const fieldsRef = useRef<Map<string, FieldRegistration>>(new Map())\n\n // Track mounted fields so validation stays aligned with active inputs.\n const registerField = useCallback((reg: FieldRegistration) => {\n fieldsRef.current.set(reg.name, reg)\n }, [])\n\n const unregisterField = useCallback((name: string) => {\n fieldsRef.current.delete(name)\n }, [])\n\n // Run required and custom validators without mutating visible error state yet.\n const validateFieldInternal = useCallback(\n (name: string, val?: unknown): ValidationResult => {\n const reg = fieldsRef.current.get(name)\n if (!reg) return {valid: true}\n\n const fieldValue = val !== undefined ? val : values[name]\n const strValue = fieldValue != null ? String(fieldValue) : ''\n\n // Required check\n if (reg.required) {\n const reqResult = validateRequired(strValue)\n if (!reqResult.valid) return reqResult\n }\n\n // Custom validators\n if (reg.validate) {\n for (const validator of reg.validate) {\n const result = validator(strValue)\n if (!result.valid) return result\n }\n }\n\n return {valid: true}\n },\n [values]\n )\n\n // Persist the latest validation result for a single field.\n const validateField = useCallback(\n (name: string): ValidationResult => {\n const result = validateFieldInternal(name)\n setErrors((prev) => {\n if (result.valid) {\n const next = {...prev}\n delete next[name]\n return next\n }\n return {...prev, [name]: result.error!}\n })\n return result\n },\n [validateFieldInternal]\n )\n\n // Validate every registered field before submit.\n const validateAll = useCallback((): boolean => {\n let allValid = true\n const newErrors: Record<string, string> = {}\n\n for (const [name] of fieldsRef.current) {\n const result = validateFieldInternal(name)\n if (!result.valid) {\n allValid = false\n newErrors[name] = result.error!\n }\n }\n\n setErrors(newErrors)\n // Mark all as touched\n const allTouched: Record<string, boolean> = {}\n for (const [name] of fieldsRef.current) {\n allTouched[name] = true\n }\n setTouched(allTouched)\n\n return allValid\n }, [validateFieldInternal])\n\n // Update field values and trigger onChange or validation according to mode.\n const setFieldValue = useCallback(\n (name: string, val: unknown) => {\n setValues((prev) => {\n const next = {...prev, [name]: val}\n onChange?.(next)\n return next\n })\n\n if (validationMode === 'onChange' && touched[name]) {\n // Defer validation to next tick so values are updated\n setTimeout(() => validateField(name), 0)\n }\n },\n [onChange, validationMode, touched, validateField]\n )\n\n const setFieldError = useCallback((name: string, error: string) => {\n setErrors((prev) => ({...prev, [name]: error}))\n }, [])\n\n // Mark fields as touched so blur validation can start surfacing errors.\n const setFieldTouched = useCallback(\n (name: string, isTouched: boolean) => {\n setTouched((prev) => ({...prev, [name]: isTouched}))\n if (validationMode === 'onBlur' && isTouched) {\n validateField(name)\n }\n },\n [validationMode, validateField]\n )\n\n const resetForm = useCallback(() => {\n setValues({...initialValues})\n setErrors({})\n setTouched({})\n setIsSubmitting(false)\n }, [initialValues])\n\n // Guard submit flow with validation and a single in-flight submission state.\n const handleSubmit = useCallback(\n async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n if (isSubmitting) return\n\n const valid = validateAll()\n if (!valid) return\n\n setIsSubmitting(true)\n const helpers: FormHelpers = {\n setSubmitting: setIsSubmitting,\n resetForm,\n setFieldError,\n }\n\n try {\n await onSubmit?.(values, helpers)\n } finally {\n setIsSubmitting(false)\n }\n },\n [isSubmitting, validateAll, values, onSubmit, resetForm, setFieldError]\n )\n\n // Memoize the public form context to limit downstream re-renders.\n const ctx = useMemo<FormContextValue>(\n () => ({\n values,\n errors,\n touched,\n registerField,\n unregisterField,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n validateField,\n validateAll,\n resetForm,\n isSubmitting,\n }),\n [\n values,\n errors,\n touched,\n registerField,\n unregisterField,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n validateField,\n validateAll,\n resetForm,\n isSubmitting,\n ]\n )\n\n return (\n <FormContext.Provider value={ctx}>\n <form\n onSubmit={handleSubmit}\n noValidate={noValidate}\n className={`form${className ? ` ${className}` : ''}`}\n style={style}\n >\n {typeof children === 'function' ? children(ctx) : children}\n </form>\n </FormContext.Provider>\n )\n}\n","import {useEffect, useCallback} from 'react'\nimport {useFormContext} from './FormContext'\nimport type {ValidatorFn} from '../../../utils/validators'\n\nexport interface UseFormFieldOptions {\n validate?: ValidatorFn[]\n required?: boolean\n}\n\nexport interface UseFormFieldReturn {\n value: unknown\n error: string | undefined\n touched: boolean\n onChange: (value: unknown) => void\n onBlur: () => void\n}\n\n// Connect a field name to the nearest form context and expose field-level helpers.\nexport function useFormField(name: string, options?: UseFormFieldOptions): UseFormFieldReturn {\n const ctx = useFormContext()\n\n // Register the field definition so the form can validate and reset it centrally.\n useEffect(() => {\n if (!ctx) return\n ctx.registerField({\n name,\n validate: options?.validate,\n required: options?.required,\n })\n return () => ctx.unregisterField(name)\n }, [ctx, name, options?.validate, options?.required])\n\n // Forward value updates into the form state.\n const onChange = useCallback(\n (val: unknown) => {\n ctx?.setFieldValue(name, val)\n },\n [ctx, name]\n )\n\n // Mark the field as touched when the control loses focus.\n const onBlur = useCallback(() => {\n ctx?.setFieldTouched(name, true)\n }, [ctx, name])\n\n return {\n value: ctx?.values[name] ?? '',\n error: ctx?.errors[name],\n touched: ctx?.touched[name] ?? false,\n onChange,\n onBlur,\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { useCallback as e, useMemo as t, useState as n } from "react";
2
+ //#region src/utils/useGhostText.ts
3
+ function r(e) {
4
+ return typeof e == "string" ? e : String(e);
5
+ }
6
+ function i(e, t, n) {
7
+ if (!t) return [];
8
+ let r = t.toLowerCase();
9
+ return e.filter((e) => n(e).toLowerCase().startsWith(r));
10
+ }
11
+ function a({ options: a, value: o, minChars: s = 2, getLabel: c = r, filter: l }) {
12
+ let [u, d] = n(0), f = t(() => o.length < s ? [] : l ? l(a, o) : i(a, o, c), [
13
+ a,
14
+ o,
15
+ s,
16
+ l,
17
+ c
18
+ ]), p = f.length > 0 ? f[u % f.length] : null, m = p ? c(p) : "", h = m && m.toLowerCase().startsWith(o.toLowerCase()) ? m.slice(o.length) : "", g = e(() => !h || !p ? {
19
+ value: o,
20
+ option: null
21
+ } : {
22
+ value: o + h,
23
+ option: p
24
+ }, [
25
+ h,
26
+ p,
27
+ o
28
+ ]), _ = e(() => {
29
+ f.length > 1 && d((e) => (e + 1) % f.length);
30
+ }, [f.length]), v = e(() => {
31
+ f.length > 1 && d((e) => (e - 1 + f.length) % f.length);
32
+ }, [f.length]), y = e(() => d(0), []), b = e((e) => (e.key === "Tab" || e.key === "Enter") && h ? (e.preventDefault(), !0) : e.key === "ArrowDown" && f.length > 1 ? (e.preventDefault(), _(), !1) : e.key === "ArrowUp" && f.length > 1 ? (e.preventDefault(), v(), !1) : !1, [
33
+ h,
34
+ f.length,
35
+ _,
36
+ v
37
+ ]);
38
+ return {
39
+ hint: h,
40
+ accept: g,
41
+ next: _,
42
+ prev: v,
43
+ reset: y,
44
+ matchCount: f.length,
45
+ onKeyDown: b
46
+ };
47
+ }
48
+ //#endregion
49
+ export { a as t };
50
+
51
+ //# sourceMappingURL=useGhostText-BNcH5o9H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGhostText-BNcH5o9H.js","names":[],"sources":["../src/utils/useGhostText.ts"],"sourcesContent":["import {useState, useCallback, useMemo} from 'react'\nimport type * as React from 'react'\n\nexport interface GhostTextOptions<T = string> {\n options: T[]\n value: string\n minChars?: number\n getLabel?: (option: T) => string\n filter?: (options: T[], input: string) => T[]\n}\n\nexport interface GhostTextReturn<T = string> {\n /** The ghost suffix to render after the typed text. */\n hint: string\n /** Accept the current hint and return the full value. */\n accept: () => {value: string; option: T | null}\n /** Cycle to the next matching option. */\n next: () => void\n /** Cycle to the previous matching option. */\n prev: () => void\n /** Reset the hint index (call on value change). */\n reset: () => void\n /** Number of matching options. */\n matchCount: number\n /** Handle keyboard events — Tab/Enter accept, arrows cycle, Escape resets. */\n onKeyDown: (e: React.KeyboardEvent) => boolean\n}\n\nfunction defaultGetLabel<T>(option: T): string {\n return typeof option === 'string' ? option : String(option)\n}\n\nfunction defaultFilter<T>(options: T[], input: string, getLabel: (o: T) => string): T[] {\n if (!input) return []\n const lower = input.toLowerCase()\n return options.filter((o) => getLabel(o).toLowerCase().startsWith(lower))\n}\n\n// Manage inline ghost-text suggestions for any text input.\nexport function useGhostText<T = string>({\n options,\n value,\n minChars = 2,\n getLabel = defaultGetLabel,\n filter,\n}: GhostTextOptions<T>): GhostTextReturn<T> {\n const [hintIndex, setHintIndex] = useState(0)\n\n const filtered = useMemo(() => {\n if (value.length < minChars) return []\n if (filter) return filter(options, value)\n return defaultFilter(options, value, getLabel)\n }, [options, value, minChars, filter, getLabel])\n\n const current = filtered.length > 0 ? filtered[hintIndex % filtered.length] : null\n const fullLabel = current ? getLabel(current) : ''\n const hint =\n fullLabel && fullLabel.toLowerCase().startsWith(value.toLowerCase()) ? fullLabel.slice(value.length) : ''\n\n const accept = useCallback(() => {\n if (!hint || !current) return {value, option: null}\n return {value: value + hint, option: current}\n }, [hint, current, value])\n\n const next = useCallback(() => {\n if (filtered.length > 1) setHintIndex((i) => (i + 1) % filtered.length)\n }, [filtered.length])\n\n const prev = useCallback(() => {\n if (filtered.length > 1) setHintIndex((i) => (i - 1 + filtered.length) % filtered.length)\n }, [filtered.length])\n\n const reset = useCallback(() => setHintIndex(0), [])\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent): boolean => {\n if ((e.key === 'Tab' || e.key === 'Enter') && hint) {\n e.preventDefault()\n return true // signal: caller should accept\n }\n if (e.key === 'ArrowDown' && filtered.length > 1) {\n e.preventDefault()\n next()\n return false\n }\n if (e.key === 'ArrowUp' && filtered.length > 1) {\n e.preventDefault()\n prev()\n return false\n }\n return false\n },\n [hint, filtered.length, next, prev]\n )\n\n return {hint, accept, next, prev, reset, matchCount: filtered.length, onKeyDown}\n}\n"],"mappings":";;AA4BA,SAAS,EAAmB,GAAmB;AAC3C,QAAO,OAAO,KAAW,WAAW,IAAS,OAAO,EAAO;;AAG/D,SAAS,EAAiB,GAAc,GAAe,GAAiC;AACpF,KAAI,CAAC,EAAO,QAAO,EAAE;CACrB,IAAM,IAAQ,EAAM,aAAa;AACjC,QAAO,EAAQ,QAAQ,MAAM,EAAS,EAAE,CAAC,aAAa,CAAC,WAAW,EAAM,CAAC;;AAI7E,SAAgB,EAAyB,EACrC,YACA,UACA,cAAW,GACX,cAAW,GACX,aACwC;CACxC,IAAM,CAAC,GAAW,KAAgB,EAAS,EAAE,EAEvC,IAAW,QACT,EAAM,SAAS,IAAiB,EAAE,GAClC,IAAe,EAAO,GAAS,EAAM,GAClC,EAAc,GAAS,GAAO,EAAS,EAC/C;EAAC;EAAS;EAAO;EAAU;EAAQ;EAAS,CAAC,EAE1C,IAAU,EAAS,SAAS,IAAI,EAAS,IAAY,EAAS,UAAU,MACxE,IAAY,IAAU,EAAS,EAAQ,GAAG,IAC1C,IACF,KAAa,EAAU,aAAa,CAAC,WAAW,EAAM,aAAa,CAAC,GAAG,EAAU,MAAM,EAAM,OAAO,GAAG,IAErG,IAAS,QACP,CAAC,KAAQ,CAAC,IAAgB;EAAC;EAAO,QAAQ;EAAK,GAC5C;EAAC,OAAO,IAAQ;EAAM,QAAQ;EAAQ,EAC9C;EAAC;EAAM;EAAS;EAAM,CAAC,EAEpB,IAAO,QAAkB;AAC3B,EAAI,EAAS,SAAS,KAAG,GAAc,OAAO,IAAI,KAAK,EAAS,OAAO;IACxE,CAAC,EAAS,OAAO,CAAC,EAEf,IAAO,QAAkB;AAC3B,EAAI,EAAS,SAAS,KAAG,GAAc,OAAO,IAAI,IAAI,EAAS,UAAU,EAAS,OAAO;IAC1F,CAAC,EAAS,OAAO,CAAC,EAEf,IAAQ,QAAkB,EAAa,EAAE,EAAE,EAAE,CAAC,EAE9C,IAAY,GACb,OACQ,EAAE,QAAQ,SAAS,EAAE,QAAQ,YAAY,KAC1C,EAAE,gBAAgB,EACX,MAEP,EAAE,QAAQ,eAAe,EAAS,SAAS,KAC3C,EAAE,gBAAgB,EAClB,GAAM,EACC,MAEP,EAAE,QAAQ,aAAa,EAAS,SAAS,KACzC,EAAE,gBAAgB,EAClB,GAAM,EACC,MAEJ,IAEX;EAAC;EAAM,EAAS;EAAQ;EAAM;EAAK,CACtC;AAED,QAAO;EAAC;EAAM;EAAQ;EAAM;EAAM;EAAO,YAAY,EAAS;EAAQ;EAAU"}
@@ -0,0 +1,2 @@
1
+ let e=require(`react`);function t(e){return typeof e==`string`?e:String(e)}function n(e,t,n){if(!t)return[];let r=t.toLowerCase();return e.filter(e=>n(e).toLowerCase().startsWith(r))}function r({options:r,value:i,minChars:a=2,getLabel:o=t,filter:s}){let[c,l]=(0,e.useState)(0),u=(0,e.useMemo)(()=>i.length<a?[]:s?s(r,i):n(r,i,o),[r,i,a,s,o]),d=u.length>0?u[c%u.length]:null,f=d?o(d):``,p=f&&f.toLowerCase().startsWith(i.toLowerCase())?f.slice(i.length):``,m=(0,e.useCallback)(()=>!p||!d?{value:i,option:null}:{value:i+p,option:d},[p,d,i]),h=(0,e.useCallback)(()=>{u.length>1&&l(e=>(e+1)%u.length)},[u.length]),g=(0,e.useCallback)(()=>{u.length>1&&l(e=>(e-1+u.length)%u.length)},[u.length]),_=(0,e.useCallback)(()=>l(0),[]),v=(0,e.useCallback)(e=>(e.key===`Tab`||e.key===`Enter`)&&p?(e.preventDefault(),!0):e.key===`ArrowDown`&&u.length>1?(e.preventDefault(),h(),!1):e.key===`ArrowUp`&&u.length>1?(e.preventDefault(),g(),!1):!1,[p,u.length,h,g]);return{hint:p,accept:m,next:h,prev:g,reset:_,matchCount:u.length,onKeyDown:v}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
2
+ //# sourceMappingURL=useGhostText-CoYhBGCg.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGhostText-CoYhBGCg.cjs","names":[],"sources":["../src/utils/useGhostText.ts"],"sourcesContent":["import {useState, useCallback, useMemo} from 'react'\nimport type * as React from 'react'\n\nexport interface GhostTextOptions<T = string> {\n options: T[]\n value: string\n minChars?: number\n getLabel?: (option: T) => string\n filter?: (options: T[], input: string) => T[]\n}\n\nexport interface GhostTextReturn<T = string> {\n /** The ghost suffix to render after the typed text. */\n hint: string\n /** Accept the current hint and return the full value. */\n accept: () => {value: string; option: T | null}\n /** Cycle to the next matching option. */\n next: () => void\n /** Cycle to the previous matching option. */\n prev: () => void\n /** Reset the hint index (call on value change). */\n reset: () => void\n /** Number of matching options. */\n matchCount: number\n /** Handle keyboard events — Tab/Enter accept, arrows cycle, Escape resets. */\n onKeyDown: (e: React.KeyboardEvent) => boolean\n}\n\nfunction defaultGetLabel<T>(option: T): string {\n return typeof option === 'string' ? option : String(option)\n}\n\nfunction defaultFilter<T>(options: T[], input: string, getLabel: (o: T) => string): T[] {\n if (!input) return []\n const lower = input.toLowerCase()\n return options.filter((o) => getLabel(o).toLowerCase().startsWith(lower))\n}\n\n// Manage inline ghost-text suggestions for any text input.\nexport function useGhostText<T = string>({\n options,\n value,\n minChars = 2,\n getLabel = defaultGetLabel,\n filter,\n}: GhostTextOptions<T>): GhostTextReturn<T> {\n const [hintIndex, setHintIndex] = useState(0)\n\n const filtered = useMemo(() => {\n if (value.length < minChars) return []\n if (filter) return filter(options, value)\n return defaultFilter(options, value, getLabel)\n }, [options, value, minChars, filter, getLabel])\n\n const current = filtered.length > 0 ? filtered[hintIndex % filtered.length] : null\n const fullLabel = current ? getLabel(current) : ''\n const hint =\n fullLabel && fullLabel.toLowerCase().startsWith(value.toLowerCase()) ? fullLabel.slice(value.length) : ''\n\n const accept = useCallback(() => {\n if (!hint || !current) return {value, option: null}\n return {value: value + hint, option: current}\n }, [hint, current, value])\n\n const next = useCallback(() => {\n if (filtered.length > 1) setHintIndex((i) => (i + 1) % filtered.length)\n }, [filtered.length])\n\n const prev = useCallback(() => {\n if (filtered.length > 1) setHintIndex((i) => (i - 1 + filtered.length) % filtered.length)\n }, [filtered.length])\n\n const reset = useCallback(() => setHintIndex(0), [])\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent): boolean => {\n if ((e.key === 'Tab' || e.key === 'Enter') && hint) {\n e.preventDefault()\n return true // signal: caller should accept\n }\n if (e.key === 'ArrowDown' && filtered.length > 1) {\n e.preventDefault()\n next()\n return false\n }\n if (e.key === 'ArrowUp' && filtered.length > 1) {\n e.preventDefault()\n prev()\n return false\n }\n return false\n },\n [hint, filtered.length, next, prev]\n )\n\n return {hint, accept, next, prev, reset, matchCount: filtered.length, onKeyDown}\n}\n"],"mappings":"uBA4BA,SAAS,EAAmB,EAAmB,CAC3C,OAAO,OAAO,GAAW,SAAW,EAAS,OAAO,EAAO,CAG/D,SAAS,EAAiB,EAAc,EAAe,EAAiC,CACpF,GAAI,CAAC,EAAO,MAAO,EAAE,CACrB,IAAM,EAAQ,EAAM,aAAa,CACjC,OAAO,EAAQ,OAAQ,GAAM,EAAS,EAAE,CAAC,aAAa,CAAC,WAAW,EAAM,CAAC,CAI7E,SAAgB,EAAyB,CACrC,UACA,QACA,WAAW,EACX,WAAW,EACX,UACwC,CACxC,GAAM,CAAC,EAAW,IAAA,EAAA,EAAA,UAAyB,EAAE,CAEvC,GAAA,EAAA,EAAA,aACE,EAAM,OAAS,EAAiB,EAAE,CAClC,EAAe,EAAO,EAAS,EAAM,CAClC,EAAc,EAAS,EAAO,EAAS,CAC/C,CAAC,EAAS,EAAO,EAAU,EAAQ,EAAS,CAAC,CAE1C,EAAU,EAAS,OAAS,EAAI,EAAS,EAAY,EAAS,QAAU,KACxE,EAAY,EAAU,EAAS,EAAQ,CAAG,GAC1C,EACF,GAAa,EAAU,aAAa,CAAC,WAAW,EAAM,aAAa,CAAC,CAAG,EAAU,MAAM,EAAM,OAAO,CAAG,GAErG,GAAA,EAAA,EAAA,iBACE,CAAC,GAAQ,CAAC,EAAgB,CAAC,QAAO,OAAQ,KAAK,CAC5C,CAAC,MAAO,EAAQ,EAAM,OAAQ,EAAQ,CAC9C,CAAC,EAAM,EAAS,EAAM,CAAC,CAEpB,GAAA,EAAA,EAAA,iBAAyB,CACvB,EAAS,OAAS,GAAG,EAAc,IAAO,EAAI,GAAK,EAAS,OAAO,EACxE,CAAC,EAAS,OAAO,CAAC,CAEf,GAAA,EAAA,EAAA,iBAAyB,CACvB,EAAS,OAAS,GAAG,EAAc,IAAO,EAAI,EAAI,EAAS,QAAU,EAAS,OAAO,EAC1F,CAAC,EAAS,OAAO,CAAC,CAEf,GAAA,EAAA,EAAA,iBAA0B,EAAa,EAAE,CAAE,EAAE,CAAC,CAE9C,GAAA,EAAA,EAAA,aACD,IACQ,EAAE,MAAQ,OAAS,EAAE,MAAQ,UAAY,GAC1C,EAAE,gBAAgB,CACX,IAEP,EAAE,MAAQ,aAAe,EAAS,OAAS,GAC3C,EAAE,gBAAgB,CAClB,GAAM,CACC,IAEP,EAAE,MAAQ,WAAa,EAAS,OAAS,GACzC,EAAE,gBAAgB,CAClB,GAAM,CACC,IAEJ,GAEX,CAAC,EAAM,EAAS,OAAQ,EAAM,EAAK,CACtC,CAED,MAAO,CAAC,OAAM,SAAQ,OAAM,OAAM,QAAO,WAAY,EAAS,OAAQ,YAAU"}
@@ -0,0 +1,40 @@
1
+ import { useCallback as e, useRef as t } from "react";
2
+ import { jsx as n } from "react/jsx-runtime";
3
+ //#region src/utils/useInteractionEffect.tsx
4
+ function r(e, t, n) {
5
+ let r = t.getBoundingClientRect(), i = Math.max(r.width, r.height) * 1.75, a = i / 2, o = document.createElement("span"), s = n.centered || n.clientX === void 0 ? r.width / 2 - a : n.clientX - r.left - a, c = n.centered || n.clientY === void 0 ? r.height / 2 - a : n.clientY - r.top - a;
6
+ o.className = "click-effect-wave", o.style.width = `${i}px`, o.style.height = `${i}px`, o.style.left = `${s}px`, o.style.top = `${c}px`, n.color && o.style.setProperty("--click-effect-color", n.color), e.appendChild(o), o.addEventListener("animationend", () => o.remove(), { once: !0 });
7
+ }
8
+ function i({ effect: i = "ripple", disabled: a = !1, centered: o = !1, color: s } = {}) {
9
+ let c = t(null), l = i === "ripple" && !a, u = e((e) => {
10
+ !l || !e || !c.current || r(c.current, e, {
11
+ centered: !0,
12
+ color: s
13
+ });
14
+ }, [s, l]), d = e((e) => {
15
+ !l || !c.current || e.pointerType === "mouse" && e.button !== 0 || r(c.current, e.currentTarget, {
16
+ centered: o,
17
+ color: s,
18
+ clientX: e.clientX,
19
+ clientY: e.clientY
20
+ });
21
+ }, [
22
+ o,
23
+ s,
24
+ l
25
+ ]);
26
+ return {
27
+ effectClassName: l ? "click-effect-root" : void 0,
28
+ effectLayer: l ? /* @__PURE__ */ n("span", {
29
+ ref: c,
30
+ className: "click-effect-layer",
31
+ "aria-hidden": "true"
32
+ }) : null,
33
+ handlePointerDown: d,
34
+ triggerEffect: u
35
+ };
36
+ }
37
+ //#endregion
38
+ export { i as t };
39
+
40
+ //# sourceMappingURL=useInteractionEffect-B5_UpgTt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInteractionEffect-B5_UpgTt.js","names":[],"sources":["../src/utils/useInteractionEffect.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type {PointerEvent, ReactElement} from 'react'\n\nexport type MineralClickEffect = 'none' | 'ripple'\n\nexport interface UseInteractionEffectOptions {\n effect?: MineralClickEffect\n disabled?: boolean\n centered?: boolean\n color?: string\n}\n\nexport interface UseInteractionEffectResult<T extends HTMLElement> {\n effectClassName?: string\n effectLayer: ReactElement | null\n handlePointerDown: (event: PointerEvent<T>) => void\n triggerEffect: (target: T | null) => void\n}\n\ninterface RippleOptions {\n centered: boolean\n color?: string\n clientX?: number\n clientY?: number\n}\n\n// Render and position a ripple wave inside the dedicated effect layer.\nfunction appendRipple(layer: HTMLSpanElement, host: HTMLElement, options: RippleOptions) {\n const rect = host.getBoundingClientRect()\n const size = Math.max(rect.width, rect.height) * 1.75\n const radius = size / 2\n const wave = document.createElement('span')\n const x =\n options.centered || options.clientX === undefined\n ? rect.width / 2 - radius\n : options.clientX - rect.left - radius\n const y =\n options.centered || options.clientY === undefined\n ? rect.height / 2 - radius\n : options.clientY - rect.top - radius\n\n wave.className = 'click-effect-wave'\n wave.style.width = `${size}px`\n wave.style.height = `${size}px`\n wave.style.left = `${x}px`\n wave.style.top = `${y}px`\n\n if (options.color) {\n wave.style.setProperty('--click-effect-color', options.color)\n }\n\n layer.appendChild(wave)\n wave.addEventListener('animationend', () => wave.remove(), {once: true})\n}\n\n// Attach a lightweight click feedback effect without coupling it to a specific component.\nexport function useInteractionEffect<T extends HTMLElement = HTMLElement>({\n effect = 'ripple',\n disabled = false,\n centered = false,\n color,\n}: UseInteractionEffectOptions = {}): UseInteractionEffectResult<T> {\n const layerRef = useRef<HTMLSpanElement>(null)\n const enabled = effect === 'ripple' && !disabled\n\n // Trigger a centered ripple for keyboard-driven or programmatic actions.\n const triggerEffect = useCallback(\n (target: T | null) => {\n if (!enabled || !target || !layerRef.current) {\n return\n }\n\n appendRipple(layerRef.current, target, {centered: true, color})\n },\n [color, enabled]\n )\n\n // Start the ripple from the actual pointer position when possible.\n const handlePointerDown = useCallback(\n (event: PointerEvent<T>) => {\n if (!enabled || !layerRef.current) {\n return\n }\n\n if (event.pointerType === 'mouse' && event.button !== 0) {\n return\n }\n\n appendRipple(layerRef.current, event.currentTarget, {\n centered,\n color,\n clientX: event.clientX,\n clientY: event.clientY,\n })\n },\n [centered, color, enabled]\n )\n\n return {\n effectClassName: enabled ? 'click-effect-root' : undefined,\n effectLayer: enabled ? <span ref={layerRef} className=\"click-effect-layer\" aria-hidden=\"true\" /> : null,\n handlePointerDown,\n triggerEffect,\n }\n}\n"],"mappings":";;;AA2BA,SAAS,EAAa,GAAwB,GAAmB,GAAwB;CACrF,IAAM,IAAO,EAAK,uBAAuB,EACnC,IAAO,KAAK,IAAI,EAAK,OAAO,EAAK,OAAO,GAAG,MAC3C,IAAS,IAAO,GAChB,IAAO,SAAS,cAAc,OAAO,EACrC,IACF,EAAQ,YAAY,EAAQ,YAAY,KAAA,IAClC,EAAK,QAAQ,IAAI,IACjB,EAAQ,UAAU,EAAK,OAAO,GAClC,IACF,EAAQ,YAAY,EAAQ,YAAY,KAAA,IAClC,EAAK,SAAS,IAAI,IAClB,EAAQ,UAAU,EAAK,MAAM;AAavC,CAXA,EAAK,YAAY,qBACjB,EAAK,MAAM,QAAQ,GAAG,EAAK,KAC3B,EAAK,MAAM,SAAS,GAAG,EAAK,KAC5B,EAAK,MAAM,OAAO,GAAG,EAAE,KACvB,EAAK,MAAM,MAAM,GAAG,EAAE,KAElB,EAAQ,SACR,EAAK,MAAM,YAAY,wBAAwB,EAAQ,MAAM,EAGjE,EAAM,YAAY,EAAK,EACvB,EAAK,iBAAiB,sBAAsB,EAAK,QAAQ,EAAE,EAAC,MAAM,IAAK,CAAC;;AAI5E,SAAgB,EAA0D,EACtE,YAAS,UACT,cAAW,IACX,cAAW,IACX,aAC6B,EAAE,EAAiC;CAChE,IAAM,IAAW,EAAwB,KAAK,EACxC,IAAU,MAAW,YAAY,CAAC,GAGlC,IAAgB,GACjB,MAAqB;AACd,GAAC,KAAW,CAAC,KAAU,CAAC,EAAS,WAIrC,EAAa,EAAS,SAAS,GAAQ;GAAC,UAAU;GAAM;GAAM,CAAC;IAEnE,CAAC,GAAO,EAAQ,CACnB,EAGK,IAAoB,GACrB,MAA2B;AACpB,GAAC,KAAW,CAAC,EAAS,WAItB,EAAM,gBAAgB,WAAW,EAAM,WAAW,KAItD,EAAa,EAAS,SAAS,EAAM,eAAe;GAChD;GACA;GACA,SAAS,EAAM;GACf,SAAS,EAAM;GAClB,CAAC;IAEN;EAAC;EAAU;EAAO;EAAQ,CAC7B;AAED,QAAO;EACH,iBAAiB,IAAU,sBAAsB,KAAA;EACjD,aAAa,IAAU,kBAAC,QAAD;GAAM,KAAK;GAAU,WAAU;GAAqB,eAAY;GAAS,CAAA,GAAG;EACnG;EACA;EACH"}
@@ -0,0 +1,2 @@
1
+ let e=require(`react`),t=require(`react/jsx-runtime`);function n(e,t,n){let r=t.getBoundingClientRect(),i=Math.max(r.width,r.height)*1.75,a=i/2,o=document.createElement(`span`),s=n.centered||n.clientX===void 0?r.width/2-a:n.clientX-r.left-a,c=n.centered||n.clientY===void 0?r.height/2-a:n.clientY-r.top-a;o.className=`click-effect-wave`,o.style.width=`${i}px`,o.style.height=`${i}px`,o.style.left=`${s}px`,o.style.top=`${c}px`,n.color&&o.style.setProperty(`--click-effect-color`,n.color),e.appendChild(o),o.addEventListener(`animationend`,()=>o.remove(),{once:!0})}function r({effect:r=`ripple`,disabled:i=!1,centered:a=!1,color:o}={}){let s=(0,e.useRef)(null),c=r===`ripple`&&!i,l=(0,e.useCallback)(e=>{!c||!e||!s.current||n(s.current,e,{centered:!0,color:o})},[o,c]),u=(0,e.useCallback)(e=>{!c||!s.current||e.pointerType===`mouse`&&e.button!==0||n(s.current,e.currentTarget,{centered:a,color:o,clientX:e.clientX,clientY:e.clientY})},[a,o,c]);return{effectClassName:c?`click-effect-root`:void 0,effectLayer:c?(0,t.jsx)(`span`,{ref:s,className:`click-effect-layer`,"aria-hidden":`true`}):null,handlePointerDown:u,triggerEffect:l}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
2
+ //# sourceMappingURL=useInteractionEffect-BaJeiUns.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInteractionEffect-BaJeiUns.cjs","names":[],"sources":["../src/utils/useInteractionEffect.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type {PointerEvent, ReactElement} from 'react'\n\nexport type MineralClickEffect = 'none' | 'ripple'\n\nexport interface UseInteractionEffectOptions {\n effect?: MineralClickEffect\n disabled?: boolean\n centered?: boolean\n color?: string\n}\n\nexport interface UseInteractionEffectResult<T extends HTMLElement> {\n effectClassName?: string\n effectLayer: ReactElement | null\n handlePointerDown: (event: PointerEvent<T>) => void\n triggerEffect: (target: T | null) => void\n}\n\ninterface RippleOptions {\n centered: boolean\n color?: string\n clientX?: number\n clientY?: number\n}\n\n// Render and position a ripple wave inside the dedicated effect layer.\nfunction appendRipple(layer: HTMLSpanElement, host: HTMLElement, options: RippleOptions) {\n const rect = host.getBoundingClientRect()\n const size = Math.max(rect.width, rect.height) * 1.75\n const radius = size / 2\n const wave = document.createElement('span')\n const x =\n options.centered || options.clientX === undefined\n ? rect.width / 2 - radius\n : options.clientX - rect.left - radius\n const y =\n options.centered || options.clientY === undefined\n ? rect.height / 2 - radius\n : options.clientY - rect.top - radius\n\n wave.className = 'click-effect-wave'\n wave.style.width = `${size}px`\n wave.style.height = `${size}px`\n wave.style.left = `${x}px`\n wave.style.top = `${y}px`\n\n if (options.color) {\n wave.style.setProperty('--click-effect-color', options.color)\n }\n\n layer.appendChild(wave)\n wave.addEventListener('animationend', () => wave.remove(), {once: true})\n}\n\n// Attach a lightweight click feedback effect without coupling it to a specific component.\nexport function useInteractionEffect<T extends HTMLElement = HTMLElement>({\n effect = 'ripple',\n disabled = false,\n centered = false,\n color,\n}: UseInteractionEffectOptions = {}): UseInteractionEffectResult<T> {\n const layerRef = useRef<HTMLSpanElement>(null)\n const enabled = effect === 'ripple' && !disabled\n\n // Trigger a centered ripple for keyboard-driven or programmatic actions.\n const triggerEffect = useCallback(\n (target: T | null) => {\n if (!enabled || !target || !layerRef.current) {\n return\n }\n\n appendRipple(layerRef.current, target, {centered: true, color})\n },\n [color, enabled]\n )\n\n // Start the ripple from the actual pointer position when possible.\n const handlePointerDown = useCallback(\n (event: PointerEvent<T>) => {\n if (!enabled || !layerRef.current) {\n return\n }\n\n if (event.pointerType === 'mouse' && event.button !== 0) {\n return\n }\n\n appendRipple(layerRef.current, event.currentTarget, {\n centered,\n color,\n clientX: event.clientX,\n clientY: event.clientY,\n })\n },\n [centered, color, enabled]\n )\n\n return {\n effectClassName: enabled ? 'click-effect-root' : undefined,\n effectLayer: enabled ? <span ref={layerRef} className=\"click-effect-layer\" aria-hidden=\"true\" /> : null,\n handlePointerDown,\n triggerEffect,\n }\n}\n"],"mappings":"sDA2BA,SAAS,EAAa,EAAwB,EAAmB,EAAwB,CACrF,IAAM,EAAO,EAAK,uBAAuB,CACnC,EAAO,KAAK,IAAI,EAAK,MAAO,EAAK,OAAO,CAAG,KAC3C,EAAS,EAAO,EAChB,EAAO,SAAS,cAAc,OAAO,CACrC,EACF,EAAQ,UAAY,EAAQ,UAAY,IAAA,GAClC,EAAK,MAAQ,EAAI,EACjB,EAAQ,QAAU,EAAK,KAAO,EAClC,EACF,EAAQ,UAAY,EAAQ,UAAY,IAAA,GAClC,EAAK,OAAS,EAAI,EAClB,EAAQ,QAAU,EAAK,IAAM,EAEvC,EAAK,UAAY,oBACjB,EAAK,MAAM,MAAQ,GAAG,EAAK,IAC3B,EAAK,MAAM,OAAS,GAAG,EAAK,IAC5B,EAAK,MAAM,KAAO,GAAG,EAAE,IACvB,EAAK,MAAM,IAAM,GAAG,EAAE,IAElB,EAAQ,OACR,EAAK,MAAM,YAAY,uBAAwB,EAAQ,MAAM,CAGjE,EAAM,YAAY,EAAK,CACvB,EAAK,iBAAiB,mBAAsB,EAAK,QAAQ,CAAE,CAAC,KAAM,GAAK,CAAC,CAI5E,SAAgB,EAA0D,CACtE,SAAS,SACT,WAAW,GACX,WAAW,GACX,SAC6B,EAAE,CAAiC,CAChE,IAAM,GAAA,EAAA,EAAA,QAAmC,KAAK,CACxC,EAAU,IAAW,UAAY,CAAC,EAGlC,GAAA,EAAA,EAAA,aACD,GAAqB,CACd,CAAC,GAAW,CAAC,GAAU,CAAC,EAAS,SAIrC,EAAa,EAAS,QAAS,EAAQ,CAAC,SAAU,GAAM,QAAM,CAAC,EAEnE,CAAC,EAAO,EAAQ,CACnB,CAGK,GAAA,EAAA,EAAA,aACD,GAA2B,CACpB,CAAC,GAAW,CAAC,EAAS,SAItB,EAAM,cAAgB,SAAW,EAAM,SAAW,GAItD,EAAa,EAAS,QAAS,EAAM,cAAe,CAChD,WACA,QACA,QAAS,EAAM,QACf,QAAS,EAAM,QAClB,CAAC,EAEN,CAAC,EAAU,EAAO,EAAQ,CAC7B,CAED,MAAO,CACH,gBAAiB,EAAU,oBAAsB,IAAA,GACjD,YAAa,GAAU,EAAA,EAAA,KAAC,OAAD,CAAM,IAAK,EAAU,UAAU,qBAAqB,cAAY,OAAS,CAAA,CAAG,KACnG,oBACA,gBACH"}
@@ -0,0 +1,43 @@
1
+ import { useCallback as e, useState as t } from "react";
2
+ //#region src/utils/useKeyboardNav.ts
3
+ function n({ itemCount: n, onSelect: r, onClose: i, isOpen: a, loop: o = !0 }) {
4
+ let [s, c] = t(-1);
5
+ return {
6
+ activeIndex: s,
7
+ setActiveIndex: c,
8
+ resetIndex: e(() => c(-1), []),
9
+ onKeyDown: e((e) => {
10
+ if (!(!a || n === 0)) switch (e.key) {
11
+ case "ArrowDown":
12
+ e.preventDefault(), c((e) => e >= n - 1 ? o ? 0 : e : e + 1);
13
+ break;
14
+ case "ArrowUp":
15
+ e.preventDefault(), c((e) => e <= 0 ? o ? n - 1 : 0 : e - 1);
16
+ break;
17
+ case "Enter":
18
+ e.preventDefault(), s >= 0 && s < n && r(s);
19
+ break;
20
+ case "Escape":
21
+ e.preventDefault(), i();
22
+ break;
23
+ case "Home":
24
+ e.preventDefault(), c(0);
25
+ break;
26
+ case "End":
27
+ e.preventDefault(), c(n - 1);
28
+ break;
29
+ }
30
+ }, [
31
+ a,
32
+ n,
33
+ s,
34
+ r,
35
+ i,
36
+ o
37
+ ])
38
+ };
39
+ }
40
+ //#endregion
41
+ export { n as t };
42
+
43
+ //# sourceMappingURL=useKeyboardNav-CmUKtJag.js.map