@gbmtech/aurora-ui 0.1.32 → 0.1.34
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.
- package/dist/cjs/components/data-table/data-table-action-bar.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-action-bar.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-advanced-toolbar.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-advanced-toolbar.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-column-header.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-column-header.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-date-filter.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-date-filter.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-faceted-filter.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-faceted-filter.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-filter-list.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-filter-list.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-filter-menu.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-filter-menu.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-pagination.cjs +2 -0
- package/dist/cjs/components/data-table/data-table-pagination.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-range-filter.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-range-filter.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-skeleton.cjs +2 -0
- package/dist/cjs/components/data-table/data-table-skeleton.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-slider-filter.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-slider-filter.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-sort-list.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-sort-list.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-toolbar.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-toolbar.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table-view-options.cjs +3 -0
- package/dist/cjs/components/data-table/data-table-view-options.cjs.map +1 -0
- package/dist/cjs/components/data-table/data-table.cjs +2 -0
- package/dist/cjs/components/data-table/data-table.cjs.map +1 -0
- package/dist/cjs/components/data-table/index.cjs +1 -0
- package/dist/cjs/components/faceted.cjs +3 -0
- package/dist/cjs/components/faceted.cjs.map +1 -0
- package/dist/cjs/components/input.cjs.map +1 -1
- package/dist/cjs/components/slider.cjs +3 -0
- package/dist/cjs/components/slider.cjs.map +1 -0
- package/dist/cjs/components/sortable.cjs +7 -0
- package/dist/cjs/components/sortable.cjs.map +1 -0
- package/dist/cjs/components/table.cjs +1 -1
- package/dist/cjs/components/table.cjs.map +1 -1
- package/dist/cjs/hooks/use-callback-ref.cjs +2 -0
- package/dist/cjs/hooks/use-callback-ref.cjs.map +1 -0
- package/dist/cjs/hooks/use-data-table.cjs +3 -0
- package/dist/cjs/hooks/use-data-table.cjs.map +1 -0
- package/dist/cjs/hooks/use-debounced-callback.cjs +2 -0
- package/dist/cjs/hooks/use-debounced-callback.cjs.map +1 -0
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/lib/composition.cjs +2 -0
- package/dist/cjs/lib/composition.cjs.map +1 -0
- package/dist/cjs/lib/data-table-config.cjs +2 -0
- package/dist/cjs/lib/data-table-config.cjs.map +1 -0
- package/dist/cjs/lib/data-table.cjs +2 -0
- package/dist/cjs/lib/data-table.cjs.map +1 -0
- package/dist/cjs/lib/format.cjs +2 -0
- package/dist/cjs/lib/format.cjs.map +1 -0
- package/dist/cjs/lib/id.cjs +2 -0
- package/dist/cjs/lib/id.cjs.map +1 -0
- package/dist/cjs/lib/parsers.cjs +2 -0
- package/dist/cjs/lib/parsers.cjs.map +1 -0
- package/dist/cjs/types/data-table.cjs +1 -0
- package/dist/esm/components/data-table/data-table-action-bar.js +3 -0
- package/dist/esm/components/data-table/data-table-action-bar.js.map +1 -0
- package/dist/esm/components/data-table/data-table-advanced-toolbar.js +3 -0
- package/dist/esm/components/data-table/data-table-advanced-toolbar.js.map +1 -0
- package/dist/esm/components/data-table/data-table-column-header.js +3 -0
- package/dist/esm/components/data-table/data-table-column-header.js.map +1 -0
- package/dist/esm/components/data-table/data-table-date-filter.js +3 -0
- package/dist/esm/components/data-table/data-table-date-filter.js.map +1 -0
- package/dist/esm/components/data-table/data-table-faceted-filter.js +3 -0
- package/dist/esm/components/data-table/data-table-faceted-filter.js.map +1 -0
- package/dist/esm/components/data-table/data-table-filter-list.js +3 -0
- package/dist/esm/components/data-table/data-table-filter-list.js.map +1 -0
- package/dist/esm/components/data-table/data-table-filter-menu.js +3 -0
- package/dist/esm/components/data-table/data-table-filter-menu.js.map +1 -0
- package/dist/esm/components/data-table/data-table-pagination.js +2 -0
- package/dist/esm/components/data-table/data-table-pagination.js.map +1 -0
- package/dist/esm/components/data-table/data-table-range-filter.js +3 -0
- package/dist/esm/components/data-table/data-table-range-filter.js.map +1 -0
- package/dist/esm/components/data-table/data-table-skeleton.js +2 -0
- package/dist/esm/components/data-table/data-table-skeleton.js.map +1 -0
- package/dist/esm/components/data-table/data-table-slider-filter.js +3 -0
- package/dist/esm/components/data-table/data-table-slider-filter.js.map +1 -0
- package/dist/esm/components/data-table/data-table-sort-list.js +3 -0
- package/dist/esm/components/data-table/data-table-sort-list.js.map +1 -0
- package/dist/esm/components/data-table/data-table-toolbar.js +3 -0
- package/dist/esm/components/data-table/data-table-toolbar.js.map +1 -0
- package/dist/esm/components/data-table/data-table-view-options.js +3 -0
- package/dist/esm/components/data-table/data-table-view-options.js.map +1 -0
- package/dist/esm/components/data-table/data-table.js +2 -0
- package/dist/esm/components/data-table/data-table.js.map +1 -0
- package/dist/esm/components/data-table/index.js +1 -0
- package/dist/esm/components/faceted.js +3 -0
- package/dist/esm/components/faceted.js.map +1 -0
- package/dist/esm/components/input.js.map +1 -1
- package/dist/esm/components/slider.js +3 -0
- package/dist/esm/components/slider.js.map +1 -0
- package/dist/esm/components/sortable.js +7 -0
- package/dist/esm/components/sortable.js.map +1 -0
- package/dist/esm/components/table.js +1 -1
- package/dist/esm/components/table.js.map +1 -1
- package/dist/esm/hooks/use-callback-ref.js +2 -0
- package/dist/esm/hooks/use-callback-ref.js.map +1 -0
- package/dist/esm/hooks/use-data-table.js +3 -0
- package/dist/esm/hooks/use-data-table.js.map +1 -0
- package/dist/esm/hooks/use-debounced-callback.js +2 -0
- package/dist/esm/hooks/use-debounced-callback.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/composition.js +2 -0
- package/dist/esm/lib/composition.js.map +1 -0
- package/dist/esm/lib/data-table-config.js +2 -0
- package/dist/esm/lib/data-table-config.js.map +1 -0
- package/dist/esm/lib/data-table.js +2 -0
- package/dist/esm/lib/data-table.js.map +1 -0
- package/dist/esm/lib/format.js +2 -0
- package/dist/esm/lib/format.js.map +1 -0
- package/dist/esm/lib/id.js +2 -0
- package/dist/esm/lib/id.js.map +1 -0
- package/dist/esm/lib/parsers.js +2 -0
- package/dist/esm/lib/parsers.js.map +1 -0
- package/dist/esm/types/data-table.js +0 -0
- package/dist/types/components/data-table/data-table-action-bar.d.ts +21 -0
- package/dist/types/components/data-table/data-table-action-bar.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-advanced-toolbar.d.ts +8 -0
- package/dist/types/components/data-table/data-table-advanced-toolbar.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-column-header.d.ts +9 -0
- package/dist/types/components/data-table/data-table-column-header.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-date-filter.d.ts +9 -0
- package/dist/types/components/data-table/data-table-date-filter.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-faceted-filter.d.ts +11 -0
- package/dist/types/components/data-table/data-table-faceted-filter.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-filter-list.d.ts +12 -0
- package/dist/types/components/data-table/data-table-filter-list.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-filter-menu.d.ts +12 -0
- package/dist/types/components/data-table/data-table-filter-menu.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-pagination.d.ts +8 -0
- package/dist/types/components/data-table/data-table-pagination.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-range-filter.d.ts +12 -0
- package/dist/types/components/data-table/data-table-range-filter.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-skeleton.d.ts +12 -0
- package/dist/types/components/data-table/data-table-skeleton.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-slider-filter.d.ts +8 -0
- package/dist/types/components/data-table/data-table-slider-filter.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-sort-list.d.ts +9 -0
- package/dist/types/components/data-table/data-table-sort-list.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-toolbar.d.ts +8 -0
- package/dist/types/components/data-table/data-table-toolbar.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table-view-options.d.ts +7 -0
- package/dist/types/components/data-table/data-table-view-options.d.ts.map +1 -0
- package/dist/types/components/data-table/data-table.d.ts +9 -0
- package/dist/types/components/data-table/data-table.d.ts.map +1 -0
- package/dist/types/components/data-table/index.d.ts +16 -0
- package/dist/types/components/data-table/index.d.ts.map +1 -0
- package/dist/types/components/faceted.d.ts +34 -0
- package/dist/types/components/faceted.d.ts.map +1 -0
- package/dist/types/components/input.d.ts +1 -1
- package/dist/types/components/input.d.ts.map +1 -1
- package/dist/types/components/slider.d.ts +5 -0
- package/dist/types/components/slider.d.ts.map +1 -0
- package/dist/types/components/sortable.d.ts +54 -0
- package/dist/types/components/sortable.d.ts.map +1 -0
- package/dist/types/components/table.d.ts.map +1 -1
- package/dist/types/hooks/use-callback-ref.d.ts +10 -0
- package/dist/types/hooks/use-callback-ref.d.ts.map +1 -0
- package/dist/types/hooks/use-data-table.d.ts +24 -0
- package/dist/types/hooks/use-data-table.d.ts.map +1 -0
- package/dist/types/hooks/use-debounced-callback.d.ts +5 -0
- package/dist/types/hooks/use-debounced-callback.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/composition.d.ts +24 -0
- package/dist/types/lib/composition.d.ts.map +1 -0
- package/dist/types/lib/data-table-config.d.ts +125 -0
- package/dist/types/lib/data-table-config.d.ts.map +1 -0
- package/dist/types/lib/data-table.d.ts +13 -0
- package/dist/types/lib/data-table.d.ts.map +1 -0
- package/dist/types/lib/format.d.ts +2 -0
- package/dist/types/lib/format.d.ts.map +1 -0
- package/dist/types/lib/id.d.ts +8 -0
- package/dist/types/lib/id.d.ts.map +1 -0
- package/dist/types/lib/parsers.d.ts +26 -0
- package/dist/types/lib/parsers.d.ts.map +1 -0
- package/dist/types/types/data-table.d.ts +34 -0
- package/dist/types/types/data-table.d.ts.map +1 -0
- package/package.json +12 -2
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,t)=>{for(var a in t)__webpack_require__.o(t,a)&&!__webpack_require__.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{DataTableActionBarAction:()=>DataTableActionBarAction,DataTableActionBarSelection:()=>DataTableActionBarSelection,DataTableActionBar:()=>DataTableActionBar});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),external_button_cjs_namespaceObject=require("../button.cjs"),external_separator_cjs_namespaceObject=require("../separator.cjs"),external_tooltip_cjs_namespaceObject=require("../tooltip.cjs"),utils_cjs_namespaceObject=require("../../lib/utils.cjs"),react_namespaceObject=require("@phosphor-icons/react"),external_motion_react_namespaceObject=require("motion/react"),external_react_namespaceObject=require("react"),external_react_dom_namespaceObject=require("react-dom"),external_spinner_cjs_namespaceObject=require("../spinner.cjs");function DataTableActionBar({table:e,visible:t,container:a,children:r,className:c,...n}){let[s,_]=external_react_namespaceObject.useState(!1);external_react_namespaceObject.useLayoutEffect(()=>{_(!0)},[]),external_react_namespaceObject.useEffect(()=>{function t(t){"Escape"===t.key&&e.toggleAllRowsSelected(!1)}return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[e]);let o=a??(s?globalThis.document?.body:null);if(!o)return null;let i=t??e.getFilteredSelectedRowModel().rows.length>0;return external_react_dom_namespaceObject.createPortal((0,jsx_runtime_namespaceObject.jsx)(external_motion_react_namespaceObject.AnimatePresence,{children:i&&(0,jsx_runtime_namespaceObject.jsx)(external_motion_react_namespaceObject.motion.div,{role:"toolbar","aria-orientation":"horizontal",initial:{opacity:0,y:20},animate:{opacity:1,y:0},exit:{opacity:0,y:20},transition:{duration:.2,ease:"easeInOut"},className:(0,utils_cjs_namespaceObject.cn)("fixed inset-x-0 bottom-6 z-50 mx-auto flex w-fit flex-wrap items-center justify-center gap-2 rounded-md border bg-background p-2 text-foreground shadow-sm",c),...n,children:r})}),o)}function DataTableActionBarAction({size:e="sm",tooltip:t,isPending:a,disabled:r,className:c,children:n,...s}){let _=(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{variant:"secondary",size:e,className:(0,utils_cjs_namespaceObject.cn)("gap-1.5 border border-secondary bg-secondary/50 hover:bg-secondary/70 [&>svg]:size-3.5","icon"===e?"size-7":"h-7",c),disabled:r||a,...s,children:a?(0,jsx_runtime_namespaceObject.jsx)(external_spinner_cjs_namespaceObject.Spinner,{}):n});return t?(0,jsx_runtime_namespaceObject.jsxs)(external_tooltip_cjs_namespaceObject.Tooltip,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_tooltip_cjs_namespaceObject.TooltipTrigger,{asChild:!0,children:_}),(0,jsx_runtime_namespaceObject.jsx)(external_tooltip_cjs_namespaceObject.TooltipContent,{sideOffset:6,className:"border bg-accent font-semibold text-foreground dark:bg-zinc-900 [&>span]:hidden",children:(0,jsx_runtime_namespaceObject.jsx)("p",{children:t})})]}):_}function DataTableActionBarSelection({table:e}){let t=external_react_namespaceObject.useCallback(()=>{e.toggleAllRowsSelected(!1)},[e]);return(0,jsx_runtime_namespaceObject.jsxs)("div",{className:"flex h-7 items-center rounded-md border pr-1 pl-2.5",children:[(0,jsx_runtime_namespaceObject.jsxs)("span",{className:"whitespace-nowrap text-xs",children:[e.getFilteredSelectedRowModel().rows.length," selected"]}),(0,jsx_runtime_namespaceObject.jsx)(external_separator_cjs_namespaceObject.Separator,{orientation:"vertical",className:"mr-1 ml-2 data-[orientation=vertical]:h-4"}),(0,jsx_runtime_namespaceObject.jsxs)(external_tooltip_cjs_namespaceObject.Tooltip,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_tooltip_cjs_namespaceObject.TooltipTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{variant:"ghost",size:"icon",className:"size-5",onClick:t,children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.X,{className:"size-3.5"})})}),(0,jsx_runtime_namespaceObject.jsxs)(external_tooltip_cjs_namespaceObject.TooltipContent,{sideOffset:10,className:"flex items-center gap-2 border bg-accent px-2 py-1 font-semibold text-foreground dark:bg-zinc-900 [&>span]:hidden",children:[(0,jsx_runtime_namespaceObject.jsx)("p",{children:"Clear selection"}),(0,jsx_runtime_namespaceObject.jsx)("kbd",{className:"select-none rounded border bg-background px-1.5 py-px font-mono font-normal text-[0.7rem] text-foreground shadow-xs",children:(0,jsx_runtime_namespaceObject.jsx)("abbr",{title:"Escape",className:"no-underline",children:"Esc"})})]})]})]})}for(var __webpack_i__ in exports.DataTableActionBar=__webpack_exports__.DataTableActionBar,exports.DataTableActionBarAction=__webpack_exports__.DataTableActionBarAction,exports.DataTableActionBarSelection=__webpack_exports__.DataTableActionBarSelection,__webpack_exports__)-1===["DataTableActionBar","DataTableActionBarAction","DataTableActionBarSelection"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
3
|
+
//# sourceMappingURL=data-table-action-bar.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components\\data-table\\data-table-action-bar.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-action-bar.tsx"],"sourcesContent":["\r\n\r\nimport { Button } from '@/components/button'\r\nimport { Separator } from '@/components/separator'\r\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/tooltip'\r\nimport { cn } from '@/lib/utils'\r\nimport { X } from '@phosphor-icons/react'\r\nimport type { Table } from '@tanstack/react-table'\r\nimport { AnimatePresence, motion } from 'motion/react'\r\nimport * as React from 'react'\r\nimport * as ReactDOM from 'react-dom'\r\nimport { Spinner } from '../spinner'\r\n\r\ninterface DataTableActionBarProps<TData>\r\n extends React.ComponentProps<typeof motion.div> {\r\n table: Table<TData>\r\n visible?: boolean\r\n container?: Element | DocumentFragment | null\r\n}\r\n\r\nfunction DataTableActionBar<TData>({\r\n table,\r\n visible: visibleProp,\r\n container: containerProp,\r\n children,\r\n className,\r\n ...props\r\n}: DataTableActionBarProps<TData>) {\r\n const [mounted, setMounted] = React.useState(false)\r\n\r\n React.useLayoutEffect(() => {\r\n setMounted(true)\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n function onKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n table.toggleAllRowsSelected(false)\r\n }\r\n }\r\n\r\n window.addEventListener('keydown', onKeyDown)\r\n return () => window.removeEventListener('keydown', onKeyDown)\r\n }, [table])\r\n\r\n const container =\r\n containerProp ?? (mounted ? globalThis.document?.body : null)\r\n\r\n if (!container) return null\r\n\r\n const visible =\r\n visibleProp ?? table.getFilteredSelectedRowModel().rows.length > 0\r\n\r\n return ReactDOM.createPortal(\r\n <AnimatePresence>\r\n {visible && (\r\n <motion.div\r\n role=\"toolbar\"\r\n aria-orientation=\"horizontal\"\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: 20 }}\r\n transition={{ duration: 0.2, ease: 'easeInOut' }}\r\n className={cn(\r\n 'fixed inset-x-0 bottom-6 z-50 mx-auto flex w-fit flex-wrap items-center justify-center gap-2 rounded-md border bg-background p-2 text-foreground shadow-sm',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </motion.div>\r\n )}\r\n </AnimatePresence>,\r\n container\r\n )\r\n}\r\n\r\ninterface DataTableActionBarActionProps\r\n extends React.ComponentProps<typeof Button> {\r\n tooltip?: string\r\n isPending?: boolean\r\n}\r\n\r\nfunction DataTableActionBarAction({\r\n size = 'sm',\r\n tooltip,\r\n isPending,\r\n disabled,\r\n className,\r\n children,\r\n ...props\r\n}: DataTableActionBarActionProps) {\r\n const trigger = (\r\n <Button\r\n variant=\"secondary\"\r\n size={size}\r\n className={cn(\r\n 'gap-1.5 border border-secondary bg-secondary/50 hover:bg-secondary/70 [&>svg]:size-3.5',\r\n size === 'icon' ? 'size-7' : 'h-7',\r\n className\r\n )}\r\n disabled={disabled || isPending}\r\n {...props}\r\n >\r\n {isPending ? <Spinner /> : children}\r\n </Button>\r\n )\r\n\r\n if (!tooltip) return trigger\r\n\r\n return (\r\n <Tooltip>\r\n <TooltipTrigger asChild>{trigger}</TooltipTrigger>\r\n <TooltipContent\r\n sideOffset={6}\r\n className=\"border bg-accent font-semibold text-foreground dark:bg-zinc-900 [&>span]:hidden\"\r\n >\r\n <p>{tooltip}</p>\r\n </TooltipContent>\r\n </Tooltip>\r\n )\r\n}\r\n\r\ninterface DataTableActionBarSelectionProps<TData> {\r\n table: Table<TData>\r\n}\r\n\r\nfunction DataTableActionBarSelection<TData>({\r\n table,\r\n}: DataTableActionBarSelectionProps<TData>) {\r\n const onClearSelection = React.useCallback(() => {\r\n table.toggleAllRowsSelected(false)\r\n }, [table])\r\n\r\n return (\r\n <div className=\"flex h-7 items-center rounded-md border pr-1 pl-2.5\">\r\n <span className=\"whitespace-nowrap text-xs\">\r\n {table.getFilteredSelectedRowModel().rows.length} selected\r\n </span>\r\n <Separator\r\n orientation=\"vertical\"\r\n className=\"mr-1 ml-2 data-[orientation=vertical]:h-4\"\r\n />\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n className=\"size-5\"\r\n onClick={onClearSelection}\r\n >\r\n <X className=\"size-3.5\" />\r\n </Button>\r\n </TooltipTrigger>\r\n <TooltipContent\r\n sideOffset={10}\r\n className=\"flex items-center gap-2 border bg-accent px-2 py-1 font-semibold text-foreground dark:bg-zinc-900 [&>span]:hidden\"\r\n >\r\n <p>Clear selection</p>\r\n <kbd className=\"select-none rounded border bg-background px-1.5 py-px font-mono font-normal text-[0.7rem] text-foreground shadow-xs\">\r\n <abbr title=\"Escape\" className=\"no-underline\">\r\n Esc\r\n </abbr>\r\n </kbd>\r\n </TooltipContent>\r\n </Tooltip>\r\n </div>\r\n )\r\n}\r\n\r\nexport {\r\n DataTableActionBar,\r\n DataTableActionBarAction,\r\n DataTableActionBarSelection,\r\n}\r\n"],"names":["DataTableActionBar","table","visibleProp","containerProp","children","className","props","mounted","setMounted","React","onKeyDown","event","window","container","globalThis","visible","ReactDOM","AnimatePresence","motion","cn","DataTableActionBarAction","size","tooltip","isPending","disabled","trigger","Button","Spinner","Tooltip","TooltipTrigger","TooltipContent","DataTableActionBarSelection","onClearSelection","Separator","X"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,_)=>{for(var a in _)__webpack_require__.o(_,a)&&!__webpack_require__.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:_[a]})},__webpack_require__.o=(e,_)=>Object.prototype.hasOwnProperty.call(e,_),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{DataTableAdvancedToolbar:()=>DataTableAdvancedToolbar});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),external_data_table_view_options_cjs_namespaceObject=require("./data-table-view-options.cjs"),utils_cjs_namespaceObject=require("../../lib/utils.cjs");function DataTableAdvancedToolbar({table:e,children:_,className:a,...r}){return(0,jsx_runtime_namespaceObject.jsxs)("div",{role:"toolbar","aria-orientation":"horizontal",className:(0,utils_cjs_namespaceObject.cn)("flex w-full items-start justify-between gap-2 p-1",a),...r,children:[(0,jsx_runtime_namespaceObject.jsx)("div",{className:"flex flex-1 flex-wrap items-center gap-2",children:_}),(0,jsx_runtime_namespaceObject.jsx)("div",{className:"flex items-center gap-2",children:(0,jsx_runtime_namespaceObject.jsx)(external_data_table_view_options_cjs_namespaceObject.DataTableViewOptions,{table:e})})]})}for(var __webpack_i__ in exports.DataTableAdvancedToolbar=__webpack_exports__.DataTableAdvancedToolbar,__webpack_exports__)-1===["DataTableAdvancedToolbar"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
3
|
+
//# sourceMappingURL=data-table-advanced-toolbar.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components\\data-table\\data-table-advanced-toolbar.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-advanced-toolbar.tsx"],"sourcesContent":["\r\n\r\nimport type { Table } from '@tanstack/react-table'\r\nimport type * as React from 'react'\r\n\r\nimport { DataTableViewOptions } from '@/components/data-table/data-table-view-options'\r\nimport { cn } from '@/lib/utils'\r\n\r\ninterface DataTableAdvancedToolbarProps<TData>\r\n extends React.ComponentProps<'div'> {\r\n table: Table<TData>\r\n}\r\n\r\nexport function DataTableAdvancedToolbar<TData>({\r\n table,\r\n children,\r\n className,\r\n ...props\r\n}: DataTableAdvancedToolbarProps<TData>) {\r\n return (\r\n <div\r\n role=\"toolbar\"\r\n aria-orientation=\"horizontal\"\r\n className={cn(\r\n 'flex w-full items-start justify-between gap-2 p-1',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className=\"flex flex-1 flex-wrap items-center gap-2\">{children}</div>\r\n <div className=\"flex items-center gap-2\">\r\n <DataTableViewOptions table={table} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":["DataTableAdvancedToolbar","table","children","className","props","cn","DataTableViewOptions"],"mappings":";whCAaO,SAASA,yBAAgC,CAC9CC,MAAAA,CAAK,CACLC,SAAAA,CAAQ,CACRC,UAAAA,CAAS,CACT,GAAGC,EACkC,EACrC,MACE,qCAAC,OACC,KAAK,UACL,mBAAiB,aACjB,UAAWC,GAAAA,0BAAAA,EAAAA,EACT,oDACAF,GAED,GAAGC,CAAK,C,UAET,oCAAC,OAAI,UAAU,2C,SAA4CF,C,GAC3D,oCAAC,OAAI,UAAU,0B,SACb,oCAACI,qDAAAA,oBAAoBA,CAAAA,CAAC,MAAOL,C,OAIrC,C"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,t)=>{for(var a in t)__webpack_require__.o(t,a)&&!__webpack_require__.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{DataTableColumnHeader:()=>DataTableColumnHeader});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),react_namespaceObject=require("@phosphor-icons/react"),external_dropdown_menu_cjs_namespaceObject=require("../dropdown-menu.cjs"),utils_cjs_namespaceObject=require("../../lib/utils.cjs");function DataTableColumnHeader({column:e,title:t,className:a,...r}){return e.getCanSort()||e.getCanHide()?(0,jsx_runtime_namespaceObject.jsxs)(external_dropdown_menu_cjs_namespaceObject.DropdownMenu,{children:[(0,jsx_runtime_namespaceObject.jsxs)(external_dropdown_menu_cjs_namespaceObject.DropdownMenuTrigger,{className:(0,utils_cjs_namespaceObject.cn)("-ml-1.5 flex h-8 items-center gap-1.5 rounded-md px-2 py-1.5 hover:bg-accent focus:outline-none focus:ring-1 focus:ring-ring data-[state=open]:bg-accent [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground",a),...r,children:[t,e.getCanSort()&&("desc"===e.getIsSorted()?(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretDown,{}):"asc"===e.getIsSorted()?(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretUp,{}):(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretUpDown,{}))]}),(0,jsx_runtime_namespaceObject.jsxs)(external_dropdown_menu_cjs_namespaceObject.DropdownMenuContent,{align:"start",className:"w-28",children:[e.getCanSort()&&(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment,{children:[(0,jsx_runtime_namespaceObject.jsxs)(external_dropdown_menu_cjs_namespaceObject.DropdownMenuCheckboxItem,{className:"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground",checked:"asc"===e.getIsSorted(),onClick:()=>e.toggleSorting(!1),children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretUp,{}),"Asc"]}),(0,jsx_runtime_namespaceObject.jsxs)(external_dropdown_menu_cjs_namespaceObject.DropdownMenuCheckboxItem,{className:"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground",checked:"desc"===e.getIsSorted(),onClick:()=>e.toggleSorting(!0),children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretDown,{}),"Desc"]}),e.getIsSorted()&&(0,jsx_runtime_namespaceObject.jsxs)(external_dropdown_menu_cjs_namespaceObject.DropdownMenuItem,{className:"pl-2 [&_svg]:text-muted-foreground",onClick:()=>e.clearSorting(),children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.X,{}),"Reset"]})]}),e.getCanHide()&&(0,jsx_runtime_namespaceObject.jsxs)(external_dropdown_menu_cjs_namespaceObject.DropdownMenuCheckboxItem,{className:"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground",checked:!e.getIsVisible(),onClick:()=>e.toggleVisibility(!1),children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.EyeSlash,{}),"Hide"]})]})]}):(0,jsx_runtime_namespaceObject.jsx)("div",{className:(0,utils_cjs_namespaceObject.cn)(a),children:t})}for(var __webpack_i__ in exports.DataTableColumnHeader=__webpack_exports__.DataTableColumnHeader,__webpack_exports__)-1===["DataTableColumnHeader"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
3
|
+
//# sourceMappingURL=data-table-column-header.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components\\data-table\\data-table-column-header.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-column-header.tsx"],"sourcesContent":["\r\n\r\nimport {\r\n CaretDown,\r\n CaretUp,\r\n CaretUpDown,\r\n EyeSlash,\r\n X,\r\n} from '@phosphor-icons/react'\r\nimport type { Column } from '@tanstack/react-table'\r\n\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n} from '@/components/dropdown-menu'\r\nimport { cn } from '@/lib/utils'\r\n\r\ninterface DataTableColumnHeaderProps<TData, TValue>\r\n extends React.ComponentProps<typeof DropdownMenuTrigger> {\r\n column: Column<TData, TValue>\r\n title: string\r\n}\r\n\r\nexport function DataTableColumnHeader<TData, TValue>({\r\n column,\r\n title,\r\n className,\r\n ...props\r\n}: DataTableColumnHeaderProps<TData, TValue>) {\r\n if (!column.getCanSort() && !column.getCanHide()) {\r\n return <div className={cn(className)}>{title}</div>\r\n }\r\n\r\n return (\r\n <DropdownMenu>\r\n <DropdownMenuTrigger\r\n className={cn(\r\n '-ml-1.5 flex h-8 items-center gap-1.5 rounded-md px-2 py-1.5 hover:bg-accent focus:outline-none focus:ring-1 focus:ring-ring data-[state=open]:bg-accent [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {title}\r\n {column.getCanSort() &&\r\n (column.getIsSorted() === 'desc' ? (\r\n <CaretDown />\r\n ) : column.getIsSorted() === 'asc' ? (\r\n <CaretUp />\r\n ) : (\r\n <CaretUpDown />\r\n ))}\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"start\" className=\"w-28\">\r\n {column.getCanSort() && (\r\n <>\r\n <DropdownMenuCheckboxItem\r\n className=\"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\"\r\n checked={column.getIsSorted() === 'asc'}\r\n onClick={() => column.toggleSorting(false)}\r\n >\r\n <CaretUp />\r\n Asc\r\n </DropdownMenuCheckboxItem>\r\n <DropdownMenuCheckboxItem\r\n className=\"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\"\r\n checked={column.getIsSorted() === 'desc'}\r\n onClick={() => column.toggleSorting(true)}\r\n >\r\n <CaretDown />\r\n Desc\r\n </DropdownMenuCheckboxItem>\r\n {column.getIsSorted() && (\r\n <DropdownMenuItem\r\n className=\"pl-2 [&_svg]:text-muted-foreground\"\r\n onClick={() => column.clearSorting()}\r\n >\r\n <X />\r\n Reset\r\n </DropdownMenuItem>\r\n )}\r\n </>\r\n )}\r\n {column.getCanHide() && (\r\n <DropdownMenuCheckboxItem\r\n className=\"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\"\r\n checked={!column.getIsVisible()}\r\n onClick={() => column.toggleVisibility(false)}\r\n >\r\n <EyeSlash />\r\n Hide\r\n </DropdownMenuCheckboxItem>\r\n )}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n )\r\n}\r\n"],"names":["DataTableColumnHeader","column","title","className","props","DropdownMenu","DropdownMenuTrigger","cn","CaretDown","CaretUp","CaretUpDown","DropdownMenuContent","DropdownMenuCheckboxItem","DropdownMenuItem","X","EyeSlash"],"mappings":";sjCA0BO,SAASA,sBAAqC,CACnDC,OAAAA,CAAM,CACNC,MAAAA,CAAK,CACLC,UAAAA,CAAS,CACT,GAAGC,EACuC,SAC1C,EAAY,UAAU,IAAOH,EAAO,UAAU,GAK5C,qCAACI,2CAAAA,YAAYA,CAAAA,C,UACX,qCAACC,2CAAAA,mBAAmBA,CAAAA,CAClB,UAAWC,GAAAA,0BAAAA,EAAAA,EACT,yNACAJ,GAED,GAAGC,CAAK,C,UAERF,EACAD,EAAO,UAAU,IACfA,CAAAA,SAAAA,EAAO,WAAW,GACjB,oCAACO,sBAAAA,SAASA,CAAAA,CAAAA,GACRP,QAAAA,EAAO,WAAW,GACpB,oCAACQ,sBAAAA,OAAOA,CAAAA,CAAAA,GAER,oCAACC,sBAAAA,WAAWA,CAAAA,CAAAA,EAAAA,E,GAGlB,qCAACC,2CAAAA,mBAAmBA,CAAAA,CAAC,MAAM,QAAQ,UAAU,O,UAC1CV,EAAO,UAAU,IAChB,2E,UACE,qCAACW,2CAAAA,wBAAwBA,CAAAA,CACvB,UAAU,+GACV,QAASX,QAAAA,EAAO,WAAW,GAC3B,QAAS,IAAMA,EAAO,aAAa,CAAC,I,UAEpC,oCAACQ,sBAAAA,OAAOA,CAAAA,CAAAA,GAAG,M,GAGb,qCAACG,2CAAAA,wBAAwBA,CAAAA,CACvB,UAAU,+GACV,QAASX,SAAAA,EAAO,WAAW,GAC3B,QAAS,IAAMA,EAAO,aAAa,CAAC,I,UAEpC,oCAACO,sBAAAA,SAASA,CAAAA,CAAAA,GAAG,O,GAGdP,EAAO,WAAW,IACjB,qCAACY,2CAAAA,gBAAgBA,CAAAA,CACf,UAAU,qCACV,QAAS,IAAMZ,EAAO,YAAY,G,UAElC,oCAACa,sBAAAA,CAACA,CAAAA,CAAAA,GAAG,Q,MAMZb,EAAO,UAAU,IAChB,qCAACW,2CAAAA,wBAAwBA,CAAAA,CACvB,UAAU,+GACV,QAAS,CAACX,EAAO,YAAY,GAC7B,QAAS,IAAMA,EAAO,gBAAgB,CAAC,I,UAEvC,oCAACc,sBAAAA,QAAQA,CAAAA,CAAAA,GAAG,O,SA1Db,oCAAC,OAAI,UAAWR,GAAAA,0BAAAA,EAAAA,EAAGJ,G,SAAaD,C,EAiE3C,C"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,a)=>{for(var t in a)__webpack_require__.o(a,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},__webpack_require__.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{DataTableDateFilter:()=>DataTableDateFilter});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),react_namespaceObject=require("@phosphor-icons/react"),external_react_namespaceObject=require("react"),external_button_cjs_namespaceObject=require("../button.cjs"),external_calendar_cjs_namespaceObject=require("../calendar.cjs"),external_popover_cjs_namespaceObject=require("../popover.cjs"),external_separator_cjs_namespaceObject=require("../separator.cjs"),format_cjs_namespaceObject=require("../../lib/format.cjs");function getIsDateRange(e){return e&&"object"==typeof e&&!Array.isArray(e)}function parseAsDate(e){if(!e)return;let a=new Date("string"==typeof e?Number(e):e);return Number.isNaN(a.getTime())?void 0:a}function parseColumnFilterValue(e){return null==e?[]:Array.isArray(e)?e.map(e=>{if("number"==typeof e||"string"==typeof e)return e}):"string"==typeof e||"number"==typeof e?[e]:[]}function DataTableDateFilter({column:e,title:a,multiple:t}){let r=e.getFilterValue(),n=external_react_namespaceObject.useMemo(()=>{if(!r)return t?{from:void 0,to:void 0}:[];if(t){let e=parseColumnFilterValue(r);return{from:parseAsDate(e[0]),to:parseAsDate(e[1])}}let e=parseAsDate(parseColumnFilterValue(r)[0]);return e?[e]:[]},[r,t]),c=external_react_namespaceObject.useCallback(a=>{if(!a)return void e.setFilterValue(void 0);if(!t||"getTime"in a)!t&&"getTime"in a&&e.setFilterValue(a.getTime());else{let t=a.from?.getTime(),r=a.to?.getTime();e.setFilterValue(t||r?[t,r]:void 0)}},[e,t]),s=external_react_namespaceObject.useCallback(a=>{a.stopPropagation(),e.setFilterValue(void 0)},[e]),_=external_react_namespaceObject.useMemo(()=>t?!!getIsDateRange(n)&&(n.from||n.to):!!Array.isArray(n)&&n.length>0,[t,n]),i=external_react_namespaceObject.useCallback(e=>e.from||e.to?e.from&&e.to?`${(0,format_cjs_namespaceObject.formatDate)(e.from)} - ${(0,format_cjs_namespaceObject.formatDate)(e.to)}`:(0,format_cjs_namespaceObject.formatDate)(e.from??e.to):"",[]),o=external_react_namespaceObject.useMemo(()=>{if(t){if(!getIsDateRange(n))return null;let e=n.from||n.to,t=e?i(n):"Select date range";return(0,jsx_runtime_namespaceObject.jsxs)("span",{className:"flex items-center gap-2",children:[(0,jsx_runtime_namespaceObject.jsx)("span",{children:a}),e&&(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_separator_cjs_namespaceObject.Separator,{orientation:"vertical",className:"mx-0.5 data-[orientation=vertical]:h-4"}),(0,jsx_runtime_namespaceObject.jsx)("span",{children:t})]})]})}if(getIsDateRange(n))return null;let e=n.length>0,r=e?(0,format_cjs_namespaceObject.formatDate)(n[0]):"Select date";return(0,jsx_runtime_namespaceObject.jsxs)("span",{className:"flex items-center gap-2",children:[(0,jsx_runtime_namespaceObject.jsx)("span",{children:a}),e&&(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_separator_cjs_namespaceObject.Separator,{orientation:"vertical",className:"mx-0.5 data-[orientation=vertical]:h-4"}),(0,jsx_runtime_namespaceObject.jsx)("span",{children:r})]})]})},[n,t,i,a]);return(0,jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button,{variant:"outline",size:"sm",className:"border-dashed",children:[_?(0,jsx_runtime_namespaceObject.jsx)("div",{role:"button","aria-label":`Clear ${a} filter`,tabIndex:0,onClick:s,className:"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.XCircle,{})}):(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Calendar,{}),o]})}),(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverContent,{className:"w-auto p-0",align:"start",children:t?(0,jsx_runtime_namespaceObject.jsx)(external_calendar_cjs_namespaceObject.Calendar,{initialFocus:!0,mode:"range",selected:getIsDateRange(n)?n:{from:void 0,to:void 0},onSelect:c}):(0,jsx_runtime_namespaceObject.jsx)(external_calendar_cjs_namespaceObject.Calendar,{initialFocus:!0,mode:"single",selected:getIsDateRange(n)?void 0:n[0],onSelect:c})})]})}for(var __webpack_i__ in exports.DataTableDateFilter=__webpack_exports__.DataTableDateFilter,__webpack_exports__)-1===["DataTableDateFilter"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
3
|
+
//# sourceMappingURL=data-table-date-filter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components\\data-table\\data-table-date-filter.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-date-filter.tsx"],"sourcesContent":["\r\n\r\nimport { Calendar as CalendarIcon, 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\" className=\"border-dashed\">\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 <CalendarIcon />\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","CalendarIcon","PopoverContent","Calendar"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,a)=>{for(var t in a)__webpack_require__.o(a,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},__webpack_require__.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{DataTableFacetedFilter:()=>DataTableFacetedFilter});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),react_namespaceObject=require("@phosphor-icons/react"),external_badge_cjs_namespaceObject=require("../badge.cjs"),external_button_cjs_namespaceObject=require("../button.cjs"),external_command_cjs_namespaceObject=require("../command.cjs"),external_popover_cjs_namespaceObject=require("../popover.cjs"),external_separator_cjs_namespaceObject=require("../separator.cjs"),utils_cjs_namespaceObject=require("../../lib/utils.cjs"),external_react_namespaceObject=require("react");function DataTableFacetedFilter({column:e,title:a,options:t,multiple:c}){let[r,s]=external_react_namespaceObject.useState(!1),n=e?.getFilterValue(),_=new Set(Array.isArray(n)?n:[]),m=external_react_namespaceObject.useCallback((a,t)=>{if(e)if(c){let c=new Set(_);t?c.delete(a.value):c.add(a.value);let r=Array.from(c);e.setFilterValue(r.length?r:void 0)}else e.setFilterValue(t?void 0:[a.value]),s(!1)},[e,c,_]),i=external_react_namespaceObject.useCallback(a=>{a?.stopPropagation(),e?.setFilterValue(void 0)},[e]);return(0,jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover,{open:r,onOpenChange:s,children:[(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button,{variant:"outline",size:"sm",className:"border-dashed",children:[_?.size>0?(0,jsx_runtime_namespaceObject.jsx)("div",{role:"button","aria-label":`Clear ${a} filter`,tabIndex:0,onClick:i,className:"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.XCircle,{})}):(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.PlusCircle,{}),a,_?.size>0&&(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_separator_cjs_namespaceObject.Separator,{orientation:"vertical",className:"mx-0.5 data-[orientation=vertical]:h-4"}),(0,jsx_runtime_namespaceObject.jsx)(external_badge_cjs_namespaceObject.Badge,{variant:"secondary",className:"rounded-sm px-1 font-normal lg:hidden",children:_.size}),(0,jsx_runtime_namespaceObject.jsx)("div",{className:"hidden items-center gap-1 lg:flex",children:_.size>2?(0,jsx_runtime_namespaceObject.jsxs)(external_badge_cjs_namespaceObject.Badge,{variant:"secondary",className:"rounded-sm px-1 font-normal",children:[_.size," selected"]}):t.filter(e=>_.has(e.value)).map(e=>(0,jsx_runtime_namespaceObject.jsx)(external_badge_cjs_namespaceObject.Badge,{variant:"secondary",className:"rounded-sm px-1 font-normal",children:e.label},e.value))})]})]})}),(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverContent,{className:"w-[12.5rem] p-0",align:"start",children:(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.Command,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandInput,{placeholder:a}),(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandList,{className:"max-h-full",children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty,{children:"No results found."}),(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup,{className:"max-h-[18.75rem] overflow-y-auto overflow-x-hidden",children:t.map(e=>{let a=_.has(e.value);return(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandItem,{onSelect:()=>m(e,a),children:[(0,jsx_runtime_namespaceObject.jsx)("div",{className:(0,utils_cjs_namespaceObject.cn)("flex size-4 items-center justify-center rounded-sm border border-primary",a?"bg-primary":"opacity-50 [&_svg]:invisible"),children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Check,{})}),e.icon&&(0,jsx_runtime_namespaceObject.jsx)(e.icon,{}),(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:e.label}),e.count&&(0,jsx_runtime_namespaceObject.jsx)("span",{className:"ml-auto font-mono text-xs",children:e.count})]},e.value)})}),_.size>0&&(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandSeparator,{}),(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup,{children:(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandItem,{onSelect:()=>i(),className:"justify-center text-center",children:"Clear filters"})})]})]})]})})]})}for(var __webpack_i__ in exports.DataTableFacetedFilter=__webpack_exports__.DataTableFacetedFilter,__webpack_exports__)-1===["DataTableFacetedFilter"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
3
|
+
//# sourceMappingURL=data-table-faceted-filter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components\\data-table\\data-table-faceted-filter.cjs","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 { Check, PlusCircle, XCircle } 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\" className=\"border-dashed\">\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 <XCircle />\r\n </div>\r\n ) : (\r\n <PlusCircle />\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 <Check />\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 Clear filters\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","XCircle","PlusCircle","Separator","Badge","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","cn","Check","CommandSeparator"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,a)=>{for(var t in a)__webpack_require__.o(a,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},__webpack_require__.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{DataTableFilterList:()=>DataTableFilterList});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),react_namespaceObject=require("@phosphor-icons/react"),external_nuqs_namespaceObject=require("nuqs"),external_react_namespaceObject=require("react"),external_badge_cjs_namespaceObject=require("../badge.cjs"),external_button_cjs_namespaceObject=require("../button.cjs"),external_calendar_cjs_namespaceObject=require("../calendar.cjs"),external_command_cjs_namespaceObject=require("../command.cjs"),external_data_table_range_filter_cjs_namespaceObject=require("./data-table-range-filter.cjs"),external_faceted_cjs_namespaceObject=require("../faceted.cjs"),external_input_cjs_namespaceObject=require("../input.cjs"),external_popover_cjs_namespaceObject=require("../popover.cjs"),external_select_cjs_namespaceObject=require("../select.cjs"),external_sortable_cjs_namespaceObject=require("../sortable.cjs"),use_debounced_callback_cjs_namespaceObject=require("../../hooks/use-debounced-callback.cjs"),data_table_cjs_namespaceObject=require("../../lib/data-table.cjs"),data_table_config_cjs_namespaceObject=require("../../lib/data-table-config.cjs"),format_cjs_namespaceObject=require("../../lib/format.cjs"),id_cjs_namespaceObject=require("../../lib/id.cjs"),parsers_cjs_namespaceObject=require("../../lib/parsers.cjs"),utils_cjs_namespaceObject=require("../../lib/utils.cjs"),FILTERS_KEY="filters",JOIN_OPERATOR_KEY="joinOperator",DEBOUNCE_MS=300,THROTTLE_MS=50,OPEN_MENU_SHORTCUT="f",REMOVE_FILTER_SHORTCUTS=["backspace","delete"];function DataTableFilterList({table:e,debounceMs:a=300,throttleMs:t=50,shallow:n=!0,...c}){let s=external_react_namespaceObject.useId(),r=external_react_namespaceObject.useId(),l=external_react_namespaceObject.useId(),[_,i]=external_react_namespaceObject.useState(!1),m=external_react_namespaceObject.useRef(null),j=external_react_namespaceObject.useMemo(()=>e.getAllColumns().filter(e=>e.columnDef.enableColumnFilter),[e]),[o,p]=(0,external_nuqs_namespaceObject.useQueryState)("filters",(0,parsers_cjs_namespaceObject.getFiltersStateParser)(j.map(e=>e.id)).withDefault([]).withOptions({clearOnDefault:!0,shallow:n,throttleMs:t})),u=(0,use_debounced_callback_cjs_namespaceObject.useDebouncedCallback)(p,a),[b,d]=(0,external_nuqs_namespaceObject.useQueryState)("joinOperator",(0,external_nuqs_namespaceObject.parseAsStringEnum)(["and","or"]).withDefault("and").withOptions({clearOnDefault:!0,shallow:n})),x=external_react_namespaceObject.useCallback(()=>{let e=j[0];e&&u([...o,{id:e.id,value:"",variant:e.columnDef.meta?.variant??"text",operator:(0,data_table_cjs_namespaceObject.getDefaultFilterOperator)(e.columnDef.meta?.variant??"text"),filterId:(0,id_cjs_namespaceObject.generateId)({length:8})}])},[j,o,u]),O=external_react_namespaceObject.useCallback((e,a)=>{u(t=>t.map(t=>t.filterId===e?{...t,...a}:t))},[u]),f=external_react_namespaceObject.useCallback(e=>{p(o.filter(a=>a.filterId!==e)),requestAnimationFrame(()=>{m.current?.focus()})},[o,p]),h=external_react_namespaceObject.useCallback(()=>{p(null),d("and")},[p,d]);external_react_namespaceObject.useEffect(()=>{function e(e){!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&("f"!==e.key.toLowerCase()||e.ctrlKey||e.metaKey||e.shiftKey||(e.preventDefault(),i(!0)),"f"===e.key.toLowerCase()&&e.shiftKey&&o.length>0&&(e.preventDefault(),f(o[o.length-1]?.filterId??"")))}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[o,f]);let v=external_react_namespaceObject.useCallback(e=>{REMOVE_FILTER_SHORTCUTS.includes(e.key.toLowerCase())&&o.length>0&&(e.preventDefault(),f(o[o.length-1]?.filterId??""))},[o,f]);return(0,jsx_runtime_namespaceObject.jsxs)(external_sortable_cjs_namespaceObject.Sortable,{value:o,onValueChange:p,getItemValue:e=>e.filterId,children:[(0,jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover,{open:_,onOpenChange:i,children:[(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button,{variant:"outline",size:"sm",onKeyDown:v,children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.FunnelSimple,{}),"Filter",o.length>0&&(0,jsx_runtime_namespaceObject.jsx)(external_badge_cjs_namespaceObject.Badge,{variant:"secondary",className:"h-[18.24px] rounded-[3.2px] px-[5.12px] font-mono font-normal text-[10.4px]",children:o.length})]})}),(0,jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.PopoverContent,{"aria-describedby":l,"aria-labelledby":r,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,jsx_runtime_namespaceObject.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,jsx_runtime_namespaceObject.jsx)("h4",{id:r,className:"font-medium leading-none",children:o.length>0?"Filters":"No filters applied"}),(0,jsx_runtime_namespaceObject.jsx)("p",{id:l,className:(0,utils_cjs_namespaceObject.cn)("text-muted-foreground text-sm",o.length>0&&"sr-only"),children:o.length>0?"Modify filters to refine your rows.":"Add filters to refine your rows."})]}),o.length>0?(0,jsx_runtime_namespaceObject.jsx)(external_sortable_cjs_namespaceObject.SortableContent,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsx)("div",{role:"list",className:"flex max-h-[300px] flex-col gap-2 overflow-y-auto p-1",children:o.map((e,a)=>(0,jsx_runtime_namespaceObject.jsx)(DataTableFilterItem,{filter:e,index:a,filterItemId:`${s}-filter-${e.filterId}`,joinOperator:b,setJoinOperator:d,columns:j,onFilterUpdate:O,onFilterRemove:f},e.filterId))})}):null,(0,jsx_runtime_namespaceObject.jsxs)("div",{className:"flex w-full items-center gap-2",children:[(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{size:"sm",className:"rounded",ref:m,onClick:x,children:"Add filter"}),o.length>0?(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{variant:"outline",size:"sm",className:"rounded",onClick:h,children:"Reset filters"}):null]})]})]}),(0,jsx_runtime_namespaceObject.jsx)(external_sortable_cjs_namespaceObject.SortableOverlay,{children:(0,jsx_runtime_namespaceObject.jsxs)("div",{className:"flex items-center gap-2",children:[(0,jsx_runtime_namespaceObject.jsx)("div",{className:"h-8 min-w-[72px] rounded-sm bg-primary/10"}),(0,jsx_runtime_namespaceObject.jsx)("div",{className:"h-8 w-32 rounded-sm bg-primary/10"}),(0,jsx_runtime_namespaceObject.jsx)("div",{className:"h-8 w-32 rounded-sm bg-primary/10"}),(0,jsx_runtime_namespaceObject.jsx)("div",{className:"h-8 min-w-36 flex-1 rounded-sm bg-primary/10"}),(0,jsx_runtime_namespaceObject.jsx)("div",{className:"size-8 shrink-0 rounded-sm bg-primary/10"}),(0,jsx_runtime_namespaceObject.jsx)("div",{className:"size-8 shrink-0 rounded-sm bg-primary/10"})]})})]})}function DataTableFilterItem({filter:e,index:a,filterItemId:t,joinOperator:n,setJoinOperator:c,columns:s,onFilterUpdate:r,onFilterRemove:l}){let[_,i]=external_react_namespaceObject.useState(!1),[m,j]=external_react_namespaceObject.useState(!1),[o,p]=external_react_namespaceObject.useState(!1),u=s.find(a=>a.id===e.id);if(!u)return null;let b=`${t}-join-operator-listbox`,d=`${t}-field-listbox`,x=`${t}-operator-listbox`,O=`${t}-input`,f=u.columnDef.meta,h=(0,data_table_cjs_namespaceObject.getFilterOperators)(e.variant),v=external_react_namespaceObject.useCallback(a=>{!(a.target instanceof HTMLInputElement||a.target instanceof HTMLTextAreaElement)&&(_||m||o||REMOVE_FILTER_SHORTCUTS.includes(a.key.toLowerCase())&&(a.preventDefault(),l(e.filterId)))},[e.filterId,_,m,o,l]);return(0,jsx_runtime_namespaceObject.jsx)(external_sortable_cjs_namespaceObject.SortableItem,{value:e.filterId,asChild:!0,children:(0,jsx_runtime_namespaceObject.jsxs)("div",{role:"listitem",id:t,tabIndex:-1,className:"flex items-center gap-2",onKeyDown:v,children:[(0,jsx_runtime_namespaceObject.jsx)("div",{className:"min-w-[72px] text-center",children:0===a?(0,jsx_runtime_namespaceObject.jsx)("span",{className:"text-muted-foreground text-sm",children:"Where"}):1===a?(0,jsx_runtime_namespaceObject.jsxs)(external_select_cjs_namespaceObject.Select,{value:n,onValueChange:e=>c(e),children:[(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectTrigger,{"aria-label":"Select join operator","aria-controls":b,className:"h-8 rounded lowercase [&[data-size]]:h-8",children:(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectValue,{placeholder:n})}),(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectContent,{id:b,position:"popper",className:"min-w-(--radix-select-trigger-width) lowercase",children:data_table_config_cjs_namespaceObject.dataTableConfig.joinOperators.map(e=>(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectItem,{value:e,children:e},e))})]}):(0,jsx_runtime_namespaceObject.jsx)("span",{className:"text-muted-foreground text-sm",children:n})}),(0,jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover,{open:_,onOpenChange:i,children:[(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button,{role:"combobox","aria-controls":d,variant:"outline",size:"sm",className:"w-32 justify-between rounded font-normal",children:[(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:s.find(a=>a.id===e.id)?.columnDef.meta?.label??"Select field"}),(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretUpDown,{className:"opacity-50"})]})}),(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverContent,{id:d,align:"start",className:"w-40 origin-[var(--radix-popover-content-transform-origin)] p-0",children:(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.Command,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandInput,{placeholder:"Search fields..."}),(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandList,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty,{children:"No fields found."}),(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup,{children:s.map(a=>(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandItem,{value:a.id,onSelect:t=>{r(e.filterId,{id:t,variant:a.columnDef.meta?.variant??"text",operator:(0,data_table_cjs_namespaceObject.getDefaultFilterOperator)(a.columnDef.meta?.variant??"text"),value:""}),i(!1)},children:[(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:a.columnDef.meta?.label}),(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Check,{className:(0,utils_cjs_namespaceObject.cn)("ml-auto",a.id===e.id?"opacity-100":"opacity-0")})]},a.id))})]})]})})]}),(0,jsx_runtime_namespaceObject.jsxs)(external_select_cjs_namespaceObject.Select,{open:m,onOpenChange:j,value:e.operator,onValueChange:a=>r(e.filterId,{operator:a,value:"isEmpty"===a||"isNotEmpty"===a?"":e.value}),children:[(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectTrigger,{"aria-controls":x,className:"h-8 w-32 rounded lowercase [&[data-size]]:h-8",children:(0,jsx_runtime_namespaceObject.jsx)("div",{className:"truncate",children:(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectValue,{placeholder:e.operator})})}),(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectContent,{id:x,className:"origin-[var(--radix-select-content-transform-origin)]",children:h.map(e=>(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectItem,{value:e.value,className:"lowercase",children:e.label},e.value))})]}),(0,jsx_runtime_namespaceObject.jsx)("div",{className:"min-w-36 flex-1",children:onFilterInputRender({filter:e,inputId:O,column:u,columnMeta:f,onFilterUpdate:r,showValueSelector:o,setShowValueSelector:p})}),(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{"aria-controls":t,variant:"outline",size:"icon",className:"size-8 rounded",onClick:()=>l(e.filterId),children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Trash,{})}),(0,jsx_runtime_namespaceObject.jsx)(external_sortable_cjs_namespaceObject.SortableItemHandle,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{variant:"outline",size:"icon",className:"size-8 rounded",children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.DotsSixVertical,{})})})]})})}function onFilterInputRender({filter:e,inputId:a,column:t,columnMeta:n,onFilterUpdate:c,showValueSelector:s,setShowValueSelector:r}){if("isEmpty"===e.operator||"isNotEmpty"===e.operator)return(0,jsx_runtime_namespaceObject.jsx)("div",{id:a,role:"status","aria-label":`${n?.label} filter is ${"isEmpty"===e.operator?"empty":"not empty"}`,"aria-live":"polite",className:"h-8 w-full rounded border bg-transparent dark:bg-input/30"});switch(e.variant){case"text":case"number":case"range":{if("range"===e.variant&&"isBetween"===e.operator||"isBetween"===e.operator)return(0,jsx_runtime_namespaceObject.jsx)(external_data_table_range_filter_cjs_namespaceObject.DataTableRangeFilter,{filter:e,column:t,inputId:a,onFilterUpdate:c});let s="number"===e.variant||"range"===e.variant;return(0,jsx_runtime_namespaceObject.jsx)(external_input_cjs_namespaceObject.Input,{id:a,type:s?"number":e.variant,"aria-label":`${n?.label} filter value`,"aria-describedby":`${a}-description`,inputMode:s?"numeric":void 0,placeholder:n?.placeholder??"Enter a value...",className:"h-8 w-full rounded",defaultValue:"string"==typeof e.value?e.value:void 0,onChange:a=>c(e.filterId,{value:a.target.value})})}case"boolean":{if(Array.isArray(e.value))return null;let t=`${a}-listbox`;return(0,jsx_runtime_namespaceObject.jsxs)(external_select_cjs_namespaceObject.Select,{open:s,onOpenChange:r,value:e.value,onValueChange:a=>c(e.filterId,{value:a}),children:[(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectTrigger,{id:a,"aria-controls":t,"aria-label":`${n?.label} boolean filter`,className:"h-8 w-full rounded [&[data-size]]:h-8",children:(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectValue,{placeholder:e.value?"True":"False"})}),(0,jsx_runtime_namespaceObject.jsxs)(external_select_cjs_namespaceObject.SelectContent,{id:t,children:[(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectItem,{value:"true",children:"True"}),(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectItem,{value:"false",children:"False"})]})]})}case"select":case"multiSelect":{let t=`${a}-listbox`,l="multiSelect"===e.variant,_=l?Array.isArray(e.value)?e.value:[]:"string"==typeof e.value?e.value:void 0;return(0,jsx_runtime_namespaceObject.jsxs)(external_faceted_cjs_namespaceObject.Faceted,{open:s,onOpenChange:r,value:_,onValueChange:a=>{c(e.filterId,{value:a})},multiple:l,children:[(0,jsx_runtime_namespaceObject.jsx)(external_faceted_cjs_namespaceObject.FacetedTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{id:a,"aria-controls":t,"aria-label":`${n?.label} filter value${l?"s":""}`,variant:"outline",size:"sm",className:"w-full rounded font-normal",children:(0,jsx_runtime_namespaceObject.jsx)(external_faceted_cjs_namespaceObject.FacetedBadgeList,{options:n?.options,placeholder:n?.placeholder??`Select option${l?"s":""}...`})})}),(0,jsx_runtime_namespaceObject.jsxs)(external_faceted_cjs_namespaceObject.FacetedContent,{id:t,className:"w-[200px] origin-[var(--radix-popover-content-transform-origin)]",children:[(0,jsx_runtime_namespaceObject.jsx)(external_faceted_cjs_namespaceObject.FacetedInput,{"aria-label":`Search ${n?.label} options`,placeholder:n?.placeholder??"Search options..."}),(0,jsx_runtime_namespaceObject.jsxs)(external_faceted_cjs_namespaceObject.FacetedList,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_faceted_cjs_namespaceObject.FacetedEmpty,{children:"No options found."}),(0,jsx_runtime_namespaceObject.jsx)(external_faceted_cjs_namespaceObject.FacetedGroup,{children:n?.options?.map(e=>(0,jsx_runtime_namespaceObject.jsxs)(external_faceted_cjs_namespaceObject.FacetedItem,{value:e.value,children:[e.icon&&(0,jsx_runtime_namespaceObject.jsx)(e.icon,{}),(0,jsx_runtime_namespaceObject.jsx)("span",{children:e.label}),e.count&&(0,jsx_runtime_namespaceObject.jsx)("span",{className:"ml-auto font-mono text-xs",children:e.count})]},e.value))})]})]})]})}case"date":case"dateRange":{let t=`${a}-listbox`,l=Array.isArray(e.value)?e.value.filter(Boolean):[e.value,e.value].filter(Boolean),_="isBetween"===e.operator&&2===l.length?`${(0,format_cjs_namespaceObject.formatDate)(new Date(Number(l[0])))} - ${(0,format_cjs_namespaceObject.formatDate)(new Date(Number(l[1])))}`:l[0]?(0,format_cjs_namespaceObject.formatDate)(new Date(Number(l[0]))):"Pick a date";return(0,jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover,{open:s,onOpenChange:r,children:[(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button,{id:a,"aria-controls":t,"aria-label":`${n?.label} date filter`,variant:"outline",size:"sm",className:(0,utils_cjs_namespaceObject.cn)("w-full justify-start rounded text-left font-normal",!e.value&&"text-muted-foreground"),children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Calendar,{}),(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:_})]})}),(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverContent,{id:t,align:"start",className:"w-auto origin-[var(--radix-popover-content-transform-origin)] p-0",children:"isBetween"===e.operator?(0,jsx_runtime_namespaceObject.jsx)(external_calendar_cjs_namespaceObject.Calendar,{"aria-label":`Select ${n?.label} date range`,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:a=>{c(e.filterId,{value:a?[(a.from?.getTime()??"").toString(),(a.to?.getTime()??"").toString()]:[]})}}):(0,jsx_runtime_namespaceObject.jsx)(external_calendar_cjs_namespaceObject.Calendar,{"aria-label":`Select ${n?.label} date`,mode:"single",initialFocus:!0,selected:l[0]?new Date(Number(l[0])):void 0,onSelect:a=>{c(e.filterId,{value:(a?.getTime()??"").toString()})}})})]})}default:return null}}for(var __webpack_i__ in exports.DataTableFilterList=__webpack_exports__.DataTableFilterList,__webpack_exports__)-1===["DataTableFilterList"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
3
|
+
//# sourceMappingURL=data-table-filter-list.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components\\data-table\\data-table-filter-list.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-filter-list.tsx"],"sourcesContent":["\r\n\r\nimport {\r\n Calendar as CalendarIcon,\r\n CaretUpDown,\r\n Check,\r\n DotsSixVertical,\r\n FunnelSimple,\r\n Trash,\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(['and', 'or']).withDefault('and').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('and')\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 <FunnelSimple />\r\n Filter\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 ? 'Filters' : 'No filters applied'}\r\n </h4>\r\n <p\r\n id={descriptionId}\r\n className={cn(\r\n 'text-muted-foreground text-sm',\r\n filters.length > 0 && 'sr-only'\r\n )}\r\n >\r\n {filters.length > 0\r\n ? 'Modify filters to refine your rows.'\r\n : 'Add filters to refine your rows.'}\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 Add filter\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 Reset filters\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-8 min-w-[72px] rounded-sm bg-primary/10\" />\r\n <div className=\"h-8 w-32 rounded-sm bg-primary/10\" />\r\n <div className=\"h-8 w-32 rounded-sm bg-primary/10\" />\r\n <div className=\"h-8 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-muted-foreground text-sm\">Where</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-8 rounded lowercase [&[data-size]]:h-8\"\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-muted-foreground text-sm\">\r\n {joinOperator}\r\n </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 ?? 'Select field'}\r\n </span>\r\n <CaretUpDown 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=\"Search fields...\" />\r\n <CommandList>\r\n <CommandEmpty>No fields found.</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 <Check\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-8 w-32 rounded lowercase [&[data-size]]:h-8\"\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 <Trash />\r\n </Button>\r\n <SortableItemHandle asChild>\r\n <Button variant=\"outline\" size=\"icon\" className=\"size-8 rounded\">\r\n <DotsSixVertical />\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-8 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-8 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-8 w-full rounded [&[data-size]]:h-8\"\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>No options found.</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 : 'Pick a date'\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-muted-foreground'\r\n )}\r\n >\r\n <CalendarIcon />\r\n <span className=\"truncate\">{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 initialFocus\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 initialFocus\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":["FILTERS_KEY","JOIN_OPERATOR_KEY","DEBOUNCE_MS","THROTTLE_MS","OPEN_MENU_SHORTCUT","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","FunnelSimple","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","CaretUpDown","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Check","operator","onFilterInputRender","Trash","SortableItemHandle","DotsSixVertical","DataTableRangeFilter","isNumber","Input","undefined","Array","inputListboxId","multiple","selectedValues","Faceted","FacetedTrigger","FacetedBadgeList","FacetedContent","FacetedInput","FacetedList","FacetedEmpty","FacetedGroup","option","FacetedItem","dateValue","Boolean","displayValue","formatDate","Date","Number","CalendarIcon","Calendar","date"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,a)=>{for(var t in a)__webpack_require__.o(a,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},__webpack_require__.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{DataTableFilterMenu:()=>DataTableFilterMenu});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),react_namespaceObject=require("@phosphor-icons/react"),external_nuqs_namespaceObject=require("nuqs"),external_react_namespaceObject=require("react"),external_button_cjs_namespaceObject=require("../button.cjs"),external_calendar_cjs_namespaceObject=require("../calendar.cjs"),external_command_cjs_namespaceObject=require("../command.cjs"),external_data_table_range_filter_cjs_namespaceObject=require("./data-table-range-filter.cjs"),external_input_cjs_namespaceObject=require("../input.cjs"),external_popover_cjs_namespaceObject=require("../popover.cjs"),external_select_cjs_namespaceObject=require("../select.cjs"),use_debounced_callback_cjs_namespaceObject=require("../../hooks/use-debounced-callback.cjs"),data_table_cjs_namespaceObject=require("../../lib/data-table.cjs"),format_cjs_namespaceObject=require("../../lib/format.cjs"),id_cjs_namespaceObject=require("../../lib/id.cjs"),parsers_cjs_namespaceObject=require("../../lib/parsers.cjs"),utils_cjs_namespaceObject=require("../../lib/utils.cjs"),FILTERS_KEY="filters",DEBOUNCE_MS=300,THROTTLE_MS=50,OPEN_MENU_SHORTCUT="f",REMOVE_FILTER_SHORTCUTS=["backspace","delete"];function DataTableFilterMenu({table:e,debounceMs:a=300,throttleMs:t=50,shallow:n=!0,align:c="start",...s}){let r=external_react_namespaceObject.useId(),l=external_react_namespaceObject.useMemo(()=>e.getAllColumns().filter(e=>e.columnDef.enableColumnFilter),[e]),[m,_]=external_react_namespaceObject.useState(!1),[i,j]=external_react_namespaceObject.useState(null),[o,p]=external_react_namespaceObject.useState(""),u=external_react_namespaceObject.useRef(null),d=external_react_namespaceObject.useRef(null),b=external_react_namespaceObject.useCallback(e=>{_(e),e||setTimeout(()=>{j(null),p("")},100)},[]),x=external_react_namespaceObject.useCallback(e=>{REMOVE_FILTER_SHORTCUTS.includes(e.key.toLowerCase())&&!o&&i&&(e.preventDefault(),j(null))},[o,i]),[O,f]=(0,external_nuqs_namespaceObject.useQueryState)("filters",(0,parsers_cjs_namespaceObject.getFiltersStateParser)(l.map(e=>e.id)).withDefault([]).withOptions({clearOnDefault:!0,shallow:n,throttleMs:t})),v=(0,use_debounced_callback_cjs_namespaceObject.useDebouncedCallback)(f,a),h=external_react_namespaceObject.useCallback((e,a)=>{if(!a.trim()&&e.columnDef.meta?.variant!=="boolean")return;let t=e.columnDef.meta?.variant==="multiSelect"?[a]:a;v([...O,{id:e.id,value:t,variant:e.columnDef.meta?.variant??"text",operator:(0,data_table_cjs_namespaceObject.getDefaultFilterOperator)(e.columnDef.meta?.variant??"text"),filterId:(0,id_cjs_namespaceObject.generateId)({length:8})}]),_(!1),setTimeout(()=>{j(null),p("")},100)},[O,v]),g=external_react_namespaceObject.useCallback(e=>{v(O.filter(a=>a.filterId!==e)),requestAnimationFrame(()=>{u.current?.focus()})},[O,v]),C=external_react_namespaceObject.useCallback((e,a)=>{v(t=>t.map(t=>t.filterId===e?{...t,...a}:t))},[v]),S=external_react_namespaceObject.useCallback(()=>{v([])},[v]);external_react_namespaceObject.useEffect(()=>{function e(e){!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&("f"!==e.key.toLowerCase()||e.ctrlKey||e.metaKey||e.shiftKey||(e.preventDefault(),_(!0)),"f"===e.key.toLowerCase()&&e.shiftKey&&!m&&O.length>0&&(e.preventDefault(),g(O[O.length-1]?.filterId??"")))}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[m,O,g]);let w=external_react_namespaceObject.useCallback(e=>{REMOVE_FILTER_SHORTCUTS.includes(e.key.toLowerCase())&&O.length>0&&(e.preventDefault(),g(O[O.length-1]?.filterId??""))},[O,g]);return(0,jsx_runtime_namespaceObject.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[O.map(e=>(0,jsx_runtime_namespaceObject.jsx)(DataTableFilterItem,{filter:e,filterItemId:`${r}-filter-${e.filterId}`,columns:l,onFilterUpdate:C,onFilterRemove:g},e.filterId)),O.length>0&&(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{"aria-label":"Reset all filters",variant:"outline",size:"icon",className:"size-8",onClick:S,children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.X,{})}),(0,jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover,{open:m,onOpenChange:b,children:[(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button,{"aria-label":"Open filter command menu",variant:"outline",size:O.length>0?"icon":"sm",className:(0,utils_cjs_namespaceObject.cn)(O.length>0&&"size-8","h-8"),ref:u,onKeyDown:w,children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.FunnelSimple,{}),O.length>0?null:"Filter"]})}),(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverContent,{align:c,className:"w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] p-0",...s,children:(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.Command,{loop:!0,className:"[&_[cmdk-input-wrapper]_svg]:hidden",children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandInput,{ref:d,placeholder:i?i.columnDef.meta?.label??i.id:"Search fields...",value:o,onValueChange:p,onKeyDown:x}),(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandList,{children:i?(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment,{children:[i.columnDef.meta?.options&&(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty,{children:"No options found."}),(0,jsx_runtime_namespaceObject.jsx)(FilterValueSelector,{column:i,value:o,onSelect:e=>h(i,e)})]}):(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty,{children:"No fields found."}),(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup,{children:l.map(e=>(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandItem,{value:e.id,onSelect:()=>{j(e),p(""),requestAnimationFrame(()=>{d.current?.focus()})},children:[e.columnDef.meta?.icon&&(0,jsx_runtime_namespaceObject.jsx)(e.columnDef.meta.icon,{}),(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:e.columnDef.meta?.label??e.id})]},e.id))})]})})]})})]})]})}function DataTableFilterItem({filter:e,filterItemId:a,columns:t,onFilterUpdate:n,onFilterRemove:c}){{let[s,r]=external_react_namespaceObject.useState(!1),[l,m]=external_react_namespaceObject.useState(!1),[_,i]=external_react_namespaceObject.useState(!1),j=t.find(a=>a.id===e.id);if(!j)return null;let o=`${a}-operator-listbox`,p=`${a}-input`,u=j.columnDef.meta,d=(0,data_table_cjs_namespaceObject.getFilterOperators)(e.variant),b=external_react_namespaceObject.useCallback(a=>{!(a.target instanceof HTMLInputElement||a.target instanceof HTMLTextAreaElement)&&(s||l||_||REMOVE_FILTER_SHORTCUTS.includes(a.key.toLowerCase())&&(a.preventDefault(),c(e.filterId)))},[e.filterId,s,l,_,c]);return(0,jsx_runtime_namespaceObject.jsxs)("div",{role:"listitem",id:a,className:"flex h-8 items-center rounded-md bg-background",onKeyDown:b,children:[(0,jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover,{open:s,onOpenChange:r,children:[(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button,{variant:"ghost",size:"sm",className:"rounded-none rounded-l-md border border-r-0 font-normal dark:bg-input/30",children:[u?.icon&&(0,jsx_runtime_namespaceObject.jsx)(u.icon,{className:"text-muted-foreground"}),u?.label??j.id]})}),(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverContent,{align:"start",className:"w-48 origin-[var(--radix-popover-content-transform-origin)] p-0",children:(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.Command,{loop:!0,children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandInput,{placeholder:"Search fields..."}),(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandList,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty,{children:"No fields found."}),(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup,{children:t.map(a=>(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandItem,{value:a.id,onSelect:()=>{n(e.filterId,{id:a.id,variant:a.columnDef.meta?.variant??"text",operator:(0,data_table_cjs_namespaceObject.getDefaultFilterOperator)(a.columnDef.meta?.variant??"text"),value:""}),r(!1)},children:[a.columnDef.meta?.icon&&(0,jsx_runtime_namespaceObject.jsx)(a.columnDef.meta.icon,{}),(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:a.columnDef.meta?.label??a.id}),(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Check,{className:(0,utils_cjs_namespaceObject.cn)("ml-auto",a.id===e.id?"opacity-100":"opacity-0")})]},a.id))})]})]})})]}),(0,jsx_runtime_namespaceObject.jsxs)(external_select_cjs_namespaceObject.Select,{open:l,onOpenChange:m,value:e.operator,onValueChange:a=>n(e.filterId,{operator:a,value:"isEmpty"===a||"isNotEmpty"===a?"":e.value}),children:[(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectTrigger,{"aria-controls":o,className:"h-8 rounded-none border-r-0 px-2.5 lowercase [&[data-size]]:h-8 [&_svg]:hidden",children:(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectValue,{placeholder:e.operator})}),(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectContent,{id:o,className:"origin-[var(--radix-select-content-transform-origin)]",children:d.map(e=>(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectItem,{className:"lowercase",value:e.value,children:e.label},e.value))})]}),onFilterInputRender({filter:e,column:j,inputId:p,onFilterUpdate:n,showValueSelector:_,setShowValueSelector:i}),(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{"aria-controls":a,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:()=>c(e.filterId),children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.X,{className:"size-3.5"})})]},e.filterId)}}function FilterValueSelector({column:e,value:a,onSelect:t}){switch(e.columnDef.meta?.variant??"text"){case"boolean":return(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandGroup,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandItem,{value:"true",onSelect:()=>t("true"),children:"True"}),(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandItem,{value:"false",onSelect:()=>t("false"),children:"False"})]});case"select":case"multiSelect":return(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup,{children:e.columnDef.meta?.options?.map(e=>(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandItem,{value:e.value,onSelect:()=>t(e.value),children:[e.icon&&(0,jsx_runtime_namespaceObject.jsx)(e.icon,{}),(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:e.label}),e.count&&(0,jsx_runtime_namespaceObject.jsx)("span",{className:"ml-auto font-mono text-xs",children:e.count})]},e.value))});case"date":case"dateRange":return(0,jsx_runtime_namespaceObject.jsx)(external_calendar_cjs_namespaceObject.Calendar,{initialFocus:!0,mode:"single",selected:a?new Date(a):void 0,onSelect:e=>t(e?.getTime().toString()??"")});default:{let e=!a.trim();return(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup,{children:(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandItem,{value:a,onSelect:()=>t(a),disabled:e,children:e?(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment,{children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.TextAlignLeft,{}),(0,jsx_runtime_namespaceObject.jsx)("span",{children:"Type to add filter..."})]}):(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment,{children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.SealCheck,{}),(0,jsx_runtime_namespaceObject.jsxs)("span",{className:"truncate",children:['Filter by "',a,'"']})]})})})}}}function onFilterInputRender({filter:e,column:a,inputId:t,onFilterUpdate:n,showValueSelector:c,setShowValueSelector:s}){if("isEmpty"===e.operator||"isNotEmpty"===e.operator)return(0,jsx_runtime_namespaceObject.jsx)("div",{id:t,role:"status","aria-label":`${a.columnDef.meta?.label} filter is ${"isEmpty"===e.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(e.variant){case"text":case"number":case"range":{if("range"===e.variant&&"isBetween"===e.operator||"isBetween"===e.operator)return(0,jsx_runtime_namespaceObject.jsx)(external_data_table_range_filter_cjs_namespaceObject.DataTableRangeFilter,{filter:e,column:a,inputId:t,onFilterUpdate:n,className:"size-full max-w-28 gap-0 [&_[data-slot='range-min']]:border-r-0 [&_input]:rounded-none [&_input]:px-1.5"});let c="number"===e.variant||"range"===e.variant;return(0,jsx_runtime_namespaceObject.jsx)(external_input_cjs_namespaceObject.Input,{id:t,type:c?"number":"text",inputMode:c?"numeric":void 0,placeholder:a.columnDef.meta?.placeholder??"Enter value...",className:"h-full w-24 rounded-none px-1.5",defaultValue:"string"==typeof e.value?e.value:"",onChange:a=>n(e.filterId,{value:a.target.value})})}case"boolean":{let a=`${t}-listbox`;return(0,jsx_runtime_namespaceObject.jsxs)(external_select_cjs_namespaceObject.Select,{open:c,onOpenChange:s,value:"string"==typeof e.value?e.value:"true",onValueChange:a=>n(e.filterId,{value:a}),children:[(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectTrigger,{id:t,"aria-controls":a,className:"rounded-none bg-transparent px-1.5 py-0.5 [&_svg]:hidden",children:(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectValue,{placeholder:e.value?"True":"False"})}),(0,jsx_runtime_namespaceObject.jsxs)(external_select_cjs_namespaceObject.SelectContent,{id:a,children:[(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectItem,{value:"true",children:"True"}),(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectItem,{value:"false",children:"False"})]})]})}case"select":case"multiSelect":{let r=`${t}-listbox`,l=a.columnDef.meta?.options??[],m=Array.isArray(e.value)?e.value:[e.value],_=l.filter(e=>m.includes(e.value));return(0,jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover,{open:c,onOpenChange:s,children:[(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{id:t,"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===_.length?"multiSelect"===e.variant?"Select options...":"Select option...":(0,jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment,{children:[(0,jsx_runtime_namespaceObject.jsx)("div",{className:"-space-x-2 flex items-center rtl:space-x-reverse",children:_.map(e=>e.icon?(0,jsx_runtime_namespaceObject.jsx)("div",{className:"rounded-full border bg-background p-0.5",children:(0,jsx_runtime_namespaceObject.jsx)(e.icon,{className:"size-3.5"})},e.value):null)}),(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:_.length>1?`${_.length} selected`:_[0]?.label})]})})}),(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverContent,{id:r,align:"start",className:"w-48 origin-[var(--radix-popover-content-transform-origin)] p-0",children:(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.Command,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandInput,{placeholder:"Search options..."}),(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandList,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty,{children:"No options found."}),(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup,{children:l.map(a=>(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandItem,{value:a.value,onSelect:()=>{let t="multiSelect"===e.variant?m.includes(a.value)?m.filter(e=>e!==a.value):[...m,a.value]:a.value;n(e.filterId,{value:t})},children:[a.icon&&(0,jsx_runtime_namespaceObject.jsx)(a.icon,{}),(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:a.label}),"multiSelect"===e.variant&&(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Check,{className:(0,utils_cjs_namespaceObject.cn)("ml-auto",m.includes(a.value)?"opacity-100":"opacity-0")})]},a.value))})]})]})})]})}case"date":case"dateRange":{let a=`${t}-listbox`,r=Array.isArray(e.value)?e.value.filter(Boolean):[e.value,e.value].filter(Boolean),l="isBetween"===e.operator&&2===r.length?`${(0,format_cjs_namespaceObject.formatDate)(new Date(Number(r[0])))} - ${(0,format_cjs_namespaceObject.formatDate)(new Date(Number(r[1])))}`:r[0]?(0,format_cjs_namespaceObject.formatDate)(new Date(Number(r[0]))):"Pick date...";return(0,jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover,{open:c,onOpenChange:s,children:[(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button,{id:t,"aria-controls":a,variant:"ghost",size:"sm",className:(0,utils_cjs_namespaceObject.cn)("h-full rounded-none border px-1.5 font-normal dark:bg-input/30",!e.value&&"text-muted-foreground"),children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Calendar,{className:"size-3.5"}),(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:l})]})}),(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverContent,{id:a,align:"start",className:"w-auto origin-[var(--radix-popover-content-transform-origin)] p-0",children:"isBetween"===e.operator?(0,jsx_runtime_namespaceObject.jsx)(external_calendar_cjs_namespaceObject.Calendar,{mode:"range",initialFocus:!0,selected:2===r.length?{from:new Date(Number(r[0])),to:new Date(Number(r[1]))}:{from:new Date,to:new Date},onSelect:a=>{n(e.filterId,{value:a?[(a.from?.getTime()??"").toString(),(a.to?.getTime()??"").toString()]:[]})}}):(0,jsx_runtime_namespaceObject.jsx)(external_calendar_cjs_namespaceObject.Calendar,{mode:"single",initialFocus:!0,selected:r[0]?new Date(Number(r[0])):void 0,onSelect:a=>{n(e.filterId,{value:(a?.getTime()??"").toString()})}})})]})}default:return null}}for(var __webpack_i__ in exports.DataTableFilterMenu=__webpack_exports__.DataTableFilterMenu,__webpack_exports__)-1===["DataTableFilterMenu"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
3
|
+
//# sourceMappingURL=data-table-filter-menu.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components\\data-table\\data-table-filter-menu.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-filter-menu.tsx"],"sourcesContent":["\r\n\r\nimport {\r\n Calendar as CalendarIcon,\r\n Check,\r\n FunnelSimple,\r\n SealCheck,\r\n TextAlignLeft,\r\n X,\r\n} from '@phosphor-icons/react'\r\nimport type { Column, Table } from '@tanstack/react-table'\r\nimport { useQueryState } from 'nuqs'\r\nimport * as React from 'react'\r\n\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 { 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 { useDebouncedCallback } from '@/hooks/use-debounced-callback'\r\nimport { getDefaultFilterOperator, getFilterOperators } from '@/lib/data-table'\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 { ExtendedColumnFilter, FilterOperator } from '@/types/data-table'\r\n\r\nconst FILTERS_KEY = 'filters'\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 DataTableFilterMenuProps<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 DataTableFilterMenu<TData>({\r\n table,\r\n debounceMs = DEBOUNCE_MS,\r\n throttleMs = THROTTLE_MS,\r\n shallow = true,\r\n align = 'start',\r\n ...props\r\n}: DataTableFilterMenuProps<TData>) {\r\n const id = React.useId()\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 [open, setOpen] = React.useState(false)\r\n const [selectedColumn, setSelectedColumn] =\r\n React.useState<Column<TData> | null>(null)\r\n const [inputValue, setInputValue] = React.useState('')\r\n const triggerRef = React.useRef<HTMLButtonElement>(null)\r\n const inputRef = React.useRef<HTMLInputElement>(null)\r\n\r\n const onOpenChange = React.useCallback((open: boolean) => {\r\n setOpen(open)\r\n\r\n if (!open) {\r\n setTimeout(() => {\r\n setSelectedColumn(null)\r\n setInputValue('')\r\n }, 100)\r\n }\r\n }, [])\r\n\r\n const onInputKeyDown = React.useCallback(\r\n (event: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (\r\n REMOVE_FILTER_SHORTCUTS.includes(event.key.toLowerCase()) &&\r\n !inputValue &&\r\n selectedColumn\r\n ) {\r\n event.preventDefault()\r\n setSelectedColumn(null)\r\n }\r\n },\r\n [inputValue, selectedColumn]\r\n )\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 onFilterAdd = React.useCallback(\r\n (column: Column<TData>, value: string) => {\r\n if (!value.trim() && column.columnDef.meta?.variant !== 'boolean') {\r\n return\r\n }\r\n\r\n const filterValue =\r\n column.columnDef.meta?.variant === 'multiSelect' ? [value] : value\r\n\r\n const newFilter: ExtendedColumnFilter<TData> = {\r\n id: column.id as Extract<keyof TData, string>,\r\n value: filterValue,\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 debouncedSetFilters([...filters, newFilter])\r\n setOpen(false)\r\n\r\n setTimeout(() => {\r\n setSelectedColumn(null)\r\n setInputValue('')\r\n }, 100)\r\n },\r\n [filters, 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 debouncedSetFilters(updatedFilters)\r\n requestAnimationFrame(() => {\r\n triggerRef.current?.focus()\r\n })\r\n },\r\n [filters, debouncedSetFilters]\r\n )\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 onFiltersReset = React.useCallback(() => {\r\n debouncedSetFilters([])\r\n }, [debouncedSetFilters])\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 !open &&\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 }, [open, 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 <div className=\"flex flex-wrap items-center gap-2\">\r\n {filters.map(filter => (\r\n <DataTableFilterItem\r\n key={filter.filterId}\r\n filter={filter}\r\n filterItemId={`${id}-filter-${filter.filterId}`}\r\n columns={columns}\r\n onFilterUpdate={onFilterUpdate}\r\n onFilterRemove={onFilterRemove}\r\n />\r\n ))}\r\n {filters.length > 0 && (\r\n <Button\r\n aria-label=\"Reset all filters\"\r\n variant=\"outline\"\r\n size=\"icon\"\r\n className=\"size-8\"\r\n onClick={onFiltersReset}\r\n >\r\n <X />\r\n </Button>\r\n )}\r\n <Popover open={open} onOpenChange={onOpenChange}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n aria-label=\"Open filter command menu\"\r\n variant=\"outline\"\r\n size={filters.length > 0 ? 'icon' : 'sm'}\r\n className={cn(filters.length > 0 && 'size-8', 'h-8')}\r\n ref={triggerRef}\r\n onKeyDown={onTriggerKeyDown}\r\n >\r\n <FunnelSimple />\r\n {filters.length > 0 ? null : 'Filter'}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n align={align}\r\n className=\"w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] p-0\"\r\n {...props}\r\n >\r\n <Command loop className=\"[&_[cmdk-input-wrapper]_svg]:hidden\">\r\n <CommandInput\r\n ref={inputRef}\r\n placeholder={\r\n selectedColumn\r\n ? (selectedColumn.columnDef.meta?.label ?? selectedColumn.id)\r\n : 'Search fields...'\r\n }\r\n value={inputValue}\r\n onValueChange={setInputValue}\r\n onKeyDown={onInputKeyDown}\r\n />\r\n <CommandList>\r\n {selectedColumn ? (\r\n <>\r\n {selectedColumn.columnDef.meta?.options && (\r\n <CommandEmpty>No options found.</CommandEmpty>\r\n )}\r\n <FilterValueSelector\r\n column={selectedColumn}\r\n value={inputValue}\r\n onSelect={value => onFilterAdd(selectedColumn, value)}\r\n />\r\n </>\r\n ) : (\r\n <>\r\n <CommandEmpty>No fields found.</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={() => {\r\n setSelectedColumn(column)\r\n setInputValue('')\r\n requestAnimationFrame(() => {\r\n inputRef.current?.focus()\r\n })\r\n }}\r\n >\r\n {column.columnDef.meta?.icon && (\r\n <column.columnDef.meta.icon />\r\n )}\r\n <span className=\"truncate\">\r\n {column.columnDef.meta?.label ?? column.id}\r\n </span>\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </>\r\n )}\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n )\r\n}\r\n\r\ninterface DataTableFilterItemProps<TData> {\r\n filter: ExtendedColumnFilter<TData>\r\n filterItemId: string\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 filterItemId,\r\n columns,\r\n onFilterUpdate,\r\n onFilterRemove,\r\n}: DataTableFilterItemProps<TData>) {\r\n {\r\n const [showFieldSelector, setShowFieldSelector] = React.useState(false)\r\n const [showOperatorSelector, setShowOperatorSelector] =\r\n 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 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 <div\r\n key={filter.filterId}\r\n role=\"listitem\"\r\n id={filterItemId}\r\n className=\"flex h-8 items-center rounded-md bg-background\"\r\n onKeyDown={onItemKeyDown}\r\n >\r\n <Popover open={showFieldSelector} onOpenChange={setShowFieldSelector}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"rounded-none rounded-l-md border border-r-0 font-normal dark:bg-input/30\"\r\n >\r\n {columnMeta?.icon && (\r\n <columnMeta.icon className=\"text-muted-foreground\" />\r\n )}\r\n {columnMeta?.label ?? column.id}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n align=\"start\"\r\n className=\"w-48 origin-[var(--radix-popover-content-transform-origin)] p-0\"\r\n >\r\n <Command loop>\r\n <CommandInput placeholder=\"Search fields...\" />\r\n <CommandList>\r\n <CommandEmpty>No fields found.</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={() => {\r\n onFilterUpdate(filter.filterId, {\r\n id: column.id 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 {column.columnDef.meta?.icon && (\r\n <column.columnDef.meta.icon />\r\n )}\r\n <span className=\"truncate\">\r\n {column.columnDef.meta?.label ?? column.id}\r\n </span>\r\n <Check\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-8 rounded-none border-r-0 px-2.5 lowercase [&[data-size]]:h-8 [&_svg]:hidden\"\r\n >\r\n <SelectValue placeholder={filter.operator} />\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 className=\"lowercase\"\r\n value={operator.value}\r\n >\r\n {operator.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n {onFilterInputRender({\r\n filter,\r\n column,\r\n inputId,\r\n onFilterUpdate,\r\n showValueSelector,\r\n setShowValueSelector,\r\n })}\r\n <Button\r\n aria-controls={filterItemId}\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-full rounded-none rounded-r-md border border-l-0 px-1.5 font-normal dark:bg-input/30\"\r\n onClick={() => onFilterRemove(filter.filterId)}\r\n >\r\n <X className=\"size-3.5\" />\r\n </Button>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\ninterface FilterValueSelectorProps<TData> {\r\n column: Column<TData>\r\n value: string\r\n onSelect: (value: string) => void\r\n}\r\n\r\nfunction FilterValueSelector<TData>({\r\n column,\r\n value,\r\n onSelect,\r\n}: FilterValueSelectorProps<TData>) {\r\n const variant = column.columnDef.meta?.variant ?? 'text'\r\n\r\n switch (variant) {\r\n case 'boolean':\r\n return (\r\n <CommandGroup>\r\n <CommandItem value=\"true\" onSelect={() => onSelect('true')}>\r\n True\r\n </CommandItem>\r\n <CommandItem value=\"false\" onSelect={() => onSelect('false')}>\r\n False\r\n </CommandItem>\r\n </CommandGroup>\r\n )\r\n\r\n case 'select':\r\n case 'multiSelect':\r\n return (\r\n <CommandGroup>\r\n {column.columnDef.meta?.options?.map(option => (\r\n <CommandItem\r\n key={option.value}\r\n value={option.value}\r\n onSelect={() => onSelect(option.value)}\r\n >\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 </CommandGroup>\r\n )\r\n\r\n case 'date':\r\n case 'dateRange':\r\n return (\r\n <Calendar\r\n initialFocus\r\n mode=\"single\"\r\n selected={value ? new Date(value) : undefined}\r\n onSelect={date => onSelect(date?.getTime().toString() ?? '')}\r\n />\r\n )\r\n\r\n default: {\r\n const isEmpty = !value.trim()\r\n\r\n return (\r\n <CommandGroup>\r\n <CommandItem\r\n value={value}\r\n onSelect={() => onSelect(value)}\r\n disabled={isEmpty}\r\n >\r\n {isEmpty ? (\r\n <>\r\n <TextAlignLeft />\r\n <span>Type to add filter...</span>\r\n </>\r\n ) : (\r\n <>\r\n <SealCheck />\r\n <span className=\"truncate\">Filter by "{value}"</span>\r\n </>\r\n )}\r\n </CommandItem>\r\n </CommandGroup>\r\n )\r\n }\r\n }\r\n}\r\n\r\nfunction onFilterInputRender<TData>({\r\n filter,\r\n column,\r\n inputId,\r\n onFilterUpdate,\r\n showValueSelector,\r\n setShowValueSelector,\r\n}: {\r\n filter: ExtendedColumnFilter<TData>\r\n column: Column<TData>\r\n inputId: string\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={`${column.columnDef.meta?.label} filter is ${\r\n filter.operator === 'isEmpty' ? 'empty' : 'not empty'\r\n }`}\r\n aria-live=\"polite\"\r\n className=\"h-full w-16 rounded-none border bg-transparent px-1.5 py-0.5 text-muted-foreground 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 className=\"size-full max-w-28 gap-0 [&_[data-slot='range-min']]:border-r-0 [&_input]:rounded-none [&_input]:px-1.5\"\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' : 'text'}\r\n inputMode={isNumber ? 'numeric' : undefined}\r\n placeholder={column.columnDef.meta?.placeholder ?? 'Enter value...'}\r\n className=\"h-full w-24 rounded-none px-1.5\"\r\n defaultValue={typeof filter.value === 'string' ? filter.value : ''}\r\n onChange={event =>\r\n onFilterUpdate(filter.filterId, { value: event.target.value })\r\n }\r\n />\r\n )\r\n }\r\n\r\n case 'boolean': {\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={typeof filter.value === 'string' ? filter.value : 'true'}\r\n onValueChange={(value: 'true' | 'false') =>\r\n onFilterUpdate(filter.filterId, { value })\r\n }\r\n >\r\n <SelectTrigger\r\n id={inputId}\r\n aria-controls={inputListboxId}\r\n className=\"rounded-none bg-transparent px-1.5 py-0.5 [&_svg]:hidden\"\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 options = column.columnDef.meta?.options ?? []\r\n const selectedValues = Array.isArray(filter.value)\r\n ? filter.value\r\n : [filter.value]\r\n\r\n const selectedOptions = options.filter(option =>\r\n selectedValues.includes(option.value)\r\n )\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 variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-full min-w-16 rounded-none border px-1.5 font-normal dark:bg-input/30\"\r\n >\r\n {selectedOptions.length === 0 ? (\r\n filter.variant === 'multiSelect' ? (\r\n 'Select options...'\r\n ) : (\r\n 'Select option...'\r\n )\r\n ) : (\r\n <>\r\n <div className=\"-space-x-2 flex items-center rtl:space-x-reverse\">\r\n {selectedOptions.map(selectedOption =>\r\n selectedOption.icon ? (\r\n <div\r\n key={selectedOption.value}\r\n className=\"rounded-full border bg-background p-0.5\"\r\n >\r\n <selectedOption.icon className=\"size-3.5\" />\r\n </div>\r\n ) : null\r\n )}\r\n </div>\r\n <span className=\"truncate\">\r\n {selectedOptions.length > 1\r\n ? `${selectedOptions.length} selected`\r\n : selectedOptions[0]?.label}\r\n </span>\r\n </>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n id={inputListboxId}\r\n align=\"start\"\r\n className=\"w-48 origin-[var(--radix-popover-content-transform-origin)] p-0\"\r\n >\r\n <Command>\r\n <CommandInput placeholder=\"Search options...\" />\r\n <CommandList>\r\n <CommandEmpty>No options found.</CommandEmpty>\r\n <CommandGroup>\r\n {options.map(option => (\r\n <CommandItem\r\n key={option.value}\r\n value={option.value}\r\n onSelect={() => {\r\n const value =\r\n filter.variant === 'multiSelect'\r\n ? selectedValues.includes(option.value)\r\n ? selectedValues.filter(v => v !== option.value)\r\n : [...selectedValues, option.value]\r\n : option.value\r\n onFilterUpdate(filter.filterId, { value })\r\n }}\r\n >\r\n {option.icon && <option.icon />}\r\n <span className=\"truncate\">{option.label}</span>\r\n {filter.variant === 'multiSelect' && (\r\n <Check\r\n className={cn(\r\n 'ml-auto',\r\n selectedValues.includes(option.value)\r\n ? 'opacity-100'\r\n : 'opacity-0'\r\n )}\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 )\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 : 'Pick date...'\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 variant=\"ghost\"\r\n size=\"sm\"\r\n className={cn(\r\n 'h-full rounded-none border px-1.5 font-normal dark:bg-input/30',\r\n !filter.value && 'text-muted-foreground'\r\n )}\r\n >\r\n <CalendarIcon className=\"size-3.5\" />\r\n <span className=\"truncate\">{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 mode=\"range\"\r\n initialFocus\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 mode=\"single\"\r\n initialFocus\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":["FILTERS_KEY","DEBOUNCE_MS","THROTTLE_MS","OPEN_MENU_SHORTCUT","REMOVE_FILTER_SHORTCUTS","DataTableFilterMenu","table","debounceMs","throttleMs","shallow","align","props","id","React","columns","column","open","setOpen","selectedColumn","setSelectedColumn","inputValue","setInputValue","triggerRef","inputRef","onOpenChange","setTimeout","onInputKeyDown","event","filters","setFilters","useQueryState","getFiltersStateParser","field","debouncedSetFilters","useDebouncedCallback","onFilterAdd","value","filterValue","getDefaultFilterOperator","generateId","onFilterRemove","filterId","filter","requestAnimationFrame","onFilterUpdate","updates","prevFilters","onFiltersReset","onKeyDown","HTMLInputElement","HTMLTextAreaElement","window","onTriggerKeyDown","DataTableFilterItem","Button","X","Popover","PopoverTrigger","cn","FunnelSimple","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","FilterValueSelector","CommandGroup","CommandItem","filterItemId","showFieldSelector","setShowFieldSelector","showOperatorSelector","setShowOperatorSelector","showValueSelector","setShowValueSelector","operatorListboxId","inputId","columnMeta","filterOperators","getFilterOperators","onItemKeyDown","Check","Select","SelectTrigger","SelectValue","SelectContent","operator","SelectItem","onFilterInputRender","onSelect","option","Calendar","Date","undefined","date","isEmpty","TextAlignLeft","SealCheck","DataTableRangeFilter","isNumber","Input","inputListboxId","options","selectedValues","Array","selectedOptions","selectedOption","v","dateValue","Boolean","displayValue","formatDate","Number","CalendarIcon"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,a)=>{for(var t in a)__webpack_require__.o(a,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},__webpack_require__.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{DataTablePagination:()=>DataTablePagination});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),react_namespaceObject=require("@phosphor-icons/react"),external_button_cjs_namespaceObject=require("../button.cjs"),external_select_cjs_namespaceObject=require("../select.cjs"),utils_cjs_namespaceObject=require("../../lib/utils.cjs");function DataTablePagination({table:e,pageSizeOptions:a=[10,20,30,40,50],className:t,...s}){return(0,jsx_runtime_namespaceObject.jsxs)("div",{className:(0,utils_cjs_namespaceObject.cn)("flex w-full flex-col-reverse items-center justify-between gap-4 overflow-auto p-1 sm:flex-row sm:gap-8",t),...s,children:[(0,jsx_runtime_namespaceObject.jsxs)("div",{className:"flex-1 whitespace-nowrap text-muted-foreground text-sm",children:[e.getFilteredSelectedRowModel().rows.length," of"," ",e.getFilteredRowModel().rows.length," row(s) selected."]}),(0,jsx_runtime_namespaceObject.jsxs)("div",{className:"flex flex-col-reverse items-center gap-4 sm:flex-row sm:gap-6 lg:gap-8",children:[(0,jsx_runtime_namespaceObject.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,jsx_runtime_namespaceObject.jsx)("p",{className:"whitespace-nowrap font-medium text-sm",children:"Rows per page"}),(0,jsx_runtime_namespaceObject.jsxs)(external_select_cjs_namespaceObject.Select,{value:`${e.getState().pagination.pageSize}`,onValueChange:a=>{e.setPageSize(Number(a))},children:[(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectTrigger,{className:"h-8 w-[4.5rem] [&[data-size]]:h-8",children:(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectValue,{placeholder:e.getState().pagination.pageSize})}),(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectContent,{side:"top",children:a.map(e=>(0,jsx_runtime_namespaceObject.jsx)(external_select_cjs_namespaceObject.SelectItem,{value:`${e}`,children:e},e))})]})]}),(0,jsx_runtime_namespaceObject.jsxs)("div",{className:"flex items-center justify-center font-medium text-sm",children:["Page ",e.getState().pagination.pageIndex+1," of"," ",e.getPageCount()]}),(0,jsx_runtime_namespaceObject.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{"aria-label":"Go to first page",variant:"outline",size:"icon",className:"hidden size-8 lg:flex",onClick:()=>e.setPageIndex(0),disabled:!e.getCanPreviousPage(),children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretDoubleLeft,{})}),(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{"aria-label":"Go to previous page",variant:"outline",size:"icon",className:"size-8",onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretLeft,{})}),(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{"aria-label":"Go to next page",variant:"outline",size:"icon",className:"size-8",onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretRight,{})}),(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{"aria-label":"Go to last page",variant:"outline",size:"icon",className:"hidden size-8 lg:flex",onClick:()=>e.setPageIndex(e.getPageCount()-1),disabled:!e.getCanNextPage(),children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretDoubleRight,{})})]})]})]})}for(var __webpack_i__ in exports.DataTablePagination=__webpack_exports__.DataTablePagination,__webpack_exports__)-1===["DataTablePagination"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
2
|
+
//# sourceMappingURL=data-table-pagination.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components\\data-table\\data-table-pagination.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-pagination.tsx"],"sourcesContent":["import {\r\n CaretDoubleLeft,\r\n CaretDoubleRight,\r\n CaretLeft,\r\n CaretRight,\r\n} from '@phosphor-icons/react'\r\nimport type { Table } from '@tanstack/react-table'\r\n\r\nimport { Button } from '@/components/button'\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue,\r\n} from '@/components/select'\r\nimport { cn } from '@/lib/utils'\r\n\r\ninterface DataTablePaginationProps<TData> extends React.ComponentProps<'div'> {\r\n table: Table<TData>\r\n pageSizeOptions?: number[]\r\n}\r\n\r\nexport function DataTablePagination<TData>({\r\n table,\r\n pageSizeOptions = [10, 20, 30, 40, 50],\r\n className,\r\n ...props\r\n}: DataTablePaginationProps<TData>) {\r\n return (\r\n <div\r\n className={cn(\r\n 'flex w-full flex-col-reverse items-center justify-between gap-4 overflow-auto p-1 sm:flex-row sm:gap-8',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className=\"flex-1 whitespace-nowrap text-muted-foreground text-sm\">\r\n {table.getFilteredSelectedRowModel().rows.length} of{' '}\r\n {table.getFilteredRowModel().rows.length} row(s) selected.\r\n </div>\r\n <div className=\"flex flex-col-reverse items-center gap-4 sm:flex-row sm:gap-6 lg:gap-8\">\r\n <div className=\"flex items-center space-x-2\">\r\n <p className=\"whitespace-nowrap font-medium text-sm\">Rows per page</p>\r\n <Select\r\n value={`${table.getState().pagination.pageSize}`}\r\n onValueChange={value => {\r\n table.setPageSize(Number(value))\r\n }}\r\n >\r\n <SelectTrigger className=\"h-8 w-[4.5rem] [&[data-size]]:h-8\">\r\n <SelectValue placeholder={table.getState().pagination.pageSize} />\r\n </SelectTrigger>\r\n <SelectContent side=\"top\">\r\n {pageSizeOptions.map(pageSize => (\r\n <SelectItem key={pageSize} value={`${pageSize}`}>\r\n {pageSize}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n <div className=\"flex items-center justify-center font-medium text-sm\">\r\n Page {table.getState().pagination.pageIndex + 1} of{' '}\r\n {table.getPageCount()}\r\n </div>\r\n <div className=\"flex items-center space-x-2\">\r\n <Button\r\n aria-label=\"Go to first page\"\r\n variant=\"outline\"\r\n size=\"icon\"\r\n className=\"hidden size-8 lg:flex\"\r\n onClick={() => table.setPageIndex(0)}\r\n disabled={!table.getCanPreviousPage()}\r\n >\r\n <CaretDoubleLeft />\r\n </Button>\r\n <Button\r\n aria-label=\"Go to previous page\"\r\n variant=\"outline\"\r\n size=\"icon\"\r\n className=\"size-8\"\r\n onClick={() => table.previousPage()}\r\n disabled={!table.getCanPreviousPage()}\r\n >\r\n <CaretLeft />\r\n </Button>\r\n <Button\r\n aria-label=\"Go to next page\"\r\n variant=\"outline\"\r\n size=\"icon\"\r\n className=\"size-8\"\r\n onClick={() => table.nextPage()}\r\n disabled={!table.getCanNextPage()}\r\n >\r\n <CaretRight />\r\n </Button>\r\n <Button\r\n aria-label=\"Go to last page\"\r\n variant=\"outline\"\r\n size=\"icon\"\r\n className=\"hidden size-8 lg:flex\"\r\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\r\n disabled={!table.getCanNextPage()}\r\n >\r\n <CaretDoubleRight />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"],"names":["DataTablePagination","table","pageSizeOptions","className","props","cn","Select","value","Number","SelectTrigger","SelectValue","SelectContent","pageSize","SelectItem","Button","CaretDoubleLeft","CaretLeft","CaretRight","CaretDoubleRight"],"mappings":"imCAuBO,SAASA,oBAA2B,CACzCC,MAAAA,CAAK,CACLC,gBAAAA,EAAkB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAG,CACtCC,UAAAA,CAAS,CACT,GAAGC,EAC6B,EAChC,MACE,qCAAC,OACC,UAAWC,AAAAA,GAAAA,0BAAAA,EAAAA,AAAAA,EACT,yGACAF,GAED,GAAGC,CAAK,C,UAET,qCAAC,OAAI,UAAU,yD,UACZH,EAAM,2BAA2B,GAAG,IAAI,CAAC,MAAM,CAAC,MAAI,IACpDA,EAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,oB,GAE3C,qCAAC,OAAI,UAAU,yE,UACb,qCAAC,OAAI,UAAU,8B,UACb,oCAAC,KAAE,UAAU,wC,SAAwC,e,GACrD,qCAACK,oCAAAA,MAAMA,CAAAA,CACL,MAAO,CAAC,EAAEL,EAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAChD,cAAeM,AAAAA,IACbN,EAAM,WAAW,CAACO,OAAOD,GAC3B,E,UAEA,oCAACE,oCAAAA,aAAaA,CAAAA,CAAC,UAAU,oC,SACvB,oCAACC,oCAAAA,WAAWA,CAAAA,CAAC,YAAaT,EAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,A,KAEhE,oCAACU,oCAAAA,aAAaA,CAAAA,CAAC,KAAK,M,SACjBT,EAAgB,GAAG,CAACU,AAAAA,GACnB,oCAACC,oCAAAA,UAAUA,CAAAA,CAAgB,MAAO,CAAC,EAAED,EAAS,CAAC,C,SAC5CA,C,EADcA,G,SAOzB,qCAAC,OAAI,UAAU,uD,UAAuD,QAC9DX,EAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAG,EAAE,MAAI,IACnDA,EAAM,YAAY,G,GAErB,qCAAC,OAAI,UAAU,8B,UACb,oCAACa,oCAAAA,MAAMA,CAAAA,CACL,aAAW,mBACX,QAAQ,UACR,KAAK,OACL,UAAU,wBACV,QAAS,IAAMb,EAAM,YAAY,CAAC,GAClC,SAAU,CAACA,EAAM,kBAAkB,G,SAEnC,oCAACc,sBAAAA,eAAeA,CAAAA,CAAAA,E,GAElB,oCAACD,oCAAAA,MAAMA,CAAAA,CACL,aAAW,sBACX,QAAQ,UACR,KAAK,OACL,UAAU,SACV,QAAS,IAAMb,EAAM,YAAY,GACjC,SAAU,CAACA,EAAM,kBAAkB,G,SAEnC,oCAACe,sBAAAA,SAASA,CAAAA,CAAAA,E,GAEZ,oCAACF,oCAAAA,MAAMA,CAAAA,CACL,aAAW,kBACX,QAAQ,UACR,KAAK,OACL,UAAU,SACV,QAAS,IAAMb,EAAM,QAAQ,GAC7B,SAAU,CAACA,EAAM,cAAc,G,SAE/B,oCAACgB,sBAAAA,UAAUA,CAAAA,CAAAA,E,GAEb,oCAACH,oCAAAA,MAAMA,CAAAA,CACL,aAAW,kBACX,QAAQ,UACR,KAAK,OACL,UAAU,wBACV,QAAS,IAAMb,EAAM,YAAY,CAACA,EAAM,YAAY,GAAK,GACzD,SAAU,CAACA,EAAM,cAAc,G,SAE/B,oCAACiB,sBAAAA,gBAAgBA,CAAAA,CAAAA,E,WAM7B,C"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,a)=>{for(var r in a)__webpack_require__.o(a,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},__webpack_require__.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{DataTableRangeFilter:()=>DataTableRangeFilter});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),external_react_namespaceObject=require("react"),external_input_cjs_namespaceObject=require("../input.cjs"),utils_cjs_namespaceObject=require("../../lib/utils.cjs");function DataTableRangeFilter({filter:e,column:a,inputId:r,onFilterUpdate:t,className:_,...n}){let l=a.columnDef.meta,[i,u]=external_react_namespaceObject.useMemo(()=>{let e=a.columnDef.meta?.range;if(e)return e;let r=a.getFacetedMinMaxValues();return r?[r[0],r[1]]:[0,100]},[a]),c=external_react_namespaceObject.useCallback(e=>{if(void 0===e||""===e)return"";let a=Number(e);return Number.isNaN(a)?"":a.toLocaleString(void 0,{maximumFractionDigits:0})},[]),s=external_react_namespaceObject.useMemo(()=>Array.isArray(e.value)?e.value.map(c):[c(e.value),""],[e.value,c]),m=external_react_namespaceObject.useCallback((a,r)=>{let _=Number(a),n=Array.isArray(e.value)?e.value:["",""],l=r?n[1]??"":n[0]??"";(""===a||!Number.isNaN(_)&&(r?_>=i&&_<=(Number(l)||u):_<=u&&_>=(Number(l)||i)))&&t(e.filterId,{value:r?[a,l]:[l,a]})},[e.filterId,e.value,i,u,t]);return(0,jsx_runtime_namespaceObject.jsxs)("div",{"data-slot":"range",className:(0,utils_cjs_namespaceObject.cn)("flex w-full items-center gap-2",_),...n,children:[(0,jsx_runtime_namespaceObject.jsx)(external_input_cjs_namespaceObject.Input,{id:`${r}-min`,type:"number","aria-label":`${l?.label} minimum value`,"aria-valuemin":i,"aria-valuemax":u,"data-slot":"range-min",inputMode:"numeric",placeholder:i.toString(),min:i,max:u,className:"h-8 w-full rounded",defaultValue:s[0],onChange:e=>m(e.target.value,!0)}),(0,jsx_runtime_namespaceObject.jsx)("span",{className:"sr-only shrink-0 text-muted-foreground",children:"to"}),(0,jsx_runtime_namespaceObject.jsx)(external_input_cjs_namespaceObject.Input,{id:`${r}-max`,type:"number","aria-label":`${l?.label} maximum value`,"aria-valuemin":i,"aria-valuemax":u,"data-slot":"range-max",inputMode:"numeric",placeholder:u.toString(),min:i,max:u,className:"h-8 w-full rounded",defaultValue:s[1],onChange:e=>m(e.target.value)})]})}for(var __webpack_i__ in exports.DataTableRangeFilter=__webpack_exports__.DataTableRangeFilter,__webpack_exports__)-1===["DataTableRangeFilter"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
3
|
+
//# sourceMappingURL=data-table-range-filter.cjs.map
|