@senitix/ui 0.4.0 → 0.4.1

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 (223) hide show
  1. package/dist/avatar-BT_SPwFW.cjs +18 -0
  2. package/dist/{avatar-C0aVNCG9.cjs.map → avatar-BT_SPwFW.cjs.map} +1 -1
  3. package/dist/avatar-C5-ZWIqT.js +305 -0
  4. package/dist/{avatar-CN6wcrqY.js.map → avatar-C5-ZWIqT.js.map} +1 -1
  5. package/dist/calendar-BF5drX5u.cjs +12 -0
  6. package/dist/{calendar-BUm7YrNf.cjs.map → calendar-BF5drX5u.cjs.map} +1 -1
  7. package/dist/calendar-CUxm1K7J.js +17 -0
  8. package/dist/{calendar-ChJkFXXr.js.map → calendar-CUxm1K7J.js.map} +1 -1
  9. package/dist/calendar-D3RWU0_G.cjs +7 -0
  10. package/dist/{calendar-SwL5isYC.cjs.map → calendar-D3RWU0_G.cjs.map} +1 -1
  11. package/dist/{calendar-BFWc4IB7.js → calendar-DgnhzEfp.js} +126 -112
  12. package/dist/{calendar-BFWc4IB7.js.map → calendar-DgnhzEfp.js.map} +1 -1
  13. package/dist/{card-tMkUxpmW.cjs → card-DISL3sPJ.cjs} +2 -2
  14. package/dist/{card-tMkUxpmW.cjs.map → card-DISL3sPJ.cjs.map} +1 -1
  15. package/dist/{card-K4fxyYwE.js → card-fId5vof_.js} +2 -2
  16. package/dist/{card-K4fxyYwE.js.map → card-fId5vof_.js.map} +1 -1
  17. package/dist/{checkbox-CpOq5hkT.js → checkbox-BY2zxQVv.js} +5 -5
  18. package/dist/{checkbox-CpOq5hkT.js.map → checkbox-BY2zxQVv.js.map} +1 -1
  19. package/dist/checkbox-CL6u7vL6.cjs +2 -0
  20. package/dist/{checkbox-D7-LQyCl.cjs.map → checkbox-CL6u7vL6.cjs.map} +1 -1
  21. package/dist/chevron-down-BiUlxZA-.js +14 -0
  22. package/dist/{chevron-down-DJ1_YIFu.js.map → chevron-down-BiUlxZA-.js.map} +1 -1
  23. package/dist/chevron-down-Ce0kqXiD.cjs +7 -0
  24. package/dist/{chevron-down-DHdXqOqK.cjs.map → chevron-down-Ce0kqXiD.cjs.map} +1 -1
  25. package/dist/chevron-right-BLyGmyaF.js +14 -0
  26. package/dist/{chevron-right-B3bovvh0.js.map → chevron-right-BLyGmyaF.js.map} +1 -1
  27. package/dist/chevron-right-Bxf8i4gi.cjs +7 -0
  28. package/dist/{chevron-right-Dvyd11q0.cjs.map → chevron-right-Bxf8i4gi.cjs.map} +1 -1
  29. package/dist/chevron-up-BmYZUtrk.js +12 -0
  30. package/dist/{chevron-up-CGtXOr51.js.map → chevron-up-BmYZUtrk.js.map} +1 -1
  31. package/dist/chevron-up-C3RClqXD.cjs +7 -0
  32. package/dist/{chevron-up-B9fuiZhc.cjs.map → chevron-up-C3RClqXD.cjs.map} +1 -1
  33. package/dist/components/charts/index.cjs.js +1 -1
  34. package/dist/components/charts/index.es.js +1 -1
  35. package/dist/components/data-display/index.cjs.js +1 -1
  36. package/dist/components/data-display/index.es.js +1 -1
  37. package/dist/components/dnd/index.cjs.js +1 -1
  38. package/dist/components/dnd/index.es.js +1 -1
  39. package/dist/components/feedback/index.cjs.js +1 -1
  40. package/dist/components/feedback/index.es.js +1 -1
  41. package/dist/components/forms/index.cjs.js +1 -1
  42. package/dist/components/forms/index.es.js +1 -1
  43. package/dist/components/layouts/index.cjs.js +1 -1
  44. package/dist/components/layouts/index.es.js +1 -1
  45. package/dist/components/navigation/index.cjs.js +1 -1
  46. package/dist/components/navigation/index.es.js +1 -1
  47. package/dist/components/ui/index.cjs.js +1 -1
  48. package/dist/components/ui/index.es.js +13 -13
  49. package/dist/{createLucideIcon-BbeNo6vq.js → createLucideIcon-BC8wu-bu.js} +25 -1
  50. package/dist/{createLucideIcon-BbeNo6vq.js.map → createLucideIcon-BC8wu-bu.js.map} +1 -1
  51. package/dist/createLucideIcon-Cv8nC2E9.cjs +22 -0
  52. package/dist/{createLucideIcon-i5GEhNMV.cjs.map → createLucideIcon-Cv8nC2E9.cjs.map} +1 -1
  53. package/dist/ellipsis-6eUne95u.js +16 -0
  54. package/dist/{ellipsis-CiKEaUNP.js.map → ellipsis-6eUne95u.js.map} +1 -1
  55. package/dist/ellipsis-DkM3GBF5.cjs +7 -0
  56. package/dist/{ellipsis-BW2gWki8.cjs.map → ellipsis-DkM3GBF5.cjs.map} +1 -1
  57. package/dist/file-Cp5UoYUZ.cjs +7 -0
  58. package/dist/{file-V_hhCUhr.cjs.map → file-Cp5UoYUZ.cjs.map} +1 -1
  59. package/dist/file-Cw_u_aJB.js +15 -0
  60. package/dist/{file-wzTXnWqz.js.map → file-Cw_u_aJB.js.map} +1 -1
  61. package/dist/filter-tags-DoRzXjuY.cjs +48 -0
  62. package/dist/{filter-tags-DjUaNXHR.cjs.map → filter-tags-DoRzXjuY.cjs.map} +1 -1
  63. package/dist/{filter-tags-i_I8qV1N.js → filter-tags-zEQmRhEU.js} +353 -299
  64. package/dist/{filter-tags-i_I8qV1N.js.map → filter-tags-zEQmRhEU.js.map} +1 -1
  65. package/dist/{full-calendar-7ac2FFU6.js → full-calendar-5Z4JSj8g.js} +1176 -1143
  66. package/dist/{full-calendar-7ac2FFU6.js.map → full-calendar-5Z4JSj8g.js.map} +1 -1
  67. package/dist/full-calendar-DjAvCfuE.cjs +23 -0
  68. package/dist/{full-calendar-Cpeh5xMP.cjs.map → full-calendar-DjAvCfuE.cjs.map} +1 -1
  69. package/dist/{global-search-h1rVbP2q.js → global-search-BbZfc-VL.js} +514 -486
  70. package/dist/global-search-BbZfc-VL.js.map +1 -0
  71. package/dist/global-search-Bd74_wPV.cjs +22 -0
  72. package/dist/global-search-Bd74_wPV.cjs.map +1 -0
  73. package/dist/hooks/index.cjs.js +1 -1
  74. package/dist/hooks/index.es.js +1 -1
  75. package/dist/index-D2U2F80P.cjs +2 -0
  76. package/dist/index-D2U2F80P.cjs.map +1 -0
  77. package/dist/index-DG0KV-sw.cjs +11 -0
  78. package/dist/{index-CzVK9Zyb.cjs.map → index-DG0KV-sw.cjs.map} +1 -1
  79. package/dist/{index-Co9o9StL.js → index-Dk_Et2WJ.js} +2 -2
  80. package/dist/{index-Co9o9StL.js.map → index-Dk_Et2WJ.js.map} +1 -1
  81. package/dist/{index-CwJPJKOE.js → index-DtaLkIY8.js} +1072 -573
  82. package/dist/index-DtaLkIY8.js.map +1 -0
  83. package/dist/index-XnFSmCuh.js +299 -0
  84. package/dist/{index-l828OqQN.js.map → index-XnFSmCuh.js.map} +1 -1
  85. package/dist/{index-lT9bLt9X.cjs → index-gVbM3K4f.cjs} +2 -2
  86. package/dist/{index-lT9bLt9X.cjs.map → index-gVbM3K4f.cjs.map} +1 -1
  87. package/dist/index.cjs.js +1 -1
  88. package/dist/index.es.js +23 -23
  89. package/dist/input-BgPy-4Qu.js +3658 -0
  90. package/dist/{input-D4AoiWxo.js.map → input-BgPy-4Qu.js.map} +1 -1
  91. package/dist/input-Cfr2WB-P.cjs +47 -0
  92. package/dist/{input-CZrckPLk.cjs.map → input-Cfr2WB-P.cjs.map} +1 -1
  93. package/dist/locale-provider-BojNdf1Y.cjs +2 -0
  94. package/dist/{locale-provider-DHMwuneF.cjs.map → locale-provider-BojNdf1Y.cjs.map} +1 -1
  95. package/dist/{locale-provider-DanG6RRG.js → locale-provider-DzBeb-X3.js} +62 -61
  96. package/dist/{locale-provider-DanG6RRG.js.map → locale-provider-DzBeb-X3.js.map} +1 -1
  97. package/dist/locale-selector-BD1IWk6X.cjs +22 -0
  98. package/dist/{locale-selector-Ppe0KTi-.cjs.map → locale-selector-BD1IWk6X.cjs.map} +1 -1
  99. package/dist/locale-selector-DLRSyVye.js +1772 -0
  100. package/dist/{locale-selector-xn2GpdP9.js.map → locale-selector-DLRSyVye.js.map} +1 -1
  101. package/dist/minus-C0uyaz70.cjs +7 -0
  102. package/dist/{minus-BXBFZSZs.cjs.map → minus-C0uyaz70.cjs.map} +1 -1
  103. package/dist/minus-CiwV65ZG.js +12 -0
  104. package/dist/{minus-DvlYtl96.js.map → minus-CiwV65ZG.js.map} +1 -1
  105. package/dist/{multi-container-C2UpSw5f.js → multi-container-BZia7HCU.js} +181 -164
  106. package/dist/{multi-container-C2UpSw5f.js.map → multi-container-BZia7HCU.js.map} +1 -1
  107. package/dist/multi-container-BdNbgtPZ.cjs +7 -0
  108. package/dist/{multi-container-DMKL8c9B.cjs.map → multi-container-BdNbgtPZ.cjs.map} +1 -1
  109. package/dist/pipeline-Dh052Dvj.cjs +27 -0
  110. package/dist/{pipeline-By5_8AFg.cjs.map → pipeline-Dh052Dvj.cjs.map} +1 -1
  111. package/dist/pipeline-DqWvleNy.js +1076 -0
  112. package/dist/{pipeline-D-QNSU0U.js.map → pipeline-DqWvleNy.js.map} +1 -1
  113. package/dist/plus-BsV82JJ5.cjs +7 -0
  114. package/dist/{plus-8wKRkVu-.cjs.map → plus-BsV82JJ5.cjs.map} +1 -1
  115. package/dist/plus-DxD6rofl.js +15 -0
  116. package/dist/{plus-CJD68KQD.js.map → plus-DxD6rofl.js.map} +1 -1
  117. package/dist/popover-BgLxmm1z.cjs +7 -0
  118. package/dist/{popover-ivh-plLc.cjs.map → popover-BgLxmm1z.cjs.map} +1 -1
  119. package/dist/{popover-4V4sGe1U.js → popover-PI9jbhnS.js} +85 -75
  120. package/dist/{popover-4V4sGe1U.js.map → popover-PI9jbhnS.js.map} +1 -1
  121. package/dist/progress-CTTt_CP3.js +260 -0
  122. package/dist/{progress-D5AsrWa6.js.map → progress-CTTt_CP3.js.map} +1 -1
  123. package/dist/progress-CTWb7X1Q.cjs +37 -0
  124. package/dist/{progress-CFnuLqnS.cjs.map → progress-CTWb7X1Q.cjs.map} +1 -1
  125. package/dist/providers/index.cjs.js +1 -1
  126. package/dist/providers/index.es.js +1 -1
  127. package/dist/{scroll-area-DQeqDp3Y.js → scroll-area-A3jGu-Ta.js} +302 -280
  128. package/dist/{scroll-area-DQeqDp3Y.js.map → scroll-area-A3jGu-Ta.js.map} +1 -1
  129. package/dist/scroll-area-DzDnWIYJ.cjs +12 -0
  130. package/dist/{scroll-area-DYOiJMXh.cjs.map → scroll-area-DzDnWIYJ.cjs.map} +1 -1
  131. package/dist/select-BJpZrtep.js +989 -0
  132. package/dist/{select-C1rNBi6c.js.map → select-BJpZrtep.js.map} +1 -1
  133. package/dist/select-Ii8HRuXa.cjs +2 -0
  134. package/dist/{select-m-Mqwxu3.cjs.map → select-Ii8HRuXa.cjs.map} +1 -1
  135. package/dist/separator-BzcDE0Ei.cjs +2 -0
  136. package/dist/{separator-DBUivkHq.cjs.map → separator-BzcDE0Ei.cjs.map} +1 -1
  137. package/dist/{separator-DsfoJx-2.js → separator-DyarVo1-.js} +66 -65
  138. package/dist/{separator-DsfoJx-2.js.map → separator-DyarVo1-.js.map} +1 -1
  139. package/dist/{sheet-BVWCpq7E.js → sheet-DPSdOoE6.js} +4 -4
  140. package/dist/{sheet-BVWCpq7E.js.map → sheet-DPSdOoE6.js.map} +1 -1
  141. package/dist/{sheet-mKiFLVnK.cjs → sheet-XtjvbEMq.cjs} +2 -2
  142. package/dist/{sheet-mKiFLVnK.cjs.map → sheet-XtjvbEMq.cjs.map} +1 -1
  143. package/dist/{skeleton-BmGbfJw3.js → skeleton-Bl6FAxHT.js} +2 -2
  144. package/dist/{skeleton-BmGbfJw3.js.map → skeleton-Bl6FAxHT.js.map} +1 -1
  145. package/dist/{skeleton-BSwwYaQU.cjs → skeleton-Cb6MWerF.cjs} +2 -2
  146. package/dist/{skeleton-BSwwYaQU.cjs.map → skeleton-Cb6MWerF.cjs.map} +1 -1
  147. package/dist/sortable.esm-5DsiICDg.cjs +6 -0
  148. package/dist/{sortable.esm-DcQYlXi3.cjs.map → sortable.esm-5DsiICDg.cjs.map} +1 -1
  149. package/dist/{sortable.esm-Blhf_jh1.js → sortable.esm-Cb8oRBzU.js} +42 -42
  150. package/dist/{sortable.esm-Blhf_jh1.js.map → sortable.esm-Cb8oRBzU.js.map} +1 -1
  151. package/dist/sparkline-chart-CeCDeMNk.cjs +102 -0
  152. package/dist/{sparkline-chart-ca3uTzVK.cjs.map → sparkline-chart-CeCDeMNk.cjs.map} +1 -1
  153. package/dist/{sparkline-chart-Da-ehDGv.js → sparkline-chart-DUS4CoW_.js} +7799 -9094
  154. package/dist/{sparkline-chart-Da-ehDGv.js.map → sparkline-chart-DUS4CoW_.js.map} +1 -1
  155. package/dist/styles.css +1 -0
  156. package/dist/trending-up-BBjz_E69.cjs +7 -0
  157. package/dist/{trending-up-D3Nfrhi3.cjs.map → trending-up-BBjz_E69.cjs.map} +1 -1
  158. package/dist/trending-up-BHFXgLWy.js +15 -0
  159. package/dist/{trending-up-DPwlYzQb.js.map → trending-up-BHFXgLWy.js.map} +1 -1
  160. package/dist/{use-formatters-l1_2c8z0.js → use-formatters-Bgj3JA4i.js} +731 -746
  161. package/dist/{use-formatters-l1_2c8z0.js.map → use-formatters-Bgj3JA4i.js.map} +1 -1
  162. package/dist/use-formatters-CObUgipW.cjs +2 -0
  163. package/dist/{use-formatters-d97RVcmg.cjs.map → use-formatters-CObUgipW.cjs.map} +1 -1
  164. package/dist/utils/index.cjs.js +1 -1
  165. package/dist/utils/index.es.js +1 -1
  166. package/dist/welcome-card-CNuEa6Ck.cjs +67 -0
  167. package/dist/{welcome-card-CPolYl1D.cjs.map → welcome-card-CNuEa6Ck.cjs.map} +1 -1
  168. package/dist/{welcome-card-CxMJZ8bv.js → welcome-card-Cp6t6G3j.js} +197 -119
  169. package/dist/{welcome-card-CxMJZ8bv.js.map → welcome-card-Cp6t6G3j.js.map} +1 -1
  170. package/package.json +14 -12
  171. package/dist/avatar-C0aVNCG9.cjs +0 -2
  172. package/dist/avatar-CN6wcrqY.js +0 -288
  173. package/dist/calendar-BUm7YrNf.cjs +0 -2
  174. package/dist/calendar-ChJkFXXr.js +0 -11
  175. package/dist/calendar-SwL5isYC.cjs +0 -2
  176. package/dist/checkbox-D7-LQyCl.cjs +0 -2
  177. package/dist/chevron-down-DHdXqOqK.cjs +0 -2
  178. package/dist/chevron-down-DJ1_YIFu.js +0 -8
  179. package/dist/chevron-right-B3bovvh0.js +0 -8
  180. package/dist/chevron-right-Dvyd11q0.cjs +0 -2
  181. package/dist/chevron-up-B9fuiZhc.cjs +0 -2
  182. package/dist/chevron-up-CGtXOr51.js +0 -6
  183. package/dist/createLucideIcon-i5GEhNMV.cjs +0 -2
  184. package/dist/ellipsis-BW2gWki8.cjs +0 -2
  185. package/dist/ellipsis-CiKEaUNP.js +0 -10
  186. package/dist/file-V_hhCUhr.cjs +0 -2
  187. package/dist/file-wzTXnWqz.js +0 -9
  188. package/dist/filter-tags-DjUaNXHR.cjs +0 -5
  189. package/dist/full-calendar-Cpeh5xMP.cjs +0 -8
  190. package/dist/global-search-UNXjoFlI.cjs +0 -2
  191. package/dist/global-search-UNXjoFlI.cjs.map +0 -1
  192. package/dist/global-search-h1rVbP2q.js.map +0 -1
  193. package/dist/index-CwJPJKOE.js.map +0 -1
  194. package/dist/index-CzVK9Zyb.cjs +0 -6
  195. package/dist/index-l828OqQN.js +0 -288
  196. package/dist/index-lGzB9daF.cjs +0 -2
  197. package/dist/index-lGzB9daF.cjs.map +0 -1
  198. package/dist/input-CZrckPLk.cjs +0 -42
  199. package/dist/input-D4AoiWxo.js +0 -3629
  200. package/dist/locale-provider-DHMwuneF.cjs +0 -2
  201. package/dist/locale-selector-Ppe0KTi-.cjs +0 -2
  202. package/dist/locale-selector-xn2GpdP9.js +0 -1745
  203. package/dist/minus-BXBFZSZs.cjs +0 -2
  204. package/dist/minus-DvlYtl96.js +0 -6
  205. package/dist/multi-container-DMKL8c9B.cjs +0 -2
  206. package/dist/pipeline-By5_8AFg.cjs +0 -2
  207. package/dist/pipeline-D-QNSU0U.js +0 -1036
  208. package/dist/plus-8wKRkVu-.cjs +0 -2
  209. package/dist/plus-CJD68KQD.js +0 -9
  210. package/dist/popover-ivh-plLc.cjs +0 -2
  211. package/dist/progress-CFnuLqnS.cjs +0 -7
  212. package/dist/progress-D5AsrWa6.js +0 -222
  213. package/dist/scroll-area-DYOiJMXh.cjs +0 -2
  214. package/dist/select-C1rNBi6c.js +0 -974
  215. package/dist/select-m-Mqwxu3.cjs +0 -2
  216. package/dist/separator-DBUivkHq.cjs +0 -2
  217. package/dist/sortable.esm-DcQYlXi3.cjs +0 -6
  218. package/dist/sparkline-chart-ca3uTzVK.cjs +0 -68
  219. package/dist/trending-up-D3Nfrhi3.cjs +0 -2
  220. package/dist/trending-up-DPwlYzQb.js +0 -9
  221. package/dist/ui.css +0 -1
  222. package/dist/use-formatters-d97RVcmg.cjs +0 -2
  223. package/dist/welcome-card-CPolYl1D.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"multi-container-C2UpSw5f.js","sources":["../node_modules/lucide-react/dist/esm/icons/folder.js","../src/components/dnd/sortable-item.tsx","../node_modules/@dnd-kit/modifiers/dist/modifiers.esm.js","../src/components/dnd/sortable-list.tsx","../src/components/dnd/kanban-board.tsx","../src/components/dnd/tree-view.tsx","../src/components/dnd/multi-container.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Folder = createLucideIcon(\"Folder\", [\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ]\n]);\n\nexport { Folder as default };\n//# sourceMappingURL=folder.js.map\n","import * as React from 'react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { cn } from '@/utils/cn'\n\nexport interface SortableItemProps {\n id: string | number\n children: React.ReactNode\n className?: string\n disabled?: boolean\n}\n\nexport function SortableItem({\n id,\n children,\n className,\n disabled = false,\n}: SortableItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id, disabled })\n\n const style: React.CSSProperties = React.useMemo(() => ({\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n }), [transform, transition, isDragging])\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n 'rounded-xl border bg-card text-card-foreground p-3 shadow-sm touch-none select-none',\n isDragging && 'z-50 ring-2 ring-primary/30',\n disabled && 'opacity-50 cursor-not-allowed',\n !disabled && !isDragging && 'cursor-grab hover:shadow-md hover:border-primary/30',\n !disabled && isDragging && 'cursor-grabbing',\n className\n )}\n {...attributes}\n {...listeners}\n >\n <div className=\"min-w-0\">{children}</div>\n </div>\n )\n}\n","import { getEventCoordinates } from '@dnd-kit/utilities';\n\nfunction createSnapModifier(gridSize) {\n return _ref => {\n let {\n transform\n } = _ref;\n return { ...transform,\n x: Math.ceil(transform.x / gridSize) * gridSize,\n y: Math.ceil(transform.y / gridSize) * gridSize\n };\n };\n}\n\nconst restrictToHorizontalAxis = _ref => {\n let {\n transform\n } = _ref;\n return { ...transform,\n y: 0\n };\n};\n\nfunction restrictToBoundingRect(transform, rect, boundingRect) {\n const value = { ...transform\n };\n\n if (rect.top + transform.y <= boundingRect.top) {\n value.y = boundingRect.top - rect.top;\n } else if (rect.bottom + transform.y >= boundingRect.top + boundingRect.height) {\n value.y = boundingRect.top + boundingRect.height - rect.bottom;\n }\n\n if (rect.left + transform.x <= boundingRect.left) {\n value.x = boundingRect.left - rect.left;\n } else if (rect.right + transform.x >= boundingRect.left + boundingRect.width) {\n value.x = boundingRect.left + boundingRect.width - rect.right;\n }\n\n return value;\n}\n\nconst restrictToParentElement = _ref => {\n let {\n containerNodeRect,\n draggingNodeRect,\n transform\n } = _ref;\n\n if (!draggingNodeRect || !containerNodeRect) {\n return transform;\n }\n\n return restrictToBoundingRect(transform, draggingNodeRect, containerNodeRect);\n};\n\nconst restrictToFirstScrollableAncestor = _ref => {\n let {\n draggingNodeRect,\n transform,\n scrollableAncestorRects\n } = _ref;\n const firstScrollableAncestorRect = scrollableAncestorRects[0];\n\n if (!draggingNodeRect || !firstScrollableAncestorRect) {\n return transform;\n }\n\n return restrictToBoundingRect(transform, draggingNodeRect, firstScrollableAncestorRect);\n};\n\nconst restrictToVerticalAxis = _ref => {\n let {\n transform\n } = _ref;\n return { ...transform,\n x: 0\n };\n};\n\nconst restrictToWindowEdges = _ref => {\n let {\n transform,\n draggingNodeRect,\n windowRect\n } = _ref;\n\n if (!draggingNodeRect || !windowRect) {\n return transform;\n }\n\n return restrictToBoundingRect(transform, draggingNodeRect, windowRect);\n};\n\nconst snapCenterToCursor = _ref => {\n let {\n activatorEvent,\n draggingNodeRect,\n transform\n } = _ref;\n\n if (draggingNodeRect && activatorEvent) {\n const activatorCoordinates = getEventCoordinates(activatorEvent);\n\n if (!activatorCoordinates) {\n return transform;\n }\n\n const offsetX = activatorCoordinates.x - draggingNodeRect.left;\n const offsetY = activatorCoordinates.y - draggingNodeRect.top;\n return { ...transform,\n x: transform.x + offsetX - draggingNodeRect.width / 2,\n y: transform.y + offsetY - draggingNodeRect.height / 2\n };\n }\n\n return transform;\n};\n\nexport { createSnapModifier, restrictToFirstScrollableAncestor, restrictToHorizontalAxis, restrictToParentElement, restrictToVerticalAxis, restrictToWindowEdges, snapCenterToCursor };\n//# sourceMappingURL=modifiers.esm.js.map\n","import * as React from 'react'\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragStartEvent,\n DragOverlay,\n UniqueIdentifier,\n defaultDropAnimationSideEffects,\n DropAnimation,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n horizontalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { snapCenterToCursor, restrictToWindowEdges } from '@dnd-kit/modifiers'\nimport { cn } from '@/utils/cn'\nimport { SortableItem } from './sortable-item'\n\nexport interface SortableListItem {\n id: string | number\n [key: string]: unknown\n}\n\nexport interface SortableListProps<T extends SortableListItem> {\n items: T[]\n onReorder: (items: T[]) => void\n renderItem: (item: T) => React.ReactNode\n renderOverlay?: (item: T) => React.ReactNode\n direction?: 'vertical' | 'horizontal'\n className?: string\n itemClassName?: string\n disabled?: boolean\n gap?: 'sm' | 'md' | 'lg'\n}\n\nconst gapClasses = {\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-4',\n}\n\nconst dropAnimationConfig: DropAnimation = {\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0.5',\n },\n },\n }),\n}\n\nexport function SortableList<T extends SortableListItem>({\n items,\n onReorder,\n renderItem,\n renderOverlay,\n direction = 'vertical',\n className,\n itemClassName,\n disabled = false,\n gap = 'md',\n}: SortableListProps<T>) {\n const [activeId, setActiveId] = React.useState<UniqueIdentifier | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const handleDragStart = React.useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id)\n }, [])\n\n const handleDragEnd = React.useCallback((event: DragEndEvent) => {\n const { active, over } = event\n\n if (over && active.id !== over.id) {\n const oldIndex = items.findIndex((item) => item.id === active.id)\n const newIndex = items.findIndex((item) => item.id === over.id)\n if (oldIndex !== -1 && newIndex !== -1) {\n onReorder(arrayMove(items, oldIndex, newIndex))\n }\n }\n\n setActiveId(null)\n }, [items, onReorder])\n\n const handleDragCancel = React.useCallback(() => {\n setActiveId(null)\n }, [])\n\n const activeItem = React.useMemo(\n () => items.find((item) => item.id === activeId),\n [activeId, items]\n )\n\n const itemIds = React.useMemo(() => items.map((item) => item.id), [items])\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <SortableContext\n items={itemIds}\n strategy={direction === 'vertical' ? verticalListSortingStrategy : horizontalListSortingStrategy}\n >\n <div\n className={cn(\n 'flex',\n direction === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n gapClasses[gap],\n className\n )}\n >\n {items.map((item) => (\n <SortableItem\n key={item.id}\n id={item.id}\n className={itemClassName}\n disabled={disabled}\n >\n {renderItem(item)}\n </SortableItem>\n ))}\n </div>\n </SortableContext>\n\n <DragOverlay dropAnimation={dropAnimationConfig} modifiers={[snapCenterToCursor, restrictToWindowEdges]}>\n {activeItem ? (\n <div className=\"rounded-xl border bg-card text-card-foreground p-3 shadow-2xl ring-2 ring-primary/30 cursor-grabbing\">\n {renderOverlay ? renderOverlay(activeItem) : renderItem(activeItem)}\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n )\n}\n","import * as React from 'react'\nimport {\n DndContext,\n DragEndEvent,\n DragOverEvent,\n DragOverlay,\n DragStartEvent,\n KeyboardSensor,\n PointerSensor,\n UniqueIdentifier,\n useSensor,\n useSensors,\n useDroppable,\n pointerWithin,\n rectIntersection,\n CollisionDetection,\n defaultDropAnimationSideEffects,\n DropAnimation,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { snapCenterToCursor, restrictToWindowEdges } from '@dnd-kit/modifiers'\nimport { cn } from '@/utils/cn'\n\nexport interface KanbanItem {\n id: string | number\n columnId: string | number\n [key: string]: unknown\n}\n\nexport interface KanbanColumn {\n id: string | number\n title: string\n}\n\nexport interface KanbanBoardProps<T extends KanbanItem> {\n columns: KanbanColumn[]\n items: T[]\n onItemMove: (itemId: UniqueIdentifier, fromColumnId: UniqueIdentifier, toColumnId: UniqueIdentifier, newIndex: number) => void\n onReorder?: (columnId: UniqueIdentifier, items: T[]) => void\n renderItem: (item: T) => React.ReactNode\n renderColumnHeader?: (column: KanbanColumn) => React.ReactNode\n className?: string\n columnClassName?: string\n itemClassName?: string\n}\n\ninterface SortableKanbanItemProps {\n id: string | number\n children: React.ReactNode\n className?: string\n}\n\nconst SortableKanbanItem = React.memo(function SortableKanbanItem({\n id,\n children,\n className\n}: SortableKanbanItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id })\n\n const style: React.CSSProperties = React.useMemo(() => ({\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n }), [transform, transition, isDragging])\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n 'rounded-xl border bg-card text-card-foreground p-3 shadow-sm touch-none select-none',\n isDragging && 'ring-2 ring-primary/20',\n !isDragging && 'cursor-grab hover:shadow-md hover:border-primary/30',\n isDragging && 'cursor-grabbing',\n className\n )}\n {...attributes}\n {...listeners}\n >\n <div className=\"min-w-0\">{children}</div>\n </div>\n )\n})\n\ninterface DroppableColumnProps<T extends KanbanItem> {\n column: KanbanColumn\n items: T[]\n renderItem: (item: T) => React.ReactNode\n renderColumnHeader?: (column: KanbanColumn) => React.ReactNode\n columnClassName?: string\n itemClassName?: string\n}\n\nfunction DroppableColumn<T extends KanbanItem>({\n column,\n items,\n renderItem,\n renderColumnHeader,\n columnClassName,\n itemClassName,\n}: DroppableColumnProps<T>) {\n const { setNodeRef, isOver } = useDroppable({\n id: `column-${column.id}`,\n data: {\n type: 'column',\n columnId: column.id,\n },\n })\n\n return (\n <div\n ref={setNodeRef}\n className={cn(\n 'flex flex-col min-w-[280px] w-[280px] bg-muted/30 border border-border/50 rounded-xl p-3 transition-colors duration-200',\n isOver && 'ring-2 ring-primary/30 bg-primary/5',\n columnClassName\n )}\n >\n <div className=\"flex items-center justify-between mb-3 px-1\">\n {renderColumnHeader ? (\n renderColumnHeader(column)\n ) : (\n <h3 className=\"font-semibold text-sm text-foreground\">{column.title}</h3>\n )}\n <span className=\"text-xs font-medium text-muted-foreground bg-background border px-2 py-0.5 rounded-full shadow-sm\">\n {items.length}\n </span>\n </div>\n <SortableContext\n items={items.map((item) => item.id)}\n strategy={verticalListSortingStrategy}\n >\n <div className=\"flex flex-col gap-2 min-h-[100px] flex-1\">\n {items.map((item) => (\n <SortableKanbanItem\n key={item.id}\n id={item.id}\n className={itemClassName}\n >\n {renderItem(item)}\n </SortableKanbanItem>\n ))}\n </div>\n </SortableContext>\n </div>\n )\n}\n\n// Custom collision detection that prioritizes items over columns\nconst customCollisionDetection: CollisionDetection = (args) => {\n const pointerCollisions = pointerWithin(args)\n const itemCollisions = pointerCollisions.filter(\n (collision) => !String(collision.id).startsWith('column-')\n )\n\n if (itemCollisions.length > 0) {\n return itemCollisions\n }\n\n const rectCollisions = rectIntersection(args)\n return rectCollisions\n}\n\nconst dropAnimationConfig: DropAnimation = {\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0.5',\n },\n },\n }),\n}\n\nexport function KanbanBoard<T extends KanbanItem>({\n columns,\n items,\n onItemMove,\n onReorder,\n renderItem,\n renderColumnHeader,\n className,\n columnClassName,\n itemClassName,\n}: KanbanBoardProps<T>) {\n const [activeId, setActiveId] = React.useState<UniqueIdentifier | null>(null)\n const lastOverId = React.useRef<UniqueIdentifier | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const getItemsByColumn = React.useCallback(\n (columnId: UniqueIdentifier) => items.filter((item) => item.columnId === columnId),\n [items]\n )\n\n const findColumnByItemId = React.useCallback(\n (itemId: UniqueIdentifier): UniqueIdentifier | undefined => {\n const item = items.find((i) => i.id === itemId)\n return item?.columnId\n },\n [items]\n )\n\n const extractColumnId = React.useCallback(\n (overId: UniqueIdentifier): UniqueIdentifier | undefined => {\n const overIdStr = String(overId)\n if (overIdStr.startsWith('column-')) {\n return overIdStr.replace('column-', '')\n }\n return findColumnByItemId(overId)\n },\n [findColumnByItemId]\n )\n\n const handleDragStart = React.useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id)\n lastOverId.current = null\n }, [])\n\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\n const { active, over } = event\n if (!over) return\n\n const activeColumnId = findColumnByItemId(active.id)\n const overColumnId = extractColumnId(over.id)\n\n if (!activeColumnId || !overColumnId) return\n if (activeColumnId === overColumnId) return\n\n if (lastOverId.current === over.id) return\n lastOverId.current = over.id\n\n const overColumnItems = getItemsByColumn(overColumnId)\n const overIdStr = String(over.id)\n\n let newIndex: number\n if (overIdStr.startsWith('column-')) {\n newIndex = overColumnItems.length\n } else {\n const overIndex = overColumnItems.findIndex((item) => item.id === over.id)\n newIndex = overIndex >= 0 ? overIndex : overColumnItems.length\n }\n\n onItemMove(active.id, activeColumnId, overColumnId, newIndex)\n }, [findColumnByItemId, extractColumnId, getItemsByColumn, onItemMove])\n\n const handleDragEnd = React.useCallback((event: DragEndEvent) => {\n const { active, over } = event\n\n if (!over) {\n setActiveId(null)\n lastOverId.current = null\n return\n }\n\n const activeColumnId = findColumnByItemId(active.id)\n const overIdStr = String(over.id)\n\n let overColumnId: UniqueIdentifier | undefined\n if (overIdStr.startsWith('column-')) {\n overColumnId = overIdStr.replace('column-', '')\n } else {\n overColumnId = findColumnByItemId(over.id)\n }\n\n if (!activeColumnId) {\n setActiveId(null)\n lastOverId.current = null\n return\n }\n\n if (activeColumnId === overColumnId && active.id !== over.id && onReorder && !overIdStr.startsWith('column-')) {\n const columnItems = getItemsByColumn(activeColumnId)\n const oldIndex = columnItems.findIndex((item) => item.id === active.id)\n const newIndex = columnItems.findIndex((item) => item.id === over.id)\n if (oldIndex !== -1 && newIndex !== -1) {\n onReorder(activeColumnId, arrayMove(columnItems, oldIndex, newIndex) as T[])\n }\n }\n\n setActiveId(null)\n lastOverId.current = null\n }, [findColumnByItemId, getItemsByColumn, onReorder])\n\n const handleDragCancel = React.useCallback(() => {\n setActiveId(null)\n lastOverId.current = null\n }, [])\n\n const activeItem = React.useMemo(\n () => items.find((item) => item.id === activeId),\n [activeId, items]\n )\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={customCollisionDetection}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <div className={cn('flex gap-4 overflow-x-auto p-1', className)}>\n {columns.map((column) => {\n const columnItems = getItemsByColumn(column.id)\n return (\n <DroppableColumn\n key={column.id}\n column={column}\n items={columnItems}\n renderItem={renderItem}\n renderColumnHeader={renderColumnHeader}\n columnClassName={columnClassName}\n itemClassName={itemClassName}\n />\n )\n })}\n </div>\n\n <DragOverlay dropAnimation={dropAnimationConfig} modifiers={[snapCenterToCursor, restrictToWindowEdges]}>\n {activeItem ? (\n <div className=\"rounded-xl border bg-card text-card-foreground p-3 shadow-2xl ring-2 ring-primary/30 cursor-grabbing\">\n <div className=\"min-w-0\">{renderItem(activeItem)}</div>\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n )\n}\n","import * as React from 'react'\nimport {\n DndContext,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n KeyboardSensor,\n PointerSensor,\n UniqueIdentifier,\n closestCenter,\n useSensor,\n useSensors,\n defaultDropAnimationSideEffects,\n DropAnimation,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { snapCenterToCursor, restrictToWindowEdges } from '@dnd-kit/modifiers'\nimport { cn } from '@/utils/cn'\nimport { ChevronRight, Folder, File } from 'lucide-react'\n\nexport interface TreeNode {\n id: string | number\n label: string\n children?: TreeNode[]\n isFolder?: boolean\n [key: string]: unknown\n}\n\nexport interface TreeViewProps {\n data: TreeNode[]\n onMove?: (nodeId: UniqueIdentifier, newParentId: UniqueIdentifier | null, index: number) => void\n onToggle?: (nodeId: UniqueIdentifier, expanded: boolean) => void\n renderNode?: (node: TreeNode) => React.ReactNode\n className?: string\n defaultExpanded?: Set<UniqueIdentifier>\n}\n\ninterface TreeNodeItemProps {\n node: TreeNode\n depth: number\n expanded: boolean\n onToggle: () => void\n renderNode?: (node: TreeNode) => React.ReactNode\n}\n\nconst TreeNodeItem = React.memo(function TreeNodeItem({\n node,\n depth,\n expanded,\n onToggle,\n renderNode,\n}: TreeNodeItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: node.id })\n\n const style: React.CSSProperties = React.useMemo(() => ({\n transform: CSS.Transform.toString(transform),\n transition,\n paddingLeft: `${depth * 20 + 8}px`,\n opacity: isDragging ? 0.5 : 1,\n }), [transform, transition, depth, isDragging])\n\n const hasChildren = node.children && node.children.length > 0\n const isFolder = node.isFolder || hasChildren\n\n const handleToggleClick = React.useCallback((e: React.MouseEvent) => {\n e.stopPropagation()\n onToggle()\n }, [onToggle])\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n 'flex items-center gap-2 py-2 pr-3 rounded-lg touch-none select-none',\n isDragging && 'bg-muted ring-1 ring-primary/20',\n !isDragging && 'cursor-grab hover:bg-muted/60',\n isDragging && 'cursor-grabbing'\n )}\n {...attributes}\n {...listeners}\n >\n {isFolder ? (\n <button\n type=\"button\"\n onClick={handleToggleClick}\n className=\"flex-shrink-0 p-1 hover:bg-muted rounded-md transition-colors duration-200\"\n >\n <ChevronRight\n className={cn(\n 'h-4 w-4 text-muted-foreground transition-transform duration-200',\n expanded && 'rotate-90'\n )}\n />\n </button>\n ) : (\n <span className=\"w-6\" />\n )}\n\n <span className={cn(\n 'flex-shrink-0',\n isFolder ? 'text-primary/80' : 'text-muted-foreground'\n )}>\n {isFolder ? <Folder className=\"h-4 w-4\" /> : <File className=\"h-4 w-4\" />}\n </span>\n\n <span className=\"flex-1 truncate text-sm text-foreground\">\n {renderNode ? renderNode(node) : node.label}\n </span>\n </div>\n )\n})\n\nfunction flattenTree(\n nodes: TreeNode[],\n expandedIds: Set<UniqueIdentifier>,\n depth = 0\n): Array<{ node: TreeNode; depth: number }> {\n const result: Array<{ node: TreeNode; depth: number }> = []\n\n for (const node of nodes) {\n result.push({ node, depth })\n if (node.children && expandedIds.has(node.id)) {\n result.push(...flattenTree(node.children, expandedIds, depth + 1))\n }\n }\n\n return result\n}\n\nconst dropAnimationConfig: DropAnimation = {\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0.5',\n },\n },\n }),\n}\n\nexport function TreeView({\n data,\n onMove,\n onToggle,\n renderNode,\n className,\n defaultExpanded = new Set(),\n}: TreeViewProps) {\n const [expandedIds, setExpandedIds] = React.useState<Set<UniqueIdentifier>>(defaultExpanded)\n const [activeId, setActiveId] = React.useState<UniqueIdentifier | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const flattenedItems = React.useMemo(\n () => flattenTree(data, expandedIds),\n [data, expandedIds]\n )\n\n const handleToggle = React.useCallback((nodeId: UniqueIdentifier) => {\n setExpandedIds(prev => {\n const newExpanded = new Set(prev)\n const wasExpanded = newExpanded.has(nodeId)\n\n if (wasExpanded) {\n newExpanded.delete(nodeId)\n } else {\n newExpanded.add(nodeId)\n }\n\n onToggle?.(nodeId, !wasExpanded)\n return newExpanded\n })\n }, [onToggle])\n\n const handleDragStart = React.useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id)\n }, [])\n\n const handleDragEnd = React.useCallback((event: DragEndEvent) => {\n const { active, over } = event\n\n if (over && active.id !== over.id) {\n const activeIndex = flattenedItems.findIndex((item) => item.node.id === active.id)\n const overIndex = flattenedItems.findIndex((item) => item.node.id === over.id)\n\n if (activeIndex !== -1 && overIndex !== -1) {\n onMove?.(active.id, null, overIndex)\n }\n }\n\n setActiveId(null)\n }, [flattenedItems, onMove])\n\n const handleDragCancel = React.useCallback(() => {\n setActiveId(null)\n }, [])\n\n const activeNode = React.useMemo(\n () => flattenedItems.find((item) => item.node.id === activeId)?.node,\n [activeId, flattenedItems]\n )\n\n const itemIds = React.useMemo(\n () => flattenedItems.map((item) => item.node.id),\n [flattenedItems]\n )\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <SortableContext\n items={itemIds}\n strategy={verticalListSortingStrategy}\n >\n <div className={cn('border rounded-xl p-3 bg-card shadow-sm', className)}>\n {flattenedItems.map(({ node, depth }) => (\n <TreeNodeItem\n key={node.id}\n node={node}\n depth={depth}\n expanded={expandedIds.has(node.id)}\n onToggle={() => handleToggle(node.id)}\n renderNode={renderNode}\n />\n ))}\n </div>\n </SortableContext>\n\n <DragOverlay dropAnimation={dropAnimationConfig} modifiers={[snapCenterToCursor, restrictToWindowEdges]}>\n {activeNode ? (\n <div className=\"flex items-center gap-2 py-2 px-3 rounded-lg bg-card border shadow-2xl ring-2 ring-primary/30 cursor-grabbing\">\n <span className={cn(\n 'flex-shrink-0',\n activeNode.isFolder || (activeNode.children && activeNode.children.length > 0)\n ? 'text-primary/80'\n : 'text-muted-foreground'\n )}>\n {activeNode.isFolder || (activeNode.children && activeNode.children.length > 0) ? (\n <Folder className=\"h-4 w-4\" />\n ) : (\n <File className=\"h-4 w-4\" />\n )}\n </span>\n <span className=\"text-sm text-foreground\">\n {renderNode ? renderNode(activeNode) : activeNode.label}\n </span>\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n )\n}\n","import * as React from 'react'\nimport {\n DndContext,\n DragEndEvent,\n DragOverEvent,\n DragOverlay,\n DragStartEvent,\n KeyboardSensor,\n PointerSensor,\n UniqueIdentifier,\n closestCenter,\n useSensor,\n useSensors,\n useDroppable,\n defaultDropAnimationSideEffects,\n DropAnimation,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { snapCenterToCursor, restrictToWindowEdges } from '@dnd-kit/modifiers'\nimport { cn } from '@/utils/cn'\n\nexport interface ContainerItem {\n id: string | number\n containerId: string | number\n [key: string]: unknown\n}\n\nexport interface Container {\n id: string | number\n title: string\n}\n\nexport interface MultiContainerProps<T extends ContainerItem> {\n containers: Container[]\n items: T[]\n onItemMove: (\n itemId: UniqueIdentifier,\n fromContainerId: UniqueIdentifier,\n toContainerId: UniqueIdentifier,\n newIndex: number\n ) => void\n onReorder?: (containerId: UniqueIdentifier, items: T[]) => void\n renderItem: (item: T) => React.ReactNode\n renderContainerHeader?: (container: Container, itemCount: number) => React.ReactNode\n renderEmptyContainer?: (container: Container) => React.ReactNode\n className?: string\n containerClassName?: string\n itemClassName?: string\n layout?: 'horizontal' | 'vertical' | 'grid'\n}\n\ninterface DroppableContainerProps {\n id: UniqueIdentifier\n children: React.ReactNode\n className?: string\n isEmpty?: boolean\n}\n\nfunction DroppableContainer({ id, children, className, isEmpty }: DroppableContainerProps) {\n const { setNodeRef, isOver } = useDroppable({ id })\n\n return (\n <div\n ref={setNodeRef}\n className={cn(\n 'min-h-[100px] rounded-xl transition-colors duration-200',\n isOver && 'bg-primary/5 ring-2 ring-primary/30',\n isEmpty && 'border-2 border-dashed border-muted-foreground/30',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\ninterface SortableContainerItemProps {\n id: string | number\n children: React.ReactNode\n className?: string\n}\n\nconst SortableContainerItem = React.memo(function SortableContainerItem({\n id,\n children,\n className\n}: SortableContainerItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id })\n\n const style: React.CSSProperties = React.useMemo(() => ({\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n }), [transform, transition, isDragging])\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n 'rounded-xl border bg-card text-card-foreground p-3 shadow-sm touch-none select-none',\n isDragging && 'ring-2 ring-primary/20',\n !isDragging && 'cursor-grab hover:shadow-md hover:border-primary/30',\n isDragging && 'cursor-grabbing',\n className\n )}\n {...attributes}\n {...listeners}\n >\n <div className=\"min-w-0\">{children}</div>\n </div>\n )\n})\n\nconst layoutClasses = {\n horizontal: 'flex gap-4 overflow-x-auto',\n vertical: 'flex flex-col gap-4',\n grid: 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4',\n}\n\nconst dropAnimationConfig: DropAnimation = {\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0.5',\n },\n },\n }),\n}\n\nexport function MultiContainer<T extends ContainerItem>({\n containers,\n items,\n onItemMove,\n onReorder,\n renderItem,\n renderContainerHeader,\n renderEmptyContainer,\n className,\n containerClassName,\n itemClassName,\n layout = 'horizontal',\n}: MultiContainerProps<T>) {\n const [activeId, setActiveId] = React.useState<UniqueIdentifier | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const getItemsByContainer = React.useCallback(\n (containerId: UniqueIdentifier) =>\n items.filter((item) => item.containerId === containerId),\n [items]\n )\n\n const findContainerByItemId = React.useCallback(\n (itemId: UniqueIdentifier): UniqueIdentifier | undefined => {\n const item = items.find((i) => i.id === itemId)\n return item?.containerId\n },\n [items]\n )\n\n const handleDragStart = React.useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id)\n }, [])\n\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\n const { active, over } = event\n if (!over) return\n\n const activeContainerId = findContainerByItemId(active.id)\n let overContainerId = findContainerByItemId(over.id)\n\n if (!overContainerId) {\n overContainerId = containers.find((c) => c.id === over.id)?.id\n }\n\n if (!activeContainerId || !overContainerId) return\n if (activeContainerId === overContainerId) return\n\n const overContainerItems = getItemsByContainer(overContainerId)\n const overIndex = overContainerItems.findIndex((item) => item.id === over.id)\n\n onItemMove(\n active.id,\n activeContainerId,\n overContainerId,\n overIndex >= 0 ? overIndex : overContainerItems.length\n )\n }, [containers, findContainerByItemId, getItemsByContainer, onItemMove])\n\n const handleDragEnd = React.useCallback((event: DragEndEvent) => {\n const { active, over } = event\n\n if (!over) {\n setActiveId(null)\n return\n }\n\n const activeContainerId = findContainerByItemId(active.id)\n if (!activeContainerId) {\n setActiveId(null)\n return\n }\n\n const overContainerId = findContainerByItemId(over.id) ||\n containers.find((c) => c.id === over.id)?.id\n\n if (activeContainerId === overContainerId && active.id !== over.id && onReorder) {\n const containerItems = getItemsByContainer(activeContainerId)\n const oldIndex = containerItems.findIndex((item) => item.id === active.id)\n const newIndex = containerItems.findIndex((item) => item.id === over.id)\n\n if (oldIndex !== -1 && newIndex !== -1) {\n onReorder(activeContainerId, arrayMove(containerItems, oldIndex, newIndex) as T[])\n }\n }\n\n setActiveId(null)\n }, [containers, findContainerByItemId, getItemsByContainer, onReorder])\n\n const handleDragCancel = React.useCallback(() => {\n setActiveId(null)\n }, [])\n\n const activeItem = React.useMemo(\n () => items.find((item) => item.id === activeId),\n [activeId, items]\n )\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <div className={cn(layoutClasses[layout], className)}>\n {containers.map((container) => {\n const containerItems = getItemsByContainer(container.id)\n const isEmpty = containerItems.length === 0\n\n return (\n <div\n key={container.id}\n className={cn(\n 'flex flex-col rounded-xl border border-border/50 bg-muted/20 p-4 transition-colors duration-200',\n layout === 'horizontal' && 'min-w-[280px] w-[280px]',\n containerClassName\n )}\n >\n <div className=\"mb-3\">\n {renderContainerHeader ? (\n renderContainerHeader(container, containerItems.length)\n ) : (\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold text-sm text-foreground\">{container.title}</h3>\n <span className=\"text-xs font-medium text-muted-foreground bg-background border px-2 py-0.5 rounded-full shadow-sm\">\n {containerItems.length}\n </span>\n </div>\n )}\n </div>\n\n <DroppableContainer\n id={container.id}\n isEmpty={isEmpty}\n className=\"flex-1\"\n >\n <SortableContext\n items={containerItems.map((item) => item.id)}\n strategy={verticalListSortingStrategy}\n >\n <div className=\"flex flex-col gap-2\">\n {containerItems.map((item) => (\n <SortableContainerItem\n key={item.id}\n id={item.id}\n className={itemClassName}\n >\n {renderItem(item)}\n </SortableContainerItem>\n ))}\n {isEmpty && renderEmptyContainer && (\n <div className=\"flex items-center justify-center py-8 text-muted-foreground text-sm\">\n {renderEmptyContainer(container)}\n </div>\n )}\n </div>\n </SortableContext>\n </DroppableContainer>\n </div>\n )\n })}\n </div>\n\n <DragOverlay dropAnimation={dropAnimationConfig} modifiers={[snapCenterToCursor, restrictToWindowEdges]}>\n {activeItem ? (\n <div className=\"rounded-xl border bg-card text-card-foreground p-3 shadow-2xl ring-2 ring-primary/30 cursor-grabbing\">\n <div className=\"min-w-0\">{renderItem(activeItem)}</div>\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n )\n}\n"],"names":["Folder","createLucideIcon","SortableItem","id","children","className","disabled","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","style","React","CSS","jsx","cn","restrictToBoundingRect","rect","boundingRect","value","restrictToWindowEdges","_ref","draggingNodeRect","windowRect","snapCenterToCursor","activatorEvent","activatorCoordinates","getEventCoordinates","offsetX","offsetY","gapClasses","dropAnimationConfig","defaultDropAnimationSideEffects","SortableList","items","onReorder","renderItem","renderOverlay","direction","itemClassName","gap","activeId","setActiveId","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragStart","event","handleDragEnd","active","over","oldIndex","item","newIndex","arrayMove","handleDragCancel","activeItem","itemIds","jsxs","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","horizontalListSortingStrategy","DragOverlay","SortableKanbanItem","DroppableColumn","column","renderColumnHeader","columnClassName","isOver","useDroppable","customCollisionDetection","args","itemCollisions","pointerWithin","collision","rectIntersection","KanbanBoard","columns","onItemMove","lastOverId","getItemsByColumn","columnId","findColumnByItemId","itemId","i","extractColumnId","overId","overIdStr","handleDragOver","activeColumnId","overColumnId","overColumnItems","overIndex","columnItems","TreeNodeItem","node","depth","expanded","onToggle","renderNode","hasChildren","isFolder","handleToggleClick","e","ChevronRight","File","flattenTree","nodes","expandedIds","result","TreeView","data","onMove","defaultExpanded","setExpandedIds","flattenedItems","handleToggle","nodeId","prev","newExpanded","wasExpanded","activeIndex","activeNode","DroppableContainer","isEmpty","SortableContainerItem","layoutClasses","MultiContainer","containers","renderContainerHeader","renderEmptyContainer","containerClassName","layout","getItemsByContainer","containerId","findContainerByItemId","activeContainerId","overContainerId","c","overContainerItems","containerItems","container"],"mappings":"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","x_google_ignoreList":[0,2]}
