buildgrid-ui 1.14.7 → 1.14.9

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 (155) hide show
  1. package/dist/assets/en-US-BUOWLxFp.js.map +1 -1
  2. package/dist/assets/jsx-runtime-D_zvdyIk.js.map +1 -1
  3. package/dist/assets/magic-string.es-CTSuTltI.js +11 -0
  4. package/dist/assets/magic-string.es-CTSuTltI.js.map +1 -0
  5. package/dist/assets/vi.bdSIJ99Y-C6e_ZQS2.js +482 -0
  6. package/dist/assets/vi.bdSIJ99Y-C6e_ZQS2.js.map +1 -0
  7. package/dist/blocks/bento-grid/bento-grid.js.map +1 -1
  8. package/dist/blocks/bento-grid/bento-grid.stories.js.map +1 -1
  9. package/dist/blocks/data-table/components/active-filters.d.ts +1 -1
  10. package/dist/blocks/data-table/components/active-filters.js.map +1 -1
  11. package/dist/blocks/data-table/components/column-visibility-dropdown.d.ts +1 -1
  12. package/dist/blocks/data-table/components/column-visibility-dropdown.js.map +1 -1
  13. package/dist/blocks/data-table/components/filter-dropdown.d.ts +1 -1
  14. package/dist/blocks/data-table/components/filter-dropdown.js.map +1 -1
  15. package/dist/blocks/data-table/components/search-input.js.map +1 -1
  16. package/dist/blocks/data-table/components/selection-info.js.map +1 -1
  17. package/dist/blocks/data-table/components/table-header.d.ts +1 -1
  18. package/dist/blocks/data-table/components/table-header.js.map +1 -1
  19. package/dist/blocks/data-table/components/table-row.d.ts +1 -1
  20. package/dist/blocks/data-table/components/table-row.js.map +1 -1
  21. package/dist/blocks/data-table/components/table-skeleton.js.map +1 -1
  22. package/dist/blocks/data-table/data-table.d.ts +2 -2
  23. package/dist/blocks/data-table/data-table.stories.js.map +1 -1
  24. package/dist/blocks/data-table/types/data-table.d.ts +1 -1
  25. package/dist/blocks/data-table/utils/export.d.ts +1 -1
  26. package/dist/blocks/data-table/utils/export.js.map +1 -1
  27. package/dist/blocks/empty-message/empty-message.js.map +1 -1
  28. package/dist/blocks/empty-message/empty-message.stories.js.map +1 -1
  29. package/dist/blocks/help-carousel/help-carousel.js.map +1 -1
  30. package/dist/blocks/help-carousel/help-carousel.stories.js.map +1 -1
  31. package/dist/blocks/html-text-editor/html-text-area.d.ts +1 -0
  32. package/dist/blocks/html-text-editor/html-text-area.js.map +1 -1
  33. package/dist/blocks/html-text-editor/html-text-area.stories.js.map +1 -1
  34. package/dist/blocks/html-text-editor/html-text-editor.d.ts +2 -1
  35. package/dist/blocks/html-text-editor/html-text-editor.js.map +1 -1
  36. package/dist/blocks/html-text-editor/html-text-editor.stories.js.map +1 -1
  37. package/dist/blocks/html-text-editor/options-bar.js.map +1 -1
  38. package/dist/blocks/lazy-image-gallery/lazy-image-gallery.d.ts +1 -1
  39. package/dist/blocks/lazy-image-gallery/lazy-image-gallery.js.map +1 -1
  40. package/dist/blocks/lazy-image-gallery/lazy-image-gallery.stories.js.map +1 -1
  41. package/dist/blocks/month-navigator/month-navigator.js.map +1 -1
  42. package/dist/blocks/month-navigator/month-navigator.stories.js.map +1 -1
  43. package/dist/blocks/navigable-list/navigable-list.d.ts +1 -1
  44. package/dist/blocks/paginated-items/paginated-items.js.map +1 -1
  45. package/dist/blocks/paginated-items/paginated-items.stories.js.map +1 -1
  46. package/dist/blocks/pagination-controls/pagination-controls.js.map +1 -1
  47. package/dist/blocks/pagination-controls/pagination-controls.stories.js.map +1 -1
  48. package/dist/blocks/sidebar/sidebar.d.ts +1 -1
  49. package/dist/blocks/sidebar/sidebar.js.map +1 -1
  50. package/dist/blocks/sidebar/sidebar.stories.js.map +1 -1
  51. package/dist/components/accordion/accordion.js.map +1 -1
  52. package/dist/components/accordion/accordion.stories.js +1 -1
  53. package/dist/components/accordion/accordion.stories.js.map +1 -1
  54. package/dist/components/adaptive-input/adaptive-input.d.ts +1 -1
  55. package/dist/components/adaptive-input/adaptive-input.js.map +1 -1
  56. package/dist/components/adaptive-input/adaptive-input.stories.js.map +1 -1
  57. package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
  58. package/dist/components/alert-dialog/alert-dialog.stories.js.map +1 -1
  59. package/dist/components/autocomplete/autocomplete.d.ts +1 -1
  60. package/dist/components/autocomplete/autocomplete.js.map +1 -1
  61. package/dist/components/autocomplete/autocomplete.stories.js.map +1 -1
  62. package/dist/components/autocomplete/autocomplete.test.js +1 -1
  63. package/dist/components/autocomplete/autocomplete.test.js.map +1 -1
  64. package/dist/components/avatar/avatar.js.map +1 -1
  65. package/dist/components/avatar/avatar.stories.js.map +1 -1
  66. package/dist/components/badge/badge.d.ts +2 -2
  67. package/dist/components/badge/badge.js.map +1 -1
  68. package/dist/components/badge/badge.stories.js.map +1 -1
  69. package/dist/components/button/button.d.ts +1 -1
  70. package/dist/components/button/button.js.map +1 -1
  71. package/dist/components/button/button.stories.js.map +1 -1
  72. package/dist/components/button/button.test.js +1 -1
  73. package/dist/components/button/button.test.js.map +1 -1
  74. package/dist/components/button/button.types.d.ts +3 -3
  75. package/dist/components/button/button.types.js.map +1 -1
  76. package/dist/components/calendar/calendar.d.ts +1 -1
  77. package/dist/components/calendar/calendar.js.map +1 -1
  78. package/dist/components/calendar/calendar.stories.js.map +1 -1
  79. package/dist/components/card/card.js.map +1 -1
  80. package/dist/components/card/card.stories.js.map +1 -1
  81. package/dist/components/checkbox/checkbox.js.map +1 -1
  82. package/dist/components/checkbox/checkbox.stories.js.map +1 -1
  83. package/dist/components/command/command.d.ts +1 -1
  84. package/dist/components/command/command.js.map +1 -1
  85. package/dist/components/command/command.stories.js.map +1 -1
  86. package/dist/components/currency-input/currency-input.d.ts +1 -1
  87. package/dist/components/currency-input/currency-input.js.map +1 -1
  88. package/dist/components/currency-input/currency-input.stories.js.map +1 -1
  89. package/dist/components/dialog/dialog.js.map +1 -1
  90. package/dist/components/dialog/dialog.stories.js.map +1 -1
  91. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  92. package/dist/components/dropdown-menu/dropdown-menu.stories.js.map +1 -1
  93. package/dist/components/input/input.d.ts +1 -1
  94. package/dist/components/input/input.js.map +1 -1
  95. package/dist/components/input/input.stories.js.map +1 -1
  96. package/dist/components/label/label.d.ts +2 -2
  97. package/dist/components/label/label.js.map +1 -1
  98. package/dist/components/label/label.stories.js.map +1 -1
  99. package/dist/components/multi-select/multi-select.d.ts +2 -2
  100. package/dist/components/multi-select/multi-select.js.map +1 -1
  101. package/dist/components/multi-select/multi-select.stories.js.map +1 -1
  102. package/dist/components/navigation-menu/navigation-menu.d.ts +1 -1
  103. package/dist/components/navigation-menu/navigation-menu.js.map +1 -1
  104. package/dist/components/navigation-menu/navigation-menu.stories.js.map +1 -1
  105. package/dist/components/pagination/pagination.d.ts +1 -1
  106. package/dist/components/pagination/pagination.js.map +1 -1
  107. package/dist/components/pagination/pagination.stories.js.map +1 -1
  108. package/dist/components/password-input/password-input.js.map +1 -1
  109. package/dist/components/password-input/password-input.stories.js.map +1 -1
  110. package/dist/components/popover/popover.js.map +1 -1
  111. package/dist/components/popover/popover.stories.js.map +1 -1
  112. package/dist/components/progress/progress.js.map +1 -1
  113. package/dist/components/progress/progress.stories.js.map +1 -1
  114. package/dist/components/radio-group/radio-group.js.map +1 -1
  115. package/dist/components/radio-group/radio-group.stories.js.map +1 -1
  116. package/dist/components/select/select.js.map +1 -1
  117. package/dist/components/select/select.stories.js.map +1 -1
  118. package/dist/components/separator/separator.js.map +1 -1
  119. package/dist/components/separator/separator.stories.js.map +1 -1
  120. package/dist/components/skeleton/skeleton.js.map +1 -1
  121. package/dist/components/skeleton/skeleton.stories.js.map +1 -1
  122. package/dist/components/spinner/spinner.d.ts +1 -1
  123. package/dist/components/spinner/spinner.js.map +1 -1
  124. package/dist/components/switch/switch.js.map +1 -1
  125. package/dist/components/switch/switch.stories.js.map +1 -1
  126. package/dist/components/table/table.js.map +1 -1
  127. package/dist/components/table/table.stories.js.map +1 -1
  128. package/dist/components/tabs/tabs.js.map +1 -1
  129. package/dist/components/tabs/tabs.stories.js.map +1 -1
  130. package/dist/components/textarea/textarea.js.map +1 -1
  131. package/dist/components/textarea/textarea.stories.js.map +1 -1
  132. package/dist/components/toaster/toast.d.ts +8 -8
  133. package/dist/components/toaster/toast.js.map +1 -1
  134. package/dist/components/toaster/toaster.js.map +1 -1
  135. package/dist/components/toaster/toaster.stories.js.map +1 -1
  136. package/dist/components/toggle/toggle.d.ts +3 -3
  137. package/dist/components/toggle/toggle.js.map +1 -1
  138. package/dist/components/toggle/toggle.stories.js.map +1 -1
  139. package/dist/components/toggle-group/toggle-group.d.ts +3 -3
  140. package/dist/components/toggle-group/toggle-group.js.map +1 -1
  141. package/dist/components/toggle-group/toggle-group.stories.js.map +1 -1
  142. package/dist/components/tooltip/tooltip.js.map +1 -1
  143. package/dist/components/tooltip/tooltip.stories.js.map +1 -1
  144. package/dist/lib/hooks/use-debounce.js.map +1 -1
  145. package/dist/lib/hooks/use-dialog.js.map +1 -1
  146. package/dist/lib/hooks/use-dialog.stories.js.map +1 -1
  147. package/dist/lib/hooks/use-file-utilities.d.ts +1 -1
  148. package/dist/lib/utils/cn.d.ts +1 -1
  149. package/dist/lib/utils/cn.js.map +1 -1
  150. package/dist/lib/utils/merge-objects.js.map +1 -1
  151. package/package.json +17 -31
  152. package/dist/assets/magic-string.es-CoDNcMYi.js +0 -11
  153. package/dist/assets/magic-string.es-CoDNcMYi.js.map +0 -1
  154. package/dist/assets/vi.B-PuvDzu-CCLEoytE.js +0 -500
  155. package/dist/assets/vi.B-PuvDzu-CCLEoytE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"bento-grid.js","sources":["../../../src/blocks/bento-grid/bento-grid.tsx"],"sourcesContent":["// based on https://magicui.design/docs/components/bento-grid\nimport { cn } from '@/lib/utils'\nimport { ComponentPropsWithoutRef, ReactNode } from 'react'\n\ninterface BentoGridProps extends ComponentPropsWithoutRef<'div'> {\n\tchildren: ReactNode\n\tclassName?: string\n}\n\ninterface BentoCardProps extends ComponentPropsWithoutRef<'div'> {\n\tchildren: ReactNode\n}\n\nconst BentoGrid = ({ children, className, ...props }: BentoGridProps) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('grid w-full auto-rows-[22rem] grid-cols-3 gap-4', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nconst BentoCard = ({ children, className, ...props }: BentoCardProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t'group relative col-span-3 flex flex-col justify-between overflow-hidden rounded-xl',\n\t\t\t// light styles\n\t\t\t'bg-white [box-shadow:0_0_0_1px_rgba(0,0,0,.03),0_2px_4px_rgba(0,0,0,.05),0_12px_24px_rgba(0,0,0,.05)]',\n\t\t\t// dark styles\n\t\t\t'transform-gpu dark:bg-black dark:[border:1px_solid_rgba(255,255,255,.1)] dark:[box-shadow:0_-20px_80px_-20px_#ffffff1f_inset]',\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t{children}\n\t</div>\n)\n\nexport { BentoCard, BentoGrid }\n"],"names":["BentoGrid","children","className","props","jsx","cn","BentoCard"],"mappings":"2JAaA,MAAMA,EAAY,CAAC,CAAE,SAAAC,EAAU,UAAAC,EAAW,GAAGC,KAE3CC,EAAA,IAAC,MAAA,CACA,UAAWC,EAAG,kDAAmDH,CAAS,EACzE,GAAGC,EAEH,SAAAF,CAAA,CACF,EAIIK,EAAY,CAAC,CAAE,SAAAL,EAAU,UAAAC,EAAW,GAAGC,CAC5C,IAAAC,EAAA,IAAC,MAAA,CACA,UAAWC,EACV,qFAEA,wGAEA,gIACAH,CACD,EACC,GAAGC,EAEH,SAAAF,CAAA,CACF"}
