@arkyn/components 3.0.1-beta.201 → 3.0.1-beta.205

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 (458) hide show
  1. package/LICENSE.txt +184 -1
  2. package/README.md +12 -1
  3. package/dist/components/alert/alertContainer/index.d.ts.map +1 -1
  4. package/dist/components/cardTab/cardTabContext.d.ts.map +1 -1
  5. package/dist/components/drawer/drawerContext.d.ts.map +1 -1
  6. package/dist/components/modal/modalContext.d.ts.map +1 -1
  7. package/dist/components/tab/tabContext.d.ts.map +1 -1
  8. package/dist/index.js +85 -62
  9. package/dist/index.js.map +1 -0
  10. package/dist/modules/components/alert/alertContainer/index.js +17 -15
  11. package/dist/modules/components/alert/alertContainer/index.js.map +1 -0
  12. package/dist/modules/components/alert/alertContainer/styles.css +3 -0
  13. package/dist/modules/components/alert/alertContent/index.js +2 -0
  14. package/dist/modules/components/alert/alertContent/index.js.map +1 -0
  15. package/dist/modules/components/alert/alertContent/styles.css +1 -0
  16. package/dist/modules/components/alert/alertDescription/index.js +2 -0
  17. package/dist/modules/components/alert/alertDescription/index.js.map +1 -0
  18. package/dist/modules/components/alert/alertDescription/styles.css +1 -0
  19. package/dist/modules/components/alert/alertIcon/index.js +2 -0
  20. package/dist/modules/components/alert/alertIcon/index.js.map +1 -0
  21. package/dist/modules/components/alert/alertIcon/styles.css +7 -0
  22. package/dist/modules/components/alert/alertTitle/index.js +2 -0
  23. package/dist/modules/components/alert/alertTitle/index.js.map +1 -0
  24. package/dist/modules/components/alert/alertTitle/styles.css +1 -0
  25. package/dist/modules/components/audioPlayer/index.js +2 -0
  26. package/dist/modules/components/audioPlayer/index.js.map +1 -0
  27. package/dist/modules/components/audioPlayer/styles.css +3 -0
  28. package/dist/modules/components/audioUpload/hasFileContent/index.js +2 -0
  29. package/dist/modules/components/audioUpload/hasFileContent/index.js.map +1 -0
  30. package/dist/modules/components/audioUpload/hasFileContent/styles.css +1 -0
  31. package/dist/modules/components/audioUpload/index.js +2 -0
  32. package/dist/modules/components/audioUpload/index.js.map +1 -0
  33. package/dist/modules/components/audioUpload/noFileContent/index.js +2 -0
  34. package/dist/modules/components/audioUpload/noFileContent/index.js.map +1 -0
  35. package/dist/modules/components/audioUpload/noFileContent/styles.css +1 -0
  36. package/dist/modules/components/audioUpload/styles.css +25 -0
  37. package/dist/modules/components/badge/index.js +2 -0
  38. package/dist/modules/components/badge/index.js.map +1 -0
  39. package/dist/modules/components/badge/styles.css +1 -0
  40. package/dist/modules/components/button/index.js +2 -0
  41. package/dist/modules/components/button/index.js.map +1 -0
  42. package/dist/modules/components/button/styles.css +1 -0
  43. package/dist/modules/components/calendar/_calendarProvider.js +2 -0
  44. package/dist/modules/components/calendar/_calendarProvider.js.map +1 -0
  45. package/dist/modules/components/calendar/_viewService.js +2 -0
  46. package/dist/modules/components/calendar/_viewService.js.map +1 -0
  47. package/dist/modules/components/calendar/calendarContainer/index.js +2 -0
  48. package/dist/modules/components/calendar/calendarContainer/index.js.map +1 -0
  49. package/dist/modules/components/calendar/calendarContainer/styles.css +1 -0
  50. package/dist/modules/components/calendar/calendarHeader/index.js +2 -0
  51. package/dist/modules/components/calendar/calendarHeader/index.js.map +1 -0
  52. package/dist/modules/components/calendar/calendarHeader/styles.css +1 -0
  53. package/dist/modules/components/calendar/calendarTableBody/index.js +2 -0
  54. package/dist/modules/components/calendar/calendarTableBody/index.js.map +1 -0
  55. package/dist/modules/components/calendar/calendarTableBody/styles.css +1 -0
  56. package/dist/modules/components/calendar/calendarTableContainer/index.js +2 -0
  57. package/dist/modules/components/calendar/calendarTableContainer/index.js.map +1 -0
  58. package/dist/modules/components/calendar/calendarTableContainer/styles.css +1 -0
  59. package/dist/modules/components/calendar/calendarTableHeader/index.js +2 -0
  60. package/dist/modules/components/calendar/calendarTableHeader/index.js.map +1 -0
  61. package/dist/modules/components/calendar/calendarTableHeader/styles.css +1 -0
  62. package/dist/modules/components/calendar/calendarTableTd/index.js +2 -0
  63. package/dist/modules/components/calendar/calendarTableTd/index.js.map +1 -0
  64. package/dist/modules/components/calendar/calendarTableTd/styles.css +1 -0
  65. package/dist/modules/components/calendar/index.js +2 -0
  66. package/dist/modules/components/calendar/index.js.map +1 -0
  67. package/dist/modules/components/calendar/styles.css +33 -0
  68. package/dist/modules/components/cardTab/cardTabButton/index.js +2 -0
  69. package/dist/modules/components/cardTab/cardTabButton/index.js.map +1 -0
  70. package/dist/modules/components/cardTab/cardTabButton/styles.css +1 -0
  71. package/dist/modules/components/cardTab/cardTabContainer/index.js +2 -0
  72. package/dist/modules/components/cardTab/cardTabContainer/index.js.map +1 -0
  73. package/dist/modules/components/cardTab/cardTabContainer/styles.css +1 -0
  74. package/dist/modules/components/cardTab/cardTabContext.js +20 -9
  75. package/dist/modules/components/cardTab/cardTabContext.js.map +1 -0
  76. package/dist/modules/components/checkbox/index.js +2 -0
  77. package/dist/modules/components/checkbox/index.js.map +1 -0
  78. package/dist/modules/components/checkbox/styles.css +7 -0
  79. package/dist/modules/components/clientOnly.js +2 -0
  80. package/dist/modules/components/clientOnly.js.map +1 -0
  81. package/dist/modules/components/currencyInput/index.js +2 -0
  82. package/dist/modules/components/currencyInput/index.js.map +1 -0
  83. package/dist/modules/components/currencyInput/style.css +1 -0
  84. package/dist/modules/components/currencyInput/styles.css +7 -0
  85. package/dist/modules/components/divider/index.js +2 -0
  86. package/dist/modules/components/divider/index.js.map +1 -0
  87. package/dist/modules/components/divider/styles.css +1 -0
  88. package/dist/modules/components/drawer/drawerContainer/index.js +2 -0
  89. package/dist/modules/components/drawer/drawerContainer/index.js.map +1 -0
  90. package/dist/modules/components/drawer/drawerContainer/styles.css +1 -0
  91. package/dist/modules/components/drawer/drawerContext.js +12 -9
  92. package/dist/modules/components/drawer/drawerContext.js.map +1 -0
  93. package/dist/modules/components/drawer/drawerHeader/index.js +2 -0
  94. package/dist/modules/components/drawer/drawerHeader/index.js.map +1 -0
  95. package/dist/modules/components/drawer/drawerHeader/styles.css +1 -0
  96. package/dist/modules/components/facebookPixel/facebookPixel.client.js +2 -0
  97. package/dist/modules/components/facebookPixel/facebookPixel.client.js.map +1 -0
  98. package/dist/modules/components/facebookPixel/index.js +2 -0
  99. package/dist/modules/components/facebookPixel/index.js.map +1 -0
  100. package/dist/modules/components/facebookPixel/pixel.js +2 -0
  101. package/dist/modules/components/facebookPixel/pixel.js.map +1 -0
  102. package/dist/modules/components/fieldError/index.js +2 -0
  103. package/dist/modules/components/fieldError/index.js.map +1 -0
  104. package/dist/modules/components/fieldError/styles.css +1 -0
  105. package/dist/modules/components/fieldLabel/index.js +2 -0
  106. package/dist/modules/components/fieldLabel/index.js.map +1 -0
  107. package/dist/modules/components/fieldLabel/styles.css +1 -0
  108. package/dist/modules/components/fieldWrapper/index.js +2 -0
  109. package/dist/modules/components/fieldWrapper/index.js.map +1 -0
  110. package/dist/modules/components/fieldWrapper/styles.css +1 -0
  111. package/dist/modules/components/fileUpload/hasFileContent/index.js +2 -0
  112. package/dist/modules/components/fileUpload/hasFileContent/index.js.map +1 -0
  113. package/dist/modules/components/fileUpload/hasFileContent/styles.css +1 -0
  114. package/dist/modules/components/fileUpload/index.js +2 -0
  115. package/dist/modules/components/fileUpload/index.js.map +1 -0
  116. package/dist/modules/components/fileUpload/noFileContent/index.js +2 -0
  117. package/dist/modules/components/fileUpload/noFileContent/index.js.map +1 -0
  118. package/dist/modules/components/fileUpload/noFileContent/styles.css +1 -0
  119. package/dist/modules/components/fileUpload/styles.css +19 -0
  120. package/dist/modules/components/fullCalendar/_fullCalendarProvider.js +2 -0
  121. package/dist/modules/components/fullCalendar/_fullCalendarProvider.js.map +1 -0
  122. package/dist/modules/components/fullCalendar/_viewService.js +2 -0
  123. package/dist/modules/components/fullCalendar/_viewService.js.map +1 -0
  124. package/dist/modules/components/fullCalendar/dayCalendar/dayCalendarContainer/index.js +2 -0
  125. package/dist/modules/components/fullCalendar/dayCalendar/dayCalendarContainer/index.js.map +1 -0
  126. package/dist/modules/components/fullCalendar/dayCalendar/dayCalendarContainer/styles.css +1 -0
  127. package/dist/modules/components/fullCalendar/dayCalendar/dayCalendarEvent/index.js +2 -0
  128. package/dist/modules/components/fullCalendar/dayCalendar/dayCalendarEvent/index.js.map +1 -0
  129. package/dist/modules/components/fullCalendar/dayCalendar/dayCalendarEvent/styles.css +1 -0
  130. package/dist/modules/components/fullCalendar/dayCalendar/dayCalendarRow/index.js +2 -0
  131. package/dist/modules/components/fullCalendar/dayCalendar/dayCalendarRow/index.js.map +1 -0
  132. package/dist/modules/components/fullCalendar/dayCalendar/dayCalendarRow/styles.css +1 -0
  133. package/dist/modules/components/fullCalendar/dayCalendar/index.js +2 -0
  134. package/dist/modules/components/fullCalendar/dayCalendar/index.js.map +1 -0
  135. package/dist/modules/components/fullCalendar/fullCalendarContainer/index.js +2 -0
  136. package/dist/modules/components/fullCalendar/fullCalendarContainer/index.js.map +1 -0
  137. package/dist/modules/components/fullCalendar/fullCalendarContainer/styles.css +1 -0
  138. package/dist/modules/components/fullCalendar/fullCalendarHeader/index.js +2 -0
  139. package/dist/modules/components/fullCalendar/fullCalendarHeader/index.js.map +1 -0
  140. package/dist/modules/components/fullCalendar/fullCalendarHeader/styles.css +1 -0
  141. package/dist/modules/components/fullCalendar/index.js +2 -0
  142. package/dist/modules/components/fullCalendar/index.js.map +1 -0
  143. package/dist/modules/components/fullCalendar/monthlyCalendar/index.js +2 -0
  144. package/dist/modules/components/fullCalendar/monthlyCalendar/index.js.map +1 -0
  145. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarEvent/index.js +2 -0
  146. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarEvent/index.js.map +1 -0
  147. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarEvent/styles.css +1 -0
  148. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableBody/index.js +2 -0
  149. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableBody/index.js.map +1 -0
  150. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableBody/styles.css +1 -0
  151. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableContainer/index.js +2 -0
  152. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableContainer/index.js.map +1 -0
  153. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableContainer/styles.css +1 -0
  154. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableHeader/index.js +2 -0
  155. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableHeader/index.js.map +1 -0
  156. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableHeader/styles.css +1 -0
  157. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableTd/index.js +2 -0
  158. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableTd/index.js.map +1 -0
  159. package/dist/modules/components/fullCalendar/monthlyCalendar/monthlyCalendarTableTd/styles.css +1 -0
  160. package/dist/modules/components/fullCalendar/styles.css +35 -0
  161. package/dist/modules/components/fullCalendar/weekCalendar/index.js +2 -0
  162. package/dist/modules/components/fullCalendar/weekCalendar/index.js.map +1 -0
  163. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarEvent/index.js +2 -0
  164. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarEvent/index.js.map +1 -0
  165. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarEvent/styles.css +1 -0
  166. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableBody/index.js +2 -0
  167. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableBody/index.js.map +1 -0
  168. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableBody/styles.css +1 -0
  169. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableContainer/index.js +2 -0
  170. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableContainer/index.js.map +1 -0
  171. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableContainer/styles.css +1 -0
  172. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableHeader/index.js +2 -0
  173. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableHeader/index.js.map +1 -0
  174. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableHeader/styles.css +1 -0
  175. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableTd/index.js +2 -0
  176. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableTd/index.js.map +1 -0
  177. package/dist/modules/components/fullCalendar/weekCalendar/weekCalendarTableTd/styles.css +1 -0
  178. package/dist/modules/components/googleAnalytics/googleAnalytics.client.js +2 -0
  179. package/dist/modules/components/googleAnalytics/googleAnalytics.client.js.map +1 -0
  180. package/dist/modules/components/googleAnalytics/googleAnalytics.js +2 -0
  181. package/dist/modules/components/googleAnalytics/googleAnalytics.js.map +1 -0
  182. package/dist/modules/components/googleAnalytics/index.js +2 -0
  183. package/dist/modules/components/googleAnalytics/index.js.map +1 -0
  184. package/dist/modules/components/googleAnalytics/snippets/generateGAElements.js +2 -0
  185. package/dist/modules/components/googleAnalytics/snippets/generateGAElements.js.map +1 -0
  186. package/dist/modules/components/googleTagManager/googleTagManager.client.js +2 -0
  187. package/dist/modules/components/googleTagManager/googleTagManager.client.js.map +1 -0
  188. package/dist/modules/components/googleTagManager/googleTagManager.js +2 -0
  189. package/dist/modules/components/googleTagManager/googleTagManager.js.map +1 -0
  190. package/dist/modules/components/googleTagManager/index.js +2 -0
  191. package/dist/modules/components/googleTagManager/index.js.map +1 -0
  192. package/dist/modules/components/googleTagManager/snippets/appendToDataLayer.js +2 -0
  193. package/dist/modules/components/googleTagManager/snippets/appendToDataLayer.js.map +1 -0
  194. package/dist/modules/components/googleTagManager/snippets/generateGTMElements.js +2 -0
  195. package/dist/modules/components/googleTagManager/snippets/generateGTMElements.js.map +1 -0
  196. package/dist/modules/components/iconButton/index.js +2 -0
  197. package/dist/modules/components/iconButton/index.js.map +1 -0
  198. package/dist/modules/components/iconButton/styles.css +1 -0
  199. package/dist/modules/components/imageUpload/hasFileContent/index.js +2 -0
  200. package/dist/modules/components/imageUpload/hasFileContent/index.js.map +1 -0
  201. package/dist/modules/components/imageUpload/hasFileContent/styles.css +1 -0
  202. package/dist/modules/components/imageUpload/index.js +2 -0
  203. package/dist/modules/components/imageUpload/index.js.map +1 -0
  204. package/dist/modules/components/imageUpload/noFileContent/index.js +2 -0
  205. package/dist/modules/components/imageUpload/noFileContent/index.js.map +1 -0
  206. package/dist/modules/components/imageUpload/noFileContent/styles.css +1 -0
  207. package/dist/modules/components/imageUpload/styles.css +17 -0
  208. package/dist/modules/components/input/index.js +2 -0
  209. package/dist/modules/components/input/index.js.map +1 -0
  210. package/dist/modules/components/input/style.css +1 -0
  211. package/dist/modules/components/input/styles.css +7 -0
  212. package/dist/modules/components/mapView/index.js +2 -0
  213. package/dist/modules/components/mapView/index.js.map +1 -0
  214. package/dist/modules/components/mapView/mapView.client.js +2 -0
  215. package/dist/modules/components/mapView/mapView.client.js.map +1 -0
  216. package/dist/modules/components/mapView/mapbox.css +1 -0
  217. package/dist/modules/components/mapView/styles.css +1 -0
  218. package/dist/modules/components/maskedInput/index.js +2 -0
  219. package/dist/modules/components/maskedInput/index.js.map +1 -0
  220. package/dist/modules/components/maskedInput/style.css +1 -0
  221. package/dist/modules/components/maskedInput/styles.css +7 -0
  222. package/dist/modules/components/modal/modalContainer/index.js +2 -0
  223. package/dist/modules/components/modal/modalContainer/index.js.map +1 -0
  224. package/dist/modules/components/modal/modalContainer/styles.css +1 -0
  225. package/dist/modules/components/modal/modalContext.js +12 -9
  226. package/dist/modules/components/modal/modalContext.js.map +1 -0
  227. package/dist/modules/components/modal/modalFooter/index.js +2 -0
  228. package/dist/modules/components/modal/modalFooter/index.js.map +1 -0
  229. package/dist/modules/components/modal/modalFooter/styles.css +1 -0
  230. package/dist/modules/components/modal/modalHeader/index.js +2 -0
  231. package/dist/modules/components/modal/modalHeader/index.js.map +1 -0
  232. package/dist/modules/components/modal/modalHeader/styles.css +1 -0
  233. package/dist/modules/components/multiSelect/index.js +2 -0
  234. package/dist/modules/components/multiSelect/index.js.map +1 -0
  235. package/dist/modules/components/multiSelect/multiSelectChevron/index.js +2 -0
  236. package/dist/modules/components/multiSelect/multiSelectChevron/index.js.map +1 -0
  237. package/dist/modules/components/multiSelect/multiSelectChevron/styles.css +1 -0
  238. package/dist/modules/components/multiSelect/multiSelectContainer/index.js +2 -0
  239. package/dist/modules/components/multiSelect/multiSelectContainer/index.js.map +1 -0
  240. package/dist/modules/components/multiSelect/multiSelectContainer/styles.css +1 -0
  241. package/dist/modules/components/multiSelect/multiSelectContent/index.js +2 -0
  242. package/dist/modules/components/multiSelect/multiSelectContent/index.js.map +1 -0
  243. package/dist/modules/components/multiSelect/multiSelectContent/styles.css +1 -0
  244. package/dist/modules/components/multiSelect/multiSelectMark/index.js +2 -0
  245. package/dist/modules/components/multiSelect/multiSelectMark/index.js.map +1 -0
  246. package/dist/modules/components/multiSelect/multiSelectMark/styles.css +1 -0
  247. package/dist/modules/components/multiSelect/multiSelectOption/index.js +2 -0
  248. package/dist/modules/components/multiSelect/multiSelectOption/index.js.map +1 -0
  249. package/dist/modules/components/multiSelect/multiSelectOption/styles.css +1 -0
  250. package/dist/modules/components/multiSelect/multiSelectOptionsContainer/index.js +2 -0
  251. package/dist/modules/components/multiSelect/multiSelectOptionsContainer/index.js.map +1 -0
  252. package/dist/modules/components/multiSelect/multiSelectOptionsContainer/styles.css +1 -0
  253. package/dist/modules/components/multiSelect/multiSelectOverlay/index.js +2 -0
  254. package/dist/modules/components/multiSelect/multiSelectOverlay/index.js.map +1 -0
  255. package/dist/modules/components/multiSelect/multiSelectOverlay/styles.css +1 -0
  256. package/dist/modules/components/multiSelect/multiSelectSpinner/index.js +2 -0
  257. package/dist/modules/components/multiSelect/multiSelectSpinner/index.js.map +1 -0
  258. package/dist/modules/components/multiSelect/multiSelectSpinner/styles.css +1 -0
  259. package/dist/modules/components/multiSelect/styles.css +31 -0
  260. package/dist/modules/components/pagination/chevronButton/index.js +2 -0
  261. package/dist/modules/components/pagination/chevronButton/index.js.map +1 -0
  262. package/dist/modules/components/pagination/chevronButton/styles.css +1 -0
  263. package/dist/modules/components/pagination/currentButton/index.js +2 -0
  264. package/dist/modules/components/pagination/currentButton/index.js.map +1 -0
  265. package/dist/modules/components/pagination/currentButton/styles.css +1 -0
  266. package/dist/modules/components/pagination/index.js +2 -0
  267. package/dist/modules/components/pagination/index.js.map +1 -0
  268. package/dist/modules/components/pagination/pageButton/index.js +2 -0
  269. package/dist/modules/components/pagination/pageButton/index.js.map +1 -0
  270. package/dist/modules/components/pagination/pageButton/styles.css +1 -0
  271. package/dist/modules/components/pagination/paginationService.js +2 -0
  272. package/dist/modules/components/pagination/paginationService.js.map +1 -0
  273. package/dist/modules/components/pagination/spread/index.js +2 -0
  274. package/dist/modules/components/pagination/spread/index.js.map +1 -0
  275. package/dist/modules/components/pagination/spread/styles.css +1 -0
  276. package/dist/modules/components/pagination/styles.css +9 -0
  277. package/dist/modules/components/phoneInput/index.js +2 -0
  278. package/dist/modules/components/phoneInput/index.js.map +1 -0
  279. package/dist/modules/components/phoneInput/phoneInputContainer/index.js +2 -0
  280. package/dist/modules/components/phoneInput/phoneInputContainer/index.js.map +1 -0
  281. package/dist/modules/components/phoneInput/phoneInputContainer/styles.css +1 -0
  282. package/dist/modules/components/phoneInput/phoneInputCountriesOverlay/index.js +2 -0
  283. package/dist/modules/components/phoneInput/phoneInputCountriesOverlay/index.js.map +1 -0
  284. package/dist/modules/components/phoneInput/phoneInputCountriesOverlay/styles.css +1 -0
  285. package/dist/modules/components/phoneInput/phoneInputCountryOption/index.js +2 -0
  286. package/dist/modules/components/phoneInput/phoneInputCountryOption/index.js.map +1 -0
  287. package/dist/modules/components/phoneInput/phoneInputCountryOption/styles.css +1 -0
  288. package/dist/modules/components/phoneInput/phoneInputCountryOptionsContainer/index.js +2 -0
  289. package/dist/modules/components/phoneInput/phoneInputCountryOptionsContainer/index.js.map +1 -0
  290. package/dist/modules/components/phoneInput/phoneInputCountryOptionsContainer/styles.css +1 -0
  291. package/dist/modules/components/phoneInput/phoneInputCountrySelector/index.js +2 -0
  292. package/dist/modules/components/phoneInput/phoneInputCountrySelector/index.js.map +1 -0
  293. package/dist/modules/components/phoneInput/phoneInputCountrySelector/styles.css +1 -0
  294. package/dist/modules/components/phoneInput/phoneInputMask/index.js +2 -0
  295. package/dist/modules/components/phoneInput/phoneInputMask/index.js.map +1 -0
  296. package/dist/modules/components/phoneInput/phoneInputMask/style.css +1 -0
  297. package/dist/modules/components/phoneInput/styles.css +19 -0
  298. package/dist/modules/components/popover/index.js +2 -0
  299. package/dist/modules/components/popover/index.js.map +1 -0
  300. package/dist/modules/components/popover/styles.css +1 -0
  301. package/dist/modules/components/radio/radioBox/index.js +2 -0
  302. package/dist/modules/components/radio/radioBox/index.js.map +1 -0
  303. package/dist/modules/components/radio/radioBox/styles.css +1 -0
  304. package/dist/modules/components/radio/radioContext.js +2 -0
  305. package/dist/modules/components/radio/radioContext.js.map +1 -0
  306. package/dist/modules/components/radio/radioGroup/index.js +2 -0
  307. package/dist/modules/components/radio/radioGroup/index.js.map +1 -0
  308. package/dist/modules/components/radio/radioGroup/styles.css +7 -0
  309. package/dist/modules/components/richText/blockButton/index.js +2 -0
  310. package/dist/modules/components/richText/blockButton/index.js.map +1 -0
  311. package/dist/modules/components/richText/blockButton/styles.css +1 -0
  312. package/dist/modules/components/richText/element/index.js +2 -0
  313. package/dist/modules/components/richText/element/index.js.map +1 -0
  314. package/dist/modules/components/richText/element/styles.css +1 -0
  315. package/dist/modules/components/richText/index.js +2 -0
  316. package/dist/modules/components/richText/index.js.map +1 -0
  317. package/dist/modules/components/richText/insertImage/index.js +2 -0
  318. package/dist/modules/components/richText/insertImage/index.js.map +1 -0
  319. package/dist/modules/components/richText/insertImage/styles.css +1 -0
  320. package/dist/modules/components/richText/insertVideo/index.js +2 -0
  321. package/dist/modules/components/richText/insertVideo/index.js.map +1 -0
  322. package/dist/modules/components/richText/insertVideo/styles.css +1 -0
  323. package/dist/modules/components/richText/leaf/index.js +2 -0
  324. package/dist/modules/components/richText/leaf/index.js.map +1 -0
  325. package/dist/modules/components/richText/markButton/index.js +2 -0
  326. package/dist/modules/components/richText/markButton/index.js.map +1 -0
  327. package/dist/modules/components/richText/markButton/styles.css +1 -0
  328. package/dist/modules/components/richText/styles.css +67 -0
  329. package/dist/modules/components/richText/toolbar/index.js +2 -0
  330. package/dist/modules/components/richText/toolbar/index.js.map +1 -0
  331. package/dist/modules/components/richText/toolbar/styles.css +1 -0
  332. package/dist/modules/components/searchPlaces.js +2 -0
  333. package/dist/modules/components/searchPlaces.js.map +1 -0
  334. package/dist/modules/components/select/index.js +2 -0
  335. package/dist/modules/components/select/index.js.map +1 -0
  336. package/dist/modules/components/select/selectChevron/index.js +2 -0
  337. package/dist/modules/components/select/selectChevron/index.js.map +1 -0
  338. package/dist/modules/components/select/selectChevron/styles.css +1 -0
  339. package/dist/modules/components/select/selectContainer/index.js +2 -0
  340. package/dist/modules/components/select/selectContainer/index.js.map +1 -0
  341. package/dist/modules/components/select/selectContainer/styles.css +1 -0
  342. package/dist/modules/components/select/selectContent/index.js +2 -0
  343. package/dist/modules/components/select/selectContent/index.js.map +1 -0
  344. package/dist/modules/components/select/selectContent/styles.css +1 -0
  345. package/dist/modules/components/select/selectOption/index.js +2 -0
  346. package/dist/modules/components/select/selectOption/index.js.map +1 -0
  347. package/dist/modules/components/select/selectOption/styles.css +1 -0
  348. package/dist/modules/components/select/selectOptionsContainer/index.js +2 -0
  349. package/dist/modules/components/select/selectOptionsContainer/index.js.map +1 -0
  350. package/dist/modules/components/select/selectOptionsContainer/styles.css +1 -0
  351. package/dist/modules/components/select/selectOverlay/index.js +2 -0
  352. package/dist/modules/components/select/selectOverlay/index.js.map +1 -0
  353. package/dist/modules/components/select/selectOverlay/styles.css +1 -0
  354. package/dist/modules/components/select/selectSpinner/index.js +2 -0
  355. package/dist/modules/components/select/selectSpinner/index.js.map +1 -0
  356. package/dist/modules/components/select/selectSpinner/styles.css +1 -0
  357. package/dist/modules/components/select/styles.css +29 -0
  358. package/dist/modules/components/slider/index.js +2 -0
  359. package/dist/modules/components/slider/index.js.map +1 -0
  360. package/dist/modules/components/slider/styles.css +1 -0
  361. package/dist/modules/components/switch/index.js +2 -0
  362. package/dist/modules/components/switch/index.js.map +1 -0
  363. package/dist/modules/components/switch/styles.css +7 -0
  364. package/dist/modules/components/tab/tabButton/index.js +2 -0
  365. package/dist/modules/components/tab/tabButton/index.js.map +1 -0
  366. package/dist/modules/components/tab/tabButton/styles.css +1 -0
  367. package/dist/modules/components/tab/tabContainer/index.js +2 -0
  368. package/dist/modules/components/tab/tabContainer/index.js.map +1 -0
  369. package/dist/modules/components/tab/tabContainer/styles.css +1 -0
  370. package/dist/modules/components/tab/tabContext.js +20 -9
  371. package/dist/modules/components/tab/tabContext.js.map +1 -0
  372. package/dist/modules/components/table/tableBody/index.js +2 -0
  373. package/dist/modules/components/table/tableBody/index.js.map +1 -0
  374. package/dist/modules/components/table/tableBody/styles.css +1 -0
  375. package/dist/modules/components/table/tableCaption/index.js +2 -0
  376. package/dist/modules/components/table/tableCaption/index.js.map +1 -0
  377. package/dist/modules/components/table/tableCaption/styles.css +1 -0
  378. package/dist/modules/components/table/tableContainer/index.js +2 -0
  379. package/dist/modules/components/table/tableContainer/index.js.map +1 -0
  380. package/dist/modules/components/table/tableContainer/styles.css +1 -0
  381. package/dist/modules/components/table/tableFooter/index.js +2 -0
  382. package/dist/modules/components/table/tableFooter/index.js.map +1 -0
  383. package/dist/modules/components/table/tableFooter/styles.css +1 -0
  384. package/dist/modules/components/table/tableHeader/index.js +2 -0
  385. package/dist/modules/components/table/tableHeader/index.js.map +1 -0
  386. package/dist/modules/components/table/tableHeader/styles.css +1 -0
  387. package/dist/modules/components/textarea/index.js +2 -0
  388. package/dist/modules/components/textarea/index.js.map +1 -0
  389. package/dist/modules/components/textarea/styles.css +7 -0
  390. package/dist/modules/components/tooltip/index.js +2 -0
  391. package/dist/modules/components/tooltip/index.js.map +1 -0
  392. package/dist/modules/components/tooltip/styles.css +1 -0
  393. package/dist/modules/hooks/useAutomation.js +2 -0
  394. package/dist/modules/hooks/useAutomation.js.map +1 -0
  395. package/dist/modules/hooks/useDrawer.js +2 -0
  396. package/dist/modules/hooks/useDrawer.js.map +1 -0
  397. package/dist/modules/hooks/useForm.js +2 -0
  398. package/dist/modules/hooks/useForm.js.map +1 -0
  399. package/dist/modules/hooks/useHydrated.js +2 -0
  400. package/dist/modules/hooks/useHydrated.js.map +1 -0
  401. package/dist/modules/hooks/useModal.js +2 -0
  402. package/dist/modules/hooks/useModal.js.map +1 -0
  403. package/dist/modules/hooks/useScopedParams.js +2 -0
  404. package/dist/modules/hooks/useScopedParams.js.map +1 -0
  405. package/dist/modules/hooks/useScrollLock.js +2 -0
  406. package/dist/modules/hooks/useScrollLock.js.map +1 -0
  407. package/dist/modules/hooks/useSearchAutomation.js +2 -0
  408. package/dist/modules/hooks/useSearchAutomation.js.map +1 -0
  409. package/dist/modules/hooks/useSlider.js +2 -0
  410. package/dist/modules/hooks/useSlider.js.map +1 -0
  411. package/dist/modules/hooks/useToast.js +2 -0
  412. package/dist/modules/hooks/useToast.js.map +1 -0
  413. package/dist/modules/providers/drawerProvider.js +2 -0
  414. package/dist/modules/providers/drawerProvider.js.map +1 -0
  415. package/dist/modules/providers/formProvider.js +11 -9
  416. package/dist/modules/providers/formProvider.js.map +1 -0
  417. package/dist/modules/providers/modalProvider.js +2 -0
  418. package/dist/modules/providers/modalProvider.js.map +1 -0
  419. package/dist/modules/providers/placesProvider.js +2 -0
  420. package/dist/modules/providers/placesProvider.js.map +1 -0
  421. package/dist/modules/providers/toastProvider.js +41 -38
  422. package/dist/modules/providers/toastProvider.js.map +1 -0
  423. package/dist/modules/services/extractTextFromNode.js +2 -0
  424. package/dist/modules/services/extractTextFromNode.js.map +1 -0
  425. package/dist/modules/services/fieldTemplate.js +2 -0
  426. package/dist/modules/services/fieldTemplate.js.map +1 -0
  427. package/dist/modules/services/iconRenderer.js +2 -0
  428. package/dist/modules/services/iconRenderer.js.map +1 -0
  429. package/dist/modules/services/isBlockActive.js +2 -0
  430. package/dist/modules/services/isBlockActive.js.map +1 -0
  431. package/dist/modules/services/isMarkActive.js +2 -0
  432. package/dist/modules/services/isMarkActive.js.map +1 -0
  433. package/dist/modules/services/maskCurrencyValues.js +2 -0
  434. package/dist/modules/services/maskCurrencyValues.js.map +1 -0
  435. package/dist/modules/services/toHtml.js +2 -0
  436. package/dist/modules/services/toHtml.js.map +1 -0
  437. package/dist/modules/services/toRichTextValue.js +2 -0
  438. package/dist/modules/services/toRichTextValue.js.map +1 -0
  439. package/dist/modules/services/toggleBlock.js +2 -0
  440. package/dist/modules/services/toggleBlock.js.map +1 -0
  441. package/dist/modules/services/toggleMark.js +2 -0
  442. package/dist/modules/services/toggleMark.js.map +1 -0
  443. package/dist/modules/templates/badResponses.js +2 -0
  444. package/dist/modules/templates/badResponses.js.map +1 -0
  445. package/dist/modules/templates/richTextTemplates.js +2 -0
  446. package/dist/modules/templates/richTextTemplates.js.map +1 -0
  447. package/dist/modules/templates/successResponses.js +2 -0
  448. package/dist/modules/templates/successResponses.js.map +1 -0
  449. package/dist/modules/utils/phoneInputUtilities.js +2 -0
  450. package/dist/modules/utils/phoneInputUtilities.js.map +1 -0
  451. package/dist/modules/utils/richTextUtilities.js +2 -0
  452. package/dist/modules/utils/richTextUtilities.js.map +1 -0
  453. package/dist/providers/formProvider.d.ts.map +1 -1
  454. package/dist/providers/toastProvider.d.ts.map +1 -1
  455. package/dist/style.css +0 -1
  456. package/package.json +637 -8
  457. package/dist/modules/index.js +0 -72
  458. package/dist/modules/style.css +0 -2
