@senitix/ui 0.4.1 → 0.4.3

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 (393) hide show
  1. package/dist/accordion-BcwB0wwz.cjs +2 -0
  2. package/dist/accordion-BcwB0wwz.cjs.map +1 -0
  3. package/dist/accordion-BwnJKrKm.js +360 -0
  4. package/dist/accordion-BwnJKrKm.js.map +1 -0
  5. package/dist/appointment-scheduler-BoQQO51F.cjs +2 -0
  6. package/dist/appointment-scheduler-BoQQO51F.cjs.map +1 -0
  7. package/dist/appointment-scheduler-DHAs-mF_.js +192 -0
  8. package/dist/appointment-scheduler-DHAs-mF_.js.map +1 -0
  9. package/dist/arrow-right-CM3nmiZe.js +15 -0
  10. package/dist/arrow-right-CM3nmiZe.js.map +1 -0
  11. package/dist/arrow-right-vDxRZOfm.cjs +7 -0
  12. package/dist/arrow-right-vDxRZOfm.cjs.map +1 -0
  13. package/dist/avatar-BlEcWE7T.js +191 -0
  14. package/dist/avatar-BlEcWE7T.js.map +1 -0
  15. package/dist/avatar-Cl38Ye4J.cjs +2 -0
  16. package/dist/avatar-Cl38Ye4J.cjs.map +1 -0
  17. package/dist/badge-BZcdBG5J.cjs +23 -0
  18. package/dist/badge-BZcdBG5J.cjs.map +1 -0
  19. package/dist/badge-D0C_rP2l.js +157 -0
  20. package/dist/badge-D0C_rP2l.js.map +1 -0
  21. package/dist/button-BP_ug5gP.js +126 -0
  22. package/dist/button-BP_ug5gP.js.map +1 -0
  23. package/dist/button-CPuCii0R.cjs +2 -0
  24. package/dist/button-CPuCii0R.cjs.map +1 -0
  25. package/dist/{calendar-DgnhzEfp.js → calendar-86qoSnO7.js} +368 -433
  26. package/dist/calendar-86qoSnO7.js.map +1 -0
  27. package/dist/{calendar-D3RWU0_G.cjs → calendar-BH-AuyiB.cjs} +2 -2
  28. package/dist/{calendar-D3RWU0_G.cjs.map → calendar-BH-AuyiB.cjs.map} +1 -1
  29. package/dist/calendar-CSJ060ym.cjs +2 -0
  30. package/dist/calendar-CSJ060ym.cjs.map +1 -0
  31. package/dist/{calendar-CUxm1K7J.js → calendar-JUSWONQ0.js} +2 -2
  32. package/dist/{calendar-CUxm1K7J.js.map → calendar-JUSWONQ0.js.map} +1 -1
  33. package/dist/{card-DISL3sPJ.cjs → card-CToWUN1K.cjs} +2 -2
  34. package/dist/{card-DISL3sPJ.cjs.map → card-CToWUN1K.cjs.map} +1 -1
  35. package/dist/{card-fId5vof_.js → card-yxbWFvZ1.js} +2 -2
  36. package/dist/{card-fId5vof_.js.map → card-yxbWFvZ1.js.map} +1 -1
  37. package/dist/checkbox-BmugT50K.cjs +2 -0
  38. package/dist/checkbox-BmugT50K.cjs.map +1 -0
  39. package/dist/{checkbox-BY2zxQVv.js → checkbox-CTa9e4SG.js} +95 -97
  40. package/dist/checkbox-CTa9e4SG.js.map +1 -0
  41. package/dist/chevron-left-5h87iFo_.cjs +7 -0
  42. package/dist/chevron-left-5h87iFo_.cjs.map +1 -0
  43. package/dist/chevron-left-DD5mQuvf.js +14 -0
  44. package/dist/chevron-left-DD5mQuvf.js.map +1 -0
  45. package/dist/{chevron-right-Bxf8i4gi.cjs → chevron-right-D-TdAZ7l.cjs} +2 -2
  46. package/dist/{chevron-right-Bxf8i4gi.cjs.map → chevron-right-D-TdAZ7l.cjs.map} +1 -1
  47. package/dist/{chevron-right-BLyGmyaF.js → chevron-right-Di90aqSn.js} +2 -2
  48. package/dist/{chevron-right-BLyGmyaF.js.map → chevron-right-Di90aqSn.js.map} +1 -1
  49. package/dist/chevron-up-Bq55Db6X.cjs +7 -0
  50. package/dist/{chevron-up-C3RClqXD.cjs.map → chevron-up-Bq55Db6X.cjs.map} +1 -1
  51. package/dist/{chevron-up-BmYZUtrk.js → chevron-up-Dr7EIn9V.js} +2 -2
  52. package/dist/{chevron-up-BmYZUtrk.js.map → chevron-up-Dr7EIn9V.js.map} +1 -1
  53. package/dist/clock-BjJE8PGr.js +15 -0
  54. package/dist/clock-BjJE8PGr.js.map +1 -0
  55. package/dist/clock-CnxBAA_O.cjs +7 -0
  56. package/dist/clock-CnxBAA_O.cjs.map +1 -0
  57. package/dist/command-BEpaOk-5.cjs +2 -0
  58. package/dist/command-BEpaOk-5.cjs.map +1 -0
  59. package/dist/command-CYhMM7gX.js +404 -0
  60. package/dist/command-CYhMM7gX.js.map +1 -0
  61. package/dist/components/builders/index.cjs.js +2 -0
  62. package/dist/components/builders/index.cjs.js.map +1 -0
  63. package/dist/components/builders/index.es.js +42 -0
  64. package/dist/components/builders/index.es.js.map +1 -0
  65. package/dist/components/charts/index.cjs.js +1 -1
  66. package/dist/components/charts/index.es.js +7 -6
  67. package/dist/components/charts/index.es.js.map +1 -1
  68. package/dist/components/data-display/index.cjs.js +1 -1
  69. package/dist/components/data-display/index.es.js +43 -20
  70. package/dist/components/dnd/index.cjs.js +1 -1
  71. package/dist/components/dnd/index.es.js +1 -1
  72. package/dist/components/feedback/index.cjs.js +1 -1
  73. package/dist/components/feedback/index.es.js +1 -1
  74. package/dist/components/forms/index.cjs.js +1 -1
  75. package/dist/components/forms/index.es.js +24 -23
  76. package/dist/components/forms/index.es.js.map +1 -1
  77. package/dist/components/layouts/index.cjs.js +1 -1
  78. package/dist/components/layouts/index.es.js +45 -21
  79. package/dist/components/messaging/index.cjs.js +2 -0
  80. package/dist/components/messaging/index.cjs.js.map +1 -0
  81. package/dist/components/messaging/index.es.js +15 -0
  82. package/dist/components/messaging/index.es.js.map +1 -0
  83. package/dist/components/navigation/index.cjs.js +1 -1
  84. package/dist/components/navigation/index.es.js +1 -1
  85. package/dist/components/scheduling/index.cjs.js +2 -0
  86. package/dist/components/scheduling/index.cjs.js.map +1 -0
  87. package/dist/components/scheduling/index.es.js +6 -0
  88. package/dist/components/scheduling/index.es.js.map +1 -0
  89. package/dist/components/ui/index.cjs.js +1 -1
  90. package/dist/components/ui/index.es.js +168 -158
  91. package/dist/components/ui/index.es.js.map +1 -1
  92. package/dist/dialog-Cr9SYCaD.cjs +6 -0
  93. package/dist/dialog-Cr9SYCaD.cjs.map +1 -0
  94. package/dist/dialog-MYAx3Qrc.js +387 -0
  95. package/dist/dialog-MYAx3Qrc.js.map +1 -0
  96. package/dist/dropdown-menu-CkCCV_tw.js +969 -0
  97. package/dist/dropdown-menu-CkCCV_tw.js.map +1 -0
  98. package/dist/dropdown-menu-ejikFvg2.cjs +7 -0
  99. package/dist/dropdown-menu-ejikFvg2.cjs.map +1 -0
  100. package/dist/{ellipsis-6eUne95u.js → ellipsis-CKhpjj5H.js} +2 -2
  101. package/dist/{ellipsis-6eUne95u.js.map → ellipsis-CKhpjj5H.js.map} +1 -1
  102. package/dist/{ellipsis-DkM3GBF5.cjs → ellipsis-Dk7Wfc4i.cjs} +3 -3
  103. package/dist/{ellipsis-DkM3GBF5.cjs.map → ellipsis-Dk7Wfc4i.cjs.map} +1 -1
  104. package/dist/external-link-CGBqsrbm.cjs +7 -0
  105. package/dist/external-link-CGBqsrbm.cjs.map +1 -0
  106. package/dist/external-link-UeWW0ty3.js +16 -0
  107. package/dist/external-link-UeWW0ty3.js.map +1 -0
  108. package/dist/eye-Cved4eAo.cjs +7 -0
  109. package/dist/eye-Cved4eAo.cjs.map +1 -0
  110. package/dist/eye-KdCUpmO8.js +21 -0
  111. package/dist/eye-KdCUpmO8.js.map +1 -0
  112. package/dist/{file-Cw_u_aJB.js → file-CHbdXCWO.js} +2 -2
  113. package/dist/{file-Cw_u_aJB.js.map → file-CHbdXCWO.js.map} +1 -1
  114. package/dist/{file-Cp5UoYUZ.cjs → file-CqYRamm8.cjs} +3 -3
  115. package/dist/{file-Cp5UoYUZ.cjs.map → file-CqYRamm8.cjs.map} +1 -1
  116. package/dist/file-spreadsheet-CpySxI0-.cjs +7 -0
  117. package/dist/file-spreadsheet-CpySxI0-.cjs.map +1 -0
  118. package/dist/file-spreadsheet-EqZMR-mM.js +19 -0
  119. package/dist/file-spreadsheet-EqZMR-mM.js.map +1 -0
  120. package/dist/form-preview-Bm5xHtkw.js +12075 -0
  121. package/dist/form-preview-Bm5xHtkw.js.map +1 -0
  122. package/dist/form-preview-IPEZdspX.cjs +111 -0
  123. package/dist/form-preview-IPEZdspX.cjs.map +1 -0
  124. package/dist/full-calendar-4Ut52QNO.cjs +18 -0
  125. package/dist/full-calendar-4Ut52QNO.cjs.map +1 -0
  126. package/dist/full-calendar-DD_tBy69.js +2631 -0
  127. package/dist/full-calendar-DD_tBy69.js.map +1 -0
  128. package/dist/funnel-chart-Dfj1pOyV.cjs +6 -0
  129. package/dist/funnel-chart-Dfj1pOyV.cjs.map +1 -0
  130. package/dist/funnel-chart-o9qcEMgg.js +2952 -0
  131. package/dist/funnel-chart-o9qcEMgg.js.map +1 -0
  132. package/dist/global-search-DcBKVaM4.cjs +22 -0
  133. package/dist/global-search-DcBKVaM4.cjs.map +1 -0
  134. package/dist/global-search-Dul9CD6-.js +1331 -0
  135. package/dist/global-search-Dul9CD6-.js.map +1 -0
  136. package/dist/hooks/index.cjs.js +1 -1
  137. package/dist/hooks/index.es.js +9 -7
  138. package/dist/hooks/index.es.js.map +1 -1
  139. package/dist/{index-DtaLkIY8.js → index-BGUveO6l.js} +84 -79
  140. package/dist/{index-DtaLkIY8.js.map → index-BGUveO6l.js.map} +1 -1
  141. package/dist/{index-gVbM3K4f.cjs → index-Bhee6XHk.cjs} +2 -2
  142. package/dist/{index-gVbM3K4f.cjs.map → index-Bhee6XHk.cjs.map} +1 -1
  143. package/dist/index-CrSlyWAA.js +1090 -0
  144. package/dist/index-CrSlyWAA.js.map +1 -0
  145. package/dist/{index-Dk_Et2WJ.js → index-D8-pHJim.js} +2 -2
  146. package/dist/{index-Dk_Et2WJ.js.map → index-D8-pHJim.js.map} +1 -1
  147. package/dist/index-Dy_9oyP3.cjs +2 -0
  148. package/dist/{index-D2U2F80P.cjs.map → index-Dy_9oyP3.cjs.map} +1 -1
  149. package/dist/index-hnbbvGmb.cjs +21 -0
  150. package/dist/index-hnbbvGmb.cjs.map +1 -0
  151. package/dist/index.cjs.js +1 -1
  152. package/dist/index.es.js +434 -319
  153. package/dist/index.es.js.map +1 -1
  154. package/dist/input-Pfq8fkiV.js +2718 -0
  155. package/dist/input-Pfq8fkiV.js.map +1 -0
  156. package/dist/input-UBp7V7li.cjs +52 -0
  157. package/dist/input-UBp7V7li.cjs.map +1 -0
  158. package/dist/label-CExiitfO.js +50 -0
  159. package/dist/label-CExiitfO.js.map +1 -0
  160. package/dist/label-F0zGAiI2.cjs +2 -0
  161. package/dist/label-F0zGAiI2.cjs.map +1 -0
  162. package/dist/loader-circle-CBVYGIRp.js +14 -0
  163. package/dist/loader-circle-CBVYGIRp.js.map +1 -0
  164. package/dist/loader-circle-IaJKvYsP.cjs +7 -0
  165. package/dist/loader-circle-IaJKvYsP.cjs.map +1 -0
  166. package/dist/locale-provider-BHGNO4j7.js +1786 -0
  167. package/dist/locale-provider-BHGNO4j7.js.map +1 -0
  168. package/dist/locale-provider-BScpm-eC.cjs +2 -0
  169. package/dist/locale-provider-BScpm-eC.cjs.map +1 -0
  170. package/dist/locale-selector-CRC0VBKl.cjs +12 -0
  171. package/dist/locale-selector-CRC0VBKl.cjs.map +1 -0
  172. package/dist/locale-selector-HuzfE0zZ.js +1740 -0
  173. package/dist/locale-selector-HuzfE0zZ.js.map +1 -0
  174. package/dist/map-pin-CHh0xl6i.js +46 -0
  175. package/dist/map-pin-CHh0xl6i.js.map +1 -0
  176. package/dist/map-pin-DGObSZ40.cjs +17 -0
  177. package/dist/map-pin-DGObSZ40.cjs.map +1 -0
  178. package/dist/message-square-B_xLey5D.js +14 -0
  179. package/dist/message-square-B_xLey5D.js.map +1 -0
  180. package/dist/message-square-_69ua8rH.cjs +7 -0
  181. package/dist/message-square-_69ua8rH.cjs.map +1 -0
  182. package/dist/minus-BUFkTM0k.cjs +7 -0
  183. package/dist/{minus-C0uyaz70.cjs.map → minus-BUFkTM0k.cjs.map} +1 -1
  184. package/dist/{minus-CiwV65ZG.js → minus-DJ0tmymW.js} +2 -2
  185. package/dist/{minus-CiwV65ZG.js.map → minus-DJ0tmymW.js.map} +1 -1
  186. package/dist/multi-container-CytCGxsc.cjs +7 -0
  187. package/dist/multi-container-CytCGxsc.cjs.map +1 -0
  188. package/dist/multi-container-DmkgnCJN.js +799 -0
  189. package/dist/multi-container-DmkgnCJN.js.map +1 -0
  190. package/dist/multi-select-Bj_kIDHE.cjs +7 -0
  191. package/dist/multi-select-Bj_kIDHE.cjs.map +1 -0
  192. package/dist/multi-select-CPF7w871.js +224 -0
  193. package/dist/multi-select-CPF7w871.js.map +1 -0
  194. package/dist/pencil-BJULwaDl.cjs +12 -0
  195. package/dist/pencil-BJULwaDl.cjs.map +1 -0
  196. package/dist/pencil-HL0trGIs.js +31 -0
  197. package/dist/pencil-HL0trGIs.js.map +1 -0
  198. package/dist/permission-matrix-BRqw2RPb.js +6128 -0
  199. package/dist/permission-matrix-BRqw2RPb.js.map +1 -0
  200. package/dist/permission-matrix-CqE8q8Hi.cjs +93 -0
  201. package/dist/permission-matrix-CqE8q8Hi.cjs.map +1 -0
  202. package/dist/phone-B0J1dGIE.js +31 -0
  203. package/dist/phone-B0J1dGIE.js.map +1 -0
  204. package/dist/phone-DPA6vucM.cjs +12 -0
  205. package/dist/phone-DPA6vucM.cjs.map +1 -0
  206. package/dist/plus-Bcuujcqd.cjs +7 -0
  207. package/dist/{plus-BsV82JJ5.cjs.map → plus-Bcuujcqd.cjs.map} +1 -1
  208. package/dist/{plus-DxD6rofl.js → plus-D7DMDKb8.js} +2 -2
  209. package/dist/{plus-DxD6rofl.js.map → plus-D7DMDKb8.js.map} +1 -1
  210. package/dist/popover-Bba1ELMX.cjs +2 -0
  211. package/dist/popover-Bba1ELMX.cjs.map +1 -0
  212. package/dist/popover-CZWAuYUL.js +281 -0
  213. package/dist/popover-CZWAuYUL.js.map +1 -0
  214. package/dist/progress-BPpsmZ48.js +218 -0
  215. package/dist/progress-BPpsmZ48.js.map +1 -0
  216. package/dist/progress-BrzjVhWG.cjs +22 -0
  217. package/dist/progress-BrzjVhWG.cjs.map +1 -0
  218. package/dist/providers/index.cjs.js +1 -1
  219. package/dist/providers/index.es.js +1 -1
  220. package/dist/radio-group-B9RM_c7e.js +244 -0
  221. package/dist/radio-group-B9RM_c7e.js.map +1 -0
  222. package/dist/radio-group-_n8TTqNQ.cjs +2 -0
  223. package/dist/radio-group-_n8TTqNQ.cjs.map +1 -0
  224. package/dist/record-dialog-footer-DbH9A6eA.js +2577 -0
  225. package/dist/record-dialog-footer-DbH9A6eA.js.map +1 -0
  226. package/dist/record-dialog-footer-DpDxH5wX.cjs +37 -0
  227. package/dist/record-dialog-footer-DpDxH5wX.cjs.map +1 -0
  228. package/dist/scroll-area-CGNbDUBQ.js +889 -0
  229. package/dist/scroll-area-CGNbDUBQ.js.map +1 -0
  230. package/dist/scroll-area-HsTSI_58.cjs +22 -0
  231. package/dist/scroll-area-HsTSI_58.cjs.map +1 -0
  232. package/dist/select-CEsYpjPi.cjs +2 -0
  233. package/dist/select-CEsYpjPi.cjs.map +1 -0
  234. package/dist/{select-BJpZrtep.js → select-Ce2C2acZ.js} +184 -179
  235. package/dist/select-Ce2C2acZ.js.map +1 -0
  236. package/dist/send-DIkOd-pu.js +21 -0
  237. package/dist/send-DIkOd-pu.js.map +1 -0
  238. package/dist/send-H6HC-rS8.cjs +7 -0
  239. package/dist/send-H6HC-rS8.cjs.map +1 -0
  240. package/dist/shared-inbox-Bv0AgLew.js +702 -0
  241. package/dist/shared-inbox-Bv0AgLew.js.map +1 -0
  242. package/dist/shared-inbox-DWEKfDX3.cjs +22 -0
  243. package/dist/shared-inbox-DWEKfDX3.cjs.map +1 -0
  244. package/dist/sheet-DTimb4SJ.cjs +2 -0
  245. package/dist/sheet-DTimb4SJ.cjs.map +1 -0
  246. package/dist/sheet-DgpAPCAp.js +147 -0
  247. package/dist/sheet-DgpAPCAp.js.map +1 -0
  248. package/dist/{skeleton-Bl6FAxHT.js → skeleton-C_dwS3_6.js} +2 -2
  249. package/dist/{skeleton-Bl6FAxHT.js.map → skeleton-C_dwS3_6.js.map} +1 -1
  250. package/dist/{skeleton-Cb6MWerF.cjs → skeleton-D3YsjVWD.cjs} +2 -2
  251. package/dist/{skeleton-Cb6MWerF.cjs.map → skeleton-D3YsjVWD.cjs.map} +1 -1
  252. package/dist/sparkline-chart-BP4bk24J.js +15881 -0
  253. package/dist/sparkline-chart-BP4bk24J.js.map +1 -0
  254. package/dist/sparkline-chart-D6SLZVjp.cjs +79 -0
  255. package/dist/sparkline-chart-D6SLZVjp.cjs.map +1 -0
  256. package/dist/styles.css +1 -1
  257. package/dist/switch-AEZvZSRV.cjs +2 -0
  258. package/dist/switch-AEZvZSRV.cjs.map +1 -0
  259. package/dist/switch-BF4LLvaU.js +147 -0
  260. package/dist/switch-BF4LLvaU.js.map +1 -0
  261. package/dist/table-2-Bn-YjZ9s.cjs +17 -0
  262. package/dist/table-2-Bn-YjZ9s.cjs.map +1 -0
  263. package/dist/table-2-C7E_N72K.js +52 -0
  264. package/dist/table-2-C7E_N72K.js.map +1 -0
  265. package/dist/textarea-4qZDuQ-C.js +206 -0
  266. package/dist/textarea-4qZDuQ-C.js.map +1 -0
  267. package/dist/textarea-Bq_zyt0L.cjs +2 -0
  268. package/dist/textarea-Bq_zyt0L.cjs.map +1 -0
  269. package/dist/tooltip-Dd7le9EO.cjs +2 -0
  270. package/dist/tooltip-Dd7le9EO.cjs.map +1 -0
  271. package/dist/tooltip-Dee-pNPI.js +338 -0
  272. package/dist/tooltip-Dee-pNPI.js.map +1 -0
  273. package/dist/trash-2-B3EP3JfM.js +18 -0
  274. package/dist/trash-2-B3EP3JfM.js.map +1 -0
  275. package/dist/trash-2-DWEeKlWT.cjs +7 -0
  276. package/dist/trash-2-DWEeKlWT.cjs.map +1 -0
  277. package/dist/{trending-up-BHFXgLWy.js → trending-up-ljWtN4pj.js} +2 -2
  278. package/dist/{trending-up-BHFXgLWy.js.map → trending-up-ljWtN4pj.js.map} +1 -1
  279. package/dist/{trending-up-BBjz_E69.cjs → trending-up-mLgmkp--.cjs} +2 -2
  280. package/dist/{trending-up-BBjz_E69.cjs.map → trending-up-mLgmkp--.cjs.map} +1 -1
  281. package/dist/upload-2tm-XihE.cjs +7 -0
  282. package/dist/upload-2tm-XihE.cjs.map +1 -0
  283. package/dist/upload-C_JDP8O0.js +16 -0
  284. package/dist/upload-C_JDP8O0.js.map +1 -0
  285. package/dist/use-controllable-state-3ATd6Fqd.cjs +2 -0
  286. package/dist/use-controllable-state-3ATd6Fqd.cjs.map +1 -0
  287. package/dist/use-controllable-state-CEa-Zlq6.js +23 -0
  288. package/dist/use-controllable-state-CEa-Zlq6.js.map +1 -0
  289. package/dist/use-formatters-Bb0fX1lW.cjs +2 -0
  290. package/dist/{use-formatters-CObUgipW.cjs.map → use-formatters-Bb0fX1lW.cjs.map} +1 -1
  291. package/dist/{use-formatters-Bgj3JA4i.js → use-formatters-xeMS4gdV.js} +1160 -1165
  292. package/dist/{use-formatters-Bgj3JA4i.js.map → use-formatters-xeMS4gdV.js.map} +1 -1
  293. package/dist/utils/index.cjs.js +1 -1
  294. package/dist/utils/index.es.js +1 -1
  295. package/dist/welcome-card-Ccbl_miQ.js +1007 -0
  296. package/dist/welcome-card-Ccbl_miQ.js.map +1 -0
  297. package/dist/welcome-card-D-ShMkaS.cjs +37 -0
  298. package/dist/welcome-card-D-ShMkaS.cjs.map +1 -0
  299. package/dist/x-BBkgEhUv.js +15 -0
  300. package/dist/x-BBkgEhUv.js.map +1 -0
  301. package/dist/x-D-El5XAY.cjs +7 -0
  302. package/dist/x-D-El5XAY.cjs.map +1 -0
  303. package/package.json +20 -2
  304. package/dist/avatar-BT_SPwFW.cjs +0 -18
  305. package/dist/avatar-BT_SPwFW.cjs.map +0 -1
  306. package/dist/avatar-C5-ZWIqT.js +0 -305
  307. package/dist/avatar-C5-ZWIqT.js.map +0 -1
  308. package/dist/calendar-BF5drX5u.cjs +0 -12
  309. package/dist/calendar-BF5drX5u.cjs.map +0 -1
  310. package/dist/calendar-DgnhzEfp.js.map +0 -1
  311. package/dist/checkbox-BY2zxQVv.js.map +0 -1
  312. package/dist/checkbox-CL6u7vL6.cjs +0 -2
  313. package/dist/checkbox-CL6u7vL6.cjs.map +0 -1
  314. package/dist/chevron-down-BiUlxZA-.js +0 -14
  315. package/dist/chevron-down-BiUlxZA-.js.map +0 -1
  316. package/dist/chevron-down-Ce0kqXiD.cjs +0 -7
  317. package/dist/chevron-down-Ce0kqXiD.cjs.map +0 -1
  318. package/dist/chevron-up-C3RClqXD.cjs +0 -7
  319. package/dist/createLucideIcon-BC8wu-bu.js +0 -80
  320. package/dist/createLucideIcon-BC8wu-bu.js.map +0 -1
  321. package/dist/createLucideIcon-Cv8nC2E9.cjs +0 -22
  322. package/dist/createLucideIcon-Cv8nC2E9.cjs.map +0 -1
  323. package/dist/filter-tags-DoRzXjuY.cjs +0 -48
  324. package/dist/filter-tags-DoRzXjuY.cjs.map +0 -1
  325. package/dist/filter-tags-zEQmRhEU.js +0 -2712
  326. package/dist/filter-tags-zEQmRhEU.js.map +0 -1
  327. package/dist/full-calendar-5Z4JSj8g.js +0 -3551
  328. package/dist/full-calendar-5Z4JSj8g.js.map +0 -1
  329. package/dist/full-calendar-DjAvCfuE.cjs +0 -23
  330. package/dist/full-calendar-DjAvCfuE.cjs.map +0 -1
  331. package/dist/global-search-BbZfc-VL.js +0 -1216
  332. package/dist/global-search-BbZfc-VL.js.map +0 -1
  333. package/dist/global-search-Bd74_wPV.cjs +0 -22
  334. package/dist/global-search-Bd74_wPV.cjs.map +0 -1
  335. package/dist/index-D2U2F80P.cjs +0 -2
  336. package/dist/index-DG0KV-sw.cjs +0 -11
  337. package/dist/index-DG0KV-sw.cjs.map +0 -1
  338. package/dist/index-XnFSmCuh.js +0 -299
  339. package/dist/index-XnFSmCuh.js.map +0 -1
  340. package/dist/input-BgPy-4Qu.js +0 -3658
  341. package/dist/input-BgPy-4Qu.js.map +0 -1
  342. package/dist/input-Cfr2WB-P.cjs +0 -47
  343. package/dist/input-Cfr2WB-P.cjs.map +0 -1
  344. package/dist/locale-provider-BojNdf1Y.cjs +0 -2
  345. package/dist/locale-provider-BojNdf1Y.cjs.map +0 -1
  346. package/dist/locale-provider-DzBeb-X3.js +0 -1013
  347. package/dist/locale-provider-DzBeb-X3.js.map +0 -1
  348. package/dist/locale-selector-BD1IWk6X.cjs +0 -22
  349. package/dist/locale-selector-BD1IWk6X.cjs.map +0 -1
  350. package/dist/locale-selector-DLRSyVye.js +0 -1772
  351. package/dist/locale-selector-DLRSyVye.js.map +0 -1
  352. package/dist/minus-C0uyaz70.cjs +0 -7
  353. package/dist/multi-container-BZia7HCU.js +0 -748
  354. package/dist/multi-container-BZia7HCU.js.map +0 -1
  355. package/dist/multi-container-BdNbgtPZ.cjs +0 -7
  356. package/dist/multi-container-BdNbgtPZ.cjs.map +0 -1
  357. package/dist/pipeline-Dh052Dvj.cjs +0 -27
  358. package/dist/pipeline-Dh052Dvj.cjs.map +0 -1
  359. package/dist/pipeline-DqWvleNy.js +0 -1076
  360. package/dist/pipeline-DqWvleNy.js.map +0 -1
  361. package/dist/plus-BsV82JJ5.cjs +0 -7
  362. package/dist/popover-BgLxmm1z.cjs +0 -7
  363. package/dist/popover-BgLxmm1z.cjs.map +0 -1
  364. package/dist/popover-PI9jbhnS.js +0 -775
  365. package/dist/popover-PI9jbhnS.js.map +0 -1
  366. package/dist/progress-CTTt_CP3.js +0 -260
  367. package/dist/progress-CTTt_CP3.js.map +0 -1
  368. package/dist/progress-CTWb7X1Q.cjs +0 -37
  369. package/dist/progress-CTWb7X1Q.cjs.map +0 -1
  370. package/dist/scroll-area-A3jGu-Ta.js +0 -974
  371. package/dist/scroll-area-A3jGu-Ta.js.map +0 -1
  372. package/dist/scroll-area-DzDnWIYJ.cjs +0 -12
  373. package/dist/scroll-area-DzDnWIYJ.cjs.map +0 -1
  374. package/dist/select-BJpZrtep.js.map +0 -1
  375. package/dist/select-Ii8HRuXa.cjs +0 -2
  376. package/dist/select-Ii8HRuXa.cjs.map +0 -1
  377. package/dist/separator-BzcDE0Ei.cjs +0 -2
  378. package/dist/separator-BzcDE0Ei.cjs.map +0 -1
  379. package/dist/separator-DyarVo1-.js +0 -396
  380. package/dist/separator-DyarVo1-.js.map +0 -1
  381. package/dist/sheet-DPSdOoE6.js +0 -84
  382. package/dist/sheet-DPSdOoE6.js.map +0 -1
  383. package/dist/sheet-XtjvbEMq.cjs +0 -2
  384. package/dist/sheet-XtjvbEMq.cjs.map +0 -1
  385. package/dist/sparkline-chart-CeCDeMNk.cjs +0 -102
  386. package/dist/sparkline-chart-CeCDeMNk.cjs.map +0 -1
  387. package/dist/sparkline-chart-DUS4CoW_.js +0 -19787
  388. package/dist/sparkline-chart-DUS4CoW_.js.map +0 -1
  389. package/dist/use-formatters-CObUgipW.cjs +0 -2
  390. package/dist/welcome-card-CNuEa6Ck.cjs +0 -67
  391. package/dist/welcome-card-CNuEa6Ck.cjs.map +0 -1
  392. package/dist/welcome-card-Cp6t6G3j.js +0 -1041
  393. package/dist/welcome-card-Cp6t6G3j.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-dialog-footer-DbH9A6eA.js","sources":["../node_modules/lucide-react/dist/esm/icons/activity.js","../node_modules/lucide-react/dist/esm/icons/arrow-down.js","../node_modules/lucide-react/dist/esm/icons/arrow-up.js","../node_modules/lucide-react/dist/esm/icons/circle-check.js","../node_modules/lucide-react/dist/esm/icons/layout-grid.js","../node_modules/lucide-react/dist/esm/icons/link-2.js","../node_modules/lucide-react/dist/esm/icons/list.js","../src/components/layouts/app-shell.tsx","../src/components/layouts/page-header.tsx","../src/components/layouts/dashboard-layout.tsx","../src/components/layouts/pipeline.tsx","../src/components/layouts/record-shell/record-header.tsx","../src/components/layouts/record-shell/record-timeline.tsx","../src/components/layouts/record-shell/record-related.tsx","../src/components/layouts/record-shell/record-activity-composer.tsx","../src/components/layouts/record-shell/record-shell.tsx","../src/components/layouts/record-panel/record-panel.tsx","../src/components/layouts/record-panel/record-panel-header.tsx","../src/components/layouts/record-panel/record-panel-fields.tsx","../src/components/layouts/record-panel/record-panel-tabs.tsx","../src/components/layouts/record-panel/record-panel-activity.tsx","../src/components/layouts/record-panel/quick-view.tsx","../src/components/layouts/record-panel/record-form-dialog.tsx","../src/components/layouts/record-dialog/record-dialog-context.tsx","../src/components/layouts/record-dialog/record-dialog.tsx","../src/components/layouts/record-dialog/record-dialog-header.tsx","../src/components/layouts/record-dialog/record-dialog-highlight.tsx","../src/components/layouts/record-dialog/record-dialog-body.tsx","../src/components/layouts/record-dialog/record-dialog-section.tsx","../src/components/layouts/record-dialog/record-dialog-fields.tsx","../src/components/layouts/record-dialog/record-dialog-activity.tsx","../src/components/layouts/record-dialog/record-dialog-related.tsx","../src/components/layouts/record-dialog/record-dialog-footer.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 Activity = createLucideIcon(\"Activity\", [\n [\n \"path\",\n {\n d: \"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2\",\n key: \"169zse\"\n }\n ]\n]);\n\nexport { Activity as default };\n//# sourceMappingURL=activity.js.map\n","/**\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 ArrowDown = createLucideIcon(\"ArrowDown\", [\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }],\n [\"path\", { d: \"m19 12-7 7-7-7\", key: \"1idqje\" }]\n]);\n\nexport { ArrowDown as default };\n//# sourceMappingURL=arrow-down.js.map\n","/**\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 ArrowUp = createLucideIcon(\"ArrowUp\", [\n [\"path\", { d: \"m5 12 7-7 7 7\", key: \"hav0vg\" }],\n [\"path\", { d: \"M12 19V5\", key: \"x0mq9r\" }]\n]);\n\nexport { ArrowUp as default };\n//# sourceMappingURL=arrow-up.js.map\n","/**\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 CircleCheck = createLucideIcon(\"CircleCheck\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\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 LayoutGrid = createLucideIcon(\"LayoutGrid\", [\n [\"rect\", { width: \"7\", height: \"7\", x: \"3\", y: \"3\", rx: \"1\", key: \"1g98yp\" }],\n [\"rect\", { width: \"7\", height: \"7\", x: \"14\", y: \"3\", rx: \"1\", key: \"6d4xhi\" }],\n [\"rect\", { width: \"7\", height: \"7\", x: \"14\", y: \"14\", rx: \"1\", key: \"nxv5o0\" }],\n [\"rect\", { width: \"7\", height: \"7\", x: \"3\", y: \"14\", rx: \"1\", key: \"1bb6yr\" }]\n]);\n\nexport { LayoutGrid as default };\n//# sourceMappingURL=layout-grid.js.map\n","/**\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 Link2 = createLucideIcon(\"Link2\", [\n [\"path\", { d: \"M9 17H7A5 5 0 0 1 7 7h2\", key: \"8i5ue5\" }],\n [\"path\", { d: \"M15 7h2a5 5 0 1 1 0 10h-2\", key: \"1b9ql8\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"12\", y2: \"12\", key: \"1jonct\" }]\n]);\n\nexport { Link2 as default };\n//# sourceMappingURL=link-2.js.map\n","/**\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 List = createLucideIcon(\"List\", [\n [\"line\", { x1: \"8\", x2: \"21\", y1: \"6\", y2: \"6\", key: \"7ey8pc\" }],\n [\"line\", { x1: \"8\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"rjfblc\" }],\n [\"line\", { x1: \"8\", x2: \"21\", y1: \"18\", y2: \"18\", key: \"c3b1m8\" }],\n [\"line\", { x1: \"3\", x2: \"3.01\", y1: \"6\", y2: \"6\", key: \"1g7gq3\" }],\n [\"line\", { x1: \"3\", x2: \"3.01\", y1: \"12\", y2: \"12\", key: \"1pjlvk\" }],\n [\"line\", { x1: \"3\", x2: \"3.01\", y1: \"18\", y2: \"18\", key: \"28t2mc\" }]\n]);\n\nexport { List as default };\n//# sourceMappingURL=list.js.map\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface AppShellProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n}\n\nconst AppShell = React.forwardRef<HTMLDivElement, AppShellProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex min-h-screen w-full flex-col bg-background', className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nAppShell.displayName = 'AppShell'\n\nconst AppShellHeader = React.forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, ...props }, ref) => {\n return (\n <header\n ref={ref}\n className={cn(\n 'sticky top-0 z-50 flex h-16 items-center gap-4 border-b bg-background px-4 md:px-6',\n className\n )}\n {...props}\n />\n )\n }\n)\nAppShellHeader.displayName = 'AppShellHeader'\n\nconst AppShellMain = React.forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, ...props }, ref) => {\n return (\n <main\n ref={ref}\n className={cn('flex flex-1 flex-col gap-4 p-4 md:gap-8 md:p-6', className)}\n {...props}\n />\n )\n }\n)\nAppShellMain.displayName = 'AppShellMain'\n\nconst AppShellFooter = React.forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, ...props }, ref) => {\n return (\n <footer\n ref={ref}\n className={cn('border-t bg-background px-4 py-6 md:px-6', className)}\n {...props}\n />\n )\n }\n)\nAppShellFooter.displayName = 'AppShellFooter'\n\nexport { AppShell, AppShellHeader, AppShellMain, AppShellFooter }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface PageHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n heading: string\n description?: string\n actions?: React.ReactNode\n}\n\nconst PageHeader = React.forwardRef<HTMLDivElement, PageHeaderProps>(\n ({ className, heading, description, actions, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col gap-4 md:flex-row md:items-center md:justify-between', className)}\n {...props}\n >\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-bold tracking-tight md:text-3xl\">{heading}</h1>\n {description && <p className=\"text-muted-foreground\">{description}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n {children}\n </div>\n )\n }\n)\nPageHeader.displayName = 'PageHeader'\n\nexport { PageHeader }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { useIsMobile } from '@/hooks/use-mobile'\nimport { useControllableState } from '@/hooks/use-controllable-state'\nimport { Sheet, SheetContent } from '@/components/ui/sheet'\nimport { ScrollArea } from '@/components/ui/scroll-area'\n\ntype DashboardLayoutContext = {\n sidebarOpen: boolean\n setSidebarOpen: (open: boolean) => void\n sidebarCollapsed: boolean\n setSidebarCollapsed: (collapsed: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst DashboardLayoutContext = React.createContext<DashboardLayoutContext | null>(null)\n\nexport function useDashboardLayout() {\n const context = React.useContext(DashboardLayoutContext)\n if (!context) {\n throw new Error('useDashboardLayout must be used within a DashboardLayout.')\n }\n return context\n}\n\nexport interface DashboardLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n sidebarOpen?: boolean\n onSidebarOpenChange?: (open: boolean) => void\n sidebarCollapsed?: boolean\n onSidebarCollapsedChange?: (collapsed: boolean) => void\n defaultSidebarOpen?: boolean\n defaultSidebarCollapsed?: boolean\n sidebarWidth?: string\n sidebarCollapsedWidth?: string\n}\n\nconst DashboardLayout = React.forwardRef<HTMLDivElement, DashboardLayoutProps>(\n (\n {\n className,\n children,\n sidebarOpen: controlledSidebarOpen,\n onSidebarOpenChange,\n sidebarCollapsed: controlledSidebarCollapsed,\n onSidebarCollapsedChange,\n defaultSidebarOpen = true,\n defaultSidebarCollapsed = false,\n sidebarWidth = '16rem',\n sidebarCollapsedWidth = '4rem',\n ...props\n },\n ref\n ) => {\n const isMobile = useIsMobile()\n const [sidebarOpen, setSidebarOpen] = useControllableState({\n value: controlledSidebarOpen,\n defaultValue: defaultSidebarOpen,\n onChange: onSidebarOpenChange,\n })\n const [sidebarCollapsed, setSidebarCollapsed] = useControllableState({\n value: controlledSidebarCollapsed,\n defaultValue: defaultSidebarCollapsed,\n onChange: onSidebarCollapsedChange,\n })\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) {\n setSidebarOpen((prev) => !prev)\n } else {\n setSidebarCollapsed((prev) => !prev)\n }\n }, [isMobile, setSidebarCollapsed, setSidebarOpen])\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'b' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [toggleSidebar])\n\n const contextValue = React.useMemo<DashboardLayoutContext>(\n () => ({\n sidebarOpen,\n setSidebarOpen,\n sidebarCollapsed,\n setSidebarCollapsed,\n isMobile,\n toggleSidebar,\n }),\n [sidebarOpen, setSidebarOpen, sidebarCollapsed, setSidebarCollapsed, isMobile, toggleSidebar]\n )\n\n return (\n <DashboardLayoutContext.Provider value={contextValue}>\n <div\n ref={ref}\n style={\n {\n '--sidebar-width': sidebarWidth,\n '--sidebar-collapsed-width': sidebarCollapsedWidth,\n } as React.CSSProperties\n }\n className={cn('flex min-h-screen w-full bg-background', className)}\n {...props}\n >\n {children}\n </div>\n </DashboardLayoutContext.Provider>\n )\n }\n)\nDashboardLayout.displayName = 'DashboardLayout'\n\nexport interface DashboardSidebarProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n}\n\nconst DashboardSidebar = React.forwardRef<HTMLElement, DashboardSidebarProps>(\n ({ className, children, ...props }, ref) => {\n const { sidebarOpen, setSidebarOpen, sidebarCollapsed, isMobile } = useDashboardLayout()\n\n if (isMobile) {\n return (\n <Sheet open={sidebarOpen} onOpenChange={setSidebarOpen}>\n <SheetContent\n side=\"left\"\n className=\"w-[var(--sidebar-width)] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n >\n <aside className=\"flex h-full w-full flex-col\">{children}</aside>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <aside\n ref={ref}\n data-collapsed={sidebarCollapsed}\n className={cn(\n 'fixed inset-y-0 left-0 z-30 flex h-screen flex-col border-r bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-in-out',\n sidebarCollapsed ? 'w-[var(--sidebar-collapsed-width)]' : 'w-[var(--sidebar-width)]',\n className\n )}\n {...props}\n >\n {children}\n </aside>\n )\n }\n)\nDashboardSidebar.displayName = 'DashboardSidebar'\n\nexport interface DashboardContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n}\n\nconst DashboardContent = React.forwardRef<HTMLDivElement, DashboardContentProps>(\n ({ className, children, ...props }, ref) => {\n const { sidebarCollapsed, isMobile } = useDashboardLayout()\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-1 flex-col transition-[margin-left] duration-200 ease-in-out',\n !isMobile && (sidebarCollapsed ? 'ml-[var(--sidebar-collapsed-width)]' : 'ml-[var(--sidebar-width)]'),\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nDashboardContent.displayName = 'DashboardContent'\n\nexport interface DashboardHeaderProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n}\n\nconst DashboardHeader = React.forwardRef<HTMLElement, DashboardHeaderProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <header\n ref={ref}\n className={cn(\n 'sticky top-0 z-20 flex h-16 items-center gap-4 border-b bg-background px-4 md:px-6',\n className\n )}\n {...props}\n >\n {children}\n </header>\n )\n }\n)\nDashboardHeader.displayName = 'DashboardHeader'\n\nexport interface DashboardMainProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n}\n\nconst DashboardMain = React.forwardRef<HTMLElement, DashboardMainProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <main\n ref={ref}\n className={cn('flex-1 overflow-auto p-4 md:p-6', className)}\n {...props}\n >\n {children}\n </main>\n )\n }\n)\nDashboardMain.displayName = 'DashboardMain'\n\nexport interface DashboardFooterProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n}\n\nconst DashboardFooter = React.forwardRef<HTMLElement, DashboardFooterProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <footer\n ref={ref}\n className={cn('border-t bg-background px-4 py-4 md:px-6', className)}\n {...props}\n >\n {children}\n </footer>\n )\n }\n)\nDashboardFooter.displayName = 'DashboardFooter'\n\ntype DashboardRightPanelSize = 'sm' | 'md' | 'lg'\n\nconst rightPanelSizeMap: Record<DashboardRightPanelSize, string> = {\n sm: 'sm:max-w-[360px]',\n md: 'sm:max-w-[460px]',\n lg: 'sm:max-w-[620px]',\n}\n\nexport interface DashboardRightPanelProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n size?: DashboardRightPanelSize\n children: React.ReactNode\n className?: string\n}\n\nconst DashboardRightPanel = React.forwardRef<\n React.ElementRef<typeof SheetContent>,\n DashboardRightPanelProps\n>(({ open, onOpenChange, size = 'md', children, className }, ref) => (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent\n ref={ref}\n side=\"right\"\n className={cn(\n 'flex w-full flex-col gap-0 p-0',\n rightPanelSizeMap[size],\n className\n )}\n >\n <ScrollArea className=\"flex-1\">\n <div className=\"flex flex-col\">{children}</div>\n </ScrollArea>\n </SheetContent>\n </Sheet>\n))\nDashboardRightPanel.displayName = 'DashboardRightPanel'\n\nexport {\n DashboardLayout,\n DashboardSidebar,\n DashboardContent,\n DashboardHeader,\n DashboardMain,\n DashboardFooter,\n DashboardRightPanel,\n}\n","import * as React from 'react'\nimport {\n LayoutGrid,\n List,\n Table2,\n Calendar,\n Filter,\n Plus,\n GripVertical,\n MoreHorizontal,\n Search,\n} from 'lucide-react'\nimport {\n DndContext,\n DragOverlay,\n closestCorners,\n useSensor,\n useSensors,\n PointerSensor,\n KeyboardSensor,\n type DragStartEvent,\n type DragEndEvent,\n type DragOverEvent,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n useSortable,\n verticalListSortingStrategy,\n sortableKeyboardCoordinates,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { cn } from '@/utils/cn'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Badge } from '@/components/ui/badge'\nimport { useControllableState } from '@/hooks/use-controllable-state'\nimport { ScrollArea, ScrollBar } from '@/components/ui/scroll-area'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { Card, CardContent } from '@/components/ui/card'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { useFormatters } from '@/hooks/use-formatters'\n\n// Types\nexport type PipelineView = 'kanban' | 'list' | 'table' | 'timeline'\n\nexport interface PipelineStage {\n id: string\n name: string\n color?: string\n order: number\n /** Optional max items (WIP limit) */\n maxItems?: number\n}\n\nexport interface PipelineItem {\n id: string\n title: string\n stageId: string\n value?: number\n probability?: number\n owner?: {\n name: string\n avatar?: string\n }\n company?: string\n dueDate?: Date | string\n priority?: 'low' | 'medium' | 'high'\n tags?: string[]\n [key: string]: unknown\n}\n\nexport interface PipelineContextValue {\n view: PipelineView\n setView: (view: PipelineView) => void\n stages: PipelineStage[]\n items: PipelineItem[]\n selectedItems: string[]\n setSelectedItems: (ids: string[]) => void\n onItemMove?: (itemId: string, fromStageId: string, toStageId: string) => void\n onItemClick?: (item: PipelineItem) => void\n onItemAdd?: (stageId: string) => void\n onItemEdit?: (item: PipelineItem) => void\n onItemDelete?: (itemId: string) => void\n searchQuery: string\n setSearchQuery: (query: string) => void\n groupBy?: string\n setGroupBy?: (field: string | undefined) => void\n}\n\nconst PRIORITY_COLORS: Record<NonNullable<PipelineItem['priority']>, string> = {\n low: 'bg-muted text-muted-foreground',\n medium: 'bg-warning/15 text-warning',\n high: 'bg-destructive/15 text-destructive',\n}\n\nconst PipelineContext = React.createContext<PipelineContextValue | null>(null)\n\nexport function usePipeline() {\n const context = React.useContext(PipelineContext)\n if (!context) {\n throw new Error('usePipeline must be used within a Pipeline component')\n }\n return context\n}\n\n// Main Pipeline Component\nexport interface PipelineProps extends React.HTMLAttributes<HTMLDivElement> {\n stages: PipelineStage[]\n items: PipelineItem[]\n view?: PipelineView\n defaultView?: PipelineView\n onViewChange?: (view: PipelineView) => void\n selectedItems?: string[]\n defaultSelectedItems?: string[]\n onSelectedItemsChange?: (ids: string[]) => void\n searchQuery?: string\n defaultSearchQuery?: string\n onSearchQueryChange?: (query: string) => void\n groupBy?: string\n defaultGroupBy?: string\n onGroupByChange?: (field: string | undefined) => void\n onItemMove?: (itemId: string, fromStageId: string, toStageId: string) => void\n onItemClick?: (item: PipelineItem) => void\n onItemAdd?: (stageId: string) => void\n onItemEdit?: (item: PipelineItem) => void\n onItemDelete?: (itemId: string) => void\n children?: React.ReactNode\n}\n\nconst Pipeline = React.forwardRef<HTMLDivElement, PipelineProps>(\n (\n {\n className,\n stages,\n items,\n defaultView = 'kanban',\n view: controlledView,\n onViewChange,\n selectedItems: controlledSelectedItems,\n defaultSelectedItems = [],\n onSelectedItemsChange,\n searchQuery: controlledSearchQuery,\n defaultSearchQuery = '',\n onSearchQueryChange,\n groupBy: controlledGroupBy,\n defaultGroupBy = '',\n onGroupByChange,\n onItemMove,\n onItemClick,\n onItemAdd,\n onItemEdit,\n onItemDelete,\n children,\n ...props\n },\n ref\n ) => {\n const [view, setViewState] = useControllableState<PipelineView>({\n value: controlledView,\n defaultValue: defaultView,\n onChange: onViewChange,\n })\n const [selectedItems, setSelectedItemsState] = useControllableState<string[]>({\n value: controlledSelectedItems,\n defaultValue: defaultSelectedItems,\n onChange: onSelectedItemsChange,\n })\n const [searchQuery, setSearchQueryState] = useControllableState<string>({\n value: controlledSearchQuery,\n defaultValue: defaultSearchQuery,\n onChange: onSearchQueryChange,\n })\n const [groupByValue, setGroupByValueState] = useControllableState<string>({\n value: controlledGroupBy,\n defaultValue: defaultGroupBy,\n onChange: (field) => onGroupByChange?.(field || undefined),\n })\n const groupBy = groupByValue || undefined\n\n const filteredItems = React.useMemo(() => {\n if (!searchQuery) return items\n const query = searchQuery.toLowerCase()\n return items.filter(\n (item) =>\n item.title.toLowerCase().includes(query) ||\n item.company?.toLowerCase().includes(query) ||\n item.owner?.name.toLowerCase().includes(query)\n )\n }, [items, searchQuery])\n\n const contextValue = React.useMemo<PipelineContextValue>(\n () => ({\n view,\n setView: (nextView) => setViewState(nextView),\n stages,\n items: filteredItems,\n selectedItems,\n setSelectedItems: (ids) => setSelectedItemsState(ids),\n onItemMove,\n onItemClick,\n onItemAdd,\n onItemEdit,\n onItemDelete,\n searchQuery,\n setSearchQuery: (query) => setSearchQueryState(query),\n groupBy,\n setGroupBy: (field) => setGroupByValueState(field ?? ''),\n }),\n [\n view,\n stages,\n filteredItems,\n selectedItems,\n searchQuery,\n groupBy,\n onItemMove,\n onItemClick,\n onItemAdd,\n onItemEdit,\n onItemDelete,\n setViewState,\n setSelectedItemsState,\n setSearchQueryState,\n setGroupByValueState,\n ]\n )\n\n return (\n <PipelineContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={cn('flex h-full flex-col', className)}\n {...props}\n >\n {children}\n </div>\n </PipelineContext.Provider>\n )\n }\n)\nPipeline.displayName = 'Pipeline'\n\n// Pipeline Header Component\nexport interface PipelineHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n showViewSelector?: boolean\n showSearch?: boolean\n showAddButton?: boolean\n addButtonLabel?: string\n onAdd?: () => void\n title?: string\n actions?: React.ReactNode\n}\n\nconst PipelineHeader = React.forwardRef<HTMLDivElement, PipelineHeaderProps>(\n (\n {\n className,\n showViewSelector = true,\n showSearch = true,\n showAddButton = true,\n addButtonLabel,\n onAdd,\n title,\n actions,\n ...props\n },\n ref\n ) => {\n const { view, setView, searchQuery, setSearchQuery, selectedItems } = usePipeline()\n const { t } = useFormatters()\n\n const viewOptions: { value: PipelineView; icon: React.ReactNode; label: string }[] = [\n { value: 'kanban', icon: <LayoutGrid className=\"h-4 w-4\" />, label: t('pipeline.kanban') },\n { value: 'list', icon: <List className=\"h-4 w-4\" />, label: t('calendar.agenda') },\n { value: 'table', icon: <Table2 className=\"h-4 w-4\" />, label: t('pipeline.table') },\n { value: 'timeline', icon: <Calendar className=\"h-4 w-4\" />, label: t('pipeline.timeline') },\n ]\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-wrap items-center justify-between gap-4 border-b bg-background p-4',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center gap-4\">\n {title && <h2 className=\"text-lg font-semibold\">{title}</h2>}\n {selectedItems.length > 0 && (\n <Badge variant=\"secondary\">{t('pipeline.selected', { count: selectedItems.length })}</Badge>\n )}\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n {showSearch && (\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder={t('common.search')}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"h-9 w-[200px] pl-8\"\n />\n </div>\n )}\n\n {showViewSelector && (\n <div className=\"flex items-center rounded-md border bg-muted/50 p-1\">\n {viewOptions.map((option) => (\n <Button\n key={option.value}\n variant={view === option.value ? 'secondary' : 'ghost'}\n size=\"sm\"\n className=\"h-7 px-2\"\n onClick={() => setView(option.value)}\n title={option.label}\n >\n {option.icon}\n </Button>\n ))}\n </div>\n )}\n\n <Button variant=\"outline\" size=\"sm\" className=\"h-9\">\n <Filter className=\"mr-2 h-4 w-4\" />\n {t('common.filter')}\n </Button>\n\n {actions}\n\n {showAddButton && (\n <Button size=\"sm\" className=\"h-9\" onClick={onAdd}>\n <Plus className=\"mr-2 h-4 w-4\" />\n {addButtonLabel || t('common.create')}\n </Button>\n )}\n </div>\n </div>\n )\n }\n)\nPipelineHeader.displayName = 'PipelineHeader'\n\n// Pipeline Content Component\nexport interface PipelineContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode\n}\n\nconst PipelineContent = React.forwardRef<HTMLDivElement, PipelineContentProps>(\n ({ className, children, ...props }, ref) => {\n const { view } = usePipeline()\n\n return (\n <div ref={ref} className={cn('flex-1 overflow-hidden', className)} {...props}>\n {children || (\n <>\n {view === 'kanban' && <PipelineKanban />}\n {view === 'list' && <PipelineList />}\n {view === 'table' && <PipelineTable />}\n {view === 'timeline' && <PipelineTimeline />}\n </>\n )}\n </div>\n )\n }\n)\nPipelineContent.displayName = 'PipelineContent'\n\n// Pipeline Kanban View\nexport interface PipelineKanbanProps extends React.HTMLAttributes<HTMLDivElement> {\n columnWidth?: number\n showAddButton?: boolean\n renderItem?: (item: PipelineItem, stageId: string) => React.ReactNode\n}\n\n// Sortable Card Component\ninterface SortablePipelineCardProps {\n item: PipelineItem\n stageId: string\n renderItem?: (item: PipelineItem, stageId: string) => React.ReactNode\n defaultRenderItem: (item: PipelineItem) => React.ReactNode\n onItemClick?: (item: PipelineItem) => void\n}\n\nconst SortablePipelineCard = React.memo(function SortablePipelineCard({\n item,\n stageId,\n renderItem,\n defaultRenderItem,\n onItemClick,\n}: SortablePipelineCardProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging: isSortableDragging,\n } = useSortable({\n id: item.id,\n data: {\n type: 'item',\n item,\n stageId,\n },\n })\n\n const style: React.CSSProperties = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isSortableDragging ? 0.5 : 1,\n cursor: 'grab',\n }\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n {...attributes}\n {...listeners}\n onClick={(e) => {\n e.stopPropagation()\n onItemClick?.(item)\n }}\n >\n {renderItem ? renderItem(item, stageId) : defaultRenderItem(item)}\n </div>\n )\n})\n\n// Droppable Column Component\ninterface DroppableColumnProps {\n stage: PipelineStage\n items: PipelineItem[]\n columnWidth: number\n showAddButton: boolean\n onItemAdd?: (stageId: string) => void\n onItemClick?: (item: PipelineItem) => void\n renderItem?: (item: PipelineItem, stageId: string) => React.ReactNode\n defaultRenderItem: (item: PipelineItem) => React.ReactNode\n getStageTotal: (stageId: string) => number\n formatCurrency: (value: number, options?: Intl.NumberFormatOptions) => string\n t: (key: string) => string\n}\n\nconst DroppableColumn = React.memo(function DroppableColumn({\n stage,\n items,\n columnWidth,\n showAddButton,\n onItemAdd,\n onItemClick,\n renderItem,\n defaultRenderItem,\n getStageTotal,\n formatCurrency,\n t,\n}: DroppableColumnProps) {\n const itemIds = React.useMemo(() => items.map((item) => item.id), [items])\n\n const isOverWipLimit = stage.maxItems !== undefined && items.length > stage.maxItems\n\n return (\n <div\n className=\"flex shrink-0 flex-col rounded-lg bg-muted/30\"\n style={{ width: columnWidth }}\n >\n {/* Stage Color Bar */}\n {stage.color && (\n <div\n className=\"h-[3px] rounded-t-lg\"\n style={{ backgroundColor: stage.color }}\n />\n )}\n\n {/* Stage Header */}\n <div className=\"flex items-center justify-between p-3 border-b\">\n <div className=\"flex items-center gap-2\">\n {stage.color && (\n <div\n className=\"h-3 w-3 rounded-full\"\n style={{ backgroundColor: stage.color }}\n />\n )}\n <h3 className=\"text-sm font-semibold\">{stage.name}</h3>\n <Badge variant={isOverWipLimit ? 'destructive' : 'secondary'} className=\"text-xs\">\n {items.length}{stage.maxItems !== undefined ? `/${stage.maxItems}` : ''}\n </Badge>\n </div>\n <div className=\"flex items-center gap-1\">\n {showAddButton && onItemAdd && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6\"\n onClick={() => onItemAdd(stage.id)}\n >\n <Plus className=\"h-4 w-4\" />\n </Button>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-6 w-6\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem>{t('common.edit')}</DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem className=\"text-destructive\">\n {t('common.delete')}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n\n {/* Stage Total */}\n <div className=\"px-3 py-2 text-xs text-muted-foreground border-b\">\n {t('deal.value')}:{' '}\n <span className=\"font-medium text-foreground\">\n {formatCurrency(getStageTotal(stage.id), {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n })}\n </span>\n </div>\n\n {/* Stage Items */}\n <ScrollArea className=\"flex-1\">\n <div className=\"flex flex-col gap-2 p-2 min-h-[100px]\">\n <SortableContext items={itemIds} strategy={verticalListSortingStrategy}>\n {items.map((item) => (\n <SortablePipelineCard\n key={item.id}\n item={item}\n stageId={stage.id}\n renderItem={renderItem}\n defaultRenderItem={defaultRenderItem}\n onItemClick={onItemClick}\n />\n ))}\n </SortableContext>\n {items.length === 0 && (\n <div className=\"flex flex-col items-center justify-center rounded-lg border-2 border-dashed border-muted-foreground/20 py-8 text-center transition-colors\">\n <p className=\"text-sm text-muted-foreground\">{t('common.noData')}</p>\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n )\n})\n\nconst PipelineKanban = React.forwardRef<HTMLDivElement, PipelineKanbanProps>(\n ({ className, columnWidth = 320, showAddButton = true, renderItem, ...props }, ref) => {\n const { stages, items, onItemMove, onItemClick, onItemAdd } = usePipeline()\n const { formatCurrency, formatDate, t } = useFormatters()\n const [activeItem, setActiveItem] = React.useState<PipelineItem | null>(null)\n\n // Sensors with activation constraint for better UX\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n delay: 150,\n tolerance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const itemsByStage = React.useMemo(() => {\n const grouped: Record<string, PipelineItem[]> = {}\n stages.forEach((stage) => {\n grouped[stage.id] = items.filter((item) => item.stageId === stage.id)\n })\n return grouped\n }, [stages, items])\n\n const getStageTotal = React.useCallback(\n (stageId: string) => {\n return itemsByStage[stageId]?.reduce((sum, item) => sum + (item.value || 0), 0) || 0\n },\n [itemsByStage]\n )\n\n const defaultRenderItem = React.useCallback(\n (item: PipelineItem) => (\n <Card className=\"cursor-pointer transition-all hover:shadow-md\">\n <CardContent className=\"p-3 space-y-2\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n <h4 className=\"font-medium text-sm truncate\">{item.title}</h4>\n {item.company && (\n <p className=\"text-xs text-muted-foreground truncate\">{item.company}</p>\n )}\n </div>\n {item.priority && (\n <Badge className={cn('text-[10px] ml-2', PRIORITY_COLORS[item.priority])}>\n {item.priority}\n </Badge>\n )}\n </div>\n\n {item.value !== undefined && (\n <div className=\"text-sm font-semibold\">\n {formatCurrency(item.value, { minimumFractionDigits: 0, maximumFractionDigits: 0 })}\n </div>\n )}\n\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n {item.dueDate && <span>{formatDate(item.dueDate)}</span>}\n {item.owner && (\n <span className=\"truncate max-w-[100px]\">{item.owner.name}</span>\n )}\n </div>\n\n {item.probability !== undefined && (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-1 h-1.5 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full\"\n style={{ width: `${item.probability}%` }}\n />\n </div>\n <span className=\"text-[10px] text-muted-foreground\">{item.probability}%</span>\n </div>\n )}\n </CardContent>\n </Card>\n ),\n [formatCurrency, formatDate]\n )\n\n const handleDragStart = React.useCallback(\n (event: DragStartEvent) => {\n const { active } = event\n const activeData = active.data.current\n if (activeData?.item) {\n setActiveItem(activeData.item as PipelineItem)\n }\n },\n []\n )\n\n const handleDragOver = React.useCallback((_event: DragOverEvent) => {\n // Handle drag over for visual feedback if needed\n }, [])\n\n const handleDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event\n setActiveItem(null)\n\n if (!over) return\n\n const activeData = active.data.current\n const overData = over.data.current\n\n if (!activeData) return\n\n const activeItem = activeData.item as PipelineItem\n const fromStageId = activeData.stageId as string\n\n // Determine target stage\n let toStageId: string | null = null\n\n if (overData?.type === 'item') {\n // Dropped over another item - get that item's stage\n toStageId = overData.stageId as string\n } else if (overData?.type === 'column') {\n // Dropped directly on a column\n toStageId = overData.stageId as string\n } else {\n // Check if dropped over a column by finding the stage\n const overItem = items.find((item) => item.id === over.id)\n if (overItem) {\n toStageId = overItem.stageId\n }\n }\n\n if (toStageId && fromStageId !== toStageId) {\n onItemMove?.(activeItem.id, fromStageId, toStageId)\n }\n },\n [items, onItemMove]\n )\n\n const sortedStages = React.useMemo(\n () => [...stages].sort((a, b) => a.order - b.order),\n [stages]\n )\n\n return (\n <div ref={ref} className={cn('h-full', className)} {...props}>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCorners}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n >\n <ScrollArea className=\"h-full\">\n <div className=\"flex gap-4 p-4 h-full\">\n {sortedStages.map((stage) => (\n <DroppableColumn\n key={stage.id}\n stage={stage}\n items={itemsByStage[stage.id] || []}\n columnWidth={columnWidth}\n showAddButton={showAddButton}\n onItemAdd={onItemAdd}\n onItemClick={onItemClick}\n renderItem={renderItem}\n defaultRenderItem={defaultRenderItem}\n getStageTotal={getStageTotal}\n formatCurrency={formatCurrency}\n t={t}\n />\n ))}\n </div>\n <ScrollBar orientation=\"horizontal\" />\n </ScrollArea>\n\n {/* Drag Overlay for smooth drag preview */}\n <DragOverlay dropAnimation={{\n duration: 200,\n easing: 'cubic-bezier(0.18, 0.67, 0.6, 1.22)',\n }}>\n {activeItem ? (\n <div className=\"opacity-90 shadow-xl rotate-1 scale-[1.02]\">\n {renderItem ? renderItem(activeItem, activeItem.stageId) : defaultRenderItem(activeItem)}\n </div>\n ) : null}\n </DragOverlay>\n </DndContext>\n </div>\n )\n }\n)\nPipelineKanban.displayName = 'PipelineKanban'\n\n// Pipeline List View\nexport interface PipelineListProps extends React.HTMLAttributes<HTMLDivElement> {\n renderItem?: (item: PipelineItem) => React.ReactNode\n}\n\nconst PipelineList = React.forwardRef<HTMLDivElement, PipelineListProps>(\n ({ className, renderItem, ...props }, ref) => {\n const { stages, items, selectedItems, setSelectedItems, onItemClick, onItemEdit, onItemDelete } =\n usePipeline()\n const { formatCurrency, formatDate, t } = useFormatters()\n\n const itemsByStage = React.useMemo(() => {\n const grouped: Record<string, PipelineItem[]> = {}\n stages.forEach((stage) => {\n grouped[stage.id] = items.filter((item) => item.stageId === stage.id)\n })\n return grouped\n }, [stages, items])\n\n const toggleSelect = (itemId: string) => {\n if (selectedItems.includes(itemId)) {\n setSelectedItems(selectedItems.filter((id) => id !== itemId))\n } else {\n setSelectedItems([...selectedItems, itemId])\n }\n }\n\n const priorityColors = {\n low: 'bg-muted text-muted-foreground',\n medium: 'bg-warning/15 text-warning',\n high: 'bg-destructive/15 text-destructive',\n }\n\n const defaultRenderItem = (item: PipelineItem, stage: PipelineStage) => (\n <div\n className={cn(\n 'flex items-center gap-4 rounded-lg border bg-card p-4 transition-colors hover:bg-muted/50',\n selectedItems.includes(item.id) && 'bg-muted/50 border-primary'\n )}\n >\n <Checkbox\n checked={selectedItems.includes(item.id)}\n onCheckedChange={() => toggleSelect(item.id)}\n />\n <GripVertical className=\"h-4 w-4 text-muted-foreground cursor-grab\" />\n <div className=\"flex-1 min-w-0 cursor-pointer\" onClick={() => onItemClick?.(item)}>\n <div className=\"flex items-center gap-2 mb-1\">\n <h4 className=\"font-medium truncate\">{item.title}</h4>\n {item.priority && (\n <Badge className={cn('text-xs', priorityColors[item.priority])}>\n {item.priority}\n </Badge>\n )}\n </div>\n <div className=\"flex items-center gap-4 text-sm text-muted-foreground\">\n {item.company && <span>{item.company}</span>}\n {item.owner && <span>{item.owner.name}</span>}\n </div>\n </div>\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2\">\n {stage.color && (\n <div\n className=\"h-2 w-2 rounded-full\"\n style={{ backgroundColor: stage.color }}\n />\n )}\n <span className=\"text-sm\">{stage.name}</span>\n </div>\n {item.value !== undefined && (\n <div className=\"font-semibold min-w-[100px] text-right\">\n {formatCurrency(item.value, { minimumFractionDigits: 0, maximumFractionDigits: 0 })}\n </div>\n )}\n {item.dueDate && (\n <div className=\"text-sm text-muted-foreground min-w-[100px]\">\n {formatDate(item.dueDate)}\n </div>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => onItemEdit?.(item)}>\n {t('common.edit')}\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className=\"text-destructive\"\n onClick={() => onItemDelete?.(item.id)}\n >\n {t('common.delete')}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n )\n\n return (\n <div ref={ref} className={cn('h-full', className)} {...props}>\n <ScrollArea className=\"h-full\">\n <div className=\"p-4 space-y-6\">\n {stages\n .sort((a, b) => a.order - b.order)\n .map((stage) => (\n <div key={stage.id}>\n <div className=\"flex items-center gap-2 mb-3\">\n {stage.color && (\n <div\n className=\"h-3 w-3 rounded-full\"\n style={{ backgroundColor: stage.color }}\n />\n )}\n <h3 className=\"font-semibold\">{stage.name}</h3>\n <Badge variant=\"secondary\">{itemsByStage[stage.id]?.length || 0}</Badge>\n </div>\n <div className=\"space-y-2\">\n {itemsByStage[stage.id]?.map((item) =>\n renderItem ? (\n <div key={item.id}>{renderItem(item)}</div>\n ) : (\n <div key={item.id}>{defaultRenderItem(item, stage)}</div>\n )\n )}\n {itemsByStage[stage.id]?.length === 0 && (\n <div className=\"py-4 text-center text-sm text-muted-foreground border rounded-lg\">\n {t('common.noData')}\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n </ScrollArea>\n </div>\n )\n }\n)\nPipelineList.displayName = 'PipelineList'\n\n// Pipeline Table View\nexport interface PipelineTableProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst PipelineTable = React.forwardRef<HTMLDivElement, PipelineTableProps>(\n ({ className, ...props }, ref) => {\n const {\n stages,\n items,\n selectedItems,\n setSelectedItems,\n onItemClick,\n onItemEdit,\n onItemDelete,\n } = usePipeline()\n const { formatCurrency, formatDate, t } = useFormatters()\n\n const stageMap = React.useMemo(() => {\n const map: Record<string, PipelineStage> = {}\n stages.forEach((stage) => {\n map[stage.id] = stage\n })\n return map\n }, [stages])\n\n const toggleSelectAll = () => {\n if (selectedItems.length === items.length) {\n setSelectedItems([])\n } else {\n setSelectedItems(items.map((item) => item.id))\n }\n }\n\n const toggleSelect = (itemId: string) => {\n if (selectedItems.includes(itemId)) {\n setSelectedItems(selectedItems.filter((id) => id !== itemId))\n } else {\n setSelectedItems([...selectedItems, itemId])\n }\n }\n\n const priorityColors = {\n low: 'bg-muted text-muted-foreground',\n medium: 'bg-warning/15 text-warning',\n high: 'bg-destructive/15 text-destructive',\n }\n\n return (\n <div ref={ref} className={cn('h-full', className)} {...props}>\n <ScrollArea className=\"h-full\">\n <div className=\"p-4\">\n <div className=\"rounded-lg border\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"w-[40px] p-3\">\n <Checkbox\n checked={selectedItems.length === items.length && items.length > 0}\n onCheckedChange={toggleSelectAll}\n />\n </th>\n <th className=\"text-left p-3 font-medium text-sm\">{t('pipeline.title')}</th>\n <th className=\"text-left p-3 font-medium text-sm\">{t('pipeline.company')}</th>\n <th className=\"text-left p-3 font-medium text-sm\">{t('deal.stage')}</th>\n <th className=\"text-right p-3 font-medium text-sm\">{t('deal.value')}</th>\n <th className=\"text-center p-3 font-medium text-sm\">{t('deal.probability')}</th>\n <th className=\"text-left p-3 font-medium text-sm\">{t('pipeline.owner')}</th>\n <th className=\"text-left p-3 font-medium text-sm\">{t('deal.closeDate')}</th>\n <th className=\"text-left p-3 font-medium text-sm\">{t('pipeline.priority')}</th>\n <th className=\"w-[60px] p-3\"></th>\n </tr>\n </thead>\n <tbody>\n {items.map((item) => {\n const stage = stageMap[item.stageId]\n return (\n <tr\n key={item.id}\n className={cn(\n 'border-b transition-colors hover:bg-muted/50',\n selectedItems.includes(item.id) && 'bg-muted/50'\n )}\n >\n <td className=\"p-3\">\n <Checkbox\n checked={selectedItems.includes(item.id)}\n onCheckedChange={() => toggleSelect(item.id)}\n />\n </td>\n <td\n className=\"p-3 font-medium cursor-pointer\"\n onClick={() => onItemClick?.(item)}\n >\n {item.title}\n </td>\n <td className=\"p-3 text-muted-foreground\">{item.company}</td>\n <td className=\"p-3\">\n <div className=\"flex items-center gap-2\">\n {stage?.color && (\n <div\n className=\"h-2 w-2 rounded-full\"\n style={{ backgroundColor: stage.color }}\n />\n )}\n <span>{stage?.name}</span>\n </div>\n </td>\n <td className=\"p-3 text-right font-medium\">\n {item.value !== undefined\n ? formatCurrency(item.value, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n })\n : '-'}\n </td>\n <td className=\"p-3 text-center\">\n {item.probability !== undefined ? `${item.probability}%` : '-'}\n </td>\n <td className=\"p-3 text-muted-foreground\">{item.owner?.name || '-'}</td>\n <td className=\"p-3 text-muted-foreground\">\n {item.dueDate ? formatDate(item.dueDate) : '-'}\n </td>\n <td className=\"p-3\">\n {item.priority && (\n <Badge className={cn('text-xs', priorityColors[item.priority])}>\n {item.priority}\n </Badge>\n )}\n </td>\n <td className=\"p-3\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => onItemEdit?.(item)}>\n {t('common.edit')}\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className=\"text-destructive\"\n onClick={() => onItemDelete?.(item.id)}\n >\n {t('common.delete')}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </td>\n </tr>\n )\n })}\n {items.length === 0 && (\n <tr>\n <td colSpan={10} className=\"p-8 text-center text-muted-foreground\">\n {t('common.noData')}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n </ScrollArea>\n </div>\n )\n }\n)\nPipelineTable.displayName = 'PipelineTable'\n\n// Pipeline Timeline View\nexport interface PipelineTimelineProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst PipelineTimeline = React.forwardRef<HTMLDivElement, PipelineTimelineProps>(\n ({ className, ...props }, ref) => {\n const { stages, items, onItemClick } = usePipeline()\n const { formatCurrency, formatDate, t } = useFormatters()\n\n // Group items by due date\n const itemsByDate = React.useMemo(() => {\n const grouped: Record<string, PipelineItem[]> = {}\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n\n items\n .filter((item) => item.dueDate)\n .sort((a, b) => {\n const dateA = new Date(a.dueDate!)\n const dateB = new Date(b.dueDate!)\n return dateA.getTime() - dateB.getTime()\n })\n .forEach((item) => {\n const date = new Date(item.dueDate!)\n const dateKey = date.toISOString().split('T')[0]\n if (!grouped[dateKey]) {\n grouped[dateKey] = []\n }\n grouped[dateKey].push(item)\n })\n\n return grouped\n }, [items])\n\n const stageMap = React.useMemo(() => {\n const map: Record<string, PipelineStage> = {}\n stages.forEach((stage) => {\n map[stage.id] = stage\n })\n return map\n }, [stages])\n\n const dateKeys = Object.keys(itemsByDate).sort()\n const today = new Date().toISOString().split('T')[0]\n\n const getDateLabel = (dateKey: string) => {\n const date = new Date(dateKey)\n const todayDate = new Date()\n todayDate.setHours(0, 0, 0, 0)\n const diff = Math.ceil((date.getTime() - todayDate.getTime()) / (1000 * 60 * 60 * 24))\n\n if (diff === 0) return t('date.today')\n if (diff === 1) return t('date.tomorrow')\n if (diff === -1) return t('date.yesterday')\n return formatDate(date, 'EEEE, MMMM d')\n }\n\n const isOverdue = (dateKey: string) => {\n return dateKey < today\n }\n\n return (\n <div ref={ref} className={cn('h-full', className)} {...props}>\n <ScrollArea className=\"h-full\">\n <div className=\"p-4\">\n {dateKeys.length === 0 ? (\n <div className=\"py-12 text-center text-muted-foreground\">{t('common.noData')}</div>\n ) : (\n <div className=\"relative space-y-8 before:absolute before:inset-0 before:ml-5 before:h-full before:w-0.5 before:-translate-x-px before:bg-border md:before:mx-auto md:before:translate-x-0\">\n {dateKeys.map((dateKey) => (\n <div key={dateKey} className=\"relative flex items-start gap-6 md:gap-12\">\n {/* Timeline marker */}\n <div className=\"flex items-center justify-center w-10 h-10 rounded-full bg-background border-2 border-muted shrink-0 md:order-1 md:mx-auto\">\n <div\n className={cn(\n 'w-3 h-3 rounded-full',\n isOverdue(dateKey) ? 'bg-destructive' : 'bg-primary'\n )}\n />\n </div>\n\n {/* Date label */}\n <div className=\"hidden md:block md:w-1/2 md:text-right md:pr-8\">\n <span\n className={cn(\n 'font-semibold',\n isOverdue(dateKey) && 'text-destructive'\n )}\n >\n {getDateLabel(dateKey)}\n </span>\n <span className=\"block text-sm text-muted-foreground\">\n {t('pipeline.items', { count: itemsByDate[dateKey].length })}\n </span>\n </div>\n\n {/* Items */}\n <div className=\"flex-1 md:w-1/2 md:pl-8\">\n <div className=\"md:hidden mb-2\">\n <span\n className={cn(\n 'font-semibold',\n isOverdue(dateKey) && 'text-destructive'\n )}\n >\n {getDateLabel(dateKey)}\n </span>\n </div>\n <div className=\"space-y-3\">\n {itemsByDate[dateKey].map((item) => {\n const stage = stageMap[item.stageId]\n return (\n <Card\n key={item.id}\n className=\"cursor-pointer hover:shadow-md transition-shadow\"\n onClick={() => onItemClick?.(item)}\n >\n <CardContent className=\"p-4\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"font-medium truncate\">{item.title}</h4>\n {item.company && (\n <p className=\"text-sm text-muted-foreground\">\n {item.company}\n </p>\n )}\n </div>\n {item.value !== undefined && (\n <div className=\"font-semibold\">\n {formatCurrency(item.value, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n })}\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-3 mt-3 text-sm\">\n {stage && (\n <div className=\"flex items-center gap-1.5\">\n {stage.color && (\n <div\n className=\"h-2 w-2 rounded-full\"\n style={{ backgroundColor: stage.color }}\n />\n )}\n <span>{stage.name}</span>\n </div>\n )}\n {item.owner && (\n <span className=\"text-muted-foreground\">{item.owner.name}</span>\n )}\n </div>\n </CardContent>\n </Card>\n )\n })}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n )\n }\n)\nPipelineTimeline.displayName = 'PipelineTimeline'\n\n// Pipeline Summary/Footer Component\nexport interface PipelineSummaryProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst PipelineSummary = React.forwardRef<HTMLDivElement, PipelineSummaryProps>(\n ({ className, ...props }, ref) => {\n const { stages, items } = usePipeline()\n const { formatCurrency, t } = useFormatters()\n\n const totalValue = items.reduce((sum, item) => sum + (item.value || 0), 0)\n const totalItems = items.length\n\n const stageStats = React.useMemo(() => {\n return stages.map((stage) => {\n const stageItems = items.filter((item) => item.stageId === stage.id)\n const value = stageItems.reduce((sum, item) => sum + (item.value || 0), 0)\n return {\n ...stage,\n count: stageItems.length,\n value,\n }\n })\n }, [stages, items])\n\n return (\n <div\n ref={ref}\n className={cn('border-t bg-muted/30 px-4 py-3', className)}\n {...props}\n >\n <div className=\"flex flex-wrap items-center justify-between gap-4\">\n <div className=\"flex items-center gap-6\">\n <div>\n <span className=\"text-sm text-muted-foreground\">{t('common.total')}</span>\n <div className=\"font-semibold\">\n {formatCurrency(totalValue, { minimumFractionDigits: 0, maximumFractionDigits: 0 })}\n </div>\n </div>\n <div>\n <span className=\"text-sm text-muted-foreground\">{t('common.items')}</span>\n <div className=\"font-semibold\">{totalItems}</div>\n </div>\n </div>\n <div className=\"flex items-center gap-4\">\n {stageStats.map((stage) => (\n <div key={stage.id} className=\"flex items-center gap-2 text-sm\">\n {stage.color && (\n <div\n className=\"h-2 w-2 rounded-full\"\n style={{ backgroundColor: stage.color }}\n />\n )}\n <span className=\"text-muted-foreground\">{stage.name}:</span>\n <span className=\"font-medium\">{stage.count}</span>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n }\n)\nPipelineSummary.displayName = 'PipelineSummary'\n\nexport {\n Pipeline,\n PipelineHeader,\n PipelineContent,\n PipelineKanban,\n PipelineList,\n PipelineTable,\n PipelineTimeline,\n PipelineSummary,\n}\n","import { cn } from '@/utils/cn'\nimport type { RecordFieldValue } from './record-types'\n\nexport interface RecordHeaderProps {\n title: string\n subtitle?: string\n avatar?: React.ReactNode\n status?: React.ReactNode\n actions?: React.ReactNode\n fields?: RecordFieldValue[]\n className?: string\n}\n\nexport function RecordHeader({\n title,\n subtitle,\n avatar,\n status,\n actions,\n fields,\n className,\n}: RecordHeaderProps) {\n return (\n <div className={cn('border-b bg-background', className)}>\n {/* Top row */}\n <div className=\"flex items-start justify-between gap-4 px-6 pt-5 pb-3\">\n <div className=\"flex items-start gap-3 min-w-0\">\n {avatar && (\n <div className=\"shrink-0\">{avatar}</div>\n )}\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <h1 className=\"truncate text-lg font-semibold\">{title}</h1>\n {status}\n </div>\n {subtitle && (\n <p className=\"truncate text-sm text-muted-foreground\">{subtitle}</p>\n )}\n </div>\n </div>\n {actions && (\n <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>\n )}\n </div>\n\n {/* Field values */}\n {fields && fields.length > 0 && (\n <div className=\"flex flex-wrap gap-x-6 gap-y-1.5 border-t px-6 py-2.5\">\n {fields.map((field) => (\n <div key={field.id} className=\"flex items-center gap-1.5 text-sm\">\n <span className=\"text-muted-foreground\">{field.label}:</span>\n <span className=\"font-medium\">{field.value}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import {\n Mail,\n Phone,\n MessageSquare,\n Calendar,\n CheckCircle2,\n Edit3,\n Activity,\n} from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { ScrollArea } from '@/components/ui/scroll-area'\nimport type { RecordActivity, RecordActivityType } from './record-types'\n\nconst ACTIVITY_ICONS: Record<RecordActivityType, React.ReactNode> = {\n note: <MessageSquare className=\"h-3.5 w-3.5\" />,\n email: <Mail className=\"h-3.5 w-3.5\" />,\n call: <Phone className=\"h-3.5 w-3.5\" />,\n meeting: <Calendar className=\"h-3.5 w-3.5\" />,\n task: <CheckCircle2 className=\"h-3.5 w-3.5\" />,\n update: <Edit3 className=\"h-3.5 w-3.5\" />,\n custom: <Activity className=\"h-3.5 w-3.5\" />,\n}\n\nconst ACTIVITY_COLORS: Record<RecordActivityType, string> = {\n note: 'bg-blue-100 text-blue-600',\n email: 'bg-purple-100 text-purple-600',\n call: 'bg-green-100 text-green-600',\n meeting: 'bg-amber-100 text-amber-600',\n task: 'bg-emerald-100 text-emerald-600',\n update: 'bg-muted text-muted-foreground',\n custom: 'bg-muted text-muted-foreground',\n}\n\nfunction getInitials(name: string): string {\n return name.split(' ').map((n) => n[0]).join('').toUpperCase().slice(0, 2)\n}\n\n\nfunction groupByDate(activities: RecordActivity[]): { date: string; items: RecordActivity[] }[] {\n const groups = new Map<string, RecordActivity[]>()\n for (const activity of activities) {\n const d = activity.timestamp instanceof Date ? activity.timestamp : new Date(activity.timestamp)\n const key = d.toLocaleDateString()\n const existing = groups.get(key) ?? []\n existing.push(activity)\n groups.set(key, existing)\n }\n return Array.from(groups.entries()).map(([date, items]) => ({ date, items }))\n}\n\nexport interface RecordTimelineProps {\n activities: RecordActivity[]\n className?: string\n}\n\nexport function RecordTimeline({ activities, className }: RecordTimelineProps) {\n const { t } = useLocale()\n\n const formatTs = (timestamp: string | Date): string => {\n const d = timestamp instanceof Date ? timestamp : new Date(timestamp)\n const now = new Date()\n const diff = now.getTime() - d.getTime()\n const mins = Math.floor(diff / 60000)\n if (mins < 1) return t('record.justNow')\n if (mins < 60) return t('record.minutesAgo', { count: mins })\n const hours = Math.floor(mins / 60)\n if (hours < 24) return t('record.hoursAgo', { count: hours })\n const days = Math.floor(hours / 24)\n if (days < 7) return t('record.daysAgo', { count: days })\n return d.toLocaleDateString()\n }\n\n const groups = groupByDate(\n [...activities].sort((a, b) => {\n const da = a.timestamp instanceof Date ? a.timestamp : new Date(a.timestamp)\n const db = b.timestamp instanceof Date ? b.timestamp : new Date(b.timestamp)\n return db.getTime() - da.getTime()\n })\n )\n\n if (activities.length === 0) {\n return (\n <div className=\"flex items-center justify-center py-8 text-sm text-muted-foreground\">\n {t('record.noActivity')}\n </div>\n )\n }\n\n return (\n <ScrollArea className={cn('flex-1', className)}>\n <div className=\"space-y-6 p-4\">\n {groups.map((group) => (\n <div key={group.date}>\n <p className=\"mb-3 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n {group.date}\n </p>\n <div className=\"space-y-3\">\n {group.items.map((activity) => (\n <div key={activity.id} className=\"flex gap-3\">\n {/* Icon */}\n <div className={cn('flex h-7 w-7 shrink-0 items-center justify-center rounded-full', ACTIVITY_COLORS[activity.type])}>\n {activity.icon ?? ACTIVITY_ICONS[activity.type]}\n </div>\n\n {/* Content */}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{activity.title}</span>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatTs(activity.timestamp)}\n </span>\n </div>\n {activity.description && (\n <p className=\"mt-0.5 text-xs text-muted-foreground line-clamp-2\">\n {activity.description}\n </p>\n )}\n {activity.user && (\n <div className=\"mt-1 flex items-center gap-1.5\">\n <Avatar className=\"h-4 w-4\">\n <AvatarImage src={activity.user.avatar} alt={activity.user.name} />\n <AvatarFallback className=\"text-[7px]\">{getInitials(activity.user.name)}</AvatarFallback>\n </Avatar>\n <span className=\"text-[10px] text-muted-foreground\">{activity.user.name}</span>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n </ScrollArea>\n )\n}\n","import { ChevronRight, Link2 } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { ScrollArea } from '@/components/ui/scroll-area'\nimport type { RecordRelatedEntity } from './record-types'\n\nexport interface RecordRelatedProps {\n entities: RecordRelatedEntity[]\n className?: string\n}\n\nexport function RecordRelated({ entities, className }: RecordRelatedProps) {\n const { t } = useLocale()\n\n if (entities.length === 0) {\n return (\n <div className=\"flex items-center justify-center py-6 text-sm text-muted-foreground\">\n {t('record.noRelated')}\n </div>\n )\n }\n\n // Group by type\n const grouped = new Map<string, RecordRelatedEntity[]>()\n for (const entity of entities) {\n const existing = grouped.get(entity.type) ?? []\n existing.push(entity)\n grouped.set(entity.type, existing)\n }\n\n return (\n <ScrollArea className={cn('flex-1', className)}>\n <div className=\"space-y-4 p-4\">\n {Array.from(grouped.entries()).map(([type, items]) => (\n <div key={type}>\n <div className=\"mb-2 flex items-center gap-1.5\">\n <Link2 className=\"h-3 w-3 text-muted-foreground\" />\n <p className=\"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n {type} ({items.length})\n </p>\n </div>\n <div className=\"space-y-1\">\n {items.map((entity) => (\n <button\n key={entity.id}\n type=\"button\"\n onClick={entity.onClick}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left transition-colors hover:bg-muted',\n entity.onClick && 'cursor-pointer',\n !entity.onClick && 'cursor-default'\n )}\n >\n {entity.icon && (\n <div className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded bg-muted text-muted-foreground\">\n {entity.icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium\">{entity.label}</p>\n {entity.subtitle && (\n <p className=\"truncate text-[10px] text-muted-foreground\">{entity.subtitle}</p>\n )}\n </div>\n {entity.onClick && (\n <ChevronRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/50\" />\n )}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n </ScrollArea>\n )\n}\n","import { useState } from 'react'\nimport { Send, MessageSquare, Mail, Phone, Calendar, CheckCircle2 } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Button } from '@/components/ui/button'\nimport { Textarea } from '@/components/ui/textarea'\nimport type { RecordActivityType } from './record-types'\n\nconst ACTIVITY_BUTTONS: { type: RecordActivityType; label: string; icon: React.ReactNode }[] = [\n { type: 'note', label: 'Note', icon: <MessageSquare className=\"h-3.5 w-3.5\" /> },\n { type: 'email', label: 'Email', icon: <Mail className=\"h-3.5 w-3.5\" /> },\n { type: 'call', label: 'Call', icon: <Phone className=\"h-3.5 w-3.5\" /> },\n { type: 'meeting', label: 'Meeting', icon: <Calendar className=\"h-3.5 w-3.5\" /> },\n { type: 'task', label: 'Task', icon: <CheckCircle2 className=\"h-3.5 w-3.5\" /> },\n]\n\nexport interface RecordActivityComposerProps {\n onSubmit?: (type: RecordActivityType, content: string) => void\n className?: string\n}\n\nexport function RecordActivityComposer({ onSubmit, className }: RecordActivityComposerProps) {\n const [selectedType, setSelectedType] = useState<RecordActivityType>('note')\n const [content, setContent] = useState('')\n const { t } = useLocale()\n\n const activityLabels: Record<string, string> = {\n note: t('activity.note'),\n email: t('activity.email'),\n call: t('activity.call'),\n meeting: t('activity.meeting'),\n task: t('activity.task'),\n }\n\n const handleSubmit = () => {\n if (!content.trim()) return\n onSubmit?.(selectedType, content.trim())\n setContent('')\n }\n\n return (\n <div className={cn('border-t bg-background', className)}>\n {/* Type selector */}\n <div className=\"flex items-center gap-1 border-b px-3 py-1.5\">\n {ACTIVITY_BUTTONS.map((btn) => (\n <button\n key={btn.type}\n type=\"button\"\n onClick={() => setSelectedType(btn.type)}\n className={cn(\n 'flex items-center gap-1.5 rounded-md px-2.5 py-1 text-xs transition-colors',\n selectedType === btn.type\n ? 'bg-primary/10 text-primary font-medium'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground'\n )}\n >\n {btn.icon}\n {activityLabels[btn.type] ?? btn.label}\n </button>\n ))}\n </div>\n\n {/* Input */}\n <div className=\"flex items-end gap-2 px-3 py-2.5\">\n <Textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n placeholder={t('activity.addPlaceholder', { type: activityLabels[selectedType] ?? selectedType })}\n rows={2}\n className=\"min-h-[60px] resize-none text-sm\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n />\n <Button\n size=\"sm\"\n onClick={handleSubmit}\n disabled={!content.trim()}\n className=\"shrink-0\"\n >\n <Send className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs'\nimport { Badge } from '@/components/ui/badge'\nimport { RecordHeader } from './record-header'\nimport { RecordTimeline } from './record-timeline'\nimport { RecordRelated } from './record-related'\nimport { RecordActivityComposer } from './record-activity-composer'\nimport type { RecordShellProps } from './record-types'\n\n/**\n * RecordShell - Split-view record page layout with timeline, related entities, and activity composer.\n *\n * Provides a complete record detail view with a left panel (timeline + activity composer)\n * and a right panel (related entities + custom tabs). Follows CRM record page patterns.\n *\n * @example\n * ```tsx\n * <RecordShell\n * title=\"Acme Corp Deal\"\n * subtitle=\"acme@corp.com\"\n * avatar={<Avatar>AC</Avatar>}\n * status={<Badge>Open</Badge>}\n * fields={[\n * { id: 'value', label: 'Value', value: '$50,000' },\n * { id: 'stage', label: 'Stage', value: 'Negotiation' },\n * ]}\n * activities={activities}\n * relatedEntities={contacts}\n * tabs={[\n * { id: 'details', label: 'Details', content: <DetailsTab /> },\n * { id: 'files', label: 'Files', content: <FilesTab />, badge: 3 },\n * ]}\n * onActivityCreate={(type, content) => console.log(type, content)}\n * />\n * ```\n */\nfunction RecordShell({\n title,\n subtitle,\n avatar,\n status,\n actions,\n fields,\n activities = [],\n relatedEntities = [],\n tabs = [],\n defaultTab,\n activeTab: controlledActiveTab,\n onTabChange,\n onActivityCreate,\n showComposer = true,\n sidebarContent,\n className,\n}: RecordShellProps) {\n const { t } = useLocale()\n const [internalTab, setInternalTab] = useState(defaultTab ?? tabs[0]?.id ?? '')\n const currentTab = controlledActiveTab ?? internalTab\n\n const handleTabChange = (tabId: string) => {\n if (!controlledActiveTab) setInternalTab(tabId)\n onTabChange?.(tabId)\n }\n\n const activeTabContent = tabs.find((t) => t.id === currentTab)?.content\n\n return (\n <div className={cn('flex h-full flex-col bg-background', className)}>\n {/* Header */}\n <RecordHeader\n title={title}\n subtitle={subtitle}\n avatar={avatar}\n status={status}\n actions={actions}\n fields={fields}\n />\n\n {/* Body */}\n <div className=\"flex flex-1 overflow-hidden\">\n {/* Left: Timeline + Composer */}\n <div className=\"flex flex-1 flex-col border-r\">\n {/* Tabs */}\n {tabs.length > 0 && (\n <Tabs value={currentTab} onValueChange={handleTabChange}>\n <TabsList className=\"w-full justify-start rounded-none border-b bg-transparent px-4 py-0 h-auto\">\n <TabsTrigger\n value=\"__timeline__\"\n className=\"rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:shadow-none text-xs py-2\"\n >\n {t('record.timeline')}\n </TabsTrigger>\n {tabs.map((tab) => (\n <TabsTrigger\n key={tab.id}\n value={tab.id}\n className=\"rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:shadow-none text-xs py-2 gap-1.5\"\n >\n {tab.icon}\n {tab.label}\n {tab.badge != null && (\n <Badge variant=\"secondary\" className=\"ml-1 h-4 min-w-[16px] px-1 text-[9px]\">\n {tab.badge}\n </Badge>\n )}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n )}\n\n {/* Content */}\n <div className=\"flex flex-1 flex-col overflow-hidden\">\n {(currentTab === '__timeline__' || tabs.length === 0) ? (\n <RecordTimeline activities={activities} />\n ) : (\n <div className=\"flex-1 overflow-auto p-4\">{activeTabContent}</div>\n )}\n </div>\n\n {/* Composer */}\n {showComposer && onActivityCreate && (\n <RecordActivityComposer onSubmit={onActivityCreate} />\n )}\n </div>\n\n {/* Right: Related entities + custom sidebar */}\n <div className=\"flex w-[280px] shrink-0 flex-col lg:w-[320px]\">\n {relatedEntities.length > 0 && (\n <RecordRelated entities={relatedEntities} />\n )}\n {sidebarContent && (\n <div className=\"border-t p-4\">{sidebarContent}</div>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nRecordShell.displayName = 'RecordShell'\n\nexport { RecordShell }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { Sheet, SheetContent } from '@/components/ui/sheet'\nimport { ScrollArea } from '@/components/ui/scroll-area'\nimport type { RecordPanelSize } from './record-panel-types'\n\nconst sizeMap: Record<RecordPanelSize, string> = {\n sm: 'sm:max-w-[400px]',\n md: 'sm:max-w-[560px]',\n lg: 'sm:max-w-[720px]',\n xl: 'sm:max-w-[900px]',\n}\n\nexport interface RecordPanelProps {\n /** Whether the panel is open */\n open: boolean\n /** Called when open state changes */\n onOpenChange: (open: boolean) => void\n /** Panel width */\n size?: RecordPanelSize\n /** Panel content */\n children: React.ReactNode\n className?: string\n}\n\n/**\n * RecordPanel - Sheet-based drawer for viewing and editing record details.\n *\n * Wraps the Sheet component to provide a slide-out panel with configurable\n * width sizes. Compose with RecordPanelHeader, RecordPanelFields,\n * RecordPanelTabs, and RecordPanelActivity for a complete record drawer.\n *\n * @example\n * ```tsx\n * <RecordPanel open={open} onOpenChange={setOpen} size=\"md\">\n * <RecordPanelHeader title=\"Acme Corp\" subtitle=\"acme@corp.com\" />\n * <RecordPanelFields fields={fields} />\n * <RecordPanelTabs tabs={tabs} />\n * </RecordPanel>\n * ```\n */\nconst RecordPanel = React.forwardRef<\n React.ElementRef<typeof SheetContent>,\n RecordPanelProps\n>(({ open, onOpenChange, size = 'md', children, className }, ref) => (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent\n ref={ref}\n side=\"right\"\n className={cn(\n 'flex w-full flex-col gap-0 p-0',\n sizeMap[size],\n className\n )}\n >\n <ScrollArea className=\"flex-1\">\n <div className=\"flex flex-col\">{children}</div>\n </ScrollArea>\n </SheetContent>\n </Sheet>\n))\nRecordPanel.displayName = 'RecordPanel'\n\nexport { RecordPanel }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { Button } from '@/components/ui/button'\nimport type { RecordPanelAction } from './record-panel-types'\n\nexport interface RecordPanelHeaderProps {\n /** Record title */\n title: string\n /** Record subtitle (e.g. email, company) */\n subtitle?: string\n /** Avatar or icon node */\n avatar?: React.ReactNode\n /** Status badge node */\n status?: React.ReactNode\n /** Action buttons */\n actions?: RecordPanelAction[]\n className?: string\n}\n\n/**\n * RecordPanelHeader - Displays avatar, title, subtitle, status, and action buttons.\n *\n * @example\n * ```tsx\n * <RecordPanelHeader\n * title=\"John Doe\"\n * subtitle=\"john@example.com\"\n * avatar={<Avatar><AvatarFallback>JD</AvatarFallback></Avatar>}\n * status={<Badge variant=\"success\">Active</Badge>}\n * actions={[\n * { id: 'edit', label: 'Edit', onClick: () => {} },\n * { id: 'delete', label: 'Delete', variant: 'destructive', onClick: () => {} },\n * ]}\n * />\n * ```\n */\nconst RecordPanelHeader = React.forwardRef<HTMLDivElement, RecordPanelHeaderProps>(\n ({ title, subtitle, avatar, status, actions, className }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-start justify-between gap-4 border-b px-6 pb-4 pt-6', className)}\n >\n <div className=\"flex items-start gap-3 min-w-0\">\n {avatar && <div className=\"shrink-0\">{avatar}</div>}\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <h2 className=\"truncate text-lg font-semibold leading-tight\">{title}</h2>\n {status}\n </div>\n {subtitle && (\n <p className=\"mt-0.5 truncate text-sm text-muted-foreground\">{subtitle}</p>\n )}\n </div>\n </div>\n\n {actions && actions.length > 0 && (\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant ?? 'outline'}\n size=\"sm\"\n onClick={action.onClick}\n >\n {action.icon && <span className=\"mr-1.5 inline-flex\">{action.icon}</span>}\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n )\n)\nRecordPanelHeader.displayName = 'RecordPanelHeader'\n\nexport { RecordPanelHeader }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { Input } from '@/components/ui/input'\nimport { Check, Pencil, X } from 'lucide-react'\nimport { useLocale } from '@/providers/locale-provider'\nimport type { RecordPanelField } from './record-panel-types'\n\nexport interface RecordPanelFieldsProps {\n /** Field definitions */\n fields: RecordPanelField[]\n className?: string\n}\n\ninterface EditableFieldCellProps {\n field: RecordPanelField\n}\n\nfunction EditableFieldCell({ field }: EditableFieldCellProps) {\n const { t } = useLocale()\n const [editing, setEditing] = React.useState(false)\n const [draft, setDraft] = React.useState(String(field.value ?? ''))\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n if (editing) {\n inputRef.current?.focus()\n inputRef.current?.select()\n }\n }, [editing])\n\n const commit = () => {\n setEditing(false)\n if (draft !== String(field.value ?? '')) {\n field.onEdit?.(field.type === 'number' ? Number(draft) : draft)\n }\n }\n\n const cancel = () => {\n setEditing(false)\n setDraft(String(field.value ?? ''))\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n commit()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n cancel()\n }\n }\n\n const preventBlur = (e: React.MouseEvent) => e.preventDefault()\n\n if (editing) {\n return (\n <div className=\"flex items-center gap-1\">\n <Input\n ref={inputRef}\n type={field.type === 'number' ? 'number' : field.type === 'date' ? 'date' : 'text'}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onKeyDown={handleKeyDown}\n className=\"h-7 text-sm\"\n />\n <button\n onMouseDown={preventBlur}\n onClick={commit}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded text-primary hover:text-primary/80 hover:bg-muted transition-colors\"\n aria-label={t('editable.save')}\n >\n <Check className=\"h-3.5 w-3.5\" />\n </button>\n <button\n onMouseDown={preventBlur}\n onClick={cancel}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors\"\n aria-label={t('editable.cancel')}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )\n }\n\n return (\n <div\n className=\"group/field flex min-h-[28px] cursor-default items-center gap-1.5\"\n role={field.editable ? 'button' : undefined}\n tabIndex={field.editable ? 0 : undefined}\n onClick={() => field.editable && setEditing(true)}\n onKeyDown={(e) => {\n if (field.editable && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n setEditing(true)\n }\n }}\n >\n <span className=\"text-sm\">{field.value ?? <span className=\"text-muted-foreground\">{t('editable.emptyValue')}</span>}</span>\n {field.editable && (\n <Pencil className=\"h-3 w-3 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover/field:opacity-100\" />\n )}\n </div>\n )\n}\n\n/**\n * RecordPanelFields - Inline editable field list in a label-value grid layout.\n *\n * Displays record fields with labels on the left and values on the right.\n * Editable fields show a pencil icon on hover and switch to inline editing\n * on click. Commits on Enter/blur, cancels on Escape.\n *\n * @example\n * ```tsx\n * <RecordPanelFields\n * fields={[\n * { id: 'email', label: 'Email', value: 'john@example.com', editable: true, type: 'email', onEdit: (v) => {} },\n * { id: 'phone', label: 'Phone', value: '+1 555-0100' },\n * { id: 'value', label: 'Deal Value', value: '50000', editable: true, type: 'number', onEdit: (v) => {} },\n * ]}\n * />\n * ```\n */\nconst RecordPanelFields = React.forwardRef<HTMLDivElement, RecordPanelFieldsProps>(\n ({ fields, className }, ref) => (\n <div ref={ref} className={cn('border-b px-6 py-4', className)}>\n <div className=\"grid grid-cols-[minmax(100px,auto)_1fr] gap-x-4 gap-y-2\">\n {fields.map((field) => (\n <React.Fragment key={field.id}>\n <span className=\"flex items-center text-sm text-muted-foreground\">\n {field.label}\n </span>\n <EditableFieldCell field={field} />\n </React.Fragment>\n ))}\n </div>\n </div>\n )\n)\nRecordPanelFields.displayName = 'RecordPanelFields'\n\nexport { RecordPanelFields }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'\nimport { Badge } from '@/components/ui/badge'\nimport type { RecordPanelTab } from './record-panel-types'\n\nexport interface RecordPanelTabsProps {\n /** Tab definitions */\n tabs: RecordPanelTab[]\n /** Default active tab id (uncontrolled) */\n defaultTab?: string\n /** Controlled active tab id */\n activeTab?: string\n /** Called when active tab changes */\n onTabChange?: (tabId: string) => void\n className?: string\n}\n\n/**\n * RecordPanelTabs - Tab navigation for record panel sections.\n *\n * Supports both controlled and uncontrolled modes.\n * Each tab can display an optional icon and badge count.\n *\n * @example\n * ```tsx\n * <RecordPanelTabs\n * tabs={[\n * { id: 'details', label: 'Details', content: <DetailsSection /> },\n * { id: 'notes', label: 'Notes', content: <NotesSection />, badge: 3 },\n * { id: 'files', label: 'Files', content: <FilesSection />, badge: 12 },\n * ]}\n * />\n * ```\n */\nconst RecordPanelTabs = React.forwardRef<HTMLDivElement, RecordPanelTabsProps>(\n ({ tabs, defaultTab, activeTab, onTabChange, className }, ref) => {\n const fallbackDefault = defaultTab ?? tabs[0]?.id\n\n return (\n <div ref={ref} className={cn('flex flex-col', className)}>\n <Tabs\n value={activeTab}\n defaultValue={activeTab ? undefined : fallbackDefault}\n onValueChange={onTabChange}\n >\n <TabsList className=\"w-full justify-start rounded-none border-b bg-transparent px-6 py-0 h-auto\">\n {tabs.map((tab) => (\n <TabsTrigger\n key={tab.id}\n value={tab.id}\n className=\"rounded-none border-b-2 border-transparent px-3 py-2.5 text-sm data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:shadow-none gap-1.5\"\n >\n {tab.icon && <span className=\"inline-flex\">{tab.icon}</span>}\n {tab.label}\n {tab.badge != null && (\n <Badge variant=\"secondary\" className=\"ml-1 h-4 min-w-[16px] px-1 text-[10px]\">\n {tab.badge}\n </Badge>\n )}\n </TabsTrigger>\n ))}\n </TabsList>\n\n {tabs.map((tab) => (\n <TabsContent key={tab.id} value={tab.id} className=\"mt-0 px-6 py-4\">\n {tab.content}\n </TabsContent>\n ))}\n </Tabs>\n </div>\n )\n }\n)\nRecordPanelTabs.displayName = 'RecordPanelTabs'\n\nexport { RecordPanelTabs }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport type { RecordPanelActivityItem } from './record-panel-types'\n\nexport interface RecordPanelActivityProps {\n /** Activity items to display */\n activities: RecordPanelActivityItem[]\n /** Maximum number of items to show (default: 5) */\n maxItems?: number\n /** Called when \"View all\" is clicked */\n onViewAll?: () => void\n className?: string\n}\n\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map((part) => part[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n}\n\n/**\n * RecordPanelActivity - Compact activity feed showing the most recent items.\n *\n * Displays a timeline of activities with user avatars, timestamps,\n * and a \"View all\" link when there are more items than the max.\n *\n * @example\n * ```tsx\n * <RecordPanelActivity\n * activities={[\n * {\n * id: '1',\n * type: 'note',\n * title: 'Added a note',\n * description: 'Follow up next week',\n * timestamp: new Date(),\n * user: { name: 'Jane Smith' },\n * },\n * ]}\n * maxItems={5}\n * onViewAll={() => console.log('view all')}\n * />\n * ```\n */\nconst RecordPanelActivity = React.forwardRef<HTMLDivElement, RecordPanelActivityProps>(\n ({ activities, maxItems = 5, onViewAll, className }, ref) => {\n const visibleItems = activities.slice(0, maxItems)\n const hasMore = activities.length > maxItems\n const { t } = useLocale()\n\n const formatTs = (ts: string | Date): string => {\n const date = typeof ts === 'string' ? new Date(ts) : ts\n const now = new Date()\n const diffMs = now.getTime() - date.getTime()\n const diffMins = Math.floor(diffMs / 60000)\n const diffHours = Math.floor(diffMins / 60)\n const diffDays = Math.floor(diffHours / 24)\n if (diffMins < 1) return t('record.justNow')\n if (diffMins < 60) return t('record.minutesAgo', { count: diffMins })\n if (diffHours < 24) return t('record.hoursAgo', { count: diffHours })\n if (diffDays < 7) return t('record.daysAgo', { count: diffDays })\n return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })\n }\n\n if (activities.length === 0) {\n return (\n <div ref={ref} className={cn('px-6 py-4', className)}>\n <p className=\"text-sm text-muted-foreground\">{t('record.noActivity')}</p>\n </div>\n )\n }\n\n return (\n <div ref={ref} className={cn('px-6 py-4', className)}>\n <h3 className=\"mb-3 text-sm font-medium\">{t('record.recentActivity')}</h3>\n <div className=\"space-y-3\">\n {visibleItems.map((item) => (\n <div key={item.id} className=\"flex items-start gap-3\">\n {item.user ? (\n <Avatar className=\"h-7 w-7 shrink-0\">\n {item.user.avatar && <AvatarImage src={item.user.avatar} alt={item.user.name} />}\n <AvatarFallback className=\"text-[10px]\">\n {getInitials(item.user.name)}\n </AvatarFallback>\n </Avatar>\n ) : (\n <div className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-muted\">\n <div className=\"h-2 w-2 rounded-full bg-muted-foreground/50\" />\n </div>\n )}\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <p className=\"truncate text-sm font-medium\">{item.title}</p>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {formatTs(item.timestamp)}\n </span>\n </div>\n {item.description && (\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {item.description}\n </p>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {hasMore && onViewAll && (\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"mt-2 h-auto p-0 text-xs\"\n onClick={onViewAll}\n >\n {t('record.viewAll', { count: activities.length })}\n </Button>\n )}\n </div>\n )\n }\n)\nRecordPanelActivity.displayName = 'RecordPanelActivity'\n\nexport { RecordPanelActivity }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Popover, PopoverTrigger, PopoverContent } from '@/components/ui/popover'\nimport { Button } from '@/components/ui/button'\nimport { Separator } from '@/components/ui/separator'\nimport { ExternalLink } from 'lucide-react'\nimport type { RecordPanelField, RecordPanelAction } from './record-panel-types'\n\nexport interface QuickViewProps {\n /** Element that triggers the quick view */\n trigger: React.ReactNode\n /** Fields to display in the popup */\n fields: RecordPanelField[]\n /** Record title */\n title: string\n /** Record subtitle */\n subtitle?: string\n /** Avatar or icon */\n avatar?: React.ReactNode\n /** Action buttons */\n actions?: RecordPanelAction[]\n /** Called when \"Open full record\" is clicked */\n onOpenFull?: () => void\n /** Trigger mode: hover opens on mouse enter, click opens on click */\n mode?: 'hover' | 'click'\n className?: string\n}\n\n/**\n * QuickView - Popover-based popup for previewing record details.\n *\n * Supports hover and click modes. Displays a compact read-only field list,\n * action buttons, and an \"Open full record\" link.\n *\n * @example\n * ```tsx\n * <QuickView\n * trigger={<span className=\"cursor-pointer underline\">Acme Corp</span>}\n * title=\"Acme Corp\"\n * subtitle=\"Technology\"\n * fields={[\n * { id: 'email', label: 'Email', value: 'info@acme.com' },\n * { id: 'phone', label: 'Phone', value: '+1 555-0100' },\n * ]}\n * actions={[{ id: 'edit', label: 'Edit', onClick: () => {} }]}\n * onOpenFull={() => openDrawer()}\n * mode=\"hover\"\n * />\n * ```\n */\nconst QuickView = React.forwardRef<HTMLDivElement, QuickViewProps>(\n (\n {\n trigger,\n fields,\n title,\n subtitle,\n avatar,\n actions,\n onOpenFull,\n mode = 'hover',\n className,\n },\n ref\n ) => {\n const [open, setOpen] = React.useState(false)\n const closeTimerRef = React.useRef<ReturnType<typeof setTimeout>>()\n const isHover = mode === 'hover'\n const { t } = useLocale()\n\n const clearCloseTimer = () => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current)\n closeTimerRef.current = undefined\n }\n }\n\n const scheduleClose = () => {\n clearCloseTimer()\n closeTimerRef.current = setTimeout(() => setOpen(false), 200)\n }\n\n React.useEffect(() => {\n return () => clearCloseTimer()\n }, [])\n\n const hoverTriggerProps = isHover\n ? {\n onMouseEnter: () => {\n clearCloseTimer()\n setOpen(true)\n },\n onMouseLeave: scheduleClose,\n }\n : {}\n\n const hoverContentProps = isHover\n ? {\n onMouseEnter: clearCloseTimer,\n onMouseLeave: scheduleClose,\n }\n : {}\n\n const content = (\n <div\n ref={ref}\n className={cn('flex flex-col', className)}\n {...hoverContentProps}\n >\n {/* Header */}\n <div className=\"flex items-start gap-3\">\n {avatar && <div className=\"shrink-0\">{avatar}</div>}\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold\">{title}</p>\n {subtitle && (\n <p className=\"truncate text-xs text-muted-foreground\">{subtitle}</p>\n )}\n </div>\n </div>\n\n {/* Fields */}\n {fields.length > 0 && (\n <>\n <Separator className=\"my-3\" />\n <div className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5\">\n {fields.map((field) => (\n <React.Fragment key={field.id}>\n <span className=\"text-xs text-muted-foreground\">{field.label}</span>\n <span className=\"truncate text-xs\">{field.value ?? t('editable.emptyValue')}</span>\n </React.Fragment>\n ))}\n </div>\n </>\n )}\n\n {/* Actions */}\n {actions && actions.length > 0 && (\n <>\n <Separator className=\"my-3\" />\n <div className=\"flex flex-wrap gap-1.5\">\n {actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant ?? 'outline'}\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={action.onClick}\n >\n {action.icon && <span className=\"mr-1 inline-flex\">{action.icon}</span>}\n {action.label}\n </Button>\n ))}\n </div>\n </>\n )}\n\n {/* Open full record */}\n {onOpenFull && (\n <>\n <Separator className=\"my-3\" />\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"h-auto justify-start p-0 text-xs\"\n onClick={onOpenFull}\n >\n <ExternalLink className=\"mr-1 h-3 w-3\" />\n {t('record.openFullRecord')}\n </Button>\n </>\n )}\n </div>\n )\n\n return (\n <Popover open={open} onOpenChange={isHover ? undefined : setOpen}>\n <PopoverTrigger asChild>\n <span {...hoverTriggerProps}>{trigger}</span>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n sideOffset={8}\n className=\"w-80\"\n onOpenAutoFocus={(e) => {\n if (isHover) e.preventDefault()\n }}\n >\n {content}\n </PopoverContent>\n </Popover>\n )\n }\n)\nQuickView.displayName = 'QuickView'\n\nexport { QuickView }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from '@/components/ui/dialog'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport type { RecordPanelField } from './record-panel-types'\n\nexport interface RecordFormDialogProps {\n /** Whether the dialog is open */\n open: boolean\n /** Called when open state changes */\n onOpenChange: (open: boolean) => void\n /** Create or edit mode */\n mode: 'create' | 'edit'\n /** Dialog title override (defaults to \"Create Record\" / \"Edit Record\") */\n title?: string\n /** Field definitions for the form */\n fields: RecordPanelField[]\n /** Default form values keyed by field id */\n defaultValues?: Record<string, unknown>\n /** Called on form submission */\n onSubmit: (values: Record<string, unknown>) => void | Promise<void>\n className?: string\n}\n\nfunction getInputType(fieldType?: RecordPanelField['type']): string {\n switch (fieldType) {\n case 'number':\n return 'number'\n case 'date':\n return 'date'\n case 'email':\n return 'email'\n case 'phone':\n return 'tel'\n case 'url':\n return 'url'\n default:\n return 'text'\n }\n}\n\n/**\n * RecordFormDialog - Dialog-based form for creating or editing records.\n *\n * Dynamically renders form fields based on field type definitions.\n * Supports text, number, date, email, phone, url, and select field types.\n *\n * @example\n * ```tsx\n * <RecordFormDialog\n * open={open}\n * onOpenChange={setOpen}\n * mode=\"create\"\n * title=\"New Contact\"\n * fields={[\n * { id: 'name', label: 'Name', value: '', type: 'text' },\n * { id: 'email', label: 'Email', value: '', type: 'email' },\n * { id: 'status', label: 'Status', value: '', type: 'select', options: [\n * { value: 'active', label: 'Active' },\n * { value: 'inactive', label: 'Inactive' },\n * ]},\n * ]}\n * onSubmit={(values) => console.log(values)}\n * />\n * ```\n */\nconst RecordFormDialog = React.forwardRef<\n React.ElementRef<typeof DialogContent>,\n RecordFormDialogProps\n>(\n (\n {\n open,\n onOpenChange,\n mode,\n title,\n fields,\n defaultValues,\n onSubmit,\n className,\n },\n ref\n ) => {\n const [values, setValues] = React.useState<Record<string, unknown>>({})\n const [submitting, setSubmitting] = React.useState(false)\n const { t } = useLocale()\n\n // Reset form values when dialog opens or defaultValues/fields change\n React.useEffect(() => {\n if (open) {\n const initial: Record<string, unknown> = {}\n for (const field of fields) {\n initial[field.id] =\n defaultValues?.[field.id] ?? (typeof field.value === 'string' ? field.value : '')\n }\n setValues(initial)\n }\n }, [open, fields, defaultValues])\n\n const updateField = (id: string, value: unknown) => {\n setValues((prev) => ({ ...prev, [id]: value }))\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setSubmitting(true)\n try {\n await onSubmit(values)\n onOpenChange(false)\n } finally {\n setSubmitting(false)\n }\n }\n\n const dialogTitle = title ?? (mode === 'create' ? t('record.createRecord') : t('record.editRecord'))\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent ref={ref} size=\"md\" className={cn('sm:max-w-lg', className)}>\n <form onSubmit={handleSubmit}>\n <DialogHeader>\n <DialogTitle>{dialogTitle}</DialogTitle>\n <DialogDescription>\n {mode === 'create'\n ? t('record.createDescription')\n : t('record.editDescription')}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"mt-4 grid gap-4\">\n {fields.map((field) => (\n <div key={field.id} className=\"grid gap-2\">\n <Label htmlFor={`record-form-${field.id}`}>{field.label}</Label>\n\n {field.type === 'select' && field.options ? (\n <Select\n value={String(values[field.id] ?? '')}\n onValueChange={(v) => updateField(field.id, v)}\n >\n <SelectTrigger id={`record-form-${field.id}`} size=\"sm\">\n <SelectValue placeholder={`Select ${field.label.toLowerCase()}`} />\n </SelectTrigger>\n <SelectContent>\n {field.options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Input\n id={`record-form-${field.id}`}\n type={getInputType(field.type)}\n value={String(values[field.id] ?? '')}\n onChange={(e) =>\n updateField(\n field.id,\n field.type === 'number' ? Number(e.target.value) : e.target.value\n )\n }\n placeholder={field.label}\n />\n )}\n </div>\n ))}\n </div>\n\n <DialogFooter className=\"mt-6\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={submitting}\n >\n {t('common.cancel')}\n </Button>\n <Button type=\"submit\" disabled={submitting}>\n {submitting\n ? mode === 'create'\n ? t('record.creating')\n : t('record.saving')\n : mode === 'create'\n ? t('record.create')\n : t('record.saveChanges')}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n )\n }\n)\nRecordFormDialog.displayName = 'RecordFormDialog'\n\nexport { RecordFormDialog }\n","import * as React from 'react'\nimport type { RecordDialogMode, RecordDialogContextValue } from './record-dialog-types'\n\nconst RecordDialogContext = React.createContext<RecordDialogContextValue | null>(null)\n\nexport function useRecordDialog() {\n const context = React.useContext(RecordDialogContext)\n if (!context) {\n throw new Error('useRecordDialog must be used within a RecordDialog component')\n }\n return context\n}\n\nexport interface RecordDialogProviderProps {\n mode: RecordDialogMode\n onModeChange?: (mode: RecordDialogMode) => void\n children: React.ReactNode\n}\n\nexport function RecordDialogProvider({\n mode,\n onModeChange,\n children,\n}: RecordDialogProviderProps) {\n const [isDirty, setIsDirty] = React.useState(false)\n const [isSubmitting, setIsSubmitting] = React.useState(false)\n\n const setMode = React.useCallback(\n (newMode: RecordDialogMode) => {\n onModeChange?.(newMode)\n },\n [onModeChange]\n )\n\n const value = React.useMemo<RecordDialogContextValue>(\n () => ({\n mode,\n setMode,\n isDirty,\n setIsDirty,\n isSubmitting,\n setIsSubmitting,\n }),\n [mode, setMode, isDirty, isSubmitting]\n )\n\n return (\n <RecordDialogContext.Provider value={value}>\n {children}\n </RecordDialogContext.Provider>\n )\n}\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport {\n Dialog,\n DialogContent,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport { RecordDialogProvider } from './record-dialog-context'\nimport type { RecordDialogMode } from './record-dialog-types'\n\nexport interface RecordDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n mode: RecordDialogMode\n onModeChange?: (mode: RecordDialogMode) => void\n ariaTitle?: string\n children: React.ReactNode\n className?: string\n}\n\nconst RecordDialog = React.forwardRef<HTMLDivElement, RecordDialogProps>(\n ({ open, onOpenChange, mode, onModeChange, ariaTitle, children, className }, ref) => (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n ref={ref}\n size=\"4xl\"\n className={cn(\n 'flex flex-col gap-0 overflow-hidden p-0',\n 'max-w-[98vw] sm:max-w-[92vw] lg:max-w-[90vw] 2xl:max-w-[1600px]',\n 'h-[95vh] sm:h-[88vh] lg:h-[85vh]',\n '[&>button.absolute]:hidden',\n className\n )}\n >\n <DialogTitle className=\"sr-only\">{ariaTitle ?? 'Record'}</DialogTitle>\n <RecordDialogProvider mode={mode} onModeChange={onModeChange}>\n {children}\n </RecordDialogProvider>\n </DialogContent>\n </Dialog>\n )\n)\nRecordDialog.displayName = 'RecordDialog'\n\nexport { RecordDialog }\n","import * as React from 'react'\nimport { MoreHorizontal, X } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { Button } from '@/components/ui/button'\nimport { DialogClose } from '@/components/ui/dialog'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { useLocale } from '@/providers/locale-provider'\nimport { useRecordDialog } from './record-dialog-context'\nimport type { RecordDialogAction } from './record-dialog-types'\n\nexport interface RecordDialogHeaderProps {\n title: string\n subtitle?: string\n avatar?: React.ReactNode\n status?: React.ReactNode\n actions?: RecordDialogAction[]\n className?: string\n}\n\nconst RecordDialogHeader = React.forwardRef<HTMLDivElement, RecordDialogHeaderProps>(\n ({ title, subtitle, avatar, status, actions = [], className }, ref) => {\n const { mode } = useRecordDialog()\n const { t } = useLocale()\n\n const visibleActions = actions.filter(\n (a) => !a.showInModes || a.showInModes.includes(mode)\n )\n const primaryActions = visibleActions.slice(0, 2)\n const overflowActions = visibleActions.slice(2)\n\n return (\n <div\n ref={ref}\n className={cn(\n 'sticky top-0 z-10 flex items-start gap-4 border-b bg-background px-6 py-4 sm:px-8',\n className\n )}\n >\n {avatar && <div className=\"shrink-0\">{avatar}</div>}\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-3\">\n <h2 className=\"truncate text-lg font-semibold\">{title}</h2>\n {status && <div className=\"shrink-0\">{status}</div>}\n </div>\n {subtitle && (\n <p className=\"mt-0.5 truncate text-sm text-muted-foreground\">{subtitle}</p>\n )}\n </div>\n\n <div className=\"flex shrink-0 items-center gap-2\">\n {primaryActions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant ?? 'outline'}\n size=\"sm\"\n onClick={action.onClick}\n disabled={action.disabled || action.loading}\n >\n {action.icon && <span className=\"mr-1.5\">{action.icon}</span>}\n {action.label}\n </Button>\n ))}\n\n {overflowActions.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {overflowActions.map((action) => (\n <DropdownMenuItem\n key={action.id}\n onClick={action.onClick}\n disabled={action.disabled}\n className={action.variant === 'destructive' ? 'text-destructive' : undefined}\n >\n {action.icon && <span className=\"mr-2\">{action.icon}</span>}\n {action.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n <DialogClose asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">{t('recordDialog.close')}</span>\n </Button>\n </DialogClose>\n </div>\n </div>\n )\n }\n)\nRecordDialogHeader.displayName = 'RecordDialogHeader'\n\nexport { RecordDialogHeader }\n","import * as React from 'react'\nimport { ArrowDown, ArrowUp, Minus } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useRecordDialog } from './record-dialog-context'\nimport type { RecordDialogHighlightField } from './record-dialog-types'\n\nexport interface RecordDialogHighlightProps {\n fields: RecordDialogHighlightField[]\n className?: string\n}\n\nconst DIRECTION_STYLES = {\n up: 'text-emerald-600',\n down: 'text-destructive',\n neutral: 'text-muted-foreground',\n}\n\nconst DIRECTION_ICONS = {\n up: <ArrowUp className=\"h-3 w-3\" />,\n down: <ArrowDown className=\"h-3 w-3\" />,\n neutral: <Minus className=\"h-3 w-3\" />,\n}\n\nconst RecordDialogHighlight = React.forwardRef<HTMLDivElement, RecordDialogHighlightProps>(\n ({ fields, className }, ref) => {\n const { mode } = useRecordDialog()\n\n if (mode === 'create' || fields.length === 0) return null\n\n return (\n <div\n ref={ref}\n className={cn('border-b bg-muted/30 px-6 py-4 sm:px-8', className)}\n >\n <div\n className={cn(\n 'grid gap-4 divide-x',\n fields.length === 1 && 'grid-cols-1',\n fields.length === 2 && 'grid-cols-2',\n fields.length === 3 && 'grid-cols-2 sm:grid-cols-3',\n fields.length >= 4 && 'grid-cols-2 sm:grid-cols-4'\n )}\n >\n {fields.map((field, idx) => (\n <div\n key={field.id}\n className={cn('flex flex-col gap-1', idx > 0 && 'pl-4')}\n >\n <div className=\"flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n {field.icon && <span className=\"shrink-0\">{field.icon}</span>}\n {field.label}\n </div>\n <div className=\"text-sm font-semibold\">{field.value}</div>\n {field.change && (\n <div\n className={cn(\n 'flex items-center gap-0.5 text-xs font-medium',\n DIRECTION_STYLES[field.change.direction]\n )}\n >\n {DIRECTION_ICONS[field.change.direction]}\n {field.change.value}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n )\n }\n)\nRecordDialogHighlight.displayName = 'RecordDialogHighlight'\n\nexport { RecordDialogHighlight }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { ScrollArea } from '@/components/ui/scroll-area'\nimport { Badge } from '@/components/ui/badge'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'\nimport { useRecordDialog } from './record-dialog-context'\nimport type { RecordDialogTab } from './record-dialog-types'\n\nexport interface RecordDialogBodyProps {\n tabs?: RecordDialogTab[]\n defaultTab?: string\n activeTab?: string\n onTabChange?: (tabId: string) => void\n children?: React.ReactNode\n className?: string\n}\n\nconst RecordDialogBody = React.forwardRef<HTMLDivElement, RecordDialogBodyProps>(\n ({ tabs = [], defaultTab, activeTab, onTabChange, children, className }, ref) => {\n const { mode } = useRecordDialog()\n\n const visibleTabs = tabs.filter(\n (tab) => !tab.hideInModes || !tab.hideInModes.includes(mode)\n )\n\n // No tabs — render children directly in a scroll area\n if (visibleTabs.length === 0) {\n return (\n <div ref={ref} className={cn('flex-1 overflow-hidden', className)}>\n <ScrollArea className=\"h-full\">\n <div className=\"px-6 py-6 sm:px-8\">{children}</div>\n </ScrollArea>\n </div>\n )\n }\n\n const defaultValue = defaultTab ?? visibleTabs[0]?.id\n\n return (\n <div ref={ref} className={cn('flex flex-1 flex-col overflow-hidden', className)}>\n <Tabs\n value={activeTab}\n defaultValue={defaultValue}\n onValueChange={onTabChange}\n className=\"flex flex-1 flex-col overflow-hidden\"\n >\n <TabsList className=\"h-auto w-full justify-start gap-0 rounded-none border-b bg-transparent p-0 px-6 sm:px-8\">\n {visibleTabs.map((tab) => (\n <TabsTrigger\n key={tab.id}\n value={tab.id}\n className={cn(\n 'relative rounded-none border-b-2 border-transparent bg-transparent px-4 py-2.5 text-sm font-medium text-muted-foreground shadow-none transition-none',\n 'data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:shadow-none'\n )}\n >\n <span className=\"flex items-center gap-2\">\n {tab.icon}\n {tab.label}\n {tab.badge != null && (\n <Badge variant=\"secondary\" className=\"h-5 min-w-[20px] px-1.5 text-[10px]\">\n {tab.badge}\n </Badge>\n )}\n </span>\n </TabsTrigger>\n ))}\n </TabsList>\n\n {visibleTabs.map((tab) => (\n <TabsContent\n key={tab.id}\n value={tab.id}\n className=\"mt-0 flex-1 overflow-hidden data-[state=inactive]:hidden\"\n >\n <ScrollArea className=\"h-full\">\n <div className=\"px-6 py-6 sm:px-8\">{tab.content}</div>\n </ScrollArea>\n </TabsContent>\n ))}\n </Tabs>\n </div>\n )\n }\n)\nRecordDialogBody.displayName = 'RecordDialogBody'\n\nexport { RecordDialogBody }\n","import * as React from 'react'\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '@/components/ui/accordion'\n\nexport interface RecordDialogSectionProps {\n id: string\n title: string\n icon?: React.ReactNode\n defaultCollapsed?: boolean\n children: React.ReactNode\n className?: string\n}\n\nconst RecordDialogSection = React.forwardRef<HTMLDivElement, RecordDialogSectionProps>(\n ({ id, title, icon, defaultCollapsed = false, children, className }, ref) => (\n <div ref={ref} className={className}>\n <Accordion\n type=\"multiple\"\n defaultValue={defaultCollapsed ? [] : [id]}\n >\n <AccordionItem value={id} className=\"border-b-0\">\n <AccordionTrigger className=\"text-base font-semibold py-4 hover:no-underline\">\n <div className=\"flex items-center gap-2\">\n {icon && <span className=\"text-muted-foreground\">{icon}</span>}\n {title}\n </div>\n </AccordionTrigger>\n <AccordionContent>{children}</AccordionContent>\n </AccordionItem>\n </Accordion>\n </div>\n )\n)\nRecordDialogSection.displayName = 'RecordDialogSection'\n\nexport { RecordDialogSection }\n","import * as React from 'react'\nimport { Check, Pencil, X } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { Input } from '@/components/ui/input'\nimport { Textarea } from '@/components/ui/textarea'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { useLocale } from '@/providers/locale-provider'\nimport { useRecordDialog } from './record-dialog-context'\nimport type { RecordDialogField, RecordDialogFieldType } from './record-dialog-types'\n\nexport interface RecordDialogFieldsProps {\n fields: RecordDialogField[]\n columns?: 1 | 2 | 3\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Inline editable field cell (view mode - click to edit single field)\n// ---------------------------------------------------------------------------\ninterface InlineEditCellProps {\n field: RecordDialogField\n}\n\nfunction InlineEditCell({ field }: InlineEditCellProps) {\n const { t } = useLocale()\n const [editing, setEditing] = React.useState(false)\n const [draft, setDraft] = React.useState(String(field.value ?? ''))\n const inputRef = React.useRef<HTMLInputElement | HTMLTextAreaElement>(null)\n\n React.useEffect(() => {\n if (editing) {\n inputRef.current?.focus()\n if (inputRef.current instanceof HTMLInputElement) {\n inputRef.current.select()\n }\n }\n }, [editing])\n\n const commit = () => {\n setEditing(false)\n if (draft !== String(field.value ?? '')) {\n field.onEdit?.(field.type === 'number' ? Number(draft) : draft)\n }\n }\n\n const cancel = () => {\n setEditing(false)\n setDraft(String(field.value ?? ''))\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && field.type !== 'textarea') {\n e.preventDefault()\n commit()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n cancel()\n }\n }\n\n const preventBlur = (e: React.MouseEvent) => e.preventDefault()\n\n if (editing) {\n return (\n <div className=\"flex items-center gap-1\">\n {field.type === 'textarea' ? (\n <Textarea\n ref={inputRef as React.Ref<HTMLTextAreaElement>}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n cancel()\n }\n }}\n rows={3}\n className=\"text-sm\"\n />\n ) : field.type === 'select' ? (\n <Select\n value={draft}\n onValueChange={(v) => {\n field.onEdit?.(v)\n setEditing(false)\n }}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {field.options?.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Input\n ref={inputRef as React.Ref<HTMLInputElement>}\n type={getInputType(field.type)}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onKeyDown={handleKeyDown}\n className=\"h-8 text-sm\"\n />\n )}\n {field.type !== 'select' && (\n <>\n <button\n onMouseDown={preventBlur}\n onClick={commit}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded text-primary hover:text-primary/80 hover:bg-muted transition-colors\"\n aria-label={t('editable.save')}\n >\n <Check className=\"h-3.5 w-3.5\" />\n </button>\n <button\n onMouseDown={preventBlur}\n onClick={cancel}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors\"\n aria-label={t('editable.cancel')}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </>\n )}\n </div>\n )\n }\n\n return (\n <div\n className=\"group/field flex min-h-[28px] cursor-default items-center gap-1.5\"\n role={field.editable ? 'button' : undefined}\n tabIndex={field.editable ? 0 : undefined}\n onClick={() => field.editable && setEditing(true)}\n onKeyDown={(e) => {\n if (field.editable && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n setEditing(true)\n }\n }}\n >\n {field.renderView ? (\n field.renderView(field.value)\n ) : (\n <span className=\"text-sm\">\n {field.value ?? (\n <span className=\"text-muted-foreground\">{t('editable.emptyValue')}</span>\n )}\n </span>\n )}\n {field.editable && (\n <Pencil className=\"h-3 w-3 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover/field:opacity-100\" />\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Field input (edit/create mode - always shown as input)\n// ---------------------------------------------------------------------------\ninterface FieldInputProps {\n field: RecordDialogField\n}\n\nfunction FieldInput({ field }: FieldInputProps) {\n const { t } = useLocale()\n const { mode } = useRecordDialog()\n\n if (field.type === 'custom' && field.renderEdit) {\n return <>{field.renderEdit(field.value, (v) => field.onEdit?.(v))}</>\n }\n\n if (field.type === 'checkbox') {\n return (\n <div className=\"flex items-center gap-2 pt-1\">\n <Checkbox\n id={`field-${field.id}`}\n checked={Boolean(field.value)}\n onCheckedChange={(checked) => field.onEdit?.(checked)}\n disabled={!field.editable && mode !== 'create'}\n />\n <label htmlFor={`field-${field.id}`} className=\"text-sm\">\n {field.label}\n </label>\n </div>\n )\n }\n\n if (field.type === 'select') {\n return (\n <Select\n value={String(field.value ?? '')}\n onValueChange={(v) => field.onEdit?.(v)}\n disabled={!field.editable && mode !== 'create'}\n >\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue placeholder={field.placeholder || t('common.select')} />\n </SelectTrigger>\n <SelectContent>\n {field.options?.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n\n if (field.type === 'textarea') {\n return (\n <Textarea\n value={String(field.value ?? '')}\n onChange={(e) => field.onEdit?.(e.target.value)}\n placeholder={field.placeholder}\n rows={3}\n className=\"text-sm\"\n disabled={!field.editable && mode !== 'create'}\n />\n )\n }\n\n if (field.type === 'currency') {\n return (\n <div className=\"relative\">\n <span className=\"absolute left-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground\">\n $\n </span>\n <Input\n type=\"number\"\n value={String(field.value ?? '')}\n onChange={(e) => field.onEdit?.(e.target.value ? Number(e.target.value) : '')}\n placeholder={field.placeholder}\n className=\"h-9 pl-7 text-sm\"\n disabled={!field.editable && mode !== 'create'}\n />\n </div>\n )\n }\n\n return (\n <Input\n type={getInputType(field.type)}\n value={String(field.value ?? '')}\n onChange={(e) =>\n field.onEdit?.(field.type === 'number' ? Number(e.target.value) : e.target.value)\n }\n placeholder={field.placeholder}\n className=\"h-9 text-sm\"\n disabled={!field.editable && mode !== 'create'}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\nconst RecordDialogFields = React.forwardRef<HTMLDivElement, RecordDialogFieldsProps>(\n ({ fields, columns = 2, className }, ref) => {\n const { mode } = useRecordDialog()\n const { t } = useLocale()\n\n if (fields.length === 0) {\n return (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n {t('recordDialog.noFields')}\n </div>\n )\n }\n\n const gridClass = cn(\n 'grid gap-x-8 gap-y-5',\n columns === 1 && 'grid-cols-1',\n columns === 2 && 'grid-cols-1 sm:grid-cols-2',\n columns === 3 && 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3'\n )\n\n return (\n <div ref={ref} className={cn(gridClass, className)}>\n {fields.map((field) => {\n const isFormMode = mode === 'edit' || mode === 'create'\n const showAsInput =\n isFormMode && (field.editable || mode === 'create') && field.type !== 'checkbox'\n\n return (\n <div\n key={field.id}\n className={cn(field.fullWidth && 'col-span-full')}\n >\n {field.type !== 'checkbox' && (\n <label className=\"mb-1 block text-sm font-medium text-muted-foreground\">\n {field.label}\n {field.required && <span className=\"ml-0.5 text-destructive\">*</span>}\n </label>\n )}\n\n {showAsInput ? (\n <FieldInput field={field} />\n ) : field.type === 'checkbox' ? (\n <FieldInput field={field} />\n ) : (\n <InlineEditCell field={field} />\n )}\n\n {field.helpText && (\n <p className=\"mt-1 text-xs text-muted-foreground\">{field.helpText}</p>\n )}\n </div>\n )\n })}\n </div>\n )\n }\n)\nRecordDialogFields.displayName = 'RecordDialogFields'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\nfunction getInputType(fieldType?: RecordDialogFieldType): string {\n switch (fieldType) {\n case 'number':\n case 'currency':\n return 'number'\n case 'date':\n return 'date'\n case 'email':\n return 'email'\n case 'phone':\n return 'tel'\n case 'url':\n return 'url'\n default:\n return 'text'\n }\n}\n\nexport { RecordDialogFields }\n","import * as React from 'react'\nimport {\n Mail,\n Phone,\n MessageSquare,\n Calendar,\n CheckCircle2,\n Edit3,\n Activity,\n Send,\n} from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport { Button } from '@/components/ui/button'\nimport { Textarea } from '@/components/ui/textarea'\n\nexport type RecordDialogActivityType =\n | 'note'\n | 'email'\n | 'call'\n | 'meeting'\n | 'task'\n | 'update'\n | 'custom'\n\nexport interface RecordDialogActivityItem {\n id: string\n type: RecordDialogActivityType\n title: string\n description?: string\n timestamp: string | Date\n user?: { name: string; avatar?: string }\n icon?: React.ReactNode\n metadata?: Record<string, unknown>\n}\n\nexport interface RecordDialogActivityProps {\n activities: RecordDialogActivityItem[]\n showComposer?: boolean\n onActivityCreate?: (type: RecordDialogActivityType, content: string) => void\n className?: string\n}\n\nconst ACTIVITY_ICONS: Record<RecordDialogActivityType, React.ReactNode> = {\n note: <MessageSquare className=\"h-3.5 w-3.5\" />,\n email: <Mail className=\"h-3.5 w-3.5\" />,\n call: <Phone className=\"h-3.5 w-3.5\" />,\n meeting: <Calendar className=\"h-3.5 w-3.5\" />,\n task: <CheckCircle2 className=\"h-3.5 w-3.5\" />,\n update: <Edit3 className=\"h-3.5 w-3.5\" />,\n custom: <Activity className=\"h-3.5 w-3.5\" />,\n}\n\nconst ACTIVITY_COLORS: Record<RecordDialogActivityType, string> = {\n note: 'bg-blue-100 text-blue-600',\n email: 'bg-purple-100 text-purple-600',\n call: 'bg-green-100 text-green-600',\n meeting: 'bg-amber-100 text-amber-600',\n task: 'bg-emerald-100 text-emerald-600',\n update: 'bg-muted text-muted-foreground',\n custom: 'bg-muted text-muted-foreground',\n}\n\nconst COMPOSER_TYPES: { type: RecordDialogActivityType; labelKey: string; icon: React.ReactNode }[] = [\n { type: 'note', labelKey: 'activity.note', icon: <MessageSquare className=\"h-3.5 w-3.5\" /> },\n { type: 'email', labelKey: 'activity.email', icon: <Mail className=\"h-3.5 w-3.5\" /> },\n { type: 'call', labelKey: 'activity.call', icon: <Phone className=\"h-3.5 w-3.5\" /> },\n { type: 'meeting', labelKey: 'activity.meeting', icon: <Calendar className=\"h-3.5 w-3.5\" /> },\n { type: 'task', labelKey: 'activity.task', icon: <CheckCircle2 className=\"h-3.5 w-3.5\" /> },\n]\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n}\n\nfunction groupByDate(\n activities: RecordDialogActivityItem[]\n): { date: string; items: RecordDialogActivityItem[] }[] {\n const groups = new Map<string, RecordDialogActivityItem[]>()\n for (const activity of activities) {\n const d = activity.timestamp instanceof Date ? activity.timestamp : new Date(activity.timestamp)\n const key = d.toLocaleDateString()\n const existing = groups.get(key) ?? []\n existing.push(activity)\n groups.set(key, existing)\n }\n return Array.from(groups.entries()).map(([date, items]) => ({ date, items }))\n}\n\nconst RecordDialogActivity = React.forwardRef<HTMLDivElement, RecordDialogActivityProps>(\n ({ activities, showComposer, onActivityCreate, className }, ref) => {\n const { t } = useLocale()\n const [selectedType, setSelectedType] = React.useState<RecordDialogActivityType>('note')\n const [content, setContent] = React.useState('')\n\n const formatTs = (timestamp: string | Date): string => {\n const d = timestamp instanceof Date ? timestamp : new Date(timestamp)\n const now = new Date()\n const diff = now.getTime() - d.getTime()\n const mins = Math.floor(diff / 60000)\n if (mins < 1) return t('record.justNow')\n if (mins < 60) return t('record.minutesAgo', { count: mins })\n const hours = Math.floor(mins / 60)\n if (hours < 24) return t('record.hoursAgo', { count: hours })\n const days = Math.floor(hours / 24)\n if (days < 7) return t('record.daysAgo', { count: days })\n return d.toLocaleDateString()\n }\n\n const groups = groupByDate(\n [...activities].sort((a, b) => {\n const da = a.timestamp instanceof Date ? a.timestamp : new Date(a.timestamp)\n const db = b.timestamp instanceof Date ? b.timestamp : new Date(b.timestamp)\n return db.getTime() - da.getTime()\n })\n )\n\n const handleSubmit = () => {\n if (!content.trim()) return\n onActivityCreate?.(selectedType, content.trim())\n setContent('')\n }\n\n return (\n <div ref={ref} className={cn('flex flex-col', className)}>\n {/* Composer */}\n {showComposer && onActivityCreate && (\n <div className=\"mb-6 rounded-lg border bg-muted/30\">\n <div className=\"flex items-center gap-1 border-b px-3 py-1.5\">\n {COMPOSER_TYPES.map((btn) => (\n <button\n key={btn.type}\n type=\"button\"\n onClick={() => setSelectedType(btn.type)}\n className={cn(\n 'flex items-center gap-1.5 rounded-md px-2.5 py-1 text-xs transition-colors',\n selectedType === btn.type\n ? 'bg-primary/10 text-primary font-medium'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground'\n )}\n >\n {btn.icon}\n {t(btn.labelKey)}\n </button>\n ))}\n </div>\n <div className=\"flex items-end gap-2 px-3 py-2.5\">\n <Textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n placeholder={t('activity.addPlaceholder', { type: t(`activity.${selectedType}`) })}\n rows={2}\n className=\"min-h-[60px] resize-none text-sm\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSubmit()\n }\n }}\n />\n <Button\n size=\"sm\"\n onClick={handleSubmit}\n disabled={!content.trim()}\n className=\"shrink-0\"\n >\n <Send className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n )}\n\n {/* Timeline */}\n {activities.length === 0 ? (\n <div className=\"flex items-center justify-center py-8 text-sm text-muted-foreground\">\n {t('record.noActivity')}\n </div>\n ) : (\n <div className=\"space-y-6\">\n {groups.map((group) => (\n <div key={group.date}>\n <p className=\"mb-3 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n {group.date}\n </p>\n <div className=\"space-y-3\">\n {group.items.map((activity) => (\n <div key={activity.id} className=\"flex gap-3\">\n <div\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full',\n ACTIVITY_COLORS[activity.type]\n )}\n >\n {activity.icon ?? ACTIVITY_ICONS[activity.type]}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{activity.title}</span>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatTs(activity.timestamp)}\n </span>\n </div>\n {activity.description && (\n <p className=\"mt-0.5 text-xs text-muted-foreground line-clamp-2\">\n {activity.description}\n </p>\n )}\n {activity.user && (\n <div className=\"mt-1 flex items-center gap-1.5\">\n <Avatar className=\"h-4 w-4\">\n <AvatarImage src={activity.user.avatar} alt={activity.user.name} />\n <AvatarFallback className=\"text-[7px]\">\n {getInitials(activity.user.name)}\n </AvatarFallback>\n </Avatar>\n <span className=\"text-[10px] text-muted-foreground\">\n {activity.user.name}\n </span>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n }\n)\nRecordDialogActivity.displayName = 'RecordDialogActivity'\n\nexport { RecordDialogActivity }\n","import * as React from 'react'\nimport { ChevronRight, Link2, Plus } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Button } from '@/components/ui/button'\n\nexport interface RecordDialogRelatedEntity {\n id: string\n type: string\n label: string\n subtitle?: string\n icon?: React.ReactNode\n href?: string\n onClick?: () => void\n}\n\nexport interface RecordDialogRelatedProps {\n entities: RecordDialogRelatedEntity[]\n onAdd?: () => void\n className?: string\n}\n\nconst RecordDialogRelated = React.forwardRef<HTMLDivElement, RecordDialogRelatedProps>(\n ({ entities, onAdd, className }, ref) => {\n const { t } = useLocale()\n\n if (entities.length === 0) {\n return (\n <div ref={ref} className={cn('flex flex-col items-center justify-center py-8', className)}>\n <p className=\"text-sm text-muted-foreground\">{t('record.noRelated')}</p>\n {onAdd && (\n <Button variant=\"outline\" size=\"sm\" onClick={onAdd} className=\"mt-3\">\n <Plus className=\"mr-1.5 h-3.5 w-3.5\" />\n {t('recordDialog.addRelated')}\n </Button>\n )}\n </div>\n )\n }\n\n // Group by type\n const grouped = new Map<string, RecordDialogRelatedEntity[]>()\n for (const entity of entities) {\n const existing = grouped.get(entity.type) ?? []\n existing.push(entity)\n grouped.set(entity.type, existing)\n }\n\n return (\n <div ref={ref} className={cn('space-y-6', className)}>\n {onAdd && (\n <div className=\"flex justify-end\">\n <Button variant=\"outline\" size=\"sm\" onClick={onAdd}>\n <Plus className=\"mr-1.5 h-3.5 w-3.5\" />\n {t('recordDialog.addRelated')}\n </Button>\n </div>\n )}\n\n {Array.from(grouped.entries()).map(([type, items]) => (\n <div key={type}>\n <div className=\"mb-2 flex items-center gap-1.5\">\n <Link2 className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <p className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {type} ({items.length})\n </p>\n </div>\n <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n {items.map((entity) => (\n <button\n key={entity.id}\n type=\"button\"\n onClick={entity.onClick}\n className={cn(\n 'flex w-full items-center gap-3 rounded-lg border bg-card p-3 text-left transition-colors hover:bg-muted/50',\n entity.onClick && 'cursor-pointer',\n !entity.onClick && 'cursor-default'\n )}\n >\n {entity.icon && (\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md bg-muted text-muted-foreground\">\n {entity.icon}\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium\">{entity.label}</p>\n {entity.subtitle && (\n <p className=\"truncate text-xs text-muted-foreground\">{entity.subtitle}</p>\n )}\n </div>\n {entity.onClick && (\n <ChevronRight className=\"h-4 w-4 shrink-0 text-muted-foreground/50\" />\n )}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n )\n }\n)\nRecordDialogRelated.displayName = 'RecordDialogRelated'\n\nexport { RecordDialogRelated }\n","import * as React from 'react'\nimport { Loader2 } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { Button } from '@/components/ui/button'\nimport { useLocale } from '@/providers/locale-provider'\nimport { useRecordDialog } from './record-dialog-context'\nimport type { RecordDialogAction } from './record-dialog-types'\n\nexport interface RecordDialogFooterProps {\n actions?: RecordDialogAction[]\n onSubmit?: () => void | Promise<void>\n onCancel?: () => void\n submitLabel?: string\n cancelLabel?: string\n className?: string\n}\n\nconst RecordDialogFooter = React.forwardRef<HTMLDivElement, RecordDialogFooterProps>(\n ({ actions = [], onSubmit, onCancel, submitLabel, cancelLabel, className }, ref) => {\n const { mode, isSubmitting, setIsSubmitting } = useRecordDialog()\n const { t } = useLocale()\n\n const visibleActions = actions.filter(\n (a) => !a.showInModes || a.showInModes.includes(mode)\n )\n const leftActions = visibleActions.filter((a) => a.variant === 'destructive')\n const rightActions = visibleActions.filter((a) => a.variant !== 'destructive')\n\n const handleSubmit = async () => {\n if (!onSubmit) return\n setIsSubmitting(true)\n try {\n await onSubmit()\n } finally {\n setIsSubmitting(false)\n }\n }\n\n const getSubmitLabel = () => {\n if (isSubmitting) {\n return mode === 'create' ? t('record.creating') : t('record.saving')\n }\n return submitLabel ?? (mode === 'create' ? t('record.create') : t('record.saveChanges'))\n }\n\n const showSubmit = mode === 'edit' || mode === 'create'\n\n return (\n <div\n ref={ref}\n className={cn(\n 'sticky bottom-0 z-10 flex items-center justify-between border-t bg-background px-6 py-3 sm:px-8',\n className\n )}\n >\n <div className=\"flex items-center gap-2\">\n {leftActions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant}\n size=\"sm\"\n onClick={action.onClick}\n disabled={action.disabled || action.loading || isSubmitting}\n >\n {action.icon && <span className=\"mr-1.5\">{action.icon}</span>}\n {action.label}\n </Button>\n ))}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {rightActions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant ?? 'outline'}\n size=\"sm\"\n onClick={action.onClick}\n disabled={action.disabled || action.loading || isSubmitting}\n >\n {action.icon && <span className=\"mr-1.5\">{action.icon}</span>}\n {action.label}\n </Button>\n ))}\n\n {showSubmit && onCancel && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onCancel}\n disabled={isSubmitting}\n >\n {cancelLabel ?? t('common.cancel')}\n </Button>\n )}\n\n {showSubmit && onSubmit && (\n <Button size=\"sm\" onClick={handleSubmit} disabled={isSubmitting}>\n {isSubmitting && <Loader2 className=\"mr-1.5 h-4 w-4 animate-spin\" />}\n {getSubmitLabel()}\n </Button>\n )}\n </div>\n </div>\n )\n }\n)\nRecordDialogFooter.displayName = 'RecordDialogFooter'\n\nexport { RecordDialogFooter }\n"],"names":["Activity","createLucideIcon","ArrowDown","ArrowUp","CircleCheck","LayoutGrid","Link2","List","AppShell","React","className","children","props","ref","jsx","cn","AppShellHeader","AppShellMain","AppShellFooter","PageHeader","heading","description","actions","jsxs","DashboardLayoutContext","useDashboardLayout","context","DashboardLayout","controlledSidebarOpen","onSidebarOpenChange","controlledSidebarCollapsed","onSidebarCollapsedChange","defaultSidebarOpen","defaultSidebarCollapsed","sidebarWidth","sidebarCollapsedWidth","isMobile","useIsMobile","sidebarOpen","setSidebarOpen","useControllableState","sidebarCollapsed","setSidebarCollapsed","toggleSidebar","prev","handleKeyDown","event","contextValue","DashboardSidebar","Sheet","SheetContent","DashboardContent","DashboardHeader","DashboardMain","DashboardFooter","rightPanelSizeMap","DashboardRightPanel","open","onOpenChange","size","ScrollArea","PRIORITY_COLORS","PipelineContext","usePipeline","Pipeline","stages","items","defaultView","controlledView","onViewChange","controlledSelectedItems","defaultSelectedItems","onSelectedItemsChange","controlledSearchQuery","defaultSearchQuery","onSearchQueryChange","controlledGroupBy","defaultGroupBy","onGroupByChange","onItemMove","onItemClick","onItemAdd","onItemEdit","onItemDelete","view","setViewState","selectedItems","setSelectedItemsState","searchQuery","setSearchQueryState","groupByValue","setGroupByValueState","field","groupBy","filteredItems","query","item","_a","_b","nextView","ids","PipelineHeader","showViewSelector","showSearch","showAddButton","addButtonLabel","onAdd","title","setView","setSearchQuery","t","useFormatters","viewOptions","Table2","Calendar","Badge","Search","Input","e","option","Button","Filter","Plus","PipelineContent","Fragment","PipelineKanban","PipelineList","PipelineTable","PipelineTimeline","SortablePipelineCard","stageId","renderItem","defaultRenderItem","attributes","listeners","setNodeRef","transform","transition","isSortableDragging","useSortable","style","CSS","DroppableColumn","stage","columnWidth","getStageTotal","formatCurrency","itemIds","isOverWipLimit","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","SortableContext","verticalListSortingStrategy","formatDate","activeItem","setActiveItem","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","itemsByStage","grouped","sum","Card","CardContent","handleDragStart","active","activeData","handleDragOver","_event","handleDragEnd","over","overData","fromStageId","toStageId","overItem","sortedStages","a","b","DndContext","closestCorners","ScrollBar","DragOverlay","setSelectedItems","toggleSelect","itemId","id","priorityColors","Checkbox","GripVertical","_c","stageMap","map","toggleSelectAll","itemsByDate","today","dateA","dateB","dateKey","dateKeys","getDateLabel","date","todayDate","diff","isOverdue","PipelineSummary","totalValue","totalItems","stageStats","stageItems","value","RecordHeader","subtitle","avatar","status","fields","ACTIVITY_ICONS","MessageSquare","Mail","Phone","CheckCircle2","Edit3","ACTIVITY_COLORS","getInitials","name","n","groupByDate","activities","groups","activity","key","existing","RecordTimeline","useLocale","formatTs","timestamp","d","mins","hours","days","da","group","Avatar","AvatarImage","AvatarFallback","RecordRelated","entities","entity","type","ChevronRight","ACTIVITY_BUTTONS","RecordActivityComposer","onSubmit","selectedType","setSelectedType","useState","content","setContent","activityLabels","handleSubmit","btn","Textarea","Send","RecordShell","relatedEntities","tabs","defaultTab","controlledActiveTab","onTabChange","onActivityCreate","showComposer","sidebarContent","internalTab","setInternalTab","currentTab","handleTabChange","tabId","activeTabContent","Tabs","TabsList","TabsTrigger","tab","sizeMap","RecordPanel","RecordPanelHeader","action","EditableFieldCell","editing","setEditing","draft","setDraft","inputRef","commit","cancel","preventBlur","Check","X","Pencil","RecordPanelFields","RecordPanelTabs","activeTab","fallbackDefault","TabsContent","part","RecordPanelActivity","maxItems","onViewAll","visibleItems","hasMore","ts","diffMs","diffMins","diffHours","diffDays","QuickView","trigger","onOpenFull","mode","setOpen","closeTimerRef","isHover","clearCloseTimer","scheduleClose","hoverTriggerProps","hoverContentProps","Separator","ExternalLink","Popover","PopoverTrigger","PopoverContent","getInputType","fieldType","RecordFormDialog","defaultValues","values","setValues","submitting","setSubmitting","initial","updateField","dialogTitle","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Label","Select","v","SelectTrigger","SelectValue","SelectContent","SelectItem","DialogFooter","RecordDialogContext","useRecordDialog","RecordDialogProvider","onModeChange","isDirty","setIsDirty","isSubmitting","setIsSubmitting","setMode","newMode","RecordDialog","ariaTitle","RecordDialogHeader","visibleActions","primaryActions","overflowActions","DialogClose","DIRECTION_STYLES","DIRECTION_ICONS","Minus","RecordDialogHighlight","idx","RecordDialogBody","visibleTabs","defaultValue","RecordDialogSection","icon","defaultCollapsed","Accordion","AccordionItem","AccordionTrigger","AccordionContent","InlineEditCell","opt","FieldInput","checked","RecordDialogFields","columns","gridClass","showAsInput","COMPOSER_TYPES","RecordDialogActivity","RecordDialogRelated","RecordDialogFooter","onCancel","submitLabel","cancelLabel","leftActions","rightActions","getSubmitLabel","showSubmit","Loader2"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}