1
+ {"version":3,"file":"multi-container-BZia7HCU.js","sources":["../node_modules/lucide-react/dist/esm/icons/folder.js","../src/components/dnd/sortable-item.tsx","../node_modules/@dnd-kit/modifiers/dist/modifiers.esm.js","../src/components/dnd/sortable-list.tsx","../src/components/dnd/kanban-board.tsx","../src/components/dnd/tree-view.tsx","../src/components/dnd/multi-container.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Folder = createLucideIcon(\"Folder\", [\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ]\n]);\n\nexport { Folder as default };\n//# sourceMappingURL=folder.js.map\n","import * as React from 'react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { cn } from '@/utils/cn'\n\nexport interface SortableItemProps {\n id: string | number\n children: React.ReactNode\n className?: string\n disabled?: boolean\n}\n\nexport function SortableItem({\n id,\n children,\n className,\n disabled = false,\n}: SortableItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id, disabled })\n\n const style: React.CSSProperties = React.useMemo(() => ({\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n }), [transform, transition, isDragging])\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n 'rounded-xl border bg-card text-card-foreground p-3 shadow-sm touch-none select-none',\n isDragging && 'z-50 ring-2 ring-primary/30',\n disabled && 'opacity-50 cursor-not-allowed',\n !disabled && !isDragging && 'cursor-grab hover:shadow-md hover:border-primary/30',\n !disabled && isDragging && 'cursor-grabbing',\n className\n )}\n {...attributes}\n {...listeners}\n >\n <div className=\"min-w-0\">{children}</div>\n </div>\n )\n}\n","import { getEventCoordinates } from '@dnd-kit/utilities';\n\nfunction createSnapModifier(gridSize) {\n return _ref => {\n let {\n transform\n } = _ref;\n return { ...transform,\n x: Math.ceil(transform.x / gridSize) * gridSize,\n y: Math.ceil(transform.y / gridSize) * gridSize\n };\n };\n}\n\nconst restrictToHorizontalAxis = _ref => {\n let {\n transform\n } = _ref;\n return { ...transform,\n y: 0\n };\n};\n\nfunction restrictToBoundingRect(transform, rect, boundingRect) {\n const value = { ...transform\n };\n\n if (rect.top + transform.y <= boundingRect.top) {\n value.y = boundingRect.top - rect.top;\n } else if (rect.bottom + transform.y >= boundingRect.top + boundingRect.height) {\n value.y = boundingRect.top + boundingRect.height - rect.bottom;\n }\n\n if (rect.left + transform.x <= boundingRect.left) {\n value.x = boundingRect.left - rect.left;\n } else if (rect.right + transform.x >= boundingRect.left + boundingRect.width) {\n value.x = boundingRect.left + boundingRect.width - rect.right;\n }\n\n return value;\n}\n\nconst restrictToParentElement = _ref => {\n let {\n containerNodeRect,\n draggingNodeRect,\n transform\n } = _ref;\n\n if (!draggingNodeRect || !containerNodeRect) {\n return transform;\n }\n\n return restrictToBoundingRect(transform, draggingNodeRect, containerNodeRect);\n};\n\nconst restrictToFirstScrollableAncestor = _ref => {\n let {\n draggingNodeRect,\n transform,\n scrollableAncestorRects\n } = _ref;\n const firstScrollableAncestorRect = scrollableAncestorRects[0];\n\n if (!draggingNodeRect || !firstScrollableAncestorRect) {\n return transform;\n }\n\n return restrictToBoundingRect(transform, draggingNodeRect, firstScrollableAncestorRect);\n};\n\nconst restrictToVerticalAxis = _ref => {\n let {\n transform\n } = _ref;\n return { ...transform,\n x: 0\n };\n};\n\nconst restrictToWindowEdges = _ref => {\n let {\n transform,\n draggingNodeRect,\n windowRect\n } = _ref;\n\n if (!draggingNodeRect || !windowRect) {\n return transform;\n }\n\n return restrictToBoundingRect(transform, draggingNodeRect, windowRect);\n};\n\nconst snapCenterToCursor = _ref => {\n let {\n activatorEvent,\n draggingNodeRect,\n transform\n } = _ref;\n\n if (draggingNodeRect && activatorEvent) {\n const activatorCoordinates = getEventCoordinates(activatorEvent);\n\n if (!activatorCoordinates) {\n return transform;\n }\n\n const offsetX = activatorCoordinates.x - draggingNodeRect.left;\n const offsetY = activatorCoordinates.y - draggingNodeRect.top;\n return { ...transform,\n x: transform.x + offsetX - draggingNodeRect.width / 2,\n y: transform.y + offsetY - draggingNodeRect.height / 2\n };\n }\n\n return transform;\n};\n\nexport { createSnapModifier, restrictToFirstScrollableAncestor, restrictToHorizontalAxis, restrictToParentElement, restrictToVerticalAxis, restrictToWindowEdges, snapCenterToCursor };\n//# sourceMappingURL=modifiers.esm.js.map\n","import * as React from 'react'\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n DragStartEvent,\n DragOverlay,\n UniqueIdentifier,\n defaultDropAnimationSideEffects,\n DropAnimation,\n} from '@dnd-kit/core'\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n horizontalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { snapCenterToCursor, restrictToWindowEdges } from '@dnd-kit/modifiers'\nimport { cn } from '@/utils/cn'\nimport { SortableItem } from './sortable-item'\n\nexport interface SortableListItem {\n id: string | number\n [key: string]: unknown\n}\n\nexport interface SortableListProps<T extends SortableListItem> {\n items: T[]\n onReorder: (items: T[]) => void\n renderItem: (item: T) => React.ReactNode\n renderOverlay?: (item: T) => React.ReactNode\n direction?: 'vertical' | 'horizontal'\n className?: string\n itemClassName?: string\n disabled?: boolean\n gap?: 'sm' | 'md' | 'lg'\n}\n\nconst gapClasses = {\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-4',\n}\n\nconst dropAnimationConfig: DropAnimation = {\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0.5',\n },\n },\n }),\n}\n\nexport function SortableList<T extends SortableListItem>({\n items,\n onReorder,\n renderItem,\n renderOverlay,\n direction = 'vertical',\n className,\n itemClassName,\n disabled = false,\n gap = 'md',\n}: SortableListProps<T>) {\n const [activeId, setActiveId] = React.useState<UniqueIdentifier | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const handleDragStart = React.useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id)\n }, [])\n\n const handleDragEnd = React.useCallback((event: DragEndEvent) => {\n const { active, over } = event\n\n if (over && active.id !== over.id) {\n const oldIndex = items.findIndex((item) => item.id === active.id)\n const newIndex = items.findIndex((item) => item.id === over.id)\n if (oldIndex !== -1 && newIndex !== -1) {\n onReorder(arrayMove(items, oldIndex, newIndex))\n }\n }\n\n setActiveId(null)\n }, [items, onReorder])\n\n const handleDragCancel = React.useCallback(() => {\n setActiveId(null)\n }, [])\n\n const activeItem = React.useMemo(\n () => items.find((item) => item.id === activeId),\n [activeId, items]\n )\n\n const itemIds = React.useMemo(() => items.map((item) => item.id), [items])\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <SortableContext\n items={itemIds}\n strategy={direction === 'vertical' ? verticalListSortingStrategy : horizontalListSortingStrategy}\n >\n <div\n className={cn(\n 'flex',\n direction === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n gapClasses[gap],\n className\n )}\n >\n {items.map((item) => (\n <SortableItem\n key={item.id}\n id={item.id}\n className={itemClassName}\n disabled={disabled}\n >\n {renderItem(item)}\n </SortableItem>\n ))}\n </div>\n </SortableContext>\n\n <DragOverlay dropAnimation={dropAnimationConfig} modifiers={[snapCenterToCursor, restrictToWindowEdges]}>\n {activeItem ? (\n <div className=\"rounded-xl border bg-card text-card-foreground p-3 shadow-2xl ring-2 ring-primary/30 cursor-grabbing\">\n {renderOverlay ? renderOverlay(activeItem) : renderItem(activeItem)}\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n )\n}\n","import * as React from 'react'\nimport {\n DndContext,\n DragEndEvent,\n DragOverEvent,\n DragOverlay,\n DragStartEvent,\n KeyboardSensor,\n PointerSensor,\n UniqueIdentifier,\n useSensor,\n useSensors,\n useDroppable,\n pointerWithin,\n rectIntersection,\n CollisionDetection,\n defaultDropAnimationSideEffects,\n DropAnimation,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { snapCenterToCursor, restrictToWindowEdges } from '@dnd-kit/modifiers'\nimport { cn } from '@/utils/cn'\n\nexport interface KanbanItem {\n id: string | number\n columnId: string | number\n [key: string]: unknown\n}\n\nexport interface KanbanColumn {\n id: string | number\n title: string\n}\n\nexport interface KanbanBoardProps<T extends KanbanItem> {\n columns: KanbanColumn[]\n items: T[]\n onItemMove: (itemId: UniqueIdentifier, fromColumnId: UniqueIdentifier, toColumnId: UniqueIdentifier, newIndex: number) => void\n onReorder?: (columnId: UniqueIdentifier, items: T[]) => void\n renderItem: (item: T) => React.ReactNode\n renderColumnHeader?: (column: KanbanColumn) => React.ReactNode\n className?: string\n columnClassName?: string\n itemClassName?: string\n}\n\ninterface SortableKanbanItemProps {\n id: string | number\n children: React.ReactNode\n className?: string\n}\n\nconst SortableKanbanItem = React.memo(function SortableKanbanItem({\n id,\n children,\n className\n}: SortableKanbanItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id })\n\n const style: React.CSSProperties = React.useMemo(() => ({\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n }), [transform, transition, isDragging])\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n 'rounded-xl border bg-card text-card-foreground p-3 shadow-sm touch-none select-none',\n isDragging && 'ring-2 ring-primary/20',\n !isDragging && 'cursor-grab hover:shadow-md hover:border-primary/30',\n isDragging && 'cursor-grabbing',\n className\n )}\n {...attributes}\n {...listeners}\n >\n <div className=\"min-w-0\">{children}</div>\n </div>\n )\n})\n\ninterface DroppableColumnProps<T extends KanbanItem> {\n column: KanbanColumn\n items: T[]\n renderItem: (item: T) => React.ReactNode\n renderColumnHeader?: (column: KanbanColumn) => React.ReactNode\n columnClassName?: string\n itemClassName?: string\n}\n\nfunction DroppableColumn<T extends KanbanItem>({\n column,\n items,\n renderItem,\n renderColumnHeader,\n columnClassName,\n itemClassName,\n}: DroppableColumnProps<T>) {\n const { setNodeRef, isOver } = useDroppable({\n id: `column-${column.id}`,\n data: {\n type: 'column',\n columnId: column.id,\n },\n })\n\n return (\n <div\n ref={setNodeRef}\n className={cn(\n 'flex flex-col min-w-[280px] w-[280px] bg-muted/30 border border-border/50 rounded-xl p-3 transition-colors duration-200',\n isOver && 'ring-2 ring-primary/30 bg-primary/5',\n columnClassName\n )}\n >\n <div className=\"flex items-center justify-between mb-3 px-1\">\n {renderColumnHeader ? (\n renderColumnHeader(column)\n ) : (\n <h3 className=\"font-semibold text-sm text-foreground\">{column.title}</h3>\n )}\n <span className=\"text-xs font-medium text-muted-foreground bg-background border px-2 py-0.5 rounded-full shadow-sm\">\n {items.length}\n </span>\n </div>\n <SortableContext\n items={items.map((item) => item.id)}\n strategy={verticalListSortingStrategy}\n >\n <div className=\"flex flex-col gap-2 min-h-[100px] flex-1\">\n {items.map((item) => (\n <SortableKanbanItem\n key={item.id}\n id={item.id}\n className={itemClassName}\n >\n {renderItem(item)}\n </SortableKanbanItem>\n ))}\n </div>\n </SortableContext>\n </div>\n )\n}\n\n// Custom collision detection that prioritizes items over columns\nconst customCollisionDetection: CollisionDetection = (args) => {\n const pointerCollisions = pointerWithin(args)\n const itemCollisions = pointerCollisions.filter(\n (collision) => !String(collision.id).startsWith('column-')\n )\n\n if (itemCollisions.length > 0) {\n return itemCollisions\n }\n\n const rectCollisions = rectIntersection(args)\n return rectCollisions\n}\n\nconst dropAnimationConfig: DropAnimation = {\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0.5',\n },\n },\n }),\n}\n\nexport function KanbanBoard<T extends KanbanItem>({\n columns,\n items,\n onItemMove,\n onReorder,\n renderItem,\n renderColumnHeader,\n className,\n columnClassName,\n itemClassName,\n}: KanbanBoardProps<T>) {\n const [activeId, setActiveId] = React.useState<UniqueIdentifier | null>(null)\n const lastOverId = React.useRef<UniqueIdentifier | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const getItemsByColumn = React.useCallback(\n (columnId: UniqueIdentifier) => items.filter((item) => item.columnId === columnId),\n [items]\n )\n\n const findColumnByItemId = React.useCallback(\n (itemId: UniqueIdentifier): UniqueIdentifier | undefined => {\n const item = items.find((i) => i.id === itemId)\n return item?.columnId\n },\n [items]\n )\n\n const extractColumnId = React.useCallback(\n (overId: UniqueIdentifier): UniqueIdentifier | undefined => {\n const overIdStr = String(overId)\n if (overIdStr.startsWith('column-')) {\n return overIdStr.replace('column-', '')\n }\n return findColumnByItemId(overId)\n },\n [findColumnByItemId]\n )\n\n const handleDragStart = React.useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id)\n lastOverId.current = null\n }, [])\n\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\n const { active, over } = event\n if (!over) return\n\n const activeColumnId = findColumnByItemId(active.id)\n const overColumnId = extractColumnId(over.id)\n\n if (!activeColumnId || !overColumnId) return\n if (activeColumnId === overColumnId) return\n\n if (lastOverId.current === over.id) return\n lastOverId.current = over.id\n\n const overColumnItems = getItemsByColumn(overColumnId)\n const overIdStr = String(over.id)\n\n let newIndex: number\n if (overIdStr.startsWith('column-')) {\n newIndex = overColumnItems.length\n } else {\n const overIndex = overColumnItems.findIndex((item) => item.id === over.id)\n newIndex = overIndex >= 0 ? overIndex : overColumnItems.length\n }\n\n onItemMove(active.id, activeColumnId, overColumnId, newIndex)\n }, [findColumnByItemId, extractColumnId, getItemsByColumn, onItemMove])\n\n const handleDragEnd = React.useCallback((event: DragEndEvent) => {\n const { active, over } = event\n\n if (!over) {\n setActiveId(null)\n lastOverId.current = null\n return\n }\n\n const activeColumnId = findColumnByItemId(active.id)\n const overIdStr = String(over.id)\n\n let overColumnId: UniqueIdentifier | undefined\n if (overIdStr.startsWith('column-')) {\n overColumnId = overIdStr.replace('column-', '')\n } else {\n overColumnId = findColumnByItemId(over.id)\n }\n\n if (!activeColumnId) {\n setActiveId(null)\n lastOverId.current = null\n return\n }\n\n if (activeColumnId === overColumnId && active.id !== over.id && onReorder && !overIdStr.startsWith('column-')) {\n const columnItems = getItemsByColumn(activeColumnId)\n const oldIndex = columnItems.findIndex((item) => item.id === active.id)\n const newIndex = columnItems.findIndex((item) => item.id === over.id)\n if (oldIndex !== -1 && newIndex !== -1) {\n onReorder(activeColumnId, arrayMove(columnItems, oldIndex, newIndex) as T[])\n }\n }\n\n setActiveId(null)\n lastOverId.current = null\n }, [findColumnByItemId, getItemsByColumn, onReorder])\n\n const handleDragCancel = React.useCallback(() => {\n setActiveId(null)\n lastOverId.current = null\n }, [])\n\n const activeItem = React.useMemo(\n () => items.find((item) => item.id === activeId),\n [activeId, items]\n )\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={customCollisionDetection}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <div className={cn('flex gap-4 overflow-x-auto p-1', className)}>\n {columns.map((column) => {\n const columnItems = getItemsByColumn(column.id)\n return (\n <DroppableColumn\n key={column.id}\n column={column}\n items={columnItems}\n renderItem={renderItem}\n renderColumnHeader={renderColumnHeader}\n columnClassName={columnClassName}\n itemClassName={itemClassName}\n />\n )\n })}\n </div>\n\n <DragOverlay dropAnimation={dropAnimationConfig} modifiers={[snapCenterToCursor, restrictToWindowEdges]}>\n {activeItem ? (\n <div className=\"rounded-xl border bg-card text-card-foreground p-3 shadow-2xl ring-2 ring-primary/30 cursor-grabbing\">\n <div className=\"min-w-0\">{renderItem(activeItem)}</div>\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n )\n}\n","import * as React from 'react'\nimport {\n DndContext,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n KeyboardSensor,\n PointerSensor,\n UniqueIdentifier,\n closestCenter,\n useSensor,\n useSensors,\n defaultDropAnimationSideEffects,\n DropAnimation,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { snapCenterToCursor, restrictToWindowEdges } from '@dnd-kit/modifiers'\nimport { cn } from '@/utils/cn'\nimport { ChevronRight, Folder, File } from 'lucide-react'\n\nexport interface TreeNode {\n id: string | number\n label: string\n children?: TreeNode[]\n isFolder?: boolean\n [key: string]: unknown\n}\n\nexport interface TreeViewProps {\n data: TreeNode[]\n onMove?: (nodeId: UniqueIdentifier, newParentId: UniqueIdentifier | null, index: number) => void\n onToggle?: (nodeId: UniqueIdentifier, expanded: boolean) => void\n renderNode?: (node: TreeNode) => React.ReactNode\n className?: string\n defaultExpanded?: Set<UniqueIdentifier>\n}\n\ninterface TreeNodeItemProps {\n node: TreeNode\n depth: number\n expanded: boolean\n onToggle: () => void\n renderNode?: (node: TreeNode) => React.ReactNode\n}\n\nconst TreeNodeItem = React.memo(function TreeNodeItem({\n node,\n depth,\n expanded,\n onToggle,\n renderNode,\n}: TreeNodeItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: node.id })\n\n const style: React.CSSProperties = React.useMemo(() => ({\n transform: CSS.Transform.toString(transform),\n transition,\n paddingLeft: `${depth * 20 + 8}px`,\n opacity: isDragging ? 0.5 : 1,\n }), [transform, transition, depth, isDragging])\n\n const hasChildren = node.children && node.children.length > 0\n const isFolder = node.isFolder || hasChildren\n\n const handleToggleClick = React.useCallback((e: React.MouseEvent) => {\n e.stopPropagation()\n onToggle()\n }, [onToggle])\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n 'flex items-center gap-2 py-2 pr-3 rounded-lg touch-none select-none',\n isDragging && 'bg-muted ring-1 ring-primary/20',\n !isDragging && 'cursor-grab hover:bg-muted/60',\n isDragging && 'cursor-grabbing'\n )}\n {...attributes}\n {...listeners}\n >\n {isFolder ? (\n <button\n type=\"button\"\n onClick={handleToggleClick}\n className=\"flex-shrink-0 p-1 hover:bg-muted rounded-md transition-colors duration-200\"\n >\n <ChevronRight\n className={cn(\n 'h-4 w-4 text-muted-foreground transition-transform duration-200',\n expanded && 'rotate-90'\n )}\n />\n </button>\n ) : (\n <span className=\"w-6\" />\n )}\n\n <span className={cn(\n 'flex-shrink-0',\n isFolder ? 'text-primary/80' : 'text-muted-foreground'\n )}>\n {isFolder ? <Folder className=\"h-4 w-4\" /> : <File className=\"h-4 w-4\" />}\n </span>\n\n <span className=\"flex-1 truncate text-sm text-foreground\">\n {renderNode ? renderNode(node) : node.label}\n </span>\n </div>\n )\n})\n\nfunction flattenTree(\n nodes: TreeNode[],\n expandedIds: Set<UniqueIdentifier>,\n depth = 0\n): Array<{ node: TreeNode; depth: number }> {\n const result: Array<{ node: TreeNode; depth: number }> = []\n\n for (const node of nodes) {\n result.push({ node, depth })\n if (node.children && expandedIds.has(node.id)) {\n result.push(...flattenTree(node.children, expandedIds, depth + 1))\n }\n }\n\n return result\n}\n\nconst dropAnimationConfig: DropAnimation = {\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0.5',\n },\n },\n }),\n}\n\nexport function TreeView({\n data,\n onMove,\n onToggle,\n renderNode,\n className,\n defaultExpanded = new Set(),\n}: TreeViewProps) {\n const [expandedIds, setExpandedIds] = React.useState<Set<UniqueIdentifier>>(defaultExpanded)\n const [activeId, setActiveId] = React.useState<UniqueIdentifier | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const flattenedItems = React.useMemo(\n () => flattenTree(data, expandedIds),\n [data, expandedIds]\n )\n\n const handleToggle = React.useCallback((nodeId: UniqueIdentifier) => {\n setExpandedIds(prev => {\n const newExpanded = new Set(prev)\n const wasExpanded = newExpanded.has(nodeId)\n\n if (wasExpanded) {\n newExpanded.delete(nodeId)\n } else {\n newExpanded.add(nodeId)\n }\n\n onToggle?.(nodeId, !wasExpanded)\n return newExpanded\n })\n }, [onToggle])\n\n const handleDragStart = React.useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id)\n }, [])\n\n const handleDragEnd = React.useCallback((event: DragEndEvent) => {\n const { active, over } = event\n\n if (over && active.id !== over.id) {\n const activeIndex = flattenedItems.findIndex((item) => item.node.id === active.id)\n const overIndex = flattenedItems.findIndex((item) => item.node.id === over.id)\n\n if (activeIndex !== -1 && overIndex !== -1) {\n onMove?.(active.id, null, overIndex)\n }\n }\n\n setActiveId(null)\n }, [flattenedItems, onMove])\n\n const handleDragCancel = React.useCallback(() => {\n setActiveId(null)\n }, [])\n\n const activeNode = React.useMemo(\n () => flattenedItems.find((item) => item.node.id === activeId)?.node,\n [activeId, flattenedItems]\n )\n\n const itemIds = React.useMemo(\n () => flattenedItems.map((item) => item.node.id),\n [flattenedItems]\n )\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <SortableContext\n items={itemIds}\n strategy={verticalListSortingStrategy}\n >\n <div className={cn('border rounded-xl p-3 bg-card shadow-sm', className)}>\n {flattenedItems.map(({ node, depth }) => (\n <TreeNodeItem\n key={node.id}\n node={node}\n depth={depth}\n expanded={expandedIds.has(node.id)}\n onToggle={() => handleToggle(node.id)}\n renderNode={renderNode}\n />\n ))}\n </div>\n </SortableContext>\n\n <DragOverlay dropAnimation={dropAnimationConfig} modifiers={[snapCenterToCursor, restrictToWindowEdges]}>\n {activeNode ? (\n <div className=\"flex items-center gap-2 py-2 px-3 rounded-lg bg-card border shadow-2xl ring-2 ring-primary/30 cursor-grabbing\">\n <span className={cn(\n 'flex-shrink-0',\n activeNode.isFolder || (activeNode.children && activeNode.children.length > 0)\n ? 'text-primary/80'\n : 'text-muted-foreground'\n )}>\n {activeNode.isFolder || (activeNode.children && activeNode.children.length > 0) ? (\n <Folder className=\"h-4 w-4\" />\n ) : (\n <File className=\"h-4 w-4\" />\n )}\n </span>\n <span className=\"text-sm text-foreground\">\n {renderNode ? renderNode(activeNode) : activeNode.label}\n </span>\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n )\n}\n","import * as React from 'react'\nimport {\n DndContext,\n DragEndEvent,\n DragOverEvent,\n DragOverlay,\n DragStartEvent,\n KeyboardSensor,\n PointerSensor,\n UniqueIdentifier,\n closestCenter,\n useSensor,\n useSensors,\n useDroppable,\n defaultDropAnimationSideEffects,\n DropAnimation,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { snapCenterToCursor, restrictToWindowEdges } from '@dnd-kit/modifiers'\nimport { cn } from '@/utils/cn'\n\nexport interface ContainerItem {\n id: string | number\n containerId: string | number\n [key: string]: unknown\n}\n\nexport interface Container {\n id: string | number\n title: string\n}\n\nexport interface MultiContainerProps<T extends ContainerItem> {\n containers: Container[]\n items: T[]\n onItemMove: (\n itemId: UniqueIdentifier,\n fromContainerId: UniqueIdentifier,\n toContainerId: UniqueIdentifier,\n newIndex: number\n ) => void\n onReorder?: (containerId: UniqueIdentifier, items: T[]) => void\n renderItem: (item: T) => React.ReactNode\n renderContainerHeader?: (container: Container, itemCount: number) => React.ReactNode\n renderEmptyContainer?: (container: Container) => React.ReactNode\n className?: string\n containerClassName?: string\n itemClassName?: string\n layout?: 'horizontal' | 'vertical' | 'grid'\n}\n\ninterface DroppableContainerProps {\n id: UniqueIdentifier\n children: React.ReactNode\n className?: string\n isEmpty?: boolean\n}\n\nfunction DroppableContainer({ id, children, className, isEmpty }: DroppableContainerProps) {\n const { setNodeRef, isOver } = useDroppable({ id })\n\n return (\n <div\n ref={setNodeRef}\n className={cn(\n 'min-h-[100px] rounded-xl transition-colors duration-200',\n isOver && 'bg-primary/5 ring-2 ring-primary/30',\n isEmpty && 'border-2 border-dashed border-muted-foreground/30',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\ninterface SortableContainerItemProps {\n id: string | number\n children: React.ReactNode\n className?: string\n}\n\nconst SortableContainerItem = React.memo(function SortableContainerItem({\n id,\n children,\n className\n}: SortableContainerItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id })\n\n const style: React.CSSProperties = React.useMemo(() => ({\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n }), [transform, transition, isDragging])\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(\n 'rounded-xl border bg-card text-card-foreground p-3 shadow-sm touch-none select-none',\n isDragging && 'ring-2 ring-primary/20',\n !isDragging && 'cursor-grab hover:shadow-md hover:border-primary/30',\n isDragging && 'cursor-grabbing',\n className\n )}\n {...attributes}\n {...listeners}\n >\n <div className=\"min-w-0\">{children}</div>\n </div>\n )\n})\n\nconst layoutClasses = {\n horizontal: 'flex gap-4 overflow-x-auto',\n vertical: 'flex flex-col gap-4',\n grid: 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4',\n}\n\nconst dropAnimationConfig: DropAnimation = {\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0.5',\n },\n },\n }),\n}\n\nexport function MultiContainer<T extends ContainerItem>({\n containers,\n items,\n onItemMove,\n onReorder,\n renderItem,\n renderContainerHeader,\n renderEmptyContainer,\n className,\n containerClassName,\n itemClassName,\n layout = 'horizontal',\n}: MultiContainerProps<T>) {\n const [activeId, setActiveId] = React.useState<UniqueIdentifier | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const getItemsByContainer = React.useCallback(\n (containerId: UniqueIdentifier) =>\n items.filter((item) => item.containerId === containerId),\n [items]\n )\n\n const findContainerByItemId = React.useCallback(\n (itemId: UniqueIdentifier): UniqueIdentifier | undefined => {\n const item = items.find((i) => i.id === itemId)\n return item?.containerId\n },\n [items]\n )\n\n const handleDragStart = React.useCallback((event: DragStartEvent) => {\n setActiveId(event.active.id)\n }, [])\n\n const handleDragOver = React.useCallback((event: DragOverEvent) => {\n const { active, over } = event\n if (!over) return\n\n const activeContainerId = findContainerByItemId(active.id)\n let overContainerId = findContainerByItemId(over.id)\n\n if (!overContainerId) {\n overContainerId = containers.find((c) => c.id === over.id)?.id\n }\n\n if (!activeContainerId || !overContainerId) return\n if (activeContainerId === overContainerId) return\n\n const overContainerItems = getItemsByContainer(overContainerId)\n const overIndex = overContainerItems.findIndex((item) => item.id === over.id)\n\n onItemMove(\n active.id,\n activeContainerId,\n overContainerId,\n overIndex >= 0 ? overIndex : overContainerItems.length\n )\n }, [containers, findContainerByItemId, getItemsByContainer, onItemMove])\n\n const handleDragEnd = React.useCallback((event: DragEndEvent) => {\n const { active, over } = event\n\n if (!over) {\n setActiveId(null)\n return\n }\n\n const activeContainerId = findContainerByItemId(active.id)\n if (!activeContainerId) {\n setActiveId(null)\n return\n }\n\n const overContainerId = findContainerByItemId(over.id) ||\n containers.find((c) => c.id === over.id)?.id\n\n if (activeContainerId === overContainerId && active.id !== over.id && onReorder) {\n const containerItems = getItemsByContainer(activeContainerId)\n const oldIndex = containerItems.findIndex((item) => item.id === active.id)\n const newIndex = containerItems.findIndex((item) => item.id === over.id)\n\n if (oldIndex !== -1 && newIndex !== -1) {\n onReorder(activeContainerId, arrayMove(containerItems, oldIndex, newIndex) as T[])\n }\n }\n\n setActiveId(null)\n }, [containers, findContainerByItemId, getItemsByContainer, onReorder])\n\n const handleDragCancel = React.useCallback(() => {\n setActiveId(null)\n }, [])\n\n const activeItem = React.useMemo(\n () => items.find((item) => item.id === activeId),\n [activeId, items]\n )\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <div className={cn(layoutClasses[layout], className)}>\n {containers.map((container) => {\n const containerItems = getItemsByContainer(container.id)\n const isEmpty = containerItems.length === 0\n\n return (\n <div\n key={container.id}\n className={cn(\n 'flex flex-col rounded-xl border border-border/50 bg-muted/20 p-4 transition-colors duration-200',\n layout === 'horizontal' && 'min-w-[280px] w-[280px]',\n containerClassName\n )}\n >\n <div className=\"mb-3\">\n {renderContainerHeader ? (\n renderContainerHeader(container, containerItems.length)\n ) : (\n <div className=\"flex items-center justify-between\">\n <h3 className=\"font-semibold text-sm text-foreground\">{container.title}</h3>\n <span className=\"text-xs font-medium text-muted-foreground bg-background border px-2 py-0.5 rounded-full shadow-sm\">\n {containerItems.length}\n </span>\n </div>\n )}\n </div>\n\n <DroppableContainer\n id={container.id}\n isEmpty={isEmpty}\n className=\"flex-1\"\n >\n <SortableContext\n items={containerItems.map((item) => item.id)}\n strategy={verticalListSortingStrategy}\n >\n <div className=\"flex flex-col gap-2\">\n {containerItems.map((item) => (\n <SortableContainerItem\n key={item.id}\n id={item.id}\n className={itemClassName}\n >\n {renderItem(item)}\n </SortableContainerItem>\n ))}\n {isEmpty && renderEmptyContainer && (\n <div className=\"flex items-center justify-center py-8 text-muted-foreground text-sm\">\n {renderEmptyContainer(container)}\n </div>\n )}\n </div>\n </SortableContext>\n </DroppableContainer>\n </div>\n )\n })}\n </div>\n\n <DragOverlay dropAnimation={dropAnimationConfig} modifiers={[snapCenterToCursor, restrictToWindowEdges]}>\n {activeItem ? (\n <div className=\"rounded-xl border bg-card text-card-foreground p-3 shadow-2xl ring-2 ring-primary/30 cursor-grabbing\">\n <div className=\"min-w-0\">{renderItem(activeItem)}</div>\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n )\n}\n"],"names":["Folder","createLucideIcon","SortableItem","id","children","className","disabled","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","style","React","CSS","jsx","cn","restrictToBoundingRect","rect","boundingRect","value","restrictToWindowEdges","_ref","draggingNodeRect","windowRect","snapCenterToCursor","activatorEvent","activatorCoordinates","getEventCoordinates","offsetX","offsetY","gapClasses","dropAnimationConfig","defaultDropAnimationSideEffects","SortableList","items","onReorder","renderItem","renderOverlay","direction","itemClassName","gap","activeId","setActiveId","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragStart","event","handleDragEnd","active","over","oldIndex","item","newIndex","arrayMove","handleDragCancel","activeItem","itemIds","jsxs","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","horizontalListSortingStrategy","DragOverlay","SortableKanbanItem","DroppableColumn","column","renderColumnHeader","columnClassName","isOver","useDroppable","customCollisionDetection","args","itemCollisions","pointerWithin","collision","rectIntersection","KanbanBoard","columns","onItemMove","lastOverId","getItemsByColumn","columnId","findColumnByItemId","itemId","i","extractColumnId","overId","overIdStr","handleDragOver","activeColumnId","overColumnId","overColumnItems","overIndex","columnItems","TreeNodeItem","node","depth","expanded","onToggle","renderNode","hasChildren","isFolder","handleToggleClick","e","ChevronRight","File","flattenTree","nodes","expandedIds","result","TreeView","data","onMove","defaultExpanded","setExpandedIds","flattenedItems","handleToggle","nodeId","prev","newExpanded","wasExpanded","activeIndex","activeNode","_a","DroppableContainer","isEmpty","SortableContainerItem","layoutClasses","MultiContainer","containers","renderContainerHeader","renderEmptyContainer","containerClassName","layout","getItemsByContainer","containerId","findContainerByItemId","activeContainerId","overContainerId","c","overContainerItems","containerItems","container"],"mappings":"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","x_google_ignoreList":[0,2]}
@@ -0,0 +1,7 @@
1
+ "use strict";const r=require("react/jsx-runtime"),z=require("react"),e=require("./sortable.esm-5DsiICDg.cjs"),k=require("./index-D2U2F80P.cjs"),_=require("./createLucideIcon-Cv8nC2E9.cjs"),q=require("./file-Cp5UoYUZ.cjs"),$=require("./chevron-right-Bxf8i4gi.cjs");function G(s){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const n in s)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(s,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>s[n]})}}return t.default=s,Object.freeze(t)}const l=G(z);/**
2
+ * @license lucide-react v0.441.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const B=_.createLucideIcon("Folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);function P({id:s,children:t,className:n,disabled:o=!1}){const{attributes:d,listeners:x,setNodeRef:b,transform:C,transition:m,isDragging:u}=e.useSortable({id:s,disabled:o}),h=l.useMemo(()=>({transform:e.CSS.Transform.toString(C),transition:m,opacity:u?.5:1}),[C,m,u]);return r.jsx("div",{ref:b,style:h,className:k.cn("rounded-xl border bg-card text-card-foreground p-3 shadow-sm touch-none select-none",u&&"z-50 ring-2 ring-primary/30",o&&"opacity-50 cursor-not-allowed",!o&&!u&&"cursor-grab hover:shadow-md hover:border-primary/30",!o&&u&&"cursor-grabbing",n),...d,...x,children:r.jsx("div",{className:"min-w-0",children:t})})}function V(s,t,n){const o={...s};return t.top+s.y<=n.top?o.y=n.top-t.top:t.bottom+s.y>=n.top+n.height&&(o.y=n.top+n.height-t.bottom),t.left+s.x<=n.left?o.x=n.left-t.left:t.right+s.x>=n.left+n.width&&(o.x=n.left+n.width-t.right),o}const T=s=>{let{transform:t,draggingNodeRect:n,windowRect:o}=s;return!n||!o?t:V(t,n,o)},F=s=>{let{activatorEvent:t,draggingNodeRect:n,transform:o}=s;if(n&&t){const d=e.getEventCoordinates(t);if(!d)return o;const x=d.x-n.left,b=d.y-n.top;return{...o,x:o.x+x-n.width/2,y:o.y+b-n.height/2}}return o},X={sm:"gap-1",md:"gap-2",lg:"gap-4"},Y={sideEffects:e.defaultDropAnimationSideEffects({styles:{active:{opacity:"0.5"}}})};function Z({items:s,onReorder:t,renderItem:n,renderOverlay:o,direction:d="vertical",className:x,itemClassName:b,disabled:C=!1,gap:m="md"}){const[u,h]=l.useState(null),f=e.useSensors(e.useSensor(e.PointerSensor,{activationConstraint:{distance:5}}),e.useSensor(e.KeyboardSensor,{coordinateGetter:e.sortableKeyboardCoordinates})),E=l.useCallback(I=>{h(I.active.id)},[]),A=l.useCallback(I=>{const{active:g,over:j}=I;if(j&&g.id!==j.id){const D=s.findIndex(a=>a.id===g.id),i=s.findIndex(a=>a.id===j.id);D!==-1&&i!==-1&&t(e.arrayMove(s,D,i))}h(null)},[s,t]),v=l.useCallback(()=>{h(null)},[]),S=l.useMemo(()=>s.find(I=>I.id===u),[u,s]),y=l.useMemo(()=>s.map(I=>I.id),[s]);return r.jsxs(e.DndContext,{sensors:f,collisionDetection:e.closestCenter,onDragStart:E,onDragEnd:A,onDragCancel:v,children:[r.jsx(e.SortableContext,{items:y,strategy:d==="vertical"?e.verticalListSortingStrategy:e.horizontalListSortingStrategy,children:r.jsx("div",{className:k.cn("flex",d==="vertical"?"flex-col":"flex-row flex-wrap",X[m],x),children:s.map(I=>r.jsx(P,{id:I.id,className:b,disabled:C,children:n(I)},I.id))})}),r.jsx(e.DragOverlay,{dropAnimation:Y,modifiers:[F,T],children:S?r.jsx("div",{className:"rounded-xl border bg-card text-card-foreground p-3 shadow-2xl ring-2 ring-primary/30 cursor-grabbing",children:o?o(S):n(S)}):null})]})}const J=l.memo(function({id:t,children:n,className:o}){const{attributes:d,listeners:x,setNodeRef:b,transform:C,transition:m,isDragging:u}=e.useSortable({id:t}),h=l.useMemo(()=>({transform:e.CSS.Transform.toString(C),transition:m,opacity:u?.5:1}),[C,m,u]);return r.jsx("div",{ref:b,style:h,className:k.cn("rounded-xl border bg-card text-card-foreground p-3 shadow-sm touch-none select-none",u&&"ring-2 ring-primary/20",!u&&"cursor-grab hover:shadow-md hover:border-primary/30",u&&"cursor-grabbing",o),...d,...x,children:r.jsx("div",{className:"min-w-0",children:n})})});function Q({column:s,items:t,renderItem:n,renderColumnHeader:o,columnClassName:d,itemClassName:x}){const{setNodeRef:b,isOver:C}=e.useDroppable({id:`column-${s.id}`,data:{type:"column",columnId:s.id}});return r.jsxs("div",{ref:b,className:k.cn("flex flex-col min-w-[280px] w-[280px] bg-muted/30 border border-border/50 rounded-xl p-3 transition-colors duration-200",C&&"ring-2 ring-primary/30 bg-primary/5",d),children:[r.jsxs("div",{className:"flex items-center justify-between mb-3 px-1",children:[o?o(s):r.jsx("h3",{className:"font-semibold text-sm text-foreground",children:s.title}),r.jsx("span",{className:"text-xs font-medium text-muted-foreground bg-background border px-2 py-0.5 rounded-full shadow-sm",children:t.length})]}),r.jsx(e.SortableContext,{items:t.map(m=>m.id),strategy:e.verticalListSortingStrategy,children:r.jsx("div",{className:"flex flex-col gap-2 min-h-[100px] flex-1",children:t.map(m=>r.jsx(J,{id:m.id,className:x,children:n(m)},m.id))})})]})}const R=s=>{const n=e.pointerWithin(s).filter(d=>!String(d.id).startsWith("column-"));return n.length>0?n:e.rectIntersection(s)},U={sideEffects:e.defaultDropAnimationSideEffects({styles:{active:{opacity:"0.5"}}})};function H({columns:s,items:t,onItemMove:n,onReorder:o,renderItem:d,renderColumnHeader:x,className:b,columnClassName:C,itemClassName:m}){const[u,h]=l.useState(null),f=l.useRef(null),E=e.useSensors(e.useSensor(e.PointerSensor,{activationConstraint:{distance:5}}),e.useSensor(e.KeyboardSensor,{coordinateGetter:e.sortableKeyboardCoordinates})),A=l.useCallback(i=>t.filter(a=>a.columnId===i),[t]),v=l.useCallback(i=>{const a=t.find(c=>c.id===i);return a==null?void 0:a.columnId},[t]),S=l.useCallback(i=>{const a=String(i);return a.startsWith("column-")?a.replace("column-",""):v(i)},[v]),y=l.useCallback(i=>{h(i.active.id),f.current=null},[]),I=l.useCallback(i=>{const{active:a,over:c}=i;if(!c)return;const p=v(a.id),N=S(c.id);if(!p||!N||p===N||f.current===c.id)return;f.current=c.id;const O=A(N),w=String(c.id);let K;if(w.startsWith("column-"))K=O.length;else{const L=O.findIndex(M=>M.id===c.id);K=L>=0?L:O.length}n(a.id,p,N,K)},[v,S,A,n]),g=l.useCallback(i=>{const{active:a,over:c}=i;if(!c){h(null),f.current=null;return}const p=v(a.id),N=String(c.id);let O;if(N.startsWith("column-")?O=N.replace("column-",""):O=v(c.id),!p){h(null),f.current=null;return}if(p===O&&a.id!==c.id&&o&&!N.startsWith("column-")){const w=A(p),K=w.findIndex(M=>M.id===a.id),L=w.findIndex(M=>M.id===c.id);K!==-1&&L!==-1&&o(p,e.arrayMove(w,K,L))}h(null),f.current=null},[v,A,o]),j=l.useCallback(()=>{h(null),f.current=null},[]),D=l.useMemo(()=>t.find(i=>i.id===u),[u,t]);return r.jsxs(e.DndContext,{sensors:E,collisionDetection:R,onDragStart:y,onDragOver:I,onDragEnd:g,onDragCancel:j,children:[r.jsx("div",{className:k.cn("flex gap-4 overflow-x-auto p-1",b),children:s.map(i=>{const a=A(i.id);return r.jsx(Q,{column:i,items:a,renderItem:d,renderColumnHeader:x,columnClassName:C,itemClassName:m},i.id)})}),r.jsx(e.DragOverlay,{dropAnimation:U,modifiers:[F,T],children:D?r.jsx("div",{className:"rounded-xl border bg-card text-card-foreground p-3 shadow-2xl ring-2 ring-primary/30 cursor-grabbing",children:r.jsx("div",{className:"min-w-0",children:d(D)})}):null})]})}const ee=l.memo(function({node:t,depth:n,expanded:o,onToggle:d,renderNode:x}){const{attributes:b,listeners:C,setNodeRef:m,transform:u,transition:h,isDragging:f}=e.useSortable({id:t.id}),E=l.useMemo(()=>({transform:e.CSS.Transform.toString(u),transition:h,paddingLeft:`${n*20+8}px`,opacity:f?.5:1}),[u,h,n,f]),A=t.children&&t.children.length>0,v=t.isFolder||A,S=l.useCallback(y=>{y.stopPropagation(),d()},[d]);return r.jsxs("div",{ref:m,style:E,className:k.cn("flex items-center gap-2 py-2 pr-3 rounded-lg touch-none select-none",f&&"bg-muted ring-1 ring-primary/20",!f&&"cursor-grab hover:bg-muted/60",f&&"cursor-grabbing"),...b,...C,children:[v?r.jsx("button",{type:"button",onClick:S,className:"flex-shrink-0 p-1 hover:bg-muted rounded-md transition-colors duration-200",children:r.jsx($.ChevronRight,{className:k.cn("h-4 w-4 text-muted-foreground transition-transform duration-200",o&&"rotate-90")})}):r.jsx("span",{className:"w-6"}),r.jsx("span",{className:k.cn("flex-shrink-0",v?"text-primary/80":"text-muted-foreground"),children:v?r.jsx(B,{className:"h-4 w-4"}):r.jsx(q.File,{className:"h-4 w-4"})}),r.jsx("span",{className:"flex-1 truncate text-sm text-foreground",children:x?x(t):t.label})]})});function W(s,t,n=0){const o=[];for(const d of s)o.push({node:d,depth:n}),d.children&&t.has(d.id)&&o.push(...W(d.children,t,n+1));return o}const te={sideEffects:e.defaultDropAnimationSideEffects({styles:{active:{opacity:"0.5"}}})};function ne({data:s,onMove:t,onToggle:n,renderNode:o,className:d,defaultExpanded:x=new Set}){const[b,C]=l.useState(x),[m,u]=l.useState(null),h=e.useSensors(e.useSensor(e.PointerSensor,{activationConstraint:{distance:5}}),e.useSensor(e.KeyboardSensor,{coordinateGetter:e.sortableKeyboardCoordinates})),f=l.useMemo(()=>W(s,b),[s,b]),E=l.useCallback(g=>{C(j=>{const D=new Set(j),i=D.has(g);return i?D.delete(g):D.add(g),n==null||n(g,!i),D})},[n]),A=l.useCallback(g=>{u(g.active.id)},[]),v=l.useCallback(g=>{const{active:j,over:D}=g;if(D&&j.id!==D.id){const i=f.findIndex(c=>c.node.id===j.id),a=f.findIndex(c=>c.node.id===D.id);i!==-1&&a!==-1&&(t==null||t(j.id,null,a))}u(null)},[f,t]),S=l.useCallback(()=>{u(null)},[]),y=l.useMemo(()=>{var g;return(g=f.find(j=>j.node.id===m))==null?void 0:g.node},[m,f]),I=l.useMemo(()=>f.map(g=>g.node.id),[f]);return r.jsxs(e.DndContext,{sensors:h,collisionDetection:e.closestCenter,onDragStart:A,onDragEnd:v,onDragCancel:S,children:[r.jsx(e.SortableContext,{items:I,strategy:e.verticalListSortingStrategy,children:r.jsx("div",{className:k.cn("border rounded-xl p-3 bg-card shadow-sm",d),children:f.map(({node:g,depth:j})=>r.jsx(ee,{node:g,depth:j,expanded:b.has(g.id),onToggle:()=>E(g.id),renderNode:o},g.id))})}),r.jsx(e.DragOverlay,{dropAnimation:te,modifiers:[F,T],children:y?r.jsxs("div",{className:"flex items-center gap-2 py-2 px-3 rounded-lg bg-card border shadow-2xl ring-2 ring-primary/30 cursor-grabbing",children:[r.jsx("span",{className:k.cn("flex-shrink-0",y.isFolder||y.children&&y.children.length>0?"text-primary/80":"text-muted-foreground"),children:y.isFolder||y.children&&y.children.length>0?r.jsx(B,{className:"h-4 w-4"}):r.jsx(q.File,{className:"h-4 w-4"})}),r.jsx("span",{className:"text-sm text-foreground",children:o?o(y):y.label})]}):null})]})}function re({id:s,children:t,className:n,isEmpty:o}){const{setNodeRef:d,isOver:x}=e.useDroppable({id:s});return r.jsx("div",{ref:d,className:k.cn("min-h-[100px] rounded-xl transition-colors duration-200",x&&"bg-primary/5 ring-2 ring-primary/30",o&&"border-2 border-dashed border-muted-foreground/30",n),children:t})}const se=l.memo(function({id:t,children:n,className:o}){const{attributes:d,listeners:x,setNodeRef:b,transform:C,transition:m,isDragging:u}=e.useSortable({id:t}),h=l.useMemo(()=>({transform:e.CSS.Transform.toString(C),transition:m,opacity:u?.5:1}),[C,m,u]);return r.jsx("div",{ref:b,style:h,className:k.cn("rounded-xl border bg-card text-card-foreground p-3 shadow-sm touch-none select-none",u&&"ring-2 ring-primary/20",!u&&"cursor-grab hover:shadow-md hover:border-primary/30",u&&"cursor-grabbing",o),...d,...x,children:r.jsx("div",{className:"min-w-0",children:n})})}),oe={horizontal:"flex gap-4 overflow-x-auto",vertical:"flex flex-col gap-4",grid:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},ie={sideEffects:e.defaultDropAnimationSideEffects({styles:{active:{opacity:"0.5"}}})};function ae({containers:s,items:t,onItemMove:n,onReorder:o,renderItem:d,renderContainerHeader:x,renderEmptyContainer:b,className:C,containerClassName:m,itemClassName:u,layout:h="horizontal"}){const[f,E]=l.useState(null),A=e.useSensors(e.useSensor(e.PointerSensor,{activationConstraint:{distance:5}}),e.useSensor(e.KeyboardSensor,{coordinateGetter:e.sortableKeyboardCoordinates})),v=l.useCallback(i=>t.filter(a=>a.containerId===i),[t]),S=l.useCallback(i=>{const a=t.find(c=>c.id===i);return a==null?void 0:a.containerId},[t]),y=l.useCallback(i=>{E(i.active.id)},[]),I=l.useCallback(i=>{var K;const{active:a,over:c}=i;if(!c)return;const p=S(a.id);let N=S(c.id);if(N||(N=(K=s.find(L=>L.id===c.id))==null?void 0:K.id),!p||!N||p===N)return;const O=v(N),w=O.findIndex(L=>L.id===c.id);n(a.id,p,N,w>=0?w:O.length)},[s,S,v,n]),g=l.useCallback(i=>{var O;const{active:a,over:c}=i;if(!c){E(null);return}const p=S(a.id);if(!p){E(null);return}const N=S(c.id)||((O=s.find(w=>w.id===c.id))==null?void 0:O.id);if(p===N&&a.id!==c.id&&o){const w=v(p),K=w.findIndex(M=>M.id===a.id),L=w.findIndex(M=>M.id===c.id);K!==-1&&L!==-1&&o(p,e.arrayMove(w,K,L))}E(null)},[s,S,v,o]),j=l.useCallback(()=>{E(null)},[]),D=l.useMemo(()=>t.find(i=>i.id===f),[f,t]);return r.jsxs(e.DndContext,{sensors:A,collisionDetection:e.closestCenter,onDragStart:y,onDragOver:I,onDragEnd:g,onDragCancel:j,children:[r.jsx("div",{className:k.cn(oe[h],C),children:s.map(i=>{const a=v(i.id),c=a.length===0;return r.jsxs("div",{className:k.cn("flex flex-col rounded-xl border border-border/50 bg-muted/20 p-4 transition-colors duration-200",h==="horizontal"&&"min-w-[280px] w-[280px]",m),children:[r.jsx("div",{className:"mb-3",children:x?x(i,a.length):r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("h3",{className:"font-semibold text-sm text-foreground",children:i.title}),r.jsx("span",{className:"text-xs font-medium text-muted-foreground bg-background border px-2 py-0.5 rounded-full shadow-sm",children:a.length})]})}),r.jsx(re,{id:i.id,isEmpty:c,className:"flex-1",children:r.jsx(e.SortableContext,{items:a.map(p=>p.id),strategy:e.verticalListSortingStrategy,children:r.jsxs("div",{className:"flex flex-col gap-2",children:[a.map(p=>r.jsx(se,{id:p.id,className:u,children:d(p)},p.id)),c&&b&&r.jsx("div",{className:"flex items-center justify-center py-8 text-muted-foreground text-sm",children:b(i)})]})})})]},i.id)})}),r.jsx(e.DragOverlay,{dropAnimation:ie,modifiers:[F,T],children:D?r.jsx("div",{className:"rounded-xl border bg-card text-card-foreground p-3 shadow-2xl ring-2 ring-primary/30 cursor-grabbing",children:r.jsx("div",{className:"min-w-0",children:d(D)})}):null})]})}exports.KanbanBoard=H;exports.MultiContainer=ae;exports.SortableItem=P;exports.SortableList=Z;exports.TreeView=ne;
7
+ //# sourceMappingURL=multi-container-BdNbgtPZ.cjs.map