@gbmtech/aurora-ui 0.4.73 → 0.4.74

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 (243) hide show
  1. package/dist/cjs/components/alert-dialog.cjs +1 -1
  2. package/dist/cjs/components/app-layout/sidebar/sidebar.cjs +1 -1
  3. package/dist/cjs/components/avatar.cjs +1 -1
  4. package/dist/cjs/components/badge.cjs +1 -1
  5. package/dist/cjs/components/breadcrumb.cjs +1 -1
  6. package/dist/cjs/components/command.cjs +1 -1
  7. package/dist/cjs/components/context-menu.cjs +1 -1
  8. package/dist/cjs/components/data-table/data-table-action-bar.cjs +1 -1
  9. package/dist/cjs/components/data-table/index.cjs +1 -1
  10. package/dist/cjs/components/data-table/index.cjs.map +1 -1
  11. package/dist/cjs/components/date-picker-with-range.cjs +1 -1
  12. package/dist/cjs/components/date-picker-with-range.cjs.map +1 -1
  13. package/dist/cjs/components/dialog.cjs +1 -1
  14. package/dist/cjs/components/dropdown-menu.cjs +1 -1
  15. package/dist/cjs/components/faceted.cjs +1 -1
  16. package/dist/cjs/components/form.cjs +1 -1
  17. package/dist/cjs/components/input-otp.cjs +1 -1
  18. package/dist/cjs/components/multi-select.cjs +1 -1
  19. package/dist/cjs/components/multi-select.cjs.map +1 -1
  20. package/dist/cjs/components/pagination.cjs +1 -1
  21. package/dist/cjs/components/select.cjs +1 -1
  22. package/dist/cjs/components/separator.cjs +1 -1
  23. package/dist/cjs/components/sheet/sheet.cjs +1 -1
  24. package/dist/cjs/components/sortable.cjs +1 -1
  25. package/dist/cjs/components/table-expandable.cjs +1 -1
  26. package/dist/cjs/components/table.cjs +1 -1
  27. package/dist/cjs/components/tabs/tabs-root.cjs +1 -1
  28. package/dist/cjs/components/time-picker-input.cjs +1 -1
  29. package/dist/cjs/components/time-picker-input.cjs.map +1 -1
  30. package/dist/cjs/components/tooltip.cjs +1 -1
  31. package/dist/cjs/index.cjs +1 -1
  32. package/dist/cjs/lib/composition.cjs +1 -1
  33. package/dist/cjs/lib/data-table.cjs +1 -1
  34. package/dist/cjs/lib/index.cjs +1 -1
  35. package/dist/cjs/lib/parsers.cjs +1 -1
  36. package/dist/cjs/primitive/input.cjs +1 -1
  37. package/dist/esm/components/alert-dialog.js +1 -1
  38. package/dist/esm/components/alert-dialog.js.map +1 -1
  39. package/dist/esm/components/app-layout/app-layout-breadcrumb.js +1 -1
  40. package/dist/esm/components/app-layout/app-layout-breadcrumb.js.map +1 -1
  41. package/dist/esm/components/app-layout/app-layout-content.js +1 -1
  42. package/dist/esm/components/app-layout/app-layout-content.js.map +1 -1
  43. package/dist/esm/components/app-layout/app-layout-filters.js +1 -1
  44. package/dist/esm/components/app-layout/app-layout-filters.js.map +1 -1
  45. package/dist/esm/components/app-layout/app-layout-header.js +1 -1
  46. package/dist/esm/components/app-layout/app-layout-header.js.map +1 -1
  47. package/dist/esm/components/app-layout/app-layout-provider.js +1 -1
  48. package/dist/esm/components/app-layout/app-layout-provider.js.map +1 -1
  49. package/dist/esm/components/app-layout/app-layout.js +1 -1
  50. package/dist/esm/components/app-layout/app-layout.js.map +1 -1
  51. package/dist/esm/components/app-layout/sidebar/app-sidebar.js +1 -1
  52. package/dist/esm/components/app-layout/sidebar/app-sidebar.js.map +1 -1
  53. package/dist/esm/components/app-layout/sidebar/logo.js +1 -1
  54. package/dist/esm/components/app-layout/sidebar/logo.js.map +1 -1
  55. package/dist/esm/components/app-layout/sidebar/nav-modules.js +1 -1
  56. package/dist/esm/components/app-layout/sidebar/nav-modules.js.map +1 -1
  57. package/dist/esm/components/app-layout/sidebar/nav-sub-item.js +1 -1
  58. package/dist/esm/components/app-layout/sidebar/nav-sub-item.js.map +1 -1
  59. package/dist/esm/components/app-layout/sidebar/nav-user.js +1 -1
  60. package/dist/esm/components/app-layout/sidebar/nav-user.js.map +1 -1
  61. package/dist/esm/components/app-layout/sidebar/sidebar-icons.js +1 -1
  62. package/dist/esm/components/app-layout/sidebar/sidebar-icons.js.map +1 -1
  63. package/dist/esm/components/app-layout/sidebar/sidebar.js +1 -1
  64. package/dist/esm/components/app-layout/sidebar/sidebar.js.map +1 -1
  65. package/dist/esm/components/autocomplete/autocomplete-content.js +1 -1
  66. package/dist/esm/components/autocomplete/autocomplete-content.js.map +1 -1
  67. package/dist/esm/components/autocomplete/autocomplete-context.js +1 -1
  68. package/dist/esm/components/autocomplete/autocomplete-context.js.map +1 -1
  69. package/dist/esm/components/autocomplete/autocomplete-empty.js +1 -1
  70. package/dist/esm/components/autocomplete/autocomplete-empty.js.map +1 -1
  71. package/dist/esm/components/autocomplete/autocomplete-input.js +1 -1
  72. package/dist/esm/components/autocomplete/autocomplete-input.js.map +1 -1
  73. package/dist/esm/components/autocomplete/autocomplete-item.js +1 -1
  74. package/dist/esm/components/autocomplete/autocomplete-item.js.map +1 -1
  75. package/dist/esm/components/autocomplete/autocomplete-list.js +1 -1
  76. package/dist/esm/components/autocomplete/autocomplete-list.js.map +1 -1
  77. package/dist/esm/components/autocomplete/autocomplete.js +1 -1
  78. package/dist/esm/components/autocomplete/autocomplete.js.map +1 -1
  79. package/dist/esm/components/avatar.js +1 -1
  80. package/dist/esm/components/avatar.js.map +1 -1
  81. package/dist/esm/components/badge.js +1 -1
  82. package/dist/esm/components/badge.js.map +1 -1
  83. package/dist/esm/components/breadcrumb.js +1 -1
  84. package/dist/esm/components/breadcrumb.js.map +1 -1
  85. package/dist/esm/components/button.js +1 -1
  86. package/dist/esm/components/button.js.map +1 -1
  87. package/dist/esm/components/calendar.js +1 -1
  88. package/dist/esm/components/calendar.js.map +1 -1
  89. package/dist/esm/components/checkbox.js +1 -1
  90. package/dist/esm/components/checkbox.js.map +1 -1
  91. package/dist/esm/components/combobox.js +1 -1
  92. package/dist/esm/components/combobox.js.map +1 -1
  93. package/dist/esm/components/command.js +1 -1
  94. package/dist/esm/components/command.js.map +1 -1
  95. package/dist/esm/components/context-menu.js +1 -1
  96. package/dist/esm/components/context-menu.js.map +1 -1
  97. package/dist/esm/components/data-table/data-table-action-bar.js +1 -1
  98. package/dist/esm/components/data-table/data-table-action-bar.js.map +1 -1
  99. package/dist/esm/components/data-table/data-table-advanced-toolbar.js +1 -1
  100. package/dist/esm/components/data-table/data-table-advanced-toolbar.js.map +1 -1
  101. package/dist/esm/components/data-table/data-table-column-header.js +1 -1
  102. package/dist/esm/components/data-table/data-table-column-header.js.map +1 -1
  103. package/dist/esm/components/data-table/data-table-date-filter.js +1 -1
  104. package/dist/esm/components/data-table/data-table-date-filter.js.map +1 -1
  105. package/dist/esm/components/data-table/data-table-faceted-filter.js +1 -1
  106. package/dist/esm/components/data-table/data-table-faceted-filter.js.map +1 -1
  107. package/dist/esm/components/data-table/data-table-filter-list.js +1 -1
  108. package/dist/esm/components/data-table/data-table-filter-list.js.map +1 -1
  109. package/dist/esm/components/data-table/data-table-filter-menu.js +1 -1
  110. package/dist/esm/components/data-table/data-table-filter-menu.js.map +1 -1
  111. package/dist/esm/components/data-table/data-table-pagination.js +1 -1
  112. package/dist/esm/components/data-table/data-table-pagination.js.map +1 -1
  113. package/dist/esm/components/data-table/data-table-range-filter.js +1 -1
  114. package/dist/esm/components/data-table/data-table-range-filter.js.map +1 -1
  115. package/dist/esm/components/data-table/data-table-skeleton.js +1 -1
  116. package/dist/esm/components/data-table/data-table-skeleton.js.map +1 -1
  117. package/dist/esm/components/data-table/data-table-slider-filter.js +1 -1
  118. package/dist/esm/components/data-table/data-table-slider-filter.js.map +1 -1
  119. package/dist/esm/components/data-table/data-table-sort-list.js +1 -1
  120. package/dist/esm/components/data-table/data-table-sort-list.js.map +1 -1
  121. package/dist/esm/components/data-table/data-table-toolbar.js +1 -1
  122. package/dist/esm/components/data-table/data-table-toolbar.js.map +1 -1
  123. package/dist/esm/components/data-table/data-table-view-options.js +1 -1
  124. package/dist/esm/components/data-table/data-table-view-options.js.map +1 -1
  125. package/dist/esm/components/data-table/data-table.js +1 -1
  126. package/dist/esm/components/data-table/data-table.js.map +1 -1
  127. package/dist/esm/components/data-table/index.js +1 -2
  128. package/dist/esm/components/date-picker-with-range.js +1 -1
  129. package/dist/esm/components/date-picker-with-range.js.map +1 -1
  130. package/dist/esm/components/date-picker.js +1 -1
  131. package/dist/esm/components/date-picker.js.map +1 -1
  132. package/dist/esm/components/date-time-picker-with-range.js +1 -1
  133. package/dist/esm/components/date-time-picker-with-range.js.map +1 -1
  134. package/dist/esm/components/datetime-picker/datetime-picker.js +1 -1
  135. package/dist/esm/components/datetime-picker/datetime-picker.js.map +1 -1
  136. package/dist/esm/components/datetime-picker/month-year-picker.js +1 -1
  137. package/dist/esm/components/datetime-picker/month-year-picker.js.map +1 -1
  138. package/dist/esm/components/datetime-picker/time-item.js +1 -1
  139. package/dist/esm/components/datetime-picker/time-item.js.map +1 -1
  140. package/dist/esm/components/dialog.js +1 -1
  141. package/dist/esm/components/dialog.js.map +1 -1
  142. package/dist/esm/components/dropdown-menu.js +1 -1
  143. package/dist/esm/components/dropdown-menu.js.map +1 -1
  144. package/dist/esm/components/faceted.js +1 -1
  145. package/dist/esm/components/faceted.js.map +1 -1
  146. package/dist/esm/components/form.js +1 -1
  147. package/dist/esm/components/form.js.map +1 -1
  148. package/dist/esm/components/icons/rumo.js +1 -1
  149. package/dist/esm/components/icons/rumo.js.map +1 -1
  150. package/dist/esm/components/icons/vli.js +1 -1
  151. package/dist/esm/components/icons/vli.js.map +1 -1
  152. package/dist/esm/components/input-otp.js +1 -1
  153. package/dist/esm/components/input-otp.js.map +1 -1
  154. package/dist/esm/components/input-password.js +1 -1
  155. package/dist/esm/components/input-password.js.map +1 -1
  156. package/dist/esm/components/input.js +1 -1
  157. package/dist/esm/components/input.js.map +1 -1
  158. package/dist/esm/components/label.js +1 -1
  159. package/dist/esm/components/label.js.map +1 -1
  160. package/dist/esm/components/mask-input.js +1 -1
  161. package/dist/esm/components/mask-input.js.map +1 -1
  162. package/dist/esm/components/multi-select.js +1 -1
  163. package/dist/esm/components/multi-select.js.map +1 -1
  164. package/dist/esm/components/pagination.js +1 -1
  165. package/dist/esm/components/pagination.js.map +1 -1
  166. package/dist/esm/components/popover.js +1 -1
  167. package/dist/esm/components/popover.js.map +1 -1
  168. package/dist/esm/components/radio-group.js +1 -1
  169. package/dist/esm/components/radio-group.js.map +1 -1
  170. package/dist/esm/components/scroll-area.js +1 -1
  171. package/dist/esm/components/scroll-area.js.map +1 -1
  172. package/dist/esm/components/select.js +1 -1
  173. package/dist/esm/components/select.js.map +1 -1
  174. package/dist/esm/components/separator.js +1 -1
  175. package/dist/esm/components/separator.js.map +1 -1
  176. package/dist/esm/components/sheet/sheet-content-variants.js +1 -1
  177. package/dist/esm/components/sheet/sheet-content-variants.js.map +1 -1
  178. package/dist/esm/components/sheet/sheet.js +1 -1
  179. package/dist/esm/components/sheet/sheet.js.map +1 -1
  180. package/dist/esm/components/skeleton.js +1 -1
  181. package/dist/esm/components/skeleton.js.map +1 -1
  182. package/dist/esm/components/slider.js +1 -1
  183. package/dist/esm/components/slider.js.map +1 -1
  184. package/dist/esm/components/sortable.js +3 -3
  185. package/dist/esm/components/sortable.js.map +1 -1
  186. package/dist/esm/components/spinner.js +1 -1
  187. package/dist/esm/components/spinner.js.map +1 -1
  188. package/dist/esm/components/switch.js +1 -1
  189. package/dist/esm/components/switch.js.map +1 -1
  190. package/dist/esm/components/table-expandable.js +1 -1
  191. package/dist/esm/components/table-expandable.js.map +1 -1
  192. package/dist/esm/components/table.js +1 -1
  193. package/dist/esm/components/table.js.map +1 -1
  194. package/dist/esm/components/tabs/index.js +1 -1
  195. package/dist/esm/components/tabs/index.js.map +1 -1
  196. package/dist/esm/components/tabs/tabs-content.js +1 -1
  197. package/dist/esm/components/tabs/tabs-content.js.map +1 -1
  198. package/dist/esm/components/tabs/tabs-list.js +1 -1
  199. package/dist/esm/components/tabs/tabs-list.js.map +1 -1
  200. package/dist/esm/components/tabs/tabs-root.js +1 -1
  201. package/dist/esm/components/tabs/tabs-root.js.map +1 -1
  202. package/dist/esm/components/tabs/tabs-trigger.js +1 -1
  203. package/dist/esm/components/tabs/tabs-trigger.js.map +1 -1
  204. package/dist/esm/components/textarea.js +1 -1
  205. package/dist/esm/components/textarea.js.map +1 -1
  206. package/dist/esm/components/theme-provider.js +1 -1
  207. package/dist/esm/components/theme-provider.js.map +1 -1
  208. package/dist/esm/components/theme-toggle.js +1 -1
  209. package/dist/esm/components/theme-toggle.js.map +1 -1
  210. package/dist/esm/components/time-picker-input.js +1 -1
  211. package/dist/esm/components/time-picker-input.js.map +1 -1
  212. package/dist/esm/components/time-picker.js +1 -1
  213. package/dist/esm/components/time-picker.js.map +1 -1
  214. package/dist/esm/components/title.js +1 -1
  215. package/dist/esm/components/title.js.map +1 -1
  216. package/dist/esm/components/tokens-grid.js +1 -1
  217. package/dist/esm/components/tokens-grid.js.map +1 -1
  218. package/dist/esm/components/tooltip.js +1 -1
  219. package/dist/esm/components/tooltip.js.map +1 -1
  220. package/dist/esm/hooks/use-callback-ref.js +1 -1
  221. package/dist/esm/hooks/use-callback-ref.js.map +1 -1
  222. package/dist/esm/hooks/use-data-table.js +1 -1
  223. package/dist/esm/hooks/use-data-table.js.map +1 -1
  224. package/dist/esm/hooks/use-debounce.js +1 -1
  225. package/dist/esm/hooks/use-debounce.js.map +1 -1
  226. package/dist/esm/hooks/use-debounced-callback.js +1 -1
  227. package/dist/esm/hooks/use-debounced-callback.js.map +1 -1
  228. package/dist/esm/hooks/use-mobile.js +1 -1
  229. package/dist/esm/hooks/use-mobile.js.map +1 -1
  230. package/dist/esm/lib/composition.js +1 -1
  231. package/dist/esm/lib/composition.js.map +1 -1
  232. package/dist/esm/lib/data-table.js +1 -1
  233. package/dist/esm/lib/data-table.js.map +1 -1
  234. package/dist/esm/lib/id.js +1 -1
  235. package/dist/esm/lib/id.js.map +1 -1
  236. package/dist/esm/lib/parsers.js +1 -1
  237. package/dist/esm/lib/parsers.js.map +1 -1
  238. package/dist/esm/lib/utils.js +1 -1
  239. package/dist/esm/lib/utils.js.map +1 -1
  240. package/dist/esm/primitive/input.js +1 -1
  241. package/dist/esm/primitive/input.js.map +1 -1
  242. package/package.json +8 -8
  243. package/dist/esm/components/data-table/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"components\\data-table\\data-table-date-filter.js","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-date-filter.tsx"],"sourcesContent":["\r\n\r\nimport { CalendarBlank, XCircle } from '@phosphor-icons/react'\r\nimport type { Column } from '@tanstack/react-table'\r\nimport * as React from 'react'\r\nimport type { DateRange } from 'react-day-picker'\r\n\r\nimport { Button } from '@/components/button'\r\nimport { Calendar } from '@/components/calendar'\r\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'\r\nimport { Separator } from '@/components/separator'\r\nimport { formatDate } from '@/lib/format'\r\n\r\ntype DateSelection = Date[] | DateRange\r\n\r\nfunction getIsDateRange(value: DateSelection): value is DateRange {\r\n return value && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction parseAsDate(timestamp: number | string | undefined): Date | undefined {\r\n if (!timestamp) return undefined\r\n const numericTimestamp =\r\n typeof timestamp === 'string' ? Number(timestamp) : timestamp\r\n const date = new Date(numericTimestamp)\r\n return !Number.isNaN(date.getTime()) ? date : undefined\r\n}\r\n\r\nfunction parseColumnFilterValue(value: unknown) {\r\n if (value === null || value === undefined) {\r\n return []\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.map(item => {\r\n if (typeof item === 'number' || typeof item === 'string') {\r\n return item\r\n }\r\n return undefined\r\n })\r\n }\r\n\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n return [value]\r\n }\r\n\r\n return []\r\n}\r\n\r\ninterface DataTableDateFilterProps<TData> {\r\n column: Column<TData, unknown>\r\n title?: string\r\n multiple?: boolean\r\n}\r\n\r\nexport function DataTableDateFilter<TData>({\r\n column,\r\n title,\r\n multiple,\r\n}: DataTableDateFilterProps<TData>) {\r\n const columnFilterValue = column.getFilterValue()\r\n\r\n const selectedDates = React.useMemo<DateSelection>(() => {\r\n if (!columnFilterValue) {\r\n return multiple ? { from: undefined, to: undefined } : []\r\n }\r\n\r\n if (multiple) {\r\n const timestamps = parseColumnFilterValue(columnFilterValue)\r\n return {\r\n from: parseAsDate(timestamps[0]),\r\n to: parseAsDate(timestamps[1]),\r\n }\r\n }\r\n\r\n const timestamps = parseColumnFilterValue(columnFilterValue)\r\n const date = parseAsDate(timestamps[0])\r\n return date ? [date] : []\r\n }, [columnFilterValue, multiple])\r\n\r\n const onSelect = React.useCallback(\r\n (date: Date | DateRange | undefined) => {\r\n if (!date) {\r\n column.setFilterValue(undefined)\r\n return\r\n }\r\n\r\n if (multiple && !('getTime' in date)) {\r\n const from = date.from?.getTime()\r\n const to = date.to?.getTime()\r\n column.setFilterValue(from || to ? [from, to] : undefined)\r\n } else if (!multiple && 'getTime' in date) {\r\n column.setFilterValue(date.getTime())\r\n }\r\n },\r\n [column, multiple]\r\n )\r\n\r\n const onReset = React.useCallback(\r\n (event: React.MouseEvent) => {\r\n event.stopPropagation()\r\n column.setFilterValue(undefined)\r\n },\r\n [column]\r\n )\r\n\r\n const hasValue = React.useMemo(() => {\r\n if (multiple) {\r\n if (!getIsDateRange(selectedDates)) return false\r\n return selectedDates.from || selectedDates.to\r\n }\r\n if (!Array.isArray(selectedDates)) return false\r\n return selectedDates.length > 0\r\n }, [multiple, selectedDates])\r\n\r\n const formatDateRange = React.useCallback((range: DateRange) => {\r\n if (!range.from && !range.to) return ''\r\n if (range.from && range.to) {\r\n return `${formatDate(range.from)} - ${formatDate(range.to)}`\r\n }\r\n return formatDate(range.from ?? range.to)\r\n }, [])\r\n\r\n const label = React.useMemo(() => {\r\n if (multiple) {\r\n if (!getIsDateRange(selectedDates)) return null\r\n\r\n const hasSelectedDates = selectedDates.from || selectedDates.to\r\n const dateText = hasSelectedDates\r\n ? formatDateRange(selectedDates)\r\n : 'Select date range'\r\n\r\n return (\r\n <span className=\"flex items-center gap-2\">\r\n <span>{title}</span>\r\n {hasSelectedDates && (\r\n <>\r\n <Separator\r\n orientation=\"vertical\"\r\n className=\"mx-0.5 data-[orientation=vertical]:h-4\"\r\n />\r\n <span>{dateText}</span>\r\n </>\r\n )}\r\n </span>\r\n )\r\n }\r\n\r\n if (getIsDateRange(selectedDates)) return null\r\n\r\n const hasSelectedDate = selectedDates.length > 0\r\n const dateText = hasSelectedDate\r\n ? formatDate(selectedDates[0])\r\n : 'Select date'\r\n\r\n return (\r\n <span className=\"flex items-center gap-2\">\r\n <span>{title}</span>\r\n {hasSelectedDate && (\r\n <>\r\n <Separator\r\n orientation=\"vertical\"\r\n className=\"mx-0.5 data-[orientation=vertical]:h-4\"\r\n />\r\n <span>{dateText}</span>\r\n </>\r\n )}\r\n </span>\r\n )\r\n }, [selectedDates, multiple, formatDateRange, title])\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\">\r\n {hasValue ? (\r\n <div\r\n role=\"button\"\r\n aria-label={`Clear ${title} filter`}\r\n tabIndex={0}\r\n onClick={onReset}\r\n className=\"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\r\n >\r\n <XCircle />\r\n </div>\r\n ) : (\r\n <CalendarBlank />\r\n )}\r\n {label}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\r\n {multiple ? (\r\n <Calendar\r\n initialFocus\r\n mode=\"range\"\r\n selected={\r\n getIsDateRange(selectedDates)\r\n ? selectedDates\r\n : { from: undefined, to: undefined }\r\n }\r\n onSelect={onSelect}\r\n />\r\n ) : (\r\n <Calendar\r\n initialFocus\r\n mode=\"single\"\r\n selected={\r\n !getIsDateRange(selectedDates) ? selectedDates[0] : undefined\r\n }\r\n onSelect={onSelect}\r\n />\r\n )}\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n"],"names":["getIsDateRange","value","Array","parseAsDate","timestamp","date","Date","Number","undefined","parseColumnFilterValue","item","DataTableDateFilter","column","title","multiple","columnFilterValue","selectedDates","React","timestamps","onSelect","from","to","onReset","event","hasValue","formatDateRange","range","formatDate","label","hasSelectedDates","dateText","Separator","hasSelectedDate","Popover","PopoverTrigger","Button","XCircle","CalendarBlank","PopoverContent","Calendar"],"mappings":"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"}
