@jarllyng/nostromo 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/dist/chunk-35I2BJC3.js +3 -0
  2. package/dist/chunk-35I2BJC3.js.map +1 -0
  3. package/dist/chunk-35RWQSO2.cjs +3 -0
  4. package/dist/chunk-35RWQSO2.cjs.map +1 -0
  5. package/dist/chunk-3QVQ2TNE.cjs +3 -0
  6. package/dist/chunk-3QVQ2TNE.cjs.map +1 -0
  7. package/dist/{chunk-ZC4HJSII.cjs → chunk-5Z3MYAVM.cjs} +2 -2
  8. package/dist/{chunk-ZC4HJSII.cjs.map → chunk-5Z3MYAVM.cjs.map} +1 -1
  9. package/dist/{chunk-ZQDFYSZB.cjs → chunk-AYEM2M4H.cjs} +2 -2
  10. package/dist/{chunk-ZQDFYSZB.cjs.map → chunk-AYEM2M4H.cjs.map} +1 -1
  11. package/dist/chunk-BL2TM4YT.js +3 -0
  12. package/dist/chunk-BL2TM4YT.js.map +1 -0
  13. package/dist/{chunk-BSUHBLZO.cjs → chunk-BZ5ZCZJX.cjs} +2 -2
  14. package/dist/{chunk-BSUHBLZO.cjs.map → chunk-BZ5ZCZJX.cjs.map} +1 -1
  15. package/dist/chunk-C7HZAQBX.cjs +3 -0
  16. package/dist/chunk-C7HZAQBX.cjs.map +1 -0
  17. package/dist/chunk-DNTPD3PJ.js +3 -0
  18. package/dist/chunk-DNTPD3PJ.js.map +1 -0
  19. package/dist/{chunk-TGPWW7FC.js → chunk-HRJXPCGF.js} +2 -2
  20. package/dist/{chunk-TGPWW7FC.js.map → chunk-HRJXPCGF.js.map} +1 -1
  21. package/dist/chunk-JCETHQ55.cjs +3 -0
  22. package/dist/chunk-JCETHQ55.cjs.map +1 -0
  23. package/dist/chunk-MDXW6IRM.cjs +3 -0
  24. package/dist/chunk-MDXW6IRM.cjs.map +1 -0
  25. package/dist/chunk-MOPCE5RA.js +3 -0
  26. package/dist/chunk-MOPCE5RA.js.map +1 -0
  27. package/dist/chunk-MY2KMTUS.js +3 -0
  28. package/dist/chunk-MY2KMTUS.js.map +1 -0
  29. package/dist/chunk-NBX6FKCA.cjs +3 -0
  30. package/dist/chunk-NBX6FKCA.cjs.map +1 -0
  31. package/dist/chunk-NC27D5Y3.cjs +3 -0
  32. package/dist/chunk-NC27D5Y3.cjs.map +1 -0
  33. package/dist/chunk-NPSIDFOF.cjs +3 -0
  34. package/dist/chunk-NPSIDFOF.cjs.map +1 -0
  35. package/dist/chunk-QKM5LPRW.js +3 -0
  36. package/dist/chunk-QKM5LPRW.js.map +1 -0
  37. package/dist/chunk-SVWQWRPZ.js +3 -0
  38. package/dist/chunk-SVWQWRPZ.js.map +1 -0
  39. package/dist/chunk-UIEGBT4T.js +3 -0
  40. package/dist/chunk-UIEGBT4T.js.map +1 -0
  41. package/dist/chunk-VNDL67OG.cjs +3 -0
  42. package/dist/chunk-VNDL67OG.cjs.map +1 -0
  43. package/dist/chunk-WK6LNC2E.cjs +3 -0
  44. package/dist/chunk-WK6LNC2E.cjs.map +1 -0
  45. package/dist/{chunk-M5IBD3KV.js → chunk-WO3KCAN6.js} +2 -2
  46. package/dist/{chunk-M5IBD3KV.js.map → chunk-WO3KCAN6.js.map} +1 -1
  47. package/dist/{chunk-7W456HZL.js → chunk-XJJJEWSU.js} +2 -2
  48. package/dist/{chunk-7W456HZL.js.map → chunk-XJJJEWSU.js.map} +1 -1
  49. package/dist/chunk-XLZJ6HBL.js +3 -0
  50. package/dist/chunk-XLZJ6HBL.js.map +1 -0
  51. package/dist/chunk-XRVHMGMD.js +3 -0
  52. package/dist/chunk-XRVHMGMD.js.map +1 -0
  53. package/dist/components/core/alert.d.cts +1 -1
  54. package/dist/components/core/alert.d.ts +1 -1
  55. package/dist/components/core/badge.d.cts +1 -1
  56. package/dist/components/core/badge.d.ts +1 -1
  57. package/dist/components/core/breadcrumb.cjs +1 -1
  58. package/dist/components/core/breadcrumb.d.cts +8 -2
  59. package/dist/components/core/breadcrumb.d.ts +8 -2
  60. package/dist/components/core/breadcrumb.js +1 -1
  61. package/dist/components/core/button.d.cts +2 -2
  62. package/dist/components/core/button.d.ts +2 -2
  63. package/dist/components/core/calendar.cjs +1 -1
  64. package/dist/components/core/calendar.js +1 -1
  65. package/dist/components/core/charts-lazy.cjs +1 -1
  66. package/dist/components/core/charts-lazy.js +1 -1
  67. package/dist/components/core/charts.cjs +1 -1
  68. package/dist/components/core/charts.js +1 -1
  69. package/dist/components/core/checkbox.cjs +1 -1
  70. package/dist/components/core/checkbox.d.cts +1 -1
  71. package/dist/components/core/checkbox.d.ts +1 -1
  72. package/dist/components/core/checkbox.js +1 -1
  73. package/dist/components/core/data-table.cjs +1 -1
  74. package/dist/components/core/data-table.js +1 -1
  75. package/dist/components/core/dialog.cjs +1 -1
  76. package/dist/components/core/dialog.d.cts +21 -3
  77. package/dist/components/core/dialog.d.ts +21 -3
  78. package/dist/components/core/dialog.js +1 -1
  79. package/dist/components/core/error-message.d.cts +1 -1
  80. package/dist/components/core/error-message.d.ts +1 -1
  81. package/dist/components/core/helper-text.d.cts +1 -1
  82. package/dist/components/core/helper-text.d.ts +1 -1
  83. package/dist/components/core/icon.cjs +1 -1
  84. package/dist/components/core/icon.d.cts +3 -3
  85. package/dist/components/core/icon.d.ts +3 -3
  86. package/dist/components/core/icon.js +1 -1
  87. package/dist/components/core/input.d.cts +1 -1
  88. package/dist/components/core/input.d.ts +1 -1
  89. package/dist/components/core/label.d.cts +1 -1
  90. package/dist/components/core/label.d.ts +1 -1
  91. package/dist/components/core/pagination.d.cts +1 -1
  92. package/dist/components/core/pagination.d.ts +1 -1
  93. package/dist/components/core/progress.d.cts +3 -3
  94. package/dist/components/core/progress.d.ts +3 -3
  95. package/dist/components/core/radio-group.d.cts +1 -1
  96. package/dist/components/core/radio-group.d.ts +1 -1
  97. package/dist/components/core/select.d.cts +3 -3
  98. package/dist/components/core/select.d.ts +3 -3
  99. package/dist/components/core/separator.cjs +1 -1
  100. package/dist/components/core/separator.js +1 -1
  101. package/dist/components/core/skeleton.cjs +1 -1
  102. package/dist/components/core/skeleton.d.cts +1 -1
  103. package/dist/components/core/skeleton.d.ts +1 -1
  104. package/dist/components/core/skeleton.js +1 -1
  105. package/dist/components/core/switch.d.cts +1 -1
  106. package/dist/components/core/switch.d.ts +1 -1
  107. package/dist/components/core/table.cjs +1 -1
  108. package/dist/components/core/table.d.cts +11 -1
  109. package/dist/components/core/table.d.ts +11 -1
  110. package/dist/components/core/table.js +1 -1
  111. package/dist/components/core/textarea.d.cts +1 -1
  112. package/dist/components/core/textarea.d.ts +1 -1
  113. package/dist/components/core/toast.cjs +1 -1
  114. package/dist/components/core/toast.d.cts +2 -2
  115. package/dist/components/core/toast.d.ts +2 -2
  116. package/dist/components/core/toast.js +1 -1
  117. package/dist/components/core/tooltip.cjs +1 -1
  118. package/dist/components/core/tooltip.d.cts +2 -2
  119. package/dist/components/core/tooltip.d.ts +2 -2
  120. package/dist/components/core/tooltip.js +1 -1
  121. package/dist/components/marketing/features.d.cts +2 -2
  122. package/dist/components/marketing/features.d.ts +2 -2
  123. package/dist/components/marketing/gallery.d.cts +1 -1
  124. package/dist/components/marketing/gallery.d.ts +1 -1
  125. package/dist/components/marketing/pricing.d.cts +1 -1
  126. package/dist/components/marketing/pricing.d.ts +1 -1
  127. package/dist/components/marketing/testimonials.d.cts +1 -1
  128. package/dist/components/marketing/testimonials.d.ts +1 -1
  129. package/dist/index.cjs +1 -1
  130. package/dist/index.cjs.map +1 -1
  131. package/dist/index.d.cts +3 -3
  132. package/dist/index.d.ts +3 -3
  133. package/dist/index.js +1 -1
  134. package/dist/index.js.map +1 -1
  135. package/package.json +2 -2
  136. package/dist/chunk-4PN7OGLX.cjs +0 -3
  137. package/dist/chunk-4PN7OGLX.cjs.map +0 -1
  138. package/dist/chunk-4TYVEXRA.cjs +0 -3
  139. package/dist/chunk-4TYVEXRA.cjs.map +0 -1
  140. package/dist/chunk-B2BWBKZA.cjs +0 -3
  141. package/dist/chunk-B2BWBKZA.cjs.map +0 -1
  142. package/dist/chunk-CVOSWGQZ.js +0 -3
  143. package/dist/chunk-CVOSWGQZ.js.map +0 -1
  144. package/dist/chunk-EGQ2Q37R.cjs +0 -3
  145. package/dist/chunk-EGQ2Q37R.cjs.map +0 -1
  146. package/dist/chunk-EIXD3Y4R.js +0 -3
  147. package/dist/chunk-EIXD3Y4R.js.map +0 -1
  148. package/dist/chunk-G5ZSOVJY.cjs +0 -3
  149. package/dist/chunk-G5ZSOVJY.cjs.map +0 -1
  150. package/dist/chunk-G6TR5RGR.js +0 -3
  151. package/dist/chunk-G6TR5RGR.js.map +0 -1
  152. package/dist/chunk-GUJB555L.js +0 -3
  153. package/dist/chunk-GUJB555L.js.map +0 -1
  154. package/dist/chunk-JZROH43C.js +0 -3
  155. package/dist/chunk-JZROH43C.js.map +0 -1
  156. package/dist/chunk-MRZOLUSF.js +0 -3
  157. package/dist/chunk-MRZOLUSF.js.map +0 -1
  158. package/dist/chunk-OZ3RIKZO.cjs +0 -3
  159. package/dist/chunk-OZ3RIKZO.cjs.map +0 -1
  160. package/dist/chunk-PEYPRWZP.js +0 -3
  161. package/dist/chunk-PEYPRWZP.js.map +0 -1
  162. package/dist/chunk-PVHTEE5T.cjs +0 -3
  163. package/dist/chunk-PVHTEE5T.cjs.map +0 -1
  164. package/dist/chunk-QF5CRDZI.js +0 -3
  165. package/dist/chunk-QF5CRDZI.js.map +0 -1
  166. package/dist/chunk-RPRISB7O.cjs +0 -3
  167. package/dist/chunk-RPRISB7O.cjs.map +0 -1
  168. package/dist/chunk-SD4IIQ2I.cjs +0 -3
  169. package/dist/chunk-SD4IIQ2I.cjs.map +0 -1
  170. package/dist/chunk-TJFZAMBB.js +0 -3
  171. package/dist/chunk-TJFZAMBB.js.map +0 -1
  172. package/dist/chunk-VXMDVKAD.js +0 -3
  173. package/dist/chunk-VXMDVKAD.js.map +0 -1
  174. package/dist/chunk-ZYP2PDSX.cjs +0 -3
  175. package/dist/chunk-ZYP2PDSX.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/core/data-table.tsx"],"names":["filterBarVariants","cva","DataTable","initialData","columns","searchable","searchPlaceholder","searchKeys","onSearch","controlledSearchTerm","onSearchTermChange","filterable","filters","onFilter","controlledColumnFilters","onColumnFiltersChange","defaultSortColumn","defaultSortDirection","controlledSortColumn","controlledSortDirection","onSortChange","defaultPageSize","showPagination","controlledCurrentPage","controlledPageSize","onPageChange","onPageSizeChange","totalItems","showSearch","showFilters","filterBarClassName","searchBarClassName","rowKey","emptyText","tableProps","isControlledSearch","isControlledFilters","isControlledSort","isControlledPagination","internalSearchTerm","setInternalSearchTerm","useState","searchTerm","setSearchTerm","useMemo","value","internalColumnFilters","setInternalColumnFilters","columnFilters","setColumnFilters","internalSortColumn","setInternalSortColumn","internalSortDirection","setInternalSortDirection","sortColumn","sortDirection","setSortColumn","column","setSortDirection","dir","internalCurrentPage","setInternalCurrentPage","internalPageSize","setInternalPageSize","currentPage","pageSize","setCurrentPage","page","setPageSize","size","searchFilteredData","term","keys","col","record","key","filterFilteredData","filter","filterValue","recordValue","sortedData","sorted","a","b","aValue","bValue","comparison","paginatedData","startIndex","endIndex","handleSearch","useCallback","handleFilterChange","newFilters","handleSort","direction","handlePageChange","newPageSize","React","cn","Input","e","option","Table","DataTableMemoized","memo"],"mappings":"uZAwEA,IAAMA,EAAAA,CAAoBC,0BAAAA,CACxB,uEAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAS,UAAA,CACT,OAAA,CAAS,aAAA,CACT,OAAA,CAAS,6BACX,CACF,CAAA,CACA,gBAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,CAAA,CAEO,SAASC,EAAAA,CAEd,CACA,IAAA,CAAMC,CAAAA,CACN,OAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,kBAAAC,EAAAA,CAAoB,WAAA,CACpB,UAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,UAAA,CAAYC,CAAAA,CACZ,mBAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CAAa,KAAA,CACb,OAAA,CAAAC,CAAAA,CAAU,EAAC,CACX,SAAAC,CAAAA,CACA,aAAA,CAAeC,CAAAA,CACf,qBAAA,CAAAC,CAAAA,CACA,iBAAA,CAAAC,EAAAA,CACA,oBAAA,CAAAC,EAAAA,CAAuB,KAAA,CACvB,UAAA,CAAYC,CAAAA,CACZ,aAAA,CAAeC,EAAAA,CACf,YAAA,CAAAC,CAAAA,CACA,gBAAAC,EAAAA,CAAkB,EAAA,CAClB,cAAA,CAAAC,CAAAA,CAAiB,IAAA,CACjB,WAAA,CAAaC,CAAAA,CACb,QAAA,CAAUC,EACV,YAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CAAa,KACb,WAAA,CAAAC,CAAAA,CAAc,IAAA,CACd,kBAAA,CAAAC,EAAAA,CACA,kBAAA,CAAAC,EAAAA,CACA,MAAA,CAAAC,EAAAA,CAAS,IAAA,CACT,SAAA,CAAAC,EAAAA,CAAY,eAAA,CACZ,GAAGC,EACL,CAAA,CAAsB,CAEpB,IAAMC,CAAAA,CAAqB1B,CAAAA,GAAyB,MAAA,CAC9C2B,CAAAA,CAAsBtB,CAAAA,GAA4B,MAAA,CAClDuB,CAAAA,CAAmBnB,IAAyB,MAAA,CAC5CoB,CAAAA,CAAyBf,CAAAA,GAA0B,MAAA,CAGnD,CAACgB,EAAAA,CAAoBC,EAAqB,CAAA,CAAIC,WAAS,EAAE,CAAA,CACzDC,CAAAA,CAAaP,CAAAA,CACf1B,CAAAA,CACA8B,EAAAA,CACEI,CAAAA,CAAgBC,SAAAA,CACpB,IACET,CAAAA,CACKU,CAAAA,EAAkBnC,CAAAA,GAAqBmC,CAAK,CAAA,CAC7CL,EAAAA,CACN,CAACL,EAAoBzB,CAAkB,CACzC,CAAA,CAGM,CAACoC,EAAAA,CAAuBC,EAAwB,CAAA,CAAIN,UAAAA,CAExD,EAAE,CAAA,CACEO,CAAAA,CAAgBZ,CAAAA,CAClBtB,CAAAA,CACAgC,EAAAA,CACEG,CAAAA,CAAmBL,UACvB,IACER,CAAAA,CACKxB,CAAAA,EAAqCG,CAAAA,GAAwBH,CAAO,CAAA,CACrEmC,EAAAA,CACN,CAACX,CAAAA,CAAqBrB,CAAqB,CAC7C,CAAA,CAGM,CAACmC,EAAAA,CAAoBC,EAAqB,CAAA,CAAIV,WAElDzB,EAAiB,CAAA,CACb,CAACoC,EAAAA,CAAuBC,EAAwB,CAAA,CAAIZ,UAAAA,CAExDxB,EAAoB,EAChBqC,CAAAA,CAAajB,CAAAA,CACfnB,CAAAA,CACAgC,EAAAA,CACEK,CAAAA,CAAgBlB,CAAAA,CAClBlB,EAAAA,CACAiC,EAAAA,CACEI,EAAgBZ,SAAAA,CACpB,IACEP,CAAAA,CACKoB,CAAAA,EAA+B,CAC1BA,CAAAA,EAAUrC,CAAAA,EAAgBmC,CAAAA,EAC5BnC,CAAAA,CAAaqC,CAAAA,CAAQF,CAAa,EAEtC,CAAA,CACAJ,EAAAA,CACN,CAACd,CAAAA,CAAkBjB,EAAcmC,CAAa,CAChD,CAAA,CACMG,CAAAA,CAAmBd,SAAAA,CACvB,IACEP,CAAAA,CACKsB,CAAAA,EAAwB,CACnBL,CAAAA,EAAclC,CAAAA,EAChBA,CAAAA,CAAakC,CAAAA,CAAYK,CAAG,EAEhC,CAAA,CACAN,EAAAA,CACN,CAAChB,CAAAA,CAAkBjB,CAAAA,CAAckC,CAAU,CAC7C,CAAA,CAGM,CAACM,EAAAA,CAAqBC,EAAsB,CAAA,CAAIpB,UAAAA,CAAS,CAAC,CAAA,CAC1D,CAACqB,EAAAA,CAAkBC,EAAmB,CAAA,CAAItB,WAASpB,EAAe,CAAA,CAClE2C,CAAAA,CAAc1B,CAAAA,CAChBf,CAAAA,CACAqC,EAAAA,CACEK,CAAAA,CACJzC,CAAAA,GAAuB,OAAYA,CAAAA,CAAqBsC,EAAAA,CACpDI,CAAAA,CAAiBtB,SAAAA,CACrB,IACEN,CAAAA,CACK6B,CAAAA,EAAiB1C,CAAAA,GAAe0C,CAAI,CAAA,CACrCN,EAAAA,CACN,CAACvB,CAAAA,CAAwBb,CAAY,CACvC,CAAA,CACM2C,CAAAA,CAAcxB,SAAAA,CAClB,IACElB,CAAAA,CACK2C,CAAAA,EAAiB3C,CAAAA,CAAiB2C,CAAI,CAAA,CACvCN,EAAAA,CACN,CAACrC,CAAgB,CACnB,CAAA,CAGM4C,CAAAA,CAAqB1B,SAAAA,CAAQ,IAAM,CACvC,GAAI,CAACvC,CAAAA,EAAc,CAACqC,CAAAA,CAAW,IAAA,EAAK,CAClC,OAAOvC,CAAAA,CAGT,IAAMoE,CAAAA,CAAO7B,CAAAA,CAAW,WAAA,EAAY,CAC9B8B,CAAAA,CACJjE,CAAAA,EACAH,CAAAA,CAAQ,GAAA,CAAKqE,CAAAA,EAAQA,CAAAA,CAAI,SAAA,EAAaA,CAAAA,CAAI,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,EAE/D,OAAOtE,CAAAA,CAAY,MAAA,CAAQuE,CAAAA,EAClBF,CAAAA,CAAK,IAAA,CAAMG,CAAAA,EAAQ,CACxB,IAAM9B,CAAAA,CAEC6B,CAAAA,CAAmCC,CAAG,CAAA,CAG7C,OAAI9B,CAAAA,EAAU,IAAA,CAAoC,KAAA,CAE3C,OAAOA,CAAK,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS0B,CAAI,CAClD,CAAC,CACF,CACH,CAAA,CAAG,CAACpE,CAAAA,CAAauC,CAAAA,CAAYrC,CAAAA,CAAYE,CAAAA,CAAYH,CAAO,CAAC,CAAA,CAGvDwE,CAAAA,CAAqBhC,SAAAA,CAAQ,IAE/B,CAACjC,CAAAA,EACDC,CAAAA,CAAQ,SAAW,CAAA,EACnB,MAAA,CAAO,IAAA,CAAKoC,CAAa,CAAA,CAAE,MAAA,GAAW,CAAA,CAE/BsB,CAAAA,CAGFA,EAAmB,MAAA,CAAQI,CAAAA,EACzB9D,CAAAA,CAAQ,KAAA,CAAOiE,CAAAA,EAAW,CAC/B,IAAMC,CAAAA,CAAc9B,CAAAA,CAAc6B,CAAAA,CAAO,GAAG,CAAA,CAG5C,GAEEC,CAAAA,EAAgB,IAAA,EAChBA,CAAAA,GAAgB,GAEhB,OAAO,KAAA,CAIT,GAAID,CAAAA,CAAO,QAAA,CACT,OAAOA,CAAAA,CAAO,QAAA,CAASC,EAAaJ,CAAM,CAAA,CAI5C,IAAMK,CAAAA,CAAeL,CAAAA,CAAmCG,CAAAA,CAAO,GAAG,CAAA,CAElE,OAAQA,CAAAA,CAAO,IAAA,EACb,KAAK,MAAA,CACH,OAAO,MAAA,CAAOE,CAAW,CAAA,CACtB,WAAA,EAAY,CACZ,QAAA,CAAS,MAAA,CAAOD,CAAW,CAAA,CAAE,WAAA,EAAa,CAAA,CAC/C,KAAK,QAAA,CACH,OAAO,MAAA,CAAOC,CAAW,CAAA,GAAM,MAAA,CAAOD,CAAW,CAAA,CACnD,KAAK,SAAA,CACH,OAAO,CAAA,CAAQC,CAAAA,EAAiB,CAAA,CAAQD,EAC1C,KAAK,QAAA,CACH,OAAO,MAAA,CAAOC,CAAW,CAAA,GAAM,MAAA,CAAOD,CAAW,CAAA,CACnD,QACE,OAAO,MAAA,CAAOC,CAAW,CAAA,CAAE,QAAA,CAAS,MAAA,CAAOD,CAAW,CAAC,CAC3D,CACF,CAAC,CACF,CAAA,CACA,CAACR,CAAAA,CAAoBtB,EAAerC,CAAAA,CAAYC,CAAO,CAAC,CAAA,CAGrDoE,CAAAA,CAAapC,SAAAA,CAAQ,IAAM,CAC/B,GAAI,CAACU,CAAAA,CACH,OAAOsB,CAAAA,CAGT,IAAMK,CAAAA,CAAS,CAAC,GAAGL,CAAkB,CAAA,CAC/BnB,CAAAA,CAASrD,CAAAA,CAAQ,IAAA,CAAMqE,CAAAA,EAAQA,CAAAA,CAAI,GAAA,GAAQnB,CAAU,CAAA,CAE3D,OAAI,CAACG,CAAAA,EAAU,CAACA,CAAAA,CAAO,QAAA,EAIvBwB,CAAAA,CAAO,KAAK,CAACC,CAAAA,CAAGC,CAAAA,GAAM,CACpB,IAAMC,CAAAA,CAAS3B,CAAAA,CAAO,SAAA,CAClByB,EAAEzB,CAAAA,CAAO,SAAS,CAAA,CACjByB,CAAAA,CAA8BzB,CAAAA,CAAO,GAAG,CAAA,CACvC4B,CAAAA,CAAS5B,CAAAA,CAAO,SAAA,CAClB0B,CAAAA,CAAE1B,CAAAA,CAAO,SAAS,CAAA,CACjB0B,CAAAA,CAA8B1B,CAAAA,CAAO,GAAG,CAAA,CAG7C,GAAI2B,CAAAA,EAAW,IAAA,CAA8B,OAAO,CAAA,CACpD,GAAIC,CAAAA,EAAW,KAA8B,OAAO,GAAA,CAGpD,IAAIC,CAAAA,CAAa,CAAA,CACjB,OAAI,OAAOF,CAAAA,EAAW,UAAY,OAAOC,CAAAA,EAAW,QAAA,CAClDC,CAAAA,CAAaF,CAAAA,CAASC,CAAAA,CAEtBC,CAAAA,CAAa,MAAA,CAAOF,CAAM,CAAA,CAAE,aAAA,CAAc,MAAA,CAAOC,CAAM,CAAC,CAAA,CAGnD9B,CAAAA,GAAkB,MAAQ+B,CAAAA,CAAa,CAACA,CACjD,CAAC,CAAA,CAEML,CACT,CAAA,CAAG,CAACL,CAAAA,CAAoBtB,CAAAA,CAAYC,CAAAA,CAAenD,CAAO,CAAC,CAAA,CAKrDmF,EAAAA,CAAgB3C,SAAAA,CAAQ,IAAM,CAMlC,GALI,CAACtB,CAAAA,EAKDgB,CAAAA,EAA0BX,CAAAA,GAAe,MAAA,CAC3C,OAAOqD,CAAAA,CAIT,IAAMQ,CAAAA,CAAAA,CAAcxB,CAAAA,CAAc,CAAA,EAAKC,CAAAA,CACjCwB,CAAAA,CAAWD,CAAAA,CAAavB,EAE9B,OAAOe,CAAAA,CAAW,KAAA,CAAMQ,CAAAA,CAAYC,CAAQ,CAC9C,CAAA,CAAG,CACDT,EACAhB,CAAAA,CACAC,CAAAA,CACA3C,CAAAA,CACAgB,CAAAA,CACAX,CACF,CAAC,CAAA,CAKmBiB,UAAQ,IACrBtB,CAAAA,CAEI,IAAA,CAAK,IAAA,CADVgB,CAAAA,EAA0BX,CAAAA,GAAe,MAAA,CAC1BA,CAAAA,CAAasC,CAAAA,CAEfe,CAAAA,CAAW,MAAA,CAASf,CAFG,CAAA,CAFZ,CAAA,CAK3B,CACD3C,CAAAA,CACAgB,EACAX,CAAAA,CACAsC,CAAAA,CACAe,CAAAA,CAAW,MACb,CAAC,CAAA,KAGKU,EAAAA,CAAeC,aAAAA,CAClB9C,GAAkB,CACjBF,CAAAA,CAAcE,CAAK,CAAA,CACdP,CAAAA,EACH4B,CAAAA,CAAe,CAAC,EAEpB,EACA,CAACvB,CAAAA,CAAeuB,CAAAA,CAAgB5B,CAAsB,CACxD,CAAA,CAEMsD,EAAAA,CAAqBD,aAAAA,CACzB,CAAChB,CAAAA,CAAa9B,CAAAA,GAAmB,CAC/B,IAAMgD,CAAAA,CAAa,CACjB,GAAG7C,EACH,CAAC2B,CAAG,EAAG9B,CACT,CAAA,CACAI,CAAAA,CAAiB4C,CAAU,CAAA,CACtBvD,GACH4B,CAAAA,CAAe,CAAC,EAEpB,CAAA,CACA,CAAClB,CAAAA,CAAeC,CAAAA,CAAkBiB,CAAAA,CAAgB5B,CAAsB,CAC1E,CAAA,CAEMwD,EAAAA,CAAaH,aAAAA,CACjB,CAAClC,CAAAA,CAAwBsC,CAAAA,GAA8B,CACrDvC,CAAAA,CAAcC,CAAAA,CAAO,GAAG,CAAA,CACxBC,CAAAA,CAAiBqC,CAAS,EAC5B,CAAA,CACA,CAACvC,CAAAA,CAAeE,CAAgB,CAClC,CAAA,CAEMsC,EAAAA,CAAmBL,aAAAA,CACvB,CAACxB,CAAAA,CAAc8B,CAAAA,GAAwB,CACrC/B,CAAAA,CAAeC,CAAI,CAAA,CACf8B,CAAAA,GAAgBhC,CAAAA,GAClBG,CAAAA,CAAY6B,CAAW,CAAA,CACvB/B,CAAAA,CAAe,CAAC,CAAA,EAEpB,CAAA,CACA,CAACD,CAAAA,CAAUC,CAAAA,CAAgBE,CAAW,CACxC,EAGA,OAAA8B,kBAAAA,CAAM,SAAA,CAAU,IAAM,CAChB1F,GACFA,CAAAA,CAASkC,CAAAA,CAAY4B,CAAkB,EAE3C,CAAA,CAAG,CAAC5B,CAAAA,CAAY4B,CAAAA,CAAoB9D,CAAQ,CAAC,CAAA,CAE7C0F,kBAAAA,CAAM,SAAA,CAAU,IAAM,CAChBrF,CAAAA,EACFA,CAAAA,CAASmC,EAAe4B,CAAkB,EAE9C,CAAA,CAAG,CAAC5B,CAAAA,CAAe4B,CAAAA,CAAoB/D,CAAQ,CAAC,CAAA,CAG9CqF,kBAAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,QAAA,CAAA,CAAA,CAEXtE,CAAAA,EAAeC,CAAAA,EAAelB,GAAcC,CAAAA,CAAQ,MAAA,CAAS,CAAA,GAC7DsF,kBAAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWC,mBAAAA,CAAGnG,IAAkB,CAAG8B,EAAkB,CAAA,CAAA,CAEvDF,CAAAA,EAAcvB,CAAAA,EACb6F,kBAAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,UAAWC,mBAAAA,CAAG,sBAAA,CAAwBpE,EAAkB,CAAA,CAAA,CAC3DmE,kBAAAA,CAAA,aAAA,CAACE,mBAAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,WAAA,CAAa9F,EAAAA,CACb,KAAA,CAAOoC,CAAAA,CACP,QAAA,CAAW,CAAA,EAAMgD,GAAa,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC5C,SAAA,CAAU,QAAA,CACV,YAAA,CAAW,cAAA,CACb,CACF,CAAA,CAID7D,CAAAA,EAAelB,CAAAA,EAAcC,CAAAA,CAAQ,MAAA,CAAS,CAAA,EAC7CsF,kBAAAA,CAAA,aAAA,CAAC,OAAI,SAAA,CAAU,mCAAA,CAAA,CACZtF,CAAAA,CAAQ,GAAA,CAAKiE,CAAAA,EAAW,CACvB,IAAMC,CAAAA,CAAc9B,CAAAA,CAAc6B,CAAAA,CAAO,GAAG,CAAA,CAE5C,OAAIA,CAAAA,CAAO,IAAA,GAAS,QAAA,EAAYA,EAAO,OAAA,CAEnCqB,kBAAAA,CAAA,aAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKrB,CAAAA,CAAO,GAAA,CACZ,KAAA,CAAO,MAAA,CAAOC,CAAAA,EAAe,EAAE,CAAA,CAC/B,QAAA,CAAWuB,CAAAA,EACTT,EAAAA,CACEf,CAAAA,CAAO,IACPwB,CAAAA,CAAE,MAAA,CAAO,KAAA,EAAS,MACpB,CAAA,CAEF,SAAA,CAAU,uHAAA,CACV,YAAA,CAAY,CAAA,UAAA,EAAaxB,CAAAA,CAAO,GAAG,CAAA,CAAA,CAAA,CAEnCqB,kBAAAA,CAAA,aAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,IAAG,MAAA,CAAKrB,CAAAA,CAAO,GAAI,CAAA,CAChCA,CAAAA,CAAO,OAAA,CAAQ,GAAA,CAAKyB,CAAAA,EACnBJ,mBAAA,aAAA,CAAC,QAAA,CAAA,CAAO,GAAA,CAAKI,CAAAA,CAAO,KAAA,CAAO,KAAA,CAAO,MAAA,CAAOA,CAAAA,CAAO,KAAK,CAAA,CAAA,CAClDA,CAAAA,CAAO,KACV,CACD,CACH,CAAA,CAKFJ,kBAAAA,CAAA,aAAA,CAACE,mBAAAA,CAAA,CACC,GAAA,CAAKvB,CAAAA,CAAO,GAAA,CACZ,IAAA,CAAMA,CAAAA,CAAO,IAAA,GAAS,SAAW,QAAA,CAAW,MAAA,CAC5C,WAAA,CACEA,CAAAA,CAAO,WAAA,EAAe,CAAA,OAAA,EAAUA,CAAAA,CAAO,GAAG,MAE5C,KAAA,CAAO,MAAA,CAAOC,CAAAA,EAAe,EAAE,CAAA,CAC/B,QAAA,CAAWuB,CAAAA,EACTT,EAAAA,CACEf,EAAO,GAAA,CACPA,CAAAA,CAAO,IAAA,GAAS,QAAA,CACZ,MAAA,CAAOwB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACrBA,CAAAA,CAAE,MAAA,CAAO,KACf,CAAA,CAEF,SAAA,CAAU,eAAA,CACV,YAAA,CAAY,aAAaxB,CAAAA,CAAO,GAAG,CAAA,CAAA,CACrC,CAEJ,CAAC,CAAA,CAGA,MAAA,CAAO,IAAA,CAAK7B,CAAa,CAAA,CAAE,MAAA,CAAS,CAAA,EACnCkD,kBAAAA,CAAA,aAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAS,IAAMjD,CAAAA,CAAiB,EAAE,CAAA,CAClC,SAAA,CAAU,yEAAA,CACV,YAAA,CAAW,mBAAA,CAAA,CACZ,eAED,CAEJ,CAEJ,CAAA,CAIFiD,kBAAAA,CAAA,aAAA,CAACK,mBAAAA,CAAA,CACE,GAAGrE,EAAAA,CACJ,IAAA,CAAMqD,EAAAA,CACN,OAAA,CAASnF,CAAAA,CACT,MAAA,CAAQ4B,EAAAA,CACR,SAAA,CAAWC,EAAAA,CACV,GAAIqB,CAAAA,EAAc,CACjB,UAAA,CAAAA,CAAAA,CACA,aAAA,CAAAC,CACF,CAAA,CACA,MAAA,CAAQuC,EAAAA,CACP,GAAIxE,CAAAA,EAAkB,CACrB,UAAA,CAAY,CACV,OAAA,CAAS0C,CAAAA,CACT,QAAA,CAAUC,CAAAA,CACV,KAAA,CACE3B,CAAAA,EAA0BX,CAAAA,GAAe,MAAA,CACrCA,EACAqD,CAAAA,CAAW,MAAA,CACjB,QAAA,CAAUgB,EAAAA,CACV,eAAA,CAAiB,IACnB,CACF,CAAA,CACF,EAGC1E,CAAAA,GACEgB,CAAAA,EAA0BX,CAAAA,GAAe,MAAA,CACtCA,CAAAA,CAAa,CAAA,CACbqD,CAAAA,CAAW,MAAA,CAAS,IACtBkB,kBAAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8CAAA,CAAA,CACZ5D,CAAAA,EAA0BX,CAAAA,GAAe,MAAA,CACxCuE,kBAAAA,CAAA,aAAA,CAAAA,kBAAAA,CAAA,QAAA,CAAA,IAAA,CAAE,UAAA,CAAA,CACUlC,CAAAA,CAAc,CAAA,EAAKC,CAAAA,CAAW,EAAE,KAAA,CAAI,GAAA,CAC7C,IAAA,CAAK,GAAA,CAAID,CAAAA,CAAcC,CAAAA,CAAUtC,CAAU,CAAA,CAAE,OAAKA,CAAAA,CAAY,GAAA,CAAI,SAAA,CAElEe,CAAAA,EAAc,aACjB,CAAA,CAEAwD,kBAAAA,CAAA,aAAA,CAAAA,mBAAA,QAAA,CAAA,IAAA,CAAE,UAAA,CAAA,CACUlC,CAAAA,CAAc,CAAA,EAAKC,CAAAA,CAAW,CAAA,CAAE,KAAA,CAAI,GAAA,CAC7C,IAAA,CAAK,GAAA,CAAID,CAAAA,CAAcC,CAAAA,CAAUe,CAAAA,CAAW,MAAM,CAAA,CAAE,KAAA,CAAI,IACxDA,CAAAA,CAAW,MAAA,CAAO,UAAA,CAClBtC,CAAAA,EAAc,CAAA,gBAAA,EAAmBvC,CAAAA,CAAY,MAAM,CAAA,OAAA,CACtD,CAEJ,CAEN,CAEJ,CAEAD,EAAAA,CAAU,WAAA,CAAc,WAAA,CAIjB,IAAMsG,EAAAA,CAAoBC,oBAAKvG,EAAS","file":"chunk-ZQDFYSZB.cjs","sourcesContent":["import React, { useState, useMemo, useCallback } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\nimport { Table, TableColumn, TableProps } from \"./table\";\nimport { Input } from \"./input\";\n\n// Filter types\nexport type FilterType = \"text\" | \"select\" | \"number\" | \"date\" | \"boolean\";\n\nexport interface ColumnFilter<T = Record<string, unknown>> {\n key: string;\n type: FilterType;\n options?: Array<{ label: string; value: string | number }>;\n placeholder?: string;\n filterFn?: (value: unknown, record: T) => boolean;\n}\n\nexport interface DataTableProps<T = Record<string, unknown>> extends Omit<\n TableProps<T>,\n \"data\" | \"onSort\" | \"sortColumn\" | \"sortDirection\"\n> {\n data: T[];\n columns: TableColumn<T>[];\n\n // Search\n searchable?: boolean;\n searchPlaceholder?: string;\n searchKeys?: Array<keyof T | string>;\n onSearch?: (searchTerm: string, filteredData: T[]) => void;\n\n // Controlled search (for server-side filtering)\n searchTerm?: string;\n onSearchTermChange?: (searchTerm: string) => void;\n\n // Filtering\n filterable?: boolean;\n filters?: ColumnFilter<T>[];\n onFilter?: (filters: Record<string, unknown>, filteredData: T[]) => void;\n\n // Controlled filters (for server-side filtering)\n columnFilters?: Record<string, unknown>;\n onColumnFiltersChange?: (filters: Record<string, unknown>) => void;\n\n // Sorting (enhanced)\n defaultSortColumn?: string;\n defaultSortDirection?: \"asc\" | \"desc\";\n\n // Controlled sorting (for server-side sorting)\n sortColumn?: string;\n sortDirection?: \"asc\" | \"desc\";\n onSortChange?: (column: string, direction: \"asc\" | \"desc\") => void;\n\n // Pagination (enhanced)\n defaultPageSize?: number;\n showPagination?: boolean;\n\n // Controlled pagination (for server-side pagination)\n currentPage?: number;\n pageSize?: number;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n totalItems?: number; // Required for server-side pagination\n\n // UI\n showSearch?: boolean;\n showFilters?: boolean;\n filterBarClassName?: string;\n searchBarClassName?: string;\n}\n\n// Filter bar component\nconst filterBarVariants = cva(\n \"flex flex-wrap items-center gap-2 p-4 bg-muted border-b border-border\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n compact: \"p-2 bg-card\",\n minimal: \"p-2 bg-transparent border-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport function DataTable<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n data: initialData,\n columns,\n searchable = true,\n searchPlaceholder = \"Search...\",\n searchKeys,\n onSearch,\n searchTerm: controlledSearchTerm,\n onSearchTermChange,\n filterable = false,\n filters = [],\n onFilter,\n columnFilters: controlledColumnFilters,\n onColumnFiltersChange,\n defaultSortColumn,\n defaultSortDirection = \"asc\",\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n onSortChange,\n defaultPageSize = 10,\n showPagination = true,\n currentPage: controlledCurrentPage,\n pageSize: controlledPageSize,\n onPageChange,\n onPageSizeChange,\n totalItems,\n showSearch = true,\n showFilters = true,\n filterBarClassName,\n searchBarClassName,\n rowKey = \"id\",\n emptyText = \"No data found\",\n ...tableProps\n}: DataTableProps<T>) {\n // Determine if component is in controlled mode\n const isControlledSearch = controlledSearchTerm !== undefined;\n const isControlledFilters = controlledColumnFilters !== undefined;\n const isControlledSort = controlledSortColumn !== undefined;\n const isControlledPagination = controlledCurrentPage !== undefined;\n\n // Search state (controlled or uncontrolled)\n const [internalSearchTerm, setInternalSearchTerm] = useState(\"\");\n const searchTerm = isControlledSearch\n ? controlledSearchTerm\n : internalSearchTerm;\n const setSearchTerm = useMemo(\n () =>\n isControlledSearch\n ? (value: string) => onSearchTermChange?.(value)\n : setInternalSearchTerm,\n [isControlledSearch, onSearchTermChange],\n );\n\n // Filter state (controlled or uncontrolled)\n const [internalColumnFilters, setInternalColumnFilters] = useState<\n Record<string, unknown>\n >({});\n const columnFilters = isControlledFilters\n ? controlledColumnFilters\n : internalColumnFilters;\n const setColumnFilters = useMemo(\n () =>\n isControlledFilters\n ? (filters: Record<string, unknown>) => onColumnFiltersChange?.(filters)\n : setInternalColumnFilters,\n [isControlledFilters, onColumnFiltersChange],\n );\n\n // Sort state (controlled or uncontrolled)\n const [internalSortColumn, setInternalSortColumn] = useState<\n string | undefined\n >(defaultSortColumn);\n const [internalSortDirection, setInternalSortDirection] = useState<\n \"asc\" | \"desc\"\n >(defaultSortDirection);\n const sortColumn = isControlledSort\n ? controlledSortColumn\n : internalSortColumn;\n const sortDirection = isControlledSort\n ? controlledSortDirection\n : internalSortDirection;\n const setSortColumn = useMemo(\n () =>\n isControlledSort\n ? (column: string | undefined) => {\n if (column && onSortChange && sortDirection) {\n onSortChange(column, sortDirection);\n }\n }\n : setInternalSortColumn,\n [isControlledSort, onSortChange, sortDirection],\n );\n const setSortDirection = useMemo(\n () =>\n isControlledSort\n ? (dir: \"asc\" | \"desc\") => {\n if (sortColumn && onSortChange) {\n onSortChange(sortColumn, dir);\n }\n }\n : setInternalSortDirection,\n [isControlledSort, onSortChange, sortColumn],\n );\n\n // Pagination state (controlled or uncontrolled)\n const [internalCurrentPage, setInternalCurrentPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n const currentPage = isControlledPagination\n ? controlledCurrentPage\n : internalCurrentPage;\n const pageSize =\n controlledPageSize !== undefined ? controlledPageSize : internalPageSize;\n const setCurrentPage = useMemo(\n () =>\n isControlledPagination\n ? (page: number) => onPageChange?.(page)\n : setInternalCurrentPage,\n [isControlledPagination, onPageChange],\n );\n const setPageSize = useMemo(\n () =>\n onPageSizeChange\n ? (size: number) => onPageSizeChange(size)\n : setInternalPageSize,\n [onPageSizeChange],\n );\n\n // Apply search\n const searchFilteredData = useMemo(() => {\n if (!searchable || !searchTerm.trim()) {\n return initialData;\n }\n\n const term = searchTerm.toLowerCase();\n const keys =\n searchKeys ||\n columns.map((col) => col.dataIndex || col.key).filter(Boolean);\n\n return initialData.filter((record) => {\n return keys.some((key) => {\n const value =\n typeof key === \"string\"\n ? (record as Record<string, unknown>)[key]\n : record[key as keyof T];\n\n if (value === null || value === undefined) return false;\n\n return String(value).toLowerCase().includes(term);\n });\n });\n }, [initialData, searchTerm, searchable, searchKeys, columns]);\n\n // Apply column filters\n const filterFilteredData = useMemo(() => {\n if (\n !filterable ||\n filters.length === 0 ||\n Object.keys(columnFilters).length === 0\n ) {\n return searchFilteredData;\n }\n\n return searchFilteredData.filter((record) => {\n return filters.every((filter) => {\n const filterValue = columnFilters[filter.key];\n\n // Skip if no filter value\n if (\n filterValue === undefined ||\n filterValue === null ||\n filterValue === \"\"\n ) {\n return true;\n }\n\n // Use custom filter function if provided\n if (filter.filterFn) {\n return filter.filterFn(filterValue, record);\n }\n\n // Default filtering logic\n const recordValue = (record as Record<string, unknown>)[filter.key];\n\n switch (filter.type) {\n case \"text\":\n return String(recordValue)\n .toLowerCase()\n .includes(String(filterValue).toLowerCase());\n case \"number\":\n return Number(recordValue) === Number(filterValue);\n case \"boolean\":\n return Boolean(recordValue) === Boolean(filterValue);\n case \"select\":\n return String(recordValue) === String(filterValue);\n default:\n return String(recordValue).includes(String(filterValue));\n }\n });\n });\n }, [searchFilteredData, columnFilters, filterable, filters]);\n\n // Apply sorting\n const sortedData = useMemo(() => {\n if (!sortColumn) {\n return filterFilteredData;\n }\n\n const sorted = [...filterFilteredData];\n const column = columns.find((col) => col.key === sortColumn);\n\n if (!column || !column.sortable) {\n return sorted;\n }\n\n sorted.sort((a, b) => {\n const aValue = column.dataIndex\n ? a[column.dataIndex]\n : (a as Record<string, unknown>)[column.key];\n const bValue = column.dataIndex\n ? b[column.dataIndex]\n : (b as Record<string, unknown>)[column.key];\n\n // Handle null/undefined\n if (aValue === null || aValue === undefined) return 1;\n if (bValue === null || bValue === undefined) return -1;\n\n // Compare values\n let comparison = 0;\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n comparison = aValue - bValue;\n } else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n return sortDirection === \"asc\" ? comparison : -comparison;\n });\n\n return sorted;\n }, [filterFilteredData, sortColumn, sortDirection, columns]);\n\n // Apply pagination\n // In controlled mode with server-side pagination, use provided data directly\n // In uncontrolled mode, slice the data client-side\n const paginatedData = useMemo(() => {\n if (!showPagination) {\n return sortedData;\n }\n\n // If in controlled pagination mode with totalItems, assume data is already paginated\n if (isControlledPagination && totalItems !== undefined) {\n return sortedData; // Data is already paginated server-side\n }\n\n // Client-side pagination\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n\n return sortedData.slice(startIndex, endIndex);\n }, [\n sortedData,\n currentPage,\n pageSize,\n showPagination,\n isControlledPagination,\n totalItems,\n ]);\n\n // Calculate total pages for pagination display\n // Note: Currently not used but kept for future pagination UI enhancements\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _totalPages = useMemo(() => {\n if (!showPagination) return 1;\n if (isControlledPagination && totalItems !== undefined) {\n return Math.ceil(totalItems / pageSize);\n }\n return Math.ceil(sortedData.length / pageSize);\n }, [\n showPagination,\n isControlledPagination,\n totalItems,\n pageSize,\n sortedData.length,\n ]);\n\n // Callbacks\n const handleSearch = useCallback(\n (value: string) => {\n setSearchTerm(value);\n if (!isControlledPagination) {\n setCurrentPage(1); // Reset to first page on search (only in uncontrolled mode)\n }\n },\n [setSearchTerm, setCurrentPage, isControlledPagination],\n );\n\n const handleFilterChange = useCallback(\n (key: string, value: unknown) => {\n const newFilters = {\n ...columnFilters,\n [key]: value,\n };\n setColumnFilters(newFilters);\n if (!isControlledPagination) {\n setCurrentPage(1); // Reset to first page on filter (only in uncontrolled mode)\n }\n },\n [columnFilters, setColumnFilters, setCurrentPage, isControlledPagination],\n );\n\n const handleSort = useCallback(\n (column: TableColumn<T>, direction: \"asc\" | \"desc\") => {\n setSortColumn(column.key);\n setSortDirection(direction);\n },\n [setSortColumn, setSortDirection],\n );\n\n const handlePageChange = useCallback(\n (page: number, newPageSize: number) => {\n setCurrentPage(page);\n if (newPageSize !== pageSize) {\n setPageSize(newPageSize);\n setCurrentPage(1); // Reset to first page when page size changes\n }\n },\n [pageSize, setCurrentPage, setPageSize],\n );\n\n // Notify callbacks\n React.useEffect(() => {\n if (onSearch) {\n onSearch(searchTerm, searchFilteredData);\n }\n }, [searchTerm, searchFilteredData, onSearch]);\n\n React.useEffect(() => {\n if (onFilter) {\n onFilter(columnFilters, filterFilteredData);\n }\n }, [columnFilters, filterFilteredData, onFilter]);\n\n return (\n <div className=\"w-full\">\n {/* Search and Filter Bar */}\n {(showSearch || (showFilters && filterable && filters.length > 0)) && (\n <div className={cn(filterBarVariants(), filterBarClassName)}>\n {/* Search */}\n {showSearch && searchable && (\n <div className={cn(\"flex-1 min-w-[200px]\", searchBarClassName)}>\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(e) => handleSearch(e.target.value)}\n className=\"w-full\"\n aria-label=\"Search table\"\n />\n </div>\n )}\n\n {/* Column Filters */}\n {showFilters && filterable && filters.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {filters.map((filter) => {\n const filterValue = columnFilters[filter.key];\n\n if (filter.type === \"select\" && filter.options) {\n return (\n <select\n key={filter.key}\n value={String(filterValue || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.key,\n e.target.value || undefined,\n )\n }\n className=\"rounded-md border border-input px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-primary\"\n aria-label={`Filter by ${filter.key}`}\n >\n <option value=\"\">All {filter.key}</option>\n {filter.options.map((option) => (\n <option key={option.value} value={String(option.value)}>\n {option.label}\n </option>\n ))}\n </select>\n );\n }\n\n return (\n <Input\n key={filter.key}\n type={filter.type === \"number\" ? \"number\" : \"text\"}\n placeholder={\n filter.placeholder || `Filter ${filter.key}...`\n }\n value={String(filterValue || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.key,\n filter.type === \"number\"\n ? Number(e.target.value)\n : e.target.value,\n )\n }\n className=\"min-w-[150px]\"\n aria-label={`Filter by ${filter.key}`}\n />\n );\n })}\n\n {/* Clear Filters */}\n {Object.keys(columnFilters).length > 0 && (\n <button\n type=\"button\"\n onClick={() => setColumnFilters({})}\n className=\"px-3 py-2 text-sm text-muted-foreground hover:text-foreground underline\"\n aria-label=\"Clear all filters\"\n >\n Clear filters\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Table */}\n <Table\n {...tableProps}\n data={paginatedData}\n columns={columns}\n rowKey={rowKey}\n emptyText={emptyText}\n {...(sortColumn && {\n sortColumn,\n sortDirection,\n })}\n onSort={handleSort}\n {...(showPagination && {\n pagination: {\n current: currentPage,\n pageSize: pageSize,\n total:\n isControlledPagination && totalItems !== undefined\n ? totalItems\n : sortedData.length,\n onChange: handlePageChange,\n showSizeChanger: true,\n },\n })}\n />\n\n {/* Results Summary */}\n {showPagination &&\n (isControlledPagination && totalItems !== undefined\n ? totalItems > 0\n : sortedData.length > 0) && (\n <div className=\"mt-2 px-4 py-2 text-sm text-muted-foreground\">\n {isControlledPagination && totalItems !== undefined ? (\n <>\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\n {Math.min(currentPage * pageSize, totalItems)} of {totalItems}{\" \"}\n results\n {searchTerm && \" (filtered)\"}\n </>\n ) : (\n <>\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\n {Math.min(currentPage * pageSize, sortedData.length)} of{\" \"}\n {sortedData.length} results\n {searchTerm && ` (filtered from ${initialData.length} total)`}\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n\nDataTable.displayName = \"DataTable\";\n\n// Memoize DataTable for performance optimization\n// DataTable is a complex component with filtering, sorting, and pagination\nexport const DataTableMemoized = memo(DataTable) as typeof DataTable;\n"]}