1
+ {"version":3,"file":"bento-grid.js","sources":["../../../src/blocks/bento-grid/bento-grid.tsx"],"sourcesContent":["// based on https://magicui.design/docs/components/bento-grid\nimport { cn } from '@/lib/utils'\nimport { ComponentPropsWithoutRef, ReactNode } from 'react'\n\ninterface BentoGridProps extends ComponentPropsWithoutRef<'div'> {\n\tchildren: ReactNode\n\tclassName?: string\n}\n\ninterface BentoCardProps extends ComponentPropsWithoutRef<'div'> {\n\tchildren: ReactNode\n}\n\nconst BentoGrid = ({ children, className, ...props }: BentoGridProps) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('grid w-full auto-rows-[22rem] grid-cols-3 gap-4', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nconst BentoCard = ({ children, className, ...props }: BentoCardProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t'group relative col-span-3 flex flex-col justify-between overflow-hidden rounded-xl',\n\t\t\t// light styles\n\t\t\t'bg-white [box-shadow:0_0_0_1px_rgba(0,0,0,.03),0_2px_4px_rgba(0,0,0,.05),0_12px_24px_rgba(0,0,0,.05)]',\n\t\t\t// dark styles\n\t\t\t'transform-gpu dark:bg-black dark:[border:1px_solid_rgba(255,255,255,.1)] dark:[box-shadow:0_-20px_80px_-20px_#ffffff1f_inset]',\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t{children}\n\t</div>\n)\n\nexport { BentoCard, BentoGrid }\n"],"names":["BentoGrid","children","className","props","jsx","cn","BentoCard"],"mappings":"2JAaA,MAAMA,EAAY,CAAC,CAAE,SAAAC,EAAU,UAAAC,EAAW,GAAGC,KAE3CC,EAAAA,IAAC,MAAA,CACA,UAAWC,EAAG,kDAAmDH,CAAS,EACzE,GAAGC,EAEH,SAAAF,CAAA,CAAA,EAKEK,EAAY,CAAC,CAAE,SAAAL,EAAU,UAAAC,EAAW,GAAGC,KAC5CC,EAAAA,IAAC,MAAA,CACA,UAAWC,EACV,qFAEA,wGAEA,gIACAH,CAAA,EAEA,GAAGC,EAEH,SAAAF,CAAA,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"bento-grid.stories.js","sources":["../../../src/blocks/bento-grid/bento-grid.stories.tsx"],"sourcesContent":["// organize-imports-ignore\nimport React from 'react'\nimport type { Meta, StoryObj } from '@storybook/react'\nimport { BentoCard, BentoGrid } from './bento-grid'\n\nconst meta: Meta<typeof BentoGrid> = {\n\tcomponent: BentoGrid,\n}\n\nexport default meta\ntype Story = StoryObj<typeof BentoGrid>\n\nconst features = [\n\t{\n\t\tclassName: 'lg:row-start-1 lg:row-end-4 lg:col-start-2 lg:col-end-3 bg-red-200',\n\t\telement: <>Item 1</>,\n\t},\n\t{\n\t\telement: <>Item 2</>,\n\t\tclassName: 'lg:col-start-1 lg:col-end-2 lg:row-start-1 lg:row-end-3 bg-blue-200',\n\t},\n\t{\n\t\telement: <>Item 3</>,\n\t\tclassName: 'lg:col-start-1 lg:col-end-2 lg:row-start-3 lg:row-end-4 bg-green-200',\n\t},\n\t{\n\t\telement: <>Item 4</>,\n\t\tclassName: 'lg:col-start-3 lg:col-end-3 lg:row-start-1 lg:row-end-2 bg-purle-200',\n\t},\n\t{\n\t\telement: <>Item 5</>,\n\t\tclassName: 'lg:col-start-3 lg:col-end-3 lg:row-start-2 lg:row-end-4 bg-yellow-200',\n\t},\n\t{\n\t\telement: <>Item 6</>,\n\t\tclassName: 'lg:col-start-1 lg:col-end-3 lg:row-start-4 lg:row-end-6 bg-orange-200',\n\t},\n\t{\n\t\telement: <>Item 7</>,\n\t\tclassName: 'lg:col-start-3 lg:col-end-4 lg:row-start-4 lg:row-end-5 bg-teal-200',\n\t},\n\t{\n\t\telement: <>Item 8</>,\n\t\tclassName: 'lg:col-start-3 lg:col-end-4 lg:row-start-5 lg:row-end-6 bg-emerald-200',\n\t},\n]\n\nconst Template = () => (\n\t<BentoGrid className=\"lg:grid-rows-5\">\n\t\t{features.map(({ className, element }, index) => (\n\t\t\t<BentoCard\n\t\t\t\tkey={index}\n\t\t\t\tclassName={`${className} p-4 hover:scale-105 transition-transform hover:z-50`}\n\t\t\t>\n\t\t\t\t{element}\n\t\t\t</BentoCard>\n\t\t))}\n\t</BentoGrid>\n)\n\nexport const Default: Story = {\n\trender: Template.bind({}),\n\targs: {},\n}\n"],"names":["features","Template","jsx","BentoGrid","className","element","index","BentoCard"],"mappings":"0LAYA,MAAMA,EAAW,CAChB,CACC,UAAW,qEACX,0BAAW,SAAM,QAAA,CAAA,CAClB,EACA,CACC,0BAAW,SAAM,QAAA,CAAA,EACjB,UAAW,qEACZ,EACA,CACC,0BAAW,SAAM,QAAA,CAAA,EACjB,UAAW,sEACZ,EACA,CACC,0BAAW,SAAM,QAAA,CAAA,EACjB,UAAW,sEACZ,EACA,CACC,0BAAW,SAAM,QAAA,CAAA,EACjB,UAAW,uEACZ,EACA,CACC,0BAAW,SAAM,QAAA,CAAA,EACjB,UAAW,uEACZ,EACA,CACC,0BAAW,SAAM,QAAA,CAAA,EACjB,UAAW,qEACZ,EACA,CACC,0BAAW,SAAM,QAAA,CAAA,EACjB,UAAW,wEAAA,CAEb,EAEMC,EAAW,IACfC,EAAA,IAAAC,EAAA,CAAU,UAAU,iBACnB,SAASH,EAAA,IAAI,CAAC,CAAE,UAAAI,EAAW,QAAAC,GAAWC,IACtCJ,EAAA,IAACK,EAAA,CAEA,UAAW,GAAGH,CAAS,uDAEtB,SAAAC,CAAA,EAHIC,CAIN,CACA,EACF,EAIQL,EAAS,KAAK,EAAE"}
1
+ {"version":3,"file":"bento-grid.stories.js","sources":["../../../src/blocks/bento-grid/bento-grid.stories.tsx"],"sourcesContent":["// organize-imports-ignore\nimport React from 'react'\nimport type { Meta, StoryObj } from '@storybook/react'\nimport { BentoCard, BentoGrid } from './bento-grid'\n\nconst meta: Meta<typeof BentoGrid> = {\n\tcomponent: BentoGrid,\n}\n\nexport default meta\ntype Story = StoryObj<typeof BentoGrid>\n\nconst features = [\n\t{\n\t\tclassName: 'lg:row-start-1 lg:row-end-4 lg:col-start-2 lg:col-end-3 bg-red-200',\n\t\telement: <>Item 1</>,\n\t},\n\t{\n\t\telement: <>Item 2</>,\n\t\tclassName: 'lg:col-start-1 lg:col-end-2 lg:row-start-1 lg:row-end-3 bg-blue-200',\n\t},\n\t{\n\t\telement: <>Item 3</>,\n\t\tclassName: 'lg:col-start-1 lg:col-end-2 lg:row-start-3 lg:row-end-4 bg-green-200',\n\t},\n\t{\n\t\telement: <>Item 4</>,\n\t\tclassName: 'lg:col-start-3 lg:col-end-3 lg:row-start-1 lg:row-end-2 bg-purle-200',\n\t},\n\t{\n\t\telement: <>Item 5</>,\n\t\tclassName: 'lg:col-start-3 lg:col-end-3 lg:row-start-2 lg:row-end-4 bg-yellow-200',\n\t},\n\t{\n\t\telement: <>Item 6</>,\n\t\tclassName: 'lg:col-start-1 lg:col-end-3 lg:row-start-4 lg:row-end-6 bg-orange-200',\n\t},\n\t{\n\t\telement: <>Item 7</>,\n\t\tclassName: 'lg:col-start-3 lg:col-end-4 lg:row-start-4 lg:row-end-5 bg-teal-200',\n\t},\n\t{\n\t\telement: <>Item 8</>,\n\t\tclassName: 'lg:col-start-3 lg:col-end-4 lg:row-start-5 lg:row-end-6 bg-emerald-200',\n\t},\n]\n\nconst Template = () => (\n\t<BentoGrid className=\"lg:grid-rows-5\">\n\t\t{features.map(({ className, element }, index) => (\n\t\t\t<BentoCard\n\t\t\t\tkey={index}\n\t\t\t\tclassName={`${className} p-4 hover:scale-105 transition-transform hover:z-50`}\n\t\t\t>\n\t\t\t\t{element}\n\t\t\t</BentoCard>\n\t\t))}\n\t</BentoGrid>\n)\n\nexport const Default: Story = {\n\trender: Template.bind({}),\n\targs: {},\n}\n"],"names":["features","Template","jsx","BentoGrid","className","element","index","BentoCard"],"mappings":"0LAYA,MAAMA,EAAW,CAChB,CACC,UAAW,qEACX,0BAAW,SAAA,QAAA,CAAM,CAAA,EAElB,CACC,0BAAW,SAAA,QAAA,CAAM,EACjB,UAAW,qEAAA,EAEZ,CACC,0BAAW,SAAA,QAAA,CAAM,EACjB,UAAW,sEAAA,EAEZ,CACC,0BAAW,SAAA,QAAA,CAAM,EACjB,UAAW,sEAAA,EAEZ,CACC,0BAAW,SAAA,QAAA,CAAM,EACjB,UAAW,uEAAA,EAEZ,CACC,0BAAW,SAAA,QAAA,CAAM,EACjB,UAAW,uEAAA,EAEZ,CACC,0BAAW,SAAA,QAAA,CAAM,EACjB,UAAW,qEAAA,EAEZ,CACC,0BAAW,SAAA,QAAA,CAAM,EACjB,UAAW,wEAAA,CAEb,EAEMC,EAAW,IAChBC,EAAAA,IAACC,EAAA,CAAU,UAAU,iBACnB,SAAAH,EAAS,IAAI,CAAC,CAAE,UAAAI,EAAW,QAAAC,CAAA,EAAWC,IACtCJ,EAAAA,IAACK,EAAA,CAEA,UAAW,GAAGH,CAAS,uDAEtB,SAAAC,CAAA,EAHIC,CAIN,CACA,EACF,EAIQL,EAAS,KAAK,EAAE"}
@@ -1,4 +1,4 @@
1
- import { DataTableColumn, DataTableFilter, SortState } from '../types/data-table';
1
+ import type { DataTableColumn, DataTableFilter, SortState } from '../types/data-table';
2
2
  interface ActiveFiltersProps<T> {
3
3
  searchTerm: string;
4
4
  activeFilters: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"active-filters.js","sources":["../../../../src/blocks/data-table/components/active-filters.tsx"],"sourcesContent":["'use client'\n\nimport { Badge } from '@/components/badge'\nimport { X } from 'lucide-react'\nimport type { DataTableColumn, DataTableFilter, SortState } from '../types/data-table'\n\ninterface ActiveFiltersProps<T> {\n\tsearchTerm: string\n\tactiveFilters: Record<string, string>\n\tsortState: SortState\n\tfilters: DataTableFilter<T>[]\n\tcolumns: DataTableColumn<T>[]\n\tonClearSearch: () => void\n\tonClearFilter: (field: string) => void\n\tonClearSort: () => void\n}\n\nexport function ActiveFilters<T>({\n\tsearchTerm,\n\tactiveFilters,\n\tsortState,\n\tfilters,\n\tcolumns,\n\tonClearSearch,\n\tonClearFilter,\n\tonClearSort,\n}: ActiveFiltersProps<T>) {\n\tconst hasActiveFilters =\n\t\tObject.values(activeFilters).filter((value) => value && value !== 'all').length > 0 ||\n\t\tsearchTerm.trim().length > 0 ||\n\t\tsortState.field !== null\n\n\tif (!hasActiveFilters) return null\n\n\treturn (\n\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t{searchTerm.trim() && (\n\t\t\t\t<Badge variant=\"secondary\" className=\"gap-1\">\n\t\t\t\t\tSearch: {searchTerm}\n\t\t\t\t\t<X\n\t\t\t\t\t\tclassName=\"h-3 w-3 cursor-pointer hover:text-destructive\"\n\t\t\t\t\t\tonClick={onClearSearch}\n\t\t\t\t\t/>\n\t\t\t\t</Badge>\n\t\t\t)}\n\t\t\t{Object.entries(activeFilters).map(([field, value]) => {\n\t\t\t\tif (!value || value === 'all') return null\n\t\t\t\tconst filter = filters.find((f) => String(f.field) === field)\n\t\t\t\tconst option = filter?.options.find((o) => o.value === value)\n\t\t\t\treturn (\n\t\t\t\t\t<Badge key={field} variant=\"secondary\" className=\"gap-1\">\n\t\t\t\t\t\t{filter?.label}: {option?.label || value}\n\t\t\t\t\t\t<X\n\t\t\t\t\t\t\tclassName=\"h-3 w-3 cursor-pointer hover:text-destructive\"\n\t\t\t\t\t\t\tonClick={() => onClearFilter(field)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Badge>\n\t\t\t\t)\n\t\t\t})}\n\t\t\t{sortState.field && (\n\t\t\t\t<Badge variant=\"secondary\" className=\"gap-1\">\n\t\t\t\t\tSort:{' '}\n\t\t\t\t\t{columns.find((col) => String(col.key) === sortState.field)?.title ||\n\t\t\t\t\t\tsortState.field}{' '}\n\t\t\t\t\t{sortState.direction === 'asc' ? '↑' : '↓'}\n\t\t\t\t\t<X\n\t\t\t\t\t\tclassName=\"h-3 w-3 cursor-pointer hover:text-destructive\"\n\t\t\t\t\t\tonClick={onClearSort}\n\t\t\t\t\t/>\n\t\t\t\t</Badge>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":["ActiveFilters","searchTerm","activeFilters","sortState","filters","columns","onClearSearch","onClearFilter","onClearSort","value","jsxs","Badge","jsx","X","field","filter","f","option","o","_a","col"],"mappings":"8QAiBO,SAASA,EAAiB,CAChC,WAAAC,EACA,cAAAC,EACA,UAAAC,EACA,QAAAC,EACA,QAAAC,EACA,cAAAC,EACA,cAAAC,EACA,YAAAC,CACD,EAA0B,OAMrB,OAJH,OAAO,OAAON,CAAa,EAAE,OAAQO,GAAUA,GAASA,IAAU,KAAK,EAAE,OAAS,GAClFR,EAAW,KAAA,EAAO,OAAS,GAC3BE,EAAU,QAAU,KAKpBO,EAAA,KAAC,MAAI,CAAA,UAAU,uBACb,SAAA,CAAAT,EAAW,QACXS,EAAAA,KAACC,GAAM,QAAQ,YAAY,UAAU,QAAQ,SAAA,CAAA,WACnCV,EACTW,EAAA,IAACC,EAAA,CACA,UAAU,gDACV,QAASP,CAAA,CAAA,CACV,EACD,EAEA,OAAO,QAAQJ,CAAa,EAAE,IAAI,CAAC,CAACY,EAAOL,CAAK,IAAM,CACtD,GAAI,CAACA,GAASA,IAAU,MAAc,OAAA,KAChC,MAAAM,EAASX,EAAQ,KAAMY,GAAM,OAAOA,EAAE,KAAK,IAAMF,CAAK,EACtDG,EAASF,GAAA,YAAAA,EAAQ,QAAQ,KAAMG,GAAMA,EAAE,QAAUT,GACvD,OACEC,EAAAA,KAAAC,EAAA,CAAkB,QAAQ,YAAY,UAAU,QAC/C,SAAA,CAAQI,GAAA,YAAAA,EAAA,MAAM,MAAGE,GAAA,YAAAA,EAAQ,QAASR,EACnCG,EAAA,IAACC,EAAA,CACA,UAAU,gDACV,QAAS,IAAMN,EAAcO,CAAK,CAAA,CAAA,CACnC,CAAA,EALWA,CAMZ,CAAA,CAED,EACAX,EAAU,OACVO,EAAA,KAACC,GAAM,QAAQ,YAAY,UAAU,QAAQ,SAAA,CAAA,QACtC,MACLQ,EAAAd,EAAQ,KAAMe,GAAQ,OAAOA,EAAI,GAAG,IAAMjB,EAAU,KAAK,IAAzD,YAAAgB,EAA4D,QAC5DhB,EAAU,MAAO,IACjBA,EAAU,YAAc,MAAQ,IAAM,IACvCS,EAAA,IAACC,EAAA,CACA,UAAU,gDACV,QAASL,CAAA,CAAA,CACV,CACD,CAAA,CAAA,EAEF,EAvC6B,IAyC/B"}
1
+ {"version":3,"file":"active-filters.js","sources":["../../../../src/blocks/data-table/components/active-filters.tsx"],"sourcesContent":["'use client'\n\nimport { Badge } from '@/components/badge'\nimport { X } from 'lucide-react'\nimport type { DataTableColumn, DataTableFilter, SortState } from '../types/data-table'\n\ninterface ActiveFiltersProps<T> {\n\tsearchTerm: string\n\tactiveFilters: Record<string, string>\n\tsortState: SortState\n\tfilters: DataTableFilter<T>[]\n\tcolumns: DataTableColumn<T>[]\n\tonClearSearch: () => void\n\tonClearFilter: (field: string) => void\n\tonClearSort: () => void\n}\n\nexport function ActiveFilters<T>({\n\tsearchTerm,\n\tactiveFilters,\n\tsortState,\n\tfilters,\n\tcolumns,\n\tonClearSearch,\n\tonClearFilter,\n\tonClearSort,\n}: ActiveFiltersProps<T>) {\n\tconst hasActiveFilters =\n\t\tObject.values(activeFilters).filter((value) => value && value !== 'all').length > 0 ||\n\t\tsearchTerm.trim().length > 0 ||\n\t\tsortState.field !== null\n\n\tif (!hasActiveFilters) return null\n\n\treturn (\n\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t{searchTerm.trim() && (\n\t\t\t\t<Badge variant=\"secondary\" className=\"gap-1\">\n\t\t\t\t\tSearch: {searchTerm}\n\t\t\t\t\t<X\n\t\t\t\t\t\tclassName=\"h-3 w-3 cursor-pointer hover:text-destructive\"\n\t\t\t\t\t\tonClick={onClearSearch}\n\t\t\t\t\t/>\n\t\t\t\t</Badge>\n\t\t\t)}\n\t\t\t{Object.entries(activeFilters).map(([field, value]) => {\n\t\t\t\tif (!value || value === 'all') return null\n\t\t\t\tconst filter = filters.find((f) => String(f.field) === field)\n\t\t\t\tconst option = filter?.options.find((o) => o.value === value)\n\t\t\t\treturn (\n\t\t\t\t\t<Badge key={field} variant=\"secondary\" className=\"gap-1\">\n\t\t\t\t\t\t{filter?.label}: {option?.label || value}\n\t\t\t\t\t\t<X\n\t\t\t\t\t\t\tclassName=\"h-3 w-3 cursor-pointer hover:text-destructive\"\n\t\t\t\t\t\t\tonClick={() => onClearFilter(field)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Badge>\n\t\t\t\t)\n\t\t\t})}\n\t\t\t{sortState.field && (\n\t\t\t\t<Badge variant=\"secondary\" className=\"gap-1\">\n\t\t\t\t\tSort:{' '}\n\t\t\t\t\t{columns.find((col) => String(col.key) === sortState.field)?.title ||\n\t\t\t\t\t\tsortState.field}{' '}\n\t\t\t\t\t{sortState.direction === 'asc' ? '↑' : '↓'}\n\t\t\t\t\t<X\n\t\t\t\t\t\tclassName=\"h-3 w-3 cursor-pointer hover:text-destructive\"\n\t\t\t\t\t\tonClick={onClearSort}\n\t\t\t\t\t/>\n\t\t\t\t</Badge>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":["ActiveFilters","searchTerm","activeFilters","sortState","filters","columns","onClearSearch","onClearFilter","onClearSort","value","jsxs","Badge","jsx","X","field","filter","f","option","o","_a","col"],"mappings":"8QAiBO,SAASA,EAAiB,CAChC,WAAAC,EACA,cAAAC,EACA,UAAAC,EACA,QAAAC,EACA,QAAAC,EACA,cAAAC,EACA,cAAAC,EACA,YAAAC,CACD,EAA0B,OAMzB,OAJC,OAAO,OAAON,CAAa,EAAE,OAAQO,GAAUA,GAASA,IAAU,KAAK,EAAE,OAAS,GAClFR,EAAW,KAAA,EAAO,OAAS,GAC3BE,EAAU,QAAU,KAKpBO,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACb,SAAA,CAAAT,EAAW,QACXS,EAAAA,KAACC,GAAM,QAAQ,YAAY,UAAU,QAAQ,SAAA,CAAA,WACnCV,EACTW,EAAAA,IAACC,EAAA,CACA,UAAU,gDACV,QAASP,CAAA,CAAA,CACV,EACD,EAEA,OAAO,QAAQJ,CAAa,EAAE,IAAI,CAAC,CAACY,EAAOL,CAAK,IAAM,CACtD,GAAI,CAACA,GAASA,IAAU,MAAO,OAAO,KACtC,MAAMM,EAASX,EAAQ,KAAMY,GAAM,OAAOA,EAAE,KAAK,IAAMF,CAAK,EACtDG,EAASF,GAAA,YAAAA,EAAQ,QAAQ,KAAMG,GAAMA,EAAE,QAAUT,GACvD,OACCC,EAAAA,KAACC,EAAA,CAAkB,QAAQ,YAAY,UAAU,QAC/C,SAAA,CAAAI,GAAA,YAAAA,EAAQ,MAAM,MAAGE,GAAA,YAAAA,EAAQ,QAASR,EACnCG,EAAAA,IAACC,EAAA,CACA,UAAU,gDACV,QAAS,IAAMN,EAAcO,CAAK,CAAA,CAAA,CACnC,CAAA,EALWA,CAMZ,CAAA,CAED,EACAX,EAAU,OACVO,EAAAA,KAACC,GAAM,QAAQ,YAAY,UAAU,QAAQ,SAAA,CAAA,QACtC,MACLQ,EAAAd,EAAQ,KAAMe,GAAQ,OAAOA,EAAI,GAAG,IAAMjB,EAAU,KAAK,IAAzD,YAAAgB,EAA4D,QAC5DhB,EAAU,MAAO,IACjBA,EAAU,YAAc,MAAQ,IAAM,IACvCS,EAAAA,IAACC,EAAA,CACA,UAAU,gDACV,QAASL,CAAA,CAAA,CACV,CAAA,CACD,CAAA,EAEF,EAvC6B,IAyC/B"}
@@ -1,4 +1,4 @@
1
- import { DataTableColumn } from '../types/data-table';
1
+ import type { DataTableColumn } from '../types/data-table';
2
2
  interface ColumnVisibilityDropdownProps<T> {
3
3
  columns: DataTableColumn<T>[];
4
4
  onToggleVisibility: (key: string, visible: boolean) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"column-visibility-dropdown.js","sources":["../../../../src/blocks/data-table/components/column-visibility-dropdown.tsx"],"sourcesContent":["'use client'\n\nimport { Button } from '@/components/button'\nimport {\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuLabel,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '@/components/dropdown-menu'\nimport { SlidersHorizontal } from 'lucide-react'\nimport type { DataTableColumn } from '../types/data-table'\n\ninterface ColumnVisibilityDropdownProps<T> {\n\tcolumns: DataTableColumn<T>[]\n\tonToggleVisibility: (key: string, visible: boolean) => void\n\tonReset: () => void\n}\n\nexport function ColumnVisibilityDropdown<T>({\n\tcolumns,\n\tonToggleVisibility,\n\tonReset,\n}: ColumnVisibilityDropdownProps<T>) {\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t<Button variant=\"outline\" className=\"ml-auto\">\n\t\t\t\t\t<SlidersHorizontal className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\tColumns\n\t\t\t\t</Button>\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"end\" className=\"w-48\">\n\t\t\t\t<DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\tkey={String(column.key)}\n\t\t\t\t\t\tchecked={!column.hidden}\n\t\t\t\t\t\tonCheckedChange={(checked) => onToggleVisibility(String(column.key), checked)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{column.title}\n\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t))}\n\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclassName=\"w-full justify-start\"\n\t\t\t\t\tonClick={onReset}\n\t\t\t\t>\n\t\t\t\t\tReset columns\n\t\t\t\t</Button>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t)\n}\n"],"names":["ColumnVisibilityDropdown","columns","onToggleVisibility","onReset","DropdownMenu","jsx","DropdownMenuTrigger","jsxs","Button","SlidersHorizontal","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","column","DropdownMenuCheckboxItem","checked"],"mappings":"8iBAoBO,SAASA,EAA4B,CAC3C,QAAAC,EACA,mBAAAC,EACA,QAAAC,CACD,EAAqC,CACpC,cACEC,EACA,CAAA,SAAA,CAACC,EAAAA,IAAAC,EAAA,CAAoB,QAAO,GAC3B,SAAAC,EAAAA,KAACC,GAAO,QAAQ,UAAU,UAAU,UACnC,SAAA,CAACH,EAAAA,IAAAI,EAAA,CAAkB,UAAU,cAAe,CAAA,EAAE,SAAA,CAAA,CAE/C,CACD,CAAA,EACCF,EAAA,KAAAG,EAAA,CAAoB,MAAM,MAAM,UAAU,OAC1C,SAAA,CAAAL,EAAAA,IAACM,GAAkB,SAAc,gBAAA,CAAA,QAChCC,EAAsB,EAAA,EACtBX,EAAQ,IAAKY,GACbR,EAAA,IAACS,EAAA,CAEA,QAAS,CAACD,EAAO,OACjB,gBAAkBE,GAAYb,EAAmB,OAAOW,EAAO,GAAG,EAAGE,CAAO,EAE3E,SAAOF,EAAA,KAAA,EAJH,OAAOA,EAAO,GAAG,CAAA,CAMvB,QACAD,EAAsB,EAAA,EACvBP,EAAA,IAACG,EAAA,CACA,QAAQ,QACR,KAAK,KACL,UAAU,uBACV,QAASL,EACT,SAAA,eAAA,CAAA,CAED,CACD,CAAA,CAAA,EACD,CAEF"}
1
+ {"version":3,"file":"column-visibility-dropdown.js","sources":["../../../../src/blocks/data-table/components/column-visibility-dropdown.tsx"],"sourcesContent":["'use client'\n\nimport { Button } from '@/components/button'\nimport {\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuLabel,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from '@/components/dropdown-menu'\nimport { SlidersHorizontal } from 'lucide-react'\nimport type { DataTableColumn } from '../types/data-table'\n\ninterface ColumnVisibilityDropdownProps<T> {\n\tcolumns: DataTableColumn<T>[]\n\tonToggleVisibility: (key: string, visible: boolean) => void\n\tonReset: () => void\n}\n\nexport function ColumnVisibilityDropdown<T>({\n\tcolumns,\n\tonToggleVisibility,\n\tonReset,\n}: ColumnVisibilityDropdownProps<T>) {\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t<Button variant=\"outline\" className=\"ml-auto\">\n\t\t\t\t\t<SlidersHorizontal className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\tColumns\n\t\t\t\t</Button>\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"end\" className=\"w-48\">\n\t\t\t\t<DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\tkey={String(column.key)}\n\t\t\t\t\t\tchecked={!column.hidden}\n\t\t\t\t\t\tonCheckedChange={(checked) => onToggleVisibility(String(column.key), checked)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{column.title}\n\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t))}\n\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclassName=\"w-full justify-start\"\n\t\t\t\t\tonClick={onReset}\n\t\t\t\t>\n\t\t\t\t\tReset columns\n\t\t\t\t</Button>\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t)\n}\n"],"names":["ColumnVisibilityDropdown","columns","onToggleVisibility","onReset","DropdownMenu","jsx","DropdownMenuTrigger","jsxs","Button","SlidersHorizontal","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","column","DropdownMenuCheckboxItem","checked"],"mappings":"8iBAoBO,SAASA,EAA4B,CAC3C,QAAAC,EACA,mBAAAC,EACA,QAAAC,CACD,EAAqC,CACpC,cACEC,EAAA,CACA,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAoB,QAAO,GAC3B,SAAAC,EAAAA,KAACC,GAAO,QAAQ,UAAU,UAAU,UACnC,SAAA,CAAAH,EAAAA,IAACI,EAAA,CAAkB,UAAU,cAAA,CAAe,EAAE,SAAA,CAAA,CAE/C,CAAA,CACD,EACAF,EAAAA,KAACG,EAAA,CAAoB,MAAM,MAAM,UAAU,OAC1C,SAAA,CAAAL,EAAAA,IAACM,GAAkB,SAAA,gBAAA,CAAc,QAChCC,EAAA,EAAsB,EACtBX,EAAQ,IAAKY,GACbR,EAAAA,IAACS,EAAA,CAEA,QAAS,CAACD,EAAO,OACjB,gBAAkBE,GAAYb,EAAmB,OAAOW,EAAO,GAAG,EAAGE,CAAO,EAE3E,SAAAF,EAAO,KAAA,EAJH,OAAOA,EAAO,GAAG,CAAA,CAMvB,QACAD,EAAA,EAAsB,EACvBP,EAAAA,IAACG,EAAA,CACA,QAAQ,QACR,KAAK,KACL,UAAU,uBACV,QAASL,EACT,SAAA,eAAA,CAAA,CAED,CAAA,CACD,CAAA,EACD,CAEF"}
@@ -1,4 +1,4 @@
1
- import { DataTableFilter } from '../types/data-table';
1
+ import type { DataTableFilter } from '../types/data-table';
2
2
  interface FilterDropdownProps<T> {
3
3
  filter: DataTableFilter<T>;
4
4
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"filter-dropdown.js","sources":["../../../../src/blocks/data-table/components/filter-dropdown.tsx"],"sourcesContent":["'use client'\n\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from '@/components/select'\nimport { Filter } from 'lucide-react'\nimport type { DataTableFilter } from '../types/data-table'\n\ninterface FilterDropdownProps<T> {\n\tfilter: DataTableFilter<T>\n\tvalue: string\n\tonChange: (value: string) => void\n}\n\nexport function FilterDropdown<T>({ filter, value, onChange }: FilterDropdownProps<T>) {\n\treturn (\n\t\t<Select value={value || 'all'} onValueChange={onChange}>\n\t\t\t<SelectTrigger className=\"w-40\">\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Filter className=\"h-4 w-4\" />\n\t\t\t\t\t<SelectValue placeholder={filter.label} />\n\t\t\t\t</div>\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t<SelectItem value=\"all\">All {filter.label}</SelectItem>\n\t\t\t\t{filter.options.map((option) => (\n\t\t\t\t\t<SelectItem key={option.value} value={option.value}>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t))}\n\t\t\t</SelectContent>\n\t\t</Select>\n\t)\n}\n"],"names":["FilterDropdown","filter","value","onChange","Select","jsx","SelectTrigger","jsxs","Filter","SelectValue","SelectContent","SelectItem","option"],"mappings":"6TAkBO,SAASA,EAAkB,CAAE,OAAAC,EAAQ,MAAAC,EAAO,SAAAC,GAAoC,CACtF,cACEC,EAAO,CAAA,MAAOF,GAAS,MAAO,cAAeC,EAC7C,SAAA,CAAAE,EAAAA,IAACC,GAAc,UAAU,OACxB,SAACC,EAAA,KAAA,MAAA,CAAI,UAAU,0BACd,SAAA,CAACF,EAAAA,IAAAG,EAAA,CAAO,UAAU,SAAU,CAAA,EAC3BH,EAAAA,IAAAI,EAAA,CAAY,YAAaR,EAAO,KAAO,CAAA,CAAA,CAAA,CACzC,CACD,CAAA,SACCS,EACA,CAAA,SAAA,CAACH,EAAAA,KAAAI,EAAA,CAAW,MAAM,MAAM,SAAA,CAAA,OAAKV,EAAO,KAAA,EAAM,EACzCA,EAAO,QAAQ,IAAKW,GACnBP,EAAAA,IAAAM,EAAA,CAA8B,MAAOC,EAAO,MAC3C,SAAAA,EAAO,KADQ,EAAAA,EAAO,KAExB,CACA,CAAA,CACF,CAAA,CAAA,EACD,CAEF"}
1
+ {"version":3,"file":"filter-dropdown.js","sources":["../../../../src/blocks/data-table/components/filter-dropdown.tsx"],"sourcesContent":["'use client'\n\nimport {\n\tSelect,\n\tSelectContent,\n\tSelectItem,\n\tSelectTrigger,\n\tSelectValue,\n} from '@/components/select'\nimport { Filter } from 'lucide-react'\nimport type { DataTableFilter } from '../types/data-table'\n\ninterface FilterDropdownProps<T> {\n\tfilter: DataTableFilter<T>\n\tvalue: string\n\tonChange: (value: string) => void\n}\n\nexport function FilterDropdown<T>({ filter, value, onChange }: FilterDropdownProps<T>) {\n\treturn (\n\t\t<Select value={value || 'all'} onValueChange={onChange}>\n\t\t\t<SelectTrigger className=\"w-40\">\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Filter className=\"h-4 w-4\" />\n\t\t\t\t\t<SelectValue placeholder={filter.label} />\n\t\t\t\t</div>\n\t\t\t</SelectTrigger>\n\t\t\t<SelectContent>\n\t\t\t\t<SelectItem value=\"all\">All {filter.label}</SelectItem>\n\t\t\t\t{filter.options.map((option) => (\n\t\t\t\t\t<SelectItem key={option.value} value={option.value}>\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</SelectItem>\n\t\t\t\t))}\n\t\t\t</SelectContent>\n\t\t</Select>\n\t)\n}\n"],"names":["FilterDropdown","filter","value","onChange","Select","jsx","SelectTrigger","jsxs","Filter","SelectValue","SelectContent","SelectItem","option"],"mappings":"6TAkBO,SAASA,EAAkB,CAAE,OAAAC,EAAQ,MAAAC,EAAO,SAAAC,GAAoC,CACtF,cACEC,EAAA,CAAO,MAAOF,GAAS,MAAO,cAAeC,EAC7C,SAAA,CAAAE,EAAAA,IAACC,GAAc,UAAU,OACxB,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAF,EAAAA,IAACG,EAAA,CAAO,UAAU,SAAA,CAAU,EAC5BH,EAAAA,IAACI,EAAA,CAAY,YAAaR,EAAO,KAAA,CAAO,CAAA,CAAA,CACzC,CAAA,CACD,SACCS,EAAA,CACA,SAAA,CAAAH,EAAAA,KAACI,EAAA,CAAW,MAAM,MAAM,SAAA,CAAA,OAAKV,EAAO,KAAA,EAAM,EACzCA,EAAO,QAAQ,IAAKW,GACpBP,EAAAA,IAACM,EAAA,CAA8B,MAAOC,EAAO,MAC3C,SAAAA,EAAO,KAAA,EADQA,EAAO,KAExB,CACA,CAAA,CAAA,CACF,CAAA,EACD,CAEF"}
@@ -1 +1 @@
1
- {"version":3,"file":"search-input.js","sources":["../../../../src/blocks/data-table/components/search-input.tsx"],"sourcesContent":["'use client'\n\nimport { Input } from '@/components/input'\nimport { Search } from 'lucide-react'\n\ninterface SearchInputProps {\n\tvalue: string\n\tonChange: (value: string) => void\n\tplaceholder?: string\n}\n\nexport function SearchInput({\n\tvalue,\n\tonChange,\n\tplaceholder = 'Search...',\n}: SearchInputProps) {\n\treturn (\n\t\t<div className=\"relative flex-1 max-w-sm\">\n\t\t\t<Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4\" />\n\t\t\t<Input\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\tclassName=\"pl-10\"\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["SearchInput","value","onChange","placeholder","jsxs","jsx","Search","Input","e"],"mappings":"6QAWO,SAASA,EAAY,CAC3B,MAAAC,EACA,SAAAC,EACA,YAAAC,EAAc,WACf,EAAqB,CAEnB,OAAAC,EAAA,KAAC,MAAI,CAAA,UAAU,2BACd,SAAA,CAACC,EAAAA,IAAAC,EAAA,CAAO,UAAU,kFAAmF,CAAA,EACrGD,EAAA,IAACE,EAAA,CACA,YAAAJ,EACA,MAAAF,EACA,SAAWO,GAAMN,EAASM,EAAE,OAAO,KAAK,EACxC,UAAU,OAAA,CAAA,CACX,EACD,CAEF"}
1
+ {"version":3,"file":"search-input.js","sources":["../../../../src/blocks/data-table/components/search-input.tsx"],"sourcesContent":["'use client'\n\nimport { Input } from '@/components/input'\nimport { Search } from 'lucide-react'\n\ninterface SearchInputProps {\n\tvalue: string\n\tonChange: (value: string) => void\n\tplaceholder?: string\n}\n\nexport function SearchInput({\n\tvalue,\n\tonChange,\n\tplaceholder = 'Search...',\n}: SearchInputProps) {\n\treturn (\n\t\t<div className=\"relative flex-1 max-w-sm\">\n\t\t\t<Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4\" />\n\t\t\t<Input\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\tclassName=\"pl-10\"\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["SearchInput","value","onChange","placeholder","jsxs","jsx","Search","Input","e"],"mappings":"6QAWO,SAASA,EAAY,CAC3B,MAAAC,EACA,SAAAC,EACA,YAAAC,EAAc,WACf,EAAqB,CACpB,OACCC,EAAAA,KAAC,MAAA,CAAI,UAAU,2BACd,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAO,UAAU,kFAAA,CAAmF,EACrGD,EAAAA,IAACE,EAAA,CACA,YAAAJ,EACA,MAAAF,EACA,SAAWO,GAAMN,EAASM,EAAE,OAAO,KAAK,EACxC,UAAU,OAAA,CAAA,CACX,EACD,CAEF"}
@@ -1 +1 @@
1
- {"version":3,"file":"selection-info.js","sources":["../../../../src/blocks/data-table/components/selection-info.tsx"],"sourcesContent":["'use client'\n\nimport { Button } from '@/components/button'\n\ninterface SelectionInfoProps {\n\tselectedCount: number\n\tonClearSelection: () => void\n}\n\nexport function SelectionInfo({ selectedCount, onClearSelection }: SelectionInfoProps) {\n\tif (selectedCount === 0) return null\n\n\treturn (\n\t\t<div className=\"bg-muted/50 p-2 rounded-md flex items-center justify-between\">\n\t\t\t<div className=\"text-sm\">\n\t\t\t\t<span className=\"font-medium\">{selectedCount}</span>{' '}\n\t\t\t\t{selectedCount === 1 ? 'row' : 'rows'} selected\n\t\t\t</div>\n\t\t\t<Button variant=\"ghost\" size=\"sm\" onClick={onClearSelection}>\n\t\t\t\tClear selection\n\t\t\t</Button>\n\t\t</div>\n\t)\n}\n"],"names":["SelectionInfo","selectedCount","onClearSelection","jsxs","jsx","Button"],"mappings":"6WASO,SAASA,EAAc,CAAE,cAAAC,EAAe,iBAAAC,GAAwC,CAClF,OAAAD,IAAkB,EAAU,KAG/BE,EAAA,KAAC,MAAI,CAAA,UAAU,+DACd,SAAA,CAACA,EAAAA,KAAA,MAAA,CAAI,UAAU,UACd,SAAA,CAACC,EAAA,IAAA,OAAA,CAAK,UAAU,cAAe,SAAcH,EAAA,EAAQ,IACpDA,IAAkB,EAAI,MAAQ,OAAO,WAAA,EACvC,EACAG,EAAAA,IAACC,GAAO,QAAQ,QAAQ,KAAK,KAAK,QAASH,EAAkB,SAE7D,iBAAA,CAAA,CAAA,EACD,CAEF"}
1
+ {"version":3,"file":"selection-info.js","sources":["../../../../src/blocks/data-table/components/selection-info.tsx"],"sourcesContent":["'use client'\n\nimport { Button } from '@/components/button'\n\ninterface SelectionInfoProps {\n\tselectedCount: number\n\tonClearSelection: () => void\n}\n\nexport function SelectionInfo({ selectedCount, onClearSelection }: SelectionInfoProps) {\n\tif (selectedCount === 0) return null\n\n\treturn (\n\t\t<div className=\"bg-muted/50 p-2 rounded-md flex items-center justify-between\">\n\t\t\t<div className=\"text-sm\">\n\t\t\t\t<span className=\"font-medium\">{selectedCount}</span>{' '}\n\t\t\t\t{selectedCount === 1 ? 'row' : 'rows'} selected\n\t\t\t</div>\n\t\t\t<Button variant=\"ghost\" size=\"sm\" onClick={onClearSelection}>\n\t\t\t\tClear selection\n\t\t\t</Button>\n\t\t</div>\n\t)\n}\n"],"names":["SelectionInfo","selectedCount","onClearSelection","jsxs","jsx","Button"],"mappings":"6WASO,SAASA,EAAc,CAAE,cAAAC,EAAe,iBAAAC,GAAwC,CACtF,OAAID,IAAkB,EAAU,KAG/BE,EAAAA,KAAC,MAAA,CAAI,UAAU,+DACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,UACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,cAAe,SAAAH,EAAc,EAAQ,IACpDA,IAAkB,EAAI,MAAQ,OAAO,WAAA,EACvC,EACAG,EAAAA,IAACC,GAAO,QAAQ,QAAQ,KAAK,KAAK,QAASH,EAAkB,SAAA,iBAAA,CAE7D,CAAA,EACD,CAEF"}
@@ -1,4 +1,4 @@
1
- import { DataTableColumn, SortState } from '../types/data-table';
1
+ import type { DataTableColumn, SortState } from '../types/data-table';
2
2
  interface TableHeaderProps<T> {
3
3
  columns: DataTableColumn<T>[];
4
4
  sortState: SortState;
@@ -1 +1 @@
1
- {"version":3,"file":"table-header.js","sources":["../../../../src/blocks/data-table/components/table-header.tsx"],"sourcesContent":["'use client'\n\nimport { Checkbox } from '@/components/checkbox'\nimport { TableHead, TableRow } from '@/components/table'\nimport { cn } from '@/lib/utils'\nimport { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react'\nimport type { DataTableColumn, SortState } from '../types/data-table'\n\ninterface TableHeaderProps<T> {\n\tcolumns: DataTableColumn<T>[]\n\tsortState: SortState\n\tallRowsSelected: boolean\n\thasData: boolean\n\tallowSelectAllRows: boolean\n\tonSort: (field: string) => void\n\tonToggleAllRows: (checked: boolean) => void\n}\n\nexport function TableHeader<T>({\n\tcolumns,\n\tsortState,\n\tallRowsSelected,\n\thasData,\n\tonSort,\n\tonToggleAllRows,\n\tallowSelectAllRows,\n}: TableHeaderProps<T>) {\n\tconst visibleColumns = columns.filter((col) => !col.hidden)\n\n\treturn (\n\t\t<TableRow>\n\t\t\t{/* Selection Checkbox */}\n\t\t\t{allowSelectAllRows && (\n\t\t\t\t<TableHead className=\"w-12\">\n\t\t\t\t\t<Checkbox\n\t\t\t\t\t\tchecked={allRowsSelected && hasData}\n\t\t\t\t\t\tonCheckedChange={onToggleAllRows}\n\t\t\t\t\t\taria-label=\"Select all rows\"\n\t\t\t\t\t/>\n\t\t\t\t</TableHead>\n\t\t\t)}\n\n\t\t\t{/* Column Headers */}\n\t\t\t{visibleColumns.map((column) => (\n\t\t\t\t<TableHead\n\t\t\t\t\tkey={String(column.key)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tcolumn.sortable ? 'cursor-pointer select-none' : '',\n\t\t\t\t\t\tcolumn.headerClassName,\n\t\t\t\t\t\tcolumn.align === 'right' ? 'text-right' : '',\n\t\t\t\t\t\tcolumn.align === 'center' ? 'text-center' : '',\n\t\t\t\t\t)}\n\t\t\t\t\tonClick={column.sortable ? () => onSort(String(column.key)) : undefined}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: column.width\n\t\t\t\t\t\t\t? typeof column.width === 'number'\n\t\t\t\t\t\t\t\t? `${column.width}px`\n\t\t\t\t\t\t\t\t: column.width\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t{column.title}\n\t\t\t\t\t\t{column.sortable && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{sortState.field === column.key ? (\n\t\t\t\t\t\t\t\t\tsortState.direction === 'asc' ? (\n\t\t\t\t\t\t\t\t\t\t<ArrowUp className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ArrowDown className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<ArrowUpDown className=\"h-4 w-4 opacity-50\" />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</TableHead>\n\t\t\t))}\n\t\t</TableRow>\n\t)\n}\n"],"names":["TableHeader","columns","sortState","allRowsSelected","hasData","onSort","onToggleAllRows","allowSelectAllRows","visibleColumns","col","TableRow","jsx","TableHead","Checkbox","column","cn","jsxs","Fragment","ArrowUp","ArrowDown","ArrowUpDown"],"mappings":"6YAkBO,SAASA,EAAe,CAC9B,QAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,QAAAC,EACA,OAAAC,EACA,gBAAAC,EACA,mBAAAC,CACD,EAAwB,CACvB,MAAMC,EAAiBP,EAAQ,OAAQQ,GAAQ,CAACA,EAAI,MAAM,EAE1D,cACEC,EAEC,CAAA,SAAA,CACAH,GAAAI,EAAA,IAACC,EAAU,CAAA,UAAU,OACpB,SAAAD,EAAA,IAACE,EAAA,CACA,QAASV,GAAmBC,EAC5B,gBAAiBE,EACjB,aAAW,iBAAA,CAAA,EAEb,EAIAE,EAAe,IAAKM,GACpBH,EAAA,IAACC,EAAA,CAEA,UAAWG,EACVD,EAAO,SAAW,6BAA+B,GACjDA,EAAO,gBACPA,EAAO,QAAU,QAAU,aAAe,GAC1CA,EAAO,QAAU,SAAW,cAAgB,EAC7C,EACA,QAASA,EAAO,SAAW,IAAMT,EAAO,OAAOS,EAAO,GAAG,CAAC,EAAI,OAC9D,MAAO,CACN,MAAOA,EAAO,MACX,OAAOA,EAAO,OAAU,SACvB,GAAGA,EAAO,KAAK,KACfA,EAAO,MACR,MACJ,EAEA,SAAAE,EAAA,KAAC,MAAI,CAAA,UAAU,0BACb,SAAA,CAAOF,EAAA,MACPA,EAAO,UACPH,EAAAA,IAAAM,EAAAA,SAAA,CACE,SAAUf,EAAA,QAAUY,EAAO,IAC3BZ,EAAU,YAAc,MACtBS,EAAAA,IAAAO,EAAA,CAAQ,UAAU,SAAU,CAAA,EAE5BP,EAAAA,IAAAQ,EAAA,CAAU,UAAU,SAAA,CAAU,EAG/BR,EAAA,IAAAS,EAAA,CAAY,UAAU,oBAAqB,CAAA,CAE9C,CAAA,CAAA,CAEF,CAAA,CAAA,EA/BK,OAAON,EAAO,GAAG,CAiCvB,CAAA,CAAA,EACF,CAEF"}
1
+ {"version":3,"file":"table-header.js","sources":["../../../../src/blocks/data-table/components/table-header.tsx"],"sourcesContent":["'use client'\n\nimport { Checkbox } from '@/components/checkbox'\nimport { TableHead, TableRow } from '@/components/table'\nimport { cn } from '@/lib/utils'\nimport { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react'\nimport type { DataTableColumn, SortState } from '../types/data-table'\n\ninterface TableHeaderProps<T> {\n\tcolumns: DataTableColumn<T>[]\n\tsortState: SortState\n\tallRowsSelected: boolean\n\thasData: boolean\n\tallowSelectAllRows: boolean\n\tonSort: (field: string) => void\n\tonToggleAllRows: (checked: boolean) => void\n}\n\nexport function TableHeader<T>({\n\tcolumns,\n\tsortState,\n\tallRowsSelected,\n\thasData,\n\tonSort,\n\tonToggleAllRows,\n\tallowSelectAllRows,\n}: TableHeaderProps<T>) {\n\tconst visibleColumns = columns.filter((col) => !col.hidden)\n\n\treturn (\n\t\t<TableRow>\n\t\t\t{/* Selection Checkbox */}\n\t\t\t{allowSelectAllRows && (\n\t\t\t\t<TableHead className=\"w-12\">\n\t\t\t\t\t<Checkbox\n\t\t\t\t\t\tchecked={allRowsSelected && hasData}\n\t\t\t\t\t\tonCheckedChange={onToggleAllRows}\n\t\t\t\t\t\taria-label=\"Select all rows\"\n\t\t\t\t\t/>\n\t\t\t\t</TableHead>\n\t\t\t)}\n\n\t\t\t{/* Column Headers */}\n\t\t\t{visibleColumns.map((column) => (\n\t\t\t\t<TableHead\n\t\t\t\t\tkey={String(column.key)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tcolumn.sortable ? 'cursor-pointer select-none' : '',\n\t\t\t\t\t\tcolumn.headerClassName,\n\t\t\t\t\t\tcolumn.align === 'right' ? 'text-right' : '',\n\t\t\t\t\t\tcolumn.align === 'center' ? 'text-center' : '',\n\t\t\t\t\t)}\n\t\t\t\t\tonClick={column.sortable ? () => onSort(String(column.key)) : undefined}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: column.width\n\t\t\t\t\t\t\t? typeof column.width === 'number'\n\t\t\t\t\t\t\t\t? `${column.width}px`\n\t\t\t\t\t\t\t\t: column.width\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t{column.title}\n\t\t\t\t\t\t{column.sortable && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{sortState.field === column.key ? (\n\t\t\t\t\t\t\t\t\tsortState.direction === 'asc' ? (\n\t\t\t\t\t\t\t\t\t\t<ArrowUp className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ArrowDown className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<ArrowUpDown className=\"h-4 w-4 opacity-50\" />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</TableHead>\n\t\t\t))}\n\t\t</TableRow>\n\t)\n}\n"],"names":["TableHeader","columns","sortState","allRowsSelected","hasData","onSort","onToggleAllRows","allowSelectAllRows","visibleColumns","col","TableRow","jsx","TableHead","Checkbox","column","cn","jsxs","Fragment","ArrowUp","ArrowDown","ArrowUpDown"],"mappings":"6YAkBO,SAASA,EAAe,CAC9B,QAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,QAAAC,EACA,OAAAC,EACA,gBAAAC,EACA,mBAAAC,CACD,EAAwB,CACvB,MAAMC,EAAiBP,EAAQ,OAAQQ,GAAQ,CAACA,EAAI,MAAM,EAE1D,cACEC,EAAA,CAEC,SAAA,CAAAH,GACAI,EAAAA,IAACC,EAAA,CAAU,UAAU,OACpB,SAAAD,EAAAA,IAACE,EAAA,CACA,QAASV,GAAmBC,EAC5B,gBAAiBE,EACjB,aAAW,iBAAA,CAAA,EAEb,EAIAE,EAAe,IAAKM,GACpBH,EAAAA,IAACC,EAAA,CAEA,UAAWG,EACVD,EAAO,SAAW,6BAA+B,GACjDA,EAAO,gBACPA,EAAO,QAAU,QAAU,aAAe,GAC1CA,EAAO,QAAU,SAAW,cAAgB,EAAA,EAE7C,QAASA,EAAO,SAAW,IAAMT,EAAO,OAAOS,EAAO,GAAG,CAAC,EAAI,OAC9D,MAAO,CACN,MAAOA,EAAO,MACX,OAAOA,EAAO,OAAU,SACvB,GAAGA,EAAO,KAAK,KACfA,EAAO,MACR,MAAA,EAGJ,SAAAE,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAF,EAAO,MACPA,EAAO,UACPH,EAAAA,IAAAM,EAAAA,SAAA,CACE,SAAAf,EAAU,QAAUY,EAAO,IAC3BZ,EAAU,YAAc,MACvBS,EAAAA,IAACO,EAAA,CAAQ,UAAU,SAAA,CAAU,EAE7BP,EAAAA,IAACQ,EAAA,CAAU,UAAU,SAAA,CAAU,EAGhCR,EAAAA,IAACS,EAAA,CAAY,UAAU,oBAAA,CAAqB,CAAA,CAE9C,CAAA,CAAA,CAEF,CAAA,EA/BK,OAAON,EAAO,GAAG,CAAA,CAiCvB,CAAA,EACF,CAEF"}
@@ -1,4 +1,4 @@
1
- import { DataTableColumn } from '../types/data-table';
1
+ import type { DataTableColumn } from '../types/data-table';
2
2
  interface DataTableRowProps<T> {
3
3
  row: T;
4
4
  index: number;
@@ -1 +1 @@
1
- {"version":3,"file":"table-row.js","sources":["../../../../src/blocks/data-table/components/table-row.tsx","../../../../src/blocks/data-table/data-table.tsx"],"sourcesContent":["import { Checkbox } from '@/components/checkbox'\nimport { TableCell, TableRow } from '@/components/table'\nimport { cn } from '@/index'\nimport type { DataTableColumn } from '../types/data-table'\n\ninterface DataTableRowProps<T> {\n\trow: T\n\tindex: number\n\tcolumns: DataTableColumn<T>[]\n\tisSelected: boolean\n\trowId: string\n\tallowSelection?: boolean\n\tonToggleSelection: (id: string, checked: boolean) => void\n}\n\nexport function DataTableRow<T>({\n\trow,\n\tindex,\n\tcolumns,\n\tisSelected,\n\trowId,\n\tonToggleSelection,\n\tallowSelection = true,\n}: DataTableRowProps<T>) {\n\tconst visibleColumns = columns.filter((col) => !col.hidden)\n\n\treturn (\n\t\t<TableRow className={isSelected ? 'bg-muted/50' : ''}>\n\t\t\t{/* Row Selection Checkbox */}\n\t\t\t{allowSelection && (\n\t\t\t\t<TableCell className=\"w-12\">\n\t\t\t\t\t<Checkbox\n\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\tonCheckedChange={(checked) => onToggleSelection(rowId, !!checked)}\n\t\t\t\t\t\taria-label={`Select row ${index + 1}`}\n\t\t\t\t\t/>\n\t\t\t\t</TableCell>\n\t\t\t)}\n\n\t\t\t{/* Row Data */}\n\t\t\t{visibleColumns.map((column) => {\n\t\t\t\tconst value = row[column.key]\n\t\t\t\treturn (\n\t\t\t\t\t<TableCell\n\t\t\t\t\t\tkey={String(column.key)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tcolumn.align === 'right' ? 'text-right' : '',\n\t\t\t\t\t\t\tcolumn.align === 'center' ? 'text-center' : '',\n\t\t\t\t\t\t\tcolumn.cellClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{column.customRenderer\n\t\t\t\t\t\t\t? column.customRenderer(value, row)\n\t\t\t\t\t\t\t: String(value ?? '')}\n\t\t\t\t\t</TableCell>\n\t\t\t\t)\n\t\t\t})}\n\t\t</TableRow>\n\t)\n}\n","'use client'\n\nimport { Button } from '@/components/button'\nimport { Table, TableBody, TableCell, TableHeader } from '@/components/table'\nimport { FileDown, X } from 'lucide-react'\nimport React, { useCallback, useMemo, useState } from 'react'\n\n// Import components\nimport { ActiveFilters } from './components/active-filters'\nimport { ColumnVisibilityDropdown } from './components/column-visibility-dropdown'\nimport { FilterDropdown } from './components/filter-dropdown'\nimport { SearchInput } from './components/search-input'\nimport { SelectionInfo } from './components/selection-info'\nimport { TableHeader as DataTableHeader } from './components/table-header'\nimport { DataTableRow } from './components/table-row'\nimport { TableSkeleton } from './components/table-skeleton'\n\n// Import utilities and hooks\nimport { exportToCSV } from './utils/export'\n\n// Import types\nimport { Skeleton } from '@/components'\nimport { useDebounce } from '@/lib/hooks'\nimport { PaginationControls } from '../pagination-controls'\nimport type { DataTableProps, DataTableRef, SortState } from './types/data-table'\n\nfunction DataTableInner<T extends Record<string, any>>(\n\t{\n\t\tdata,\n\t\tcolumns: initialColumns,\n\t\tsearchFields,\n\t\tfilters = [],\n\t\tpageSize = 40,\n\t\tclassName = '',\n\t\tloading = false,\n\t\ttools,\n\t\tactiveFilters: defaultFilters = {},\n\t}: DataTableProps<T>,\n\tref: React.Ref<DataTableRef<T>>,\n) {\n\tconst [searchTerm, setSearchTerm] = useState('')\n\tconst [currentPage, setCurrentPage] = useState(1)\n\tconst [activeFilters, setActiveFilters] =\n\t\tuseState<Record<string, string>>(defaultFilters)\n\tconst [sortState, setSortState] = useState<SortState>({ field: null, direction: null })\n\tconst [selectedRows, setSelectedRows] = useState<Set<string>>(new Set())\n\tconst [columns, setColumns] = useState(initialColumns)\n\tconst [refreshKey, setRefreshKey] = useState(0)\n\n\t// Debounce search term for performance\n\tconst debouncedSearchTerm = useDebounce(searchTerm, 1000)\n\n\t// Simple row ID function\n\tconst getRowId = (row: T, index: number): string => {\n\t\treturn String(row.id || row._id || `row-${index}`)\n\t}\n\n\t// Memoized filtered and sorted data\n\tconst processedData = useMemo(() => {\n\t\tlet result = data.slice()\n\n\t\t// Apply search filter\n\t\tif (debouncedSearchTerm.trim()) {\n\t\t\tconst searchLower = debouncedSearchTerm.toLowerCase()\n\t\t\tresult = result.filter((item) =>\n\t\t\t\tsearchFields.some((field) => {\n\t\t\t\t\tconst value = item[field]\n\t\t\t\t\tif (value == null) return false\n\t\t\t\t\treturn String(value).toLowerCase().includes(searchLower)\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\t// Apply dropdown filters\n\t\tObject.entries(activeFilters).forEach(([field, filterValue]) => {\n\t\t\tif (filterValue && filterValue !== 'all') {\n\t\t\t\tresult = result.filter((item) => {\n\t\t\t\t\tconst value = item[field as keyof T]\n\t\t\t\t\treturn String(value) === filterValue\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t\t// Apply sorting\n\t\tif (sortState.field && sortState.direction) {\n\t\t\tconst { field, direction } = sortState\n\t\t\tresult.sort((a, b) => {\n\t\t\t\tconst aValue = a[field as keyof T]\n\t\t\t\tconst bValue = b[field as keyof T]\n\n\t\t\t\t// Handle null/undefined values\n\t\t\t\tif (aValue == null && bValue == null) return 0\n\t\t\t\tif (aValue == null) return direction === 'asc' ? -1 : 1\n\t\t\t\tif (bValue == null) return direction === 'asc' ? 1 : -1\n\n\t\t\t\t// Compare based on type\n\t\t\t\tif (typeof aValue === 'string' && typeof bValue === 'string') {\n\t\t\t\t\treturn direction === 'asc'\n\t\t\t\t\t\t? aValue.localeCompare(bValue)\n\t\t\t\t\t\t: bValue.localeCompare(aValue)\n\t\t\t\t}\n\n\t\t\t\t// Numeric comparison\n\t\t\t\treturn direction === 'asc'\n\t\t\t\t\t? (aValue as number) - (bValue as number)\n\t\t\t\t\t: (bValue as number) - (aValue as number)\n\t\t\t})\n\t\t}\n\n\t\treturn result\n\t}, [data, searchFields, debouncedSearchTerm, activeFilters, sortState, refreshKey])\n\n\t// Memoized pagination calculations\n\tconst paginationData = useMemo(() => {\n\t\tconst totalItems = processedData.length\n\t\tconst totalPages = Math.ceil(totalItems / pageSize)\n\t\tconst startIndex = (currentPage - 1) * pageSize\n\t\tconst endIndex = startIndex + pageSize\n\t\tconst currentData = processedData.slice(startIndex, endIndex)\n\n\t\treturn {\n\t\t\tcurrentData,\n\t\t\ttotalItems,\n\t\t\ttotalPages,\n\t\t\tstartIndex,\n\t\t\tendIndex: Math.min(endIndex, totalItems),\n\t\t}\n\t}, [processedData, currentPage, pageSize])\n\n\t// Reset to first page when search or filters change\n\tReact.useEffect(() => {\n\t\tsetCurrentPage(1)\n\t}, [debouncedSearchTerm, activeFilters, sortState])\n\n\t// Get selected items for external use\n\tconst getSelectedItems = useCallback(() => {\n\t\treturn processedData.filter((item, index) => {\n\t\t\tconst id = getRowId(item, index)\n\t\t\treturn selectedRows.has(id)\n\t\t})\n\t}, [processedData, selectedRows])\n\n\t// Get selection count\n\tconst getSelectionCount = useCallback(() => {\n\t\treturn selectedRows.size\n\t}, [selectedRows])\n\n\t// Select specific items by IDs\n\tconst selectItems = useCallback((ids: string[]) => {\n\t\tsetSelectedRows(new Set(ids))\n\t}, [])\n\n\t// Get filtered data\n\tconst getFilteredData = useCallback(() => {\n\t\treturn processedData\n\t}, [processedData])\n\n\t// Reset all filters\n\tconst resetFilters = useCallback(() => {\n\t\tsetActiveFilters({})\n\t\tsetSearchTerm('')\n\t\tsetSortState({ field: null, direction: null })\n\t\tsetCurrentPage(1)\n\t}, [])\n\n\t// Export data\n\tconst exportData = useCallback(\n\t\t(filename = 'table-export') => {\n\t\t\texportToCSV(processedData, columns, filename)\n\t\t},\n\t\t[processedData, columns],\n\t)\n\n\t// Go to specific page\n\tconst goToPage = useCallback(\n\t\t(page: number) => {\n\t\t\tif (page >= 1 && page <= paginationData.totalPages) {\n\t\t\t\tsetCurrentPage(page)\n\t\t\t}\n\t\t},\n\t\t[paginationData.totalPages],\n\t)\n\n\t// Refresh table\n\tconst refresh = useCallback(() => {\n\t\tsetRefreshKey((prev) => prev + 1)\n\t}, [])\n\n\t// Filter handlers\n\tconst handleFilterChange = useCallback((field: string, value: string) => {\n\t\tsetActiveFilters((prev) => ({\n\t\t\t...prev,\n\t\t\t[field]: value,\n\t\t}))\n\t}, [])\n\n\tconst clearFilter = useCallback((field: string) => {\n\t\tsetActiveFilters((prev) => {\n\t\t\tconst newFilters = { ...prev }\n\t\t\tdelete newFilters[field]\n\t\t\treturn newFilters\n\t\t})\n\t}, [])\n\n\tconst clearAllFilters = useCallback(() => {\n\t\tresetFilters()\n\t}, [resetFilters])\n\n\t// Sorting handlers\n\tconst handleSort = useCallback((field: string) => {\n\t\tsetSortState((prev) => {\n\t\t\tif (prev.field === field) {\n\t\t\t\t// Cycle through: asc -> desc -> null\n\t\t\t\tif (prev.direction === 'asc') return { field, direction: 'desc' }\n\t\t\t\tif (prev.direction === 'desc') return { field: null, direction: null }\n\t\t\t\treturn { field, direction: 'asc' }\n\t\t\t}\n\t\t\t// New field, start with ascending\n\t\t\treturn { field, direction: 'asc' }\n\t\t})\n\t}, [])\n\n\t// Column visibility handlers\n\tconst toggleColumnVisibility = useCallback((key: string, visible: boolean) => {\n\t\tsetColumns((prev) =>\n\t\t\tprev.map((col) => (String(col.key) === key ? { ...col, hidden: !visible } : col)),\n\t\t)\n\t}, [])\n\n\tconst resetColumnVisibility = useCallback(() => {\n\t\tsetColumns(initialColumns)\n\t}, [initialColumns])\n\n\t// Row selection handlers\n\tconst toggleAllRows = useCallback(\n\t\t(checked: boolean) => {\n\t\t\tif (checked) {\n\t\t\t\tconst newSelected = new Set<string>()\n\t\t\t\tpaginationData.currentData.forEach((row, index) => {\n\t\t\t\t\tconst id = getRowId(row, index)\n\t\t\t\t\tnewSelected.add(id)\n\t\t\t\t})\n\t\t\t\tsetSelectedRows(newSelected)\n\t\t\t} else {\n\t\t\t\tsetSelectedRows(new Set())\n\t\t\t}\n\t\t},\n\t\t[paginationData.currentData],\n\t)\n\n\tconst toggleRowSelection = useCallback((id: string, checked: boolean) => {\n\t\tsetSelectedRows((prev) => {\n\t\t\tconst newSet = new Set(prev)\n\t\t\tif (checked) {\n\t\t\t\tnewSet.add(id)\n\t\t\t} else {\n\t\t\t\tnewSet.delete(id)\n\t\t\t}\n\t\t\treturn newSet\n\t\t})\n\t}, [])\n\n\t// Export handlers\n\tconst handleExport = useCallback(() => {\n\t\texportData()\n\t}, [exportData])\n\n\t// Pagination handlers\n\tconst handlePreviousPage = useCallback(() => {\n\t\tsetCurrentPage((prev) => Math.max(prev - 1, 1))\n\t}, [])\n\n\tconst handleNextPage = useCallback(() => {\n\t\tsetCurrentPage((prev) => Math.min(prev + 1, paginationData.totalPages))\n\t}, [paginationData.totalPages])\n\n\tconst handlePageChange = useCallback(\n\t\t(page: number) => {\n\t\t\tgoToPage(page)\n\t\t},\n\t\t[goToPage],\n\t)\n\n\t// Count active filters\n\tconst activeFilterCount = Object.values(activeFilters).filter(\n\t\t(value) => value && value !== 'all',\n\t).length\n\tconst hasActiveFilters =\n\t\tactiveFilterCount > 0 || searchTerm.trim().length > 0 || sortState.field !== null\n\n\t// Get visible columns\n\tconst visibleColumns = columns.filter((col) => !col.hidden)\n\tconst selectedCount = selectedRows.size\n\n\t// Check if all rows on current page are selected\n\tconst allRowsSelected = useMemo(() => {\n\t\treturn (\n\t\t\tpaginationData.currentData.length > 0 &&\n\t\t\tpaginationData.currentData.every((row, index) => {\n\t\t\t\tconst id = getRowId(row, index)\n\t\t\t\treturn selectedRows.has(id)\n\t\t\t})\n\t\t)\n\t}, [paginationData.currentData, selectedRows])\n\n\t// Expose methods for parent component\n\tReact.useImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tgetSelectedItems,\n\t\t\tclearSelection: () => setSelectedRows(new Set()),\n\t\t\tgetSelectionCount,\n\t\t\tselectItems,\n\t\t\tgetFilteredData,\n\t\t\tresetFilters,\n\t\t\texportData,\n\t\t\tgoToPage,\n\t\t\trefresh,\n\t\t}),\n\t\t[\n\t\t\tgetSelectedItems,\n\t\t\tgetSelectionCount,\n\t\t\tselectItems,\n\t\t\tgetFilteredData,\n\t\t\tresetFilters,\n\t\t\texportData,\n\t\t\tgoToPage,\n\t\t\trefresh,\n\t\t],\n\t)\n\n\tif (loading) {\n\t\treturn (\n\t\t\t<div className={`space-y-4 ${className}`}>\n\t\t\t\t<div className=\"flex flex-wrap items-center gap-4\">\n\t\t\t\t\t<Skeleton className=\"h-10 w-full max-w-sm\" />\n\t\t\t\t\t{filters.map((_, index) => (\n\t\t\t\t\t\t<Skeleton key={index} className=\"h-10 w-30\" />\n\t\t\t\t\t))}\n\t\t\t\t\t<Skeleton className=\"h-10 w-32 ml-auto\" />\n\t\t\t\t</div>\n\t\t\t\t<TableSkeleton columns={visibleColumns.length + 1} rows={pageSize} />\n\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t<Skeleton className=\"h-4 w-48\" />\n\t\t\t\t\t<div className=\"flex items-center space-x-2\">\n\t\t\t\t\t\t<Skeleton className=\"h-8 w-20\" />\n\t\t\t\t\t\t<Skeleton className=\"h-8 w-8\" />\n\t\t\t\t\t\t<Skeleton className=\"h-8 w-8\" />\n\t\t\t\t\t\t<Skeleton className=\"h-8 w-8\" />\n\t\t\t\t\t\t<Skeleton className=\"h-8 w-20\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className={`space-y-4 ${className}`}>\n\t\t\t{/* Table Controls */}\n\t\t\t<div className=\"flex flex-wrap items-center gap-4\">\n\t\t\t\t{!Boolean(tools?.search?.hide) ? (\n\t\t\t\t\t<SearchInput\n\t\t\t\t\t\tplaceholder={tools?.search?.placeholder}\n\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\tonChange={setSearchTerm}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\n\t\t\t\t{filters.map((filter) => (\n\t\t\t\t\t<FilterDropdown\n\t\t\t\t\t\tkey={String(filter.field)}\n\t\t\t\t\t\tfilter={filter}\n\t\t\t\t\t\tvalue={activeFilters[String(filter.field)]}\n\t\t\t\t\t\tonChange={(value) => handleFilterChange(String(filter.field), value)}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\n\t\t\t\t{Boolean(tools?.columnSelector?.hide) ? (\n\t\t\t\t\t<ColumnVisibilityDropdown\n\t\t\t\t\t\tcolumns={columns}\n\t\t\t\t\t\tonToggleVisibility={toggleColumnVisibility}\n\t\t\t\t\t\tonReset={resetColumnVisibility}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\n\t\t\t\t{Boolean(tools?.export?.hide) ? (\n\t\t\t\t\t<Button variant=\"outline\" onClick={handleExport}>\n\t\t\t\t\t\t<FileDown className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\t\t{tools?.export?.label ?? 'Export CSV'}\n\t\t\t\t\t</Button>\n\t\t\t\t) : null}\n\n\t\t\t\t{!Boolean(tools?.clearFilters?.hide) && hasActiveFilters && (\n\t\t\t\t\t<Button variant=\"outline\" onClick={clearAllFilters}>\n\t\t\t\t\t\t<X className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\t\t{tools?.clearFilters?.label ?? 'Clear All'}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Active Filters Display */}\n\t\t\t<ActiveFilters\n\t\t\t\tsearchTerm={searchTerm}\n\t\t\t\tactiveFilters={activeFilters}\n\t\t\t\tsortState={sortState}\n\t\t\t\tfilters={filters}\n\t\t\t\tcolumns={columns}\n\t\t\t\tonClearSearch={() => setSearchTerm('')}\n\t\t\t\tonClearFilter={clearFilter}\n\t\t\t\tonClearSort={() => setSortState({ field: null, direction: null })}\n\t\t\t/>\n\n\t\t\t{/* Selected Rows Count */}\n\t\t\t<SelectionInfo\n\t\t\t\tselectedCount={selectedCount}\n\t\t\t\tonClearSelection={() => setSelectedRows(new Set())}\n\t\t\t/>\n\n\t\t\t{/* Table */}\n\t\t\t<div className=\"rounded-md border\">\n\t\t\t\t<Table>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t<DataTableHeader\n\t\t\t\t\t\t\tallowSelectAllRows={!Boolean(tools?.rowSelector?.hide)}\n\t\t\t\t\t\t\tcolumns={columns}\n\t\t\t\t\t\t\tsortState={sortState}\n\t\t\t\t\t\t\tallRowsSelected={allRowsSelected}\n\t\t\t\t\t\t\thasData={paginationData.currentData.length > 0}\n\t\t\t\t\t\t\tonSort={handleSort}\n\t\t\t\t\t\t\tonToggleAllRows={toggleAllRows}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{paginationData.currentData.length === 0 ? (\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\tcolSpan={visibleColumns.length + 1}\n\t\t\t\t\t\t\t\t\tclassName=\"h-24 text-center text-muted-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{hasActiveFilters\n\t\t\t\t\t\t\t\t\t\t? 'No results found for the current filters.'\n\t\t\t\t\t\t\t\t\t\t: 'No data available.'}\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpaginationData.currentData.map((row, index) => {\n\t\t\t\t\t\t\t\tconst rowId = getRowId(row, index)\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<DataTableRow\n\t\t\t\t\t\t\t\t\t\tkey={rowId}\n\t\t\t\t\t\t\t\t\t\trow={row}\n\t\t\t\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\t\t\t\tallowSelection={!Boolean(tools?.rowSelector?.hide)}\n\t\t\t\t\t\t\t\t\t\tcolumns={columns}\n\t\t\t\t\t\t\t\t\t\tisSelected={selectedRows.has(rowId)}\n\t\t\t\t\t\t\t\t\t\trowId={rowId}\n\t\t\t\t\t\t\t\t\t\tonToggleSelection={toggleRowSelection}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\n\t\t\t{/* Pagination */}\n\t\t\t<PaginationControls\n\t\t\t\tcurrentPage={currentPage}\n\t\t\t\ttotalPages={paginationData.totalPages}\n\t\t\t\ttotalItems={paginationData.totalItems}\n\t\t\t\tstartIndex={paginationData.startIndex}\n\t\t\t\tendIndex={paginationData.endIndex}\n\t\t\t\tonPageChange={handlePageChange}\n\t\t\t\tonPreviousPage={handlePreviousPage}\n\t\t\t\tonNextPage={handleNextPage}\n\t\t\t\tcounterText={tools?.pagination?.label}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n\n// Create the generic DataTable component with proper forwardRef typing\nexport const DataTable = React.forwardRef(DataTableInner) as <\n\tT extends Record<string, any>,\n>(\n\tprops: DataTableProps<T> & { ref?: React.Ref<DataTableRef<T>> },\n) => React.ReactElement\n\n// Re-export types for convenience\nexport type {\n\tDataTableColumn,\n\tDataTableFilter,\n\tDataTableProps,\n\tDataTableRef,\n} from './types/data-table'\n"],"names":["DataTableRow","row","index","columns","isSelected","rowId","onToggleSelection","allowSelection","visibleColumns","col","jsxs","TableRow","jsx","TableCell","Checkbox","checked","column","value","cn","DataTableInner","data","initialColumns","searchFields","filters","pageSize","className","loading","tools","defaultFilters","ref","searchTerm","setSearchTerm","useState","currentPage","setCurrentPage","activeFilters","setActiveFilters","sortState","setSortState","selectedRows","setSelectedRows","setColumns","refreshKey","setRefreshKey","debouncedSearchTerm","useDebounce","getRowId","processedData","useMemo","result","searchLower","item","field","filterValue","direction","a","b","aValue","bValue","paginationData","totalItems","totalPages","startIndex","endIndex","React","getSelectedItems","useCallback","id","getSelectionCount","selectItems","ids","getFilteredData","resetFilters","exportData","filename","exportToCSV","goToPage","page","refresh","prev","handleFilterChange","clearFilter","newFilters","clearAllFilters","handleSort","toggleColumnVisibility","key","visible","resetColumnVisibility","toggleAllRows","newSelected","toggleRowSelection","newSet","handleExport","handlePreviousPage","handleNextPage","handlePageChange","hasActiveFilters","selectedCount","allRowsSelected","Skeleton","_","TableSkeleton","_a","SearchInput","_b","filter","FilterDropdown","_c","ColumnVisibilityDropdown","_d","Button","FileDown","_e","_f","X","_g","ActiveFilters","SelectionInfo","Table","TableHeader","DataTableHeader","_h","TableBody","PaginationControls","_i","DataTable"],"mappings":"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"}
1
+ {"version":3,"file":"table-row.js","sources":["../../../../src/blocks/data-table/components/table-row.tsx","../../../../src/blocks/data-table/data-table.tsx"],"sourcesContent":["import { Checkbox } from '@/components/checkbox'\nimport { TableCell, TableRow } from '@/components/table'\nimport { cn } from '@/index'\nimport type { DataTableColumn } from '../types/data-table'\n\ninterface DataTableRowProps<T> {\n\trow: T\n\tindex: number\n\tcolumns: DataTableColumn<T>[]\n\tisSelected: boolean\n\trowId: string\n\tallowSelection?: boolean\n\tonToggleSelection: (id: string, checked: boolean) => void\n}\n\nexport function DataTableRow<T>({\n\trow,\n\tindex,\n\tcolumns,\n\tisSelected,\n\trowId,\n\tonToggleSelection,\n\tallowSelection = true,\n}: DataTableRowProps<T>) {\n\tconst visibleColumns = columns.filter((col) => !col.hidden)\n\n\treturn (\n\t\t<TableRow className={isSelected ? 'bg-muted/50' : ''}>\n\t\t\t{/* Row Selection Checkbox */}\n\t\t\t{allowSelection && (\n\t\t\t\t<TableCell className=\"w-12\">\n\t\t\t\t\t<Checkbox\n\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\tonCheckedChange={(checked) => onToggleSelection(rowId, !!checked)}\n\t\t\t\t\t\taria-label={`Select row ${index + 1}`}\n\t\t\t\t\t/>\n\t\t\t\t</TableCell>\n\t\t\t)}\n\n\t\t\t{/* Row Data */}\n\t\t\t{visibleColumns.map((column) => {\n\t\t\t\tconst value = row[column.key]\n\t\t\t\treturn (\n\t\t\t\t\t<TableCell\n\t\t\t\t\t\tkey={String(column.key)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tcolumn.align === 'right' ? 'text-right' : '',\n\t\t\t\t\t\t\tcolumn.align === 'center' ? 'text-center' : '',\n\t\t\t\t\t\t\tcolumn.cellClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{column.customRenderer\n\t\t\t\t\t\t\t? column.customRenderer(value, row)\n\t\t\t\t\t\t\t: String(value ?? '')}\n\t\t\t\t\t</TableCell>\n\t\t\t\t)\n\t\t\t})}\n\t\t</TableRow>\n\t)\n}\n","'use client'\n\nimport { Button } from '@/components/button'\nimport { Table, TableBody, TableCell, TableHeader } from '@/components/table'\nimport { FileDown, X } from 'lucide-react'\nimport React, { useCallback, useMemo, useState } from 'react'\n\n// Import components\nimport { ActiveFilters } from './components/active-filters'\nimport { ColumnVisibilityDropdown } from './components/column-visibility-dropdown'\nimport { FilterDropdown } from './components/filter-dropdown'\nimport { SearchInput } from './components/search-input'\nimport { SelectionInfo } from './components/selection-info'\nimport { TableHeader as DataTableHeader } from './components/table-header'\nimport { DataTableRow } from './components/table-row'\nimport { TableSkeleton } from './components/table-skeleton'\n\n// Import utilities and hooks\nimport { exportToCSV } from './utils/export'\n\n// Import types\nimport { Skeleton } from '@/components'\nimport { useDebounce } from '@/lib/hooks'\nimport { PaginationControls } from '../pagination-controls'\nimport type { DataTableProps, DataTableRef, SortState } from './types/data-table'\n\nfunction DataTableInner<T extends Record<string, any>>(\n\t{\n\t\tdata,\n\t\tcolumns: initialColumns,\n\t\tsearchFields,\n\t\tfilters = [],\n\t\tpageSize = 40,\n\t\tclassName = '',\n\t\tloading = false,\n\t\ttools,\n\t\tactiveFilters: defaultFilters = {},\n\t}: DataTableProps<T>,\n\tref: React.Ref<DataTableRef<T>>,\n) {\n\tconst [searchTerm, setSearchTerm] = useState('')\n\tconst [currentPage, setCurrentPage] = useState(1)\n\tconst [activeFilters, setActiveFilters] =\n\t\tuseState<Record<string, string>>(defaultFilters)\n\tconst [sortState, setSortState] = useState<SortState>({ field: null, direction: null })\n\tconst [selectedRows, setSelectedRows] = useState<Set<string>>(new Set())\n\tconst [columns, setColumns] = useState(initialColumns)\n\tconst [refreshKey, setRefreshKey] = useState(0)\n\n\t// Debounce search term for performance\n\tconst debouncedSearchTerm = useDebounce(searchTerm, 1000)\n\n\t// Simple row ID function\n\tconst getRowId = (row: T, index: number): string => {\n\t\treturn String(row.id || row._id || `row-${index}`)\n\t}\n\n\t// Memoized filtered and sorted data\n\tconst processedData = useMemo(() => {\n\t\tlet result = data.slice()\n\n\t\t// Apply search filter\n\t\tif (debouncedSearchTerm.trim()) {\n\t\t\tconst searchLower = debouncedSearchTerm.toLowerCase()\n\t\t\tresult = result.filter((item) =>\n\t\t\t\tsearchFields.some((field) => {\n\t\t\t\t\tconst value = item[field]\n\t\t\t\t\tif (value == null) return false\n\t\t\t\t\treturn String(value).toLowerCase().includes(searchLower)\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\t// Apply dropdown filters\n\t\tObject.entries(activeFilters).forEach(([field, filterValue]) => {\n\t\t\tif (filterValue && filterValue !== 'all') {\n\t\t\t\tresult = result.filter((item) => {\n\t\t\t\t\tconst value = item[field as keyof T]\n\t\t\t\t\treturn String(value) === filterValue\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t\t// Apply sorting\n\t\tif (sortState.field && sortState.direction) {\n\t\t\tconst { field, direction } = sortState\n\t\t\tresult.sort((a, b) => {\n\t\t\t\tconst aValue = a[field as keyof T]\n\t\t\t\tconst bValue = b[field as keyof T]\n\n\t\t\t\t// Handle null/undefined values\n\t\t\t\tif (aValue == null && bValue == null) return 0\n\t\t\t\tif (aValue == null) return direction === 'asc' ? -1 : 1\n\t\t\t\tif (bValue == null) return direction === 'asc' ? 1 : -1\n\n\t\t\t\t// Compare based on type\n\t\t\t\tif (typeof aValue === 'string' && typeof bValue === 'string') {\n\t\t\t\t\treturn direction === 'asc'\n\t\t\t\t\t\t? aValue.localeCompare(bValue)\n\t\t\t\t\t\t: bValue.localeCompare(aValue)\n\t\t\t\t}\n\n\t\t\t\t// Numeric comparison\n\t\t\t\treturn direction === 'asc'\n\t\t\t\t\t? (aValue as number) - (bValue as number)\n\t\t\t\t\t: (bValue as number) - (aValue as number)\n\t\t\t})\n\t\t}\n\n\t\treturn result\n\t}, [data, searchFields, debouncedSearchTerm, activeFilters, sortState, refreshKey])\n\n\t// Memoized pagination calculations\n\tconst paginationData = useMemo(() => {\n\t\tconst totalItems = processedData.length\n\t\tconst totalPages = Math.ceil(totalItems / pageSize)\n\t\tconst startIndex = (currentPage - 1) * pageSize\n\t\tconst endIndex = startIndex + pageSize\n\t\tconst currentData = processedData.slice(startIndex, endIndex)\n\n\t\treturn {\n\t\t\tcurrentData,\n\t\t\ttotalItems,\n\t\t\ttotalPages,\n\t\t\tstartIndex,\n\t\t\tendIndex: Math.min(endIndex, totalItems),\n\t\t}\n\t}, [processedData, currentPage, pageSize])\n\n\t// Reset to first page when search or filters change\n\tReact.useEffect(() => {\n\t\tsetCurrentPage(1)\n\t}, [debouncedSearchTerm, activeFilters, sortState])\n\n\t// Get selected items for external use\n\tconst getSelectedItems = useCallback(() => {\n\t\treturn processedData.filter((item, index) => {\n\t\t\tconst id = getRowId(item, index)\n\t\t\treturn selectedRows.has(id)\n\t\t})\n\t}, [processedData, selectedRows])\n\n\t// Get selection count\n\tconst getSelectionCount = useCallback(() => {\n\t\treturn selectedRows.size\n\t}, [selectedRows])\n\n\t// Select specific items by IDs\n\tconst selectItems = useCallback((ids: string[]) => {\n\t\tsetSelectedRows(new Set(ids))\n\t}, [])\n\n\t// Get filtered data\n\tconst getFilteredData = useCallback(() => {\n\t\treturn processedData\n\t}, [processedData])\n\n\t// Reset all filters\n\tconst resetFilters = useCallback(() => {\n\t\tsetActiveFilters({})\n\t\tsetSearchTerm('')\n\t\tsetSortState({ field: null, direction: null })\n\t\tsetCurrentPage(1)\n\t}, [])\n\n\t// Export data\n\tconst exportData = useCallback(\n\t\t(filename = 'table-export') => {\n\t\t\texportToCSV(processedData, columns, filename)\n\t\t},\n\t\t[processedData, columns],\n\t)\n\n\t// Go to specific page\n\tconst goToPage = useCallback(\n\t\t(page: number) => {\n\t\t\tif (page >= 1 && page <= paginationData.totalPages) {\n\t\t\t\tsetCurrentPage(page)\n\t\t\t}\n\t\t},\n\t\t[paginationData.totalPages],\n\t)\n\n\t// Refresh table\n\tconst refresh = useCallback(() => {\n\t\tsetRefreshKey((prev) => prev + 1)\n\t}, [])\n\n\t// Filter handlers\n\tconst handleFilterChange = useCallback((field: string, value: string) => {\n\t\tsetActiveFilters((prev) => ({\n\t\t\t...prev,\n\t\t\t[field]: value,\n\t\t}))\n\t}, [])\n\n\tconst clearFilter = useCallback((field: string) => {\n\t\tsetActiveFilters((prev) => {\n\t\t\tconst newFilters = { ...prev }\n\t\t\tdelete newFilters[field]\n\t\t\treturn newFilters\n\t\t})\n\t}, [])\n\n\tconst clearAllFilters = useCallback(() => {\n\t\tresetFilters()\n\t}, [resetFilters])\n\n\t// Sorting handlers\n\tconst handleSort = useCallback((field: string) => {\n\t\tsetSortState((prev) => {\n\t\t\tif (prev.field === field) {\n\t\t\t\t// Cycle through: asc -> desc -> null\n\t\t\t\tif (prev.direction === 'asc') return { field, direction: 'desc' }\n\t\t\t\tif (prev.direction === 'desc') return { field: null, direction: null }\n\t\t\t\treturn { field, direction: 'asc' }\n\t\t\t}\n\t\t\t// New field, start with ascending\n\t\t\treturn { field, direction: 'asc' }\n\t\t})\n\t}, [])\n\n\t// Column visibility handlers\n\tconst toggleColumnVisibility = useCallback((key: string, visible: boolean) => {\n\t\tsetColumns((prev) =>\n\t\t\tprev.map((col) => (String(col.key) === key ? { ...col, hidden: !visible } : col)),\n\t\t)\n\t}, [])\n\n\tconst resetColumnVisibility = useCallback(() => {\n\t\tsetColumns(initialColumns)\n\t}, [initialColumns])\n\n\t// Row selection handlers\n\tconst toggleAllRows = useCallback(\n\t\t(checked: boolean) => {\n\t\t\tif (checked) {\n\t\t\t\tconst newSelected = new Set<string>()\n\t\t\t\tpaginationData.currentData.forEach((row, index) => {\n\t\t\t\t\tconst id = getRowId(row, index)\n\t\t\t\t\tnewSelected.add(id)\n\t\t\t\t})\n\t\t\t\tsetSelectedRows(newSelected)\n\t\t\t} else {\n\t\t\t\tsetSelectedRows(new Set())\n\t\t\t}\n\t\t},\n\t\t[paginationData.currentData],\n\t)\n\n\tconst toggleRowSelection = useCallback((id: string, checked: boolean) => {\n\t\tsetSelectedRows((prev) => {\n\t\t\tconst newSet = new Set(prev)\n\t\t\tif (checked) {\n\t\t\t\tnewSet.add(id)\n\t\t\t} else {\n\t\t\t\tnewSet.delete(id)\n\t\t\t}\n\t\t\treturn newSet\n\t\t})\n\t}, [])\n\n\t// Export handlers\n\tconst handleExport = useCallback(() => {\n\t\texportData()\n\t}, [exportData])\n\n\t// Pagination handlers\n\tconst handlePreviousPage = useCallback(() => {\n\t\tsetCurrentPage((prev) => Math.max(prev - 1, 1))\n\t}, [])\n\n\tconst handleNextPage = useCallback(() => {\n\t\tsetCurrentPage((prev) => Math.min(prev + 1, paginationData.totalPages))\n\t}, [paginationData.totalPages])\n\n\tconst handlePageChange = useCallback(\n\t\t(page: number) => {\n\t\t\tgoToPage(page)\n\t\t},\n\t\t[goToPage],\n\t)\n\n\t// Count active filters\n\tconst activeFilterCount = Object.values(activeFilters).filter(\n\t\t(value) => value && value !== 'all',\n\t).length\n\tconst hasActiveFilters =\n\t\tactiveFilterCount > 0 || searchTerm.trim().length > 0 || sortState.field !== null\n\n\t// Get visible columns\n\tconst visibleColumns = columns.filter((col) => !col.hidden)\n\tconst selectedCount = selectedRows.size\n\n\t// Check if all rows on current page are selected\n\tconst allRowsSelected = useMemo(() => {\n\t\treturn (\n\t\t\tpaginationData.currentData.length > 0 &&\n\t\t\tpaginationData.currentData.every((row, index) => {\n\t\t\t\tconst id = getRowId(row, index)\n\t\t\t\treturn selectedRows.has(id)\n\t\t\t})\n\t\t)\n\t}, [paginationData.currentData, selectedRows])\n\n\t// Expose methods for parent component\n\tReact.useImperativeHandle(\n\t\tref,\n\t\t() => ({\n\t\t\tgetSelectedItems,\n\t\t\tclearSelection: () => setSelectedRows(new Set()),\n\t\t\tgetSelectionCount,\n\t\t\tselectItems,\n\t\t\tgetFilteredData,\n\t\t\tresetFilters,\n\t\t\texportData,\n\t\t\tgoToPage,\n\t\t\trefresh,\n\t\t}),\n\t\t[\n\t\t\tgetSelectedItems,\n\t\t\tgetSelectionCount,\n\t\t\tselectItems,\n\t\t\tgetFilteredData,\n\t\t\tresetFilters,\n\t\t\texportData,\n\t\t\tgoToPage,\n\t\t\trefresh,\n\t\t],\n\t)\n\n\tif (loading) {\n\t\treturn (\n\t\t\t<div className={`space-y-4 ${className}`}>\n\t\t\t\t<div className=\"flex flex-wrap items-center gap-4\">\n\t\t\t\t\t<Skeleton className=\"h-10 w-full max-w-sm\" />\n\t\t\t\t\t{filters.map((_, index) => (\n\t\t\t\t\t\t<Skeleton key={index} className=\"h-10 w-30\" />\n\t\t\t\t\t))}\n\t\t\t\t\t<Skeleton className=\"h-10 w-32 ml-auto\" />\n\t\t\t\t</div>\n\t\t\t\t<TableSkeleton columns={visibleColumns.length + 1} rows={pageSize} />\n\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t<Skeleton className=\"h-4 w-48\" />\n\t\t\t\t\t<div className=\"flex items-center space-x-2\">\n\t\t\t\t\t\t<Skeleton className=\"h-8 w-20\" />\n\t\t\t\t\t\t<Skeleton className=\"h-8 w-8\" />\n\t\t\t\t\t\t<Skeleton className=\"h-8 w-8\" />\n\t\t\t\t\t\t<Skeleton className=\"h-8 w-8\" />\n\t\t\t\t\t\t<Skeleton className=\"h-8 w-20\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className={`space-y-4 ${className}`}>\n\t\t\t{/* Table Controls */}\n\t\t\t<div className=\"flex flex-wrap items-center gap-4\">\n\t\t\t\t{!Boolean(tools?.search?.hide) ? (\n\t\t\t\t\t<SearchInput\n\t\t\t\t\t\tplaceholder={tools?.search?.placeholder}\n\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\tonChange={setSearchTerm}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\n\t\t\t\t{filters.map((filter) => (\n\t\t\t\t\t<FilterDropdown\n\t\t\t\t\t\tkey={String(filter.field)}\n\t\t\t\t\t\tfilter={filter}\n\t\t\t\t\t\tvalue={activeFilters[String(filter.field)]}\n\t\t\t\t\t\tonChange={(value) => handleFilterChange(String(filter.field), value)}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\n\t\t\t\t{Boolean(tools?.columnSelector?.hide) ? (\n\t\t\t\t\t<ColumnVisibilityDropdown\n\t\t\t\t\t\tcolumns={columns}\n\t\t\t\t\t\tonToggleVisibility={toggleColumnVisibility}\n\t\t\t\t\t\tonReset={resetColumnVisibility}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\n\t\t\t\t{Boolean(tools?.export?.hide) ? (\n\t\t\t\t\t<Button variant=\"outline\" onClick={handleExport}>\n\t\t\t\t\t\t<FileDown className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\t\t{tools?.export?.label ?? 'Export CSV'}\n\t\t\t\t\t</Button>\n\t\t\t\t) : null}\n\n\t\t\t\t{!Boolean(tools?.clearFilters?.hide) && hasActiveFilters && (\n\t\t\t\t\t<Button variant=\"outline\" onClick={clearAllFilters}>\n\t\t\t\t\t\t<X className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\t\t{tools?.clearFilters?.label ?? 'Clear All'}\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Active Filters Display */}\n\t\t\t<ActiveFilters\n\t\t\t\tsearchTerm={searchTerm}\n\t\t\t\tactiveFilters={activeFilters}\n\t\t\t\tsortState={sortState}\n\t\t\t\tfilters={filters}\n\t\t\t\tcolumns={columns}\n\t\t\t\tonClearSearch={() => setSearchTerm('')}\n\t\t\t\tonClearFilter={clearFilter}\n\t\t\t\tonClearSort={() => setSortState({ field: null, direction: null })}\n\t\t\t/>\n\n\t\t\t{/* Selected Rows Count */}\n\t\t\t<SelectionInfo\n\t\t\t\tselectedCount={selectedCount}\n\t\t\t\tonClearSelection={() => setSelectedRows(new Set())}\n\t\t\t/>\n\n\t\t\t{/* Table */}\n\t\t\t<div className=\"rounded-md border\">\n\t\t\t\t<Table>\n\t\t\t\t\t<TableHeader>\n\t\t\t\t\t\t<DataTableHeader\n\t\t\t\t\t\t\tallowSelectAllRows={!Boolean(tools?.rowSelector?.hide)}\n\t\t\t\t\t\t\tcolumns={columns}\n\t\t\t\t\t\t\tsortState={sortState}\n\t\t\t\t\t\t\tallRowsSelected={allRowsSelected}\n\t\t\t\t\t\t\thasData={paginationData.currentData.length > 0}\n\t\t\t\t\t\t\tonSort={handleSort}\n\t\t\t\t\t\t\tonToggleAllRows={toggleAllRows}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{paginationData.currentData.length === 0 ? (\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\tcolSpan={visibleColumns.length + 1}\n\t\t\t\t\t\t\t\t\tclassName=\"h-24 text-center text-muted-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{hasActiveFilters\n\t\t\t\t\t\t\t\t\t\t? 'No results found for the current filters.'\n\t\t\t\t\t\t\t\t\t\t: 'No data available.'}\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tpaginationData.currentData.map((row, index) => {\n\t\t\t\t\t\t\t\tconst rowId = getRowId(row, index)\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<DataTableRow\n\t\t\t\t\t\t\t\t\t\tkey={rowId}\n\t\t\t\t\t\t\t\t\t\trow={row}\n\t\t\t\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\t\t\t\tallowSelection={!Boolean(tools?.rowSelector?.hide)}\n\t\t\t\t\t\t\t\t\t\tcolumns={columns}\n\t\t\t\t\t\t\t\t\t\tisSelected={selectedRows.has(rowId)}\n\t\t\t\t\t\t\t\t\t\trowId={rowId}\n\t\t\t\t\t\t\t\t\t\tonToggleSelection={toggleRowSelection}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\n\t\t\t{/* Pagination */}\n\t\t\t<PaginationControls\n\t\t\t\tcurrentPage={currentPage}\n\t\t\t\ttotalPages={paginationData.totalPages}\n\t\t\t\ttotalItems={paginationData.totalItems}\n\t\t\t\tstartIndex={paginationData.startIndex}\n\t\t\t\tendIndex={paginationData.endIndex}\n\t\t\t\tonPageChange={handlePageChange}\n\t\t\t\tonPreviousPage={handlePreviousPage}\n\t\t\t\tonNextPage={handleNextPage}\n\t\t\t\tcounterText={tools?.pagination?.label}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n\n// Create the generic DataTable component with proper forwardRef typing\nexport const DataTable = React.forwardRef(DataTableInner) as <\n\tT extends Record<string, any>,\n>(\n\tprops: DataTableProps<T> & { ref?: React.Ref<DataTableRef<T>> },\n) => React.ReactElement\n\n// Re-export types for convenience\nexport type {\n\tDataTableColumn,\n\tDataTableFilter,\n\tDataTableProps,\n\tDataTableRef,\n} from './types/data-table'\n"],"names":["DataTableRow","row","index","columns","isSelected","rowId","onToggleSelection","allowSelection","visibleColumns","col","jsxs","TableRow","jsx","TableCell","Checkbox","checked","column","value","cn","DataTableInner","data","initialColumns","searchFields","filters","pageSize","className","loading","tools","defaultFilters","ref","searchTerm","setSearchTerm","useState","currentPage","setCurrentPage","activeFilters","setActiveFilters","sortState","setSortState","selectedRows","setSelectedRows","setColumns","refreshKey","setRefreshKey","debouncedSearchTerm","useDebounce","getRowId","processedData","useMemo","result","searchLower","item","field","filterValue","direction","a","b","aValue","bValue","paginationData","totalItems","totalPages","startIndex","endIndex","React","getSelectedItems","useCallback","id","getSelectionCount","selectItems","ids","getFilteredData","resetFilters","exportData","filename","exportToCSV","goToPage","page","refresh","prev","handleFilterChange","clearFilter","newFilters","clearAllFilters","handleSort","toggleColumnVisibility","key","visible","resetColumnVisibility","toggleAllRows","newSelected","toggleRowSelection","newSet","handleExport","handlePreviousPage","handleNextPage","handlePageChange","hasActiveFilters","selectedCount","allRowsSelected","Skeleton","_","TableSkeleton","_a","SearchInput","_b","filter","FilterDropdown","_c","ColumnVisibilityDropdown","_d","Button","FileDown","_e","_f","X","_g","ActiveFilters","SelectionInfo","Table","TableHeader","DataTableHeader","_h","TableBody","PaginationControls","_i","DataTable"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-skeleton.js","sources":["../../../../src/blocks/data-table/components/table-skeleton.tsx"],"sourcesContent":["import { Skeleton } from '@/components/skeleton'\nimport {\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from '@/components/table'\n\ninterface TableSkeletonProps {\n\tcolumns: number\n\trows?: number\n}\n\nexport function TableSkeleton({ columns, rows = 5 }: TableSkeletonProps) {\n\treturn (\n\t\t<div className=\"rounded-md border\">\n\t\t\t<Table>\n\t\t\t\t<TableHeader>\n\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t{Array.from({ length: columns }).map((_, i) => (\n\t\t\t\t\t\t\t<TableHead key={i}>\n\t\t\t\t\t\t\t\t<Skeleton className=\"h-4 w-20\" />\n\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableRow>\n\t\t\t\t</TableHeader>\n\t\t\t\t<TableBody>\n\t\t\t\t\t{Array.from({ length: rows }).map((_, rowIndex) => (\n\t\t\t\t\t\t<TableRow key={rowIndex}>\n\t\t\t\t\t\t\t{Array.from({ length: columns }).map((_, colIndex) => (\n\t\t\t\t\t\t\t\t<TableCell key={colIndex}>\n\t\t\t\t\t\t\t\t\t<Skeleton className=\"h-4 w-full\" />\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t))}\n\t\t\t\t</TableBody>\n\t\t\t</Table>\n\t\t</div>\n\t)\n}\n"],"names":["TableSkeleton","columns","rows","jsx","Table","TableHeader","TableRow","_","i","TableHead","Skeleton","TableBody","rowIndex","colIndex","TableCell"],"mappings":"0TAeO,SAASA,EAAc,CAAE,QAAAC,EAAS,KAAAC,EAAO,GAAyB,CACxE,OACEC,EAAA,IAAA,MAAA,CAAI,UAAU,oBACd,gBAACC,EACA,CAAA,SAAA,CAACD,EAAAA,IAAAE,EAAA,CACA,SAACF,EAAA,IAAAG,EAAA,CACC,SAAM,MAAA,KAAK,CAAE,OAAQL,CAAS,CAAA,EAAE,IAAI,CAACM,EAAGC,IACxCL,EAAAA,IAACM,EACA,CAAA,SAAAN,EAAA,IAACO,EAAS,CAAA,UAAU,UAAW,CAAA,CADhB,EAAAF,CAEhB,CACA,CAAA,CACF,CACD,CAAA,QACCG,EACC,CAAA,SAAA,MAAM,KAAK,CAAE,OAAQT,EAAM,EAAE,IAAI,CAACK,EAAGK,UACpCN,EACC,CAAA,SAAA,MAAM,KAAK,CAAE,OAAQL,EAAS,EAAE,IAAI,CAACM,EAAGM,UACvCC,EACA,CAAA,SAAAX,EAAAA,IAACO,EAAS,CAAA,UAAU,aAAa,CADlB,EAAAG,CAEhB,CACA,CALa,EAAAD,CAMf,CACA,CACF,CAAA,CAAA,CAAA,CACD,CACD,CAAA,CAEF"}
1
+ {"version":3,"file":"table-skeleton.js","sources":["../../../../src/blocks/data-table/components/table-skeleton.tsx"],"sourcesContent":["import { Skeleton } from '@/components/skeleton'\nimport {\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from '@/components/table'\n\ninterface TableSkeletonProps {\n\tcolumns: number\n\trows?: number\n}\n\nexport function TableSkeleton({ columns, rows = 5 }: TableSkeletonProps) {\n\treturn (\n\t\t<div className=\"rounded-md border\">\n\t\t\t<Table>\n\t\t\t\t<TableHeader>\n\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t{Array.from({ length: columns }).map((_, i) => (\n\t\t\t\t\t\t\t<TableHead key={i}>\n\t\t\t\t\t\t\t\t<Skeleton className=\"h-4 w-20\" />\n\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableRow>\n\t\t\t\t</TableHeader>\n\t\t\t\t<TableBody>\n\t\t\t\t\t{Array.from({ length: rows }).map((_, rowIndex) => (\n\t\t\t\t\t\t<TableRow key={rowIndex}>\n\t\t\t\t\t\t\t{Array.from({ length: columns }).map((_, colIndex) => (\n\t\t\t\t\t\t\t\t<TableCell key={colIndex}>\n\t\t\t\t\t\t\t\t\t<Skeleton className=\"h-4 w-full\" />\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t))}\n\t\t\t\t</TableBody>\n\t\t\t</Table>\n\t\t</div>\n\t)\n}\n"],"names":["TableSkeleton","columns","rows","jsx","Table","TableHeader","TableRow","_","i","TableHead","Skeleton","TableBody","rowIndex","colIndex","TableCell"],"mappings":"0TAeO,SAASA,EAAc,CAAE,QAAAC,EAAS,KAAAC,EAAO,GAAyB,CACxE,OACCC,EAAAA,IAAC,MAAA,CAAI,UAAU,oBACd,gBAACC,EAAA,CACA,SAAA,CAAAD,EAAAA,IAACE,EAAA,CACA,SAAAF,EAAAA,IAACG,EAAA,CACC,SAAA,MAAM,KAAK,CAAE,OAAQL,CAAA,CAAS,EAAE,IAAI,CAACM,EAAGC,IACxCL,EAAAA,IAACM,EAAA,CACA,SAAAN,EAAAA,IAACO,EAAA,CAAS,UAAU,WAAW,CAAA,EADhBF,CAEhB,CACA,CAAA,CACF,CAAA,CACD,QACCG,EAAA,CACC,SAAA,MAAM,KAAK,CAAE,OAAQT,EAAM,EAAE,IAAI,CAACK,EAAGK,UACpCN,EAAA,CACC,SAAA,MAAM,KAAK,CAAE,OAAQL,EAAS,EAAE,IAAI,CAACM,EAAGM,UACvCC,EAAA,CACA,SAAAX,EAAAA,IAACO,EAAA,CAAS,UAAU,aAAa,CAAA,EADlBG,CAEhB,CACA,CAAA,EALaD,CAMf,CACA,CAAA,CACF,CAAA,CAAA,CACD,CAAA,CACD,CAEF"}
@@ -1,5 +1,5 @@
1
- import { default as React } from 'react';
2
- import { DataTableProps, DataTableRef } from './types/data-table';
1
+ import React from 'react';
2
+ import type { DataTableProps, DataTableRef } from './types/data-table';
3
3
  export declare const DataTable: <T extends Record<string, any>>(props: DataTableProps<T> & {
4
4
  ref?: React.Ref<DataTableRef<T>>;
5
5
  }) => React.ReactElement;
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.stories.js","sources":["../../../src/blocks/data-table/data-table.stories.tsx"],"sourcesContent":["// organize-imports-ignore\nimport React from 'react'\nimport type { Meta, StoryObj } from '@storybook/react'\nimport { useState, useRef } from 'react'\nimport { DataTable, type DataTableColumn, type DataTableFilter } from './data-table'\nimport { Badge } from '../../components/badge'\nimport { Button } from '../../components/button'\nimport { Mail, Phone, Edit, RefreshCw, Trash2 } from 'lucide-react'\nimport { toast } from '../../components/toaster'\n\nconst meta: Meta<typeof DataTable> = {\n\tcomponent: DataTable,\n}\n\nexport default meta\ntype Story = StoryObj<typeof DataTable>\n\n// Example data type\ninterface User {\n\tid: number\n\tname: string\n\temail: string\n\tphone: string\n\tstatus: 'active' | 'inactive' | 'pending'\n\trole: string\n\tdepartment: string\n\tjoinDate: string\n}\n\n// Mock data\nconst mockUsers: User[] = Array.from({ length: 150 }, (_, i) => ({\n\tid: i + 1,\n\tname: `User ${i + 1}`,\n\temail: `user${i + 1}@example.com`,\n\tphone: `+1 (555) ${String(Math.floor(Math.random() * 900) + 100)}-${String(Math.floor(Math.random() * 9000) + 1000)}`,\n\tstatus: ['active', 'inactive', 'pending'][Math.floor(Math.random() * 3)] as\n\t\t| 'active'\n\t\t| 'inactive'\n\t\t| 'pending',\n\trole: ['Admin', 'User', 'Manager', 'Editor'][Math.floor(Math.random() * 4)],\n\tdepartment: ['Engineering', 'Marketing', 'Sales', 'HR', 'Finance'][\n\t\tMath.floor(Math.random() * 5)\n\t],\n\tjoinDate: new Date(\n\t\t2020 + Math.floor(Math.random() * 4),\n\t\tMath.floor(Math.random() * 12),\n\t\tMath.floor(Math.random() * 28) + 1,\n\t)\n\t\t.toISOString()\n\t\t.split('T')[0],\n}))\n\nconst Template = () => {\n\tconst [loading, setLoading] = useState(false)\n\tconst [data, setData] = useState(mockUsers)\n\tconst [selectedCount, setSelectedCount] = useState(0)\n\tconst tableRef = useRef<any>(null)\n\n\t// Simulate loading\n\tconst handleRefresh = () => {\n\t\tsetLoading(true)\n\t\tsetTimeout(() => {\n\t\t\tsetData([...mockUsers].sort(() => Math.random() - 0.5)) // Shuffle data\n\t\t\tsetLoading(false)\n\t\t}, 2000)\n\t}\n\n\t// Handle bulk delete - manual approach\n\tconst handleBulkDelete = () => {\n\t\tif (!tableRef.current) return\n\n\t\tconst selectedItems = tableRef.current.getSelectedItems()\n\t\tif (selectedItems.length === 0) return\n\n\t\tconst selectedIds = selectedItems.map((row: User) => row.id)\n\t\tsetData((prev) => prev.filter((user) => !selectedIds.includes(user.id)))\n\n\t\t// Clear selection after delete\n\t\ttableRef.current.clearSelection()\n\n\t\ttoast.success(`Successfully removed ${selectedItems.length} users from the table.`)\n\t}\n\n\t// Define columns with custom renderers\n\tconst columns: DataTableColumn<User>[] = [\n\t\t{\n\t\t\tkey: 'id',\n\t\t\ttitle: 'ID',\n\t\t\tsortable: true,\n\t\t},\n\t\t{\n\t\t\tkey: 'name',\n\t\t\ttitle: 'Name',\n\t\t\tsortable: true,\n\t\t\tcustomRenderer: (value, row) => <div className=\"font-medium\">{value}</div>,\n\t\t},\n\t\t{\n\t\t\tkey: 'email',\n\t\t\ttitle: 'Email',\n\t\t\tsortable: true,\n\t\t\tcustomRenderer: (value) => (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Mail className=\"h-4 w-4 text-muted-foreground\" />\n\t\t\t\t\t<span className=\"text-sm\">{value}</span>\n\t\t\t\t</div>\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\tkey: 'phone',\n\t\t\ttitle: 'Phone',\n\t\t\tcustomRenderer: (value) => (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Phone className=\"h-4 w-4 text-muted-foreground\" />\n\t\t\t\t\t<span className=\"text-sm font-mono\">{value}</span>\n\t\t\t\t</div>\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\tkey: 'status',\n\t\t\ttitle: 'Status',\n\t\t\tsortable: true,\n\t\t\tcustomRenderer: (value) => (\n\t\t\t\t<Badge\n\t\t\t\t\tvariant={\n\t\t\t\t\t\tvalue === 'active'\n\t\t\t\t\t\t\t? 'default'\n\t\t\t\t\t\t\t: value === 'inactive'\n\t\t\t\t\t\t\t\t? 'destructive'\n\t\t\t\t\t\t\t\t: 'secondary'\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{value}\n\t\t\t\t</Badge>\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\tkey: 'role',\n\t\t\ttitle: 'Role',\n\t\t\tsortable: true,\n\t\t},\n\t\t{\n\t\t\tkey: 'department',\n\t\t\ttitle: 'Department',\n\t\t\tsortable: true,\n\t\t},\n\t\t{\n\t\t\tkey: 'joinDate',\n\t\t\ttitle: 'Join Date',\n\t\t\tsortable: true,\n\t\t\talign: 'right',\n\t\t\theaderClassName: 'bg-muted-foreground/10',\n\t\t\tcustomRenderer: (value) => (\n\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t{new Date(value).toLocaleDateString()}\n\t\t\t\t</span>\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\tkey: 'id',\n\t\t\ttitle: 'Actions',\n\t\t\twidth: '100px',\n\t\t\tcustomRenderer: (_, row) => (\n\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t<Button variant=\"ghost\" size=\"sm\">\n\t\t\t\t\t\t<Edit className=\"h-4 w-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclassName=\"text-destructive hover:text-destructive\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetData((prev) => prev.filter((user) => user.id !== row.id))\n\t\t\t\t\t\t\ttoast.success(`User ${row.name} has been removed.`)\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Trash2 className=\"h-4 w-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t),\n\t\t},\n\t]\n\n\t// Define filters\n\tconst filters: DataTableFilter<User>[] = [\n\t\t{\n\t\t\tfield: 'status',\n\t\t\tlabel: 'Status',\n\n\t\t\toptions: [\n\t\t\t\t{ label: 'Active', value: 'active' },\n\t\t\t\t{ label: 'Inactive', value: 'inactive' },\n\t\t\t\t{ label: 'Pending', value: 'pending' },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tfield: 'role',\n\t\t\tlabel: 'Role',\n\t\t\toptions: [\n\t\t\t\t{ label: 'Admin', value: 'Admin' },\n\t\t\t\t{ label: 'User', value: 'User' },\n\t\t\t\t{ label: 'Manager', value: 'Manager' },\n\t\t\t\t{ label: 'Editor', value: 'Editor' },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tfield: 'department',\n\t\t\tlabel: 'Department',\n\t\t\toptions: [\n\t\t\t\t{ label: 'Engineering', value: 'Engineering' },\n\t\t\t\t{ label: 'Marketing', value: 'Marketing' },\n\t\t\t\t{ label: 'Sales', value: 'Sales' },\n\t\t\t\t{ label: 'HR', value: 'HR' },\n\t\t\t\t{ label: 'Finance', value: 'Finance' },\n\t\t\t],\n\t\t},\n\t]\n\n\t// Define which fields to search\n\tconst searchFields: (keyof User)[] = ['name', 'email', 'role', 'department']\n\n\t// Get selected count manually when needed\n\tconst updateSelectedCount = () => {\n\t\tif (tableRef.current) {\n\t\t\tconst selected = tableRef.current.getSelectedItems()\n\t\t\tsetSelectedCount(selected.length)\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"container mx-auto py-8\">\n\t\t\t<div className=\"mb-6 flex flex-wrap items-center justify-between gap-4\">\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-3xl font-bold\">User Management</h1>\n\t\t\t\t\t<p className=\"text-muted-foreground\">\n\t\t\t\t\t\tManage your users with advanced table features.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t<Button onClick={updateSelectedCount} variant=\"outline\">\n\t\t\t\t\t\tCheck Selection ({selectedCount})\n\t\t\t\t\t</Button>\n\t\t\t\t\t{selectedCount > 0 && (\n\t\t\t\t\t\t<Button variant=\"destructive\" onClick={handleBulkDelete}>\n\t\t\t\t\t\t\t<Trash2 className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\t\t\tDelete Selected ({selectedCount})\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t<Button onClick={handleRefresh} disabled={loading} variant=\"outline\">\n\t\t\t\t\t\t<RefreshCw className={`h-4 w-4 mr-2 ${loading ? 'animate-spin' : ''}`} />\n\t\t\t\t\t\tRefresh\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<DataTable<User>\n\t\t\t\tref={tableRef}\n\t\t\t\tdata={data}\n\t\t\t\tcolumns={columns}\n\t\t\t\tsearchFields={searchFields}\n\t\t\t\tfilters={filters}\n\t\t\t\tactiveFilters={{ status: 'active', role: 'User' }}\n\t\t\t\tpageSize={10}\n\t\t\t\tclassName=\"w-full\"\n\t\t\t\tloading={loading}\n\t\t\t\ttools={{\n\t\t\t\t\trowSelector: {\n\t\t\t\t\t\thide: true,\n\t\t\t\t\t},\n\t\t\t\t\tsearch: {\n\t\t\t\t\t\tplaceholder: 'Search something...',\n\t\t\t\t\t},\n\t\t\t\t\tpagination: {\n\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t'Displaying now {{startIndex}} to {{endIndex}} of total {{totalItems}} items',\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n\nexport const Default: Story = {\n\trender: Template.bind({}),\n\targs: {},\n}\n"],"names":["mockUsers","_","i","Template","loading","setLoading","useState","data","setData","selectedCount","setSelectedCount","tableRef","useRef","handleRefresh","handleBulkDelete","selectedItems","selectedIds","row","prev","user","toast","columns","value","jsxs","jsx","Mail","Phone","Badge","Button","Edit","Trash2","filters","searchFields","updateSelectedCount","selected","RefreshCw","DataTable"],"mappings":"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"}
1
+ {"version":3,"file":"data-table.stories.js","sources":["../../../src/blocks/data-table/data-table.stories.tsx"],"sourcesContent":["// organize-imports-ignore\nimport React from 'react'\nimport type { Meta, StoryObj } from '@storybook/react'\nimport { useState, useRef } from 'react'\nimport { DataTable, type DataTableColumn, type DataTableFilter } from './data-table'\nimport { Badge } from '../../components/badge'\nimport { Button } from '../../components/button'\nimport { Mail, Phone, Edit, RefreshCw, Trash2 } from 'lucide-react'\nimport { toast } from '../../components/toaster'\n\nconst meta: Meta<typeof DataTable> = {\n\tcomponent: DataTable,\n}\n\nexport default meta\ntype Story = StoryObj<typeof DataTable>\n\n// Example data type\ninterface User {\n\tid: number\n\tname: string\n\temail: string\n\tphone: string\n\tstatus: 'active' | 'inactive' | 'pending'\n\trole: string\n\tdepartment: string\n\tjoinDate: string\n}\n\n// Mock data\nconst mockUsers: User[] = Array.from({ length: 150 }, (_, i) => ({\n\tid: i + 1,\n\tname: `User ${i + 1}`,\n\temail: `user${i + 1}@example.com`,\n\tphone: `+1 (555) ${String(Math.floor(Math.random() * 900) + 100)}-${String(Math.floor(Math.random() * 9000) + 1000)}`,\n\tstatus: ['active', 'inactive', 'pending'][Math.floor(Math.random() * 3)] as\n\t\t| 'active'\n\t\t| 'inactive'\n\t\t| 'pending',\n\trole: ['Admin', 'User', 'Manager', 'Editor'][Math.floor(Math.random() * 4)],\n\tdepartment: ['Engineering', 'Marketing', 'Sales', 'HR', 'Finance'][\n\t\tMath.floor(Math.random() * 5)\n\t],\n\tjoinDate: new Date(\n\t\t2020 + Math.floor(Math.random() * 4),\n\t\tMath.floor(Math.random() * 12),\n\t\tMath.floor(Math.random() * 28) + 1,\n\t)\n\t\t.toISOString()\n\t\t.split('T')[0],\n}))\n\nconst Template = () => {\n\tconst [loading, setLoading] = useState(false)\n\tconst [data, setData] = useState(mockUsers)\n\tconst [selectedCount, setSelectedCount] = useState(0)\n\tconst tableRef = useRef<any>(null)\n\n\t// Simulate loading\n\tconst handleRefresh = () => {\n\t\tsetLoading(true)\n\t\tsetTimeout(() => {\n\t\t\tsetData([...mockUsers].sort(() => Math.random() - 0.5)) // Shuffle data\n\t\t\tsetLoading(false)\n\t\t}, 2000)\n\t}\n\n\t// Handle bulk delete - manual approach\n\tconst handleBulkDelete = () => {\n\t\tif (!tableRef.current) return\n\n\t\tconst selectedItems = tableRef.current.getSelectedItems()\n\t\tif (selectedItems.length === 0) return\n\n\t\tconst selectedIds = selectedItems.map((row: User) => row.id)\n\t\tsetData((prev) => prev.filter((user) => !selectedIds.includes(user.id)))\n\n\t\t// Clear selection after delete\n\t\ttableRef.current.clearSelection()\n\n\t\ttoast.success(`Successfully removed ${selectedItems.length} users from the table.`)\n\t}\n\n\t// Define columns with custom renderers\n\tconst columns: DataTableColumn<User>[] = [\n\t\t{\n\t\t\tkey: 'id',\n\t\t\ttitle: 'ID',\n\t\t\tsortable: true,\n\t\t},\n\t\t{\n\t\t\tkey: 'name',\n\t\t\ttitle: 'Name',\n\t\t\tsortable: true,\n\t\t\tcustomRenderer: (value, row) => <div className=\"font-medium\">{value}</div>,\n\t\t},\n\t\t{\n\t\t\tkey: 'email',\n\t\t\ttitle: 'Email',\n\t\t\tsortable: true,\n\t\t\tcustomRenderer: (value) => (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Mail className=\"h-4 w-4 text-muted-foreground\" />\n\t\t\t\t\t<span className=\"text-sm\">{value}</span>\n\t\t\t\t</div>\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\tkey: 'phone',\n\t\t\ttitle: 'Phone',\n\t\t\tcustomRenderer: (value) => (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Phone className=\"h-4 w-4 text-muted-foreground\" />\n\t\t\t\t\t<span className=\"text-sm font-mono\">{value}</span>\n\t\t\t\t</div>\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\tkey: 'status',\n\t\t\ttitle: 'Status',\n\t\t\tsortable: true,\n\t\t\tcustomRenderer: (value) => (\n\t\t\t\t<Badge\n\t\t\t\t\tvariant={\n\t\t\t\t\t\tvalue === 'active'\n\t\t\t\t\t\t\t? 'default'\n\t\t\t\t\t\t\t: value === 'inactive'\n\t\t\t\t\t\t\t\t? 'destructive'\n\t\t\t\t\t\t\t\t: 'secondary'\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{value}\n\t\t\t\t</Badge>\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\tkey: 'role',\n\t\t\ttitle: 'Role',\n\t\t\tsortable: true,\n\t\t},\n\t\t{\n\t\t\tkey: 'department',\n\t\t\ttitle: 'Department',\n\t\t\tsortable: true,\n\t\t},\n\t\t{\n\t\t\tkey: 'joinDate',\n\t\t\ttitle: 'Join Date',\n\t\t\tsortable: true,\n\t\t\talign: 'right',\n\t\t\theaderClassName: 'bg-muted-foreground/10',\n\t\t\tcustomRenderer: (value) => (\n\t\t\t\t<span className=\"text-sm text-muted-foreground\">\n\t\t\t\t\t{new Date(value).toLocaleDateString()}\n\t\t\t\t</span>\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\tkey: 'id',\n\t\t\ttitle: 'Actions',\n\t\t\twidth: '100px',\n\t\t\tcustomRenderer: (_, row) => (\n\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t<Button variant=\"ghost\" size=\"sm\">\n\t\t\t\t\t\t<Edit className=\"h-4 w-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclassName=\"text-destructive hover:text-destructive\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetData((prev) => prev.filter((user) => user.id !== row.id))\n\t\t\t\t\t\t\ttoast.success(`User ${row.name} has been removed.`)\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Trash2 className=\"h-4 w-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t),\n\t\t},\n\t]\n\n\t// Define filters\n\tconst filters: DataTableFilter<User>[] = [\n\t\t{\n\t\t\tfield: 'status',\n\t\t\tlabel: 'Status',\n\n\t\t\toptions: [\n\t\t\t\t{ label: 'Active', value: 'active' },\n\t\t\t\t{ label: 'Inactive', value: 'inactive' },\n\t\t\t\t{ label: 'Pending', value: 'pending' },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tfield: 'role',\n\t\t\tlabel: 'Role',\n\t\t\toptions: [\n\t\t\t\t{ label: 'Admin', value: 'Admin' },\n\t\t\t\t{ label: 'User', value: 'User' },\n\t\t\t\t{ label: 'Manager', value: 'Manager' },\n\t\t\t\t{ label: 'Editor', value: 'Editor' },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tfield: 'department',\n\t\t\tlabel: 'Department',\n\t\t\toptions: [\n\t\t\t\t{ label: 'Engineering', value: 'Engineering' },\n\t\t\t\t{ label: 'Marketing', value: 'Marketing' },\n\t\t\t\t{ label: 'Sales', value: 'Sales' },\n\t\t\t\t{ label: 'HR', value: 'HR' },\n\t\t\t\t{ label: 'Finance', value: 'Finance' },\n\t\t\t],\n\t\t},\n\t]\n\n\t// Define which fields to search\n\tconst searchFields: (keyof User)[] = ['name', 'email', 'role', 'department']\n\n\t// Get selected count manually when needed\n\tconst updateSelectedCount = () => {\n\t\tif (tableRef.current) {\n\t\t\tconst selected = tableRef.current.getSelectedItems()\n\t\t\tsetSelectedCount(selected.length)\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"container mx-auto py-8\">\n\t\t\t<div className=\"mb-6 flex flex-wrap items-center justify-between gap-4\">\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-3xl font-bold\">User Management</h1>\n\t\t\t\t\t<p className=\"text-muted-foreground\">\n\t\t\t\t\t\tManage your users with advanced table features.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t<Button onClick={updateSelectedCount} variant=\"outline\">\n\t\t\t\t\t\tCheck Selection ({selectedCount})\n\t\t\t\t\t</Button>\n\t\t\t\t\t{selectedCount > 0 && (\n\t\t\t\t\t\t<Button variant=\"destructive\" onClick={handleBulkDelete}>\n\t\t\t\t\t\t\t<Trash2 className=\"h-4 w-4 mr-2\" />\n\t\t\t\t\t\t\tDelete Selected ({selectedCount})\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t<Button onClick={handleRefresh} disabled={loading} variant=\"outline\">\n\t\t\t\t\t\t<RefreshCw className={`h-4 w-4 mr-2 ${loading ? 'animate-spin' : ''}`} />\n\t\t\t\t\t\tRefresh\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<DataTable<User>\n\t\t\t\tref={tableRef}\n\t\t\t\tdata={data}\n\t\t\t\tcolumns={columns}\n\t\t\t\tsearchFields={searchFields}\n\t\t\t\tfilters={filters}\n\t\t\t\tactiveFilters={{ status: 'active', role: 'User' }}\n\t\t\t\tpageSize={10}\n\t\t\t\tclassName=\"w-full\"\n\t\t\t\tloading={loading}\n\t\t\t\ttools={{\n\t\t\t\t\trowSelector: {\n\t\t\t\t\t\thide: true,\n\t\t\t\t\t},\n\t\t\t\t\tsearch: {\n\t\t\t\t\t\tplaceholder: 'Search something...',\n\t\t\t\t\t},\n\t\t\t\t\tpagination: {\n\t\t\t\t\t\tlabel:\n\t\t\t\t\t\t\t'Displaying now {{startIndex}} to {{endIndex}} of total {{totalItems}} items',\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n\nexport const Default: Story = {\n\trender: Template.bind({}),\n\targs: {},\n}\n"],"names":["mockUsers","_","i","Template","loading","setLoading","useState","data","setData","selectedCount","setSelectedCount","tableRef","useRef","handleRefresh","handleBulkDelete","selectedItems","selectedIds","row","prev","user","toast","columns","value","jsxs","jsx","Mail","Phone","Badge","Button","Edit","Trash2","filters","searchFields","updateSelectedCount","selected","RefreshCw","DataTable"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { default as React } from 'react';
1
+ import type React from 'react';
2
2
  export interface DataTableColumn<T> {
3
3
  key: keyof T;
4
4
  /** The title of the column, can be a string or a React node */
@@ -1,2 +1,2 @@
1
- import { DataTableColumn } from '../types/data-table';
1
+ import type { DataTableColumn } from '../types/data-table';
2
2
  export declare function exportToCSV<T>(data: T[], columns: DataTableColumn<T>[], filename: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"export.js","sources":["../../../../src/blocks/data-table/utils/export.ts"],"sourcesContent":["import type { DataTableColumn } from '../types/data-table'\n\nexport function exportToCSV<T>(\n\tdata: T[],\n\tcolumns: DataTableColumn<T>[],\n\tfilename: string,\n) {\n\t// Get visible columns\n\tconst visibleColumns = columns.filter((col) => !col.hidden)\n\n\t// Create header row\n\tconst header = visibleColumns.map((col) => col.title)\n\n\t// Create data rows\n\tconst rows = data.map((item) =>\n\t\tvisibleColumns.map((col) => {\n\t\t\tconst value = item[col.key]\n\t\t\treturn value !== null && value !== undefined ? String(value) : ''\n\t\t}),\n\t)\n\n\t// Combine header and rows\n\tconst csvContent = [header.join(','), ...rows.map((row) => row.join(','))].join('\\n')\n\n\t// Create download link\n\tconst blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' })\n\tconst url = URL.createObjectURL(blob)\n\tconst link = document.createElement('a')\n\tlink.setAttribute('href', url)\n\tlink.setAttribute('download', `${filename}.csv`)\n\tlink.style.visibility = 'hidden'\n\tdocument.body.appendChild(link)\n\tlink.click()\n\tdocument.body.removeChild(link)\n}\n"],"names":["exportToCSV","data","columns","filename","visibleColumns","col","header","rows","item","value","csvContent","row","blob","url","link"],"mappings":"AAEgB,SAAAA,EACfC,EACAC,EACAC,EACC,CAED,MAAMC,EAAiBF,EAAQ,OAAQG,GAAQ,CAACA,EAAI,MAAM,EAGpDC,EAASF,EAAe,IAAKC,GAAQA,EAAI,KAAK,EAG9CE,EAAON,EAAK,IAAKO,GACtBJ,EAAe,IAAKC,GAAQ,CACrB,MAAAI,EAAQD,EAAKH,EAAI,GAAG,EAC1B,OAAOI,GAAU,KAA8B,OAAOA,CAAK,EAAI,EAC/D,CAAA,CACF,EAGMC,EAAa,CAACJ,EAAO,KAAK,GAAG,EAAG,GAAGC,EAAK,IAAKI,GAAQA,EAAI,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK;AAAA,CAAI,EAG9EC,EAAO,IAAI,KAAK,CAACF,CAAU,EAAG,CAAE,KAAM,0BAA2B,EACjEG,EAAM,IAAI,gBAAgBD,CAAI,EAC9BE,EAAO,SAAS,cAAc,GAAG,EAClCA,EAAA,aAAa,OAAQD,CAAG,EAC7BC,EAAK,aAAa,WAAY,GAAGX,CAAQ,MAAM,EAC/CW,EAAK,MAAM,WAAa,SACf,SAAA,KAAK,YAAYA,CAAI,EAC9BA,EAAK,MAAM,EACF,SAAA,KAAK,YAAYA,CAAI,CAC/B"}
1
+ {"version":3,"file":"export.js","sources":["../../../../src/blocks/data-table/utils/export.ts"],"sourcesContent":["import type { DataTableColumn } from '../types/data-table'\n\nexport function exportToCSV<T>(\n\tdata: T[],\n\tcolumns: DataTableColumn<T>[],\n\tfilename: string,\n) {\n\t// Get visible columns\n\tconst visibleColumns = columns.filter((col) => !col.hidden)\n\n\t// Create header row\n\tconst header = visibleColumns.map((col) => col.title)\n\n\t// Create data rows\n\tconst rows = data.map((item) =>\n\t\tvisibleColumns.map((col) => {\n\t\t\tconst value = item[col.key]\n\t\t\treturn value !== null && value !== undefined ? String(value) : ''\n\t\t}),\n\t)\n\n\t// Combine header and rows\n\tconst csvContent = [header.join(','), ...rows.map((row) => row.join(','))].join('\\n')\n\n\t// Create download link\n\tconst blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' })\n\tconst url = URL.createObjectURL(blob)\n\tconst link = document.createElement('a')\n\tlink.setAttribute('href', url)\n\tlink.setAttribute('download', `${filename}.csv`)\n\tlink.style.visibility = 'hidden'\n\tdocument.body.appendChild(link)\n\tlink.click()\n\tdocument.body.removeChild(link)\n}\n"],"names":["exportToCSV","data","columns","filename","visibleColumns","col","header","rows","item","value","csvContent","row","blob","url","link"],"mappings":"AAEO,SAASA,EACfC,EACAC,EACAC,EACC,CAED,MAAMC,EAAiBF,EAAQ,OAAQG,GAAQ,CAACA,EAAI,MAAM,EAGpDC,EAASF,EAAe,IAAKC,GAAQA,EAAI,KAAK,EAG9CE,EAAON,EAAK,IAAKO,GACtBJ,EAAe,IAAKC,GAAQ,CAC3B,MAAMI,EAAQD,EAAKH,EAAI,GAAG,EAC1B,OAAOI,GAAU,KAA8B,OAAOA,CAAK,EAAI,EAAA,CAC/D,CAAA,EAIIC,EAAa,CAACJ,EAAO,KAAK,GAAG,EAAG,GAAGC,EAAK,IAAKI,GAAQA,EAAI,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK;AAAA,CAAI,EAG9EC,EAAO,IAAI,KAAK,CAACF,CAAU,EAAG,CAAE,KAAM,0BAA2B,EACjEG,EAAM,IAAI,gBAAgBD,CAAI,EAC9BE,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,aAAa,OAAQD,CAAG,EAC7BC,EAAK,aAAa,WAAY,GAAGX,CAAQ,MAAM,EAC/CW,EAAK,MAAM,WAAa,SACxB,SAAS,KAAK,YAAYA,CAAI,EAC9BA,EAAK,MAAA,EACL,SAAS,KAAK,YAAYA,CAAI,CAC/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"empty-message.js","sources":["../../../src/blocks/empty-message/empty-message.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport { CircleOff } from 'lucide-react'\nimport { ReactElement, ReactNode } from 'react'\n\ntype EmptyItemsProps = {\n\tnotFoundText: string\n\tnotFoundAction?: ReactElement\n\ticon?: ReactNode\n\tclassName?: string\n}\n\nexport const EmptyItems = (props: EmptyItemsProps) => {\n\tconst { notFoundText, notFoundAction, icon, className } = props\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex flex-col gap-4 items-center bg-gray-200 rounded-lg p-6 justify-center',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{icon ? icon : <CircleOff size={45} />}\n\t\t\t<div className=\"text-lg font-medium m-0\">\n\t\t\t\t{notFoundText}\n\t\t\t\t{notFoundAction ? notFoundAction : null}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n"],"names":["EmptyItems","props","notFoundText","notFoundAction","icon","className","jsxs","cn","jsx","CircleOff"],"mappings":"oMAWa,MAAAA,EAAcC,GAA2B,CACrD,KAAM,CAAE,aAAAC,EAAc,eAAAC,EAAgB,KAAAC,EAAM,UAAAC,CAAc,EAAAJ,EAGzD,OAAAK,EAAA,KAAC,MAAA,CACA,UAAWC,EACV,6EACAF,CACD,EAEC,SAAA,CAAAD,GAAcI,EAAA,IAACC,EAAU,CAAA,KAAM,GAAI,EACpCH,EAAAA,KAAC,MAAI,CAAA,UAAU,0BACb,SAAA,CAAAJ,EACAC,GAAkC,IAAA,CACpC,CAAA,CAAA,CAAA,CACD,CAEF"}
1
+ {"version":3,"file":"empty-message.js","sources":["../../../src/blocks/empty-message/empty-message.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport { CircleOff } from 'lucide-react'\nimport { ReactElement, ReactNode } from 'react'\n\ntype EmptyItemsProps = {\n\tnotFoundText: string\n\tnotFoundAction?: ReactElement\n\ticon?: ReactNode\n\tclassName?: string\n}\n\nexport const EmptyItems = (props: EmptyItemsProps) => {\n\tconst { notFoundText, notFoundAction, icon, className } = props\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex flex-col gap-4 items-center bg-gray-200 rounded-lg p-6 justify-center',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{icon ? icon : <CircleOff size={45} />}\n\t\t\t<div className=\"text-lg font-medium m-0\">\n\t\t\t\t{notFoundText}\n\t\t\t\t{notFoundAction ? notFoundAction : null}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n"],"names":["EmptyItems","props","notFoundText","notFoundAction","icon","className","jsxs","cn","jsx","CircleOff"],"mappings":"oMAWO,MAAMA,EAAcC,GAA2B,CACrD,KAAM,CAAE,aAAAC,EAAc,eAAAC,EAAgB,KAAAC,EAAM,UAAAC,GAAcJ,EAE1D,OACCK,EAAAA,KAAC,MAAA,CACA,UAAWC,EACV,6EACAF,CAAA,EAGA,SAAA,CAAAD,GAAcI,EAAAA,IAACC,EAAA,CAAU,KAAM,GAAI,EACpCH,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAJ,EACAC,GAAkC,IAAA,CAAA,CACpC,CAAA,CAAA,CAAA,CAGH"}
@@ -1 +1 @@
1
- {"version":3,"file":"empty-message.stories.js","sources":["../../../src/blocks/empty-message/empty-message.stories.tsx"],"sourcesContent":["// organize-imports-ignore\nimport React from 'react'\nimport type { Meta, StoryObj } from '@storybook/react'\nimport { EmptyItems } from './empty-message'\n\nconst meta: Meta<typeof EmptyItems> = {\n\tcomponent: EmptyItems,\n}\n\nexport default meta\ntype Story = StoryObj<typeof EmptyItems>\n\nconst Template = () => (\n\t<EmptyItems\n\t\tnotFoundText=\"No item found!\"\n\t\tnotFoundAction={\n\t\t\t<p className=\"text-sm italic text-gray-600 text-center\">Try again later</p>\n\t\t}\n\t/>\n)\n\nexport const Default: Story = {\n\trender: Template.bind({}),\n\targs: {},\n}\n"],"names":["Template","jsx","EmptyItems"],"mappings":"2MAYA,MAAMA,EAAW,IAChBC,EAAA,IAACC,EAAA,CACA,aAAa,iBACb,eACCD,EAAA,IAAC,IAAE,CAAA,UAAU,2CAA2C,SAAe,iBAAA,CAAA,CAAA,CAEzE,EAIQD,EAAS,KAAK,EAAE"}
1
+ {"version":3,"file":"empty-message.stories.js","sources":["../../../src/blocks/empty-message/empty-message.stories.tsx"],"sourcesContent":["// organize-imports-ignore\nimport React from 'react'\nimport type { Meta, StoryObj } from '@storybook/react'\nimport { EmptyItems } from './empty-message'\n\nconst meta: Meta<typeof EmptyItems> = {\n\tcomponent: EmptyItems,\n}\n\nexport default meta\ntype Story = StoryObj<typeof EmptyItems>\n\nconst Template = () => (\n\t<EmptyItems\n\t\tnotFoundText=\"No item found!\"\n\t\tnotFoundAction={\n\t\t\t<p className=\"text-sm italic text-gray-600 text-center\">Try again later</p>\n\t\t}\n\t/>\n)\n\nexport const Default: Story = {\n\trender: Template.bind({}),\n\targs: {},\n}\n"],"names":["Template","jsx","EmptyItems"],"mappings":"2MAYA,MAAMA,EAAW,IAChBC,EAAAA,IAACC,EAAA,CACA,aAAa,iBACb,eACCD,EAAAA,IAAC,IAAA,CAAE,UAAU,2CAA2C,SAAA,iBAAA,CAAe,CAAA,CAEzE,EAIQD,EAAS,KAAK,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"help-carousel.js","sources":["../../../src/blocks/help-carousel/help-carousel.tsx"],"sourcesContent":["import {\n\tButton,\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from '@/components'\nimport { cn } from '@/lib/utils'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useState } from 'react'\n\ninterface HelpCarouselProps {\n\ttriggerElement: React.ReactNode\n\tsteps: {\n\t\ttitle: string\n\t\tdescription: string | React.ReactNode\n\t}[]\n}\n\nexport function HelpCarousel(props: HelpCarouselProps) {\n\tconst { triggerElement, steps } = props\n\n\tconst [open, setOpen] = useState(false)\n\tconst [currentStep, setCurrentStep] = useState(0)\n\n\tconst handleNext = () => {\n\t\tsetCurrentStep((prev) => (prev < steps.length - 1 ? prev + 1 : prev))\n\t}\n\n\tconst handlePrevious = () => {\n\t\tsetCurrentStep((prev) => (prev > 0 ? prev - 1 : prev))\n\t}\n\n\treturn (\n\t\t<Dialog open={open} onOpenChange={setOpen}>\n\t\t\t<DialogTrigger asChild>{triggerElement}</DialogTrigger>\n\t\t\t<DialogContent className=\"sm:max-w-[425px]\">\n\t\t\t\t<DialogHeader className={cn(steps[currentStep].title === '' && 'sr-only')}>\n\t\t\t\t\t<DialogTitle>{steps[currentStep].title}</DialogTitle>\n\t\t\t\t\t<DialogDescription className=\"sr-only\">\n\t\t\t\t\t\t{steps[currentStep].title}\n\t\t\t\t\t</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<div>{steps[currentStep].description}</div>\n\t\t\t\t<div className=\"flex items-center justify-between mt-4\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tonClick={handlePrevious}\n\t\t\t\t\t\tdisabled={currentStep === 0}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronLeft className=\"h-4 w-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<div className=\"flex justify-center gap-1\">\n\t\t\t\t\t\t{steps.map((_, index) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'h-3 w-3 rounded-full',\n\t\t\t\t\t\t\t\t\tindex === currentStep ? 'bg-primary' : 'bg-gray-200',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\t\tdisabled={currentStep === steps.length - 1}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronRight className=\"h-4 w-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t)\n}\n"],"names":["HelpCarousel","props","triggerElement","steps","open","setOpen","useState","currentStep","setCurrentStep","handleNext","prev","handlePrevious","jsxs","Dialog","jsx","DialogTrigger","DialogContent","DialogHeader","cn","DialogTitle","DialogDescription","Button","ChevronLeft","_","index","ChevronRight"],"mappings":"ylFAqBO,SAASA,GAAaC,EAA0B,CAChD,KAAA,CAAE,eAAAC,EAAgB,MAAAC,CAAA,EAAUF,EAE5B,CAACG,EAAMC,CAAO,EAAIC,EAAS,EAAK,EAChC,CAACC,EAAaC,CAAc,EAAIF,EAAS,CAAC,EAE1CG,EAAa,IAAM,CACTD,EAACE,GAAUA,EAAOP,EAAM,OAAS,EAAIO,EAAO,EAAIA,CAAK,CACrE,EAEMC,EAAiB,IAAM,CAC5BH,EAAgBE,GAAUA,EAAO,EAAIA,EAAO,EAAIA,CAAK,CACtD,EAEA,OACEE,EAAAA,KAAAC,EAAA,CAAO,KAAAT,EAAY,aAAcC,EACjC,SAAA,CAACS,EAAA,IAAAC,EAAA,CAAc,QAAO,GAAE,SAAeb,EAAA,EACvCU,EAAAA,KAACI,EAAc,CAAA,UAAU,mBACxB,SAAA,CAACJ,EAAAA,KAAAK,EAAA,CAAa,UAAWC,EAAGf,EAAMI,CAAW,EAAE,QAAU,IAAM,SAAS,EACvE,SAAA,CAAAO,EAAA,IAACK,EAAa,CAAA,SAAAhB,EAAMI,CAAW,EAAE,MAAM,QACtCa,EAAkB,CAAA,UAAU,UAC3B,SAAMjB,EAAAI,CAAW,EAAE,KACrB,CAAA,CAAA,EACD,EACCO,EAAA,IAAA,MAAA,CAAK,SAAMX,EAAAI,CAAW,EAAE,YAAY,EACrCK,EAAAA,KAAC,MAAI,CAAA,UAAU,yCACd,SAAA,CAAAE,EAAA,IAACO,EAAA,CACA,QAAQ,QACR,KAAK,OACL,QAASV,EACT,SAAUJ,IAAgB,EAE1B,SAAAO,EAAAA,IAACQ,EAAY,CAAA,UAAU,SAAU,CAAA,CAAA,CAClC,EACAR,EAAAA,IAAC,OAAI,UAAU,4BACb,WAAM,IAAI,CAACS,EAAGC,IACdV,EAAA,IAAC,MAAA,CAEA,UAAWI,EACV,uBACAM,IAAUjB,EAAc,aAAe,aAAA,CACxC,EAJKiB,CAMN,CAAA,EACF,EACAV,EAAA,IAACO,EAAA,CACA,QAAQ,QACR,KAAK,OACL,QAASZ,EACT,SAAUF,IAAgBJ,EAAM,OAAS,EAEzC,SAAAW,EAAAA,IAACW,EAAa,CAAA,UAAU,SAAU,CAAA,CAAA,CAAA,CACnC,CACD,CAAA,CAAA,CACD,CAAA,CAAA,EACD,CAEF"}
1
+ {"version":3,"file":"help-carousel.js","sources":["../../../src/blocks/help-carousel/help-carousel.tsx"],"sourcesContent":["import {\n\tButton,\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from '@/components'\nimport { cn } from '@/lib/utils'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useState } from 'react'\n\ninterface HelpCarouselProps {\n\ttriggerElement: React.ReactNode\n\tsteps: {\n\t\ttitle: string\n\t\tdescription: string | React.ReactNode\n\t}[]\n}\n\nexport function HelpCarousel(props: HelpCarouselProps) {\n\tconst { triggerElement, steps } = props\n\n\tconst [open, setOpen] = useState(false)\n\tconst [currentStep, setCurrentStep] = useState(0)\n\n\tconst handleNext = () => {\n\t\tsetCurrentStep((prev) => (prev < steps.length - 1 ? prev + 1 : prev))\n\t}\n\n\tconst handlePrevious = () => {\n\t\tsetCurrentStep((prev) => (prev > 0 ? prev - 1 : prev))\n\t}\n\n\treturn (\n\t\t<Dialog open={open} onOpenChange={setOpen}>\n\t\t\t<DialogTrigger asChild>{triggerElement}</DialogTrigger>\n\t\t\t<DialogContent className=\"sm:max-w-[425px]\">\n\t\t\t\t<DialogHeader className={cn(steps[currentStep].title === '' && 'sr-only')}>\n\t\t\t\t\t<DialogTitle>{steps[currentStep].title}</DialogTitle>\n\t\t\t\t\t<DialogDescription className=\"sr-only\">\n\t\t\t\t\t\t{steps[currentStep].title}\n\t\t\t\t\t</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<div>{steps[currentStep].description}</div>\n\t\t\t\t<div className=\"flex items-center justify-between mt-4\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tonClick={handlePrevious}\n\t\t\t\t\t\tdisabled={currentStep === 0}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronLeft className=\"h-4 w-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<div className=\"flex justify-center gap-1\">\n\t\t\t\t\t\t{steps.map((_, index) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'h-3 w-3 rounded-full',\n\t\t\t\t\t\t\t\t\tindex === currentStep ? 'bg-primary' : 'bg-gray-200',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tonClick={handleNext}\n\t\t\t\t\t\tdisabled={currentStep === steps.length - 1}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronRight className=\"h-4 w-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t)\n}\n"],"names":["HelpCarousel","props","triggerElement","steps","open","setOpen","useState","currentStep","setCurrentStep","handleNext","prev","handlePrevious","jsxs","Dialog","jsx","DialogTrigger","DialogContent","DialogHeader","cn","DialogTitle","DialogDescription","Button","ChevronLeft","_","index","ChevronRight"],"mappings":"ylFAqBO,SAASA,GAAaC,EAA0B,CACtD,KAAM,CAAE,eAAAC,EAAgB,MAAAC,CAAA,EAAUF,EAE5B,CAACG,EAAMC,CAAO,EAAIC,EAAS,EAAK,EAChC,CAACC,EAAaC,CAAc,EAAIF,EAAS,CAAC,EAE1CG,EAAa,IAAM,CACxBD,EAAgBE,GAAUA,EAAOP,EAAM,OAAS,EAAIO,EAAO,EAAIA,CAAK,CAAA,EAG/DC,EAAiB,IAAM,CAC5BH,EAAgBE,GAAUA,EAAO,EAAIA,EAAO,EAAIA,CAAK,CAAA,EAGtD,OACCE,EAAAA,KAACC,EAAA,CAAO,KAAAT,EAAY,aAAcC,EACjC,SAAA,CAAAS,EAAAA,IAACC,EAAA,CAAc,QAAO,GAAE,SAAAb,EAAe,EACvCU,EAAAA,KAACI,EAAA,CAAc,UAAU,mBACxB,SAAA,CAAAJ,EAAAA,KAACK,EAAA,CAAa,UAAWC,EAAGf,EAAMI,CAAW,EAAE,QAAU,IAAM,SAAS,EACvE,SAAA,CAAAO,EAAAA,IAACK,EAAA,CAAa,SAAAhB,EAAMI,CAAW,EAAE,MAAM,QACtCa,EAAA,CAAkB,UAAU,UAC3B,SAAAjB,EAAMI,CAAW,EAAE,KAAA,CACrB,CAAA,EACD,EACAO,EAAAA,IAAC,MAAA,CAAK,SAAAX,EAAMI,CAAW,EAAE,YAAY,EACrCK,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACd,SAAA,CAAAE,EAAAA,IAACO,EAAA,CACA,QAAQ,QACR,KAAK,OACL,QAASV,EACT,SAAUJ,IAAgB,EAE1B,SAAAO,EAAAA,IAACQ,EAAA,CAAY,UAAU,SAAA,CAAU,CAAA,CAAA,EAElCR,EAAAA,IAAC,OAAI,UAAU,4BACb,WAAM,IAAI,CAACS,EAAGC,IACdV,EAAAA,IAAC,MAAA,CAEA,UAAWI,EACV,uBACAM,IAAUjB,EAAc,aAAe,aAAA,CACxC,EAJKiB,CAAA,CAMN,EACF,EACAV,EAAAA,IAACO,EAAA,CACA,QAAQ,QACR,KAAK,OACL,QAASZ,EACT,SAAUF,IAAgBJ,EAAM,OAAS,EAEzC,SAAAW,EAAAA,IAACW,EAAA,CAAa,UAAU,SAAA,CAAU,CAAA,CAAA,CACnC,CAAA,CACD,CAAA,CAAA,CACD,CAAA,EACD,CAEF"}
@@ -1 +1 @@
1
- {"version":3,"file":"help-carousel.stories.js","sources":["../../../src/blocks/help-carousel/help-carousel.stories.tsx"],"sourcesContent":["// organize-imports-ignore\nimport React from 'react'\nimport type { Meta, StoryObj } from '@storybook/react'\nimport { HelpCarousel } from './help-carousel'\nimport { BadgeHelp, HelpCircle, Phone, User } from 'lucide-react'\nimport { Button } from '../../components/button'\n\nconst meta: Meta<typeof HelpCarousel> = {\n\tcomponent: HelpCarousel,\n}\n\nexport default meta\ntype Story = StoryObj<typeof HelpCarousel>\n\nconst helpSteps = [\n\t{\n\t\ttitle: 'Welcome to Our App',\n\t\tdescription: \"Let's walk you through the main features of our application.\",\n\t},\n\t{\n\t\ttitle: 'Dashboard Overview',\n\t\tdescription:\n\t\t\t'Your dashboard shows you a summary of your recent activity and key metrics.',\n\t},\n\t{\n\t\ttitle: 'Creating a New Project',\n\t\tdescription:\n\t\t\t\"Click the 'New Project' button to start a new project and fill in the details.\",\n\t},\n\t{\n\t\ttitle: 'Inviting Team Members',\n\t\tdescription:\n\t\t\t\"You can invite team members to collaborate on your projects from the 'Team' tab.\",\n\t},\n]\n\nconst Template = () => {\n\treturn (\n\t\t<HelpCarousel\n\t\t\tsteps={helpSteps}\n\t\t\ttriggerElement={\n\t\t\t\t<Button variant=\"outline\" size=\"xl\">\n\t\t\t\t\t<BadgeHelp />\n\t\t\t\t</Button>\n\t\t\t}\n\t\t/>\n\t)\n}\n\nexport const Default: Story = {\n\trender: Template.bind({}),\n\targs: {},\n}\n"],"names":["helpSteps","Template","jsx","HelpCarousel","Button","BadgeHelp"],"mappings":"8hFAcA,MAAMA,EAAY,CACjB,CACC,MAAO,qBACP,YAAa,8DACd,EACA,CACC,MAAO,qBACP,YACC,6EACF,EACA,CACC,MAAO,yBACP,YACC,gFACF,EACA,CACC,MAAO,wBACP,YACC,kFAAA,CAEH,EAEMC,EAAW,IAEfC,EAAA,IAACC,EAAA,CACA,MAAOH,EACP,qBACEI,EAAO,CAAA,QAAQ,UAAU,KAAK,KAC9B,SAACF,EAAAA,IAAAG,EAAA,CAAU,CAAA,CACZ,CAAA,CAAA,CAEF,EAKOJ,EAAS,KAAK,EAAE"}
1
+ {"version":3,"file":"help-carousel.stories.js","sources":["../../../src/blocks/help-carousel/help-carousel.stories.tsx"],"sourcesContent":["// organize-imports-ignore\nimport React from 'react'\nimport type { Meta, StoryObj } from '@storybook/react'\nimport { HelpCarousel } from './help-carousel'\nimport { BadgeHelp, HelpCircle, Phone, User } from 'lucide-react'\nimport { Button } from '../../components/button'\n\nconst meta: Meta<typeof HelpCarousel> = {\n\tcomponent: HelpCarousel,\n}\n\nexport default meta\ntype Story = StoryObj<typeof HelpCarousel>\n\nconst helpSteps = [\n\t{\n\t\ttitle: 'Welcome to Our App',\n\t\tdescription: \"Let's walk you through the main features of our application.\",\n\t},\n\t{\n\t\ttitle: 'Dashboard Overview',\n\t\tdescription:\n\t\t\t'Your dashboard shows you a summary of your recent activity and key metrics.',\n\t},\n\t{\n\t\ttitle: 'Creating a New Project',\n\t\tdescription:\n\t\t\t\"Click the 'New Project' button to start a new project and fill in the details.\",\n\t},\n\t{\n\t\ttitle: 'Inviting Team Members',\n\t\tdescription:\n\t\t\t\"You can invite team members to collaborate on your projects from the 'Team' tab.\",\n\t},\n]\n\nconst Template = () => {\n\treturn (\n\t\t<HelpCarousel\n\t\t\tsteps={helpSteps}\n\t\t\ttriggerElement={\n\t\t\t\t<Button variant=\"outline\" size=\"xl\">\n\t\t\t\t\t<BadgeHelp />\n\t\t\t\t</Button>\n\t\t\t}\n\t\t/>\n\t)\n}\n\nexport const Default: Story = {\n\trender: Template.bind({}),\n\targs: {},\n}\n"],"names":["helpSteps","Template","jsx","HelpCarousel","Button","BadgeHelp"],"mappings":"8hFAcA,MAAMA,EAAY,CACjB,CACC,MAAO,qBACP,YAAa,8DAAA,EAEd,CACC,MAAO,qBACP,YACC,6EAAA,EAEF,CACC,MAAO,yBACP,YACC,gFAAA,EAEF,CACC,MAAO,wBACP,YACC,kFAAA,CAEH,EAEMC,EAAW,IAEfC,EAAAA,IAACC,EAAA,CACA,MAAOH,EACP,qBACEI,EAAA,CAAO,QAAQ,UAAU,KAAK,KAC9B,SAAAF,EAAAA,IAACG,EAAA,CAAA,CAAU,CAAA,CACZ,CAAA,CAAA,EAOKJ,EAAS,KAAK,EAAE"}
@@ -1,3 +1,4 @@
1
+ import './unreset.css';
1
2
  export declare const HtmlTextArea: (props: {
2
3
  children: string;
3
4
  }) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"html-text-area.js","sources":["../../../src/blocks/html-text-editor/html-text-area.tsx"],"sourcesContent":["import './unreset.css'\n\nexport const HtmlTextArea = (props: { children: string }) => {\n\treturn (\n\t\t<div className=\"unreset\" dangerouslySetInnerHTML={{ __html: props.children }}></div>\n\t)\n}\n"],"names":["HtmlTextArea","props","jsx"],"mappings":"kGAEa,MAAAA,EAAgBC,GAE3BC,MAAC,OAAI,UAAU,UAAU,wBAAyB,CAAE,OAAQD,EAAM,QAAA,EAAY"}
1
+ {"version":3,"file":"html-text-area.js","sources":["../../../src/blocks/html-text-editor/html-text-area.tsx"],"sourcesContent":["import './unreset.css'\n\nexport const HtmlTextArea = (props: { children: string }) => {\n\treturn (\n\t\t<div className=\"unreset\" dangerouslySetInnerHTML={{ __html: props.children }}></div>\n\t)\n}\n"],"names":["HtmlTextArea","props","jsx"],"mappings":"kGAEO,MAAMA,EAAgBC,GAE3BC,MAAC,OAAI,UAAU,UAAU,wBAAyB,CAAE,OAAQD,EAAM,QAAA,EAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"html-text-area.stories.js","sources":["../../../src/blocks/html-text-editor/html-text-area.stories.tsx"],"sourcesContent":["// organize-imports-ignore\nimport React from 'react'\nimport type { Meta, StoryObj } from '@storybook/react'\nimport { HtmlTextArea } from './html-text-area'\n\nconst meta: Meta<typeof HtmlTextArea> = {\n\tcomponent: HtmlTextArea,\n\tparameters: {\n\t\tstatus: {\n\t\t\ttype: 'beta', // 'beta' | 'stable' | 'deprecated' | 'releaseCandidate'\n\t\t},\n\t},\n}\n\nexport default meta\ntype Story = StoryObj<typeof HtmlTextArea>\n\nconst Template = () => {\n\treturn (\n\t\t<div className=\"h-96 border rounded p-2\">\n\t\t\t<HtmlTextArea>\n\t\t\t\t{`<p>hello world</p>\n\t\t\t\t<ul>\n\t\t\t\t\t<li>1</li>\n\t\t\t\t\t<li>2</li>\n\t\t\t\t\t<li>3</li>\n\t\t\t\t\t<li>4</li>\n\t\t\t\t</ul>`}\n\t\t\t</HtmlTextArea>\n\t\t</div>\n\t)\n}\n\nexport const Default: Story = {\n\trender: Template.bind({}),\n\targs: {},\n}\n"],"names":["Template","jsx","HtmlTextArea"],"mappings":"0IAiBA,MAAMA,EAAW,IAEdC,EAAA,IAAA,MAAA,CAAI,UAAU,0BACd,eAACC,EACC,CAAA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAOF,CACD,CAAA,EAKOF,EAAS,KAAK,EAAE"}
1
+ {"version":3,"file":"html-text-area.stories.js","sources":["../../../src/blocks/html-text-editor/html-text-area.stories.tsx"],"sourcesContent":["// organize-imports-ignore\nimport React from 'react'\nimport type { Meta, StoryObj } from '@storybook/react'\nimport { HtmlTextArea } from './html-text-area'\n\nconst meta: Meta<typeof HtmlTextArea> = {\n\tcomponent: HtmlTextArea,\n\tparameters: {\n\t\tstatus: {\n\t\t\ttype: 'beta', // 'beta' | 'stable' | 'deprecated' | 'releaseCandidate'\n\t\t},\n\t},\n}\n\nexport default meta\ntype Story = StoryObj<typeof HtmlTextArea>\n\nconst Template = () => {\n\treturn (\n\t\t<div className=\"h-96 border rounded p-2\">\n\t\t\t<HtmlTextArea>\n\t\t\t\t{`<p>hello world</p>\n\t\t\t\t<ul>\n\t\t\t\t\t<li>1</li>\n\t\t\t\t\t<li>2</li>\n\t\t\t\t\t<li>3</li>\n\t\t\t\t\t<li>4</li>\n\t\t\t\t</ul>`}\n\t\t\t</HtmlTextArea>\n\t\t</div>\n\t)\n}\n\nexport const Default: Story = {\n\trender: Template.bind({}),\n\targs: {},\n}\n"],"names":["Template","jsx","HtmlTextArea"],"mappings":"0IAiBA,MAAMA,EAAW,IAEfC,EAAAA,IAAC,MAAA,CAAI,UAAU,0BACd,eAACC,EAAA,CACC,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAOF,CAAA,CACD,EAKOF,EAAS,KAAK,EAAE"}
@@ -1,4 +1,5 @@
1
- import { default as React } from 'react';
1
+ import React from 'react';
2
+ import './unreset.css';
2
3
  interface TextEditorProps {
3
4
  initialValue?: string;
4
5
  onChange?: (value: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"html-text-editor.js","sources":["../../../src/blocks/html-text-editor/html-text-editor.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport React, { useEffect, useRef } from 'react'\nimport { OptionsBar } from './options-bar'\nimport './unreset.css'\n\ninterface TextEditorProps {\n\tinitialValue?: string\n\tonChange?: (value: string) => void\n\tclassName?: string\n}\n\nexport const HtmlTextEditor: React.FC<TextEditorProps> = ({\n\tinitialValue = '',\n\tonChange,\n\tclassName,\n}) => {\n\tconst editorRef = useRef<HTMLDivElement>(null)\n\n\tuseEffect(() => {\n\t\tconst observer = new MutationObserver(() => {\n\t\t\tonChange?.(editorRef.current ? editorRef.current.innerHTML : '')\n\t\t})\n\n\t\tif (editorRef.current) {\n\t\t\tobserver.observe(editorRef.current, { childList: true })\n\t\t}\n\t}, [])\n\n\tuseEffect(() => {\n\t\tif (editorRef.current) {\n\t\t\teditorRef.current.innerHTML = initialValue\n\t\t}\n\t}, [])\n\n\tconst handleInput = () => {\n\t\tif (editorRef.current) {\n\t\t\tonChange?.(editorRef.current.innerHTML)\n\t\t}\n\t}\n\n\tconst execCommand = (command: string, value?: string) => {\n\t\tif (editorRef.current) {\n\t\t\tdocument.execCommand(command, false, value)\n\t\t\thandleInput()\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className={cn('w-full p-4 border rounded-lg shadow-md', className)}>\n\t\t\t<OptionsBar execCommand={execCommand} />\n\n\t\t\t{/* <pre\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'w-full p-2 border rounded overflow-auto bg-gray-900 text-white',\n\t\t\t\t\t!showHtml && 'hidden',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tref={editorHtmlRef}\n\t\t\t\t\tdangerouslySetInnerHTML={{ __html: formattedHtml }}\n\t\t\t\t\tclassName=\"focus:outline-none\"\n\t\t\t\t/>\n\t\t\t</pre> */}\n\n\t\t\t{/* <textarea\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'w-full h-48 p-2 border rounded overflow-auto bg-gray-900 text-white font-mono',\n\t\t\t\t\t!showHtml && 'hidden',\n\t\t\t\t)}\n\t\t\t\tvalue={htmlContent}\n\t\t\t\tonChange={(e) => {\n\t\t\t\t\tsetHtmlContent(e.target.value)\n\t\t\t\t\tonChange?.(e.target.value)\n\t\t\t\t}}\n\t\t\t/> */}\n\n\t\t\t<div\n\t\t\t\tref={editorRef}\n\t\t\t\tcontentEditable\n\t\t\t\tclassName=\"w-full h-48 p-2 border rounded overflow-y-auto focus:outline-none min-h-20 resize-y unreset\"\n\t\t\t\tonInput={handleInput}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["HtmlTextEditor","initialValue","onChange","className","editorRef","useRef","useEffect","observer","handleInput","execCommand","command","value","cn","jsx","OptionsBar"],"mappings":"ilFAWO,MAAMA,GAA4C,CAAC,CACzD,aAAAC,EAAe,GACf,SAAAC,EACA,UAAAC,CACD,IAAM,CACC,MAAAC,EAAYC,EAAuB,IAAI,EAE7CC,EAAU,IAAM,CACT,MAAAC,EAAW,IAAI,iBAAiB,IAAM,CAC3CL,GAAA,MAAAA,EAAWE,EAAU,QAAUA,EAAU,QAAQ,UAAY,GAAE,CAC/D,EAEGA,EAAU,SACbG,EAAS,QAAQH,EAAU,QAAS,CAAE,UAAW,GAAM,CAEzD,EAAG,EAAE,EAELE,EAAU,IAAM,CACXF,EAAU,UACbA,EAAU,QAAQ,UAAYH,EAEhC,EAAG,EAAE,EAEL,MAAMO,EAAc,IAAM,CACrBJ,EAAU,UACFF,GAAA,MAAAA,EAAAE,EAAU,QAAQ,WAE/B,EAEMK,EAAc,CAACC,EAAiBC,IAAmB,CACpDP,EAAU,UACJ,SAAA,YAAYM,EAAS,GAAOC,CAAK,EAC9BH,EAAA,EAEd,EAEA,cACE,MAAI,CAAA,UAAWI,EAAG,yCAA0CT,CAAS,EACrE,SAAA,CAAAU,MAACC,GAAW,YAAAL,EAA0B,EA2BtCI,EAAA,IAAC,MAAA,CACA,IAAKT,EACL,gBAAe,GACf,UAAU,8FACV,QAASI,CAAA,CAAA,CACV,EACD,CAEF"}
1
+ {"version":3,"file":"html-text-editor.js","sources":["../../../src/blocks/html-text-editor/html-text-editor.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport React, { useEffect, useRef } from 'react'\nimport { OptionsBar } from './options-bar'\nimport './unreset.css'\n\ninterface TextEditorProps {\n\tinitialValue?: string\n\tonChange?: (value: string) => void\n\tclassName?: string\n}\n\nexport const HtmlTextEditor: React.FC<TextEditorProps> = ({\n\tinitialValue = '',\n\tonChange,\n\tclassName,\n}) => {\n\tconst editorRef = useRef<HTMLDivElement>(null)\n\n\tuseEffect(() => {\n\t\tconst observer = new MutationObserver(() => {\n\t\t\tonChange?.(editorRef.current ? editorRef.current.innerHTML : '')\n\t\t})\n\n\t\tif (editorRef.current) {\n\t\t\tobserver.observe(editorRef.current, { childList: true })\n\t\t}\n\t}, [])\n\n\tuseEffect(() => {\n\t\tif (editorRef.current) {\n\t\t\teditorRef.current.innerHTML = initialValue\n\t\t}\n\t}, [])\n\n\tconst handleInput = () => {\n\t\tif (editorRef.current) {\n\t\t\tonChange?.(editorRef.current.innerHTML)\n\t\t}\n\t}\n\n\tconst execCommand = (command: string, value?: string) => {\n\t\tif (editorRef.current) {\n\t\t\tdocument.execCommand(command, false, value)\n\t\t\thandleInput()\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className={cn('w-full p-4 border rounded-lg shadow-md', className)}>\n\t\t\t<OptionsBar execCommand={execCommand} />\n\n\t\t\t{/* <pre\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'w-full p-2 border rounded overflow-auto bg-gray-900 text-white',\n\t\t\t\t\t!showHtml && 'hidden',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tref={editorHtmlRef}\n\t\t\t\t\tdangerouslySetInnerHTML={{ __html: formattedHtml }}\n\t\t\t\t\tclassName=\"focus:outline-none\"\n\t\t\t\t/>\n\t\t\t</pre> */}\n\n\t\t\t{/* <textarea\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'w-full h-48 p-2 border rounded overflow-auto bg-gray-900 text-white font-mono',\n\t\t\t\t\t!showHtml && 'hidden',\n\t\t\t\t)}\n\t\t\t\tvalue={htmlContent}\n\t\t\t\tonChange={(e) => {\n\t\t\t\t\tsetHtmlContent(e.target.value)\n\t\t\t\t\tonChange?.(e.target.value)\n\t\t\t\t}}\n\t\t\t/> */}\n\n\t\t\t<div\n\t\t\t\tref={editorRef}\n\t\t\t\tcontentEditable\n\t\t\t\tclassName=\"w-full h-48 p-2 border rounded overflow-y-auto focus:outline-none min-h-20 resize-y unreset\"\n\t\t\t\tonInput={handleInput}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["HtmlTextEditor","initialValue","onChange","className","editorRef","useRef","useEffect","observer","handleInput","execCommand","command","value","cn","jsx","OptionsBar"],"mappings":"ilFAWO,MAAMA,GAA4C,CAAC,CACzD,aAAAC,EAAe,GACf,SAAAC,EACA,UAAAC,CACD,IAAM,CACL,MAAMC,EAAYC,EAAuB,IAAI,EAE7CC,EAAU,IAAM,CACf,MAAMC,EAAW,IAAI,iBAAiB,IAAM,CAC3CL,GAAA,MAAAA,EAAWE,EAAU,QAAUA,EAAU,QAAQ,UAAY,GAAE,CAC/D,EAEGA,EAAU,SACbG,EAAS,QAAQH,EAAU,QAAS,CAAE,UAAW,GAAM,CACxD,EACE,EAAE,EAELE,EAAU,IAAM,CACXF,EAAU,UACbA,EAAU,QAAQ,UAAYH,EAC/B,EACE,EAAE,EAEL,MAAMO,EAAc,IAAM,CACrBJ,EAAU,UACbF,GAAA,MAAAA,EAAWE,EAAU,QAAQ,WAC9B,EAGKK,EAAc,CAACC,EAAiBC,IAAmB,CACpDP,EAAU,UACb,SAAS,YAAYM,EAAS,GAAOC,CAAK,EAC1CH,EAAA,EACD,EAGD,cACE,MAAA,CAAI,UAAWI,EAAG,yCAA0CT,CAAS,EACrE,SAAA,CAAAU,MAACC,GAAW,YAAAL,EAA0B,EA2BtCI,EAAAA,IAAC,MAAA,CACA,IAAKT,EACL,gBAAe,GACf,UAAU,8FACV,QAASI,CAAA,CAAA,CACV,EACD,CAEF"}