@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
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var e__default=/*#__PURE__*/_interopDefault(e);var q=classVarianceAuthority.cva("w-full border-collapse transition-all duration-200",{variants:{variant:{default:"border border-border shadow-sm hover:shadow-md",striped:"border border-border shadow-sm hover:shadow-md",bordered:"border-2 border-border shadow-md hover:shadow-lg",hover:"border border-border shadow-sm hover:shadow-md",elevated:"border border-border shadow-lg hover:shadow-xl",interactive:"border border-border shadow-sm hover:shadow-md hover:border-primary"},size:{sm:"text-xs sm:text-sm",md:"text-sm sm:text-base",lg:"text-base sm:text-lg"}},defaultVariants:{variant:"default",size:"md"}}),O=classVarianceAuthority.cva("font-medium text-left transition-all duration-200",{variants:{variant:{default:"bg-muted text-foreground hover:bg-muted/80",striped:"bg-muted text-foreground hover:bg-muted/80",bordered:"bg-muted text-foreground hover:bg-muted/80",hover:"bg-muted text-foreground hover:bg-muted/80",elevated:"bg-muted text-foreground hover:bg-muted/80",interactive:"bg-muted text-foreground hover:bg-primary/10 hover:text-primary"},size:{sm:"px-2 py-1 sm:px-3 sm:py-2",md:"px-3 py-2 sm:px-4 sm:py-3",lg:"px-4 py-3 sm:px-6 sm:py-4"}},defaultVariants:{variant:"default",size:"md"}}),U=classVarianceAuthority.cva("border-b border-border transition-colors",{variants:{variant:{default:"hover:bg-muted/50",striped:"even:bg-muted/50 hover:bg-muted/80",bordered:"hover:bg-muted/50",hover:"hover:bg-muted/50",elevated:"hover:bg-muted/80",interactive:"hover:bg-primary/10 hover:text-primary"}},defaultVariants:{variant:"default"}}),w=classVarianceAuthority.cva("border-border transition-all duration-200",{variants:{variant:{default:"border-b border-border hover:bg-muted/50",striped:"border-b border-border hover:bg-muted/80",bordered:"border border-border hover:bg-muted/50",hover:"border-b border-border hover:bg-muted/50",elevated:"border-b border-border hover:bg-muted/80",interactive:"border-b border-border hover:bg-primary/10 hover:text-primary"},size:{sm:"px-2 py-1 sm:px-3 sm:py-2",md:"px-3 py-2 sm:px-4 sm:py-3",lg:"px-4 py-3 sm:px-6 sm:py-4"}},defaultVariants:{variant:"default",size:"md"}});function W({data:a,columns:n,loading:i=false,emptyText:p="No data",className:u,variant:l,size:b,rowKey:c="id",onRowClick:M,onSort:K,sortColumn:N,sortDirection:E,pagination:t,selection:s,caption:k,...L},B){let[I,D]=e.useState(null),P=N!==void 0,g=P&&N?{column:N,direction:E||"asc"}:I,j=r=>{if(!r.sortable)return;let d=g?.column===r.key&&g?.direction==="asc"?"desc":"asc";P||D({column:r.key,direction:d}),K?.(r,d);},h=(r,d)=>typeof c=="function"?c(r):r[c]||d,z=(r,d)=>{if(!s)return false;let o=h(r,d);return s.selectedRowKeys.includes(o)},A=(r,d,o)=>{if(!s)return;let v=h(r,d),y=o?[...s.selectedRowKeys,v]:s.selectedRowKeys.filter(S=>S!==v),C=a.filter((S,J)=>y.includes(h(S,J)));s.onChange(y,C);},G=r=>{if(!s)return;let d=a.map((y,C)=>h(y,C)),o=r?d:[],v=r?a:[];s.onChange(o,v);},$=s&&a.length>0&&s.selectedRowKeys.length===a.length,F=s&&s.selectedRowKeys.length>0&&s.selectedRowKeys.length<a.length;return e__default.default.createElement("div",{className:"w-full overflow-x-auto"},e__default.default.createElement("div",{className:"min-w-full"},e__default.default.createElement("table",{ref:B,className:chunkITRGJNWL_cjs.a(q({variant:l,size:b}),u),...L},k&&e__default.default.createElement("caption",{className:"sr-only"},k),e__default.default.createElement(V,null,e__default.default.createElement(f,null,s&&e__default.default.createElement("th",{className:chunkITRGJNWL_cjs.a(w({variant:l,size:b})),scope:"col",role:"columnheader"},e__default.default.createElement("input",{type:"checkbox",checked:$,ref:r=>{r&&(r.indeterminate=F||false);},onChange:r=>G(r.target.checked),className:"rounded border-input text-primary focus:ring-ring","aria-label":"Select all rows"})),n.map(r=>e__default.default.createElement("th",{key:r.key,className:chunkITRGJNWL_cjs.a(w({variant:l,size:b}),r.className,r.align==="center"&&"text-center",r.align==="right"&&"text-right"),scope:"col",role:"columnheader",...r.width&&{style:{width:r.width}}},e__default.default.createElement("div",{className:"flex items-center gap-2"},e__default.default.createElement("span",null,r.title),r.sortable&&e__default.default.createElement("button",{type:"button",onClick:()=>j(r),className:"flex flex-col text-muted-foreground hover:text-foreground","aria-label":`Sort by ${r.title}`},e__default.default.createElement("svg",{className:chunkITRGJNWL_cjs.a("w-3 h-3",g?.column===r.key&&g?.direction==="asc"?"text-primary":"text-muted-foreground"),fill:"currentColor",viewBox:"0 0 20 20"},e__default.default.createElement("path",{d:"M5 8l5-5 5 5H5z"})),e__default.default.createElement("svg",{className:chunkITRGJNWL_cjs.a("w-3 h-3 -mt-1",g?.column===r.key&&g?.direction==="desc"?"text-primary":"text-muted-foreground"),fill:"currentColor",viewBox:"0 0 20 20"},e__default.default.createElement("path",{d:"M5 12l5 5 5-5H5z"})))))))),e__default.default.createElement(R,null,i?e__default.default.createElement(f,null,e__default.default.createElement(x,{colSpan:n.length+(s?1:0),variant:l,size:b,className:"text-center py-8"},e__default.default.createElement("div",{className:"flex items-center justify-center gap-2"},e__default.default.createElement("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-primary"}),e__default.default.createElement("span",null,"Loading...")))):a.length===0?e__default.default.createElement(f,null,e__default.default.createElement(x,{colSpan:n.length+(s?1:0),variant:l,size:b,className:"text-center py-8 text-muted-foreground"},p)):a.map((r,d)=>e__default.default.createElement(f,{key:h(r,d),variant:l,onClick:()=>M?.(r,d),selected:z(r,d)},s&&e__default.default.createElement(x,{variant:l,size:b},e__default.default.createElement("input",{type:"checkbox",checked:z(r,d),onChange:o=>A(r,d,o.target.checked),className:"rounded border-input text-primary focus:ring-ring","aria-label":`Select row ${d+1}`,...s.getCheckboxProps?.(r)})),n.map(o=>e__default.default.createElement(x,{key:o.key,variant:l,size:b,className:chunkITRGJNWL_cjs.a(o.className,o.align==="center"&&"text-center",o.align==="right"&&"text-right")},o.render?o.render(o.dataIndex?r[o.dataIndex]:r,r,d):o.dataIndex?r[o.dataIndex]:r[o.key]))))))),t&&e__default.default.createElement("div",{className:"flex flex-col sm:flex-row items-center justify-between mt-4 px-2 sm:px-4 py-3 bg-card border-t border-border gap-2 sm:gap-0"},e__default.default.createElement("div",{className:"flex items-center gap-2"},e__default.default.createElement("span",{className:"text-sm text-muted-foreground"},"Showing ",(t.current-1)*t.pageSize+1," to"," ",Math.min(t.current*t.pageSize,t.total)," ","of ",t.total," results")),e__default.default.createElement("div",{className:"flex items-center gap-2"},t.showSizeChanger&&e__default.default.createElement("select",{value:t.pageSize,onChange:r=>t.onChange(1,Number(r.target.value)),className:"rounded border-input bg-background text-sm","aria-label":"Select page size"},e__default.default.createElement("option",{value:10},"10 / page"),e__default.default.createElement("option",{value:20},"20 / page"),e__default.default.createElement("option",{value:50},"50 / page"),e__default.default.createElement("option",{value:100},"100 / page")),e__default.default.createElement("div",{className:"flex items-center gap-1"},e__default.default.createElement("button",{type:"button",onClick:()=>t.onChange(t.current-1,t.pageSize),disabled:t.current<=1,className:"px-3 py-1 text-sm border border-input rounded hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed","aria-label":"Go to previous page"},"Previous"),e__default.default.createElement("span",{className:"px-3 py-1 text-sm"},"Page ",t.current," of"," ",Math.ceil(t.total/t.pageSize)),e__default.default.createElement("button",{type:"button",onClick:()=>t.onChange(t.current+1,t.pageSize),disabled:t.current>=Math.ceil(t.total/t.pageSize),className:"px-3 py-1 text-sm border border-input rounded hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed","aria-label":"Go to next page"},"Next")))))}var H=e__default.default.forwardRef(W);H.displayName="Table";var ee=H,V=e__default.default.forwardRef(({className:a,variant:n,size:i,children:p,...u},l)=>e__default.default.createElement("thead",{ref:l,className:chunkITRGJNWL_cjs.a(O({variant:n,size:i}),a),...u},p));V.displayName="TableHeader";var R=e__default.default.forwardRef(({className:a,children:n,...i},p)=>e__default.default.createElement("tbody",{ref:p,className:chunkITRGJNWL_cjs.a(a),...i},n));R.displayName="TableBody";var f=e__default.default.forwardRef(({className:a,children:n,onClick:i,selected:p,variant:u,...l},b)=>e__default.default.createElement("tr",{ref:b,className:chunkITRGJNWL_cjs.a(U({variant:u}),p&&"bg-primary/10",i&&"cursor-pointer",a),onClick:i,...l},n));f.displayName="TableRow";var x=e__default.default.forwardRef(({className:a,children:n,variant:i,size:p,colSpan:u,rowSpan:l,...b},c)=>e__default.default.createElement("td",{ref:c,className:chunkITRGJNWL_cjs.a(w({variant:i,size:p}),a),colSpan:u,rowSpan:l,...b},n));x.displayName="TableCell";var X=e__default.default.forwardRef(({className:a,children:n,variant:i,size:p,colSpan:u,rowSpan:l,...b},c)=>e__default.default.createElement("th",{ref:c,className:chunkITRGJNWL_cjs.a(w({variant:i,size:p}),"font-medium",a),colSpan:u,rowSpan:l,...b},n));X.displayName="TableHead";exports.a=q;exports.b=O;exports.c=w;exports.d=ee;exports.e=V;exports.f=R;exports.g=f;exports.h=x;exports.i=X;//# sourceMappingURL=chunk-VNDL67OG.cjs.map
3
+ //# sourceMappingURL=chunk-VNDL67OG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/table.tsx"],"names":["tableVariants","cva","tableHeaderVariants","tableRowVariants","tableCellVariants","TableComponent","data","columns","loading","emptyText","className","variant","size","rowKey","onRowClick","onSort","controlledSortColumn","controlledSortDirection","pagination","selection","caption","props","ref","internalSortState","setInternalSortState","useState","isControlled","sortState","handleSort","column","newDirection","getRowKey","record","index","isRowSelected","key","handleRowSelection","checked","newSelectedKeys","k","newSelectedRows","_","i","handleSelectAll","allKeys","isAllSelected","isIndeterminate","React","cn","TableHeader","TableRow","input","e","TableBody","TableCell","TableForwardRef","Table","children","onClick","selected","colSpan","rowSpan","TableHead"],"mappings":"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","file":"chunk-VNDL67OG.cjs","sourcesContent":["import React, { useState } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n// Table variants\nconst tableVariants = cva(\n \"w-full border-collapse transition-all duration-200\",\n {\n variants: {\n variant: {\n default: \"border border-border shadow-sm hover:shadow-md\",\n striped: \"border border-border shadow-sm hover:shadow-md\",\n bordered: \"border-2 border-border shadow-md hover:shadow-lg\",\n hover: \"border border-border shadow-sm hover:shadow-md\",\n elevated: \"border border-border shadow-lg hover:shadow-xl\",\n interactive:\n \"border border-border shadow-sm hover:shadow-md hover:border-primary\",\n },\n size: {\n sm: \"text-xs sm:text-sm\",\n md: \"text-sm sm:text-base\",\n lg: \"text-base sm:text-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nconst tableHeaderVariants = cva(\n \"font-medium text-left transition-all duration-200\",\n {\n variants: {\n variant: {\n default: \"bg-muted text-foreground hover:bg-muted/80\",\n striped: \"bg-muted text-foreground hover:bg-muted/80\",\n bordered: \"bg-muted text-foreground hover:bg-muted/80\",\n hover: \"bg-muted text-foreground hover:bg-muted/80\",\n elevated: \"bg-muted text-foreground hover:bg-muted/80\",\n interactive:\n \"bg-muted text-foreground hover:bg-primary/10 hover:text-primary\",\n },\n size: {\n sm: \"px-2 py-1 sm:px-3 sm:py-2\",\n md: \"px-3 py-2 sm:px-4 sm:py-3\",\n lg: \"px-4 py-3 sm:px-6 sm:py-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\n/**\n * Row-level variants.\n *\n * `striped` has to live here, not on the cell: `even:` selects the even sibling\n * among *cells within a row*, so applying it there striped columns instead of\n * rows - and TableRow ignored the variant entirely, so nothing showed at all.\n */\nconst tableRowVariants = cva(\"border-b border-border transition-colors\", {\n variants: {\n variant: {\n default: \"hover:bg-muted/50\",\n striped: \"even:bg-muted/50 hover:bg-muted/80\",\n bordered: \"hover:bg-muted/50\",\n hover: \"hover:bg-muted/50\",\n elevated: \"hover:bg-muted/80\",\n interactive: \"hover:bg-primary/10 hover:text-primary\",\n },\n },\n defaultVariants: { variant: \"default\" },\n});\n\nconst tableCellVariants = cva(\"border-border transition-all duration-200\", {\n variants: {\n variant: {\n default: \"border-b border-border hover:bg-muted/50\",\n striped: \"border-b border-border hover:bg-muted/80\",\n bordered: \"border border-border hover:bg-muted/50\",\n hover: \"border-b border-border hover:bg-muted/50\",\n elevated: \"border-b border-border hover:bg-muted/80\",\n interactive:\n \"border-b border-border hover:bg-primary/10 hover:text-primary\",\n },\n size: {\n sm: \"px-2 py-1 sm:px-3 sm:py-2\",\n md: \"px-3 py-2 sm:px-4 sm:py-3\",\n lg: \"px-4 py-3 sm:px-6 sm:py-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\n// Types\nexport interface TableColumn<T = Record<string, unknown>> {\n key: string;\n title: string;\n dataIndex?: keyof T;\n render?: (value: unknown, record: T, index: number) => React.ReactNode;\n sortable?: boolean;\n width?: string | number;\n align?: \"left\" | \"center\" | \"right\";\n className?: string;\n}\n\nexport interface TableProps<T = Record<string, unknown>> extends VariantProps<\n typeof tableVariants\n> {\n data: T[];\n columns: TableColumn<T>[];\n loading?: boolean;\n emptyText?: string;\n caption?: string;\n className?: string;\n rowKey?: keyof T | ((record: T) => string | number);\n onRowClick?: (record: T, index: number) => void;\n onSort?: (column: TableColumn<T>, direction: \"asc\" | \"desc\") => void;\n sortColumn?: string;\n sortDirection?: \"asc\" | \"desc\";\n pagination?: {\n current: number;\n pageSize: number;\n total: number;\n onChange: (page: number, pageSize: number) => void;\n showSizeChanger?: boolean;\n showQuickJumper?: boolean;\n };\n selection?: {\n selectedRowKeys: (string | number)[];\n onChange: (selectedRowKeys: (string | number)[], selectedRows: T[]) => void;\n getCheckboxProps?: (record: T) => { disabled?: boolean };\n };\n}\n\nexport interface TableHeaderProps extends VariantProps<\n typeof tableHeaderVariants\n> {\n className?: string;\n children: React.ReactNode;\n}\n\nexport interface TableBodyProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport interface TableRowProps extends VariantProps<typeof tableRowVariants> {\n className?: string;\n children: React.ReactNode;\n onClick?: () => void;\n selected?: boolean;\n}\n\nexport interface TableCellProps extends VariantProps<typeof tableCellVariants> {\n className?: string;\n children: React.ReactNode;\n colSpan?: number;\n rowSpan?: number;\n}\n\n// Table Components\nfunction TableComponent<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n {\n data,\n columns,\n loading = false,\n emptyText = \"No data\",\n className,\n variant,\n size,\n rowKey = \"id\",\n onRowClick,\n onSort,\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n pagination,\n selection,\n caption,\n ...props\n }: TableProps<T>,\n ref: React.Ref<HTMLTableElement>,\n) {\n // Use controlled props if provided, otherwise use internal state\n const [internalSortState, setInternalSortState] = useState<{\n column: string;\n direction: \"asc\" | \"desc\";\n } | null>(null);\n\n // Determine current sort state (controlled takes precedence)\n const isControlled = controlledSortColumn !== undefined;\n const sortState =\n isControlled && controlledSortColumn\n ? {\n column: controlledSortColumn,\n direction: controlledSortDirection || \"asc\",\n }\n : internalSortState;\n\n // Sync internal state with controlled props when they change\n // Sync internal state with controlled props when they change\n // Note: unneeded re-render caused by resetting state. We derive sortState above so stale internal state is ignored.\n /* \n useEffect(() => {\n if (isControlled && controlledSortColumn) {\n setInternalSortState(null);\n }\n }, [isControlled, controlledSortColumn]); \n */\n\n const handleSort = (column: TableColumn<T>) => {\n if (!column.sortable) return;\n\n const newDirection =\n sortState?.column === column.key && sortState?.direction === \"asc\"\n ? \"desc\"\n : \"asc\";\n\n // Only update internal state if not controlled\n if (!isControlled) {\n setInternalSortState({ column: column.key, direction: newDirection });\n }\n\n // Always call onSort callback for controlled usage\n onSort?.(column, newDirection);\n };\n\n const getRowKey = (record: T, index: number): string | number => {\n if (typeof rowKey === \"function\") {\n return rowKey(record);\n }\n return (record[rowKey] as string | number) || index;\n };\n\n const isRowSelected = (record: T, index: number): boolean => {\n if (!selection) return false;\n const key = getRowKey(record, index);\n return selection.selectedRowKeys.includes(key);\n };\n\n const handleRowSelection = (\n record: T,\n index: number,\n checked: boolean,\n ): void => {\n if (!selection) return;\n\n const key = getRowKey(record, index);\n const newSelectedKeys = checked\n ? [...selection.selectedRowKeys, key]\n : selection.selectedRowKeys.filter((k) => k !== key);\n\n const newSelectedRows = data.filter((_, i) =>\n newSelectedKeys.includes(getRowKey(_, i)),\n );\n\n selection.onChange(newSelectedKeys, newSelectedRows);\n };\n\n const handleSelectAll = (checked: boolean) => {\n if (!selection) return;\n\n const allKeys = data.map((record, index) => getRowKey(record, index));\n const newSelectedKeys = checked ? allKeys : [];\n const newSelectedRows = checked ? data : [];\n\n selection.onChange(newSelectedKeys, newSelectedRows);\n };\n\n const isAllSelected =\n selection &&\n data.length > 0 &&\n selection.selectedRowKeys.length === data.length;\n\n const isIndeterminate =\n selection &&\n selection.selectedRowKeys.length > 0 &&\n selection.selectedRowKeys.length < data.length;\n\n return (\n <div className=\"w-full overflow-x-auto\">\n <div className=\"min-w-full\">\n <table\n ref={ref}\n className={cn(tableVariants({ variant, size }), className)}\n {...props}\n >\n {caption && <caption className=\"sr-only\">{caption}</caption>}\n <TableHeader>\n <TableRow>\n {selection && (\n <th\n className={cn(tableCellVariants({ variant, size }))}\n scope=\"col\"\n role=\"columnheader\"\n >\n <input\n type=\"checkbox\"\n checked={isAllSelected}\n ref={(input) => {\n if (input) input.indeterminate = isIndeterminate || false;\n }}\n onChange={(e) => handleSelectAll(e.target.checked)}\n className=\"rounded border-input text-primary focus:ring-ring\"\n aria-label=\"Select all rows\"\n />\n </th>\n )}\n {columns.map((column) => (\n <th\n key={column.key}\n className={cn(\n tableCellVariants({ variant, size }),\n column.className,\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\",\n )}\n scope=\"col\"\n role=\"columnheader\"\n {...(column.width && { style: { width: column.width } })}\n >\n <div className=\"flex items-center gap-2\">\n <span>{column.title}</span>\n {column.sortable && (\n <button\n type=\"button\"\n onClick={() => handleSort(column)}\n className=\"flex flex-col text-muted-foreground hover:text-foreground\"\n aria-label={`Sort by ${column.title}`}\n >\n <svg\n className={cn(\n \"w-3 h-3\",\n sortState?.column === column.key &&\n sortState?.direction === \"asc\"\n ? \"text-primary\"\n : \"text-muted-foreground\",\n )}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path d=\"M5 8l5-5 5 5H5z\" />\n </svg>\n <svg\n className={cn(\n \"w-3 h-3 -mt-1\",\n sortState?.column === column.key &&\n sortState?.direction === \"desc\"\n ? \"text-primary\"\n : \"text-muted-foreground\",\n )}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path d=\"M5 12l5 5 5-5H5z\" />\n </svg>\n </button>\n )}\n </div>\n </th>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {loading ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (selection ? 1 : 0)}\n variant={variant}\n size={size}\n className=\"text-center py-8\"\n >\n <div className=\"flex items-center justify-center gap-2\">\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-primary\"></div>\n <span>Loading...</span>\n </div>\n </TableCell>\n </TableRow>\n ) : data.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (selection ? 1 : 0)}\n variant={variant}\n size={size}\n className=\"text-center py-8 text-muted-foreground\"\n >\n {emptyText}\n </TableCell>\n </TableRow>\n ) : (\n data.map((record, index) => (\n <TableRow\n key={getRowKey(record, index)}\n variant={variant}\n onClick={() => onRowClick?.(record, index)}\n selected={isRowSelected(record, index)}\n >\n {selection && (\n <TableCell variant={variant} size={size}>\n <input\n type=\"checkbox\"\n checked={isRowSelected(record, index)}\n onChange={(e) =>\n handleRowSelection(record, index, e.target.checked)\n }\n className=\"rounded border-input text-primary focus:ring-ring\"\n aria-label={`Select row ${index + 1}`}\n {...selection.getCheckboxProps?.(record)}\n />\n </TableCell>\n )}\n {columns.map((column) => (\n <TableCell\n key={column.key}\n variant={variant}\n size={size}\n className={cn(\n column.className,\n column.align === \"center\" && \"text-center\",\n column.align === \"right\" && \"text-right\",\n )}\n >\n {column.render\n ? column.render(\n column.dataIndex\n ? record[column.dataIndex]\n : record,\n record,\n index,\n )\n : column.dataIndex\n ? (record[column.dataIndex] as React.ReactNode)\n : ((record as Record<string, unknown>)[\n column.key\n ] as React.ReactNode)}\n </TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n </table>\n </div>\n\n {pagination && (\n <div className=\"flex flex-col sm:flex-row items-center justify-between mt-4 px-2 sm:px-4 py-3 bg-card border-t border-border gap-2 sm:gap-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">\n Showing {(pagination.current - 1) * pagination.pageSize + 1} to{\" \"}\n {Math.min(\n pagination.current * pagination.pageSize,\n pagination.total,\n )}{\" \"}\n of {pagination.total} results\n </span>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {pagination.showSizeChanger && (\n <select\n value={pagination.pageSize}\n onChange={(e) => pagination.onChange(1, Number(e.target.value))}\n className=\"rounded border-input bg-background text-sm\"\n aria-label=\"Select page size\"\n >\n <option value={10}>10 / page</option>\n <option value={20}>20 / page</option>\n <option value={50}>50 / page</option>\n <option value={100}>100 / page</option>\n </select>\n )}\n\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() =>\n pagination.onChange(\n pagination.current - 1,\n pagination.pageSize,\n )\n }\n disabled={pagination.current <= 1}\n className=\"px-3 py-1 text-sm border border-input rounded hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed\"\n aria-label=\"Go to previous page\"\n >\n Previous\n </button>\n\n <span className=\"px-3 py-1 text-sm\">\n Page {pagination.current} of{\" \"}\n {Math.ceil(pagination.total / pagination.pageSize)}\n </span>\n\n <button\n type=\"button\"\n onClick={() =>\n pagination.onChange(\n pagination.current + 1,\n pagination.pageSize,\n )\n }\n disabled={\n pagination.current >=\n Math.ceil(pagination.total / pagination.pageSize)\n }\n className=\"px-3 py-1 text-sm border border-input rounded hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed\"\n aria-label=\"Go to next page\"\n >\n Next\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nconst TableForwardRef = React.forwardRef(TableComponent) as <\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n props: TableProps<T> & { ref?: React.Ref<HTMLTableElement> },\n) => React.ReactElement;\n\n(\n TableForwardRef as React.ComponentType<TableProps<unknown>> & {\n displayName?: string;\n }\n).displayName = \"Table\";\n\nexport const Table = TableForwardRef;\n\nexport const TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n TableHeaderProps\n>(({ className, variant, size, children, ...props }, ref) => (\n <thead\n ref={ref}\n className={cn(tableHeaderVariants({ variant, size }), className)}\n {...props}\n >\n {children}\n </thead>\n));\n\nTableHeader.displayName = \"TableHeader\";\n\nexport const TableBody = React.forwardRef<\n HTMLTableSectionElement,\n TableBodyProps\n>(({ className, children, ...props }, ref) => (\n <tbody ref={ref} className={cn(className)} {...props}>\n {children}\n </tbody>\n));\n\nTableBody.displayName = \"TableBody\";\n\nexport const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ className, children, onClick, selected, variant, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n tableRowVariants({ variant }),\n selected && \"bg-primary/10\",\n onClick && \"cursor-pointer\",\n className,\n )}\n onClick={onClick}\n {...props}\n >\n {children}\n </tr>\n ),\n);\n\nTableRow.displayName = \"TableRow\";\n\nexport const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, children, variant, size, colSpan, rowSpan, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(tableCellVariants({ variant, size }), className)}\n colSpan={colSpan}\n rowSpan={rowSpan}\n {...props}\n >\n {children}\n </td>\n ),\n);\n\nTableCell.displayName = \"TableCell\";\n\nexport const TableHead = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, children, variant, size, colSpan, rowSpan, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n tableCellVariants({ variant, size }),\n \"font-medium\",\n className,\n )}\n colSpan={colSpan}\n rowSpan={rowSpan}\n {...props}\n >\n {children}\n </th>\n ),\n);\n\nTableHead.displayName = \"TableHead\";\n\n// Export variants for external use\nexport { tableVariants, tableHeaderVariants, tableCellVariants };\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ 'use strict';var chunk7SPPGTBT_cjs=require('./chunk-7SPPGTBT.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),r=require('react'),recharts=require('recharts'),classVarianceAuthority=require('class-variance-authority');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var r__default=/*#__PURE__*/_interopDefault(r);var U=classVarianceAuthority.cva("w-full",{variants:{variant:{default:"",minimal:"",detailed:""},size:{sm:"h-48",md:"h-64",lg:"h-96",xl:"h-[500px]"}},defaultVariants:{variant:"default",size:"md"}}),s=["hsl(var(--nostromo-color-brand-500))","hsl(var(--nostromo-color-info-500))","hsl(var(--nostromo-color-success-500))","hsl(var(--nostromo-color-warning-500))","hsl(var(--nostromo-color-error-500))","hsl(var(--nostromo-color-brand-300))","hsl(var(--nostromo-color-info-700))","hsl(var(--nostromo-color-success-700))"],g=({active:u,payload:t,label:i})=>u&&t&&t.length?r__default.default.createElement("div",{className:"rounded-lg border border-border bg-popover p-3 shadow-lg"},r__default.default.createElement("p",{className:"mb-2 font-semibold text-popover-foreground"},String(i??"")),t.map((m,n)=>r__default.default.createElement("p",{key:n,className:"text-sm",style:{color:m.color}},`${m.name??""}: ${m.value??""}`))):null,v=({payload:u})=>r__default.default.createElement("div",{className:"mt-4 flex flex-wrap justify-center gap-4"},u?.map((t,i)=>r__default.default.createElement("div",{key:i,className:"flex items-center gap-2"},r__default.default.createElement("div",{className:"h-3 w-3 rounded",style:{backgroundColor:t.color},"aria-hidden":"true"}),r__default.default.createElement("span",{className:"text-sm text-popover-foreground"},t.value)))),w=r__default.default.forwardRef(({type:u,data:t,dataKeys:i,xAxisKey:m="name",colors:n=s,showGrid:C=true,showLegend:h=true,showTooltip:d=true,title:b,description:N,className:z,variant:A,size:p,height:K,ariaLabel:T,ariaLabelledBy:V,strokeWidth:D=2,fillOpacity:B=.6,...I},j)=>{let L=K||(p==="sm"?192:p==="lg"?384:p==="xl"?500:256),H=()=>{if(typeof window>"u")return r__default.default.createElement("div",{className:"flex items-center justify-center h-full text-muted-foreground"},r__default.default.createElement("p",null,"Chart loading..."));let y={data:t,margin:{top:5,right:5,left:5,bottom:5}};switch(u){case "line":return r__default.default.createElement(recharts.LineChart,{...y},C&&r__default.default.createElement(recharts.CartesianGrid,{strokeDasharray:"3 3",stroke:"hsl(var(--nostromo-color-neutral-300))"}),r__default.default.createElement(recharts.XAxis,{dataKey:m,stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),r__default.default.createElement(recharts.YAxis,{stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),d&&r__default.default.createElement(recharts.Tooltip,{content:r__default.default.createElement(g,null)}),i.map((e,a)=>{let o=a%n.length,l=n[o]??s[o%s.length];return r__default.default.createElement(recharts.Line,{key:e,type:"monotone",dataKey:e,stroke:l,strokeWidth:D,dot:{r:4,fill:l},activeDot:{r:6}})}),h&&r__default.default.createElement(recharts.Legend,{content:r__default.default.createElement(v,null)}));case "bar":return r__default.default.createElement(recharts.BarChart,{...y},C&&r__default.default.createElement(recharts.CartesianGrid,{strokeDasharray:"3 3",stroke:"hsl(var(--nostromo-color-neutral-300))"}),r__default.default.createElement(recharts.XAxis,{dataKey:m,stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),r__default.default.createElement(recharts.YAxis,{stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),d&&r__default.default.createElement(recharts.Tooltip,{content:r__default.default.createElement(g,null)}),i.map((e,a)=>{let o=a%n.length,l=n[o]??s[o%s.length];return r__default.default.createElement(recharts.Bar,{key:e,dataKey:e,fill:l,radius:[4,4,0,0]})}),h&&r__default.default.createElement(recharts.Legend,{content:r__default.default.createElement(v,null)}));case "area":return r__default.default.createElement(recharts.AreaChart,{...y},C&&r__default.default.createElement(recharts.CartesianGrid,{strokeDasharray:"3 3",stroke:"hsl(var(--nostromo-color-neutral-300))"}),r__default.default.createElement(recharts.XAxis,{dataKey:m,stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),r__default.default.createElement(recharts.YAxis,{stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),d&&r__default.default.createElement(recharts.Tooltip,{content:r__default.default.createElement(g,null)}),i.map((e,a)=>{let o=a%n.length,l=n[o]??s[o%s.length];return r__default.default.createElement(recharts.Area,{key:e,type:"monotone",dataKey:e,stroke:l,fill:l,fillOpacity:B,strokeWidth:D})}),h&&r__default.default.createElement(recharts.Legend,{content:r__default.default.createElement(v,null)}));case "pie":{let e=i[0]||"value";return r__default.default.createElement(recharts.PieChart,null,r__default.default.createElement(recharts.Pie,{data:t,dataKey:e,nameKey:m,cx:"50%",cy:"50%",outerRadius:L/4,label:a=>`${a.name??""}: ${((a.percent??0)*100).toFixed(0)}%`},t.map((a,o)=>{let l=n[o%n.length]||s[o%s.length];return r__default.default.createElement(recharts.Cell,{key:`cell-${o}`,fill:l??"#8884d8"})})),d&&r__default.default.createElement(recharts.Tooltip,{content:r__default.default.createElement(g,null)}),h&&r__default.default.createElement(recharts.Legend,{content:r__default.default.createElement(v,null)}))}default:return null}};return r__default.default.createElement("div",{ref:j,className:chunkITRGJNWL_cjs.a(U({variant:A,size:p}),z),role:"img","aria-label":T||b||`${u} chart`,"aria-labelledby":V,...I},b&&r__default.default.createElement("h3",{className:"mb-2 text-lg font-semibold text-foreground"},b),N&&r__default.default.createElement("p",{className:"mb-4 text-sm text-muted-foreground"},N),r__default.default.createElement(recharts.ResponsiveContainer,{width:"100%",height:L},H()))});w.displayName="Chart";var tr=chunk7SPPGTBT_cjs.a(w);exports.a=U;exports.b=tr;//# sourceMappingURL=chunk-WK6LNC2E.cjs.map
3
+ //# sourceMappingURL=chunk-WK6LNC2E.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/core/charts.tsx"],"names":["chartContainerVariants","cva","defaultColors","CustomTooltip","active","payload","label","React","entry","index","CustomLegend","ChartComponent","type","data","dataKeys","xAxisKey","colors","showGrid","showLegend","showTooltip","title","description","className","variant","size","height","ariaLabel","ariaLabelledBy","strokeWidth","fillOpacity","props","ref","chartHeight","renderChart","commonProps","LineChart","CartesianGrid","XAxis","YAxis","Tooltip","key","colorIndex","color","Line","Legend","BarChart","Bar","AreaChart","Area","pieDataKey","PieChart","Pie","fillColor","Cell","cn","ResponsiveContainer","Chart","memo"],"mappings":"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","file":"chunk-WK6LNC2E.cjs","sourcesContent":["import React from \"react\";\nimport {\n LineChart,\n Line,\n BarChart,\n Bar,\n PieChart,\n Pie,\n AreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n Cell,\n} from \"recharts\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\n\n// Chart container variants\nconst chartContainerVariants = cva(\"w-full\", {\n variants: {\n variant: {\n default: \"\",\n minimal: \"\",\n detailed: \"\",\n },\n size: {\n sm: \"h-48\",\n md: \"h-64\",\n lg: \"h-96\",\n xl: \"h-[500px]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nexport type ChartType = \"line\" | \"bar\" | \"pie\" | \"area\";\n\nexport interface ChartDataPoint {\n name: string;\n [key: string]: string | number;\n}\n\nexport interface ChartProps extends VariantProps<\n typeof chartContainerVariants\n> {\n type: ChartType;\n data: ChartDataPoint[];\n dataKeys: string[];\n xAxisKey?: string;\n colors?: (string | undefined)[];\n showGrid?: boolean;\n showLegend?: boolean;\n showTooltip?: boolean;\n title?: string;\n description?: string;\n className?: string;\n height?: number;\n // Accessibility\n ariaLabel?: string;\n ariaLabelledBy?: string;\n // Styling\n strokeWidth?: number;\n fillOpacity?: number;\n}\n\n// Default color palette matching Nostromo theme\nconst defaultColors = [\n // Ordered for distinguishability. It used to open with brand-500 and\n // brand-600 - two neighbouring shades of the same purple - so a two-series\n // chart was two near-identical lines. Distinct hues first, brand variants last.\n \"hsl(var(--nostromo-color-brand-500))\",\n \"hsl(var(--nostromo-color-info-500))\",\n \"hsl(var(--nostromo-color-success-500))\",\n \"hsl(var(--nostromo-color-warning-500))\",\n \"hsl(var(--nostromo-color-error-500))\",\n \"hsl(var(--nostromo-color-brand-300))\",\n \"hsl(var(--nostromo-color-info-700))\",\n \"hsl(var(--nostromo-color-success-700))\",\n];\n\n// Custom tooltip component with Tailwind styling\ninterface CustomTooltipProps {\n active?: boolean;\n payload?: Array<{\n name?: string;\n value?: number | string;\n color?: string;\n }>;\n label?: string | number;\n}\n\nconst CustomTooltip = ({ active, payload, label }: CustomTooltipProps) => {\n if (active && payload && payload.length) {\n return (\n <div className=\"rounded-lg border border-border bg-popover p-3 shadow-lg\">\n <p className=\"mb-2 font-semibold text-popover-foreground\">\n {String(label ?? \"\")}\n </p>\n {payload.map((entry, index: number) => (\n <p key={index} className=\"text-sm\" style={{ color: entry.color }}>\n {`${entry.name ?? \"\"}: ${entry.value ?? \"\"}`}\n </p>\n ))}\n </div>\n );\n }\n return null;\n};\n\n// Custom legend component with Tailwind styling\ninterface CustomLegendProps {\n payload?: Array<{\n value?: string;\n color?: string;\n }>;\n}\n\nconst CustomLegend = ({ payload }: CustomLegendProps) => {\n return (\n <div className=\"mt-4 flex flex-wrap justify-center gap-4\">\n {payload?.map((entry, index: number) => (\n <div key={index} className=\"flex items-center gap-2\">\n <div\n className=\"h-3 w-3 rounded\"\n style={{ backgroundColor: entry.color }}\n aria-hidden=\"true\"\n />\n <span className=\"text-sm text-popover-foreground\">{entry.value}</span>\n </div>\n ))}\n </div>\n );\n};\n\nconst ChartComponent = React.forwardRef<HTMLDivElement, ChartProps>(\n (\n {\n type,\n data,\n dataKeys,\n xAxisKey = \"name\",\n colors = defaultColors,\n showGrid = true,\n showLegend = true,\n showTooltip = true,\n title,\n description,\n className,\n variant,\n size,\n height,\n ariaLabel,\n ariaLabelledBy,\n strokeWidth = 2,\n fillOpacity = 0.6,\n ...props\n },\n ref,\n ) => {\n const chartHeight =\n height ||\n (size === \"sm\" ? 192 : size === \"lg\" ? 384 : size === \"xl\" ? 500 : 256);\n\n const renderChart = () => {\n // SSR guard: recharts requires browser environment\n if (typeof window === \"undefined\") {\n return (\n <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n <p>Chart loading...</p>\n </div>\n );\n }\n\n const commonProps = {\n data,\n margin: { top: 5, right: 5, left: 5, bottom: 5 },\n };\n\n switch (type) {\n case \"line\":\n return (\n <LineChart {...commonProps}>\n {showGrid && (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n stroke=\"hsl(var(--nostromo-color-neutral-300))\"\n />\n )}\n <XAxis\n dataKey={xAxisKey}\n stroke=\"hsl(var(--nostromo-color-neutral-600))\"\n tick={{\n fill: \"hsl(var(--nostromo-color-neutral-700))\",\n fontSize: 12,\n }}\n />\n <YAxis\n stroke=\"hsl(var(--nostromo-color-neutral-600))\"\n tick={{\n fill: \"hsl(var(--nostromo-color-neutral-700))\",\n fontSize: 12,\n }}\n />\n {showTooltip && <Tooltip content={<CustomTooltip />} />}\n {dataKeys.map((key, index) => {\n const colorIndex = index % colors.length;\n const color = (colors[colorIndex] ??\n defaultColors[colorIndex % defaultColors.length]) as string;\n return (\n <Line\n key={key}\n type=\"monotone\"\n dataKey={key}\n stroke={color}\n strokeWidth={strokeWidth}\n dot={{ r: 4, fill: color }}\n activeDot={{ r: 6 }}\n />\n );\n })}\n {showLegend && <Legend content={<CustomLegend />} />}\n </LineChart>\n );\n\n case \"bar\":\n return (\n <BarChart {...commonProps}>\n {showGrid && (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n stroke=\"hsl(var(--nostromo-color-neutral-300))\"\n />\n )}\n <XAxis\n dataKey={xAxisKey}\n stroke=\"hsl(var(--nostromo-color-neutral-600))\"\n tick={{\n fill: \"hsl(var(--nostromo-color-neutral-700))\",\n fontSize: 12,\n }}\n />\n <YAxis\n stroke=\"hsl(var(--nostromo-color-neutral-600))\"\n tick={{\n fill: \"hsl(var(--nostromo-color-neutral-700))\",\n fontSize: 12,\n }}\n />\n {showTooltip && <Tooltip content={<CustomTooltip />} />}\n {dataKeys.map((key, index) => {\n const colorIndex = index % colors.length;\n const color = (colors[colorIndex] ??\n defaultColors[colorIndex % defaultColors.length]) as string;\n return (\n <Bar\n key={key}\n dataKey={key}\n fill={color}\n radius={[4, 4, 0, 0]}\n />\n );\n })}\n {showLegend && <Legend content={<CustomLegend />} />}\n </BarChart>\n );\n\n case \"area\":\n return (\n <AreaChart {...commonProps}>\n {showGrid && (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n stroke=\"hsl(var(--nostromo-color-neutral-300))\"\n />\n )}\n <XAxis\n dataKey={xAxisKey}\n stroke=\"hsl(var(--nostromo-color-neutral-600))\"\n tick={{\n fill: \"hsl(var(--nostromo-color-neutral-700))\",\n fontSize: 12,\n }}\n />\n <YAxis\n stroke=\"hsl(var(--nostromo-color-neutral-600))\"\n tick={{\n fill: \"hsl(var(--nostromo-color-neutral-700))\",\n fontSize: 12,\n }}\n />\n {showTooltip && <Tooltip content={<CustomTooltip />} />}\n {dataKeys.map((key, index) => {\n const colorIndex = index % colors.length;\n const color = (colors[colorIndex] ??\n defaultColors[colorIndex % defaultColors.length]) as string;\n return (\n <Area\n key={key}\n type=\"monotone\"\n dataKey={key}\n stroke={color}\n fill={color}\n fillOpacity={fillOpacity}\n strokeWidth={strokeWidth}\n />\n );\n })}\n {showLegend && <Legend content={<CustomLegend />} />}\n </AreaChart>\n );\n\n case \"pie\": {\n const pieDataKey = dataKeys[0] || \"value\";\n return (\n <PieChart>\n <Pie\n data={data}\n dataKey={pieDataKey}\n nameKey={xAxisKey}\n cx=\"50%\"\n cy=\"50%\"\n outerRadius={chartHeight / 4}\n label={(props: { name?: string; percent?: number }) =>\n `${props.name ?? \"\"}: ${((props.percent ?? 0) * 100).toFixed(0)}%`\n }\n >\n {data.map((entry, index) => {\n const fillColor =\n colors[index % colors.length] ||\n defaultColors[index % defaultColors.length];\n return (\n <Cell key={`cell-${index}`} fill={fillColor ?? \"#8884d8\"} />\n );\n })}\n </Pie>\n {showTooltip && <Tooltip content={<CustomTooltip />} />}\n {showLegend && <Legend content={<CustomLegend />} />}\n </PieChart>\n );\n }\n\n default:\n return null;\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(chartContainerVariants({ variant, size }), className)}\n role=\"img\"\n aria-label={ariaLabel || title || `${type} chart`}\n aria-labelledby={ariaLabelledBy}\n {...props}\n >\n {title && (\n <h3 className=\"mb-2 text-lg font-semibold text-foreground\">\n {title}\n </h3>\n )}\n {description && (\n <p className=\"mb-4 text-sm text-muted-foreground\">{description}</p>\n )}\n <ResponsiveContainer width=\"100%\" height={chartHeight}>\n {renderChart()}\n </ResponsiveContainer>\n </div>\n );\n },\n);\n\nChartComponent.displayName = \"Chart\";\n\n// Memoize Chart component for performance optimization\n// Charts are expensive to render, so memoization helps prevent unnecessary re-renders\nexport const Chart = memo(ChartComponent) as typeof ChartComponent;\n\nexport { chartContainerVariants };\n"]}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import {a as a$1}from'./chunk-COXN6XBA.js';import {a}from'./chunk-AC2JBXHQ.js';import t,{useState,useEffect,useCallback,useRef}from'react';import {cva}from'class-variance-authority';var E=cva("relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all duration-300",{variants:{variant:{default:"border-border bg-card text-card-foreground shadow-lg hover:shadow-xl",success:"border-success-200 bg-success-50 text-success-900 shadow-lg hover:shadow-xl",error:"border-destructive/20 bg-destructive/10 text-destructive shadow-lg hover:shadow-xl",warning:"border-warning-200 bg-warning-50 text-warning-900 shadow-lg hover:shadow-xl",info:"border-info-200 bg-info-50 text-info-900 shadow-lg hover:shadow-xl"},position:{"top-left":"fixed top-4 left-4 z-50","top-center":"fixed top-4 left-1/2 -translate-x-1/2 z-50","top-right":"fixed top-4 right-4 z-50","bottom-left":"fixed bottom-4 left-4 z-50","bottom-center":"fixed bottom-4 left-1/2 -translate-x-1/2 z-50","bottom-right":"fixed bottom-4 right-4 z-50"},animation:{default:"animate-in slide-in-from-right-full duration-300",slide:"animate-in slide-in-from-bottom-4 duration-300",fade:"animate-in fade-in-0 duration-300",scale:"animate-in zoom-in-95 duration-300",none:""}},defaultVariants:{variant:"default",position:"top-right",animation:"default"}}),m=cva("flex-shrink-0 w-5 h-5 transition-colors duration-200",{variants:{variant:{default:"text-muted-foreground",success:"text-success-600",error:"text-destructive",warning:"text-warning-600",info:"text-info-600"}},defaultVariants:{variant:"default"}}),M=t.createContext(void 0),I=()=>{let i=t.useContext(M);if(!i)throw new Error("useToast must be used within a ToastProvider");return i},X=({children:i})=>{let[d,r]=useState([]),o=useRef(new Map),e=useCallback(s=>{let a=o.current.get(s);a&&(clearTimeout(a),o.current.delete(s)),r(f=>f.filter(l=>l.id!==s));},[]),n=useRef(e);useEffect(()=>{n.current=e;},[e]);let u=useCallback(s=>{let a=Math.random().toString(36).substr(2,9),f={...s,id:a};if(r(l=>[...l,f]),s.duration!==0){let l=setTimeout(()=>{n.current(a),o.current.delete(a);},s.duration||5e3);o.current.set(a,l);}return a},[]),c=useCallback(()=>{o.current.forEach(s=>clearTimeout(s)),o.current.clear(),r([]);},[]);return useEffect(()=>{let s=o.current;return ()=>{s.forEach(a=>clearTimeout(a)),s.clear();}},[]),t.createElement(M.Provider,{value:{toasts:d,addToast:u,removeToast:e,clearToasts:c}},i,t.createElement(H,{toasts:d}))},H=({toasts:i})=>{if(i.length===0)return null;let d=i.reduce((r,o)=>{let e=o.position||"top-right";return r[e]||(r[e]=[]),r[e].push(o),r},{});return t.createElement("div",{className:"fixed inset-0 z-50 pointer-events-none"},Object.entries(d).map(([r,o])=>t.createElement("div",{key:r,className:"pointer-events-none"},o.map((e,n)=>{let{style:u,...c}=e;return t.createElement(S,{key:e.id,...c,style:{...u,transform:`translateY(${n*8}px) ${u?.transform||""}`,marginBottom:n<o.length-1?"8px":"0"}})}))))},V=t.forwardRef(({id:i,title:d,description:r,variant:o="default",position:e="top-right",animation:n="default",duration:u=5e3,onClose:c,action:s,className:a$1,children:f,appearDelay:l=10,animationMs:g=150,...x},k)=>{let[C,y]=useState(l<=0),[T,O]=useState(false);useEffect(()=>{if(l<=0)return;let b=window.setTimeout(()=>y(true),l);return ()=>clearTimeout(b)},[l]);let h=useCallback(()=>{O(true),window.setTimeout(()=>{c?.(),y(false);},g);},[c,g]);useEffect(()=>{if(u>0){let b=window.setTimeout(h,u);return ()=>clearTimeout(b)}},[u,h]);let B=()=>{switch(o){case "success":return t.createElement("svg",{className:m({variant:o}),fill:"currentColor",viewBox:"0 0 20 20"},t.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"}));case "error":return t.createElement("svg",{className:m({variant:o}),fill:"currentColor",viewBox:"0 0 20 20"},t.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"}));case "warning":return t.createElement("svg",{className:m({variant:o}),fill:"currentColor",viewBox:"0 0 20 20"},t.createElement("path",{fillRule:"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",clipRule:"evenodd"}));case "info":return t.createElement("svg",{className:m({variant:o}),fill:"currentColor",viewBox:"0 0 20 20"},t.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z",clipRule:"evenodd"}));default:return null}};return C?t.createElement("div",{ref:k,className:a(E({variant:o,position:e,animation:n}),T?"opacity-0":"opacity-100","pointer-events-auto",a$1),"data-visible":C?"true":"false","data-leaving":T?"true":"false",style:{transition:`all ${g}ms ease-in-out`,transform:T?"translateX(100%)":x.style?.transform||"translateX(0)",...x.style},...x},t.createElement("div",{className:"flex items-start space-x-3"},B(),t.createElement("div",{className:"flex-1 min-w-0"},d&&t.createElement("div",{className:"text-sm font-medium"},d),r&&t.createElement("div",{className:"mt-1 text-sm opacity-90"},r),f)),s&&t.createElement("button",{type:"button",onClick:s.onClick,className:"ml-4 text-sm font-medium underline hover:no-underline focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"},s.label),t.createElement("button",{type:"button",onClick:h,className:"absolute top-2 right-2 p-1 rounded-md hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500","aria-label":"Close notification"},t.createElement("svg",{className:"w-4 h-4",fill:"currentColor",viewBox:"0 0 20 20"},t.createElement("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})))):null});V.displayName="Toast";var S=a$1(V),A=()=>{let{addToast:i,removeToast:d,clearToasts:r}=I();return {success:(e,n)=>i({variant:"success",title:"Success",description:e,...n}),error:(e,n)=>i({variant:"error",title:"Error",description:e,...n}),warning:(e,n)=>i({variant:"warning",title:"Warning",description:e,...n}),info:(e,n)=>i({variant:"info",title:"Info",description:e,...n}),custom:e=>i(e),dismiss:d,clear:r}};export{E as a,m as b,I as c,X as d,S as e,A as f};//# sourceMappingURL=chunk-M5IBD3KV.js.map
3
- //# sourceMappingURL=chunk-M5IBD3KV.js.map
2
+ import {a as a$1}from'./chunk-COXN6XBA.js';import {a}from'./chunk-AC2JBXHQ.js';import t,{useState,useEffect,useCallback,useRef}from'react';import {cva}from'class-variance-authority';var E=cva("relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all duration-300",{variants:{variant:{default:"border-border bg-card text-card-foreground shadow-lg hover:shadow-xl",success:"border-success-200 bg-success-50 text-success-900 shadow-lg hover:shadow-xl",error:"border-destructive/20 bg-destructive/10 text-destructive shadow-lg hover:shadow-xl",warning:"border-warning-200 bg-warning-50 text-warning-900 shadow-lg hover:shadow-xl",info:"border-info-200 bg-info-50 text-info-900 shadow-lg hover:shadow-xl"},position:{"top-left":"fixed top-4 left-4 z-50","top-center":"fixed top-4 left-1/2 -translate-x-1/2 z-50","top-right":"fixed top-4 right-4 z-50","bottom-left":"fixed bottom-4 left-4 z-50","bottom-center":"fixed bottom-4 left-1/2 -translate-x-1/2 z-50","bottom-right":"fixed bottom-4 right-4 z-50"},animation:{default:"animate-in slide-in-from-right-full duration-300",slide:"animate-in slide-in-from-bottom-4 duration-300",fade:"animate-in fade-in-0 duration-300",scale:"animate-in zoom-in-95 duration-300",none:""}},defaultVariants:{variant:"default",position:"top-right",animation:"default"}}),m=cva("flex-shrink-0 w-5 h-5 transition-colors duration-200",{variants:{variant:{default:"text-muted-foreground",success:"text-success-600",error:"text-destructive",warning:"text-warning-600",info:"text-info-600"}},defaultVariants:{variant:"default"}}),M=t.createContext(void 0),I=()=>{let i=t.useContext(M);if(!i)throw new Error("useToast must be used within a ToastProvider");return i},X=({children:i})=>{let[d,r]=useState([]),o=useRef(new Map),e=useCallback(s=>{let a=o.current.get(s);a&&(clearTimeout(a),o.current.delete(s)),r(f=>f.filter(l=>l.id!==s));},[]),n=useRef(e);useEffect(()=>{n.current=e;},[e]);let u=useCallback(s=>{let a=Math.random().toString(36).substr(2,9),f={...s,id:a};if(r(l=>[...l,f]),s.duration!==0){let l=setTimeout(()=>{n.current(a),o.current.delete(a);},s.duration||5e3);o.current.set(a,l);}return a},[]),c=useCallback(()=>{o.current.forEach(s=>clearTimeout(s)),o.current.clear(),r([]);},[]);return useEffect(()=>{let s=o.current;return ()=>{s.forEach(a=>clearTimeout(a)),s.clear();}},[]),t.createElement(M.Provider,{value:{toasts:d,addToast:u,removeToast:e,clearToasts:c}},i,t.createElement(H,{toasts:d}))},H=({toasts:i})=>{if(i.length===0)return null;let d=i.reduce((r,o)=>{let e=o.position||"top-right";return r[e]||(r[e]=[]),r[e].push(o),r},{});return t.createElement("div",{className:"fixed inset-0 z-50 pointer-events-none"},Object.entries(d).map(([r,o])=>t.createElement("div",{key:r,className:"pointer-events-none"},o.map((e,n)=>{let{style:u,...c}=e;return t.createElement(S,{key:e.id,...c,style:{...u,transform:`translateY(${n*8}px) ${u?.transform||""}`,marginBottom:n<o.length-1?"8px":"0"}})}))))},V=t.forwardRef(({id:i,title:d,description:r,variant:o="default",position:e="top-right",animation:n="default",duration:u=5e3,onClose:c,action:s,className:a$1,children:f,appearDelay:l=10,animationMs:g=150,...x},k)=>{let[C,y]=useState(l<=0),[T,O]=useState(false);useEffect(()=>{if(l<=0)return;let w=window.setTimeout(()=>y(true),l);return ()=>clearTimeout(w)},[l]);let h=useCallback(()=>{O(true),window.setTimeout(()=>{c?.(),y(false);},g);},[c,g]);useEffect(()=>{if(u>0){let w=window.setTimeout(h,u);return ()=>clearTimeout(w)}},[u,h]);let B=()=>{switch(o){case "success":return t.createElement("svg",{className:m({variant:o}),fill:"currentColor",viewBox:"0 0 20 20"},t.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",clipRule:"evenodd"}));case "error":return t.createElement("svg",{className:m({variant:o}),fill:"currentColor",viewBox:"0 0 20 20"},t.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"}));case "warning":return t.createElement("svg",{className:m({variant:o}),fill:"currentColor",viewBox:"0 0 20 20"},t.createElement("path",{fillRule:"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",clipRule:"evenodd"}));case "info":return t.createElement("svg",{className:m({variant:o}),fill:"currentColor",viewBox:"0 0 20 20"},t.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z",clipRule:"evenodd"}));default:return null}};return C?t.createElement("div",{ref:k,className:a(E({variant:o,position:e,animation:n}),T?"opacity-0":"opacity-100","pointer-events-auto",a$1),"data-visible":C?"true":"false","data-leaving":T?"true":"false",style:{transition:`all ${g}ms ease-in-out`,transform:T?"translateX(100%)":x.style?.transform||"translateX(0)",...x.style},...x},t.createElement("div",{className:"flex items-start space-x-3"},B(),t.createElement("div",{className:"flex-1 min-w-0"},d&&t.createElement("div",{className:"text-sm font-medium"},d),r&&t.createElement("div",{className:"mt-1 text-sm opacity-90"},r),f)),s&&t.createElement("button",{type:"button",onClick:s.onClick,className:"ml-4 text-sm font-medium underline hover:no-underline focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-ring"},s.label),t.createElement("button",{type:"button",onClick:h,className:"absolute top-2 right-2 p-1 rounded-md hover:bg-muted focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-ring","aria-label":"Close notification"},t.createElement("svg",{className:"w-4 h-4",fill:"currentColor",viewBox:"0 0 20 20"},t.createElement("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})))):null});V.displayName="Toast";var S=a$1(V),A=()=>{let{addToast:i,removeToast:d,clearToasts:r}=I();return {success:(e,n)=>i({variant:"success",title:"Success",description:e,...n}),error:(e,n)=>i({variant:"error",title:"Error",description:e,...n}),warning:(e,n)=>i({variant:"warning",title:"Warning",description:e,...n}),info:(e,n)=>i({variant:"info",title:"Info",description:e,...n}),custom:e=>i(e),dismiss:d,clear:r}};export{E as a,m as b,I as c,X as d,S as e,A as f};//# sourceMappingURL=chunk-WO3KCAN6.js.map
3
+ //# sourceMappingURL=chunk-WO3KCAN6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/core/toast.tsx"],"names":["toastVariants","cva","toastIconVariants","ToastContext","React","useToast","context","ToastProvider","children","toasts","setToasts","useState","timeoutRefs","useRef","removeToast","useCallback","id","timeoutId","prev","toast","removeToastRef","useEffect","addToast","newToast","clearToasts","refs","ToastContainer","toastsByPosition","acc","position","positionToasts","index","toastStyle","toastProps","Toast","ToastComponent","_id","title","description","variant","animation","duration","onClose","action","className","appearDelay","animationMs","props","ref","isVisible","setIsVisible","isLeaving","setIsLeaving","timer","handleClose","getIcon","cn","memo","useToastNotification","message","options"],"mappings":"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","file":"chunk-M5IBD3KV.js","sourcesContent":["import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\n\n// Toast variants\nconst toastVariants = cva(\n \"relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all duration-300\",\n {\n variants: {\n variant: {\n default:\n \"border-border bg-card text-card-foreground shadow-lg hover:shadow-xl\",\n success:\n \"border-success-200 bg-success-50 text-success-900 shadow-lg hover:shadow-xl\",\n error:\n \"border-destructive/20 bg-destructive/10 text-destructive shadow-lg hover:shadow-xl\",\n warning:\n \"border-warning-200 bg-warning-50 text-warning-900 shadow-lg hover:shadow-xl\",\n info: \"border-info-200 bg-info-50 text-info-900 shadow-lg hover:shadow-xl\",\n },\n position: {\n \"top-left\": \"fixed top-4 left-4 z-50\",\n \"top-center\": \"fixed top-4 left-1/2 -translate-x-1/2 z-50\",\n \"top-right\": \"fixed top-4 right-4 z-50\",\n \"bottom-left\": \"fixed bottom-4 left-4 z-50\",\n \"bottom-center\": \"fixed bottom-4 left-1/2 -translate-x-1/2 z-50\",\n \"bottom-right\": \"fixed bottom-4 right-4 z-50\",\n },\n animation: {\n default: \"animate-in slide-in-from-right-full duration-300\",\n slide: \"animate-in slide-in-from-bottom-4 duration-300\",\n fade: \"animate-in fade-in-0 duration-300\",\n scale: \"animate-in zoom-in-95 duration-300\",\n none: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n position: \"top-right\",\n animation: \"default\",\n },\n },\n);\n\nconst toastIconVariants = cva(\n \"flex-shrink-0 w-5 h-5 transition-colors duration-200\",\n {\n variants: {\n variant: {\n default: \"text-muted-foreground\",\n success: \"text-success-600\",\n error: \"text-destructive\",\n warning: \"text-warning-600\",\n info: \"text-info-600\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n// Types\nexport interface ToastProps\n extends\n VariantProps<typeof toastVariants>,\n React.HTMLAttributes<HTMLDivElement> {\n id?: string;\n title?: string;\n description?: string;\n duration?: number;\n onClose?: () => void;\n action?: {\n label: string;\n onClick: () => void;\n };\n className?: string;\n children?: React.ReactNode;\n appearDelay?: number; // time in ms before first render becomes visible; default 10\n animationMs?: number; // exit animation duration; default 150\n}\n\nexport interface ToastContextType {\n toasts: ToastProps[];\n addToast: (toast: Omit<ToastProps, \"id\">) => string;\n removeToast: (id: string) => void;\n clearToasts: () => void;\n}\n\n// Toast Context\nconst ToastContext = React.createContext<ToastContextType | undefined>(\n undefined,\n);\n\nexport const useToast = () => {\n const context = React.useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return context;\n};\n\n// Toast Provider\nexport const ToastProvider: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => {\n const [toasts, setToasts] = useState<ToastProps[]>([]);\n const timeoutRefs = useRef<Map<string, ReturnType<typeof setTimeout>>>(\n new Map(),\n );\n\n const removeToast = useCallback((id: string) => {\n // Clear timeout if it exists\n const timeoutId = timeoutRefs.current.get(id);\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutRefs.current.delete(id);\n }\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const removeToastRef = useRef(removeToast);\n useEffect(() => {\n removeToastRef.current = removeToast;\n }, [removeToast]);\n\n const addToast = useCallback((toast: Omit<ToastProps, \"id\">) => {\n const id = Math.random().toString(36).substr(2, 9);\n const newToast = { ...toast, id };\n\n setToasts((prev) => [...prev, newToast]);\n\n // Auto remove toast after duration\n if (toast.duration !== 0) {\n const timeoutId = setTimeout(() => {\n removeToastRef.current(id);\n timeoutRefs.current.delete(id);\n }, toast.duration || 5000);\n timeoutRefs.current.set(id, timeoutId);\n }\n\n return id;\n }, []);\n\n const clearToasts = useCallback(() => {\n // Clear all timeouts\n timeoutRefs.current.forEach((timeoutId) => clearTimeout(timeoutId));\n timeoutRefs.current.clear();\n setToasts([]);\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n const refs = timeoutRefs.current;\n return () => {\n refs.forEach((timeoutId) => clearTimeout(timeoutId));\n refs.clear();\n };\n }, []);\n\n return (\n <ToastContext.Provider\n value={{ toasts, addToast, removeToast, clearToasts }}\n >\n {children}\n <ToastContainer toasts={toasts} />\n </ToastContext.Provider>\n );\n};\n\n// Toast Container\nconst ToastContainer: React.FC<{ toasts: ToastProps[] }> = ({ toasts }) => {\n if (toasts.length === 0) return null;\n\n // Group toasts by position for stacking\n const toastsByPosition = toasts.reduce(\n (acc, toast) => {\n const position = toast.position || \"top-right\";\n if (!acc[position]) {\n acc[position] = [];\n }\n acc[position].push(toast);\n return acc;\n },\n {} as Record<string, ToastProps[]>,\n );\n\n return (\n <div className=\"fixed inset-0 z-50 pointer-events-none\">\n {Object.entries(toastsByPosition).map(([position, positionToasts]) => (\n <div key={position} className=\"pointer-events-none\">\n {positionToasts.map((toast, index) => {\n const { style: toastStyle, ...toastProps } = toast;\n return (\n <Toast\n key={toast.id}\n {...toastProps}\n style={{\n ...toastStyle,\n // Stack toasts with offset\n transform: `translateY(${index * 8}px) ${toastStyle?.transform || \"\"}`,\n marginBottom: index < positionToasts.length - 1 ? \"8px\" : \"0\",\n }}\n />\n );\n })}\n </div>\n ))}\n </div>\n );\n};\n\n// Individual Toast Component\nconst ToastComponent = React.forwardRef<HTMLDivElement, ToastProps>(\n (\n {\n id: _id,\n title,\n description,\n variant = \"default\",\n position = \"top-right\",\n animation = \"default\",\n duration = 5000,\n onClose,\n action,\n className,\n children,\n appearDelay = 10,\n animationMs = 150,\n ...props\n },\n ref,\n ) => {\n const [isVisible, setIsVisible] = useState(appearDelay <= 0);\n const [isLeaving, setIsLeaving] = useState(false);\n\n useEffect(() => {\n if (appearDelay <= 0) {\n return;\n }\n const timer = window.setTimeout(() => setIsVisible(true), appearDelay);\n return () => clearTimeout(timer);\n }, [appearDelay]);\n\n const handleClose = useCallback(() => {\n setIsLeaving(true);\n window.setTimeout(() => {\n onClose?.();\n setIsVisible(false);\n }, animationMs);\n }, [onClose, animationMs]);\n\n // Auto close after duration\n useEffect(() => {\n if (duration > 0) {\n const timer = window.setTimeout(handleClose, duration);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [duration, handleClose]);\n\n const getIcon = () => {\n switch (variant) {\n case \"success\":\n return (\n <svg\n className={toastIconVariants({ variant })}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n case \"error\":\n return (\n <svg\n className={toastIconVariants({ variant })}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n case \"warning\":\n return (\n <svg\n className={toastIconVariants({ variant })}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n case \"info\":\n return (\n <svg\n className={toastIconVariants({ variant })}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n default:\n return null;\n }\n };\n\n if (!isVisible) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n toastVariants({ variant, position, animation }),\n isLeaving ? \"opacity-0\" : \"opacity-100\",\n \"pointer-events-auto\",\n className,\n )}\n data-visible={isVisible ? \"true\" : \"false\"}\n data-leaving={isLeaving ? \"true\" : \"false\"}\n style={{\n transition: `all ${animationMs}ms ease-in-out`,\n transform: isLeaving\n ? \"translateX(100%)\"\n : props.style?.transform || \"translateX(0)\",\n ...props.style,\n }}\n {...props}\n >\n <div className=\"flex items-start space-x-3\">\n {getIcon()}\n <div className=\"flex-1 min-w-0\">\n {title && <div className=\"text-sm font-medium\">{title}</div>}\n {description && (\n <div className=\"mt-1 text-sm opacity-90\">{description}</div>\n )}\n {children}\n </div>\n </div>\n\n {action && (\n <button\n type=\"button\"\n onClick={action.onClick}\n className=\"ml-4 text-sm font-medium underline hover:no-underline focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\"\n >\n {action.label}\n </button>\n )}\n\n <button\n type=\"button\"\n onClick={handleClose}\n className=\"absolute top-2 right-2 p-1 rounded-md hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\"\n aria-label=\"Close notification\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n );\n },\n);\n\nToastComponent.displayName = \"Toast\";\n\n// Memoize Toast for performance optimization\nexport const Toast = memo(ToastComponent) as typeof ToastComponent;\n\n// Toast Hook for easy usage\nexport const useToastNotification = () => {\n const { addToast, removeToast, clearToasts } = useToast();\n\n const toast = {\n success: (\n message: string,\n options?: Omit<ToastProps, \"variant\" | \"title\">,\n ) =>\n addToast({\n variant: \"success\",\n title: \"Success\",\n description: message,\n ...options,\n }),\n\n error: (message: string, options?: Omit<ToastProps, \"variant\" | \"title\">) =>\n addToast({\n variant: \"error\",\n title: \"Error\",\n description: message,\n ...options,\n }),\n\n warning: (\n message: string,\n options?: Omit<ToastProps, \"variant\" | \"title\">,\n ) =>\n addToast({\n variant: \"warning\",\n title: \"Warning\",\n description: message,\n ...options,\n }),\n\n info: (message: string, options?: Omit<ToastProps, \"variant\" | \"title\">) =>\n addToast({\n variant: \"info\",\n title: \"Info\",\n description: message,\n ...options,\n }),\n\n custom: (toast: Omit<ToastProps, \"id\">) => addToast(toast),\n\n dismiss: removeToast,\n clear: clearToasts,\n };\n\n return toast;\n};\n\n// Export variants for external use\nexport { toastVariants, toastIconVariants };\n"]}
1
+ {"version":3,"sources":["../src/components/core/toast.tsx"],"names":["toastVariants","cva","toastIconVariants","ToastContext","React","useToast","context","ToastProvider","children","toasts","setToasts","useState","timeoutRefs","useRef","removeToast","useCallback","id","timeoutId","prev","toast","removeToastRef","useEffect","addToast","newToast","clearToasts","refs","ToastContainer","toastsByPosition","acc","position","positionToasts","index","toastStyle","toastProps","Toast","ToastComponent","_id","title","description","variant","animation","duration","onClose","action","className","appearDelay","animationMs","props","ref","isVisible","setIsVisible","isLeaving","setIsLeaving","timer","handleClose","getIcon","cn","memo","useToastNotification","message","options"],"mappings":"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","file":"chunk-WO3KCAN6.js","sourcesContent":["import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\n\n// Toast variants\nconst toastVariants = cva(\n \"relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all duration-300\",\n {\n variants: {\n variant: {\n default:\n \"border-border bg-card text-card-foreground shadow-lg hover:shadow-xl\",\n success:\n \"border-success-200 bg-success-50 text-success-900 shadow-lg hover:shadow-xl\",\n error:\n \"border-destructive/20 bg-destructive/10 text-destructive shadow-lg hover:shadow-xl\",\n warning:\n \"border-warning-200 bg-warning-50 text-warning-900 shadow-lg hover:shadow-xl\",\n info: \"border-info-200 bg-info-50 text-info-900 shadow-lg hover:shadow-xl\",\n },\n position: {\n \"top-left\": \"fixed top-4 left-4 z-50\",\n \"top-center\": \"fixed top-4 left-1/2 -translate-x-1/2 z-50\",\n \"top-right\": \"fixed top-4 right-4 z-50\",\n \"bottom-left\": \"fixed bottom-4 left-4 z-50\",\n \"bottom-center\": \"fixed bottom-4 left-1/2 -translate-x-1/2 z-50\",\n \"bottom-right\": \"fixed bottom-4 right-4 z-50\",\n },\n animation: {\n default: \"animate-in slide-in-from-right-full duration-300\",\n slide: \"animate-in slide-in-from-bottom-4 duration-300\",\n fade: \"animate-in fade-in-0 duration-300\",\n scale: \"animate-in zoom-in-95 duration-300\",\n none: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n position: \"top-right\",\n animation: \"default\",\n },\n },\n);\n\nconst toastIconVariants = cva(\n \"flex-shrink-0 w-5 h-5 transition-colors duration-200\",\n {\n variants: {\n variant: {\n default: \"text-muted-foreground\",\n success: \"text-success-600\",\n error: \"text-destructive\",\n warning: \"text-warning-600\",\n info: \"text-info-600\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n// Types\nexport interface ToastProps\n extends\n VariantProps<typeof toastVariants>,\n React.HTMLAttributes<HTMLDivElement> {\n id?: string;\n title?: string;\n description?: string;\n duration?: number;\n onClose?: () => void;\n action?: {\n label: string;\n onClick: () => void;\n };\n className?: string;\n children?: React.ReactNode;\n appearDelay?: number; // time in ms before first render becomes visible; default 10\n animationMs?: number; // exit animation duration; default 150\n}\n\nexport interface ToastContextType {\n toasts: ToastProps[];\n addToast: (toast: Omit<ToastProps, \"id\">) => string;\n removeToast: (id: string) => void;\n clearToasts: () => void;\n}\n\n// Toast Context\nconst ToastContext = React.createContext<ToastContextType | undefined>(\n undefined,\n);\n\nexport const useToast = () => {\n const context = React.useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return context;\n};\n\n// Toast Provider\nexport const ToastProvider: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => {\n const [toasts, setToasts] = useState<ToastProps[]>([]);\n const timeoutRefs = useRef<Map<string, ReturnType<typeof setTimeout>>>(\n new Map(),\n );\n\n const removeToast = useCallback((id: string) => {\n // Clear timeout if it exists\n const timeoutId = timeoutRefs.current.get(id);\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutRefs.current.delete(id);\n }\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const removeToastRef = useRef(removeToast);\n useEffect(() => {\n removeToastRef.current = removeToast;\n }, [removeToast]);\n\n const addToast = useCallback((toast: Omit<ToastProps, \"id\">) => {\n const id = Math.random().toString(36).substr(2, 9);\n const newToast = { ...toast, id };\n\n setToasts((prev) => [...prev, newToast]);\n\n // Auto remove toast after duration\n if (toast.duration !== 0) {\n const timeoutId = setTimeout(() => {\n removeToastRef.current(id);\n timeoutRefs.current.delete(id);\n }, toast.duration || 5000);\n timeoutRefs.current.set(id, timeoutId);\n }\n\n return id;\n }, []);\n\n const clearToasts = useCallback(() => {\n // Clear all timeouts\n timeoutRefs.current.forEach((timeoutId) => clearTimeout(timeoutId));\n timeoutRefs.current.clear();\n setToasts([]);\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n const refs = timeoutRefs.current;\n return () => {\n refs.forEach((timeoutId) => clearTimeout(timeoutId));\n refs.clear();\n };\n }, []);\n\n return (\n <ToastContext.Provider\n value={{ toasts, addToast, removeToast, clearToasts }}\n >\n {children}\n <ToastContainer toasts={toasts} />\n </ToastContext.Provider>\n );\n};\n\n// Toast Container\nconst ToastContainer: React.FC<{ toasts: ToastProps[] }> = ({ toasts }) => {\n if (toasts.length === 0) return null;\n\n // Group toasts by position for stacking\n const toastsByPosition = toasts.reduce(\n (acc, toast) => {\n const position = toast.position || \"top-right\";\n if (!acc[position]) {\n acc[position] = [];\n }\n acc[position].push(toast);\n return acc;\n },\n {} as Record<string, ToastProps[]>,\n );\n\n return (\n <div className=\"fixed inset-0 z-50 pointer-events-none\">\n {Object.entries(toastsByPosition).map(([position, positionToasts]) => (\n <div key={position} className=\"pointer-events-none\">\n {positionToasts.map((toast, index) => {\n const { style: toastStyle, ...toastProps } = toast;\n return (\n <Toast\n key={toast.id}\n {...toastProps}\n style={{\n ...toastStyle,\n // Stack toasts with offset\n transform: `translateY(${index * 8}px) ${toastStyle?.transform || \"\"}`,\n marginBottom: index < positionToasts.length - 1 ? \"8px\" : \"0\",\n }}\n />\n );\n })}\n </div>\n ))}\n </div>\n );\n};\n\n// Individual Toast Component\nconst ToastComponent = React.forwardRef<HTMLDivElement, ToastProps>(\n (\n {\n id: _id,\n title,\n description,\n variant = \"default\",\n position = \"top-right\",\n animation = \"default\",\n duration = 5000,\n onClose,\n action,\n className,\n children,\n appearDelay = 10,\n animationMs = 150,\n ...props\n },\n ref,\n ) => {\n const [isVisible, setIsVisible] = useState(appearDelay <= 0);\n const [isLeaving, setIsLeaving] = useState(false);\n\n useEffect(() => {\n if (appearDelay <= 0) {\n return;\n }\n const timer = window.setTimeout(() => setIsVisible(true), appearDelay);\n return () => clearTimeout(timer);\n }, [appearDelay]);\n\n const handleClose = useCallback(() => {\n setIsLeaving(true);\n window.setTimeout(() => {\n onClose?.();\n setIsVisible(false);\n }, animationMs);\n }, [onClose, animationMs]);\n\n // Auto close after duration\n useEffect(() => {\n if (duration > 0) {\n const timer = window.setTimeout(handleClose, duration);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [duration, handleClose]);\n\n const getIcon = () => {\n switch (variant) {\n case \"success\":\n return (\n <svg\n className={toastIconVariants({ variant })}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n case \"error\":\n return (\n <svg\n className={toastIconVariants({ variant })}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n case \"warning\":\n return (\n <svg\n className={toastIconVariants({ variant })}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n case \"info\":\n return (\n <svg\n className={toastIconVariants({ variant })}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n default:\n return null;\n }\n };\n\n if (!isVisible) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n toastVariants({ variant, position, animation }),\n isLeaving ? \"opacity-0\" : \"opacity-100\",\n \"pointer-events-auto\",\n className,\n )}\n data-visible={isVisible ? \"true\" : \"false\"}\n data-leaving={isLeaving ? \"true\" : \"false\"}\n style={{\n transition: `all ${animationMs}ms ease-in-out`,\n transform: isLeaving\n ? \"translateX(100%)\"\n : props.style?.transform || \"translateX(0)\",\n ...props.style,\n }}\n {...props}\n >\n <div className=\"flex items-start space-x-3\">\n {getIcon()}\n <div className=\"flex-1 min-w-0\">\n {title && <div className=\"text-sm font-medium\">{title}</div>}\n {description && (\n <div className=\"mt-1 text-sm opacity-90\">{description}</div>\n )}\n {children}\n </div>\n </div>\n\n {action && (\n <button\n type=\"button\"\n onClick={action.onClick}\n className=\"ml-4 text-sm font-medium underline hover:no-underline focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-ring\"\n >\n {action.label}\n </button>\n )}\n\n <button\n type=\"button\"\n onClick={handleClose}\n className=\"absolute top-2 right-2 p-1 rounded-md hover:bg-muted focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-ring\"\n aria-label=\"Close notification\"\n >\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n );\n },\n);\n\nToastComponent.displayName = \"Toast\";\n\n// Memoize Toast for performance optimization\nexport const Toast = memo(ToastComponent) as typeof ToastComponent;\n\n// Toast Hook for easy usage\nexport const useToastNotification = () => {\n const { addToast, removeToast, clearToasts } = useToast();\n\n const toast = {\n success: (\n message: string,\n options?: Omit<ToastProps, \"variant\" | \"title\">,\n ) =>\n addToast({\n variant: \"success\",\n title: \"Success\",\n description: message,\n ...options,\n }),\n\n error: (message: string, options?: Omit<ToastProps, \"variant\" | \"title\">) =>\n addToast({\n variant: \"error\",\n title: \"Error\",\n description: message,\n ...options,\n }),\n\n warning: (\n message: string,\n options?: Omit<ToastProps, \"variant\" | \"title\">,\n ) =>\n addToast({\n variant: \"warning\",\n title: \"Warning\",\n description: message,\n ...options,\n }),\n\n info: (message: string, options?: Omit<ToastProps, \"variant\" | \"title\">) =>\n addToast({\n variant: \"info\",\n title: \"Info\",\n description: message,\n ...options,\n }),\n\n custom: (toast: Omit<ToastProps, \"id\">) => addToast(toast),\n\n dismiss: removeToast,\n clear: clearToasts,\n };\n\n return toast;\n};\n\n// Export variants for external use\nexport { toastVariants, toastIconVariants };\n"]}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import {d}from'./chunk-GUJB555L.js';import {b}from'./chunk-HD3TMQPR.js';import {a}from'./chunk-COXN6XBA.js';import {a as a$1}from'./chunk-AC2JBXHQ.js';import t,{useState,useMemo,useCallback}from'react';import {cva}from'class-variance-authority';var Ve=cva("flex flex-wrap items-center gap-2 p-4 bg-muted border-b border-border",{variants:{variant:{default:"bg-muted",compact:"p-2 bg-card",minimal:"p-2 bg-transparent border-0"}},defaultVariants:{variant:"default"}});function te({data:F,columns:x,searchable:z=true,searchPlaceholder:oe="Search...",searchKeys:j,onSearch:V,searchTerm:E,onSearchTermChange:K,filterable:D=false,filters:b$1=[],onFilter:B,columnFilters:_,onColumnFiltersChange:q,defaultSortColumn:ae,defaultSortDirection:se="asc",sortColumn:G,sortDirection:ie,onSortChange:y,defaultPageSize:ue=10,showPagination:h=true,currentPage:H,pageSize:J,onPageChange:Q,onPageSizeChange:M,totalItems:s,showSearch:U=true,showFilters:W=true,filterBarClassName:le,searchBarClassName:de,rowKey:ce="id",emptyText:me="No data found",...ge}){let I=E!==void 0,L=_!==void 0,k=G!==void 0,o=H!==void 0,[fe,pe]=useState(""),m=I?E:fe,X=useMemo(()=>I?e=>K?.(e):pe,[I,K]),[be,ye]=useState({}),d$1=L?_:be,$=useMemo(()=>L?e=>q?.(e):ye,[L,q]),[he,ke]=useState(ae),[ve,Te]=useState(se),g=k?G:he,v=k?ie:ve,Y=useMemo(()=>k?e=>{e&&y&&v&&y(e,v);}:ke,[k,y,v]),Z=useMemo(()=>k?e=>{g&&y&&y(g,e);}:Te,[k,y,g]),[xe,Ce]=useState(1),[Se,we]=useState(ue),f=o?H:xe,a=J!==void 0?J:Se,p=useMemo(()=>o?e=>Q?.(e):Ce,[o,Q]),R=useMemo(()=>M?e=>M(e):we,[M]),C=useMemo(()=>{if(!z||!m.trim())return F;let e=m.toLowerCase(),r=j||x.map(n=>n.dataIndex||n.key).filter(Boolean);return F.filter(n=>r.some(i=>{let c=n[i];return c==null?false:String(c).toLowerCase().includes(e)}))},[F,m,z,j,x]),S=useMemo(()=>!D||b$1.length===0||Object.keys(d$1).length===0?C:C.filter(e=>b$1.every(r=>{let n=d$1[r.key];if(n==null||n==="")return true;if(r.filterFn)return r.filterFn(n,e);let i=e[r.key];switch(r.type){case "text":return String(i).toLowerCase().includes(String(n).toLowerCase());case "number":return Number(i)===Number(n);case "boolean":return !!i==!!n;case "select":return String(i)===String(n);default:return String(i).includes(String(n))}})),[C,d$1,D,b$1]),l=useMemo(()=>{if(!g)return S;let e=[...S],r=x.find(n=>n.key===g);return !r||!r.sortable||e.sort((n,i)=>{let c=r.dataIndex?n[r.dataIndex]:n[r.key],w=r.dataIndex?i[r.dataIndex]:i[r.key];if(c==null)return 1;if(w==null)return -1;let N=0;return typeof c=="number"&&typeof w=="number"?N=c-w:N=String(c).localeCompare(String(w)),v==="asc"?N:-N}),e},[S,g,v,x]),Fe=useMemo(()=>{if(!h||o&&s!==void 0)return l;let e=(f-1)*a,r=e+a;return l.slice(e,r)},[l,f,a,h,o,s]);useMemo(()=>h?Math.ceil(o&&s!==void 0?s/a:l.length/a):1,[h,o,s,a,l.length]);let De=useCallback(e=>{X(e),o||p(1);},[X,p,o]),ee=useCallback((e,r)=>{let n={...d$1,[e]:r};$(n),o||p(1);},[d$1,$,p,o]),Ne=useCallback((e,r)=>{Y(e.key),Z(r);},[Y,Z]),Pe=useCallback((e,r)=>{p(e),r!==a&&(R(r),p(1));},[a,p,R]);return t.useEffect(()=>{V&&V(m,C);},[m,C,V]),t.useEffect(()=>{B&&B(d$1,S);},[d$1,S,B]),t.createElement("div",{className:"w-full"},(U||W&&D&&b$1.length>0)&&t.createElement("div",{className:a$1(Ve(),le)},U&&z&&t.createElement("div",{className:a$1("flex-1 min-w-[200px]",de)},t.createElement(b,{type:"text",placeholder:oe,value:m,onChange:e=>De(e.target.value),className:"w-full","aria-label":"Search table"})),W&&D&&b$1.length>0&&t.createElement("div",{className:"flex flex-wrap items-center gap-2"},b$1.map(e=>{let r=d$1[e.key];return e.type==="select"&&e.options?t.createElement("select",{key:e.key,value:String(r||""),onChange:n=>ee(e.key,n.target.value||void 0),className:"rounded-md border border-input px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-primary","aria-label":`Filter by ${e.key}`},t.createElement("option",{value:""},"All ",e.key),e.options.map(n=>t.createElement("option",{key:n.value,value:String(n.value)},n.label))):t.createElement(b,{key:e.key,type:e.type==="number"?"number":"text",placeholder:e.placeholder||`Filter ${e.key}...`,value:String(r||""),onChange:n=>ee(e.key,e.type==="number"?Number(n.target.value):n.target.value),className:"min-w-[150px]","aria-label":`Filter by ${e.key}`})}),Object.keys(d$1).length>0&&t.createElement("button",{type:"button",onClick:()=>$({}),className:"px-3 py-2 text-sm text-muted-foreground hover:text-foreground underline","aria-label":"Clear all filters"},"Clear filters"))),t.createElement(d,{...ge,data:Fe,columns:x,rowKey:ce,emptyText:me,...g&&{sortColumn:g,sortDirection:v},onSort:Ne,...h&&{pagination:{current:f,pageSize:a,total:o&&s!==void 0?s:l.length,onChange:Pe,showSizeChanger:true}}}),h&&(o&&s!==void 0?s>0:l.length>0)&&t.createElement("div",{className:"mt-2 px-4 py-2 text-sm text-muted-foreground"},o&&s!==void 0?t.createElement(t.Fragment,null,"Showing ",(f-1)*a+1," to"," ",Math.min(f*a,s)," of ",s," ","results",m&&" (filtered)"):t.createElement(t.Fragment,null,"Showing ",(f-1)*a+1," to"," ",Math.min(f*a,l.length)," of"," ",l.length," results",m&&` (filtered from ${F.length} total)`)))}te.displayName="DataTable";var Ke=a(te);export{te as a,Ke as b};//# sourceMappingURL=chunk-7W456HZL.js.map
3
- //# sourceMappingURL=chunk-7W456HZL.js.map
2
+ import {d}from'./chunk-UIEGBT4T.js';import {b}from'./chunk-HD3TMQPR.js';import {a}from'./chunk-COXN6XBA.js';import {a as a$1}from'./chunk-AC2JBXHQ.js';import t,{useState,useMemo,useCallback}from'react';import {cva}from'class-variance-authority';var Ve=cva("flex flex-wrap items-center gap-2 p-4 bg-muted border-b border-border",{variants:{variant:{default:"bg-muted",compact:"p-2 bg-card",minimal:"p-2 bg-transparent border-0"}},defaultVariants:{variant:"default"}});function te({data:F,columns:x,searchable:z=true,searchPlaceholder:oe="Search...",searchKeys:j,onSearch:V,searchTerm:E,onSearchTermChange:K,filterable:D=false,filters:b$1=[],onFilter:B,columnFilters:_,onColumnFiltersChange:q,defaultSortColumn:ae,defaultSortDirection:se="asc",sortColumn:G,sortDirection:ie,onSortChange:y,defaultPageSize:ue=10,showPagination:h=true,currentPage:H,pageSize:J,onPageChange:Q,onPageSizeChange:M,totalItems:s,showSearch:U=true,showFilters:W=true,filterBarClassName:le,searchBarClassName:de,rowKey:ce="id",emptyText:me="No data found",...ge}){let I=E!==void 0,L=_!==void 0,k=G!==void 0,o=H!==void 0,[fe,pe]=useState(""),m=I?E:fe,X=useMemo(()=>I?e=>K?.(e):pe,[I,K]),[be,ye]=useState({}),d$1=L?_:be,$=useMemo(()=>L?e=>q?.(e):ye,[L,q]),[he,ke]=useState(ae),[ve,Te]=useState(se),g=k?G:he,v=k?ie:ve,Y=useMemo(()=>k?e=>{e&&y&&v&&y(e,v);}:ke,[k,y,v]),Z=useMemo(()=>k?e=>{g&&y&&y(g,e);}:Te,[k,y,g]),[xe,Ce]=useState(1),[Se,we]=useState(ue),f=o?H:xe,a=J!==void 0?J:Se,p=useMemo(()=>o?e=>Q?.(e):Ce,[o,Q]),R=useMemo(()=>M?e=>M(e):we,[M]),C=useMemo(()=>{if(!z||!m.trim())return F;let e=m.toLowerCase(),r=j||x.map(n=>n.dataIndex||n.key).filter(Boolean);return F.filter(n=>r.some(i=>{let c=n[i];return c==null?false:String(c).toLowerCase().includes(e)}))},[F,m,z,j,x]),S=useMemo(()=>!D||b$1.length===0||Object.keys(d$1).length===0?C:C.filter(e=>b$1.every(r=>{let n=d$1[r.key];if(n==null||n==="")return true;if(r.filterFn)return r.filterFn(n,e);let i=e[r.key];switch(r.type){case "text":return String(i).toLowerCase().includes(String(n).toLowerCase());case "number":return Number(i)===Number(n);case "boolean":return !!i==!!n;case "select":return String(i)===String(n);default:return String(i).includes(String(n))}})),[C,d$1,D,b$1]),l=useMemo(()=>{if(!g)return S;let e=[...S],r=x.find(n=>n.key===g);return !r||!r.sortable||e.sort((n,i)=>{let c=r.dataIndex?n[r.dataIndex]:n[r.key],w=r.dataIndex?i[r.dataIndex]:i[r.key];if(c==null)return 1;if(w==null)return -1;let N=0;return typeof c=="number"&&typeof w=="number"?N=c-w:N=String(c).localeCompare(String(w)),v==="asc"?N:-N}),e},[S,g,v,x]),Fe=useMemo(()=>{if(!h||o&&s!==void 0)return l;let e=(f-1)*a,r=e+a;return l.slice(e,r)},[l,f,a,h,o,s]);useMemo(()=>h?Math.ceil(o&&s!==void 0?s/a:l.length/a):1,[h,o,s,a,l.length]);let De=useCallback(e=>{X(e),o||p(1);},[X,p,o]),ee=useCallback((e,r)=>{let n={...d$1,[e]:r};$(n),o||p(1);},[d$1,$,p,o]),Ne=useCallback((e,r)=>{Y(e.key),Z(r);},[Y,Z]),Pe=useCallback((e,r)=>{p(e),r!==a&&(R(r),p(1));},[a,p,R]);return t.useEffect(()=>{V&&V(m,C);},[m,C,V]),t.useEffect(()=>{B&&B(d$1,S);},[d$1,S,B]),t.createElement("div",{className:"w-full"},(U||W&&D&&b$1.length>0)&&t.createElement("div",{className:a$1(Ve(),le)},U&&z&&t.createElement("div",{className:a$1("flex-1 min-w-[200px]",de)},t.createElement(b,{type:"text",placeholder:oe,value:m,onChange:e=>De(e.target.value),className:"w-full","aria-label":"Search table"})),W&&D&&b$1.length>0&&t.createElement("div",{className:"flex flex-wrap items-center gap-2"},b$1.map(e=>{let r=d$1[e.key];return e.type==="select"&&e.options?t.createElement("select",{key:e.key,value:String(r||""),onChange:n=>ee(e.key,n.target.value||void 0),className:"rounded-md border border-input px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-primary","aria-label":`Filter by ${e.key}`},t.createElement("option",{value:""},"All ",e.key),e.options.map(n=>t.createElement("option",{key:n.value,value:String(n.value)},n.label))):t.createElement(b,{key:e.key,type:e.type==="number"?"number":"text",placeholder:e.placeholder||`Filter ${e.key}...`,value:String(r||""),onChange:n=>ee(e.key,e.type==="number"?Number(n.target.value):n.target.value),className:"min-w-[150px]","aria-label":`Filter by ${e.key}`})}),Object.keys(d$1).length>0&&t.createElement("button",{type:"button",onClick:()=>$({}),className:"px-3 py-2 text-sm text-muted-foreground hover:text-foreground underline","aria-label":"Clear all filters"},"Clear filters"))),t.createElement(d,{...ge,data:Fe,columns:x,rowKey:ce,emptyText:me,...g&&{sortColumn:g,sortDirection:v},onSort:Ne,...h&&{pagination:{current:f,pageSize:a,total:o&&s!==void 0?s:l.length,onChange:Pe,showSizeChanger:true}}}),h&&(o&&s!==void 0?s>0:l.length>0)&&t.createElement("div",{className:"mt-2 px-4 py-2 text-sm text-muted-foreground"},o&&s!==void 0?t.createElement(t.Fragment,null,"Showing ",(f-1)*a+1," to"," ",Math.min(f*a,s)," of ",s," ","results",m&&" (filtered)"):t.createElement(t.Fragment,null,"Showing ",(f-1)*a+1," to"," ",Math.min(f*a,l.length)," of"," ",l.length," results",m&&` (filtered from ${F.length} total)`)))}te.displayName="DataTable";var Ke=a(te);export{te as a,Ke as b};//# sourceMappingURL=chunk-XJJJEWSU.js.map
3
+ //# sourceMappingURL=chunk-XJJJEWSU.js.map
@@ -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":"qPAwEA,IAAMA,EAAAA,CAAoBC,GAAAA,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,GAAAA,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,SAAS,EAAE,CAAA,CACzDC,CAAAA,CAAaP,CAAAA,CACf1B,CAAAA,CACA8B,EAAAA,CACEI,CAAAA,CAAgBC,OAAAA,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,QAAAA,CAExD,EAAE,CAAA,CACEO,GAAAA,CAAgBZ,CAAAA,CAClBtB,CAAAA,CACAgC,EAAAA,CACEG,CAAAA,CAAmBL,QACvB,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,SAElDzB,EAAiB,CAAA,CACb,CAACoC,EAAAA,CAAuBC,EAAwB,CAAA,CAAIZ,QAAAA,CAExDxB,EAAoB,EAChBqC,CAAAA,CAAajB,CAAAA,CACfnB,CAAAA,CACAgC,EAAAA,CACEK,CAAAA,CAAgBlB,CAAAA,CAClBlB,EAAAA,CACAiC,EAAAA,CACEI,EAAgBZ,OAAAA,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,OAAAA,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,QAAAA,CAAS,CAAC,CAAA,CAC1D,CAACqB,EAAAA,CAAkBC,EAAmB,CAAA,CAAItB,SAASpB,EAAe,CAAA,CAClE2C,CAAAA,CAAc1B,CAAAA,CAChBf,CAAAA,CACAqC,EAAAA,CACEK,CAAAA,CACJzC,CAAAA,GAAuB,OAAYA,CAAAA,CAAqBsC,EAAAA,CACpDI,CAAAA,CAAiBtB,OAAAA,CACrB,IACEN,CAAAA,CACK6B,CAAAA,EAAiB1C,CAAAA,GAAe0C,CAAI,CAAA,CACrCN,EAAAA,CACN,CAACvB,CAAAA,CAAwBb,CAAY,CACvC,CAAA,CACM2C,CAAAA,CAAcxB,OAAAA,CAClB,IACElB,CAAAA,CACK2C,CAAAA,EAAiB3C,CAAAA,CAAiB2C,CAAI,CAAA,CACvCN,EAAAA,CACN,CAACrC,CAAgB,CACnB,CAAA,CAGM4C,CAAAA,CAAqB1B,OAAAA,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,OAAAA,CAAQ,IAE/B,CAACjC,CAAAA,EACDC,GAAAA,CAAQ,SAAW,CAAA,EACnB,MAAA,CAAO,IAAA,CAAKoC,GAAa,CAAA,CAAE,MAAA,GAAW,CAAA,CAE/BsB,CAAAA,CAGFA,EAAmB,MAAA,CAAQI,CAAAA,EACzB9D,GAAAA,CAAQ,KAAA,CAAOiE,CAAAA,EAAW,CAC/B,IAAMC,CAAAA,CAAc9B,GAAAA,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,IAAerC,CAAAA,CAAYC,GAAO,CAAC,CAAA,CAGrDoE,CAAAA,CAAapC,OAAAA,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,OAAAA,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,QAAQ,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,WAAAA,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,WAAAA,CACzB,CAAChB,CAAAA,CAAa9B,CAAAA,GAAmB,CAC/B,IAAMgD,CAAAA,CAAa,CACjB,GAAG7C,IACH,CAAC2B,CAAG,EAAG9B,CACT,CAAA,CACAI,CAAAA,CAAiB4C,CAAU,CAAA,CACtBvD,GACH4B,CAAAA,CAAe,CAAC,EAEpB,CAAA,CACA,CAAClB,GAAAA,CAAeC,CAAAA,CAAkBiB,CAAAA,CAAgB5B,CAAsB,CAC1E,CAAA,CAEMwD,EAAAA,CAAaH,WAAAA,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,WAAAA,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,CAAAA,CAAM,SAAA,CAAU,IAAM,CAChB1F,GACFA,CAAAA,CAASkC,CAAAA,CAAY4B,CAAkB,EAE3C,CAAA,CAAG,CAAC5B,CAAAA,CAAY4B,CAAAA,CAAoB9D,CAAQ,CAAC,CAAA,CAE7C0F,CAAAA,CAAM,SAAA,CAAU,IAAM,CAChBrF,CAAAA,EACFA,CAAAA,CAASmC,IAAe4B,CAAkB,EAE9C,CAAA,CAAG,CAAC5B,GAAAA,CAAe4B,CAAAA,CAAoB/D,CAAQ,CAAC,CAAA,CAG9CqF,CAAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,QAAA,CAAA,CAAA,CAEXtE,CAAAA,EAAeC,CAAAA,EAAelB,GAAcC,GAAAA,CAAQ,MAAA,CAAS,CAAA,GAC7DsF,CAAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWC,GAAAA,CAAGnG,IAAkB,CAAG8B,EAAkB,CAAA,CAAA,CAEvDF,CAAAA,EAAcvB,CAAAA,EACb6F,CAAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,UAAWC,GAAAA,CAAG,sBAAA,CAAwBpE,EAAkB,CAAA,CAAA,CAC3DmE,CAAAA,CAAA,aAAA,CAACE,CAAAA,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,GAAAA,CAAQ,MAAA,CAAS,CAAA,EAC7CsF,CAAAA,CAAA,aAAA,CAAC,OAAI,SAAA,CAAU,mCAAA,CAAA,CACZtF,GAAAA,CAAQ,GAAA,CAAKiE,CAAAA,EAAW,CACvB,IAAMC,CAAAA,CAAc9B,GAAAA,CAAc6B,CAAAA,CAAO,GAAG,CAAA,CAE5C,OAAIA,CAAAA,CAAO,IAAA,GAAS,QAAA,EAAYA,EAAO,OAAA,CAEnCqB,CAAAA,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,CAAAA,CAAA,aAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,IAAG,MAAA,CAAKrB,CAAAA,CAAO,GAAI,CAAA,CAChCA,CAAAA,CAAO,OAAA,CAAQ,GAAA,CAAKyB,CAAAA,EACnBJ,EAAA,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,CAAAA,CAAA,aAAA,CAACE,CAAAA,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,GAAa,CAAA,CAAE,MAAA,CAAS,CAAA,EACnCkD,CAAAA,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,CAAAA,CAAA,aAAA,CAACK,CAAAA,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,CAAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8CAAA,CAAA,CACZ5D,CAAAA,EAA0BX,CAAAA,GAAe,MAAA,CACxCuE,CAAAA,CAAA,aAAA,CAAAA,CAAAA,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,CAAAA,CAAA,aAAA,CAAAA,EAAA,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,EAAKvG,EAAS","file":"chunk-7W456HZL.js","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-XJJJEWSU.js","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 as a$1}from'./chunk-COXN6XBA.js';import {a}from'./chunk-AC2JBXHQ.js';import r from'react';import {ResponsiveContainer,PieChart,Pie,Cell,Tooltip,Legend,AreaChart,CartesianGrid,XAxis,YAxis,Area,BarChart,Bar,LineChart,Line}from'recharts';import {cva}from'class-variance-authority';var U=cva("w-full",{variants:{variant:{default:"",minimal:"",detailed:""},size:{sm:"h-48",md:"h-64",lg:"h-96",xl:"h-[500px]"}},defaultVariants:{variant:"default",size:"md"}}),s=["hsl(var(--nostromo-color-brand-500))","hsl(var(--nostromo-color-info-500))","hsl(var(--nostromo-color-success-500))","hsl(var(--nostromo-color-warning-500))","hsl(var(--nostromo-color-error-500))","hsl(var(--nostromo-color-brand-300))","hsl(var(--nostromo-color-info-700))","hsl(var(--nostromo-color-success-700))"],g=({active:u,payload:t,label:i})=>u&&t&&t.length?r.createElement("div",{className:"rounded-lg border border-border bg-popover p-3 shadow-lg"},r.createElement("p",{className:"mb-2 font-semibold text-popover-foreground"},String(i??"")),t.map((m,n)=>r.createElement("p",{key:n,className:"text-sm",style:{color:m.color}},`${m.name??""}: ${m.value??""}`))):null,v=({payload:u})=>r.createElement("div",{className:"mt-4 flex flex-wrap justify-center gap-4"},u?.map((t,i)=>r.createElement("div",{key:i,className:"flex items-center gap-2"},r.createElement("div",{className:"h-3 w-3 rounded",style:{backgroundColor:t.color},"aria-hidden":"true"}),r.createElement("span",{className:"text-sm text-popover-foreground"},t.value)))),w=r.forwardRef(({type:u,data:t,dataKeys:i,xAxisKey:m="name",colors:n=s,showGrid:C=true,showLegend:h=true,showTooltip:d=true,title:b,description:N,className:z,variant:A,size:p,height:K,ariaLabel:T,ariaLabelledBy:V,strokeWidth:D=2,fillOpacity:B=.6,...I},j)=>{let L=K||(p==="sm"?192:p==="lg"?384:p==="xl"?500:256),H=()=>{if(typeof window>"u")return r.createElement("div",{className:"flex items-center justify-center h-full text-muted-foreground"},r.createElement("p",null,"Chart loading..."));let y={data:t,margin:{top:5,right:5,left:5,bottom:5}};switch(u){case "line":return r.createElement(LineChart,{...y},C&&r.createElement(CartesianGrid,{strokeDasharray:"3 3",stroke:"hsl(var(--nostromo-color-neutral-300))"}),r.createElement(XAxis,{dataKey:m,stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),r.createElement(YAxis,{stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),d&&r.createElement(Tooltip,{content:r.createElement(g,null)}),i.map((e,a)=>{let o=a%n.length,l=n[o]??s[o%s.length];return r.createElement(Line,{key:e,type:"monotone",dataKey:e,stroke:l,strokeWidth:D,dot:{r:4,fill:l},activeDot:{r:6}})}),h&&r.createElement(Legend,{content:r.createElement(v,null)}));case "bar":return r.createElement(BarChart,{...y},C&&r.createElement(CartesianGrid,{strokeDasharray:"3 3",stroke:"hsl(var(--nostromo-color-neutral-300))"}),r.createElement(XAxis,{dataKey:m,stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),r.createElement(YAxis,{stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),d&&r.createElement(Tooltip,{content:r.createElement(g,null)}),i.map((e,a)=>{let o=a%n.length,l=n[o]??s[o%s.length];return r.createElement(Bar,{key:e,dataKey:e,fill:l,radius:[4,4,0,0]})}),h&&r.createElement(Legend,{content:r.createElement(v,null)}));case "area":return r.createElement(AreaChart,{...y},C&&r.createElement(CartesianGrid,{strokeDasharray:"3 3",stroke:"hsl(var(--nostromo-color-neutral-300))"}),r.createElement(XAxis,{dataKey:m,stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),r.createElement(YAxis,{stroke:"hsl(var(--nostromo-color-neutral-600))",tick:{fill:"hsl(var(--nostromo-color-neutral-700))",fontSize:12}}),d&&r.createElement(Tooltip,{content:r.createElement(g,null)}),i.map((e,a)=>{let o=a%n.length,l=n[o]??s[o%s.length];return r.createElement(Area,{key:e,type:"monotone",dataKey:e,stroke:l,fill:l,fillOpacity:B,strokeWidth:D})}),h&&r.createElement(Legend,{content:r.createElement(v,null)}));case "pie":{let e=i[0]||"value";return r.createElement(PieChart,null,r.createElement(Pie,{data:t,dataKey:e,nameKey:m,cx:"50%",cy:"50%",outerRadius:L/4,label:a=>`${a.name??""}: ${((a.percent??0)*100).toFixed(0)}%`},t.map((a,o)=>{let l=n[o%n.length]||s[o%s.length];return r.createElement(Cell,{key:`cell-${o}`,fill:l??"#8884d8"})})),d&&r.createElement(Tooltip,{content:r.createElement(g,null)}),h&&r.createElement(Legend,{content:r.createElement(v,null)}))}default:return null}};return r.createElement("div",{ref:j,className:a(U({variant:A,size:p}),z),role:"img","aria-label":T||b||`${u} chart`,"aria-labelledby":V,...I},b&&r.createElement("h3",{className:"mb-2 text-lg font-semibold text-foreground"},b),N&&r.createElement("p",{className:"mb-4 text-sm text-muted-foreground"},N),r.createElement(ResponsiveContainer,{width:"100%",height:L},H()))});w.displayName="Chart";var tr=a$1(w);export{U as a,tr as b};//# sourceMappingURL=chunk-XLZJ6HBL.js.map
3
+ //# sourceMappingURL=chunk-XLZJ6HBL.js.map