ikoncomponents 1.5.5 → 1.5.7

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 (423) hide show
  1. package/README.md +36 -36
  2. package/dist/hooks/use-mobile.d.ts +1 -0
  3. package/dist/hooks/use-mobile.js +15 -0
  4. package/dist/ikoncomponents/action-menu/index.d.ts +5 -0
  5. package/dist/ikoncomponents/action-menu/index.js +42 -0
  6. package/dist/ikoncomponents/action-menu/type.d.ts +14 -0
  7. package/dist/ikoncomponents/action-menu/type.js +1 -0
  8. package/dist/ikoncomponents/activity-sheet/index.d.ts +11 -0
  9. package/dist/ikoncomponents/activity-sheet/index.js +23 -0
  10. package/dist/ikoncomponents/alert-dialog/dialog-context.d.ts +21 -0
  11. package/dist/ikoncomponents/alert-dialog/dialog-context.js +30 -0
  12. package/dist/ikoncomponents/alert-dialog/index.d.ts +14 -0
  13. package/dist/ikoncomponents/alert-dialog/index.js +20 -0
  14. package/dist/ikoncomponents/app-breadcrumb/BreadcrumbProvider.d.ts +18 -0
  15. package/dist/ikoncomponents/app-breadcrumb/BreadcrumbProvider.js +43 -0
  16. package/dist/ikoncomponents/app-breadcrumb/index.d.ts +5 -0
  17. package/dist/ikoncomponents/app-breadcrumb/index.js +57 -0
  18. package/dist/ikoncomponents/big-calendar/big-calender-event/index.d.ts +5 -0
  19. package/dist/ikoncomponents/big-calendar/big-calender-event/index.js +16 -0
  20. package/dist/ikoncomponents/big-calendar/big-calender-toolbar/index.d.ts +2 -0
  21. package/dist/ikoncomponents/big-calendar/big-calender-toolbar/index.js +39 -0
  22. package/dist/ikoncomponents/big-calendar/index.d.ts +3 -0
  23. package/dist/ikoncomponents/big-calendar/index.js +35 -0
  24. package/dist/ikoncomponents/big-calendar/type.d.ts +31 -0
  25. package/dist/ikoncomponents/big-calendar/type.js +1 -0
  26. package/dist/ikoncomponents/buttons/index.d.ts +18 -0
  27. package/dist/ikoncomponents/buttons/index.js +38 -0
  28. package/dist/ikoncomponents/combobox-input/index.d.ts +2 -0
  29. package/dist/ikoncomponents/combobox-input/index.js +18 -0
  30. package/dist/ikoncomponents/combobox-input/type.d.ts +13 -0
  31. package/dist/ikoncomponents/combobox-input/type.js +1 -0
  32. package/dist/ikoncomponents/custom-combo-dropdown/index.d.ts +21 -0
  33. package/dist/ikoncomponents/custom-combo-dropdown/index.js +85 -0
  34. package/dist/ikoncomponents/data-table/datatable-column-filter/index.d.ts +2 -0
  35. package/dist/ikoncomponents/data-table/datatable-column-filter/index.js +22 -0
  36. package/dist/ikoncomponents/data-table/datatable-faceted-filter/index.d.ts +2 -0
  37. package/dist/ikoncomponents/data-table/datatable-faceted-filter/index.js +35 -0
  38. package/dist/ikoncomponents/data-table/datatable-filter-menu/index.d.ts +2 -0
  39. package/dist/ikoncomponents/data-table/datatable-filter-menu/index.js +38 -0
  40. package/dist/ikoncomponents/data-table/datatable-pagination/index.d.ts +2 -0
  41. package/dist/ikoncomponents/data-table/datatable-pagination/index.js +13 -0
  42. package/dist/ikoncomponents/data-table/datatable-toolbar/index.d.ts +2 -0
  43. package/dist/ikoncomponents/data-table/datatable-toolbar/index.js +18 -0
  44. package/dist/ikoncomponents/data-table/function.d.ts +1 -0
  45. package/dist/ikoncomponents/data-table/function.js +6 -0
  46. package/dist/ikoncomponents/data-table/index.d.ts +2 -0
  47. package/dist/ikoncomponents/data-table/index.js +223 -0
  48. package/dist/ikoncomponents/data-table/type.d.ts +60 -0
  49. package/dist/ikoncomponents/data-table/type.js +1 -0
  50. package/dist/ikoncomponents/e-chart/index.d.ts +15 -0
  51. package/dist/ikoncomponents/e-chart/index.js +115 -0
  52. package/dist/ikoncomponents/file-input/index.d.ts +1 -0
  53. package/dist/ikoncomponents/file-input/index.js +21 -0
  54. package/dist/ikoncomponents/fileUpload/index.d.ts +15 -0
  55. package/dist/ikoncomponents/fileUpload/index.js +69 -0
  56. package/dist/ikoncomponents/form-fields/combobox-input/index.d.ts +2 -0
  57. package/dist/ikoncomponents/form-fields/combobox-input/index.js +21 -0
  58. package/dist/ikoncomponents/form-fields/combobox-input-value/index.d.ts +18 -0
  59. package/dist/ikoncomponents/form-fields/combobox-input-value/index.js +26 -0
  60. package/dist/ikoncomponents/form-fields/date-input/index.d.ts +2 -0
  61. package/dist/ikoncomponents/form-fields/date-input/index.js +15 -0
  62. package/dist/ikoncomponents/form-fields/file-input/index.d.ts +1 -0
  63. package/dist/ikoncomponents/form-fields/file-input/index.js +4 -0
  64. package/dist/ikoncomponents/form-fields/input/index.d.ts +2 -0
  65. package/dist/ikoncomponents/form-fields/input/index.js +18 -0
  66. package/dist/ikoncomponents/form-fields/multi-combobox-input/index.d.ts +6 -0
  67. package/{templates/default/ikoncomponents/form-fields/multi-combobox-input/index.tsx → dist/ikoncomponents/form-fields/multi-combobox-input/index.js} +381 -574
  68. package/dist/ikoncomponents/form-fields/otp-input/index.d.ts +2 -0
  69. package/dist/ikoncomponents/form-fields/otp-input/index.js +18 -0
  70. package/dist/ikoncomponents/form-fields/phone-input/index.d.ts +1 -0
  71. package/dist/ikoncomponents/form-fields/phone-input/index.js +4 -0
  72. package/dist/ikoncomponents/form-fields/textarea/index.d.ts +2 -0
  73. package/dist/ikoncomponents/form-fields/textarea/index.js +18 -0
  74. package/dist/ikoncomponents/form-fields/types/index.d.ts +36 -0
  75. package/dist/ikoncomponents/form-fields/types/index.js +1 -0
  76. package/dist/ikoncomponents/glowing-effect/index.d.ts +14 -0
  77. package/dist/ikoncomponents/glowing-effect/index.js +84 -0
  78. package/dist/ikoncomponents/icon/index.d.ts +8 -0
  79. package/dist/ikoncomponents/icon/index.js +23 -0
  80. package/dist/ikoncomponents/image-cropper-upload/components/newCropper.d.ts +15 -0
  81. package/{templates/default/ikoncomponents/image-cropper-upload/components/newCropper.tsx → dist/ikoncomponents/image-cropper-upload/components/newCropper.js} +85 -117
  82. package/dist/ikoncomponents/image-cropper-upload/components/newImageUploadForm.d.ts +7 -0
  83. package/dist/ikoncomponents/image-cropper-upload/components/newImageUploadForm.js +145 -0
  84. package/dist/ikoncomponents/image-cropper-upload/cropper-form/index.d.ts +6 -0
  85. package/dist/ikoncomponents/image-cropper-upload/cropper-form/index.js +92 -0
  86. package/dist/ikoncomponents/image-cropper-upload/cropper-form-with-modal/index.d.ts +6 -0
  87. package/dist/ikoncomponents/image-cropper-upload/cropper-form-with-modal/index.js +14 -0
  88. package/dist/ikoncomponents/image-cropper-upload/image-cropper/index.d.ts +14 -0
  89. package/{templates/default/ikoncomponents/image-cropper-upload/image-cropper/index.tsx → dist/ikoncomponents/image-cropper-upload/image-cropper/index.js} +87 -119
  90. package/dist/ikoncomponents/image-cropper-upload/index.d.ts +27 -0
  91. package/dist/ikoncomponents/image-cropper-upload/index.js +49 -0
  92. package/dist/ikoncomponents/image-cropper-upload/utils/index.d.ts +16 -0
  93. package/dist/ikoncomponents/image-cropper-upload/utils/index.js +73 -0
  94. package/dist/ikoncomponents/loading-spinner/index.d.ts +9 -0
  95. package/dist/ikoncomponents/loading-spinner/index.js +19 -0
  96. package/dist/ikoncomponents/main-layout/RefreshContext.d.ts +10 -0
  97. package/dist/ikoncomponents/main-layout/RefreshContext.js +17 -0
  98. package/dist/ikoncomponents/main-layout/SidebarNavContext.d.ts +33 -0
  99. package/dist/ikoncomponents/main-layout/SidebarNavContext.js +52 -0
  100. package/dist/ikoncomponents/main-layout/app-sidebar.d.ts +3 -0
  101. package/dist/ikoncomponents/main-layout/app-sidebar.js +24 -0
  102. package/dist/ikoncomponents/main-layout/footer.d.ts +1 -0
  103. package/dist/ikoncomponents/main-layout/footer.js +5 -0
  104. package/dist/ikoncomponents/main-layout/header.d.ts +3 -0
  105. package/dist/ikoncomponents/main-layout/header.js +15 -0
  106. package/dist/ikoncomponents/main-layout/index.d.ts +6 -0
  107. package/dist/ikoncomponents/main-layout/index.js +11 -0
  108. package/dist/ikoncomponents/main-layout/main-sidebar.d.ts +60 -0
  109. package/dist/ikoncomponents/main-layout/main-sidebar.js +119 -0
  110. package/dist/ikoncomponents/main-layout/nav-main.d.ts +11 -0
  111. package/dist/ikoncomponents/main-layout/nav-main.js +33 -0
  112. package/dist/ikoncomponents/multi-combobox/index.d.ts +13 -0
  113. package/dist/ikoncomponents/multi-combobox/index.js +202 -0
  114. package/dist/ikoncomponents/no-data/index.d.ts +3 -0
  115. package/dist/ikoncomponents/no-data/index.js +5 -0
  116. package/dist/ikoncomponents/page-wrapper/index.d.ts +9 -0
  117. package/dist/ikoncomponents/page-wrapper/index.js +7 -0
  118. package/dist/ikoncomponents/password-strength-meter/index.d.ts +3 -0
  119. package/dist/ikoncomponents/password-strength-meter/index.js +40 -0
  120. package/dist/ikoncomponents/phone-input/index.d.ts +1 -0
  121. package/dist/ikoncomponents/phone-input/index.js +41 -0
  122. package/dist/ikoncomponents/provider-wrapper/index.d.ts +6 -0
  123. package/dist/ikoncomponents/provider-wrapper/index.js +11 -0
  124. package/dist/ikoncomponents/search-input/index.d.ts +1 -0
  125. package/dist/ikoncomponents/search-input/index.js +19 -0
  126. package/dist/ikoncomponents/sheet/index.d.ts +10 -0
  127. package/dist/ikoncomponents/sheet/index.js +6 -0
  128. package/dist/ikoncomponents/simple-widget/index.d.ts +14 -0
  129. package/dist/ikoncomponents/simple-widget/index.js +14 -0
  130. package/dist/ikoncomponents/skeleton-loader/skeleton-table.d.ts +5 -0
  131. package/dist/ikoncomponents/skeleton-loader/skeleton-table.js +6 -0
  132. package/dist/ikoncomponents/skeleton-loader/skeleton-widget.d.ts +3 -0
  133. package/dist/ikoncomponents/skeleton-loader/skeleton-widget.js +5 -0
  134. package/dist/ikoncomponents/tabs/index.d.ts +2 -0
  135. package/dist/ikoncomponents/tabs/index.js +50 -0
  136. package/{templates/default/ikoncomponents/tabs/type.ts → dist/ikoncomponents/tabs/type.d.ts} +19 -20
  137. package/dist/ikoncomponents/tabs/type.js +2 -0
  138. package/dist/ikoncomponents/theme-toggle-btn/index.d.ts +1 -0
  139. package/{templates/default/ikoncomponents/theme-toggle-btn/index.tsx → dist/ikoncomponents/theme-toggle-btn/index.js} +118 -189
  140. package/dist/ikoncomponents/title-progress/index.d.ts +12 -0
  141. package/dist/ikoncomponents/title-progress/index.js +10 -0
  142. package/dist/ikoncomponents/tooltip/index.d.ts +5 -0
  143. package/dist/ikoncomponents/tooltip/index.js +5 -0
  144. package/dist/ikoncomponents/twolevel-dropdown/index.d.ts +31 -0
  145. package/dist/ikoncomponents/twolevel-dropdown/index.js +143 -0
  146. package/dist/ikoncomponents/upload-tab/index.d.ts +1 -0
  147. package/dist/ikoncomponents/upload-tab/index.js +92 -0
  148. package/dist/ikoncomponents/widgets/index.d.ts +2 -0
  149. package/dist/ikoncomponents/widgets/index.js +14 -0
  150. package/dist/ikoncomponents/widgets/type.d.ts +10 -0
  151. package/dist/ikoncomponents/widgets/type.js +2 -0
  152. package/dist/ikoncomponents/work-in-progress/index.d.ts +1 -0
  153. package/dist/ikoncomponents/work-in-progress/index.js +4 -0
  154. package/dist/index.d.ts +138 -0
  155. package/dist/index.js +116 -14
  156. package/dist/shadcn/accordion.d.ts +7 -0
  157. package/dist/shadcn/accordion.js +33 -0
  158. package/dist/shadcn/alert-dialog.d.ts +20 -0
  159. package/dist/shadcn/alert-dialog.js +83 -0
  160. package/dist/shadcn/alert.d.ts +9 -0
  161. package/dist/shadcn/alert.js +38 -0
  162. package/dist/shadcn/aspect-ratio.d.ts +3 -0
  163. package/dist/shadcn/aspect-ratio.js +19 -0
  164. package/dist/shadcn/avatar.d.ts +6 -0
  165. package/dist/shadcn/avatar.js +28 -0
  166. package/dist/shadcn/badge.d.ts +9 -0
  167. package/dist/shadcn/badge.js +35 -0
  168. package/dist/shadcn/breadcrumb.d.ts +11 -0
  169. package/dist/shadcn/breadcrumb.js +45 -0
  170. package/dist/shadcn/button.d.ts +10 -0
  171. package/dist/shadcn/button.js +47 -0
  172. package/dist/shadcn/calendar.d.ts +8 -0
  173. package/dist/shadcn/calendar.js +61 -0
  174. package/dist/shadcn/card.d.ts +9 -0
  175. package/dist/shadcn/card.js +42 -0
  176. package/dist/shadcn/checkbox.d.ts +4 -0
  177. package/dist/shadcn/checkbox.js +21 -0
  178. package/dist/shadcn/collapsible.d.ts +5 -0
  179. package/dist/shadcn/collapsible.js +27 -0
  180. package/dist/shadcn/command.d.ts +18 -0
  181. package/dist/shadcn/command.js +54 -0
  182. package/dist/shadcn/date-input.d.ts +7 -0
  183. package/dist/shadcn/date-input.js +179 -0
  184. package/dist/shadcn/date-range-picker.d.ts +24 -0
  185. package/dist/shadcn/date-range-picker.js +45 -0
  186. package/dist/shadcn/dialog.d.ts +15 -0
  187. package/dist/shadcn/dialog.js +57 -0
  188. package/dist/shadcn/drawer.d.ts +13 -0
  189. package/dist/shadcn/drawer.js +56 -0
  190. package/dist/shadcn/dropdown-menu.d.ts +25 -0
  191. package/dist/shadcn/dropdown-menu.js +77 -0
  192. package/dist/shadcn/form.d.ts +24 -0
  193. package/dist/shadcn/form.js +70 -0
  194. package/dist/shadcn/hover-card.d.ts +6 -0
  195. package/dist/shadcn/hover-card.js +28 -0
  196. package/dist/shadcn/input-otp.d.ts +34 -0
  197. package/dist/shadcn/input-otp.js +40 -0
  198. package/dist/shadcn/input.d.ts +3 -0
  199. package/dist/shadcn/input.js +18 -0
  200. package/dist/shadcn/label.d.ts +4 -0
  201. package/dist/shadcn/label.js +20 -0
  202. package/dist/shadcn/navigation-menu.d.ts +16 -0
  203. package/dist/shadcn/navigation-menu.js +74 -0
  204. package/dist/shadcn/popover.d.ts +7 -0
  205. package/dist/shadcn/popover.js +32 -0
  206. package/dist/shadcn/progress.d.ts +8 -0
  207. package/dist/shadcn/progress.js +23 -0
  208. package/dist/shadcn/radio-group.d.ts +5 -0
  209. package/dist/shadcn/radio-group.js +25 -0
  210. package/dist/shadcn/scroll-area.d.ts +5 -0
  211. package/dist/shadcn/scroll-area.js +26 -0
  212. package/dist/shadcn/select.d.ts +15 -0
  213. package/dist/shadcn/select.js +59 -0
  214. package/dist/shadcn/separator.d.ts +4 -0
  215. package/dist/shadcn/separator.js +20 -0
  216. package/dist/shadcn/sheet.d.ts +13 -0
  217. package/dist/shadcn/sheet.js +61 -0
  218. package/dist/shadcn/sidebar.d.ts +69 -0
  219. package/dist/shadcn/sidebar.js +242 -0
  220. package/dist/shadcn/skeleton.d.ts +3 -0
  221. package/dist/shadcn/skeleton.js +18 -0
  222. package/dist/shadcn/slider.d.ts +4 -0
  223. package/dist/shadcn/slider.js +26 -0
  224. package/dist/shadcn/sonner.d.ts +3 -0
  225. package/dist/shadcn/sonner.js +25 -0
  226. package/dist/shadcn/switch.d.ts +4 -0
  227. package/dist/shadcn/switch.js +20 -0
  228. package/dist/shadcn/table.d.ts +10 -0
  229. package/dist/shadcn/table.js +47 -0
  230. package/dist/shadcn/tabs.d.ts +7 -0
  231. package/dist/shadcn/tabs.js +32 -0
  232. package/dist/shadcn/textarea.d.ts +3 -0
  233. package/dist/shadcn/textarea.js +18 -0
  234. package/dist/shadcn/toggle-group.d.ts +9 -0
  235. package/dist/shadcn/toggle-group.js +35 -0
  236. package/dist/shadcn/toggle.d.ts +9 -0
  237. package/dist/shadcn/toggle.js +38 -0
  238. package/dist/shadcn/tooltip.d.ts +7 -0
  239. package/dist/shadcn/tooltip.js +32 -0
  240. package/dist/shadcn/workflow.d.ts +20 -0
  241. package/dist/shadcn/workflow.js +20 -0
  242. package/dist/styles.css +6163 -0
  243. package/dist/utils/actions/account/index.d.ts +5 -0
  244. package/dist/utils/actions/account/index.js +28 -0
  245. package/dist/utils/actions/account/type.d.ts +4 -0
  246. package/dist/utils/actions/account/type.js +1 -0
  247. package/dist/utils/actions/auth/index.d.ts +7 -0
  248. package/{templates/default/utils/actions/auth/index.ts → dist/utils/actions/auth/index.js} +58 -69
  249. package/dist/utils/actions/common/utils.d.ts +5 -0
  250. package/{templates/default/utils/actions/common/utils.ts → dist/utils/actions/common/utils.js} +25 -28
  251. package/dist/utils/actions/software/index.d.ts +11 -0
  252. package/dist/utils/actions/software/index.js +75 -0
  253. package/dist/utils/api/accountService/index.d.ts +23 -0
  254. package/dist/utils/api/accountService/index.js +64 -0
  255. package/dist/utils/api/accountService/type.d.ts +4 -0
  256. package/dist/utils/api/accountService/type.js +1 -0
  257. package/dist/utils/api/file-upload/index.d.ts +5 -0
  258. package/dist/utils/api/file-upload/index.js +80 -0
  259. package/dist/utils/api/file-upload/type.d.ts +6 -0
  260. package/dist/utils/api/file-upload/type.js +1 -0
  261. package/dist/utils/api/ikonBaseApi.d.ts +12 -0
  262. package/{templates/default/utils/api/ikonBaseApi.ts → dist/utils/api/ikonBaseApi.js} +104 -132
  263. package/dist/utils/api/loginService/index.d.ts +12 -0
  264. package/dist/utils/api/loginService/index.js +72 -0
  265. package/{templates/default/utils/api/loginService/type.ts → dist/utils/api/loginService/type.d.ts} +31 -35
  266. package/dist/utils/api/loginService/type.js +1 -0
  267. package/dist/utils/api/softwareService/index.d.ts +64 -0
  268. package/dist/utils/api/softwareService/index.js +212 -0
  269. package/dist/utils/api/softwareService/type.d.ts +54 -0
  270. package/dist/utils/api/softwareService/type.js +1 -0
  271. package/dist/utils/border-radius-provider.d.ts +11 -0
  272. package/{templates/default/utils/border-radius-provider.tsx → dist/utils/border-radius-provider.js} +35 -59
  273. package/dist/utils/cn.d.ts +2 -0
  274. package/dist/utils/cn.js +5 -0
  275. package/dist/utils/font-provider.d.ts +11 -0
  276. package/{templates/default/utils/font-provider.tsx → dist/utils/font-provider.js} +37 -61
  277. package/dist/utils/session/cookieSession.d.ts +8 -0
  278. package/dist/utils/session/cookieSession.js +33 -0
  279. package/dist/utils/theme-provider/index.d.ts +3 -0
  280. package/dist/utils/theme-provider/index.js +18 -0
  281. package/dist/utils/token-management/index.d.ts +10 -0
  282. package/dist/utils/token-management/index.js +69 -0
  283. package/dist/utils/token-management/types.d.ts +6 -0
  284. package/dist/utils/token-management/types.js +1 -0
  285. package/package.json +91 -17
  286. package/bin.js +0 -2
  287. package/dist/commands/init.js +0 -63
  288. package/dist/utlis/copyDir.js +0 -7
  289. package/templates/default/hooks/use-mobile.ts +0 -19
  290. package/templates/default/ikoncomponents/action-menu/index.tsx +0 -108
  291. package/templates/default/ikoncomponents/action-menu/type.ts +0 -18
  292. package/templates/default/ikoncomponents/activity-sheet/index.tsx +0 -63
  293. package/templates/default/ikoncomponents/alert-dialog/dialog-context.tsx +0 -65
  294. package/templates/default/ikoncomponents/alert-dialog/index.tsx +0 -80
  295. package/templates/default/ikoncomponents/app-breadcrumb/BreadcrumbProvider.tsx +0 -68
  296. package/templates/default/ikoncomponents/app-breadcrumb/index.tsx +0 -222
  297. package/templates/default/ikoncomponents/big-calendar/big-calender-event/index.tsx +0 -38
  298. package/templates/default/ikoncomponents/big-calendar/big-calender-toolbar/index.tsx +0 -81
  299. package/templates/default/ikoncomponents/big-calendar/index.css +0 -879
  300. package/templates/default/ikoncomponents/big-calendar/index.tsx +0 -59
  301. package/templates/default/ikoncomponents/big-calendar/type.ts +0 -37
  302. package/templates/default/ikoncomponents/buttons/index.tsx +0 -127
  303. package/templates/default/ikoncomponents/combobox-input/index.tsx +0 -75
  304. package/templates/default/ikoncomponents/combobox-input/type.ts +0 -14
  305. package/templates/default/ikoncomponents/custom-combo-dropdown/index.tsx +0 -242
  306. package/templates/default/ikoncomponents/data-table/datatable-column-filter/index.tsx +0 -80
  307. package/templates/default/ikoncomponents/data-table/datatable-faceted-filter/index.tsx +0 -149
  308. package/templates/default/ikoncomponents/data-table/datatable-filter-menu/index.tsx +0 -98
  309. package/templates/default/ikoncomponents/data-table/datatable-pagination/index.tsx +0 -119
  310. package/templates/default/ikoncomponents/data-table/datatable-toolbar/index.tsx +0 -45
  311. package/templates/default/ikoncomponents/data-table/function.ts +0 -7
  312. package/templates/default/ikoncomponents/data-table/index.tsx +0 -549
  313. package/templates/default/ikoncomponents/data-table/type.ts +0 -75
  314. package/templates/default/ikoncomponents/e-chart/index.tsx +0 -183
  315. package/templates/default/ikoncomponents/file-input/index.tsx +0 -27
  316. package/templates/default/ikoncomponents/fileUpload/index.tsx +0 -121
  317. package/templates/default/ikoncomponents/form-fields/combobox-input/index.tsx +0 -111
  318. package/templates/default/ikoncomponents/form-fields/combobox-input-value/index.tsx +0 -121
  319. package/templates/default/ikoncomponents/form-fields/date-input/index.tsx +0 -80
  320. package/templates/default/ikoncomponents/form-fields/file-input/index.tsx +0 -9
  321. package/templates/default/ikoncomponents/form-fields/input/index.tsx +0 -27
  322. package/templates/default/ikoncomponents/form-fields/otp-input/index.tsx +0 -39
  323. package/templates/default/ikoncomponents/form-fields/password-input/index.tsx +0 -52
  324. package/templates/default/ikoncomponents/form-fields/phone-input/index.tsx +0 -7
  325. package/templates/default/ikoncomponents/form-fields/textarea/index.tsx +0 -28
  326. package/templates/default/ikoncomponents/form-fields/types/index.ts +0 -46
  327. package/templates/default/ikoncomponents/glowing-effect/index.tsx +0 -171
  328. package/templates/default/ikoncomponents/icon/index.tsx +0 -22
  329. package/templates/default/ikoncomponents/image-cropper-upload/components/cropperImg.css +0 -19
  330. package/templates/default/ikoncomponents/image-cropper-upload/components/newImageUploadForm.tsx +0 -352
  331. package/templates/default/ikoncomponents/image-cropper-upload/cropper-form/index.tsx +0 -250
  332. package/templates/default/ikoncomponents/image-cropper-upload/cropper-form-with-modal/index.tsx +0 -32
  333. package/templates/default/ikoncomponents/image-cropper-upload/index.tsx +0 -95
  334. package/templates/default/ikoncomponents/image-cropper-upload/utils/index.ts +0 -117
  335. package/templates/default/ikoncomponents/loading-spinner/index.tsx +0 -43
  336. package/templates/default/ikoncomponents/main-layout/RefreshContext.tsx +0 -30
  337. package/templates/default/ikoncomponents/main-layout/SidebarNavContext.tsx +0 -103
  338. package/templates/default/ikoncomponents/main-layout/app-sidebar.tsx +0 -36
  339. package/templates/default/ikoncomponents/main-layout/footer.tsx +0 -21
  340. package/templates/default/ikoncomponents/main-layout/header.tsx +0 -53
  341. package/templates/default/ikoncomponents/main-layout/index.tsx +0 -38
  342. package/templates/default/ikoncomponents/main-layout/main-sidebar.tsx +0 -389
  343. package/templates/default/ikoncomponents/main-layout/nav-main.tsx +0 -103
  344. package/templates/default/ikoncomponents/multi-combobox/index.tsx +0 -345
  345. package/templates/default/ikoncomponents/no-data/index.tsx +0 -11
  346. package/templates/default/ikoncomponents/page-wrapper/index.tsx +0 -30
  347. package/templates/default/ikoncomponents/password-strength-meter/index.tsx +0 -49
  348. package/templates/default/ikoncomponents/phone-input/index.tsx +0 -72
  349. package/templates/default/ikoncomponents/provider-wrapper/index.tsx +0 -32
  350. package/templates/default/ikoncomponents/search-input/index.tsx +0 -18
  351. package/templates/default/ikoncomponents/sheet/index.tsx +0 -34
  352. package/templates/default/ikoncomponents/simple-widget/index.tsx +0 -54
  353. package/templates/default/ikoncomponents/skeleton-loader/skeleton-table.tsx +0 -34
  354. package/templates/default/ikoncomponents/skeleton-loader/skeleton-widget.tsx +0 -13
  355. package/templates/default/ikoncomponents/tabs/index.tsx +0 -139
  356. package/templates/default/ikoncomponents/title-progress/index.tsx +0 -41
  357. package/templates/default/ikoncomponents/tooltip/index.tsx +0 -17
  358. package/templates/default/ikoncomponents/twolevel-dropdown/convertToDropdownNodes.tsx +0 -33
  359. package/templates/default/ikoncomponents/twolevel-dropdown/index.tsx +0 -279
  360. package/templates/default/ikoncomponents/upload-tab/index.tsx +0 -237
  361. package/templates/default/ikoncomponents/widgets/index.tsx +0 -81
  362. package/templates/default/ikoncomponents/widgets/type.ts +0 -11
  363. package/templates/default/ikoncomponents/work-in-progress/index.tsx +0 -16
  364. package/templates/default/shadcn/accordion.tsx +0 -66
  365. package/templates/default/shadcn/alert-dialog.tsx +0 -179
  366. package/templates/default/shadcn/alert.tsx +0 -66
  367. package/templates/default/shadcn/aspect-ratio.tsx +0 -11
  368. package/templates/default/shadcn/avatar.tsx +0 -53
  369. package/templates/default/shadcn/badge.tsx +0 -49
  370. package/templates/default/shadcn/breadcrumb.tsx +0 -109
  371. package/templates/default/shadcn/button.tsx +0 -64
  372. package/templates/default/shadcn/calendar.tsx +0 -227
  373. package/templates/default/shadcn/card.tsx +0 -92
  374. package/templates/default/shadcn/checkbox.tsx +0 -33
  375. package/templates/default/shadcn/collapsible.tsx +0 -33
  376. package/templates/default/shadcn/command.tsx +0 -184
  377. package/templates/default/shadcn/date-input.tsx +0 -259
  378. package/templates/default/shadcn/date-range-picker.tsx +0 -103
  379. package/templates/default/shadcn/dialog.tsx +0 -143
  380. package/templates/default/shadcn/drawer.tsx +0 -134
  381. package/templates/default/shadcn/dropdown-menu.tsx +0 -259
  382. package/templates/default/shadcn/form.tsx +0 -166
  383. package/templates/default/shadcn/hover-card.tsx +0 -44
  384. package/templates/default/shadcn/input-otp.tsx +0 -71
  385. package/templates/default/shadcn/input.tsx +0 -22
  386. package/templates/default/shadcn/label.tsx +0 -24
  387. package/templates/default/shadcn/navigation-menu.tsx +0 -195
  388. package/templates/default/shadcn/popover.tsx +0 -48
  389. package/templates/default/shadcn/progress.tsx +0 -40
  390. package/templates/default/shadcn/radio-group.tsx +0 -45
  391. package/templates/default/shadcn/scroll-area.tsx +0 -58
  392. package/templates/default/shadcn/select.tsx +0 -184
  393. package/templates/default/shadcn/separator.tsx +0 -28
  394. package/templates/default/shadcn/sheet.tsx +0 -139
  395. package/templates/default/shadcn/sidebar.tsx +0 -726
  396. package/templates/default/shadcn/skeleton.tsx +0 -15
  397. package/templates/default/shadcn/slider.tsx +0 -64
  398. package/templates/default/shadcn/sonner.tsx +0 -25
  399. package/templates/default/shadcn/switch.tsx +0 -31
  400. package/templates/default/shadcn/table.tsx +0 -116
  401. package/templates/default/shadcn/tabs.tsx +0 -67
  402. package/templates/default/shadcn/textarea.tsx +0 -18
  403. package/templates/default/shadcn/toggle-group.tsx +0 -83
  404. package/templates/default/shadcn/toggle.tsx +0 -47
  405. package/templates/default/shadcn/tooltip.tsx +0 -65
  406. package/templates/default/shadcn/workflow.tsx +0 -119
  407. package/templates/default/utils/actions/account/index.ts +0 -33
  408. package/templates/default/utils/actions/account/type.ts +0 -4
  409. package/templates/default/utils/actions/common/revalidate.ts +0 -18
  410. package/templates/default/utils/actions/common/type.ts +0 -4
  411. package/templates/default/utils/actions/software/index.ts +0 -106
  412. package/templates/default/utils/api/accountService/index.ts +0 -103
  413. package/templates/default/utils/api/accountService/type.ts +0 -4
  414. package/templates/default/utils/api/file-upload/index.ts +0 -103
  415. package/templates/default/utils/api/file-upload/type.ts +0 -8
  416. package/templates/default/utils/api/loginService/index.ts +0 -106
  417. package/templates/default/utils/api/softwareService/index.ts +0 -356
  418. package/templates/default/utils/api/softwareService/type.ts +0 -62
  419. package/templates/default/utils/cn.ts +0 -6
  420. package/templates/default/utils/session/cookieSession.ts +0 -49
  421. package/templates/default/utils/theme-provider/index.tsx +0 -11
  422. package/templates/default/utils/token-management/index.ts +0 -115
  423. package/templates/default/utils/token-management/types.ts +0 -6