1
+ {"version":3,"file":"components\\data-table\\data-table-date-filter.js","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-date-filter.tsx"],"sourcesContent":["\r\n\r\nimport { CalendarBlank, XCircle } from '@phosphor-icons/react'\r\nimport type { Column } from '@tanstack/react-table'\r\nimport * as React from 'react'\r\nimport type { DateRange } from 'react-day-picker'\r\n\r\nimport { Button } from '@/components/button'\r\nimport { Calendar } from '@/components/calendar'\r\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'\r\nimport { Separator } from '@/components/separator'\r\nimport { formatDate } from '@/lib/format'\r\n\r\ntype DateSelection = Date[] | DateRange\r\n\r\nfunction getIsDateRange(value: DateSelection): value is DateRange {\r\n return value && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction parseAsDate(timestamp: number | string | undefined): Date | undefined {\r\n if (!timestamp) return undefined\r\n const numericTimestamp =\r\n typeof timestamp === 'string' ? Number(timestamp) : timestamp\r\n const date = new Date(numericTimestamp)\r\n return !Number.isNaN(date.getTime()) ? date : undefined\r\n}\r\n\r\nfunction parseColumnFilterValue(value: unknown) {\r\n if (value === null || value === undefined) {\r\n return []\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.map(item => {\r\n if (typeof item === 'number' || typeof item === 'string') {\r\n return item\r\n }\r\n return undefined\r\n })\r\n }\r\n\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n return [value]\r\n }\r\n\r\n return []\r\n}\r\n\r\ninterface DataTableDateFilterProps<TData> {\r\n column: Column<TData, unknown>\r\n title?: string\r\n multiple?: boolean\r\n}\r\n\r\nexport function DataTableDateFilter<TData>({\r\n column,\r\n title,\r\n multiple,\r\n}: DataTableDateFilterProps<TData>) {\r\n const columnFilterValue = column.getFilterValue()\r\n\r\n const selectedDates = React.useMemo<DateSelection>(() => {\r\n if (!columnFilterValue) {\r\n return multiple ? { from: undefined, to: undefined } : []\r\n }\r\n\r\n if (multiple) {\r\n const timestamps = parseColumnFilterValue(columnFilterValue)\r\n return {\r\n from: parseAsDate(timestamps[0]),\r\n to: parseAsDate(timestamps[1]),\r\n }\r\n }\r\n\r\n const timestamps = parseColumnFilterValue(columnFilterValue)\r\n const date = parseAsDate(timestamps[0])\r\n return date ? [date] : []\r\n }, [columnFilterValue, multiple])\r\n\r\n const onSelect = React.useCallback(\r\n (date: Date | DateRange | undefined) => {\r\n if (!date) {\r\n column.setFilterValue(undefined)\r\n return\r\n }\r\n\r\n if (multiple && !('getTime' in date)) {\r\n const from = date.from?.getTime()\r\n const to = date.to?.getTime()\r\n column.setFilterValue(from || to ? [from, to] : undefined)\r\n } else if (!multiple && 'getTime' in date) {\r\n column.setFilterValue(date.getTime())\r\n }\r\n },\r\n [column, multiple]\r\n )\r\n\r\n const onReset = React.useCallback(\r\n (event: React.MouseEvent) => {\r\n event.stopPropagation()\r\n column.setFilterValue(undefined)\r\n },\r\n [column]\r\n )\r\n\r\n const hasValue = React.useMemo(() => {\r\n if (multiple) {\r\n if (!getIsDateRange(selectedDates)) return false\r\n return selectedDates.from || selectedDates.to\r\n }\r\n if (!Array.isArray(selectedDates)) return false\r\n return selectedDates.length > 0\r\n }, [multiple, selectedDates])\r\n\r\n const formatDateRange = React.useCallback((range: DateRange) => {\r\n if (!range.from && !range.to) return ''\r\n if (range.from && range.to) {\r\n return `${formatDate(range.from)} - ${formatDate(range.to)}`\r\n }\r\n return formatDate(range.from ?? range.to)\r\n }, [])\r\n\r\n const label = React.useMemo(() => {\r\n if (multiple) {\r\n if (!getIsDateRange(selectedDates)) return null\r\n\r\n const hasSelectedDates = selectedDates.from || selectedDates.to\r\n const dateText = hasSelectedDates\r\n ? formatDateRange(selectedDates)\r\n : 'Select date range'\r\n\r\n return (\r\n <span className=\"flex items-center gap-2\">\r\n <span>{title}</span>\r\n {hasSelectedDates && (\r\n <>\r\n <Separator\r\n orientation=\"vertical\"\r\n className=\"mx-0.5 data-[orientation=vertical]:h-4\"\r\n />\r\n <span>{dateText}</span>\r\n </>\r\n )}\r\n </span>\r\n )\r\n }\r\n\r\n if (getIsDateRange(selectedDates)) return null\r\n\r\n const hasSelectedDate = selectedDates.length > 0\r\n const dateText = hasSelectedDate\r\n ? formatDate(selectedDates[0])\r\n : 'Select date'\r\n\r\n return (\r\n <span className=\"flex items-center gap-2\">\r\n <span>{title}</span>\r\n {hasSelectedDate && (\r\n <>\r\n <Separator\r\n orientation=\"vertical\"\r\n className=\"mx-0.5 data-[orientation=vertical]:h-4\"\r\n />\r\n <span>{dateText}</span>\r\n </>\r\n )}\r\n </span>\r\n )\r\n }, [selectedDates, multiple, formatDateRange, title])\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\">\r\n {hasValue ? (\r\n <div\r\n role=\"button\"\r\n aria-label={`Clear ${title} filter`}\r\n tabIndex={0}\r\n onClick={onReset}\r\n className=\"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\r\n >\r\n <XCircle />\r\n </div>\r\n ) : (\r\n <CalendarBlank />\r\n )}\r\n {label}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\r\n {multiple ? (\r\n <Calendar\r\n initialFocus\r\n mode=\"range\"\r\n selected={\r\n getIsDateRange(selectedDates)\r\n ? selectedDates\r\n : { from: undefined, to: undefined }\r\n }\r\n onSelect={onSelect}\r\n />\r\n ) : (\r\n <Calendar\r\n initialFocus\r\n mode=\"single\"\r\n selected={\r\n !getIsDateRange(selectedDates) ? selectedDates[0] : undefined\r\n }\r\n onSelect={onSelect}\r\n />\r\n )}\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n"],"names":["getIsDateRange","value","Array","parseAsDate","timestamp","date","Date","Number","undefined","parseColumnFilterValue","item","DataTableDateFilter","column","title","multiple","columnFilterValue","selectedDates","React","timestamps","onSelect","from","to","onReset","event","hasValue","formatDateRange","range","formatDate","label","hasSelectedDates","dateText","Separator","hasSelectedDate","Popover","PopoverTrigger","Button","XCircle","CalendarBlank","PopoverContent","Calendar"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  'use client'
2
- import*as e from"react/jsx-runtime";import*as a from"@phosphor-icons/react";import*as s from"../badge.js";import*as r from"../button.js";import*as o from"../command.js";import*as n from"../popover.js";import*as i from"../separator.js";import*as t from"../../lib/utils.js";import*as l from"react";function m({column:m,title:c,options:d,multiple:u}){let[p,x]=l.useState(!1),h=m?.getFilterValue(),j=new Set(Array.isArray(h)?h:[]),f=l.useCallback((e,a)=>{if(m)if(u){let s=new Set(j);a?s.delete(e.value):s.add(e.value);let r=Array.from(s);m.setFilterValue(r.length?r:void 0)}else m.setFilterValue(a?void 0:[e.value]),x(!1)},[m,u,j]),v=l.useCallback(e=>{e?.stopPropagation(),m?.setFilterValue(void 0)},[m]);return(0,e.jsxs)(n.Popover,{open:p,onOpenChange:x,children:[(0,e.jsx)(n.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(r.Button,{variant:"outline",size:"sm",children:[j?.size>0?(0,e.jsx)("div",{role:"button","aria-label":`Clear ${c} filter`,tabIndex:0,onClick:v,className:"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",children:(0,e.jsx)(a.XCircleIcon,{})}):(0,e.jsx)(a.PlusCircleIcon,{}),c,j?.size>0&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(i.Separator,{orientation:"vertical",className:"mx-0.5 data-[orientation=vertical]:h-4"}),(0,e.jsx)(s.Badge,{variant:"secondary",className:"rounded-sm px-1 font-normal lg:hidden",children:j.size}),(0,e.jsx)("div",{className:"hidden items-center gap-1 lg:flex",children:j.size>2?(0,e.jsxs)(s.Badge,{variant:"secondary",className:"rounded-sm px-1 font-normal",children:[j.size," selected"]}):d.filter(e=>j.has(e.value)).map(a=>(0,e.jsx)(s.Badge,{variant:"secondary",className:"rounded-sm px-1 font-normal",children:a.label},a.value))})]})]})}),(0,e.jsx)(n.PopoverContent,{className:"w-[12.5rem] p-0",align:"start",children:(0,e.jsxs)(o.Command,{children:[(0,e.jsx)(o.CommandInput,{placeholder:c}),(0,e.jsxs)(o.CommandList,{className:"max-h-full",children:[(0,e.jsx)(o.CommandEmpty,{children:"No results found."}),(0,e.jsx)(o.CommandGroup,{className:"max-h-[18.75rem] overflow-y-auto overflow-x-hidden",children:d.map(s=>{let r=j.has(s.value);return(0,e.jsxs)(o.CommandItem,{onSelect:()=>f(s,r),children:[(0,e.jsx)("div",{className:(0,t.cn)("flex size-4 items-center justify-center rounded-sm border border-primary",r?"bg-primary":"opacity-50 [&_svg]:invisible"),children:(0,e.jsx)(a.CheckIcon,{})}),s.icon&&(0,e.jsx)(s.icon,{}),(0,e.jsx)("span",{className:"truncate",children:s.label}),s.count&&(0,e.jsx)("span",{className:"ml-auto font-mono text-xs",children:s.count})]},s.value)})}),j.size>0&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.CommandSeparator,{}),(0,e.jsx)(o.CommandGroup,{children:(0,e.jsx)(o.CommandItem,{onSelect:()=>v(),className:"justify-center text-center",children:"Limpar filtros"})})]})]})]})})]})}export{m as DataTableFacetedFilter};
2
+ import{Fragment as e,jsx as r,jsxs as i}from"react/jsx-runtime";import{CheckIcon as a,PlusCircleIcon as l,XCircleIcon as t}from"@phosphor-icons/react";import{Badge as n}from"../badge.js";import{Button as o}from"../button.js";import{Command as s,CommandEmpty as c,CommandGroup as d,CommandInput as m,CommandItem as u,CommandList as h,CommandSeparator as p}from"../command.js";import{Popover as f,PopoverContent as v,PopoverTrigger as b}from"../popover.js";import{Separator as x}from"../separator.js";import{cn as y}from"../../lib/utils.js";import{useCallback as g,useState as N}from"react";function j({column:j,title:z,options:F,multiple:w}){let[C,S]=N(!1),V=j?.getFilterValue(),A=new Set(Array.isArray(V)?V:[]),k=g((e,r)=>{if(j)if(w){let i=new Set(A);r?i.delete(e.value):i.add(e.value);let a=Array.from(i);j.setFilterValue(a.length?a:void 0)}else j.setFilterValue(r?void 0:[e.value]),S(!1)},[j,w,A]),D=g(e=>{e?.stopPropagation(),j?.setFilterValue(void 0)},[j]);return i(f,{open:C,onOpenChange:S,children:[r(b,{asChild:!0,children:i(o,{variant:"outline",size:"sm",children:[A?.size>0?r("div",{role:"button","aria-label":`Clear ${z} filter`,tabIndex:0,onClick:D,className:"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",children:r(t,{})}):r(l,{}),z,A?.size>0&&i(e,{children:[r(x,{orientation:"vertical",className:"mx-0.5 data-[orientation=vertical]:h-4"}),r(n,{variant:"secondary",className:"rounded-sm px-1 font-normal lg:hidden",children:A.size}),r("div",{className:"hidden items-center gap-1 lg:flex",children:A.size>2?i(n,{variant:"secondary",className:"rounded-sm px-1 font-normal",children:[A.size," selected"]}):F.filter(e=>A.has(e.value)).map(e=>r(n,{variant:"secondary",className:"rounded-sm px-1 font-normal",children:e.label},e.value))})]})]})}),r(v,{className:"w-[12.5rem] p-0",align:"start",children:i(s,{children:[r(m,{placeholder:z}),i(h,{className:"max-h-full",children:[r(c,{children:"No results found."}),r(d,{className:"max-h-[18.75rem] overflow-y-auto overflow-x-hidden",children:F.map(e=>{let l=A.has(e.value);return i(u,{onSelect:()=>k(e,l),children:[r("div",{className:y("flex size-4 items-center justify-center rounded-sm border border-primary",l?"bg-primary":"opacity-50 [&_svg]:invisible"),children:r(a,{})}),e.icon&&r(e.icon,{}),r("span",{className:"truncate",children:e.label}),e.count&&r("span",{className:"ml-auto font-mono text-xs",children:e.count})]},e.value)})}),A.size>0&&i(e,{children:[r(p,{}),r(d,{children:r(u,{onSelect:()=>D(),className:"justify-center text-center",children:"Limpar filtros"})})]})]})]})})]})}export{j as DataTableFacetedFilter};
3
3
  //# sourceMappingURL=data-table-faceted-filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components\\data-table\\data-table-faceted-filter.js","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-faceted-filter.tsx"],"sourcesContent":["\r\n\r\nimport type { Option } from '@/types/data-table'\r\nimport { CheckIcon, PlusCircleIcon, XCircleIcon } from '@phosphor-icons/react'\r\nimport type { Column } from '@tanstack/react-table'\r\n\r\nimport { Badge } from '@/components/badge'\r\nimport { Button } from '@/components/button'\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n CommandSeparator,\r\n} from '@/components/command'\r\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'\r\nimport { Separator } from '@/components/separator'\r\nimport { cn } from '@/lib/utils'\r\nimport * as React from 'react'\r\n\r\ninterface DataTableFacetedFilterProps<TData, TValue> {\r\n column?: Column<TData, TValue>\r\n title?: string\r\n options: Option[]\r\n multiple?: boolean\r\n}\r\n\r\nexport function DataTableFacetedFilter<TData, TValue>({\r\n column,\r\n title,\r\n options,\r\n multiple,\r\n}: DataTableFacetedFilterProps<TData, TValue>) {\r\n const [open, setOpen] = React.useState(false)\r\n\r\n const columnFilterValue = column?.getFilterValue()\r\n const selectedValues = new Set(\r\n Array.isArray(columnFilterValue) ? columnFilterValue : []\r\n )\r\n\r\n const onItemSelect = React.useCallback(\r\n (option: Option, isSelected: boolean) => {\r\n if (!column) return\r\n\r\n if (multiple) {\r\n const newSelectedValues = new Set(selectedValues)\r\n if (isSelected) {\r\n newSelectedValues.delete(option.value)\r\n } else {\r\n newSelectedValues.add(option.value)\r\n }\r\n const filterValues = Array.from(newSelectedValues)\r\n column.setFilterValue(filterValues.length ? filterValues : undefined)\r\n } else {\r\n column.setFilterValue(isSelected ? undefined : [option.value])\r\n setOpen(false)\r\n }\r\n },\r\n [column, multiple, selectedValues]\r\n )\r\n\r\n const onReset = React.useCallback(\r\n (event?: React.MouseEvent) => {\r\n event?.stopPropagation()\r\n column?.setFilterValue(undefined)\r\n },\r\n [column]\r\n )\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\">\r\n {selectedValues?.size > 0 ? (\r\n <div\r\n role=\"button\"\r\n aria-label={`Clear ${title} filter`}\r\n tabIndex={0}\r\n onClick={onReset}\r\n className=\"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\r\n >\r\n <XCircleIcon />\r\n </div>\r\n ) : (\r\n <PlusCircleIcon />\r\n )}\r\n {title}\r\n {selectedValues?.size > 0 && (\r\n <>\r\n <Separator\r\n orientation=\"vertical\"\r\n className=\"mx-0.5 data-[orientation=vertical]:h-4\"\r\n />\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"rounded-sm px-1 font-normal lg:hidden\"\r\n >\r\n {selectedValues.size}\r\n </Badge>\r\n <div className=\"hidden items-center gap-1 lg:flex\">\r\n {selectedValues.size > 2 ? (\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"rounded-sm px-1 font-normal\"\r\n >\r\n {selectedValues.size} selected\r\n </Badge>\r\n ) : (\r\n options\r\n .filter(option => selectedValues.has(option.value))\r\n .map(option => (\r\n <Badge\r\n variant=\"secondary\"\r\n key={option.value}\r\n className=\"rounded-sm px-1 font-normal\"\r\n >\r\n {option.label}\r\n </Badge>\r\n ))\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-[12.5rem] p-0\" align=\"start\">\r\n <Command>\r\n <CommandInput placeholder={title} />\r\n <CommandList className=\"max-h-full\">\r\n <CommandEmpty>No results found.</CommandEmpty>\r\n <CommandGroup className=\"max-h-[18.75rem] overflow-y-auto overflow-x-hidden\">\r\n {options.map(option => {\r\n const isSelected = selectedValues.has(option.value)\r\n\r\n return (\r\n <CommandItem\r\n key={option.value}\r\n onSelect={() => onItemSelect(option, isSelected)}\r\n >\r\n <div\r\n className={cn(\r\n 'flex size-4 items-center justify-center rounded-sm border border-primary',\r\n isSelected\r\n ? 'bg-primary'\r\n : 'opacity-50 [&_svg]:invisible'\r\n )}\r\n >\r\n <CheckIcon />\r\n </div>\r\n {option.icon && <option.icon />}\r\n <span className=\"truncate\">{option.label}</span>\r\n {option.count && (\r\n <span className=\"ml-auto font-mono text-xs\">\r\n {option.count}\r\n </span>\r\n )}\r\n </CommandItem>\r\n )\r\n })}\r\n </CommandGroup>\r\n {selectedValues.size > 0 && (\r\n <>\r\n <CommandSeparator />\r\n <CommandGroup>\r\n <CommandItem\r\n onSelect={() => onReset()}\r\n className=\"justify-center text-center\"\r\n >\r\n Limpar filtros\r\n </CommandItem>\r\n </CommandGroup>\r\n </>\r\n )}\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n"],"names":["DataTableFacetedFilter","column","title","options","multiple","open","setOpen","React","columnFilterValue","selectedValues","Set","Array","onItemSelect","option","isSelected","newSelectedValues","filterValues","undefined","onReset","event","Popover","PopoverTrigger","Button","XCircleIcon","PlusCircleIcon","Separator","Badge","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","cn","CheckIcon","CommandSeparator"],"mappings":"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"}
1
+ {"version":3,"file":"components\\data-table\\data-table-faceted-filter.js","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-faceted-filter.tsx"],"sourcesContent":["\r\n\r\nimport type { Option } from '@/types/data-table'\r\nimport { CheckIcon, PlusCircleIcon, XCircleIcon } from '@phosphor-icons/react'\r\nimport type { Column } from '@tanstack/react-table'\r\n\r\nimport { Badge } from '@/components/badge'\r\nimport { Button } from '@/components/button'\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n CommandSeparator,\r\n} from '@/components/command'\r\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'\r\nimport { Separator } from '@/components/separator'\r\nimport { cn } from '@/lib/utils'\r\nimport * as React from 'react'\r\n\r\ninterface DataTableFacetedFilterProps<TData, TValue> {\r\n column?: Column<TData, TValue>\r\n title?: string\r\n options: Option[]\r\n multiple?: boolean\r\n}\r\n\r\nexport function DataTableFacetedFilter<TData, TValue>({\r\n column,\r\n title,\r\n options,\r\n multiple,\r\n}: DataTableFacetedFilterProps<TData, TValue>) {\r\n const [open, setOpen] = React.useState(false)\r\n\r\n const columnFilterValue = column?.getFilterValue()\r\n const selectedValues = new Set(\r\n Array.isArray(columnFilterValue) ? columnFilterValue : []\r\n )\r\n\r\n const onItemSelect = React.useCallback(\r\n (option: Option, isSelected: boolean) => {\r\n if (!column) return\r\n\r\n if (multiple) {\r\n const newSelectedValues = new Set(selectedValues)\r\n if (isSelected) {\r\n newSelectedValues.delete(option.value)\r\n } else {\r\n newSelectedValues.add(option.value)\r\n }\r\n const filterValues = Array.from(newSelectedValues)\r\n column.setFilterValue(filterValues.length ? filterValues : undefined)\r\n } else {\r\n column.setFilterValue(isSelected ? undefined : [option.value])\r\n setOpen(false)\r\n }\r\n },\r\n [column, multiple, selectedValues]\r\n )\r\n\r\n const onReset = React.useCallback(\r\n (event?: React.MouseEvent) => {\r\n event?.stopPropagation()\r\n column?.setFilterValue(undefined)\r\n },\r\n [column]\r\n )\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\">\r\n {selectedValues?.size > 0 ? (\r\n <div\r\n role=\"button\"\r\n aria-label={`Clear ${title} filter`}\r\n tabIndex={0}\r\n onClick={onReset}\r\n className=\"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\r\n >\r\n <XCircleIcon />\r\n </div>\r\n ) : (\r\n <PlusCircleIcon />\r\n )}\r\n {title}\r\n {selectedValues?.size > 0 && (\r\n <>\r\n <Separator\r\n orientation=\"vertical\"\r\n className=\"mx-0.5 data-[orientation=vertical]:h-4\"\r\n />\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"rounded-sm px-1 font-normal lg:hidden\"\r\n >\r\n {selectedValues.size}\r\n </Badge>\r\n <div className=\"hidden items-center gap-1 lg:flex\">\r\n {selectedValues.size > 2 ? (\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"rounded-sm px-1 font-normal\"\r\n >\r\n {selectedValues.size} selected\r\n </Badge>\r\n ) : (\r\n options\r\n .filter(option => selectedValues.has(option.value))\r\n .map(option => (\r\n <Badge\r\n variant=\"secondary\"\r\n key={option.value}\r\n className=\"rounded-sm px-1 font-normal\"\r\n >\r\n {option.label}\r\n </Badge>\r\n ))\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-[12.5rem] p-0\" align=\"start\">\r\n <Command>\r\n <CommandInput placeholder={title} />\r\n <CommandList className=\"max-h-full\">\r\n <CommandEmpty>No results found.</CommandEmpty>\r\n <CommandGroup className=\"max-h-[18.75rem] overflow-y-auto overflow-x-hidden\">\r\n {options.map(option => {\r\n const isSelected = selectedValues.has(option.value)\r\n\r\n return (\r\n <CommandItem\r\n key={option.value}\r\n onSelect={() => onItemSelect(option, isSelected)}\r\n >\r\n <div\r\n className={cn(\r\n 'flex size-4 items-center justify-center rounded-sm border border-primary',\r\n isSelected\r\n ? 'bg-primary'\r\n : 'opacity-50 [&_svg]:invisible'\r\n )}\r\n >\r\n <CheckIcon />\r\n </div>\r\n {option.icon && <option.icon />}\r\n <span className=\"truncate\">{option.label}</span>\r\n {option.count && (\r\n <span className=\"ml-auto font-mono text-xs\">\r\n {option.count}\r\n </span>\r\n )}\r\n </CommandItem>\r\n )\r\n })}\r\n </CommandGroup>\r\n {selectedValues.size > 0 && (\r\n <>\r\n <CommandSeparator />\r\n <CommandGroup>\r\n <CommandItem\r\n onSelect={() => onReset()}\r\n className=\"justify-center text-center\"\r\n >\r\n Limpar filtros\r\n </CommandItem>\r\n </CommandGroup>\r\n </>\r\n )}\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n}\r\n"],"names":["DataTableFacetedFilter","column","title","options","multiple","open","setOpen","React","columnFilterValue","selectedValues","Set","Array","onItemSelect","option","isSelected","newSelectedValues","filterValues","undefined","onReset","event","Popover","PopoverTrigger","Button","XCircleIcon","PlusCircleIcon","Separator","Badge","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","cn","CheckIcon","CommandSeparator"],"mappings":";6kBA6BO,SAASA,EAAsC,CACpDC,OAAAA,CAAM,CACNC,MAAAA,CAAK,CACLC,QAAAA,CAAO,CACPC,SAAAA,CAAQ,CACmC,EAC3C,GAAM,CAACC,EAAMC,EAAQ,CAAGC,EAAe,IAEjCC,EAAoBP,GAAQ,iBAC5BQ,EAAiB,IAAIC,IACzBC,MAAM,OAAO,CAACH,GAAqBA,EAAoB,EAAE,EAGrDI,EAAeL,EACnB,CAACM,EAAgBC,KACf,GAAKb,EAEL,GAAIG,EAAU,CACZ,IAAMW,EAAoB,IAAIL,IAAID,GAC9BK,EACFC,EAAkB,MAAM,CAACF,EAAO,KAAK,EAErCE,EAAkB,GAAG,CAACF,EAAO,KAAK,EAEpC,IAAMG,EAAeL,MAAM,IAAI,CAACI,GAChCd,EAAO,cAAc,CAACe,EAAa,MAAM,CAAGA,EAAeC,OAC7D,MACEhB,EAAO,cAAc,CAACa,EAAaG,OAAY,CAACJ,EAAO,KAAK,CAAC,EAC7DP,EAAQ,GAEZ,EACA,CAACL,EAAQG,EAAUK,EAAe,EAG9BS,EAAUX,EACd,IACEY,GAAO,kBACPlB,GAAQ,eAAegB,OACzB,EACA,CAAChB,EAAO,EAGV,OACE,EAACmB,EAAOA,CAAC,KAAMf,EAAM,aAAcC,E,UACjC,EAACe,EAAcA,CAAC,QAAO,G,SACrB,EAACC,EAAMA,CAAC,QAAQ,UAAU,KAAK,K,UAC5Bb,GAAgB,KAAO,EACtB,EAAC,OACC,KAAK,SACL,aAAY,CAAC,MAAM,EAAEP,EAAM,OAAO,CAAC,CACnC,SAAU,EACV,QAASgB,EACT,UAAU,qI,SAEV,EAACK,EAAWA,CAAAA,E,GAGd,EAACC,EAAcA,CAAAA,GAEhBtB,EACAO,GAAgB,KAAO,GACtB,K,UACE,EAACgB,EAASA,CACR,YAAY,WACZ,UAAU,wC,GAEZ,EAACC,EAAKA,CACJ,QAAQ,YACR,UAAU,wC,SAETjB,EAAe,IAAI,GAEtB,EAAC,OAAI,UAAU,oC,SACZA,EAAe,IAAI,CAAG,EACrB,EAACiB,EAAKA,CACJ,QAAQ,YACR,UAAU,8B,UAETjB,EAAe,IAAI,CAAC,Y,GAGvBN,EACG,MAAM,CAACU,GAAUJ,EAAe,GAAG,CAACI,EAAO,KAAK,GAChD,GAAG,CAACA,GACH,EAACa,EAAKA,CACJ,QAAQ,YAER,UAAU,8B,SAETb,EAAO,KAAK,EAHRA,EAAO,KAAK,E,WAYnC,EAACc,EAAcA,CAAC,UAAU,kBAAkB,MAAM,Q,SAChD,EAACC,EAAOA,C,UACN,EAACC,EAAYA,CAAC,YAAa3B,C,GAC3B,EAAC4B,EAAWA,CAAC,UAAU,a,UACrB,EAACC,EAAYA,C,SAAC,mB,GACd,EAACC,EAAYA,CAAC,UAAU,qD,SACrB7B,EAAQ,GAAG,CAACU,IACX,IAAMC,EAAaL,EAAe,GAAG,CAACI,EAAO,KAAK,EAElD,OACE,EAACoB,EAAWA,CAEV,SAAU,IAAMrB,EAAaC,EAAQC,G,UAErC,EAAC,OACC,UAAWoB,EACT,2EACApB,EACI,aACA,gC,SAGN,EAACqB,EAASA,CAAAA,E,GAEXtB,EAAO,IAAI,EAAI,EAACA,EAAO,IAAI,KAC5B,EAAC,QAAK,UAAU,W,SAAYA,EAAO,KAAK,GACvCA,EAAO,KAAK,EACX,EAAC,QAAK,UAAU,4B,SACbA,EAAO,KAAK,KAjBZA,EAAO,KAAK,CAsBvB,E,GAEDJ,EAAe,IAAI,CAAG,GACrB,K,UACE,EAAC2B,EAAgBA,CAAAA,GACjB,EAACJ,EAAYA,C,SACX,EAACC,EAAWA,CACV,SAAU,IAAMf,IAChB,UAAU,6B,SACX,gB,kBAWnB,Q"}
@@ -1,3 +1,3 @@
1
1
  'use client'
