admin-ui-starter-kit 0.6.1 → 0.6.4

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 (498) hide show
  1. package/.agents/skills/component-library-rules/references/components/services__hooks.md +6 -1
  2. package/dist/_shared/{auth-B_KVUjsB.cjs → auth-DdezEtKK.cjs} +2 -2
  3. package/dist/_shared/{auth-B_KVUjsB.cjs.map → auth-DdezEtKK.cjs.map} +1 -1
  4. package/dist/_shared/{auth-C_TgyzDl.js → auth-e7yab9pK.js} +2 -2
  5. package/dist/_shared/{auth-C_TgyzDl.js.map → auth-e7yab9pK.js.map} +1 -1
  6. package/dist/_shared/{buttons-C8jy-jMd.cjs → buttons-Bek9F7qK.cjs} +2 -2
  7. package/dist/_shared/{buttons-C8jy-jMd.cjs.map → buttons-Bek9F7qK.cjs.map} +1 -1
  8. package/dist/_shared/{buttons-MxvdokeK.js → buttons-DcynMPnE.js} +2 -2
  9. package/dist/_shared/{buttons-MxvdokeK.js.map → buttons-DcynMPnE.js.map} +1 -1
  10. package/dist/_shared/cards-CbbHly7W.cjs +2 -0
  11. package/dist/_shared/cards-CbbHly7W.cjs.map +1 -0
  12. package/dist/_shared/{cards-CtBoSZG9.js → cards-RZxRLx3f.js} +6 -6
  13. package/dist/_shared/cards-RZxRLx3f.js.map +1 -0
  14. package/dist/_shared/{comments-DGBxF9fD.js → comments-BJqgvSFY.js} +2 -2
  15. package/dist/_shared/{comments-DGBxF9fD.js.map → comments-BJqgvSFY.js.map} +1 -1
  16. package/dist/_shared/{comments-C8iXy9XO.cjs → comments-BjPciQfo.cjs} +2 -2
  17. package/dist/_shared/{comments-C8iXy9XO.cjs.map → comments-BjPciQfo.cjs.map} +1 -1
  18. package/dist/_shared/{data-display-C_44_V-W.cjs → data-display-C21skrV4.cjs} +2 -2
  19. package/dist/_shared/{data-display-C_44_V-W.cjs.map → data-display-C21skrV4.cjs.map} +1 -1
  20. package/dist/_shared/{data-display-CRFaMkxT.js → data-display-C5-1dZua.js} +71 -71
  21. package/dist/_shared/{data-display-CRFaMkxT.js.map → data-display-C5-1dZua.js.map} +1 -1
  22. package/dist/_shared/{forms-qnwoUqxf.js → forms-BoquZE2Y.js} +3 -3
  23. package/dist/_shared/{forms-qnwoUqxf.js.map → forms-BoquZE2Y.js.map} +1 -1
  24. package/dist/_shared/{forms-rmKcy5uO.cjs → forms-CzrEYejY.cjs} +2 -2
  25. package/dist/_shared/{forms-rmKcy5uO.cjs.map → forms-CzrEYejY.cjs.map} +1 -1
  26. package/dist/_shared/{overlays-CdtMAkKG.js → overlays-DW8OIK5R.js} +134 -47
  27. package/dist/_shared/overlays-DW8OIK5R.js.map +1 -0
  28. package/dist/_shared/overlays-Du65iCkx.cjs +2 -0
  29. package/dist/_shared/overlays-Du65iCkx.cjs.map +1 -0
  30. package/dist/_shared/{page-C6EzwvTz.cjs → page-D8UMXREv.cjs} +2 -2
  31. package/dist/_shared/{page-C6EzwvTz.cjs.map → page-D8UMXREv.cjs.map} +1 -1
  32. package/dist/_shared/{page-DCW1eWCJ.js → page-D9LNsHMN.js} +2 -2
  33. package/dist/_shared/{page-DCW1eWCJ.js.map → page-D9LNsHMN.js.map} +1 -1
  34. package/dist/_shared/{settings-QOBrbgdN.js → settings-BeZOIEJB.js} +2 -2
  35. package/dist/_shared/{settings-QOBrbgdN.js.map → settings-BeZOIEJB.js.map} +1 -1
  36. package/dist/_shared/{settings-DbAyxMrX.cjs → settings-DI-K34bW.cjs} +2 -2
  37. package/dist/_shared/{settings-DbAyxMrX.cjs.map → settings-DI-K34bW.cjs.map} +1 -1
  38. package/dist/_shared/{table-CUA_A-oO.js → table-B_pqCQxC.js} +3 -3
  39. package/dist/_shared/table-B_pqCQxC.js.map +1 -0
  40. package/dist/_shared/table-CGVOXtdv.cjs +2 -0
  41. package/dist/_shared/table-CGVOXtdv.cjs.map +1 -0
  42. package/dist/components/base/buttons/index.cjs +1 -1
  43. package/dist/components/base/buttons/index.js +1 -1
  44. package/dist/components/base/cards/index.cjs +1 -1
  45. package/dist/components/base/cards/index.js +1 -1
  46. package/dist/components/base/forms/index.cjs +1 -1
  47. package/dist/components/base/forms/index.js +1 -1
  48. package/dist/components/base/table/index.cjs +1 -1
  49. package/dist/components/base/table/index.js +1 -1
  50. package/dist/components/composed/admin/index.cjs +1 -1
  51. package/dist/components/composed/admin/index.js +2 -2
  52. package/dist/components/composed/ai/index.cjs +1 -1
  53. package/dist/components/composed/ai/index.js +2 -2
  54. package/dist/components/composed/analytics/index.cjs +1 -1
  55. package/dist/components/composed/analytics/index.js +1 -1
  56. package/dist/components/composed/cards/index.cjs +1 -1
  57. package/dist/components/composed/cards/index.js +2 -2
  58. package/dist/components/composed/commerce/index.cjs +1 -1
  59. package/dist/components/composed/commerce/index.js +2 -2
  60. package/dist/components/composed/dark-surfaces/index.cjs +1 -1
  61. package/dist/components/composed/dark-surfaces/index.js +1 -1
  62. package/dist/components/composed/data-display/index.cjs +1 -1
  63. package/dist/components/composed/data-display/index.js +1 -1
  64. package/dist/components/composed/data-display/metadata/metadata-list.d.ts.map +1 -1
  65. package/dist/components/composed/navigation/index.cjs +1 -1
  66. package/dist/components/composed/navigation/index.js +1 -1
  67. package/dist/components/composed/timelines/index.cjs +1 -1
  68. package/dist/components/composed/timelines/index.js +1 -1
  69. package/dist/components/features/activities/index.cjs +1 -1
  70. package/dist/components/features/activities/index.js +1 -1
  71. package/dist/components/features/card/index.cjs +1 -1
  72. package/dist/components/features/card/index.js +2 -2
  73. package/dist/components/features/comments/index.cjs +1 -1
  74. package/dist/components/features/comments/index.js +1 -1
  75. package/dist/components/features/event-log/index.cjs +1 -1
  76. package/dist/components/features/event-log/index.js +2 -2
  77. package/dist/components/features/media-library/index.cjs +1 -1
  78. package/dist/components/features/media-library/index.js +2 -2
  79. package/dist/components/features/overlays/hooks/index.d.ts +1 -0
  80. package/dist/components/features/overlays/hooks/index.d.ts.map +1 -1
  81. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +33 -0
  82. package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts.map +1 -0
  83. package/dist/components/features/overlays/index.cjs +1 -1
  84. package/dist/components/features/overlays/index.d.ts +1 -1
  85. package/dist/components/features/overlays/index.d.ts.map +1 -1
  86. package/dist/components/features/overlays/index.js +2 -2
  87. package/dist/components/features/products/index.cjs +1 -1
  88. package/dist/components/features/products/index.js +4 -4
  89. package/dist/components/features/resource/index.cjs +1 -1
  90. package/dist/components/features/resource/index.js +2 -2
  91. package/dist/components/features/schema-form/index.cjs +1 -1
  92. package/dist/components/features/schema-form/index.js +2 -2
  93. package/dist/components/layout/auth/index.cjs +1 -1
  94. package/dist/components/layout/auth/index.js +1 -1
  95. package/dist/components/layout/index.cjs +1 -1
  96. package/dist/components/layout/index.js +3 -3
  97. package/dist/components/layout/page/index.cjs +1 -1
  98. package/dist/components/layout/page/index.js +1 -1
  99. package/dist/components/layout/settings/index.cjs +1 -1
  100. package/dist/components/layout/settings/index.js +1 -1
  101. package/dist/services/actions/index.cjs +1 -1
  102. package/dist/services/actions/index.js +1 -1
  103. package/dist/showcase/assets/{AreaChart-CGkuyNyy.js → AreaChart-Y0ZwblHU.js} +1 -1
  104. package/dist/showcase/assets/{CompositeItem-DAQ048AO.js → CompositeItem-BIY_Cp7P.js} +1 -1
  105. package/dist/showcase/assets/{CompositeRoot-8-OuCMMq.js → CompositeRoot-DSPvBRQr.js} +1 -1
  106. package/dist/showcase/assets/{DialogTrigger-1P-jwcoH.js → DialogTrigger-DHUp8vXe.js} +1 -1
  107. package/dist/showcase/assets/{LabelableContext-BDyZArAc.js → LabelableContext-CasUI4hR.js} +1 -1
  108. package/dist/showcase/assets/{PreviewLayout-wYGhlcJt.js → PreviewLayout-B_l930k0.js} +1 -1
  109. package/dist/showcase/assets/{RadioGroup-DuiI4W--.js → RadioGroup-BgZ-UH79.js} +1 -1
  110. package/dist/showcase/assets/{ScrollAreaCorner-Df5uTkWT.js → ScrollAreaCorner-BbwFElLA.js} +1 -1
  111. package/dist/showcase/assets/{Separator-BuTBo5a_.js → Separator-dQuencsA.js} +1 -1
  112. package/dist/showcase/assets/{ToolbarRootContext-B4S4Fn7d.js → ToolbarRootContext-BE0hbejq.js} +1 -1
  113. package/dist/showcase/assets/{accordion-D3beuJpC.js → accordion-D93ZNsLn.js} +1 -1
  114. package/dist/showcase/assets/{accordion-variants-BTMpfSPI.js → accordion-variants-Bl4bIQH4.js} +1 -1
  115. package/dist/showcase/assets/{action-menu-DsAr1OqF.js → action-menu--rEgMzDi.js} +1 -1
  116. package/dist/showcase/assets/{actions-BzyHAEZR.js → actions-3iedOWD9.js} +1 -1
  117. package/dist/showcase/assets/{activities-BgoelWKu.js → activities-CyrAWFlu.js} +1 -1
  118. package/dist/showcase/assets/{activities-feed-card-DI4MIm3-.js → activities-feed-card-bhIATc2O.js} +1 -1
  119. package/dist/showcase/assets/{admin-n-JemkNh.js → admin-CZzNsj2q.js} +1 -1
  120. package/dist/showcase/assets/{ai-BXyk1mT0.js → ai-CasHwkW4.js} +1 -1
  121. package/dist/showcase/assets/{ai-artifact-C8CmZ94f.js → ai-artifact-BgWvrLAb.js} +1 -1
  122. package/dist/showcase/assets/{ai-chat-CTQQ4e4X.js → ai-chat-seS9aW-1.js} +1 -1
  123. package/dist/showcase/assets/{ai-elements-DGnlBq8E.js → ai-elements-Tku5_ous.js} +1 -1
  124. package/dist/showcase/assets/{ai-tool-call-bHnWNBtN.js → ai-tool-call-BU6xbmXG.js} +1 -1
  125. package/dist/showcase/assets/{alert-bPnj3_cC.js → alert-6Emt6KX2.js} +1 -1
  126. package/dist/showcase/assets/{alert-CIHGXUul.js → alert-B6aLWiRW.js} +1 -1
  127. package/dist/showcase/assets/{alert-N79A6qIx.js → alert-CtoTQ0vN.js} +1 -1
  128. package/dist/showcase/assets/{api-key-list-Bf1KoRJq.js → api-key-list-C0glWR3z.js} +1 -1
  129. package/dist/showcase/assets/{api-key-list-DyZ_DaRx.js → api-key-list-DcWSbY3u.js} +1 -1
  130. package/dist/showcase/assets/{app-sidebar-Co0LUSvz.js → app-sidebar-D_eNP_jh.js} +1 -1
  131. package/dist/showcase/assets/arrow-down-qyKZ1H5j.js +1 -0
  132. package/dist/showcase/assets/arrow-left-C9I0h_su.js +1 -0
  133. package/dist/showcase/assets/arrow-right-DswaRsr6.js +1 -0
  134. package/dist/showcase/assets/arrow-up-5BijPOxK.js +1 -0
  135. package/dist/showcase/assets/arrow-up-right-CbVVNT6g.js +1 -0
  136. package/dist/showcase/assets/{avatar-DKLsNeBi.js → avatar-BYHVCvVW.js} +1 -1
  137. package/dist/showcase/assets/{avatar-D3kvVy00.js → avatar-BlLAVC87.js} +1 -1
  138. package/dist/showcase/assets/{avatar-CJaCYGWf.js → avatar-DQTXjcS4.js} +1 -1
  139. package/dist/showcase/assets/{avatar-CxwFyL4T.js → avatar-DveZy09C.js} +1 -1
  140. package/dist/showcase/assets/{badge-CSMmwDLr.js → badge-Bth3mRTh.js} +1 -1
  141. package/dist/showcase/assets/{badge-check-TQRmqI7C.js → badge-check-DocF8Ho3.js} +1 -1
  142. package/dist/showcase/assets/{bell-CwRy7zpP.js → bell-DXBoeAzi.js} +1 -1
  143. package/dist/showcase/assets/{bot-Bt02Uzhq.js → bot-Ch-Y1HK8.js} +1 -1
  144. package/dist/showcase/assets/{box-Bfv5RQBf.js → box-72m9QSDa.js} +1 -1
  145. package/dist/showcase/assets/{braces-CxUoAPd4.js → braces-CC17X3TE.js} +1 -1
  146. package/dist/showcase/assets/{brain-CNapE0CP.js → brain-Dvbla_5x.js} +1 -1
  147. package/dist/showcase/assets/{brand-CBq1YoS0.js → brand-D5ciAq8v.js} +1 -1
  148. package/dist/showcase/assets/{breadcrumb-DyXpErBT.js → breadcrumb-BBCaOVyz.js} +1 -1
  149. package/dist/showcase/assets/{breadcrumb-DRioiUd_.js → breadcrumb-Bt8yVTCj.js} +1 -1
  150. package/dist/showcase/assets/{breadcrumbs-BzHeoItO.js → breadcrumbs-CkVWfcAN.js} +1 -1
  151. package/dist/showcase/assets/{briefcase-N74Hu0O2.js → briefcase-8rQTJwpE.js} +1 -1
  152. package/dist/showcase/assets/{building-2-D81ygy-F.js → building-2-CV7gTtXz.js} +1 -1
  153. package/dist/showcase/assets/{button-Bgqg7AmN.js → button-HGjoBio3.js} +1 -1
  154. package/dist/showcase/assets/{button-group-DPV1XIW3.js → button-group-LWToSCrp.js} +1 -1
  155. package/dist/showcase/assets/{buttons-qpZWlILG.js → buttons-Bn_dX6Kk.js} +1 -1
  156. package/dist/showcase/assets/{calendar-DcYyOrNY.js → calendar-BTsffmY8.js} +1 -1
  157. package/dist/showcase/assets/{calendar-BXG5CwbY.js → calendar-Bhpyn4u0.js} +1 -1
  158. package/dist/showcase/assets/{calendar-D-CSqGtC.js → calendar-DjrUTKcD.js} +1 -1
  159. package/dist/showcase/assets/{calendar-days-CNNiyV9e.js → calendar-days-BKCkzWjV.js} +1 -1
  160. package/dist/showcase/assets/{camera-D0yVo0xC.js → camera-EjpDG3mc.js} +1 -1
  161. package/dist/showcase/assets/{card-CH7Ev3xS.js → card-Bp6iGuOF.js} +1 -1
  162. package/dist/showcase/assets/{card-Bl-y9-8y.js → card-CHc6AVFt.js} +1 -1
  163. package/dist/showcase/assets/card-primitives-Bv6XGPJd.js +1 -0
  164. package/dist/showcase/assets/{card-radio-group-DpeIWyiO.js → card-radio-group-Ce9FsiSv.js} +1 -1
  165. package/dist/showcase/assets/{cards-7xave3ub.js → cards-_CGG9zir.js} +1 -1
  166. package/dist/showcase/assets/{carousel--kHTFkC7.js → carousel-BVbsKH2W.js} +1 -1
  167. package/dist/showcase/assets/{cell-renderers-Cx8rAZln.js → cell-renderers-CosD6Gby.js} +1 -1
  168. package/dist/showcase/assets/{chart-DU8INHbt.js → chart-CwOp8Sf8.js} +1 -1
  169. package/dist/showcase/assets/{chart-column-Dbekq8cy.js → chart-column-sz871NdJ.js} +1 -1
  170. package/dist/showcase/assets/{checkbox-ClPnzko9.js → checkbox-BO38TYqr.js} +1 -1
  171. package/dist/showcase/assets/checkbox-W4MhlPlJ.js +1 -0
  172. package/dist/showcase/assets/chevron-down-BFh1Fz2P.js +1 -0
  173. package/dist/showcase/assets/chevron-left-C5_X5glO.js +1 -0
  174. package/dist/showcase/assets/chevron-up-DPH3boVS.js +1 -0
  175. package/dist/showcase/assets/chevrons-up-down-CM5mIDaw.js +1 -0
  176. package/dist/showcase/assets/circle-BFDzL1iF.js +1 -0
  177. package/dist/showcase/assets/{circle-alert-9j29FrsT.js → circle-alert-C6MbOB0m.js} +1 -1
  178. package/dist/showcase/assets/circle-check-C0X85t4j.js +1 -0
  179. package/dist/showcase/assets/circle-check-big-CBaodck_.js +1 -0
  180. package/dist/showcase/assets/circle-dot-DdRpIhnL.js +1 -0
  181. package/dist/showcase/assets/{circle-question-mark-BRiF5RV4.js → circle-question-mark-CKlcead7.js} +1 -1
  182. package/dist/showcase/assets/{circle-x-BF20gddw.js → circle-x-MO44aKHe.js} +1 -1
  183. package/dist/showcase/assets/clock-3-CXQJFcbh.js +1 -0
  184. package/dist/showcase/assets/clock-GhBJJ6n1.js +1 -0
  185. package/dist/showcase/assets/{code-xml-D2f-X63y.js → code-xml-BSX7Qyi5.js} +1 -1
  186. package/dist/showcase/assets/{collapsible-CF0oQTVS.js → collapsible-CZLTO5EH.js} +1 -1
  187. package/dist/showcase/assets/{collapsible-Ru5-bssh.js → collapsible-LrDO_sSQ.js} +1 -1
  188. package/dist/showcase/assets/{combobox-DpJTW_Rq.js → combobox-TmDBXkM-.js} +1 -1
  189. package/dist/showcase/assets/{command-Dno8Ogez.js → command-9-r1qrJt.js} +1 -1
  190. package/dist/showcase/assets/{command-LRFStKBy.js → command-DGne3l9s.js} +1 -1
  191. package/dist/showcase/assets/{comment-composer-Dht7nfbv.js → comment-composer-BI0qnvuY.js} +1 -1
  192. package/dist/showcase/assets/{comment-item-B6IgQsMr.js → comment-item-Cedds6Lm.js} +1 -1
  193. package/dist/showcase/assets/{comments-B3ksV3Mn.js → comments-De02NOns.js} +1 -1
  194. package/dist/showcase/assets/{commerce-B1_Offbz.js → commerce-DldtS83o.js} +1 -1
  195. package/dist/showcase/assets/{composite-BjQWIYF-.js → composite-BjZZlzzb.js} +1 -1
  196. package/dist/showcase/assets/{contact-card-Bss4YHZz.js → contact-card-muCZ3uXV.js} +1 -1
  197. package/dist/showcase/assets/{content-container-D4BM1Zro.js → content-container-BxSLICeL.js} +1 -1
  198. package/dist/showcase/assets/{copyable-Dst8oaw5.js → copyable-DYhhmTqM.js} +1 -1
  199. package/dist/showcase/assets/{copyable-C0J88R_R.js → copyable-MNU75-J9.js} +1 -1
  200. package/dist/showcase/assets/{course-card-BuqwjqtO.js → course-card-Dl1wsuJx.js} +1 -1
  201. package/dist/showcase/assets/{cpu-CFy0M0rN.js → cpu-CsWq4fcX.js} +1 -1
  202. package/dist/showcase/assets/{credit-card-CFq0S1Ma.js → credit-card-B0AUZiWw.js} +1 -1
  203. package/dist/showcase/assets/{css-variables-BAALjDwD.js → css-variables-Be7DzahT.js} +1 -1
  204. package/dist/showcase/assets/{currency-BZzZRv2_.js → currency-BtPM_Xtw.js} +1 -1
  205. package/dist/showcase/assets/{dark-surfaces-CVKt2Yww.js → dark-surfaces-DRFERSEv.js} +1 -1
  206. package/dist/showcase/assets/{data-view-Be0uoLqL.js → data-view-DmWd0h7G.js} +2 -2
  207. package/dist/showcase/assets/{data-view-D6_zyFwk.js → data-view-DnLH2o0i.js} +1 -1
  208. package/dist/showcase/assets/{database-DSC-ysYT.js → database-C0YqGaQ_.js} +1 -1
  209. package/dist/showcase/assets/{date-block-Bgu_LMxB.js → date-block-BQH25FLS.js} +1 -1
  210. package/dist/showcase/assets/{date-picker-ByYEZGMg.js → date-picker-BF-jevhh.js} +1 -1
  211. package/dist/showcase/assets/{date-pickers-DzSQrvWs.js → date-pickers-q2v3ajJm.js} +1 -1
  212. package/dist/showcase/assets/{dense-info-BhFkOQbt.js → dense-info-Cb-roqDU.js} +1 -1
  213. package/dist/showcase/assets/{design-system-consistency-D6iCJLcr.js → design-system-consistency-DMSJknaM.js} +1 -1
  214. package/dist/showcase/assets/{dialog-C1heXuxu.js → dialog-C0ALRmbP.js} +1 -1
  215. package/dist/showcase/assets/{dialog-DzrcsKvl.js → dialog-CbXon08k.js} +1 -1
  216. package/dist/showcase/assets/{display-utilities-eu-EVMrx.js → display-utilities-kBUVw7o3.js} +1 -1
  217. package/dist/showcase/assets/{dist-DV4Tv32d.js → dist-CTSkWj_M.js} +1 -1
  218. package/dist/showcase/assets/{dist-BlIID0_L.js → dist-W8bxVfew.js} +1 -1
  219. package/dist/showcase/assets/{dollar-sign-qp4G3P_K.js → dollar-sign-VNxVZleW.js} +1 -1
  220. package/dist/showcase/assets/{download-zlcHjSdS.js → download-Ds_6eIpx.js} +1 -1
  221. package/dist/showcase/assets/{dropdown-menu-DZ47rJaE.js → dropdown-menu-C1G_y9dv.js} +1 -1
  222. package/dist/showcase/assets/{dropzone-Dx4EqBHu.js → dropzone-CxOLmdkt.js} +1 -1
  223. package/dist/showcase/assets/{earth-BuXqXHh6.js → earth-HLyEI1oq.js} +1 -1
  224. package/dist/showcase/assets/{ellipsis-DgAjMZHc.js → ellipsis-BLyAd9A-.js} +1 -1
  225. package/dist/showcase/assets/{ellipsis-vertical-BA8_YMyV.js → ellipsis-vertical-TG4mYU2J.js} +1 -1
  226. package/dist/showcase/assets/{empty-DXjKmyNv.js → empty-B54k9xAG.js} +1 -1
  227. package/dist/showcase/assets/{empty-item-DIGWYsI0.js → empty-item-BmA4rmq7.js} +1 -1
  228. package/dist/showcase/assets/{empty-state-BSc0tQNC.js → empty-state-CH7gjjg7.js} +1 -1
  229. package/dist/showcase/assets/{empty-state-CkixFVN1.js → empty-state-hUKvmKa-.js} +1 -1
  230. package/dist/showcase/assets/{enhanced-activities-CKbHgR4f.js → enhanced-activities-BRDVL9RR.js} +1 -1
  231. package/dist/showcase/assets/{enhanced-combobox-DAKQyFUg.js → enhanced-combobox-2wbQJS6R.js} +1 -1
  232. package/dist/showcase/assets/{esm-C3PfkuOc.js → esm-CUTefMLr.js} +1 -1
  233. package/dist/showcase/assets/{event-calendar-rNju8jaT.js → event-calendar-Bf9xFZlt.js} +1 -1
  234. package/dist/showcase/assets/{event-log-BUK1blGb.js → event-log-CeRDSL-h.js} +1 -1
  235. package/dist/showcase/assets/{example-PsbgbESI.js → example-CJMJcnb4.js} +1 -1
  236. package/dist/showcase/assets/{external-link-CgB9zfWz.js → external-link-CvXhYrnd.js} +1 -1
  237. package/dist/showcase/assets/{eye-YnIHbdKe.js → eye-Cl_GfUKH.js} +1 -1
  238. package/dist/showcase/assets/{feature-announcement-CWwjAPI1.js → feature-announcement-Dw0SokLo.js} +1 -1
  239. package/dist/showcase/assets/{file-3Z2xkc-8.js → file-CJFWrwy1.js} +1 -1
  240. package/dist/showcase/assets/{file-text-BQeGXxPG.js → file-text-BTTFP8Jo.js} +1 -1
  241. package/dist/showcase/assets/{filter-layout-D7YskzbC.js → filter-layout-DUVqG5Ql.js} +1 -1
  242. package/dist/showcase/assets/{filters-2YY_wVwq.js → filters-BLcCaplV.js} +1 -1
  243. package/dist/showcase/assets/{flag-Bw3wwRgF.js → flag-BxI3EGPG.js} +1 -1
  244. package/dist/showcase/assets/{folder-open-CZ5Bq4lK.js → folder-open-4d8qsiAj.js} +1 -1
  245. package/dist/showcase/assets/{form-field-AWNJL9FM.js → form-field-Dhy0eM5B.js} +1 -1
  246. package/dist/showcase/assets/{format-DUU7-42g.js → format-zGqa9Olc.js} +1 -1
  247. package/dist/showcase/assets/{forms-CWJ3HBbk.js → forms-D99qG5Gb.js} +1 -1
  248. package/dist/showcase/assets/{funnel-vxNNph7w.js → funnel-Cg7SOShf.js} +1 -1
  249. package/dist/showcase/assets/{generic-DlyFJDj6.js → generic-CfrG943t.js} +1 -1
  250. package/dist/showcase/assets/{getPseudoElementBounds-CibNto5h.js → getPseudoElementBounds-lw5shsdM.js} +1 -1
  251. package/dist/showcase/assets/{gift-BjRHqTcQ.js → gift-BXtKbzvA.js} +1 -1
  252. package/dist/showcase/assets/{giftcard-cards-DcujCFff.js → giftcard-cards-CqYaN0jC.js} +1 -1
  253. package/dist/showcase/assets/{git-branch-B7XnpQE0.js → git-branch-BWAuIMOQ.js} +1 -1
  254. package/dist/showcase/assets/{global-search-CWvNfmpe.js → global-search-CHUva8pR.js} +1 -1
  255. package/dist/showcase/assets/{global-search-Ct7I1Xd2.js → global-search-Df7JovOG.js} +1 -1
  256. package/dist/showcase/assets/{globe-CHleXWd2.js → globe-CvIW_foU.js} +1 -1
  257. package/dist/showcase/assets/{gradient-card-Bw4oJljh.js → gradient-card-CdM2J1Hv.js} +1 -1
  258. package/dist/showcase/assets/{hash-BVGqnm6_.js → hash-wBs5gyr_.js} +1 -1
  259. package/dist/showcase/assets/{header-CgApizpk.js → header-DXPFmpUT.js} +1 -1
  260. package/dist/showcase/assets/{header-notifications-B2v1Mdri.js → header-notifications-FsnCJLpe.js} +1 -1
  261. package/dist/showcase/assets/{heart-BwvHCA-d.js → heart-B4fOMIr6.js} +1 -1
  262. package/dist/showcase/assets/{hooks-A_AQLIRZ.js → hooks-DtMOMalj.js} +6 -3
  263. package/dist/showcase/assets/{house-opqNxOmP.js → house-hebmAxEE.js} +1 -1
  264. package/dist/showcase/assets/{icon-badge-ognVhKWR.js → icon-badge-DrZ5qGpa.js} +1 -1
  265. package/dist/showcase/assets/{icon-badge-CsG95J1Z.js → icon-badge-JEug_P_U.js} +1 -1
  266. package/dist/showcase/assets/{image-apDSlTAx.js → image-CxNywgkb.js} +1 -1
  267. package/dist/showcase/assets/{inbox-WrbeTKEw.js → inbox-DqAmGdDd.js} +1 -1
  268. package/dist/showcase/assets/index-DujM0kEF.css +2 -0
  269. package/dist/showcase/assets/{index-QESvAJrb.js → index-jD-KSiHu.js} +2 -2
  270. package/dist/showcase/assets/inertValue-Dg9TwvOb.js +1 -0
  271. package/dist/showcase/assets/{info-C3G9KRCx.js → info-B5fZn_ZC.js} +1 -1
  272. package/dist/showcase/assets/{inline-stat-CO01t7SJ.js → inline-stat-CklKufoA.js} +1 -1
  273. package/dist/showcase/assets/{inline-stat-BnjUqzDM.js → inline-stat-Dep7oHIi.js} +1 -1
  274. package/dist/showcase/assets/{input-yYoqWQQ7.js → input-CkNgwwCs.js} +1 -1
  275. package/dist/showcase/assets/{input-CBJy1dMs.js → input-DAPMRlKO.js} +1 -1
  276. package/dist/showcase/assets/{input-group-CZyYSq4r.js → input-group-06D68uB6.js} +1 -1
  277. package/dist/showcase/assets/{input-group-Dfqufdp4.js → input-group-Bq9aXQPG.js} +1 -1
  278. package/dist/showcase/assets/{inputs-Bhw_FGDY.js → inputs-C8G3y-zR.js} +1 -1
  279. package/dist/showcase/assets/{installation-DnvS2ZUn.js → installation-BV5xOvoE.js} +1 -1
  280. package/dist/showcase/assets/{invoice-header-B9Ak8GXX.js → invoice-header-BcUxzT68.js} +1 -1
  281. package/dist/showcase/assets/{invoice-items-DY5zUZhE.js → invoice-items-B42Jfxl7.js} +1 -1
  282. package/dist/showcase/assets/{invoice-mini-BAryECEH.js → invoice-mini-RJGdlErg.js} +1 -1
  283. package/dist/showcase/assets/{invoice-table-BUvjee74.js → invoice-table--MdP6ysv.js} +1 -1
  284. package/dist/showcase/assets/isSameDay-srttAIjD.js +1 -0
  285. package/dist/showcase/assets/isToday-BPub5Zvi.js +1 -0
  286. package/dist/showcase/assets/{italic-CjQCLJci.js → italic-1BNA_XlU.js} +1 -1
  287. package/dist/showcase/assets/{item-DxPwk321.js → item-B9KyqUGa.js} +1 -1
  288. package/dist/showcase/assets/{item-D1Jxrpia.js → item-DoIlPm6J.js} +1 -1
  289. package/dist/showcase/assets/{item-BMSdEK3V.js → item-ffIfXEGd.js} +1 -1
  290. package/dist/showcase/assets/{kanban-DXWCGieQ.js → kanban-Cfad3edR.js} +1 -1
  291. package/dist/showcase/assets/{key-round-DpuhXiJQ.js → key-round-J11Zc216.js} +1 -1
  292. package/dist/showcase/assets/{label-D1wLK5nY.js → label-DqaB8ZB2.js} +1 -1
  293. package/dist/showcase/assets/{languages-CGYZVmbV.js → languages-D9UaP3QU.js} +1 -1
  294. package/dist/showcase/assets/{layers-DJZSVGAu.js → layers-QXZ9Jfej.js} +1 -1
  295. package/dist/showcase/assets/{layout-app-shell-UX63nzTO.js → layout-app-shell-CW1eRJmU.js} +1 -1
  296. package/dist/showcase/assets/{layout-auth-Bav5BBqp.js → layout-auth-j4K6lveg.js} +1 -1
  297. package/dist/showcase/assets/{layout-containers-DMHD2zdV.js → layout-containers-NclLtsV0.js} +1 -1
  298. package/dist/showcase/assets/{layout-header-CGesu_kM.js → layout-header-B8AOTiwL.js} +1 -1
  299. package/dist/showcase/assets/{layout-page-DHXu8SIv.js → layout-page-DM79QHyW.js} +1 -1
  300. package/dist/showcase/assets/{layout-primitives-CokzGwd2.js → layout-primitives-Dyop-WMt.js} +1 -1
  301. package/dist/showcase/assets/{layout-sidebar-CLUYajcu.js → layout-sidebar-uBNaHqjD.js} +1 -1
  302. package/dist/showcase/assets/{layout-users-DHUNAnFA.js → layout-users-BkhDiOOz.js} +1 -1
  303. package/dist/showcase/assets/{layout-workspace-y0v2FpDW.js → layout-workspace-C2hSimZW.js} +1 -1
  304. package/dist/showcase/assets/{lib-g_kR7X9Z.js → lib-CDssULuD.js} +1 -1
  305. package/dist/showcase/assets/{list-checks-CXt8visd.js → list-checks-DA2jqXdm.js} +1 -1
  306. package/dist/showcase/assets/{lock-CpZ5kLUd.js → lock-BDZLNQLR.js} +1 -1
  307. package/dist/showcase/assets/{lock-keyhole-Cy2raRO6.js → lock-keyhole-CWYENd9O.js} +1 -1
  308. package/dist/showcase/assets/{mail-Cj6uT4TA.js → mail-CCdaRmft.js} +1 -1
  309. package/dist/showcase/assets/{mail-check-Di70bdf6.js → mail-check-DZF1VbCX.js} +1 -1
  310. package/dist/showcase/assets/{map-DMXbG_04.js → map-CDFEmmZH.js} +3 -3
  311. package/dist/showcase/assets/{map-pin-EKhu7vEj.js → map-pin-CdV-R6nt.js} +1 -1
  312. package/dist/showcase/assets/{media-library-Dnp9S0oW.js → media-library-BJyn1s9d.js} +1 -1
  313. package/dist/showcase/assets/{mention-inline-suggestions-Bp-fVNYF.js → mention-inline-suggestions-DPO6FhXx.js} +1 -1
  314. package/dist/showcase/assets/{mentions-DNRk30XZ.js → mentions-DtWHbcS6.js} +1 -1
  315. package/dist/showcase/assets/{menus-DFURb5VL.js → menus-BmjngFE4.js} +1 -1
  316. package/dist/showcase/assets/{message-square-DG0qIsG_.js → message-square-bM29txT3.js} +1 -1
  317. package/dist/showcase/assets/{metadata-list-Cb1DQd4S.js → metadata-list-DvYTAJri.js} +1 -1
  318. package/dist/showcase/assets/metadata-list-xVUTVyy9.js +1 -0
  319. package/dist/showcase/assets/{metric-BkzIsP8H.js → metric-BPNCh4eA.js} +1 -1
  320. package/dist/showcase/assets/{metric-bar-CU73nx89.js → metric-bar-BX4sCMrM.js} +1 -1
  321. package/dist/showcase/assets/{metric-grid-BMLMbLjE.js → metric-grid-IyHP3nmU.js} +1 -1
  322. package/dist/showcase/assets/{metric-trend-chip-Dutl5uZo.js → metric-trend-chip-Dih8eR17.js} +1 -1
  323. package/dist/showcase/assets/{metrics-analytics-bar-AqG2oyIy.js → metrics-analytics-bar-DK16RNMs.js} +1 -1
  324. package/dist/showcase/assets/{metrics-analytics-cards-CrFHmR2f.js → metrics-analytics-cards-Byyl13YT.js} +1 -1
  325. package/dist/showcase/assets/{metrics-comparison-CY-DyLv7.js → metrics-comparison-DGHFMBL-.js} +1 -1
  326. package/dist/showcase/assets/{metrics-heatmap-BmX_CkiP.js → metrics-heatmap-Bl6C7i0j.js} +1 -1
  327. package/dist/showcase/assets/{metrics-inline-badge-C1IFjdJN.js → metrics-inline-badge-Bz79zbNK.js} +1 -1
  328. package/dist/showcase/assets/{metrics-kpi-row-8Kbn034e.js → metrics-kpi-row-DzZ9dRFY.js} +1 -1
  329. package/dist/showcase/assets/{metrics-micro-grid-CodO02yA.js → metrics-micro-grid-DyoQiuzr.js} +1 -1
  330. package/dist/showcase/assets/{metrics-overview-CdPqEAAG.js → metrics-overview-DoyHPEZw.js} +1 -1
  331. package/dist/showcase/assets/{metrics-stat-cards-Cw7UMWmb.js → metrics-stat-cards-B1b7NFqW.js} +1 -1
  332. package/dist/showcase/assets/minus-BE2L5hVc.js +1 -0
  333. package/dist/showcase/assets/{money-display-CFfUZLus.js → money-display-CXQ_8LfA.js} +1 -1
  334. package/dist/showcase/assets/{month-year-picker-ChVcYm9f.js → month-year-picker-ra8FEN8F.js} +1 -1
  335. package/dist/showcase/assets/{navigation-Boyt1q-1.js → navigation-CFfVZQJ1.js} +1 -1
  336. package/dist/showcase/assets/{navigation-CThYYxkL.js → navigation-Da0MVkqr.js} +1 -1
  337. package/dist/showcase/assets/{navigation-extras-CxLc-Mqx.js → navigation-extras-LpsdoXfx.js} +1 -1
  338. package/dist/showcase/assets/{onboarding-checklist-C15gqmFc.js → onboarding-checklist-DPNatNOk.js} +1 -1
  339. package/dist/showcase/assets/{overflow-tab-bar-B2Htn-Ft.js → overflow-tab-bar-C0vTzcEY.js} +1 -1
  340. package/dist/showcase/assets/{overlays-Cpj4akiw.js → overlays-Blmbun0J.js} +1 -1
  341. package/dist/showcase/assets/{overlays-CPZfp0nk.js → overlays-t0joc10Y.js} +1 -1
  342. package/dist/showcase/assets/{overview-BB-Xbkff.js → overview-Ckq8vbOR.js} +1 -1
  343. package/dist/showcase/assets/{package-DLn6nx-u.js → package-Cjod_a06.js} +1 -1
  344. package/dist/showcase/assets/{package-check-B0wyBUSU.js → package-check-JRHaNnkl.js} +1 -1
  345. package/dist/showcase/assets/{page-BPFNsNh7.js → page-9xr7xnuW.js} +1 -1
  346. package/dist/showcase/assets/page-action-button-BRXnfsEx.js +1 -0
  347. package/dist/showcase/assets/{page-header-BGqE9hzO.js → page-header-Bdlxfn_9.js} +1 -1
  348. package/dist/showcase/assets/{pagination-T4FmLNHn.js → pagination-CeaYhOvv.js} +1 -1
  349. package/dist/showcase/assets/{pagination-Be6ynLCp.js → pagination-DdZZHvNF.js} +1 -1
  350. package/dist/showcase/assets/{paperclip-B_kxXzSN.js → paperclip-BRM-yXTB.js} +1 -1
  351. package/dist/showcase/assets/{password-input-qfQ5eIU4.js → password-input-1FVEugoO.js} +1 -1
  352. package/dist/showcase/assets/{pencil-DlDLApli.js → pencil-DiG2dQ8F.js} +1 -1
  353. package/dist/showcase/assets/{phone-D8tvvbSQ.js → phone-BREyNZN-.js} +1 -1
  354. package/dist/showcase/assets/plus-CQcelTNc.js +1 -0
  355. package/dist/showcase/assets/{popover-Bu7aaPjE.js → popover-Czmwspmc.js} +1 -1
  356. package/dist/showcase/assets/{popover-menu-CD_JfEeq.js → popover-menu-beuCaiLt.js} +1 -1
  357. package/dist/showcase/assets/{popover-BsCx2XMI.js → popover-uqk7myG2.js} +1 -1
  358. package/dist/showcase/assets/{products-BzHX1ta0.js → products-DGNqIbLs.js} +1 -1
  359. package/dist/showcase/assets/{progress-jIJ_EIKE.js → progress-D76Df908.js} +1 -1
  360. package/dist/showcase/assets/{progress-CpW2ZGAy.js → progress-DjUprSDD.js} +1 -1
  361. package/dist/showcase/assets/{props-table-CCcohuyT.js → props-table-DoDq8Mvr.js} +1 -1
  362. package/dist/showcase/assets/{quote-Bc9eHVKi.js → quote-BvGGgyJ0.js} +1 -1
  363. package/dist/showcase/assets/{receipt-B77_VWtt.js → receipt-rgnlMgyi.js} +1 -1
  364. package/dist/showcase/assets/{receipt-text-BlL_TJsS.js → receipt-text-CBQrVlnU.js} +1 -1
  365. package/dist/showcase/assets/{refinement-guide-BpzOvT_R.js → refinement-guide-B_BpIMxm.js} +1 -1
  366. package/dist/showcase/assets/{refresh-cw-CELG4taF.js → refresh-cw-C-yHy6B7.js} +1 -1
  367. package/dist/showcase/assets/{resolveValueLabel-LRTUaJTb.js → resolveValueLabel-0bwEvIG-.js} +1 -1
  368. package/dist/showcase/assets/{resource-BT8_ck3n.js → resource-8f61BZ8t.js} +1 -1
  369. package/dist/showcase/assets/{resource-C7J3yZp6.js → resource-BEh6R0gu.js} +1 -1
  370. package/dist/showcase/assets/{resource-selector-card-Ay8ImvKg.js → resource-selector-card-DJwXY_Ms.js} +1 -1
  371. package/dist/showcase/assets/{rich-text-editor-CdGVvtsm.js → rich-text-editor-D433iv0N.js} +1 -1
  372. package/dist/showcase/assets/{rich-text-editor-DVtTVuZ6.js → rich-text-editor-vTRfWsOK.js} +1 -1
  373. package/dist/showcase/assets/rotate-ccw-JuE4H14F.js +1 -0
  374. package/dist/showcase/assets/{route-CgBh1oKF.js → route-eSu1bFNn.js} +1 -1
  375. package/dist/showcase/assets/{save-BFsAGR7O.js → save-Bpjj-rBP.js} +1 -1
  376. package/dist/showcase/assets/{schema-form-CaF-lBkN.js → schema-form-DmOpxd96.js} +1 -1
  377. package/dist/showcase/assets/{scroll-area-CpDi_6FP.js → scroll-area-B9OdCBy9.js} +1 -1
  378. package/dist/showcase/assets/{scroll-area-BkZULoZA.js → scroll-area-BH80l2As.js} +1 -1
  379. package/dist/showcase/assets/{section-D-N8Ze16.js → section-BPNIPavy.js} +1 -1
  380. package/dist/showcase/assets/{select-ReMZs8K6.js → select-BauiG1a3.js} +1 -1
  381. package/dist/showcase/assets/{select-C9Mfb_Gj.js → select-CPopSr5c.js} +1 -1
  382. package/dist/showcase/assets/{send-C6PbwpHN.js → send-DNCcBKXs.js} +1 -1
  383. package/dist/showcase/assets/{separator-CywPSoE0.js → separator-BK0beCOv.js} +1 -1
  384. package/dist/showcase/assets/{separator-Ha9YxI2x.js → separator-CKM9A-mm.js} +1 -1
  385. package/dist/showcase/assets/{settings-2-CVq5Uyv5.js → settings-2-B8fz7JZB.js} +1 -1
  386. package/dist/showcase/assets/{settings-DkTHc0Ob.js → settings-Cy2y3sQw.js} +1 -1
  387. package/dist/showcase/assets/{sheet-k-P0gWlk.js → sheet-C7VWkXE1.js} +1 -1
  388. package/dist/showcase/assets/{shield-Cme7_JJR.js → shield-ClPev4gS.js} +1 -1
  389. package/dist/showcase/assets/{shield-alert-CxV0S5w0.js → shield-alert-6XO5YZ5u.js} +1 -1
  390. package/dist/showcase/assets/{shield-check-BW_7p6Xf.js → shield-check-DSfGVZq0.js} +1 -1
  391. package/dist/showcase/assets/{shopping-bag-CoR8AMYU.js → shopping-bag-DzMrGvpF.js} +1 -1
  392. package/dist/showcase/assets/{showcase-m3FzbvoC.js → showcase-DuZaO6q9.js} +1 -1
  393. package/dist/showcase/assets/{sidebar-bz_FzvjM.js → sidebar-7y9EQYWf.js} +1 -1
  394. package/dist/showcase/assets/{sidebar.context-BWMPnGn6.js → sidebar.context-DUheJD8t.js} +1 -1
  395. package/dist/showcase/assets/{skeleton-BJMnQDgf.js → skeleton-Dgr8Vabr.js} +1 -1
  396. package/dist/showcase/assets/{skeleton-DoWW5XZD.js → skeleton-HSpErFqw.js} +1 -1
  397. package/dist/showcase/assets/{slider-BH1Gtp_p.js → slider-B7f81APg.js} +1 -1
  398. package/dist/showcase/assets/{smart-card-C6-idFYI.js → smart-card-p97LLZCW.js} +1 -1
  399. package/dist/showcase/assets/{sonner-CGZ3FC4U.js → sonner-CWazrN19.js} +1 -1
  400. package/dist/showcase/assets/{sortable.esm-CE0TA9V_.js → sortable.esm-uufol7Mz.js} +1 -1
  401. package/dist/showcase/assets/{sparkles-8yQFcmte.js → sparkles-Z4V23xKK.js} +1 -1
  402. package/dist/showcase/assets/{spinner-CNveVfOr.js → spinner-BUgjAjWE.js} +1 -1
  403. package/dist/showcase/assets/{spinner-CO8LjtjY.js → spinner-CXu7z8-j.js} +1 -1
  404. package/dist/showcase/assets/{spinner-BYUX0luk.js → spinner-DCwR0mnD.js} +1 -1
  405. package/dist/showcase/assets/{square-pen-CWylvezY.js → square-pen-jwp_OWMQ.js} +1 -1
  406. package/dist/showcase/assets/{stacked-avatars-DiNA5OJK.js → stacked-avatars-CHEpTotO.js} +1 -1
  407. package/dist/showcase/assets/{star-t53uwwyp.js → star-Ck8Lg5hm.js} +1 -1
  408. package/dist/showcase/assets/startOfDay-BzULZHy4.js +1 -0
  409. package/dist/showcase/assets/{styles-CwpnwrEQ.js → styles-CNYitflH.js} +1 -1
  410. package/dist/showcase/assets/{suggestions-CvxZxsmc.js → suggestions-CSF9MlKl.js} +1 -1
  411. package/dist/showcase/assets/{switch-CewkokYT.js → switch-BX9KSLIF.js} +1 -1
  412. package/dist/showcase/assets/{switch-D-7uqDR8.js → switch-Bn0WaWa9.js} +1 -1
  413. package/dist/showcase/assets/{sync-DnBSRAwH.js → sync-BuKBnqWW.js} +1 -1
  414. package/dist/showcase/assets/{table-3cUcSCBR.js → table-DNJcLaud.js} +42 -20
  415. package/dist/showcase/assets/{table-ds5oNU0h.js → table-NfpOWGsG.js} +1 -1
  416. package/dist/showcase/assets/{table-actions-CrujG5R-.js → table-actions-Ci9Yszp0.js} +1 -1
  417. package/dist/showcase/assets/{tabs-C-hJfSn5.js → tabs-CYNFQdIr.js} +1 -1
  418. package/dist/showcase/assets/{tabs-GG911oaV.js → tabs-Cm_p6znb.js} +1 -1
  419. package/dist/showcase/assets/{tags-input-DBeIaeVn.js → tags-input-DE4QZqS_.js} +1 -1
  420. package/dist/showcase/assets/{text-button-EZojp9Ye.js → text-button-D9llh4pU.js} +1 -1
  421. package/dist/showcase/assets/{text-link-DcKeYjEX.js → text-link-ZT6QGJOL.js} +1 -1
  422. package/dist/showcase/assets/{textarea-DgNgSl1g.js → textarea-CgcHuGVq.js} +1 -1
  423. package/dist/showcase/assets/{textarea-PXKZSiRa.js → textarea-D2uT_GJt.js} +1 -1
  424. package/dist/showcase/assets/{timelines-CaF_Ze8z.js → timelines-BEFO7tJ0.js} +1 -1
  425. package/dist/showcase/assets/{toggle-group-D_iuhL1G.js → toggle-group-oYpa59lN.js} +1 -1
  426. package/dist/showcase/assets/{toggles-BKaayRmE.js → toggles-BL93YmQo.js} +1 -1
  427. package/dist/showcase/assets/{toggles-group-DRAksOw2.js → toggles-group-BG-xiQCY.js} +1 -1
  428. package/dist/showcase/assets/{tooltip-B_LnC5D2.js → tooltip-BMI7zHwP.js} +1 -1
  429. package/dist/showcase/assets/{trash-2-DhUpICQq.js → trash-2-CtRtVsCy.js} +1 -1
  430. package/dist/showcase/assets/trending-up-2NQ-P8vB.js +1 -0
  431. package/dist/showcase/assets/{truck-D6SGLjv1.js → truck-Cl0nyN_j.js} +1 -1
  432. package/dist/showcase/assets/{typography-qEz6MMn9.js → typography-C7pCPhg7.js} +1 -1
  433. package/dist/showcase/assets/{ui-badge-BA334hdB.js → ui-badge-BvmuMzSq.js} +1 -1
  434. package/dist/showcase/assets/{ui-card-CjqUyGvB.js → ui-card-B7ziOMAn.js} +1 -1
  435. package/dist/showcase/assets/{ui-table-cDgI6WMk.js → ui-table-BEFHakBU.js} +1 -1
  436. package/dist/showcase/assets/{upload-tray-BcA-7pqW.js → upload-tray-CMKqTtEp.js} +1 -1
  437. package/dist/showcase/assets/{use-layout-link-DIUWH-oo.js → use-layout-link-nEU6ctSs.js} +1 -1
  438. package/dist/showcase/assets/{useAnchoredPopupScrollLock-BavpibMb.js → useAnchoredPopupScrollLock-B1xyKMh7.js} +1 -1
  439. package/dist/showcase/assets/{useAriaLabelledBy-HDEJjv0f.js → useAriaLabelledBy-BMlFgz-H.js} +1 -1
  440. package/dist/showcase/assets/{useCollapsiblePanel-CL0pCuxO.js → useCollapsiblePanel-BEzH6TC2.js} +1 -1
  441. package/dist/showcase/assets/{useCompositeItem-LkMSD9DW.js → useCompositeItem-CIuww7-p.js} +1 -1
  442. package/dist/showcase/assets/{useCompositeListItem-C_oLUvf8.js → useCompositeListItem-PrMTh4tz.js} +1 -1
  443. package/dist/showcase/assets/{useLabelableId-DDpjUdIO.js → useLabelableId-BBLkeLGr.js} +1 -1
  444. package/dist/showcase/assets/{useOpenInteractionType-DQOSh-Eu.js → useOpenInteractionType-CW0quo3l.js} +1 -1
  445. package/dist/showcase/assets/useRender-6NNMHJJU.js +1 -0
  446. package/dist/showcase/assets/{useTriggerFocusGuards-BPFrAxlp.js → useTriggerFocusGuards-DEza_iee.js} +1 -1
  447. package/dist/showcase/assets/{useValueChanged-lYlHqRM1.js → useValueChanged-BmWIb3SN.js} +1 -1
  448. package/dist/showcase/assets/user-BDIP5UPS.js +1 -0
  449. package/dist/showcase/assets/{user-plus-B1Pi7SNv.js → user-plus-BCqHFh2h.js} +1 -1
  450. package/dist/showcase/assets/{users-DAlxvktS.js → users-Bh7xGRX2.js} +1 -1
  451. package/dist/showcase/assets/{vendor-profile-ClJ6G6SO.js → vendor-profile-BlYcRbPI.js} +1 -1
  452. package/dist/showcase/assets/{video-DxooIkh-.js → video-BucshqNW.js} +1 -1
  453. package/dist/showcase/assets/{wrench-BiwmotMF.js → wrench-DQvhyTEb.js} +1 -1
  454. package/dist/showcase/assets/x-DyuS4YRT.js +1 -0
  455. package/dist/showcase/assets/{zap-a90eC6iO.js → zap-Dpn8_pnQ.js} +1 -1
  456. package/dist/showcase/index.html +2 -2
  457. package/dist/style.css +1 -1
  458. package/package.json +1 -1
  459. package/dist/_shared/cards-BKFwMTjM.cjs +0 -2
  460. package/dist/_shared/cards-BKFwMTjM.cjs.map +0 -1
  461. package/dist/_shared/cards-CtBoSZG9.js.map +0 -1
  462. package/dist/_shared/overlays-CdtMAkKG.js.map +0 -1
  463. package/dist/_shared/overlays-Diy_H0Au.cjs +0 -2
  464. package/dist/_shared/overlays-Diy_H0Au.cjs.map +0 -1
  465. package/dist/_shared/table-CUA_A-oO.js.map +0 -1
  466. package/dist/_shared/table-mPchjiRn.cjs +0 -2
  467. package/dist/_shared/table-mPchjiRn.cjs.map +0 -1
  468. package/dist/showcase/assets/arrow-down-BttnoDxP.js +0 -1
  469. package/dist/showcase/assets/arrow-left-B1kFGJ8v.js +0 -1
  470. package/dist/showcase/assets/arrow-right-Md96ra7v.js +0 -1
  471. package/dist/showcase/assets/arrow-up-B9e9cP-q.js +0 -1
  472. package/dist/showcase/assets/arrow-up-right-BOHJNdrp.js +0 -1
  473. package/dist/showcase/assets/card-primitives-CiU5lL3a.js +0 -1
  474. package/dist/showcase/assets/checkbox-Qhh92dbS.js +0 -1
  475. package/dist/showcase/assets/chevron-down-BqrI6QzQ.js +0 -1
  476. package/dist/showcase/assets/chevron-left-TJKYH3rG.js +0 -1
  477. package/dist/showcase/assets/chevron-up-CPuAmh-d.js +0 -1
  478. package/dist/showcase/assets/chevrons-up-down-DZB44PVY.js +0 -1
  479. package/dist/showcase/assets/circle-CY0DkTje.js +0 -1
  480. package/dist/showcase/assets/circle-check-BkFKejsY.js +0 -1
  481. package/dist/showcase/assets/circle-check-big-vu3Znqdx.js +0 -1
  482. package/dist/showcase/assets/circle-dot-CsBIkbEH.js +0 -1
  483. package/dist/showcase/assets/clock-3-mhWDhdka.js +0 -1
  484. package/dist/showcase/assets/clock-Dd-urPd2.js +0 -1
  485. package/dist/showcase/assets/index-CCxHwV7T.css +0 -2
  486. package/dist/showcase/assets/inertValue-DrANZiJk.js +0 -1
  487. package/dist/showcase/assets/isSameDay-DVP1ae2V.js +0 -1
  488. package/dist/showcase/assets/isToday-CNAQB-p9.js +0 -1
  489. package/dist/showcase/assets/metadata-list-BhlsEWYT.js +0 -1
  490. package/dist/showcase/assets/minus-B1es6KJX.js +0 -1
  491. package/dist/showcase/assets/page-action-button-DMS8Vcmz.js +0 -1
  492. package/dist/showcase/assets/plus-BkhJjfUv.js +0 -1
  493. package/dist/showcase/assets/rotate-ccw-MwEZ1b11.js +0 -1
  494. package/dist/showcase/assets/startOfDay-BKFJecZ3.js +0 -1
  495. package/dist/showcase/assets/trending-up-Kfm5l65O.js +0 -1
  496. package/dist/showcase/assets/useRender-CnmFaF3Y.js +0 -1
  497. package/dist/showcase/assets/user-DLuRcjl0.js +0 -1
  498. package/dist/showcase/assets/x-idpnOHil.js +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlays-Diy_H0Au.cjs","names":[],"sources":["../../src/components/features/overlays/hooks/use-native-dialog.ts","../../src/components/features/overlays/overlays.strings.ts","../../src/components/features/overlays/hooks/use-overlay-actions.ts","../../src/components/features/overlays/dialog.tsx","../../src/components/features/overlays/drawer.tsx","../../src/components/features/overlays/alert-dialog.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type RefObject,\n} from 'react';\n\nexport interface UseNativeDialogOptions {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onClose?: () => void;\n closeOnEscape?: boolean;\n closeOnBackdropClick?: boolean;\n initialFocusRef?: RefObject<HTMLElement>;\n}\n\nexport interface UseNativeDialogReturn {\n dialogRef: RefObject<HTMLDialogElement | null>;\n isOpen: boolean;\n isClosing: boolean;\n openDialog: () => void;\n closeDialog: () => void;\n toggleDialog: () => void;\n dialogProps: {\n ref: RefObject<HTMLDialogElement | null>;\n open: boolean;\n onKeyDown: (e: React.KeyboardEvent<HTMLDialogElement>) => void;\n };\n handleBackdropClick: () => void;\n}\n\nconst ANIMATION_TIMEOUT_MS = 350;\n\nlet bodyScrollLockCount = 0;\n\n/**\n * Lock body scroll using a CSS-class-based approach.\n *\n * Uses a `data-overlay-scroll-locked` attribute on `<html>` combined with a\n * CSS rule (`html[data-overlay-scroll-locked] body { overflow: hidden }`)\n * instead of directly manipulating `body.style.overflow`.\n *\n * This avoids a conflict with @base-ui's own `SCROLL_LOCKER` singleton (used\n * by Select, Combobox, etc.) which independently saves and restores inline\n * body styles. When both systems saved/restored the same inline property,\n * unlocking in the wrong order left `overflow: hidden` permanently on the body.\n */\nfunction lockBodyScroll(): () => void {\n if (bodyScrollLockCount === 0) {\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n\n document.body.style.setProperty(\n '--overlay-scrollbar-width',\n `${scrollbarWidth}px`,\n );\n document.documentElement.setAttribute(\n 'data-overlay-scroll-locked',\n '',\n );\n }\n\n bodyScrollLockCount += 1;\n let released = false;\n\n return () => {\n if (released) {\n return;\n }\n\n released = true;\n bodyScrollLockCount = Math.max(0, bodyScrollLockCount - 1);\n\n if (bodyScrollLockCount > 0) {\n return;\n }\n\n document.documentElement.removeAttribute('data-overlay-scroll-locked');\n document.body.style.removeProperty('--overlay-scrollbar-width');\n };\n}\n\nexport function useNativeDialog({\n open: controlledOpen,\n onOpenChange,\n onClose,\n closeOnEscape = true,\n closeOnBackdropClick = true,\n initialFocusRef,\n}: UseNativeDialogOptions = {}): UseNativeDialogReturn {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const [internalOpen, setInternalOpen] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n const unlockScrollRef = useRef<(() => void) | null>(null);\n const previousActiveElementRef = useRef<HTMLElement | null>(null);\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const animationListenerRef = useRef<(() => void) | null>(null);\n const focusRafRef = useRef<number | null>(null);\n const finishCloseHandledRef = useRef(false);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n // Refs track the latest values so closeDialog can bail out from stale\n // closures (e.g. when useOverlayActions.handleConfirm awaits an async\n // operation while the action store already sets isOpen=false or while\n // a prior closeDialog call already set isClosing=true).\n const isOpenRef = useRef(isOpen);\n isOpenRef.current = isOpen;\n\n const isClosingRef = useRef(isClosing);\n isClosingRef.current = isClosing;\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n\n if (!nextOpen) {\n onClose?.();\n }\n },\n [isControlled, onOpenChange, onClose],\n );\n\n const cleanupAnimation = useCallback(() => {\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = null;\n }\n if (animationListenerRef.current) {\n animationListenerRef.current();\n animationListenerRef.current = null;\n }\n }, []);\n\n const finishClose = useCallback(() => {\n cleanupAnimation();\n\n // Mark that finishClose handled this close cycle so the safety-net\n // useEffect doesn't interfere with a redundant cleanup pass.\n finishCloseHandledRef.current = true;\n\n // CRITICAL: Release the scroll lock BEFORE calling setOpen, which\n // invokes external callbacks (onOpenChange, onClose) that may throw.\n const unlock = unlockScrollRef.current;\n unlockScrollRef.current = null;\n\n const prevFocus = previousActiveElementRef.current;\n previousActiveElementRef.current = null;\n\n try {\n unlock?.();\n } catch {\n // Scroll unlock must never propagate.\n }\n\n // Notify parent first — this triggers onOpenChange(false) which updates\n // the controlled open prop. Do NOT remove the .closing class or clear\n // isClosing before this: removing .closing reverts the dialog to its\n // entry animation CSS for one frame before React unmounts, causing a flash.\n try {\n setOpen(false);\n } catch {\n // If onOpenChange / onClose throws we still need to restore focus.\n }\n\n // Now safe to clear — React will unmount the portal on the next render,\n // so the .closing class removal is cosmetic (element is about to be removed).\n setIsClosing(false);\n\n const dialog = dialogRef.current;\n if (dialog) {\n dialog.classList.remove('closing');\n }\n\n try {\n prevFocus?.focus();\n } catch {\n // focus() on a disconnected node can throw in some browsers.\n }\n }, [cleanupAnimation, setOpen]);\n\n const openDialog = useCallback(() => {\n // Use refs (always fresh) instead of closure-captured values so that\n // stale references from trigger cloneElement or external callers\n // cannot bypass the guard.\n if (isOpenRef.current || isClosingRef.current) return;\n\n previousActiveElementRef.current =\n document.activeElement as HTMLElement;\n unlockScrollRef.current = lockBodyScroll();\n\n setOpen(true);\n\n focusRafRef.current = requestAnimationFrame(() => {\n focusRafRef.current = null;\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n } else {\n dialogRef.current?.focus();\n }\n });\n }, [setOpen, initialFocusRef]);\n\n const closeDialog = useCallback(() => {\n const dialog = dialogRef.current;\n // Use isOpenRef and isClosingRef (always fresh) instead of closure-\n // captured values so that stale closures from useOverlayActions\n // (which await async confirm while the action store or a prior\n // closeDialog call already changed state) correctly bail out instead\n // of starting a duplicate close animation.\n if (!dialog || !isOpenRef.current || isClosingRef.current) return;\n\n setIsClosing(true);\n dialog.classList.add('closing');\n\n // Force reflow so the browser picks up the new class before we read computed style\n void dialog.offsetHeight;\n\n const hasAnimation =\n getComputedStyle(dialog).animationName !== 'none';\n\n if (hasAnimation) {\n const handleAnimationEnd = () => {\n finishClose();\n };\n\n dialog.addEventListener('animationend', handleAnimationEnd, {\n once: true,\n });\n\n // Store cleanup function for unmount safety\n animationListenerRef.current = () => {\n dialog.removeEventListener(\n 'animationend',\n handleAnimationEnd,\n );\n };\n\n // Timeout fallback in case animationend never fires\n closeTimeoutRef.current = setTimeout(() => {\n finishClose();\n }, ANIMATION_TIMEOUT_MS);\n } else {\n finishClose();\n }\n }, [finishClose]);\n\n const toggleDialog = useCallback(() => {\n if (isOpen) {\n closeDialog();\n } else {\n openDialog();\n }\n }, [isOpen, openDialog, closeDialog]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDialogElement>) => {\n if (e.key === 'Escape' && closeOnEscape) {\n e.preventDefault();\n e.stopPropagation();\n closeDialog();\n }\n },\n [closeOnEscape, closeDialog],\n );\n\n const handleBackdropClick = useCallback(() => {\n if (closeOnBackdropClick) {\n closeDialog();\n }\n }, [closeOnBackdropClick, closeDialog]);\n\n // Sync controlled open state → lock scroll + focus\n useEffect(() => {\n if (isOpen && !isClosing) {\n if (!previousActiveElementRef.current) {\n previousActiveElementRef.current =\n document.activeElement as HTMLElement;\n }\n\n if (!unlockScrollRef.current) {\n unlockScrollRef.current = lockBodyScroll();\n }\n\n // Cancel any pending focus rAF (e.g. from openDialog) before\n // scheduling a new one, preventing duplicate focus calls.\n if (focusRafRef.current !== null) {\n cancelAnimationFrame(focusRafRef.current);\n }\n focusRafRef.current = requestAnimationFrame(() => {\n focusRafRef.current = null;\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n } else {\n dialogRef.current?.focus();\n }\n });\n } else if (!isOpen) {\n // If finishClose already handled this close cycle, skip the\n // safety-net to avoid a redundant cleanup pass that would cause\n // a flash (clearing isClosing in a separate render).\n if (finishCloseHandledRef.current) {\n finishCloseHandledRef.current = false;\n\n return;\n }\n\n // Safety net for the controlled-close path where closeDialog()\n // is never called directly (e.g. action store sets isOpen=false).\n if (unlockScrollRef.current) {\n unlockScrollRef.current();\n unlockScrollRef.current = null;\n }\n\n if (isClosing) {\n cleanupAnimation();\n setIsClosing(false);\n\n const dialog = dialogRef.current;\n if (dialog) {\n dialog.classList.remove('closing');\n }\n }\n\n if (previousActiveElementRef.current) {\n try {\n previousActiveElementRef.current.focus();\n } catch {\n // focus() on a disconnected node — ignore\n }\n previousActiveElementRef.current = null;\n }\n }\n\n return () => {\n if (focusRafRef.current !== null) {\n cancelAnimationFrame(focusRafRef.current);\n focusRafRef.current = null;\n }\n };\n }, [isOpen, isClosing, initialFocusRef, cleanupAnimation]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n cleanupAnimation();\n\n if (focusRafRef.current !== null) {\n cancelAnimationFrame(focusRafRef.current);\n focusRafRef.current = null;\n }\n\n if (unlockScrollRef.current) {\n unlockScrollRef.current();\n unlockScrollRef.current = null;\n }\n };\n }, [cleanupAnimation]);\n\n return {\n dialogRef,\n isOpen,\n isClosing,\n openDialog,\n closeDialog,\n toggleDialog,\n dialogProps: {\n ref: dialogRef,\n open: isOpen,\n onKeyDown: handleKeyDown,\n },\n handleBackdropClick,\n };\n}\n","/**\n * Default user-facing strings shared by `<Dialog>`, `<Drawer>`, and\n * `<AlertDialog>` overlays.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <Dialog strings={{ confirm: t('common.confirm') }} … />\n */\n\nexport interface OverlayStrings {\n\tconfirm: string;\n\tcancel: string;\n\tclose: string;\n\tloading: string;\n}\n\nexport const defaultOverlayStrings: OverlayStrings = {\n\tconfirm: 'Confirm',\n\tcancel: 'Cancel',\n\tclose: 'Close',\n\tloading: 'Loading...',\n};\n\nexport const defaultAlertDialogStrings: OverlayStrings = {\n\tconfirm: 'Continue',\n\tcancel: 'Cancel',\n\tclose: 'Close',\n\tloading: 'Loading...',\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useStrings, type StringsProp } from '@/lib/strings';\n\nimport {\n\tdefaultOverlayStrings,\n\ttype OverlayStrings,\n} from '../overlays.strings';\nimport type {\n\tButtonVariant,\n\tOverlayActionProps,\n\tOverlayTone,\n} from '../overlays.types';\n\nexport interface UseOverlayActionsOptions\n\textends Pick<\n\t\tOverlayActionProps,\n\t\t| 'onConfirm'\n\t\t| 'onAsyncConfirm'\n\t\t| 'closeOnAsyncComplete'\n\t\t| 'confirmVariant'\n\t\t| 'isLoading'\n\t\t| 'formId'\n\t> {\n\tcloseDialog: () => void;\n\tonCancel?: () => void;\n\tcustomStrings?: StringsProp<OverlayStrings>;\n\temphasis?: boolean;\n\ttone?: OverlayTone;\n\t/** Called when `onAsyncConfirm` throws. Library DEV-logs the error;\n\t * consumer wires telemetry. */\n\tonError?: (error: unknown) => void;\n}\n\nexport interface UseOverlayActionsReturn {\n\tstrings: OverlayStrings;\n\tisExecuting: boolean;\n\thandleConfirm: () => Promise<void>;\n\thandleCancel: () => void;\n\tfinalConfirmVariant: ButtonVariant;\n\tconfirmButtonOnClick: (() => Promise<void>) | undefined;\n\teffectiveLoading: boolean;\n}\n\nexport function useOverlayActions({\n\tcloseDialog,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant = 'primary',\n\tisLoading = false,\n\tformId,\n\tonCancel,\n\tcustomStrings,\n\temphasis = false,\n\ttone = 'default',\n\tonError,\n}: UseOverlayActionsOptions): UseOverlayActionsReturn {\n\tconst strings = useStrings(defaultOverlayStrings, customStrings);\n\n\tconst [isExecuting, setIsExecuting] = useState(false);\n\n\tconst handleConfirm = useCallback(async () => {\n\t\tif (onConfirm) {\n\t\t\tonConfirm();\n\t\t\tcloseDialog();\n\t\t\treturn;\n\t\t}\n\n\t\tif (onAsyncConfirm) {\n\t\t\tsetIsExecuting(true);\n\t\t\ttry {\n\t\t\t\tawait onAsyncConfirm();\n\t\t\t\tif (closeOnAsyncComplete) {\n\t\t\t\t\tcloseDialog();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\t\tconsole.error('Overlay async confirm failed:', error);\n\t\t\t\t}\n\t\t\t\tonError?.(error);\n\t\t\t} finally {\n\t\t\t\tsetIsExecuting(false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcloseDialog();\n\t}, [onConfirm, onAsyncConfirm, closeOnAsyncComplete, closeDialog, onError]);\n\n\tconst handleCancel = useCallback(() => {\n\t\tonCancel?.();\n\t\tcloseDialog();\n\t}, [onCancel, closeDialog]);\n\n\tconst handleFormSubmit = useCallback(async () => {\n\t\tif (!formId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst form = document.getElementById(formId);\n\n\t\tif (!(form instanceof HTMLFormElement)) {\n\t\t\treturn;\n\t\t}\n\n\t\tform.requestSubmit();\n\t}, [formId]);\n\n\tconst finalConfirmVariant = useMemo<ButtonVariant>(() => {\n\t\tif (!emphasis) return confirmVariant ?? 'primary';\n\t\tif (tone === 'error') return 'error';\n\t\tif (tone === 'warning') return 'warning';\n\t\tif (tone === 'success') return 'success';\n\t\treturn confirmVariant ?? 'primary';\n\t}, [emphasis, tone, confirmVariant]);\n\n\tconst confirmButtonOnClick = formId ? handleFormSubmit : handleConfirm;\n\n\treturn {\n\t\tstrings,\n\t\tisExecuting,\n\t\thandleConfirm,\n\t\thandleCancel,\n\t\tfinalConfirmVariant,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading: isExecuting || isLoading,\n\t};\n}\n","import {\n\tAlertCircle,\n\tAlertTriangle,\n\tCheckCircle,\n\tHelpCircle,\n\tInfo,\n\tX,\n} from 'lucide-react';\nimport React, { cloneElement, isValidElement, memo, useId, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useNativeDialog, useOverlayActions } from './hooks';\nimport type { DialogProps, OverlaySize, OverlayTone } from './overlays.types';\n\nconst SIZE_CLASSES: Record<OverlaySize, string> = {\n\txs: 'max-w-xs',\n\tsm: 'max-w-sm',\n\tmd: 'max-w-md',\n\tlg: 'max-w-lg',\n\txl: 'max-w-xl',\n\t'2xl': 'max-w-2xl',\n\t'3xl': 'max-w-3xl',\n\t'4xl': 'max-w-4xl',\n\t'5xl': 'max-w-5xl',\n\tfull: 'max-w-[calc(100vw-2rem)]',\n};\n\nconst TONE_STYLES: Record<OverlayTone, { icon: ReactNode; classes: string }> = {\n\tdefault: {\n\t\ticon: <HelpCircle className=\"text-muted-foreground h-5 w-5\" />,\n\t\tclasses: '',\n\t},\n\terror: {\n\t\ticon: <AlertCircle className=\"text-destructive h-5 w-5\" />,\n\t\tclasses: 'border-destructive/50',\n\t},\n\twarning: {\n\t\ticon: <AlertTriangle className=\"text-warning h-5 w-5\" />,\n\t\tclasses: 'border-warning/50',\n\t},\n\tinfo: {\n\t\ticon: <Info className=\"text-info h-5 w-5\" />,\n\t\tclasses: 'border-info/50',\n\t},\n\tsuccess: {\n\t\ticon: <CheckCircle className=\"text-success h-5 w-5\" />,\n\t\tclasses: 'border-success/50',\n\t},\n};\n\nfunction DialogImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant = 'primary',\n\tconfirmStyle = 'solid',\n\tisLoading = false,\n\tformId,\n\tfooter,\n\temphasis = false,\n\ttone = 'default',\n\tshowIcon = false,\n\talertMessage,\n\tsize = 'lg',\n\ttrigger,\n}: DialogProps) {\n\tconst dialogTitleId = useId();\n\tconst dialogDescriptionId = useId();\n\tconst ariaLabelledBy = title ? dialogTitleId : undefined;\n\tconst ariaDescribedBy = description ? dialogDescriptionId : undefined;\n\n\tconst {\n\t\tisOpen,\n\t\tisClosing,\n\t\topenDialog,\n\t\tcloseDialog,\n\t\tdialogProps,\n\t\thandleBackdropClick,\n\t} = useNativeDialog({\n\t\topen,\n\t\tonOpenChange,\n\t\tonClose,\n\t\tcloseOnEscape,\n\t\tcloseOnBackdropClick,\n\t\tinitialFocusRef,\n\t});\n\n\tconst {\n\t\tstrings,\n\t\tfinalConfirmVariant,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading,\n\t\thandleCancel,\n\t} = useOverlayActions({\n\t\tcloseDialog,\n\t\tonConfirm,\n\t\tonAsyncConfirm,\n\t\tcloseOnAsyncComplete,\n\t\tconfirmVariant,\n\t\tisLoading,\n\t\tformId,\n\t\tonCancel,\n\t\tcustomStrings,\n\t\temphasis,\n\t\ttone,\n\t});\n\n\tconst toneStyles = TONE_STYLES[tone];\n\tconst hasContent = Boolean(children || alertMessage);\n\tconst hasFooter = showCancel || showConfirm || footer;\n\n\tconst triggerElement =\n\t\ttrigger && isValidElement<Record<string, unknown>>(trigger) ? (\n\t\t\tcloneElement(trigger, {\n\t\t\t\tonClick: (e: React.MouseEvent) => {\n\t\t\t\t\tconst original = trigger.props.onClick as\n\t\t\t\t\t\t| ((e: React.MouseEvent) => void)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\toriginal?.(e);\n\t\t\t\t\topenDialog();\n\t\t\t\t},\n\t\t\t})\n\t\t) : trigger ? (\n\t\t\t<span\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={openDialog}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\topenDialog();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</span>\n\t\t) : null;\n\n\tif (!isOpen && !isClosing && !trigger) return null;\n\n\treturn (\n\t\t<>\n\t\t\t{triggerElement}\n\n\t\t\t{!!(isOpen || isClosing) &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'absolute inset-0 bg-foreground/50 backdrop-blur-[1px]',\n\t\t\t\t\t\t\t\t'transition-opacity duration-200',\n\t\t\t\t\t\t\t\tisClosing\n\t\t\t\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t\t\t\t: 'animate-in fade-in-0 duration-200',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={handleBackdropClick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<dialog\n\t\t\t\t\t\t\t{...dialogProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'dialog--component relative z-10 m-0 p-0',\n\t\t\t\t\t\t\t\t'rounded-lg border shadow-lg',\n\t\t\t\t\t\t\t\t'bg-background text-foreground',\n\t\t\t\t\t\t\t\t'max-h-[90vh] w-full',\n\t\t\t\t\t\t\t\t'flex flex-col',\n\t\t\t\t\t\t\t\tSIZE_CLASSES[size],\n\t\t\t\t\t\t\t\t'animate-in fade-in-0 zoom-in-95 duration-200',\n\t\t\t\t\t\t\t\t'[&.closing]:animate-out [&.closing]:fade-out-0 [&.closing]:zoom-out-95 [&.closing]:duration-150',\n\t\t\t\t\t\t\t\t'outline-none focus-visible:outline-none',\n\t\t\t\t\t\t\t\temphasis && toneStyles.classes,\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\t\tonClick={closeDialog}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'absolute right-3 top-3 z-10 size-7 rounded-md p-0',\n\t\t\t\t\t\t\t\t\t'text-muted-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t\t\t\t'disabled:pointer-events-none',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\taria-label={strings.close}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex gap-3 px-6 pb-4 pt-6',\n\t\t\t\t\t\t\t\t\t\tshowIcon && 'items-start',\n\t\t\t\t\t\t\t\t\t\tvisuallyHideHeader && 'sr-only',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!showIcon && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"shrink-0 pt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t{toneStyles.icon}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={dialogTitleId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"pr-6\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={dialogDescriptionId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-1\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex-1 overflow-auto px-6',\n\t\t\t\t\t\t\t\t\t\ttitle || description\n\t\t\t\t\t\t\t\t\t\t\t? visuallyHideHeader\n\t\t\t\t\t\t\t\t\t\t\t\t? 'py-6'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'pb-6'\n\t\t\t\t\t\t\t\t\t\t\t: 'py-6',\n\t\t\t\t\t\t\t\t\t\tcontentClassName,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'mb-4 rounded-md border p-3',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'error' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-destructive/30 bg-destructive/5',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-warning/40 bg-warning/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'info' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-info/40 bg-info/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'success' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-success/40 bg-success/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'default' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-border bg-muted/40',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{alertMessage}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasFooter && (\n\t\t\t\t\t\t\t\t<div className=\"border-t px-6 py-4\">\n\t\t\t\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end\">\n\t\t\t\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant={finalConfirmVariant}\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloadingLabels={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: strings.loading,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</dialog>\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const Dialog = memo(DialogImpl);\nDialog.displayName = 'Dialog';\n","import {\n\tAlertCircle,\n\tAlertTriangle,\n\tCheckCircle,\n\tHelpCircle,\n\tInfo,\n\tX,\n} from 'lucide-react';\nimport React, { cloneElement, isValidElement, memo, useId, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useNativeDialog, useOverlayActions } from './hooks';\nimport type { DrawerDirection, DrawerProps, OverlaySize, OverlayTone } from './overlays.types';\n\nconst WIDTH_CLASSES: Record<OverlaySize, string> = {\n\txs: 'max-w-xs',\n\tsm: 'max-w-sm',\n\tmd: 'max-w-md',\n\tlg: 'max-w-lg',\n\txl: 'max-w-xl',\n\t'2xl': 'max-w-2xl',\n\t'3xl': 'max-w-3xl',\n\t'4xl': 'max-w-4xl',\n\t'5xl': 'max-w-5xl',\n\tfull: 'max-w-[calc(100vw-2rem)]',\n};\n\nconst DIRECTION_STYLES: Record<\n\tDrawerDirection,\n\t{ position: string; size: string; animation: string; rounded: string }\n> = {\n\tright: {\n\t\tposition: 'fixed top-0 right-0 bottom-0',\n\t\tsize: 'h-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-right duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-right [&.closing]:duration-200',\n\t\trounded: 'rounded-l-xl',\n\t},\n\tleft: {\n\t\tposition: 'fixed top-0 left-0 bottom-0',\n\t\tsize: 'h-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-left duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-left [&.closing]:duration-200',\n\t\trounded: 'rounded-r-xl',\n\t},\n\ttop: {\n\t\tposition: 'fixed top-0 left-0 right-0',\n\t\tsize: 'w-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-top duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-top [&.closing]:duration-200',\n\t\trounded: 'rounded-b-xl',\n\t},\n\tbottom: {\n\t\tposition: 'fixed bottom-0 left-0 right-0',\n\t\tsize: 'w-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-bottom duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-bottom [&.closing]:duration-200',\n\t\trounded: 'rounded-t-xl',\n\t},\n};\n\nconst TONE_ICONS: Record<OverlayTone, ReactNode> = {\n\tdefault: <HelpCircle className=\"text-muted-foreground h-5 w-5\" />,\n\terror: <AlertCircle className=\"text-destructive h-5 w-5\" />,\n\twarning: <AlertTriangle className=\"text-warning h-5 w-5\" />,\n\tinfo: <Info className=\"text-info h-5 w-5\" />,\n\tsuccess: <CheckCircle className=\"text-success h-5 w-5\" />,\n};\n\nfunction DrawerImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant = 'primary',\n\tconfirmStyle = 'solid',\n\tisLoading = false,\n\tformId,\n\tfooter,\n\temphasis = false,\n\ttone = 'default',\n\tshowIcon = false,\n\talertMessage,\n\tdirection = 'right',\n\twidth = 'lg',\n\tshowFooter = true,\n\ttrigger,\n}: DrawerProps) {\n\tconst drawerTitleId = useId();\n\tconst drawerDescriptionId = useId();\n\tconst ariaLabelledBy = title ? drawerTitleId : undefined;\n\tconst ariaDescribedBy = description ? drawerDescriptionId : undefined;\n\n\tconst {\n\t\tisOpen,\n\t\tisClosing,\n\t\topenDialog,\n\t\tcloseDialog,\n\t\tdialogProps,\n\t\thandleBackdropClick,\n\t} = useNativeDialog({\n\t\topen,\n\t\tonOpenChange,\n\t\tonClose,\n\t\tcloseOnEscape,\n\t\tcloseOnBackdropClick,\n\t\tinitialFocusRef,\n\t});\n\n\tconst {\n\t\tstrings,\n\t\tfinalConfirmVariant,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading,\n\t\thandleCancel,\n\t} = useOverlayActions({\n\t\tcloseDialog,\n\t\tonConfirm,\n\t\tonAsyncConfirm,\n\t\tcloseOnAsyncComplete,\n\t\tconfirmVariant,\n\t\tisLoading,\n\t\tformId,\n\t\tonCancel,\n\t\tcustomStrings,\n\t\temphasis,\n\t\ttone,\n\t});\n\n\tconst directionStyles = DIRECTION_STYLES[direction];\n\tconst isHorizontal = direction === 'left' || direction === 'right';\n\tconst hasContent = Boolean(children || alertMessage);\n\tconst hasFooter = showFooter && (showCancel || showConfirm || footer);\n\n\tconst triggerElement =\n\t\ttrigger && isValidElement<Record<string, unknown>>(trigger) ? (\n\t\t\tcloneElement(trigger, {\n\t\t\t\tonClick: (e: React.MouseEvent) => {\n\t\t\t\t\tconst original = trigger.props.onClick as\n\t\t\t\t\t\t| ((e: React.MouseEvent) => void)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\toriginal?.(e);\n\t\t\t\t\topenDialog();\n\t\t\t\t},\n\t\t\t})\n\t\t) : trigger ? (\n\t\t\t<span\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={openDialog}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\topenDialog();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</span>\n\t\t) : null;\n\n\tif (!isOpen && !isClosing && !trigger) return null;\n\n\treturn (\n\t\t<>\n\t\t\t{triggerElement}\n\n\t\t\t{!!(isOpen || isClosing) &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div className=\"fixed inset-0 z-50\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'absolute inset-0 bg-foreground/50 backdrop-blur-[1px]',\n\t\t\t\t\t\t\t\t'transition-opacity duration-300',\n\t\t\t\t\t\t\t\tisClosing\n\t\t\t\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t\t\t\t: 'animate-in fade-in-0 duration-300',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={handleBackdropClick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<dialog\n\t\t\t\t\t\t\t{...dialogProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'drawer--component inset-auto m-0 p-0',\n\t\t\t\t\t\t\t\tdirectionStyles.position,\n\t\t\t\t\t\t\t\tdirectionStyles.size,\n\t\t\t\t\t\t\t\t'border shadow-xl',\n\t\t\t\t\t\t\t\t'bg-background text-foreground',\n\t\t\t\t\t\t\t\tdirectionStyles.rounded,\n\t\t\t\t\t\t\t\tisHorizontal && 'w-full',\n\t\t\t\t\t\t\t\tisHorizontal && WIDTH_CLASSES[width],\n\t\t\t\t\t\t\t\t!isHorizontal && 'max-h-[85vh]',\n\t\t\t\t\t\t\t\tdirectionStyles.animation,\n\t\t\t\t\t\t\t\t'outline-none focus-visible:outline-none',\n\t\t\t\t\t\t\t\t'flex flex-col',\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\t\tonClick={closeDialog}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'absolute right-4 top-4 z-10 size-7 rounded-md p-0',\n\t\t\t\t\t\t\t\t\t'text-muted-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t\t\t\t'disabled:pointer-events-none',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\taria-label={strings.close}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex items-start gap-3 px-6 pb-4 pt-6',\n\t\t\t\t\t\t\t\t\t\tvisuallyHideHeader && 'sr-only',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!showIcon && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"shrink-0 pt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t{TONE_ICONS[tone]}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1 pr-6\">\n\t\t\t\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={drawerTitleId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={drawerDescriptionId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-1\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex-1 overflow-auto px-6',\n\t\t\t\t\t\t\t\t\t\ttitle || description ? 'pb-6' : 'py-6',\n\t\t\t\t\t\t\t\t\t\tcontentClassName,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'mb-4 rounded-md border p-3',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'error' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-destructive/30 bg-destructive/5',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-warning/40 bg-warning/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'info' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-info/40 bg-info/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'success' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-success/40 bg-success/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'default' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-border bg-muted/40',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{alertMessage}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasFooter && (\n\t\t\t\t\t\t\t\t<div className=\"border-t px-6 py-4\">\n\t\t\t\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end\">\n\t\t\t\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant={finalConfirmVariant}\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloadingLabels={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: strings.loading,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</dialog>\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const Drawer = memo(DrawerImpl);\nDrawer.displayName = 'Drawer';\n","import { AlertCircle, AlertTriangle, CheckCircle, HelpCircle, Info } from 'lucide-react';\nimport React, {\n\tcloneElement,\n\tisValidElement,\n\tmemo,\n\tuseId,\n\tuseMemo,\n\ttype ReactNode,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useNativeDialog, useOverlayActions } from './hooks';\nimport { defaultAlertDialogStrings } from './overlays.strings';\nimport type { AlertDialogProps, OverlayTone } from './overlays.types';\n\nconst TONE_STYLES: Record<OverlayTone, { icon: ReactNode; iconColor: string }> = {\n\tdefault: {\n\t\ticon: <HelpCircle className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-muted-foreground',\n\t},\n\terror: { icon: <AlertCircle className=\"h-6 w-6\" />, iconColor: 'text-destructive' },\n\twarning: {\n\t\ticon: <AlertTriangle className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-warning',\n\t},\n\tinfo: {\n\t\ticon: <Info className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-info',\n\t},\n\tsuccess: {\n\t\ticon: <CheckCircle className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-success',\n\t},\n};\n\nfunction AlertDialogImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = false,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant,\n\tconfirmStyle = 'solid',\n\tisLoading = false,\n\tformId,\n\tfooter,\n\ttone = 'default',\n\tshowIcon = true,\n\talertMessage,\n\ttrigger,\n\tdestructive = false,\n}: AlertDialogProps) {\n\tconst alertTitleId = useId();\n\tconst alertDescriptionId = useId();\n\tconst ariaLabelledBy = title ? alertTitleId : undefined;\n\tconst ariaDescribedBy = description ? alertDescriptionId : undefined;\n\n\tconst {\n\t\tisOpen,\n\t\tisClosing,\n\t\topenDialog,\n\t\tcloseDialog,\n\t\tdialogProps,\n\t\thandleBackdropClick,\n\t} = useNativeDialog({\n\t\topen,\n\t\tonOpenChange,\n\t\tonClose,\n\t\tcloseOnEscape,\n\t\tcloseOnBackdropClick,\n\t\tinitialFocusRef,\n\t});\n\n\tconst mergedStrings = useStrings(defaultAlertDialogStrings, customStrings);\n\n\tconst resolvedConfirmVariant = useMemo(() => {\n\t\tif (destructive) return 'error' as const;\n\t\tif (confirmVariant) return confirmVariant;\n\t\tconst toneMap: Record<OverlayTone, string> = {\n\t\t\tdefault: 'primary',\n\t\t\terror: 'error',\n\t\t\twarning: 'warning',\n\t\t\tinfo: 'primary',\n\t\t\tsuccess: 'success',\n\t\t};\n\t\treturn toneMap[tone] as 'primary' | 'error' | 'warning' | 'success';\n\t}, [destructive, confirmVariant, tone]);\n\n\tconst { strings, confirmButtonOnClick, effectiveLoading, handleCancel } =\n\t\tuseOverlayActions({\n\t\t\tcloseDialog,\n\t\t\tonConfirm,\n\t\t\tonAsyncConfirm,\n\t\t\tcloseOnAsyncComplete,\n\t\t\tconfirmVariant: resolvedConfirmVariant,\n\t\t\tisLoading,\n\t\t\tformId,\n\t\t\tonCancel,\n\t\t\tcustomStrings: mergedStrings,\n\t\t});\n\n\tconst toneStyles = TONE_STYLES[tone];\n\n\tconst triggerElement =\n\t\ttrigger && isValidElement<Record<string, unknown>>(trigger) ? (\n\t\t\tcloneElement(trigger, {\n\t\t\t\tonClick: (e: React.MouseEvent) => {\n\t\t\t\t\tconst original = trigger.props.onClick as\n\t\t\t\t\t\t| ((e: React.MouseEvent) => void)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\toriginal?.(e);\n\t\t\t\t\topenDialog();\n\t\t\t\t},\n\t\t\t})\n\t\t) : trigger ? (\n\t\t\t<span\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={openDialog}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\topenDialog();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</span>\n\t\t) : null;\n\n\tif (!isOpen && !isClosing && !trigger) return null;\n\n\treturn (\n\t\t<>\n\t\t\t{triggerElement}\n\n\t\t\t{!!(isOpen || isClosing) &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'absolute inset-0 bg-foreground/50 backdrop-blur-[1px]',\n\t\t\t\t\t\t\t\t'transition-opacity duration-200',\n\t\t\t\t\t\t\t\tisClosing\n\t\t\t\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t\t\t\t: 'animate-in fade-in-0 duration-200',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={handleBackdropClick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<dialog\n\t\t\t\t\t\t\t{...dialogProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'alert-dialog--component relative z-10 m-0 w-full max-w-md p-0',\n\t\t\t\t\t\t\t\t'max-h-[90vh] flex flex-col',\n\t\t\t\t\t\t\t\t'rounded-lg border shadow-lg',\n\t\t\t\t\t\t\t\t'bg-background text-foreground',\n\t\t\t\t\t\t\t\t'animate-in fade-in-0 zoom-in-95 duration-200',\n\t\t\t\t\t\t\t\t'[&.closing]:animate-out [&.closing]:fade-out-0 [&.closing]:zoom-out-95 [&.closing]:duration-150',\n\t\t\t\t\t\t\t\t'outline-none focus-visible:outline-none',\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\trole=\"alertdialog\"\n\t\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex-1 overflow-auto p-6\">\n\t\t\t\t\t\t\t\t{!!showIcon && !visuallyHideHeader && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'error' && 'bg-destructive/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' && 'bg-warning/15',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'info' && 'bg-info/15',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'success' && 'bg-success/15',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'default' && 'bg-muted',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span className={toneStyles.iconColor}>\n\t\t\t\t\t\t\t\t\t\t\t{toneStyles.icon}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t\t\t\t\t<div className={cn(visuallyHideHeader && 'sr-only')}>\n\t\t\t\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={alertTitleId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={alertDescriptionId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-2\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'mt-4 rounded-md border p-3 text-left',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'error' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-destructive/30 bg-destructive/5',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-warning/40 bg-warning/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'info' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-info/40 bg-info/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'success' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-success/40 bg-success/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'default' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-border bg-muted/40',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"p\">\n\t\t\t\t\t\t\t\t\t\t\t{alertMessage}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{!!children && (\n\t\t\t\t\t\t\t\t\t<div className={cn('mt-4', contentClassName)}>\n\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t{!!(showCancel || showConfirm || footer) && (\n\t\t\t\t\t\t\t\t<div className=\"border-t px-6 py-4\">\n\t\t\t\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end\">\n\t\t\t\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full sm:w-auto\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant={resolvedConfirmVariant}\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloadingLabels={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: strings.loading,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full sm:w-auto\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</dialog>\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const AlertDialog = memo(AlertDialogImpl);\nAlertDialog.displayName = 'AlertDialog';\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-CUA_A-oO.js","names":[],"sources":["../../src/components/ui/table.tsx","../../src/components/ui/pagination.tsx","../../src/components/base/table/table.strings.ts","../../src/components/base/table/pagination.tsx","../../src/components/base/table/table-actions.tsx","../../src/components/base/table/table-helpers.tsx","../../src/components/base/table/table-body.tsx","../../src/components/base/table/table-header.tsx","../../src/components/base/table/column-visibility-toggle.tsx","../../src/components/base/table/table-toolbar.tsx","../../src/components/base/table/data-table.tsx","../../src/components/base/table/filter-bar.tsx","../../src/components/base/table/table-pagination.tsx","../../src/components/base/table/partials/cell-value.tsx","../../src/components/base/table/partials/table-link.tsx","../../src/components/base/table/partials/cell-renderers.tsx","../../src/components/base/table/hooks.ts","../../src/components/base/table/partials/density-toggle.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype TableProps = React.ComponentProps<\"table\"> & {\n containerClassName?: string\n}\n\nfunction Table({ className, containerClassName, ...props }: TableProps) {\n return (\n <div\n data-slot=\"table-container\"\n className={cn(\"relative w-full overflow-x-auto\", containerClassName)}\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\", className)}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","import { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport { cn } from \"@/lib/utils\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\n \"mx-auto flex w-full justify-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"gap-1 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <Button\n variant={isActive ? \"outline\" : \"ghost\"}\n size={size}\n className={cn(className)}\n nativeButton={false}\n render={\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n {...props}\n />\n }\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n text = \"Previous\",\n ...props\n}: React.ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"pl-2!\", className)}\n {...props}\n >\n <ChevronLeftIcon data-icon=\"inline-start\" />\n <span className=\"hidden sm:block\">\n {text}\n </span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({\n className,\n text = \"Next\",\n ...props\n}: React.ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"pr-2!\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">{text}</span>\n <ChevronRightIcon data-icon=\"inline-end\" />\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\n \"size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4 flex items-center justify-center\",\n className\n )}\n {...props}\n >\n <MoreHorizontalIcon\n />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n}\n","import { type DataTableStrings, type DataTableStringsOverride } from './table.types';\n\nconst fallbackTitleCase = (value: string): string => {\n const formatted = value\n .replace(/[_-]+/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n if (!formatted) {\n return 'Column';\n }\n\n return formatted.replace(/\\b\\w/g, (char) => char.toUpperCase());\n};\n\nconst formatColumnLabel = (columnId: string, currentLabel?: string | null): string => {\n if (currentLabel && currentLabel.trim().length > 0) {\n return currentLabel;\n }\n\n return fallbackTitleCase(columnId);\n};\n\nexport const defaultDataTableStrings: DataTableStrings = {\n emptyState: {\n message: 'No results found.',\n },\n actions: {\n triggerLabel: 'Actions',\n srLabel: 'Row actions menu',\n },\n filter: {\n searchPlaceholder: 'Filter...',\n columnsButton: 'Columns',\n },\n columnVisibility: {\n title: 'Toggle columns',\n triggerLabel: 'Columns',\n formatLabel: formatColumnLabel,\n },\n toolbar: {\n scrollLeft: 'Scroll left',\n scrollRight: 'Scroll right',\n columns: 'Toggle columns',\n dense: 'Compact view',\n comfortable: 'Comfortable view',\n },\n pagination: {\n showing: 'Showing',\n to: 'to',\n of: 'of',\n entries: 'results',\n previous: 'Previous',\n next: 'Next',\n page: 'Page',\n rowsPerPage: 'Rows per page',\n ariaLabel: 'Pagination navigation',\n },\n selection: {\n summary: (selected, total) => `${selected} of ${total} row${total === 1 ? '' : 's'} selected.`,\n row: (index) => `Select row ${index + 1}`,\n selectAll: 'Select all rows',\n clear: 'Clear selection',\n },\n accessibility: {\n scrollRegion: 'Table scroll area',\n },\n} as const;\n\nconst mergeNested = <T extends object>(defaults: T, overrides?: Partial<T>): T => ({\n ...defaults,\n ...(overrides ?? {}),\n});\n\nexport const mergeDataTableStrings = (overrides?: DataTableStringsOverride): DataTableStrings => {\n if (!overrides) {\n return defaultDataTableStrings;\n }\n\n return {\n emptyState: mergeNested(defaultDataTableStrings.emptyState, overrides.emptyState),\n actions: mergeNested(defaultDataTableStrings.actions, overrides.actions),\n filter: mergeNested(defaultDataTableStrings.filter, overrides.filter),\n columnVisibility: mergeNested(defaultDataTableStrings.columnVisibility, overrides.columnVisibility),\n toolbar: mergeNested(defaultDataTableStrings.toolbar, overrides.toolbar),\n pagination: mergeNested(defaultDataTableStrings.pagination, overrides.pagination),\n selection: mergeNested(defaultDataTableStrings.selection, overrides.selection),\n accessibility: mergeNested(defaultDataTableStrings.accessibility, overrides.accessibility),\n };\n};\n","import { useCallback } from 'react';\nimport {\n\tPagination as PaginationRoot,\n\tPaginationContent,\n\tPaginationEllipsis,\n\tPaginationItem,\n\tPaginationLink,\n\tPaginationNext,\n\tPaginationPrevious,\n} from '@/components/ui/pagination';\nimport { Text } from '@/components/typography';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type ServerPaginationProps } from './table.types';\n\nimport { cn } from '@/lib/utils';\n/**\n * Generate a window of page numbers with ellipsis gaps.\n *\n * Always shows first page, last page, and up to 1 sibling\n * on each side of the current page.\n */\nfunction generatePageNumbers(\n\tcurrentPage: number,\n\tlastPage: number,\n): (number | 'ellipsis')[] {\n\tif (lastPage <= 7) {\n\t\treturn Array.from({ length: lastPage }, (_, i) => i + 1);\n\t}\n\n\tconst pages: (number | 'ellipsis')[] = [1];\n\n\tif (currentPage > 3) {\n\t\tpages.push('ellipsis');\n\t}\n\n\tconst start = Math.max(2, currentPage - 1);\n\tconst end = Math.min(lastPage - 1, currentPage + 1);\n\n\tfor (let i = start; i <= end; i++) {\n\t\tpages.push(i);\n\t}\n\n\tif (currentPage < lastPage - 2) {\n\t\tpages.push('ellipsis');\n\t}\n\n\tpages.push(lastPage);\n\n\treturn pages;\n}\n\nfunction buildPageUrl(basePath: string, page: number, queryKey: string): string {\n\t// Build a URL without inheriting the current location's query string —\n\t// the library is framework-agnostic and must not read browser globals\n\t// to decide what to put in href. Consumers that need their own params\n\t// merged should compute and pass the URL via the pagination object.\n\tconst params = new URLSearchParams();\n\tparams.set(queryKey, String(page));\n\treturn `${basePath}?${params.toString()}`;\n}\n\nexport function Pagination({\n\tpagination,\n\tonPageChange,\n\tlabels = {},\n\tpageQueryKey,\n}: ServerPaginationProps) {\n\tconst paginationLabels = {\n\t\t...defaultDataTableStrings.pagination,\n\t\t...labels,\n\t} as typeof defaultDataTableStrings.pagination;\n\tconst queryKey = pageQueryKey ?? 'page';\n\n\tconst firstItem = (pagination.current_page - 1) * pagination.per_page + 1;\n\tconst lastItem = Math.min(\n\t\tpagination.current_page * pagination.per_page,\n\t\tpagination.total,\n\t);\n\n\tconst navigateToPage = useCallback(\n\t\t(page: number, url: string | null) => {\n\t\t\tif (!url) return;\n\t\t\t// The library never navigates on its own. Consumers wire their\n\t\t\t// router (Inertia, Tanstack Router, RR7, Next, …) through\n\t\t\t// `onPageChange`. When it's absent the click is a no-op — the\n\t\t\t// `href` attribute on the underlying anchor remains the only\n\t\t\t// fallback path (browsers will navigate it if JS doesn't run).\n\t\t\tonPageChange?.(page, url, pagination.path || '');\n\t\t},\n\t\t[onPageChange, pagination.path],\n\t);\n\n\tconst hasPrevious = pagination.prev_page_url !== null;\n\tconst hasNext = pagination.next_page_url !== null;\n\tconst pages = generatePageNumbers(pagination.current_page, pagination.last_page);\n\n\treturn (\n\t\t<div className={cn('pagination--component', 'flex items-center justify-between px-5 py-3')}>\n\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"tabular-nums tracking-tight\">\n\t\t\t\t<Text tag=\"span\" weight=\"medium\" className=\"text-foreground\">{firstItem}&ndash;{lastItem}</Text>{' '}\n\t\t\t\t{paginationLabels.of}{' '}\n\t\t\t\t<Text tag=\"span\" weight=\"medium\" className=\"text-foreground\">{pagination.total}</Text>{' '}\n\t\t\t\t{paginationLabels.entries}\n\t\t\t</Text>\n\n\t\t\t<PaginationRoot aria-label={paginationLabels.ariaLabel} className=\"w-auto mx-0\">\n\t\t\t\t<PaginationContent className=\"gap-0.5\">\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t\t<PaginationPrevious\n\t\t\t\t\t\t\t\ttext={paginationLabels.previous}\n\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\tonClick={(e: React.MouseEvent) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tnavigateToPage(\n\t\t\t\t\t\t\t\t\tpagination.current_page - 1,\n\t\t\t\t\t\t\t\t\tpagination.prev_page_url,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-disabled={!hasPrevious}\n\t\t\t\t\t\t\t\tclassName={`h-control-sm text-xs ${!hasPrevious ? 'pointer-events-none opacity-40' : ''}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\n\t\t\t\t\t{pages.map((page, index) => {\n\t\t\t\t\t\tconst isEllipsis = page === 'ellipsis';\n\t\t\t\t\t\tconst itemKey = isEllipsis\n\t\t\t\t\t\t\t? `ellipsis-${pagination.current_page}-${index}`\n\t\t\t\t\t\t\t: `page-${page}`;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t<PaginationItem key={itemKey}>\n\t\t\t\t\t\t\t{isEllipsis ? (\n\t\t\t\t\t\t\t\t\t<PaginationEllipsis className=\"size-control-sm\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<PaginationLink\n\t\t\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t\t\tisActive={page === pagination.current_page}\n\t\t\t\t\t\t\t\t\tonClick={(e: React.MouseEvent) => {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tnavigateToPage(\n\t\t\t\t\t\t\t\t\t\t\tpage,\n\t\t\t\t\t\t\t\t\t\t\tbuildPageUrl(pagination.path, page, queryKey),\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tclassName=\"size-control-sm text-xs\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{page}\n\t\t\t\t\t\t\t\t</PaginationLink>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</PaginationItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\n\t\t\t\t\t<PaginationItem>\n\t\t\t\t\t\t\t<PaginationNext\n\t\t\t\t\t\t\ttext={paginationLabels.next}\n\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\tonClick={(e: React.MouseEvent) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tnavigateToPage(\n\t\t\t\t\t\t\t\t\tpagination.current_page + 1,\n\t\t\t\t\t\t\t\t\tpagination.next_page_url,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-disabled={!hasNext}\n\t\t\t\t\t\t\t\tclassName={`h-control-sm text-xs ${!hasNext ? 'pointer-events-none opacity-40' : ''}`}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PaginationItem>\n\t\t\t\t</PaginationContent>\n\t\t\t</PaginationRoot>\n\t\t</div>\n\t);\n}\n\nPagination.displayName = 'Pagination';\n","import { MoreHorizontal, type LucideIcon } from 'lucide-react';\nimport { isValidElement, useEffect, useMemo, useState } from 'react';\nimport { Button, type ButtonVariant, type ButtonStyle } from '@/components/base/buttons';\nimport {\n ActionMenu,\n MenuAction,\n type MenuActionProps\n} from '@/components/base/navigation/action-menu';\nimport { cn } from '@/lib/utils';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type DataTableActionsProps, type ActionItem, type ActionVariant } from './table.types';\n\nexport function DataTableActions<TData>(props: DataTableActionsProps<TData>) {\n const {\n row,\n actions,\n menuLabel,\n displayMode = 'menu', // preserve existing behavior\n responsiveBreakpoint = 1040,\n strings: providedStrings\n } = props;\n\n const strings = providedStrings ?? defaultDataTableStrings;\n const resolvedMenuLabel = menuLabel ?? strings.actions.triggerLabel;\n\n // Resolve actions array\n const resolvedActions = useMemo<ActionItem<TData>[]>(() => {\n const base = typeof actions === 'function' ? actions(row) : actions;\n return Array.isArray(base) ? base : [];\n }, [actions, row]);\n\n // Filter visibility and compute disabled by predicate/boolean\n const visibleActions = useMemo(() => {\n const evalFlag = (flag: boolean | ((r: TData) => boolean) | undefined): boolean | undefined => {\n if (typeof flag === 'function') return flag(row);\n return flag;\n };\n return resolvedActions\n .filter(a => {\n const v = evalFlag(a.isVisible);\n return v === undefined ? true : v;\n })\n .map(a => ({\n ...a,\n disabled: evalFlag(a.isDisabled) ?? a.disabled ?? false\n }));\n }, [resolvedActions, row]);\n\n // No actions to render\n const hasVisibleActions = visibleActions.length > 0;\n\n // Responsive auto mode: inline over breakpoint, menu under\n const [isNarrow, setIsNarrow] = useState(false);\n\n // 1. Split by variant\n const nonDestructive = visibleActions.filter((action) => action.variant !== 'destructive');\n const destructive = visibleActions.filter((action) => action.variant === 'destructive');\n\n // 2. Combine them (non-destructive first, destructive last)\n const sortedActions = [...nonDestructive, ...destructive];\n\n useEffect(() => {\n if (displayMode !== 'auto' || !hasVisibleActions) {\n setIsNarrow(false);\n return;\n }\n\n const handleResize = () => {\n try {\n setIsNarrow(window.innerWidth <= responsiveBreakpoint);\n } catch {\n setIsNarrow(false);\n }\n };\n\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [displayMode, hasVisibleActions, responsiveBreakpoint]);\n\n if (!hasVisibleActions) return null;\n\n const mode: 'menu' | 'inline' = displayMode === 'auto' ? (isNarrow ? 'menu' : 'inline') : displayMode;\n\n const resolveMenuIcon = (icon: ActionItem<TData>['icon']): LucideIcon | undefined => {\n if (!icon) return undefined;\n if (typeof icon === 'function') {\n return icon as LucideIcon;\n }\n\n if (isValidElement(icon) && typeof icon.type === 'function') {\n return icon.type as LucideIcon;\n }\n\n return undefined;\n };\n\n const resolveActionButtonVariant = (variant?: ActionVariant): {\n variant: ButtonVariant;\n buttonStyle: ButtonStyle;\n className?: string\n } => {\n switch (variant) {\n case 'destructive':\n return { variant: 'error', buttonStyle: 'solid' };\n case 'outline':\n return { variant: 'secondary', buttonStyle: 'outline' };\n case 'secondary':\n return { variant: 'secondary', buttonStyle: 'solid' };\n case 'ghost':\n return { variant: 'secondary', buttonStyle: 'ghost' };\n case 'link':\n return { variant: 'secondary', buttonStyle: 'ghost', className: 'underline underline-offset-4' };\n case 'default':\n default:\n return { variant: 'primary', buttonStyle: 'solid' };\n }\n };\n\n const resolveMenuActionVariant = (\n variant?: ActionVariant\n ): NonNullable<MenuActionProps['variant']> => {\n switch (variant) {\n case 'default':\n return 'primary';\n case 'destructive':\n return 'error';\n default:\n return 'secondary';\n }\n };\n\n\t if (mode === 'inline') {\n\t return (\n\t <div className={cn('table-actions--component', 'flex items-center gap-space-sm')}>\n {sortedActions.map((action, idx) => {\n const key = action.id || `${action.label}-${idx}`;\n const resolved = resolveActionButtonVariant(action.variant ?? 'ghost');\n const onClick = () => {\n action.onClick?.(row);\n };\n return (\n <Button\n\t key={key}\n\t variant={resolved.variant}\n\t buttonStyle={resolved.buttonStyle}\n\t size=\"small\"\n\t className={cn('text-inherit leading-tight', resolved.className)}\n disabled={!!action.disabled}\n onClick={onClick}\n >\n\t {!!action.icon && <span className=\"mr-space-sm inline-flex\">{action.icon}</span>}\n {action.label}\n </Button>\n );\n })}\n </div>\n );\n }\n\n\n // menu mode (default) using our ActionMenu implementation\n return (\n <ActionMenu\n label={undefined}\n icon={MoreHorizontal}\n srText={resolvedMenuLabel || strings.actions.srLabel}\n closeOnSelect={true}\n align=\"end\"\n density=\"table\"\n >\n {sortedActions.map((action, idx) => {\n const key = action.id || `${action.label}-${idx}`;\n const onClick = () => {\n action.onClick?.(row);\n };\n const menuIcon = resolveMenuIcon(action.icon);\n const inlineIcon = action.icon\n ? <span className=\"inline-flex items-center\">{action.icon}</span>\n : null;\n const fallbackContent = menuIcon ? null : (\n\t <div className=\"flex w-full items-center gap-space-md\">\n {inlineIcon}\n <span>{action.label}</span>\n </div>\n );\n\n const menuActionVariant = resolveMenuActionVariant(\n action.variant\n );\n\n return (\n <MenuAction\n key={key}\n label={action.label}\n icon={menuIcon}\n variant={menuActionVariant}\n disabled={!!action.disabled}\n onClick={onClick}\n >\n {fallbackContent}\n </MenuAction>\n );\n })}\n </ActionMenu>\n );\n}\n\nDataTableActions.displayName = 'DataTableActions';\n","import type {\n\tSortingState,\n\tRowSelectionState,\n\tVisibilityState,\n\tTable,\n\tRow,\n\tUpdater,\n\tColumnDef,\n} from '@tanstack/react-table';\nimport React from 'react';\nimport { Checkbox } from '@/components/base/forms/fields/checkbox';\nimport { defaultDataTableStrings } from './table.strings';\nimport type { DataTableStrings } from './table.types';\n\n/**\n * Helper function for handling row selection changes with OnChangeFn compatibility\n */\nexport const handleRowSelectionChange = (\n\tupdatedSelection: Updater<RowSelectionState>,\n\tsetInternalState: React.Dispatch<React.SetStateAction<RowSelectionState>>,\n\texternalHandler?: (state: RowSelectionState) => void,\n) => {\n\t// Handle both direct values and updater functions\n\tif (typeof updatedSelection === 'function') {\n\t\t// If it's a function, use setState with function argument\n\t\tsetInternalState((prevState) => {\n\t\t\tconst newState = (\n\t\t\t\tupdatedSelection as (prev: RowSelectionState) => RowSelectionState\n\t\t\t)(prevState);\n\t\t\tif (externalHandler) {\n\t\t\t\texternalHandler(newState);\n\t\t\t}\n\t\t\treturn newState;\n\t\t});\n\t} else {\n\t\t// If it's a direct value, just use it\n\t\tsetInternalState(updatedSelection);\n\t\tif (externalHandler) {\n\t\t\texternalHandler(updatedSelection);\n\t\t}\n\t}\n};\n\n/**\n * Helper function for handling sorting changes with OnChangeFn compatibility\n */\nexport const handleSortingChange = (\n\tupdatedSorting: Updater<SortingState>,\n\tsetInternalState: React.Dispatch<React.SetStateAction<SortingState>>,\n\texternalHandler?: (state: SortingState) => void,\n) => {\n\t// Handle both direct values and updater functions\n\tif (typeof updatedSorting === 'function') {\n\t\t// If it's a function, use setState with function argument\n\t\tsetInternalState((prevState) => {\n\t\t\tconst newState = (updatedSorting as (prev: SortingState) => SortingState)(\n\t\t\t\tprevState,\n\t\t\t);\n\t\t\tif (externalHandler) {\n\t\t\t\texternalHandler(newState);\n\t\t\t}\n\t\t\treturn newState;\n\t\t});\n\t} else {\n\t\t// If it's a direct value, just use it\n\t\tsetInternalState(updatedSorting);\n\t\tif (externalHandler) {\n\t\t\texternalHandler(updatedSorting);\n\t\t}\n\t}\n};\n\n/**\n * Helper function for handling column visibility changes\n */\nexport const handleColumnVisibilityChange = (\n\tupdatedVisibility: Updater<VisibilityState>,\n\tsetInternalState: React.Dispatch<React.SetStateAction<VisibilityState>>,\n\texternalHandler?: (state: VisibilityState) => void,\n) => {\n\t// Handle both direct values and updater functions\n\tif (typeof updatedVisibility === 'function') {\n\t\t// If it's a function, use setState with function argument\n\t\tsetInternalState((prevState) => {\n\t\t\tconst newState = (\n\t\t\t\tupdatedVisibility as (prev: VisibilityState) => VisibilityState\n\t\t\t)(prevState);\n\t\t\tif (externalHandler) {\n\t\t\t\texternalHandler(newState);\n\t\t\t}\n\t\t\treturn newState;\n\t\t});\n\t} else {\n\t\t// If it's a direct value, just use it\n\t\tsetInternalState(updatedVisibility);\n\t\tif (externalHandler) {\n\t\t\texternalHandler(updatedVisibility);\n\t\t}\n\t}\n};\n\n/**\n * Get row class name based on selection state and custom function\n */\nexport const getRowClassName = <TData,>(\n\trow: Row<TData>,\n\tindex: number,\n\trowClassName?: string | ((row: Row<TData>, index: number) => string),\n\tisSelected?: boolean,\n): string => {\n\tlet className = '';\n\n\t// Add selected class if the row is selected\n\tif (isSelected) {\n\t\tclassName += 'bg-primary/5 ';\n\t}\n\n\t// Add custom class name\n\tif (typeof rowClassName === 'function') {\n\t\tclassName += rowClassName(row, index) + ' ';\n\t} else if (rowClassName) {\n\t\tclassName += rowClassName + ' ';\n\t}\n\n\treturn className.trim();\n};\n\n/**\n * Get cell class name including sticky column handling\n */\nexport const getCellClassName = <TData,>(\n\tcolumnId: string,\n\trow: Row<TData> | null,\n\tcellClassName?: string | ((column: string, row: Row<TData> | null) => string),\n\tstickyFirstColumn?: boolean,\n\tisFirstColumn?: boolean,\n): string => {\n\tlet baseClassName = '';\n\n\t// Add base class name\n\tif (typeof cellClassName === 'string') {\n\t\tbaseClassName = cellClassName;\n\t} else if (cellClassName && row) {\n\t\tbaseClassName = cellClassName(columnId, row);\n\t}\n\n\t// Add sticky class if it's the first column and sticky first column is enabled\n\tif (stickyFirstColumn && isFirstColumn) {\n\t\treturn `${baseClassName} sticky left-0 z-10 bg-card shadow-[1px_0_0_0_var(--border)]`;\n\t}\n\n\treturn baseClassName;\n};\n\n/**\n * Get selected rows data from the table\n */\nexport const getSelectedRowsData = <T extends object>(table: Table<T>): T[] => {\n\treturn table.getSelectedRowModel().rows.map((row) => row.original);\n};\n\n/**\n * Create row selection component for a row\n */\nexport const createRowSelectionCheckbox = <TData,>(\n\trow: Row<TData>,\n\tstrings: DataTableStrings = defaultDataTableStrings,\n) => (\n\t\t<div className=\"px-space-sm\">\n\t\t\t<Checkbox\n\t\t\t\tclassName=\"size-icon cursor-pointer disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\tchecked={row.getIsSelected()}\n\t\t\tdisabled={!row.getCanSelect()}\n\t\t\tonCheckedChange={(checked) => row.toggleSelected(checked === true)}\n\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\taria-label={strings.selection.row(row.index)}\n\t\t/>\n\t</div>\n);\n\n/**\n * Create header selection checkbox\n */\nexport const createHeaderSelectionCheckbox = <TData,>(\n\ttable: Table<TData>,\n\tstrings: DataTableStrings = defaultDataTableStrings,\n) => (\n\t\t<div className=\"px-space-sm\">\n\t\t\t<Checkbox\n\t\t\t\tclassName=\"size-icon cursor-pointer\"\n\t\t\tchecked={table.getIsAllPageRowsSelected()}\n\t\t\tindeterminate={table.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected()}\n\t\t\tonCheckedChange={(checked) => table.toggleAllPageRowsSelected(checked === true)}\n\t\t\taria-label={strings.selection.selectAll}\n\t\t/>\n\t</div>\n);\n\n/**\n * Add selection column to columns\n */\nexport const addSelectionColumn = <TData, TValue = unknown>(\n\tcolumns: ColumnDef<TData, TValue>[],\n\tstrings: DataTableStrings = defaultDataTableStrings,\n) => {\n\tconst selectionColumn = {\n\t\tid: 'selection',\n\t\theader: ({ table }: { table: Table<TData> }) =>\n\t\t\tcreateHeaderSelectionCheckbox(table, strings),\n\t\tcell: ({ row }: { row: Row<TData> }) => createRowSelectionCheckbox(row, strings),\n\t\tenableSorting: false,\n\t\tenableResizing: false,\n\t\tsize: 40,\n\t} as ColumnDef<TData, TValue>;\n\n\treturn [selectionColumn, ...columns];\n};\n","/**\n * DataTableBody — body rows, selection highlighting, hover, empty state,\n * and (optional) loading skeleton. Stronger hover + selection contrast than\n * the original implementation so rows feel interactive at a glance.\n */\nimport { flexRender } from '@tanstack/react-table';\nimport { TableBody, TableCell, TableRow } from '@/components/ui/table';\nimport Text from '@/components/typography/text';\nimport { cn } from '@/lib/utils';\nimport {\n\tgetCellClassName,\n\tgetRowClassName,\n} from './table-helpers';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type DataTableBodyProps } from './table.types';\n\nexport function DataTableBody<TData>({\n\ttable,\n\tonRowClick,\n\temptyStateMessage,\n\temptyStateAction,\n\tcellClassName = '',\n\trowClassName = '',\n\tstickyFirstColumn = false,\n\tstriped = false,\n\tdense = false,\n\tstrings,\n}: DataTableBodyProps<TData>) {\n\tconst tableRows = table.getRowModel().rows;\n\tconst resolvedEmptyStateMessage =\n\t\temptyStateMessage ??\n\t\tstrings?.emptyState.message ??\n\t\tdefaultDataTableStrings.emptyState.message;\n\n\tconst handleRowClick = (row: TData) => {\n\t\tif (onRowClick) {\n\t\t\tonRowClick(row);\n\t\t}\n\t};\n\n\tif (!tableRows.length) {\n\t\treturn (\n\t\t\t<TableBody className=\"table-body--component\">\n\t\t\t\t<TableRow className=\"hover:bg-transparent\">\n\t\t\t\t\t<TableCell\n\t\t\t\t\t\tclassName=\"h-24 text-center\"\n\t\t\t\t\t\tcolSpan={table.getAllColumns().length}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"flex flex-col items-center justify-center gap-space-md py-12\">\n\t\t\t\t\t\t\t<div className=\"mb-space-sm flex size-avatar-lg items-center justify-center rounded-full bg-muted\">\n\t\t\t\t\t\t\t\t<svg className=\"size-icon-lg text-muted-foreground/60\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth={1.5} stroke=\"currentColor\">\n\t\t\t\t\t\t\t\t\t<path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M20.25 7.5l-.625 10.632a2.25 2.25 0 01-2.247 2.118H6.622a2.25 2.25 0 01-2.247-2.118L3.75 7.5m6 4.125l2.25 2.25m0 0l2.25-2.25M12 13.875V7.5M3.75 7.5h16.5\" />\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{resolvedEmptyStateMessage}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{!!emptyStateAction && (\n\t\t\t\t\t\t\t\t<div className=\"mt-1\">{emptyStateAction}</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</TableCell>\n\t\t\t\t</TableRow>\n\t\t\t</TableBody>\n\t\t);\n\t}\n\n\treturn (\n\t\t<TableBody>\n\t\t\t{tableRows.map((row, rowIndex) => {\n\t\t\t\tconst isRowSelected = row.getIsSelected();\n\t\t\t\tconst rowCells = row.getVisibleCells();\n\t\t\t\tconst computedRowClassName = getRowClassName(\n\t\t\t\t\trow,\n\t\t\t\t\trowIndex,\n\t\t\t\t\trowClassName,\n\t\t\t\t\tisRowSelected,\n\t\t\t\t);\n\t\t\t\tconst handleRowSelection = () => {\n\t\t\t\t\tif (onRowClick) {\n\t\t\t\t\t\thandleRowClick(row.original);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst zebraClass = striped && rowIndex % 2 !== 0 ? 'bg-muted/30' : '';\n\t\t\t\tconst cursorClass = onRowClick ? 'cursor-pointer' : '';\n\t\t\t\tconst rowClasses = cn(\n\t\t\t\t\tcomputedRowClassName,\n\t\t\t\t\tzebraClass,\n\t\t\t\t\t'transition-colors duration-150',\n\t\t\t\t\t'hover:bg-muted/35 data-[state=selected]:bg-primary/8',\n\t\t\t\t\tcursorClass,\n\t\t\t\t\t'border-b border-border/50 last:border-b-0',\n\t\t\t\t);\n\t\t\t\tconst rowState = isRowSelected ? 'selected' : null;\n\n\t\t\t\treturn (\n\t\t\t\t\t<TableRow\n\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\tdata-state={rowState}\n\t\t\t\t\t\tclassName={rowClasses}\n\t\t\t\t\t\tonClick={handleRowSelection}\n\t\t\t\t\t>\n\t\t\t\t\t\t{rowCells.map((cell, cellIndex) => (\n\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tgetCellClassName(\n\t\t\t\t\t\t\t\t\t\tcell.column.id,\n\t\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t\tcellClassName,\n\t\t\t\t\t\t\t\t\t\tstickyFirstColumn,\n\t\t\t\t\t\t\t\t\t\tcellIndex === 0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t'first:pl-surface last:pr-surface',\n\t\t\t\t\t\t\t\t\tcell.column.columnDef.meta?.align === 'end' && 'text-right',\n\t\t\t\t\t\t\t\t\tcell.column.columnDef.meta?.align === 'center' && 'text-center',\n\t\t\t\t\t\t\t\t\tdense && 'px-surface py-row-y-sm text-xs first:pl-surface last:pr-surface',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{flexRender(\n\t\t\t\t\t\t\t\t\tcell.column.columnDef.cell,\n\t\t\t\t\t\t\t\t\tcell.getContext(),\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableRow>\n\t\t\t\t);\n\t\t\t})}\n\t\t</TableBody>\n\t);\n}\n\nDataTableBody.displayName = 'DataTableBody';\n","/**\n * DataTableHeader — column-group row, primary header row, sort indicators,\n * and (optionally) resize handles. Sortable columns render as a button with\n * an inline up / down / both arrow icon driven by TanStack `column.getIsSorted()`.\n */\nimport { flexRender } from '@tanstack/react-table';\nimport { ArrowDown, ArrowUp, ChevronsUpDown } from 'lucide-react';\nimport React from 'react';\nimport { TableHead, TableHeader, TableRow } from '@/components/ui/table';\nimport { cn } from '@/lib/utils';\nimport { getCellClassName } from './table-helpers';\nimport { type DataTableHeaderProps } from './table.types';\n\nexport function DataTableHeader<TData>(\n\t{\n\t\ttable,\n\t\tenableResizing = false,\n\t\tstickyHeader = false,\n\t\theaderClassName = '',\n\t\tcellClassName = '',\n\t\tstickyFirstColumn = false,\n\t\tcolumnGroups,\n\t\tdense = false,\n\t\theaderTransparent = false,\n\t}: DataTableHeaderProps<TData>) {\n\n\tconst headerGroups = table.getHeaderGroups();\n\tconst stickyCellClassName = stickyHeader\n\t\t? cn(\n\t\t\t'sticky top-0 z-20 backdrop-blur-md shadow-[0_1px_0_0_var(--border)]',\n\t\t\theaderTransparent ? 'bg-background/95' : 'bg-muted/95',\n\t\t)\n\t\t: '';\n\n\tconst getColumnGroup = (columnId: string) => {\n\t\tif (!columnGroups) return null;\n\t\treturn columnGroups.find(group => group.columns.includes(columnId));\n\t};\n\n\tconst renderGroupHeaderRow = () => {\n\t\tif (!columnGroups || columnGroups.length === 0 || headerGroups.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst headers = headerGroups[0].headers;\n\t\tlet currentGroup: string | null = null;\n\t\tlet groupSpan = 0;\n\t\tconst groupCells: React.ReactNode[] = [];\n\n\t\theaders.forEach((header, index) => {\n\t\t\tconst group = getColumnGroup(header.id);\n\t\t\tconst groupName = group?.header || '';\n\n\t\t\tif (groupName !== currentGroup) {\n\t\t\t\tif (currentGroup !== null && groupSpan > 0) {\n\t\t\t\t\tgroupCells.push(\n\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\tkey={`group-${currentGroup}-${groupCells.length}`}\n\t\t\t\t\t\t\tcolSpan={groupSpan}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'border-r border-border/60 bg-muted/35 px-surface py-row-y-sm text-center text-xs font-medium uppercase tracking-wide text-muted-foreground/75 last:border-r-0',\n\t\t\t\t\t\t\t\tstickyCellClassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{currentGroup || ''}\n\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcurrentGroup = groupName;\n\t\t\t\tgroupSpan = 1;\n\t\t\t} else {\n\t\t\t\tgroupSpan++;\n\t\t\t}\n\n\t\t\tif (index === headers.length - 1 && groupSpan > 0) {\n\t\t\t\tgroupCells.push(\n\t\t\t\t\t<TableHead\n\t\t\t\t\t\tkey={`group-${currentGroup}-${groupCells.length}`}\n\t\t\t\t\t\tcolSpan={groupSpan}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'whitespace-nowrap border-r border-border/60 bg-muted/35 px-surface py-row-y-sm text-center text-xs font-medium uppercase tracking-wide text-muted-foreground/75 last:border-r-0',\n\t\t\t\t\t\t\tstickyCellClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{currentGroup || ''}\n\t\t\t\t\t</TableHead>\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\treturn (\n\t\t\t<TableRow className={cn('table-header--component', 'border-b border-border')}>\n\t\t\t\t{groupCells}\n\t\t\t</TableRow>\n\t\t);\n\t};\n\n\treturn (\n\t\t<TableHeader\n\t\t\tclassName={headerClassName}\n\t\t>\n\t\t\t{renderGroupHeaderRow()}\n\t\t\t{headerGroups.map((headerGroup) => (\n\t\t\t\t<TableRow\n\t\t\t\t\tkey={headerGroup.id}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'border-b border-border/70',\n\t\t\t\t\t\theaderTransparent\n\t\t\t\t\t\t\t? 'bg-transparent hover:bg-transparent'\n\t\t\t\t\t\t\t: 'bg-muted/45 hover:bg-muted/45',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{headerGroup.headers.map((header, index) => {\n\t\t\t\t\t\tconst cellClasses = cn(\n\t\t\t\t\t\t\tgetCellClassName(\n\t\t\t\t\t\t\t\theader.id,\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tcellClassName,\n\t\t\t\t\t\t\t\tstickyFirstColumn,\n\t\t\t\t\t\t\t\tindex === 0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t'first:pl-surface last:pr-surface',\n\t\t\t\t\t\t\tdense && 'px-surface py-row-y-sm text-xs first:pl-surface last:pr-surface',\n\t\t\t\t\t\t\t'text-muted-foreground font-medium whitespace-nowrap',\n\t\t\t\t\t\t\theader.column.columnDef.meta?.align === 'end' && 'text-right',\n\t\t\t\t\t\t\theader.column.columnDef.meta?.align === 'center' && 'text-center',\n\t\t\t\t\t\t\tstickyCellClassName,\n\t\t\t\t\t\t\tstickyHeader && stickyFirstColumn && index === 0 && 'z-30',\n\t\t\t\t\t\t\t!stickyHeader && 'bg-transparent',\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst headerStyle = enableResizing\n\t\t\t\t\t\t\t? { position: 'relative' as const }\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst resizeHandler = header.getResizeHandler();\n\t\t\t\t\t\tconst isResizing = header.column.getIsResizing();\n\t\t\t\t\t\tconst columnLabel = (() => {\n\t\t\t\t\t\t\tconst rawHeader = header.column.columnDef.header;\n\t\t\t\t\t\t\tif (typeof rawHeader === 'string') {\n\t\t\t\t\t\t\t\treturn rawHeader;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn typeof header.id === 'string' ? header.id : 'column';\n\t\t\t\t\t\t})();\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\tclassName={cellClasses}\n\t\t\t\t\t\t\t\tstyle={headerStyle}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{header.isPlaceholder ? null : (\n\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\t\tconst canSort = header.column.getCanSort();\n\t\t\t\t\t\t\t\t\t\t\tconst sortDir = header.column.getIsSorted();\n\t\t\t\t\t\t\t\t\t\t\tconst headerNode = flexRender(\n\t\t\t\t\t\t\t\t\t\t\t\theader.column.columnDef.header,\n\t\t\t\t\t\t\t\t\t\t\t\theader.getContext(),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tconst SortIcon =\n\t\t\t\t\t\t\t\t\t\t\t\tsortDir === 'asc'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? ArrowUp\n\t\t\t\t\t\t\t\t\t\t\t\t\t: sortDir === 'desc'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? ArrowDown\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ChevronsUpDown;\n\t\t\t\t\t\t\t\t\t\t\tif (!canSort) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn <div className={cn('flex items-center', header.column.columnDef.meta?.align === 'end' && 'justify-end', header.column.columnDef.meta?.align === 'center' && 'justify-center')}>{headerNode}</div>;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={header.column.getToggleSortingHandler()}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'group -ml-space-sm inline-flex select-none items-center gap-space-sm rounded px-space-sm',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'hover:text-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsortDir && 'text-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={`Sort ${columnLabel}`}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{headerNode}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SortIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'size-icon-sm shrink-0 transition-opacity',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsortDir\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'opacity-100'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'opacity-30 group-hover:opacity-70',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})()}\n\n\t\t\t\t\t\t\t\t\t\t{!!enableResizing && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'absolute top-0 right-0 h-full w-1 cursor-col-resize select-none touch-none bg-foreground bg-opacity-50 opacity-0 hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none',\n\t\t\t\t\t\t\t\t\t\t\t\t\tisResizing &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'!bg-primary-600 bg-opacity-100',\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={`Resize ${columnLabel}`}\n\t\t\t\t\t\t\t\t\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\t\t\t\t\t\t\t\t\tonMouseDown={resizeHandler}\n\t\t\t\t\t\t\t\t\t\t\t\tonTouchStart={resizeHandler}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</TableRow>\n\t\t\t))}\n\t\t</TableHeader>\n\t);\n}\n\nDataTableHeader.displayName = 'DataTableHeader';\n","import { Settings2 } from 'lucide-react';\nimport { useState } from 'react';\nimport { Button } from '@/components/base/buttons';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { cn } from '@/lib/utils';\n\nimport { defaultDataTableStrings } from './table.strings';\nimport { type ColumnVisibilityToggleProps } from './table.types';\n\nexport function ColumnVisibilityToggle<TData>({\n table,\n className,\n align = 'end',\n strings = defaultDataTableStrings,\n}: ColumnVisibilityToggleProps<TData>) {\n const [open, setOpen] = useState(false);\n const columns = table.getAllColumns()\n .filter((column) => column.getCanHide());\n\n if (columns.length === 0) return null;\n\n return (\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger\n render={(triggerProps) => (\n <Button\n {...triggerProps}\n type=\"button\"\n aria-label={strings.columnVisibility.triggerLabel}\n variant=\"secondary\"\n buttonStyle=\"outline\"\n size=\"small\"\n className={cn(\n 'column-visibility-toggle--component',\n 'flex items-center gap-space-sm',\n (triggerProps as { className?: string }).className,\n className,\n )}\n >\n <Settings2 className=\"size-icon-sm\" aria-hidden=\"true\" />\n <span className=\"hidden sm:inline\">{strings.columnVisibility.triggerLabel}</span>\n </Button>\n )}\n />\n <DropdownMenuContent align={align} className=\"w-56\">\n <DropdownMenuGroup>\n <DropdownMenuLabel>{strings.columnVisibility.title}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {columns.map((column) => {\n const header = column.columnDef.header;\n const columnName = strings.columnVisibility.formatLabel(\n column.id,\n typeof header === 'string' ? header : undefined,\n );\n\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(checked) => column.toggleVisibility(!!checked)}\n >\n {columnName}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nColumnVisibilityToggle.displayName = 'ColumnVisibilityToggle';\n","import { ChevronLeft, ChevronRight, Maximize2, Minimize2 } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { cn } from '@/lib/utils';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type DataTableToolbarProps } from './table.types';\nimport { ColumnVisibilityToggle } from './column-visibility-toggle';\n\nconst SCROLL_AMOUNT = 300;\n\nconst btnBase = 'inline-flex size-control-sm items-center justify-center rounded-none text-muted-foreground/70 transition-colors duration-150 hover:bg-muted hover:text-foreground disabled:pointer-events-none disabled:opacity-30';\n\ninterface ToolbarIconButtonProps {\n label: string;\n onClick: () => void;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nfunction ToolbarIconButton({ label, onClick, disabled, className, children }: ToolbarIconButtonProps) {\n return (\n <button\n type=\"button\"\n aria-label={label}\n className={cn('table-toolbar--component', btnBase, className)}\n onClick={onClick}\n disabled={disabled}\n >\n {children}\n </button>\n );\n}\n\n/**\n * Finds the actual horizontally-scrollable element inside the table area.\n * The Table primitive renders: <div data-slot=\"table-container\" class=\"overflow-x-auto\">\n */\nfunction getScrollContainer(tableArea: HTMLDivElement | null): HTMLDivElement | null {\n if (!tableArea) return null;\n return tableArea.querySelector<HTMLDivElement>('[data-slot=\"table-container\"]');\n}\n\nexport function DataTableToolbar<TData>({\n table,\n tableAreaRef,\n dense,\n onDenseChange,\n enableColumnVisibility = false,\n strings = defaultDataTableStrings,\n}: DataTableToolbarProps<TData>) {\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n const rafRef = useRef(0);\n const cleanupRef = useRef<(() => void) | null>(null);\n\n // --- Scroll overflow detection ---\n const checkOverflow = useCallback(() => {\n const el = getScrollContainer(tableAreaRef.current);\n if (!el) {\n setCanScrollLeft(false);\n setCanScrollRight(false);\n return;\n }\n const { scrollLeft, scrollWidth, clientWidth } = el;\n setCanScrollLeft(scrollLeft > 1);\n setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);\n }, [tableAreaRef]);\n\n useEffect(() => {\n // Defer slightly to ensure the Table primitive has rendered its container\n const timerId = window.setTimeout(() => {\n const el = getScrollContainer(tableAreaRef.current);\n if (!el) return;\n\n // Initial check\n checkOverflow();\n\n const handleScroll = () => {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = requestAnimationFrame(checkOverflow);\n };\n\n el.addEventListener('scroll', handleScroll, { passive: true });\n\n // ResizeObserver to detect when table width changes\n const ro = new ResizeObserver(checkOverflow);\n ro.observe(el);\n if (el.firstElementChild) {\n ro.observe(el.firstElementChild);\n }\n\n // Store cleanup references\n cleanupRef.current = () => {\n el.removeEventListener('scroll', handleScroll);\n cancelAnimationFrame(rafRef.current);\n ro.disconnect();\n };\n }, 0);\n\n return () => {\n window.clearTimeout(timerId);\n cleanupRef.current?.();\n };\n // Re-run when dense mode changes (layout shift can affect overflow)\n\n }, [tableAreaRef, checkOverflow, dense]);\n\n // --- Scroll handlers ---\n const handleScrollLeft = useCallback(() => {\n getScrollContainer(tableAreaRef.current)?.scrollBy({ left: -SCROLL_AMOUNT, behavior: 'smooth' });\n }, [tableAreaRef]);\n\n const handleScrollRight = useCallback(() => {\n getScrollContainer(tableAreaRef.current)?.scrollBy({ left: SCROLL_AMOUNT, behavior: 'smooth' });\n }, [tableAreaRef]);\n\n // --- Dense toggle ---\n const handleDenseToggle = useCallback(() => {\n onDenseChange(!dense);\n }, [dense, onDenseChange]);\n\n // --- Column visibility ---\n const hideableColumns = enableColumnVisibility\n ? table.getAllColumns().filter((column) => column.getCanHide())\n : [];\n\n const hasScrollArrows = canScrollLeft || canScrollRight;\n const hasColumns = hideableColumns.length > 0;\n const denseToggleLabel = dense\n ? strings.toolbar.comfortable\n : strings.toolbar.dense;\n\n return (\n <div className=\"flex items-center rounded-md border border-border bg-card\">\n {/* Scroll arrows - only rendered when overflow exists */}\n {!!hasScrollArrows && (\n <>\n <ToolbarIconButton\n label={strings.toolbar.scrollLeft}\n onClick={handleScrollLeft}\n disabled={!canScrollLeft}\n className=\"rounded-l-[calc(theme(borderRadius.md)-1px)]\"\n >\n <ChevronLeft className=\"size-icon-sm\" />\n </ToolbarIconButton>\n <ToolbarIconButton\n label={strings.toolbar.scrollRight}\n onClick={handleScrollRight}\n disabled={!canScrollRight}\n >\n <ChevronRight className=\"size-icon-sm\" />\n </ToolbarIconButton>\n <div className=\"h-4 w-px bg-border\" />\n </>\n )}\n\n {/* Column visibility dropdown */}\n {!!hasColumns && (\n <>\n <ColumnVisibilityToggle\n table={table}\n strings={strings}\n className={cn(\n 'h-control-sm rounded-none border-0 px-control-sm shadow-none',\n !hasScrollArrows && 'rounded-l-[calc(theme(borderRadius.md)-1px)]',\n )}\n />\n <div className=\"h-4 w-px bg-border\" />\n </>\n )}\n\n {/* Dense/compact toggle */}\n <ToolbarIconButton\n label={denseToggleLabel}\n onClick={handleDenseToggle}\n className={cn(\n 'rounded-r-[calc(theme(borderRadius.md)-1px)]',\n !hasScrollArrows && !hasColumns && 'rounded-l-[calc(theme(borderRadius.md)-1px)]',\n )}\n >\n {dense\n ? <Maximize2 className=\"size-icon-sm\" />\n : <Minimize2 className=\"size-icon-sm\" />\n }\n </ToolbarIconButton>\n </div>\n );\n}\n\nDataTableToolbar.displayName = 'DataTableToolbar';\n","/**\n * DataTable — TanStack-powered data table with sorting, row selection, column\n * visibility, server-side pagination, dense mode, sticky header / first column,\n * and pluggable row actions (menu / inline / responsive).\n *\n * Strings are overridable through the `strings` prop and a default set in\n * `./table.strings`. Column visibility and dense mode persist to localStorage\n * when a `storageKey` is provided.\n *\n * Use the cell renderers exported from `./partials/cell-renderers`\n * (`StatusCell`, `DateCell`, `CurrencyCell`, `AvatarCell`) for visually\n * consistent cells across pages.\n */\nimport {\n\tgetCoreRowModel,\n\tuseReactTable,\n\ttype SortingState,\n\ttype VisibilityState,\n\ttype Updater,\n\ttype ColumnDef,\n\ttype RowSelectionState,\n} from '@tanstack/react-table';\nimport {\n\tcreateContext,\n\tuseContext,\n\tuseState,\n\tuseEffect,\n\tuseMemo,\n\tuseCallback,\n\tuseRef,\n\ttype CSSProperties,\n} from 'react';\nimport { Table } from '@/components/ui/table';\nimport { Button } from '@/components/base/buttons';\nimport { Separator } from '@/components/base/display/separator';\nimport { Text } from '@/components/typography';\nimport { useTableConfig } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\n/**\n * Context exposing the current `<DataTable size>` to descendant cell renderers\n * so consumer-built cells can stay typographically aligned with the table\n * (instead of hardcoding `<Text>` and breaking the unification the\n * `size` prop is supposed to give).\n *\n * Use it from custom cells:\n * const textSize = useDataTableSize();\n * return <Text className=\"data-table--component\" size={textSize}>{value}</Text>;\n *\n * The built-in renderers in `partials/cell-renderers` consume this hook.\n */\nconst DataTableSizeContext = createContext<'xs' | 'sm'>('sm');\n\nexport function useDataTableSize(): 'xs' | 'sm' {\n\treturn useContext(DataTableSizeContext);\n}\nimport { Pagination } from './pagination';\nimport { DataTableActions } from './table-actions';\nimport { DataTableBody } from './table-body';\nimport { DataTableHeader } from './table-header';\nimport { DataTableToolbar } from './table-toolbar';\nimport { addSelectionColumn, handleSortingChange, handleColumnVisibilityChange } from './table-helpers';\nimport { mergeDataTableStrings } from './table.strings';\nimport {\n\ttype DataTableProps,\n\ttype DataTableSelectionToolbarContext,\n} from './table.types';\n\n// Class applied to the `<table>` element.\n//\n// Body cells get an explicit `[&_td]:text-{size}` so deeply nested\n// elements that use `<Text size=\"inherit\">` (or any plain `<span>`)\n// inherit the right font-size from the cell rather than relying on\n// the table-level inheritance chain (which breaks the moment any\n// descendant has its own text-size class).\n//\n// Header cells stay at `text-xxs` regardless of body density — a quiet,\n// normal-case muted header over variable body density. A consumer who\n// wants matched header sizing can override via `headerClassName`.\nconst sizeClassByDataTableSize: Record<NonNullable<DataTableProps<object, unknown>['size']>, string> = {\n\tsmall: '[&_th]:h-auto [&_th]:px-surface [&_th]:py-row-y [&_th]:text-xs [&_td]:px-surface [&_td]:py-row-y [&_td]:text-xs',\n\tdefault: '[&_th]:h-auto [&_th]:px-surface [&_th]:py-row-y [&_th]:text-xs [&_td]:px-surface [&_td]:py-row-y-lg [&_td]:text-sm',\n};\n\nconst textSizeByDataTableSize: Record<NonNullable<DataTableProps<object, unknown>['size']>, 'xs' | 'sm'> = {\n\tsmall: 'xs',\n\tdefault: 'sm',\n};\n\nfunction normalizeDataTableSize(size: NonNullable<DataTableProps<object, unknown>['size']> | string | undefined) {\n\tif (size === 'small' || size === 'default') return size;\n\tif (size === 'xs') return 'small';\n\tif (size === 'sm' || size === 'base') return 'default';\n\treturn 'default';\n}\n\nconst toCssSize = (value: number | string | undefined): string | undefined => {\n\tif (value === undefined) return undefined;\n\treturn typeof value === 'number' ? `${value}px` : value;\n};\n\nexport function DataTable<TData extends object, TValue = unknown>({\n\tsize,\n\tsurface = 'card',\n\theaderTransparent = true,\n\tcolumns,\n\tdata,\n\tcolumnGroups,\n\trowActions,\n\trowActionsMenuLabel,\n\trowActionsDisplayMode,\n\trowActionsBreakpoint,\n\tenableSorting = false,\n\tmanualSorting = false,\n\tenableColumnVisibility = false,\n\tenableRowSelection = false,\n\tenableMultiRowSelection = true,\n\tenableSubRowSelection = false,\n\tpagination,\n\tpageQueryKey,\n\tonPageChange,\n\tonSort,\n\tonRowClick,\n\tonRowSelectionChange,\n\tstickyHeader = false,\n\tstickyToolbar = false,\n\tstickyFirstColumn = false,\n\tmaxBodyHeight,\n\tfillAvailableHeight = false,\n\temptyStateMessage,\n\temptyStateAction,\n\tclassName = '',\n\trowClassName = '',\n\tcellClassName = '',\n\theaderClassName = '',\n\twrapperClassName = '',\n\tinnerClassName = 'overflow-x-auto',\n\ttableContainerClassName = '',\n\tgetRowId,\n\trowSelection: controlledRowSelection,\n\tinitialState,\n\tonColumnVisibilityChange,\n\tstrings: stringsOverride,\n\ttopbarContent,\n\tfooterContent,\n\tselectionToolbar,\n\tbulkActions,\n\tselectionToolbarClassName,\n\tstorageKey,\n}: DataTableProps<TData, TValue>) {\n\tconst { defaultSize } = useTableConfig();\n\tconst resolvedSize = normalizeDataTableSize(size ?? defaultSize);\n\n\tconst strings = useMemo(\n\t\t() => mergeDataTableStrings(stringsOverride),\n\t\t[stringsOverride],\n\t);\n\n\tconst tableRowClasses = cn('bg-card', rowClassName);\n\tconst resolvedEmptyStateMessage = emptyStateMessage ?? strings.emptyState.message;\n\tconst resolvedPageQueryKey = pageQueryKey ?? 'page';\n\tconst resolvedMaxBodyHeight = toCssSize(maxBodyHeight);\n\n\t\t// --- Detect and resolve tuple pattern for columns ---\n\t\tconst resolvedColumns = (() => {\n\t\t\t// Tuple pattern detected: [columns, deps]\n\t\t\tif (Array.isArray(columns) && columns.length === 2 && Array.isArray(columns[1])) {\n\t\t\t\treturn columns[0] as ColumnDef<TData, TValue>[];\n\t\t\t}\n\n\t\t\t// Regular pattern: just columns array\n\t\t\treturn columns as ColumnDef<TData, TValue>[];\n\t\t})();\n\n\t// --- Format storage key internally ---\n\tconst formattedStorageKey = useMemo(() => {\n\t\treturn storageKey ? `dt.${storageKey}.columns` : null;\n\t}, [storageKey]);\n\n\t// --- Dense mode storage key ---\n\tconst denseStorageKey = useMemo(() => {\n\t\treturn storageKey ? `dt.${storageKey}.dense` : null;\n\t}, [storageKey]);\n\n\t// --- Load initial column visibility from localStorage if persistence enabled ---\n\tconst initialColumnVisibility = useMemo<VisibilityState>(() => {\n\t\t// If persistence is disabled or we're in SSR, use initialState or empty object\n\t\tif (!formattedStorageKey || typeof window === 'undefined') {\n\t\t\treturn initialState?.columnVisibility || {};\n\t\t}\n\n\t\ttry {\n\t\t\tconst stored = window.localStorage.getItem(formattedStorageKey);\n\t\t\tconst parsed = stored ? (JSON.parse(stored) as VisibilityState) : {};\n\t\t\t// Merge with initialState if provided\n\t\t\treturn { ...parsed, ...(initialState?.columnVisibility || {}) };\n\t\t} catch {\n\t\t\t// If parsing fails, fall back to initialState\n\t\t\treturn initialState?.columnVisibility || {};\n\t\t}\n\t}, [formattedStorageKey, initialState?.columnVisibility]);\n\n\t// --- Load initial dense mode from localStorage ---\n\tconst initialDense = useMemo(() => {\n\t\tif (!denseStorageKey || typeof window === 'undefined') return false;\n\t\ttry {\n\t\t\treturn window.localStorage.getItem(denseStorageKey) === '1';\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, [denseStorageKey]);\n\n\t// --- State for sorting, visibility, and dense mode ---\n\tconst [sorting, setSorting] = useState<SortingState>(initialState?.sorting || []);\n\tconst [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n\t\tinitialColumnVisibility,\n\t);\n\tconst [internalRowSelection, setInternalRowSelection] = useState<RowSelectionState>(\n\t\tinitialState?.rowSelection || {},\n\t);\n\tconst [dense, setDense] = useState(initialDense);\n\tconst rowSelection = controlledRowSelection ?? internalRowSelection;\n\n\t// --- Refs ---\n\tconst tableAreaRef = useRef<HTMLDivElement>(null);\n\n\t// --- Callbacks ---\n\tconst handleSortingChangeCallback = useCallback(\n\t\t(updater: Updater<SortingState>) => {\n\t\t\thandleSortingChange(updater, setSorting, onSort);\n\t\t},\n\t\t[onSort],\n\t);\n\n\tconst handleVisibilityChangeCallback = useCallback(\n\t\t(updater: Updater<VisibilityState>) => {\n\t\t\thandleColumnVisibilityChange(\n\t\t\t\tupdater,\n\t\t\t\tsetColumnVisibility,\n\t\t\t\t(newState) => {\n\t\t\t\t\t// Persist to localStorage if enabled\n\t\t\t\t\tif (formattedStorageKey && typeof window !== 'undefined') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twindow.localStorage.setItem(\n\t\t\t\t\t\t\t\tformattedStorageKey,\n\t\t\t\t\t\t\t\tJSON.stringify(newState),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Silent fail - quota exceeded or other localStorage errors\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Call user-provided handler\n\t\t\t\t\tif (onColumnVisibilityChange) {\n\t\t\t\t\t\tonColumnVisibilityChange(newState);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\t[formattedStorageKey, onColumnVisibilityChange],\n\t);\n\n\tconst handleRowSelectionChangeCallback = useCallback(\n\t\t(updater: Updater<RowSelectionState>) => {\n\t\t\tconst nextRowSelection =\n\t\t\t\ttypeof updater === 'function' ? updater(rowSelection) : updater;\n\n\t\t\tif (controlledRowSelection === undefined) {\n\t\t\t\tsetInternalRowSelection(nextRowSelection);\n\t\t\t}\n\n\t\t\tonRowSelectionChange?.(nextRowSelection);\n\t\t},\n\t\t[controlledRowSelection, onRowSelectionChange, rowSelection],\n\t);\n\n\tconst handleDenseChange = useCallback(\n\t\t(value: boolean) => {\n\t\t\tsetDense(value);\n\t\t\tif (denseStorageKey && typeof window !== 'undefined') {\n\t\t\t\ttry {\n\t\t\t\t\twindow.localStorage.setItem(denseStorageKey, value ? '1' : '0');\n\t\t\t\t} catch {\n\t\t\t\t\t// Silent fail\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[denseStorageKey],\n\t);\n\n\tconst getRowActionsMenuLabel = useCallback(\n\t\t(row: TData) => {\n\t\t\tif (typeof rowActionsMenuLabel === 'function') {\n\t\t\t\treturn rowActionsMenuLabel(row);\n\t\t\t}\n\n\t\t\treturn rowActionsMenuLabel ?? strings.actions.triggerLabel;\n\t\t},\n\t\t[rowActionsMenuLabel, strings.actions.triggerLabel],\n\t);\n\n\tconst columnsWithActions = useMemo<ColumnDef<TData, TValue>[]>(() => {\n\t\tconst baseColumns = enableRowSelection\n\t\t\t? addSelectionColumn<TData, TValue>(resolvedColumns, strings)\n\t\t\t: resolvedColumns;\n\n\t\t// if no actions, leave cols untouched\n\t\tif (!rowActions) {\n\t\t\treturn baseColumns;\n\t\t}\n\n\t\t// otherwise append a fixed Actions column:\n\t\tconst actionCol: ColumnDef<TData, TValue> = {\n\t\t\tid: 'actions',\n\t\t\theader: strings.actions.triggerLabel,\n\t\t\t// NOTE: just hand `rowActions` array, not a call\n\t\t\tcell: ({ row }: { row: { original: TData } }) => (\n\t\t\t\t<DataTableActions\n\t\t\t\t\trow={row.original}\n\t\t\t\t\tactions={rowActions}\n\t\t\t\t\tmenuLabel={getRowActionsMenuLabel(row.original)}\n\t\t\t\t\tdisplayMode={rowActionsDisplayMode}\n\t\t\t\t\tresponsiveBreakpoint={rowActionsBreakpoint}\n\t\t\t\t\tstrings={strings}\n\t\t\t\t/>\n\t\t\t),\n\t\t\tenableSorting: false,\n\t\t\tenableHiding: false,\n\t\t\tsize: 40,\n\t\t};\n\n\t\treturn [...baseColumns, actionCol];\n\t}, [\n\t\tresolvedColumns,\n\t\tenableRowSelection,\n\t\trowActions,\n\t\tgetRowActionsMenuLabel,\n\t\trowActionsBreakpoint,\n\t\trowActionsDisplayMode,\n\t\tstrings,\n\t]);\n\n\t// --- Configure table ---\n\tconst table = useReactTable({\n\t\tdata,\n\t\tcolumns: columnsWithActions,\n\t\tstate: { sorting, columnVisibility, rowSelection },\n\t\tenableSorting,\n\t\tmanualSorting,\n\t\tenableRowSelection,\n\t\tenableMultiRowSelection,\n\t\tenableSubRowSelection,\n\t\tonSortingChange:\n\t\t\tenableSorting && manualSorting ? handleSortingChangeCallback : undefined,\n\t\tonRowSelectionChange:\n\t\t\tenableRowSelection ? handleRowSelectionChangeCallback : undefined,\n\t\tonColumnVisibilityChange: handleVisibilityChangeCallback,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetRowId,\n\t});\n\n\t// --- Determine server pagination ---\n\tconst shouldShow = pagination && pagination.last_page > 1;\n\tconst selectedRows = table.getSelectedRowModel().rows.map((row) => row.original);\n\tconst selectedRowCount = selectedRows.length;\n\tconst clearSelection = useCallback(() => {\n\t\ttable.resetRowSelection();\n\t}, [table]);\n\tconst selectionToolbarContext: DataTableSelectionToolbarContext<TData> = {\n\t\ttable,\n\t\tselectedRows,\n\t\tselectedRowCount,\n\t\ttotalRowCount: data.length,\n\t\trowSelection,\n\t\tclearSelection,\n\t};\n\tconst bulkActionNode =\n\t\ttypeof bulkActions === 'function'\n\t\t\t? bulkActions(selectionToolbarContext)\n\t\t\t: bulkActions;\n\tconst defaultSelectionToolbar = selectedRowCount > 0 ? (\n\t\t<div\n\t\t\tdata-component=\"data-table-selection-toolbar\"\n\t\t\tdata-slot=\"data-table-selection-toolbar\"\n\t\t\tclassName={cn(\n\t\t\t\t\t'data-table-selection-toolbar--component flex min-w-0 flex-col gap-space-md border-b border-border/70 bg-muted/35 px-surface py-row-y sm:flex-row sm:items-center sm:justify-between',\n\t\t\t\tstickyToolbar && 'sticky top-0 z-20 bg-card/95 backdrop-blur',\n\t\t\t\tselectionToolbarClassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Text className=\"data-table-selection-toolbar--summary min-w-0\">\n\t\t\t\t{strings.selection.summary(selectedRowCount, data.length)}\n\t\t\t</Text>\n\t\t\t<div\n\t\t\t\tdata-slot=\"data-table-selection-toolbar-actions\"\n\t\t\t\t\tclassName=\"data-table-selection-toolbar--actions flex shrink-0 flex-wrap items-center gap-space-md\"\n\t\t\t>\n\t\t\t\t{bulkActionNode}\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tonClick={clearSelection}\n\t\t\t\t>\n\t\t\t\t\t{strings.selection.clear}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t) : null;\n\tconst selectionToolbarNode = (() => {\n\t\tif (!enableRowSelection || selectedRowCount === 0) return null;\n\t\tif (selectionToolbar === null || selectionToolbar === false) return null;\n\t\tif (typeof selectionToolbar === 'function') {\n\t\t\treturn selectionToolbar(selectionToolbarContext);\n\t\t}\n\t\treturn selectionToolbar ?? defaultSelectionToolbar;\n\t})();\n\tconst tableAreaStyle = useMemo<CSSProperties | undefined>(() => {\n\t\tif (!resolvedMaxBodyHeight) return undefined;\n\t\treturn { '--data-table-body-max-height': resolvedMaxBodyHeight } as CSSProperties;\n\t}, [resolvedMaxBodyHeight]);\n\tconst shouldUseScrollableTableContainer =\n\t\tdense || fillAvailableHeight || resolvedMaxBodyHeight !== undefined;\n\n\tuseEffect(() => {\n\t\tconst scrollRegion = tableAreaRef.current?.querySelector<HTMLElement>('[data-slot=\"table-container\"]');\n\t\tif (!scrollRegion) return;\n\n\t\tscrollRegion.tabIndex = 0;\n\t\tscrollRegion.setAttribute('aria-label', strings.accessibility.scrollRegion);\n\t}, [strings.accessibility.scrollRegion]);\n\n\tconst Provider = DataTableSizeContext.Provider;\n\tconst resolvedTextSize = textSizeByDataTableSize[resolvedSize];\n\n\treturn (\n\t\t<Provider value={resolvedTextSize}>\n\t\t<div className={cn(\n\t\t\tdense\n\t\t\t\t? 'fixed inset-0 z-50 bg-background flex flex-col overflow-hidden p-6'\n\t\t\t\t: cn(\n\t\t\t\t\t'w-full min-w-0 max-w-full',\n\t\t\t\t\tfillAvailableHeight && 'flex h-full min-h-0 flex-col',\n\t\t\t\t\tsurface === 'card' &&\n\t\t\t\t\t\t'overflow-hidden rounded-lg border border-border bg-card shadow-[0_1px_3px_0_color-mix(in_oklch,var(--foreground)_4%,transparent)]',\n\t\t\t\t\tsurface === 'glass' &&\n\t\t\t\t\t\t'rounded-md overflow-hidden border border-border/60',\n\t\t\t\t\t// `flat` renders no chrome — consumer wraps.\n\t\t\t\t\twrapperClassName,\n\t\t\t\t),\n\t\t)}>\n\t\t\t{!!(topbarContent || enableColumnVisibility) && (\n\t\t\t\t<div className={cn('relative', stickyToolbar && 'sticky top-0 z-20 bg-card/95 backdrop-blur')}>\n\n <div className={cn(\n\t 'data-table-topbar flex items-end justify-between gap-space-lg px-surface py-row-y',\n dense ? 'mb-3 shrink-0' : 'mb-0',\n )}>\n <div className=\"data-table-topbar-left flex-1\">{topbarContent}</div>\n <div className=\"data-table-topbar-right flex items-center justify-end\">\n <DataTableToolbar\n table={table}\n tableAreaRef={tableAreaRef}\n dense={dense}\n onDenseChange={handleDenseChange}\n enableColumnVisibility={enableColumnVisibility}\n strings={strings}\n />\n </div>\n\n </div>\n <Separator />\n </div>\n\t\t\t)}\n\n\t\t\t{selectionToolbarNode}\n\n\t\t\t<div\n\t\t\t\tref={tableAreaRef}\n\t\t\t\tstyle={tableAreaStyle}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'min-h-0',\n\t\t\t\t\tshouldUseScrollableTableContainer ? 'overflow-hidden' : innerClassName,\n\t\t\t\t\t(dense || fillAvailableHeight) && 'flex-1',\n\t\t\t\t)}\n\t\t\t>\n\n\t\t\t\t<Table\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'relative',\n\t\t\t\t\t\tsizeClassByDataTableSize[resolvedSize],\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tcontainerClassName={cn(\n\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n\t\t\t\t\t\tshouldUseScrollableTableContainer && 'overflow-auto',\n\t\t\t\t\t\tresolvedMaxBodyHeight !== undefined && 'max-h-(--data-table-body-max-height)',\n\t\t\t\t\t\t(dense || fillAvailableHeight) && 'h-full min-h-0',\n\t\t\t\t\t\ttableContainerClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<DataTableHeader\n\t\t\t\t\t\ttable={table}\n\t\t\t\t\t\tstickyHeader={stickyHeader}\n\t\t\t\t\t\theaderClassName={headerClassName}\n\t\t\t\t\t\tcellClassName={cellClassName}\n\t\t\t\t\t\tstickyFirstColumn={stickyFirstColumn}\n\t\t\t\t\t\tcolumnGroups={columnGroups}\n\t\t\t\t\t\tdense={dense}\n\t\t\t\t\t\theaderTransparent={headerTransparent}\n\t\t\t\t\t/>\n\t\t\t\t\t<DataTableBody\n\t\t\t\t\t\ttable={table}\n\t\t\t\t\t\tonRowClick={onRowClick}\n\t\t\t\t\t\temptyStateMessage={resolvedEmptyStateMessage}\n\t\t\t\t\t\temptyStateAction={emptyStateAction}\n\t\t\t\t\t\tcellClassName={cellClassName}\n\t\t\t\t\t\trowClassName={tableRowClasses}\n\t\t\t\t\t\tstickyFirstColumn={stickyFirstColumn}\n\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\tdense={dense}\n\t\t\t\t\t/>\n\t\t\t\t</Table>\n\t\t\t</div>\n\t\t\t{!!shouldShow && (\n\t\t\t\t<>\n <Separator />\n <Pagination\n pagination={pagination}\n onPageChange={onPageChange}\n pageQueryKey={resolvedPageQueryKey}\n labels={strings.pagination}\n />\n </>\n\t\t\t)}\n\t\t\t{!!footerContent && (\n\t\t\t\t<div\n\t\t\t\t\tdata-slot=\"data-table-footer\"\n\t\t\t\t\t\tclassName=\"data-table--footer border-t border-border/70 px-surface py-row-y\"\n\t\t\t\t>\n\t\t\t\t\t{footerContent}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t\t</Provider>\n\t);\n}\n\nDataTable.displayName = 'DataTable';\n","import { Button } from '@/components/base/buttons';\nimport { Input } from '@/components/base/forms/fields';\nimport {\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuLabel,\n\tDropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type DataTableFilterBarProps } from './table.types';\n\nimport { cn } from '@/lib/utils';\nexport function DataTableFilterBar<TData>({\n\t\t\t\t\t\t\t\t\t\t\t table,\n\t\t\t\t\t\t\t\t\t\t\t filterColumn,\n\t\t\t\t\t\t\t\t\t\t\t filterPlaceholder,\n\t\t\t\t\t\t\t\t\t\t\t enableColumnVisibility = false,\n\t\t\t\t\t\t\t\t\t\t\t customContent,\n\t\t\t\t\t\t\t\t\t\t strings = defaultDataTableStrings,\n\t\t\t\t\t\t\t\t\t }: DataTableFilterBarProps<TData>) {\n\tif (!filterColumn && !enableColumnVisibility && !customContent) {\n\t\treturn null;\n\t}\n\n\tconst searchPlaceholder = filterPlaceholder ?? strings.filter.searchPlaceholder;\n\n\treturn (\n\t\t<div className={cn('filter-bar--component', 'flex items-center justify-between p-4')}>\n\t\t\t<div className=\"flex flex-1 items-center space-x-2\">\n\t\t\t\t{/* Filter input */}\n\t\t\t\t{!!filterColumn && (\n\t <Input\n\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\tvalue={(table.getColumn(filterColumn)?.getFilterValue() as string) ?? ''}\n\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\tconst value = event.target.value;\n\t\t\t\t\t\t\ttable.getColumn(filterColumn)?.setFilterValue(value);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName=\"max-w-sm\"\n\t\t\t\t\t/>\n\t )}\n\n\t\t\t\t{/* Custom content */}\n\t\t\t\t{customContent}\n\t\t\t</div>\n\n\t\t\t{/* Column visibility toggle */}\n\t\t\t\t{!!enableColumnVisibility && (\n\t\t\t\t\t<DropdownMenu>\n\t\t\t\t\t\t<DropdownMenuTrigger\n\t\t\t\t\t\t\trender={(triggerProps) => (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\tclassName=\"ml-auto\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{strings.columnVisibility.triggerLabel}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<DropdownMenuContent align=\"end\">\n\t\t\t\t\t\t\t<DropdownMenuGroup>\n\t\t\t\t\t\t\t\t<DropdownMenuLabel>{strings.columnVisibility.title}</DropdownMenuLabel>\n\t\t\t\t\t\t\t\t{table\n\t\t\t\t\t\t\t\t\t.getAllColumns()\n\t\t\t\t\t\t\t\t\t.filter((column) => column.getCanHide())\n\t\t\t\t\t\t\t\t\t.map((column) => {\n\t\t\t\t\t\t\t\t\t\tconst header = column.columnDef.header;\n\t\t\t\t\t\t\t\t\t\tconst columnName = strings.columnVisibility.formatLabel(\n\t\t\t\t\t\t\t\t\t\t\tcolumn.id,\n\t\t\t\t\t\t\t\t\t\t\ttypeof header === 'string' ? header : undefined,\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\t\t\t\t\t\t\tkey={column.id}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"capitalize\"\n\t\t\t\t\t\t\t\t\t\t\t\tchecked={column.getIsVisible()}\n\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(checked) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolumn.toggleVisibility(!!checked)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{columnName}\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</DropdownMenuGroup>\n\t\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t\t</DropdownMenu>\n\t\t\t\t)}\n\t\t</div>\n\t);\n}\n\nDataTableFilterBar.displayName = 'DataTableFilterBar';\n","import { Button } from '@/components/base/buttons';\nimport Text from '@/components/typography/text';\nimport { defaultDataTableStrings } from './table.strings';\nimport { type DataTablePaginationProps } from './table.types';\n\nimport { cn } from '@/lib/utils';\nexport function DataTablePagination({ table, selectedRowCount, totalRowCount, strings = defaultDataTableStrings }: DataTablePaginationProps) {\n // Use provided counts or get from table\n const selected = selectedRowCount ?? table.getFilteredSelectedRowModel().rows.length;\n const total = totalRowCount ?? table.getFilteredRowModel().rows.length;\n const summary = strings.selection.summary(selected, total);\n\n return (\n <div className={cn('table-pagination--component', 'flex items-center justify-end space-x-2 px-4 py-4')}>\n <div className=\"flex-1\">\n <Text type=\"secondary\">\n {summary}\n </Text>\n </div>\n <Button variant=\"secondary\" buttonStyle=\"outline\" onClick={() => table.previousPage()} disabled={!table.getCanPreviousPage()}>\n {strings.pagination.previous}\n </Button>\n <Button variant=\"secondary\" buttonStyle=\"outline\" onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>\n {strings.pagination.next}\n </Button>\n </div>\n );\n}\n\nDataTablePagination.displayName = 'DataTablePagination';\n","import type { ReactNode } from 'react';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\ninterface CellValueProps {\n /** The value to display. When falsy, renders fallback with muted styling. */\n value?: string | number | null | undefined;\n /** Text shown when value is missing. Defaults to '--'. */\n fallback?: string;\n /** Force missing state regardless of value truthiness. */\n missing?: boolean;\n /** Additional class names (e.g. 'tabular-nums', 'font-mono'). */\n className?: string;\n /** Children override — when provided, renders children directly with missing styling applied. */\n children?: ReactNode;\n}\n\n/**\n * Table cell value with automatic missing-value treatment.\n *\n * When the value is falsy (or `missing` is explicitly true), renders\n * the fallback text at reduced opacity. Otherwise renders the value\n * with inherited table cell styling.\n *\n * @example\n * // Auto-detect missing\n * <CellValue value={phone} fallback={t('shared.tables.ui.empty')} />\n *\n * // Explicit missing flag\n * <CellValue missing={!defaultBusiness} fallback={t('vendors.tables.ui.no_default_business')} />\n *\n * // With formatting class\n * <CellValue value={date} className=\"tabular-nums\" />\n *\n * // Custom children with missing styling\n * <CellValue missing={!phone}>\n * {phone || 'No items to display'}\n * </CellValue>\n */\nexport function CellValue({ value, fallback = '--', missing, className, children }: CellValueProps) {\n const isMissing = missing ?? (value === null || value === undefined || value === '');\n\n if (children !== undefined) {\n return (\n <Text\n tag=\"span\"\n size=\"inherit\"\n type={isMissing ? 'secondary' : 'main'}\n className={cn(isMissing && 'opacity-60', className)}\n >\n {children}\n </Text>\n );\n }\n\n if (isMissing) {\n return (\n <Text tag=\"span\" size=\"inherit\" type=\"secondary\" className={cn('opacity-60', className)}>\n {fallback}\n </Text>\n );\n }\n\n return (\n <Text tag=\"span\" size=\"inherit\" className={className}>\n {String(value)}\n </Text>\n );\n}\n\nCellValue.displayName = 'CellValue';\n","import type { AnchorHTMLAttributes } from 'react';\n\ntype TableLinkProps = AnchorHTMLAttributes<HTMLAnchorElement>;\n\nexport const TableLink = (props: TableLinkProps) => {\n\treturn (\n\t\t<a\n\t\t\tclassName=\"text-foreground underline decoration-border decoration-dotted underline-offset-2 transition-colors duration-150 hover:text-foreground hover:decoration-muted-foreground\"\n\t\t\t{...props}\n\t\t>\n\t\t\t{props.children}\n\t\t</a>\n\t);\n};\n","/**\n * Reusable cell renderers for DataTable columns.\n *\n * Use these from `column.cell` definitions to keep table preview pages and\n * production code consistent. Every renderer is presentational (no data\n * fetching) and accepts the value plus optional formatting hints.\n *\n * { accessorKey: 'status', cell: ({ getValue }) => <StatusCell value={getValue()} map={STATUS_MAP} /> }\n * { accessorKey: 'createdAt', cell: ({ getValue }) => <DateCell value={getValue()} /> }\n * { accessorKey: 'amount', cell: ({ getValue }) => <CurrencyCell value={getValue()} currency=\"USD\" /> }\n * { accessorKey: 'owner', cell: ({ getValue }) => <AvatarCell name={getValue()} /> }\n */\nimport type { ComponentType, ReactNode } from 'react';\nimport { Calendar, Mail, type LucideIcon } from 'lucide-react';\n\nimport { Badge, type ComposedBadgeVariant } from '@/components/base/badge';\nimport { Text } from '@/components/typography';\nimport { EMPTY } from '@/lib/format';\nimport { cn } from '@/lib/utils';\n\n// ──────────────────────────────────────────────────────────────\n// StatusCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface StatusCellEntry {\n\tlabel: ReactNode;\n\tvariant?: ComposedBadgeVariant;\n\ticon?: LucideIcon;\n\tdot?: boolean;\n}\n\nexport interface StatusCellProps<TStatus extends string> {\n\tvalue?: TStatus | null;\n\tmap: Record<TStatus, StatusCellEntry>;\n\temptyLabel?: ReactNode;\n\tclassName?: string;\n}\n\nexport function StatusCell<TStatus extends string>({\n\tvalue,\n\tmap,\n\temptyLabel = EMPTY,\n\tclassName,\n}: StatusCellProps<TStatus>) {\n\tif (!value || !(value in map)) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('opacity-60', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\tconst entry = map[value];\n\tconst Icon = entry.icon;\n\treturn (\n\t\t<Badge\n\t\t\tvariant={entry.variant ?? 'secondary'}\n\t\t\tclassName={cn('gap-space-sm', className)}\n\t\t>\n\t\t\t{!!Icon && <Icon className=\"size-icon-sm\" />}\n\t\t\t{entry.label}\n\t\t</Badge>\n\t);\n}\n\nStatusCell.displayName = 'StatusCell';\n\n// ──────────────────────────────────────────────────────────────\n// StatusClusterCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface StatusClusterCellItem {\n\tid?: string;\n\tlabel: ReactNode;\n\tvariant?: ComposedBadgeVariant;\n\ticon?: LucideIcon;\n\tdot?: boolean;\n\thidden?: boolean;\n}\n\nexport interface StatusClusterCellProps {\n\titems?: readonly StatusClusterCellItem[];\n\temptyLabel?: ReactNode;\n\tclassName?: string;\n\tbadgeClassName?: string;\n}\n\nexport function StatusClusterCell({\n\titems = [],\n\temptyLabel = EMPTY,\n\tclassName,\n\tbadgeClassName,\n}: StatusClusterCellProps) {\n\tconst visibleItems = items.filter((item) => !item.hidden);\n\n\tif (visibleItems.length === 0) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('opacity-60', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span className={cn('inline-flex min-w-0 flex-wrap items-center gap-space-sm', className)}>\n\t\t\t{visibleItems.map((item, index) => {\n\t\t\t\tconst Icon = item.icon;\n\t\t\t\treturn (\n\t\t\t\t\t<Badge\n\t\t\t\t\t\tkey={item.id ?? index}\n\t\t\t\t\t\tvariant={item.variant ?? 'secondary'}\n\t\t\t\t\t\tdot={item.dot}\n\t\t\t\t\t\tclassName={cn('shrink-0', badgeClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!Icon && <Icon className=\"size-icon-sm\" />}\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</Badge>\n\t\t\t\t);\n\t\t\t})}\n\t\t</span>\n\t);\n}\n\nStatusClusterCell.displayName = 'StatusClusterCell';\n\n// ──────────────────────────────────────────────────────────────\n// DateCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface DateCellProps {\n\tvalue?: string | number | Date | null;\n\t/** A Intl.DateTimeFormatOptions preset. Default: short month + day + year. */\n\toptions?: Intl.DateTimeFormatOptions;\n\tlocale?: string;\n\tshowIcon?: boolean;\n\ticon?: ComponentType<{ className?: string }>;\n\temptyLabel?: ReactNode;\n\tclassName?: string;\n}\n\nconst DEFAULT_DATE_OPTIONS: Intl.DateTimeFormatOptions = {\n\tmonth: 'short',\n\tday: 'numeric',\n\tyear: 'numeric',\n};\n\nexport function DateCell({\n\tvalue,\n\toptions = DEFAULT_DATE_OPTIONS,\n\tlocale,\n\tshowIcon = true,\n\ticon: IconComponent = Calendar,\n\temptyLabel = EMPTY,\n\tclassName,\n}: DateCellProps) {\n\tif (value === null || value === undefined || value === '') {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('opacity-60', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\tconst date = value instanceof Date ? value : new Date(value);\n\tif (Number.isNaN(date.getTime())) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('opacity-60', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\tconst formatter = new Intl.DateTimeFormat(locale, options);\n\treturn (\n\t\t<span className={cn('inline-flex items-center gap-space-sm tabular-nums', className)}>\n\t\t\t{!!showIcon && <IconComponent className=\"size-icon text-muted-foreground\" />}\n\t\t\t<Text size=\"inherit\" type=\"secondary\">\n\t\t\t\t{formatter.format(date)}\n\t\t\t</Text>\n\t\t</span>\n\t);\n}\n\nDateCell.displayName = 'DateCell';\n\n// ──────────────────────────────────────────────────────────────\n// DateMetaCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface DateMetaCellProps extends DateCellProps {\n\tsecondary?: ReactNode | ((date: Date) => ReactNode);\n\tprimaryClassName?: string;\n\tsecondaryClassName?: string;\n}\n\nexport function DateMetaCell({\n\tvalue,\n\toptions = DEFAULT_DATE_OPTIONS,\n\tlocale,\n\tshowIcon = true,\n\ticon: IconComponent = Calendar,\n\temptyLabel = EMPTY,\n\tclassName,\n\tprimaryClassName,\n\tsecondary,\n\tsecondaryClassName,\n}: DateMetaCellProps) {\n\tif (value === null || value === undefined || value === '') {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('opacity-60', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst date = value instanceof Date ? value : new Date(value);\n\tif (Number.isNaN(date.getTime())) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('opacity-60', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst formatter = new Intl.DateTimeFormat(locale, options);\n\tconst secondaryNode = typeof secondary === 'function' ? secondary(date) : secondary;\n\n\treturn (\n\t\t<span className={cn('inline-flex min-w-0 items-start gap-space-sm', className)}>\n\t\t\t{!!showIcon && <IconComponent className=\"mt-space-2xs size-icon shrink-0 text-muted-foreground\" />}\n\t\t\t<span className=\"grid min-w-0 gap-space-2xs\">\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\tclassName={cn('truncate tabular-nums', primaryClassName)}\n\t\t\t\t>\n\t\t\t\t\t{formatter.format(date)}\n\t\t\t\t</Text>\n\t\t\t\t{!!secondaryNode && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\tclassName={cn('truncate text-xs opacity-75', secondaryClassName)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{secondaryNode}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nDateMetaCell.displayName = 'DateMetaCell';\n\n// ──────────────────────────────────────────────────────────────\n// CurrencyCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface CurrencyCellProps {\n\tvalue?: number | string | null;\n\tcurrency?: string;\n\tlocale?: string;\n\temptyLabel?: ReactNode;\n\tclassName?: string;\n\tweight?: 'regular' | 'medium' | 'semibold' | 'bold';\n}\n\nexport function CurrencyCell({\n\tvalue,\n\tcurrency,\n\tlocale,\n\temptyLabel = EMPTY,\n\tclassName,\n\tweight = 'semibold',\n}: CurrencyCellProps) {\n\tconst numeric = typeof value === 'number' ? value : Number.parseFloat(String(value ?? ''));\n\tif (!Number.isFinite(numeric)) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('opacity-60', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\tconst formatted = currency\n\t\t? new Intl.NumberFormat(locale, {\n\t\t\t\tstyle: 'currency',\n\t\t\t\tcurrency,\n\t\t\t\tmaximumFractionDigits: 2,\n\t\t\t}).format(numeric)\n\t\t: numeric.toFixed(2);\n\treturn (\n\t\t<Text\n\t\t\ttag=\"span\"\n\t\t\tsize=\"inherit\"\n\t\t\tweight={weight}\n\t\t\tclassName={cn('tabular-nums', className)}\n\t\t>\n\t\t\t{formatted}\n\t\t</Text>\n\t);\n}\n\nCurrencyCell.displayName = 'CurrencyCell';\n\n// ──────────────────────────────────────────────────────────────\n// AvatarCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface AvatarCellProps {\n\tname?: string | null;\n\timageUrl?: string;\n\ticon?: ComponentType<{ className?: string }>;\n\tsubtitle?: ReactNode;\n\temptyLabel?: ReactNode;\n\tclassName?: string;\n}\n\nfunction getInitials(name: string): string {\n\treturn name\n\t\t.split(/\\s+/)\n\t\t.filter(Boolean)\n\t\t.slice(0, 2)\n\t\t.map((p) => p[0]!.toUpperCase())\n\t\t.join('');\n}\n\nexport function AvatarCell({\n\tname,\n\timageUrl,\n\ticon: IconComponent = Mail,\n\tsubtitle,\n\temptyLabel = EMPTY,\n\tclassName,\n}: AvatarCellProps) {\n\tif (!name || name.trim().length === 0) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('opacity-60', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\treturn (\n\t\t<span className={cn('inline-flex items-center gap-space-md', className)}>\n\t\t\t<span className=\"relative inline-flex size-avatar-sm shrink-0 items-center justify-center overflow-hidden rounded-full bg-muted text-muted-foreground\">\n\t\t\t\t{imageUrl ? (\n\t\t\t\t\t<img src={imageUrl} alt={name} className=\"absolute inset-0 size-full object-cover\" />\n\t\t\t\t) : name.length > 0 ? (\n\t\t\t\t\t<Text size=\"inherit\" weight=\"semibold\" className=\"text-xs leading-none\">\n\t\t\t\t\t\t{getInitials(name)}\n\t\t\t\t\t</Text>\n\t\t\t\t) : (\n\t\t\t\t\t<IconComponent className=\"size-icon\" />\n\t\t\t\t)}\n\t\t\t</span>\n\t\t\t<span className=\"min-w-0 inline-flex flex-col\">\n\t\t\t\t<Text size=\"inherit\" weight=\"medium\" className=\"truncate\">\n\t\t\t\t\t{name}\n\t\t\t\t</Text>\n\t\t\t\t{!!subtitle && (\n\t\t\t\t\t<Text size=\"inherit\" type=\"secondary\" className=\"truncate text-xs\">\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t</span>\n\t);\n}\n\nAvatarCell.displayName = 'AvatarCell';\n\n// ──────────────────────────────────────────────────────────────\n// ResourceCell / IdentityCell\n// ──────────────────────────────────────────────────────────────\n\nexport interface ResourceCellMetadataItem {\n\tid?: string;\n\tlabel?: ReactNode;\n\tvalue: ReactNode;\n}\n\nexport type ResourceCellBadge =\n\t| ReactNode\n\t| ({\n\t\t\tid?: string;\n\t\t\tlabel: ReactNode;\n\t\t\tvariant?: ComposedBadgeVariant;\n\t\t\ticon?: LucideIcon;\n\t\t\tdot?: boolean;\n\t });\n\nexport interface ResourceCellLinkProps {\n\thref: string;\n\tchildren: ReactNode;\n\tclassName?: string;\n\t'aria-label'?: string;\n}\n\nexport interface ResourceCellProps {\n\ttitle?: ReactNode;\n\tsubtitle?: ReactNode;\n\tmetadata?: ReactNode | readonly ResourceCellMetadataItem[];\n\tbadges?: readonly ResourceCellBadge[];\n\timageUrl?: string;\n\ticon?: ComponentType<{ className?: string }>;\n\tfallback?: ReactNode;\n\thref?: string;\n\trenderLink?: (props: ResourceCellLinkProps) => ReactNode;\n\temptyLabel?: ReactNode;\n\tclassName?: string;\n\tmediaClassName?: string;\n\tcontentClassName?: string;\n\ttitleClassName?: string;\n\tsubtitleClassName?: string;\n}\n\nfunction renderResourceBadge(badge: ResourceCellBadge, index: number): ReactNode {\n\tif (\n\t\tbadge &&\n\t\ttypeof badge === 'object' &&\n\t\t!('type' in badge) &&\n\t\t'label' in badge\n\t) {\n\t\tconst Icon = badge.icon;\n\t\treturn (\n\t\t\t<Badge key={badge.id ?? index} variant={badge.variant ?? 'secondary'} dot={badge.dot}>\n\t\t\t\t{!!Icon && <Icon className=\"size-3\" />}\n\t\t\t\t{badge.label}\n\t\t\t</Badge>\n\t\t);\n\t}\n\n\treturn <span key={index}>{badge}</span>;\n}\n\nfunction renderResourceMetadata(metadata: ResourceCellProps['metadata']): ReactNode {\n\tif (!metadata) return null;\n\tif (Array.isArray(metadata)) {\n\t\treturn (\n\t\t\t<span className=\"inline-flex min-w-0 flex-wrap items-center gap-x-2 gap-y-0.5\">\n\t\t\t\t{metadata.map((item, index) => (\n\t\t\t\t\t<span key={item.id ?? index} className=\"inline-flex min-w-0 items-center gap-1\">\n\t\t\t\t\t\t{!!item.label && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" className=\"shrink-0 text-xxs opacity-70\">\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" className=\"truncate text-xxs\">\n\t\t\t\t\t\t\t{item.value}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</span>\n\t\t\t\t))}\n\t\t\t</span>\n\t\t);\n\t}\n\n\treturn metadata as ReactNode;\n}\n\nexport function ResourceCell({\n\ttitle,\n\tsubtitle,\n\tmetadata,\n\tbadges = [],\n\timageUrl,\n\ticon: IconComponent = Mail,\n\tfallback,\n\thref,\n\trenderLink,\n\temptyLabel = EMPTY,\n\tclassName,\n\tmediaClassName,\n\tcontentClassName,\n\ttitleClassName,\n\tsubtitleClassName,\n}: ResourceCellProps) {\n\tif (!title) {\n\t\treturn (\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className={cn('opacity-60', className)}>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst titleText = typeof title === 'string' ? title : undefined;\n\tconst initials = titleText ? getInitials(titleText) : '';\n\tconst content = (\n\t\t<span className={cn('resource-cell--content grid min-w-0 gap-0.5', contentClassName)}>\n\t\t\t<span className=\"resource-cell--title-row flex min-w-0 items-center gap-1.5\">\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\tclassName={cn('resource-cell--title truncate', titleClassName)}\n\t\t\t\t>\n\t\t\t\t\t{title}\n\t\t\t\t</Text>\n\t\t\t\t{badges.length > 0 && (\n\t\t\t\t\t<span className=\"resource-cell--badges inline-flex shrink-0 items-center gap-1\">\n\t\t\t\t\t\t{badges.map(renderResourceBadge)}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t\t{!!subtitle && (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\tclassName={cn('resource-cell--subtitle truncate text-xs', subtitleClassName)}\n\t\t\t\t>\n\t\t\t\t\t{subtitle}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t\t{!!metadata && (\n\t\t\t\t<span className=\"resource-cell--metadata min-w-0\">\n\t\t\t\t\t{renderResourceMetadata(metadata)}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</span>\n\t);\n\tconst cell = (\n\t\t<span className={cn('resource-cell--component inline-flex min-w-0 items-center gap-space-md', className)}>\n\t\t\t<span\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'resource-cell--media relative inline-flex size-avatar shrink-0 items-center justify-center overflow-hidden rounded-full bg-muted text-muted-foreground',\n\t\t\t\t\tmediaClassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{imageUrl ? (\n\t\t\t\t\t<img src={imageUrl} alt={titleText ?? ''} className=\"absolute inset-0 size-full object-cover\" />\n\t\t\t\t) : fallback ? (\n\t\t\t\t\tfallback\n\t\t\t\t) : initials ? (\n\t\t\t\t\t<Text size=\"inherit\" weight=\"semibold\" className=\"text-xs leading-none\">\n\t\t\t\t\t\t{initials}\n\t\t\t\t\t</Text>\n\t\t\t\t) : (\n\t\t\t\t\t<IconComponent className=\"size-icon\" />\n\t\t\t\t)}\n\t\t\t</span>\n\t\t\t{content}\n\t\t</span>\n\t);\n\n\tif (!href) return cell;\n\n\tconst linkClassName = 'resource-cell--link inline-flex min-w-0 rounded-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2';\n\tif (renderLink) {\n\t\treturn renderLink({\n\t\t\thref,\n\t\t\tchildren: cell,\n\t\t\tclassName: linkClassName,\n\t\t\t'aria-label': titleText,\n\t\t});\n\t}\n\n\treturn (\n\t\t<a href={href} className={linkClassName} aria-label={titleText}>\n\t\t\t{cell}\n\t\t</a>\n\t);\n}\n\nResourceCell.displayName = 'ResourceCell';\n\nexport const IdentityCell = ResourceCell;\n","/**\n * Reusable hooks for DataTable consumers building custom toolbars or chrome.\n *\n * The default `DataTableToolbar` already wires these internally; expose them\n * for consumers that need horizontal-scroll arrows / dense toggle in a\n * custom layout (e.g. inside a hero banner above the table).\n */\nimport { useCallback, useEffect, useRef, useState, type RefObject } from 'react';\n\nconst SCROLL_AMOUNT_DEFAULT = 300;\n\n/**\n * Locate the actual horizontally-scrollable element inside a `tableArea`\n * wrapper. The shadcn-style Table primitive renders a\n * `<div data-slot=\"table-container\" class=\"overflow-x-auto\">` we target.\n */\nexport function getDataTableScrollContainer(\n\ttableArea: HTMLDivElement | null,\n): HTMLDivElement | null {\n\tif (!tableArea) return null;\n\treturn tableArea.querySelector<HTMLDivElement>('[data-slot=\"table-container\"]');\n}\n\nexport interface UseDataTableScrollStateReturn {\n\tcanScrollLeft: boolean;\n\tcanScrollRight: boolean;\n\tscrollBy: (delta: number) => void;\n\tscrollLeft: () => void;\n\tscrollRight: () => void;\n}\n\n/**\n * Track horizontal-overflow state for a DataTable wrapper. Returns booleans\n * for whether each scroll direction is available, plus helpers to nudge the\n * scroll container by a fixed amount.\n *\n * Pass the same `RefObject<HTMLDivElement>` you pass to `<DataTable>` as\n * `tableAreaRef`.\n */\nexport function useDataTableScrollState(\n\ttableAreaRef: RefObject<HTMLDivElement | null>,\n\toptions: { stepPx?: number; deps?: ReadonlyArray<unknown> } = {},\n): UseDataTableScrollStateReturn {\n\tconst { stepPx = SCROLL_AMOUNT_DEFAULT, deps = [] } = options;\n\tconst [canScrollLeft, setCanScrollLeft] = useState(false);\n\tconst [canScrollRight, setCanScrollRight] = useState(false);\n\tconst rafRef = useRef(0);\n\n\tconst measure = useCallback(() => {\n\t\tconst el = getDataTableScrollContainer(tableAreaRef.current);\n\t\tif (!el) {\n\t\t\tsetCanScrollLeft(false);\n\t\t\tsetCanScrollRight(false);\n\t\t\treturn;\n\t\t}\n\t\tconst { scrollLeft, scrollWidth, clientWidth } = el;\n\t\tsetCanScrollLeft(scrollLeft > 1);\n\t\tsetCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);\n\t}, [tableAreaRef]);\n\n\tuseEffect(() => {\n\t\tconst timerId = window.setTimeout(() => {\n\t\t\tconst el = getDataTableScrollContainer(tableAreaRef.current);\n\t\t\tif (!el) return;\n\n\t\t\tmeasure();\n\n\t\t\tconst handleScroll = () => {\n\t\t\t\tcancelAnimationFrame(rafRef.current);\n\t\t\t\trafRef.current = requestAnimationFrame(measure);\n\t\t\t};\n\n\t\t\tel.addEventListener('scroll', handleScroll, { passive: true });\n\t\t\tconst ro = new ResizeObserver(measure);\n\t\t\tro.observe(el);\n\t\t\tif (el.firstElementChild) ro.observe(el.firstElementChild);\n\n\t\t\treturn () => {\n\t\t\t\tel.removeEventListener('scroll', handleScroll);\n\t\t\t\tcancelAnimationFrame(rafRef.current);\n\t\t\t\tro.disconnect();\n\t\t\t};\n\t\t}, 0);\n\n\t\treturn () => window.clearTimeout(timerId);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [tableAreaRef, measure, ...deps]);\n\n\tconst scrollBy = useCallback(\n\t\t(delta: number) => {\n\t\t\tgetDataTableScrollContainer(tableAreaRef.current)?.scrollBy({\n\t\t\t\tleft: delta,\n\t\t\t\tbehavior: 'smooth',\n\t\t\t});\n\t\t},\n\t\t[tableAreaRef],\n\t);\n\n\tconst scrollLeft = useCallback(() => scrollBy(-stepPx), [scrollBy, stepPx]);\n\tconst scrollRight = useCallback(() => scrollBy(stepPx), [scrollBy, stepPx]);\n\n\treturn { canScrollLeft, canScrollRight, scrollBy, scrollLeft, scrollRight };\n}\n\n/**\n * localStorage-backed boolean state for the dense / comfortable toggle.\n * `null` storageKey disables persistence (the value is purely in-memory).\n */\nexport function usePersistentDensity(\n\tstorageKey: string | null,\n\tdefaultDense = false,\n): [boolean, (next: boolean) => void] {\n\tconst initial = (() => {\n\t\tif (!storageKey || typeof window === 'undefined') return defaultDense;\n\t\ttry {\n\t\t\tconst raw = window.localStorage.getItem(storageKey);\n\t\t\tif (raw === '1') return true;\n\t\t\tif (raw === '0') return false;\n\t\t\treturn defaultDense;\n\t\t} catch {\n\t\t\treturn defaultDense;\n\t\t}\n\t})();\n\n\tconst [dense, setDenseState] = useState(initial);\n\n\tconst setDense = useCallback(\n\t\t(next: boolean) => {\n\t\t\tsetDenseState(next);\n\t\t\tif (storageKey && typeof window !== 'undefined') {\n\t\t\t\ttry {\n\t\t\t\t\twindow.localStorage.setItem(storageKey, next ? '1' : '0');\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore quota / disabled-storage errors */\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[storageKey],\n\t);\n\n\treturn [dense, setDense];\n}\n","/**\n * DensityToggle — small icon button that flips between \"dense\" and\n * \"comfortable\" table modes. Stateless: render-time `dense` boolean +\n * `onChange` callback. Pair with `usePersistentDensity` from `../hooks`\n * when you want to persist the choice to localStorage.\n *\n * Used internally by `DataTableToolbar`; exposed for consumers building\n * custom toolbars.\n */\nimport { Maximize2, Minimize2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nconst buttonClass =\n\t'inline-flex size-control-sm items-center justify-center rounded-radius text-muted-foreground/70 transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-30';\n\nexport interface DensityToggleProps {\n\tdense: boolean;\n\tonChange: (next: boolean) => void;\n\tdenseLabel?: string;\n\tcomfortableLabel?: string;\n\tclassName?: string;\n}\n\nexport function DensityToggle({\n\tdense,\n\tonChange,\n\tdenseLabel = 'Dense',\n\tcomfortableLabel = 'Comfortable',\n\tclassName,\n}: DensityToggleProps) {\n\tconst label = dense ? comfortableLabel : denseLabel;\n\tconst Icon = dense ? Maximize2 : Minimize2;\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\taria-label={label}\n\t\t\taria-pressed={dense}\n\t\t\tonClick={() => onChange(!dense)}\n\t\t\tclassName={cn(buttonClass, className)}\n\t\t>\n\t\t\t<Icon className=\"size-icon-sm\" />\n\t\t</button>\n\t);\n}\n\nDensityToggle.displayName = 'DensityToggle';\n"],"mappings":"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"}