1
+ {"version":3,"sources":["../src/components/core/data-table.tsx"],"names":["filterBarVariants","cva","DataTable","initialData","columns","searchable","searchPlaceholder","searchKeys","onSearch","controlledSearchTerm","onSearchTermChange","filterable","filters","onFilter","controlledColumnFilters","onColumnFiltersChange","defaultSortColumn","defaultSortDirection","controlledSortColumn","controlledSortDirection","onSortChange","defaultPageSize","showPagination","controlledCurrentPage","controlledPageSize","onPageChange","onPageSizeChange","totalItems","showSearch","showFilters","filterBarClassName","searchBarClassName","rowKey","emptyText","tableProps","isControlledSearch","isControlledFilters","isControlledSort","isControlledPagination","internalSearchTerm","setInternalSearchTerm","useState","searchTerm","setSearchTerm","useMemo","value","internalColumnFilters","setInternalColumnFilters","columnFilters","setColumnFilters","internalSortColumn","setInternalSortColumn","internalSortDirection","setInternalSortDirection","sortColumn","sortDirection","setSortColumn","column","setSortDirection","dir","internalCurrentPage","setInternalCurrentPage","internalPageSize","setInternalPageSize","currentPage","pageSize","setCurrentPage","page","setPageSize","size","searchFilteredData","term","keys","col","record","key","filterFilteredData","filter","filterValue","recordValue","sortedData","sorted","a","b","aValue","bValue","comparison","paginatedData","startIndex","endIndex","handleSearch","useCallback","handleFilterChange","newFilters","handleSort","direction","handlePageChange","newPageSize","React","cn","Input","e","option","Table","DataTableMemoized","memo"],"mappings":"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","file":"chunk-AYEM2M4H.cjs","sourcesContent":["import React, { useState, useMemo, useCallback } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\nimport { Table, TableColumn, TableProps } from \"./table\";\nimport { Input } from \"./input\";\n\n// Filter types\nexport type FilterType = \"text\" | \"select\" | \"number\" | \"date\" | \"boolean\";\n\nexport interface ColumnFilter<T = Record<string, unknown>> {\n key: string;\n type: FilterType;\n options?: Array<{ label: string; value: string | number }>;\n placeholder?: string;\n filterFn?: (value: unknown, record: T) => boolean;\n}\n\nexport interface DataTableProps<T = Record<string, unknown>> extends Omit<\n TableProps<T>,\n \"data\" | \"onSort\" | \"sortColumn\" | \"sortDirection\"\n> {\n data: T[];\n columns: TableColumn<T>[];\n\n // Search\n searchable?: boolean;\n searchPlaceholder?: string;\n searchKeys?: Array<keyof T | string>;\n onSearch?: (searchTerm: string, filteredData: T[]) => void;\n\n // Controlled search (for server-side filtering)\n searchTerm?: string;\n onSearchTermChange?: (searchTerm: string) => void;\n\n // Filtering\n filterable?: boolean;\n filters?: ColumnFilter<T>[];\n onFilter?: (filters: Record<string, unknown>, filteredData: T[]) => void;\n\n // Controlled filters (for server-side filtering)\n columnFilters?: Record<string, unknown>;\n onColumnFiltersChange?: (filters: Record<string, unknown>) => void;\n\n // Sorting (enhanced)\n defaultSortColumn?: string;\n defaultSortDirection?: \"asc\" | \"desc\";\n\n // Controlled sorting (for server-side sorting)\n sortColumn?: string;\n sortDirection?: \"asc\" | \"desc\";\n onSortChange?: (column: string, direction: \"asc\" | \"desc\") => void;\n\n // Pagination (enhanced)\n defaultPageSize?: number;\n showPagination?: boolean;\n\n // Controlled pagination (for server-side pagination)\n currentPage?: number;\n pageSize?: number;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n totalItems?: number; // Required for server-side pagination\n\n // UI\n showSearch?: boolean;\n showFilters?: boolean;\n filterBarClassName?: string;\n searchBarClassName?: string;\n}\n\n// Filter bar component\nconst filterBarVariants = cva(\n \"flex flex-wrap items-center gap-2 p-4 bg-muted border-b border-border\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n compact: \"p-2 bg-card\",\n minimal: \"p-2 bg-transparent border-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport function DataTable<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n data: initialData,\n columns,\n searchable = true,\n searchPlaceholder = \"Search...\",\n searchKeys,\n onSearch,\n searchTerm: controlledSearchTerm,\n onSearchTermChange,\n filterable = false,\n filters = [],\n onFilter,\n columnFilters: controlledColumnFilters,\n onColumnFiltersChange,\n defaultSortColumn,\n defaultSortDirection = \"asc\",\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n onSortChange,\n defaultPageSize = 10,\n showPagination = true,\n currentPage: controlledCurrentPage,\n pageSize: controlledPageSize,\n onPageChange,\n onPageSizeChange,\n totalItems,\n showSearch = true,\n showFilters = true,\n filterBarClassName,\n searchBarClassName,\n rowKey = \"id\",\n emptyText = \"No data found\",\n ...tableProps\n}: DataTableProps<T>) {\n // Determine if component is in controlled mode\n const isControlledSearch = controlledSearchTerm !== undefined;\n const isControlledFilters = controlledColumnFilters !== undefined;\n const isControlledSort = controlledSortColumn !== undefined;\n const isControlledPagination = controlledCurrentPage !== undefined;\n\n // Search state (controlled or uncontrolled)\n const [internalSearchTerm, setInternalSearchTerm] = useState(\"\");\n const searchTerm = isControlledSearch\n ? controlledSearchTerm\n : internalSearchTerm;\n const setSearchTerm = useMemo(\n () =>\n isControlledSearch\n ? (value: string) => onSearchTermChange?.(value)\n : setInternalSearchTerm,\n [isControlledSearch, onSearchTermChange],\n );\n\n // Filter state (controlled or uncontrolled)\n const [internalColumnFilters, setInternalColumnFilters] = useState<\n Record<string, unknown>\n >({});\n const columnFilters = isControlledFilters\n ? controlledColumnFilters\n : internalColumnFilters;\n const setColumnFilters = useMemo(\n () =>\n isControlledFilters\n ? (filters: Record<string, unknown>) => onColumnFiltersChange?.(filters)\n : setInternalColumnFilters,\n [isControlledFilters, onColumnFiltersChange],\n );\n\n // Sort state (controlled or uncontrolled)\n const [internalSortColumn, setInternalSortColumn] = useState<\n string | undefined\n >(defaultSortColumn);\n const [internalSortDirection, setInternalSortDirection] = useState<\n \"asc\" | \"desc\"\n >(defaultSortDirection);\n const sortColumn = isControlledSort\n ? controlledSortColumn\n : internalSortColumn;\n const sortDirection = isControlledSort\n ? controlledSortDirection\n : internalSortDirection;\n const setSortColumn = useMemo(\n () =>\n isControlledSort\n ? (column: string | undefined) => {\n if (column && onSortChange && sortDirection) {\n onSortChange(column, sortDirection);\n }\n }\n : setInternalSortColumn,\n [isControlledSort, onSortChange, sortDirection],\n );\n const setSortDirection = useMemo(\n () =>\n isControlledSort\n ? (dir: \"asc\" | \"desc\") => {\n if (sortColumn && onSortChange) {\n onSortChange(sortColumn, dir);\n }\n }\n : setInternalSortDirection,\n [isControlledSort, onSortChange, sortColumn],\n );\n\n // Pagination state (controlled or uncontrolled)\n const [internalCurrentPage, setInternalCurrentPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n const currentPage = isControlledPagination\n ? controlledCurrentPage\n : internalCurrentPage;\n const pageSize =\n controlledPageSize !== undefined ? controlledPageSize : internalPageSize;\n const setCurrentPage = useMemo(\n () =>\n isControlledPagination\n ? (page: number) => onPageChange?.(page)\n : setInternalCurrentPage,\n [isControlledPagination, onPageChange],\n );\n const setPageSize = useMemo(\n () =>\n onPageSizeChange\n ? (size: number) => onPageSizeChange(size)\n : setInternalPageSize,\n [onPageSizeChange],\n );\n\n // Apply search\n const searchFilteredData = useMemo(() => {\n if (!searchable || !searchTerm.trim()) {\n return initialData;\n }\n\n const term = searchTerm.toLowerCase();\n const keys =\n searchKeys ||\n columns.map((col) => col.dataIndex || col.key).filter(Boolean);\n\n return initialData.filter((record) => {\n return keys.some((key) => {\n const value =\n typeof key === \"string\"\n ? (record as Record<string, unknown>)[key]\n : record[key as keyof T];\n\n if (value === null || value === undefined) return false;\n\n return String(value).toLowerCase().includes(term);\n });\n });\n }, [initialData, searchTerm, searchable, searchKeys, columns]);\n\n // Apply column filters\n const filterFilteredData = useMemo(() => {\n if (\n !filterable ||\n filters.length === 0 ||\n Object.keys(columnFilters).length === 0\n ) {\n return searchFilteredData;\n }\n\n return searchFilteredData.filter((record) => {\n return filters.every((filter) => {\n const filterValue = columnFilters[filter.key];\n\n // Skip if no filter value\n if (\n filterValue === undefined ||\n filterValue === null ||\n filterValue === \"\"\n ) {\n return true;\n }\n\n // Use custom filter function if provided\n if (filter.filterFn) {\n return filter.filterFn(filterValue, record);\n }\n\n // Default filtering logic\n const recordValue = (record as Record<string, unknown>)[filter.key];\n\n switch (filter.type) {\n case \"text\":\n return String(recordValue)\n .toLowerCase()\n .includes(String(filterValue).toLowerCase());\n case \"number\":\n return Number(recordValue) === Number(filterValue);\n case \"boolean\":\n return Boolean(recordValue) === Boolean(filterValue);\n case \"select\":\n return String(recordValue) === String(filterValue);\n default:\n return String(recordValue).includes(String(filterValue));\n }\n });\n });\n }, [searchFilteredData, columnFilters, filterable, filters]);\n\n // Apply sorting\n const sortedData = useMemo(() => {\n if (!sortColumn) {\n return filterFilteredData;\n }\n\n const sorted = [...filterFilteredData];\n const column = columns.find((col) => col.key === sortColumn);\n\n if (!column || !column.sortable) {\n return sorted;\n }\n\n sorted.sort((a, b) => {\n const aValue = column.dataIndex\n ? a[column.dataIndex]\n : (a as Record<string, unknown>)[column.key];\n const bValue = column.dataIndex\n ? b[column.dataIndex]\n : (b as Record<string, unknown>)[column.key];\n\n // Handle null/undefined\n if (aValue === null || aValue === undefined) return 1;\n if (bValue === null || bValue === undefined) return -1;\n\n // Compare values\n let comparison = 0;\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n comparison = aValue - bValue;\n } else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n return sortDirection === \"asc\" ? comparison : -comparison;\n });\n\n return sorted;\n }, [filterFilteredData, sortColumn, sortDirection, columns]);\n\n // Apply pagination\n // In controlled mode with server-side pagination, use provided data directly\n // In uncontrolled mode, slice the data client-side\n const paginatedData = useMemo(() => {\n if (!showPagination) {\n return sortedData;\n }\n\n // If in controlled pagination mode with totalItems, assume data is already paginated\n if (isControlledPagination && totalItems !== undefined) {\n return sortedData; // Data is already paginated server-side\n }\n\n // Client-side pagination\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n\n return sortedData.slice(startIndex, endIndex);\n }, [\n sortedData,\n currentPage,\n pageSize,\n showPagination,\n isControlledPagination,\n totalItems,\n ]);\n\n // Calculate total pages for pagination display\n // Note: Currently not used but kept for future pagination UI enhancements\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _totalPages = useMemo(() => {\n if (!showPagination) return 1;\n if (isControlledPagination && totalItems !== undefined) {\n return Math.ceil(totalItems / pageSize);\n }\n return Math.ceil(sortedData.length / pageSize);\n }, [\n showPagination,\n isControlledPagination,\n totalItems,\n pageSize,\n sortedData.length,\n ]);\n\n // Callbacks\n const handleSearch = useCallback(\n (value: string) => {\n setSearchTerm(value);\n if (!isControlledPagination) {\n setCurrentPage(1); // Reset to first page on search (only in uncontrolled mode)\n }\n },\n [setSearchTerm, setCurrentPage, isControlledPagination],\n );\n\n const handleFilterChange = useCallback(\n (key: string, value: unknown) => {\n const newFilters = {\n ...columnFilters,\n [key]: value,\n };\n setColumnFilters(newFilters);\n if (!isControlledPagination) {\n setCurrentPage(1); // Reset to first page on filter (only in uncontrolled mode)\n }\n },\n [columnFilters, setColumnFilters, setCurrentPage, isControlledPagination],\n );\n\n const handleSort = useCallback(\n (column: TableColumn<T>, direction: \"asc\" | \"desc\") => {\n setSortColumn(column.key);\n setSortDirection(direction);\n },\n [setSortColumn, setSortDirection],\n );\n\n const handlePageChange = useCallback(\n (page: number, newPageSize: number) => {\n setCurrentPage(page);\n if (newPageSize !== pageSize) {\n setPageSize(newPageSize);\n setCurrentPage(1); // Reset to first page when page size changes\n }\n },\n [pageSize, setCurrentPage, setPageSize],\n );\n\n // Notify callbacks\n React.useEffect(() => {\n if (onSearch) {\n onSearch(searchTerm, searchFilteredData);\n }\n }, [searchTerm, searchFilteredData, onSearch]);\n\n React.useEffect(() => {\n if (onFilter) {\n onFilter(columnFilters, filterFilteredData);\n }\n }, [columnFilters, filterFilteredData, onFilter]);\n\n return (\n <div className=\"w-full\">\n {/* Search and Filter Bar */}\n {(showSearch || (showFilters && filterable && filters.length > 0)) && (\n <div className={cn(filterBarVariants(), filterBarClassName)}>\n {/* Search */}\n {showSearch && searchable && (\n <div className={cn(\"flex-1 min-w-[200px]\", searchBarClassName)}>\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(e) => handleSearch(e.target.value)}\n className=\"w-full\"\n aria-label=\"Search table\"\n />\n </div>\n )}\n\n {/* Column Filters */}\n {showFilters && filterable && filters.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {filters.map((filter) => {\n const filterValue = columnFilters[filter.key];\n\n if (filter.type === \"select\" && filter.options) {\n return (\n <select\n key={filter.key}\n value={String(filterValue || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.key,\n e.target.value || undefined,\n )\n }\n className=\"rounded-md border border-input px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-primary\"\n aria-label={`Filter by ${filter.key}`}\n >\n <option value=\"\">All {filter.key}</option>\n {filter.options.map((option) => (\n <option key={option.value} value={String(option.value)}>\n {option.label}\n </option>\n ))}\n </select>\n );\n }\n\n return (\n <Input\n key={filter.key}\n type={filter.type === \"number\" ? \"number\" : \"text\"}\n placeholder={\n filter.placeholder || `Filter ${filter.key}...`\n }\n value={String(filterValue || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.key,\n filter.type === \"number\"\n ? Number(e.target.value)\n : e.target.value,\n )\n }\n className=\"min-w-[150px]\"\n aria-label={`Filter by ${filter.key}`}\n />\n );\n })}\n\n {/* Clear Filters */}\n {Object.keys(columnFilters).length > 0 && (\n <button\n type=\"button\"\n onClick={() => setColumnFilters({})}\n className=\"px-3 py-2 text-sm text-muted-foreground hover:text-foreground underline\"\n aria-label=\"Clear all filters\"\n >\n Clear filters\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Table */}\n <Table\n {...tableProps}\n data={paginatedData}\n columns={columns}\n rowKey={rowKey}\n emptyText={emptyText}\n {...(sortColumn && {\n sortColumn,\n sortDirection,\n })}\n onSort={handleSort}\n {...(showPagination && {\n pagination: {\n current: currentPage,\n pageSize: pageSize,\n total:\n isControlledPagination && totalItems !== undefined\n ? totalItems\n : sortedData.length,\n onChange: handlePageChange,\n showSizeChanger: true,\n },\n })}\n />\n\n {/* Results Summary */}\n {showPagination &&\n (isControlledPagination && totalItems !== undefined\n ? totalItems > 0\n : sortedData.length > 0) && (\n <div className=\"mt-2 px-4 py-2 text-sm text-muted-foreground\">\n {isControlledPagination && totalItems !== undefined ? (\n <>\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\n {Math.min(currentPage * pageSize, totalItems)} of {totalItems}{\" \"}\n results\n {searchTerm && \" (filtered)\"}\n </>\n ) : (\n <>\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\n {Math.min(currentPage * pageSize, sortedData.length)} of{\" \"}\n {sortedData.length} results\n {searchTerm && ` (filtered from ${initialData.length} total)`}\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n\nDataTable.displayName = \"DataTable\";\n\n// Memoize DataTable for performance optimization\n// DataTable is a complex component with filtering, sorting, and pagination\nexport const DataTableMemoized = memo(DataTable) as typeof DataTable;\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {a}from'./chunk-AC2JBXHQ.js';import r from'react';import {cva}from'class-variance-authority';import {PawPrint,Bird,Fish,Dog,Cat,Butterfly,Bug,Anchor,Umbrella,Snowflake,Fire,Lightning,Sparkle,Crown,Medal,Trophy,Flag,Compass,Bookmark,Scroll,Ghost,Skull,Pill,Syringe,TestTube,Flask,Atom,Rocket,Alien,MapPin,Key,Gift,PuzzlePiece,GameController,Moon,Star,Planet,Mountains,Leaf,Flower,Tree,Wheelchair,Palette,Terminal,Code,PaintBrush,Wrench,ChartPie,ChartBar,ChartLine,Buildings,Briefcase,Lightbulb,GraduationCap,BookOpen,Book,StopCircle,PauseCircle,PlayCircle,MusicNote,TennisBall,SoccerBall,Football,Basketball,Hamburger,Pizza,Coffee,Bicycle,Boat,Airplane,Train,Bus,Car,Activity,Heart,Money,CreditCard,ShoppingBag,ShoppingCart,YoutubeLogo,LinkedinLogo,InstagramLogo,FacebookLogo,TwitterLogo,GithubLogo,CloudLightning,CloudSnow,CloudRain,Cloud,Sun,HardDrive,Cpu,BatteryWarning,WifiX,WifiHigh,ShieldCheck,Shield,EyeSlash,Eye,LockOpen,Lock,Timer,Calendar,Clock,Question,Info,Warning,XCircle,CheckCircle,FileImage,FilePdf,FileText,FolderOpen,Folder,File,VideoCamera,Image,Camera,SpeakerX,SpeakerLow,SpeakerHigh,Stop,Pause,Play,BellSlash,Bell,ChatCircle,Phone,Envelope,Share,Upload,Download,Copy,PencilSimple,Trash,X,Check,Minus,Plus,ArrowDown,ArrowUp,ArrowRight,ArrowLeft,CaretDown,CaretUp,CaretRight,CaretLeft,List,MagnifyingGlass,Gear,User,House}from'phosphor-react';var i={house:House,home:House,user:User,settings:Gear,search:MagnifyingGlass,menu:List,x:X,"chevron-left":CaretLeft,"chevron-right":CaretRight,"chevron-up":CaretUp,"chevron-down":CaretDown,"arrow-left":ArrowLeft,"arrow-right":ArrowRight,"arrow-up":ArrowUp,"arrow-down":ArrowDown,plus:Plus,minus:Minus,check:Check,"x-icon":X,trash:Trash,edit:PencilSimple,copy:Copy,download:Download,upload:Upload,share:Share,heart:Heart,star:Star,bookmark:Bookmark,mail:Envelope,phone:Phone,"message-circle":ChatCircle,bell:Bell,"bell-slash":BellSlash,play:Play,pause:Pause,stop:Stop,"volume-high":SpeakerHigh,"volume-low":SpeakerLow,"volume-x":SpeakerX,camera:Camera,image:Image,video:VideoCamera,file:File,folder:Folder,"folder-open":FolderOpen,"file-text":FileText,"file-pdf":FilePdf,"file-image":FileImage,"check-circle":CheckCircle,"x-circle":XCircle,warning:Warning,info:Info,question:Question,clock:Clock,calendar:Calendar,timer:Timer,lock:Lock,"lock-open":LockOpen,eye:Eye,"eye-slash":EyeSlash,shield:Shield,"shield-check":ShieldCheck,wifi:WifiHigh,"wifi-slash":WifiX,"battery-warning":BatteryWarning,cpu:Cpu,"hard-drive":HardDrive,sun:Sun,moon:Moon,cloud:Cloud,"cloud-rain":CloudRain,"cloud-snow":CloudSnow,"cloud-lightning":CloudLightning,github:GithubLogo,twitter:TwitterLogo,facebook:FacebookLogo,instagram:InstagramLogo,linkedin:LinkedinLogo,youtube:YoutubeLogo,"shopping-cart":ShoppingCart,"shopping-bag":ShoppingBag,"credit-card":CreditCard,money:Money,"heart-icon":Heart,activity:Activity,car:Car,bus:Bus,train:Train,plane:Airplane,ship:Boat,bicycle:Bicycle,coffee:Coffee,pizza:Pizza,hamburger:Hamburger,basketball:Basketball,football:Football,soccer:SoccerBall,tennis:TennisBall,"music-note":MusicNote,"play-circle":PlayCircle,"pause-circle":PauseCircle,"stop-circle":StopCircle,book:Book,"book-open":BookOpen,"graduation-cap":GraduationCap,lightbulb:Lightbulb,briefcase:Briefcase,building:Buildings,"chart-line":ChartLine,"chart-bar":ChartBar,"chart-pie":ChartPie,wrench:Wrench,"paint-brush":PaintBrush,code:Code,terminal:Terminal,palette:Palette,accessibility:Wheelchair,tree:Tree,flower:Flower,leaf:Leaf,mountain:Mountains,rocket:Rocket,planet:Planet,"star-icon":Star,"moon-icon":Moon,"game-controller":GameController,puzzle:PuzzlePiece,gift:Gift,key:Key,"map-pin":MapPin,compass:Compass,flag:Flag,trophy:Trophy,medal:Medal,crown:Crown,sparkle:Sparkle,zap:Lightning,fire:Fire,snowflake:Snowflake,umbrella:Umbrella,anchor:Anchor,bug:Bug,butterfly:Butterfly,cat:Cat,dog:Dog,fish:Fish,bird:Bird,"paw-print":PawPrint,alien:Alien,spaceship:Rocket,atom:Atom,flask:Flask,"test-tube":TestTube,syringe:Syringe,pill:Pill,skull:Skull,ghost:Ghost,scroll:Scroll,"bookmark-icon":Bookmark,"compass-icon":Compass,"flag-icon":Flag,"trophy-icon":Trophy,"medal-icon":Medal,"crown-icon":Crown,"sparkle-icon":Sparkle,"zap-icon":Lightning,"fire-icon":Fire,"snowflake-icon":Snowflake,"umbrella-icon":Umbrella,"anchor-icon":Anchor,"bug-icon":Bug,"butterfly-icon":Butterfly,"cat-icon":Cat,"dog-icon":Dog,"fish-icon":Fish,"bird-icon":Bird,"paw-print-icon":PawPrint},La=cva("",{variants:{size:{xs:"w-3 h-3",sm:"w-4 h-4",md:"w-5 h-5",lg:"w-6 h-6",xl:"w-8 h-8","2xl":"w-10 h-10","3xl":"w-12 h-12"},weight:{thin:"",light:"",regular:"",bold:"",fill:"",duotone:""},color:{current:"text-current",primary:"text-primary",secondary:"text-secondary-foreground",success:"text-success",warning:"text-warning",error:"text-error",muted:"text-muted-foreground"}},defaultVariants:{size:"md",weight:"regular",color:"current"}}),Fa=r.forwardRef(({name:t,size:l,weight:e,color:c,className:s,...p},h)=>{let o=i[t];return o?r.createElement(o,{ref:h,weight:e,className:a(La({size:l,weight:e,color:c}),s),...p}):null});Fa.displayName="Icon";var Aa=Object.keys(i);export{Fa as a,Aa as b};//# sourceMappingURL=chunk-BL2TM4YT.js.map
3
+ //# sourceMappingURL=chunk-BL2TM4YT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/icon.tsx"],"names":["iconMap","House","User","Gear","MagnifyingGlass","List","X","CaretLeft","CaretRight","CaretUp","CaretDown","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Plus","Minus","Check","XIcon","Trash","PencilSimple","Copy","Download","Upload","Share","Heart","Star","Bookmark","Envelope","Phone","ChatCircle","Bell","BellSlash","Play","Pause","Stop","SpeakerHigh","SpeakerLow","SpeakerX","Camera","Image","VideoCamera","File","Folder","FolderOpen","FileText","FilePdf","FileImage","CheckCircle","XCircle","Warning","Info","Question","Clock","Calendar","Timer","Lock","LockOpen","Eye","EyeSlash","Shield","ShieldCheck","WifiHigh","WifiX","BatteryWarning","Cpu","HardDrive","Sun","Moon","Cloud","CloudRain","CloudSnow","CloudLightning","GithubLogo","TwitterLogo","FacebookLogo","InstagramLogo","LinkedinLogo","YoutubeLogo","ShoppingCart","ShoppingBag","CreditCard","Money","HeartIcon","Activity","Car","Bus","Train","Airplane","Boat","Bicycle","Coffee","Pizza","Hamburger","Basketball","Football","SoccerBall","TennisBall","MusicNote","PlayCircle","PauseCircle","StopCircle","Book","BookOpen","GraduationCap","Lightbulb","Briefcase","Buildings","ChartLine","ChartBar","ChartPie","Wrench","PaintBrush","Code","Terminal","Palette","Wheelchair","Tree","Flower","Leaf","Mountains","Rocket","Planet","StarIcon","MoonIcon","GameController","PuzzlePiece","Gift","Key","MapPin","Compass","Flag","Trophy","Medal","Crown","Sparkle","Lightning","Fire","Snowflake","Umbrella","Anchor","Bug","Butterfly","Cat","Dog","Fish","Bird","PawPrint","Alien","Spaceship","Atom","Flask","TestTube","Syringe","Pill","Skull","Ghost","Scroll","BookmarkIcon","CompassIcon","FlagIcon","TrophyIcon","MedalIcon","CrownIcon","SparkleIcon","ZapIcon","FireIcon","SnowflakeIcon","UmbrellaIcon","AnchorIcon","BugIcon","ButterflyIcon","CatIcon","DogIcon","FishIcon","BirdIcon","PawPrintIcon","iconVariants","cva","Icon","React","name","size","weight","color","className","props","ref","IconComponent","cn","iconNames"],"mappings":"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","file":"chunk-BL2TM4YT.js","sourcesContent":["import React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n// Import commonly used Phosphor icons\nimport {\n // Navigation\n House,\n User,\n Gear,\n MagnifyingGlass,\n List,\n X,\n CaretLeft,\n CaretRight,\n CaretUp,\n CaretDown,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n ArrowDown,\n\n // Actions\n Plus,\n Minus,\n Check,\n X as XIcon,\n Trash,\n PencilSimple,\n Copy,\n Download,\n Upload,\n Share,\n Heart,\n Star,\n Bookmark,\n\n // Communication\n Envelope,\n Phone,\n ChatCircle,\n Bell,\n BellSlash,\n\n // Media\n Play,\n Pause,\n Stop,\n SpeakerHigh,\n SpeakerLow,\n SpeakerX,\n Camera,\n Image,\n VideoCamera,\n\n // Files\n File,\n Folder,\n FolderOpen,\n FileText,\n FilePdf,\n FileImage,\n\n // Status\n CheckCircle,\n XCircle,\n Warning,\n Info,\n Question,\n\n // Time\n Clock,\n Calendar,\n Timer,\n\n // Security\n Lock,\n LockOpen,\n Eye,\n EyeSlash,\n Shield,\n ShieldCheck,\n\n // Technology\n WifiHigh,\n WifiX,\n BatteryWarning,\n Cpu,\n HardDrive,\n\n // Weather\n Sun,\n Moon,\n Cloud,\n CloudRain,\n CloudSnow,\n CloudLightning,\n\n // Social\n GithubLogo,\n TwitterLogo,\n FacebookLogo,\n InstagramLogo,\n LinkedinLogo,\n YoutubeLogo,\n\n // Shopping\n ShoppingCart,\n ShoppingBag,\n CreditCard,\n Money,\n\n // Health\n Heart as HeartIcon,\n Activity,\n\n // Transportation\n Car,\n Bus,\n Train,\n Airplane,\n Boat,\n Bicycle,\n\n // Food\n Coffee,\n Pizza,\n Hamburger,\n\n // Sports\n Basketball,\n Football,\n SoccerBall,\n TennisBall,\n\n // Music\n MusicNote,\n PlayCircle,\n PauseCircle,\n StopCircle,\n\n // Education\n Book,\n BookOpen,\n GraduationCap,\n Lightbulb,\n\n // Business\n Briefcase,\n Buildings,\n ChartLine,\n ChartBar,\n ChartPie,\n\n // Tools\n Wrench,\n PaintBrush,\n Code,\n Terminal,\n Palette,\n Wheelchair,\n\n // Nature\n Tree,\n Flower,\n Leaf,\n Mountains,\n\n // Space\n Rocket,\n Planet,\n Star as StarIcon,\n Moon as MoonIcon,\n\n // Gaming\n GameController,\n PuzzlePiece,\n\n // Miscellaneous\n Gift,\n Key,\n MapPin,\n Compass,\n Flag,\n Trophy,\n Medal,\n Crown,\n Sparkle,\n Lightning,\n Fire,\n Snowflake,\n Umbrella,\n Anchor,\n Bug,\n Butterfly,\n Cat,\n Dog,\n Fish,\n Bird,\n PawPrint,\n\n // Nostromo themed\n Alien,\n Rocket as Spaceship,\n Atom,\n Flask,\n TestTube,\n Syringe,\n Pill,\n Skull,\n Ghost,\n Scroll,\n Bookmark as BookmarkIcon,\n Compass as CompassIcon,\n Flag as FlagIcon,\n Trophy as TrophyIcon,\n Medal as MedalIcon,\n Crown as CrownIcon,\n Sparkle as SparkleIcon,\n Lightning as ZapIcon,\n Fire as FireIcon,\n Snowflake as SnowflakeIcon,\n Umbrella as UmbrellaIcon,\n Anchor as AnchorIcon,\n Bug as BugIcon,\n Butterfly as ButterflyIcon,\n Cat as CatIcon,\n Dog as DogIcon,\n Fish as FishIcon,\n Bird as BirdIcon,\n PawPrint as PawPrintIcon,\n} from \"phosphor-react\";\n\n// Create a mapping of icon names to components\nconst iconMap: Record<string, React.ElementType> = {\n // Navigation\n house: House,\n // Alias: \"home\" is what people reach for first, and the Icon docs page itself\n // shipped <Icon name=\"home\" /> against a map that only had \"house\".\n home: House,\n user: User,\n settings: Gear,\n search: MagnifyingGlass,\n menu: List,\n x: X,\n \"chevron-left\": CaretLeft,\n \"chevron-right\": CaretRight,\n \"chevron-up\": CaretUp,\n \"chevron-down\": CaretDown,\n \"arrow-left\": ArrowLeft,\n \"arrow-right\": ArrowRight,\n \"arrow-up\": ArrowUp,\n \"arrow-down\": ArrowDown,\n\n // Actions\n plus: Plus,\n minus: Minus,\n check: Check,\n \"x-icon\": XIcon,\n trash: Trash,\n edit: PencilSimple,\n copy: Copy,\n download: Download,\n upload: Upload,\n share: Share,\n heart: Heart,\n star: Star,\n bookmark: Bookmark,\n\n // Communication\n mail: Envelope,\n phone: Phone,\n \"message-circle\": ChatCircle,\n bell: Bell,\n \"bell-slash\": BellSlash,\n\n // Media\n play: Play,\n pause: Pause,\n stop: Stop,\n \"volume-high\": SpeakerHigh,\n \"volume-low\": SpeakerLow,\n \"volume-x\": SpeakerX,\n camera: Camera,\n image: Image,\n video: VideoCamera,\n\n // Files\n file: File,\n folder: Folder,\n \"folder-open\": FolderOpen,\n \"file-text\": FileText,\n \"file-pdf\": FilePdf,\n \"file-image\": FileImage,\n\n // Status\n \"check-circle\": CheckCircle,\n \"x-circle\": XCircle,\n warning: Warning,\n info: Info,\n question: Question,\n\n // Time\n clock: Clock,\n calendar: Calendar,\n timer: Timer,\n\n // Security\n lock: Lock,\n \"lock-open\": LockOpen,\n eye: Eye,\n \"eye-slash\": EyeSlash,\n shield: Shield,\n \"shield-check\": ShieldCheck,\n\n // Technology\n wifi: WifiHigh,\n \"wifi-slash\": WifiX,\n \"battery-warning\": BatteryWarning,\n cpu: Cpu,\n \"hard-drive\": HardDrive,\n\n // Weather\n sun: Sun,\n moon: Moon,\n cloud: Cloud,\n \"cloud-rain\": CloudRain,\n \"cloud-snow\": CloudSnow,\n \"cloud-lightning\": CloudLightning,\n\n // Social\n github: GithubLogo,\n twitter: TwitterLogo,\n facebook: FacebookLogo,\n instagram: InstagramLogo,\n linkedin: LinkedinLogo,\n youtube: YoutubeLogo,\n\n // Shopping\n \"shopping-cart\": ShoppingCart,\n \"shopping-bag\": ShoppingBag,\n \"credit-card\": CreditCard,\n money: Money,\n\n // Health\n \"heart-icon\": HeartIcon,\n activity: Activity,\n\n // Transportation\n car: Car,\n bus: Bus,\n train: Train,\n plane: Airplane,\n ship: Boat,\n bicycle: Bicycle,\n\n // Food\n coffee: Coffee,\n pizza: Pizza,\n hamburger: Hamburger,\n\n // Sports\n basketball: Basketball,\n football: Football,\n soccer: SoccerBall,\n tennis: TennisBall,\n\n // Music\n \"music-note\": MusicNote,\n \"play-circle\": PlayCircle,\n \"pause-circle\": PauseCircle,\n \"stop-circle\": StopCircle,\n\n // Education\n book: Book,\n \"book-open\": BookOpen,\n \"graduation-cap\": GraduationCap,\n lightbulb: Lightbulb,\n\n // Business\n briefcase: Briefcase,\n building: Buildings,\n \"chart-line\": ChartLine,\n \"chart-bar\": ChartBar,\n \"chart-pie\": ChartPie,\n\n // Tools\n wrench: Wrench,\n \"paint-brush\": PaintBrush,\n\n // Developer and design vocabulary the set was missing - the Features example\n // asked for code/accessibility/palette and got nothing back.\n code: Code,\n terminal: Terminal,\n palette: Palette,\n accessibility: Wheelchair,\n\n // Nature\n tree: Tree,\n flower: Flower,\n leaf: Leaf,\n mountain: Mountains,\n\n // Space\n rocket: Rocket,\n planet: Planet,\n \"star-icon\": StarIcon,\n \"moon-icon\": MoonIcon,\n\n // Gaming\n \"game-controller\": GameController,\n puzzle: PuzzlePiece,\n\n // Miscellaneous\n gift: Gift,\n key: Key,\n \"map-pin\": MapPin,\n compass: Compass,\n flag: Flag,\n trophy: Trophy,\n medal: Medal,\n crown: Crown,\n sparkle: Sparkle,\n zap: Lightning,\n fire: Fire,\n snowflake: Snowflake,\n umbrella: Umbrella,\n anchor: Anchor,\n bug: Bug,\n butterfly: Butterfly,\n cat: Cat,\n dog: Dog,\n fish: Fish,\n bird: Bird,\n \"paw-print\": PawPrint,\n\n // Nostromo themed\n alien: Alien,\n spaceship: Spaceship,\n atom: Atom,\n flask: Flask,\n \"test-tube\": TestTube,\n syringe: Syringe,\n pill: Pill,\n skull: Skull,\n ghost: Ghost,\n scroll: Scroll,\n \"bookmark-icon\": BookmarkIcon,\n \"compass-icon\": CompassIcon,\n \"flag-icon\": FlagIcon,\n \"trophy-icon\": TrophyIcon,\n \"medal-icon\": MedalIcon,\n \"crown-icon\": CrownIcon,\n \"sparkle-icon\": SparkleIcon,\n \"zap-icon\": ZapIcon,\n \"fire-icon\": FireIcon,\n \"snowflake-icon\": SnowflakeIcon,\n \"umbrella-icon\": UmbrellaIcon,\n \"anchor-icon\": AnchorIcon,\n \"bug-icon\": BugIcon,\n \"butterfly-icon\": ButterflyIcon,\n \"cat-icon\": CatIcon,\n \"dog-icon\": DogIcon,\n \"fish-icon\": FishIcon,\n \"bird-icon\": BirdIcon,\n \"paw-print-icon\": PawPrintIcon,\n} as const;\n\nexport type IconName = keyof typeof iconMap;\n\nconst iconVariants = cva(\"\", {\n variants: {\n size: {\n xs: \"w-3 h-3\",\n sm: \"w-4 h-4\",\n md: \"w-5 h-5\",\n lg: \"w-6 h-6\",\n xl: \"w-8 h-8\",\n \"2xl\": \"w-10 h-10\",\n \"3xl\": \"w-12 h-12\",\n },\n weight: {\n thin: \"\",\n light: \"\",\n regular: \"\",\n bold: \"\",\n fill: \"\",\n duotone: \"\",\n },\n color: {\n current: \"text-current\",\n primary: \"text-primary\",\n secondary: \"text-secondary-foreground\",\n success: \"text-success\",\n warning: \"text-warning\",\n error: \"text-error\",\n muted: \"text-muted-foreground\",\n },\n },\n defaultVariants: {\n size: \"md\",\n weight: \"regular\",\n color: \"current\",\n },\n});\n\nexport interface IconProps\n extends\n Omit<React.HTMLAttributes<SVGSVGElement>, \"color\">,\n VariantProps<typeof iconVariants> {\n name: IconName;\n className?: string;\n}\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ name, size, weight, color, className, ...props }, ref) => {\n const IconComponent = iconMap[name];\n\n if (!IconComponent) {\n console.warn(`Icon \"${name}\" not found in iconMap`);\n return null;\n }\n\n return (\n <IconComponent\n ref={ref}\n weight={\n weight as \"thin\" | \"light\" | \"regular\" | \"bold\" | \"fill\" | \"duotone\"\n }\n className={cn(iconVariants({ size, weight, color }), className)}\n {...props}\n />\n );\n },\n);\n\nIcon.displayName = \"Icon\";\n\n// Export icon names for TypeScript autocomplete\nexport const iconNames = Object.keys(iconMap) as IconName[];\n\n// Note: For additional icons, import directly from 'phosphor-react' to avoid bundling unused icons\n// Example: import { CustomIcon } from 'phosphor-react'\n"]}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- 'use strict';var chunkOZ3RIKZO_cjs=require('./chunk-OZ3RIKZO.cjs'),a=require('react');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var a__default=/*#__PURE__*/_interopDefault(a);var p=a__default.default.lazy(()=>import('./components/core/charts.cjs').then(t=>({default:t.Chart}))),s=({fallback:t=a__default.default.createElement(chunkOZ3RIKZO_cjs.b,{className:"h-64 w-full"}),...r})=>a__default.default.createElement(a.Suspense,{fallback:t},a__default.default.createElement(p,{...r}));s.displayName="LazyChart";exports.a=s;//# sourceMappingURL=chunk-BSUHBLZO.cjs.map
3
- //# sourceMappingURL=chunk-BSUHBLZO.cjs.map
2
+ 'use strict';var chunk3QVQ2TNE_cjs=require('./chunk-3QVQ2TNE.cjs'),a=require('react');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var a__default=/*#__PURE__*/_interopDefault(a);var p=a__default.default.lazy(()=>import('./components/core/charts.cjs').then(t=>({default:t.Chart}))),s=({fallback:t=a__default.default.createElement(chunk3QVQ2TNE_cjs.b,{className:"h-64 w-full"}),...r})=>a__default.default.createElement(a.Suspense,{fallback:t},a__default.default.createElement(p,{...r}));s.displayName="LazyChart";exports.a=s;//# sourceMappingURL=chunk-BZ5ZCZJX.cjs.map
3
+ //# sourceMappingURL=chunk-BZ5ZCZJX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/core/charts-lazy.tsx"],"names":["ChartLazy","React","module","LazyChart","fallback","Skeleton","props","Suspense"],"mappings":"0MAwBMA,CAAAA,CAAYC,kBAAAA,CAAM,IAAA,CAAK,IAC3B,OAAO,8BAAU,EAAE,IAAA,CAAMC,CAAAA,GAAY,CACnC,OAAA,CAASA,CAAAA,CAAO,KAClB,EAAE,CACJ,CAAA,CAMaC,CAAAA,CAAsC,CAAC,CAClD,QAAA,CAAAC,EAAWH,kBAAAA,CAAA,aAAA,CAACI,mBAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EAC7C,GAAGC,CACL,CAAA,GAEIL,kBAAAA,CAAA,aAAA,CAACM,UAAAA,CAAA,CAAS,QAAA,CAAUH,CAAAA,CAAAA,CAClBH,kBAAAA,CAAA,aAAA,CAACD,CAAAA,CAAA,CAAW,GAAGM,CAAAA,CAAO,CACxB,EAIJH,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-BSUHBLZO.cjs","sourcesContent":["import React, { Suspense } from \"react\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * Lazy-loaded Chart component wrapper\n * Use this for better code splitting when Charts are not immediately needed\n *\n * @example\n * ```tsx\n * import { LazyChart } from '@jarllyng/nostromo/components/core/charts-lazy';\n *\n * function Dashboard() {\n * return (\n * <LazyChart\n * type=\"line\"\n * data={data}\n * dataKeys={['sales', 'revenue']}\n * />\n * );\n * }\n * ```\n */\n\n// Dynamic import for Chart component with recharts\nconst ChartLazy = React.lazy(() =>\n import(\"./charts\").then((module) => ({\n default: module.Chart,\n })),\n);\n\nexport interface LazyChartProps extends React.ComponentProps<typeof ChartLazy> {\n fallback?: React.ReactNode;\n}\n\nexport const LazyChart: React.FC<LazyChartProps> = ({\n fallback = <Skeleton className=\"h-64 w-full\" />,\n ...props\n}) => {\n return (\n <Suspense fallback={fallback}>\n <ChartLazy {...props} />\n </Suspense>\n );\n};\n\nLazyChart.displayName = \"LazyChart\";\n"]}
1
+ {"version":3,"sources":["../src/components/core/charts-lazy.tsx"],"names":["ChartLazy","React","module","LazyChart","fallback","Skeleton","props","Suspense"],"mappings":"0MAwBMA,CAAAA,CAAYC,kBAAAA,CAAM,IAAA,CAAK,IAC3B,OAAO,8BAAU,EAAE,IAAA,CAAMC,CAAAA,GAAY,CACnC,OAAA,CAASA,CAAAA,CAAO,KAClB,EAAE,CACJ,CAAA,CAMaC,CAAAA,CAAsC,CAAC,CAClD,QAAA,CAAAC,EAAWH,kBAAAA,CAAA,aAAA,CAACI,mBAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EAC7C,GAAGC,CACL,CAAA,GAEIL,kBAAAA,CAAA,aAAA,CAACM,UAAAA,CAAA,CAAS,QAAA,CAAUH,CAAAA,CAAAA,CAClBH,kBAAAA,CAAA,aAAA,CAACD,CAAAA,CAAA,CAAW,GAAGM,CAAAA,CAAO,CACxB,EAIJH,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-BZ5ZCZJX.cjs","sourcesContent":["import React, { Suspense } from \"react\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * Lazy-loaded Chart component wrapper\n * Use this for better code splitting when Charts are not immediately needed\n *\n * @example\n * ```tsx\n * import { LazyChart } from '@jarllyng/nostromo/components/core/charts-lazy';\n *\n * function Dashboard() {\n * return (\n * <LazyChart\n * type=\"line\"\n * data={data}\n * dataKeys={['sales', 'revenue']}\n * />\n * );\n * }\n * ```\n */\n\n// Dynamic import for Chart component with recharts\nconst ChartLazy = React.lazy(() =>\n import(\"./charts\").then((module) => ({\n default: module.Chart,\n })),\n);\n\nexport interface LazyChartProps extends React.ComponentProps<typeof ChartLazy> {\n fallback?: React.ReactNode;\n}\n\nexport const LazyChart: React.FC<LazyChartProps> = ({\n fallback = <Skeleton className=\"h-64 w-full\" />,\n ...props\n}) => {\n return (\n <Suspense fallback={fallback}>\n <ChartLazy {...props} />\n </Suspense>\n );\n};\n\nLazyChart.displayName = \"LazyChart\";\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),a=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var a__namespace=/*#__PURE__*/_interopNamespace(a);var f=classVarianceAuthority.cva("shrink-0 bg-border",{variants:{orientation:{horizontal:"h-[1px] w-full",vertical:"w-[1px] self-stretch h-full"},variant:{default:"bg-border",muted:"bg-muted",subtle:"bg-muted/50"},size:{default:"",sm:"h-px",lg:"h-0.5"}},defaultVariants:{orientation:"horizontal",variant:"default",size:"default"}}),d=a__namespace.forwardRef(({className:o,orientation:t="horizontal",variant:i="default",size:n="default",decorative:r=true,...l},s)=>a__namespace.createElement("div",{ref:s,role:r?"none":"separator",...r?{}:{"aria-orientation":t||void 0},className:chunkITRGJNWL_cjs.a(f({orientation:t,variant:i,size:n}),o),...l}));d.displayName="Separator";exports.a=f;exports.b=d;//# sourceMappingURL=chunk-C7HZAQBX.cjs.map
3
+ //# sourceMappingURL=chunk-C7HZAQBX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/separator.tsx"],"names":["separatorVariants","cva","Separator","a","className","orientation","variant","size","decorative","props","ref","cn"],"mappings":"ufAIA,IAAMA,CAAAA,CAAoBC,0BAAAA,CAAI,oBAAA,CAAsB,CAClD,QAAA,CAAU,CACR,WAAA,CAAa,CACX,UAAA,CAAY,gBAAA,CAMZ,QAAA,CAAU,6BACZ,EACA,OAAA,CAAS,CACP,OAAA,CAAS,WAAA,CACT,KAAA,CAAO,UAAA,CACP,OAAQ,aACV,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,EAAA,CACT,GAAI,MAAA,CACJ,EAAA,CAAI,OACN,CACF,CAAA,CACA,eAAA,CAAiB,CACf,WAAA,CAAa,YAAA,CACb,OAAA,CAAS,SAAA,CACT,IAAA,CAAM,SACR,CACF,CAAC,CAAA,CAUKC,CAAAA,CAAkBC,YAAA,CAAA,UAAA,CACtB,CACE,CACE,UAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CAAc,YAAA,CACd,OAAA,CAAAC,CAAAA,CAAU,UACV,IAAA,CAAAC,CAAAA,CAAO,SAAA,CACP,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,GAAGC,CACL,CAAA,CACAC,CAAAA,GAGEP,YAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKO,EACL,IAAA,CAAMF,CAAAA,CAAa,MAAA,CAAS,WAAA,CAC3B,GAAIA,CAAAA,CACD,EAAC,CACD,CAAE,kBAAA,CAAoBH,CAAAA,EAAe,MAAU,CAAA,CACnD,UAAWM,mBAAAA,CACTX,CAAAA,CAAkB,CAAE,WAAA,CAAAK,CAAAA,CAAa,OAAA,CAAAC,EAAS,IAAA,CAAAC,CAAK,CAAC,CAAA,CAChDH,CACF,CAAA,CACC,GAAGK,CAAAA,CACN,CAGN,EACAP,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-C7HZAQBX.cjs","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst separatorVariants = cva(\"shrink-0 bg-border\", {\n variants: {\n orientation: {\n horizontal: \"h-[1px] w-full\",\n // self-stretch, not just h-full: `height: 100%` against an auto-height\n // flex row resolves to nothing, and with the usual `items-center` the\n // item does not stretch either - so a vertical separator rendered 1px\n // wide and 0px tall, which looked like the prop did nothing at all.\n // Stretching fills the cross axis; h-full still covers non-flex parents.\n vertical: \"w-[1px] self-stretch h-full\",\n },\n variant: {\n default: \"bg-border\",\n muted: \"bg-muted\",\n subtle: \"bg-muted/50\",\n },\n size: {\n default: \"\",\n sm: \"h-px\",\n lg: \"h-0.5\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n variant: \"default\",\n size: \"default\",\n },\n});\n\nexport interface SeparatorProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"aria-orientation\">,\n VariantProps<typeof separatorVariants> {\n decorative?: boolean;\n \"aria-orientation\"?: \"horizontal\" | \"vertical\";\n}\n\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n {\n className,\n orientation = \"horizontal\",\n variant = \"default\",\n size = \"default\",\n decorative = true,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n role={decorative ? \"none\" : \"separator\"}\n {...(decorative\n ? {}\n : { \"aria-orientation\": orientation || undefined })}\n className={cn(\n separatorVariants({ orientation, variant, size }),\n className,\n )}\n {...props}\n />\n );\n },\n);\nSeparator.displayName = \"Separator\";\n\nexport { Separator, separatorVariants };\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {cva}from'class-variance-authority';var v=cva("peer h-4 w-4 shrink-0 rounded-sm border border-input bg-background shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary transition-all duration-200",{variants:{variant:{default:"border-border hover:border-border data-[state=checked]:bg-primary data-[state=checked]:border-primary",error:"border-destructive focus-visible:ring-destructive data-[state=checked]:bg-destructive data-[state=checked]:border-destructive",success:"border-success-500 focus-visible:ring-success-500 data-[state=checked]:bg-success-500 data-[state=checked]:border-success-500"},size:{default:"h-4 w-4",sm:"h-3 w-3",lg:"h-5 w-5"}},defaultVariants:{variant:"default",size:"default"}}),k=e.forwardRef(({className:o,error:t,helperText:s,label:d,required:c,id:n,variant:b,size:l,...u},p)=>{let m=e.useId(),r=n||m,i=s?`${r}-helper`:void 0,f=t?`${r}-error`:void 0;return e.createElement("div",{className:"space-y-2"},e.createElement("div",{className:"flex items-center space-x-3"},e.createElement("input",{type:"checkbox",className:a(v({variant:t?"error":b||"default",size:l,className:o})),ref:p,id:r,"aria-describedby":a(i,f)||void 0,"aria-invalid":t,required:c,...u}),d&&e.createElement("label",{htmlFor:r,className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},d,c&&e.createElement("span",{className:"text-error-500 ml-1"},"*"))),s&&e.createElement("p",{id:i,className:a("text-sm text-muted-foreground",t&&"text-destructive")},s))});k.displayName="Checkbox";export{v as a,k as b};//# sourceMappingURL=chunk-DNTPD3PJ.js.map
3
+ //# sourceMappingURL=chunk-DNTPD3PJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/checkbox.tsx"],"names":["checkboxVariants","cva","Checkbox","className","error","helperText","label","required","id","variant","size","props","ref","generatedId","checkboxId","helperTextId","errorId","cn"],"mappings":"uGAIA,IAAMA,CAAAA,CAAmBC,GAAAA,CACvB,+WAAA,CACA,CACE,QAAA,CAAU,CACR,QAAS,CACP,OAAA,CACE,wGACF,KAAA,CACE,+HAAA,CACF,OAAA,CACE,+HACJ,EACA,IAAA,CAAM,CACJ,OAAA,CAAS,SAAA,CACT,GAAI,SAAA,CACJ,EAAA,CAAI,SACN,CACF,EACA,eAAA,CAAiB,CACf,QAAS,SAAA,CACT,IAAA,CAAM,SACR,CACF,CACF,CAAA,CA0BMC,CAAAA,CAAiB,aACrB,CACE,CACE,SAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,EACA,QAAA,CAAAC,CAAAA,CACA,GAAAC,CAAAA,CACA,OAAA,CAAAC,EACA,IAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,EACAC,CAAAA,GACG,CACH,IAAMC,CAAAA,CAAoB,SAAM,CAC1BC,CAAAA,CAAaN,CAAAA,EAAMK,CAAAA,CACnBE,EAAeV,CAAAA,CAAa,CAAA,EAAGS,CAAU,CAAA,OAAA,CAAA,CAAY,MAAA,CACrDE,EAAUZ,CAAAA,CAAQ,CAAA,EAAGU,CAAU,CAAA,MAAA,CAAA,CAAW,OAKhD,OACE,CAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,aACb,CAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6BAAA,CAAA,CACb,gBAAC,OAAA,CAAA,CACC,IAAA,CAAK,WACL,SAAA,CAAWG,CAAAA,CACTjB,EAAiB,CAAE,OAAA,CARLI,CAAAA,CAAQ,OAAA,CAAUK,GAAW,SAAA,CAQE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAP,CAAU,CAAC,CAChE,CAAA,CACA,GAAA,CAAKS,EACL,EAAA,CAAIE,CAAAA,CACJ,mBAAkBG,CAAAA,CAAGF,CAAAA,CAAcC,CAAO,CAAA,EAAK,MAAA,CAC/C,cAAA,CAAcZ,CAAAA,CACd,SAAUG,CAAAA,CACT,GAAGI,CAAAA,CACN,CAAA,CACCL,GACC,CAAA,CAAA,aAAA,CAAC,OAAA,CAAA,CACC,OAAA,CAASQ,CAAAA,CACT,UAAU,4FAAA,CAAA,CAETR,CAAAA,CACAC,GAAY,CAAA,CAAA,aAAA,CAAC,MAAA,CAAA,CAAK,UAAU,qBAAA,CAAA,CAAsB,GAAC,CACtD,CAEJ,EACCF,CAAAA,EACC,CAAA,CAAA,aAAA,CAAC,KACC,EAAA,CAAIU,CAAAA,CACJ,UAAWE,CAAAA,CACT,+BAAA,CACAb,CAAAA,EAAS,kBACX,GAECC,CACH,CAEJ,CAEJ,CACF,EACAH,EAAS,WAAA,CAAc,UAAA","file":"chunk-DNTPD3PJ.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst checkboxVariants = cva(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-input bg-background shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary transition-all duration-200\",\n {\n variants: {\n variant: {\n default:\n \"border-border hover:border-border data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n error:\n \"border-destructive focus-visible:ring-destructive data-[state=checked]:bg-destructive data-[state=checked]:border-destructive\",\n success:\n \"border-success-500 focus-visible:ring-success-500 data-[state=checked]:bg-success-500 data-[state=checked]:border-success-500\",\n },\n size: {\n default: \"h-4 w-4\",\n sm: \"h-3 w-3\",\n lg: \"h-5 w-5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface CheckboxProps\n extends\n Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n VariantProps<typeof checkboxVariants> {\n /**\n * Whether the checkbox is in an error state\n * @default false\n */\n error?: boolean;\n /**\n * Helper text to display below the checkbox\n */\n helperText?: string;\n /**\n * Label text for the checkbox\n */\n label?: string;\n /**\n * Whether the checkbox is required\n * @default false\n */\n required?: boolean;\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n error,\n helperText,\n label,\n required,\n id,\n variant,\n size,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const checkboxId = id || generatedId;\n const helperTextId = helperText ? `${checkboxId}-helper` : undefined;\n const errorId = error ? `${checkboxId}-error` : undefined;\n\n // Determine variant based on error state\n const checkboxVariant = error ? \"error\" : variant || \"default\";\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center space-x-3\">\n <input\n type=\"checkbox\"\n className={cn(\n checkboxVariants({ variant: checkboxVariant, size, className }),\n )}\n ref={ref}\n id={checkboxId}\n aria-describedby={cn(helperTextId, errorId) || undefined}\n aria-invalid={error}\n required={required}\n {...props}\n />\n {label && (\n <label\n htmlFor={checkboxId}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-error-500 ml-1\">*</span>}\n </label>\n )}\n </div>\n {helperText && (\n <p\n id={helperTextId}\n className={cn(\n \"text-sm text-muted-foreground\",\n error && \"text-destructive\",\n )}\n >\n {helperText}\n </p>\n )}\n </div>\n );\n },\n);\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox, checkboxVariants };\n"]}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import {b}from'./chunk-EIXD3Y4R.js';import a,{Suspense}from'react';var p=a.lazy(()=>import('./components/core/charts.js').then(t=>({default:t.Chart}))),s=({fallback:t=a.createElement(b,{className:"h-64 w-full"}),...r})=>a.createElement(Suspense,{fallback:t},a.createElement(p,{...r}));s.displayName="LazyChart";export{s as a};//# sourceMappingURL=chunk-TGPWW7FC.js.map
3
- //# sourceMappingURL=chunk-TGPWW7FC.js.map
2
+ import {b}from'./chunk-QKM5LPRW.js';import a,{Suspense}from'react';var p=a.lazy(()=>import('./components/core/charts.js').then(t=>({default:t.Chart}))),s=({fallback:t=a.createElement(b,{className:"h-64 w-full"}),...r})=>a.createElement(Suspense,{fallback:t},a.createElement(p,{...r}));s.displayName="LazyChart";export{s as a};//# sourceMappingURL=chunk-HRJXPCGF.js.map
3
+ //# sourceMappingURL=chunk-HRJXPCGF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/core/charts-lazy.tsx"],"names":["ChartLazy","React","module","LazyChart","fallback","Skeleton","props","Suspense"],"mappings":"uEAwBMA,CAAAA,CAAYC,CAAAA,CAAM,IAAA,CAAK,IAC3B,OAAO,6BAAU,EAAE,IAAA,CAAMC,CAAAA,GAAY,CACnC,OAAA,CAASA,CAAAA,CAAO,KAClB,EAAE,CACJ,CAAA,CAMaC,CAAAA,CAAsC,CAAC,CAClD,QAAA,CAAAC,EAAWH,CAAAA,CAAA,aAAA,CAACI,CAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EAC7C,GAAGC,CACL,CAAA,GAEIL,CAAAA,CAAA,aAAA,CAACM,QAAAA,CAAA,CAAS,QAAA,CAAUH,CAAAA,CAAAA,CAClBH,CAAAA,CAAA,aAAA,CAACD,CAAAA,CAAA,CAAW,GAAGM,CAAAA,CAAO,CACxB,EAIJH,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-TGPWW7FC.js","sourcesContent":["import React, { Suspense } from \"react\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * Lazy-loaded Chart component wrapper\n * Use this for better code splitting when Charts are not immediately needed\n *\n * @example\n * ```tsx\n * import { LazyChart } from '@jarllyng/nostromo/components/core/charts-lazy';\n *\n * function Dashboard() {\n * return (\n * <LazyChart\n * type=\"line\"\n * data={data}\n * dataKeys={['sales', 'revenue']}\n * />\n * );\n * }\n * ```\n */\n\n// Dynamic import for Chart component with recharts\nconst ChartLazy = React.lazy(() =>\n import(\"./charts\").then((module) => ({\n default: module.Chart,\n })),\n);\n\nexport interface LazyChartProps extends React.ComponentProps<typeof ChartLazy> {\n fallback?: React.ReactNode;\n}\n\nexport const LazyChart: React.FC<LazyChartProps> = ({\n fallback = <Skeleton className=\"h-64 w-full\" />,\n ...props\n}) => {\n return (\n <Suspense fallback={fallback}>\n <ChartLazy {...props} />\n </Suspense>\n );\n};\n\nLazyChart.displayName = \"LazyChart\";\n"]}
1
+ {"version":3,"sources":["../src/components/core/charts-lazy.tsx"],"names":["ChartLazy","React","module","LazyChart","fallback","Skeleton","props","Suspense"],"mappings":"uEAwBMA,CAAAA,CAAYC,CAAAA,CAAM,IAAA,CAAK,IAC3B,OAAO,6BAAU,EAAE,IAAA,CAAMC,CAAAA,GAAY,CACnC,OAAA,CAASA,CAAAA,CAAO,KAClB,EAAE,CACJ,CAAA,CAMaC,CAAAA,CAAsC,CAAC,CAClD,QAAA,CAAAC,EAAWH,CAAAA,CAAA,aAAA,CAACI,CAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EAC7C,GAAGC,CACL,CAAA,GAEIL,CAAAA,CAAA,aAAA,CAACM,QAAAA,CAAA,CAAS,QAAA,CAAUH,CAAAA,CAAAA,CAClBH,CAAAA,CAAA,aAAA,CAACD,CAAAA,CAAA,CAAW,GAAGM,CAAAA,CAAO,CACxB,EAIJH,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-HRJXPCGF.js","sourcesContent":["import React, { Suspense } from \"react\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * Lazy-loaded Chart component wrapper\n * Use this for better code splitting when Charts are not immediately needed\n *\n * @example\n * ```tsx\n * import { LazyChart } from '@jarllyng/nostromo/components/core/charts-lazy';\n *\n * function Dashboard() {\n * return (\n * <LazyChart\n * type=\"line\"\n * data={data}\n * dataKeys={['sales', 'revenue']}\n * />\n * );\n * }\n * ```\n */\n\n// Dynamic import for Chart component with recharts\nconst ChartLazy = React.lazy(() =>\n import(\"./charts\").then((module) => ({\n default: module.Chart,\n })),\n);\n\nexport interface LazyChartProps extends React.ComponentProps<typeof ChartLazy> {\n fallback?: React.ReactNode;\n}\n\nexport const LazyChart: React.FC<LazyChartProps> = ({\n fallback = <Skeleton className=\"h-64 w-full\" />,\n ...props\n}) => {\n return (\n <Suspense fallback={fallback}>\n <ChartLazy {...props} />\n </Suspense>\n );\n};\n\nLazyChart.displayName = \"LazyChart\";\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunk5PVFLXPO_cjs=require('./chunk-5PVFLXPO.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),a=require('react'),v=require('@radix-ui/react-popover'),classVarianceAuthority=require('class-variance-authority'),dateFns=require('date-fns');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var a__default=/*#__PURE__*/_interopDefault(a);var v__namespace=/*#__PURE__*/_interopNamespace(v);var ye=classVarianceAuthority.cva("inline-block rounded-lg border bg-background shadow-lg",{variants:{variant:{default:"border-border bg-card",outline:"border-2 border-border",ghost:"border-transparent bg-transparent shadow-none"},size:{sm:"p-2",md:"p-3",lg:"p-4"}},defaultVariants:{variant:"default",size:"md"}}),we=classVarianceAuthority.cva("flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"hover:bg-muted text-foreground",selected:"bg-primary text-primary-foreground hover:bg-primary/90 font-semibold",range:"bg-primary/10 text-primary hover:bg-primary/20 font-medium",today:"border-2 border-primary text-foreground font-semibold",outside:"text-muted-foreground",disabled:"text-muted-foreground/50 cursor-not-allowed"},size:{sm:"h-7 w-7 text-xs",md:"h-9 w-9 text-sm",lg:"h-11 w-11 text-base"}},defaultVariants:{variant:"default",size:"md"}}),W=n=>dateFns.getDaysInMonth(n),xe=(n,o)=>{let s=dateFns.getDay(dateFns.startOfMonth(n));return o===1?s===0?6:s-1:s},h=(n,o)=>!n||!o?false:dateFns.isSameDay(n,o),Ce=(n,o,s)=>!o&&!s?false:o&&s?dateFns.isWithinInterval(dateFns.startOfDay(n),{start:dateFns.startOfDay(o),end:dateFns.endOfDay(s)}):o?!dateFns.isBefore(dateFns.startOfDay(n),dateFns.startOfDay(o)):s?!dateFns.isAfter(dateFns.startOfDay(n),dateFns.endOfDay(s)):false,_=(n,o,s,I,N)=>!!(o&&dateFns.isBefore(dateFns.startOfDay(n),dateFns.startOfDay(o))||s&&dateFns.isAfter(dateFns.startOfDay(n),dateFns.endOfDay(s))||I?.some(Y=>h(Y,n))||N?.includes(dateFns.getDay(n))),x=(n,o="en-US")=>n?dateFns.format(n,"MMM d, yyyy"):"",ke=(n,o,s="en-US")=>!n&&!o?"":n&&o?`${x(n,s)} - ${x(o,s)}`:n?x(n,s):o?x(o,s):"",Fe=(n,o="en-US")=>n.length===0?"":n.length===1?x(n[0],o):`${n.length} dates selected`,Ne=a__default.default.forwardRef(({mode:n="single",value:o,defaultValue:s,onChange:I,minDate:N,maxDate:Y,disabledDates:A,disabledDays:H,locale:y="en-US",placeholder:X,label:V,error:L,helperText:U,className:Z,inputClassName:R,calendarClassName:ee,variant:te,size:K,showOutsideDays:C=true,firstDayOfWeek:P=1,...ne},re)=>{let[k,F]=a.useState(false),[i,c]=a.useState(new Date),[p,D]=a.useState(null),ae=a.useRef(null),$=a.useRef(new Map),[oe,se]=a.useState(s),j=o!==void 0,l=j?o:oe;a__default.default.useLayoutEffect(()=>{if(k&&!p){let e=new Date;e.setHours(0,0,0,0),D(e);}},[k,p]);let w=e=>{j||se(e),I?.(e);},z=e=>{if(!_(e,N,Y,A,H)){if(n==="single")w(e),F(false);else if(n==="range"){let r=l;if(!r?.from||r.from&&r.to)w({from:e});else {let t=r.from,d=e;d<t?w({from:d,to:t}):w({from:t,to:d}),F(false);}}else if(n==="multiple"){let r=l||[],t=r.findIndex(d=>h(d,e));t>=0?w(r.filter((d,u)=>u!==t)):w([...r,e]);}}},ie=a.useMemo(()=>{if(!l)return "";if(n==="single")return x(l,y);if(n==="range"){let e=l;return ke(e.from,e.to,y)}else return Fe(l,y)},[l,n,y]),le=a.useMemo(()=>{let e=[],r=new Date;r.setHours(0,0,0,0);let t=xe(i,P),d=W(i);if(C&&t>0){let u=new Date(i.getFullYear(),i.getMonth()-1),g=W(u);for(let m=g-t+1;m<=g;m++){let f=new Date(u.getFullYear(),u.getMonth(),m);e.push({date:f,isCurrentMonth:false,isToday:h(f,r)});}}for(let u=1;u<=d;u++){let g=new Date(i.getFullYear(),i.getMonth(),u);e.push({date:g,isCurrentMonth:true,isToday:h(g,r)});}if(C){let u=42-e.length,g=new Date(i.getFullYear(),i.getMonth()+1);for(let m=1;m<=u;m++){let f=new Date(g.getFullYear(),g.getMonth(),m);e.push({date:f,isCurrentMonth:false,isToday:h(f,r)});}}return e},[i,C,P]),ue=()=>{c(new Date(i.getFullYear(),i.getMonth()-1,1));},de=()=>{c(new Date(i.getFullYear(),i.getMonth()+1,1));},fe=()=>{let e=new Date;c(e),D(e);},ge=(e,r)=>{if(e.key==="Enter"||e.key===" "){e.preventDefault(),z(r);return}if(e.key==="ArrowRight"){e.preventDefault();let t=new Date(r);t.setDate(t.getDate()+1),D(t),t.getMonth()!==i.getMonth()&&c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="ArrowLeft"){e.preventDefault();let t=new Date(r);t.setDate(t.getDate()-1),D(t),t.getMonth()!==i.getMonth()&&c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="ArrowDown"){e.preventDefault();let t=new Date(r);t.setDate(t.getDate()+7),D(t),t.getMonth()!==i.getMonth()&&c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="ArrowUp"){e.preventDefault();let t=new Date(r);t.setDate(t.getDate()-7),D(t),t.getMonth()!==i.getMonth()&&c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="Home"){e.preventDefault();let t=new Date(r.getFullYear(),r.getMonth(),1);D(t);return}if(e.key==="End"){e.preventDefault();let t=new Date(r.getFullYear(),r.getMonth()+1,0);D(t);return}if(e.key==="PageUp"){e.preventDefault();let t=new Date(r.getFullYear(),r.getMonth()-1,r.getDate());D(t),c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="PageDown"){e.preventDefault();let t=new Date(r.getFullYear(),r.getMonth()+1,r.getDate());D(t),c(new Date(t.getFullYear(),t.getMonth(),1));return}if(e.key==="Escape"){e.preventDefault(),F(false);return}};a.useEffect(()=>{if(p&&k){let e=`${p.getFullYear()}-${p.getMonth()}-${p.getDate()}`,r=$.current.get(e);r&&r.focus();}},[p,k]);let ce=a.useMemo(()=>{let e=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];return P===1?[...e.slice(1),e[0]]:e},[P]),De=i.toLocaleDateString(y,{month:"long",year:"numeric"});return a__default.default.createElement("div",{ref:re,className:chunkITRGJNWL_cjs.a("w-full",Z),...ne},a__default.default.createElement(v__namespace.Root,{open:k,onOpenChange:F},a__default.default.createElement("div",{className:"space-y-2"},V&&a__default.default.createElement("label",{className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},V),a__default.default.createElement(v__namespace.Trigger,{asChild:true},a__default.default.createElement("button",{type:"button",className:chunkITRGJNWL_cjs.a("flex w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background","placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200 text-left",L?"border-error-500 shadow-sm hover:border-error-600 focus-visible:ring-error-500/20 focus-visible:border-error-500":"border-border shadow-sm hover:border-primary focus-visible:ring-ring/20 focus-visible:border-primary","h-10",R),onClick:()=>F(true),"aria-label":V||"Open calendar","aria-invalid":L},ie||a__default.default.createElement("span",{className:"text-muted-foreground"},X||"Select date..."))),U&&a__default.default.createElement("p",{className:chunkITRGJNWL_cjs.a("text-sm text-muted-foreground",L&&"text-error-600")},U)),a__default.default.createElement(v__namespace.Portal,null,a__default.default.createElement(v__namespace.Content,{className:chunkITRGJNWL_cjs.a("z-50 w-auto rounded-lg border bg-popover p-4 shadow-lg","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95","data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2","data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2"),sideOffset:5,align:"start"},a__default.default.createElement("div",{ref:ae,className:chunkITRGJNWL_cjs.a(ye({variant:te,size:K}),ee),role:"application","aria-label":"Calendar"},a__default.default.createElement("div",{className:"flex items-center justify-between mb-4"},a__default.default.createElement("div",{className:"flex items-center gap-2"},a__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",onClick:ue,"aria-label":"Previous month"},a__default.default.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},a__default.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"}))),a__default.default.createElement("h3",{className:"text-sm font-semibold text-popover-foreground","data-testid":"calendar-month-year"},De),a__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",onClick:de,"aria-label":"Next month"},a__default.default.createElement("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},a__default.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})))),a__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",onClick:fe,className:"text-xs"},"Today")),a__default.default.createElement("div",{className:"grid grid-cols-7 gap-1 mb-2"},ce.map(e=>a__default.default.createElement("div",{key:e,className:"text-center text-xs font-medium text-muted-foreground"},e))),a__default.default.createElement("div",{className:"grid grid-cols-7 gap-1"},le.map((e,r)=>{let t=n==="single"?h(e.date,l):n==="range"?Ce(e.date,l?.from,l?.to):l?.some(f=>h(f,e.date)),d=_(e.date,N,Y,A,H),u=n==="range"&&l?.from&&!l?.to&&e.date>=l.from,g=`${e.date.getFullYear()}-${e.date.getMonth()}-${e.date.getDate()}`,m=p&&h(e.date,p);return a__default.default.createElement("button",{key:`${e.date.getTime()}-${r}`,ref:f=>{f?$.current.set(g,f):$.current.delete(g);},type:"button",onClick:()=>{C&&!e.isCurrentMonth&&c(new Date(e.date.getFullYear(),e.date.getMonth(),1)),z(e.date);},onKeyDown:f=>ge(f,e.date),disabled:d||(C?false:!e.isCurrentMonth),className:chunkITRGJNWL_cjs.a(we({variant:t?"selected":u?"range":e.isToday?"today":e.isCurrentMonth?d?"disabled":"default":"outside",size:K}),!e.isCurrentMonth&&"opacity-50",m&&"ring-2 ring-brand-500 ring-offset-2 z-10"),"aria-label":e.date.toLocaleDateString(y,{weekday:"long",year:"numeric",month:"long",day:"numeric"}),"aria-selected":t,"aria-disabled":d,tabIndex:m?0:-1},e.date.getDate())})),n==="range"&&l?.from&&!l?.to&&a__default.default.createElement("div",{className:"mt-4 pt-4 border-t border-border"},a__default.default.createElement("p",{className:"text-xs text-muted-foreground text-center"},"Select end date")))))))});Ne.displayName="Calendar";exports.a=ye;exports.b=we;exports.c=Ne;//# sourceMappingURL=chunk-JCETHQ55.cjs.map
3
+ //# sourceMappingURL=chunk-JCETHQ55.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/calendar.tsx"],"names":["calendarVariants","cva","calendarDayVariants","getDaysInMonth","date","dateFnsGetDaysInMonth","getFirstDayOfMonth","firstDayOfWeek","firstDay","getDay","startOfMonth","isSameDay","date1","date2","dateFnsIsSameDay","isDateInRange","from","to","isWithinInterval","startOfDay","endOfDay","isBefore","isAfter","isDateDisabled","minDate","maxDate","disabledDates","disabledDays","d","formatDate","_locale","dateFnsFormat","formatDateRange","locale","formatMultipleDates","dates","Calendar","React","mode","value","defaultValue","onChange","placeholder","label","error","helperText","className","inputClassName","calendarClassName","variant","size","showOutsideDays","props","ref","open","setOpen","useState","currentMonth","setCurrentMonth","focusedDate","setFocusedDate","calendarRef","useRef","dayButtonRefs","internalValue","setInternalValue","isControlled","calendarValue","today","handleValueChange","newValue","handleDateClick","rangeValue","multipleValue","dateIndex","_","i","displayValue","useMemo","range","calendarDays","days","daysInMonth","prevMonth","daysInPrevMonth","remainingDays","nextMonth","goToPreviousMonth","goToNextMonth","goToToday","handleKeyDown","nextDate","prevDate","lastDay","useEffect","dateKey","button","dayNames","names","monthYearDisplay","cn","v","Button","day","index","isSelected","isDisabled","isInRange","isFocused","el","e"],"mappings":"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","file":"chunk-JCETHQ55.cjs","sourcesContent":["import React, { useState, useMemo, useRef, useEffect } from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n getDaysInMonth as dateFnsGetDaysInMonth,\n startOfMonth,\n getDay,\n isSameDay as dateFnsIsSameDay,\n isWithinInterval,\n isBefore,\n isAfter,\n format as dateFnsFormat,\n startOfDay,\n endOfDay,\n} from \"date-fns\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\n\n// Calendar variants\nconst calendarVariants = cva(\n \"inline-block rounded-lg border bg-background shadow-lg\",\n {\n variants: {\n variant: {\n default: \"border-border bg-card\",\n outline: \"border-2 border-border\",\n ghost: \"border-transparent bg-transparent shadow-none\",\n },\n size: {\n sm: \"p-2\",\n md: \"p-3\",\n lg: \"p-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nconst calendarDayVariants = cva(\n \"flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"hover:bg-muted text-foreground\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary/90 font-semibold\",\n range: \"bg-primary/10 text-primary hover:bg-primary/20 font-medium\",\n today: \"border-2 border-primary text-foreground font-semibold\",\n outside: \"text-muted-foreground\",\n disabled: \"text-muted-foreground/50 cursor-not-allowed\",\n },\n size: {\n sm: \"h-7 w-7 text-xs\",\n md: \"h-9 w-9 text-sm\",\n lg: \"h-11 w-11 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nexport type CalendarMode = \"single\" | \"range\" | \"multiple\";\n\nexport interface CalendarProps extends VariantProps<typeof calendarVariants> {\n mode?: CalendarMode;\n value?: Date | Date[] | { from?: Date; to?: Date };\n defaultValue?: Date | Date[] | { from?: Date; to?: Date };\n onChange?: (\n value: Date | Date[] | { from?: Date; to?: Date } | undefined,\n ) => void;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n disabledDays?: number[]; // 0 = Sunday, 1 = Monday, etc.\n locale?: string;\n placeholder?: string;\n label?: string;\n error?: boolean;\n helperText?: string;\n className?: string;\n inputClassName?: string;\n calendarClassName?: string;\n showOutsideDays?: boolean;\n firstDayOfWeek?: 0 | 1; // 0 = Sunday, 1 = Monday\n}\n\n// Helper functions using date-fns for robust date manipulation\nconst getDaysInMonth = (date: Date): number => {\n return dateFnsGetDaysInMonth(date);\n};\n\nconst getFirstDayOfMonth = (date: Date, firstDayOfWeek: 0 | 1): number => {\n // Use date-fns getDay for consistent day-of-week calculation\n const firstDay = getDay(startOfMonth(date));\n // Convert Sunday (0) to Monday-first (6) if needed\n // Sunday = 0, Monday = 1, ..., Saturday = 6\n // For Monday-first: Sunday becomes 6, Monday becomes 0, etc.\n return firstDayOfWeek === 1 ? (firstDay === 0 ? 6 : firstDay - 1) : firstDay;\n};\n\nconst isSameDay = (\n date1: Date | undefined,\n date2: Date | undefined,\n): boolean => {\n if (!date1 || !date2) return false;\n return dateFnsIsSameDay(date1, date2);\n};\n\nconst isDateInRange = (date: Date, from?: Date, to?: Date): boolean => {\n if (!from && !to) return false;\n if (from && to) {\n // Use date-fns isWithinInterval for proper date range checking\n return isWithinInterval(startOfDay(date), {\n start: startOfDay(from),\n end: endOfDay(to),\n });\n }\n if (from) return !isBefore(startOfDay(date), startOfDay(from));\n if (to) return !isAfter(startOfDay(date), endOfDay(to));\n return false;\n};\n\nconst isDateDisabled = (\n date: Date,\n minDate?: Date,\n maxDate?: Date,\n disabledDates?: Date[],\n disabledDays?: number[],\n): boolean => {\n if (minDate && isBefore(startOfDay(date), startOfDay(minDate))) return true;\n if (maxDate && isAfter(startOfDay(date), endOfDay(maxDate))) return true;\n if (disabledDates?.some((d) => isSameDay(d, date))) return true;\n if (disabledDays?.includes(getDay(date))) return true;\n return false;\n};\n\nconst formatDate = (\n date: Date | undefined,\n _locale: string = \"en-US\",\n): string => {\n if (!date) return \"\";\n // Use date-fns format for consistent formatting\n // Note: date-fns uses locale objects, but we'll use a simple format for now\n // For full locale support, import locale from 'date-fns/locale'\n // Locale parameter is kept for API compatibility but not yet used\n return dateFnsFormat(date, \"MMM d, yyyy\");\n};\n\nconst formatDateRange = (\n from?: Date,\n to?: Date,\n locale: string = \"en-US\",\n): string => {\n if (!from && !to) return \"\";\n if (from && to) {\n return `${formatDate(from, locale)} - ${formatDate(to, locale)}`;\n }\n if (from) return formatDate(from, locale);\n if (to) return formatDate(to, locale);\n return \"\";\n};\n\nconst formatMultipleDates = (\n dates: Date[],\n _locale: string = \"en-US\",\n): string => {\n if (dates.length === 0) return \"\";\n if (dates.length === 1) return formatDate(dates[0], _locale);\n return `${dates.length} dates selected`;\n};\n\nexport const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>(\n (\n {\n mode = \"single\",\n value,\n defaultValue,\n onChange,\n minDate,\n maxDate,\n disabledDates,\n disabledDays,\n locale = \"en-US\",\n placeholder,\n label,\n error,\n helperText,\n className,\n inputClassName,\n calendarClassName,\n variant,\n size,\n showOutsideDays = true,\n firstDayOfWeek = 1,\n ...props\n },\n ref,\n ) => {\n const [open, setOpen] = useState(false);\n const [currentMonth, setCurrentMonth] = useState(new Date());\n const [focusedDate, setFocusedDate] = useState<Date | null>(null);\n const calendarRef = useRef<HTMLDivElement>(null);\n const dayButtonRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n\n // Controlled vs uncontrolled\n const [internalValue, setInternalValue] = useState<\n Date | Date[] | { from?: Date; to?: Date } | undefined\n >(defaultValue);\n\n const isControlled = value !== undefined;\n const calendarValue = isControlled ? value : internalValue;\n\n // Set focused date when calendar opens\n React.useLayoutEffect(() => {\n if (open && !focusedDate) {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n setFocusedDate(today);\n }\n }, [open, focusedDate]);\n\n // Handle value changes\n const handleValueChange = (\n newValue: Date | Date[] | { from?: Date; to?: Date } | undefined,\n ) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n // Handle date selection\n const handleDateClick = (date: Date) => {\n if (isDateDisabled(date, minDate, maxDate, disabledDates, disabledDays)) {\n return;\n }\n\n if (mode === \"single\") {\n handleValueChange(date);\n setOpen(false);\n } else if (mode === \"range\") {\n const rangeValue = calendarValue as\n { from?: Date; to?: Date } | undefined;\n if (!rangeValue?.from || (rangeValue.from && rangeValue.to)) {\n // Start new range\n handleValueChange({ from: date });\n } else {\n // Complete range\n const from = rangeValue.from;\n const to = date;\n if (to < from) {\n handleValueChange({ from: to, to: from });\n } else {\n handleValueChange({ from, to });\n }\n setOpen(false);\n }\n } else if (mode === \"multiple\") {\n const multipleValue = (calendarValue as Date[]) || [];\n const dateIndex = multipleValue.findIndex((d) => isSameDay(d, date));\n if (dateIndex >= 0) {\n // Remove date\n handleValueChange(multipleValue.filter((_, i) => i !== dateIndex));\n } else {\n // Add date\n handleValueChange([...multipleValue, date]);\n }\n }\n };\n\n // Get display value\n const displayValue = useMemo(() => {\n if (!calendarValue) return \"\";\n\n if (mode === \"single\") {\n return formatDate(calendarValue as Date, locale);\n } else if (mode === \"range\") {\n const range = calendarValue as { from?: Date; to?: Date };\n return formatDateRange(range.from, range.to, locale);\n } else {\n return formatMultipleDates(calendarValue as Date[], locale);\n }\n }, [calendarValue, mode, locale]);\n\n // Generate calendar days\n const calendarDays = useMemo(() => {\n const days: Array<{\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n }> = [];\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const firstDay = getFirstDayOfMonth(currentMonth, firstDayOfWeek);\n const daysInMonth = getDaysInMonth(currentMonth);\n\n // Previous month days\n if (showOutsideDays && firstDay > 0) {\n const prevMonth = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth() - 1,\n );\n const daysInPrevMonth = getDaysInMonth(prevMonth);\n for (\n let i = daysInPrevMonth - firstDay + 1;\n i <= daysInPrevMonth;\n i++\n ) {\n const date = new Date(\n prevMonth.getFullYear(),\n prevMonth.getMonth(),\n i,\n );\n days.push({\n date,\n isCurrentMonth: false,\n isToday: isSameDay(date, today),\n });\n }\n }\n\n // Current month days\n for (let i = 1; i <= daysInMonth; i++) {\n const date = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth(),\n i,\n );\n days.push({\n date,\n isCurrentMonth: true,\n isToday: isSameDay(date, today),\n });\n }\n\n // Next month days\n if (showOutsideDays) {\n const remainingDays = 42 - days.length; // 6 weeks * 7 days\n const nextMonth = new Date(\n currentMonth.getFullYear(),\n currentMonth.getMonth() + 1,\n );\n for (let i = 1; i <= remainingDays; i++) {\n const date = new Date(\n nextMonth.getFullYear(),\n nextMonth.getMonth(),\n i,\n );\n days.push({\n date,\n isCurrentMonth: false,\n isToday: isSameDay(date, today),\n });\n }\n }\n\n return days;\n }, [currentMonth, showOutsideDays, firstDayOfWeek]);\n\n // Navigate months\n const goToPreviousMonth = () => {\n setCurrentMonth(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1),\n );\n };\n\n const goToNextMonth = () => {\n setCurrentMonth(\n new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1),\n );\n };\n\n const goToToday = () => {\n const today = new Date();\n setCurrentMonth(today);\n setFocusedDate(today);\n };\n\n // Keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent, date: Date) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleDateClick(date);\n return;\n }\n\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n const nextDate = new Date(date);\n nextDate.setDate(nextDate.getDate() + 1);\n setFocusedDate(nextDate);\n // Update month if needed\n if (nextDate.getMonth() !== currentMonth.getMonth()) {\n setCurrentMonth(\n new Date(nextDate.getFullYear(), nextDate.getMonth(), 1),\n );\n }\n return;\n }\n\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n const prevDate = new Date(date);\n prevDate.setDate(prevDate.getDate() - 1);\n setFocusedDate(prevDate);\n // Update month if needed\n if (prevDate.getMonth() !== currentMonth.getMonth()) {\n setCurrentMonth(\n new Date(prevDate.getFullYear(), prevDate.getMonth(), 1),\n );\n }\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const nextDate = new Date(date);\n nextDate.setDate(nextDate.getDate() + 7);\n setFocusedDate(nextDate);\n // Update month if needed\n if (nextDate.getMonth() !== currentMonth.getMonth()) {\n setCurrentMonth(\n new Date(nextDate.getFullYear(), nextDate.getMonth(), 1),\n );\n }\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const prevDate = new Date(date);\n prevDate.setDate(prevDate.getDate() - 7);\n setFocusedDate(prevDate);\n // Update month if needed\n if (prevDate.getMonth() !== currentMonth.getMonth()) {\n setCurrentMonth(\n new Date(prevDate.getFullYear(), prevDate.getMonth(), 1),\n );\n }\n return;\n }\n\n if (e.key === \"Home\") {\n e.preventDefault();\n const firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\n setFocusedDate(firstDay);\n return;\n }\n\n if (e.key === \"End\") {\n e.preventDefault();\n const lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n setFocusedDate(lastDay);\n return;\n }\n\n if (e.key === \"PageUp\") {\n e.preventDefault();\n const prevMonth = new Date(\n date.getFullYear(),\n date.getMonth() - 1,\n date.getDate(),\n );\n setFocusedDate(prevMonth);\n setCurrentMonth(\n new Date(prevMonth.getFullYear(), prevMonth.getMonth(), 1),\n );\n return;\n }\n\n if (e.key === \"PageDown\") {\n e.preventDefault();\n const nextMonth = new Date(\n date.getFullYear(),\n date.getMonth() + 1,\n date.getDate(),\n );\n setFocusedDate(nextMonth);\n setCurrentMonth(\n new Date(nextMonth.getFullYear(), nextMonth.getMonth(), 1),\n );\n return;\n }\n\n if (e.key === \"Escape\") {\n e.preventDefault();\n setOpen(false);\n return;\n }\n };\n\n // Focus management\n useEffect(() => {\n if (focusedDate && open) {\n const dateKey = `${focusedDate.getFullYear()}-${focusedDate.getMonth()}-${focusedDate.getDate()}`;\n const button = dayButtonRefs.current.get(dateKey);\n if (button) {\n button.focus();\n }\n }\n }, [focusedDate, open]);\n\n // Day names\n const dayNames = useMemo(() => {\n const names = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n if (firstDayOfWeek === 1) {\n return [...names.slice(1), names[0]];\n }\n return names;\n }, [firstDayOfWeek]);\n\n // Month/year display\n const monthYearDisplay = currentMonth.toLocaleDateString(locale, {\n month: \"long\",\n year: \"numeric\",\n });\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n <Popover.Root open={open} onOpenChange={setOpen}>\n <div className=\"space-y-2\">\n {label && (\n <label className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n </label>\n )}\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background\",\n \"placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200 text-left\",\n error\n ? \"border-error-500 shadow-sm hover:border-error-600 focus-visible:ring-error-500/20 focus-visible:border-error-500\"\n : \"border-border shadow-sm hover:border-primary focus-visible:ring-ring/20 focus-visible:border-primary\",\n \"h-10\",\n inputClassName,\n )}\n // No onFocus handler here. Radix returns focus to the trigger\n // when the popover closes, so opening on focus meant selecting a\n // date closed it and immediately reopened it - the flicker. It\n // also popped the calendar open when tabbing past the field.\n onClick={() => setOpen(true)}\n aria-label={label || \"Open calendar\"}\n aria-invalid={error}\n >\n {displayValue || (\n <span className=\"text-muted-foreground\">\n {placeholder || \"Select date...\"}\n </span>\n )}\n </button>\n </Popover.Trigger>\n {helperText && (\n <p\n className={cn(\n \"text-sm text-muted-foreground\",\n error && \"text-error-600\",\n )}\n >\n {helperText}\n </p>\n )}\n </div>\n\n <Popover.Portal>\n <Popover.Content\n className={cn(\n \"z-50 w-auto rounded-lg border bg-popover p-4 shadow-lg\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n )}\n sideOffset={5}\n align=\"start\"\n >\n <div\n ref={calendarRef}\n className={cn(\n calendarVariants({ variant, size }),\n calendarClassName,\n )}\n role=\"application\"\n aria-label=\"Calendar\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={goToPreviousMonth}\n aria-label=\"Previous month\"\n >\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </Button>\n\n <h3\n className=\"text-sm font-semibold text-popover-foreground\"\n data-testid=\"calendar-month-year\"\n >\n {monthYearDisplay}\n </h3>\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={goToNextMonth}\n aria-label=\"Next month\"\n >\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </Button>\n </div>\n\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={goToToday}\n className=\"text-xs\"\n >\n Today\n </Button>\n </div>\n\n {/* Day names */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {dayNames.map((day) => (\n <div\n key={day}\n className=\"text-center text-xs font-medium text-muted-foreground\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((day, index) => {\n const isSelected =\n mode === \"single\"\n ? isSameDay(day.date, calendarValue as Date | undefined)\n : mode === \"range\"\n ? isDateInRange(\n day.date,\n (calendarValue as { from?: Date; to?: Date })\n ?.from,\n (calendarValue as { from?: Date; to?: Date })?.to,\n )\n : (calendarValue as Date[])?.some((d) =>\n isSameDay(d, day.date),\n );\n\n const isDisabled = isDateDisabled(\n day.date,\n minDate,\n maxDate,\n disabledDates,\n disabledDays,\n );\n\n const isInRange =\n mode === \"range\" &&\n (calendarValue as { from?: Date; to?: Date })?.from &&\n !(calendarValue as { from?: Date; to?: Date })?.to &&\n day.date >=\n (calendarValue as { from?: Date; to?: Date }).from!;\n\n const dateKey = `${day.date.getFullYear()}-${day.date.getMonth()}-${day.date.getDate()}`;\n const isFocused =\n focusedDate && isSameDay(day.date, focusedDate);\n\n return (\n <button\n key={`${day.date.getTime()}-${index}`}\n ref={(el) => {\n if (el) {\n dayButtonRefs.current.set(dateKey, el);\n } else {\n dayButtonRefs.current.delete(dateKey);\n }\n }}\n type=\"button\"\n onClick={() => {\n if (showOutsideDays && !day.isCurrentMonth) {\n // Navigate to the month of the clicked date\n setCurrentMonth(\n new Date(\n day.date.getFullYear(),\n day.date.getMonth(),\n 1,\n ),\n );\n // Synchronously: React batches both updates into one\n // render. Deferring the selection by a tick showed the\n // new month first and selected a frame later, which\n // read as a flash.\n handleDateClick(day.date);\n } else {\n handleDateClick(day.date);\n }\n }}\n onKeyDown={(e) => handleKeyDown(e, day.date)}\n disabled={\n isDisabled ||\n (showOutsideDays ? false : !day.isCurrentMonth)\n }\n className={cn(\n calendarDayVariants({\n variant: isSelected\n ? \"selected\"\n : isInRange\n ? \"range\"\n : day.isToday\n ? \"today\"\n : !day.isCurrentMonth\n ? \"outside\"\n : isDisabled\n ? \"disabled\"\n : \"default\",\n size,\n }),\n !day.isCurrentMonth && \"opacity-50\",\n isFocused &&\n \"ring-2 ring-brand-500 ring-offset-2 z-10\",\n )}\n aria-label={day.date.toLocaleDateString(locale, {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n })}\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n tabIndex={isFocused ? 0 : -1}\n >\n {day.date.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Footer for range mode */}\n {mode === \"range\" &&\n (calendarValue as { from?: Date; to?: Date })?.from &&\n !(calendarValue as { from?: Date; to?: Date })?.to && (\n <div className=\"mt-4 pt-4 border-t border-border\">\n <p className=\"text-xs text-muted-foreground text-center\">\n Select end date\n </p>\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n );\n },\n);\n\nCalendar.displayName = \"Calendar\";\n\nexport { calendarVariants, calendarDayVariants };\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunk7SPPGTBT_cjs=require('./chunk-7SPPGTBT.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),a=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var a__default=/*#__PURE__*/_interopDefault(a);var Y=classVarianceAuthority.cva("absolute z-50 px-3 py-2 text-sm font-medium rounded-md shadow-lg transition-opacity duration-200",{variants:{variant:{default:"bg-popover text-popover-foreground border border-border",light:"bg-popover text-popover-foreground border border-border",dark:"bg-popover text-popover-foreground border border-border",success:"bg-success text-success-foreground",warning:"bg-warning text-warning-foreground",error:"bg-destructive text-destructive-foreground",info:"bg-info text-info-foreground"},size:{sm:"text-xs px-2 py-1",md:"text-sm px-3 py-2",lg:"text-base px-4 py-3"},placement:{top:"bottom-full left-1/2 -translate-x-1/2 mb-2","top-start":"bottom-full left-0 mb-2","top-end":"bottom-full right-0 mb-2",bottom:"top-full left-1/2 -translate-x-1/2 mt-2","bottom-start":"top-full left-0 mt-2","bottom-end":"top-full right-0 mt-2",left:"right-full top-1/2 -translate-y-1/2 mr-2","left-start":"right-full top-0 mr-2","left-end":"right-full bottom-0 mr-2",right:"left-full top-1/2 -translate-y-1/2 ml-2","right-start":"left-full top-0 ml-2","right-end":"left-full bottom-0 ml-2"}},defaultVariants:{variant:"default",size:"md",placement:"top"}}),Z=classVarianceAuthority.cva("absolute w-2 h-2 rotate-45",{variants:{variant:{default:"bg-popover border border-border",light:"bg-popover border border-border",dark:"bg-popover border border-border",success:"bg-success-500",warning:"bg-warning-500",error:"bg-destructive",info:"bg-info-500"},placement:{top:"top-full left-1/2 -translate-x-1/2 -translate-y-1/2","top-start":"top-full left-4 -translate-y-1/2","top-end":"top-full right-4 -translate-y-1/2",bottom:"bottom-full left-1/2 -translate-x-1/2 translate-y-1/2","bottom-start":"bottom-full left-4 translate-y-1/2","bottom-end":"bottom-full right-4 translate-y-1/2",left:"left-full top-1/2 -translate-x-1/2 -translate-y-1/2","left-start":"left-full top-4 -translate-x-1/2","left-end":"left-full bottom-4 -translate-x-1/2",right:"right-full top-1/2 translate-x-1/2 -translate-y-1/2","right-start":"right-full top-4 translate-x-1/2","right-end":"right-full bottom-4 translate-x-1/2"}},defaultVariants:{variant:"default",placement:"top"}}),O=a__default.default.createContext(void 0),$=()=>{let u=a__default.default.useContext(O);if(!u)throw new Error("Tooltip components must be used within a Tooltip");return u},q=a__default.default.forwardRef(({children:u,content:v,trigger:T="hover",open:i,onOpenChange:d,delayDuration:e=700,skipDelayDuration:y=300,disabled:f=false,className:E,contentClassName:s,sideOffset:C=4,alignOffset:M=0,avoidCollisions:R=true,collisionBoundary:w,collisionPadding:o=8,hideWhenDetached:x=false,sticky:D="partial",updatePositionDeps:L,closeOnBlur:H=true,...h},c)=>{let[N,t]=a.useState(false),r=a.useRef(null),g=a.useRef(null),l=i!==void 0,n=l?i:N,p=a.useCallback(_=>{f||(l||t(_),d?.(_));},[f,l,d]),m=a.useCallback(()=>{r.current!=null&&(clearTimeout(r.current),r.current=null),g.current!=null&&(clearTimeout(g.current),g.current=null);},[]),W=a.useCallback(()=>{m(),p(true);},[m,p]),B=a.useCallback(()=>{m(),p(false);},[m,p]),V=a.useCallback(()=>{m(),!f&&(e>0?r.current=window.setTimeout(()=>{p(true);},e):p(true));},[m,f,e,p]),z=a.useCallback(()=>{m(),y>0?g.current=window.setTimeout(()=>{p(false);},y):p(false);},[m,y,p]),G=a.useCallback(()=>{n?z():V();},[n,V,z]),J=a.useCallback(()=>{n?B():W();},[n,W,B]);a.useEffect(()=>()=>{m();},[m]);let Q={open:n,setOpen:p,trigger:T,delayDuration:e,skipDelayDuration:y,openNow:W,closeNow:B,openWithDelay:V,closeWithDelay:z,toggleWithDelay:G,toggleNow:J,closeOnBlur:H},U=n===true;return a__default.default.createElement(O.Provider,{value:Q},a__default.default.createElement("div",{ref:c,className:chunkITRGJNWL_cjs.a("relative inline-block",E),"data-open":n,...h},u,U?a__default.default.createElement(F,{className:s||"",sideOffset:C,alignOffset:M,avoidCollisions:R,collisionBoundary:w||null,collisionPadding:o,hideWhenDetached:x,sticky:D,updatePositionDeps:L||[],variant:h.variant,size:h.size,placement:h.placement},v):null))});q.displayName="Tooltip";var A=a__default.default.forwardRef(({children:u,asChild:v=true,className:T,...i},d)=>{let{trigger:e,openNow:y,closeNow:f,openWithDelay:E,closeWithDelay:s,toggleNow:C,closeOnBlur:M}=$(),R=a.useRef(null),w={ref:o=>{R.current=o,typeof d=="function"?d(o):d&&(d.current=o);},className:chunkITRGJNWL_cjs.a(T),"data-tooltip-trigger":true,onMouseEnter:o=>{i.onMouseEnter?.(o),e==="hover"&&E();},onMouseLeave:o=>{i.onMouseLeave?.(o),e==="hover"&&s();},onPointerEnter:o=>{i.onPointerEnter?.(o),e==="hover"&&E();},onPointerLeave:o=>{i.onPointerLeave?.(o),e==="hover"&&s();},onClick:o=>{i.onClick?.(o),e==="click"&&C();},onFocus:o=>{i.onFocus?.(o),e==="focus"&&y();},onBlur:o=>{i.onBlur?.(o),M&&f();},onKeyDown:o=>{i.onKeyDown?.(o),o.key==="Escape"&&f();}};return v&&a__default.default.isValidElement(u)?a__default.default.cloneElement(u,{...u.props||{},...w}):a__default.default.createElement("span",{...w,tabIndex:e==="focus"?0:void 0,role:e==="click"?"button":void 0},u)});A.displayName="TooltipTrigger";var F=a__default.default.forwardRef(({children:u,variant:v="default",size:T="md",placement:i="top",className:d,sideOffset:e=4,alignOffset:y=0,avoidCollisions:f=true,collisionBoundary:E,collisionPadding:s=8,hideWhenDetached:C=false,sticky:M="partial",updatePositionDeps:R,...w},o)=>{let x=a__default.default.useContext(O)?.open??true,D=a.useRef(null),[L,H]=a.useState({top:0,left:0}),h=a.useCallback(()=>{if(!D.current)return;let c=D.current,N=c.parentElement?.querySelector("[data-tooltip-trigger]");if(!N)return;let t=N.getBoundingClientRect(),r=c.getBoundingClientRect(),g={width:window.innerWidth,height:window.innerHeight},l=0,n=0;switch(i){case "top":l=t.top-r.height-e,n=t.left+t.width/2-r.width/2;break;case "top-start":l=t.top-r.height-e,n=t.left;break;case "top-end":l=t.top-r.height-e,n=t.right-r.width;break;case "bottom":l=t.bottom+e,n=t.left+t.width/2-r.width/2;break;case "bottom-start":l=t.bottom+e,n=t.left;break;case "bottom-end":l=t.bottom+e,n=t.right-r.width;break;case "left":l=t.top+t.height/2-r.height/2,n=t.left-r.width-e;break;case "left-start":l=t.top,n=t.left-r.width-e;break;case "left-end":l=t.bottom-r.height,n=t.left-r.width-e;break;case "right":l=t.top+t.height/2-r.height/2,n=t.right+e;break;case "right-start":l=t.top,n=t.right+e;break;case "right-end":l=t.bottom-r.height,n=t.right+e;break}f&&(n<s?n=s:n+r.width>g.width-s&&(n=g.width-r.width-s),l<s?l=s:l+r.height>g.height-s&&(l=g.height-r.height-s)),H({top:l,left:n});},[i,e,f,s]);return a__default.default.useLayoutEffect(()=>{h();let c=()=>h();return window.addEventListener("resize",c),window.addEventListener("scroll",c),()=>{window.removeEventListener("resize",c),window.removeEventListener("scroll",c);}},[h,R,x]),a__default.default.createElement("div",{ref:c=>{D.current=c,typeof o=="function"?o(c):o&&(o.current=c);},role:"tooltip","data-tooltip-instance":"nostromo","data-state":x?"open":"closed","aria-hidden":x?void 0:true,className:chunkITRGJNWL_cjs.a(Y({variant:v,size:T,placement:i}),x?"opacity-100":"pointer-events-none opacity-0",d),style:{position:"fixed",top:L.top,left:L.left,zIndex:50},...w},u,a__default.default.createElement("div",{className:chunkITRGJNWL_cjs.a(Z({variant:v,placement:i}))}))});F.displayName="TooltipContent";var tt=({children:u,delayDuration:v=700,skipDelayDuration:T=300,defaultOpen:i=false})=>a__default.default.createElement("div",{"data-tooltip-provider":true},u),j=chunk7SPPGTBT_cjs.a(q);j.Trigger=A;j.Content=F;j.Provider=tt;exports.a=Y;exports.b=Z;exports.c=A;exports.d=F;exports.e=tt;exports.f=j;//# sourceMappingURL=chunk-MDXW6IRM.cjs.map
3
+ //# sourceMappingURL=chunk-MDXW6IRM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/tooltip.tsx"],"names":["tooltipVariants","cva","arrowVariants","TooltipContext","React","useTooltipContext","context","TooltipComponent","children","content","trigger","controlledOpen","onOpenChange","delayDuration","skipDelayDuration","disabled","className","contentClassName","sideOffset","alignOffset","avoidCollisions","collisionBoundary","collisionPadding","hideWhenDetached","sticky","updatePositionDeps","closeOnBlur","props","ref","internalOpen","setInternalOpen","useState","delayTimerRef","useRef","skipDelayTimerRef","isControlled","open","setOpen","useCallback","newOpen","clearTimers","openNow","closeNow","openWithDelay","closeWithDelay","toggleWithDelay","toggleNow","useEffect","contextValue","shouldRenderContent","cn","TooltipContent","TooltipTrigger","asChild","triggerRef","triggerProps","node","e","variant","size","placement","_alignOffset","_collisionBoundary","_hideWhenDetached","_sticky","contentRef","position","setPosition","updatePosition","triggerRect","contentRect","viewport","top","left","handleResize","TooltipProvider","_delayDuration","_skipDelayDuration","_defaultOpen","Tooltip","memo"],"mappings":"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","file":"chunk-MDXW6IRM.cjs","sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\n\n// Tooltip variants\nconst tooltipVariants = cva(\n \"absolute z-50 px-3 py-2 text-sm font-medium rounded-md shadow-lg transition-opacity duration-200\",\n {\n variants: {\n variant: {\n default: \"bg-popover text-popover-foreground border border-border\",\n light: \"bg-popover text-popover-foreground border border-border\",\n dark: \"bg-popover text-popover-foreground border border-border\",\n success: \"bg-success text-success-foreground\",\n warning: \"bg-warning text-warning-foreground\",\n error: \"bg-destructive text-destructive-foreground\",\n info: \"bg-info text-info-foreground\",\n },\n size: {\n sm: \"text-xs px-2 py-1\",\n md: \"text-sm px-3 py-2\",\n lg: \"text-base px-4 py-3\",\n },\n placement: {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n \"top-start\": \"bottom-full left-0 mb-2\",\n \"top-end\": \"bottom-full right-0 mb-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n \"bottom-start\": \"top-full left-0 mt-2\",\n \"bottom-end\": \"top-full right-0 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n \"left-start\": \"right-full top-0 mr-2\",\n \"left-end\": \"right-full bottom-0 mr-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n \"right-start\": \"left-full top-0 ml-2\",\n \"right-end\": \"left-full bottom-0 ml-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n placement: \"top\",\n },\n },\n);\n\nconst arrowVariants = cva(\"absolute w-2 h-2 rotate-45\", {\n variants: {\n variant: {\n default: \"bg-popover border border-border\",\n light: \"bg-popover border border-border\",\n dark: \"bg-popover border border-border\",\n success: \"bg-success-500\",\n warning: \"bg-warning-500\",\n error: \"bg-destructive\",\n info: \"bg-info-500\",\n },\n placement: {\n top: \"top-full left-1/2 -translate-x-1/2 -translate-y-1/2\",\n \"top-start\": \"top-full left-4 -translate-y-1/2\",\n \"top-end\": \"top-full right-4 -translate-y-1/2\",\n bottom: \"bottom-full left-1/2 -translate-x-1/2 translate-y-1/2\",\n \"bottom-start\": \"bottom-full left-4 translate-y-1/2\",\n \"bottom-end\": \"bottom-full right-4 translate-y-1/2\",\n left: \"left-full top-1/2 -translate-x-1/2 -translate-y-1/2\",\n \"left-start\": \"left-full top-4 -translate-x-1/2\",\n \"left-end\": \"left-full bottom-4 -translate-x-1/2\",\n right: \"right-full top-1/2 translate-x-1/2 -translate-y-1/2\",\n \"right-start\": \"right-full top-4 translate-x-1/2\",\n \"right-end\": \"right-full bottom-4 translate-x-1/2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n placement: \"top\",\n },\n});\n\n// Types\nexport interface TooltipProps extends VariantProps<typeof tooltipVariants> {\n children: React.ReactNode;\n content: React.ReactNode;\n trigger?: \"hover\" | \"click\" | \"focus\" | \"manual\";\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n delayDuration?: number;\n skipDelayDuration?: number;\n disabled?: boolean;\n className?: string;\n contentClassName?: string;\n sideOffset?: number;\n alignOffset?: number;\n avoidCollisions?: boolean;\n collisionBoundary?: Element | null;\n collisionPadding?: number;\n hideWhenDetached?: boolean;\n sticky?: \"partial\" | \"always\";\n updatePositionDeps?: React.DependencyList;\n closeOnBlur?: boolean;\n}\n\nexport interface TooltipContentProps extends VariantProps<\n typeof tooltipVariants\n> {\n children: React.ReactNode;\n className?: string;\n sideOffset?: number;\n alignOffset?: number;\n avoidCollisions?: boolean;\n collisionBoundary?: Element | null;\n collisionPadding?: number;\n hideWhenDetached?: boolean;\n sticky?: \"partial\" | \"always\";\n updatePositionDeps?: React.DependencyList;\n}\n\nexport interface TooltipTriggerProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n asChild?: boolean;\n className?: string;\n}\n\n// Tooltip Context\ninterface TooltipContextType {\n open: boolean;\n setOpen: (open: boolean) => void;\n trigger: \"hover\" | \"click\" | \"focus\" | \"manual\";\n delayDuration: number;\n skipDelayDuration: number;\n openNow: () => void;\n closeNow: () => void;\n openWithDelay: () => void;\n closeWithDelay: () => void;\n toggleWithDelay: () => void;\n toggleNow: () => void;\n closeOnBlur: boolean;\n}\n\nconst TooltipContext = React.createContext<TooltipContextType | undefined>(\n undefined,\n);\n\nconst useTooltipContext = () => {\n const context = React.useContext(TooltipContext);\n if (!context) {\n throw new Error(\"Tooltip components must be used within a Tooltip\");\n }\n return context;\n};\n\n// Main Tooltip Component\nconst TooltipComponent = React.forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n children,\n content,\n trigger = \"hover\",\n open: controlledOpen,\n onOpenChange,\n delayDuration = 700,\n skipDelayDuration = 300,\n disabled = false,\n className,\n contentClassName,\n sideOffset = 4,\n alignOffset = 0,\n avoidCollisions = true,\n collisionBoundary,\n collisionPadding = 8,\n hideWhenDetached = false,\n sticky = \"partial\",\n updatePositionDeps,\n closeOnBlur = true,\n ...props\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const delayTimerRef = useRef<number | ReturnType<typeof setTimeout> | null>(\n null,\n );\n const skipDelayTimerRef = useRef<\n number | ReturnType<typeof setTimeout> | null\n >(null);\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback(\n (newOpen: boolean) => {\n if (disabled) return;\n\n if (isControlled) {\n onOpenChange?.(newOpen);\n } else {\n setInternalOpen(newOpen);\n onOpenChange?.(newOpen); // notify i uncontrolled\n }\n },\n [disabled, isControlled, onOpenChange],\n );\n\n // --- Tooltip open/close/toggle helpers ---\n const clearTimers = useCallback(() => {\n if (delayTimerRef.current != null) {\n clearTimeout(delayTimerRef.current);\n delayTimerRef.current = null;\n }\n if (skipDelayTimerRef.current != null) {\n clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = null;\n }\n }, []);\n\n const openNow = useCallback(() => {\n clearTimers();\n setOpen(true);\n }, [clearTimers, setOpen]);\n\n const closeNow = useCallback(() => {\n clearTimers();\n setOpen(false);\n }, [clearTimers, setOpen]);\n\n const openWithDelay = useCallback(() => {\n clearTimers();\n if (disabled) return;\n if (delayDuration > 0) {\n delayTimerRef.current = window.setTimeout(() => {\n setOpen(true);\n }, delayDuration);\n } else {\n setOpen(true);\n }\n }, [clearTimers, disabled, delayDuration, setOpen]);\n\n const closeWithDelay = useCallback(() => {\n clearTimers();\n if (skipDelayDuration > 0) {\n skipDelayTimerRef.current = window.setTimeout(() => {\n setOpen(false);\n }, skipDelayDuration);\n } else {\n setOpen(false);\n }\n }, [clearTimers, skipDelayDuration, setOpen]);\n\n const toggleWithDelay = useCallback(() => {\n if (open) {\n closeWithDelay();\n } else {\n openWithDelay();\n }\n }, [open, openWithDelay, closeWithDelay]);\n\n const toggleNow = useCallback(() => {\n if (open) closeNow();\n else openNow();\n }, [open, openNow, closeNow]);\n\n // Cleanup timers on unmount\n useEffect(() => {\n return () => {\n clearTimers();\n };\n }, [clearTimers]);\n\n const contextValue: TooltipContextType = {\n open,\n setOpen,\n trigger,\n delayDuration,\n skipDelayDuration,\n openNow,\n closeNow,\n openWithDelay,\n closeWithDelay,\n toggleWithDelay,\n toggleNow,\n closeOnBlur,\n };\n\n // Only render the TooltipContent when open is true (and no pending close timer),\n // to help guard against duplicate tooltips in StrictMode/rapid toggles.\n const shouldRenderContent = open === true;\n\n return (\n <TooltipContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={cn(\"relative inline-block\", className)}\n data-open={open}\n {...props}\n >\n {children}\n {shouldRenderContent ? (\n <TooltipContent\n className={contentClassName || \"\"}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n avoidCollisions={avoidCollisions}\n collisionBoundary={collisionBoundary || null}\n collisionPadding={collisionPadding}\n hideWhenDetached={hideWhenDetached}\n sticky={sticky}\n updatePositionDeps={updatePositionDeps || []}\n variant={props.variant}\n size={props.size}\n placement={props.placement}\n >\n {content}\n </TooltipContent>\n ) : null}\n </div>\n </TooltipContext.Provider>\n );\n },\n);\n\nTooltipComponent.displayName = \"Tooltip\";\n\n// Note: Tooltip memoization and subcomponent attachment happens at end of file\n\n// Tooltip Trigger Component\nexport const TooltipTrigger = React.forwardRef<\n HTMLElement,\n TooltipTriggerProps\n>(({ children, asChild = true, className, ...props }, ref) => {\n const {\n trigger,\n openNow,\n closeNow,\n openWithDelay,\n closeWithDelay,\n toggleNow,\n closeOnBlur,\n } = useTooltipContext();\n const triggerRef = useRef<HTMLElement>(null);\n\n const triggerProps = {\n ref: (node: HTMLElement) => {\n (triggerRef as React.MutableRefObject<HTMLElement | null>).current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLElement | null>).current = node;\n }\n },\n className: cn(className),\n \"data-tooltip-trigger\": true,\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => {\n // Call external handler first\n props.onMouseEnter?.(e as React.MouseEvent<HTMLElement>);\n if (trigger === \"hover\") {\n openWithDelay();\n }\n },\n onMouseLeave: (e: React.MouseEvent<HTMLElement>) => {\n props.onMouseLeave?.(e as React.MouseEvent<HTMLElement>);\n if (trigger === \"hover\") closeWithDelay();\n },\n onPointerEnter: (e: React.PointerEvent) => {\n // @ts-expect-error - Event handler type compatibility\n props.onPointerEnter?.(e);\n if (trigger === \"hover\") openWithDelay();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n // @ts-expect-error - Event handler type compatibility\n props.onPointerLeave?.(e);\n if (trigger === \"hover\") closeWithDelay();\n },\n onClick: (e: React.MouseEvent) => {\n // @ts-expect-error - Event handler type compatibility\n props.onClick?.(e);\n if (trigger === \"click\") toggleNow();\n },\n onFocus: (e: React.FocusEvent) => {\n // @ts-expect-error - Event handler type compatibility\n props.onFocus?.(e);\n if (trigger === \"focus\") openNow();\n },\n onBlur: (e: React.FocusEvent) => {\n // @ts-expect-error - Event handler type compatibility\n props.onBlur?.(e);\n if (closeOnBlur) closeNow();\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n // @ts-expect-error - Event handler type compatibility\n props.onKeyDown?.(e);\n if (e.key === \"Escape\") closeNow();\n },\n };\n\n if (asChild && React.isValidElement(children)) {\n // eslint-disable-next-line react-hooks/refs -- cloneElement merges triggerProps (incl. ref) onto the child; the ref is not read here\n return React.cloneElement(children, {\n ...(children.props || {}),\n ...triggerProps,\n });\n }\n\n return (\n <span\n {...triggerProps}\n tabIndex={trigger === \"focus\" ? 0 : undefined}\n role={trigger === \"click\" ? \"button\" : undefined}\n >\n {children}\n </span>\n );\n});\n\nTooltipTrigger.displayName = \"TooltipTrigger\";\n\n// Tooltip Content Component\nexport const TooltipContent = React.forwardRef<\n HTMLDivElement,\n TooltipContentProps\n>(\n (\n {\n children,\n variant = \"default\",\n size = \"md\",\n placement = \"top\",\n className,\n sideOffset = 4,\n alignOffset: _alignOffset = 0,\n avoidCollisions = true,\n collisionBoundary: _collisionBoundary,\n collisionPadding = 8,\n hideWhenDetached: _hideWhenDetached = false,\n sticky: _sticky = \"partial\",\n updatePositionDeps,\n ...props\n },\n ref,\n ) => {\n // Read the context directly rather than through useTooltipContext: that\n // throws without a provider, and TooltipContent was usable standalone before\n // this. Absent a Tooltip parent there is nothing to open it, so treat it as\n // shown - which is also what it did previously.\n const open = React.useContext(TooltipContext)?.open ?? true;\n const contentRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n const updatePosition = useCallback(() => {\n if (!contentRef.current) return;\n\n const content = contentRef.current;\n const trigger = content.parentElement?.querySelector(\n \"[data-tooltip-trigger]\",\n ) as HTMLElement;\n\n if (!trigger) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n let top = 0;\n let left = 0;\n\n // Calculate position based on placement\n switch (placement) {\n case \"top\":\n top = triggerRect.top - contentRect.height - sideOffset;\n left =\n triggerRect.left + triggerRect.width / 2 - contentRect.width / 2;\n break;\n case \"top-start\":\n top = triggerRect.top - contentRect.height - sideOffset;\n left = triggerRect.left;\n break;\n case \"top-end\":\n top = triggerRect.top - contentRect.height - sideOffset;\n left = triggerRect.right - contentRect.width;\n break;\n case \"bottom\":\n top = triggerRect.bottom + sideOffset;\n left =\n triggerRect.left + triggerRect.width / 2 - contentRect.width / 2;\n break;\n case \"bottom-start\":\n top = triggerRect.bottom + sideOffset;\n left = triggerRect.left;\n break;\n case \"bottom-end\":\n top = triggerRect.bottom + sideOffset;\n left = triggerRect.right - contentRect.width;\n break;\n case \"left\":\n top =\n triggerRect.top + triggerRect.height / 2 - contentRect.height / 2;\n left = triggerRect.left - contentRect.width - sideOffset;\n break;\n case \"left-start\":\n top = triggerRect.top;\n left = triggerRect.left - contentRect.width - sideOffset;\n break;\n case \"left-end\":\n top = triggerRect.bottom - contentRect.height;\n left = triggerRect.left - contentRect.width - sideOffset;\n break;\n case \"right\":\n top =\n triggerRect.top + triggerRect.height / 2 - contentRect.height / 2;\n left = triggerRect.right + sideOffset;\n break;\n case \"right-start\":\n top = triggerRect.top;\n left = triggerRect.right + sideOffset;\n break;\n case \"right-end\":\n top = triggerRect.bottom - contentRect.height;\n left = triggerRect.right + sideOffset;\n break;\n }\n\n // Apply collision detection if enabled\n if (avoidCollisions) {\n // Horizontal collision detection\n if (left < collisionPadding) {\n left = collisionPadding;\n } else if (\n left + contentRect.width >\n viewport.width - collisionPadding\n ) {\n left = viewport.width - contentRect.width - collisionPadding;\n }\n\n // Vertical collision detection\n if (top < collisionPadding) {\n top = collisionPadding;\n } else if (\n top + contentRect.height >\n viewport.height - collisionPadding\n ) {\n top = viewport.height - contentRect.height - collisionPadding;\n }\n }\n\n setPosition({ top, left });\n }, [placement, sideOffset, avoidCollisions, collisionPadding]);\n\n React.useLayoutEffect(() => {\n updatePosition();\n\n const handleResize = () => updatePosition();\n window.addEventListener(\"resize\", handleResize);\n window.addEventListener(\"scroll\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n window.removeEventListener(\"scroll\", handleResize);\n };\n // is a dependency: the box is measured to place it, and measuring\n // it while closed gave a stale position on the first show.\n }, [updatePosition, updatePositionDeps, open]);\n\n return (\n <div\n ref={(node) => {\n (\n contentRef as React.MutableRefObject<HTMLDivElement | null>\n ).current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n }\n }}\n role=\"tooltip\"\n data-tooltip-instance=\"nostromo\"\n data-state={open ? \"open\" : \"closed\"}\n aria-hidden={open ? undefined : true}\n className={cn(\n tooltipVariants({ variant, size, placement }),\n // The content never read the open state. `data-open` was written on the\n // wrapper and nothing - no CSS, no conditional render - ever acted on\n // it, so the tooltip was permanently visible, sitting on top of its own\n // trigger. Bound to opacity rather than unmounted so the\n // `transition-opacity` the variants already declare still runs.\n open ? \"opacity-100\" : \"pointer-events-none opacity-0\",\n className,\n )}\n style={{\n position: \"fixed\",\n top: position.top,\n left: position.left,\n zIndex: 50,\n }}\n {...props}\n >\n {children}\n <div className={cn(arrowVariants({ variant, placement }))} />\n </div>\n );\n },\n);\n\nTooltipContent.displayName = \"TooltipContent\";\n\n// Tooltip Provider for global configuration\nexport interface TooltipProviderProps {\n children: React.ReactNode;\n delayDuration?: number;\n skipDelayDuration?: number;\n defaultOpen?: boolean;\n}\n\nexport const TooltipProvider: React.FC<TooltipProviderProps> = ({\n children,\n delayDuration: _delayDuration = 700,\n skipDelayDuration: _skipDelayDuration = 300,\n defaultOpen: _defaultOpen = false,\n}) => {\n return <div data-tooltip-provider>{children}</div>;\n};\n\n// Memoize Tooltip for performance optimization (after all subcomponents are defined)\nconst Tooltip = memo(TooltipComponent) as typeof TooltipComponent & {\n Trigger: typeof TooltipTrigger;\n Content: typeof TooltipContent;\n Provider: typeof TooltipProvider;\n};\n\n// Attach subcomponents to Tooltip for compound component pattern\nTooltip.Trigger = TooltipTrigger;\nTooltip.Content = TooltipContent;\nTooltip.Provider = TooltipProvider;\n\n// Export variants and Tooltip for external use\nexport { Tooltip, tooltipVariants, arrowVariants };\n"]}