2
- import*as e from"react/jsx-runtime";import*as a from"@phosphor-icons/react";import*as t from"nuqs";import*as l from"react";import*as r from"../badge.js";import*as n from"../button.js";import*as i from"../calendar.js";import*as s from"../command.js";import*as o from"./data-table-range-filter.js";import*as d from"../faceted.js";import*as c from"../input.js";import*as m from"../popover.js";import*as u from"../select.js";import*as p from"../sortable.js";import*as f from"../../hooks/use-debounced-callback.js";import*as x from"../../lib/data-table.js";import*as h from"../../lib/data-table-config.js";import*as j from"../../lib/format.js";import*as v from"../../lib/id.js";import*as g from"../../lib/parsers.js";import*as b from"../../lib/utils.js";let w=["backspace","delete"];function C({table:i,debounceMs:s=300,throttleMs:o=50,shallow:d=!0,...c}){let u=l.useId(),h=l.useId(),j=l.useId(),[C,y]=l.useState(!1),I=l.useRef(null),S=l.useMemo(()=>i.getAllColumns().filter(e=>e.columnDef.enableColumnFilter),[i]),[D,F]=(0,t.useQueryState)("filters",(0,g.getFiltersStateParser)(S.map(e=>e.id)).withDefault([]).withOptions({clearOnDefault:!0,shallow:d,throttleMs:o})),k=(0,f.useDebouncedCallback)(F,s),[$,T]=(0,t.useQueryState)("joinOperator",(0,t.parseAsStringEnum)(["e","ou"]).withDefault("e").withOptions({clearOnDefault:!0,shallow:d})),O=l.useCallback(()=>{let e=S[0];e&&k([...D,{id:e.id,value:"",variant:e.columnDef.meta?.variant??"text",operator:(0,x.getDefaultFilterOperator)(e.columnDef.meta?.variant??"text"),filterId:(0,v.generateId)({length:8})}])},[S,D,k]),B=l.useCallback((e,a)=>{k(t=>t.map(t=>t.filterId===e?{...t,...a}:t))},[k]),E=l.useCallback(e=>{F(D.filter(a=>a.filterId!==e)),requestAnimationFrame(()=>{I.current?.focus()})},[D,F]),z=l.useCallback(()=>{F(null),T("e")},[F,T]);l.useEffect(()=>{function e(e){!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&("f"!==e.key.toLowerCase()||e.ctrlKey||e.metaKey||e.shiftKey||(e.preventDefault(),y(!0)),"f"===e.key.toLowerCase()&&e.shiftKey&&D.length>0&&(e.preventDefault(),E(D[D.length-1]?.filterId??"")))}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[D,E]);let L=l.useCallback(e=>{w.includes(e.key.toLowerCase())&&D.length>0&&(e.preventDefault(),E(D[D.length-1]?.filterId??""))},[D,E]);return(0,e.jsxs)(p.Sortable,{value:D,onValueChange:F,getItemValue:e=>e.filterId,children:[(0,e.jsxs)(m.Popover,{open:C,onOpenChange:y,children:[(0,e.jsx)(m.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(n.Button,{variant:"outline",size:"sm",onKeyDown:L,children:[(0,e.jsx)(a.FunnelSimpleIcon,{weight:"bold"}),"Filtro",D.length>0&&(0,e.jsx)(r.Badge,{variant:"secondary",className:"h-[18.24px] rounded-[3.2px] px-[5.12px] font-mono font-normal text-[10.4px]",children:D.length})]})}),(0,e.jsxs)(m.PopoverContent,{"aria-describedby":j,"aria-labelledby":h,className:"flex w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] flex-col gap-3.5 p-4 sm:min-w-[380px]",...c,children:[(0,e.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,e.jsx)("h4",{id:h,className:"font-medium leading-none",children:D.length>0?"Filtros":"Nenhum filtro aplicado"}),(0,e.jsx)("p",{id:j,className:(0,b.cn)("text-gray-400 text-sm",D.length>0&&"sr-only"),children:D.length>0?"Modifique os filtros para filtrar suas linhas.":"Adicione filtros para filtrar suas linhas."})]}),D.length>0?(0,e.jsx)(p.SortableContent,{asChild:!0,children:(0,e.jsx)("div",{role:"list",className:"flex max-h-[300px] flex-col gap-2 overflow-y-auto p-1",children:D.map((a,t)=>(0,e.jsx)(N,{filter:a,index:t,filterItemId:`${u}-filter-${a.filterId}`,joinOperator:$,setJoinOperator:T,columns:S,onFilterUpdate:B,onFilterRemove:E},a.filterId))})}):null,(0,e.jsxs)("div",{className:"flex w-full items-center gap-2",children:[(0,e.jsx)(n.Button,{size:"sm",className:"rounded",ref:I,onClick:O,children:"Adicionar filtro"}),D.length>0?(0,e.jsx)(n.Button,{variant:"outline",size:"sm",className:"rounded",onClick:z,children:"Resetar filtros"}):null]})]})]}),(0,e.jsx)(p.SortableOverlay,{children:(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("div",{className:"h-10 min-w-[72px] rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"h-10 w-32 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"h-10 w-32 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"h-10 min-w-36 flex-1 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"size-8 shrink-0 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"size-8 shrink-0 rounded-sm bg-primary/10"})]})})]})}function N({filter:t,index:r,filterItemId:f,joinOperator:v,setJoinOperator:g,columns:C,onFilterUpdate:N,onFilterRemove:y}){let[I,S]=l.useState(!1),[D,F]=l.useState(!1),[k,$]=l.useState(!1),T=C.find(e=>e.id===t.id);if(!T)return null;let O=`${f}-join-operator-listbox`,B=`${f}-field-listbox`,E=`${f}-operator-listbox`,z=`${f}-input`,L=T.columnDef.meta,A=(0,x.getFilterOperators)(t.variant),V=l.useCallback(e=>{!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&(I||D||k||w.includes(e.key.toLowerCase())&&(e.preventDefault(),y(t.filterId)))},[t.filterId,I,D,k,y]);return(0,e.jsx)(p.SortableItem,{value:t.filterId,asChild:!0,children:(0,e.jsxs)("div",{role:"listitem",id:f,tabIndex:-1,className:"flex items-center gap-2",onKeyDown:V,children:[(0,e.jsx)("div",{className:"min-w-[72px] text-center",children:0===r?(0,e.jsx)("span",{className:"text-gray-400 text-sm",children:"Onde"}):1===r?(0,e.jsxs)(u.Select,{value:v,onValueChange:e=>g(e),children:[(0,e.jsx)(u.SelectTrigger,{"aria-label":"Select join operator","aria-controls":O,className:"h-10 rounded lowercase [&[data-size]]:h-10",children:(0,e.jsx)(u.SelectValue,{placeholder:v})}),(0,e.jsx)(u.SelectContent,{id:O,position:"popper",className:"min-w-(--radix-select-trigger-width) lowercase",children:h.dataTableConfig.joinOperators.map(a=>(0,e.jsx)(u.SelectItem,{value:a,children:a},a))})]}):(0,e.jsx)("span",{className:"text-gray-400 text-sm",children:v})}),(0,e.jsxs)(m.Popover,{open:I,onOpenChange:S,children:[(0,e.jsx)(m.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(n.Button,{role:"combobox","aria-controls":B,variant:"outline",size:"sm",className:"w-32 justify-between rounded font-normal",children:[(0,e.jsx)("span",{className:"truncate",children:C.find(e=>e.id===t.id)?.columnDef.meta?.label??"Selecione o campo"}),(0,e.jsx)(a.CaretUpDownIcon,{className:"opacity-50"})]})}),(0,e.jsx)(m.PopoverContent,{id:B,align:"start",className:"w-40 origin-[var(--radix-popover-content-transform-origin)] p-0",children:(0,e.jsxs)(s.Command,{children:[(0,e.jsx)(s.CommandInput,{placeholder:"Buscar campo..."}),(0,e.jsxs)(s.CommandList,{children:[(0,e.jsx)(s.CommandEmpty,{children:"Nenhum campo encontrado."}),(0,e.jsx)(s.CommandGroup,{children:C.map(l=>(0,e.jsxs)(s.CommandItem,{value:l.id,onSelect:e=>{N(t.filterId,{id:e,variant:l.columnDef.meta?.variant??"text",operator:(0,x.getDefaultFilterOperator)(l.columnDef.meta?.variant??"text"),value:""}),S(!1)},children:[(0,e.jsx)("span",{className:"truncate",children:l.columnDef.meta?.label}),(0,e.jsx)(a.CheckIcon,{className:(0,b.cn)("ml-auto",l.id===t.id?"opacity-100":"opacity-0")})]},l.id))})]})]})})]}),(0,e.jsxs)(u.Select,{open:D,onOpenChange:F,value:t.operator,onValueChange:e=>N(t.filterId,{operator:e,value:"isEmpty"===e||"isNotEmpty"===e?"":t.value}),children:[(0,e.jsx)(u.SelectTrigger,{"aria-controls":E,className:"h-10 w-32 rounded lowercase [&[data-size]]:h-10",children:(0,e.jsx)("div",{className:"truncate",children:(0,e.jsx)(u.SelectValue,{placeholder:t.operator})})}),(0,e.jsx)(u.SelectContent,{id:E,className:"origin-[var(--radix-select-content-transform-origin)]",children:A.map(a=>(0,e.jsx)(u.SelectItem,{value:a.value,className:"lowercase",children:a.label},a.value))})]}),(0,e.jsx)("div",{className:"min-w-36 flex-1",children:function({filter:t,inputId:l,column:r,columnMeta:s,onFilterUpdate:p,showValueSelector:f,setShowValueSelector:x}){if("isEmpty"===t.operator||"isNotEmpty"===t.operator)return(0,e.jsx)("div",{id:l,role:"status","aria-label":`${s?.label} filter is ${"isEmpty"===t.operator?"empty":"not empty"}`,"aria-live":"polite",className:"h-10 w-full rounded border bg-transparent dark:bg-input/30"});switch(t.variant){case"text":case"number":case"range":{if("range"===t.variant&&"isBetween"===t.operator||"isBetween"===t.operator)return(0,e.jsx)(o.DataTableRangeFilter,{filter:t,column:r,inputId:l,onFilterUpdate:p});let a="number"===t.variant||"range"===t.variant;return(0,e.jsx)(c.Input,{id:l,type:a?"number":t.variant,"aria-label":`${s?.label} filter value`,"aria-describedby":`${l}-description`,inputMode:a?"numeric":void 0,placeholder:s?.placeholder??"Enter a value...",className:"h-10 w-full rounded",defaultValue:"string"==typeof t.value?t.value:void 0,onChange:e=>p(t.filterId,{value:e.target.value})})}case"boolean":{if(Array.isArray(t.value))return null;let a=`${l}-listbox`;return(0,e.jsxs)(u.Select,{open:f,onOpenChange:x,value:t.value,onValueChange:e=>p(t.filterId,{value:e}),children:[(0,e.jsx)(u.SelectTrigger,{id:l,"aria-controls":a,"aria-label":`${s?.label} boolean filter`,className:"h-10 w-full rounded [&[data-size]]:h-10",children:(0,e.jsx)(u.SelectValue,{placeholder:t.value?"True":"False"})}),(0,e.jsxs)(u.SelectContent,{id:a,children:[(0,e.jsx)(u.SelectItem,{value:"true",children:"True"}),(0,e.jsx)(u.SelectItem,{value:"false",children:"False"})]})]})}case"select":case"multiSelect":{let a=`${l}-listbox`,r="multiSelect"===t.variant,i=r?Array.isArray(t.value)?t.value:[]:"string"==typeof t.value?t.value:void 0;return(0,e.jsxs)(d.Faceted,{open:f,onOpenChange:x,value:i,onValueChange:e=>{p(t.filterId,{value:e})},multiple:r,children:[(0,e.jsx)(d.FacetedTrigger,{asChild:!0,children:(0,e.jsx)(n.Button,{id:l,"aria-controls":a,"aria-label":`${s?.label} filter value${r?"s":""}`,variant:"outline",size:"sm",className:"w-full rounded font-normal",children:(0,e.jsx)(d.FacetedBadgeList,{options:s?.options,placeholder:s?.placeholder??`Select option${r?"s":""}...`})})}),(0,e.jsxs)(d.FacetedContent,{id:a,className:"w-[200px] origin-[var(--radix-popover-content-transform-origin)]",children:[(0,e.jsx)(d.FacetedInput,{"aria-label":`Search ${s?.label} options`,placeholder:s?.placeholder??"Search options..."}),(0,e.jsxs)(d.FacetedList,{children:[(0,e.jsx)(d.FacetedEmpty,{children:"Nenhum resultado"}),(0,e.jsx)(d.FacetedGroup,{children:s?.options?.map(a=>(0,e.jsxs)(d.FacetedItem,{value:a.value,children:[a.icon&&(0,e.jsx)(a.icon,{}),(0,e.jsx)("span",{children:a.label}),a.count&&(0,e.jsx)("span",{className:"ml-auto font-mono text-xs",children:a.count})]},a.value))})]})]})]})}case"date":case"dateRange":{let r=`${l}-listbox`,o=Array.isArray(t.value)?t.value.filter(Boolean):[t.value,t.value].filter(Boolean),d="isBetween"===t.operator&&2===o.length?`${(0,j.formatDate)(new Date(Number(o[0])))} - ${(0,j.formatDate)(new Date(Number(o[1])))}`:o[0]?(0,j.formatDate)(new Date(Number(o[0]))):"Escolha uma data";return(0,e.jsxs)(m.Popover,{open:f,onOpenChange:x,children:[(0,e.jsx)(m.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(n.Button,{id:l,"aria-controls":r,"aria-label":`${s?.label} date filter`,variant:"outline",size:"sm",className:(0,b.cn)("w-full justify-start rounded text-left font-normal",!t.value&&"text-gray-400"),children:[(0,e.jsx)(a.CalendarBlankIcon,{weight:"bold"}),(0,e.jsx)("span",{className:"truncate text-sm",children:d})]})}),(0,e.jsx)(m.PopoverContent,{id:r,align:"start",className:"w-auto origin-[var(--radix-popover-content-transform-origin)] p-0",children:"isBetween"===t.operator?(0,e.jsx)(i.Calendar,{"aria-label":`Select ${s?.label} date range`,mode:"range",selected:2===o.length?{from:new Date(Number(o[0])),to:new Date(Number(o[1]))}:{from:new Date,to:new Date},onSelect:e=>{p(t.filterId,{value:e?[(e.from?.getTime()??"").toString(),(e.to?.getTime()??"").toString()]:[]})}}):(0,e.jsx)(i.Calendar,{"aria-label":`Select ${s?.label} date`,mode:"single",selected:o[0]?new Date(Number(o[0])):void 0,onSelect:e=>{p(t.filterId,{value:(e?.getTime()??"").toString()})}})})]})}default:return null}}({filter:t,inputId:z,column:T,columnMeta:L,onFilterUpdate:N,showValueSelector:k,setShowValueSelector:$})}),(0,e.jsx)(n.Button,{"aria-controls":f,variant:"outline",size:"icon",className:"size-8 rounded",onClick:()=>y(t.filterId),children:(0,e.jsx)(a.TrashIcon,{weight:"bold"})}),(0,e.jsx)(p.SortableItemHandle,{asChild:!0,children:(0,e.jsx)(n.Button,{variant:"outline",size:"icon",className:"size-8 rounded",children:(0,e.jsx)(a.DotsSixVerticalIcon,{weight:"bold"})})})]})})}export{C as DataTableFilterList};
2
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{CalendarBlankIcon as l,CaretUpDownIcon as r,CheckIcon as t,DotsSixVerticalIcon as i,FunnelSimpleIcon as n,TrashIcon as o}from"@phosphor-icons/react";import{parseAsStringEnum as s,useQueryState as d}from"nuqs";import{useCallback as c,useEffect as m,useId as u,useMemo as p,useRef as h,useState as f}from"react";import{Badge as v}from"../badge.js";import{Button as g}from"../button.js";import{Calendar as b}from"../calendar.js";import{Command as w,CommandEmpty as x,CommandGroup as N,CommandInput as y,CommandItem as C,CommandList as D}from"../command.js";import{DataTableRangeFilter as I}from"./data-table-range-filter.js";import{Faceted as j,FacetedBadgeList as $,FacetedContent as k,FacetedEmpty as z,FacetedGroup as O,FacetedInput as S,FacetedItem as E,FacetedList as A,FacetedTrigger as T}from"../faceted.js";import{Input as L}from"../input.js";import{Popover as F,PopoverContent as B,PopoverTrigger as V}from"../popover.js";import{Select as K,SelectContent as M,SelectItem as H,SelectTrigger as q,SelectValue as R}from"../select.js";import{Sortable as U,SortableContent as J,SortableItem as G,SortableItemHandle as P,SortableOverlay as Q}from"../sortable.js";import{useDebouncedCallback as W}from"../../hooks/use-debounced-callback.js";import{getDefaultFilterOperator as X,getFilterOperators as Y}from"../../lib/data-table.js";import{dataTableConfig as Z}from"../../lib/data-table-config.js";import{formatDate as _}from"../../lib/format.js";import{generateId as ee}from"../../lib/id.js";import{getFiltersStateParser as ea}from"../../lib/parsers.js";import{cn as el}from"../../lib/utils.js";let er=["backspace","delete"];function et({table:l,debounceMs:r=300,throttleMs:t=50,shallow:i=!0,...o}){let b=u(),w=u(),x=u(),[N,y]=f(!1),C=h(null),D=p(()=>l.getAllColumns().filter(e=>e.columnDef.enableColumnFilter),[l]),[I,j]=d("filters",ea(D.map(e=>e.id)).withDefault([]).withOptions({clearOnDefault:!0,shallow:i,throttleMs:t})),$=W(j,r),[k,z]=d("joinOperator",s(["e","ou"]).withDefault("e").withOptions({clearOnDefault:!0,shallow:i})),O=c(()=>{let e=D[0];e&&$([...I,{id:e.id,value:"",variant:e.columnDef.meta?.variant??"text",operator:X(e.columnDef.meta?.variant??"text"),filterId:ee({length:8})}])},[D,I,$]),S=c((e,a)=>{$(l=>l.map(l=>l.filterId===e?{...l,...a}:l))},[$]),E=c(e=>{j(I.filter(a=>a.filterId!==e)),requestAnimationFrame(()=>{C.current?.focus()})},[I,j]),A=c(()=>{j(null),z("e")},[j,z]);m(()=>{function e(e){!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&("f"!==e.key.toLowerCase()||e.ctrlKey||e.metaKey||e.shiftKey||(e.preventDefault(),y(!0)),"f"===e.key.toLowerCase()&&e.shiftKey&&I.length>0&&(e.preventDefault(),E(I[I.length-1]?.filterId??"")))}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[I,E]);let T=c(e=>{er.includes(e.key.toLowerCase())&&I.length>0&&(e.preventDefault(),E(I[I.length-1]?.filterId??""))},[I,E]);return a(U,{value:I,onValueChange:j,getItemValue:e=>e.filterId,children:[a(F,{open:N,onOpenChange:y,children:[e(V,{asChild:!0,children:a(g,{variant:"outline",size:"sm",onKeyDown:T,children:[e(n,{weight:"bold"}),"Filtro",I.length>0&&e(v,{variant:"secondary",className:"h-[18.24px] rounded-[3.2px] px-[5.12px] font-mono font-normal text-[10.4px]",children:I.length})]})}),a(B,{"aria-describedby":x,"aria-labelledby":w,className:"flex w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] flex-col gap-3.5 p-4 sm:min-w-[380px]",...o,children:[a("div",{className:"flex flex-col gap-1",children:[e("h4",{id:w,className:"font-medium leading-none",children:I.length>0?"Filtros":"Nenhum filtro aplicado"}),e("p",{id:x,className:el("text-gray-400 text-sm",I.length>0&&"sr-only"),children:I.length>0?"Modifique os filtros para filtrar suas linhas.":"Adicione filtros para filtrar suas linhas."})]}),I.length>0?e(J,{asChild:!0,children:e("div",{role:"list",className:"flex max-h-[300px] flex-col gap-2 overflow-y-auto p-1",children:I.map((a,l)=>e(ei,{filter:a,index:l,filterItemId:`${b}-filter-${a.filterId}`,joinOperator:k,setJoinOperator:z,columns:D,onFilterUpdate:S,onFilterRemove:E},a.filterId))})}):null,a("div",{className:"flex w-full items-center gap-2",children:[e(g,{size:"sm",className:"rounded",ref:C,onClick:O,children:"Adicionar filtro"}),I.length>0?e(g,{variant:"outline",size:"sm",className:"rounded",onClick:A,children:"Resetar filtros"}):null]})]})]}),e(Q,{children:a("div",{className:"flex items-center gap-2",children:[e("div",{className:"h-10 min-w-[72px] rounded-sm bg-primary/10"}),e("div",{className:"h-10 w-32 rounded-sm bg-primary/10"}),e("div",{className:"h-10 w-32 rounded-sm bg-primary/10"}),e("div",{className:"h-10 min-w-36 flex-1 rounded-sm bg-primary/10"}),e("div",{className:"size-8 shrink-0 rounded-sm bg-primary/10"}),e("div",{className:"size-8 shrink-0 rounded-sm bg-primary/10"})]})})]})}function ei({filter:n,index:s,filterItemId:d,joinOperator:m,setJoinOperator:u,columns:p,onFilterUpdate:h,onFilterRemove:v}){let[U,J]=f(!1),[Q,W]=f(!1),[ee,ea]=f(!1),et=p.find(e=>e.id===n.id);if(!et)return null;let ei=`${d}-join-operator-listbox`,en=`${d}-field-listbox`,eo=`${d}-operator-listbox`,es=`${d}-input`,ed=et.columnDef.meta,ec=Y(n.variant),em=c(e=>{!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&(U||Q||ee||er.includes(e.key.toLowerCase())&&(e.preventDefault(),v(n.filterId)))},[n.filterId,U,Q,ee,v]);return e(G,{value:n.filterId,asChild:!0,children:a("div",{role:"listitem",id:d,tabIndex:-1,className:"flex items-center gap-2",onKeyDown:em,children:[e("div",{className:"min-w-[72px] text-center",children:0===s?e("span",{className:"text-gray-400 text-sm",children:"Onde"}):1===s?a(K,{value:m,onValueChange:e=>u(e),children:[e(q,{"aria-label":"Select join operator","aria-controls":ei,className:"h-10 rounded lowercase [&[data-size]]:h-10",children:e(R,{placeholder:m})}),e(M,{id:ei,position:"popper",className:"min-w-(--radix-select-trigger-width) lowercase",children:Z.joinOperators.map(a=>e(H,{value:a,children:a},a))})]}):e("span",{className:"text-gray-400 text-sm",children:m})}),a(F,{open:U,onOpenChange:J,children:[e(V,{asChild:!0,children:a(g,{role:"combobox","aria-controls":en,variant:"outline",size:"sm",className:"w-32 justify-between rounded font-normal",children:[e("span",{className:"truncate",children:p.find(e=>e.id===n.id)?.columnDef.meta?.label??"Selecione o campo"}),e(r,{className:"opacity-50"})]})}),e(B,{id:en,align:"start",className:"w-40 origin-[var(--radix-popover-content-transform-origin)] p-0",children:a(w,{children:[e(y,{placeholder:"Buscar campo..."}),a(D,{children:[e(x,{children:"Nenhum campo encontrado."}),e(N,{children:p.map(l=>a(C,{value:l.id,onSelect:e=>{h(n.filterId,{id:e,variant:l.columnDef.meta?.variant??"text",operator:X(l.columnDef.meta?.variant??"text"),value:""}),J(!1)},children:[e("span",{className:"truncate",children:l.columnDef.meta?.label}),e(t,{className:el("ml-auto",l.id===n.id?"opacity-100":"opacity-0")})]},l.id))})]})]})})]}),a(K,{open:Q,onOpenChange:W,value:n.operator,onValueChange:e=>h(n.filterId,{operator:e,value:"isEmpty"===e||"isNotEmpty"===e?"":n.value}),children:[e(q,{"aria-controls":eo,className:"h-10 w-32 rounded lowercase [&[data-size]]:h-10",children:e("div",{className:"truncate",children:e(R,{placeholder:n.operator})})}),e(M,{id:eo,className:"origin-[var(--radix-select-content-transform-origin)]",children:ec.map(a=>e(H,{value:a.value,className:"lowercase",children:a.label},a.value))})]}),e("div",{className:"min-w-36 flex-1",children:function({filter:r,inputId:t,column:i,columnMeta:n,onFilterUpdate:o,showValueSelector:s,setShowValueSelector:d}){if("isEmpty"===r.operator||"isNotEmpty"===r.operator)return e("div",{id:t,role:"status","aria-label":`${n?.label} filter is ${"isEmpty"===r.operator?"empty":"not empty"}`,"aria-live":"polite",className:"h-10 w-full rounded border bg-transparent dark:bg-input/30"});switch(r.variant){case"text":case"number":case"range":{if("range"===r.variant&&"isBetween"===r.operator||"isBetween"===r.operator)return e(I,{filter:r,column:i,inputId:t,onFilterUpdate:o});let a="number"===r.variant||"range"===r.variant;return e(L,{id:t,type:a?"number":r.variant,"aria-label":`${n?.label} filter value`,"aria-describedby":`${t}-description`,inputMode:a?"numeric":void 0,placeholder:n?.placeholder??"Enter a value...",className:"h-10 w-full rounded",defaultValue:"string"==typeof r.value?r.value:void 0,onChange:e=>o(r.filterId,{value:e.target.value})})}case"boolean":{if(Array.isArray(r.value))return null;let l=`${t}-listbox`;return a(K,{open:s,onOpenChange:d,value:r.value,onValueChange:e=>o(r.filterId,{value:e}),children:[e(q,{id:t,"aria-controls":l,"aria-label":`${n?.label} boolean filter`,className:"h-10 w-full rounded [&[data-size]]:h-10",children:e(R,{placeholder:r.value?"True":"False"})}),a(M,{id:l,children:[e(H,{value:"true",children:"True"}),e(H,{value:"false",children:"False"})]})]})}case"select":case"multiSelect":{let l=`${t}-listbox`,i="multiSelect"===r.variant;return a(j,{open:s,onOpenChange:d,value:i?Array.isArray(r.value)?r.value:[]:"string"==typeof r.value?r.value:void 0,onValueChange:e=>{o(r.filterId,{value:e})},multiple:i,children:[e(T,{asChild:!0,children:e(g,{id:t,"aria-controls":l,"aria-label":`${n?.label} filter value${i?"s":""}`,variant:"outline",size:"sm",className:"w-full rounded font-normal",children:e($,{options:n?.options,placeholder:n?.placeholder??`Select option${i?"s":""}...`})})}),a(k,{id:l,className:"w-[200px] origin-[var(--radix-popover-content-transform-origin)]",children:[e(S,{"aria-label":`Search ${n?.label} options`,placeholder:n?.placeholder??"Search options..."}),a(A,{children:[e(z,{children:"Nenhum resultado"}),e(O,{children:n?.options?.map(l=>a(E,{value:l.value,children:[l.icon&&e(l.icon,{}),e("span",{children:l.label}),l.count&&e("span",{className:"ml-auto font-mono text-xs",children:l.count})]},l.value))})]})]})]})}case"date":case"dateRange":{let i=`${t}-listbox`,c=Array.isArray(r.value)?r.value.filter(Boolean):[r.value,r.value].filter(Boolean),m="isBetween"===r.operator&&2===c.length?`${_(new Date(Number(c[0])))} - ${_(new Date(Number(c[1])))}`:c[0]?_(new Date(Number(c[0]))):"Escolha uma data";return a(F,{open:s,onOpenChange:d,children:[e(V,{asChild:!0,children:a(g,{id:t,"aria-controls":i,"aria-label":`${n?.label} date filter`,variant:"outline",size:"sm",className:el("w-full justify-start rounded text-left font-normal",!r.value&&"text-gray-400"),children:[e(l,{weight:"bold"}),e("span",{className:"truncate text-sm",children:m})]})}),e(B,{id:i,align:"start",className:"w-auto origin-[var(--radix-popover-content-transform-origin)] p-0",children:"isBetween"===r.operator?e(b,{"aria-label":`Select ${n?.label} date range`,mode:"range",selected:2===c.length?{from:new Date(Number(c[0])),to:new Date(Number(c[1]))}:{from:new Date,to:new Date},onSelect:e=>{o(r.filterId,{value:e?[(e.from?.getTime()??"").toString(),(e.to?.getTime()??"").toString()]:[]})}}):e(b,{"aria-label":`Select ${n?.label} date`,mode:"single",selected:c[0]?new Date(Number(c[0])):void 0,onSelect:e=>{o(r.filterId,{value:(e?.getTime()??"").toString()})}})})]})}default:return null}}({filter:n,inputId:es,column:et,columnMeta:ed,onFilterUpdate:h,showValueSelector:ee,setShowValueSelector:ea})}),e(g,{"aria-controls":d,variant:"outline",size:"icon",className:"size-8 rounded",onClick:()=>v(n.filterId),children:e(o,{weight:"bold"})}),e(P,{asChild:!0,children:e(g,{variant:"outline",size:"icon",className:"size-8 rounded",children:e(i,{weight:"bold"})})})]})})}export{et as DataTableFilterList};
3
3
  //# sourceMappingURL=data-table-filter-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components\\data-table\\data-table-filter-list.js","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-filter-list.tsx"],"sourcesContent":["\r\n\r\nimport {\r\n CalendarBlankIcon,\r\n CaretUpDownIcon,\r\n CheckIcon,\r\n DotsSixVerticalIcon,\r\n FunnelSimpleIcon,\r\n TrashIcon,\r\n} from '@phosphor-icons/react'\r\nimport type { Column, ColumnMeta, Table } from '@tanstack/react-table'\r\nimport { parseAsStringEnum, useQueryState } from 'nuqs'\r\nimport * as React from 'react'\r\n\r\nimport { Badge } from '@/components/badge'\r\nimport { Button } from '@/components/button'\r\nimport { Calendar } from '@/components/calendar'\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from '@/components/command'\r\nimport { DataTableRangeFilter } from '@/components/data-table/data-table-range-filter'\r\nimport {\r\n Faceted,\r\n FacetedBadgeList,\r\n FacetedContent,\r\n FacetedEmpty,\r\n FacetedGroup,\r\n FacetedInput,\r\n FacetedItem,\r\n FacetedList,\r\n FacetedTrigger,\r\n} from '@/components/faceted'\r\nimport { Input } from '@/components/input'\r\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '@/components/select'\r\nimport {\r\n Sortable,\r\n SortableContent,\r\n SortableItem,\r\n SortableItemHandle,\r\n SortableOverlay,\r\n} from '@/components/sortable'\r\nimport { useDebouncedCallback } from '@/hooks/use-debounced-callback'\r\nimport { getDefaultFilterOperator, getFilterOperators } from '@/lib/data-table'\r\nimport { dataTableConfig } from '@/lib/data-table-config'\r\nimport { formatDate } from '@/lib/format'\r\nimport { generateId } from '@/lib/id'\r\nimport { getFiltersStateParser } from '@/lib/parsers'\r\nimport { cn } from '@/lib/utils'\r\nimport type {\r\n ExtendedColumnFilter,\r\n FilterOperator,\r\n JoinOperator,\r\n} from '@/types/data-table'\r\n\r\nconst FILTERS_KEY = 'filters'\r\nconst JOIN_OPERATOR_KEY = 'joinOperator'\r\nconst DEBOUNCE_MS = 300\r\nconst THROTTLE_MS = 50\r\nconst OPEN_MENU_SHORTCUT = 'f'\r\nconst REMOVE_FILTER_SHORTCUTS = ['backspace', 'delete']\r\n\r\ninterface DataTableFilterListProps<TData>\r\n extends React.ComponentProps<typeof PopoverContent> {\r\n table: Table<TData>\r\n debounceMs?: number\r\n throttleMs?: number\r\n shallow?: boolean\r\n}\r\n\r\nexport function DataTableFilterList<TData>({\r\n table,\r\n debounceMs = DEBOUNCE_MS,\r\n throttleMs = THROTTLE_MS,\r\n shallow = true,\r\n ...props\r\n}: DataTableFilterListProps<TData>) {\r\n const id = React.useId()\r\n const labelId = React.useId()\r\n const descriptionId = React.useId()\r\n const [open, setOpen] = React.useState(false)\r\n const addButtonRef = React.useRef<HTMLButtonElement>(null)\r\n\r\n const columns = React.useMemo(() => {\r\n return table\r\n .getAllColumns()\r\n .filter(column => column.columnDef.enableColumnFilter)\r\n }, [table])\r\n\r\n const [filters, setFilters] = useQueryState(\r\n FILTERS_KEY,\r\n getFiltersStateParser<TData>(columns.map(field => field.id))\r\n .withDefault([])\r\n .withOptions({\r\n clearOnDefault: true,\r\n shallow,\r\n throttleMs,\r\n })\r\n )\r\n const debouncedSetFilters = useDebouncedCallback(setFilters, debounceMs)\r\n\r\n const [joinOperator, setJoinOperator] = useQueryState(\r\n JOIN_OPERATOR_KEY,\r\n parseAsStringEnum(['e', 'ou']).withDefault('e').withOptions({\r\n clearOnDefault: true,\r\n shallow,\r\n })\r\n )\r\n\r\n const onFilterAdd = React.useCallback(() => {\r\n const column = columns[0]\r\n\r\n if (!column) return\r\n\r\n debouncedSetFilters([\r\n ...filters,\r\n {\r\n id: column.id as Extract<keyof TData, string>,\r\n value: '',\r\n variant: column.columnDef.meta?.variant ?? 'text',\r\n operator: getDefaultFilterOperator(\r\n column.columnDef.meta?.variant ?? 'text'\r\n ),\r\n filterId: generateId({ length: 8 }),\r\n },\r\n ])\r\n }, [columns, filters, debouncedSetFilters])\r\n\r\n const onFilterUpdate = React.useCallback(\r\n (\r\n filterId: string,\r\n updates: Partial<Omit<ExtendedColumnFilter<TData>, 'filterId'>>\r\n ) => {\r\n debouncedSetFilters(prevFilters => {\r\n const updatedFilters = prevFilters.map(filter => {\r\n if (filter.filterId === filterId) {\r\n return { ...filter, ...updates } as ExtendedColumnFilter<TData>\r\n }\r\n return filter\r\n })\r\n return updatedFilters\r\n })\r\n },\r\n [debouncedSetFilters]\r\n )\r\n\r\n const onFilterRemove = React.useCallback(\r\n (filterId: string) => {\r\n const updatedFilters = filters.filter(\r\n filter => filter.filterId !== filterId\r\n )\r\n void setFilters(updatedFilters)\r\n requestAnimationFrame(() => {\r\n addButtonRef.current?.focus()\r\n })\r\n },\r\n [filters, setFilters]\r\n )\r\n\r\n const onFiltersReset = React.useCallback(() => {\r\n void setFilters(null)\r\n void setJoinOperator('e')\r\n }, [setFilters, setJoinOperator])\r\n\r\n React.useEffect(() => {\r\n function onKeyDown(event: KeyboardEvent) {\r\n if (\r\n event.target instanceof HTMLInputElement ||\r\n event.target instanceof HTMLTextAreaElement\r\n ) {\r\n return\r\n }\r\n\r\n if (\r\n event.key.toLowerCase() === OPEN_MENU_SHORTCUT &&\r\n !event.ctrlKey &&\r\n !event.metaKey &&\r\n !event.shiftKey\r\n ) {\r\n event.preventDefault()\r\n setOpen(true)\r\n }\r\n\r\n if (\r\n event.key.toLowerCase() === OPEN_MENU_SHORTCUT &&\r\n event.shiftKey &&\r\n filters.length > 0\r\n ) {\r\n event.preventDefault()\r\n onFilterRemove(filters[filters.length - 1]?.filterId ?? '')\r\n }\r\n }\r\n\r\n window.addEventListener('keydown', onKeyDown)\r\n return () => window.removeEventListener('keydown', onKeyDown)\r\n }, [filters, onFilterRemove])\r\n\r\n const onTriggerKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\r\n if (\r\n REMOVE_FILTER_SHORTCUTS.includes(event.key.toLowerCase()) &&\r\n filters.length > 0\r\n ) {\r\n event.preventDefault()\r\n onFilterRemove(filters[filters.length - 1]?.filterId ?? '')\r\n }\r\n },\r\n [filters, onFilterRemove]\r\n )\r\n\r\n return (\r\n <Sortable\r\n value={filters}\r\n onValueChange={setFilters}\r\n getItemValue={item => item.filterId}\r\n >\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\" onKeyDown={onTriggerKeyDown}>\r\n <FunnelSimpleIcon weight=\"bold\" />\r\n Filtro\r\n {filters.length > 0 && (\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"h-[18.24px] rounded-[3.2px] px-[5.12px] font-mono font-normal text-[10.4px]\"\r\n >\r\n {filters.length}\r\n </Badge>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n aria-describedby={descriptionId}\r\n aria-labelledby={labelId}\r\n className=\"flex w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] flex-col gap-3.5 p-4 sm:min-w-[380px]\"\r\n {...props}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <h4 id={labelId} className=\"font-medium leading-none\">\r\n {filters.length > 0 ? 'Filtros' : 'Nenhum filtro aplicado'}\r\n </h4>\r\n <p\r\n id={descriptionId}\r\n className={cn(\r\n 'text-gray-400 text-sm',\r\n filters.length > 0 && 'sr-only'\r\n )}\r\n >\r\n {filters.length > 0\r\n ? 'Modifique os filtros para filtrar suas linhas.'\r\n : 'Adicione filtros para filtrar suas linhas.'}\r\n </p>\r\n </div>\r\n {filters.length > 0 ? (\r\n <SortableContent asChild>\r\n <div\r\n role=\"list\"\r\n className=\"flex max-h-[300px] flex-col gap-2 overflow-y-auto p-1\"\r\n >\r\n {filters.map((filter, index) => (\r\n <DataTableFilterItem<TData>\r\n key={filter.filterId}\r\n filter={filter}\r\n index={index}\r\n filterItemId={`${id}-filter-${filter.filterId}`}\r\n joinOperator={joinOperator}\r\n setJoinOperator={setJoinOperator}\r\n columns={columns}\r\n onFilterUpdate={onFilterUpdate}\r\n onFilterRemove={onFilterRemove}\r\n />\r\n ))}\r\n </div>\r\n </SortableContent>\r\n ) : null}\r\n <div className=\"flex w-full items-center gap-2\">\r\n <Button\r\n size=\"sm\"\r\n className=\"rounded\"\r\n ref={addButtonRef}\r\n onClick={onFilterAdd}\r\n >\r\n Adicionar filtro\r\n </Button>\r\n {filters.length > 0 ? (\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"rounded\"\r\n onClick={onFiltersReset}\r\n >\r\n Resetar filtros\r\n </Button>\r\n ) : null}\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n <SortableOverlay>\r\n <div className=\"flex items-center gap-2\">\r\n <div className=\"h-10 min-w-[72px] rounded-sm bg-primary/10\" />\r\n <div className=\"h-10 w-32 rounded-sm bg-primary/10\" />\r\n <div className=\"h-10 w-32 rounded-sm bg-primary/10\" />\r\n <div className=\"h-10 min-w-36 flex-1 rounded-sm bg-primary/10\" />\r\n <div className=\"size-8 shrink-0 rounded-sm bg-primary/10\" />\r\n <div className=\"size-8 shrink-0 rounded-sm bg-primary/10\" />\r\n </div>\r\n </SortableOverlay>\r\n </Sortable>\r\n )\r\n}\r\n\r\ninterface DataTableFilterItemProps<TData> {\r\n filter: ExtendedColumnFilter<TData>\r\n index: number\r\n filterItemId: string\r\n joinOperator: JoinOperator\r\n setJoinOperator: (value: JoinOperator) => void\r\n columns: Column<TData>[]\r\n onFilterUpdate: (\r\n filterId: string,\r\n updates: Partial<Omit<ExtendedColumnFilter<TData>, 'filterId'>>\r\n ) => void\r\n onFilterRemove: (filterId: string) => void\r\n}\r\n\r\nfunction DataTableFilterItem<TData>({\r\n filter,\r\n index,\r\n filterItemId,\r\n joinOperator,\r\n setJoinOperator,\r\n columns,\r\n onFilterUpdate,\r\n onFilterRemove,\r\n}: DataTableFilterItemProps<TData>) {\r\n const [showFieldSelector, setShowFieldSelector] = React.useState(false)\r\n const [showOperatorSelector, setShowOperatorSelector] = React.useState(false)\r\n const [showValueSelector, setShowValueSelector] = React.useState(false)\r\n\r\n const column = columns.find(column => column.id === filter.id)\r\n if (!column) return null\r\n\r\n const joinOperatorListboxId = `${filterItemId}-join-operator-listbox`\r\n const fieldListboxId = `${filterItemId}-field-listbox`\r\n const operatorListboxId = `${filterItemId}-operator-listbox`\r\n const inputId = `${filterItemId}-input`\r\n\r\n const columnMeta = column.columnDef.meta\r\n const filterOperators = getFilterOperators(filter.variant)\r\n\r\n const onItemKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (\r\n event.target instanceof HTMLInputElement ||\r\n event.target instanceof HTMLTextAreaElement\r\n ) {\r\n return\r\n }\r\n\r\n if (showFieldSelector || showOperatorSelector || showValueSelector) {\r\n return\r\n }\r\n\r\n if (REMOVE_FILTER_SHORTCUTS.includes(event.key.toLowerCase())) {\r\n event.preventDefault()\r\n onFilterRemove(filter.filterId)\r\n }\r\n },\r\n [\r\n filter.filterId,\r\n showFieldSelector,\r\n showOperatorSelector,\r\n showValueSelector,\r\n onFilterRemove,\r\n ]\r\n )\r\n\r\n return (\r\n <SortableItem value={filter.filterId} asChild>\r\n <div\r\n role=\"listitem\"\r\n id={filterItemId}\r\n tabIndex={-1}\r\n className=\"flex items-center gap-2\"\r\n onKeyDown={onItemKeyDown}\r\n >\r\n <div className=\"min-w-[72px] text-center\">\r\n {index === 0 ? (\r\n <span className=\"text-gray-400 text-sm\">Onde</span>\r\n ) : index === 1 ? (\r\n <Select\r\n value={joinOperator}\r\n onValueChange={(value: JoinOperator) => setJoinOperator(value)}\r\n >\r\n <SelectTrigger\r\n aria-label=\"Select join operator\"\r\n aria-controls={joinOperatorListboxId}\r\n className=\"h-10 rounded lowercase [&[data-size]]:h-10\"\r\n >\r\n <SelectValue placeholder={joinOperator} />\r\n </SelectTrigger>\r\n <SelectContent\r\n id={joinOperatorListboxId}\r\n position=\"popper\"\r\n className=\"min-w-(--radix-select-trigger-width) lowercase\"\r\n >\r\n {dataTableConfig.joinOperators.map(joinOperator => (\r\n <SelectItem key={joinOperator} value={joinOperator}>\r\n {joinOperator}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n ) : (\r\n <span className=\"text-gray-400 text-sm\">{joinOperator}</span>\r\n )}\r\n </div>\r\n <Popover open={showFieldSelector} onOpenChange={setShowFieldSelector}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n role=\"combobox\"\r\n aria-controls={fieldListboxId}\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"w-32 justify-between rounded font-normal\"\r\n >\r\n <span className=\"truncate\">\r\n {columns.find(column => column.id === filter.id)?.columnDef.meta\r\n ?.label ?? 'Selecione o campo'}\r\n </span>\r\n <CaretUpDownIcon className=\"opacity-50\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n id={fieldListboxId}\r\n align=\"start\"\r\n className=\"w-40 origin-[var(--radix-popover-content-transform-origin)] p-0\"\r\n >\r\n <Command>\r\n <CommandInput placeholder=\"Buscar campo...\" />\r\n <CommandList>\r\n <CommandEmpty>Nenhum campo encontrado.</CommandEmpty>\r\n <CommandGroup>\r\n {columns.map(column => (\r\n <CommandItem\r\n key={column.id}\r\n value={column.id}\r\n onSelect={value => {\r\n onFilterUpdate(filter.filterId, {\r\n id: value as Extract<keyof TData, string>,\r\n variant: column.columnDef.meta?.variant ?? 'text',\r\n operator: getDefaultFilterOperator(\r\n column.columnDef.meta?.variant ?? 'text'\r\n ),\r\n value: '',\r\n })\r\n\r\n setShowFieldSelector(false)\r\n }}\r\n >\r\n <span className=\"truncate\">\r\n {column.columnDef.meta?.label}\r\n </span>\r\n <CheckIcon\r\n className={cn(\r\n 'ml-auto',\r\n column.id === filter.id ? 'opacity-100' : 'opacity-0'\r\n )}\r\n />\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n <Select\r\n open={showOperatorSelector}\r\n onOpenChange={setShowOperatorSelector}\r\n value={filter.operator}\r\n onValueChange={(value: FilterOperator) =>\r\n onFilterUpdate(filter.filterId, {\r\n operator: value,\r\n value:\r\n value === 'isEmpty' || value === 'isNotEmpty'\r\n ? ''\r\n : filter.value,\r\n })\r\n }\r\n >\r\n <SelectTrigger\r\n aria-controls={operatorListboxId}\r\n className=\"h-10 w-32 rounded lowercase [&[data-size]]:h-10\"\r\n >\r\n <div className=\"truncate\">\r\n <SelectValue placeholder={filter.operator} />\r\n </div>\r\n </SelectTrigger>\r\n <SelectContent\r\n id={operatorListboxId}\r\n className=\"origin-[var(--radix-select-content-transform-origin)]\"\r\n >\r\n {filterOperators.map(operator => (\r\n <SelectItem\r\n key={operator.value}\r\n value={operator.value}\r\n className=\"lowercase\"\r\n >\r\n {operator.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <div className=\"min-w-36 flex-1\">\r\n {onFilterInputRender({\r\n filter,\r\n inputId,\r\n column,\r\n columnMeta,\r\n onFilterUpdate,\r\n showValueSelector,\r\n setShowValueSelector,\r\n })}\r\n </div>\r\n <Button\r\n aria-controls={filterItemId}\r\n variant=\"outline\"\r\n size=\"icon\"\r\n className=\"size-8 rounded\"\r\n onClick={() => onFilterRemove(filter.filterId)}\r\n >\r\n <TrashIcon weight=\"bold\" />\r\n </Button>\r\n <SortableItemHandle asChild>\r\n <Button variant=\"outline\" size=\"icon\" className=\"size-8 rounded\">\r\n <DotsSixVerticalIcon weight=\"bold\" />\r\n </Button>\r\n </SortableItemHandle>\r\n </div>\r\n </SortableItem>\r\n )\r\n}\r\n\r\nfunction onFilterInputRender<TData>({\r\n filter,\r\n inputId,\r\n column,\r\n columnMeta,\r\n onFilterUpdate,\r\n showValueSelector,\r\n setShowValueSelector,\r\n}: {\r\n filter: ExtendedColumnFilter<TData>\r\n inputId: string\r\n column: Column<TData>\r\n columnMeta?: ColumnMeta<TData, unknown>\r\n onFilterUpdate: (\r\n filterId: string,\r\n updates: Partial<Omit<ExtendedColumnFilter<TData>, 'filterId'>>\r\n ) => void\r\n showValueSelector: boolean\r\n setShowValueSelector: (value: boolean) => void\r\n}) {\r\n if (filter.operator === 'isEmpty' || filter.operator === 'isNotEmpty') {\r\n return (\r\n <div\r\n id={inputId}\r\n role=\"status\"\r\n aria-label={`${columnMeta?.label} filter is ${\r\n filter.operator === 'isEmpty' ? 'empty' : 'not empty'\r\n }`}\r\n aria-live=\"polite\"\r\n className=\"h-10 w-full rounded border bg-transparent dark:bg-input/30\"\r\n />\r\n )\r\n }\r\n\r\n switch (filter.variant) {\r\n case 'text':\r\n case 'number':\r\n case 'range': {\r\n if (\r\n (filter.variant === 'range' && filter.operator === 'isBetween') ||\r\n filter.operator === 'isBetween'\r\n ) {\r\n return (\r\n <DataTableRangeFilter\r\n filter={filter}\r\n column={column}\r\n inputId={inputId}\r\n onFilterUpdate={onFilterUpdate}\r\n />\r\n )\r\n }\r\n\r\n const isNumber = filter.variant === 'number' || filter.variant === 'range'\r\n\r\n return (\r\n <Input\r\n id={inputId}\r\n type={isNumber ? 'number' : filter.variant}\r\n aria-label={`${columnMeta?.label} filter value`}\r\n aria-describedby={`${inputId}-description`}\r\n inputMode={isNumber ? 'numeric' : undefined}\r\n placeholder={columnMeta?.placeholder ?? 'Enter a value...'}\r\n className=\"h-10 w-full rounded\"\r\n defaultValue={\r\n typeof filter.value === 'string' ? filter.value : undefined\r\n }\r\n onChange={event =>\r\n onFilterUpdate(filter.filterId, {\r\n value: event.target.value,\r\n })\r\n }\r\n />\r\n )\r\n }\r\n\r\n case 'boolean': {\r\n if (Array.isArray(filter.value)) return null\r\n\r\n const inputListboxId = `${inputId}-listbox`\r\n\r\n return (\r\n <Select\r\n open={showValueSelector}\r\n onOpenChange={setShowValueSelector}\r\n value={filter.value}\r\n onValueChange={value =>\r\n onFilterUpdate(filter.filterId, {\r\n value,\r\n })\r\n }\r\n >\r\n <SelectTrigger\r\n id={inputId}\r\n aria-controls={inputListboxId}\r\n aria-label={`${columnMeta?.label} boolean filter`}\r\n className=\"h-10 w-full rounded [&[data-size]]:h-10\"\r\n >\r\n <SelectValue placeholder={filter.value ? 'True' : 'False'} />\r\n </SelectTrigger>\r\n <SelectContent id={inputListboxId}>\r\n <SelectItem value=\"true\">True</SelectItem>\r\n <SelectItem value=\"false\">False</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n case 'select':\r\n case 'multiSelect': {\r\n const inputListboxId = `${inputId}-listbox`\r\n\r\n const multiple = filter.variant === 'multiSelect'\r\n const selectedValues = multiple\r\n ? Array.isArray(filter.value)\r\n ? filter.value\r\n : []\r\n : typeof filter.value === 'string'\r\n ? filter.value\r\n : undefined\r\n\r\n return (\r\n <Faceted\r\n open={showValueSelector}\r\n onOpenChange={setShowValueSelector}\r\n value={selectedValues}\r\n onValueChange={value => {\r\n onFilterUpdate(filter.filterId, {\r\n value,\r\n })\r\n }}\r\n multiple={multiple}\r\n >\r\n <FacetedTrigger asChild>\r\n <Button\r\n id={inputId}\r\n aria-controls={inputListboxId}\r\n aria-label={`${columnMeta?.label} filter value${multiple ? 's' : ''}`}\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"w-full rounded font-normal\"\r\n >\r\n <FacetedBadgeList\r\n options={columnMeta?.options}\r\n placeholder={\r\n columnMeta?.placeholder ??\r\n `Select option${multiple ? 's' : ''}...`\r\n }\r\n />\r\n </Button>\r\n </FacetedTrigger>\r\n <FacetedContent\r\n id={inputListboxId}\r\n className=\"w-[200px] origin-[var(--radix-popover-content-transform-origin)]\"\r\n >\r\n <FacetedInput\r\n aria-label={`Search ${columnMeta?.label} options`}\r\n placeholder={columnMeta?.placeholder ?? 'Search options...'}\r\n />\r\n <FacetedList>\r\n <FacetedEmpty>Nenhum resultado</FacetedEmpty>\r\n <FacetedGroup>\r\n {columnMeta?.options?.map(option => (\r\n <FacetedItem key={option.value} value={option.value}>\r\n {option.icon && <option.icon />}\r\n <span>{option.label}</span>\r\n {option.count && (\r\n <span className=\"ml-auto font-mono text-xs\">\r\n {option.count}\r\n </span>\r\n )}\r\n </FacetedItem>\r\n ))}\r\n </FacetedGroup>\r\n </FacetedList>\r\n </FacetedContent>\r\n </Faceted>\r\n )\r\n }\r\n\r\n case 'date':\r\n case 'dateRange': {\r\n const inputListboxId = `${inputId}-listbox`\r\n\r\n const dateValue = Array.isArray(filter.value)\r\n ? filter.value.filter(Boolean)\r\n : [filter.value, filter.value].filter(Boolean)\r\n\r\n const displayValue =\r\n filter.operator === 'isBetween' && dateValue.length === 2\r\n ? `${formatDate(new Date(Number(dateValue[0])))} - ${formatDate(\r\n new Date(Number(dateValue[1]))\r\n )}`\r\n : dateValue[0]\r\n ? formatDate(new Date(Number(dateValue[0])))\r\n : 'Escolha uma data'\r\n\r\n return (\r\n <Popover open={showValueSelector} onOpenChange={setShowValueSelector}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n id={inputId}\r\n aria-controls={inputListboxId}\r\n aria-label={`${columnMeta?.label} date filter`}\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className={cn(\r\n 'w-full justify-start rounded text-left font-normal',\r\n !filter.value && 'text-gray-400'\r\n )}\r\n >\r\n <CalendarBlankIcon weight=\"bold\" />\r\n <span className=\"truncate text-sm\">{displayValue}</span>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n id={inputListboxId}\r\n align=\"start\"\r\n className=\"w-auto origin-[var(--radix-popover-content-transform-origin)] p-0\"\r\n >\r\n {filter.operator === 'isBetween' ? (\r\n <Calendar\r\n aria-label={`Select ${columnMeta?.label} date range`}\r\n mode=\"range\"\r\n selected={\r\n dateValue.length === 2\r\n ? {\r\n from: new Date(Number(dateValue[0])),\r\n to: new Date(Number(dateValue[1])),\r\n }\r\n : {\r\n from: new Date(),\r\n to: new Date(),\r\n }\r\n }\r\n onSelect={date => {\r\n onFilterUpdate(filter.filterId, {\r\n value: date\r\n ? [\r\n (date.from?.getTime() ?? '').toString(),\r\n (date.to?.getTime() ?? '').toString(),\r\n ]\r\n : [],\r\n })\r\n }}\r\n />\r\n ) : (\r\n <Calendar\r\n aria-label={`Select ${columnMeta?.label} date`}\r\n mode=\"single\"\r\n selected={\r\n dateValue[0] ? new Date(Number(dateValue[0])) : undefined\r\n }\r\n onSelect={date => {\r\n onFilterUpdate(filter.filterId, {\r\n value: (date?.getTime() ?? '').toString(),\r\n })\r\n }}\r\n />\r\n )}\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n }\r\n\r\n default:\r\n return null\r\n }\r\n}\r\n"],"names":["REMOVE_FILTER_SHORTCUTS","DataTableFilterList","table","debounceMs","throttleMs","shallow","props","id","React","labelId","descriptionId","open","setOpen","addButtonRef","columns","column","filters","setFilters","useQueryState","getFiltersStateParser","field","debouncedSetFilters","useDebouncedCallback","joinOperator","setJoinOperator","parseAsStringEnum","onFilterAdd","getDefaultFilterOperator","generateId","onFilterUpdate","filterId","updates","prevFilters","filter","onFilterRemove","requestAnimationFrame","onFiltersReset","onKeyDown","event","HTMLInputElement","HTMLTextAreaElement","window","onTriggerKeyDown","Sortable","item","Popover","PopoverTrigger","Button","FunnelSimpleIcon","Badge","PopoverContent","cn","SortableContent","index","DataTableFilterItem","SortableOverlay","filterItemId","showFieldSelector","setShowFieldSelector","showOperatorSelector","setShowOperatorSelector","showValueSelector","setShowValueSelector","joinOperatorListboxId","fieldListboxId","operatorListboxId","inputId","columnMeta","filterOperators","getFilterOperators","onItemKeyDown","SortableItem","Select","value","SelectTrigger","SelectValue","SelectContent","dataTableConfig","SelectItem","CaretUpDownIcon","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","CheckIcon","operator","onFilterInputRender","DataTableRangeFilter","isNumber","Input","undefined","Array","inputListboxId","multiple","selectedValues","Faceted","FacetedTrigger","FacetedBadgeList","FacetedContent","FacetedInput","FacetedList","FacetedEmpty","FacetedGroup","option","FacetedItem","dateValue","Boolean","displayValue","formatDate","Date","Number","CalendarBlankIcon","Calendar","date","TrashIcon","SortableItemHandle","DotsSixVerticalIcon"],"mappings":";6uBAuEA,IAAMA,EAA0B,CAAC,YAAa,SAAS,CAUhD,SAASC,EAA2B,CACzCC,MAAAA,CAAK,CACLC,WAAAA,EAfkB,GAeM,CACxBC,WAAAA,EAfkB,EAeM,CACxBC,QAAAA,EAAU,EAAI,CACd,GAAGC,EAC6B,EAChC,IAAMC,EAAKC,EAAAA,KAAW,GAChBC,EAAUD,EAAAA,KAAW,GACrBE,EAAgBF,EAAAA,KAAW,GAC3B,CAACG,EAAMC,EAAQ,CAAGJ,EAAAA,QAAc,CAAC,IACjCK,EAAeL,EAAAA,MAAY,CAAoB,MAE/CM,EAAUN,EAAAA,OAAa,CAAC,IACrBN,EACJ,aAAa,GACb,MAAM,CAACa,GAAUA,EAAO,SAAS,CAAC,kBAAkB,EACtD,CAACb,EAAM,EAEJ,CAACc,EAASC,EAAW,CAAGC,GAAAA,EAAAA,aAAAA,EAlCZ,UAoChBC,GAAAA,EAAAA,qBAAAA,EAA6BL,EAAQ,GAAG,CAACM,GAASA,EAAM,EAAE,GACvD,WAAW,CAAC,EAAE,EACd,WAAW,CAAC,CACX,eAAgB,GAChBf,QAAAA,EACAD,WAAAA,CACF,IAEEiB,EAAsBC,GAAAA,EAAAA,oBAAAA,EAAqBL,EAAYd,GAEvD,CAACoB,EAAcC,EAAgB,CAAGN,GAAAA,EAAAA,aAAAA,EA7ChB,eA+CtBO,GAAAA,EAAAA,iBAAAA,EAAkB,CAAC,IAAK,KAAK,EAAE,WAAW,CAAC,KAAK,WAAW,CAAC,CAC1D,eAAgB,GAChBpB,QAAAA,CACF,IAGIqB,EAAclB,EAAAA,WAAiB,CAAC,KACpC,IAAMO,EAASD,CAAO,CAAC,EAAE,CAEpBC,GAELM,EAAoB,IACfL,EACH,CACE,GAAID,EAAO,EAAE,CACb,MAAO,GACP,QAASA,EAAO,SAAS,CAAC,IAAI,EAAE,SAAW,OAC3C,SAAUY,GAAAA,EAAAA,wBAAAA,EACRZ,EAAO,SAAS,CAAC,IAAI,EAAE,SAAW,QAEpC,SAAUa,GAAAA,EAAAA,UAAAA,EAAW,CAAE,OAAQ,CAAE,EACnC,EACD,CACH,EAAG,CAACd,EAASE,EAASK,EAAoB,EAEpCQ,EAAiBrB,EAAAA,WAAiB,CACtC,CACEsB,EACAC,KAEAV,EAAoBW,GACKA,EAAY,GAAG,CAACC,GACrC,EAAW,QAAQ,GAAKH,EACf,CAAE,GAAGG,CAAM,CAAE,GAAGF,CAAO,EAEzBE,GAIb,EACA,CAACZ,EAAoB,EAGjBa,EAAiB1B,EAAAA,WAAiB,CACtC,IAIOS,EAHkBD,EAAQ,MAAM,CACnCiB,GAAUA,EAAO,QAAQ,GAAKH,IAGhCK,sBAAsB,KACpBtB,EAAa,OAAO,EAAE,OACxB,EACF,EACA,CAACG,EAASC,EAAW,EAGjBmB,EAAiB5B,EAAAA,WAAiB,CAAC,KAClCS,EAAW,MACXO,EAAgB,IACvB,EAAG,CAACP,EAAYO,EAAgB,EAEhChB,EAAAA,SAAe,CAAC,KACd,SAAS6B,EAAUC,CAAoB,GAEnCA,CAAAA,EAAM,MAAM,YAAYC,kBACxBD,EAAM,MAAM,YAAYE,mBAAkB,IA7GvB,MAmHnBF,EAAM,GAAG,CAAC,WAAW,IACpBA,EAAM,OAAO,EACbA,EAAM,OAAO,EACbA,EAAM,QAAQ,GAEfA,EAAM,cAAc,GACpB1B,EAAQ,KAzHW,MA6HnB0B,EAAM,GAAG,CAAC,WAAW,IACrBA,EAAM,QAAQ,EACdtB,EAAQ,MAAM,CAAG,IAEjBsB,EAAM,cAAc,GACpBJ,EAAelB,CAAO,CAACA,EAAQ,MAAM,CAAG,EAAE,EAAE,UAAY,KAE5D,CAGA,OADAyB,OAAO,gBAAgB,CAAC,UAAWJ,GAC5B,IAAMI,OAAO,mBAAmB,CAAC,UAAWJ,EACrD,EAAG,CAACrB,EAASkB,EAAe,EAE5B,IAAMQ,EAAmBlC,EAAAA,WAAiB,CACxC,IAEIR,EAAwB,QAAQ,CAACsC,EAAM,GAAG,CAAC,WAAW,KACtDtB,EAAQ,MAAM,CAAG,IAEjBsB,EAAM,cAAc,GACpBJ,EAAelB,CAAO,CAACA,EAAQ,MAAM,CAAG,EAAE,EAAE,UAAY,IAE5D,EACA,CAACA,EAASkB,EAAe,EAG3B,MACE,WAACS,EAAAA,QAAQA,CAAAA,CACP,MAAO3B,EACP,cAAeC,EACf,aAAc2B,GAAQA,EAAK,QAAQ,C,UAEnC,WAACC,EAAAA,OAAOA,CAAAA,CAAC,KAAMlC,EAAM,aAAcC,E,UACjC,UAACkC,EAAAA,cAAcA,CAAAA,CAAC,QAAO,G,SACrB,WAACC,EAAAA,MAAMA,CAAAA,CAAC,QAAQ,UAAU,KAAK,KAAK,UAAWL,E,UAC7C,UAACM,EAAAA,gBAAgBA,CAAAA,CAAC,OAAO,M,GAAS,SAEjChC,EAAQ,MAAM,CAAG,GAChB,UAACiC,EAAAA,KAAKA,CAAAA,CACJ,QAAQ,YACR,UAAU,8E,SAETjC,EAAQ,MAAM,QAKvB,WAACkC,EAAAA,cAAcA,CAAAA,CACb,mBAAkBxC,EAClB,kBAAiBD,EACjB,UAAU,gKACT,GAAGH,CAAK,C,UAET,WAAC,OAAI,UAAU,sB,UACb,UAAC,MAAG,GAAIG,EAAS,UAAU,2B,SACxBO,EAAQ,MAAM,CAAG,EAAI,UAAY,wB,GAEpC,UAAC,KACC,GAAIN,EACJ,UAAWyC,GAAAA,EAAAA,EAAAA,EACT,wBACAnC,EAAQ,MAAM,CAAG,GAAK,W,SAGvBA,EAAQ,MAAM,CAAG,EACd,iDACA,4C,MAGPA,EAAQ,MAAM,CAAG,EAChB,UAACoC,EAAAA,eAAeA,CAAAA,CAAC,QAAO,G,SACtB,UAAC,OACC,KAAK,OACL,UAAU,wD,SAETpC,EAAQ,GAAG,CAAC,CAACiB,EAAQoB,IACpB,UAACC,EAAAA,CAEC,OAAQrB,EACR,MAAOoB,EACP,aAAc,CAAC,EAAE9C,EAAG,QAAQ,EAAE0B,EAAO,QAAQ,CAAC,CAAC,CAC/C,aAAcV,EACd,gBAAiBC,EACjB,QAASV,EACT,eAAgBe,EAChB,eAAgBK,C,EARXD,EAAO,QAAQ,E,KAa1B,KACJ,WAAC,OAAI,UAAU,iC,UACb,UAACc,EAAAA,MAAMA,CAAAA,CACL,KAAK,KACL,UAAU,UACV,IAAKlC,EACL,QAASa,E,SACV,kB,GAGAV,EAAQ,MAAM,CAAG,EAChB,UAAC+B,EAAAA,MAAMA,CAAAA,CACL,QAAQ,UACR,KAAK,KACL,UAAU,UACV,QAASX,E,SACV,iB,GAGC,K,SAIV,UAACmB,EAAAA,eAAeA,CAAAA,C,SACd,WAAC,OAAI,UAAU,0B,UACb,UAAC,OAAI,UAAU,4C,GACf,UAAC,OAAI,UAAU,oC,GACf,UAAC,OAAI,UAAU,oC,GACf,UAAC,OAAI,UAAU,+C,GACf,UAAC,OAAI,UAAU,0C,GACf,UAAC,OAAI,UAAU,0C,UAKzB,CAgBA,SAASD,EAA2B,CAClCrB,OAAAA,CAAM,CACNoB,MAAAA,CAAK,CACLG,aAAAA,CAAY,CACZjC,aAAAA,CAAY,CACZC,gBAAAA,CAAe,CACfV,QAAAA,CAAO,CACPe,eAAAA,CAAc,CACdK,eAAAA,CAAc,CACkB,EAChC,GAAM,CAACuB,EAAmBC,EAAqB,CAAGlD,EAAAA,QAAc,CAAC,IAC3D,CAACmD,EAAsBC,EAAwB,CAAGpD,EAAAA,QAAc,CAAC,IACjE,CAACqD,EAAmBC,EAAqB,CAAGtD,EAAAA,QAAc,CAAC,IAE3DO,EAASD,EAAQ,IAAI,CAACC,GAAUA,EAAO,EAAE,GAAKkB,EAAO,EAAE,EAC7D,GAAI,CAAClB,EAAQ,OAAO,KAEpB,IAAMgD,EAAwB,CAAC,EAAEP,EAAa,sBAAsB,CAAC,CAC/DQ,EAAiB,CAAC,EAAER,EAAa,cAAc,CAAC,CAChDS,EAAoB,CAAC,EAAET,EAAa,iBAAiB,CAAC,CACtDU,EAAU,CAAC,EAAEV,EAAa,MAAM,CAAC,CAEjCW,EAAapD,EAAO,SAAS,CAAC,IAAI,CAClCqD,EAAkBC,GAAAA,EAAAA,kBAAAA,EAAmBpC,EAAO,OAAO,EAEnDqC,EAAgB9D,EAAAA,WAAiB,CACrC,KAEI8B,CAAAA,EAAM,MAAM,YAAYC,kBACxBD,EAAM,MAAM,YAAYE,mBAAkB,IAKxCiB,GAAqBE,GAAwBE,GAI7C7D,EAAwB,QAAQ,CAACsC,EAAM,GAAG,CAAC,WAAW,MACxDA,EAAM,cAAc,GACpBJ,EAAeD,EAAO,QAAQ,GAElC,EACA,CACEA,EAAO,QAAQ,CACfwB,EACAE,EACAE,EACA3B,EACD,EAGH,MACE,UAACqC,EAAAA,YAAYA,CAAAA,CAAC,MAAOtC,EAAO,QAAQ,CAAE,QAAO,G,SAC3C,WAAC,OACC,KAAK,WACL,GAAIuB,EACJ,SAAU,GACV,UAAU,0BACV,UAAWc,E,UAEX,UAAC,OAAI,UAAU,2B,SACZjB,IAAAA,EACC,UAAC,QAAK,UAAU,wB,SAAwB,M,GACtCA,IAAAA,EACF,WAACmB,EAAAA,MAAMA,CAAAA,CACL,MAAOjD,EACP,cAAe,GAAyBC,EAAgBiD,G,UAExD,UAACC,EAAAA,aAAaA,CAAAA,CACZ,aAAW,uBACX,gBAAeX,EACf,UAAU,6C,SAEV,UAACY,EAAAA,WAAWA,CAAAA,CAAC,YAAapD,C,KAE5B,UAACqD,EAAAA,aAAaA,CAAAA,CACZ,GAAIb,EACJ,SAAS,SACT,UAAU,iD,SAETc,EAAAA,eAAAA,CAAAA,aAAAA,CAAAA,GAAiC,CAACtD,GACjC,UAACuD,EAAAA,UAAUA,CAAAA,CAAoB,MAAOvD,E,SACnCA,C,EADcA,G,MAOvB,UAAC,QAAK,UAAU,wB,SAAyBA,C,KAG7C,WAACsB,EAAAA,OAAOA,CAAAA,CAAC,KAAMY,EAAmB,aAAcC,E,UAC9C,UAACZ,EAAAA,cAAcA,CAAAA,CAAC,QAAO,G,SACrB,WAACC,EAAAA,MAAMA,CAAAA,CACL,KAAK,WACL,gBAAeiB,EACf,QAAQ,UACR,KAAK,KACL,UAAU,2C,UAEV,UAAC,QAAK,UAAU,W,SACblD,EAAQ,IAAI,CAACC,GAAUA,EAAO,EAAE,GAAKkB,EAAO,EAAE,GAAG,UAAU,MACxD,OAAS,mB,GAEf,UAAC8C,EAAAA,eAAeA,CAAAA,CAAC,UAAU,Y,QAG/B,UAAC7B,EAAAA,cAAcA,CAAAA,CACb,GAAIc,EACJ,MAAM,QACN,UAAU,kE,SAEV,WAACgB,EAAAA,OAAOA,CAAAA,C,UACN,UAACC,EAAAA,YAAYA,CAAAA,CAAC,YAAY,iB,GAC1B,WAACC,EAAAA,WAAWA,CAAAA,C,UACV,UAACC,EAAAA,YAAYA,CAAAA,C,SAAC,0B,GACd,UAACC,EAAAA,YAAYA,CAAAA,C,SACVtE,EAAQ,GAAG,CAACC,GACX,WAACsE,EAAAA,WAAWA,CAAAA,CAEV,MAAOtE,EAAO,EAAE,CAChB,SAAU0D,IACR5C,EAAeI,EAAO,QAAQ,CAAE,CAC9B,GAAIwC,EACJ,QAAS1D,EAAO,SAAS,CAAC,IAAI,EAAE,SAAW,OAC3C,SAAUY,GAAAA,EAAAA,wBAAAA,EACRZ,EAAO,SAAS,CAAC,IAAI,EAAE,SAAW,QAEpC,MAAO,EACT,GAEA2C,EAAqB,GACvB,E,UAEA,UAAC,QAAK,UAAU,W,SACb3C,EAAO,SAAS,CAAC,IAAI,EAAE,K,GAE1B,UAACuE,EAAAA,SAASA,CAAAA,CACR,UAAWnC,GAAAA,EAAAA,EAAAA,EACT,UACApC,EAAO,EAAE,GAAKkB,EAAO,EAAE,CAAG,cAAgB,Y,KArBzClB,EAAO,EAAE,E,cA+B5B,WAACyD,EAAAA,MAAMA,CAAAA,CACL,KAAMb,EACN,aAAcC,EACd,MAAO3B,EAAO,QAAQ,CACtB,cAAe,GACbJ,EAAeI,EAAO,QAAQ,CAAE,CAC9B,SAAUwC,EACV,MACEA,YAAAA,GAAuBA,eAAAA,EACnB,GACAxC,EAAO,KAAK,G,UAItB,UAACyC,EAAAA,aAAaA,CAAAA,CACZ,gBAAeT,EACf,UAAU,kD,SAEV,UAAC,OAAI,UAAU,W,SACb,UAACU,EAAAA,WAAWA,CAAAA,CAAC,YAAa1C,EAAO,QAAQ,OAG7C,UAAC2C,EAAAA,aAAaA,CAAAA,CACZ,GAAIX,EACJ,UAAU,wD,SAETG,EAAgB,GAAG,CAACmB,GACnB,UAACT,EAAAA,UAAUA,CAAAA,CAET,MAAOS,EAAS,KAAK,CACrB,UAAU,Y,SAETA,EAAS,KAAK,EAJVA,EAAS,KAAK,E,MAS3B,UAAC,OAAI,UAAU,kB,SACZC,SA6ByB,CAClCvD,OAAAA,CAAM,CACNiC,QAAAA,CAAO,CACPnD,OAAAA,CAAM,CACNoD,WAAAA,CAAU,CACVtC,eAAAA,CAAc,CACdgC,kBAAAA,CAAiB,CACjBC,qBAAAA,CAAoB,CAYrB,EACC,GAAI7B,YAAAA,EAAO,QAAQ,EAAkBA,eAAAA,EAAO,QAAQ,CAClD,MACE,UAAC,OACC,GAAIiC,EACJ,KAAK,SACL,aAAY,CAAC,EAAEC,GAAY,MAAM,WAAW,EAC1ClC,YAAAA,EAAO,QAAQ,CAAiB,QAAU,aAC1C,CACF,YAAU,SACV,UAAU,4D,GAKhB,OAAQA,EAAO,OAAO,EACpB,IAAK,OACL,IAAK,SACL,IAAK,QAAS,CACZ,GACGA,UAAAA,EAAO,OAAO,EAAgBA,cAAAA,EAAO,QAAQ,EAC9CA,cAAAA,EAAO,QAAQ,CAEf,MACE,UAACwD,EAAAA,oBAAoBA,CAAAA,CACnB,OAAQxD,EACR,OAAQlB,EACR,QAASmD,EACT,eAAgBrC,C,GAKtB,IAAM6D,EAAWzD,WAAAA,EAAO,OAAO,EAAiBA,UAAAA,EAAO,OAAO,CAE9D,MACE,UAAC0D,EAAAA,KAAKA,CAAAA,CACJ,GAAIzB,EACJ,KAAMwB,EAAW,SAAWzD,EAAO,OAAO,CAC1C,aAAY,CAAC,EAAEkC,GAAY,MAAM,aAAa,CAAC,CAC/C,mBAAkB,CAAC,EAAED,EAAQ,YAAY,CAAC,CAC1C,UAAWwB,EAAW,UAAYE,OAClC,YAAazB,GAAY,aAAe,mBACxC,UAAU,sBACV,aACE,iBAAOlC,EAAO,KAAK,CAAgBA,EAAO,KAAK,CAAG2D,OAEpD,SAAUtD,GACRT,EAAeI,EAAO,QAAQ,CAAE,CAC9B,MAAOK,EAAM,MAAM,CAAC,KAAK,E,EAKnC,CAEA,IAAK,UAAW,CACd,GAAIuD,MAAM,OAAO,CAAC5D,EAAO,KAAK,EAAG,OAAO,KAExC,IAAM6D,EAAiB,CAAC,EAAE5B,EAAQ,QAAQ,CAAC,CAE3C,MACE,WAACM,EAAAA,MAAMA,CAAAA,CACL,KAAMX,EACN,aAAcC,EACd,MAAO7B,EAAO,KAAK,CACnB,cAAewC,GACb5C,EAAeI,EAAO,QAAQ,CAAE,CAC9BwC,MAAAA,CACF,G,UAGF,UAACC,EAAAA,aAAaA,CAAAA,CACZ,GAAIR,EACJ,gBAAe4B,EACf,aAAY,CAAC,EAAE3B,GAAY,MAAM,eAAe,CAAC,CACjD,UAAU,0C,SAEV,UAACQ,EAAAA,WAAWA,CAAAA,CAAC,YAAa1C,EAAO,KAAK,CAAG,OAAS,O,KAEpD,WAAC2C,EAAAA,aAAaA,CAAAA,CAAC,GAAIkB,E,UACjB,UAAChB,EAAAA,UAAUA,CAAAA,CAAC,MAAM,O,SAAO,M,GACzB,UAACA,EAAAA,UAAUA,CAAAA,CAAC,MAAM,Q,SAAQ,O,QAIlC,CAEA,IAAK,SACL,IAAK,cAAe,CAClB,IAAMgB,EAAiB,CAAC,EAAE5B,EAAQ,QAAQ,CAAC,CAErC6B,EAAW9D,gBAAAA,EAAO,OAAO,CACzB+D,EAAiBD,EACnBF,MAAM,OAAO,CAAC5D,EAAO,KAAK,EACxBA,EAAO,KAAK,CACZ,EAAE,CACJ,iBAAOA,EAAO,KAAK,CACjBA,EAAO,KAAK,CACZ2D,OAEN,MACE,WAACK,EAAAA,OAAOA,CAAAA,CACN,KAAMpC,EACN,aAAcC,EACd,MAAOkC,EACP,cAAevB,IACb5C,EAAeI,EAAO,QAAQ,CAAE,CAC9BwC,MAAAA,CACF,EACF,EACA,SAAUsB,E,UAEV,UAACG,EAAAA,cAAcA,CAAAA,CAAC,QAAO,G,SACrB,UAACnD,EAAAA,MAAMA,CAAAA,CACL,GAAImB,EACJ,gBAAe4B,EACf,aAAY,CAAC,EAAE3B,GAAY,MAAM,aAAa,EAAE4B,EAAW,IAAM,GAAG,CAAC,CACrE,QAAQ,UACR,KAAK,KACL,UAAU,6B,SAEV,UAACI,EAAAA,gBAAgBA,CAAAA,CACf,QAAShC,GAAY,QACrB,YACEA,GAAY,aACZ,CAAC,aAAa,EAAE4B,EAAW,IAAM,GAAG,GAAG,CAAC,OAKhD,WAACK,EAAAA,cAAcA,CAAAA,CACb,GAAIN,EACJ,UAAU,mE,UAEV,UAACO,EAAAA,YAAYA,CAAAA,CACX,aAAY,CAAC,OAAO,EAAElC,GAAY,MAAM,QAAQ,CAAC,CACjD,YAAaA,GAAY,aAAe,mB,GAE1C,WAACmC,EAAAA,WAAWA,CAAAA,C,UACV,UAACC,EAAAA,YAAYA,CAAAA,C,SAAC,kB,GACd,UAACC,EAAAA,YAAYA,CAAAA,C,SACVrC,GAAY,SAAS,IAAIsC,GACxB,WAACC,EAAAA,WAAWA,CAAAA,CAAoB,MAAOD,EAAO,KAAK,C,UAChDA,EAAO,IAAI,EAAI,UAACA,EAAO,IAAI,KAC5B,UAAC,Q,SAAMA,EAAO,KAAK,GAClBA,EAAO,KAAK,EACX,UAAC,QAAK,UAAU,4B,SACbA,EAAO,KAAK,KALDA,EAAO,KAAK,E,WAe5C,CAEA,IAAK,OACL,IAAK,YAAa,CAChB,IAAMX,EAAiB,CAAC,EAAE5B,EAAQ,QAAQ,CAAC,CAErCyC,EAAYd,MAAM,OAAO,CAAC5D,EAAO,KAAK,EACxCA,EAAO,KAAK,CAAC,MAAM,CAAC2E,SACpB,CAAC3E,EAAO,KAAK,CAAEA,EAAO,KAAK,CAAC,CAAC,MAAM,CAAC2E,SAElCC,EACJ5E,cAAAA,EAAO,QAAQ,EAAoB0E,IAAAA,EAAU,MAAM,CAC/C,CAAC,EAAEG,GAAAA,EAAAA,UAAAA,EAAW,IAAIC,KAAKC,OAAOL,CAAS,CAAC,EAAE,IAAI,GAAG,EAAEG,GAAAA,EAAAA,UAAAA,EACjD,IAAIC,KAAKC,OAAOL,CAAS,CAAC,EAAE,KAC3B,CACHA,CAAS,CAAC,EAAE,CACVG,GAAAA,EAAAA,UAAAA,EAAW,IAAIC,KAAKC,OAAOL,CAAS,CAAC,EAAE,IACvC,mBAER,MACE,WAAC9D,EAAAA,OAAOA,CAAAA,CAAC,KAAMgB,EAAmB,aAAcC,E,UAC9C,UAAChB,EAAAA,cAAcA,CAAAA,CAAC,QAAO,G,SACrB,WAACC,EAAAA,MAAMA,CAAAA,CACL,GAAImB,EACJ,gBAAe4B,EACf,aAAY,CAAC,EAAE3B,GAAY,MAAM,YAAY,CAAC,CAC9C,QAAQ,UACR,KAAK,KACL,UAAWhB,GAAAA,EAAAA,EAAAA,EACT,qDACA,CAAClB,EAAO,KAAK,EAAI,iB,UAGnB,UAACgF,EAAAA,iBAAiBA,CAAAA,CAAC,OAAO,M,GAC1B,UAAC,QAAK,UAAU,mB,SAAoBJ,C,QAGxC,UAAC3D,EAAAA,cAAcA,CAAAA,CACb,GAAI4C,EACJ,MAAM,QACN,UAAU,oE,SAET7D,cAAAA,EAAO,QAAQ,CACd,UAACiF,EAAAA,QAAQA,CAAAA,CACP,aAAY,CAAC,OAAO,EAAE/C,GAAY,MAAM,WAAW,CAAC,CACpD,KAAK,QACL,SACEwC,IAAAA,EAAU,MAAM,CACZ,CACE,KAAM,IAAII,KAAKC,OAAOL,CAAS,CAAC,EAAE,GAClC,GAAI,IAAII,KAAKC,OAAOL,CAAS,CAAC,EAAE,EAClC,EACA,CACE,KAAM,IAAII,KACV,GAAI,IAAIA,IACV,EAEN,SAAUI,IACRtF,EAAeI,EAAO,QAAQ,CAAE,CAC9B,MAAOkF,EACH,CACGA,CAAAA,EAAK,IAAI,EAAE,WAAa,EAAC,EAAG,QAAQ,GACpCA,CAAAA,EAAK,EAAE,EAAE,WAAa,EAAC,EAAG,QAAQ,GACpC,CACD,EAAE,EAEV,C,GAGF,UAACD,EAAAA,QAAQA,CAAAA,CACP,aAAY,CAAC,OAAO,EAAE/C,GAAY,MAAM,KAAK,CAAC,CAC9C,KAAK,SACL,SACEwC,CAAS,CAAC,EAAE,CAAG,IAAII,KAAKC,OAAOL,CAAS,CAAC,EAAE,GAAKf,OAElD,SAAUuB,IACRtF,EAAeI,EAAO,QAAQ,CAAE,CAC9B,MAAQkF,CAAAA,GAAM,WAAa,EAAC,EAAG,QAAQ,EACzC,EACF,C,OAMZ,CAEA,QACE,OAAO,IACX,CACF,EAxS+B,CACnBlF,OAAAA,EACAiC,QAAAA,EACAnD,OAAAA,EACAoD,WAAAA,EACAtC,eAAAA,EACAgC,kBAAAA,EACAC,qBAAAA,CACF,E,GAEF,UAACf,EAAAA,MAAMA,CAAAA,CACL,gBAAeS,EACf,QAAQ,UACR,KAAK,OACL,UAAU,iBACV,QAAS,IAAMtB,EAAeD,EAAO,QAAQ,E,SAE7C,UAACmF,EAAAA,SAASA,CAAAA,CAAC,OAAO,M,KAEpB,UAACC,EAAAA,kBAAkBA,CAAAA,CAAC,QAAO,G,SACzB,UAACtE,EAAAA,MAAMA,CAAAA,CAAC,QAAQ,UAAU,KAAK,OAAO,UAAU,iB,SAC9C,UAACuE,EAAAA,mBAAmBA,CAAAA,CAAC,OAAO,M,WAMxC,Q"}
1
+ {"version":3,"file":"components\\data-table\\data-table-filter-list.js","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-filter-list.tsx"],"sourcesContent":["\r\n\r\nimport {\r\n CalendarBlankIcon,\r\n CaretUpDownIcon,\r\n CheckIcon,\r\n DotsSixVerticalIcon,\r\n FunnelSimpleIcon,\r\n TrashIcon,\r\n} from '@phosphor-icons/react'\r\nimport type { Column, ColumnMeta, Table } from '@tanstack/react-table'\r\nimport { parseAsStringEnum, useQueryState } from 'nuqs'\r\nimport * as React from 'react'\r\n\r\nimport { Badge } from '@/components/badge'\r\nimport { Button } from '@/components/button'\r\nimport { Calendar } from '@/components/calendar'\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from '@/components/command'\r\nimport { DataTableRangeFilter } from '@/components/data-table/data-table-range-filter'\r\nimport {\r\n Faceted,\r\n FacetedBadgeList,\r\n FacetedContent,\r\n FacetedEmpty,\r\n FacetedGroup,\r\n FacetedInput,\r\n FacetedItem,\r\n FacetedList,\r\n FacetedTrigger,\r\n} from '@/components/faceted'\r\nimport { Input } from '@/components/input'\r\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '@/components/select'\r\nimport {\r\n Sortable,\r\n SortableContent,\r\n SortableItem,\r\n SortableItemHandle,\r\n SortableOverlay,\r\n} from '@/components/sortable'\r\nimport { useDebouncedCallback } from '@/hooks/use-debounced-callback'\r\nimport { getDefaultFilterOperator, getFilterOperators } from '@/lib/data-table'\r\nimport { dataTableConfig } from '@/lib/data-table-config'\r\nimport { formatDate } from '@/lib/format'\r\nimport { generateId } from '@/lib/id'\r\nimport { getFiltersStateParser } from '@/lib/parsers'\r\nimport { cn } from '@/lib/utils'\r\nimport type {\r\n ExtendedColumnFilter,\r\n FilterOperator,\r\n JoinOperator,\r\n} from '@/types/data-table'\r\n\r\nconst FILTERS_KEY = 'filters'\r\nconst JOIN_OPERATOR_KEY = 'joinOperator'\r\nconst DEBOUNCE_MS = 300\r\nconst THROTTLE_MS = 50\r\nconst OPEN_MENU_SHORTCUT = 'f'\r\nconst REMOVE_FILTER_SHORTCUTS = ['backspace', 'delete']\r\n\r\ninterface DataTableFilterListProps<TData>\r\n extends React.ComponentProps<typeof PopoverContent> {\r\n table: Table<TData>\r\n debounceMs?: number\r\n throttleMs?: number\r\n shallow?: boolean\r\n}\r\n\r\nexport function DataTableFilterList<TData>({\r\n table,\r\n debounceMs = DEBOUNCE_MS,\r\n throttleMs = THROTTLE_MS,\r\n shallow = true,\r\n ...props\r\n}: DataTableFilterListProps<TData>) {\r\n const id = React.useId()\r\n const labelId = React.useId()\r\n const descriptionId = React.useId()\r\n const [open, setOpen] = React.useState(false)\r\n const addButtonRef = React.useRef<HTMLButtonElement>(null)\r\n\r\n const columns = React.useMemo(() => {\r\n return table\r\n .getAllColumns()\r\n .filter(column => column.columnDef.enableColumnFilter)\r\n }, [table])\r\n\r\n const [filters, setFilters] = useQueryState(\r\n FILTERS_KEY,\r\n getFiltersStateParser<TData>(columns.map(field => field.id))\r\n .withDefault([])\r\n .withOptions({\r\n clearOnDefault: true,\r\n shallow,\r\n throttleMs,\r\n })\r\n )\r\n const debouncedSetFilters = useDebouncedCallback(setFilters, debounceMs)\r\n\r\n const [joinOperator, setJoinOperator] = useQueryState(\r\n JOIN_OPERATOR_KEY,\r\n parseAsStringEnum(['e', 'ou']).withDefault('e').withOptions({\r\n clearOnDefault: true,\r\n shallow,\r\n })\r\n )\r\n\r\n const onFilterAdd = React.useCallback(() => {\r\n const column = columns[0]\r\n\r\n if (!column) return\r\n\r\n debouncedSetFilters([\r\n ...filters,\r\n {\r\n id: column.id as Extract<keyof TData, string>,\r\n value: '',\r\n variant: column.columnDef.meta?.variant ?? 'text',\r\n operator: getDefaultFilterOperator(\r\n column.columnDef.meta?.variant ?? 'text'\r\n ),\r\n filterId: generateId({ length: 8 }),\r\n },\r\n ])\r\n }, [columns, filters, debouncedSetFilters])\r\n\r\n const onFilterUpdate = React.useCallback(\r\n (\r\n filterId: string,\r\n updates: Partial<Omit<ExtendedColumnFilter<TData>, 'filterId'>>\r\n ) => {\r\n debouncedSetFilters(prevFilters => {\r\n const updatedFilters = prevFilters.map(filter => {\r\n if (filter.filterId === filterId) {\r\n return { ...filter, ...updates } as ExtendedColumnFilter<TData>\r\n }\r\n return filter\r\n })\r\n return updatedFilters\r\n })\r\n },\r\n [debouncedSetFilters]\r\n )\r\n\r\n const onFilterRemove = React.useCallback(\r\n (filterId: string) => {\r\n const updatedFilters = filters.filter(\r\n filter => filter.filterId !== filterId\r\n )\r\n void setFilters(updatedFilters)\r\n requestAnimationFrame(() => {\r\n addButtonRef.current?.focus()\r\n })\r\n },\r\n [filters, setFilters]\r\n )\r\n\r\n const onFiltersReset = React.useCallback(() => {\r\n void setFilters(null)\r\n void setJoinOperator('e')\r\n }, [setFilters, setJoinOperator])\r\n\r\n React.useEffect(() => {\r\n function onKeyDown(event: KeyboardEvent) {\r\n if (\r\n event.target instanceof HTMLInputElement ||\r\n event.target instanceof HTMLTextAreaElement\r\n ) {\r\n return\r\n }\r\n\r\n if (\r\n event.key.toLowerCase() === OPEN_MENU_SHORTCUT &&\r\n !event.ctrlKey &&\r\n !event.metaKey &&\r\n !event.shiftKey\r\n ) {\r\n event.preventDefault()\r\n setOpen(true)\r\n }\r\n\r\n if (\r\n event.key.toLowerCase() === OPEN_MENU_SHORTCUT &&\r\n event.shiftKey &&\r\n filters.length > 0\r\n ) {\r\n event.preventDefault()\r\n onFilterRemove(filters[filters.length - 1]?.filterId ?? '')\r\n }\r\n }\r\n\r\n window.addEventListener('keydown', onKeyDown)\r\n return () => window.removeEventListener('keydown', onKeyDown)\r\n }, [filters, onFilterRemove])\r\n\r\n const onTriggerKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\r\n if (\r\n REMOVE_FILTER_SHORTCUTS.includes(event.key.toLowerCase()) &&\r\n filters.length > 0\r\n ) {\r\n event.preventDefault()\r\n onFilterRemove(filters[filters.length - 1]?.filterId ?? '')\r\n }\r\n },\r\n [filters, onFilterRemove]\r\n )\r\n\r\n return (\r\n <Sortable\r\n value={filters}\r\n onValueChange={setFilters}\r\n getItemValue={item => item.filterId}\r\n >\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <Button variant=\"outline\" size=\"sm\" onKeyDown={onTriggerKeyDown}>\r\n <FunnelSimpleIcon weight=\"bold\" />\r\n Filtro\r\n {filters.length > 0 && (\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"h-[18.24px] rounded-[3.2px] px-[5.12px] font-mono font-normal text-[10.4px]\"\r\n >\r\n {filters.length}\r\n </Badge>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n aria-describedby={descriptionId}\r\n aria-labelledby={labelId}\r\n className=\"flex w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] flex-col gap-3.5 p-4 sm:min-w-[380px]\"\r\n {...props}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <h4 id={labelId} className=\"font-medium leading-none\">\r\n {filters.length > 0 ? 'Filtros' : 'Nenhum filtro aplicado'}\r\n </h4>\r\n <p\r\n id={descriptionId}\r\n className={cn(\r\n 'text-gray-400 text-sm',\r\n filters.length > 0 && 'sr-only'\r\n )}\r\n >\r\n {filters.length > 0\r\n ? 'Modifique os filtros para filtrar suas linhas.'\r\n : 'Adicione filtros para filtrar suas linhas.'}\r\n </p>\r\n </div>\r\n {filters.length > 0 ? (\r\n <SortableContent asChild>\r\n <div\r\n role=\"list\"\r\n className=\"flex max-h-[300px] flex-col gap-2 overflow-y-auto p-1\"\r\n >\r\n {filters.map((filter, index) => (\r\n <DataTableFilterItem<TData>\r\n key={filter.filterId}\r\n filter={filter}\r\n index={index}\r\n filterItemId={`${id}-filter-${filter.filterId}`}\r\n joinOperator={joinOperator}\r\n setJoinOperator={setJoinOperator}\r\n columns={columns}\r\n onFilterUpdate={onFilterUpdate}\r\n onFilterRemove={onFilterRemove}\r\n />\r\n ))}\r\n </div>\r\n </SortableContent>\r\n ) : null}\r\n <div className=\"flex w-full items-center gap-2\">\r\n <Button\r\n size=\"sm\"\r\n className=\"rounded\"\r\n ref={addButtonRef}\r\n onClick={onFilterAdd}\r\n >\r\n Adicionar filtro\r\n </Button>\r\n {filters.length > 0 ? (\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"rounded\"\r\n onClick={onFiltersReset}\r\n >\r\n Resetar filtros\r\n </Button>\r\n ) : null}\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n <SortableOverlay>\r\n <div className=\"flex items-center gap-2\">\r\n <div className=\"h-10 min-w-[72px] rounded-sm bg-primary/10\" />\r\n <div className=\"h-10 w-32 rounded-sm bg-primary/10\" />\r\n <div className=\"h-10 w-32 rounded-sm bg-primary/10\" />\r\n <div className=\"h-10 min-w-36 flex-1 rounded-sm bg-primary/10\" />\r\n <div className=\"size-8 shrink-0 rounded-sm bg-primary/10\" />\r\n <div className=\"size-8 shrink-0 rounded-sm bg-primary/10\" />\r\n </div>\r\n </SortableOverlay>\r\n </Sortable>\r\n )\r\n}\r\n\r\ninterface DataTableFilterItemProps<TData> {\r\n filter: ExtendedColumnFilter<TData>\r\n index: number\r\n filterItemId: string\r\n joinOperator: JoinOperator\r\n setJoinOperator: (value: JoinOperator) => void\r\n columns: Column<TData>[]\r\n onFilterUpdate: (\r\n filterId: string,\r\n updates: Partial<Omit<ExtendedColumnFilter<TData>, 'filterId'>>\r\n ) => void\r\n onFilterRemove: (filterId: string) => void\r\n}\r\n\r\nfunction DataTableFilterItem<TData>({\r\n filter,\r\n index,\r\n filterItemId,\r\n joinOperator,\r\n setJoinOperator,\r\n columns,\r\n onFilterUpdate,\r\n onFilterRemove,\r\n}: DataTableFilterItemProps<TData>) {\r\n const [showFieldSelector, setShowFieldSelector] = React.useState(false)\r\n const [showOperatorSelector, setShowOperatorSelector] = React.useState(false)\r\n const [showValueSelector, setShowValueSelector] = React.useState(false)\r\n\r\n const column = columns.find(column => column.id === filter.id)\r\n if (!column) return null\r\n\r\n const joinOperatorListboxId = `${filterItemId}-join-operator-listbox`\r\n const fieldListboxId = `${filterItemId}-field-listbox`\r\n const operatorListboxId = `${filterItemId}-operator-listbox`\r\n const inputId = `${filterItemId}-input`\r\n\r\n const columnMeta = column.columnDef.meta\r\n const filterOperators = getFilterOperators(filter.variant)\r\n\r\n const onItemKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (\r\n event.target instanceof HTMLInputElement ||\r\n event.target instanceof HTMLTextAreaElement\r\n ) {\r\n return\r\n }\r\n\r\n if (showFieldSelector || showOperatorSelector || showValueSelector) {\r\n return\r\n }\r\n\r\n if (REMOVE_FILTER_SHORTCUTS.includes(event.key.toLowerCase())) {\r\n event.preventDefault()\r\n onFilterRemove(filter.filterId)\r\n }\r\n },\r\n [\r\n filter.filterId,\r\n showFieldSelector,\r\n showOperatorSelector,\r\n showValueSelector,\r\n onFilterRemove,\r\n ]\r\n )\r\n\r\n return (\r\n <SortableItem value={filter.filterId} asChild>\r\n <div\r\n role=\"listitem\"\r\n id={filterItemId}\r\n tabIndex={-1}\r\n className=\"flex items-center gap-2\"\r\n onKeyDown={onItemKeyDown}\r\n >\r\n <div className=\"min-w-[72px] text-center\">\r\n {index === 0 ? (\r\n <span className=\"text-gray-400 text-sm\">Onde</span>\r\n ) : index === 1 ? (\r\n <Select\r\n value={joinOperator}\r\n onValueChange={(value: JoinOperator) => setJoinOperator(value)}\r\n >\r\n <SelectTrigger\r\n aria-label=\"Select join operator\"\r\n aria-controls={joinOperatorListboxId}\r\n className=\"h-10 rounded lowercase [&[data-size]]:h-10\"\r\n >\r\n <SelectValue placeholder={joinOperator} />\r\n </SelectTrigger>\r\n <SelectContent\r\n id={joinOperatorListboxId}\r\n position=\"popper\"\r\n className=\"min-w-(--radix-select-trigger-width) lowercase\"\r\n >\r\n {dataTableConfig.joinOperators.map(joinOperator => (\r\n <SelectItem key={joinOperator} value={joinOperator}>\r\n {joinOperator}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n ) : (\r\n <span className=\"text-gray-400 text-sm\">{joinOperator}</span>\r\n )}\r\n </div>\r\n <Popover open={showFieldSelector} onOpenChange={setShowFieldSelector}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n role=\"combobox\"\r\n aria-controls={fieldListboxId}\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"w-32 justify-between rounded font-normal\"\r\n >\r\n <span className=\"truncate\">\r\n {columns.find(column => column.id === filter.id)?.columnDef.meta\r\n ?.label ?? 'Selecione o campo'}\r\n </span>\r\n <CaretUpDownIcon className=\"opacity-50\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n id={fieldListboxId}\r\n align=\"start\"\r\n className=\"w-40 origin-[var(--radix-popover-content-transform-origin)] p-0\"\r\n >\r\n <Command>\r\n <CommandInput placeholder=\"Buscar campo...\" />\r\n <CommandList>\r\n <CommandEmpty>Nenhum campo encontrado.</CommandEmpty>\r\n <CommandGroup>\r\n {columns.map(column => (\r\n <CommandItem\r\n key={column.id}\r\n value={column.id}\r\n onSelect={value => {\r\n onFilterUpdate(filter.filterId, {\r\n id: value as Extract<keyof TData, string>,\r\n variant: column.columnDef.meta?.variant ?? 'text',\r\n operator: getDefaultFilterOperator(\r\n column.columnDef.meta?.variant ?? 'text'\r\n ),\r\n value: '',\r\n })\r\n\r\n setShowFieldSelector(false)\r\n }}\r\n >\r\n <span className=\"truncate\">\r\n {column.columnDef.meta?.label}\r\n </span>\r\n <CheckIcon\r\n className={cn(\r\n 'ml-auto',\r\n column.id === filter.id ? 'opacity-100' : 'opacity-0'\r\n )}\r\n />\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n <Select\r\n open={showOperatorSelector}\r\n onOpenChange={setShowOperatorSelector}\r\n value={filter.operator}\r\n onValueChange={(value: FilterOperator) =>\r\n onFilterUpdate(filter.filterId, {\r\n operator: value,\r\n value:\r\n value === 'isEmpty' || value === 'isNotEmpty'\r\n ? ''\r\n : filter.value,\r\n })\r\n }\r\n >\r\n <SelectTrigger\r\n aria-controls={operatorListboxId}\r\n className=\"h-10 w-32 rounded lowercase [&[data-size]]:h-10\"\r\n >\r\n <div className=\"truncate\">\r\n <SelectValue placeholder={filter.operator} />\r\n </div>\r\n </SelectTrigger>\r\n <SelectContent\r\n id={operatorListboxId}\r\n className=\"origin-[var(--radix-select-content-transform-origin)]\"\r\n >\r\n {filterOperators.map(operator => (\r\n <SelectItem\r\n key={operator.value}\r\n value={operator.value}\r\n className=\"lowercase\"\r\n >\r\n {operator.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n <div className=\"min-w-36 flex-1\">\r\n {onFilterInputRender({\r\n filter,\r\n inputId,\r\n column,\r\n columnMeta,\r\n onFilterUpdate,\r\n showValueSelector,\r\n setShowValueSelector,\r\n })}\r\n </div>\r\n <Button\r\n aria-controls={filterItemId}\r\n variant=\"outline\"\r\n size=\"icon\"\r\n className=\"size-8 rounded\"\r\n onClick={() => onFilterRemove(filter.filterId)}\r\n >\r\n <TrashIcon weight=\"bold\" />\r\n </Button>\r\n <SortableItemHandle asChild>\r\n <Button variant=\"outline\" size=\"icon\" className=\"size-8 rounded\">\r\n <DotsSixVerticalIcon weight=\"bold\" />\r\n </Button>\r\n </SortableItemHandle>\r\n </div>\r\n </SortableItem>\r\n )\r\n}\r\n\r\nfunction onFilterInputRender<TData>({\r\n filter,\r\n inputId,\r\n column,\r\n columnMeta,\r\n onFilterUpdate,\r\n showValueSelector,\r\n setShowValueSelector,\r\n}: {\r\n filter: ExtendedColumnFilter<TData>\r\n inputId: string\r\n column: Column<TData>\r\n columnMeta?: ColumnMeta<TData, unknown>\r\n onFilterUpdate: (\r\n filterId: string,\r\n updates: Partial<Omit<ExtendedColumnFilter<TData>, 'filterId'>>\r\n ) => void\r\n showValueSelector: boolean\r\n setShowValueSelector: (value: boolean) => void\r\n}) {\r\n if (filter.operator === 'isEmpty' || filter.operator === 'isNotEmpty') {\r\n return (\r\n <div\r\n id={inputId}\r\n role=\"status\"\r\n aria-label={`${columnMeta?.label} filter is ${\r\n filter.operator === 'isEmpty' ? 'empty' : 'not empty'\r\n }`}\r\n aria-live=\"polite\"\r\n className=\"h-10 w-full rounded border bg-transparent dark:bg-input/30\"\r\n />\r\n )\r\n }\r\n\r\n switch (filter.variant) {\r\n case 'text':\r\n case 'number':\r\n case 'range': {\r\n if (\r\n (filter.variant === 'range' && filter.operator === 'isBetween') ||\r\n filter.operator === 'isBetween'\r\n ) {\r\n return (\r\n <DataTableRangeFilter\r\n filter={filter}\r\n column={column}\r\n inputId={inputId}\r\n onFilterUpdate={onFilterUpdate}\r\n />\r\n )\r\n }\r\n\r\n const isNumber = filter.variant === 'number' || filter.variant === 'range'\r\n\r\n return (\r\n <Input\r\n id={inputId}\r\n type={isNumber ? 'number' : filter.variant}\r\n aria-label={`${columnMeta?.label} filter value`}\r\n aria-describedby={`${inputId}-description`}\r\n inputMode={isNumber ? 'numeric' : undefined}\r\n placeholder={columnMeta?.placeholder ?? 'Enter a value...'}\r\n className=\"h-10 w-full rounded\"\r\n defaultValue={\r\n typeof filter.value === 'string' ? filter.value : undefined\r\n }\r\n onChange={event =>\r\n onFilterUpdate(filter.filterId, {\r\n value: event.target.value,\r\n })\r\n }\r\n />\r\n )\r\n }\r\n\r\n case 'boolean': {\r\n if (Array.isArray(filter.value)) return null\r\n\r\n const inputListboxId = `${inputId}-listbox`\r\n\r\n return (\r\n <Select\r\n open={showValueSelector}\r\n onOpenChange={setShowValueSelector}\r\n value={filter.value}\r\n onValueChange={value =>\r\n onFilterUpdate(filter.filterId, {\r\n value,\r\n })\r\n }\r\n >\r\n <SelectTrigger\r\n id={inputId}\r\n aria-controls={inputListboxId}\r\n aria-label={`${columnMeta?.label} boolean filter`}\r\n className=\"h-10 w-full rounded [&[data-size]]:h-10\"\r\n >\r\n <SelectValue placeholder={filter.value ? 'True' : 'False'} />\r\n </SelectTrigger>\r\n <SelectContent id={inputListboxId}>\r\n <SelectItem value=\"true\">True</SelectItem>\r\n <SelectItem value=\"false\">False</SelectItem>\r\n </SelectContent>\r\n </Select>\r\n )\r\n }\r\n\r\n case 'select':\r\n case 'multiSelect': {\r\n const inputListboxId = `${inputId}-listbox`\r\n\r\n const multiple = filter.variant === 'multiSelect'\r\n const selectedValues = multiple\r\n ? Array.isArray(filter.value)\r\n ? filter.value\r\n : []\r\n : typeof filter.value === 'string'\r\n ? filter.value\r\n : undefined\r\n\r\n return (\r\n <Faceted\r\n open={showValueSelector}\r\n onOpenChange={setShowValueSelector}\r\n value={selectedValues}\r\n onValueChange={value => {\r\n onFilterUpdate(filter.filterId, {\r\n value,\r\n })\r\n }}\r\n multiple={multiple}\r\n >\r\n <FacetedTrigger asChild>\r\n <Button\r\n id={inputId}\r\n aria-controls={inputListboxId}\r\n aria-label={`${columnMeta?.label} filter value${multiple ? 's' : ''}`}\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"w-full rounded font-normal\"\r\n >\r\n <FacetedBadgeList\r\n options={columnMeta?.options}\r\n placeholder={\r\n columnMeta?.placeholder ??\r\n `Select option${multiple ? 's' : ''}...`\r\n }\r\n />\r\n </Button>\r\n </FacetedTrigger>\r\n <FacetedContent\r\n id={inputListboxId}\r\n className=\"w-[200px] origin-[var(--radix-popover-content-transform-origin)]\"\r\n >\r\n <FacetedInput\r\n aria-label={`Search ${columnMeta?.label} options`}\r\n placeholder={columnMeta?.placeholder ?? 'Search options...'}\r\n />\r\n <FacetedList>\r\n <FacetedEmpty>Nenhum resultado</FacetedEmpty>\r\n <FacetedGroup>\r\n {columnMeta?.options?.map(option => (\r\n <FacetedItem key={option.value} value={option.value}>\r\n {option.icon && <option.icon />}\r\n <span>{option.label}</span>\r\n {option.count && (\r\n <span className=\"ml-auto font-mono text-xs\">\r\n {option.count}\r\n </span>\r\n )}\r\n </FacetedItem>\r\n ))}\r\n </FacetedGroup>\r\n </FacetedList>\r\n </FacetedContent>\r\n </Faceted>\r\n )\r\n }\r\n\r\n case 'date':\r\n case 'dateRange': {\r\n const inputListboxId = `${inputId}-listbox`\r\n\r\n const dateValue = Array.isArray(filter.value)\r\n ? filter.value.filter(Boolean)\r\n : [filter.value, filter.value].filter(Boolean)\r\n\r\n const displayValue =\r\n filter.operator === 'isBetween' && dateValue.length === 2\r\n ? `${formatDate(new Date(Number(dateValue[0])))} - ${formatDate(\r\n new Date(Number(dateValue[1]))\r\n )}`\r\n : dateValue[0]\r\n ? formatDate(new Date(Number(dateValue[0])))\r\n : 'Escolha uma data'\r\n\r\n return (\r\n <Popover open={showValueSelector} onOpenChange={setShowValueSelector}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n id={inputId}\r\n aria-controls={inputListboxId}\r\n aria-label={`${columnMeta?.label} date filter`}\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className={cn(\r\n 'w-full justify-start rounded text-left font-normal',\r\n !filter.value && 'text-gray-400'\r\n )}\r\n >\r\n <CalendarBlankIcon weight=\"bold\" />\r\n <span className=\"truncate text-sm\">{displayValue}</span>\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n id={inputListboxId}\r\n align=\"start\"\r\n className=\"w-auto origin-[var(--radix-popover-content-transform-origin)] p-0\"\r\n >\r\n {filter.operator === 'isBetween' ? (\r\n <Calendar\r\n aria-label={`Select ${columnMeta?.label} date range`}\r\n mode=\"range\"\r\n selected={\r\n dateValue.length === 2\r\n ? {\r\n from: new Date(Number(dateValue[0])),\r\n to: new Date(Number(dateValue[1])),\r\n }\r\n : {\r\n from: new Date(),\r\n to: new Date(),\r\n }\r\n }\r\n onSelect={date => {\r\n onFilterUpdate(filter.filterId, {\r\n value: date\r\n ? [\r\n (date.from?.getTime() ?? '').toString(),\r\n (date.to?.getTime() ?? '').toString(),\r\n ]\r\n : [],\r\n })\r\n }}\r\n />\r\n ) : (\r\n <Calendar\r\n aria-label={`Select ${columnMeta?.label} date`}\r\n mode=\"single\"\r\n selected={\r\n dateValue[0] ? new Date(Number(dateValue[0])) : undefined\r\n }\r\n onSelect={date => {\r\n onFilterUpdate(filter.filterId, {\r\n value: (date?.getTime() ?? '').toString(),\r\n })\r\n }}\r\n />\r\n )}\r\n </PopoverContent>\r\n </Popover>\r\n )\r\n }\r\n\r\n default:\r\n return null\r\n }\r\n}\r\n"],"names":["REMOVE_FILTER_SHORTCUTS","DataTableFilterList","table","debounceMs","throttleMs","shallow","props","id","React","labelId","descriptionId","open","setOpen","addButtonRef","columns","column","filters","setFilters","useQueryState","getFiltersStateParser","field","debouncedSetFilters","useDebouncedCallback","joinOperator","setJoinOperator","parseAsStringEnum","onFilterAdd","getDefaultFilterOperator","generateId","onFilterUpdate","filterId","updates","prevFilters","filter","onFilterRemove","requestAnimationFrame","onFiltersReset","onKeyDown","event","HTMLInputElement","HTMLTextAreaElement","window","onTriggerKeyDown","Sortable","item","Popover","PopoverTrigger","Button","FunnelSimpleIcon","Badge","PopoverContent","cn","SortableContent","index","DataTableFilterItem","SortableOverlay","filterItemId","showFieldSelector","setShowFieldSelector","showOperatorSelector","setShowOperatorSelector","showValueSelector","setShowValueSelector","joinOperatorListboxId","fieldListboxId","operatorListboxId","inputId","columnMeta","filterOperators","getFilterOperators","onItemKeyDown","SortableItem","Select","value","SelectTrigger","SelectValue","SelectContent","dataTableConfig","SelectItem","CaretUpDownIcon","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","CheckIcon","operator","onFilterInputRender","DataTableRangeFilter","isNumber","Input","undefined","Array","inputListboxId","multiple","Faceted","FacetedTrigger","FacetedBadgeList","FacetedContent","FacetedInput","FacetedList","FacetedEmpty","FacetedGroup","option","FacetedItem","dateValue","Boolean","displayValue","formatDate","Date","Number","CalendarBlankIcon","Calendar","date","TrashIcon","SortableItemHandle","DotsSixVerticalIcon"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  'use client'
2
- import*as e from"react/jsx-runtime";import*as t from"@phosphor-icons/react";import*as a from"nuqs";import*as n from"react";import*as l from"../button.js";import*as r from"../calendar.js";import*as o from"../command.js";import*as s from"./data-table-range-filter.js";import*as i from"../input.js";import*as c from"../popover.js";import*as m from"../select.js";import*as d from"../../hooks/use-debounced-callback.js";import*as u from"../../lib/data-table.js";import*as p from"../../lib/format.js";import*as f from"../../lib/id.js";import*as x from"../../lib/parsers.js";import*as h from"../../lib/utils.js";let v=["backspace","delete"];function g({table:r,debounceMs:s=300,throttleMs:i=50,shallow:m=!0,align:p="start",...g}){let C=n.useId(),D=n.useMemo(()=>r.getAllColumns().filter(e=>e.columnDef.enableColumnFilter),[r]),[N,S]=n.useState(!1),[w,y]=n.useState(null),[I,k]=n.useState(""),F=n.useRef(null),T=n.useRef(null),E=n.useCallback(e=>{S(e),e||setTimeout(()=>{y(null),k("")},100)},[]),L=n.useCallback(e=>{v.includes(e.key.toLowerCase())&&!I&&w&&(e.preventDefault(),y(null))},[I,w]),[P,z]=(0,a.useQueryState)("filters",(0,x.getFiltersStateParser)(D.map(e=>e.id)).withDefault([]).withOptions({clearOnDefault:!0,shallow:m,throttleMs:i})),B=(0,d.useDebouncedCallback)(z,s),O=n.useCallback((e,t)=>{if(!t.trim()&&e.columnDef.meta?.variant!=="boolean")return;let a=e.columnDef.meta?.variant==="multiSelect"?[t]:t;B([...P,{id:e.id,value:a,variant:e.columnDef.meta?.variant??"text",operator:(0,u.getDefaultFilterOperator)(e.columnDef.meta?.variant??"text"),filterId:(0,f.generateId)({length:8})}]),S(!1),setTimeout(()=>{y(null),k("")},100)},[P,B]),$=n.useCallback(e=>{B(P.filter(t=>t.filterId!==e)),requestAnimationFrame(()=>{F.current?.focus()})},[P,B]),A=n.useCallback((e,t)=>{B(a=>a.map(a=>a.filterId===e?{...a,...t}:a))},[B]),K=n.useCallback(()=>{B([])},[B]);n.useEffect(()=>{function e(e){!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&("f"!==e.key.toLowerCase()||e.ctrlKey||e.metaKey||e.shiftKey||(e.preventDefault(),S(!0)),"f"===e.key.toLowerCase()&&e.shiftKey&&!N&&P.length>0&&(e.preventDefault(),$(P[P.length-1]?.filterId??"")))}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[N,P,$]);let M=n.useCallback(e=>{v.includes(e.key.toLowerCase())&&P.length>0&&(e.preventDefault(),$(P[P.length-1]?.filterId??""))},[P,$]);return(0,e.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[P.map(t=>(0,e.jsx)(j,{filter:t,filterItemId:`${C}-filter-${t.filterId}`,columns:D,onFilterUpdate:A,onFilterRemove:$},t.filterId)),P.length>0&&(0,e.jsx)(l.Button,{"aria-label":"Reset all filters",variant:"outline",size:"icon",className:"size-8",onClick:K,children:(0,e.jsx)(t.X,{})}),(0,e.jsxs)(c.Popover,{open:N,onOpenChange:E,children:[(0,e.jsx)(c.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(l.Button,{"aria-label":"Open filter command menu",variant:"outline",size:P.length>0?"icon":"sm",className:(0,h.cn)(P.length>0&&"size-8","h-10"),ref:F,onKeyDown:M,children:[(0,e.jsx)(t.FunnelSimple,{}),P.length>0?null:"Filter"]})}),(0,e.jsx)(c.PopoverContent,{align:p,className:"w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] p-0",...g,children:(0,e.jsxs)(o.Command,{loop:!0,className:"[&_[cmdk-input-wrapper]_svg]:hidden",children:[(0,e.jsx)(o.CommandInput,{ref:T,placeholder:w?w.columnDef.meta?.label??w.id:"Search fields...",value:I,onValueChange:k,onKeyDown:L}),(0,e.jsx)(o.CommandList,{children:w?(0,e.jsxs)(e.Fragment,{children:[w.columnDef.meta?.options&&(0,e.jsx)(o.CommandEmpty,{children:"No options found."}),(0,e.jsx)(b,{column:w,value:I,onSelect:e=>O(w,e)})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(o.CommandEmpty,{children:"No fields found."}),(0,e.jsx)(o.CommandGroup,{children:D.map(t=>(0,e.jsxs)(o.CommandItem,{value:t.id,onSelect:()=>{y(t),k(""),requestAnimationFrame(()=>{T.current?.focus()})},children:[t.columnDef.meta?.icon&&(0,e.jsx)(t.columnDef.meta.icon,{}),(0,e.jsx)("span",{className:"truncate",children:t.columnDef.meta?.label??t.id})]},t.id))})]})})]})})]})]})}function j({filter:a,filterItemId:d,columns:f,onFilterUpdate:x,onFilterRemove:g}){{let[j,b]=n.useState(!1),[C,D]=n.useState(!1),[N,S]=n.useState(!1),w=f.find(e=>e.id===a.id);if(!w)return null;let y=`${d}-operator-listbox`,I=`${d}-input`,k=w.columnDef.meta,F=(0,u.getFilterOperators)(a.variant),T=n.useCallback(e=>{!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&(j||C||N||v.includes(e.key.toLowerCase())&&(e.preventDefault(),g(a.filterId)))},[a.filterId,j,C,N,g]);return(0,e.jsxs)("div",{role:"listitem",id:d,className:"flex h-10 items-center rounded-md bg-background",onKeyDown:T,children:[(0,e.jsxs)(c.Popover,{open:j,onOpenChange:b,children:[(0,e.jsx)(c.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(l.Button,{variant:"ghost",size:"sm",className:"rounded-none rounded-l-md border border-r-0 font-normal dark:bg-input/30",children:[k?.icon&&(0,e.jsx)(k.icon,{className:"text-muted-foreground"}),k?.label??w.id]})}),(0,e.jsx)(c.PopoverContent,{align:"start",className:"w-48 origin-[var(--radix-popover-content-transform-origin)] p-0",children:(0,e.jsxs)(o.Command,{loop:!0,children:[(0,e.jsx)(o.CommandInput,{placeholder:"Search fields..."}),(0,e.jsxs)(o.CommandList,{children:[(0,e.jsx)(o.CommandEmpty,{children:"No fields found."}),(0,e.jsx)(o.CommandGroup,{children:f.map(n=>(0,e.jsxs)(o.CommandItem,{value:n.id,onSelect:()=>{x(a.filterId,{id:n.id,variant:n.columnDef.meta?.variant??"text",operator:(0,u.getDefaultFilterOperator)(n.columnDef.meta?.variant??"text"),value:""}),b(!1)},children:[n.columnDef.meta?.icon&&(0,e.jsx)(n.columnDef.meta.icon,{}),(0,e.jsx)("span",{className:"truncate",children:n.columnDef.meta?.label??n.id}),(0,e.jsx)(t.Check,{className:(0,h.cn)("ml-auto",n.id===a.id?"opacity-100":"opacity-0")})]},n.id))})]})]})})]}),(0,e.jsxs)(m.Select,{open:C,onOpenChange:D,value:a.operator,onValueChange:e=>x(a.filterId,{operator:e,value:"isEmpty"===e||"isNotEmpty"===e?"":a.value}),children:[(0,e.jsx)(m.SelectTrigger,{"aria-controls":y,className:"h-10 rounded-none border-r-0 px-2.5 lowercase [&[data-size]]:h-10 [&_svg]:hidden",children:(0,e.jsx)(m.SelectValue,{placeholder:a.operator})}),(0,e.jsx)(m.SelectContent,{id:y,className:"origin-[var(--radix-select-content-transform-origin)]",children:F.map(t=>(0,e.jsx)(m.SelectItem,{className:"lowercase",value:t.value,children:t.label},t.value))})]}),function({filter:a,column:n,inputId:d,onFilterUpdate:u,showValueSelector:f,setShowValueSelector:x}){if("isEmpty"===a.operator||"isNotEmpty"===a.operator)return(0,e.jsx)("div",{id:d,role:"status","aria-label":`${n.columnDef.meta?.label} filter is ${"isEmpty"===a.operator?"empty":"not empty"}`,"aria-live":"polite",className:"h-full w-16 rounded-none border bg-transparent px-1.5 py-0.5 text-muted-foreground dark:bg-input/30"});switch(a.variant){case"text":case"number":case"range":{if("range"===a.variant&&"isBetween"===a.operator||"isBetween"===a.operator)return(0,e.jsx)(s.DataTableRangeFilter,{filter:a,column:n,inputId:d,onFilterUpdate:u,className:"size-full max-w-28 gap-0 [&_[data-slot='range-min']]:border-r-0 [&_input]:rounded-none [&_input]:px-1.5"});let t="number"===a.variant||"range"===a.variant;return(0,e.jsx)(i.Input,{id:d,type:t?"number":"text",inputMode:t?"numeric":void 0,placeholder:n.columnDef.meta?.placeholder??"Enter value...",className:"h-full w-24 rounded-none px-1.5",defaultValue:"string"==typeof a.value?a.value:"",onChange:e=>u(a.filterId,{value:e.target.value})})}case"boolean":{let t=`${d}-listbox`;return(0,e.jsxs)(m.Select,{open:f,onOpenChange:x,value:"string"==typeof a.value?a.value:"true",onValueChange:e=>u(a.filterId,{value:e}),children:[(0,e.jsx)(m.SelectTrigger,{id:d,"aria-controls":t,className:"rounded-none bg-transparent px-1.5 py-0.5 [&_svg]:hidden",children:(0,e.jsx)(m.SelectValue,{placeholder:a.value?"True":"False"})}),(0,e.jsxs)(m.SelectContent,{id:t,children:[(0,e.jsx)(m.SelectItem,{value:"true",children:"True"}),(0,e.jsx)(m.SelectItem,{value:"false",children:"False"})]})]})}case"select":case"multiSelect":{let r=`${d}-listbox`,s=n.columnDef.meta?.options??[],i=Array.isArray(a.value)?a.value:[a.value],m=s.filter(e=>i.includes(e.value));return(0,e.jsxs)(c.Popover,{open:f,onOpenChange:x,children:[(0,e.jsx)(c.PopoverTrigger,{asChild:!0,children:(0,e.jsx)(l.Button,{id:d,"aria-controls":r,variant:"ghost",size:"sm",className:"h-full min-w-16 rounded-none border px-1.5 font-normal dark:bg-input/30",children:0===m.length?"multiSelect"===a.variant?"Select options...":"Select option...":(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{className:"-space-x-2 flex items-center rtl:space-x-reverse",children:m.map(t=>t.icon?(0,e.jsx)("div",{className:"rounded-full border bg-background p-0.5",children:(0,e.jsx)(t.icon,{className:"size-3.5"})},t.value):null)}),(0,e.jsx)("span",{className:"truncate",children:m.length>1?`${m.length} selected`:m[0]?.label})]})})}),(0,e.jsx)(c.PopoverContent,{id:r,align:"start",className:"w-48 origin-[var(--radix-popover-content-transform-origin)] p-0",children:(0,e.jsxs)(o.Command,{children:[(0,e.jsx)(o.CommandInput,{placeholder:"Search options..."}),(0,e.jsxs)(o.CommandList,{children:[(0,e.jsx)(o.CommandEmpty,{children:"No options found."}),(0,e.jsx)(o.CommandGroup,{children:s.map(n=>(0,e.jsxs)(o.CommandItem,{value:n.value,onSelect:()=>{let e="multiSelect"===a.variant?i.includes(n.value)?i.filter(e=>e!==n.value):[...i,n.value]:n.value;u(a.filterId,{value:e})},children:[n.icon&&(0,e.jsx)(n.icon,{}),(0,e.jsx)("span",{className:"truncate",children:n.label}),"multiSelect"===a.variant&&(0,e.jsx)(t.Check,{className:(0,h.cn)("ml-auto",i.includes(n.value)?"opacity-100":"opacity-0")})]},n.value))})]})]})})]})}case"date":case"dateRange":{let n=`${d}-listbox`,o=Array.isArray(a.value)?a.value.filter(Boolean):[a.value,a.value].filter(Boolean),s="isBetween"===a.operator&&2===o.length?`${(0,p.formatDate)(new Date(Number(o[0])))} - ${(0,p.formatDate)(new Date(Number(o[1])))}`:o[0]?(0,p.formatDate)(new Date(Number(o[0]))):"Pick date...";return(0,e.jsxs)(c.Popover,{open:f,onOpenChange:x,children:[(0,e.jsx)(c.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(l.Button,{id:d,"aria-controls":n,variant:"ghost",size:"sm",className:(0,h.cn)("h-full rounded-none border px-1.5 font-normal dark:bg-input/30",!a.value&&"text-muted-foreground"),children:[(0,e.jsx)(t.Calendar,{className:"size-3.5"}),(0,e.jsx)("span",{className:"truncate",children:s})]})}),(0,e.jsx)(c.PopoverContent,{id:n,align:"start",className:"w-auto origin-[var(--radix-popover-content-transform-origin)] p-0",children:"isBetween"===a.operator?(0,e.jsx)(r.Calendar,{mode:"range",initialFocus:!0,selected:2===o.length?{from:new Date(Number(o[0])),to:new Date(Number(o[1]))}:{from:new Date,to:new Date},onSelect:e=>{u(a.filterId,{value:e?[(e.from?.getTime()??"").toString(),(e.to?.getTime()??"").toString()]:[]})}}):(0,e.jsx)(r.Calendar,{mode:"single",initialFocus:!0,selected:o[0]?new Date(Number(o[0])):void 0,onSelect:e=>{u(a.filterId,{value:(e?.getTime()??"").toString()})}})})]})}default:return null}}({filter:a,column:w,inputId:I,onFilterUpdate:x,showValueSelector:N,setShowValueSelector:S}),(0,e.jsx)(l.Button,{"aria-controls":d,variant:"ghost",size:"sm",className:"h-full rounded-none rounded-r-md border border-l-0 px-1.5 font-normal dark:bg-input/30",onClick:()=>g(a.filterId),children:(0,e.jsx)(t.X,{className:"size-3.5"})})]},a.filterId)}}function b({column:a,value:n,onSelect:l}){switch(a.columnDef.meta?.variant??"text"){case"boolean":return(0,e.jsxs)(o.CommandGroup,{children:[(0,e.jsx)(o.CommandItem,{value:"true",onSelect:()=>l("true"),children:"True"}),(0,e.jsx)(o.CommandItem,{value:"false",onSelect:()=>l("false"),children:"False"})]});case"select":case"multiSelect":return(0,e.jsx)(o.CommandGroup,{children:a.columnDef.meta?.options?.map(t=>(0,e.jsxs)(o.CommandItem,{value:t.value,onSelect:()=>l(t.value),children:[t.icon&&(0,e.jsx)(t.icon,{}),(0,e.jsx)("span",{className:"truncate",children:t.label}),t.count&&(0,e.jsx)("span",{className:"ml-auto font-mono text-xs",children:t.count})]},t.value))});case"date":case"dateRange":return(0,e.jsx)(r.Calendar,{initialFocus:!0,mode:"single",selected:n?new Date(n):void 0,onSelect:e=>l(e?.getTime().toString()??"")});default:{let a=!n.trim();return(0,e.jsx)(o.CommandGroup,{children:(0,e.jsx)(o.CommandItem,{value:n,onSelect:()=>l(n),disabled:a,children:a?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(t.TextAlignLeft,{}),(0,e.jsx)("span",{children:"Type to add filter..."})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(t.SealCheck,{}),(0,e.jsxs)("span",{className:"truncate",children:['Filter by "',n,'"']})]})})})}}}export{g as DataTableFilterMenu};
2
+ import{Fragment as e,jsx as t,jsxs as n}from"react/jsx-runtime";import{Calendar as a,Check as l,FunnelSimple as r,SealCheck as i,TextAlignLeft as o,X as c}from"@phosphor-icons/react";import{useQueryState as s}from"nuqs";import{useCallback as d,useEffect as u,useId as m,useMemo as p,useRef as f,useState as h}from"react";import{Button as v}from"../button.js";import{Calendar as g}from"../calendar.js";import{Command as b,CommandEmpty as N,CommandGroup as w,CommandInput as x,CommandItem as D,CommandList as y}from"../command.js";import{DataTableRangeFilter as S}from"./data-table-range-filter.js";import{Input as C}from"../input.js";import{Popover as I,PopoverContent as k,PopoverTrigger as T}from"../popover.js";import{Select as F,SelectContent as j,SelectItem as z,SelectTrigger as E,SelectValue as $}from"../select.js";import{useDebouncedCallback as L}from"../../hooks/use-debounced-callback.js";import{getDefaultFilterOperator as A,getFilterOperators as O}from"../../lib/data-table.js";import{formatDate as K}from"../../lib/format.js";import{generateId as _}from"../../lib/id.js";import{getFiltersStateParser as B}from"../../lib/parsers.js";import{cn as M}from"../../lib/utils.js";let H=["backspace","delete"];function R({table:a,debounceMs:l=300,throttleMs:i=50,shallow:o=!0,align:g="start",...S}){let C=m(),F=p(()=>a.getAllColumns().filter(e=>e.columnDef.enableColumnFilter),[a]),[j,z]=h(!1),[E,$]=h(null),[O,K]=h(""),R=f(null),U=f(null),P=d(e=>{z(e),e||setTimeout(()=>{$(null),K("")},100)},[]),G=d(e=>{H.includes(e.key.toLowerCase())&&!O&&E&&(e.preventDefault(),$(null))},[O,E]),[J,Q]=s("filters",B(F.map(e=>e.id)).withDefault([]).withOptions({clearOnDefault:!0,shallow:o,throttleMs:i})),W=L(Q,l),X=d((e,t)=>{if(!t.trim()&&e.columnDef.meta?.variant!=="boolean")return;let n=e.columnDef.meta?.variant==="multiSelect"?[t]:t;W([...J,{id:e.id,value:n,variant:e.columnDef.meta?.variant??"text",operator:A(e.columnDef.meta?.variant??"text"),filterId:_({length:8})}]),z(!1),setTimeout(()=>{$(null),K("")},100)},[J,W]),Y=d(e=>{W(J.filter(t=>t.filterId!==e)),requestAnimationFrame(()=>{R.current?.focus()})},[J,W]),Z=d((e,t)=>{W(n=>n.map(n=>n.filterId===e?{...n,...t}:n))},[W]),ee=d(()=>{W([])},[W]);u(()=>{function e(e){!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&("f"!==e.key.toLowerCase()||e.ctrlKey||e.metaKey||e.shiftKey||(e.preventDefault(),z(!0)),"f"===e.key.toLowerCase()&&e.shiftKey&&!j&&J.length>0&&(e.preventDefault(),Y(J[J.length-1]?.filterId??"")))}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[j,J,Y]);let et=d(e=>{H.includes(e.key.toLowerCase())&&J.length>0&&(e.preventDefault(),Y(J[J.length-1]?.filterId??""))},[J,Y]);return n("div",{className:"flex flex-wrap items-center gap-2",children:[J.map(e=>t(V,{filter:e,filterItemId:`${C}-filter-${e.filterId}`,columns:F,onFilterUpdate:Z,onFilterRemove:Y},e.filterId)),J.length>0&&t(v,{"aria-label":"Reset all filters",variant:"outline",size:"icon",className:"size-8",onClick:ee,children:t(c,{})}),n(I,{open:j,onOpenChange:P,children:[t(T,{asChild:!0,children:n(v,{"aria-label":"Open filter command menu",variant:"outline",size:J.length>0?"icon":"sm",className:M(J.length>0&&"size-8","h-10"),ref:R,onKeyDown:et,children:[t(r,{}),J.length>0?null:"Filter"]})}),t(k,{align:g,className:"w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] p-0",...S,children:n(b,{loop:!0,className:"[&_[cmdk-input-wrapper]_svg]:hidden",children:[t(x,{ref:U,placeholder:E?E.columnDef.meta?.label??E.id:"Search fields...",value:O,onValueChange:K,onKeyDown:G}),t(y,{children:E?n(e,{children:[E.columnDef.meta?.options&&t(N,{children:"No options found."}),t(q,{column:E,value:O,onSelect:e=>X(E,e)})]}):n(e,{children:[t(N,{children:"No fields found."}),t(w,{children:F.map(e=>n(D,{value:e.id,onSelect:()=>{$(e),K(""),requestAnimationFrame(()=>{U.current?.focus()})},children:[e.columnDef.meta?.icon&&t(e.columnDef.meta.icon,{}),t("span",{className:"truncate",children:e.columnDef.meta?.label??e.id})]},e.id))})]})})]})})]})]})}function V({filter:r,filterItemId:i,columns:o,onFilterUpdate:s,onFilterRemove:u}){{let[m,p]=h(!1),[f,L]=h(!1),[_,B]=h(!1),R=o.find(e=>e.id===r.id);if(!R)return null;let V=`${i}-operator-listbox`,q=`${i}-input`,U=R.columnDef.meta,P=O(r.variant);return n("div",{role:"listitem",id:i,className:"flex h-10 items-center rounded-md bg-background",onKeyDown:d(e=>{!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&(m||f||_||H.includes(e.key.toLowerCase())&&(e.preventDefault(),u(r.filterId)))},[r.filterId,m,f,_,u]),children:[n(I,{open:m,onOpenChange:p,children:[t(T,{asChild:!0,children:n(v,{variant:"ghost",size:"sm",className:"rounded-none rounded-l-md border border-r-0 font-normal dark:bg-input/30",children:[U?.icon&&t(U.icon,{className:"text-muted-foreground"}),U?.label??R.id]})}),t(k,{align:"start",className:"w-48 origin-[var(--radix-popover-content-transform-origin)] p-0",children:n(b,{loop:!0,children:[t(x,{placeholder:"Search fields..."}),n(y,{children:[t(N,{children:"No fields found."}),t(w,{children:o.map(e=>n(D,{value:e.id,onSelect:()=>{s(r.filterId,{id:e.id,variant:e.columnDef.meta?.variant??"text",operator:A(e.columnDef.meta?.variant??"text"),value:""}),p(!1)},children:[e.columnDef.meta?.icon&&t(e.columnDef.meta.icon,{}),t("span",{className:"truncate",children:e.columnDef.meta?.label??e.id}),t(l,{className:M("ml-auto",e.id===r.id?"opacity-100":"opacity-0")})]},e.id))})]})]})})]}),n(F,{open:f,onOpenChange:L,value:r.operator,onValueChange:e=>s(r.filterId,{operator:e,value:"isEmpty"===e||"isNotEmpty"===e?"":r.value}),children:[t(E,{"aria-controls":V,className:"h-10 rounded-none border-r-0 px-2.5 lowercase [&[data-size]]:h-10 [&_svg]:hidden",children:t($,{placeholder:r.operator})}),t(j,{id:V,className:"origin-[var(--radix-select-content-transform-origin)]",children:P.map(e=>t(z,{className:"lowercase",value:e.value,children:e.label},e.value))})]}),function({filter:r,column:i,inputId:o,onFilterUpdate:c,showValueSelector:s,setShowValueSelector:d}){if("isEmpty"===r.operator||"isNotEmpty"===r.operator)return t("div",{id:o,role:"status","aria-label":`${i.columnDef.meta?.label} filter is ${"isEmpty"===r.operator?"empty":"not empty"}`,"aria-live":"polite",className:"h-full w-16 rounded-none border bg-transparent px-1.5 py-0.5 text-muted-foreground dark:bg-input/30"});switch(r.variant){case"text":case"number":case"range":{if("range"===r.variant&&"isBetween"===r.operator||"isBetween"===r.operator)return t(S,{filter:r,column:i,inputId:o,onFilterUpdate:c,className:"size-full max-w-28 gap-0 [&_[data-slot='range-min']]:border-r-0 [&_input]:rounded-none [&_input]:px-1.5"});let e="number"===r.variant||"range"===r.variant;return t(C,{id:o,type:e?"number":"text",inputMode:e?"numeric":void 0,placeholder:i.columnDef.meta?.placeholder??"Enter value...",className:"h-full w-24 rounded-none px-1.5",defaultValue:"string"==typeof r.value?r.value:"",onChange:e=>c(r.filterId,{value:e.target.value})})}case"boolean":{let e=`${o}-listbox`;return n(F,{open:s,onOpenChange:d,value:"string"==typeof r.value?r.value:"true",onValueChange:e=>c(r.filterId,{value:e}),children:[t(E,{id:o,"aria-controls":e,className:"rounded-none bg-transparent px-1.5 py-0.5 [&_svg]:hidden",children:t($,{placeholder:r.value?"True":"False"})}),n(j,{id:e,children:[t(z,{value:"true",children:"True"}),t(z,{value:"false",children:"False"})]})]})}case"select":case"multiSelect":{let a=`${o}-listbox`,u=i.columnDef.meta?.options??[],m=Array.isArray(r.value)?r.value:[r.value],p=u.filter(e=>m.includes(e.value));return n(I,{open:s,onOpenChange:d,children:[t(T,{asChild:!0,children:t(v,{id:o,"aria-controls":a,variant:"ghost",size:"sm",className:"h-full min-w-16 rounded-none border px-1.5 font-normal dark:bg-input/30",children:0===p.length?"multiSelect"===r.variant?"Select options...":"Select option...":n(e,{children:[t("div",{className:"-space-x-2 flex items-center rtl:space-x-reverse",children:p.map(e=>e.icon?t("div",{className:"rounded-full border bg-background p-0.5",children:t(e.icon,{className:"size-3.5"})},e.value):null)}),t("span",{className:"truncate",children:p.length>1?`${p.length} selected`:p[0]?.label})]})})}),t(k,{id:a,align:"start",className:"w-48 origin-[var(--radix-popover-content-transform-origin)] p-0",children:n(b,{children:[t(x,{placeholder:"Search options..."}),n(y,{children:[t(N,{children:"No options found."}),t(w,{children:u.map(e=>n(D,{value:e.value,onSelect:()=>{let t="multiSelect"===r.variant?m.includes(e.value)?m.filter(t=>t!==e.value):[...m,e.value]:e.value;c(r.filterId,{value:t})},children:[e.icon&&t(e.icon,{}),t("span",{className:"truncate",children:e.label}),"multiSelect"===r.variant&&t(l,{className:M("ml-auto",m.includes(e.value)?"opacity-100":"opacity-0")})]},e.value))})]})]})})]})}case"date":case"dateRange":{let e=`${o}-listbox`,l=Array.isArray(r.value)?r.value.filter(Boolean):[r.value,r.value].filter(Boolean),i="isBetween"===r.operator&&2===l.length?`${K(new Date(Number(l[0])))} - ${K(new Date(Number(l[1])))}`:l[0]?K(new Date(Number(l[0]))):"Pick date...";return n(I,{open:s,onOpenChange:d,children:[t(T,{asChild:!0,children:n(v,{id:o,"aria-controls":e,variant:"ghost",size:"sm",className:M("h-full rounded-none border px-1.5 font-normal dark:bg-input/30",!r.value&&"text-muted-foreground"),children:[t(a,{className:"size-3.5"}),t("span",{className:"truncate",children:i})]})}),t(k,{id:e,align:"start",className:"w-auto origin-[var(--radix-popover-content-transform-origin)] p-0",children:"isBetween"===r.operator?t(g,{mode:"range",initialFocus:!0,selected:2===l.length?{from:new Date(Number(l[0])),to:new Date(Number(l[1]))}:{from:new Date,to:new Date},onSelect:e=>{c(r.filterId,{value:e?[(e.from?.getTime()??"").toString(),(e.to?.getTime()??"").toString()]:[]})}}):t(g,{mode:"single",initialFocus:!0,selected:l[0]?new Date(Number(l[0])):void 0,onSelect:e=>{c(r.filterId,{value:(e?.getTime()??"").toString()})}})})]})}default:return null}}({filter:r,column:R,inputId:q,onFilterUpdate:s,showValueSelector:_,setShowValueSelector:B}),t(v,{"aria-controls":i,variant:"ghost",size:"sm",className:"h-full rounded-none rounded-r-md border border-l-0 px-1.5 font-normal dark:bg-input/30",onClick:()=>u(r.filterId),children:t(c,{className:"size-3.5"})})]},r.filterId)}}function q({column:a,value:l,onSelect:r}){switch(a.columnDef.meta?.variant??"text"){case"boolean":return n(w,{children:[t(D,{value:"true",onSelect:()=>r("true"),children:"True"}),t(D,{value:"false",onSelect:()=>r("false"),children:"False"})]});case"select":case"multiSelect":return t(w,{children:a.columnDef.meta?.options?.map(e=>n(D,{value:e.value,onSelect:()=>r(e.value),children:[e.icon&&t(e.icon,{}),t("span",{className:"truncate",children:e.label}),e.count&&t("span",{className:"ml-auto font-mono text-xs",children:e.count})]},e.value))});case"date":case"dateRange":return t(g,{initialFocus:!0,mode:"single",selected:l?new Date(l):void 0,onSelect:e=>r(e?.getTime().toString()??"")});default:{let a=!l.trim();return t(w,{children:t(D,{value:l,onSelect:()=>r(l),disabled:a,children:a?n(e,{children:[t(o,{}),t("span",{children:"Type to add filter..."})]}):n(e,{children:[t(i,{}),n("span",{className:"truncate",children:['Filter by "',l,'"']})]})})})}}}export{R as DataTableFilterMenu};
3
3
  //# sourceMappingURL=data-table-filter-menu.js.map