@gostack-framework/ui 0.0.0-stage → 0.1.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 (751) hide show
  1. package/NOTICE.md +5 -0
  2. package/dist/activity/index.d.ts +2 -0
  3. package/dist/activity/index.js +3 -0
  4. package/dist/activity/index.js.map +1 -0
  5. package/dist/clickup/common/InlineNameTab.d.ts +11 -0
  6. package/dist/clickup/common/InlineNameTab.js +50 -0
  7. package/dist/clickup/common/InlineNameTab.js.map +1 -0
  8. package/dist/clickup/common/TaskAssigneeAvatar.d.ts +14 -0
  9. package/dist/clickup/common/TaskAssigneeAvatar.js +32 -0
  10. package/dist/clickup/common/TaskAssigneeAvatar.js.map +1 -0
  11. package/dist/clickup/common/TaskBreadcrumb.d.ts +11 -0
  12. package/dist/clickup/common/TaskBreadcrumb.js +11 -0
  13. package/dist/clickup/common/TaskBreadcrumb.js.map +1 -0
  14. package/dist/clickup/common/TaskCheck.d.ts +10 -0
  15. package/dist/clickup/common/TaskCheck.js +17 -0
  16. package/dist/clickup/common/TaskCheck.js.map +1 -0
  17. package/dist/clickup/common/TaskContextMenu.d.ts +10 -0
  18. package/dist/clickup/common/TaskContextMenu.js +22 -0
  19. package/dist/clickup/common/TaskContextMenu.js.map +1 -0
  20. package/dist/clickup/common/TaskIcon.d.ts +29 -0
  21. package/dist/clickup/common/TaskIcon.js +30 -0
  22. package/dist/clickup/common/TaskIcon.js.map +1 -0
  23. package/dist/clickup/common/TaskPriorityBadge.d.ts +11 -0
  24. package/dist/clickup/common/TaskPriorityBadge.js +11 -0
  25. package/dist/clickup/common/TaskPriorityBadge.js.map +1 -0
  26. package/dist/clickup/common/TaskRowActionMenu.d.ts +6 -0
  27. package/dist/clickup/common/TaskRowActionMenu.js +10 -0
  28. package/dist/clickup/common/TaskRowActionMenu.js.map +1 -0
  29. package/dist/clickup/common/TaskStatusPill.d.ts +12 -0
  30. package/dist/clickup/common/TaskStatusPill.js +24 -0
  31. package/dist/clickup/common/TaskStatusPill.js.map +1 -0
  32. package/dist/clickup/common/WorkspaceButton.d.ts +3 -0
  33. package/dist/clickup/common/WorkspaceButton.js +8 -0
  34. package/dist/clickup/common/WorkspaceButton.js.map +1 -0
  35. package/dist/clickup/common/WorkspaceHeader.d.ts +9 -0
  36. package/dist/clickup/common/WorkspaceHeader.js +7 -0
  37. package/dist/clickup/common/WorkspaceHeader.js.map +1 -0
  38. package/dist/clickup/common/WorkspaceMenus.d.ts +17 -0
  39. package/dist/clickup/common/WorkspaceMenus.js +15 -0
  40. package/dist/clickup/common/WorkspaceMenus.js.map +1 -0
  41. package/dist/clickup/common/WorkspaceMessage.d.ts +7 -0
  42. package/dist/clickup/common/WorkspaceMessage.js +6 -0
  43. package/dist/clickup/common/WorkspaceMessage.js.map +1 -0
  44. package/dist/clickup/common/WorkspaceMetricStrip.d.ts +10 -0
  45. package/dist/clickup/common/WorkspaceMetricStrip.js +6 -0
  46. package/dist/clickup/common/WorkspaceMetricStrip.js.map +1 -0
  47. package/dist/clickup/common/WorkspacePanel.d.ts +7 -0
  48. package/dist/clickup/common/WorkspacePanel.js +7 -0
  49. package/dist/clickup/common/WorkspacePanel.js.map +1 -0
  50. package/dist/clickup/common/WorkspaceSelect.d.ts +5 -0
  51. package/dist/clickup/common/WorkspaceSelect.js +64 -0
  52. package/dist/clickup/common/WorkspaceSelect.js.map +1 -0
  53. package/dist/clickup/common/WorkspaceTable.d.ts +16 -0
  54. package/dist/clickup/common/WorkspaceTable.js +7 -0
  55. package/dist/clickup/common/WorkspaceTable.js.map +1 -0
  56. package/dist/clickup/dialogs/ClickUpCommentComposer.d.ts +9 -0
  57. package/dist/clickup/dialogs/ClickUpCommentComposer.js +35 -0
  58. package/dist/clickup/dialogs/ClickUpCommentComposer.js.map +1 -0
  59. package/dist/clickup/dialogs/ClickUpTaskActions.d.ts +8 -0
  60. package/dist/clickup/dialogs/ClickUpTaskActions.js +10 -0
  61. package/dist/clickup/dialogs/ClickUpTaskActions.js.map +1 -0
  62. package/dist/clickup/dialogs/ClickUpTaskAssignee.d.ts +7 -0
  63. package/dist/clickup/dialogs/ClickUpTaskAssignee.js +12 -0
  64. package/dist/clickup/dialogs/ClickUpTaskAssignee.js.map +1 -0
  65. package/dist/clickup/dialogs/ClickUpTaskDescription.d.ts +12 -0
  66. package/dist/clickup/dialogs/ClickUpTaskDescription.js +12 -0
  67. package/dist/clickup/dialogs/ClickUpTaskDescription.js.map +1 -0
  68. package/dist/clickup/dialogs/ClickUpTaskDialog.d.ts +27 -0
  69. package/dist/clickup/dialogs/ClickUpTaskDialog.js +35 -0
  70. package/dist/clickup/dialogs/ClickUpTaskDialog.js.map +1 -0
  71. package/dist/clickup/dialogs/ClickUpTaskDiscussion.d.ts +11 -0
  72. package/dist/clickup/dialogs/ClickUpTaskDiscussion.js +29 -0
  73. package/dist/clickup/dialogs/ClickUpTaskDiscussion.js.map +1 -0
  74. package/dist/clickup/dialogs/ClickUpTaskMain.d.ts +24 -0
  75. package/dist/clickup/dialogs/ClickUpTaskMain.js +26 -0
  76. package/dist/clickup/dialogs/ClickUpTaskMain.js.map +1 -0
  77. package/dist/clickup/dialogs/ClickUpTaskProperties.d.ts +17 -0
  78. package/dist/clickup/dialogs/ClickUpTaskProperties.js +26 -0
  79. package/dist/clickup/dialogs/ClickUpTaskProperties.js.map +1 -0
  80. package/dist/clickup/elements/TaskCalendarCell.d.ts +14 -0
  81. package/dist/clickup/elements/TaskCalendarCell.js +19 -0
  82. package/dist/clickup/elements/TaskCalendarCell.js.map +1 -0
  83. package/dist/clickup/elements/TaskCard.d.ts +16 -0
  84. package/dist/clickup/elements/TaskCard.js +51 -0
  85. package/dist/clickup/elements/TaskCard.js.map +1 -0
  86. package/dist/clickup/elements/TaskGroup.d.ts +24 -0
  87. package/dist/clickup/elements/TaskGroup.js +50 -0
  88. package/dist/clickup/elements/TaskGroup.js.map +1 -0
  89. package/dist/clickup/elements/TaskRow.d.ts +19 -0
  90. package/dist/clickup/elements/TaskRow.js +60 -0
  91. package/dist/clickup/elements/TaskRow.js.map +1 -0
  92. package/dist/clickup/elements/TaskTableHead.d.ts +1 -0
  93. package/dist/clickup/elements/TaskTableHead.js +15 -0
  94. package/dist/clickup/elements/TaskTableHead.js.map +1 -0
  95. package/dist/clickup/elements/TaskTimelineRow.d.ts +12 -0
  96. package/dist/clickup/elements/TaskTimelineRow.js +16 -0
  97. package/dist/clickup/elements/TaskTimelineRow.js.map +1 -0
  98. package/dist/clickup/index.d.ts +41 -0
  99. package/dist/clickup/index.js +48 -0
  100. package/dist/clickup/index.js.map +1 -0
  101. package/dist/clickup/task-ui.css +864 -0
  102. package/dist/clickup/toolbar/TaskToolbar.d.ts +20 -0
  103. package/dist/clickup/toolbar/TaskToolbar.js +16 -0
  104. package/dist/clickup/toolbar/TaskToolbar.js.map +1 -0
  105. package/dist/clickup/toolbar/TaskViewPicker.d.ts +8 -0
  106. package/dist/clickup/toolbar/TaskViewPicker.js +48 -0
  107. package/dist/clickup/toolbar/TaskViewPicker.js.map +1 -0
  108. package/dist/clickup/toolbar/TaskViewSwitcher.d.ts +21 -0
  109. package/dist/clickup/toolbar/TaskViewSwitcher.js +55 -0
  110. package/dist/clickup/toolbar/TaskViewSwitcher.js.map +1 -0
  111. package/dist/clickup/types.d.ts +66 -0
  112. package/dist/clickup/types.js +2 -0
  113. package/dist/clickup/types.js.map +1 -0
  114. package/dist/clickup/views/TaskBoardView.d.ts +21 -0
  115. package/dist/clickup/views/TaskBoardView.js +75 -0
  116. package/dist/clickup/views/TaskBoardView.js.map +1 -0
  117. package/dist/clickup/views/TaskCalendarView.d.ts +12 -0
  118. package/dist/clickup/views/TaskCalendarView.js +197 -0
  119. package/dist/clickup/views/TaskCalendarView.js.map +1 -0
  120. package/dist/clickup/views/TaskGanttView.d.ts +12 -0
  121. package/dist/clickup/views/TaskGanttView.js +64 -0
  122. package/dist/clickup/views/TaskGanttView.js.map +1 -0
  123. package/dist/clickup/views/TaskListView.d.ts +22 -0
  124. package/dist/clickup/views/TaskListView.js +17 -0
  125. package/dist/clickup/views/TaskListView.js.map +1 -0
  126. package/dist/clickup/views/TaskTableView.d.ts +21 -0
  127. package/dist/clickup/views/TaskTableView.js +50 -0
  128. package/dist/clickup/views/TaskTableView.js.map +1 -0
  129. package/dist/components/ActivityFeed.d.ts +48 -0
  130. package/dist/components/ActivityFeed.js +60 -0
  131. package/dist/components/ActivityFeed.js.map +1 -0
  132. package/dist/components/AudioPlayer.d.ts +8 -0
  133. package/dist/components/AudioPlayer.js +96 -0
  134. package/dist/components/AudioPlayer.js.map +1 -0
  135. package/dist/components/BulkActionBar.d.ts +10 -0
  136. package/dist/components/BulkActionBar.js +10 -0
  137. package/dist/components/BulkActionBar.js.map +1 -0
  138. package/dist/components/Carousel.d.ts +8 -0
  139. package/dist/components/Carousel.js +38 -0
  140. package/dist/components/Carousel.js.map +1 -0
  141. package/dist/components/ChatBot.d.ts +6 -0
  142. package/dist/components/ChatBot.js +52 -0
  143. package/dist/components/ChatBot.js.map +1 -0
  144. package/dist/components/CheckboxCustom.d.ts +9 -0
  145. package/dist/components/CheckboxCustom.js +42 -0
  146. package/dist/components/CheckboxCustom.js.map +1 -0
  147. package/dist/components/ClickUpTaskModal.d.ts +36 -0
  148. package/dist/components/ClickUpTaskModal.js +180 -0
  149. package/dist/components/ClickUpTaskModal.js.map +1 -0
  150. package/dist/components/ConditionBuilder.d.ts +28 -0
  151. package/dist/components/ConditionBuilder.js +63 -0
  152. package/dist/components/ConditionBuilder.js.map +1 -0
  153. package/dist/components/ConfirmDialog.d.ts +21 -0
  154. package/dist/components/ConfirmDialog.js +51 -0
  155. package/dist/components/ConfirmDialog.js.map +1 -0
  156. package/dist/components/DataCard.d.ts +43 -0
  157. package/dist/components/DataCard.js +30 -0
  158. package/dist/components/DataCard.js.map +1 -0
  159. package/dist/components/DataTable.d.ts +107 -0
  160. package/dist/components/DataTable.js +153 -0
  161. package/dist/components/DataTable.js.map +1 -0
  162. package/dist/components/DatePicker.d.ts +16 -0
  163. package/dist/components/DatePicker.js +184 -0
  164. package/dist/components/DatePicker.js.map +1 -0
  165. package/dist/components/EmptyState.d.ts +26 -0
  166. package/dist/components/EmptyState.js +37 -0
  167. package/dist/components/EmptyState.js.map +1 -0
  168. package/dist/components/Error.d.ts +12 -0
  169. package/dist/components/Error.js +41 -0
  170. package/dist/components/Error.js.map +1 -0
  171. package/dist/components/ErrorState.d.ts +10 -0
  172. package/dist/components/ErrorState.js +53 -0
  173. package/dist/components/ErrorState.js.map +1 -0
  174. package/dist/components/FileAttachmentChip.d.ts +10 -0
  175. package/dist/components/FileAttachmentChip.js +21 -0
  176. package/dist/components/FileAttachmentChip.js.map +1 -0
  177. package/dist/components/FilterConditionChip.d.ts +10 -0
  178. package/dist/components/FilterConditionChip.js +11 -0
  179. package/dist/components/FilterConditionChip.js.map +1 -0
  180. package/dist/components/GalleryCarouselDialog.d.ts +14 -0
  181. package/dist/components/GalleryCarouselDialog.js +167 -0
  182. package/dist/components/GalleryCarouselDialog.js.map +1 -0
  183. package/dist/components/HierarchicalSelectionMenu.d.ts +21 -0
  184. package/dist/components/HierarchicalSelectionMenu.js +168 -0
  185. package/dist/components/HierarchicalSelectionMenu.js.map +1 -0
  186. package/dist/components/InfiniteSelect.d.ts +44 -0
  187. package/dist/components/InfiniteSelect.js +121 -0
  188. package/dist/components/InfiniteSelect.js.map +1 -0
  189. package/dist/components/LoadingState.d.ts +28 -0
  190. package/dist/components/LoadingState.js +24 -0
  191. package/dist/components/LoadingState.js.map +1 -0
  192. package/dist/components/LucidIconRender.d.ts +9 -0
  193. package/dist/components/LucidIconRender.js +7 -0
  194. package/dist/components/LucidIconRender.js.map +1 -0
  195. package/dist/components/MasterDetailLayout.d.ts +67 -0
  196. package/dist/components/MasterDetailLayout.js +79 -0
  197. package/dist/components/MasterDetailLayout.js.map +1 -0
  198. package/dist/components/PinnedAttributeRow.d.ts +12 -0
  199. package/dist/components/PinnedAttributeRow.js +11 -0
  200. package/dist/components/PinnedAttributeRow.js.map +1 -0
  201. package/dist/components/PopUp.d.ts +11 -0
  202. package/dist/components/PopUp.js +83 -0
  203. package/dist/components/PopUp.js.map +1 -0
  204. package/dist/components/PrioritySignal.d.ts +10 -0
  205. package/dist/components/PrioritySignal.js +54 -0
  206. package/dist/components/PrioritySignal.js.map +1 -0
  207. package/dist/components/RichTextEditor.d.ts +7 -0
  208. package/dist/components/RichTextEditor.js +252 -0
  209. package/dist/components/RichTextEditor.js.map +1 -0
  210. package/dist/components/SLACountdown.d.ts +15 -0
  211. package/dist/components/SLACountdown.js +26 -0
  212. package/dist/components/SLACountdown.js.map +1 -0
  213. package/dist/components/StatusBadge.d.ts +14 -0
  214. package/dist/components/StatusBadge.js +55 -0
  215. package/dist/components/StatusBadge.js.map +1 -0
  216. package/dist/components/StatusCards.d.ts +12 -0
  217. package/dist/components/StatusCards.js +12 -0
  218. package/dist/components/StatusCards.js.map +1 -0
  219. package/dist/components/StatusProgressBar.d.ts +18 -0
  220. package/dist/components/StatusProgressBar.js +50 -0
  221. package/dist/components/StatusProgressBar.js.map +1 -0
  222. package/dist/components/TableActions.d.ts +26 -0
  223. package/dist/components/TableActions.js +49 -0
  224. package/dist/components/TableActions.js.map +1 -0
  225. package/dist/components/TaskDetailsModal.d.ts +3 -0
  226. package/dist/components/TaskDetailsModal.js +8 -0
  227. package/dist/components/TaskDetailsModal.js.map +1 -0
  228. package/dist/components/ThemedText.d.ts +24 -0
  229. package/dist/components/ThemedText.js +103 -0
  230. package/dist/components/ThemedText.js.map +1 -0
  231. package/dist/components/TicketWorkspaceLayout.d.ts +11 -0
  232. package/dist/components/TicketWorkspaceLayout.js +7 -0
  233. package/dist/components/TicketWorkspaceLayout.js.map +1 -0
  234. package/dist/components/TimePicker.d.ts +15 -0
  235. package/dist/components/TimePicker.js +96 -0
  236. package/dist/components/TimePicker.js.map +1 -0
  237. package/dist/components/Tooltip.d.ts +19 -0
  238. package/dist/components/Tooltip.js +75 -0
  239. package/dist/components/Tooltip.js.map +1 -0
  240. package/dist/components/TreeView.d.ts +33 -0
  241. package/dist/components/TreeView.js +55 -0
  242. package/dist/components/TreeView.js.map +1 -0
  243. package/dist/components/accordion.d.ts +6 -0
  244. package/dist/components/accordion.js +18 -0
  245. package/dist/components/accordion.js.map +1 -0
  246. package/dist/components/avatar.d.ts +11 -0
  247. package/dist/components/avatar.js +23 -0
  248. package/dist/components/avatar.js.map +1 -0
  249. package/dist/components/badge.d.ts +12 -0
  250. package/dist/components/badge.js +44 -0
  251. package/dist/components/badge.js.map +1 -0
  252. package/dist/components/button.d.ts +15 -0
  253. package/dist/components/button.js +47 -0
  254. package/dist/components/button.js.map +1 -0
  255. package/dist/components/card.d.ts +11 -0
  256. package/dist/components/card.js +25 -0
  257. package/dist/components/card.js.map +1 -0
  258. package/dist/components/context menu core/context-menu.d.ts +28 -0
  259. package/dist/components/context menu core/context-menu.js +91 -0
  260. package/dist/components/context menu core/context-menu.js.map +1 -0
  261. package/dist/components/context menu core/contextMenuAdvanced.d.ts +46 -0
  262. package/dist/components/context menu core/contextMenuAdvanced.js +34 -0
  263. package/dist/components/context menu core/contextMenuAdvanced.js.map +1 -0
  264. package/dist/components/dialog.d.ts +18 -0
  265. package/dist/components/dialog.js +42 -0
  266. package/dist/components/dialog.js.map +1 -0
  267. package/dist/components/dropdown-menu.d.ts +29 -0
  268. package/dist/components/dropdown-menu.js +51 -0
  269. package/dist/components/dropdown-menu.js.map +1 -0
  270. package/dist/components/filter/AdvancedFilters.d.ts +14 -0
  271. package/dist/components/filter/AdvancedFilters.js +220 -0
  272. package/dist/components/filter/AdvancedFilters.js.map +1 -0
  273. package/dist/components/filter/Filter.d.ts +48 -0
  274. package/dist/components/filter/Filter.js +153 -0
  275. package/dist/components/filter/Filter.js.map +1 -0
  276. package/dist/components/filter/FilterButton.d.ts +10 -0
  277. package/dist/components/filter/FilterButton.js +9 -0
  278. package/dist/components/filter/FilterButton.js.map +1 -0
  279. package/dist/components/filter/NormalFilters.d.ts +14 -0
  280. package/dist/components/filter/NormalFilters.js +40 -0
  281. package/dist/components/filter/NormalFilters.js.map +1 -0
  282. package/dist/components/filter/index.d.ts +5 -0
  283. package/dist/components/filter/index.js +6 -0
  284. package/dist/components/filter/index.js.map +1 -0
  285. package/dist/components/filter/types.d.ts +32 -0
  286. package/dist/components/filter/types.js +2 -0
  287. package/dist/components/filter/types.js.map +1 -0
  288. package/dist/components/form-error.d.ts +42 -0
  289. package/dist/components/form-error.js +103 -0
  290. package/dist/components/form-error.js.map +1 -0
  291. package/dist/components/icons.d.ts +19 -0
  292. package/dist/components/icons.js +21 -0
  293. package/dist/components/icons.js.map +1 -0
  294. package/dist/components/image.d.ts +12 -0
  295. package/dist/components/image.js +18 -0
  296. package/dist/components/image.js.map +1 -0
  297. package/dist/components/index.d.ts +59 -0
  298. package/dist/components/index.js +60 -0
  299. package/dist/components/index.js.map +1 -0
  300. package/dist/components/input.d.ts +22 -0
  301. package/dist/components/input.js +102 -0
  302. package/dist/components/input.js.map +1 -0
  303. package/dist/components/label.d.ts +7 -0
  304. package/dist/components/label.js +8 -0
  305. package/dist/components/label.js.map +1 -0
  306. package/dist/components/layout/FeatureLayout.d.ts +131 -0
  307. package/dist/components/layout/FeatureLayout.js +113 -0
  308. package/dist/components/layout/FeatureLayout.js.map +1 -0
  309. package/dist/components/layout/FeatureLayoutExportButton.d.ts +10 -0
  310. package/dist/components/layout/FeatureLayoutExportButton.js +21 -0
  311. package/dist/components/layout/FeatureLayoutExportButton.js.map +1 -0
  312. package/dist/components/layout/FeatureLayoutTabs.d.ts +36 -0
  313. package/dist/components/layout/FeatureLayoutTabs.js +192 -0
  314. package/dist/components/layout/FeatureLayoutTabs.js.map +1 -0
  315. package/dist/components/layout/kanban/FeatureLayoutKanban.d.ts +6 -0
  316. package/dist/components/layout/kanban/FeatureLayoutKanban.js +195 -0
  317. package/dist/components/layout/kanban/FeatureLayoutKanban.js.map +1 -0
  318. package/dist/components/layout/kanban/KanbanCard.d.ts +12 -0
  319. package/dist/components/layout/kanban/KanbanCard.js +43 -0
  320. package/dist/components/layout/kanban/KanbanCard.js.map +1 -0
  321. package/dist/components/layout/kanban/KanbanColumn.d.ts +23 -0
  322. package/dist/components/layout/kanban/KanbanColumn.js +30 -0
  323. package/dist/components/layout/kanban/KanbanColumn.js.map +1 -0
  324. package/dist/components/layout/kanban/KanbanToolbar.d.ts +11 -0
  325. package/dist/components/layout/kanban/KanbanToolbar.js +10 -0
  326. package/dist/components/layout/kanban/KanbanToolbar.js.map +1 -0
  327. package/dist/components/layout/kanban/index.d.ts +6 -0
  328. package/dist/components/layout/kanban/index.js +7 -0
  329. package/dist/components/layout/kanban/index.js.map +1 -0
  330. package/dist/components/layout/kanban/types.d.ts +67 -0
  331. package/dist/components/layout/kanban/types.js +2 -0
  332. package/dist/components/layout/kanban/types.js.map +1 -0
  333. package/dist/components/popover.d.ts +11 -0
  334. package/dist/components/popover.js +20 -0
  335. package/dist/components/popover.js.map +1 -0
  336. package/dist/components/react-flow/FlowGraphHeader.d.ts +2 -0
  337. package/dist/components/react-flow/FlowGraphHeader.js +10 -0
  338. package/dist/components/react-flow/FlowGraphHeader.js.map +1 -0
  339. package/dist/components/react-flow/GlowEdge.d.ts +3 -0
  340. package/dist/components/react-flow/GlowEdge.js +100 -0
  341. package/dist/components/react-flow/GlowEdge.js.map +1 -0
  342. package/dist/components/react-flow/ReactFlowCanvas.d.ts +7 -0
  343. package/dist/components/react-flow/ReactFlowCanvas.js +44 -0
  344. package/dist/components/react-flow/ReactFlowCanvas.js.map +1 -0
  345. package/dist/components/react-flow/RelationshipFlow.d.ts +2 -0
  346. package/dist/components/react-flow/RelationshipFlow.js +9 -0
  347. package/dist/components/react-flow/RelationshipFlow.js.map +1 -0
  348. package/dist/components/react-flow/TreeFlowLayout.d.ts +29 -0
  349. package/dist/components/react-flow/TreeFlowLayout.js +14 -0
  350. package/dist/components/react-flow/TreeFlowLayout.js.map +1 -0
  351. package/dist/components/react-flow/edges.d.ts +8 -0
  352. package/dist/components/react-flow/edges.js +21 -0
  353. package/dist/components/react-flow/edges.js.map +1 -0
  354. package/dist/components/react-flow/index.d.ts +9 -0
  355. package/dist/components/react-flow/index.js +10 -0
  356. package/dist/components/react-flow/index.js.map +1 -0
  357. package/dist/components/react-flow/layout.d.ts +5 -0
  358. package/dist/components/react-flow/layout.js +11 -0
  359. package/dist/components/react-flow/layout.js.map +1 -0
  360. package/dist/components/react-flow/types.d.ts +82 -0
  361. package/dist/components/react-flow/types.js +6 -0
  362. package/dist/components/react-flow/types.js.map +1 -0
  363. package/dist/components/react-flow/useFlowGraph.d.ts +3 -0
  364. package/dist/components/react-flow/useFlowGraph.js +22 -0
  365. package/dist/components/react-flow/useFlowGraph.js.map +1 -0
  366. package/dist/components/react-flow/useFlowGraphSync.d.ts +4 -0
  367. package/dist/components/react-flow/useFlowGraphSync.js +43 -0
  368. package/dist/components/react-flow/useFlowGraphSync.js.map +1 -0
  369. package/dist/components/select.d.ts +23 -0
  370. package/dist/components/select.js +109 -0
  371. package/dist/components/select.js.map +1 -0
  372. package/dist/components/sonner.d.ts +4 -0
  373. package/dist/components/sonner.js +29 -0
  374. package/dist/components/sonner.js.map +1 -0
  375. package/dist/components/stepper.d.ts +12 -0
  376. package/dist/components/stepper.js +22 -0
  377. package/dist/components/stepper.js.map +1 -0
  378. package/dist/components/switch.d.ts +5 -0
  379. package/dist/components/switch.js +16 -0
  380. package/dist/components/switch.js.map +1 -0
  381. package/dist/components/table.d.ts +52 -0
  382. package/dist/components/table.js +112 -0
  383. package/dist/components/table.js.map +1 -0
  384. package/dist/components/tabs.d.ts +10 -0
  385. package/dist/components/tabs.js +29 -0
  386. package/dist/components/tabs.js.map +1 -0
  387. package/dist/components/textarea.d.ts +6 -0
  388. package/dist/components/textarea.js +17 -0
  389. package/dist/components/textarea.js.map +1 -0
  390. package/dist/condition-builder/index.d.ts +2 -0
  391. package/dist/condition-builder/index.js +3 -0
  392. package/dist/condition-builder/index.js.map +1 -0
  393. package/dist/context-menu/index.d.ts +2 -0
  394. package/dist/context-menu/index.js +3 -0
  395. package/dist/context-menu/index.js.map +1 -0
  396. package/dist/dropdown/SearchDropdown.d.ts +19 -0
  397. package/dist/dropdown/SearchDropdown.js +27 -0
  398. package/dist/dropdown/SearchDropdown.js.map +1 -0
  399. package/dist/dropdown/index.d.ts +2 -0
  400. package/dist/dropdown/index.js +3 -0
  401. package/dist/dropdown/index.js.map +1 -0
  402. package/dist/editor.d.ts +1 -0
  403. package/dist/editor.js +2 -0
  404. package/dist/editor.js.map +1 -0
  405. package/dist/feedback/index.d.ts +6 -0
  406. package/dist/feedback/index.js +7 -0
  407. package/dist/feedback/index.js.map +1 -0
  408. package/dist/flow.d.ts +1 -0
  409. package/dist/flow.js +2 -0
  410. package/dist/flow.js.map +1 -0
  411. package/dist/hooks/index.d.ts +3 -0
  412. package/dist/hooks/index.js +4 -0
  413. package/dist/hooks/index.js.map +1 -0
  414. package/dist/hooks/useContextMenuActions.d.ts +16 -0
  415. package/dist/hooks/useContextMenuActions.js +35 -0
  416. package/dist/hooks/useContextMenuActions.js.map +1 -0
  417. package/dist/hooks/useFeatureLayout.d.ts +14 -0
  418. package/dist/hooks/useFeatureLayout.js +21 -0
  419. package/dist/hooks/useFeatureLayout.js.map +1 -0
  420. package/dist/hooks/useTableActions.d.ts +46 -0
  421. package/dist/hooks/useTableActions.js +71 -0
  422. package/dist/hooks/useTableActions.js.map +1 -0
  423. package/dist/index.d.ts +19 -0
  424. package/dist/index.js +26 -0
  425. package/dist/index.js.map +1 -0
  426. package/dist/integrations.d.ts +42 -0
  427. package/dist/integrations.js +9 -0
  428. package/dist/integrations.js.map +1 -0
  429. package/dist/itsm/index.d.ts +7 -0
  430. package/dist/itsm/index.js +8 -0
  431. package/dist/itsm/index.js.map +1 -0
  432. package/dist/locales/ar.json +149 -0
  433. package/dist/locales/en.json +149 -0
  434. package/dist/primitives/index.d.ts +11 -0
  435. package/dist/primitives/index.js +12 -0
  436. package/dist/primitives/index.js.map +1 -0
  437. package/dist/progress.d.ts +7 -0
  438. package/dist/progress.js +20 -0
  439. package/dist/progress.js.map +1 -0
  440. package/dist/select/index.d.ts +3 -0
  441. package/dist/select/index.js +4 -0
  442. package/dist/select/index.js.map +1 -0
  443. package/dist/styles.css +2 -0
  444. package/dist/support/api.d.ts +8 -0
  445. package/dist/support/api.js +2 -0
  446. package/dist/support/api.js.map +1 -0
  447. package/dist/support/types/file.types.d.ts +12 -0
  448. package/dist/support/types/file.types.js +2 -0
  449. package/dist/support/types/file.types.js.map +1 -0
  450. package/dist/support/types/gallery.types.d.ts +22 -0
  451. package/dist/support/types/gallery.types.js +2 -0
  452. package/dist/support/types/gallery.types.js.map +1 -0
  453. package/dist/support/types/governorates.types.d.ts +12 -0
  454. package/dist/support/types/governorates.types.js +2 -0
  455. package/dist/support/types/governorates.types.js.map +1 -0
  456. package/dist/support/types/grade.types.d.ts +7 -0
  457. package/dist/support/types/grade.types.js +2 -0
  458. package/dist/support/types/grade.types.js.map +1 -0
  459. package/dist/support/types/index.d.ts +13 -0
  460. package/dist/support/types/index.js +14 -0
  461. package/dist/support/types/index.js.map +1 -0
  462. package/dist/support/types/metadata.types.d.ts +61 -0
  463. package/dist/support/types/metadata.types.js +3 -0
  464. package/dist/support/types/metadata.types.js.map +1 -0
  465. package/dist/support/types/table.types.d.ts +33 -0
  466. package/dist/support/types/table.types.js +2 -0
  467. package/dist/support/types/table.types.js.map +1 -0
  468. package/dist/support/types/viewCard.types.d.ts +78 -0
  469. package/dist/support/types/viewCard.types.js +3 -0
  470. package/dist/support/types/viewCard.types.js.map +1 -0
  471. package/dist/support/utils/fileUtils.d.ts +1 -0
  472. package/dist/support/utils/fileUtils.js +2 -0
  473. package/dist/support/utils/fileUtils.js.map +1 -0
  474. package/dist/support/utils.d.ts +5 -0
  475. package/dist/support/utils.js +4 -0
  476. package/dist/support/utils.js.map +1 -0
  477. package/dist/table/index.d.ts +6 -0
  478. package/dist/table/index.js +7 -0
  479. package/dist/table/index.js.map +1 -0
  480. package/dist/tasks.d.ts +3 -0
  481. package/dist/tasks.js +4 -0
  482. package/dist/tasks.js.map +1 -0
  483. package/dist/tours/TourContext.d.ts +33 -0
  484. package/dist/tours/TourContext.js +98 -0
  485. package/dist/tours/TourContext.js.map +1 -0
  486. package/dist/tours/TourOverlay.d.ts +7 -0
  487. package/dist/tours/TourOverlay.js +129 -0
  488. package/dist/tours/TourOverlay.js.map +1 -0
  489. package/dist/tours.d.ts +2 -0
  490. package/dist/tours.js +3 -0
  491. package/dist/tours.js.map +1 -0
  492. package/dist/types.d.ts +91 -0
  493. package/dist/types.js +7 -0
  494. package/dist/types.js.map +1 -0
  495. package/dist/typography/index.d.ts +4 -0
  496. package/dist/typography/index.js +5 -0
  497. package/dist/typography/index.js.map +1 -0
  498. package/dist/typography/typography.adapter.d.ts +18 -0
  499. package/dist/typography/typography.adapter.js +113 -0
  500. package/dist/typography/typography.adapter.js.map +1 -0
  501. package/dist/typography/typography.constants.d.ts +56 -0
  502. package/dist/typography/typography.constants.js +649 -0
  503. package/dist/typography/typography.constants.js.map +1 -0
  504. package/dist/typography/typography.types.d.ts +62 -0
  505. package/dist/typography/typography.types.js +6 -0
  506. package/dist/typography/typography.types.js.map +1 -0
  507. package/dist/typography/useTypography.d.ts +25 -0
  508. package/dist/typography/useTypography.js +158 -0
  509. package/dist/typography/useTypography.js.map +1 -0
  510. package/dist/ui/accordion.d.ts +7 -0
  511. package/dist/ui/accordion.js +18 -0
  512. package/dist/ui/accordion.js.map +1 -0
  513. package/dist/ui/avatar.d.ts +11 -0
  514. package/dist/ui/avatar.js +23 -0
  515. package/dist/ui/avatar.js.map +1 -0
  516. package/dist/ui/badge.d.ts +10 -0
  517. package/dist/ui/badge.js +33 -0
  518. package/dist/ui/badge.js.map +1 -0
  519. package/dist/ui/button.d.ts +11 -0
  520. package/dist/ui/button.js +41 -0
  521. package/dist/ui/button.js.map +1 -0
  522. package/dist/ui/card.d.ts +9 -0
  523. package/dist/ui/card.js +25 -0
  524. package/dist/ui/card.js.map +1 -0
  525. package/dist/ui/dialog.d.ts +17 -0
  526. package/dist/ui/dialog.js +37 -0
  527. package/dist/ui/dialog.js.map +1 -0
  528. package/dist/ui/dropdown-menu.d.ts +25 -0
  529. package/dist/ui/dropdown-menu.js +51 -0
  530. package/dist/ui/dropdown-menu.js.map +1 -0
  531. package/dist/ui/index.d.ts +15 -0
  532. package/dist/ui/index.js +16 -0
  533. package/dist/ui/index.js.map +1 -0
  534. package/dist/ui/input.d.ts +3 -0
  535. package/dist/ui/input.js +7 -0
  536. package/dist/ui/input.js.map +1 -0
  537. package/dist/ui/popover.d.ts +10 -0
  538. package/dist/ui/popover.js +26 -0
  539. package/dist/ui/popover.js.map +1 -0
  540. package/dist/ui/select.d.ts +15 -0
  541. package/dist/ui/select.js +38 -0
  542. package/dist/ui/select.js.map +1 -0
  543. package/dist/ui/switch.d.ts +6 -0
  544. package/dist/ui/switch.js +8 -0
  545. package/dist/ui/switch.js.map +1 -0
  546. package/dist/ui/table.d.ts +10 -0
  547. package/dist/ui/table.js +28 -0
  548. package/dist/ui/table.js.map +1 -0
  549. package/dist/ui/tabs.d.ts +11 -0
  550. package/dist/ui/tabs.js +29 -0
  551. package/dist/ui/tabs.js.map +1 -0
  552. package/dist/ui/textarea.d.ts +3 -0
  553. package/dist/ui/textarea.js +7 -0
  554. package/dist/ui/textarea.js.map +1 -0
  555. package/dist/ui/tooltip.d.ts +7 -0
  556. package/dist/ui/tooltip.js +17 -0
  557. package/dist/ui/tooltip.js.map +1 -0
  558. package/dist/workspace/index.d.ts +2 -0
  559. package/dist/workspace/index.js +3 -0
  560. package/dist/workspace/index.js.map +1 -0
  561. package/package.json +61 -4
  562. package/src/activity/index.ts +2 -0
  563. package/src/clickup/common/InlineNameTab.tsx +122 -0
  564. package/src/clickup/common/TaskAssigneeAvatar.tsx +127 -0
  565. package/src/clickup/common/TaskBreadcrumb.tsx +91 -0
  566. package/src/clickup/common/TaskCheck.tsx +51 -0
  567. package/src/clickup/common/TaskContextMenu.tsx +42 -0
  568. package/src/clickup/common/TaskIcon.tsx +145 -0
  569. package/src/clickup/common/TaskPriorityBadge.tsx +52 -0
  570. package/src/clickup/common/TaskRowActionMenu.tsx +43 -0
  571. package/src/clickup/common/TaskStatusPill.tsx +73 -0
  572. package/src/clickup/common/WorkspaceButton.tsx +22 -0
  573. package/src/clickup/common/WorkspaceHeader.tsx +41 -0
  574. package/src/clickup/common/WorkspaceMenus.tsx +92 -0
  575. package/src/clickup/common/WorkspaceMessage.tsx +39 -0
  576. package/src/clickup/common/WorkspaceMetricStrip.tsx +49 -0
  577. package/src/clickup/common/WorkspacePanel.tsx +27 -0
  578. package/src/clickup/common/WorkspaceSelect.tsx +173 -0
  579. package/src/clickup/common/WorkspaceTable.tsx +78 -0
  580. package/src/clickup/dialogs/ClickUpCommentComposer.tsx +93 -0
  581. package/src/clickup/dialogs/ClickUpTaskActions.tsx +73 -0
  582. package/src/clickup/dialogs/ClickUpTaskAssignee.tsx +86 -0
  583. package/src/clickup/dialogs/ClickUpTaskDescription.tsx +67 -0
  584. package/src/clickup/dialogs/ClickUpTaskDialog.tsx +187 -0
  585. package/src/clickup/dialogs/ClickUpTaskDiscussion.tsx +136 -0
  586. package/src/clickup/dialogs/ClickUpTaskMain.tsx +156 -0
  587. package/src/clickup/dialogs/ClickUpTaskProperties.tsx +214 -0
  588. package/src/clickup/elements/TaskCalendarCell.tsx +91 -0
  589. package/src/clickup/elements/TaskCard.tsx +154 -0
  590. package/src/clickup/elements/TaskGroup.tsx +208 -0
  591. package/src/clickup/elements/TaskRow.tsx +172 -0
  592. package/src/clickup/elements/TaskTableHead.tsx +29 -0
  593. package/src/clickup/elements/TaskTimelineRow.tsx +77 -0
  594. package/src/clickup/index.ts +63 -0
  595. package/src/clickup/task-ui.css +864 -0
  596. package/src/clickup/toolbar/TaskToolbar.tsx +130 -0
  597. package/src/clickup/toolbar/TaskViewPicker.tsx +148 -0
  598. package/src/clickup/toolbar/TaskViewSwitcher.tsx +129 -0
  599. package/src/clickup/types.ts +79 -0
  600. package/src/clickup/views/TaskBoardView.tsx +259 -0
  601. package/src/clickup/views/TaskCalendarView.tsx +410 -0
  602. package/src/clickup/views/TaskGanttView.tsx +178 -0
  603. package/src/clickup/views/TaskListView.tsx +95 -0
  604. package/src/clickup/views/TaskTableView.tsx +192 -0
  605. package/src/components/ActivityFeed.tsx +440 -0
  606. package/src/components/AudioPlayer.tsx +179 -0
  607. package/src/components/BulkActionBar.tsx +72 -0
  608. package/src/components/Carousel.tsx +107 -0
  609. package/src/components/ChatBot.tsx +205 -0
  610. package/src/components/CheckboxCustom.tsx +106 -0
  611. package/src/components/ClickUpTaskModal.tsx +661 -0
  612. package/src/components/ConditionBuilder.tsx +322 -0
  613. package/src/components/ConfirmDialog.tsx +157 -0
  614. package/src/components/DataCard.tsx +203 -0
  615. package/src/components/DataTable.tsx +609 -0
  616. package/src/components/DatePicker.tsx +397 -0
  617. package/src/components/EmptyState.tsx +105 -0
  618. package/src/components/Error.tsx +248 -0
  619. package/src/components/ErrorState.tsx +199 -0
  620. package/src/components/FileAttachmentChip.tsx +84 -0
  621. package/src/components/FilterConditionChip.tsx +56 -0
  622. package/src/components/GalleryCarouselDialog.tsx +439 -0
  623. package/src/components/HierarchicalSelectionMenu.tsx +432 -0
  624. package/src/components/InfiniteSelect.tsx +397 -0
  625. package/src/components/LoadingState.tsx +105 -0
  626. package/src/components/LucidIconRender.tsx +25 -0
  627. package/src/components/MasterDetailLayout.tsx +442 -0
  628. package/src/components/PinnedAttributeRow.tsx +70 -0
  629. package/src/components/PopUp.tsx +309 -0
  630. package/src/components/PrioritySignal.tsx +131 -0
  631. package/src/components/RichTextEditor.tsx +433 -0
  632. package/src/components/SLACountdown.tsx +133 -0
  633. package/src/components/StatusBadge.tsx +119 -0
  634. package/src/components/StatusCards.tsx +78 -0
  635. package/src/components/StatusProgressBar.tsx +158 -0
  636. package/src/components/TableActions.tsx +182 -0
  637. package/src/components/TaskDetailsModal.tsx +7 -0
  638. package/src/components/ThemedText.tsx +181 -0
  639. package/src/components/TicketWorkspaceLayout.tsx +63 -0
  640. package/src/components/TimePicker.tsx +283 -0
  641. package/src/components/Tooltip.tsx +128 -0
  642. package/src/components/TreeView.tsx +297 -0
  643. package/src/components/accordion.tsx +78 -0
  644. package/src/components/avatar.tsx +107 -0
  645. package/src/components/badge.tsx +72 -0
  646. package/src/components/button.tsx +93 -0
  647. package/src/components/card.tsx +103 -0
  648. package/src/components/context menu core/context-menu.tsx +304 -0
  649. package/src/components/context menu core/contextMenuAdvanced.tsx +130 -0
  650. package/src/components/dialog.tsx +186 -0
  651. package/src/components/dropdown-menu.tsx +274 -0
  652. package/src/components/filter/AdvancedFilters.tsx +834 -0
  653. package/src/components/filter/Filter.tsx +233 -0
  654. package/src/components/filter/FilterButton.tsx +38 -0
  655. package/src/components/filter/NormalFilters.tsx +109 -0
  656. package/src/components/filter/index.ts +5 -0
  657. package/src/components/filter/types.ts +36 -0
  658. package/src/components/form-error.tsx +172 -0
  659. package/src/components/icons.tsx +468 -0
  660. package/src/components/image.tsx +85 -0
  661. package/src/components/index.ts +59 -0
  662. package/src/components/input.tsx +260 -0
  663. package/src/components/label.tsx +27 -0
  664. package/src/components/layout/FeatureLayout.tsx +739 -0
  665. package/src/components/layout/FeatureLayoutExportButton.tsx +93 -0
  666. package/src/components/layout/FeatureLayoutTabs.tsx +413 -0
  667. package/src/components/layout/kanban/FeatureLayoutKanban.tsx +386 -0
  668. package/src/components/layout/kanban/KanbanCard.tsx +132 -0
  669. package/src/components/layout/kanban/KanbanColumn.tsx +241 -0
  670. package/src/components/layout/kanban/KanbanToolbar.tsx +77 -0
  671. package/src/components/layout/kanban/index.ts +6 -0
  672. package/src/components/layout/kanban/types.ts +96 -0
  673. package/src/components/popover.tsx +66 -0
  674. package/src/components/react-flow/FlowGraphHeader.tsx +68 -0
  675. package/src/components/react-flow/GlowEdge.tsx +238 -0
  676. package/src/components/react-flow/ReactFlowCanvas.tsx +112 -0
  677. package/src/components/react-flow/RelationshipFlow.tsx +50 -0
  678. package/src/components/react-flow/TreeFlowLayout.tsx +187 -0
  679. package/src/components/react-flow/edges.ts +39 -0
  680. package/src/components/react-flow/index.ts +9 -0
  681. package/src/components/react-flow/layout.ts +16 -0
  682. package/src/components/react-flow/types.ts +103 -0
  683. package/src/components/react-flow/useFlowGraph.ts +36 -0
  684. package/src/components/react-flow/useFlowGraphSync.ts +67 -0
  685. package/src/components/select.tsx +386 -0
  686. package/src/components/sonner.tsx +58 -0
  687. package/src/components/stepper.tsx +97 -0
  688. package/src/components/switch.tsx +46 -0
  689. package/src/components/table.tsx +577 -0
  690. package/src/components/tabs.tsx +81 -0
  691. package/src/components/textarea.tsx +67 -0
  692. package/src/condition-builder/index.ts +2 -0
  693. package/src/context-menu/index.ts +2 -0
  694. package/src/dropdown/SearchDropdown.tsx +145 -0
  695. package/src/dropdown/index.ts +2 -0
  696. package/src/editor.ts +1 -0
  697. package/src/feedback/index.ts +6 -0
  698. package/src/flow.ts +1 -0
  699. package/src/hooks/index.ts +3 -0
  700. package/src/hooks/useContextMenuActions.ts +69 -0
  701. package/src/hooks/useFeatureLayout.ts +44 -0
  702. package/src/hooks/useTableActions.ts +146 -0
  703. package/src/index.ts +27 -0
  704. package/src/integrations.tsx +11 -0
  705. package/src/itsm/index.ts +7 -0
  706. package/src/locales/ar.json +149 -0
  707. package/src/locales/en.json +149 -0
  708. package/src/primitives/index.ts +11 -0
  709. package/src/progress.tsx +87 -0
  710. package/src/select/index.ts +3 -0
  711. package/src/support/api.ts +1 -0
  712. package/src/support/types/file.types.ts +13 -0
  713. package/src/support/types/gallery.types.ts +22 -0
  714. package/src/support/types/governorates.types.ts +13 -0
  715. package/src/support/types/grade.types.ts +7 -0
  716. package/src/support/types/index.ts +14 -0
  717. package/src/support/types/metadata.types.ts +93 -0
  718. package/src/support/types/table.types.ts +45 -0
  719. package/src/support/types/viewCard.types.ts +100 -0
  720. package/src/support/utils/fileUtils.ts +1 -0
  721. package/src/support/utils.ts +3 -0
  722. package/src/table/index.ts +6 -0
  723. package/src/tasks.ts +3 -0
  724. package/src/tours/TourContext.tsx +142 -0
  725. package/src/tours/TourOverlay.tsx +281 -0
  726. package/src/tours.ts +2 -0
  727. package/src/types.ts +138 -0
  728. package/src/typography/index.ts +4 -0
  729. package/src/typography/typography.adapter.ts +131 -0
  730. package/src/typography/typography.constants.ts +700 -0
  731. package/src/typography/typography.types.ts +156 -0
  732. package/src/typography/useTypography.ts +211 -0
  733. package/src/ui/accordion.tsx +66 -0
  734. package/src/ui/avatar.tsx +106 -0
  735. package/src/ui/badge.tsx +58 -0
  736. package/src/ui/button.tsx +69 -0
  737. package/src/ui/card.tsx +97 -0
  738. package/src/ui/dialog.tsx +165 -0
  739. package/src/ui/dropdown-menu.tsx +262 -0
  740. package/src/ui/index.ts +15 -0
  741. package/src/ui/input.tsx +22 -0
  742. package/src/ui/popover.tsx +86 -0
  743. package/src/ui/select.tsx +193 -0
  744. package/src/ui/switch.tsx +32 -0
  745. package/src/ui/table.tsx +119 -0
  746. package/src/ui/tabs.tsx +89 -0
  747. package/src/ui/textarea.tsx +21 -0
  748. package/src/ui/tooltip.tsx +54 -0
  749. package/src/workspace/index.ts +2 -0
  750. package/styles.css +532 -0
  751. package/README.md +0 -3
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { exportToCSV, exportToExcel, exportToPrint, } from "../../support/utils/fileUtils.js";
3
+ import { Download, FileSpreadsheet, FileText, Printer } from "lucide-react";
4
+ import { toast } from "sonner";
5
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "../dropdown-menu.js";
6
+ export function FeatureLayoutExportButton({ data, columns, filename = "export", }) {
7
+ const getColumns = () => columns ||
8
+ (data.length > 0
9
+ ? Object.keys(data[0]).map((key) => ({
10
+ header: key.charAt(0).toUpperCase() +
11
+ key
12
+ .slice(1)
13
+ .replace(/([A-Z])/g, " $1")
14
+ .trim(),
15
+ accessor: key,
16
+ }))
17
+ : []);
18
+ const baseFilename = filename.replace(/\.(csv|xlsx)$/i, "");
19
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { render: _jsx("button", { "aria-label": "Export options", className: "w-8 h-8 rounded-md flex items-center justify-center transition-colors outline-none cursor-pointer border bg-dashboard-card dark:bg-dashboard-card/40 text-dashboard-muted-foreground hover:bg-dashboard-secondary hover:text-dashboard-foreground border-dashboard-border", children: _jsx(Download, { className: "w-3.5 h-3.5" }) }) }), _jsxs(DropdownMenuContent, { align: "end", className: "w-44 z-100 bg-dashboard-card border border-dashboard-border rounded-lg shadow-lg", children: [_jsxs(DropdownMenuItem, { className: "cursor-pointer text-[13px] font-medium focus:bg-dashboard-secondary focus:text-dashboard-foreground flex items-center gap-2.5 p-2 rounded-md", onClick: () => exportToCSV(data, getColumns(), `${baseFilename}.csv`), children: [_jsx(FileText, { className: "w-4 h-4 text-dashboard-muted-foreground" }), "Export to CSV"] }), _jsxs(DropdownMenuItem, { className: "cursor-pointer text-[13px] font-medium focus:bg-dashboard-secondary focus:text-dashboard-foreground flex items-center gap-2.5 p-2 rounded-md", onClick: () => void exportToExcel(data, getColumns(), `${baseFilename}.xlsx`).catch((error) => toast.error(error instanceof Error ? error.message : "Export failed")), children: [_jsx(FileSpreadsheet, { className: "w-4 h-4 text-green-500/80" }), "Export to Excel"] }), _jsxs(DropdownMenuItem, { className: "cursor-pointer text-[13px] font-medium focus:bg-dashboard-secondary focus:text-dashboard-foreground flex items-center gap-2.5 p-2 rounded-md", onClick: () => exportToPrint(data, getColumns(), baseFilename), children: [_jsx(Printer, { className: "w-4 h-4 text-blue-500/80" }), "Print / Save as PDF"] })] })] }));
20
+ }
21
+ //# sourceMappingURL=FeatureLayoutExportButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureLayoutExportButton.js","sourceRoot":"","sources":["../../../src/components/layout/FeatureLayoutExportButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,GACd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAQ1B,MAAM,UAAU,yBAAyB,CAAmB,EAC1D,IAAI,EACJ,OAAO,EACP,QAAQ,GAAG,QAAQ,GACe;IAClC,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,OAAO;QACP,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACjC,MAAM,EACJ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;oBAC3B,GAAG;yBACA,KAAK,CAAC,CAAC,CAAC;yBACR,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;yBAC1B,IAAI,EAAE;gBACX,QAAQ,EAAE,GAAc;aACzB,CAAC,CAAC;YACL,CAAC,CAAC,EAAE,CAAC,CAAC;IAEV,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAE5D,OAAO,CACL,MAAC,YAAY,eACX,KAAC,mBAAmB,IAClB,MAAM,EACJ,+BACa,gBAAgB,EAC3B,SAAS,EAAC,2QAA2Q,YAErR,KAAC,QAAQ,IAAC,SAAS,EAAC,aAAa,GAAG,GAC7B,GAEX,EACF,MAAC,mBAAmB,IAClB,KAAK,EAAC,KAAK,EACX,SAAS,EAAC,kFAAkF,aAE5F,MAAC,gBAAgB,IACf,SAAS,EAAC,8IAA8I,EACxJ,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,YAAY,MAAM,CAAC,aAErE,KAAC,QAAQ,IAAC,SAAS,EAAC,yCAAyC,GAAG,qBAE/C,EACnB,MAAC,gBAAgB,IACf,SAAS,EAAC,8IAA8I,EACxJ,OAAO,EAAE,GAAG,EAAE,CACZ,KAAK,aAAa,CAChB,IAAI,EACJ,UAAU,EAAE,EACZ,GAAG,YAAY,OAAO,CACvB,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CACzB,KAAK,CAAC,KAAK,CACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CACzD,CACF,aAGH,KAAC,eAAe,IAAC,SAAS,EAAC,2BAA2B,GAAG,uBAExC,EACnB,MAAC,gBAAgB,IACf,SAAS,EAAC,8IAA8I,EACxJ,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,YAAY,CAAC,aAE9D,KAAC,OAAO,IAAC,SAAS,EAAC,0BAA0B,GAAG,2BAE/B,IACC,IACT,CAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ import * as React from "react";
2
+ export interface TabItem {
3
+ id: string;
4
+ label: React.ReactNode;
5
+ count?: number;
6
+ icon?: React.ReactNode;
7
+ closable?: boolean;
8
+ onClose?: () => void;
9
+ disabled?: boolean;
10
+ [key: string]: any;
11
+ }
12
+ export interface FeatureLayoutTabsProps<T extends TabItem = TabItem> extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
13
+ tabs: T[];
14
+ activeTab: string;
15
+ onChange: (tabId: string) => void;
16
+ onTabsChange?: (tabs: T[]) => void;
17
+ onAdd?: () => void;
18
+ onClose?: (tabId: string) => void;
19
+ renderIcon?: (tab: T) => React.ReactNode;
20
+ renderLabel?: (tab: T) => React.ReactNode;
21
+ draggable?: boolean;
22
+ pinFirstTab?: boolean;
23
+ onReorder?: (fromIndex: number, toIndex: number) => void;
24
+ /**
25
+ * When true (default: true), automatically alerts the user before refreshing or navigating away
26
+ * if multiple tabs or closable/item tabs are open.
27
+ */
28
+ warnOnRefresh?: boolean;
29
+ /** Custom warning message for beforeunload */
30
+ warnOnRefreshMessage?: string;
31
+ }
32
+ /**
33
+ * Hook to alert the user before refreshing or leaving the page if tabs or unsaved changes exist
34
+ */
35
+ export declare function useWarnOnRefresh(shouldWarn: boolean, customMessage?: string): void;
36
+ export declare function FeatureLayoutTabs<T extends TabItem = TabItem>({ tabs, activeTab, onChange, onTabsChange, onAdd, onClose, renderIcon, renderLabel, draggable, pinFirstTab, onReorder, warnOnRefresh, warnOnRefreshMessage, className, ...props }: FeatureLayoutTabsProps<T>): React.JSX.Element;
@@ -0,0 +1,192 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../support/utils.js";
3
+ import { ChevronLeft, ChevronRight, Plus, X } from "lucide-react";
4
+ import * as React from "react";
5
+ import ThemedText from "../ThemedText.js";
6
+ /**
7
+ * Hook to alert the user before refreshing or leaving the page if tabs or unsaved changes exist
8
+ */
9
+ export function useWarnOnRefresh(shouldWarn, customMessage) {
10
+ React.useEffect(() => {
11
+ if (!shouldWarn)
12
+ return;
13
+ const message = customMessage ||
14
+ "You have open tabs. If you reload this page, all open tabs and unsaved changes will be lost.";
15
+ const handleBeforeUnload = (e) => {
16
+ e.preventDefault();
17
+ e.returnValue = message;
18
+ return message;
19
+ };
20
+ window.addEventListener("beforeunload", handleBeforeUnload);
21
+ return () => {
22
+ window.removeEventListener("beforeunload", handleBeforeUnload);
23
+ };
24
+ }, [shouldWarn, customMessage]);
25
+ }
26
+ export function FeatureLayoutTabs({ tabs, activeTab, onChange, onTabsChange, onAdd, onClose, renderIcon, renderLabel, draggable = true, pinFirstTab = true, onReorder, warnOnRefresh = true, warnOnRefreshMessage, className, ...props }) {
27
+ const scrollContainerRef = React.useRef(null);
28
+ const contentRef = React.useRef(null);
29
+ const [canScrollLeft, setCanScrollLeft] = React.useState(false);
30
+ const [canScrollRight, setCanScrollRight] = React.useState(false);
31
+ const [isOverflowing, setIsOverflowing] = React.useState(false);
32
+ const [draggedIndex, setDraggedIndex] = React.useState(null);
33
+ const [displayTabs, setDisplayTabs] = React.useState(tabs);
34
+ const hasOpenTabs = tabs.length > 1 ||
35
+ tabs.some((t, idx) => Boolean(t.closable) ||
36
+ (pinFirstTab && idx > 0) ||
37
+ t.type === "detail" ||
38
+ t.type === "create" ||
39
+ t.type === "edit");
40
+ useWarnOnRefresh(warnOnRefresh !== false && hasOpenTabs, warnOnRefreshMessage);
41
+ React.useEffect(() => {
42
+ setDisplayTabs(tabs);
43
+ }, [tabs]);
44
+ const checkScroll = React.useCallback(() => {
45
+ const el = scrollContainerRef.current;
46
+ if (!el)
47
+ return;
48
+ const { scrollLeft, scrollWidth, clientWidth } = el;
49
+ const maxScroll = scrollWidth - clientWidth;
50
+ const overflowing = maxScroll > 2;
51
+ setIsOverflowing(overflowing);
52
+ if (!overflowing) {
53
+ setCanScrollLeft(false);
54
+ setCanScrollRight(false);
55
+ return;
56
+ }
57
+ const isRtl = document.documentElement.dir === "rtl" ||
58
+ el.closest('[dir="rtl"]') !== null;
59
+ if (isRtl) {
60
+ const current = Math.abs(scrollLeft);
61
+ setCanScrollRight(current > 4);
62
+ setCanScrollLeft(current < maxScroll - 4);
63
+ }
64
+ else {
65
+ setCanScrollLeft(scrollLeft > 4);
66
+ setCanScrollRight(scrollLeft < maxScroll - 4);
67
+ }
68
+ }, []);
69
+ React.useEffect(() => {
70
+ const el = scrollContainerRef.current;
71
+ const contentEl = contentRef.current;
72
+ if (!el)
73
+ return;
74
+ checkScroll();
75
+ const raf = requestAnimationFrame(checkScroll);
76
+ const observer = new ResizeObserver(() => checkScroll());
77
+ observer.observe(el);
78
+ if (contentEl)
79
+ observer.observe(contentEl);
80
+ return () => {
81
+ cancelAnimationFrame(raf);
82
+ observer.disconnect();
83
+ };
84
+ }, [tabs, checkScroll]);
85
+ React.useEffect(() => {
86
+ const el = scrollContainerRef.current;
87
+ if (!el)
88
+ return;
89
+ const onWheel = (e) => {
90
+ if (el.scrollWidth > el.clientWidth) {
91
+ const delta = e.deltaX !== 0 ? e.deltaX : e.deltaY;
92
+ if (delta !== 0) {
93
+ e.preventDefault();
94
+ el.scrollLeft += delta;
95
+ checkScroll();
96
+ }
97
+ }
98
+ };
99
+ el.addEventListener("wheel", onWheel, { passive: false });
100
+ return () => el.removeEventListener("wheel", onWheel);
101
+ }, [checkScroll]);
102
+ // Auto-scroll active tab into view when activeTab changes
103
+ React.useEffect(() => {
104
+ const el = scrollContainerRef.current;
105
+ if (!el)
106
+ return;
107
+ const activeBtn = el.querySelector(`[data-tab-id="${activeTab}"]`);
108
+ if (activeBtn) {
109
+ activeBtn.scrollIntoView({
110
+ behavior: "smooth",
111
+ block: "nearest",
112
+ inline: "nearest",
113
+ });
114
+ setTimeout(checkScroll, 350);
115
+ }
116
+ }, [activeTab, checkScroll]);
117
+ const scrollByAmount = (direction) => {
118
+ const el = scrollContainerRef.current;
119
+ if (!el)
120
+ return;
121
+ const punch = 200;
122
+ const delta = direction === "left" ? -punch : punch;
123
+ el.scrollBy({ left: delta, behavior: "smooth" });
124
+ setTimeout(checkScroll, 300);
125
+ };
126
+ const handleDragStart = (e, index) => {
127
+ if (!draggable || (pinFirstTab && index === 0)) {
128
+ e.preventDefault();
129
+ return;
130
+ }
131
+ setDraggedIndex(index);
132
+ e.dataTransfer.setData("text/plain", String(index));
133
+ e.dataTransfer.effectAllowed = "move";
134
+ };
135
+ const handleDragOver = (e, index) => {
136
+ if (!draggable)
137
+ return;
138
+ e.preventDefault();
139
+ if (draggedIndex === null ||
140
+ draggedIndex === index ||
141
+ (pinFirstTab && (index === 0 || draggedIndex === 0))) {
142
+ return;
143
+ }
144
+ const next = [...displayTabs];
145
+ const [moved] = next.splice(draggedIndex, 1);
146
+ next.splice(index, 0, moved);
147
+ setDisplayTabs(next);
148
+ setDraggedIndex(index);
149
+ onTabsChange?.(next);
150
+ onReorder?.(draggedIndex, index);
151
+ };
152
+ const handleDragEnd = () => {
153
+ setDraggedIndex(null);
154
+ };
155
+ return (_jsxs("div", { className: cn("flex-1 min-w-0 flex items-center gap-1.5 select-none", className), ...props, children: [isOverflowing && (_jsx("button", { type: "button", onClick: () => scrollByAmount("left"), disabled: !canScrollLeft, "aria-label": "Scroll tabs left", className: cn("w-7 h-7 rounded-full flex items-center justify-center shrink-0 bg-dashboard-card border border-dashboard-border text-dashboard-muted-foreground shadow-xs transition-all z-10", canScrollLeft
156
+ ? "hover:bg-dashboard-secondary hover:text-dashboard-foreground cursor-pointer"
157
+ : "opacity-30 cursor-not-allowed pointer-events-none"), children: _jsx(ChevronLeft, { className: "w-3.5 h-3.5" }) })), _jsxs("div", { className: "relative flex-1 min-w-0 flex items-center", children: [canScrollLeft && (_jsx("div", { className: "absolute left-0 top-0 bottom-0 w-6 bg-gradient-to-r from-dashboard-card to-transparent pointer-events-none rounded-l-md z-1" })), _jsx("div", { ref: scrollContainerRef, onScroll: checkScroll, className: "min-w-0 flex items-center overflow-x-auto hide-scrollbar scroll-smooth", children: _jsxs("div", { ref: contentRef, className: "flex items-center gap-1 shrink-0", children: [displayTabs.map((tab, index) => {
158
+ const isActive = activeTab === tab.id;
159
+ const isDraggable = draggable && (!pinFirstTab || index !== 0);
160
+ const isClosable = tab.closable ??
161
+ (onClose !== undefined &&
162
+ (!pinFirstTab || index !== 0));
163
+ return (_jsxs("div", { "data-tab-id": tab.id, role: "tab", "aria-selected": isActive, tabIndex: 0, onClick: () => onChange(tab.id), onKeyDown: (e) => {
164
+ if (e.key === "Enter" ||
165
+ e.key === " ") {
166
+ e.preventDefault();
167
+ onChange(tab.id);
168
+ }
169
+ }, draggable: isDraggable, onDragStart: (e) => handleDragStart(e, index), onDragOver: (e) => handleDragOver(e, index), onDragEnd: handleDragEnd, className: cn("px-3 py-1.5 text-xs rounded-md transition-all outline-none flex items-center gap-2 select-none whitespace-nowrap shrink-0", isDraggable
170
+ ? "cursor-grab active:cursor-grabbing"
171
+ : "cursor-pointer", isActive
172
+ ? "bg-dashboard-secondary text-dashboard-foreground font-semibold border border-dashboard-border shadow-2xs"
173
+ : "text-dashboard-muted-foreground hover:bg-dashboard-secondary/60 hover:text-dashboard-foreground border border-transparent", draggedIndex === index &&
174
+ "opacity-30 scale-95 border border-dashed border-dashboard-border", tab.disabled &&
175
+ "opacity-40 pointer-events-none cursor-not-allowed"), children: [renderIcon ? (_jsx("span", { className: "shrink-0 flex items-center", children: renderIcon(tab) })) : tab.icon ? (_jsx("span", { className: "shrink-0 flex items-center", children: tab.icon })) : null, _jsx(ThemedText, { as: "span", variant: "caption", color: isActive ? "primary" : undefined, children: renderLabel
176
+ ? renderLabel(tab)
177
+ : tab.label }), tab.count !== undefined && (_jsx("span", { className: cn("text-[10px] px-1.5 py-0.2 rounded-full font-semibold", isActive
178
+ ? "bg-dashboard-primary/20 text-dashboard-primary border border-dashboard-primary/30"
179
+ : "bg-dashboard-muted text-dashboard-muted-foreground"), children: tab.count })), isClosable && (_jsx("button", { type: "button", "aria-label": `Close ${typeof tab.label === "string" ? tab.label : "tab"}`, onClick: (e) => {
180
+ e.stopPropagation();
181
+ if (tab.onClose) {
182
+ tab.onClose();
183
+ }
184
+ else if (onClose) {
185
+ onClose(tab.id);
186
+ }
187
+ }, className: "hover:text-dashboard-foreground text-dashboard-muted-foreground p-0.5 rounded-full hover:bg-dashboard-secondary transition-colors cursor-pointer", children: _jsx(X, { className: "w-3 h-3" }) }))] }, tab.id));
188
+ }), onAdd && (_jsx("button", { type: "button", onClick: onAdd, "aria-label": "Add tab", className: "w-7 h-7 ml-1 rounded-md flex items-center justify-center text-dashboard-muted-foreground hover:bg-dashboard-secondary hover:text-dashboard-foreground transition-colors shrink-0 cursor-pointer", children: _jsx(Plus, { className: "w-3.5 h-3.5" }) }))] }) }), canScrollRight && (_jsx("div", { className: "absolute right-0 top-0 bottom-0 w-6 bg-gradient-to-l from-dashboard-card to-transparent pointer-events-none rounded-r-md z-1" }))] }), isOverflowing && (_jsx("button", { type: "button", onClick: () => scrollByAmount("right"), disabled: !canScrollRight, "aria-label": "Scroll tabs right", className: cn("w-7 h-7 rounded-full flex items-center justify-center shrink-0 bg-dashboard-card border border-dashboard-border text-dashboard-muted-foreground shadow-xs transition-all z-10", canScrollRight
189
+ ? "hover:bg-dashboard-secondary hover:text-dashboard-foreground cursor-pointer"
190
+ : "opacity-30 cursor-not-allowed pointer-events-none"), children: _jsx(ChevronRight, { className: "w-3.5 h-3.5" }) }))] }));
191
+ }
192
+ //# sourceMappingURL=FeatureLayoutTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureLayoutTabs.js","sourceRoot":"","sources":["../../../src/components/layout/FeatureLayoutTabs.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import type { FeatureLayoutKanbanProps } from "./types";
3
+ export declare function FeatureLayoutKanban<TItem extends {
4
+ id: string | number;
5
+ } = any>({ items, columns, getItemColumnId, onItemMove, onItemStatusChange, renderCard, renderColumnHeader, onCardClick, onAddCard, allowColumnCollapse, allowCollapseAll, showItemCount, allowDragAndDrop, collapsedColumns: controlledCollapsedColumns, onCollapsedColumnsChange, isLoading, emptyPlaceholder, toolbarExtra, footer, className, columnsContainerClassName, columnClassName, columnWidth, }: FeatureLayoutKanbanProps<TItem>): React.JSX.Element;
6
+ export default FeatureLayoutKanban;
@@ -0,0 +1,195 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../../support/utils.js";
3
+ import { DndContext, DragOverlay, KeyboardSensor, PointerSensor, closestCorners, useSensor, useSensors, } from "@dnd-kit/core";
4
+ import { arrayMove, sortableKeyboardCoordinates } from "@dnd-kit/sortable";
5
+ import { useCallback, useEffect, useMemo, useState } from "react";
6
+ import { KanbanColumn } from "./KanbanColumn.js";
7
+ import { KanbanToolbar } from "./KanbanToolbar.js";
8
+ export function FeatureLayoutKanban({ items, columns, getItemColumnId = (item) => item?.status || "", onItemMove, onItemStatusChange, renderCard, renderColumnHeader, onCardClick, onAddCard, allowColumnCollapse = true, allowCollapseAll = true, showItemCount = true, allowDragAndDrop = true, collapsedColumns: controlledCollapsedColumns, onCollapsedColumnsChange, isLoading = false, emptyPlaceholder, toolbarExtra, footer, className, columnsContainerClassName, columnClassName, columnWidth = 320, }) {
9
+ // Local copy of items for fluid optimistic updates during drag & drop
10
+ const [localItems, setLocalItems] = useState(items);
11
+ // Keep local items synchronized with incoming items prop
12
+ useEffect(() => {
13
+ setLocalItems(items);
14
+ }, [items]);
15
+ // Local state for collapsed columns if uncontrolled
16
+ const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState([]);
17
+ const collapsedColumns = controlledCollapsedColumns !== undefined
18
+ ? controlledCollapsedColumns
19
+ : uncontrolledCollapsed;
20
+ const setCollapsedColumns = useCallback((updater) => {
21
+ const next = updater(collapsedColumns);
22
+ if (onCollapsedColumnsChange) {
23
+ onCollapsedColumnsChange(next);
24
+ }
25
+ if (controlledCollapsedColumns === undefined) {
26
+ setUncontrolledCollapsed(next);
27
+ }
28
+ }, [collapsedColumns, controlledCollapsedColumns, onCollapsedColumnsChange]);
29
+ // Column collapse toggle
30
+ const handleToggleColumn = useCallback((columnId) => {
31
+ setCollapsedColumns((prev) => prev.includes(columnId)
32
+ ? prev.filter((id) => id !== columnId)
33
+ : [...prev, columnId]);
34
+ }, [setCollapsedColumns]);
35
+ // Collapse All / Expand All toggle
36
+ const allCollapsed = useMemo(() => {
37
+ if (columns.length === 0)
38
+ return false;
39
+ return columns.every((col) => collapsedColumns.includes(col.id));
40
+ }, [columns, collapsedColumns]);
41
+ const handleToggleCollapseAll = useCallback(() => {
42
+ if (allCollapsed) {
43
+ setCollapsedColumns(() => []);
44
+ }
45
+ else {
46
+ setCollapsedColumns(() => columns.map((col) => col.id));
47
+ }
48
+ }, [allCollapsed, columns, setCollapsedColumns]);
49
+ // Group items by column ID
50
+ const groupedItems = useMemo(() => {
51
+ const groups = {};
52
+ for (const col of columns) {
53
+ groups[col.id] = [];
54
+ }
55
+ for (const item of localItems) {
56
+ const colId = getItemColumnId(item);
57
+ if (groups[colId]) {
58
+ groups[colId].push(item);
59
+ }
60
+ else {
61
+ // Try case-insensitive lookup in defined columns
62
+ const matchedCol = columns.find((c) => c.id.toLowerCase() === (colId || "").toLowerCase());
63
+ if (matchedCol && groups[matchedCol.id]) {
64
+ groups[matchedCol.id].push(item);
65
+ }
66
+ else {
67
+ // If column does not exist in definitions, collect in fallback
68
+ if (!groups["__other__"])
69
+ groups["__other__"] = [];
70
+ groups["__other__"].push(item);
71
+ }
72
+ }
73
+ }
74
+ return groups;
75
+ }, [columns, localItems, getItemColumnId]);
76
+ // Currently dragged item for DragOverlay preview
77
+ const [activeItem, setActiveItem] = useState(null);
78
+ const [activeSourceColumnId, setActiveSourceColumnId] = useState(null);
79
+ // Drag sensors with distance activation so buttons/clicks inside cards work effortlessly
80
+ const sensors = useSensors(useSensor(PointerSensor, {
81
+ activationConstraint: {
82
+ distance: 5,
83
+ },
84
+ }), useSensor(KeyboardSensor, {
85
+ coordinateGetter: sortableKeyboardCoordinates,
86
+ }));
87
+ const handleDragStart = useCallback((event) => {
88
+ if (!allowDragAndDrop)
89
+ return;
90
+ const { active } = event;
91
+ const found = localItems.find((item) => item.id.toString() === active.id.toString());
92
+ if (found) {
93
+ setActiveItem(found);
94
+ setActiveSourceColumnId(getItemColumnId(found));
95
+ }
96
+ }, [allowDragAndDrop, localItems, getItemColumnId]);
97
+ const handleDragOver = useCallback((event) => {
98
+ if (!allowDragAndDrop)
99
+ return;
100
+ const { active, over } = event;
101
+ if (!over)
102
+ return;
103
+ const activeId = active.id.toString();
104
+ const overId = over.id.toString();
105
+ if (activeId === overId)
106
+ return;
107
+ const isActiveItem = active.data.current?.type === "Item";
108
+ const isOverItem = over.data.current?.type === "Item";
109
+ const isOverColumn = over.data.current?.type === "Column";
110
+ if (!isActiveItem)
111
+ return;
112
+ // Scenario 1: Dropping an Item over another Item
113
+ if (isActiveItem && isOverItem) {
114
+ setLocalItems((prevItems) => {
115
+ const activeIndex = prevItems.findIndex((i) => i.id.toString() === activeId);
116
+ const overIndex = prevItems.findIndex((i) => i.id.toString() === overId);
117
+ if (activeIndex === -1 || overIndex === -1)
118
+ return prevItems;
119
+ const sourceCol = getItemColumnId(prevItems[activeIndex]);
120
+ const targetCol = getItemColumnId(prevItems[overIndex]);
121
+ if (sourceCol !== targetCol) {
122
+ const updated = [...prevItems];
123
+ // Assign target column ID to item
124
+ updated[activeIndex].status = targetCol;
125
+ return arrayMove(updated, activeIndex, overIndex);
126
+ }
127
+ return arrayMove(prevItems, activeIndex, overIndex);
128
+ });
129
+ }
130
+ // Scenario 2: Dropping an Item over an empty Column dropzone
131
+ if (isActiveItem && isOverColumn) {
132
+ const targetColumnId = over.data.current?.columnId || overId;
133
+ setLocalItems((prevItems) => {
134
+ const activeIndex = prevItems.findIndex((i) => i.id.toString() === activeId);
135
+ if (activeIndex === -1)
136
+ return prevItems;
137
+ const sourceCol = getItemColumnId(prevItems[activeIndex]);
138
+ if (sourceCol === targetColumnId)
139
+ return prevItems;
140
+ const updated = [...prevItems];
141
+ updated[activeIndex].status = targetColumnId;
142
+ return arrayMove(updated, activeIndex, activeIndex);
143
+ });
144
+ }
145
+ }, [allowDragAndDrop, getItemColumnId]);
146
+ const handleDragEnd = useCallback((event) => {
147
+ if (!allowDragAndDrop)
148
+ return;
149
+ const { active, over } = event;
150
+ if (activeItem) {
151
+ const finalItem = localItems.find((i) => i.id.toString() === activeItem.id.toString());
152
+ const newColId = finalItem ? getItemColumnId(finalItem) : null;
153
+ if (finalItem && newColId && activeSourceColumnId && newColId !== activeSourceColumnId) {
154
+ onItemStatusChange?.(finalItem.id, newColId, finalItem);
155
+ if (onItemMove) {
156
+ const targetItems = groupedItems[newColId] || [];
157
+ const newIdx = targetItems.findIndex((i) => i.id.toString() === finalItem.id.toString());
158
+ const sourceItems = groupedItems[activeSourceColumnId] || [];
159
+ const oldIdx = sourceItems.findIndex((i) => i.id.toString() === activeItem.id.toString());
160
+ onItemMove({
161
+ itemId: finalItem.id,
162
+ item: finalItem,
163
+ sourceColumnId: activeSourceColumnId,
164
+ targetColumnId: newColId,
165
+ oldIndex: oldIdx >= 0 ? oldIdx : 0,
166
+ newIndex: newIdx >= 0 ? newIdx : 0,
167
+ });
168
+ }
169
+ }
170
+ }
171
+ setActiveItem(null);
172
+ setActiveSourceColumnId(null);
173
+ }, [
174
+ allowDragAndDrop,
175
+ activeItem,
176
+ localItems,
177
+ activeSourceColumnId,
178
+ getItemColumnId,
179
+ onItemStatusChange,
180
+ onItemMove,
181
+ groupedItems,
182
+ ]);
183
+ if (isLoading) {
184
+ return (_jsxs("div", { className: "flex-1 flex flex-col h-full overflow-hidden p-6 animate-pulse", children: [_jsx("div", { className: "h-8 w-64 bg-dashboard-card rounded-md mb-4" }), _jsx("div", { className: "flex-1 flex gap-4 overflow-hidden", children: [1, 2, 3, 4].map((i) => (_jsxs("div", { className: "w-80 h-full rounded-xl bg-dashboard-card/40 border border-dashboard-border p-4 flex flex-col gap-3", children: [_jsx("div", { className: "h-6 w-32 bg-dashboard-secondary rounded" }), _jsx("div", { className: "h-24 w-full bg-dashboard-secondary/60 rounded-lg" }), _jsx("div", { className: "h-24 w-full bg-dashboard-secondary/60 rounded-lg" })] }, i))) })] }));
185
+ }
186
+ return (_jsxs("div", { className: cn("flex-1 flex flex-col h-full min-h-0 overflow-hidden bg-dashboard-background select-none", className), children: [_jsx(KanbanToolbar, { totalItems: localItems.length, columnsCount: columns.length, allCollapsed: allCollapsed, onToggleCollapseAll: handleToggleCollapseAll, allowCollapseAll: allowCollapseAll, toolbarExtra: toolbarExtra }), _jsxs(DndContext, { sensors: sensors, collisionDetection: closestCorners, onDragStart: handleDragStart, onDragOver: handleDragOver, onDragEnd: handleDragEnd, children: [_jsx("div", { className: cn("flex-1 flex overflow-x-auto overflow-y-hidden p-4 md:p-6 gap-4 min-h-0 custom-scrollbar", columnsContainerClassName), children: columns.map((column) => {
187
+ const isColCollapsed = collapsedColumns.includes(column.id);
188
+ const colItems = groupedItems[column.id] || [];
189
+ return (_jsx(KanbanColumn, { column: column, items: colItems, isCollapsed: isColCollapsed, onToggleCollapse: handleToggleColumn, allowColumnCollapse: allowColumnCollapse, showItemCount: showItemCount, onAddCard: onAddCard, renderCard: renderCard, renderColumnHeader: renderColumnHeader, onCardClick: onCardClick, allowDragAndDrop: allowDragAndDrop, emptyPlaceholder: emptyPlaceholder, columnWidth: columnWidth, columnClassName: columnClassName }, column.id));
190
+ }) }), _jsx(DragOverlay, { dropAnimation: { duration: 180, easing: "ease" }, children: activeItem ? (_jsx("div", { className: "scale-105 rotate-1.5 shadow-2xl opacity-95 ring-1 ring-dashboard-primary/40 rounded-xl cursor-grabbing pointer-events-none", children: renderCard ? (renderCard(activeItem, true)) : (_jsx("div", { className: "bg-dashboard-card border border-dashboard-border rounded-xl p-3.5 shadow-xl", children: _jsx("span", { className: "text-xs font-semibold text-dashboard-foreground", children: activeItem.title ||
191
+ activeItem.name ||
192
+ `Item #${activeItem.id}` }) })) })) : null })] }), footer && (_jsx("div", { className: "shrink-0 px-4 py-2.5 border-t border-dashboard-border bg-dashboard-card/30", children: footer }))] }));
193
+ }
194
+ export default FeatureLayoutKanban;
195
+ //# sourceMappingURL=FeatureLayoutKanban.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureLayoutKanban.js","sourceRoot":"","sources":["../../../../src/components/layout/kanban/FeatureLayoutKanban.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ export interface SortableKanbanCardProps<TItem extends {
3
+ id: string | number;
4
+ } = any> {
5
+ item: TItem;
6
+ renderCard?: (item: TItem, isDragging?: boolean) => React.ReactNode;
7
+ onCardClick?: (item: TItem) => void;
8
+ allowDragAndDrop?: boolean;
9
+ }
10
+ export declare function SortableKanbanCard<TItem extends {
11
+ id: string | number;
12
+ } = any>({ item, renderCard, onCardClick, allowDragAndDrop, }: SortableKanbanCardProps<TItem>): React.JSX.Element;
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../../support/utils.js";
3
+ import { useSortable } from "@dnd-kit/sortable";
4
+ import { CSS } from "@dnd-kit/utilities";
5
+ import { GripVertical } from "lucide-react";
6
+ export function SortableKanbanCard({ item, renderCard, onCardClick, allowDragAndDrop = true, }) {
7
+ const { attributes, listeners, setNodeRef, transform, transition, isDragging, } = useSortable({
8
+ id: item.id.toString(),
9
+ data: {
10
+ type: "Item",
11
+ item,
12
+ },
13
+ disabled: !allowDragAndDrop,
14
+ });
15
+ const style = {
16
+ transform: CSS.Transform.toString(transform),
17
+ transition,
18
+ opacity: isDragging ? 0.35 : 1,
19
+ };
20
+ const handleClick = (e) => {
21
+ // Only trigger click if not dragged
22
+ if (!isDragging && onCardClick) {
23
+ onCardClick(item);
24
+ }
25
+ };
26
+ const handleKeyDown = (e) => {
27
+ if ((e.key === "Enter" || e.key === " ") && onCardClick) {
28
+ e.preventDefault();
29
+ onCardClick(item);
30
+ }
31
+ };
32
+ return (_jsx("div", { ref: setNodeRef, style: style, ...attributes, ...listeners, onClick: handleClick, onKeyDown: handleKeyDown, role: onCardClick ? "button" : undefined, tabIndex: onCardClick ? 0 : undefined, "aria-label": `Card ${item.id}`, className: cn("relative group select-none transition-shadow duration-200 outline-none", allowDragAndDrop
33
+ ? "cursor-grab active:cursor-grabbing"
34
+ : onCardClick
35
+ ? "cursor-pointer"
36
+ : "cursor-default", isDragging && "z-50"), children: renderCard ? (renderCard(item, isDragging)) : (_jsx(DefaultKanbanCardContent, { item: item, allowDragAndDrop: allowDragAndDrop })) }));
37
+ }
38
+ function DefaultKanbanCardContent({ item, allowDragAndDrop, }) {
39
+ const title = item.title || item.name || `Item #${item.id}`;
40
+ const subtitle = item.description || item.code || item.subtitle;
41
+ return (_jsxs("div", { className: "bg-dashboard-card hover:bg-dashboard-secondary border border-dashboard-border rounded-xl p-3.5 transition-all shadow-xs group-hover:border-dashboard-primary/40", children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsx("span", { className: "text-xs font-semibold text-dashboard-foreground line-clamp-2", children: title }), allowDragAndDrop && (_jsx(GripVertical, { className: "w-3.5 h-3.5 text-dashboard-muted-foreground/40 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity" }))] }), subtitle && (_jsx("p", { className: "mt-1 text-[11px] text-dashboard-muted-foreground line-clamp-2", children: subtitle })), _jsxs("div", { className: "mt-2.5 flex items-center justify-between text-[10px] text-dashboard-muted-foreground pt-2 border-t border-dashboard-border/60", children: [_jsxs("span", { className: "font-mono text-dashboard-muted-foreground/80", children: ["#", item.id] }), item.status && (_jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-md bg-dashboard-secondary text-dashboard-foreground font-medium", children: item.status }))] })] }));
42
+ }
43
+ //# sourceMappingURL=KanbanCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KanbanCard.js","sourceRoot":"","sources":["../../../../src/components/layout/kanban/KanbanCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ import type { KanbanColumnDef } from "./types";
3
+ export interface KanbanColumnProps<TItem extends {
4
+ id: string | number;
5
+ } = any> {
6
+ column: KanbanColumnDef<TItem>;
7
+ items: TItem[];
8
+ isCollapsed: boolean;
9
+ onToggleCollapse: (columnId: string) => void;
10
+ allowColumnCollapse?: boolean;
11
+ showItemCount?: boolean;
12
+ onAddCard?: (columnId: string) => void;
13
+ renderCard?: (item: TItem, isDragging?: boolean) => React.ReactNode;
14
+ renderColumnHeader?: (column: KanbanColumnDef<TItem>, isCollapsed: boolean, toggleCollapse: () => void, itemCount: number) => React.ReactNode;
15
+ onCardClick?: (item: TItem) => void;
16
+ allowDragAndDrop?: boolean;
17
+ emptyPlaceholder?: (column: KanbanColumnDef<TItem>) => React.ReactNode;
18
+ columnWidth?: number | string;
19
+ columnClassName?: string;
20
+ }
21
+ export declare function KanbanColumn<TItem extends {
22
+ id: string | number;
23
+ } = any>({ column, items, isCollapsed, onToggleCollapse, allowColumnCollapse, showItemCount, onAddCard, renderCard, renderColumnHeader, onCardClick, allowDragAndDrop, emptyPlaceholder, columnWidth, columnClassName, }: KanbanColumnProps<TItem>): React.JSX.Element;