@@ -1,574 +1,381 @@
1
- // import {
2
- // FormControl,
3
- // FormDescription,
4
- // FormField,
5
- // FormItem,
6
- // FormLabel,
7
- // FormMessage,
8
- // } from "@/shadcn/ui/form";
9
- // import React, { useState, useEffect, useRef, useCallback } from "react";
10
- // // import { FormComboboxInputProps } from "@/ikon/components/form-fields/types";
11
- // import { Popover, PopoverContent, PopoverTrigger } from "@/shadcn/ui/popover";
12
- // import { Button } from "@/shadcn/ui/button";
13
- // import { cn } from "@/shadcn/lib/utils";
14
- // import { Check, ChevronsUpDown } from "lucide-react";
15
- // import {
16
- // Command,
17
- // CommandEmpty,
18
- // CommandGroup,
19
- // CommandInput,
20
- // CommandItem,
21
- // CommandList,
22
- // } from "@/shadcn/ui/command";
23
- // import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/shadcn/ui/tooltip";
24
- // import { X } from "lucide-react";
25
- // import { FormComboboxInputProps as BaseFormComboboxInputProps } from "@/ikon/components/form-fields/types";
26
-
27
- // interface FormComboboxInputProps extends BaseFormComboboxInputProps {
28
- // defaultOptions?: number; // Add defaultOptions to the type
29
- // }
30
- // export default function dFormMultiComboboxInput({
31
- // formControl,
32
- // name,
33
- // label,
34
- // placeholder,
35
- // formDescription,
36
- // items = [], // fallback to empty array
37
- // disabled,
38
- // onSelect,
39
- // defaultValue = [],
40
- // defaultOptions = 2,
41
- // }: FormComboboxInputProps) {
42
- // const [search, setSearch] = useState("");
43
- // const containerRef = useRef<HTMLDivElement>(null);
44
-
45
-
46
- // // Filter items based on search
47
- // const filteredItems = items.filter((item) =>
48
- // item.label?.toLowerCase().includes(search.toLowerCase())
49
- // )
50
- // .sort((a, b) => (a?.label ?? "").localeCompare(b?.label ?? ""));
51
-
52
-
53
-
54
- // return (
55
- // <FormField
56
- // control={formControl}
57
- // name={name}
58
- // render={({ field }) => {
59
- // // Initialize defaultValue if field.value is undefined
60
- // useEffect(() => {
61
- // if (
62
- // (field.value === undefined || field.value === null) &&
63
- // defaultValue.length > 0
64
- // ) {
65
- // field.onChange(defaultValue);
66
- // }
67
- // }, [defaultValue, field]);
68
-
69
- // // field.value is the selected array, default to [] if undefined
70
- // const selectedItems = field.value || [];
71
- // const [visibleCount, setVisibleCount] = useState(selectedItems.length);
72
-
73
- // const calculateVisibleItems = useCallback(() => {
74
- // const container = containerRef.current;
75
- // if (!container) return visibleCount;
76
-
77
- // const children = Array.from(container.children) as HTMLElement[];
78
-
79
- // let availableWidth = container.offsetWidth;
80
- // let usedWidth = 0;
81
- // let fitCount = 0;
82
-
83
- // for (const child of children) {
84
- // const childWidth = child.offsetWidth + 4; // gap/margin
85
- // if (usedWidth + childWidth <= availableWidth) {
86
- // usedWidth += childWidth;
87
- // fitCount++;
88
- // } else {
89
- // break;
90
- // }
91
- // }
92
-
93
- // return fitCount;
94
- // }, []); // No dependencies
95
-
96
- // useEffect(() => {
97
- // const container = containerRef.current;
98
- // if (!container) return;
99
-
100
- // let animationFrameId: number | null = null;
101
-
102
- // const resizeObserver = new ResizeObserver(() => {
103
- // if (animationFrameId) cancelAnimationFrame(animationFrameId);
104
- // animationFrameId = requestAnimationFrame(() => {
105
- // const newVisibleCount = calculateVisibleItems();
106
- // setVisibleCount((prevVisibleCount: number) => {
107
-
108
- // if (prevVisibleCount !== newVisibleCount) {
109
- // return newVisibleCount;
110
- // }
111
- // return prevVisibleCount;
112
- // });
113
- // });
114
- // });
115
-
116
- // resizeObserver.observe(container);
117
-
118
- // // Initial calculation
119
- // setVisibleCount(calculateVisibleItems());
120
-
121
- // // Cleanup
122
- // return () => {
123
- // if (animationFrameId) cancelAnimationFrame(animationFrameId);
124
- // resizeObserver.disconnect();
125
- // };
126
- // }, [calculateVisibleItems]); // Only depend on calculateVisibleItems
127
-
128
- // // Toggle select/unselect item
129
- // const toggleItem = (value: string) => {
130
- // let updatedItems;
131
- // if (selectedItems.includes(value)) {
132
- // updatedItems = selectedItems.filter((v: string) => v !== value);
133
- // } else {
134
- // updatedItems = [...selectedItems, value];
135
- // }
136
- // field.onChange(updatedItems);
137
- // onSelect && onSelect(updatedItems);
138
- // };
139
-
140
- // const onWheel = (e: React.WheelEvent<HTMLDivElement>) => {
141
- // const el = e.currentTarget;
142
- // el.scrollTop += e.deltaY; // manually scroll
143
- // e.preventDefault(); // prevent parent scroll
144
- // };
145
-
146
- // return (
147
- // <FormItem>
148
- // {label && <FormLabel>{label}</FormLabel>}
149
-
150
- // <Popover>
151
- // <PopoverTrigger asChild className="w-full">
152
- // <FormControl>
153
- // <Button
154
- // variant="outline"
155
- // role="combobox"
156
- // className={cn(
157
- // "justify-between",
158
- // !selectedItems.length && "text-foreground/50"
159
- // )}
160
- // disabled={
161
- // disabled === true || (disabled && disabled(...arguments))
162
- // }
163
- // >
164
- // {selectedItems.length > 0 ? (
165
- // <TooltipProvider>
166
- // <div ref={containerRef} className="flex flex-wrap gap-2 items-center overflow-hidden">
167
- // {selectedItems.slice(0, defaultOptions).map((value: string) => {
168
- // const label = items.find((item) => item.value === value)?.label || value;
169
- // return (
170
- // <span
171
- // key={value}
172
- // className="flex items-center px-2 py-1 bg-secondary text-secondary-foreground rounded-md truncate max-w-full"
173
- // title={label}
174
- // >
175
- // <span className="truncate max-w-[120px]">{label}</span>
176
- // <span
177
- // role="button"
178
- // tabIndex={0}
179
- // onClick={(e) => {
180
- // e.stopPropagation(); // prevent popover toggle
181
- // const updated = selectedItems.filter((v: string) => v !== value);
182
- // field.onChange(updated);
183
- // onSelect && onSelect(updated);
184
- // }}
185
- // onKeyDown={(e) => {
186
- // if (e.key === 'Enter' || e.key === ' ') {
187
- // e.preventDefault();
188
- // e.stopPropagation();
189
- // const updated = selectedItems.filter((v: string) => v !== value);
190
- // field.onChange(updated);
191
- // onSelect && onSelect(updated);
192
- // }
193
- // }}
194
- // className="ml-1 text-muted-foreground hover:text-destructive cursor-pointer outline-none"
195
- // >
196
- // <X className="w-3 h-3 ml-1" />
197
- // </span>
198
- // </span>
199
- // );
200
- // })}
201
-
202
- // {selectedItems.length > defaultOptions && (
203
- // <Tooltip>
204
- // <TooltipTrigger asChild>
205
- // <span className="px-2 py-1 bg-secondary text-secondary-foreground rounded-md cursor-pointer">
206
- // +{selectedItems.length - defaultOptions} more
207
- // </span>
208
- // </TooltipTrigger>
209
- // <TooltipContent className="max-w-xs break-words">
210
- // <div
211
- // onWheel={onWheel}
212
- // className="flex flex-col gap-1 max-h-[200px] overflow-auto"
213
- // >
214
- // {selectedItems.slice(defaultOptions).map((value: string) => (
215
- // <span key={value} className="text-sm">
216
- // {items.find((item) => item.value === value)?.label || value}
217
- // </span>
218
- // ))}
219
- // </div>
220
- // </TooltipContent>
221
- // </Tooltip>
222
- // )}
223
- // </div>
224
- // </TooltipProvider>
225
- // ) : (
226
- // placeholder
227
- // )}
228
- // <ChevronsUpDown className="opacity-50" />
229
- // </Button>
230
- // </FormControl>
231
- // </PopoverTrigger>
232
-
233
- // <PopoverContent id="multiSelectPopover" className="p-0 w-full max-w-[300px]" align="start">
234
- // <Command id="commandPopover">
235
- // <CommandInput
236
- // placeholder="Search..."
237
- // value={search}
238
- // onValueChange={setSearch}
239
- // autoFocus
240
- // />
241
- // <CommandList
242
- // className="max-h-60 overflow-auto"
243
- // onWheel={onWheel}
244
- // >
245
- // <CommandEmpty>No items found.</CommandEmpty>
246
- // <CommandGroup>
247
- // {filteredItems.map((item) => {
248
- // const isSelected = selectedItems.includes(item.value);
249
- // return (
250
- // <CommandItem
251
- // value={item.label ?? ""}
252
- // key={item.value}
253
- // onSelect={() => toggleItem(item.value)}
254
- // >
255
- // {item.label}
256
- // <Check
257
- // className={cn(
258
- // "ml-auto",
259
- // isSelected ? "opacity-100" : "opacity-0"
260
- // )}
261
- // />
262
- // </CommandItem>
263
- // );
264
- // })}
265
- // </CommandGroup>
266
- // </CommandList>
267
- // </Command>
268
- // </PopoverContent>
269
- // </Popover>
270
-
271
- // {formDescription && (
272
- // <FormDescription>{formDescription}</FormDescription>
273
- // )}
274
- // <FormMessage />
275
- // </FormItem>
276
- // );
277
- // }}
278
- // />
279
- // );
280
- // }
281
-
282
-
283
- import {
284
- FormControl,
285
- FormDescription,
286
- FormField,
287
- FormItem,
288
- FormLabel,
289
- FormMessage,
290
- } from "../../../shadcn/form";
291
- import React, { useState, useEffect, useRef, useCallback } from "react";
292
- import { Popover, PopoverContent, PopoverTrigger } from "../../../shadcn/popover";
293
- import { Button } from "../../../shadcn/button";
294
- import { cn } from "../../../utils/cn";
295
- import { ChevronsUpDown, X } from "lucide-react";
296
- import {
297
- Command,
298
- CommandEmpty,
299
- CommandGroup,
300
- CommandInput,
301
- CommandItem,
302
- CommandList,
303
- } from "../../../shadcn/command";
304
- import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../../../shadcn/tooltip";
305
- import { FormComboboxInputProps as BaseFormComboboxInputProps } from "../../form-fields/types";
306
- import { Checkbox } from "../../../shadcn/checkbox";
307
-
308
- interface FormComboboxInputProps extends BaseFormComboboxInputProps {
309
- defaultOptions?: number;
310
- }
311
-
312
- export function FormMultiComboboxInput({
313
- formControl,
314
- name,
315
- label,
316
- placeholder,
317
- formDescription,
318
- items = [],
319
- disabled,
320
- onSelect,
321
- defaultValue = [],
322
- defaultOptions = 2,
323
- }: FormComboboxInputProps) {
324
- const [search, setSearch] = useState("");
325
- const containerRef = useRef<HTMLDivElement>(null);
326
- // Removed triggerRef and popoverWidth state, as we'll rely on CSS variables for sizing
327
-
328
- // Filter items based on search
329
- const filteredItems = items
330
- .filter((item) => item.label?.toLowerCase().includes(search.toLowerCase()))
331
- .sort((a, b) => (a?.label ?? "").localeCompare(b?.label ?? ""));
332
-
333
-
334
- return (
335
- <FormField
336
- control={formControl}
337
- name={name}
338
- render={({ field }) => {
339
- useEffect(() => {
340
- if (
341
- (field.value === undefined || field.value === null) &&
342
- defaultValue.length > 0
343
- ) {
344
- field.onChange(defaultValue);
345
- }
346
- }, [defaultValue, field]);
347
-
348
- const selectedItems = field.value || [];
349
- const [visibleCount, setVisibleCount] = useState(selectedItems.length);
350
-
351
- const calculateVisibleItems = useCallback(() => {
352
- const container = containerRef.current;
353
- if (!container) return visibleCount;
354
-
355
- const children = Array.from(container.children) as HTMLElement[];
356
-
357
- let availableWidth = container.offsetWidth;
358
- let usedWidth = 0;
359
- let fitCount = 0;
360
-
361
- for (const child of children) {
362
- const childWidth = child.offsetWidth + 4; // gap/margin
363
- if (usedWidth + childWidth <= availableWidth) {
364
- usedWidth += childWidth;
365
- fitCount++;
366
- } else {
367
- break;
368
- }
369
- }
370
-
371
- return fitCount;
372
- }, [visibleCount]);
373
-
374
- useEffect(() => {
375
- const container = containerRef.current;
376
- if (!container) return;
377
-
378
- let animationFrameId: number | null = null;
379
-
380
- const resizeObserver = new ResizeObserver(() => {
381
- if (animationFrameId) cancelAnimationFrame(animationFrameId);
382
- animationFrameId = requestAnimationFrame(() => {
383
- const newVisibleCount = calculateVisibleItems();
384
- setVisibleCount((prevVisibleCount: number) => {
385
- if (prevVisibleCount !== newVisibleCount) {
386
- return newVisibleCount;
387
- }
388
- return prevVisibleCount;
389
- });
390
- });
391
- });
392
-
393
- resizeObserver.observe(container);
394
-
395
- setVisibleCount(calculateVisibleItems());
396
-
397
- return () => {
398
- if (animationFrameId) cancelAnimationFrame(animationFrameId);
399
- resizeObserver.disconnect();
400
- };
401
- }, [calculateVisibleItems]);
402
-
403
- const toggleItem = (value: string) => {
404
- let updatedItems;
405
- if (selectedItems.includes(value)) {
406
- updatedItems = selectedItems.filter((v: string) => v !== value);
407
- } else {
408
- updatedItems = [...selectedItems, value];
409
- }
410
- field.onChange(updatedItems);
411
- onSelect && onSelect(updatedItems);
412
- };
413
-
414
- const onWheel = (e: React.WheelEvent<HTMLDivElement>) => {
415
- const el = e.currentTarget;
416
- el.scrollTop += e.deltaY;
417
- e.preventDefault();
418
- };
419
-
420
- return (
421
- <FormItem>
422
- {label && <FormLabel>{label}</FormLabel>}
423
-
424
- <Popover>
425
- <PopoverTrigger asChild className="w-full">
426
- <FormControl>
427
- <Button
428
- // Removed ref={triggerRef} here as it's no longer needed for explicit width measurement
429
- variant="outline"
430
- role="combobox"
431
- className={cn(
432
- "justify-between",
433
- !selectedItems.length && "text-foreground/50"
434
- )}
435
- disabled={
436
- disabled === true || (disabled && disabled(...arguments))
437
- }
438
- >
439
- {selectedItems.length > 0 ? (
440
- <TooltipProvider>
441
- <div
442
- ref={containerRef}
443
- className="flex flex-wrap gap-2 items-center overflow-hidden"
444
- >
445
- {selectedItems.slice(0, defaultOptions).map((value: string) => {
446
- const label =
447
- items.find((item) => item.value === value)?.label ||
448
- value;
449
- return (
450
- <span
451
- key={value}
452
- className="flex items-center px-2 py-1 bg-secondary text-secondary-foreground rounded-md truncate max-w-full"
453
- title={label}
454
- >
455
- <span className="truncate max-w-[120px]">{label}</span>
456
- <span
457
- role="button"
458
- tabIndex={0}
459
- onClick={(e) => {
460
- e.stopPropagation();
461
- const updated = selectedItems.filter(
462
- (v: string) => v !== value
463
- );
464
- field.onChange(updated);
465
- onSelect && onSelect(updated);
466
- }}
467
- onKeyDown={(e) => {
468
- if (e.key === "Enter" || e.key === " ") {
469
- e.preventDefault();
470
- e.stopPropagation();
471
- const updated = selectedItems.filter(
472
- (v: string) => v !== value
473
- );
474
- field.onChange(updated);
475
- onSelect && onSelect(updated);
476
- }
477
- }}
478
- className="ml-1 text-muted-foreground hover:text-destructive cursor-pointer outline-none"
479
- >
480
- <X className="w-3 h-3 ml-1" />
481
- </span>
482
- </span>
483
- );
484
- })}
485
-
486
- {selectedItems.length > defaultOptions && (
487
- <Tooltip>
488
- <TooltipTrigger asChild>
489
- <span className="px-2 py-1 bg-secondary text-secondary-foreground rounded-md cursor-pointer">
490
- +{selectedItems.length - defaultOptions} more
491
- </span>
492
- </TooltipTrigger>
493
- <TooltipContent className="max-w-xs break-words">
494
- <div
495
- onWheel={onWheel}
496
- className="flex flex-col gap-1 max-h-[200px] overflow-auto"
497
- >
498
- {selectedItems.slice(defaultOptions).map((value: string) => (
499
- <span key={value} className="text-sm">
500
- {items.find((item) => item.value === value)
501
- ?.label || value}
502
- </span>
503
- ))}
504
- </div>
505
- </TooltipContent>
506
- </Tooltip>
507
- )}
508
- </div>
509
- </TooltipProvider>
510
- ) : (
511
- placeholder
512
- )}
513
- <ChevronsUpDown className="opacity-50" />
514
- </Button>
515
- </FormControl>
516
- </PopoverTrigger>
517
-
518
- <PopoverContent
519
- id="multiSelectPopover"
520
- // New and improved width logic for PopoverContent
521
- className="p-0 min-w-[--radix-popover-trigger-width]" // Ensures at least trigger width
522
- style={{
523
- width: 'max-content', // Allow to grow with content
524
- maxWidth: 'min(500px, 90vw)' // Cap at 500px or 90% of viewport width, whichever is smaller
525
- }}
526
- align="start"
527
- >
528
- <Command id="commandPopover">
529
- <CommandInput
530
- placeholder="Search..."
531
- value={search}
532
- onValueChange={setSearch}
533
- autoFocus
534
- />
535
- <CommandList
536
- className="max-h-60 overflow-auto"
537
- onWheel={onWheel}
538
- >
539
- <CommandEmpty>No items found.</CommandEmpty>
540
- <CommandGroup>
541
- {filteredItems.map((item) => {
542
- const isSelected = selectedItems.includes(item.value);
543
- return (
544
- <CommandItem
545
- value={item.label ?? ""}
546
- key={item.value}
547
- onSelect={() => toggleItem(item.value)}
548
- className="flex items-center space-x-2 justify-start"
549
- >
550
- <Checkbox
551
- checked={isSelected}
552
- onCheckedChange={() => toggleItem(item.value)}
553
- onClick={(e) => e.stopPropagation()}
554
- />
555
- <span>{item.label}</span>
556
- </CommandItem>
557
- );
558
- })}
559
- </CommandGroup>
560
- </CommandList>
561
- </Command>
562
- </PopoverContent>
563
- </Popover>
564
-
565
- {formDescription && (
566
- <FormDescription>{formDescription}</FormDescription>
567
- )}
568
- <FormMessage />
569
- </FormItem>
570
- );
571
- }}
572
- />
573
- );
574
- }
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // import {
3
+ // FormControl,
4
+ // FormDescription,
5
+ // FormField,
6
+ // FormItem,
7
+ // FormLabel,
8
+ // FormMessage,
9
+ // } from "@/shadcn/ui/form";
10
+ // import React, { useState, useEffect, useRef, useCallback } from "react";
11
+ // // import { FormComboboxInputProps } from "@/ikon/components/form-fields/types";
12
+ // import { Popover, PopoverContent, PopoverTrigger } from "@/shadcn/ui/popover";
13
+ // import { Button } from "@/shadcn/ui/button";
14
+ // import { cn } from "@/shadcn/lib/utils";
15
+ // import { Check, ChevronsUpDown } from "lucide-react";
16
+ // import {
17
+ // Command,
18
+ // CommandEmpty,
19
+ // CommandGroup,
20
+ // CommandInput,
21
+ // CommandItem,
22
+ // CommandList,
23
+ // } from "@/shadcn/ui/command";
24
+ // import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/shadcn/ui/tooltip";
25
+ // import { X } from "lucide-react";
26
+ // import { FormComboboxInputProps as BaseFormComboboxInputProps } from "@/ikon/components/form-fields/types";
27
+ // interface FormComboboxInputProps extends BaseFormComboboxInputProps {
28
+ // defaultOptions?: number; // Add defaultOptions to the type
29
+ // }
30
+ // export default function dFormMultiComboboxInput({
31
+ // formControl,
32
+ // name,
33
+ // label,
34
+ // placeholder,
35
+ // formDescription,
36
+ // items = [], // fallback to empty array
37
+ // disabled,
38
+ // onSelect,
39
+ // defaultValue = [],
40
+ // defaultOptions = 2,
41
+ // }: FormComboboxInputProps) {
42
+ // const [search, setSearch] = useState("");
43
+ // const containerRef = useRef<HTMLDivElement>(null);
44
+ // // Filter items based on search
45
+ // const filteredItems = items.filter((item) =>
46
+ // item.label?.toLowerCase().includes(search.toLowerCase())
47
+ // )
48
+ // .sort((a, b) => (a?.label ?? "").localeCompare(b?.label ?? ""));
49
+ // return (
50
+ // <FormField
51
+ // control={formControl}
52
+ // name={name}
53
+ // render={({ field }) => {
54
+ // // Initialize defaultValue if field.value is undefined
55
+ // useEffect(() => {
56
+ // if (
57
+ // (field.value === undefined || field.value === null) &&
58
+ // defaultValue.length > 0
59
+ // ) {
60
+ // field.onChange(defaultValue);
61
+ // }
62
+ // }, [defaultValue, field]);
63
+ // // field.value is the selected array, default to [] if undefined
64
+ // const selectedItems = field.value || [];
65
+ // const [visibleCount, setVisibleCount] = useState(selectedItems.length);
66
+ // const calculateVisibleItems = useCallback(() => {
67
+ // const container = containerRef.current;
68
+ // if (!container) return visibleCount;
69
+ // const children = Array.from(container.children) as HTMLElement[];
70
+ // let availableWidth = container.offsetWidth;
71
+ // let usedWidth = 0;
72
+ // let fitCount = 0;
73
+ // for (const child of children) {
74
+ // const childWidth = child.offsetWidth + 4; // gap/margin
75
+ // if (usedWidth + childWidth <= availableWidth) {
76
+ // usedWidth += childWidth;
77
+ // fitCount++;
78
+ // } else {
79
+ // break;
80
+ // }
81
+ // }
82
+ // return fitCount;
83
+ // }, []); // No dependencies
84
+ // useEffect(() => {
85
+ // const container = containerRef.current;
86
+ // if (!container) return;
87
+ // let animationFrameId: number | null = null;
88
+ // const resizeObserver = new ResizeObserver(() => {
89
+ // if (animationFrameId) cancelAnimationFrame(animationFrameId);
90
+ // animationFrameId = requestAnimationFrame(() => {
91
+ // const newVisibleCount = calculateVisibleItems();
92
+ // setVisibleCount((prevVisibleCount: number) => {
93
+ // if (prevVisibleCount !== newVisibleCount) {
94
+ // return newVisibleCount;
95
+ // }
96
+ // return prevVisibleCount;
97
+ // });
98
+ // });
99
+ // });
100
+ // resizeObserver.observe(container);
101
+ // // Initial calculation
102
+ // setVisibleCount(calculateVisibleItems());
103
+ // // Cleanup
104
+ // return () => {
105
+ // if (animationFrameId) cancelAnimationFrame(animationFrameId);
106
+ // resizeObserver.disconnect();
107
+ // };
108
+ // }, [calculateVisibleItems]); // Only depend on calculateVisibleItems
109
+ // // Toggle select/unselect item
110
+ // const toggleItem = (value: string) => {
111
+ // let updatedItems;
112
+ // if (selectedItems.includes(value)) {
113
+ // updatedItems = selectedItems.filter((v: string) => v !== value);
114
+ // } else {
115
+ // updatedItems = [...selectedItems, value];
116
+ // }
117
+ // field.onChange(updatedItems);
118
+ // onSelect && onSelect(updatedItems);
119
+ // };
120
+ // const onWheel = (e: React.WheelEvent<HTMLDivElement>) => {
121
+ // const el = e.currentTarget;
122
+ // el.scrollTop += e.deltaY; // manually scroll
123
+ // e.preventDefault(); // prevent parent scroll
124
+ // };
125
+ // return (
126
+ // <FormItem>
127
+ // {label && <FormLabel>{label}</FormLabel>}
128
+ // <Popover>
129
+ // <PopoverTrigger asChild className="w-full">
130
+ // <FormControl>
131
+ // <Button
132
+ // variant="outline"
133
+ // role="combobox"
134
+ // className={cn(
135
+ // "justify-between",
136
+ // !selectedItems.length && "text-foreground/50"
137
+ // )}
138
+ // disabled={
139
+ // disabled === true || (disabled && disabled(...arguments))
140
+ // }
141
+ // >
142
+ // {selectedItems.length > 0 ? (
143
+ // <TooltipProvider>
144
+ // <div ref={containerRef} className="flex flex-wrap gap-2 items-center overflow-hidden">
145
+ // {selectedItems.slice(0, defaultOptions).map((value: string) => {
146
+ // const label = items.find((item) => item.value === value)?.label || value;
147
+ // return (
148
+ // <span
149
+ // key={value}
150
+ // className="flex items-center px-2 py-1 bg-secondary text-secondary-foreground rounded-md truncate max-w-full"
151
+ // title={label}
152
+ // >
153
+ // <span className="truncate max-w-[120px]">{label}</span>
154
+ // <span
155
+ // role="button"
156
+ // tabIndex={0}
157
+ // onClick={(e) => {
158
+ // e.stopPropagation(); // prevent popover toggle
159
+ // const updated = selectedItems.filter((v: string) => v !== value);
160
+ // field.onChange(updated);
161
+ // onSelect && onSelect(updated);
162
+ // }}
163
+ // onKeyDown={(e) => {
164
+ // if (e.key === 'Enter' || e.key === ' ') {
165
+ // e.preventDefault();
166
+ // e.stopPropagation();
167
+ // const updated = selectedItems.filter((v: string) => v !== value);
168
+ // field.onChange(updated);
169
+ // onSelect && onSelect(updated);
170
+ // }
171
+ // }}
172
+ // className="ml-1 text-muted-foreground hover:text-destructive cursor-pointer outline-none"
173
+ // >
174
+ // <X className="w-3 h-3 ml-1" />
175
+ // </span>
176
+ // </span>
177
+ // );
178
+ // })}
179
+ // {selectedItems.length > defaultOptions && (
180
+ // <Tooltip>
181
+ // <TooltipTrigger asChild>
182
+ // <span className="px-2 py-1 bg-secondary text-secondary-foreground rounded-md cursor-pointer">
183
+ // +{selectedItems.length - defaultOptions} more
184
+ // </span>
185
+ // </TooltipTrigger>
186
+ // <TooltipContent className="max-w-xs break-words">
187
+ // <div
188
+ // onWheel={onWheel}
189
+ // className="flex flex-col gap-1 max-h-[200px] overflow-auto"
190
+ // >
191
+ // {selectedItems.slice(defaultOptions).map((value: string) => (
192
+ // <span key={value} className="text-sm">
193
+ // {items.find((item) => item.value === value)?.label || value}
194
+ // </span>
195
+ // ))}
196
+ // </div>
197
+ // </TooltipContent>
198
+ // </Tooltip>
199
+ // )}
200
+ // </div>
201
+ // </TooltipProvider>
202
+ // ) : (
203
+ // placeholder
204
+ // )}
205
+ // <ChevronsUpDown className="opacity-50" />
206
+ // </Button>
207
+ // </FormControl>
208
+ // </PopoverTrigger>
209
+ // <PopoverContent id="multiSelectPopover" className="p-0 w-full max-w-[300px]" align="start">
210
+ // <Command id="commandPopover">
211
+ // <CommandInput
212
+ // placeholder="Search..."
213
+ // value={search}
214
+ // onValueChange={setSearch}
215
+ // autoFocus
216
+ // />
217
+ // <CommandList
218
+ // className="max-h-60 overflow-auto"
219
+ // onWheel={onWheel}
220
+ // >
221
+ // <CommandEmpty>No items found.</CommandEmpty>
222
+ // <CommandGroup>
223
+ // {filteredItems.map((item) => {
224
+ // const isSelected = selectedItems.includes(item.value);
225
+ // return (
226
+ // <CommandItem
227
+ // value={item.label ?? ""}
228
+ // key={item.value}
229
+ // onSelect={() => toggleItem(item.value)}
230
+ // >
231
+ // {item.label}
232
+ // <Check
233
+ // className={cn(
234
+ // "ml-auto",
235
+ // isSelected ? "opacity-100" : "opacity-0"
236
+ // )}
237
+ // />
238
+ // </CommandItem>
239
+ // );
240
+ // })}
241
+ // </CommandGroup>
242
+ // </CommandList>
243
+ // </Command>
244
+ // </PopoverContent>
245
+ // </Popover>
246
+ // {formDescription && (
247
+ // <FormDescription>{formDescription}</FormDescription>
248
+ // )}
249
+ // <FormMessage />
250
+ // </FormItem>
251
+ // );
252
+ // }}
253
+ // />
254
+ // );
255
+ // }
256
+ import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "../../../shadcn/form";
257
+ import { useState, useEffect, useRef, useCallback } from "react";
258
+ import { Popover, PopoverContent, PopoverTrigger } from "../../../shadcn/popover";
259
+ import { Button } from "../../../shadcn/button";
260
+ import { cn } from "../../../utils/cn";
261
+ import { ChevronsUpDown, X } from "lucide-react";
262
+ import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "../../../shadcn/command";
263
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../../../shadcn/tooltip";
264
+ import { Checkbox } from "../../../shadcn/checkbox";
265
+ export function FormMultiComboboxInput({ formControl, name, label, placeholder, formDescription, items = [], disabled, onSelect, defaultValue = [], defaultOptions = 2, }) {
266
+ const [search, setSearch] = useState("");
267
+ const containerRef = useRef(null);
268
+ // Removed triggerRef and popoverWidth state, as we'll rely on CSS variables for sizing
269
+ // Filter items based on search
270
+ const filteredItems = items
271
+ .filter((item) => { var _a; return (_a = item.label) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(search.toLowerCase()); })
272
+ .sort((a, b) => { var _a, _b; return ((_a = a === null || a === void 0 ? void 0 : a.label) !== null && _a !== void 0 ? _a : "").localeCompare((_b = b === null || b === void 0 ? void 0 : b.label) !== null && _b !== void 0 ? _b : ""); });
273
+ return (_jsx(FormField, { control: formControl, name: name, render: ({ field }) => {
274
+ useEffect(() => {
275
+ if ((field.value === undefined || field.value === null) &&
276
+ defaultValue.length > 0) {
277
+ field.onChange(defaultValue);
278
+ }
279
+ }, [defaultValue, field]);
280
+ const selectedItems = field.value || [];
281
+ const [visibleCount, setVisibleCount] = useState(selectedItems.length);
282
+ const calculateVisibleItems = useCallback(() => {
283
+ const container = containerRef.current;
284
+ if (!container)
285
+ return visibleCount;
286
+ const children = Array.from(container.children);
287
+ let availableWidth = container.offsetWidth;
288
+ let usedWidth = 0;
289
+ let fitCount = 0;
290
+ for (const child of children) {
291
+ const childWidth = child.offsetWidth + 4; // gap/margin
292
+ if (usedWidth + childWidth <= availableWidth) {
293
+ usedWidth += childWidth;
294
+ fitCount++;
295
+ }
296
+ else {
297
+ break;
298
+ }
299
+ }
300
+ return fitCount;
301
+ }, [visibleCount]);
302
+ useEffect(() => {
303
+ const container = containerRef.current;
304
+ if (!container)
305
+ return;
306
+ let animationFrameId = null;
307
+ const resizeObserver = new ResizeObserver(() => {
308
+ if (animationFrameId)
309
+ cancelAnimationFrame(animationFrameId);
310
+ animationFrameId = requestAnimationFrame(() => {
311
+ const newVisibleCount = calculateVisibleItems();
312
+ setVisibleCount((prevVisibleCount) => {
313
+ if (prevVisibleCount !== newVisibleCount) {
314
+ return newVisibleCount;
315
+ }
316
+ return prevVisibleCount;
317
+ });
318
+ });
319
+ });
320
+ resizeObserver.observe(container);
321
+ setVisibleCount(calculateVisibleItems());
322
+ return () => {
323
+ if (animationFrameId)
324
+ cancelAnimationFrame(animationFrameId);
325
+ resizeObserver.disconnect();
326
+ };
327
+ }, [calculateVisibleItems]);
328
+ const toggleItem = (value) => {
329
+ let updatedItems;
330
+ if (selectedItems.includes(value)) {
331
+ updatedItems = selectedItems.filter((v) => v !== value);
332
+ }
333
+ else {
334
+ updatedItems = [...selectedItems, value];
335
+ }
336
+ field.onChange(updatedItems);
337
+ onSelect && onSelect(updatedItems);
338
+ };
339
+ const onWheel = (e) => {
340
+ const el = e.currentTarget;
341
+ el.scrollTop += e.deltaY;
342
+ e.preventDefault();
343
+ };
344
+ return (_jsxs(FormItem, { children: [label && _jsx(FormLabel, { children: label }), _jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, className: "w-full", children: _jsx(FormControl, { children: _jsxs(Button
345
+ // Removed ref={triggerRef} here as it's no longer needed for explicit width measurement
346
+ , {
347
+ // Removed ref={triggerRef} here as it's no longer needed for explicit width measurement
348
+ variant: "outline", role: "combobox", className: cn("justify-between", !selectedItems.length && "text-foreground/50"), disabled: disabled === true || (disabled && disabled(...arguments)), children: [selectedItems.length > 0 ? (_jsx(TooltipProvider, { children: _jsxs("div", { ref: containerRef, className: "flex flex-wrap gap-2 items-center overflow-hidden", children: [selectedItems.slice(0, defaultOptions).map((value) => {
349
+ var _a;
350
+ const label = ((_a = items.find((item) => item.value === value)) === null || _a === void 0 ? void 0 : _a.label) ||
351
+ value;
352
+ return (_jsxs("span", { className: "flex items-center px-2 py-1 bg-secondary text-secondary-foreground rounded-md truncate max-w-full", title: label, children: [_jsx("span", { className: "truncate max-w-[120px]", children: label }), _jsx("span", { role: "button", tabIndex: 0, onClick: (e) => {
353
+ e.stopPropagation();
354
+ const updated = selectedItems.filter((v) => v !== value);
355
+ field.onChange(updated);
356
+ onSelect && onSelect(updated);
357
+ }, onKeyDown: (e) => {
358
+ if (e.key === "Enter" || e.key === " ") {
359
+ e.preventDefault();
360
+ e.stopPropagation();
361
+ const updated = selectedItems.filter((v) => v !== value);
362
+ field.onChange(updated);
363
+ onSelect && onSelect(updated);
364
+ }
365
+ }, className: "ml-1 text-muted-foreground hover:text-destructive cursor-pointer outline-none", children: _jsx(X, { className: "w-3 h-3 ml-1" }) })] }, value));
366
+ }), selectedItems.length > defaultOptions && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { className: "px-2 py-1 bg-secondary text-secondary-foreground rounded-md cursor-pointer", children: ["+", selectedItems.length - defaultOptions, " more"] }) }), _jsx(TooltipContent, { className: "max-w-xs break-words", children: _jsx("div", { onWheel: onWheel, className: "flex flex-col gap-1 max-h-[200px] overflow-auto", children: selectedItems.slice(defaultOptions).map((value) => {
367
+ var _a;
368
+ return (_jsx("span", { className: "text-sm", children: ((_a = items.find((item) => item.value === value)) === null || _a === void 0 ? void 0 : _a.label) || value }, value));
369
+ }) }) })] }))] }) })) : (placeholder), _jsx(ChevronsUpDown, { className: "opacity-50" })] }) }) }), _jsx(PopoverContent, { id: "multiSelectPopover",
370
+ // New and improved width logic for PopoverContent
371
+ className: "p-0 min-w-[--radix-popover-trigger-width]" // Ensures at least trigger width
372
+ , style: {
373
+ width: 'max-content', // Allow to grow with content
374
+ maxWidth: 'min(500px, 90vw)' // Cap at 500px or 90% of viewport width, whichever is smaller
375
+ }, align: "start", children: _jsxs(Command, { id: "commandPopover", children: [_jsx(CommandInput, { placeholder: "Search...", value: search, onValueChange: setSearch, autoFocus: true }), _jsxs(CommandList, { className: "max-h-60 overflow-auto", onWheel: onWheel, children: [_jsx(CommandEmpty, { children: "No items found." }), _jsx(CommandGroup, { children: filteredItems.map((item) => {
376
+ var _a;
377
+ const isSelected = selectedItems.includes(item.value);
378
+ return (_jsxs(CommandItem, { value: (_a = item.label) !== null && _a !== void 0 ? _a : "", onSelect: () => toggleItem(item.value), className: "flex items-center space-x-2 justify-start", children: [_jsx(Checkbox, { checked: isSelected, onCheckedChange: () => toggleItem(item.value), onClick: (e) => e.stopPropagation() }), _jsx("span", { children: item.label })] }, item.value));
379
+ }) })] })] }) })] }), formDescription && (_jsx(FormDescription, { children: formDescription })), _jsx(FormMessage, {})] }));
380
+ } }));
381
+ }