@iamsaroj/smart-ui 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (853) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/LICENSE +21 -0
  3. package/README.md +49 -0
  4. package/dist/calendar-engine/agenda-view.d.ts +8 -0
  5. package/dist/calendar-engine/agenda-view.d.ts.map +1 -0
  6. package/dist/calendar-engine/agenda-view.js +26 -0
  7. package/dist/calendar-engine/agenda-view.js.map +1 -0
  8. package/dist/calendar-engine/booking.d.ts +13 -0
  9. package/dist/calendar-engine/booking.d.ts.map +1 -0
  10. package/dist/calendar-engine/booking.js +45 -0
  11. package/dist/calendar-engine/booking.js.map +1 -0
  12. package/dist/calendar-engine/calendar-utils.d.ts +74 -0
  13. package/dist/calendar-engine/calendar-utils.d.ts.map +1 -0
  14. package/dist/calendar-engine/calendar-utils.js +221 -0
  15. package/dist/calendar-engine/calendar-utils.js.map +1 -0
  16. package/dist/calendar-engine/calendar.d.ts +62 -0
  17. package/dist/calendar-engine/calendar.d.ts.map +1 -0
  18. package/dist/calendar-engine/calendar.js +81 -0
  19. package/dist/calendar-engine/calendar.js.map +1 -0
  20. package/dist/calendar-engine/event-color.d.ts +20 -0
  21. package/dist/calendar-engine/event-color.d.ts.map +1 -0
  22. package/dist/calendar-engine/event-color.js +59 -0
  23. package/dist/calendar-engine/event-color.js.map +1 -0
  24. package/dist/calendar-engine/index.d.ts +11 -0
  25. package/dist/calendar-engine/index.d.ts.map +1 -0
  26. package/dist/calendar-engine/index.js +6 -0
  27. package/dist/calendar-engine/index.js.map +1 -0
  28. package/dist/calendar-engine/month-view.d.ts +10 -0
  29. package/dist/calendar-engine/month-view.d.ts.map +1 -0
  30. package/dist/calendar-engine/month-view.js +72 -0
  31. package/dist/calendar-engine/month-view.js.map +1 -0
  32. package/dist/calendar-engine/recurrence.d.ts +47 -0
  33. package/dist/calendar-engine/recurrence.d.ts.map +1 -0
  34. package/dist/calendar-engine/recurrence.js +209 -0
  35. package/dist/calendar-engine/recurrence.js.map +1 -0
  36. package/dist/calendar-engine/shared.d.ts +72 -0
  37. package/dist/calendar-engine/shared.d.ts.map +1 -0
  38. package/dist/calendar-engine/shared.js +34 -0
  39. package/dist/calendar-engine/shared.js.map +1 -0
  40. package/dist/calendar-engine/time-grid-view.d.ts +13 -0
  41. package/dist/calendar-engine/time-grid-view.d.ts.map +1 -0
  42. package/dist/calendar-engine/time-grid-view.js +203 -0
  43. package/dist/calendar-engine/time-grid-view.js.map +1 -0
  44. package/dist/calendar-engine/types.d.ts +138 -0
  45. package/dist/calendar-engine/types.d.ts.map +1 -0
  46. package/dist/calendar-engine/types.js +2 -0
  47. package/dist/calendar-engine/types.js.map +1 -0
  48. package/dist/calendar-engine/use-calendar.d.ts +7 -0
  49. package/dist/calendar-engine/use-calendar.d.ts.map +1 -0
  50. package/dist/calendar-engine/use-calendar.js +25 -0
  51. package/dist/calendar-engine/use-calendar.js.map +1 -0
  52. package/dist/components/accordion.d.ts +7 -0
  53. package/dist/components/accordion.d.ts.map +1 -0
  54. package/dist/components/accordion.js +10 -0
  55. package/dist/components/accordion.js.map +1 -0
  56. package/dist/components/alert-dialog.d.ts +19 -0
  57. package/dist/components/alert-dialog.d.ts.map +1 -0
  58. package/dist/components/alert-dialog.js +18 -0
  59. package/dist/components/alert-dialog.js.map +1 -0
  60. package/dist/components/alert.d.ts +11 -0
  61. package/dist/components/alert.d.ts.map +1 -0
  62. package/dist/components/alert.js +20 -0
  63. package/dist/components/alert.js.map +1 -0
  64. package/dist/components/aspect-ratio.d.ts +5 -0
  65. package/dist/components/aspect-ratio.d.ts.map +1 -0
  66. package/dist/components/aspect-ratio.js +7 -0
  67. package/dist/components/aspect-ratio.js.map +1 -0
  68. package/dist/components/avatar.d.ts +12 -0
  69. package/dist/components/avatar.d.ts.map +1 -0
  70. package/dist/components/avatar.js +11 -0
  71. package/dist/components/avatar.js.map +1 -0
  72. package/dist/components/badge.d.ts +8 -0
  73. package/dist/components/badge.d.ts.map +1 -0
  74. package/dist/components/badge.js +33 -0
  75. package/dist/components/badge.js.map +1 -0
  76. package/dist/components/breadcrumb.d.ts +11 -0
  77. package/dist/components/breadcrumb.d.ts.map +1 -0
  78. package/dist/components/breadcrumb.js +23 -0
  79. package/dist/components/breadcrumb.js.map +1 -0
  80. package/dist/components/button.d.ts +9 -0
  81. package/dist/components/button.d.ts.map +1 -0
  82. package/dist/components/button.js +34 -0
  83. package/dist/components/button.js.map +1 -0
  84. package/dist/components/calendar.d.ts +11 -0
  85. package/dist/components/calendar.d.ts.map +1 -0
  86. package/dist/components/calendar.js +77 -0
  87. package/dist/components/calendar.js.map +1 -0
  88. package/dist/components/card.d.ts +12 -0
  89. package/dist/components/card.d.ts.map +1 -0
  90. package/dist/components/card.js +11 -0
  91. package/dist/components/card.js.map +1 -0
  92. package/dist/components/carousel.d.ts +29 -0
  93. package/dist/components/carousel.d.ts.map +1 -0
  94. package/dist/components/carousel.js +94 -0
  95. package/dist/components/carousel.js.map +1 -0
  96. package/dist/components/chart.d.ts +45 -0
  97. package/dist/components/chart.d.ts.map +1 -0
  98. package/dist/components/chart.js +133 -0
  99. package/dist/components/chart.js.map +1 -0
  100. package/dist/components/checkbox.d.ts +4 -0
  101. package/dist/components/checkbox.d.ts.map +1 -0
  102. package/dist/components/checkbox.js +8 -0
  103. package/dist/components/checkbox.js.map +1 -0
  104. package/dist/components/collapsible.d.ts +6 -0
  105. package/dist/components/collapsible.d.ts.map +1 -0
  106. package/dist/components/collapsible.js +7 -0
  107. package/dist/components/collapsible.js.map +1 -0
  108. package/dist/components/combobox.d.ts +35 -0
  109. package/dist/components/combobox.d.ts.map +1 -0
  110. package/dist/components/combobox.js +45 -0
  111. package/dist/components/combobox.js.map +1 -0
  112. package/dist/components/command.d.ts +20 -0
  113. package/dist/components/command.d.ts.map +1 -0
  114. package/dist/components/command.js +18 -0
  115. package/dist/components/command.js.map +1 -0
  116. package/dist/components/context-menu.d.ts +30 -0
  117. package/dist/components/context-menu.d.ts.map +1 -0
  118. package/dist/components/context-menu.js +22 -0
  119. package/dist/components/context-menu.js.map +1 -0
  120. package/dist/components/data-table.d.ts +12 -0
  121. package/dist/components/data-table.d.ts.map +1 -0
  122. package/dist/components/data-table.js +44 -0
  123. package/dist/components/data-table.js.map +1 -0
  124. package/dist/components/date-picker.d.ts +33 -0
  125. package/dist/components/date-picker.d.ts.map +1 -0
  126. package/dist/components/date-picker.js +29 -0
  127. package/dist/components/date-picker.js.map +1 -0
  128. package/dist/components/dialog.d.ts +18 -0
  129. package/dist/components/dialog.d.ts.map +1 -0
  130. package/dist/components/dialog.js +18 -0
  131. package/dist/components/dialog.js.map +1 -0
  132. package/dist/components/drawer.d.ts +14 -0
  133. package/dist/components/drawer.d.ts.map +1 -0
  134. package/dist/components/drawer.js +15 -0
  135. package/dist/components/drawer.js.map +1 -0
  136. package/dist/components/dropdown-menu.d.ts +30 -0
  137. package/dist/components/dropdown-menu.d.ts.map +1 -0
  138. package/dist/components/dropdown-menu.js +22 -0
  139. package/dist/components/dropdown-menu.js.map +1 -0
  140. package/dist/components/hover-card.d.ts +6 -0
  141. package/dist/components/hover-card.d.ts.map +1 -0
  142. package/dist/components/hover-card.js +8 -0
  143. package/dist/components/hover-card.js.map +1 -0
  144. package/dist/components/input-group.d.ts +19 -0
  145. package/dist/components/input-group.d.ts.map +1 -0
  146. package/dist/components/input-group.js +46 -0
  147. package/dist/components/input-group.js.map +1 -0
  148. package/dist/components/input-otp.d.ts +12 -0
  149. package/dist/components/input-otp.d.ts.map +1 -0
  150. package/dist/components/input-otp.js +16 -0
  151. package/dist/components/input-otp.js.map +1 -0
  152. package/dist/components/input.d.ts +4 -0
  153. package/dist/components/input.d.ts.map +1 -0
  154. package/dist/components/input.js +6 -0
  155. package/dist/components/input.js.map +1 -0
  156. package/dist/components/kbd.d.ts +5 -0
  157. package/dist/components/kbd.d.ts.map +1 -0
  158. package/dist/components/kbd.js +6 -0
  159. package/dist/components/kbd.js.map +1 -0
  160. package/dist/components/label.d.ts +4 -0
  161. package/dist/components/label.d.ts.map +1 -0
  162. package/dist/components/label.js +5 -0
  163. package/dist/components/label.js.map +1 -0
  164. package/dist/components/menubar.d.ts +30 -0
  165. package/dist/components/menubar.d.ts.map +1 -0
  166. package/dist/components/menubar.js +24 -0
  167. package/dist/components/menubar.js.map +1 -0
  168. package/dist/components/navigation-menu.d.ts +12 -0
  169. package/dist/components/navigation-menu.d.ts.map +1 -0
  170. package/dist/components/navigation-menu.js +18 -0
  171. package/dist/components/navigation-menu.js.map +1 -0
  172. package/dist/components/pagination.d.ts +18 -0
  173. package/dist/components/pagination.d.ts.map +1 -0
  174. package/dist/components/pagination.js +13 -0
  175. package/dist/components/pagination.js.map +1 -0
  176. package/dist/components/popover.d.ts +10 -0
  177. package/dist/components/popover.d.ts.map +1 -0
  178. package/dist/components/popover.js +12 -0
  179. package/dist/components/popover.js.map +1 -0
  180. package/dist/components/progress.d.ts +8 -0
  181. package/dist/components/progress.d.ts.map +1 -0
  182. package/dist/components/progress.js +10 -0
  183. package/dist/components/progress.js.map +1 -0
  184. package/dist/components/radio-group.d.ts +6 -0
  185. package/dist/components/radio-group.d.ts.map +1 -0
  186. package/dist/components/radio-group.js +9 -0
  187. package/dist/components/radio-group.js.map +1 -0
  188. package/dist/components/scroll-area.d.ts +5 -0
  189. package/dist/components/scroll-area.d.ts.map +1 -0
  190. package/dist/components/scroll-area.js +8 -0
  191. package/dist/components/scroll-area.js.map +1 -0
  192. package/dist/components/select.d.ts +16 -0
  193. package/dist/components/select.d.ts.map +1 -0
  194. package/dist/components/select.js +16 -0
  195. package/dist/components/select.js.map +1 -0
  196. package/dist/components/separator.d.ts +4 -0
  197. package/dist/components/separator.d.ts.map +1 -0
  198. package/dist/components/separator.js +6 -0
  199. package/dist/components/separator.js.map +1 -0
  200. package/dist/components/sheet.d.ts +15 -0
  201. package/dist/components/sheet.d.ts.map +1 -0
  202. package/dist/components/sheet.js +18 -0
  203. package/dist/components/sheet.js.map +1 -0
  204. package/dist/components/sidebar.d.ts +64 -0
  205. package/dist/components/sidebar.d.ts.map +1 -0
  206. package/dist/components/sidebar.js +224 -0
  207. package/dist/components/sidebar.js.map +1 -0
  208. package/dist/components/skeleton.d.ts +3 -0
  209. package/dist/components/skeleton.d.ts.map +1 -0
  210. package/dist/components/skeleton.js +5 -0
  211. package/dist/components/skeleton.js.map +1 -0
  212. package/dist/components/slider.d.ts +4 -0
  213. package/dist/components/slider.d.ts.map +1 -0
  214. package/dist/components/slider.js +13 -0
  215. package/dist/components/slider.js.map +1 -0
  216. package/dist/components/sonner.d.ts +4 -0
  217. package/dist/components/sonner.d.ts.map +1 -0
  218. package/dist/components/sonner.js +25 -0
  219. package/dist/components/sonner.js.map +1 -0
  220. package/dist/components/switch.d.ts +6 -0
  221. package/dist/components/switch.d.ts.map +1 -0
  222. package/dist/components/switch.js +7 -0
  223. package/dist/components/switch.js.map +1 -0
  224. package/dist/components/table.d.ts +11 -0
  225. package/dist/components/table.d.ts.map +1 -0
  226. package/dist/components/table.js +12 -0
  227. package/dist/components/table.js.map +1 -0
  228. package/dist/components/tabs.d.ts +11 -0
  229. package/dist/components/tabs.d.ts.map +1 -0
  230. package/dist/components/tabs.js +23 -0
  231. package/dist/components/tabs.js.map +1 -0
  232. package/dist/components/textarea.d.ts +4 -0
  233. package/dist/components/textarea.d.ts.map +1 -0
  234. package/dist/components/textarea.js +5 -0
  235. package/dist/components/textarea.js.map +1 -0
  236. package/dist/components/toggle-group.d.ts +11 -0
  237. package/dist/components/toggle-group.d.ts.map +1 -0
  238. package/dist/components/toggle-group.js +22 -0
  239. package/dist/components/toggle-group.js.map +1 -0
  240. package/dist/components/toggle.d.ts +9 -0
  241. package/dist/components/toggle.d.ts.map +1 -0
  242. package/dist/components/toggle.js +25 -0
  243. package/dist/components/toggle.js.map +1 -0
  244. package/dist/components/tooltip.d.ts +7 -0
  245. package/dist/components/tooltip.d.ts.map +1 -0
  246. package/dist/components/tooltip.js +10 -0
  247. package/dist/components/tooltip.js.map +1 -0
  248. package/dist/data-grid/action-column-cell.d.ts +41 -0
  249. package/dist/data-grid/action-column-cell.d.ts.map +1 -0
  250. package/dist/data-grid/action-column-cell.js +114 -0
  251. package/dist/data-grid/action-column-cell.js.map +1 -0
  252. package/dist/data-grid/action-column.d.ts +144 -0
  253. package/dist/data-grid/action-column.d.ts.map +1 -0
  254. package/dist/data-grid/action-column.js +156 -0
  255. package/dist/data-grid/action-column.js.map +1 -0
  256. package/dist/data-grid/create-page-fetcher.d.ts +57 -0
  257. package/dist/data-grid/create-page-fetcher.d.ts.map +1 -0
  258. package/dist/data-grid/create-page-fetcher.js +41 -0
  259. package/dist/data-grid/create-page-fetcher.js.map +1 -0
  260. package/dist/data-grid/data-grid.d.ts +65 -0
  261. package/dist/data-grid/data-grid.d.ts.map +1 -0
  262. package/dist/data-grid/data-grid.js +95 -0
  263. package/dist/data-grid/data-grid.js.map +1 -0
  264. package/dist/data-grid/empty-state.d.ts +13 -0
  265. package/dist/data-grid/empty-state.d.ts.map +1 -0
  266. package/dist/data-grid/empty-state.js +6 -0
  267. package/dist/data-grid/empty-state.js.map +1 -0
  268. package/dist/data-grid/formula-guard.d.ts +22 -0
  269. package/dist/data-grid/formula-guard.d.ts.map +1 -0
  270. package/dist/data-grid/formula-guard.js +28 -0
  271. package/dist/data-grid/formula-guard.js.map +1 -0
  272. package/dist/data-grid/grid-internals.d.ts +16 -0
  273. package/dist/data-grid/grid-internals.d.ts.map +1 -0
  274. package/dist/data-grid/grid-internals.js +73 -0
  275. package/dist/data-grid/grid-internals.js.map +1 -0
  276. package/dist/data-grid/grid-theme.d.ts +8 -0
  277. package/dist/data-grid/grid-theme.d.ts.map +1 -0
  278. package/dist/data-grid/grid-theme.js +23 -0
  279. package/dist/data-grid/grid-theme.js.map +1 -0
  280. package/dist/data-grid/grid-toolbar.d.ts +40 -0
  281. package/dist/data-grid/grid-toolbar.d.ts.map +1 -0
  282. package/dist/data-grid/grid-toolbar.js +13 -0
  283. package/dist/data-grid/grid-toolbar.js.map +1 -0
  284. package/dist/data-grid/index.d.ts +10 -0
  285. package/dist/data-grid/index.d.ts.map +1 -0
  286. package/dist/data-grid/index.js +9 -0
  287. package/dist/data-grid/index.js.map +1 -0
  288. package/dist/data-grid/pagination.d.ts +146 -0
  289. package/dist/data-grid/pagination.d.ts.map +1 -0
  290. package/dist/data-grid/pagination.js +128 -0
  291. package/dist/data-grid/pagination.js.map +1 -0
  292. package/dist/data-grid/server-data-grid.d.ts +109 -0
  293. package/dist/data-grid/server-data-grid.d.ts.map +1 -0
  294. package/dist/data-grid/server-data-grid.js +240 -0
  295. package/dist/data-grid/server-data-grid.js.map +1 -0
  296. package/dist/data-grid/server-grid-internals.d.ts +79 -0
  297. package/dist/data-grid/server-grid-internals.d.ts.map +1 -0
  298. package/dist/data-grid/server-grid-internals.js +137 -0
  299. package/dist/data-grid/server-grid-internals.js.map +1 -0
  300. package/dist/data-grid/use-action-column.d.ts +22 -0
  301. package/dist/data-grid/use-action-column.d.ts.map +1 -0
  302. package/dist/data-grid/use-action-column.js +63 -0
  303. package/dist/data-grid/use-action-column.js.map +1 -0
  304. package/dist/data-grid/use-server-grid-selection.d.ts +35 -0
  305. package/dist/data-grid/use-server-grid-selection.d.ts.map +1 -0
  306. package/dist/data-grid/use-server-grid-selection.js +81 -0
  307. package/dist/data-grid/use-server-grid-selection.js.map +1 -0
  308. package/dist/form-engine/base.d.ts +19 -0
  309. package/dist/form-engine/base.d.ts.map +1 -0
  310. package/dist/form-engine/base.js +2 -0
  311. package/dist/form-engine/base.js.map +1 -0
  312. package/dist/form-engine/field-registry.d.ts +285 -0
  313. package/dist/form-engine/field-registry.d.ts.map +1 -0
  314. package/dist/form-engine/field-registry.js +306 -0
  315. package/dist/form-engine/field-registry.js.map +1 -0
  316. package/dist/form-engine/field-types.d.ts +201 -0
  317. package/dist/form-engine/field-types.d.ts.map +1 -0
  318. package/dist/form-engine/field-types.js +14 -0
  319. package/dist/form-engine/field-types.js.map +1 -0
  320. package/dist/form-engine/index.d.ts +20 -0
  321. package/dist/form-engine/index.d.ts.map +1 -0
  322. package/dist/form-engine/index.js +21 -0
  323. package/dist/form-engine/index.js.map +1 -0
  324. package/dist/form-engine/smart-checkbox-field.d.ts +5 -0
  325. package/dist/form-engine/smart-checkbox-field.d.ts.map +1 -0
  326. package/dist/form-engine/smart-checkbox-field.js +9 -0
  327. package/dist/form-engine/smart-checkbox-field.js.map +1 -0
  328. package/dist/form-engine/smart-checkbox-group-field.d.ts +10 -0
  329. package/dist/form-engine/smart-checkbox-group-field.d.ts.map +1 -0
  330. package/dist/form-engine/smart-checkbox-group-field.js +5 -0
  331. package/dist/form-engine/smart-checkbox-group-field.js.map +1 -0
  332. package/dist/form-engine/smart-combobox-field.d.ts +11 -0
  333. package/dist/form-engine/smart-combobox-field.d.ts.map +1 -0
  334. package/dist/form-engine/smart-combobox-field.js +5 -0
  335. package/dist/form-engine/smart-combobox-field.js.map +1 -0
  336. package/dist/form-engine/smart-date-field.d.ts +8 -0
  337. package/dist/form-engine/smart-date-field.d.ts.map +1 -0
  338. package/dist/form-engine/smart-date-field.js +17 -0
  339. package/dist/form-engine/smart-date-field.js.map +1 -0
  340. package/dist/form-engine/smart-date-range-field.d.ts +15 -0
  341. package/dist/form-engine/smart-date-range-field.d.ts.map +1 -0
  342. package/dist/form-engine/smart-date-range-field.js +25 -0
  343. package/dist/form-engine/smart-date-range-field.js.map +1 -0
  344. package/dist/form-engine/smart-datetime-field.d.ts +12 -0
  345. package/dist/form-engine/smart-datetime-field.d.ts.map +1 -0
  346. package/dist/form-engine/smart-datetime-field.js +12 -0
  347. package/dist/form-engine/smart-datetime-field.js.map +1 -0
  348. package/dist/form-engine/smart-form-internals.d.ts +14 -0
  349. package/dist/form-engine/smart-form-internals.d.ts.map +1 -0
  350. package/dist/form-engine/smart-form-internals.js +64 -0
  351. package/dist/form-engine/smart-form-internals.js.map +1 -0
  352. package/dist/form-engine/smart-form.d.ts +55 -0
  353. package/dist/form-engine/smart-form.d.ts.map +1 -0
  354. package/dist/form-engine/smart-form.js +229 -0
  355. package/dist/form-engine/smart-form.js.map +1 -0
  356. package/dist/form-engine/smart-input-field.d.ts +9 -0
  357. package/dist/form-engine/smart-input-field.d.ts.map +1 -0
  358. package/dist/form-engine/smart-input-field.js +5 -0
  359. package/dist/form-engine/smart-input-field.js.map +1 -0
  360. package/dist/form-engine/smart-month-field.d.ts +8 -0
  361. package/dist/form-engine/smart-month-field.d.ts.map +1 -0
  362. package/dist/form-engine/smart-month-field.js +12 -0
  363. package/dist/form-engine/smart-month-field.js.map +1 -0
  364. package/dist/form-engine/smart-multi-select-field.d.ts +11 -0
  365. package/dist/form-engine/smart-multi-select-field.d.ts.map +1 -0
  366. package/dist/form-engine/smart-multi-select-field.js +5 -0
  367. package/dist/form-engine/smart-multi-select-field.js.map +1 -0
  368. package/dist/form-engine/smart-number-field.d.ts +22 -0
  369. package/dist/form-engine/smart-number-field.d.ts.map +1 -0
  370. package/dist/form-engine/smart-number-field.js +115 -0
  371. package/dist/form-engine/smart-number-field.js.map +1 -0
  372. package/dist/form-engine/smart-password-field.d.ts +7 -0
  373. package/dist/form-engine/smart-password-field.d.ts.map +1 -0
  374. package/dist/form-engine/smart-password-field.js +5 -0
  375. package/dist/form-engine/smart-password-field.js.map +1 -0
  376. package/dist/form-engine/smart-radio-group-field.d.ts +10 -0
  377. package/dist/form-engine/smart-radio-group-field.d.ts.map +1 -0
  378. package/dist/form-engine/smart-radio-group-field.js +5 -0
  379. package/dist/form-engine/smart-radio-group-field.js.map +1 -0
  380. package/dist/form-engine/smart-segmented-field.d.ts +9 -0
  381. package/dist/form-engine/smart-segmented-field.d.ts.map +1 -0
  382. package/dist/form-engine/smart-segmented-field.js +5 -0
  383. package/dist/form-engine/smart-segmented-field.js.map +1 -0
  384. package/dist/form-engine/smart-select-field.d.ts +10 -0
  385. package/dist/form-engine/smart-select-field.d.ts.map +1 -0
  386. package/dist/form-engine/smart-select-field.js +5 -0
  387. package/dist/form-engine/smart-select-field.js.map +1 -0
  388. package/dist/form-engine/smart-slug-field.d.ts +12 -0
  389. package/dist/form-engine/smart-slug-field.d.ts.map +1 -0
  390. package/dist/form-engine/smart-slug-field.js +14 -0
  391. package/dist/form-engine/smart-slug-field.js.map +1 -0
  392. package/dist/form-engine/smart-switch-field.d.ts +5 -0
  393. package/dist/form-engine/smart-switch-field.d.ts.map +1 -0
  394. package/dist/form-engine/smart-switch-field.js +9 -0
  395. package/dist/form-engine/smart-switch-field.js.map +1 -0
  396. package/dist/form-engine/smart-tel-field.d.ts +7 -0
  397. package/dist/form-engine/smart-tel-field.d.ts.map +1 -0
  398. package/dist/form-engine/smart-tel-field.js +6 -0
  399. package/dist/form-engine/smart-tel-field.js.map +1 -0
  400. package/dist/form-engine/smart-text-editor-field.d.ts +15 -0
  401. package/dist/form-engine/smart-text-editor-field.d.ts.map +1 -0
  402. package/dist/form-engine/smart-text-editor-field.js +5 -0
  403. package/dist/form-engine/smart-text-editor-field.js.map +1 -0
  404. package/dist/form-engine/smart-textarea-field.d.ts +8 -0
  405. package/dist/form-engine/smart-textarea-field.d.ts.map +1 -0
  406. package/dist/form-engine/smart-textarea-field.js +5 -0
  407. package/dist/form-engine/smart-textarea-field.js.map +1 -0
  408. package/dist/form-engine/smart-time-field.d.ts +10 -0
  409. package/dist/form-engine/smart-time-field.d.ts.map +1 -0
  410. package/dist/form-engine/smart-time-field.js +5 -0
  411. package/dist/form-engine/smart-time-field.js.map +1 -0
  412. package/dist/form-engine/smart-time-range-field.d.ts +13 -0
  413. package/dist/form-engine/smart-time-range-field.d.ts.map +1 -0
  414. package/dist/form-engine/smart-time-range-field.js +5 -0
  415. package/dist/form-engine/smart-time-range-field.js.map +1 -0
  416. package/dist/form-engine/smart-year-field.d.ts +8 -0
  417. package/dist/form-engine/smart-year-field.d.ts.map +1 -0
  418. package/dist/form-engine/smart-year-field.js +5 -0
  419. package/dist/form-engine/smart-year-field.js.map +1 -0
  420. package/dist/form-engine/smart-yesno-field.d.ts +12 -0
  421. package/dist/form-engine/smart-yesno-field.d.ts.map +1 -0
  422. package/dist/form-engine/smart-yesno-field.js +14 -0
  423. package/dist/form-engine/smart-yesno-field.js.map +1 -0
  424. package/dist/hooks/use-mobile.d.ts +2 -0
  425. package/dist/hooks/use-mobile.d.ts.map +1 -0
  426. package/dist/hooks/use-mobile.js +17 -0
  427. package/dist/hooks/use-mobile.js.map +1 -0
  428. package/dist/lexical-text-editor/SmartTextEditor.d.ts +61 -0
  429. package/dist/lexical-text-editor/SmartTextEditor.d.ts.map +1 -0
  430. package/dist/lexical-text-editor/SmartTextEditor.js +145 -0
  431. package/dist/lexical-text-editor/SmartTextEditor.js.map +1 -0
  432. package/dist/lexical-text-editor/editor-nodes.d.ts +3 -0
  433. package/dist/lexical-text-editor/editor-nodes.d.ts.map +1 -0
  434. package/dist/lexical-text-editor/editor-nodes.js +25 -0
  435. package/dist/lexical-text-editor/editor-nodes.js.map +1 -0
  436. package/dist/lexical-text-editor/editor-theme.d.ts +3 -0
  437. package/dist/lexical-text-editor/editor-theme.d.ts.map +1 -0
  438. package/dist/lexical-text-editor/editor-theme.js +78 -0
  439. package/dist/lexical-text-editor/editor-theme.js.map +1 -0
  440. package/dist/lexical-text-editor/index.d.ts +8 -0
  441. package/dist/lexical-text-editor/index.d.ts.map +1 -0
  442. package/dist/lexical-text-editor/index.js +6 -0
  443. package/dist/lexical-text-editor/index.js.map +1 -0
  444. package/dist/lexical-text-editor/nodes/image-node.d.ts +41 -0
  445. package/dist/lexical-text-editor/nodes/image-node.d.ts.map +1 -0
  446. package/dist/lexical-text-editor/nodes/image-node.js +89 -0
  447. package/dist/lexical-text-editor/nodes/image-node.js.map +1 -0
  448. package/dist/lexical-text-editor/nodes/page-break-node.d.ts +25 -0
  449. package/dist/lexical-text-editor/nodes/page-break-node.d.ts.map +1 -0
  450. package/dist/lexical-text-editor/nodes/page-break-node.js +84 -0
  451. package/dist/lexical-text-editor/nodes/page-break-node.js.map +1 -0
  452. package/dist/lexical-text-editor/plugins/auto-link-plugin.d.ts +3 -0
  453. package/dist/lexical-text-editor/plugins/auto-link-plugin.d.ts.map +1 -0
  454. package/dist/lexical-text-editor/plugins/auto-link-plugin.js +12 -0
  455. package/dist/lexical-text-editor/plugins/auto-link-plugin.js.map +1 -0
  456. package/dist/lexical-text-editor/plugins/code-highlight-plugin.d.ts +6 -0
  457. package/dist/lexical-text-editor/plugins/code-highlight-plugin.d.ts.map +1 -0
  458. package/dist/lexical-text-editor/plugins/code-highlight-plugin.js +14 -0
  459. package/dist/lexical-text-editor/plugins/code-highlight-plugin.js.map +1 -0
  460. package/dist/lexical-text-editor/plugins/toolbar/align-menu.d.ts +7 -0
  461. package/dist/lexical-text-editor/plugins/toolbar/align-menu.d.ts.map +1 -0
  462. package/dist/lexical-text-editor/plugins/toolbar/align-menu.js +8 -0
  463. package/dist/lexical-text-editor/plugins/toolbar/align-menu.js.map +1 -0
  464. package/dist/lexical-text-editor/plugins/toolbar/block-format-menu.d.ts +20 -0
  465. package/dist/lexical-text-editor/plugins/toolbar/block-format-menu.d.ts.map +1 -0
  466. package/dist/lexical-text-editor/plugins/toolbar/block-format-menu.js +78 -0
  467. package/dist/lexical-text-editor/plugins/toolbar/block-format-menu.js.map +1 -0
  468. package/dist/lexical-text-editor/plugins/toolbar/constants.d.ts +36 -0
  469. package/dist/lexical-text-editor/plugins/toolbar/constants.d.ts.map +1 -0
  470. package/dist/lexical-text-editor/plugins/toolbar/constants.js +67 -0
  471. package/dist/lexical-text-editor/plugins/toolbar/constants.js.map +1 -0
  472. package/dist/lexical-text-editor/plugins/toolbar/inline-marks.d.ts +14 -0
  473. package/dist/lexical-text-editor/plugins/toolbar/inline-marks.d.ts.map +1 -0
  474. package/dist/lexical-text-editor/plugins/toolbar/inline-marks.js +129 -0
  475. package/dist/lexical-text-editor/plugins/toolbar/inline-marks.js.map +1 -0
  476. package/dist/lexical-text-editor/plugins/toolbar/insert-menu.d.ts +8 -0
  477. package/dist/lexical-text-editor/plugins/toolbar/insert-menu.d.ts.map +1 -0
  478. package/dist/lexical-text-editor/plugins/toolbar/insert-menu.js +87 -0
  479. package/dist/lexical-text-editor/plugins/toolbar/insert-menu.js.map +1 -0
  480. package/dist/lexical-text-editor/plugins/toolbar/link-editor.d.ts +11 -0
  481. package/dist/lexical-text-editor/plugins/toolbar/link-editor.d.ts.map +1 -0
  482. package/dist/lexical-text-editor/plugins/toolbar/link-editor.js +51 -0
  483. package/dist/lexical-text-editor/plugins/toolbar/link-editor.js.map +1 -0
  484. package/dist/lexical-text-editor/plugins/toolbar/primitives.d.ts +39 -0
  485. package/dist/lexical-text-editor/plugins/toolbar/primitives.d.ts.map +1 -0
  486. package/dist/lexical-text-editor/plugins/toolbar/primitives.js +47 -0
  487. package/dist/lexical-text-editor/plugins/toolbar/primitives.js.map +1 -0
  488. package/dist/lexical-text-editor/plugins/toolbar/use-insert-commands.d.ts +9 -0
  489. package/dist/lexical-text-editor/plugins/toolbar/use-insert-commands.d.ts.map +1 -0
  490. package/dist/lexical-text-editor/plugins/toolbar/use-insert-commands.js +29 -0
  491. package/dist/lexical-text-editor/plugins/toolbar/use-insert-commands.js.map +1 -0
  492. package/dist/lexical-text-editor/plugins/toolbar/use-toolbar-state.d.ts +30 -0
  493. package/dist/lexical-text-editor/plugins/toolbar/use-toolbar-state.d.ts.map +1 -0
  494. package/dist/lexical-text-editor/plugins/toolbar/use-toolbar-state.js +128 -0
  495. package/dist/lexical-text-editor/plugins/toolbar/use-toolbar-state.js.map +1 -0
  496. package/dist/lexical-text-editor/plugins/toolbar-plugin.d.ts +8 -0
  497. package/dist/lexical-text-editor/plugins/toolbar-plugin.d.ts.map +1 -0
  498. package/dist/lexical-text-editor/plugins/toolbar-plugin.js +51 -0
  499. package/dist/lexical-text-editor/plugins/toolbar-plugin.js.map +1 -0
  500. package/dist/lexical-text-editor/sanitize.d.ts +24 -0
  501. package/dist/lexical-text-editor/sanitize.d.ts.map +1 -0
  502. package/dist/lexical-text-editor/sanitize.js +140 -0
  503. package/dist/lexical-text-editor/sanitize.js.map +1 -0
  504. package/dist/lib/format.d.ts +17 -0
  505. package/dist/lib/format.d.ts.map +1 -0
  506. package/dist/lib/format.js +40 -0
  507. package/dist/lib/format.js.map +1 -0
  508. package/dist/lib/leading-space.d.ts +28 -0
  509. package/dist/lib/leading-space.d.ts.map +1 -0
  510. package/dist/lib/leading-space.js +34 -0
  511. package/dist/lib/leading-space.js.map +1 -0
  512. package/dist/lib/utils.d.ts +3 -0
  513. package/dist/lib/utils.d.ts.map +1 -0
  514. package/dist/lib/utils.js +4 -0
  515. package/dist/lib/utils.js.map +1 -0
  516. package/dist/lib/xlsx.d.ts +80 -0
  517. package/dist/lib/xlsx.d.ts.map +1 -0
  518. package/dist/lib/xlsx.js +377 -0
  519. package/dist/lib/xlsx.js.map +1 -0
  520. package/dist/search-engine/build-query.d.ts +29 -0
  521. package/dist/search-engine/build-query.d.ts.map +1 -0
  522. package/dist/search-engine/build-query.js +51 -0
  523. package/dist/search-engine/build-query.js.map +1 -0
  524. package/dist/search-engine/index.d.ts +15 -0
  525. package/dist/search-engine/index.d.ts.map +1 -0
  526. package/dist/search-engine/index.js +13 -0
  527. package/dist/search-engine/index.js.map +1 -0
  528. package/dist/search-engine/smart-search-form.d.ts +92 -0
  529. package/dist/search-engine/smart-search-form.d.ts.map +1 -0
  530. package/dist/search-engine/smart-search-form.js +136 -0
  531. package/dist/search-engine/smart-search-form.js.map +1 -0
  532. package/dist/search-engine/types.d.ts +40 -0
  533. package/dist/search-engine/types.d.ts.map +1 -0
  534. package/dist/search-engine/types.js +11 -0
  535. package/dist/search-engine/types.js.map +1 -0
  536. package/dist/smart-components/buttons/action-button.d.ts +66 -0
  537. package/dist/smart-components/buttons/action-button.d.ts.map +1 -0
  538. package/dist/smart-components/buttons/action-button.js +79 -0
  539. package/dist/smart-components/buttons/action-button.js.map +1 -0
  540. package/dist/smart-components/buttons/action-buttons.d.ts +122 -0
  541. package/dist/smart-components/buttons/action-buttons.d.ts.map +1 -0
  542. package/dist/smart-components/buttons/action-buttons.js +42 -0
  543. package/dist/smart-components/buttons/action-buttons.js.map +1 -0
  544. package/dist/smart-components/buttons/action-config.d.ts +181 -0
  545. package/dist/smart-components/buttons/action-config.d.ts.map +1 -0
  546. package/dist/smart-components/buttons/action-config.js +128 -0
  547. package/dist/smart-components/buttons/action-config.js.map +1 -0
  548. package/dist/smart-components/buttons/index.d.ts +4 -0
  549. package/dist/smart-components/buttons/index.d.ts.map +1 -0
  550. package/dist/smart-components/buttons/index.js +7 -0
  551. package/dist/smart-components/buttons/index.js.map +1 -0
  552. package/dist/smart-components/loading-overlay.d.ts +16 -0
  553. package/dist/smart-components/loading-overlay.d.ts.map +1 -0
  554. package/dist/smart-components/loading-overlay.js +13 -0
  555. package/dist/smart-components/loading-overlay.js.map +1 -0
  556. package/dist/smart-components/page/index.d.ts +19 -0
  557. package/dist/smart-components/page/index.d.ts.map +1 -0
  558. package/dist/smart-components/page/index.js +33 -0
  559. package/dist/smart-components/page/index.js.map +1 -0
  560. package/dist/smart-components/page/layouts/page-states.d.ts +17 -0
  561. package/dist/smart-components/page/layouts/page-states.d.ts.map +1 -0
  562. package/dist/smart-components/page/layouts/page-states.js +12 -0
  563. package/dist/smart-components/page/layouts/page-states.js.map +1 -0
  564. package/dist/smart-components/page/layouts/slot-buckets.d.ts +21 -0
  565. package/dist/smart-components/page/layouts/slot-buckets.d.ts.map +1 -0
  566. package/dist/smart-components/page/layouts/slot-buckets.js +2 -0
  567. package/dist/smart-components/page/layouts/slot-buckets.js.map +1 -0
  568. package/dist/smart-components/page/layouts/split-layout.d.ts +13 -0
  569. package/dist/smart-components/page/layouts/split-layout.d.ts.map +1 -0
  570. package/dist/smart-components/page/layouts/split-layout.js +14 -0
  571. package/dist/smart-components/page/layouts/split-layout.js.map +1 -0
  572. package/dist/smart-components/page/layouts/standard-layout.d.ts +18 -0
  573. package/dist/smart-components/page/layouts/standard-layout.d.ts.map +1 -0
  574. package/dist/smart-components/page/layouts/standard-layout.js +61 -0
  575. package/dist/smart-components/page/layouts/standard-layout.js.map +1 -0
  576. package/dist/smart-components/page/page-context.d.ts +51 -0
  577. package/dist/smart-components/page/page-context.d.ts.map +1 -0
  578. package/dist/smart-components/page/page-context.js +21 -0
  579. package/dist/smart-components/page/page-context.js.map +1 -0
  580. package/dist/smart-components/page/slot.d.ts +19 -0
  581. package/dist/smart-components/page/slot.d.ts.map +1 -0
  582. package/dist/smart-components/page/slot.js +18 -0
  583. package/dist/smart-components/page/slot.js.map +1 -0
  584. package/dist/smart-components/page/smart-grid-area.d.ts +75 -0
  585. package/dist/smart-components/page/smart-grid-area.d.ts.map +1 -0
  586. package/dist/smart-components/page/smart-grid-area.js +61 -0
  587. package/dist/smart-components/page/smart-grid-area.js.map +1 -0
  588. package/dist/smart-components/page/smart-page-container.d.ts +66 -0
  589. package/dist/smart-components/page/smart-page-container.d.ts.map +1 -0
  590. package/dist/smart-components/page/smart-page-container.js +93 -0
  591. package/dist/smart-components/page/smart-page-container.js.map +1 -0
  592. package/dist/smart-components/page/smart-page-content.d.ts +70 -0
  593. package/dist/smart-components/page/smart-page-content.d.ts.map +1 -0
  594. package/dist/smart-components/page/smart-page-content.js +78 -0
  595. package/dist/smart-components/page/smart-page-content.js.map +1 -0
  596. package/dist/smart-components/page/smart-page-empty.d.ts +47 -0
  597. package/dist/smart-components/page/smart-page-empty.d.ts.map +1 -0
  598. package/dist/smart-components/page/smart-page-empty.js +37 -0
  599. package/dist/smart-components/page/smart-page-empty.js.map +1 -0
  600. package/dist/smart-components/page/smart-page-error.d.ts +59 -0
  601. package/dist/smart-components/page/smart-page-error.d.ts.map +1 -0
  602. package/dist/smart-components/page/smart-page-error.js +45 -0
  603. package/dist/smart-components/page/smart-page-error.js.map +1 -0
  604. package/dist/smart-components/page/smart-page-filters.d.ts +38 -0
  605. package/dist/smart-components/page/smart-page-filters.d.ts.map +1 -0
  606. package/dist/smart-components/page/smart-page-filters.js +33 -0
  607. package/dist/smart-components/page/smart-page-filters.js.map +1 -0
  608. package/dist/smart-components/page/smart-page-footer.d.ts +49 -0
  609. package/dist/smart-components/page/smart-page-footer.d.ts.map +1 -0
  610. package/dist/smart-components/page/smart-page-footer.js +49 -0
  611. package/dist/smart-components/page/smart-page-footer.js.map +1 -0
  612. package/dist/smart-components/page/smart-page-header.d.ts +145 -0
  613. package/dist/smart-components/page/smart-page-header.d.ts.map +1 -0
  614. package/dist/smart-components/page/smart-page-header.js +129 -0
  615. package/dist/smart-components/page/smart-page-header.js.map +1 -0
  616. package/dist/smart-components/page/smart-page-hero.d.ts +43 -0
  617. package/dist/smart-components/page/smart-page-hero.d.ts.map +1 -0
  618. package/dist/smart-components/page/smart-page-hero.js +42 -0
  619. package/dist/smart-components/page/smart-page-hero.js.map +1 -0
  620. package/dist/smart-components/page/smart-page-loading.d.ts +31 -0
  621. package/dist/smart-components/page/smart-page-loading.d.ts.map +1 -0
  622. package/dist/smart-components/page/smart-page-loading.js +29 -0
  623. package/dist/smart-components/page/smart-page-loading.js.map +1 -0
  624. package/dist/smart-components/page/smart-page-search.d.ts +39 -0
  625. package/dist/smart-components/page/smart-page-search.d.ts.map +1 -0
  626. package/dist/smart-components/page/smart-page-search.js +38 -0
  627. package/dist/smart-components/page/smart-page-search.js.map +1 -0
  628. package/dist/smart-components/page/smart-page-section.d.ts +55 -0
  629. package/dist/smart-components/page/smart-page-section.d.ts.map +1 -0
  630. package/dist/smart-components/page/smart-page-section.js +41 -0
  631. package/dist/smart-components/page/smart-page-section.js.map +1 -0
  632. package/dist/smart-components/page/smart-page-status-bar.d.ts +34 -0
  633. package/dist/smart-components/page/smart-page-status-bar.d.ts.map +1 -0
  634. package/dist/smart-components/page/smart-page-status-bar.js +33 -0
  635. package/dist/smart-components/page/smart-page-status-bar.js.map +1 -0
  636. package/dist/smart-components/page/smart-page-tabs.d.ts +93 -0
  637. package/dist/smart-components/page/smart-page-tabs.d.ts.map +1 -0
  638. package/dist/smart-components/page/smart-page-tabs.js +87 -0
  639. package/dist/smart-components/page/smart-page-tabs.js.map +1 -0
  640. package/dist/smart-components/page/smart-page.d.ts +141 -0
  641. package/dist/smart-components/page/smart-page.d.ts.map +1 -0
  642. package/dist/smart-components/page/smart-page.js +295 -0
  643. package/dist/smart-components/page/smart-page.js.map +1 -0
  644. package/dist/smart-components/page/smart-sidebar.d.ts +70 -0
  645. package/dist/smart-components/page/smart-sidebar.d.ts.map +1 -0
  646. package/dist/smart-components/page/smart-sidebar.js +54 -0
  647. package/dist/smart-components/page/smart-sidebar.js.map +1 -0
  648. package/dist/smart-components/page/smart-toolbar.d.ts +40 -0
  649. package/dist/smart-components/page/smart-toolbar.d.ts.map +1 -0
  650. package/dist/smart-components/page/smart-toolbar.js +39 -0
  651. package/dist/smart-components/page/smart-toolbar.js.map +1 -0
  652. package/dist/smart-components/search-input.d.ts +20 -0
  653. package/dist/smart-components/search-input.d.ts.map +1 -0
  654. package/dist/smart-components/search-input.js +12 -0
  655. package/dist/smart-components/search-input.js.map +1 -0
  656. package/dist/smart-components/smart-accordion.d.ts +53 -0
  657. package/dist/smart-components/smart-accordion.d.ts.map +1 -0
  658. package/dist/smart-components/smart-accordion.js +33 -0
  659. package/dist/smart-components/smart-accordion.js.map +1 -0
  660. package/dist/smart-components/smart-alert.d.ts +44 -0
  661. package/dist/smart-components/smart-alert.d.ts.map +1 -0
  662. package/dist/smart-components/smart-alert.js +27 -0
  663. package/dist/smart-components/smart-alert.js.map +1 -0
  664. package/dist/smart-components/smart-avatar.d.ts +3 -0
  665. package/dist/smart-components/smart-avatar.d.ts.map +1 -0
  666. package/dist/smart-components/smart-avatar.js +4 -0
  667. package/dist/smart-components/smart-avatar.js.map +1 -0
  668. package/dist/smart-components/smart-badge.d.ts +28 -0
  669. package/dist/smart-components/smart-badge.d.ts.map +1 -0
  670. package/dist/smart-components/smart-badge.js +24 -0
  671. package/dist/smart-components/smart-badge.js.map +1 -0
  672. package/dist/smart-components/smart-breadcrumb.d.ts +43 -0
  673. package/dist/smart-components/smart-breadcrumb.d.ts.map +1 -0
  674. package/dist/smart-components/smart-breadcrumb.js +37 -0
  675. package/dist/smart-components/smart-breadcrumb.js.map +1 -0
  676. package/dist/smart-components/smart-button.d.ts +22 -0
  677. package/dist/smart-components/smart-button.d.ts.map +1 -0
  678. package/dist/smart-components/smart-button.js +15 -0
  679. package/dist/smart-components/smart-button.js.map +1 -0
  680. package/dist/smart-components/smart-calendar.d.ts +78 -0
  681. package/dist/smart-components/smart-calendar.d.ts.map +1 -0
  682. package/dist/smart-components/smart-calendar.js +45 -0
  683. package/dist/smart-components/smart-calendar.js.map +1 -0
  684. package/dist/smart-components/smart-card.d.ts +55 -0
  685. package/dist/smart-components/smart-card.d.ts.map +1 -0
  686. package/dist/smart-components/smart-card.js +37 -0
  687. package/dist/smart-components/smart-card.js.map +1 -0
  688. package/dist/smart-components/smart-checkbox-group.d.ts +48 -0
  689. package/dist/smart-components/smart-checkbox-group.d.ts.map +1 -0
  690. package/dist/smart-components/smart-checkbox-group.js +48 -0
  691. package/dist/smart-components/smart-checkbox-group.js.map +1 -0
  692. package/dist/smart-components/smart-checkbox.d.ts +34 -0
  693. package/dist/smart-components/smart-checkbox.d.ts.map +1 -0
  694. package/dist/smart-components/smart-checkbox.js +34 -0
  695. package/dist/smart-components/smart-checkbox.js.map +1 -0
  696. package/dist/smart-components/smart-combobox.d.ts +36 -0
  697. package/dist/smart-components/smart-combobox.d.ts.map +1 -0
  698. package/dist/smart-components/smart-combobox.js +32 -0
  699. package/dist/smart-components/smart-combobox.js.map +1 -0
  700. package/dist/smart-components/smart-confirm-dialog.d.ts +63 -0
  701. package/dist/smart-components/smart-confirm-dialog.d.ts.map +1 -0
  702. package/dist/smart-components/smart-confirm-dialog.js +45 -0
  703. package/dist/smart-components/smart-confirm-dialog.js.map +1 -0
  704. package/dist/smart-components/smart-context-menu.d.ts +58 -0
  705. package/dist/smart-components/smart-context-menu.d.ts.map +1 -0
  706. package/dist/smart-components/smart-context-menu.js +38 -0
  707. package/dist/smart-components/smart-context-menu.js.map +1 -0
  708. package/dist/smart-components/smart-date-picker.d.ts +99 -0
  709. package/dist/smart-components/smart-date-picker.d.ts.map +1 -0
  710. package/dist/smart-components/smart-date-picker.js +78 -0
  711. package/dist/smart-components/smart-date-picker.js.map +1 -0
  712. package/dist/smart-components/smart-date-range-picker.d.ts +37 -0
  713. package/dist/smart-components/smart-date-range-picker.d.ts.map +1 -0
  714. package/dist/smart-components/smart-date-range-picker.js +38 -0
  715. package/dist/smart-components/smart-date-range-picker.js.map +1 -0
  716. package/dist/smart-components/smart-dialog.d.ts +75 -0
  717. package/dist/smart-components/smart-dialog.d.ts.map +1 -0
  718. package/dist/smart-components/smart-dialog.js +61 -0
  719. package/dist/smart-components/smart-dialog.js.map +1 -0
  720. package/dist/smart-components/smart-drawer.d.ts +48 -0
  721. package/dist/smart-components/smart-drawer.d.ts.map +1 -0
  722. package/dist/smart-components/smart-drawer.js +32 -0
  723. package/dist/smart-components/smart-drawer.js.map +1 -0
  724. package/dist/smart-components/smart-field.d.ts +47 -0
  725. package/dist/smart-components/smart-field.d.ts.map +1 -0
  726. package/dist/smart-components/smart-field.js +44 -0
  727. package/dist/smart-components/smart-field.js.map +1 -0
  728. package/dist/smart-components/smart-input-group.d.ts +60 -0
  729. package/dist/smart-components/smart-input-group.d.ts.map +1 -0
  730. package/dist/smart-components/smart-input-group.js +40 -0
  731. package/dist/smart-components/smart-input-group.js.map +1 -0
  732. package/dist/smart-components/smart-input.d.ts +46 -0
  733. package/dist/smart-components/smart-input.d.ts.map +1 -0
  734. package/dist/smart-components/smart-input.js +36 -0
  735. package/dist/smart-components/smart-input.js.map +1 -0
  736. package/dist/smart-components/smart-label.d.ts +22 -0
  737. package/dist/smart-components/smart-label.d.ts.map +1 -0
  738. package/dist/smart-components/smart-label.js +17 -0
  739. package/dist/smart-components/smart-label.js.map +1 -0
  740. package/dist/smart-components/smart-month-picker.d.ts +30 -0
  741. package/dist/smart-components/smart-month-picker.d.ts.map +1 -0
  742. package/dist/smart-components/smart-month-picker.js +53 -0
  743. package/dist/smart-components/smart-month-picker.js.map +1 -0
  744. package/dist/smart-components/smart-multi-select.d.ts +38 -0
  745. package/dist/smart-components/smart-multi-select.d.ts.map +1 -0
  746. package/dist/smart-components/smart-multi-select.js +56 -0
  747. package/dist/smart-components/smart-multi-select.js.map +1 -0
  748. package/dist/smart-components/smart-native-select.d.ts +45 -0
  749. package/dist/smart-components/smart-native-select.d.ts.map +1 -0
  750. package/dist/smart-components/smart-native-select.js +33 -0
  751. package/dist/smart-components/smart-native-select.js.map +1 -0
  752. package/dist/smart-components/smart-nav-sidebar.d.ts +47 -0
  753. package/dist/smart-components/smart-nav-sidebar.d.ts.map +1 -0
  754. package/dist/smart-components/smart-nav-sidebar.js +37 -0
  755. package/dist/smart-components/smart-nav-sidebar.js.map +1 -0
  756. package/dist/smart-components/smart-password-input.d.ts +31 -0
  757. package/dist/smart-components/smart-password-input.d.ts.map +1 -0
  758. package/dist/smart-components/smart-password-input.js +30 -0
  759. package/dist/smart-components/smart-password-input.js.map +1 -0
  760. package/dist/smart-components/smart-radio-group.d.ts +58 -0
  761. package/dist/smart-components/smart-radio-group.d.ts.map +1 -0
  762. package/dist/smart-components/smart-radio-group.js +49 -0
  763. package/dist/smart-components/smart-radio-group.js.map +1 -0
  764. package/dist/smart-components/smart-segmented.d.ts +33 -0
  765. package/dist/smart-components/smart-segmented.d.ts.map +1 -0
  766. package/dist/smart-components/smart-segmented.js +25 -0
  767. package/dist/smart-components/smart-segmented.js.map +1 -0
  768. package/dist/smart-components/smart-select.d.ts +71 -0
  769. package/dist/smart-components/smart-select.d.ts.map +1 -0
  770. package/dist/smart-components/smart-select.js +44 -0
  771. package/dist/smart-components/smart-select.js.map +1 -0
  772. package/dist/smart-components/smart-separator.d.ts +3 -0
  773. package/dist/smart-components/smart-separator.d.ts.map +1 -0
  774. package/dist/smart-components/smart-separator.js +4 -0
  775. package/dist/smart-components/smart-separator.js.map +1 -0
  776. package/dist/smart-components/smart-sheet.d.ts +79 -0
  777. package/dist/smart-components/smart-sheet.d.ts.map +1 -0
  778. package/dist/smart-components/smart-sheet.js +47 -0
  779. package/dist/smart-components/smart-sheet.js.map +1 -0
  780. package/dist/smart-components/smart-stat-card.d.ts +47 -0
  781. package/dist/smart-components/smart-stat-card.d.ts.map +1 -0
  782. package/dist/smart-components/smart-stat-card.js +35 -0
  783. package/dist/smart-components/smart-stat-card.js.map +1 -0
  784. package/dist/smart-components/smart-stepper.d.ts +24 -0
  785. package/dist/smart-components/smart-stepper.d.ts.map +1 -0
  786. package/dist/smart-components/smart-stepper.js +24 -0
  787. package/dist/smart-components/smart-stepper.js.map +1 -0
  788. package/dist/smart-components/smart-switch.d.ts +34 -0
  789. package/dist/smart-components/smart-switch.d.ts.map +1 -0
  790. package/dist/smart-components/smart-switch.js +34 -0
  791. package/dist/smart-components/smart-switch.js.map +1 -0
  792. package/dist/smart-components/smart-textarea.d.ts +38 -0
  793. package/dist/smart-components/smart-textarea.d.ts.map +1 -0
  794. package/dist/smart-components/smart-textarea.js +28 -0
  795. package/dist/smart-components/smart-textarea.js.map +1 -0
  796. package/dist/smart-components/smart-time-picker.d.ts +59 -0
  797. package/dist/smart-components/smart-time-picker.d.ts.map +1 -0
  798. package/dist/smart-components/smart-time-picker.js +129 -0
  799. package/dist/smart-components/smart-time-picker.js.map +1 -0
  800. package/dist/smart-components/smart-time-range-picker.d.ts +39 -0
  801. package/dist/smart-components/smart-time-range-picker.d.ts.map +1 -0
  802. package/dist/smart-components/smart-time-range-picker.js +26 -0
  803. package/dist/smart-components/smart-time-range-picker.js.map +1 -0
  804. package/dist/smart-components/smart-toaster.d.ts +10 -0
  805. package/dist/smart-components/smart-toaster.d.ts.map +1 -0
  806. package/dist/smart-components/smart-toaster.js +21 -0
  807. package/dist/smart-components/smart-toaster.js.map +1 -0
  808. package/dist/smart-components/smart-year-picker.d.ts +29 -0
  809. package/dist/smart-components/smart-year-picker.d.ts.map +1 -0
  810. package/dist/smart-components/smart-year-picker.js +43 -0
  811. package/dist/smart-components/smart-year-picker.js.map +1 -0
  812. package/dist/smart-components/spinner.d.ts +10 -0
  813. package/dist/smart-components/spinner.d.ts.map +1 -0
  814. package/dist/smart-components/spinner.js +5 -0
  815. package/dist/smart-components/spinner.js.map +1 -0
  816. package/dist/transfer-list-engine/index.d.ts +5 -0
  817. package/dist/transfer-list-engine/index.d.ts.map +1 -0
  818. package/dist/transfer-list-engine/index.js +3 -0
  819. package/dist/transfer-list-engine/index.js.map +1 -0
  820. package/dist/transfer-list-engine/transfer-list.d.ts +53 -0
  821. package/dist/transfer-list-engine/transfer-list.d.ts.map +1 -0
  822. package/dist/transfer-list-engine/transfer-list.js +190 -0
  823. package/dist/transfer-list-engine/transfer-list.js.map +1 -0
  824. package/dist/transfer-list-engine/transfer-utils.d.ts +30 -0
  825. package/dist/transfer-list-engine/transfer-utils.d.ts.map +1 -0
  826. package/dist/transfer-list-engine/transfer-utils.js +69 -0
  827. package/dist/transfer-list-engine/transfer-utils.js.map +1 -0
  828. package/dist/transfer-list-engine/types.d.ts +51 -0
  829. package/dist/transfer-list-engine/types.d.ts.map +1 -0
  830. package/dist/transfer-list-engine/types.js +2 -0
  831. package/dist/transfer-list-engine/types.js.map +1 -0
  832. package/dist/tree-engine/index.d.ts +6 -0
  833. package/dist/tree-engine/index.d.ts.map +1 -0
  834. package/dist/tree-engine/index.js +3 -0
  835. package/dist/tree-engine/index.js.map +1 -0
  836. package/dist/tree-engine/tree-utils.d.ts +84 -0
  837. package/dist/tree-engine/tree-utils.d.ts.map +1 -0
  838. package/dist/tree-engine/tree-utils.js +271 -0
  839. package/dist/tree-engine/tree-utils.js.map +1 -0
  840. package/dist/tree-engine/tree.d.ts +98 -0
  841. package/dist/tree-engine/tree.d.ts.map +1 -0
  842. package/dist/tree-engine/tree.js +430 -0
  843. package/dist/tree-engine/tree.js.map +1 -0
  844. package/dist/tree-engine/types.d.ts +85 -0
  845. package/dist/tree-engine/types.d.ts.map +1 -0
  846. package/dist/tree-engine/types.js +2 -0
  847. package/dist/tree-engine/types.js.map +1 -0
  848. package/dist/tree-engine/use-tree.d.ts +12 -0
  849. package/dist/tree-engine/use-tree.d.ts.map +1 -0
  850. package/dist/tree-engine/use-tree.js +34 -0
  851. package/dist/tree-engine/use-tree.js.map +1 -0
  852. package/package.json +158 -0
  853. package/src/styles/globals.css +161 -0
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Dependency-free `.xlsx` (OOXML SpreadsheetML) writer.
3
+ *
4
+ * The library externalizes every runtime dependency and ships no CSS, so rather
5
+ * than pull a heavyweight spreadsheet package in for a single export button, we
6
+ * emit a minimal-yet-valid workbook by hand: a small set of OOXML parts packed
7
+ * into a ZIP using **stored** (uncompressed) entries. Strings are written as
8
+ * inline strings (`t="inlineStr"`) so no shared-strings table is needed, and
9
+ * finite numbers are written as numeric cells so Excel treats them as numbers.
10
+ *
11
+ * This is intentionally tiny — it covers a single worksheet with a header row,
12
+ * which is exactly what a data-grid export needs. It is **not** a general
13
+ * spreadsheet library.
14
+ *
15
+ * Exports are styled by default (see {@link XlsxTheme}): a colored header row
16
+ * with bold text and filter dropdowns, zebra-striped data rows, a frozen
17
+ * header, and auto-fit column widths — all emitted through a hand-written
18
+ * `xl/styles.xml`, still with zero dependencies. Pass `theme: "plain"` for
19
+ * bare cells.
20
+ *
21
+ * **Performance contract:** the build is synchronous on the main thread.
22
+ * Measured on V8 (Node 22, Chromium-class engine, 2026-07): 10k cells ≈ 30 ms,
23
+ * **50k cells ≈ 135 ms**, 100k cells ≈ 450 ms, 200k cells ≈ 1 s. Exports up to
24
+ * ~50k cells are comfortable; beyond ~100k cells the UI freeze becomes
25
+ * noticeable — at that scale, call {@link buildXlsx} (it is pure and
26
+ * environment-agnostic) from a Web Worker and hand the resulting bytes back for
27
+ * download instead of using {@link downloadXlsx} directly.
28
+ */
29
+ /** A value that can be written to a worksheet cell. */
30
+ export type XlsxCell = string | number | boolean | null | undefined;
31
+ /**
32
+ * Visual treatment for the workbook. All fields optional — the defaults give
33
+ * exports a polished look out of the box (indigo header with bold white text,
34
+ * zebra-striped rows, frozen header with filter dropdowns, auto-fit columns).
35
+ */
36
+ export interface XlsxTheme {
37
+ /** Header row fill, hex RGB (`"4F46E5"` or `"#4F46E5"`). */
38
+ headerFill?: string;
39
+ /** Header text color, hex RGB. Default white. */
40
+ headerText?: string;
41
+ /** Fill for every second data row, hex RGB; `false` disables striping. */
42
+ stripe?: string | false;
43
+ /** Keep the header row visible while scrolling. Default `true`. */
44
+ freezeHeader?: boolean;
45
+ /** Filter dropdowns on the header row. Default `true`. */
46
+ autoFilter?: boolean;
47
+ /** Fit column widths to their longest content. Default `true`. */
48
+ autoWidth?: boolean;
49
+ }
50
+ /** One worksheet's worth of tabular data. */
51
+ export interface XlsxSheet {
52
+ /** Worksheet tab name. Default `"Sheet1"`. */
53
+ name?: string;
54
+ /** The header row. */
55
+ headers: string[];
56
+ /** Body rows, each aligned to `headers`. */
57
+ rows: XlsxCell[][];
58
+ /**
59
+ * Styling. Omit for the themed default look, override individual
60
+ * {@link XlsxTheme} fields, or pass `"plain"` for bare unstyled cells.
61
+ */
62
+ theme?: XlsxTheme | "plain";
63
+ }
64
+ /**
65
+ * Build a single-worksheet `.xlsx` workbook as raw bytes. Pure and
66
+ * environment-agnostic — call {@link downloadXlsx} to also trigger a download.
67
+ */
68
+ export declare const buildXlsx: (sheet: XlsxSheet) => Uint8Array;
69
+ /**
70
+ * Timestamp suffix for an export filename, e.g. `2025-06-25-4-18-07-005`
71
+ * (`year-month-day-hour-minute-second-millisecond`). The hour is not
72
+ * zero-padded, matching the requested format.
73
+ */
74
+ export declare const timestampForFilename: (date?: Date) => string;
75
+ /**
76
+ * Build a `.xlsx` workbook and trigger a browser download. `fileName` may omit
77
+ * the `.xlsx` extension (it is appended when missing). No-op outside a DOM.
78
+ */
79
+ export declare const downloadXlsx: (fileName: string, sheet: XlsxSheet) => void;
80
+ //# sourceMappingURL=xlsx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx.d.ts","sourceRoot":"","sources":["../../src/lib/xlsx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,uDAAuD;AACvD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;AAEnE;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACvB,mEAAmE;IACnE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sBAAsB;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,4CAA4C;IAC5C,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAA;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;CAC5B;AA6WD;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,SAAS,KAAG,UAqB5C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAM,IAAiB,KAAG,MAY9D,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,EAAE,OAAO,SAAS,KAAG,IAsBjE,CAAA"}
@@ -0,0 +1,377 @@
1
+ /**
2
+ * Dependency-free `.xlsx` (OOXML SpreadsheetML) writer.
3
+ *
4
+ * The library externalizes every runtime dependency and ships no CSS, so rather
5
+ * than pull a heavyweight spreadsheet package in for a single export button, we
6
+ * emit a minimal-yet-valid workbook by hand: a small set of OOXML parts packed
7
+ * into a ZIP using **stored** (uncompressed) entries. Strings are written as
8
+ * inline strings (`t="inlineStr"`) so no shared-strings table is needed, and
9
+ * finite numbers are written as numeric cells so Excel treats them as numbers.
10
+ *
11
+ * This is intentionally tiny — it covers a single worksheet with a header row,
12
+ * which is exactly what a data-grid export needs. It is **not** a general
13
+ * spreadsheet library.
14
+ *
15
+ * Exports are styled by default (see {@link XlsxTheme}): a colored header row
16
+ * with bold text and filter dropdowns, zebra-striped data rows, a frozen
17
+ * header, and auto-fit column widths — all emitted through a hand-written
18
+ * `xl/styles.xml`, still with zero dependencies. Pass `theme: "plain"` for
19
+ * bare cells.
20
+ *
21
+ * **Performance contract:** the build is synchronous on the main thread.
22
+ * Measured on V8 (Node 22, Chromium-class engine, 2026-07): 10k cells ≈ 30 ms,
23
+ * **50k cells ≈ 135 ms**, 100k cells ≈ 450 ms, 200k cells ≈ 1 s. Exports up to
24
+ * ~50k cells are comfortable; beyond ~100k cells the UI freeze becomes
25
+ * noticeable — at that scale, call {@link buildXlsx} (it is pure and
26
+ * environment-agnostic) from a Web Worker and hand the resulting bytes back for
27
+ * download instead of using {@link downloadXlsx} directly.
28
+ */
29
+ /* --------------------------------- CRC-32 --------------------------------- */
30
+ const CRC_TABLE = /* @__PURE__ */ (() => {
31
+ const table = new Uint32Array(256);
32
+ for (let n = 0; n < 256; n += 1) {
33
+ let c = n;
34
+ for (let k = 0; k < 8; k += 1) {
35
+ c = (c & 1) !== 0 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
36
+ }
37
+ table[n] = c >>> 0;
38
+ }
39
+ return table;
40
+ })();
41
+ const crc32 = (bytes) => {
42
+ let crc = 0xffffffff;
43
+ for (let i = 0; i < bytes.length; i += 1) {
44
+ crc = CRC_TABLE[(crc ^ bytes[i]) & 0xff] ^ (crc >>> 8);
45
+ }
46
+ return (crc ^ 0xffffffff) >>> 0;
47
+ };
48
+ const pushU16 = (out, value) => {
49
+ out.push(value & 0xff, (value >>> 8) & 0xff);
50
+ };
51
+ const pushU32 = (out, value) => {
52
+ out.push(value & 0xff, (value >>> 8) & 0xff, (value >>> 16) & 0xff, (value >>> 24) & 0xff);
53
+ };
54
+ const pushBytes = (out, bytes) => {
55
+ for (let i = 0; i < bytes.length; i += 1)
56
+ out.push(bytes[i]);
57
+ };
58
+ /** Pack entries into a ZIP archive using stored (method 0 / no compression) entries. */
59
+ const zipStore = (entries) => {
60
+ const encoder = new TextEncoder();
61
+ const local = [];
62
+ const records = [];
63
+ for (const entry of entries) {
64
+ const nameBytes = encoder.encode(entry.name);
65
+ const crc = crc32(entry.data);
66
+ const offset = local.length;
67
+ pushU32(local, 0x04034b50); // local file header signature
68
+ pushU16(local, 20); // version needed to extract
69
+ pushU16(local, 0); // general purpose flags
70
+ pushU16(local, 0); // compression method (0 = stored)
71
+ pushU16(local, 0); // last mod time
72
+ pushU16(local, 0); // last mod date
73
+ pushU32(local, crc);
74
+ pushU32(local, entry.data.length); // compressed size
75
+ pushU32(local, entry.data.length); // uncompressed size
76
+ pushU16(local, nameBytes.length);
77
+ pushU16(local, 0); // extra field length
78
+ pushBytes(local, nameBytes);
79
+ pushBytes(local, entry.data);
80
+ records.push({ nameBytes, crc, size: entry.data.length, offset });
81
+ }
82
+ const centralOffset = local.length;
83
+ const central = [];
84
+ for (const record of records) {
85
+ pushU32(central, 0x02014b50); // central directory header signature
86
+ pushU16(central, 20); // version made by
87
+ pushU16(central, 20); // version needed to extract
88
+ pushU16(central, 0); // general purpose flags
89
+ pushU16(central, 0); // compression method
90
+ pushU16(central, 0); // last mod time
91
+ pushU16(central, 0); // last mod date
92
+ pushU32(central, record.crc);
93
+ pushU32(central, record.size); // compressed size
94
+ pushU32(central, record.size); // uncompressed size
95
+ pushU16(central, record.nameBytes.length);
96
+ pushU16(central, 0); // extra field length
97
+ pushU16(central, 0); // file comment length
98
+ pushU16(central, 0); // disk number start
99
+ pushU16(central, 0); // internal file attributes
100
+ pushU32(central, 0); // external file attributes
101
+ pushU32(central, record.offset); // relative offset of local header
102
+ pushBytes(central, record.nameBytes);
103
+ }
104
+ const eocd = [];
105
+ pushU32(eocd, 0x06054b50); // end of central directory signature
106
+ pushU16(eocd, 0); // number of this disk
107
+ pushU16(eocd, 0); // disk where central directory starts
108
+ pushU16(eocd, records.length); // central directory records on this disk
109
+ pushU16(eocd, records.length); // total central directory records
110
+ pushU32(eocd, central.length); // size of central directory
111
+ pushU32(eocd, centralOffset); // offset of central directory
112
+ pushU16(eocd, 0); // comment length
113
+ return Uint8Array.from(local.concat(central, eocd));
114
+ };
115
+ /* --------------------------------- OOXML ---------------------------------- */
116
+ const XML_DECLARATION = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
117
+ /**
118
+ * Drop characters that are illegal in XML 1.0 (control chars below `0x20` other
119
+ * than tab, LF and CR) so a stray control byte in the data can never corrupt the
120
+ * workbook. Implemented as a char-code scan to avoid a control-char regex.
121
+ */
122
+ const stripIllegalXmlChars = (value) => {
123
+ let out = "";
124
+ for (let i = 0; i < value.length; i += 1) {
125
+ const code = value.charCodeAt(i);
126
+ if (code < 0x20 && code !== 0x09 && code !== 0x0a && code !== 0x0d)
127
+ continue;
128
+ out += value[i];
129
+ }
130
+ return out;
131
+ };
132
+ const escapeXml = (value) => stripIllegalXmlChars(value)
133
+ .replace(/&/g, "&amp;")
134
+ .replace(/</g, "&lt;")
135
+ .replace(/>/g, "&gt;")
136
+ .replace(/"/g, "&quot;");
137
+ /** 0 → `A`, 25 → `Z`, 26 → `AA`, … (spreadsheet column letters). */
138
+ const columnName = (index) => {
139
+ let n = index;
140
+ let name = "";
141
+ do {
142
+ name = String.fromCharCode(65 + (n % 26)) + name;
143
+ n = Math.floor(n / 26) - 1;
144
+ } while (n >= 0);
145
+ return name;
146
+ };
147
+ /** `"#4f46e5"` / `"4F46E5"` → OOXML ARGB `"FF4F46E5"`; invalid input → fallback. */
148
+ const toArgb = (color, fallback) => {
149
+ const hex = (color ?? "").replace(/^#/, "").toUpperCase();
150
+ return /^[0-9A-F]{6}$/.test(hex) ? `FF${hex}` : `FF${fallback}`;
151
+ };
152
+ /** Darken an ARGB color (used for the header's bottom accent border). */
153
+ const darkenArgb = (argb, factor = 0.72) => {
154
+ let out = "FF";
155
+ for (let i = 2; i < 8; i += 2) {
156
+ const channel = Math.round(parseInt(argb.slice(i, i + 2), 16) * factor);
157
+ out += channel.toString(16).padStart(2, "0").toUpperCase();
158
+ }
159
+ return out;
160
+ };
161
+ const resolveTheme = (theme) => {
162
+ if (theme === "plain") {
163
+ return {
164
+ headerFill: "",
165
+ headerText: "",
166
+ stripe: false,
167
+ freezeHeader: false,
168
+ autoFilter: false,
169
+ autoWidth: false,
170
+ styled: false,
171
+ };
172
+ }
173
+ return {
174
+ headerFill: toArgb(theme?.headerFill, "4F46E5"), // indigo-600
175
+ headerText: toArgb(theme?.headerText, "FFFFFF"),
176
+ stripe: theme?.stripe === false ? false : toArgb(theme?.stripe, "F1F5F9"), // slate-100
177
+ freezeHeader: theme?.freezeHeader ?? true,
178
+ autoFilter: theme?.autoFilter ?? true,
179
+ autoWidth: theme?.autoWidth ?? true,
180
+ styled: true,
181
+ };
182
+ };
183
+ /**
184
+ * Cell style indices into `cellXfs` in {@link stylesXml}. Order matters — keep
185
+ * the two lists in sync.
186
+ */
187
+ const STYLE_HEADER = 1;
188
+ const STYLE_STRIPE = 2;
189
+ const stylesXml = (theme) => XML_DECLARATION +
190
+ '<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">' +
191
+ '<fonts count="2">' +
192
+ '<font><sz val="11"/><name val="Calibri"/></font>' +
193
+ `<font><b/><sz val="11"/><color rgb="${theme.headerText}"/><name val="Calibri"/></font>` +
194
+ "</fonts>" +
195
+ // Fill indices 0 (none) and 1 (gray125) are reserved by the spec.
196
+ '<fills count="4">' +
197
+ '<fill><patternFill patternType="none"/></fill>' +
198
+ '<fill><patternFill patternType="gray125"/></fill>' +
199
+ `<fill><patternFill patternType="solid"><fgColor rgb="${theme.headerFill}"/><bgColor indexed="64"/></patternFill></fill>` +
200
+ `<fill><patternFill patternType="solid"><fgColor rgb="${theme.stripe === false ? "FFF1F5F9" : theme.stripe}"/><bgColor indexed="64"/></patternFill></fill>` +
201
+ "</fills>" +
202
+ '<borders count="2">' +
203
+ "<border><left/><right/><top/><bottom/><diagonal/></border>" +
204
+ `<border><left/><right/><top/><bottom style="thin"><color rgb="${darkenArgb(theme.headerFill)}"/></bottom><diagonal/></border>` +
205
+ "</borders>" +
206
+ '<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>' +
207
+ '<cellXfs count="3">' +
208
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>' +
209
+ // STYLE_HEADER
210
+ '<xf numFmtId="0" fontId="1" fillId="2" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center"/></xf>' +
211
+ // STYLE_STRIPE
212
+ '<xf numFmtId="0" fontId="0" fillId="3" borderId="0" xfId="0" applyFill="1"/>' +
213
+ "</cellXfs>" +
214
+ "</styleSheet>";
215
+ /**
216
+ * Approximate Excel column widths (in characters) from the longest content in
217
+ * each column. Scans at most the first 1,000 rows so huge exports don't pay
218
+ * for a second full pass.
219
+ */
220
+ const columnWidths = (sheet) => {
221
+ const widths = sheet.headers.map((header) => header.length);
222
+ const sample = sheet.rows.slice(0, 1000);
223
+ for (const row of sample) {
224
+ row.forEach((value, index) => {
225
+ if (value == null)
226
+ return;
227
+ const length = String(value).length;
228
+ if (length > (widths[index] ?? 0))
229
+ widths[index] = length;
230
+ });
231
+ }
232
+ // +3 leaves room for the header's filter dropdown arrow.
233
+ return widths.map((w) => Math.min(Math.max(w + 3, 10), 60));
234
+ };
235
+ const cellXml = (ref, value, styleId) => {
236
+ const s = styleId > 0 ? ` s="${styleId}"` : "";
237
+ if (value == null || value === "")
238
+ return `<c r="${ref}"${s}/>`;
239
+ if (typeof value === "number" && Number.isFinite(value))
240
+ return `<c r="${ref}"${s}><v>${value}</v></c>`;
241
+ if (typeof value === "boolean")
242
+ return `<c r="${ref}"${s} t="b"><v>${value ? 1 : 0}</v></c>`;
243
+ return `<c r="${ref}"${s} t="inlineStr"><is><t xml:space="preserve">${escapeXml(String(value))}</t></is></c>`;
244
+ };
245
+ const rowXml = (rowNumber, cells, styleId, height) => {
246
+ const body = cells
247
+ .map((value, col) => cellXml(`${columnName(col)}${rowNumber}`, value, styleId))
248
+ .join("");
249
+ const ht = height != null ? ` ht="${height}" customHeight="1"` : "";
250
+ return `<row r="${rowNumber}"${ht}>${body}</row>`;
251
+ };
252
+ const sheetXml = (sheet, theme) => {
253
+ const rows = [
254
+ rowXml(1, sheet.headers, theme.styled ? STYLE_HEADER : 0, theme.styled ? 22 : undefined),
255
+ ];
256
+ sheet.rows.forEach((row, index) => {
257
+ // Stripe every second data row (data starts on row 2 → stripe 3, 5, 7…).
258
+ const striped = theme.styled && theme.stripe !== false && index % 2 === 1;
259
+ rows.push(rowXml(index + 2, row, striped ? STYLE_STRIPE : 0));
260
+ });
261
+ const lastColumn = columnName(Math.max(sheet.headers.length - 1, 0));
262
+ const lastRow = sheet.rows.length + 1;
263
+ const sheetViews = theme.freezeHeader
264
+ ? '<sheetViews><sheetView workbookViewId="0"><pane ySplit="1" topLeftCell="A2" activePane="bottomLeft" state="frozen"/></sheetView></sheetViews>'
265
+ : "";
266
+ const cols = theme.autoWidth
267
+ ? `<cols>${columnWidths(sheet)
268
+ .map((width, index) => `<col min="${index + 1}" max="${index + 1}" width="${width}" customWidth="1"/>`)
269
+ .join("")}</cols>`
270
+ : "";
271
+ const autoFilter = theme.autoFilter && sheet.headers.length > 0
272
+ ? `<autoFilter ref="A1:${lastColumn}${lastRow}"/>`
273
+ : "";
274
+ return (XML_DECLARATION +
275
+ '<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">' +
276
+ sheetViews +
277
+ cols +
278
+ `<sheetData>${rows.join("")}</sheetData>` +
279
+ autoFilter +
280
+ "</worksheet>");
281
+ };
282
+ const contentTypesXml = () => XML_DECLARATION +
283
+ '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">' +
284
+ '<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>' +
285
+ '<Default Extension="xml" ContentType="application/xml"/>' +
286
+ '<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>' +
287
+ '<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>' +
288
+ '<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>' +
289
+ "</Types>";
290
+ const rootRelsXml = () => XML_DECLARATION +
291
+ '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' +
292
+ '<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>' +
293
+ "</Relationships>";
294
+ const workbookXml = (sheetName) => XML_DECLARATION +
295
+ '<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" ' +
296
+ 'xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">' +
297
+ `<sheets><sheet name="${escapeXml(sheetName)}" sheetId="1" r:id="rId1"/></sheets>` +
298
+ "</workbook>";
299
+ const workbookRelsXml = () => XML_DECLARATION +
300
+ '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">' +
301
+ '<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>' +
302
+ '<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>' +
303
+ "</Relationships>";
304
+ /** Excel worksheet names cannot exceed 31 chars or contain `\ / ? * [ ] :`. */
305
+ const sanitizeSheetName = (name) => {
306
+ const cleaned = (name ?? "").replace(/[\\/?*[\]:]/g, " ").trim();
307
+ return cleaned.length > 0 ? cleaned.slice(0, 31) : "Sheet1";
308
+ };
309
+ /**
310
+ * Build a single-worksheet `.xlsx` workbook as raw bytes. Pure and
311
+ * environment-agnostic — call {@link downloadXlsx} to also trigger a download.
312
+ */
313
+ export const buildXlsx = (sheet) => {
314
+ const theme = resolveTheme(sheet.theme);
315
+ const encoder = new TextEncoder();
316
+ const entries = [
317
+ { name: "[Content_Types].xml", data: encoder.encode(contentTypesXml()) },
318
+ { name: "_rels/.rels", data: encoder.encode(rootRelsXml()) },
319
+ {
320
+ name: "xl/workbook.xml",
321
+ data: encoder.encode(workbookXml(sanitizeSheetName(sheet.name))),
322
+ },
323
+ {
324
+ name: "xl/_rels/workbook.xml.rels",
325
+ data: encoder.encode(workbookRelsXml()),
326
+ },
327
+ { name: "xl/styles.xml", data: encoder.encode(stylesXml(theme)) },
328
+ {
329
+ name: "xl/worksheets/sheet1.xml",
330
+ data: encoder.encode(sheetXml(sheet, theme)),
331
+ },
332
+ ];
333
+ return zipStore(entries);
334
+ };
335
+ /**
336
+ * Timestamp suffix for an export filename, e.g. `2025-06-25-4-18-07-005`
337
+ * (`year-month-day-hour-minute-second-millisecond`). The hour is not
338
+ * zero-padded, matching the requested format.
339
+ */
340
+ export const timestampForFilename = (date = new Date()) => {
341
+ const pad = (value, length = 2) => String(value).padStart(length, "0");
342
+ return [
343
+ date.getFullYear(),
344
+ pad(date.getMonth() + 1),
345
+ pad(date.getDate()),
346
+ date.getHours(),
347
+ pad(date.getMinutes()),
348
+ pad(date.getSeconds()),
349
+ pad(date.getMilliseconds(), 3),
350
+ ].join("-");
351
+ };
352
+ /**
353
+ * Build a `.xlsx` workbook and trigger a browser download. `fileName` may omit
354
+ * the `.xlsx` extension (it is appended when missing). No-op outside a DOM.
355
+ */
356
+ export const downloadXlsx = (fileName, sheet) => {
357
+ if (typeof document === "undefined" ||
358
+ typeof URL.createObjectURL !== "function")
359
+ return;
360
+ const bytes = buildXlsx(sheet);
361
+ // Copy into a concrete ArrayBuffer so the Blob part type is unambiguous.
362
+ const buffer = new ArrayBuffer(bytes.byteLength);
363
+ new Uint8Array(buffer).set(bytes);
364
+ const blob = new Blob([buffer], {
365
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
366
+ });
367
+ const url = URL.createObjectURL(blob);
368
+ const anchor = document.createElement("a");
369
+ anchor.href = url;
370
+ anchor.download = /\.xlsx$/i.test(fileName) ? fileName : `${fileName}.xlsx`;
371
+ document.body.appendChild(anchor);
372
+ anchor.click();
373
+ anchor.remove();
374
+ // Revoke on the next tick so the click has a chance to start the download.
375
+ setTimeout(() => URL.revokeObjectURL(url), 0);
376
+ };
377
+ //# sourceMappingURL=xlsx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../src/lib/xlsx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Query building for the search engine: collapse a raw form-state object (which
3
+ * carries a value for *every* field, most of them blank) down to only the
4
+ * meaningful filters, so the object handed to the API is clean.
5
+ *
6
+ * { name: "", email: "a@b.com", role: null, status: [] } → { email: "a@b.com" }
7
+ */
8
+ /**
9
+ * Whether a value carries no filter intent and should be dropped from the query.
10
+ *
11
+ * - `null` / `undefined` → empty
12
+ * - empty or whitespace-only string → empty
13
+ * - empty array → empty
14
+ * - `false` boolean → empty (a checkbox/switch filters only when *on*; an
15
+ * explicit "no" filter should model its two states as a string/enum instead)
16
+ * - `Date` → never empty
17
+ * - object (e.g. a date range) → empty only when every own value is empty
18
+ * - numbers (incl. `0`) → never empty
19
+ */
20
+ export declare const isEmptyValue: (value: unknown) => boolean;
21
+ /**
22
+ * Prune a raw search-state object to only its meaningful values, trimming
23
+ * strings along the way. The result is a `Partial<T>` suitable for sending to an
24
+ * API or serializing into a URL — empty fields simply aren't present.
25
+ */
26
+ export declare const buildSearchQuery: <T extends Record<string, unknown>>(data: T) => Partial<T>;
27
+ /** Number of active (non-empty) filters in a raw search-state object. */
28
+ export declare const countActiveFilters: (data: Record<string, unknown>) => number;
29
+ //# sourceMappingURL=build-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-query.d.ts","sourceRoot":"","sources":["../../src/search-engine/build-query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,OAS7C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,MAAM,CAAC,KACN,OAAO,CAAC,CAAC,CAOX,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MACvB,CAAA"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Query building for the search engine: collapse a raw form-state object (which
3
+ * carries a value for *every* field, most of them blank) down to only the
4
+ * meaningful filters, so the object handed to the API is clean.
5
+ *
6
+ * { name: "", email: "a@b.com", role: null, status: [] } → { email: "a@b.com" }
7
+ */
8
+ /**
9
+ * Whether a value carries no filter intent and should be dropped from the query.
10
+ *
11
+ * - `null` / `undefined` → empty
12
+ * - empty or whitespace-only string → empty
13
+ * - empty array → empty
14
+ * - `false` boolean → empty (a checkbox/switch filters only when *on*; an
15
+ * explicit "no" filter should model its two states as a string/enum instead)
16
+ * - `Date` → never empty
17
+ * - object (e.g. a date range) → empty only when every own value is empty
18
+ * - numbers (incl. `0`) → never empty
19
+ */
20
+ export const isEmptyValue = (value) => {
21
+ if (value == null)
22
+ return true;
23
+ if (typeof value === "string")
24
+ return value.trim() === "";
25
+ if (Array.isArray(value))
26
+ return value.length === 0;
27
+ if (typeof value === "boolean")
28
+ return !value;
29
+ if (value instanceof Date)
30
+ return false;
31
+ if (typeof value === "object")
32
+ return Object.values(value).every(isEmptyValue);
33
+ return false;
34
+ };
35
+ /**
36
+ * Prune a raw search-state object to only its meaningful values, trimming
37
+ * strings along the way. The result is a `Partial<T>` suitable for sending to an
38
+ * API or serializing into a URL — empty fields simply aren't present.
39
+ */
40
+ export const buildSearchQuery = (data) => {
41
+ const out = {};
42
+ for (const [key, value] of Object.entries(data)) {
43
+ if (isEmptyValue(value))
44
+ continue;
45
+ out[key] = typeof value === "string" ? value.trim() : value;
46
+ }
47
+ return out;
48
+ };
49
+ /** Number of active (non-empty) filters in a raw search-state object. */
50
+ export const countActiveFilters = (data) => Object.keys(buildSearchQuery(data)).length;
51
+ //# sourceMappingURL=build-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-query.js","sourceRoot":"","sources":["../../src/search-engine/build-query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAW,EAAE;IACtD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAA;IACnD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,CAAA;IAC7C,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAA;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,KAAgC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAC5E,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAO,EACK,EAAE;IACd,MAAM,GAAG,GAA4B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,YAAY,CAAC,KAAK,CAAC;YAAE,SAAQ;QACjC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAC7D,CAAC;IACD,OAAO,GAAiB,CAAA;AAC1B,CAAC,CAAA;AAED,yEAAyE;AACzE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAA6B,EAAU,EAAE,CAC1E,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `@iamsaroj/smart-ui/search-engine` — a reusable search / filter bar built on top of
3
+ * the form engine.
4
+ *
5
+ * import { SmartSearchForm, type SearchFieldDefinition } from "@iamsaroj/smart-ui/search-engine"
6
+ *
7
+ * `SmartSearchForm` composes `SmartForm`: same declarative fields and Zod
8
+ * validation, plus manual/auto search, empty-value pruning, and an action bar.
9
+ * `SearchEngine` is an alias of the same component.
10
+ */
11
+ export { SmartSearchForm, SearchEngine } from "./smart-search-form";
12
+ export type { SmartSearchFormProps } from "./smart-search-form";
13
+ export type { SearchFieldDefinition, SearchFieldType } from "./types";
14
+ export { buildSearchQuery, countActiveFilters, isEmptyValue, } from "./build-query";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search-engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACrE,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GACb,MAAM,eAAe,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `@iamsaroj/smart-ui/search-engine` — a reusable search / filter bar built on top of
3
+ * the form engine.
4
+ *
5
+ * import { SmartSearchForm, type SearchFieldDefinition } from "@iamsaroj/smart-ui/search-engine"
6
+ *
7
+ * `SmartSearchForm` composes `SmartForm`: same declarative fields and Zod
8
+ * validation, plus manual/auto search, empty-value pruning, and an action bar.
9
+ * `SearchEngine` is an alias of the same component.
10
+ */
11
+ export { SmartSearchForm, SearchEngine } from "./smart-search-form";
12
+ export { buildSearchQuery, countActiveFilters, isEmptyValue, } from "./build-query";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search-engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGnE,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GACb,MAAM,eAAe,CAAA"}