@@ -0,0 +1,29 @@
1
+ @layer arkyn{.arkynFieldError{color:rgb(var(--spotlight-danger));font-size:12px;font-weight:600;line-height:12px}}
2
+
3
+ @layer arkyn{.arkynFieldLabel{color:var(--text-body);font-size:14px;font-weight:600;line-height:19.07px}.arkynFieldLabel.asteriskTrue:before{content:"* ";text-align:left;color:rgb(var(--spotlight-danger));font-size:12px;font-weight:600;line-height:16.34px}}
4
+
5
+ @layer arkyn{.arkynFieldWrapper{gap:6px;height:max-content;display:flex}.arkynFieldWrapper.horizontal{flex-direction:row;align-items:center}.arkynFieldWrapper.horizontalReverse{flex-direction:row-reverse;align-items:center;margin-right:auto}.arkynFieldWrapper.vertical{flex-direction:column;align-items:flex-start}}
6
+
7
+ @layer arkyn{.arkynSelectChevron{color:var(--text-muted);transition:all .15s ease-in-out}.arkynSelectChevron:not(.notAnimate).focused{transform:rotate(180deg)}}
8
+
9
+ @layer arkyn{.arkynSelectContainer{border:1px solid #0000;border-radius:8px;outline:1px solid #0000;align-items:center;gap:8px;width:100%;padding:0 16px;display:flex;position:relative}.arkynSelectContainer:hover{cursor:pointer}.arkynSelectContainer.opacity{opacity:.5}.arkynSelectContainer .prefix{color:var(--text-body);background:var(--border);border-right:1px solid var(--border);border-radius:5px 0 0 5px;justify-content:center;align-items:center;font-weight:400;display:flex;position:absolute;top:0;bottom:0;left:0}.arkynSelectContainer>svg{color:var(--text-muted)}.arkynSelectContainer.errored>svg{color:rgb(var(--spotlight-danger))}.arkynSelectContainer:not(.opacity).focused>svg{color:rgb(var(--spotlight-primary))}.arkynSelectContainer.solid{border-color:var(--border);background-color:var(--input-background)}.arkynSelectContainer.solid.errored{border-color:rgb(var(--spotlight-danger));outline-color:rgb(var(--spotlight-danger))}.arkynSelectContainer:not(.opacity).solid.focused{border-color:rgb(var(--spotlight-primary));outline-color:rgb(var(--spotlight-primary))}.arkynSelectContainer.outline{border-color:var(--border);background-color:var(--background-foreground)}.arkynSelectContainer.outline.errored{border-color:rgb(var(--spotlight-danger));outline-color:rgb(var(--spotlight-danger))}.arkynSelectContainer:not(.opacity).outline.focused{border-color:rgb(var(--spotlight-primary));outline-color:rgb(var(--spotlight-primary))}.arkynSelectContainer.underline{border-top:none;border-left:none;border-right:none;border-color:var(--border);border-radius:0;outline:none}.arkynSelectContainer.underline .prefix{display:none}.arkynSelectContainer.underline:before{content:" ";background:0 0;height:1px;position:absolute;bottom:-2px;left:0;right:0}.arkynSelectContainer.underline.errored{border-color:rgba(var(--spotlight-danger))}.arkynSelectContainer.underline.errored:before{background:rgba(var(--spotlight-danger))}.arkynSelectContainer:not(.opacity).underline.focused{border-color:rgba(var(--spotlight-primary))}.arkynSelectContainer:not(.opacity).underline.focused:before{background:rgba(var(--spotlight-primary))}.arkynSelectContainer.md{min-height:40px}.arkynSelectContainer.md.hasPrefix{padding-left:60px}.arkynSelectContainer.md .prefix{width:44px;height:40px;font-size:14px}.arkynSelectContainer.lg{min-height:44px}.arkynSelectContainer.lg .prefix{width:48px;height:44px;font-size:16px}.arkynSelectContainer.lg.hasPrefix{padding-left:64px}}
10
+
11
+ @layer arkyn{.arkynSelectContent{flex-wrap:wrap;flex:1;align-items:start;gap:4px;display:flex}.arkynSelectContent>p{color:var(--text-muted);-webkit-user-select:none;user-select:none;font-weight:400}.arkynSelectContent>p.hasValue{color:var(--text-body)}.arkynSelectContent.md>p{font-size:14px;line-height:14px}.arkynSelectContent.lg>p{font-size:16px;line-height:16px}}
12
+
13
+ @layer arkyn{.arkynSelectOption{color:var(--text-body);background-color:inherit;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;font-weight:400;line-height:21.79px;display:flex}.arkynSelectOption.md{padding:8px 16px;font-size:14px}.arkynSelectOption.lg{padding:8px 16px;font-size:16px}.arkynSelectOption svg{width:20px;height:20px;color:rgb(var(--spotlight-primary));display:none}.arkynSelectOption:hover{cursor:pointer;filter:brightness(.98)}.arkynSelectOption.active{color:var(--text-heading);filter:brightness(.95);font-weight:600}.arkynSelectOption.active svg{display:unset}html.dark .arkynSelectOption:hover,html.dark .arkynSelectOption.active{filter:brightness(1.2)}}
14
+
15
+ @layer arkyn{.arkynSelectOptionsContainer{z-index:7;border:1px solid var(--border);background-color:var(--background-foreground);border-radius:6px;flex-direction:column;flex:1;height:max-content;max-height:300px;list-style:none;display:flex;position:absolute;left:-2px;right:-2px;overflow:auto;box-shadow:0 4px 8px #0000001a}.arkynSelectOptionsContainer.bottom{top:calc(100% + 5px)}.arkynSelectOptionsContainer.top{bottom:calc(100% + 5px)}.arkynSelectOptionsContainer>p{text-align:center;color:var(--text-body);padding:16px;font-size:14px;font-weight:400;line-height:21.79px}}
16
+
17
+ @layer arkyn{.arkynInput{border:1px solid #0000;border-radius:8px;outline:1px solid #0000;align-items:center;gap:8px;width:100%;padding:0 16px;display:flex;position:relative}.arkynInput:hover{cursor:text}.arkynInput input{width:100%;color:var(--text-heading);background:0 0;border:none;outline:none;line-height:100%}.arkynInput input:disabled{-webkit-user-select:none;user-select:none}.arkynInput .prefix,.arkynInput .suffix{color:var(--text-body);background:var(--border);justify-content:center;align-items:center;font-weight:400;line-height:100%;display:flex;position:absolute}.arkynInput .prefix{border-right:1px solid var(--border);border-radius:7px 0 0 7px;top:0;bottom:0;left:0}.arkynInput .suffix{border-left:1px solid var(--border);border-radius:0 7px 7px 0;top:0;bottom:0;right:0}.arkynInput input::placeholder{color:var(--text-muted);line-height:100%}.arkynInput svg{color:var(--text-muted)}.arkynInput.errored svg{color:rgb(var(--spotlight-danger))}.arkynInput:not(.opacity).focused svg{color:rgb(var(--spotlight-primary))}.arkynInput.opacity{opacity:.5}.arkynInput.solid{border-color:var(--border);background-color:var(--input-background)}.arkynInput.solid.errored{border-color:rgb(var(--spotlight-danger));outline-color:rgb(var(--spotlight-danger))}.arkynInput:not(.opacity).solid.focused{border-color:rgb(var(--spotlight-primary));outline-color:rgb(var(--spotlight-primary))}.arkynInput.outline{border-color:var(--border);background-color:var(--background-foreground)}.arkynInput.outline.errored{border-color:rgb(var(--spotlight-danger));outline-color:rgb(var(--spotlight-danger))}.arkynInput:not(.opacity).outline.focused{border-color:rgb(var(--spotlight-primary));outline-color:rgb(var(--spotlight-primary))}.arkynInput.underline{border-top:none;border-left:none;border-right:none;border-color:var(--border);border-radius:0;outline:none}.arkynInput.underline .suffix,.arkynInput.underline .prefix{display:none}.arkynInput.underline:before{content:" ";background:0 0;height:1px;position:absolute;bottom:-2px;left:0;right:0}.arkynInput.underline.errored{border-color:rgb(var(--spotlight-danger))}.arkynInput.underline.errored:before{background:rgb(var(--spotlight-danger))}.arkynInput:not(.opacity).underline.focused{border-color:rgb(var(--spotlight-primary))}.arkynInput:not(.opacity).underline.focused:before{background:rgb(var(--spotlight-primary))}.arkynInput.md input{min-height:38px;max-height:38px;font-size:14px;font-weight:400;line-height:14px}.arkynInput.md input::placeholder{font-size:14px;font-weight:400;line-height:14px}.arkynInput.md.hasPrefix{padding-left:60px}.arkynInput.md.hasSuffix{padding-right:60px}.arkynInput.md .prefix,.arkynInput.md .suffix{width:44px;height:38px;font-size:14px}.arkynInput.lg input{min-height:44px;max-height:44px;font-size:16px;font-weight:400;line-height:16px}.arkynInput.lg input::placeholder{font-size:16px;font-weight:400;line-height:16px}.arkynInput.lg .prefix,.arkynInput.lg .suffix{width:48px;height:44px;font-size:16px}.arkynInput.lg.hasPrefix{padding-left:64px}.arkynInput.lg.hasSuffix{padding-right:64px}.arkynInput .spinner{animation:2s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}
18
+
19
+ @layer arkyn{.arkynFieldError{color:rgb(var(--spotlight-danger));font-size:12px;font-weight:600;line-height:12px}}
20
+
21
+ @layer arkyn{.arkynFieldLabel{color:var(--text-body);font-size:14px;font-weight:600;line-height:19.07px}.arkynFieldLabel.asteriskTrue:before{content:"* ";text-align:left;color:rgb(var(--spotlight-danger));font-size:12px;font-weight:600;line-height:16.34px}}
22
+
23
+ @layer arkyn{.arkynFieldWrapper{gap:6px;height:max-content;display:flex}.arkynFieldWrapper.horizontal{flex-direction:row;align-items:center}.arkynFieldWrapper.horizontalReverse{flex-direction:row-reverse;align-items:center;margin-right:auto}.arkynFieldWrapper.vertical{flex-direction:column;align-items:flex-start}}
24
+
25
+ @layer arkyn{.arkynInput{border:1px solid #0000;border-radius:8px;outline:1px solid #0000;align-items:center;gap:8px;width:100%;padding:0 16px;display:flex;position:relative}.arkynInput:hover{cursor:text}.arkynInput input{width:100%;color:var(--text-heading);background:0 0;border:none;outline:none;line-height:100%}.arkynInput input:disabled{-webkit-user-select:none;user-select:none}.arkynInput .prefix,.arkynInput .suffix{color:var(--text-body);background:var(--border);justify-content:center;align-items:center;font-weight:400;line-height:100%;display:flex;position:absolute}.arkynInput .prefix{border-right:1px solid var(--border);border-radius:7px 0 0 7px;top:0;bottom:0;left:0}.arkynInput .suffix{border-left:1px solid var(--border);border-radius:0 7px 7px 0;top:0;bottom:0;right:0}.arkynInput input::placeholder{color:var(--text-muted);line-height:100%}.arkynInput svg{color:var(--text-muted)}.arkynInput.errored svg{color:rgb(var(--spotlight-danger))}.arkynInput:not(.opacity).focused svg{color:rgb(var(--spotlight-primary))}.arkynInput.opacity{opacity:.5}.arkynInput.solid{border-color:var(--border);background-color:var(--input-background)}.arkynInput.solid.errored{border-color:rgb(var(--spotlight-danger));outline-color:rgb(var(--spotlight-danger))}.arkynInput:not(.opacity).solid.focused{border-color:rgb(var(--spotlight-primary));outline-color:rgb(var(--spotlight-primary))}.arkynInput.outline{border-color:var(--border);background-color:var(--background-foreground)}.arkynInput.outline.errored{border-color:rgb(var(--spotlight-danger));outline-color:rgb(var(--spotlight-danger))}.arkynInput:not(.opacity).outline.focused{border-color:rgb(var(--spotlight-primary));outline-color:rgb(var(--spotlight-primary))}.arkynInput.underline{border-top:none;border-left:none;border-right:none;border-color:var(--border);border-radius:0;outline:none}.arkynInput.underline .suffix,.arkynInput.underline .prefix{display:none}.arkynInput.underline:before{content:" ";background:0 0;height:1px;position:absolute;bottom:-2px;left:0;right:0}.arkynInput.underline.errored{border-color:rgb(var(--spotlight-danger))}.arkynInput.underline.errored:before{background:rgb(var(--spotlight-danger))}.arkynInput:not(.opacity).underline.focused{border-color:rgb(var(--spotlight-primary))}.arkynInput:not(.opacity).underline.focused:before{background:rgb(var(--spotlight-primary))}.arkynInput.md input{min-height:38px;max-height:38px;font-size:14px;font-weight:400;line-height:14px}.arkynInput.md input::placeholder{font-size:14px;font-weight:400;line-height:14px}.arkynInput.md.hasPrefix{padding-left:60px}.arkynInput.md.hasSuffix{padding-right:60px}.arkynInput.md .prefix,.arkynInput.md .suffix{width:44px;height:38px;font-size:14px}.arkynInput.lg input{min-height:44px;max-height:44px;font-size:16px;font-weight:400;line-height:16px}.arkynInput.lg input::placeholder{font-size:16px;font-weight:400;line-height:16px}.arkynInput.lg .prefix,.arkynInput.lg .suffix{width:48px;height:44px;font-size:16px}.arkynInput.lg.hasPrefix{padding-left:64px}.arkynInput.lg.hasSuffix{padding-right:64px}.arkynInput .spinner{animation:2s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}
26
+
27
+ @layer arkyn{.arkynSelectOverlay{z-index:5;position:fixed;inset:0}}
28
+
29
+ @layer arkyn{.arkynSelectSpinner{animation:2s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}
@@ -42,3 +42,5 @@ function o(o) {
42
42
  }
43
43
  //#endregion
44
44
  export { o as Slider };
45
+
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/slider/index.tsx"],"sourcesContent":["import {\n\ttype HTMLAttributes,\n\tuseCallback,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n} from \"react\";\n\nimport \"./styles.css\";\n\ntype SliderProps = Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> & {\n\t/** Current slider position as a percentage (0–100). Required. */\n\tvalue: number;\n\t/** Callback fired whenever the value changes. Required. */\n\tonChange: (value: number) => void;\n\t/** Disables all drag and click interactions. @default false */\n\tdisabled?: boolean;\n\t/** Callback fired when the dragging state changes (`true` = drag started, `false` = drag ended). */\n\tonDragging?: (isDragging: boolean) => void;\n};\n\n/**\n * Slider — interactive track for selecting a numeric value between 0 and 100.\n *\n * Pair with `useSlider` for managed state.\n *\n * @param props.value - Current position as a percentage (0–100). Required.\n * @param props.onChange - Callback fired on value change. Required.\n * @param props.disabled - Disables interactions. Default: false\n * @param props.onDragging - Callback fired when dragging starts or stops.\n *\n * **...Other valid HTML properties for `<div>`**\n *\n * @returns Slider JSX element.\n *\n * @example\n * ```tsx\n * // Controlled slider\n * const [value, setValue] = useState(50);\n * <Slider value={value} onChange={setValue} />\n *\n * // With useSlider hook\n * const [value, setValue] = useSlider(25);\n * <Slider value={value} onChange={setValue} onDragging={setIsDragging} />\n *\n * // Disabled\n * <Slider value={75} onChange={() => {}} disabled />\n * ```\n */\n\nfunction Slider(props: SliderProps) {\n\tconst {\n\t\tonChange,\n\t\tvalue,\n\t\tdisabled = false,\n\t\tonDragging,\n\t\tclassName = \"\",\n\t\t...rest\n\t} = props;\n\n\tconst [isDragging, setIsDragging] = useState(false);\n\tconst sliderRef = useRef<HTMLDivElement>(null);\n\n\tconst handleMouseDown = () => setIsDragging(true);\n\tconst handleMouseUp = useCallback(() => setIsDragging(false), []);\n\n\tconst handleMouseMove = useCallback(\n\t\t(event: MouseEvent) => {\n\t\t\tif (disabled) return;\n\t\t\tif (!isDragging || !sliderRef.current) return;\n\n\t\t\tconst rect = sliderRef.current.getBoundingClientRect();\n\t\t\tconst offsetX = event.clientX - rect.left;\n\t\t\tconst newValue = Math.min(Math.max((offsetX / rect.width) * 100, 0), 100);\n\n\t\t\tonChange(newValue);\n\t\t},\n\t\t[disabled, isDragging, onChange],\n\t);\n\n\tconst handleSliderClick = (event: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (disabled) return;\n\t\tif (!sliderRef.current) return;\n\n\t\tconst rect = sliderRef.current.getBoundingClientRect();\n\t\tconst offsetX = event.clientX - rect.left;\n\t\tconst newValue = Math.min(Math.max((offsetX / rect.width) * 100, 0), 100);\n\n\t\tonChange(newValue);\n\t};\n\n\tuseEffect(() => {\n\t\tif (isDragging) {\n\t\t\tonDragging?.(true);\n\t\t\tdocument.addEventListener(\"mousemove\", handleMouseMove);\n\t\t\tdocument.addEventListener(\"mouseup\", handleMouseUp);\n\t\t} else {\n\t\t\tonDragging?.(false);\n\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove);\n\t\t\tdocument.removeEventListener(\"mouseup\", handleMouseUp);\n\t\t}\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove);\n\t\t\tdocument.removeEventListener(\"mouseup\", handleMouseUp);\n\t\t};\n\t}, [isDragging, onDragging, handleMouseUp, handleMouseMove]);\n\n\tconst isDraggingClass = isDragging ? \"isDragging\" : \"isNotDragging\";\n\tconst disabledClass = disabled ? \"isDisabled\" : \"isEnabled\";\n\tconst sliderClassname = `arkynSliderTrack ${isDraggingClass} ${disabledClass} ${className}`;\n\n\treturn (\n\t\t<div\n\t\t\t{...rest}\n\t\t\tclassName={sliderClassname}\n\t\t\tonMouseDown={handleMouseDown}\n\t\t\tonClick={handleSliderClick}\n\t\t\tref={sliderRef}\n\t\t>\n\t\t\t<div className=\"arkynSliderFill\" style={{ width: `${value}%` }} />\n\t\t\t<div className=\"arkynSliderThumb\" style={{ left: `${value}%` }} />\n\t\t</div>\n\t);\n}\n\nexport { Slider };\n"],"mappings":";;;;AAkDA,SAAS,EAAO,GAAoB;CACnC,IAAM,EACL,aACA,UACA,cAAW,IACX,eACA,eAAY,IACZ,GAAG,MACA,GAEE,CAAC,GAAY,KAAiB,EAAS,EAAK,GAC5C,IAAY,EAAuB,IAAI,GAEvC,UAAwB,EAAc,EAAI,GAC1C,IAAgB,QAAkB,EAAc,EAAK,GAAG,CAAC,CAAC,GAE1D,IAAkB,GACtB,MAAsB;EAEtB,IADI,KACA,CAAC,KAAc,CAAC,EAAU,SAAS;EAEvC,IAAM,IAAO,EAAU,QAAQ,sBAAsB,GAC/C,IAAU,EAAM,UAAU,EAAK;EAGrC,EAFiB,KAAK,IAAI,KAAK,IAAK,IAAU,EAAK,QAAS,KAAK,CAAC,GAAG,GAE5D,CAAQ;CAClB,GACA;EAAC;EAAU;EAAY;CAAQ,CAChC,GAEM,KAAqB,MAA4C;EAEtE,IADI,KACA,CAAC,EAAU,SAAS;EAExB,IAAM,IAAO,EAAU,QAAQ,sBAAsB,GAC/C,IAAU,EAAM,UAAU,EAAK;EAGrC,EAFiB,KAAK,IAAI,KAAK,IAAK,IAAU,EAAK,QAAS,KAAK,CAAC,GAAG,GAE5D,CAAQ;CAClB;CAEA,SACK,KACH,IAAa,EAAI,GACjB,SAAS,iBAAiB,aAAa,CAAe,GACtD,SAAS,iBAAiB,WAAW,CAAa,MAElD,IAAa,EAAK,GAClB,SAAS,oBAAoB,aAAa,CAAe,GACzD,SAAS,oBAAoB,WAAW,CAAa,UAGzC;EAEZ,AADA,SAAS,oBAAoB,aAAa,CAAe,GACzD,SAAS,oBAAoB,WAAW,CAAa;CACtD,IACE;EAAC;EAAY;EAAY;EAAe;CAAe,CAAC;CAI3D,IAAM,IAAkB,oBAFA,IAAa,eAAe,gBAEQ,GADtC,IAAW,eAAe,YAC6B,GAAG;CAEhF,OACC,kBAAC,OAAD;EACC,GAAI;EACJ,WAAW;EACX,aAAa;EACb,SAAS;EACT,KAAK;YALN,CAOC,kBAAC,OAAD;GAAK,WAAU;GAAkB,OAAO,EAAE,OAAO,GAAG,EAAM,GAAG;EAAI,CAAA,GACjE,kBAAC,OAAD;GAAK,WAAU;GAAmB,OAAO,EAAE,MAAM,GAAG,EAAM,GAAG;EAAI,CAAA,CAC7D;;AAEP"}
@@ -0,0 +1 @@
1
+ @layer arkyn{.arkynSliderTrack{border:1px solid var(--border);background:var(--input-background);cursor:pointer;border-radius:5px;width:100%;max-width:400px;height:6px;position:relative}.arkynSliderTrack.isDragging{cursor:grabbing}.arkynSliderTrack.isDisabled{cursor:not-allowed;opacity:.5}.arkynSliderFill{background:rgb(var(--spotlight-primary));border-radius:5px;height:100%}.arkynSliderThumb{background:rgb(var(--spotlight-primary));border-radius:50%;width:12px;height:12px;position:absolute;top:50%;transform:translate(-50%,-50%)}.arkynSliderTrack.isEnabled .arkynSliderThumb{cursor:grab}.arkynSliderValue{margin-top:10px;font-size:18px}}
@@ -34,3 +34,5 @@ function a(a) {
34
34
  }
35
35
  //#endregion
36
36
  export { a as Switch };
37
+
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/switch/index.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes } from \"react\";\nimport { useId, useRef, useState } from \"react\";\n\nimport { FieldTemplate } from \"../../services/fieldTemplate\";\nimport \"./styles.css\";\n\ntype SwitchProps = Omit<\n\tButtonHTMLAttributes<HTMLButtonElement>,\n\t\"children\" | \"onChange\" | \"defaultValue\" | \"onCheck\" | \"value\"\n> & {\n\t/** Optional label text displayed beside the switch. */\n\tlabel?: string;\n\t/**\n\t * Switch size.\n\t * @default \"lg\"\n\t */\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\t/** Uncontrolled initial checked state. @default false */\n\tdefaultChecked?: boolean;\n\t/** Controlled checked state. */\n\tchecked?: boolean;\n\t/** Value emitted when the switch is on. @default \"checked\" */\n\tvalue?: string;\n\t/** Value emitted when the switch is off. @default \"\" */\n\tunCheckedValue?: string;\n\t/** Field name for form submission. Required. */\n\tname: string;\n\t/** Callback fired on toggle — receives the current value string. */\n\tonCheck?: (value: string) => void;\n\t/**\n\t * Layout direction forwarded to `FieldTemplate`.\n\t * @default \"horizontalReverse\"\n\t */\n\torientation?: \"vertical\" | \"horizontal\" | \"horizontalReverse\";\n\t/** When true, skips `FieldTemplate` wrapper (label and error text). @default false */\n\tunShowFieldTemplate?: boolean;\n\t/** Displays an asterisk on the label to signal a required field. */\n\tshowAsterisk?: boolean;\n\t/** Validation error message displayed below the switch. */\n\terrorMessage?: string;\n};\n\n/**\n * Switch — toggle input for binary on/off states.\n *\n * Stores value in a hidden `<input>` for native form submission.\n * Integrates with `useForm` to display validation errors by field name.\n *\n * @param props.name - Field name for form submission. Required.\n * @param props.label - Label text displayed beside the switch.\n * @param props.size - Switch size (`sm` | `md` | `lg`). Default: \"lg\"\n * @param props.defaultChecked - Uncontrolled initial checked state. Default: false\n * @param props.checked - Controlled checked state.\n * @param props.value - Value emitted when on. Default: \"checked\"\n * @param props.unCheckedValue - Value emitted when off. Default: \"\"\n * @param props.onCheck - Callback fired on toggle — receives the current value string.\n * @param props.orientation - Layout direction (`horizontal` | `vertical` | `horizontalReverse`). Default: \"horizontalReverse\"\n * @param props.unShowFieldTemplate - Skips wrapper, label, and error rendering. Default: false\n * @param props.showAsterisk - Appends `*` to the label.\n * @param props.errorMessage - Validation error message.\n *\n * **...Other valid HTML properties for `<button>` (except `children`, `onChange`, `defaultValue`)**\n *\n * @returns Switch JSX element wrapped in `FieldTemplate`.\n *\n * @example\n * ```tsx\n * // Basic\n * <Switch name=\"notifications\" label=\"Enable notifications\" />\n *\n * // Custom on/off values\n * <Switch\n * name=\"theme\"\n * label=\"Dark mode\"\n * value=\"dark\"\n * unCheckedValue=\"light\"\n * onCheck={(v) => setTheme(v)}\n * />\n *\n * // Controlled\n * <Switch\n * name=\"autoSave\"\n * label=\"Auto-save\"\n * checked={isAutoSaveEnabled}\n * onCheck={(v) => setAutoSave(!!v)}\n * size=\"md\"\n * />\n * ```\n */\n\nfunction Switch(props: SwitchProps) {\n\tconst {\n\t\tlabel,\n\t\tsize = \"lg\",\n\t\tdefaultChecked = false,\n\t\tchecked: baseChecked = null,\n\t\tvalue,\n\t\tunCheckedValue = \"\",\n\t\tname,\n\t\tclassName: baseClassName = \"\",\n\t\tonCheck,\n\t\tid,\n\t\torientation = \"horizontalReverse\",\n\t\tclassName: wrapperClassName = \"\",\n\t\tshowAsterisk,\n\t\terrorMessage,\n\t\tunShowFieldTemplate = false,\n\t\t...rest\n\t} = props;\n\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst generatedId = useId();\n\tconst inputId = id || generatedId;\n\n\tconst [isChecked, setIsChecked] = useState(defaultChecked);\n\n\tconst currentChecked =\n\t\ttypeof baseChecked === \"boolean\" ? baseChecked : isChecked;\n\n\tfunction handleCheck() {\n\t\tsetIsChecked(!isChecked);\n\t\tonCheck?.(!currentChecked ? value || \"checked\" : unCheckedValue);\n\t}\n\n\tconst checkedClass = currentChecked ? \"checkedTrue\" : \"checkedFalse\";\n\tconst className = `arkynSwitch ${checkedClass} ${size} ${baseClassName}`;\n\n\treturn (\n\t\t<FieldTemplate\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\tshowAsterisk={showAsterisk}\n\t\t\tclassName={wrapperClassName}\n\t\t\terrorMessage={errorMessage}\n\t\t\tunShowFieldTemplate={unShowFieldTemplate}\n\t\t\torientation={orientation}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleCheck}\n\t\t\t\tclassName={className}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tid={inputId}\n\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\tname={name}\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\tonClick={handleCheck}\n\t\t\t\t\tvalue={currentChecked ? value || \"checked\" : unCheckedValue}\n\t\t\t\t/>\n\t\t\t</button>\n\t\t</FieldTemplate>\n\t);\n}\n\nexport { Switch };\n"],"mappings":";;;;;AA0FA,SAAS,EAAO,GAAoB;CACnC,IAAM,EACL,UACA,UAAO,MACP,oBAAiB,IACjB,SAAS,IAAc,MACvB,UACA,oBAAiB,IACjB,SACA,WAAW,IAAgB,IAC3B,YACA,OACA,iBAAc,qBACd,WAAW,IAAmB,IAC9B,iBACA,iBACA,yBAAsB,IACtB,GAAG,MACA,GAEE,IAAW,EAAyB,IAAI,GACxC,IAAc,EAAM,GACpB,IAAU,KAAM,GAEhB,CAAC,GAAW,KAAgB,EAAS,CAAc,GAEnD,IACL,OAAO,KAAgB,YAAY,IAAc;CAElD,SAAS,IAAc;EAEtB,AADA,EAAa,CAAC,CAAS,GACvB,IAAW,IAAsC,IAArB,KAAS,SAA0B;CAChE;CAKA,OACC,kBAAC,GAAD;EACO;EACC;EACO;EACd,WAAW;EACG;EACO;EACR;YAEb,kBAAC,UAAD;GACC,MAAK;GACL,SAAS;GACE,WAAA,eAhBO,IAAiB,gBAAgB,eACR,GAAG,EAAK,GAAG;GAgBtD,GAAI;aAEJ,kBAAC,SAAD;IACC,IAAI;IACJ,MAAK;IACC;IACN,KAAK;IACL,SAAS;IACT,OAAO,IAAiB,KAAS,YAAY;GAC7C,CAAA;EACM,CAAA;CACM,CAAA;AAEjB"}
@@ -0,0 +1,7 @@
1
+ @layer arkyn{.arkynSwitch{border:1px solid #0000;border-radius:999999px;position:relative}.arkynSwitch:hover{cursor:pointer;transition:all .3s ease-in-out}.arkynSwitch:disabled{cursor:not-allowed;opacity:.5}.arkynSwitch:before{content:"";background-color:var(--white);border-radius:50%;transition:all .2s;position:absolute;top:2px;bottom:2px;transform:translate(-2px)}.arkynSwitch.checkedTrue{background-color:rgb(var(--spotlight-primary))}.arkynSwitch.checkedFalse{background-color:var(--border)}.arkynSwitch.checkedTrue:before{transform:translate(3px)}.arkynSwitch.sm{min-width:32px;max-width:32px;min-height:16px;max-height:16px}.arkynSwitch.sm:before{min-width:10px;max-width:10px;min-height:10px;max-height:10px}.arkynSwitch.sm.checkedFalse:before{transform:translate(-13px)}.arkynSwitch.md{min-width:40px;max-width:40px;min-height:20px;max-height:20px}.arkynSwitch.md:before{min-width:14px;max-width:14px;min-height:14px;max-height:14px}.arkynSwitch.md.checkedFalse:before{transform:translate(-17px)}.arkynSwitch.lg{min-width:48px;max-width:48px;min-height:24px;max-height:24px}.arkynSwitch.lg:before{min-width:18px;max-width:18px;min-height:18px;max-height:18px}.arkynSwitch.lg.checkedFalse:before{transform:translate(-21px)}}
2
+
3
+ @layer arkyn{.arkynFieldError{color:rgb(var(--spotlight-danger));font-size:12px;font-weight:600;line-height:12px}}
4
+
5
+ @layer arkyn{.arkynFieldLabel{color:var(--text-body);font-size:14px;font-weight:600;line-height:19.07px}.arkynFieldLabel.asteriskTrue:before{content:"* ";text-align:left;color:rgb(var(--spotlight-danger));font-size:12px;font-weight:600;line-height:16.34px}}
6
+
7
+ @layer arkyn{.arkynFieldWrapper{gap:6px;height:max-content;display:flex}.arkynFieldWrapper.horizontal{flex-direction:row;align-items:center}.arkynFieldWrapper.horizontalReverse{flex-direction:row-reverse;align-items:center;margin-right:auto}.arkynFieldWrapper.vertical{flex-direction:column;align-items:flex-start}}
@@ -18,3 +18,5 @@ function n(n) {
18
18
  }
19
19
  //#endregion
20
20
  export { n as TabButton };
21
+
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/tab/tabButton/index.tsx"],"sourcesContent":["import type { ButtonHTMLAttributes, MouseEvent, ReactNode } from \"react\";\n\nimport { useTab } from \"../tabContext\";\nimport \"./styles.css\";\n\ntype TabButtonProps = Omit<\n\tButtonHTMLAttributes<HTMLButtonElement>,\n\t\"children\" | \"value\" | \"type\"\n> & {\n\t/** Content displayed inside the tab button. */\n\tchildren: ReactNode;\n\t/** Unique identifier for this tab; matched against the container's active value. */\n\tvalue: string;\n};\n\n/**\n * TabButton — individual tab button inside a `TabContainer`.\n *\n * Reads active state and disabled state from `TabContainer` context.\n * The button's own `disabled` prop is ORed with the container's `disabled`.\n *\n * @param props.children - Tab label content. Required.\n * @param props.value - Tab identifier. Required.\n * @param props.disabled - Disables this tab individually (container can also disable all tabs).\n *\n * **...Other valid HTML `<button>` properties except `type`**\n *\n * @returns TabButton JSX element.\n *\n * @example\n * ```tsx\n * <TabContainer defaultValue=\"overview\" onChange={setTab}>\n * <TabButton value=\"overview\">Overview</TabButton>\n * <TabButton value=\"activity\">Activity</TabButton>\n * <TabButton value=\"settings\" disabled>Settings</TabButton>\n * </TabContainer>\n * ```\n */\n\nfunction TabButton(props: TabButtonProps) {\n\tconst {\n\t\tchildren,\n\t\tdisabled: rawDisabled = false,\n\t\tclassName: baseClassName = \"\",\n\t\tonClick,\n\t\tvalue,\n\t\t...rest\n\t} = props;\n\n\tconst { disabled, currentTab, changeCurrentTab } = useTab();\n\n\tconst isDisabled = disabled || rawDisabled;\n\n\tconst disabledClass = isDisabled ? \"isDisabled\" : \"\";\n\tconst activeClass = currentTab === value && value ? \"isActive\" : \"\";\n\tconst className = `arkynTabButton ${disabledClass} ${activeClass} ${baseClassName}`;\n\n\tfunction handleClick(event: MouseEvent<HTMLButtonElement>) {\n\t\tchangeCurrentTab(value);\n\t\tonClick?.(event);\n\t}\n\n\treturn (\n\t\t<button\n\t\t\tonClick={handleClick}\n\t\t\tclassName={className.trim()}\n\t\t\t{...rest}\n\t\t\tdisabled={isDisabled}\n\t\t\ttype=\"button\"\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n}\n\nexport { TabButton };\n"],"mappings":";;;;AAuCA,SAAS,EAAU,GAAuB;CACzC,IAAM,EACL,aACA,UAAU,IAAc,IACxB,WAAW,IAAgB,IAC3B,YACA,UACA,GAAG,MACA,GAEE,EAAE,aAAU,eAAY,wBAAqB,EAAO,GAEpD,IAAa,KAAY,GAIzB,IAAY,kBAFI,IAAa,eAAe,GAEA,GAD9B,MAAe,KAAS,IAAQ,aAAa,GACA,GAAG;CAEpE,SAAS,EAAY,GAAsC;EAE1D,AADA,EAAiB,CAAK,GACtB,IAAU,CAAK;CAChB;CAEA,OACC,kBAAC,UAAD;EACC,SAAS;EACT,WAAW,EAAU,KAAK;EAC1B,GAAI;EACJ,UAAU;EACV,MAAK;EAEJ;CACM,CAAA;AAEV"}
@@ -0,0 +1 @@
1
+ @layer arkyn{.arkynTabButton{color:var(--text-muted);background-color:#0000;border:none;justify-content:center;align-items:center;padding:8px 16px;font-size:16px;font-weight:600;line-height:100%;display:flex;position:relative}.arkynTabButton.isDisabled{cursor:not-allowed;opacity:.2}.arkynTabButton:hover{cursor:pointer}.arkynTabButton.isActive{color:rgb(var(--spotlight-primary))}.arkynTabButton.isActive:after{content:"";background-color:rgb(var(--spotlight-primary));height:1px;position:absolute;bottom:-1px;left:0;right:0}}
@@ -21,3 +21,5 @@ function r(r) {
21
21
  }
22
22
  //#endregion
23
23
  export { r as TabContainer };
24
+
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/tab/tabContainer/index.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, useState } from \"react\";\n\nimport { TabProvider } from \"../tabContext\";\nimport \"./styles.css\";\n\ntype TabContainerProps = Omit<\n\tHTMLAttributes<HTMLElement>,\n\t\"onChange\" | \"children\" | \"ref\" | \"onClick\"\n> & {\n\t/** `TabButton` components to render as tabs. Required. */\n\tchildren: ReactNode;\n\t/** Disables all tab buttons at once. @default false */\n\tdisabled?: boolean;\n\t/** Initially selected tab value. */\n\tdefaultValue?: string;\n\t/** Callback fired when the active tab changes, receiving the new value. */\n\tonChange?: (index: string) => void;\n};\n\n/**\n * TabContainer — wrapper that manages active state for a group of `TabButton` components.\n *\n * Renders as a `<nav>` element. Provides context consumed by each `TabButton`.\n *\n * @param props.children - `TabButton` elements. Required.\n * @param props.defaultValue - Initially selected tab value.\n * @param props.disabled - Disables all buttons. Default: false\n * @param props.onChange - Called with the new value whenever the active tab changes.\n *\n * **...Other valid HTML `<nav>` properties**\n *\n * @returns TabContainer JSX element.\n *\n * @example\n * ```tsx\n * <TabContainer defaultValue=\"overview\" onChange={setActiveTab}>\n * <TabButton value=\"overview\">Overview</TabButton>\n * <TabButton value=\"analytics\">Analytics</TabButton>\n * <TabButton value=\"settings\">Settings</TabButton>\n * </TabContainer>\n *\n * {activeTab === 'overview' && <OverviewPanel />}\n * {activeTab === 'analytics' && <AnalyticsPanel />}\n * ```\n */\n\nfunction TabContainer(props: TabContainerProps) {\n\tconst {\n\t\tchildren,\n\t\tonChange,\n\t\tdefaultValue,\n\t\tdisabled = false,\n\t\tclassName: baseClassName,\n\t\t...rest\n\t} = props;\n\n\tconst [currentTab, setCurrentTab] = useState(defaultValue || \"\");\n\n\tconst className = `arkynTabContainer ${baseClassName || \"\"}`;\n\n\tfunction changeCurrentTab(value: string) {\n\t\tsetCurrentTab(value);\n\t\tif (onChange) onChange(value);\n\t}\n\n\treturn (\n\t\t<TabProvider\n\t\t\tdisabled={disabled}\n\t\t\tcurrentTab={currentTab}\n\t\t\tchangeCurrentTab={changeCurrentTab}\n\t\t>\n\t\t\t<nav className={className.trim()} {...rest}>\n\t\t\t\t{children}\n\t\t\t</nav>\n\t\t</TabProvider>\n\t);\n}\n\nexport { TabContainer };\n"],"mappings":";;;;;AA8CA,SAAS,EAAa,GAA0B;CAC/C,IAAM,EACL,aACA,aACA,iBACA,cAAW,IACX,WAAW,GACX,GAAG,MACA,GAEE,CAAC,GAAY,KAAiB,EAAS,KAAgB,EAAE,GAEzD,IAAY,qBAAqB,KAAiB;CAExD,SAAS,EAAiB,GAAe;EAExC,AADA,EAAc,CAAK,GACf,KAAU,EAAS,CAAK;CAC7B;CAEA,OACC,kBAAC,GAAD;EACW;EACE;EACM;YAElB,kBAAC,OAAD;GAAK,WAAW,EAAU,KAAK;GAAG,GAAI;GACpC;EACG,CAAA;CACO,CAAA;AAEf"}
@@ -0,0 +1 @@
1
+ @layer arkyn{.arkynTabContainer{border-bottom:1px solid var(--border);justify-content:start;align-items:center;gap:4px;display:flex;position:relative}}
@@ -1,15 +1,26 @@
1
- import { createContext as e, useContext as t } from "react";
2
- import { jsx as n } from "react/jsx-runtime";
1
+ import { createContext as e, useContext as t, useMemo as n } from "react";
2
+ import { jsx as r } from "react/jsx-runtime";
3
3
  //#region src/components/tab/tabContext.tsx
4
- var r = e({});
5
- function i() {
6
- return t(r);
4
+ var i = e({});
5
+ function a() {
6
+ return t(i);
7
7
  }
8
- function a(e) {
9
- return /* @__PURE__ */ n(r.Provider, {
10
- value: e,
8
+ function o(e) {
9
+ let { disabled: t, currentTab: a, changeCurrentTab: o } = e, s = n(() => ({
10
+ disabled: t,
11
+ currentTab: a,
12
+ changeCurrentTab: o
13
+ }), [
14
+ t,
15
+ a,
16
+ o
17
+ ]);
18
+ return /* @__PURE__ */ r(i.Provider, {
19
+ value: s,
11
20
  children: e.children
12
21
  });
13
22
  }
14
23
  //#endregion
15
- export { a as TabProvider, i as useTab };
24
+ export { o as TabProvider, a as useTab };
25
+
26
+ //# sourceMappingURL=tabContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabContext.js","names":[],"sources":["../../../../src/components/tab/tabContext.tsx"],"sourcesContent":["import { createContext, type ReactNode, useContext, useMemo } from \"react\";\n\ntype TabContextProps = {\n\tdisabled: boolean;\n\tcurrentTab: string;\n\tchangeCurrentTab: (tab: string) => void;\n};\n\ntype TabProviderProps = {\n\tchildren: ReactNode;\n\tdisabled: boolean;\n\tcurrentTab: string;\n\tchangeCurrentTab: (tab: string) => void;\n};\n\nconst TabContext = createContext({} as TabContextProps);\n\nfunction useTab() {\n\treturn useContext(TabContext);\n}\n\nfunction TabProvider(props: TabProviderProps) {\n\tconst { disabled, currentTab, changeCurrentTab } = props;\n\n\tconst value = useMemo(\n\t\t() => ({ disabled, currentTab, changeCurrentTab }),\n\t\t[disabled, currentTab, changeCurrentTab],\n\t);\n\n\treturn (\n\t\t<TabContext.Provider value={value}>{props.children}</TabContext.Provider>\n\t);\n}\n\nexport { TabProvider, useTab };\n"],"mappings":";;;AAeA,IAAM,IAAa,EAAc,CAAC,CAAoB;AAEtD,SAAS,IAAS;CACjB,OAAO,EAAW,CAAU;AAC7B;AAEA,SAAS,EAAY,GAAyB;CAC7C,IAAM,EAAE,aAAU,eAAY,wBAAqB,GAE7C,IAAQ,SACN;EAAE;EAAU;EAAY;CAAiB,IAChD;EAAC;EAAU;EAAY;CAAgB,CACxC;CAEA,OACC,kBAAC,EAAW,UAAZ;EAA4B;YAAQ,EAAM;CAA8B,CAAA;AAE1E"}
@@ -18,3 +18,5 @@ function n(n) {
18
18
  }
19
19
  //#endregion
20
20
  export { n as TableBody };
21
+
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/table/tableBody/index.tsx"],"sourcesContent":["import { Children, type HTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype TableBodyProps = HTMLAttributes<HTMLTableSectionElement> & {\n\t/** Text displayed in a full-width row when no children are present. @default \"Nenhum dado adicionado.\" */\n\temptyMessage?: string;\n};\n\n/**\n * TableBody — `<tbody>` section with built-in empty state handling.\n *\n * When `children` is empty, renders a full-width row with `emptyMessage`.\n * Accepts all standard HTML `<tbody>` attributes.\n *\n * @param props.emptyMessage - Empty state text. Default: `\"Nenhum dado adicionado.\"`\n *\n * **...Other valid HTML `<tbody>` properties**\n *\n * @returns TableBody JSX element.\n *\n * @example\n * ```tsx\n * <TableBody emptyMessage=\"No orders found\">\n * {orders.map(o => (\n * <tr key={o.id}>\n * <td>{o.number}</td>\n * <td>{o.status}</td>\n * </tr>\n * ))}\n * </TableBody>\n * ```\n */\n\nfunction TableBody(props: TableBodyProps) {\n\tconst {\n\t\temptyMessage = \"Nenhum dado adicionado.\",\n\t\tclassName: baseClassName,\n\t\tchildren,\n\t\t...rest\n\t} = props;\n\n\tconst className = `arkynTableBody ${baseClassName}`;\n\tconst childArray = Children.toArray(children).filter(Boolean);\n\tconst isEmpty = childArray.length === 0;\n\n\treturn (\n\t\t<tbody className={className.trim()} {...rest}>\n\t\t\t{isEmpty ? (\n\t\t\t\t<tr className=\"arkynTableBodyEmptyLine\">\n\t\t\t\t\t<td colSpan={100}>\n\t\t\t\t\t\t<div>{emptyMessage}</div>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t) : (\n\t\t\t\tchildArray\n\t\t\t)}\n\t\t</tbody>\n\t);\n}\n\nexport { TableBody };\n"],"mappings":";;;;AAiCA,SAAS,EAAU,GAAuB;CACzC,IAAM,EACL,kBAAe,2BACf,WAAW,GACX,aACA,GAAG,MACA,GAEE,IAAY,kBAAkB,KAC9B,IAAa,EAAS,QAAQ,CAAQ,CAAC,CAAC,OAAO,OAAO,GACtD,IAAU,EAAW,WAAW;CAEtC,OACC,kBAAC,SAAD;EAAO,WAAW,EAAU,KAAK;EAAG,GAAI;YACtC,IACA,kBAAC,MAAD;GAAI,WAAU;aACb,kBAAC,MAAD;IAAI,SAAS;cACZ,kBAAC,OAAD,EAAA,UAAM,EAAkB,CAAA;GACrB,CAAA;EACD,CAAA,IAEJ;CAEK,CAAA;AAET"}
@@ -0,0 +1 @@
1
+ @layer arkyn{.arkynTableBodyEmptyLine>td{background-color:var(--background-underground);height:64px}.arkynTableBodyEmptyLine>td>div{text-align:center;white-space:nowrap;color:var(--text-body);justify-content:center;align-items:center;font-size:14px;font-weight:400;display:flex}.arkynTableBody>tr>td{height:64px;color:var(--text-body);padding-left:16px;font-size:14px;font-weight:400}.arkynTableBody>tr>td:first-child{border-top-left-radius:8px;border-bottom-left-radius:8px}.arkynTableBody>tr>td:last-child{border-top-right-radius:8px;border-bottom-right-radius:8px;padding-right:16px}.arkynTableBody>tr:nth-child(odd)>td{background-color:var(--background-underground)}.arkynTableBody>tr:nth-child(odd):hover>td{filter:brightness(.98)}.arkynTableBody>tr:nth-child(2n):hover>td{background-color:var(--background-underground);filter:brightness(.98)}html.dark .arkynTableBody>tr:nth-child(odd):hover>td{filter:brightness(1.2)}html.dark .arkynTableBody>tr:nth-child(2n):hover>td{background-color:var(--background-underground);filter:brightness(1.2)}}
@@ -14,3 +14,5 @@ function t(t) {
14
14
  }
15
15
  //#endregion
16
16
  export { t as TableCaption };
17
+
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/table/tableCaption/index.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype TableCaptionProps = HTMLAttributes<HTMLElement>;\n\n/**\n * TableCaption — title / description placed above a table. Renders as a `<caption>` element.\n *\n * Accepts all standard HTML element attributes.\n *\n * @returns TableCaption JSX element.\n *\n * @example\n * ```tsx\n * <TableContainer>\n * <TableCaption>Orders — Q2 2025</TableCaption>\n * <TableHeader>...</TableHeader>\n * <TableBody>...</TableBody>\n * </TableContainer>\n * ```\n */\n\nfunction TableCaption(props: TableCaptionProps) {\n\tconst { className: baseClassName, children, ...rest } = props;\n\tconst className = `arkynTableCaption ${baseClassName}`;\n\n\treturn (\n\t\t<caption className={className.trim()} {...rest}>\n\t\t\t<div className=\"arkynTableCaptionContent\">{children}</div>\n\t\t</caption>\n\t);\n}\n\nexport { TableCaption };\n"],"mappings":";;;AAsBA,SAAS,EAAa,GAA0B;CAC/C,IAAM,EAAE,WAAW,GAAe,aAAU,GAAG,MAAS;CAGxD,OACC,kBAAC,WAAD;EAAS,WAAW,qBAHkB,IAGR,KAAK;EAAG,GAAI;YACzC,kBAAC,OAAD;GAAK,WAAU;GAA4B;EAAc,CAAA;CACjD,CAAA;AAEX"}
@@ -0,0 +1 @@
1
+ @layer arkyn{.arkynTableCaption{margin-bottom:24px}.arkynTableCaptionContent{align-items:center;display:flex}.arkynTableCaptionContent>.rightSection{flex:2;justify-content:end;align-items:center;gap:16px;padding-left:auto;display:flex}}
@@ -11,3 +11,5 @@ function t(t) {
11
11
  }
12
12
  //#endregion
13
13
  export { t as TableContainer };
14
+
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/table/tableContainer/index.tsx"],"sourcesContent":["import type { TableHTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype TableContainerProps = TableHTMLAttributes<HTMLTableElement>;\n\n/**\n * TableContainer — root wrapper for the Table component set. Renders a responsive scrollable container around a `<table>`.\n *\n * Accepts all standard HTML `<table>` attributes.\n *\n * @returns TableContainer JSX element.\n *\n * @example\n * ```tsx\n * <TableContainer>\n * <TableCaption>Users</TableCaption>\n * <TableHeader>\n * <th>Name</th>\n * <th>Email</th>\n * <th>Status</th>\n * </TableHeader>\n * <TableBody emptyMessage=\"No users found\">\n * {users.map(u => (\n * <tr key={u.id}>\n * <td>{u.name}</td>\n * <td>{u.email}</td>\n * <td>{u.status}</td>\n * </tr>\n * ))}\n * </TableBody>\n * <TableFooter><Pagination /></TableFooter>\n * </TableContainer>\n * ```\n */\n\nfunction TableContainer(props: TableContainerProps) {\n\tconst { children, className: baseClassName, ...rest } = props;\n\tconst className = `arkynTableContainer ${baseClassName}`;\n\n\treturn (\n\t\t<div className={className.trim()} {...rest}>\n\t\t\t<table>{children}</table>\n\t\t</div>\n\t);\n}\n\nexport { TableContainer };\n"],"mappings":";;;AAmCA,SAAS,EAAe,GAA4B;CACnD,IAAM,EAAE,aAAU,WAAW,GAAe,GAAG,MAAS;CAGxD,OACC,kBAAC,OAAD;EAAK,WAAW,uBAHwB,IAGd,KAAK;EAAG,GAAI;YACrC,kBAAC,SAAD,EAAQ,YAAgB,CAAA;CACpB,CAAA;AAEP"}
@@ -0,0 +1 @@
1
+ @layer arkyn{.arkynTableContainer{flex-direction:column;width:100%;height:max-content;display:flex;overflow:auto hidden}.arkynTableContainer table{border-collapse:separate;border-spacing:0}}
@@ -17,3 +17,5 @@ function n(n) {
17
17
  }
18
18
  //#endregion
19
19
  export { n as TableFooter };
20
+
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/table/tableFooter/index.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype TableFooterProps = HTMLAttributes<HTMLTableSectionElement>;\n\n/**\n * TableFooter — `<tfoot>` section with an automatic spacing row above the content.\n *\n * Children span all columns via `colSpan={100}`. Commonly used for `Pagination`.\n * Accepts all standard HTML `<tfoot>` attributes.\n *\n * @returns TableFooter JSX element.\n *\n * @example\n * ```tsx\n * <TableFooter>\n * <Pagination currentPage={page} totalPages={totalPages} onChange={setPage} />\n * </TableFooter>\n * ```\n */\n\nfunction TableFooter(props: TableFooterProps) {\n\tconst { className: baseClassName, children, ...rest } = props;\n\tconst className = `arkynTableFooter ${baseClassName}`;\n\n\treturn (\n\t\t<tfoot className={className.trim()} {...rest}>\n\t\t\t<tr className=\"spacingRow\" />\n\t\t\t<tr>\n\t\t\t\t<th colSpan={100}>\n\t\t\t\t\t<div className=\"arkynTableFooterContent\">{children}</div>\n\t\t\t\t</th>\n\t\t\t</tr>\n\t\t</tfoot>\n\t);\n}\n\nexport { TableFooter };\n"],"mappings":";;;AAqBA,SAAS,EAAY,GAAyB;CAC7C,IAAM,EAAE,WAAW,GAAe,aAAU,GAAG,MAAS;CAGxD,OACC,kBAAC,SAAD;EAAO,WAAW,oBAHmB,IAGT,KAAK;EAAG,GAAI;YAAxC,CACC,kBAAC,MAAD,EAAI,WAAU,aAAc,CAAA,GAC5B,kBAAC,MAAD,EAAA,UACC,kBAAC,MAAD;GAAI,SAAS;aACZ,kBAAC,OAAD;IAAK,WAAU;IAA2B;GAAc,CAAA;EACrD,CAAA,EACD,CAAA,CACE;;AAET"}
@@ -0,0 +1 @@
1
+ @layer arkyn{.arkynTableFooterContent{border-top:1px solid var(--border);justify-content:space-between;align-items:center;height:48px;padding-top:16px;display:flex}.arkynTableFooter .spacingRow{height:24px}}
@@ -11,3 +11,5 @@ function n(n) {
11
11
  }
12
12
  //#endregion
13
13
  export { n as TableHeader };
14
+
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/table/tableHeader/index.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype TableHeaderProps = HTMLAttributes<HTMLTableSectionElement>;\n\n/**\n * TableHeader — `<thead>` section with an automatic spacing row below the header row.\n *\n * Pass `<th>` elements as children — they are wrapped in a `<tr>` automatically.\n * Accepts all standard HTML `<thead>` attributes.\n *\n * @returns TableHeader JSX element.\n *\n * @example\n * ```tsx\n * <TableHeader>\n * <th>Name</th>\n * <th>Email</th>\n * <th>Actions</th>\n * </TableHeader>\n * ```\n */\n\nfunction TableHeader(props: TableHeaderProps) {\n\tconst { className: baseClassName, children, ...rest } = props;\n\tconst className = `arkynTableHeader ${baseClassName}`;\n\n\treturn (\n\t\t<thead className={className.trim()} {...rest}>\n\t\t\t<tr>{children}</tr>\n\t\t\t<tr className=\"spacingRow\" />\n\t\t</thead>\n\t);\n}\n\nexport { TableHeader };\n"],"mappings":";;;AAuBA,SAAS,EAAY,GAAyB;CAC7C,IAAM,EAAE,WAAW,GAAe,aAAU,GAAG,MAAS;CAGxD,OACC,kBAAC,SAAD;EAAO,WAAW,oBAHmB,IAGT,KAAK;EAAG,GAAI;YAAxC,CACC,kBAAC,MAAD,EAAK,YAAa,CAAA,GAClB,kBAAC,MAAD,EAAI,WAAU,aAAc,CAAA,CACtB;;AAET"}
@@ -0,0 +1 @@
1
+ @layer arkyn{.arkynTableHeader th{text-align:left;background-color:var(--background-underground);height:44px;color:var(--text-heading);white-space:nowrap;padding-left:16px;font-size:14px;font-weight:600}.arkynTableHeader th:first-child{border-top-left-radius:8px;border-bottom-left-radius:8px}.arkynTableHeader th:last-child{border-top-right-radius:8px;border-bottom-right-radius:8px;padding-right:16px}.arkynTableHeader .spacingRow{height:12px}}
@@ -50,3 +50,5 @@ function l(l) {
50
50
  }
51
51
  //#endregion
52
52
  export { l as Textarea };
53
+
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/textarea/index.tsx"],"sourcesContent":["import {\n\ttype FocusEvent,\n\ttype TextareaHTMLAttributes,\n\tuseId,\n\tuseRef,\n\tuseState,\n} from \"react\";\n\nimport { useForm } from \"../../hooks/useForm\";\nimport { FieldError } from \"../fieldError\";\nimport { FieldLabel } from \"../fieldLabel\";\nimport { FieldWrapper } from \"../fieldWrapper\";\nimport \"./styles.css\";\n\ntype TextareaProps = Omit<\n\tTextareaHTMLAttributes<HTMLTextAreaElement>,\n\t\"name\" | \"value\" | \"defaultValue\"\n> & {\n\t/** Field name for form submission. Required. */\n\tname: string;\n\t/** Optional label text displayed above the textarea. */\n\tlabel?: string;\n\t/** Displays an asterisk on the label to signal a required field. */\n\tshowAsterisk?: boolean;\n\t/** Validation error message displayed below the textarea. */\n\terrorMessage?: string;\n\t/**\n\t * Textarea size.\n\t * @default \"md\"\n\t */\n\tsize?: \"md\" | \"lg\";\n\t/**\n\t * Visual style variant.\n\t * - `solid`: filled background.\n\t * - `outline`: bordered, transparent background.\n\t * @default \"solid\"\n\t */\n\tvariant?: \"solid\" | \"outline\";\n\t/** Controlled value. */\n\tvalue?: string;\n\t/** Uncontrolled default value. */\n\tdefaultValue?: string;\n};\n\n/**\n * Textarea — multi-line text input with label, validation, and form integration.\n *\n * Integrates with `useForm` to display validation errors by field name.\n *\n * @param props.name - Field name for form submission. Required.\n * @param props.label - Label text displayed above the textarea.\n * @param props.showAsterisk - Appends `*` to the label.\n * @param props.errorMessage - Validation error message.\n * @param props.size - Textarea size (`md` | `lg`). Default: \"md\"\n * @param props.variant - Visual style variant. Default: \"solid\"\n *\n * **...Other valid HTML properties for `<textarea>`**\n *\n * @returns Textarea JSX element wrapped in `FieldWrapper`.\n *\n * @example\n * ```tsx\n * // Basic\n * <Textarea name=\"description\" placeholder=\"Enter description...\" />\n *\n * // With label and validation\n * <Textarea\n * name=\"bio\"\n * label=\"Biography\"\n * showAsterisk\n * placeholder=\"Tell us about yourself\"\n * errorMessage=\"Biography is required\"\n * />\n *\n * // Controlled with custom rows\n * <Textarea\n * name=\"message\"\n * label=\"Message\"\n * value={message}\n * onChange={(e) => setMessage(e.target.value)}\n * rows={5}\n * size=\"lg\"\n * variant=\"outline\"\n * />\n * ```\n */\n\nfunction Textarea(props: TextareaProps) {\n\tconst {\n\t\tvariant = \"solid\",\n\t\tsize = \"md\",\n\t\tclassName: wrapperClassName,\n\t\terrorMessage: baseErrorMessage,\n\t\tdisabled = false,\n\t\treadOnly = false,\n\t\tlabel,\n\t\tshowAsterisk,\n\t\tname,\n\t\tonFocus,\n\t\tonBlur,\n\t\ttitle,\n\t\tstyle,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tplaceholder,\n\t\tid,\n\t\t...rest\n\t} = props;\n\n\tconst { fieldErrors } = useForm();\n\tconst [isFocused, setIsFocused] = useState(false);\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\tconst generatedId = useId();\n\tconst textareaId = id || generatedId;\n\n\tconst errorMessage = baseErrorMessage || fieldErrors?.[name];\n\tconst isError = !!errorMessage;\n\n\tconst errorClass = isError ? \"errorTrue\" : \"errorFalse\";\n\tconst opacityClass = disabled || readOnly ? \"opacityTrue\" : \"opacityFalse\";\n\tconst focusedClass = isFocused ? \"focusedTrue\" : \"focusedFalse\";\n\n\tconst className = `arkynTextarea ${variant} ${size} ${opacityClass} ${errorClass} ${focusedClass}`;\n\tconst domValue = disabled ? undefined : value;\n\n\tfunction handleSectionClick() {\n\t\tif (disabled || !textareaRef?.current) return;\n\t\tsetIsFocused(true);\n\t\ttextareaRef.current.focus();\n\t}\n\n\tfunction handleFocus(e: FocusEvent<HTMLTextAreaElement>) {\n\t\tsetIsFocused(true);\n\t\tif (onFocus) onFocus(e);\n\t}\n\n\tfunction handleBlur(e: FocusEvent<HTMLTextAreaElement>) {\n\t\tsetIsFocused(false);\n\t\tif (onBlur) onBlur(e);\n\t}\n\n\treturn (\n\t\t<FieldWrapper className={wrapperClassName}>\n\t\t\t{label && (\n\t\t\t\t<FieldLabel htmlFor={textareaId} showAsterisk={showAsterisk}>\n\t\t\t\t\t{label}\n\t\t\t\t</FieldLabel>\n\t\t\t)}\n\n\t\t\t<section\n\t\t\t\ttitle={title}\n\t\t\t\tstyle={style}\n\t\t\t\tonClick={handleSectionClick}\n\t\t\t\tclassName={className}\n\t\t\t>\n\t\t\t\t<textarea\n\t\t\t\t\tid={textareaId}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tref={textareaRef}\n\t\t\t\t\tname={name}\n\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tdefaultValue={domValue === undefined ? defaultValue || \"\" : undefined}\n\t\t\t\t\tplaceholder={disabled ? value || placeholder : placeholder}\n\t\t\t\t\tvalue={domValue}\n\t\t\t\t\t{...rest}\n\t\t\t\t/>\n\t\t\t</section>\n\t\t\t{errorMessage && <FieldError>{errorMessage}</FieldError>}\n\t\t</FieldWrapper>\n\t);\n}\n\nexport { Textarea };\n"],"mappings":";;;;;;;;AAuFA,SAAS,EAAS,GAAsB;CACvC,IAAM,EACL,aAAU,SACV,UAAO,MACP,WAAW,GACX,cAAc,GACd,cAAW,IACX,cAAW,IACX,UACA,iBACA,SACA,YACA,WACA,UACA,UACA,UACA,iBACA,gBACA,OACA,GAAG,MACA,GAEE,EAAE,mBAAgB,EAAQ,GAC1B,CAAC,GAAW,KAAgB,EAAS,EAAK,GAC1C,IAAc,EAA4B,IAAI,GAC9C,IAAc,EAAM,GACpB,IAAa,KAAM,GAEnB,IAAe,KAAoB,IAAc,IAOjD,IAAY,iBAAiB,EAAQ,GAAG,EAAK,GAH9B,KAAY,IAAW,gBAAgB,eAGO,GANjD,IAEW,cAAc,aAIsC,GAF5D,IAAY,gBAAgB,kBAG3C,IAAW,IAAW,KAAA,IAAY;CAExC,SAAS,IAAqB;EACzB,KAAY,CAAC,GAAa,YAC9B,EAAa,EAAI,GACjB,EAAY,QAAQ,MAAM;CAC3B;CAEA,SAAS,EAAY,GAAoC;EAExD,AADA,EAAa,EAAI,GACb,KAAS,EAAQ,CAAC;CACvB;CAEA,SAAS,EAAW,GAAoC;EAEvD,AADA,EAAa,EAAK,GACd,KAAQ,EAAO,CAAC;CACrB;CAEA,OACC,kBAAC,GAAD;EAAc,WAAW;YAAzB;GACE,KACA,kBAAC,GAAD;IAAY,SAAS;IAA0B;cAC7C;GACU,CAAA;GAGb,kBAAC,WAAD;IACQ;IACA;IACP,SAAS;IACE;cAEX,kBAAC,YAAD;KACC,IAAI;KACM;KACA;KACV,KAAK;KACC;KACN,SAAS;KACT,QAAQ;KACR,cAAc,MAAa,KAAA,IAAY,KAAgB,KAAK,KAAA;KAC5D,aAAa,KAAW,KAAuB;KAC/C,OAAO;KACP,GAAI;IACJ,CAAA;GACO,CAAA;GACR,KAAgB,kBAAC,GAAD,EAAA,UAAa,EAAyB,CAAA;EAC1C;;AAEhB"}
@@ -0,0 +1,7 @@
1
+ @layer arkyn{.arkynTextarea{border:1px solid #0000;border-radius:8px;outline:1px solid #0000;align-items:center;gap:8px;width:100%;padding:16px;display:flex;position:relative}.arkynTextarea:hover{cursor:text}.arkynTextarea textarea{resize:none;width:100%;color:var(--text-heading);background:0 0;border:none;outline:none}.arkynTextarea textarea::placeholder{color:var(--text-muted);line-height:130%}.arkynTextarea.opacityTrue{opacity:.5}.arkynTextarea.solid{border-color:var(--border);background-color:var(--input-background)}.arkynTextarea.solid.errorTrue{border-color:rgb(var(--spotlight-danger));outline-color:rgb(var(--spotlight-danger))}.arkynTextarea:not(.opacityTrue).solid.focusedTrue{border-color:rgb(var(--spotlight-primary));outline-color:rgb(var(--spotlight-primary))}.arkynTextarea.outline{border-color:var(--border);background-color:var(--background-foreground)}.arkynTextarea.outline.errorTrue{border-color:rgb(var(--spotlight-danger));outline-color:rgb(var(--spotlight-danger))}.arkynTextarea:not(.opacityTrue).outline.focusedTrue{border-color:rgb(var(--spotlight-primary));outline-color:rgb(var(--spotlight-primary))}.arkynTextarea.md textarea,.arkynTextarea.md textarea::placeholder{font-size:14px;font-weight:400;line-height:14px}.arkynTextarea.lg textarea,.arkynTextarea.lg textarea::placeholder{font-size:16px;font-weight:400;line-height:16px}}
2
+
3
+ @layer arkyn{.arkynFieldError{color:rgb(var(--spotlight-danger));font-size:12px;font-weight:600;line-height:12px}}
4
+
5
+ @layer arkyn{.arkynFieldLabel{color:var(--text-body);font-size:14px;font-weight:600;line-height:19.07px}.arkynFieldLabel.asteriskTrue:before{content:"* ";text-align:left;color:rgb(var(--spotlight-danger));font-size:12px;font-weight:600;line-height:16.34px}}
6
+
7
+ @layer arkyn{.arkynFieldWrapper{gap:6px;height:max-content;display:flex}.arkynFieldWrapper.horizontal{flex-direction:row;align-items:center}.arkynFieldWrapper.horizontalReverse{flex-direction:row-reverse;align-items:center;margin-right:auto}.arkynFieldWrapper.vertical{flex-direction:column;align-items:flex-start}}
@@ -33,3 +33,5 @@ function o(o) {
33
33
  }
34
34
  //#endregion
35
35
  export { o as Tooltip };
36
+
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/tooltip/index.tsx"],"sourcesContent":["import {\n\ttype HTMLAttributes,\n\ttype ReactNode,\n\tuseEffect,\n\tuseId,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport \"./styles.css\";\n\ntype TooltipProps = Omit<HTMLAttributes<HTMLDivElement>, \"children\"> & {\n\t/** Text rendered inside the tooltip bubble. Supports inline HTML. Required. */\n\ttext: string;\n\t/** Element that triggers the tooltip on hover. Required. */\n\tchildren: ReactNode;\n\t/**\n\t * Preferred position of the tooltip relative to the trigger element.\n\t * Automatically flips to the opposite side if the tooltip would overflow the viewport.\n\t * @default \"top\"\n\t */\n\torientation?: \"top\" | \"right\" | \"bottom\" | \"left\";\n\t/**\n\t * Tooltip size.\n\t * @default \"lg\"\n\t */\n\tsize?: \"md\" | \"lg\";\n};\n\n/**\n * Tooltip — shows a contextual text bubble on hover with smart viewport-aware positioning.\n *\n * The tooltip automatically flips to the opposite side when it would overflow the viewport.\n *\n * @param props.text - Text (or HTML) to display in the tooltip. Required.\n * @param props.children - Trigger element. Required.\n * @param props.orientation - Preferred position relative to the trigger. Default: \"top\"\n * @param props.size - Tooltip size. Default: \"lg\"\n *\n * **...Other valid HTML properties for `<div>`**\n *\n * @returns Tooltip JSX element.\n *\n * @example\n * ```tsx\n * <Tooltip text=\"Save changes before leaving\">\n * <IconButton icon={SaveIcon} aria-label=\"Save\" />\n * </Tooltip>\n *\n * // Toolbar with bottom-oriented tooltips\n * <Tooltip text=\"Add item\" orientation=\"bottom\">\n * <IconButton icon={Plus} aria-label=\"Add\" />\n * </Tooltip>\n *\n * <Tooltip text=\"Delete\" orientation=\"bottom\" size=\"md\">\n * <IconButton icon={Trash2} aria-label=\"Delete\" scheme=\"danger\" />\n * </Tooltip>\n * ```\n */\n\nfunction Tooltip(props: TooltipProps) {\n\tconst {\n\t\ttext,\n\t\tsize = \"lg\",\n\t\tchildren,\n\t\torientation = \"top\",\n\t\tclassName: baseClassName = \"\",\n\t\t...rest\n\t} = props;\n\n\tconst tooltipId = useId();\n\tconst tooltipRef = useRef<HTMLDivElement>(null);\n\tconst [adjustedOrientation, setAdjustedOrientation] = useState(orientation);\n\n\tuseEffect(() => {\n\t\tconst checkTooltipPosition = () => {\n\t\t\tif (!tooltipRef.current) return;\n\t\t\tconst tooltipText = document.getElementById(tooltipId) as HTMLElement;\n\t\t\tif (!tooltipText) return;\n\n\t\t\tsetAdjustedOrientation(orientation);\n\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tconst rect = tooltipText.getBoundingClientRect();\n\t\t\t\tconst viewportWidth = window.innerWidth;\n\t\t\t\tconst viewportHeight = window.innerHeight;\n\n\t\t\t\tlet newOrientation = orientation;\n\n\t\t\t\tif (orientation === \"left\" && rect.left < 0) {\n\t\t\t\t\tnewOrientation = \"right\";\n\t\t\t\t} else if (orientation === \"right\" && rect.right > viewportWidth) {\n\t\t\t\t\tnewOrientation = \"left\";\n\t\t\t\t} else if (orientation === \"top\" && rect.top < 0) {\n\t\t\t\t\tnewOrientation = \"bottom\";\n\t\t\t\t} else if (orientation === \"bottom\" && rect.bottom > viewportHeight) {\n\t\t\t\t\tnewOrientation = \"top\";\n\t\t\t\t}\n\n\t\t\t\tif (newOrientation === \"right\" && rect.right > viewportWidth) {\n\t\t\t\t\tnewOrientation = \"left\";\n\t\t\t\t} else if (newOrientation === \"left\" && rect.left < 0) {\n\t\t\t\t\tnewOrientation = \"right\";\n\t\t\t\t} else if (\n\t\t\t\t\tnewOrientation === \"bottom\" &&\n\t\t\t\t\trect.bottom > viewportHeight\n\t\t\t\t) {\n\t\t\t\t\tnewOrientation = \"top\";\n\t\t\t\t} else if (newOrientation === \"top\" && rect.top < 0) {\n\t\t\t\t\tnewOrientation = \"bottom\";\n\t\t\t\t}\n\n\t\t\t\tsetAdjustedOrientation(newOrientation);\n\t\t\t});\n\t\t};\n\n\t\tconst tooltip = tooltipRef.current;\n\t\tif (!tooltip) return;\n\n\t\tconst handleMouseEnter = () => {\n\t\t\tsetTimeout(checkTooltipPosition, 1);\n\t\t};\n\n\t\ttooltip.addEventListener(\"mouseenter\", handleMouseEnter);\n\t\twindow.addEventListener(\"resize\", checkTooltipPosition);\n\n\t\treturn () => {\n\t\t\ttooltip.removeEventListener(\"mouseenter\", handleMouseEnter);\n\t\t\twindow.removeEventListener(\"resize\", checkTooltipPosition);\n\t\t};\n\t}, [orientation, tooltipId]);\n\n\tconst className = `arkynTooltip ${size} ${adjustedOrientation} ${baseClassName}`;\n\n\treturn (\n\t\t<div className={className.trim()} {...rest} ref={tooltipRef}>\n\t\t\t{children}\n\n\t\t\t<div\n\t\t\t\tclassName=\"arkynTooltipText\"\n\t\t\t\tid={tooltipId}\n\t\t\t\tdangerouslySetInnerHTML={{ __html: text }}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nexport { Tooltip };\n"],"mappings":";;;;AA2DA,SAAS,EAAQ,GAAqB;CACrC,IAAM,EACL,SACA,UAAO,MACP,aACA,iBAAc,OACd,WAAW,IAAgB,IAC3B,GAAG,MACA,GAEE,IAAY,EAAM,GAClB,IAAa,EAAuB,IAAI,GACxC,CAAC,GAAqB,KAA0B,EAAS,CAAW;CA8D1E,OA5DA,QAAgB;EACf,IAAM,UAA6B;GAClC,IAAI,CAAC,EAAW,SAAS;GACzB,IAAM,IAAc,SAAS,eAAe,CAAS;GAChD,MAEL,EAAuB,CAAW,GAElC,4BAA4B;IAC3B,IAAM,IAAO,EAAY,sBAAsB,GACzC,IAAgB,OAAO,YACvB,IAAiB,OAAO,aAE1B,IAAiB;IAyBrB,AAvBI,MAAgB,UAAU,EAAK,OAAO,IACzC,IAAiB,UACP,MAAgB,WAAW,EAAK,QAAQ,IAClD,IAAiB,SACP,MAAgB,SAAS,EAAK,MAAM,IAC9C,IAAiB,WACP,MAAgB,YAAY,EAAK,SAAS,MACpD,IAAiB,QAGd,MAAmB,WAAW,EAAK,QAAQ,IAC9C,IAAiB,SACP,MAAmB,UAAU,EAAK,OAAO,IACnD,IAAiB,UAEjB,MAAmB,YACnB,EAAK,SAAS,IAEd,IAAiB,QACP,MAAmB,SAAS,EAAK,MAAM,MACjD,IAAiB,WAGlB,EAAuB,CAAc;GACtC,CAAC;EACF,GAEM,IAAU,EAAW;EAC3B,IAAI,CAAC,GAAS;EAEd,IAAM,UAAyB;GAC9B,WAAW,GAAsB,CAAC;EACnC;EAKA,OAHA,EAAQ,iBAAiB,cAAc,CAAgB,GACvD,OAAO,iBAAiB,UAAU,CAAoB,SAEzC;GAEZ,AADA,EAAQ,oBAAoB,cAAc,CAAgB,GAC1D,OAAO,oBAAoB,UAAU,CAAoB;EAC1D;CACD,GAAG,CAAC,GAAa,CAAS,CAAC,GAK1B,kBAAC,OAAD;EAAK,WAAW,gBAHiB,EAAK,GAAG,EAAoB,GAAG,IAGtC,KAAK;EAAG,GAAI;EAAM,KAAK;YAAjD,CACE,GAED,kBAAC,OAAD;GACC,WAAU;GACV,IAAI;GACJ,yBAAyB,EAAE,QAAQ,EAAK;EACxC,CAAA,CACG;;AAEP"}
@@ -0,0 +1 @@
1
+ @layer arkyn{.arkynTooltip{display:block;position:relative}.arkynTooltipText{visibility:hidden;opacity:0;white-space:nowrap;color:var(--tooltip-text);background-color:var(--tooltip-background);z-index:9999;border-radius:4px;justify-content:center;align-items:center;font-weight:400;transition:all .15s ease-out;display:flex;position:absolute;transform:translate(-50%,-50%)}.arkynTooltip.lg .arkynTooltipText{padding:8px 12px;font-size:14px;line-height:130%}.arkynTooltip.md .arkynTooltipText{padding:8px 12px;font-size:12px;line-height:130%}.arkynTooltip:hover .arkynTooltipText{opacity:1;visibility:visible}.arkynTooltip.top .arkynTooltipText{bottom:calc(100% + 10px);left:50%;transform:translate(-50%)}.arkynTooltip.top .arkynTooltipText:before{content:"";border-style:solid;border-color:var(--tooltip-background) transparent;border-width:6px 6px 0;position:absolute;top:100%;bottom:20px;left:50%;transform:translate(-50%)}.arkynTooltip.left .arkynTooltipText{top:50%;right:calc(100% + 10px);transform:translateY(-50%)}.arkynTooltip.left .arkynTooltipText:before{content:"";border-style:solid;border-color:transparent var(--tooltip-background);border-width:6px 0 6px 6px;position:absolute;top:50%;left:100%;transform:translateY(-50%)}.arkynTooltip.right .arkynTooltipText{top:50%;left:calc(100% + 10px);transform:translateY(-50%)}.arkynTooltip.right .arkynTooltipText:before{content:"";border-style:solid;border-color:transparent var(--tooltip-background);border-width:6px 6px 6px 0;position:absolute;top:50%;left:0;transform:translate(-100%,-50%)}.arkynTooltip.bottom .arkynTooltipText{top:calc(100% + 10px);left:50%;transform:translate(-50%)}.arkynTooltip.bottom .arkynTooltipText:before{content:"";border-style:solid;border-color:var(--tooltip-background) transparent;border-width:0 6px 6px;position:absolute;top:0;left:50%;transform:translate(-50%,-100%)}}
@@ -43,3 +43,5 @@ function s(s) {
43
43
  }
44
44
  //#endregion
45
45
  export { s as useAutomation };
46
+
47
+ //# sourceMappingURL=useAutomation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutomation.js","names":[],"sources":["../../../src/hooks/useAutomation.ts"],"sourcesContent":["import { useCallback, useEffect } from \"react\";\nimport { scroller } from \"react-scroll\";\nimport { badResponses } from \"../templates/badResponses\";\nimport { successResponses } from \"../templates/successResponses\";\nimport { useModal } from \"./useModal\";\nimport { useToast } from \"./useToast\";\n\n/**\n * useAutomation — runs UI side-effects (close modals, scroll, toast) in response to a server action payload.\n *\n * Pass the raw response from a form submission. On every change the hook:\n * 1. Closes all open modals if `closeModal` is `true`.\n * 2. Smooth-scrolls to a named element if `cause.data.scrollTo` is set.\n * 3. Shows a toast based on `name` (matched against `successResponses`/`badResponses`) and `message`.\n * When `cause.fieldErrors` is present, the first field error takes priority in the toast.\n * The message `\"Unprocessable entity\"` is intentionally suppressed.\n *\n * @param formResponseData - Raw server response payload.\n * @param formResponseData.closeModal - Closes all open modals when `true`.\n * @param formResponseData.name - Response identifier matched against success/bad response lists.\n * @param formResponseData.message - Text shown in the toast notification.\n * @param formResponseData.cause.data.scrollTo - Element name to scroll to via `react-scroll`.\n * @param formResponseData.cause.fieldErrors - Field-level errors; the first value is shown in the toast.\n *\n * @example\n * ```tsx\n * // After a successful create action\n * useAutomation({ closeModal: true, name: \"created\", message: \"Saved successfully\" });\n * ```\n *\n * @example\n * ```tsx\n * // Validation error with field-level feedback and scroll\n * useAutomation({\n * name: \"validation_error\",\n * message: \"Invalid payload\",\n * cause: {\n * data: { scrollTo: \"email\" },\n * fieldErrors: { email: \"E-mail is required\" },\n * },\n * });\n * ```\n */\n\n// biome-ignore lint/suspicious/noExplicitAny: intentional\nfunction useAutomation(formResponseData: any) {\n\tconst { closeAll } = useModal();\n\tconst { showToast } = useToast();\n\n\tconst closeModal = formResponseData?.closeModal;\n\tconst message = formResponseData?.message;\n\tconst name = formResponseData?.name;\n\tconst scrollTo = formResponseData?.cause?.data?.scrollTo;\n\tconst firstErrorField = formResponseData?.cause?.fieldErrors\n\t\t? (Object.values(formResponseData?.cause?.fieldErrors)[0] as string)\n\t\t: null;\n\n\tconst fireToast = useCallback(() => {\n\t\tif (!message && !firstErrorField) return;\n\n\t\tif (successResponses.includes(name))\n\t\t\treturn showToast({ message, type: \"success\" });\n\n\t\tif (!badResponses.includes(name)) return;\n\t\tif (firstErrorField)\n\t\t\treturn showToast({ message: firstErrorField, type: \"danger\" });\n\n\t\tif (message === \"Unprocessable entity\") return;\n\t\treturn showToast({ message, type: \"danger\" });\n\t}, [message, firstErrorField, name, showToast]);\n\n\tuseEffect(() => {\n\t\tif (closeModal) closeAll();\n\t\tif (scrollTo) scroller.scrollTo(scrollTo, { smooth: true, offset: 20 });\n\t\tfireToast();\n\t}, [closeModal, scrollTo, fireToast, closeAll]);\n}\n\nexport { useAutomation };\n"],"mappings":";;;;;;;AA6CA,SAAS,EAAc,GAAuB;CAC7C,IAAM,EAAE,gBAAa,EAAS,GACxB,EAAE,iBAAc,EAAS,GAEzB,IAAa,GAAkB,YAC/B,IAAU,GAAkB,SAC5B,IAAO,GAAkB,MACzB,IAAW,GAAkB,OAAO,MAAM,UAC1C,IAAkB,GAAkB,OAAO,cAC7C,OAAO,OAAO,GAAkB,OAAO,WAAW,CAAC,CAAC,KACrD,MAEG,IAAY,QAAkB;EAC/B,OAAC,KAAW,CAAC,IAEjB;OAAI,EAAiB,SAAS,CAAI,GACjC,OAAO,EAAU;IAAE;IAAS,MAAM;GAAU,CAAC;GAEzC,MAAa,SAAS,CAAI,GAC/B;QAAI,GACH,OAAO,EAAU;KAAE,SAAS;KAAiB,MAAM;IAAS,CAAC;IAE1D,UAAY,wBAChB,OAAO,EAAU;KAAE;KAAS,MAAM;IAAS,CAAC;GAHkB;EAJhB;CAQ/C,GAAG;EAAC;EAAS;EAAiB;EAAM;CAAS,CAAC;CAE9C,QAAgB;EAGf,AAFI,KAAY,EAAS,GACrB,KAAU,EAAS,SAAS,GAAU;GAAE,QAAQ;GAAM,QAAQ;EAAG,CAAC,GACtE,EAAU;CACX,GAAG;EAAC;EAAY;EAAU;EAAW;CAAQ,CAAC;AAC/C"}
@@ -16,3 +16,5 @@ function n(n) {
16
16
  }
17
17
  //#endregion
18
18
  export { n as useDrawer };
19
+
20
+ //# sourceMappingURL=useDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDrawer.js","names":[],"sources":["../../../src/hooks/useDrawer.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport {\n\ttype DrawerContextProps,\n\tdrawerContext,\n} from \"../providers/drawerProvider\";\n\n// biome-ignore lint/suspicious/noExplicitAny: intentional\ntype OpenDrawerProps<T = any> = (data?: T) => void;\n\n/**\n * useDrawer — accesses the nearest `DrawerProvider` context.\n *\n * Two call signatures:\n * - **Without `key`** — returns the raw context object (manage any drawer by name).\n * - **With `key`** — returns a scoped object bound to one named drawer.\n *\n * @param key - Drawer identifier registered in `DrawerProvider`.\n *\n * @returns Without key: full `DrawerContextProps`. With key: `{ drawerIsOpen, drawerData, openDrawer, closeDrawer }`.\n *\n * @throws If called outside a `DrawerProvider`.\n *\n * @example\n * ```tsx\n * // Scoped to one drawer — the most common pattern\n * const { drawerIsOpen, drawerData, openDrawer, closeDrawer } = useDrawer<{ section: string }>('navigation');\n *\n * openDrawer({ section: 'products' });\n * ```\n *\n * @example\n * ```tsx\n * // Full context — useful when triggering multiple different drawers from one place\n * const { openDrawer } = useDrawer();\n *\n * openDrawer('navigation', { section: 'main' });\n * openDrawer('filters', { category: 'electronics' });\n * ```\n */\n\n// biome-ignore lint/suspicious/noExplicitAny: intentional\nfunction useDrawer<T = any>(): DrawerContextProps<T>;\n// biome-ignore lint/suspicious/noExplicitAny: intentional\nfunction useDrawer<T = any>(\n\tkey: string,\n): {\n\tdrawerIsOpen: boolean;\n\tdrawerData: T;\n\topenDrawer: OpenDrawerProps<T>;\n\tcloseDrawer: () => void;\n};\n\nfunction useDrawer(key?: string) {\n\tconst contextData = useContext(drawerContext);\n\n\tif (Object.entries(contextData).length === 0) {\n\t\tthrow new Error(\"useDrawer must be used within a Provider\");\n\t}\n\n\tif (key) {\n\t\tconst {\n\t\t\tdrawerData: contextDrawerData,\n\t\t\tdrawerIsOpen: contextDrawerIsOpen,\n\t\t\topenDrawer: contextOpenDrawer,\n\t\t\tcloseDrawer: contextCloseDrawer,\n\t\t} = contextData;\n\n\t\tconst drawerIsOpen = contextDrawerIsOpen(key);\n\t\tconst drawerData = contextDrawerData(key);\n\n\t\tconst openDrawer: OpenDrawerProps = (data) => contextOpenDrawer(key, data);\n\t\tconst closeDrawer = () => contextCloseDrawer(key);\n\n\t\treturn { drawerIsOpen, drawerData, openDrawer, closeDrawer };\n\t} else {\n\t\treturn contextData;\n\t}\n}\n\nexport { useDrawer };\n"],"mappings":";;;AAoDA,SAAS,EAAU,GAAc;CAChC,IAAM,IAAc,EAAW,CAAa;CAE5C,IAAI,OAAO,QAAQ,CAAW,CAAC,CAAC,WAAW,GAC1C,MAAU,MAAM,0CAA0C;CAG3D,IAAI,GAAK;EACR,IAAM,EACL,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,aAAa,MACV;EAQJ,OAAO;GAAE,cANY,EAAoB,CAMhC;GAAc,YALJ,EAAkB,CAKd;GAAY,aAHE,MAAS,EAAkB,GAAK,CAAI;GAG1B,mBAFrB,EAAmB,CAAG;EAEW;CAC5D,OACC,OAAO;AAET"}
@@ -6,3 +6,5 @@ function n() {
6
6
  }
7
7
  //#endregion
8
8
  export { n as useForm };
9
+
10
+ //# sourceMappingURL=useForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useForm.js","names":[],"sources":["../../../src/hooks/useForm.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { formContext } from \"../providers/formProvider\";\n\n/**\n * useForm — reads the nearest `FormProvider` context to access field-level validation errors.\n *\n * All form inputs (`Input`, `Select`, `Checkbox`, etc.) call this hook internally,\n * so you rarely need it directly. Use it when you want to read errors outside of\n * an input component, or build a custom input.\n *\n * @returns Form context containing:\n * - `fieldErrors` — `Record<string, string>` mapping field names to error messages.\n *\n * @example\n * ```tsx\n * // Wrapping a form with FormProvider\n * function App() {\n * return (\n * <FormProvider fieldErrors={{ email: \"Invalid email\" }}>\n * <MyForm />\n * </FormProvider>\n * );\n * }\n *\n * // Reading errors manually\n * function CustomField() {\n * const { fieldErrors } = useForm();\n * return <span>{fieldErrors?.username}</span>;\n * }\n * ```\n */\n\nfunction useForm() {\n\tconst context = useContext(formContext);\n\treturn context;\n}\n\nexport { useForm };\n"],"mappings":";;;AAgCA,SAAS,IAAU;CAElB,OADgB,EAAW,CACpB;AACR"}
@@ -8,3 +8,5 @@ function n() {
8
8
  }
9
9
  //#endregion
10
10
  export { n as useHydrated };
11
+
12
+ //# sourceMappingURL=useHydrated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHydrated.js","names":[],"sources":["../../../src/hooks/useHydrated.ts"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\n\nfunction subscribe() {\n\treturn () => {};\n}\n\n/**\n * useHydrated — returns `true` once the component has hydrated on the client, `false` during SSR.\n *\n * Built on `useSyncExternalStore` so it is safe with React 18 concurrent rendering.\n * Use this when you need to defer client-only rendering (e.g. browser APIs, `window`, `navigator`)\n * without causing a hydration mismatch. For most cases, prefer the `ClientOnly` component.\n *\n * @returns `true` on the client after hydration; `false` on the server.\n *\n * @example\n * ```tsx\n * function Map() {\n * const isHydrated = useHydrated();\n * if (!isHydrated) return <Skeleton />;\n * return <MapView accessToken={token} coordinates={coords} />;\n * }\n * ```\n */\n\nfunction useHydrated() {\n\treturn useSyncExternalStore(\n\t\tsubscribe,\n\t\t() => true,\n\t\t() => false,\n\t);\n}\n\nexport { useHydrated };\n"],"mappings":";;AAEA,SAAS,IAAY;CACpB,aAAa,CAAC;AACf;AAqBA,SAAS,IAAc;CACtB,OAAO,EACN,SACM,UACA,EACP;AACD"}
@@ -16,3 +16,5 @@ function n(n) {
16
16
  }
17
17
  //#endregion
18
18
  export { n as useModal };
19
+
20
+ //# sourceMappingURL=useModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModal.js","names":[],"sources":["../../../src/hooks/useModal.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport {\n\ttype ModalContextProps,\n\tmodalContext,\n} from \"../providers/modalProvider\";\n\n// biome-ignore lint/suspicious/noExplicitAny: intentional\ntype OpenModalProps<T = any> = (data?: T) => void;\n\n/**\n * useModal — accesses the nearest `ModalProvider` context.\n *\n * Two call signatures:\n * - **Without `key`** — returns the raw context object (manage any modal by name).\n * - **With `key`** — returns a scoped object bound to one named modal.\n *\n * @param key - Modal identifier registered in `ModalProvider`.\n *\n * @returns Without key: full `ModalContextProps`. With key: `{ modalIsOpen, modalData, openModal, closeModal }`.\n *\n * @throws If called outside a `ModalProvider`.\n *\n * @example\n * ```tsx\n * // Scoped to one modal — the most common pattern\n * const { modalIsOpen, modalData, openModal, closeModal } = useModal<{ id: number }>('confirm-delete');\n *\n * openModal({ id: user.id });\n * ```\n *\n * @example\n * ```tsx\n * // Full context — useful when triggering multiple different modals from one place\n * const { openModal } = useModal();\n *\n * openModal('confirm-delete', { id: user.id });\n * openModal('user-details', { id: user.id });\n * ```\n */\n\n// biome-ignore lint/suspicious/noExplicitAny: intentional\nfunction useModal<T = any>(): ModalContextProps<T>;\n// biome-ignore lint/suspicious/noExplicitAny: intentional\nfunction useModal<T = any>(\n\tkey: string,\n): {\n\tmodalIsOpen: boolean;\n\tmodalData: T;\n\topenModal: OpenModalProps<T>;\n\tcloseModal: () => void;\n};\n\nfunction useModal(key?: string) {\n\tconst contextData = useContext(modalContext);\n\n\tif (Object.entries(contextData).length === 0) {\n\t\tthrow new Error(\"useModal must be used within a Provider\");\n\t}\n\n\tif (key) {\n\t\tconst {\n\t\t\tmodalData: contextModalData,\n\t\t\tmodalIsOpen: contextModalIsOpen,\n\t\t\topenModal: contextOpenModal,\n\t\t\tcloseModal: contextCloseModal,\n\t\t} = contextData;\n\n\t\tconst modalIsOpen = contextModalIsOpen(key);\n\t\tconst modalData = contextModalData(key);\n\n\t\tconst openModal: OpenModalProps = (data) => contextOpenModal(key, data);\n\t\tconst closeModal = () => contextCloseModal(key);\n\n\t\treturn { modalIsOpen, modalData, openModal, closeModal };\n\t} else {\n\t\treturn contextData;\n\t}\n}\n\nexport { useModal };\n"],"mappings":";;;AAoDA,SAAS,EAAS,GAAc;CAC/B,IAAM,IAAc,EAAW,CAAY;CAE3C,IAAI,OAAO,QAAQ,CAAW,CAAC,CAAC,WAAW,GAC1C,MAAU,MAAM,yCAAyC;CAG1D,IAAI,GAAK;EACR,IAAM,EACL,WAAW,GACX,aAAa,GACb,WAAW,GACX,YAAY,MACT;EAQJ,OAAO;GAAE,aANW,EAAmB,CAM9B;GAAa,WALJ,EAAiB,CAKb;GAAW,YAHE,MAAS,EAAiB,GAAK,CAAI;GAG1B,kBAFnB,EAAkB,CAAG;EAES;CACxD,OACC,OAAO;AAET"}
@@ -16,3 +16,5 @@ function e(e, t = "") {
16
16
  }
17
17
  //#endregion
18
18
  export { e as useScopedParams };
19
+
20
+ //# sourceMappingURL=useScopedParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScopedParams.js","names":[],"sources":["../../../src/hooks/useScopedParams.ts"],"sourcesContent":["type ParamsType = Record<string, string | number | boolean | undefined>;\n\n/**\n * useScopedParams — reads and writes URL search parameters with an optional namespace prefix.\n *\n * When `scope` is provided, every key is namespaced as `scope:key`, so multiple features\n * can share the same URL without collisions (e.g. `filters:status` and `table:page`).\n *\n * @param searchString - Current URL search string (e.g. `location.search`).\n * @param scope - Namespace prefix. Default: `\"\"` (no prefix).\n *\n * @returns\n * - `getParam(key)` — returns the (scoped) param value, or `null` if absent.\n * - `getScopedSearch(params)` — merges `params` into the existing search string and returns the result.\n * Pass `undefined` as a value to delete that param.\n *\n * @example\n * ```tsx\n * // Without scope — plain key/value params\n * const { getParam, getScopedSearch } = useScopedParams(location.search);\n * getParam('page'); // \"1\"\n * getScopedSearch({ page: 2, sort: 'name' }); // \"?page=2&sort=name\"\n * ```\n *\n * @example\n * ```tsx\n * // With scope — all keys prefixed as \"filters:key\"\n * const { getParam, getScopedSearch } = useScopedParams(location.search, 'filters');\n * getParam('status'); // reads \"filters:status\"\n * getScopedSearch({ status: 'active', category: undefined }); // removes \"filters:category\"\n * ```\n */\n\nfunction useScopedParams(searchString: string, scope: string = \"\") {\n\tconst searchParams = new URLSearchParams(searchString);\n\tconst prefix = scope ? `${scope}:` : \"\";\n\n\tconst updateSearchParams = (params: ParamsType) => {\n\t\tObject.entries(params).forEach(([key, value]) => {\n\t\t\tif (value === undefined) {\n\t\t\t\tsearchParams.delete(`${prefix}${key}`);\n\t\t\t} else {\n\t\t\t\tsearchParams.set(`${prefix}${key}`, String(value));\n\t\t\t}\n\t\t});\n\t};\n\n\treturn {\n\t\tgetParam: (key: string) => searchParams.get(`${prefix}${key}`),\n\t\tgetScopedSearch: (params: ParamsType) => {\n\t\t\tupdateSearchParams(params);\n\t\t\tlet search = searchParams.toString();\n\t\t\tif (search) search = `?${search}`;\n\t\t\treturn search;\n\t\t},\n\t};\n}\n\nexport { useScopedParams };\n"],"mappings":";AAiCA,SAAS,EAAgB,GAAsB,IAAgB,IAAI;CAClE,IAAM,IAAe,IAAI,gBAAgB,CAAY,GAC/C,IAAS,IAAQ,GAAG,EAAM,KAAK,IAE/B,KAAsB,MAAuB;EAClD,OAAO,QAAQ,CAAM,CAAC,CAAC,SAAS,CAAC,GAAK,OAAW;GAChD,AAAI,MAAU,KAAA,IACb,EAAa,OAAO,GAAG,IAAS,GAAK,IAErC,EAAa,IAAI,GAAG,IAAS,KAAO,OAAO,CAAK,CAAC;EAEnD,CAAC;CACF;CAEA,OAAO;EACN,WAAW,MAAgB,EAAa,IAAI,GAAG,IAAS,GAAK;EAC7D,kBAAkB,MAAuB;GACxC,EAAmB,CAAM;GACzB,IAAI,IAAS,EAAa,SAAS;GAEnC,OADA,AAAY,MAAS,IAAI,KAClB;EACR;CACD;AACD"}
@@ -19,3 +19,5 @@ function n(n) {
19
19
  }
20
20
  //#endregion
21
21
  export { n as useScrollLock };
22
+
23
+ //# sourceMappingURL=useScrollLock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollLock.js","names":[],"sources":["../../../src/hooks/useScrollLock.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\nfunction getScrollbarWidth(): number {\n\tif (typeof window === \"undefined\") return 0;\n\treturn window.innerWidth - document.documentElement.clientWidth;\n}\n\n/**\n * useScrollLock — locks `document.body` scroll while an overlay is open.\n *\n * Compensates for the scrollbar width by adding equivalent `paddingRight`,\n * preventing layout shift when the scrollbar disappears.\n * Restores the original `overflow` and `paddingRight` when `isLocked` becomes `false`.\n *\n * Used internally by `Modal` and `Drawer` — you usually don't need this directly\n * unless building a custom overlay.\n *\n * @param isLocked - When `true`, body scroll is disabled.\n *\n * @example\n * ```tsx\n * function CustomOverlay({ isOpen }) {\n * useScrollLock(isOpen);\n * return isOpen ? <div className=\"overlay\">...</div> : null;\n * }\n * ```\n */\n\nfunction useScrollLock(isLocked: boolean): void {\n\tuseEffect(() => {\n\t\tif (isLocked) {\n\t\t\tconst originalOverflow = document.body.style.overflow;\n\t\t\tconst originalPaddingRight = document.body.style.paddingRight;\n\n\t\t\tconst scrollbarWidth = getScrollbarWidth();\n\n\t\t\tif (scrollbarWidth > 0) {\n\t\t\t\tconst computedStyle = window.getComputedStyle(document.body);\n\t\t\t\tconst existingPaddingRight =\n\t\t\t\t\tparseInt(computedStyle.paddingRight, 10) || 0;\n\n\t\t\t\tdocument.body.style.paddingRight = `${\n\t\t\t\t\texistingPaddingRight + scrollbarWidth\n\t\t\t\t}px`;\n\t\t\t}\n\n\t\t\tdocument.body.style.overflow = \"hidden\";\n\n\t\t\treturn () => {\n\t\t\t\tdocument.body.style.overflow = originalOverflow;\n\t\t\t\tdocument.body.style.paddingRight = originalPaddingRight;\n\t\t\t};\n\t\t}\n\t}, [isLocked]);\n}\n\nexport { useScrollLock };\n"],"mappings":";;AAEA,SAAS,IAA4B;CAEpC,OADI,OAAO,SAAW,MAAoB,IACnC,OAAO,aAAa,SAAS,gBAAgB;AACrD;AAuBA,SAAS,EAAc,GAAyB;CAC/C,QAAgB;EACf,IAAI,GAAU;GACb,IAAM,IAAmB,SAAS,KAAK,MAAM,UACvC,IAAuB,SAAS,KAAK,MAAM,cAE3C,IAAiB,EAAkB;GAEzC,IAAI,IAAiB,GAAG;IACvB,IAAM,IAAgB,OAAO,iBAAiB,SAAS,IAAI,GACrD,IACL,SAAS,EAAc,cAAc,EAAE,KAAK;IAE7C,SAAS,KAAK,MAAM,eAAe,GAClC,IAAuB,EACvB;GACF;GAIA,OAFA,SAAS,KAAK,MAAM,WAAW,gBAElB;IAEZ,AADA,SAAS,KAAK,MAAM,WAAW,GAC/B,SAAS,KAAK,MAAM,eAAe;GACpC;EACD;CACD,GAAG,CAAC,CAAQ,CAAC;AACd"}
@@ -32,3 +32,5 @@ function o(o, s = "") {
32
32
  }
33
33
  //#endregion
34
34
  export { o as useSearchAutomation };
35
+
36
+ //# sourceMappingURL=useSearchAutomation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSearchAutomation.js","names":[],"sources":["../../../src/hooks/useSearchAutomation.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { badResponses } from \"../templates/badResponses\";\nimport { successResponses } from \"../templates/successResponses\";\nimport { useModal } from \"./useModal\";\nimport { useScopedParams } from \"./useScopedParams\";\nimport { useToast } from \"./useToast\";\n\n/**\n * useSearchAutomation — URL-driven version of `useAutomation`. Reads automation params from a\n * URL search string and executes the same side-effects (close modals, toast) on every change.\n *\n * Reads the following params (optionally prefixed by `scope:`):\n * - `closeModal=true` — closes all open modals.\n * - `message` — text for the toast notification.\n * - `type` — `\"success\"` or `\"danger\"` toast style.\n * - `name` — response identifier matched against `successResponses`/`badResponses` lists.\n *\n * @param searchString - Raw URL search string (e.g. `location.search`).\n * @param scope - Optional prefix for all params. Default: `\"\"` (no prefix).\n *\n * @example\n * ```tsx\n * // Remix / Next.js Server Action that redirects with search params\n * // redirect(\"?closeModal=true&message=Saved!&type=success\")\n * const [searchParams] = useSearchParams();\n * useSearchAutomation(searchParams.toString());\n * ```\n *\n * @example\n * ```tsx\n * // Scoped params — avoids collisions when multiple features share the URL\n * // redirect(\"?filters:closeModal=true&filters:message=Applied!&filters:type=success\")\n * useSearchAutomation(location.search, \"filters\");\n * ```\n */\n\nfunction useSearchAutomation(searchString: string, scope: string = \"\") {\n\tconst { closeAll } = useModal();\n\tconst { showToast } = useToast();\n\n\tconst { getParam } = useScopedParams(searchString, scope);\n\n\tconst closeModal = getParam(\"closeModal\") === \"true\";\n\tconst message = getParam(\"message\");\n\tconst name = getParam(\"name\");\n\tconst type = getParam(\"type\") as \"success\" | \"danger\" | null;\n\n\tuseEffect(() => {\n\t\tif (closeModal) closeAll();\n\t\tif (message) {\n\t\t\tif (type === \"success\") showToast({ message, type: \"success\" });\n\t\t\tif (type === \"danger\") showToast({ message, type: \"danger\" });\n\n\t\t\tif (\n\t\t\t\tname &&\n\t\t\t\tbadResponses.includes(name) &&\n\t\t\t\t!badResponses.includes(message)\n\t\t\t) {\n\t\t\t\tshowToast({ message, type: \"danger\" });\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tname &&\n\t\t\t\tsuccessResponses.includes(name) &&\n\t\t\t\t!successResponses.includes(message)\n\t\t\t) {\n\t\t\t\tshowToast({ message, type: \"success\" });\n\t\t\t}\n\t\t}\n\t}, [closeModal, message, name, type, showToast, closeAll]);\n}\n\nexport { useSearchAutomation };\n"],"mappings":";;;;;;;AAoCA,SAAS,EAAoB,GAAsB,IAAgB,IAAI;CACtE,IAAM,EAAE,gBAAa,EAAS,GACxB,EAAE,iBAAc,EAAS,GAEzB,EAAE,gBAAa,EAAgB,GAAc,CAAK,GAElD,IAAa,EAAS,YAAY,MAAM,QACxC,IAAU,EAAS,SAAS,GAC5B,IAAO,EAAS,MAAM,GACtB,IAAO,EAAS,MAAM;CAE5B,QAAgB;EAEf,AADI,KAAY,EAAS,GACrB,MACC,MAAS,aAAW,EAAU;GAAE;GAAS,MAAM;EAAU,CAAC,GAC1D,MAAS,YAAU,EAAU;GAAE;GAAS,MAAM;EAAS,CAAC,GAG3D,KACA,EAAa,SAAS,CAAI,KAC1B,CAAC,EAAa,SAAS,CAAO,KAE9B,EAAU;GAAE;GAAS,MAAM;EAAS,CAAC,GAIrC,KACA,EAAiB,SAAS,CAAI,KAC9B,CAAC,EAAiB,SAAS,CAAO,KAElC,EAAU;GAAE;GAAS,MAAM;EAAU,CAAC;CAGzC,GAAG;EAAC;EAAY;EAAS;EAAM;EAAM;EAAW;CAAQ,CAAC;AAC1D"}
@@ -12,3 +12,5 @@ function t(t) {
12
12
  }
13
13
  //#endregion
14
14
  export { t as useSlider };
15
+
16
+ //# sourceMappingURL=useSlider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSlider.js","names":[],"sources":["../../../src/hooks/useSlider.ts"],"sourcesContent":["import { useState } from \"react\";\n\ntype UseSliderReturnProps = [number, (number: number) => void];\n\n/**\n * useSlider — state manager for the `Slider` component. Clamps values to `[0, 100]`.\n *\n * @param defaultValue - Initial percentage value (0–100). Default: 0\n *\n * @returns `[value, setValue]` — current percentage and a setter that clamps at the boundaries.\n *\n * @example\n * ```tsx\n * const [volume, setVolume] = useSlider(50);\n * return <Slider value={volume} onChange={setVolume} />;\n * ```\n */\n\nfunction useSlider(defaultValue?: number): UseSliderReturnProps {\n\tfunction getDefaultValue() {\n\t\tif (!defaultValue) return 0;\n\t\tif (defaultValue <= 0) return 0;\n\t\tif (defaultValue >= 100) return 100;\n\t\treturn defaultValue;\n\t}\n\n\tconst [sliderValue, setSliderValue] = useState(getDefaultValue());\n\n\tfunction changeSliderValue(value: number) {\n\t\tif (value <= 0) return setSliderValue(0);\n\t\tif (value >= 100) return setSliderValue(100);\n\t\treturn setSliderValue(value);\n\t}\n\n\treturn [sliderValue, changeSliderValue];\n}\n\nexport { useSlider };\n"],"mappings":";;AAkBA,SAAS,EAAU,GAA6C;CAC/D,SAAS,IAAkB;EAI1B,OAHI,CAAC,KACD,KAAgB,IAAU,IAC1B,KAAgB,MAAY,MACzB;CACR;CAEA,IAAM,CAAC,GAAa,KAAkB,EAAS,EAAgB,CAAC;CAEhE,SAAS,EAAkB,GAAe;EAGzC,OAFuB,EAAnB,KAAS,IAAyB,IAClC,KAAS,MAA2B,MAClB,CAFiB;CAGxC;CAEA,OAAO,CAAC,GAAa,CAAiB;AACvC"}
@@ -8,3 +8,5 @@ function n() {
8
8
  }
9
9
  //#endregion
10
10
  export { n as useToast };
11
+
12
+ //# sourceMappingURL=useToast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToast.js","names":[],"sources":["../../../src/hooks/useToast.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { toastContext } from \"../providers/toastProvider\";\n\n/**\n * useToast — reads `ToastProvider` context to display toast notifications.\n *\n * @returns Context containing `showToast(options)`.\n *\n * @throws If called outside a `ToastProvider`.\n *\n * @example\n * ```tsx\n * const { showToast } = useToast();\n *\n * // After a successful save\n * showToast({ message: \"Changes saved!\", type: \"success\" });\n *\n * // After a failed request\n * showToast({ message: \"Failed to save changes.\", type: \"danger\" });\n * ```\n */\n\nfunction useToast() {\n\tconst contextData = useContext(toastContext);\n\n\tif (Object.entries(contextData).length === 0) {\n\t\tthrow new Error(\"useToast must be used within a Provider\");\n\t}\n\n\treturn contextData;\n}\n\nexport { useToast };\n"],"mappings":";;;AAsBA,SAAS,IAAW;CACnB,IAAM,IAAc,EAAW,CAAY;CAE3C,IAAI,OAAO,QAAQ,CAAW,CAAC,CAAC,WAAW,GAC1C,MAAU,MAAM,yCAAyC;CAG1D,OAAO;AACR"}
@@ -34,3 +34,5 @@ function i(e) {
34
34
  }
35
35
  //#endregion
36
36
  export { i as DrawerProvider, r as drawerContext };
37
+
38
+ //# sourceMappingURL=drawerProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawerProvider.js","names":[],"sources":["../../../src/providers/drawerProvider.tsx"],"sourcesContent":["import { createContext, type ReactNode, useState } from \"react\";\n\n// biome-ignore lint/suspicious/noExplicitAny: intentional\ntype DrawerContextProps<T = any> = {\n\tdrawerIsOpen(key: string): boolean;\n\tdrawerData(key: string): T;\n\topenDrawer(key: string, data?: T): void;\n\tcloseDrawer(key: string): void;\n};\n\ntype OpenedDrawers = {\n\tkey: string;\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\tdata?: any;\n}[];\n\ntype DrawerProviderProps = {\n\tchildren: ReactNode;\n\tenableDrawerAutomation?: boolean;\n};\n\nconst drawerContext = createContext({} as DrawerContextProps);\n\n/**\n * DrawerProvider — context provider that manages open/close state and data for named drawers.\n *\n * Wrap your app (or a subtree) with this once. Any component in the tree can then call\n * `useDrawer(key)` to open, close, or read data for a specific drawer.\n *\n * @param props.children - Components that will have access to drawer context.\n *\n * @returns DrawerProvider JSX element.\n *\n * @example\n * ```tsx\n * // In your root layout\n * <DrawerProvider>\n * <App />\n * </DrawerProvider>\n *\n * // Opening a drawer from anywhere in the tree\n * const { openDrawer } = useDrawer();\n * openDrawer('filters', { category: 'electronics' });\n *\n * // Consuming in the drawer component\n * const { drawerIsOpen, drawerData, closeDrawer } = useDrawer<{ category: string }>('filters');\n * ```\n */\n\nfunction DrawerProvider(args: DrawerProviderProps) {\n\tconst { children = false } = args;\n\tconst [openedDrawers, setOpenedDrawers] = useState<OpenedDrawers>([]);\n\n\tfunction drawerIsOpen(key: string) {\n\t\treturn !!openedDrawers.some((drawer) => drawer.key === key);\n\t}\n\n\tfunction drawerData(key: string) {\n\t\treturn openedDrawers.find((drawer) => drawer.key === key)?.data;\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\tfunction openDrawer(key: string, data?: any) {\n\t\tconst alreadyExist = drawerIsOpen(key);\n\t\tif (alreadyExist) {\n\t\t\tsetOpenedDrawers((old) => {\n\t\t\t\tconst filtered = old.filter((drawer) => drawer.key !== key);\n\t\t\t\treturn [...filtered, { key, data }];\n\t\t\t});\n\t\t} else setOpenedDrawers([...openedDrawers, { key, data }]);\n\t}\n\n\tfunction closeDrawer(key: string) {\n\t\tsetOpenedDrawers(openedDrawers.filter((drawer) => drawer.key !== key));\n\t}\n\n\treturn (\n\t\t<drawerContext.Provider\n\t\t\tvalue={{ drawerIsOpen, drawerData, openDrawer, closeDrawer }}\n\t\t>\n\t\t\t{children}\n\t\t</drawerContext.Provider>\n\t);\n}\n\nexport { type DrawerContextProps, DrawerProvider, drawerContext };\n"],"mappings":";;;AAqBA,IAAM,IAAgB,EAAc,CAAC,CAAuB;AA4B5D,SAAS,EAAe,GAA2B;CAClD,IAAM,EAAE,cAAW,OAAU,GACvB,CAAC,GAAe,KAAoB,EAAwB,CAAC,CAAC;CAEpE,SAAS,EAAa,GAAa;EAClC,OAAO,CAAC,CAAC,EAAc,MAAM,MAAW,EAAO,QAAQ,CAAG;CAC3D;CAEA,SAAS,EAAW,GAAa;EAChC,OAAO,EAAc,MAAM,MAAW,EAAO,QAAQ,CAAG,CAAC,EAAE;CAC5D;CAGA,SAAS,EAAW,GAAa,GAAY;EAE5C,AADqB,EAAa,CAC9B,IACH,GAAkB,MAEV,CAAC,GADS,EAAI,QAAQ,MAAW,EAAO,QAAQ,CAC5C,GAAU;GAAE;GAAK;EAAK,CAAC,CAClC,IACK,EAAiB,CAAC,GAAG,GAAe;GAAE;GAAK;EAAK,CAAC,CAAC;CAC1D;CAEA,SAAS,EAAY,GAAa;EACjC,EAAiB,EAAc,QAAQ,MAAW,EAAO,QAAQ,CAAG,CAAC;CACtE;CAEA,OACC,kBAAC,EAAc,UAAf;EACC,OAAO;GAAE;GAAc;GAAY;GAAY;EAAY;EAE1D;CACsB,CAAA;AAE1B"}
@@ -1,13 +1,15 @@
1
- import { cloneElement as e, createContext as t } from "react";
2
- import { jsxs as n } from "react/jsx-runtime";
1
+ import { cloneElement as e, createContext as t, useMemo as n } from "react";
2
+ import { jsxs as r } from "react/jsx-runtime";
3
3
  //#region src/providers/formProvider.tsx
4
- var r = t({});
5
- function i(t) {
6
- let { children: i, fieldErrors: a, form: o } = t;
7
- return /* @__PURE__ */ n(r.Provider, {
8
- value: { fieldErrors: a },
9
- children: [!o && i, o && e(o, o.props, i)]
4
+ var i = t({});
5
+ function a(t) {
6
+ let { children: a, fieldErrors: o, form: s } = t, c = n(() => ({ fieldErrors: o }), [o]);
7
+ return /* @__PURE__ */ r(i.Provider, {
8
+ value: c,
9
+ children: [!s && a, s && e(s, s.props, a)]
10
10
  });
11
11
  }
12
12
  //#endregion
13
- export { i as FormProvider, r as formContext };
13
+ export { a as FormProvider, i as formContext };
14
+
15
+ //# sourceMappingURL=formProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formProvider.js","names":[],"sources":["../../../src/providers/formProvider.tsx"],"sourcesContent":["import { cloneElement, createContext, type ReactNode, useMemo } from \"react\";\n\ntype FormContextProps = {\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\tfieldErrors: { [x: string]: any };\n};\n\ntype FormProviderProps = {\n\tchildren: ReactNode;\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\tfieldErrors?: any;\n\tform?: React.ReactElement;\n};\n\nconst formContext = createContext({} as FormContextProps);\n\n/**\n * FormProvider — distributes field-level validation errors to all form input components in its subtree.\n *\n * All inputs (`Input`, `Select`, `Checkbox`, etc.) read `fieldErrors[name]` automatically,\n * so you don't need to pass errors manually to each field. Use the `form` prop to also wrap\n * children in a `<form>` element (e.g. for Remix `<Form />`).\n *\n * @param props.children - Form fields and other components.\n * @param props.fieldErrors - Map of field name → error message (e.g. from Zod / server validation).\n * @param props.form - Optional `<form>` element to wrap children in (cloned with `children`).\n *\n * @returns FormProvider JSX element.\n *\n * @example\n * ```tsx\n * // With Remix action errors\n * const actionData = useActionData<typeof action>();\n *\n * <FormProvider fieldErrors={actionData?.fieldErrors}>\n * <Input name=\"email\" label=\"Email\" />\n * <Input name=\"password\" label=\"Password\" type=\"password\" />\n * <Button type=\"submit\">Login</Button>\n * </FormProvider>\n * ```\n */\n\nfunction FormProvider(props: FormProviderProps) {\n\tconst { children, fieldErrors, form } = props;\n\n\tconst value = useMemo(() => ({ fieldErrors }), [fieldErrors]);\n\n\treturn (\n\t\t<formContext.Provider value={value}>\n\t\t\t{!form && children}\n\t\t\t{form &&\n\t\t\t\tcloneElement(\n\t\t\t\t\tform as React.ReactElement,\n\t\t\t\t\tform.props as React.ReactElement,\n\t\t\t\t\tchildren,\n\t\t\t\t)}\n\t\t</formContext.Provider>\n\t);\n}\n\nexport { FormProvider, formContext };\n"],"mappings":";;;AAcA,IAAM,IAAc,EAAc,CAAC,CAAqB;AA4BxD,SAAS,EAAa,GAA0B;CAC/C,IAAM,EAAE,aAAU,gBAAa,YAAS,GAElC,IAAQ,SAAe,EAAE,eAAY,IAAI,CAAC,CAAW,CAAC;CAE5D,OACC,kBAAC,EAAY,UAAb;EAA6B;YAA7B,CACE,CAAC,KAAQ,GACT,KACA,EACC,GACA,EAAK,OACL,CACD,CACoB;;AAExB"}
@@ -38,3 +38,5 @@ function i(e) {
38
38
  }
39
39
  //#endregion
40
40
  export { i as ModalProvider, r as modalContext };
41
+
42
+ //# sourceMappingURL=modalProvider.js.map