@gbmtech/aurora-ui 0.1.44 → 0.1.46

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.
@@ -1,3 +1,3 @@
1
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});
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:"secondary",size:"xs",onKeyDown:v,children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.FunnelSimple,{weight:"bold"}),"Filtro",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?"Filtros":"Nenhum filtro aplicado"}),(0,jsx_runtime_namespaceObject.jsx)("p",{id:l,className:(0,utils_cjs_namespaceObject.cn)("text-gray-400 text-sm",o.length>0&&"sr-only"),children:o.length>0?"Modifique os filtros para filtrar suas linhas.":"Adicione filtros para filtrar suas linhas."})]}),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:"Onde"}):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:"secondary",size:"xs",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??"Selecione o campo"}),(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:"Buscar campo..."}),(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandList,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty,{children:"Nenhum campo encontrado."}),(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:"secondary",size:"icon",className:"size-8 rounded",onClick:()=>l(e.filterId),children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Trash,{weight:"bold"})}),(0,jsx_runtime_namespaceObject.jsx)(external_sortable_cjs_namespaceObject.SortableItemHandle,{asChild:!0,children:(0,jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button,{variant:"secondary",size:"icon",className:"size-8 rounded",children:(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.DotsSixVertical,{weight:"bold"})})})]})})}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]))):"Escolha uma data";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:"secondary",size:"xs",className:(0,utils_cjs_namespaceObject.cn)("w-full justify-start rounded text-left font-normal",!e.value&&"text-gray-400"),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
3
  //# sourceMappingURL=data-table-filter-list.cjs.map
@@ -1 +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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"}
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=\"secondary\" size=\"xs\" onKeyDown={onTriggerKeyDown}>\r\n <FunnelSimple weight=\"bold\" />\r\n Filtro\r\n {filters.length > 0 && (\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"h-[18.24px] rounded-[3.2px] px-[5.12px] font-mono font-normal text-[10.4px]\"\r\n >\r\n {filters.length}\r\n </Badge>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n aria-describedby={descriptionId}\r\n aria-labelledby={labelId}\r\n className=\"flex w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] flex-col gap-3.5 p-4 sm:min-w-[380px]\"\r\n {...props}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <h4 id={labelId} className=\"font-medium leading-none\">\r\n {filters.length > 0 ? 'Filtros' : 'Nenhum filtro aplicado'}\r\n </h4>\r\n <p\r\n id={descriptionId}\r\n className={cn(\r\n 'text-gray-400 text-sm',\r\n filters.length > 0 && 'sr-only'\r\n )}\r\n >\r\n {filters.length > 0\r\n ? 'Modifique os filtros para filtrar suas linhas.'\r\n : 'Adicione filtros para filtrar suas linhas.'}\r\n </p>\r\n </div>\r\n {filters.length > 0 ? (\r\n <SortableContent asChild>\r\n <div\r\n role=\"list\"\r\n className=\"flex max-h-[300px] flex-col gap-2 overflow-y-auto p-1\"\r\n >\r\n {filters.map((filter, index) => (\r\n <DataTableFilterItem<TData>\r\n key={filter.filterId}\r\n filter={filter}\r\n index={index}\r\n filterItemId={`${id}-filter-${filter.filterId}`}\r\n joinOperator={joinOperator}\r\n setJoinOperator={setJoinOperator}\r\n columns={columns}\r\n onFilterUpdate={onFilterUpdate}\r\n onFilterRemove={onFilterRemove}\r\n />\r\n ))}\r\n </div>\r\n </SortableContent>\r\n ) : null}\r\n <div className=\"flex w-full items-center gap-2\">\r\n <Button\r\n size=\"sm\"\r\n className=\"rounded\"\r\n ref={addButtonRef}\r\n onClick={onFilterAdd}\r\n >\r\n 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\">Onde</span>\r\n ) : index === 1 ? (\r\n <Select\r\n value={joinOperator}\r\n onValueChange={(value: JoinOperator) => setJoinOperator(value)}\r\n >\r\n <SelectTrigger\r\n aria-label=\"Select join operator\"\r\n aria-controls={joinOperatorListboxId}\r\n className=\"h-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=\"secondary\"\r\n size=\"xs\"\r\n className=\"w-32 justify-between rounded font-normal\"\r\n >\r\n <span className=\"truncate\">\r\n {columns.find(column => column.id === filter.id)?.columnDef.meta\r\n ?.label ?? 'Selecione o campo'}\r\n </span>\r\n <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=\"Buscar campo...\" />\r\n <CommandList>\r\n <CommandEmpty>Nenhum campo encontrado.</CommandEmpty>\r\n <CommandGroup>\r\n {columns.map(column => (\r\n <CommandItem\r\n key={column.id}\r\n value={column.id}\r\n onSelect={value => {\r\n onFilterUpdate(filter.filterId, {\r\n id: value as Extract<keyof TData, string>,\r\n variant: column.columnDef.meta?.variant ?? 'text',\r\n operator: getDefaultFilterOperator(\r\n column.columnDef.meta?.variant ?? 'text'\r\n ),\r\n value: '',\r\n })\r\n\r\n setShowFieldSelector(false)\r\n }}\r\n >\r\n <span className=\"truncate\">\r\n {column.columnDef.meta?.label}\r\n </span>\r\n <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=\"secondary\"\r\n size=\"icon\"\r\n className=\"size-8 rounded\"\r\n onClick={() => onFilterRemove(filter.filterId)}\r\n >\r\n <Trash weight=\"bold\" />\r\n </Button>\r\n <SortableItemHandle asChild>\r\n <Button variant=\"secondary\" size=\"icon\" className=\"size-8 rounded\">\r\n <DotsSixVertical weight=\"bold\" />\r\n </Button>\r\n </SortableItemHandle>\r\n </div>\r\n </SortableItem>\r\n )\r\n}\r\n\r\nfunction onFilterInputRender<TData>({\r\n filter,\r\n inputId,\r\n column,\r\n columnMeta,\r\n onFilterUpdate,\r\n showValueSelector,\r\n setShowValueSelector,\r\n}: {\r\n filter: ExtendedColumnFilter<TData>\r\n inputId: string\r\n column: Column<TData>\r\n columnMeta?: ColumnMeta<TData, unknown>\r\n onFilterUpdate: (\r\n filterId: string,\r\n updates: Partial<Omit<ExtendedColumnFilter<TData>, 'filterId'>>\r\n ) => void\r\n showValueSelector: boolean\r\n setShowValueSelector: (value: boolean) => void\r\n}) {\r\n if (filter.operator === 'isEmpty' || filter.operator === 'isNotEmpty') {\r\n return (\r\n <div\r\n id={inputId}\r\n role=\"status\"\r\n aria-label={`${columnMeta?.label} filter is ${\r\n filter.operator === 'isEmpty' ? 'empty' : 'not empty'\r\n }`}\r\n aria-live=\"polite\"\r\n className=\"h-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 : 'Escolha uma data'\r\n\r\n return (\r\n <Popover open={showValueSelector} onOpenChange={setShowValueSelector}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n id={inputId}\r\n aria-controls={inputListboxId}\r\n aria-label={`${columnMeta?.label} date filter`}\r\n variant=\"secondary\"\r\n size=\"xs\"\r\n className={cn(\r\n 'w-full justify-start rounded text-left font-normal',\r\n !filter.value && 'text-gray-400'\r\n )}\r\n >\r\n <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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"}
@@ -1,3 +1,3 @@
1
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 _ in a)__webpack_require__.o(a,_)&&!__webpack_require__.o(e,_)&&Object.defineProperty(e,_,{enumerable:!0,get:a[_]})},__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__,{DataTableViewOptions:()=>DataTableViewOptions});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),react_namespaceObject=require("@phosphor-icons/react"),external_button_cjs_namespaceObject=require("../button.cjs"),external_command_cjs_namespaceObject=require("../command.cjs"),external_popover_cjs_namespaceObject=require("../popover.cjs"),utils_cjs_namespaceObject=require("../../lib/utils.cjs"),external_react_namespaceObject=require("react");function DataTableViewOptions({table:e}){let a=external_react_namespaceObject.useMemo(()=>e.getAllColumns().filter(e=>void 0!==e.accessorFn&&e.getCanHide()),[e]);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,{"aria-label":"Toggle columns",role:"combobox",variant:"secondary",size:"xs",className:"ml-auto hidden lg:flex",children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.SlidersHorizontal,{}),"Ver",(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretUpDown,{className:"ml-auto opacity-50"})]})}),(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverContent,{align:"end",className:"w-44 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:"Buscar colunas..."}),(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandList,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty,{children:"No columns found."}),(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup,{children:a.map(e=>(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandItem,{onSelect:()=>e.toggleVisibility(!e.getIsVisible()),children:[(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:e.columnDef.meta?.label??e.id}),(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Check,{className:(0,utils_cjs_namespaceObject.cn)("ml-auto size-4 shrink-0",e.getIsVisible()?"opacity-100":"opacity-0")})]},e.id))})]})]})})]})}for(var __webpack_i__ in exports.DataTableViewOptions=__webpack_exports__.DataTableViewOptions,__webpack_exports__)-1===["DataTableViewOptions"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
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 _ in a)__webpack_require__.o(a,_)&&!__webpack_require__.o(e,_)&&Object.defineProperty(e,_,{enumerable:!0,get:a[_]})},__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__,{DataTableViewOptions:()=>DataTableViewOptions});let jsx_runtime_namespaceObject=require("react/jsx-runtime"),react_namespaceObject=require("@phosphor-icons/react"),external_button_cjs_namespaceObject=require("../button.cjs"),external_command_cjs_namespaceObject=require("../command.cjs"),external_popover_cjs_namespaceObject=require("../popover.cjs"),utils_cjs_namespaceObject=require("../../lib/utils.cjs"),external_react_namespaceObject=require("react");function DataTableViewOptions({table:e}){let a=external_react_namespaceObject.useMemo(()=>e.getAllColumns().filter(e=>void 0!==e.accessorFn&&e.getCanHide()),[e]);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,{"aria-label":"Toggle columns",role:"combobox",variant:"secondary",size:"xs",className:"ml-auto hidden lg:flex",children:[(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.SlidersHorizontal,{}),"Ver",(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.CaretUpDown,{className:"ml-auto opacity-50"})]})}),(0,jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverContent,{align:"end",className:"w-44 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:"Buscar colunas..."}),(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandList,{children:[(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty,{children:"Nenhuma coluna encontrada."}),(0,jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup,{children:a.map(e=>(0,jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandItem,{onSelect:()=>e.toggleVisibility(!e.getIsVisible()),children:[(0,jsx_runtime_namespaceObject.jsx)("span",{className:"truncate",children:e.columnDef.meta?.label??e.id}),(0,jsx_runtime_namespaceObject.jsx)(react_namespaceObject.Check,{className:(0,utils_cjs_namespaceObject.cn)("ml-auto size-4 shrink-0",e.getIsVisible()?"opacity-100":"opacity-0")})]},e.id))})]})]})})]})}for(var __webpack_i__ in exports.DataTableViewOptions=__webpack_exports__.DataTableViewOptions,__webpack_exports__)-1===["DataTableViewOptions"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
3
3
  //# sourceMappingURL=data-table-view-options.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"components\\data-table\\data-table-view-options.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-view-options.tsx"],"sourcesContent":["\r\n\r\nimport { CaretUpDown, Check, SlidersHorizontal } from '@phosphor-icons/react'\r\nimport type { Table } from '@tanstack/react-table'\r\n\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} from '@/components/command'\r\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'\r\nimport { cn } from '@/lib/utils'\r\nimport * as React from 'react'\r\n\r\ninterface DataTableViewOptionsProps<TData> {\r\n table: Table<TData>\r\n}\r\n\r\nexport function DataTableViewOptions<TData>({\r\n table,\r\n}: DataTableViewOptionsProps<TData>) {\r\n const columns = React.useMemo(\r\n () =>\r\n table\r\n .getAllColumns()\r\n .filter(\r\n column =>\r\n typeof column.accessorFn !== 'undefined' && column.getCanHide()\r\n ),\r\n [table]\r\n )\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n aria-label=\"Toggle columns\"\r\n role=\"combobox\"\r\n variant=\"secondary\"\r\n size=\"xs\"\r\n className=\"ml-auto hidden lg:flex\"\r\n >\r\n <SlidersHorizontal />\r\n Ver\r\n <CaretUpDown className=\"ml-auto opacity-50\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className=\"w-44 p-0\">\r\n <Command>\r\n <CommandInput placeholder=\"Buscar colunas...\" />\r\n <CommandList>\r\n <CommandEmpty>No columns found.</CommandEmpty>\r\n <CommandGroup>\r\n {columns.map(column => (\r\n <CommandItem\r\n key={column.id}\r\n onSelect={() =>\r\n column.toggleVisibility(!column.getIsVisible())\r\n }\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 size-4 shrink-0',\r\n column.getIsVisible() ? '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 )\r\n}\r\n"],"names":["DataTableViewOptions","table","columns","React","column","Popover","PopoverTrigger","Button","SlidersHorizontal","CaretUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Check","cn"],"mappings":";otCAsBO,SAASA,qBAA4B,CAC1CC,MAAAA,CAAK,CAC4B,EACjC,IAAMC,EAAUC,+BAAAA,OAAa,CAC3B,IACEF,EACG,aAAa,GACb,MAAM,CACLG,GACE,SAAOA,EAAO,UAAU,EAAoBA,EAAO,UAAU,IAErE,CAACH,EAAM,EAGT,MACE,qCAACI,qCAAAA,OAAOA,CAAAA,C,UACN,oCAACC,qCAAAA,cAAcA,CAAAA,CAAC,QAAO,G,SACrB,qCAACC,oCAAAA,MAAMA,CAAAA,CACL,aAAW,iBACX,KAAK,WACL,QAAQ,YACR,KAAK,KACL,UAAU,yB,UAEV,oCAACC,sBAAAA,iBAAiBA,CAAAA,CAAAA,GAAG,MAErB,oCAACC,sBAAAA,WAAWA,CAAAA,CAAC,UAAU,oB,QAG3B,oCAACC,qCAAAA,cAAcA,CAAAA,CAAC,MAAM,MAAM,UAAU,W,SACpC,qCAACC,qCAAAA,OAAOA,CAAAA,C,UACN,oCAACC,qCAAAA,YAAYA,CAAAA,CAAC,YAAY,mB,GAC1B,qCAACC,qCAAAA,WAAWA,CAAAA,C,UACV,oCAACC,qCAAAA,YAAYA,CAAAA,C,SAAC,mB,GACd,oCAACC,qCAAAA,YAAYA,CAAAA,C,SACVb,EAAQ,GAAG,CAACE,GACX,qCAACY,qCAAAA,WAAWA,CAAAA,CAEV,SAAU,IACRZ,EAAO,gBAAgB,CAAC,CAACA,EAAO,YAAY,I,UAG9C,oCAAC,QAAK,UAAU,W,SACbA,EAAO,SAAS,CAAC,IAAI,EAAE,OAASA,EAAO,EAAE,GAE5C,oCAACa,sBAAAA,KAAKA,CAAAA,CACJ,UAAWC,GAAAA,0BAAAA,EAAAA,EACT,0BACAd,EAAO,YAAY,GAAK,cAAgB,Y,KAXvCA,EAAO,EAAE,E,aAsBhC,C"}
1
+ {"version":3,"file":"components\\data-table\\data-table-view-options.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-view-options.tsx"],"sourcesContent":["\r\n\r\nimport { CaretUpDown, Check, SlidersHorizontal } from '@phosphor-icons/react'\r\nimport type { Table } from '@tanstack/react-table'\r\n\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} from '@/components/command'\r\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'\r\nimport { cn } from '@/lib/utils'\r\nimport * as React from 'react'\r\n\r\ninterface DataTableViewOptionsProps<TData> {\r\n table: Table<TData>\r\n}\r\n\r\nexport function DataTableViewOptions<TData>({\r\n table,\r\n}: DataTableViewOptionsProps<TData>) {\r\n const columns = React.useMemo(\r\n () =>\r\n table\r\n .getAllColumns()\r\n .filter(\r\n column =>\r\n typeof column.accessorFn !== 'undefined' && column.getCanHide()\r\n ),\r\n [table]\r\n )\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n aria-label=\"Toggle columns\"\r\n role=\"combobox\"\r\n variant=\"secondary\"\r\n size=\"xs\"\r\n className=\"ml-auto hidden lg:flex\"\r\n >\r\n <SlidersHorizontal />\r\n Ver\r\n <CaretUpDown className=\"ml-auto opacity-50\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className=\"w-44 p-0\">\r\n <Command>\r\n <CommandInput placeholder=\"Buscar colunas...\" />\r\n <CommandList>\r\n <CommandEmpty>Nenhuma coluna encontrada.</CommandEmpty>\r\n <CommandGroup>\r\n {columns.map(column => (\r\n <CommandItem\r\n key={column.id}\r\n onSelect={() =>\r\n column.toggleVisibility(!column.getIsVisible())\r\n }\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 size-4 shrink-0',\r\n column.getIsVisible() ? '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 )\r\n}\r\n"],"names":["DataTableViewOptions","table","columns","React","column","Popover","PopoverTrigger","Button","SlidersHorizontal","CaretUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Check","cn"],"mappings":";otCAsBO,SAASA,qBAA4B,CAC1CC,MAAAA,CAAK,CAC4B,EACjC,IAAMC,EAAUC,+BAAAA,OAAa,CAC3B,IACEF,EACG,aAAa,GACb,MAAM,CACLG,GACE,SAAOA,EAAO,UAAU,EAAoBA,EAAO,UAAU,IAErE,CAACH,EAAM,EAGT,MACE,qCAACI,qCAAAA,OAAOA,CAAAA,C,UACN,oCAACC,qCAAAA,cAAcA,CAAAA,CAAC,QAAO,G,SACrB,qCAACC,oCAAAA,MAAMA,CAAAA,CACL,aAAW,iBACX,KAAK,WACL,QAAQ,YACR,KAAK,KACL,UAAU,yB,UAEV,oCAACC,sBAAAA,iBAAiBA,CAAAA,CAAAA,GAAG,MAErB,oCAACC,sBAAAA,WAAWA,CAAAA,CAAC,UAAU,oB,QAG3B,oCAACC,qCAAAA,cAAcA,CAAAA,CAAC,MAAM,MAAM,UAAU,W,SACpC,qCAACC,qCAAAA,OAAOA,CAAAA,C,UACN,oCAACC,qCAAAA,YAAYA,CAAAA,CAAC,YAAY,mB,GAC1B,qCAACC,qCAAAA,WAAWA,CAAAA,C,UACV,oCAACC,qCAAAA,YAAYA,CAAAA,C,SAAC,4B,GACd,oCAACC,qCAAAA,YAAYA,CAAAA,C,SACVb,EAAQ,GAAG,CAACE,GACX,qCAACY,qCAAAA,WAAWA,CAAAA,CAEV,SAAU,IACRZ,EAAO,gBAAgB,CAAC,CAACA,EAAO,YAAY,I,UAG9C,oCAAC,QAAK,UAAU,W,SACbA,EAAO,SAAS,CAAC,IAAI,EAAE,OAASA,EAAO,EAAE,GAE5C,oCAACa,sBAAAA,KAAKA,CAAAA,CACJ,UAAWC,GAAAA,0BAAAA,EAAAA,EACT,0BACAd,EAAO,YAAY,GAAK,cAAgB,Y,KAXvCA,EAAO,EAAE,E,aAsBhC,C"}
@@ -1 +1 @@
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_modules__={"./data-table-action-bar":function(e){e.exports=require("./data-table-action-bar.cjs")},"./data-table-advanced-toolbar":function(e){e.exports=require("./data-table-advanced-toolbar.cjs")},"./data-table-column-header":function(e){e.exports=require("./data-table-column-header.cjs")},"@/components/data-table/data-table-date-filter":function(e){e.exports=require("./data-table-date-filter.cjs")},"@/components/data-table/data-table-faceted-filter":function(e){e.exports=require("./data-table-faceted-filter.cjs")},"./data-table-filter-list":function(e){e.exports=require("./data-table-filter-list.cjs")},"./data-table-filter-menu":function(e){e.exports=require("./data-table-filter-menu.cjs")},"@/components/data-table/data-table-pagination":function(e){e.exports=require("./data-table-pagination.cjs")},"@/components/data-table/data-table-range-filter":function(e){e.exports=require("./data-table-range-filter.cjs")},"./data-table-skeleton":function(e){e.exports=require("./data-table-skeleton.cjs")},"@/components/data-table/data-table-slider-filter":function(e){e.exports=require("./data-table-slider-filter.cjs")},"./data-table-sort-list":function(e){e.exports=require("./data-table-sort-list.cjs")},"./data-table-toolbar":function(e){e.exports=require("./data-table-toolbar.cjs")},"@/components/data-table/data-table-view-options":function(e){e.exports=require("./data-table-view-options.cjs")},"./data-table":function(e){e.exports=require("./data-table.cjs")}},__webpack_module_cache__={};function __webpack_require__(e){var _=__webpack_module_cache__[e];if(void 0!==_)return _.exports;var a=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](a,a.exports,__webpack_require__),a.exports}__webpack_require__.n=e=>{var _=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(_,{a:_}),_},__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__={};for(var __webpack_i__ in(()=>{__webpack_require__.r(__webpack_exports__);var e=__webpack_require__("./data-table-action-bar"),_={};for(var a in e)"default"!==a&&(_[a]=(function(_){return e[_]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var t=__webpack_require__("./data-table-advanced-toolbar"),_={};for(var a in t)"default"!==a&&(_[a]=(function(e){return t[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var r=__webpack_require__("./data-table-column-header"),_={};for(var a in r)"default"!==a&&(_[a]=(function(e){return r[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var n=__webpack_require__("@/components/data-table/data-table-date-filter"),_={};for(var a in n)"default"!==a&&(_[a]=(function(e){return n[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var i=__webpack_require__("@/components/data-table/data-table-faceted-filter"),_={};for(var a in i)"default"!==a&&(_[a]=(function(e){return i[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var o=__webpack_require__("./data-table-filter-list"),_={};for(var a in o)"default"!==a&&(_[a]=(function(e){return o[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var c=__webpack_require__("./data-table-filter-menu"),_={};for(var a in c)"default"!==a&&(_[a]=(function(e){return c[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var b=__webpack_require__("@/components/data-table/data-table-pagination"),_={};for(var a in b)"default"!==a&&(_[a]=(function(e){return b[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var u=__webpack_require__("@/components/data-table/data-table-range-filter"),_={};for(var a in u)"default"!==a&&(_[a]=(function(e){return u[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var d=__webpack_require__("./data-table-skeleton"),_={};for(var a in d)"default"!==a&&(_[a]=(function(e){return d[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var p=__webpack_require__("@/components/data-table/data-table-slider-filter"),_={};for(var a in p)"default"!==a&&(_[a]=(function(e){return p[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var l=__webpack_require__("./data-table-sort-list"),_={};for(var a in l)"default"!==a&&(_[a]=(function(e){return l[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var f=__webpack_require__("./data-table-toolbar"),_={};for(var a in f)"default"!==a&&(_[a]=(function(e){return f[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var s=__webpack_require__("@/components/data-table/data-table-view-options"),_={};for(var a in s)"default"!==a&&(_[a]=(function(e){return s[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var w=__webpack_require__("./data-table"),_={};for(var a in w)"default"!==a&&(_[a]=(function(e){return w[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_)})(),__webpack_exports__)exports[__webpack_i__]=__webpack_exports__[__webpack_i__];Object.defineProperty(exports,"__esModule",{value:!0});
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_modules__={"./data-table-action-bar":function(e){e.exports=require("./data-table-action-bar.cjs")},"./data-table-advanced-toolbar":function(e){e.exports=require("./data-table-advanced-toolbar.cjs")},"./data-table-column-header":function(e){e.exports=require("./data-table-column-header.cjs")},"@/components/data-table/data-table-date-filter":function(e){e.exports=require("./data-table-date-filter.cjs")},"@/components/data-table/data-table-faceted-filter":function(e){e.exports=require("./data-table-faceted-filter.cjs")},"./data-table-filter-list":function(e){e.exports=require("./data-table-filter-list.cjs")},"./data-table-filter-menu":function(e){e.exports=require("./data-table-filter-menu.cjs")},"./data-table-pagination":function(e){e.exports=require("./data-table-pagination.cjs")},"./data-table-range-filter":function(e){e.exports=require("./data-table-range-filter.cjs")},"./data-table-skeleton":function(e){e.exports=require("./data-table-skeleton.cjs")},"@/components/data-table/data-table-slider-filter":function(e){e.exports=require("./data-table-slider-filter.cjs")},"./data-table-sort-list":function(e){e.exports=require("./data-table-sort-list.cjs")},"./data-table-toolbar":function(e){e.exports=require("./data-table-toolbar.cjs")},"@/components/data-table/data-table-view-options":function(e){e.exports=require("./data-table-view-options.cjs")},"./data-table":function(e){e.exports=require("./data-table.cjs")}},__webpack_module_cache__={};function __webpack_require__(e){var _=__webpack_module_cache__[e];if(void 0!==_)return _.exports;var a=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](a,a.exports,__webpack_require__),a.exports}__webpack_require__.n=e=>{var _=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(_,{a:_}),_},__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__={};for(var __webpack_i__ in(()=>{__webpack_require__.r(__webpack_exports__);var e=__webpack_require__("./data-table-action-bar"),_={};for(var a in e)"default"!==a&&(_[a]=(function(_){return e[_]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var r=__webpack_require__("./data-table-advanced-toolbar"),_={};for(var a in r)"default"!==a&&(_[a]=(function(e){return r[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var t=__webpack_require__("./data-table-column-header"),_={};for(var a in t)"default"!==a&&(_[a]=(function(e){return t[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var i=__webpack_require__("@/components/data-table/data-table-date-filter"),_={};for(var a in i)"default"!==a&&(_[a]=(function(e){return i[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var n=__webpack_require__("@/components/data-table/data-table-faceted-filter"),_={};for(var a in n)"default"!==a&&(_[a]=(function(e){return n[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var o=__webpack_require__("./data-table-filter-list"),_={};for(var a in o)"default"!==a&&(_[a]=(function(e){return o[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var c=__webpack_require__("./data-table-filter-menu"),_={};for(var a in c)"default"!==a&&(_[a]=(function(e){return c[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var b=__webpack_require__("./data-table-pagination"),_={};for(var a in b)"default"!==a&&(_[a]=(function(e){return b[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var u=__webpack_require__("./data-table-range-filter"),_={};for(var a in u)"default"!==a&&(_[a]=(function(e){return u[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var d=__webpack_require__("./data-table-skeleton"),_={};for(var a in d)"default"!==a&&(_[a]=(function(e){return d[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var p=__webpack_require__("@/components/data-table/data-table-slider-filter"),_={};for(var a in p)"default"!==a&&(_[a]=(function(e){return p[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var l=__webpack_require__("./data-table-sort-list"),_={};for(var a in l)"default"!==a&&(_[a]=(function(e){return l[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var f=__webpack_require__("./data-table-toolbar"),_={};for(var a in f)"default"!==a&&(_[a]=(function(e){return f[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var s=__webpack_require__("@/components/data-table/data-table-view-options"),_={};for(var a in s)"default"!==a&&(_[a]=(function(e){return s[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_);var w=__webpack_require__("./data-table"),_={};for(var a in w)"default"!==a&&(_[a]=(function(e){return w[e]}).bind(0,a));__webpack_require__.d(__webpack_exports__,_)})(),__webpack_exports__)exports[__webpack_i__]=__webpack_exports__[__webpack_i__];Object.defineProperty(exports,"__esModule",{value:!0});
@@ -1,3 +1,3 @@
1
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__,{useDataTable:()=>useDataTable});let react_table_namespaceObject=require("@tanstack/react-table"),external_nuqs_namespaceObject=require("nuqs"),external_react_namespaceObject=require("react"),external_use_debounced_callback_cjs_namespaceObject=require("./use-debounced-callback.cjs"),parsers_cjs_namespaceObject=require("../lib/parsers.cjs"),PAGE_KEY="page",PER_PAGE_KEY="perPage",SORT_KEY="sort",ARRAY_SEPARATOR=",",DEBOUNCE_MS=300,THROTTLE_MS=50;function useDataTable(e){let{columns:a,pageCount:t=-1,initialState:_,history:r="replace",debounceMs:c=300,throttleMs:n=50,clearOnDefault:s=!1,enableAdvancedFilter:l=!1,scroll:o=!1,shallow:i=!0,startTransition:u,...p}=e,b=external_react_namespaceObject.useMemo(()=>({history:r,scroll:o,shallow:i,throttleMs:n,debounceMs:c,clearOnDefault:s,startTransition:u}),[r,o,i,n,c,s,u]),[m,d]=external_react_namespaceObject.useState(_?.rowSelection??{}),[O,j]=external_react_namespaceObject.useState(_?.columnVisibility??{}),[g,w]=(0,external_nuqs_namespaceObject.useQueryState)("page",external_nuqs_namespaceObject.parseAsInteger.withOptions(b).withDefault(1)),[x,f]=(0,external_nuqs_namespaceObject.useQueryState)("perPage",external_nuqs_namespaceObject.parseAsInteger.withOptions(b).withDefault(_?.pagination?.pageSize??10)),S=external_react_namespaceObject.useMemo(()=>({pageIndex:g-1,pageSize:x}),[g,x]),q=external_react_namespaceObject.useCallback(e=>{if("function"==typeof e){let a=e(S);w(a.pageIndex+1),f(a.pageSize)}else w(e.pageIndex+1),f(e.pageSize)},[S,w,f]),k=external_react_namespaceObject.useMemo(()=>new Set(a.map(e=>e.id).filter(Boolean)),[a]),[M,y]=(0,external_nuqs_namespaceObject.useQueryState)("sort",(0,parsers_cjs_namespaceObject.getSortingStateParser)(k).withOptions(b).withDefault(_?.sorting??[])),R=external_react_namespaceObject.useCallback(e=>{"function"==typeof e?y(e(M)):y(e)},[M,y]),A=external_react_namespaceObject.useMemo(()=>l?[]:a.filter(e=>e.enableColumnFilter),[a,l]),P=external_react_namespaceObject.useMemo(()=>l?{}:A.reduce((e,a)=>(a.meta?.options?e[a.id??""]=(0,external_nuqs_namespaceObject.parseAsArrayOf)(external_nuqs_namespaceObject.parseAsString,",").withOptions(b):e[a.id??""]=external_nuqs_namespaceObject.parseAsString.withOptions(b),e),{}),[A,b,l]),[h,C]=(0,external_nuqs_namespaceObject.useQueryStates)(P),T=(0,external_use_debounced_callback_cjs_namespaceObject.useDebouncedCallback)(e=>{w(1),C(e)},c),D=external_react_namespaceObject.useMemo(()=>l?[]:Object.entries(h).reduce((e,[a,t])=>{if(null!==t){let _=Array.isArray(t)?t:"string"==typeof t&&/[^a-zA-Z0-9]/.test(t)?t.split(/[^a-zA-Z0-9]+/).filter(Boolean):[t];e.push({id:a,value:_})}return e},[]),[h,l]),[F,E]=external_react_namespaceObject.useState(D),v=external_react_namespaceObject.useCallback(e=>{l||E(a=>{let t="function"==typeof e?e(a):e,_=t.reduce((e,a)=>(A.find(e=>e.id===a.id)&&(e[a.id]=a.value),e),{});for(let e of a)t.some(a=>a.id===e.id)||(_[e.id]=null);return T(_),t})},[T,A,l]);return{table:(0,react_table_namespaceObject.useReactTable)({...p,columns:a,initialState:_,pageCount:t,state:{pagination:S,sorting:M,columnVisibility:O,rowSelection:m,columnFilters:F},defaultColumn:{...p.defaultColumn,enableColumnFilter:!1},enableRowSelection:!0,onRowSelectionChange:d,onPaginationChange:q,onSortingChange:R,onColumnFiltersChange:v,onColumnVisibilityChange:j,getCoreRowModel:(0,react_table_namespaceObject.getCoreRowModel)(),getFilteredRowModel:(0,react_table_namespaceObject.getFilteredRowModel)(),getPaginationRowModel:(0,react_table_namespaceObject.getPaginationRowModel)(),getSortedRowModel:(0,react_table_namespaceObject.getSortedRowModel)(),getFacetedRowModel:(0,react_table_namespaceObject.getFacetedRowModel)(),getFacetedUniqueValues:(0,react_table_namespaceObject.getFacetedUniqueValues)(),getFacetedMinMaxValues:(0,react_table_namespaceObject.getFacetedMinMaxValues)(),manualPagination:!0,manualSorting:!0,manualFiltering:!0}),shallow:i,debounceMs:c,throttleMs:n}}for(var __webpack_i__ in exports.useDataTable=__webpack_exports__.useDataTable,__webpack_exports__)-1===["useDataTable"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
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__,{useDataTable:()=>useDataTable});let react_table_namespaceObject=require("@tanstack/react-table"),external_nuqs_namespaceObject=require("nuqs"),external_react_namespaceObject=require("react"),external_use_debounced_callback_cjs_namespaceObject=require("./use-debounced-callback.cjs"),parsers_cjs_namespaceObject=require("../lib/parsers.cjs"),PAGE_KEY="page",PER_PAGE_KEY="perPage",SORT_KEY="sort",ARRAY_SEPARATOR=",",DEBOUNCE_MS=300,THROTTLE_MS=50;function useDataTable(e){let{columns:a,pageCount:t=-1,initialState:_,history:r="replace",debounceMs:c=300,throttleMs:n=50,clearOnDefault:s=!1,enableAdvancedFilter:l=!1,scroll:o=!1,shallow:i=!0,startTransition:u,globalFilter:p,...b}=e,m=external_react_namespaceObject.useMemo(()=>({history:r,scroll:o,shallow:i,throttleMs:n,debounceMs:c,clearOnDefault:s,startTransition:u}),[r,o,i,n,c,s,u]),[d,O]=external_react_namespaceObject.useState(_?.rowSelection??{}),[j,g]=external_react_namespaceObject.useState(_?.columnVisibility??{}),[w,x]=(0,external_nuqs_namespaceObject.useQueryState)("page",external_nuqs_namespaceObject.parseAsInteger.withOptions(m).withDefault(1)),[f,S]=(0,external_nuqs_namespaceObject.useQueryState)("perPage",external_nuqs_namespaceObject.parseAsInteger.withOptions(m).withDefault(_?.pagination?.pageSize??10)),q=external_react_namespaceObject.useMemo(()=>({pageIndex:w-1,pageSize:f}),[w,f]),k=external_react_namespaceObject.useCallback(e=>{if("function"==typeof e){let a=e(q);x(a.pageIndex+1),S(a.pageSize)}else x(e.pageIndex+1),S(e.pageSize)},[q,x,S]),M=external_react_namespaceObject.useMemo(()=>new Set(a.map(e=>e.id).filter(Boolean)),[a]),[y,R]=(0,external_nuqs_namespaceObject.useQueryState)("sort",(0,parsers_cjs_namespaceObject.getSortingStateParser)(M).withOptions(m).withDefault(_?.sorting??[])),A=external_react_namespaceObject.useCallback(e=>{"function"==typeof e?R(e(y)):R(e)},[y,R]),P=external_react_namespaceObject.useMemo(()=>l?[]:a.filter(e=>e.enableColumnFilter),[a,l]),h=external_react_namespaceObject.useMemo(()=>l?{}:P.reduce((e,a)=>(a.meta?.options?e[a.id??""]=(0,external_nuqs_namespaceObject.parseAsArrayOf)(external_nuqs_namespaceObject.parseAsString,",").withOptions(m):e[a.id??""]=external_nuqs_namespaceObject.parseAsString.withOptions(m),e),{}),[P,m,l]),[C,T]=(0,external_nuqs_namespaceObject.useQueryStates)(h),D=(0,external_use_debounced_callback_cjs_namespaceObject.useDebouncedCallback)(e=>{x(1),T(e)},c),F=external_react_namespaceObject.useMemo(()=>l?[]:Object.entries(C).reduce((e,[a,t])=>{if(null!==t){let _=Array.isArray(t)?t:"string"==typeof t&&/[^a-zA-Z0-9]/.test(t)?t.split(/[^a-zA-Z0-9]+/).filter(Boolean):[t];e.push({id:a,value:_})}return e},[]),[C,l]),[E,v]=external_react_namespaceObject.useState(F),z=external_react_namespaceObject.useCallback(e=>{l||v(a=>{let t="function"==typeof e?e(a):e,_=t.reduce((e,a)=>(P.find(e=>e.id===a.id)&&(e[a.id]=a.value),e),{});for(let e of a)t.some(a=>a.id===e.id)||(_[e.id]=null);return D(_),t})},[D,P,l]);return{table:(0,react_table_namespaceObject.useReactTable)({...b,columns:a,initialState:_,pageCount:t,state:{pagination:q,sorting:y,columnVisibility:j,rowSelection:d,columnFilters:E,globalFilter:p},defaultColumn:{...b.defaultColumn,enableColumnFilter:!1},enableRowSelection:!0,onRowSelectionChange:O,onPaginationChange:k,onSortingChange:A,onColumnFiltersChange:z,onColumnVisibilityChange:g,getCoreRowModel:(0,react_table_namespaceObject.getCoreRowModel)(),getFilteredRowModel:(0,react_table_namespaceObject.getFilteredRowModel)(),getPaginationRowModel:(0,react_table_namespaceObject.getPaginationRowModel)(),getSortedRowModel:(0,react_table_namespaceObject.getSortedRowModel)(),getFacetedRowModel:(0,react_table_namespaceObject.getFacetedRowModel)(),getFacetedUniqueValues:(0,react_table_namespaceObject.getFacetedUniqueValues)(),getFacetedMinMaxValues:(0,react_table_namespaceObject.getFacetedMinMaxValues)(),manualPagination:!0,manualSorting:!0,manualFiltering:!0}),shallow:i,debounceMs:c,throttleMs:n}}for(var __webpack_i__ in exports.useDataTable=__webpack_exports__.useDataTable,__webpack_exports__)-1===["useDataTable"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__webpack_exports__[__webpack_i__]);Object.defineProperty(exports,"__esModule",{value:!0});
3
3
  //# sourceMappingURL=use-data-table.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks\\use-data-table.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/hooks/use-data-table.ts"],"sourcesContent":["\r\n\r\nimport {\r\n type ColumnFiltersState,\r\n type PaginationState,\r\n type RowSelectionState,\r\n type SortingState,\r\n type TableOptions,\r\n type TableState,\r\n type Updater,\r\n type VisibilityState,\r\n getCoreRowModel,\r\n getFacetedMinMaxValues,\r\n getFacetedRowModel,\r\n getFacetedUniqueValues,\r\n getFilteredRowModel,\r\n getPaginationRowModel,\r\n getSortedRowModel,\r\n useReactTable,\r\n} from '@tanstack/react-table'\r\nimport {\r\n type Parser,\r\n type UseQueryStateOptions,\r\n parseAsArrayOf,\r\n parseAsInteger,\r\n parseAsString,\r\n useQueryState,\r\n useQueryStates,\r\n} from 'nuqs'\r\nimport * as React from 'react'\r\n\r\nimport { useDebouncedCallback } from '@/hooks/use-debounced-callback'\r\nimport { getSortingStateParser } from '@/lib/parsers'\r\nimport type { ExtendedColumnSort } from '@/types/data-table'\r\n\r\nconst PAGE_KEY = 'page'\r\nconst PER_PAGE_KEY = 'perPage'\r\nconst SORT_KEY = 'sort'\r\nconst ARRAY_SEPARATOR = ','\r\nconst DEBOUNCE_MS = 300\r\nconst THROTTLE_MS = 50\r\n\r\ninterface UseDataTableProps<TData>\r\n extends Omit<\r\n TableOptions<TData>,\r\n | 'state'\r\n | 'pageCount'\r\n | 'getCoreRowModel'\r\n | 'manualFiltering'\r\n | 'manualPagination'\r\n | 'manualSorting'\r\n >,\r\n Required<Pick<TableOptions<TData>, 'pageCount'>> {\r\n initialState?: Omit<Partial<TableState>, 'sorting'> & {\r\n sorting?: ExtendedColumnSort<TData>[]\r\n }\r\n history?: 'push' | 'replace'\r\n debounceMs?: number\r\n throttleMs?: number\r\n clearOnDefault?: boolean\r\n enableAdvancedFilter?: boolean\r\n scroll?: boolean\r\n shallow?: boolean\r\n startTransition?: React.TransitionStartFunction\r\n}\r\n\r\nexport function useDataTable<TData>(props: UseDataTableProps<TData>) {\r\n const {\r\n columns,\r\n pageCount = -1,\r\n initialState,\r\n history = 'replace',\r\n debounceMs = DEBOUNCE_MS,\r\n throttleMs = THROTTLE_MS,\r\n clearOnDefault = false,\r\n enableAdvancedFilter = false,\r\n scroll = false,\r\n shallow = true,\r\n startTransition,\r\n ...tableProps\r\n } = props\r\n\r\n const queryStateOptions = React.useMemo<\r\n Omit<UseQueryStateOptions<string>, 'parse'>\r\n >(\r\n () => ({\r\n history,\r\n scroll,\r\n shallow,\r\n throttleMs,\r\n debounceMs,\r\n clearOnDefault,\r\n startTransition,\r\n }),\r\n [\r\n history,\r\n scroll,\r\n shallow,\r\n throttleMs,\r\n debounceMs,\r\n clearOnDefault,\r\n startTransition,\r\n ]\r\n )\r\n\r\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\r\n initialState?.rowSelection ?? {}\r\n )\r\n const [columnVisibility, setColumnVisibility] =\r\n React.useState<VisibilityState>(initialState?.columnVisibility ?? {})\r\n\r\n const [page, setPage] = useQueryState(\r\n PAGE_KEY,\r\n parseAsInteger.withOptions(queryStateOptions).withDefault(1)\r\n )\r\n const [perPage, setPerPage] = useQueryState(\r\n PER_PAGE_KEY,\r\n parseAsInteger\r\n .withOptions(queryStateOptions)\r\n .withDefault(initialState?.pagination?.pageSize ?? 10)\r\n )\r\n\r\n const pagination: PaginationState = React.useMemo(() => {\r\n return {\r\n pageIndex: page - 1, // zero-based index -> one-based index\r\n pageSize: perPage,\r\n }\r\n }, [page, perPage])\r\n\r\n const onPaginationChange = React.useCallback(\r\n (updaterOrValue: Updater<PaginationState>) => {\r\n if (typeof updaterOrValue === 'function') {\r\n const newPagination = updaterOrValue(pagination)\r\n void setPage(newPagination.pageIndex + 1)\r\n void setPerPage(newPagination.pageSize)\r\n } else {\r\n void setPage(updaterOrValue.pageIndex + 1)\r\n void setPerPage(updaterOrValue.pageSize)\r\n }\r\n },\r\n [pagination, setPage, setPerPage]\r\n )\r\n\r\n const columnIds = React.useMemo(() => {\r\n return new Set(columns.map(column => column.id).filter(Boolean) as string[])\r\n }, [columns])\r\n\r\n const [sorting, setSorting] = useQueryState(\r\n SORT_KEY,\r\n getSortingStateParser<TData>(columnIds)\r\n .withOptions(queryStateOptions)\r\n .withDefault(initialState?.sorting ?? [])\r\n )\r\n\r\n const onSortingChange = React.useCallback(\r\n (updaterOrValue: Updater<SortingState>) => {\r\n if (typeof updaterOrValue === 'function') {\r\n const newSorting = updaterOrValue(sorting)\r\n setSorting(newSorting as ExtendedColumnSort<TData>[])\r\n } else {\r\n setSorting(updaterOrValue as ExtendedColumnSort<TData>[])\r\n }\r\n },\r\n [sorting, setSorting]\r\n )\r\n\r\n const filterableColumns = React.useMemo(() => {\r\n if (enableAdvancedFilter) return []\r\n\r\n return columns.filter(column => column.enableColumnFilter)\r\n }, [columns, enableAdvancedFilter])\r\n\r\n const filterParsers = React.useMemo(() => {\r\n if (enableAdvancedFilter) return {}\r\n\r\n return filterableColumns.reduce<\r\n Record<string, Parser<string> | Parser<string[]>>\r\n >((acc, column) => {\r\n if (column.meta?.options) {\r\n acc[column.id ?? ''] = parseAsArrayOf(\r\n parseAsString,\r\n ARRAY_SEPARATOR\r\n ).withOptions(queryStateOptions)\r\n } else {\r\n acc[column.id ?? ''] = parseAsString.withOptions(queryStateOptions)\r\n }\r\n return acc\r\n }, {})\r\n }, [filterableColumns, queryStateOptions, enableAdvancedFilter])\r\n\r\n const [filterValues, setFilterValues] = useQueryStates(filterParsers)\r\n\r\n const debouncedSetFilterValues = useDebouncedCallback(\r\n (values: typeof filterValues) => {\r\n void setPage(1)\r\n void setFilterValues(values)\r\n },\r\n debounceMs\r\n )\r\n\r\n const initialColumnFilters: ColumnFiltersState = React.useMemo(() => {\r\n if (enableAdvancedFilter) return []\r\n\r\n return Object.entries(filterValues).reduce<ColumnFiltersState>(\r\n (filters, [key, value]) => {\r\n if (value !== null) {\r\n const processedValue = Array.isArray(value)\r\n ? value\r\n : typeof value === 'string' && /[^a-zA-Z0-9]/.test(value)\r\n ? value.split(/[^a-zA-Z0-9]+/).filter(Boolean)\r\n : [value]\r\n\r\n filters.push({\r\n id: key,\r\n value: processedValue,\r\n })\r\n }\r\n return filters\r\n },\r\n []\r\n )\r\n }, [filterValues, enableAdvancedFilter])\r\n\r\n const [columnFilters, setColumnFilters] =\r\n React.useState<ColumnFiltersState>(initialColumnFilters)\r\n\r\n const onColumnFiltersChange = React.useCallback(\r\n (updaterOrValue: Updater<ColumnFiltersState>) => {\r\n if (enableAdvancedFilter) return\r\n\r\n setColumnFilters(prev => {\r\n const next =\r\n typeof updaterOrValue === 'function'\r\n ? updaterOrValue(prev)\r\n : updaterOrValue\r\n\r\n const filterUpdates = next.reduce<\r\n Record<string, string | string[] | null>\r\n >((acc, filter) => {\r\n if (filterableColumns.find(column => column.id === filter.id)) {\r\n acc[filter.id] = filter.value as string | string[]\r\n }\r\n return acc\r\n }, {})\r\n\r\n for (const prevFilter of prev) {\r\n if (!next.some(filter => filter.id === prevFilter.id)) {\r\n filterUpdates[prevFilter.id] = null\r\n }\r\n }\r\n\r\n debouncedSetFilterValues(filterUpdates)\r\n return next\r\n })\r\n },\r\n [debouncedSetFilterValues, filterableColumns, enableAdvancedFilter]\r\n )\r\n\r\n const table = useReactTable({\r\n ...tableProps,\r\n columns,\r\n initialState,\r\n pageCount,\r\n state: {\r\n pagination,\r\n sorting,\r\n columnVisibility,\r\n rowSelection,\r\n columnFilters,\r\n },\r\n defaultColumn: {\r\n ...tableProps.defaultColumn,\r\n enableColumnFilter: false,\r\n },\r\n enableRowSelection: true,\r\n onRowSelectionChange: setRowSelection,\r\n onPaginationChange,\r\n onSortingChange,\r\n onColumnFiltersChange,\r\n onColumnVisibilityChange: setColumnVisibility,\r\n getCoreRowModel: getCoreRowModel(),\r\n getFilteredRowModel: getFilteredRowModel(),\r\n getPaginationRowModel: getPaginationRowModel(),\r\n getSortedRowModel: getSortedRowModel(),\r\n getFacetedRowModel: getFacetedRowModel(),\r\n getFacetedUniqueValues: getFacetedUniqueValues(),\r\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\r\n manualPagination: true,\r\n manualSorting: true,\r\n manualFiltering: true,\r\n })\r\n\r\n return { table, shallow, debounceMs, throttleMs }\r\n}\r\n"],"names":["PAGE_KEY","PER_PAGE_KEY","SORT_KEY","ARRAY_SEPARATOR","DEBOUNCE_MS","THROTTLE_MS","useDataTable","props","columns","pageCount","initialState","history","debounceMs","throttleMs","clearOnDefault","enableAdvancedFilter","scroll","shallow","startTransition","tableProps","queryStateOptions","React","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","page","setPage","useQueryState","parseAsInteger","perPage","setPerPage","pagination","onPaginationChange","updaterOrValue","newPagination","columnIds","Set","column","Boolean","sorting","setSorting","getSortingStateParser","onSortingChange","filterableColumns","filterParsers","acc","parseAsArrayOf","parseAsString","filterValues","setFilterValues","useQueryStates","debouncedSetFilterValues","useDebouncedCallback","values","initialColumnFilters","Object","filters","key","value","processedValue","Array","columnFilters","setColumnFilters","onColumnFiltersChange","prev","next","filterUpdates","filter","prevFilter","table","useReactTable","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues"],"mappings":"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"}
1
+ {"version":3,"file":"hooks\\use-data-table.cjs","sources":["webpack://@gbmtech/aurora-ui/./src/hooks/use-data-table.ts"],"sourcesContent":["\r\n\r\nimport {\r\n type ColumnFiltersState,\r\n type PaginationState,\r\n type RowSelectionState,\r\n type SortingState,\r\n type TableOptions,\r\n type TableState,\r\n type Updater,\r\n type VisibilityState,\r\n getCoreRowModel,\r\n getFacetedMinMaxValues,\r\n getFacetedRowModel,\r\n getFacetedUniqueValues,\r\n getFilteredRowModel,\r\n getPaginationRowModel,\r\n getSortedRowModel,\r\n useReactTable,\r\n} from '@tanstack/react-table'\r\nimport {\r\n type Parser,\r\n type UseQueryStateOptions,\r\n parseAsArrayOf,\r\n parseAsInteger,\r\n parseAsString,\r\n useQueryState,\r\n useQueryStates,\r\n} from 'nuqs'\r\nimport * as React from 'react'\r\n\r\nimport { useDebouncedCallback } from '@/hooks/use-debounced-callback'\r\nimport { getSortingStateParser } from '@/lib/parsers'\r\nimport type { ExtendedColumnSort } from '@/types/data-table'\r\n\r\nconst PAGE_KEY = 'page'\r\nconst PER_PAGE_KEY = 'perPage'\r\nconst SORT_KEY = 'sort'\r\nconst ARRAY_SEPARATOR = ','\r\nconst DEBOUNCE_MS = 300\r\nconst THROTTLE_MS = 50\r\n\r\ninterface UseDataTableProps<TData>\r\n extends Omit<\r\n TableOptions<TData>,\r\n | 'state'\r\n | 'pageCount'\r\n | 'getCoreRowModel'\r\n | 'manualFiltering'\r\n | 'manualPagination'\r\n | 'manualSorting'\r\n >,\r\n Required<Pick<TableOptions<TData>, 'pageCount'>> {\r\n initialState?: Omit<Partial<TableState>, 'sorting'> & {\r\n sorting?: ExtendedColumnSort<TData>[]\r\n }\r\n history?: 'push' | 'replace'\r\n debounceMs?: number\r\n throttleMs?: number\r\n clearOnDefault?: boolean\r\n enableAdvancedFilter?: boolean\r\n scroll?: boolean\r\n shallow?: boolean\r\n startTransition?: React.TransitionStartFunction\r\n globalFilter?: string | null\r\n}\r\n\r\nexport function useDataTable<TData>(props: UseDataTableProps<TData>) {\r\n const {\r\n columns,\r\n pageCount = -1,\r\n initialState,\r\n history = 'replace',\r\n debounceMs = DEBOUNCE_MS,\r\n throttleMs = THROTTLE_MS,\r\n clearOnDefault = false,\r\n enableAdvancedFilter = false,\r\n scroll = false,\r\n shallow = true,\r\n startTransition,\r\n globalFilter,\r\n ...tableProps\r\n } = props\r\n\r\n const queryStateOptions = React.useMemo<\r\n Omit<UseQueryStateOptions<string>, 'parse'>\r\n >(\r\n () => ({\r\n history,\r\n scroll,\r\n shallow,\r\n throttleMs,\r\n debounceMs,\r\n clearOnDefault,\r\n startTransition,\r\n }),\r\n [\r\n history,\r\n scroll,\r\n shallow,\r\n throttleMs,\r\n debounceMs,\r\n clearOnDefault,\r\n startTransition,\r\n ]\r\n )\r\n\r\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\r\n initialState?.rowSelection ?? {}\r\n )\r\n const [columnVisibility, setColumnVisibility] =\r\n React.useState<VisibilityState>(initialState?.columnVisibility ?? {})\r\n\r\n const [page, setPage] = useQueryState(\r\n PAGE_KEY,\r\n parseAsInteger.withOptions(queryStateOptions).withDefault(1)\r\n )\r\n const [perPage, setPerPage] = useQueryState(\r\n PER_PAGE_KEY,\r\n parseAsInteger\r\n .withOptions(queryStateOptions)\r\n .withDefault(initialState?.pagination?.pageSize ?? 10)\r\n )\r\n\r\n const pagination: PaginationState = React.useMemo(() => {\r\n return {\r\n pageIndex: page - 1, // zero-based index -> one-based index\r\n pageSize: perPage,\r\n }\r\n }, [page, perPage])\r\n\r\n const onPaginationChange = React.useCallback(\r\n (updaterOrValue: Updater<PaginationState>) => {\r\n if (typeof updaterOrValue === 'function') {\r\n const newPagination = updaterOrValue(pagination)\r\n void setPage(newPagination.pageIndex + 1)\r\n void setPerPage(newPagination.pageSize)\r\n } else {\r\n void setPage(updaterOrValue.pageIndex + 1)\r\n void setPerPage(updaterOrValue.pageSize)\r\n }\r\n },\r\n [pagination, setPage, setPerPage]\r\n )\r\n\r\n const columnIds = React.useMemo(() => {\r\n return new Set(columns.map(column => column.id).filter(Boolean) as string[])\r\n }, [columns])\r\n\r\n const [sorting, setSorting] = useQueryState(\r\n SORT_KEY,\r\n getSortingStateParser<TData>(columnIds)\r\n .withOptions(queryStateOptions)\r\n .withDefault(initialState?.sorting ?? [])\r\n )\r\n\r\n const onSortingChange = React.useCallback(\r\n (updaterOrValue: Updater<SortingState>) => {\r\n if (typeof updaterOrValue === 'function') {\r\n const newSorting = updaterOrValue(sorting)\r\n setSorting(newSorting as ExtendedColumnSort<TData>[])\r\n } else {\r\n setSorting(updaterOrValue as ExtendedColumnSort<TData>[])\r\n }\r\n },\r\n [sorting, setSorting]\r\n )\r\n\r\n const filterableColumns = React.useMemo(() => {\r\n if (enableAdvancedFilter) return []\r\n\r\n return columns.filter(column => column.enableColumnFilter)\r\n }, [columns, enableAdvancedFilter])\r\n\r\n const filterParsers = React.useMemo(() => {\r\n if (enableAdvancedFilter) return {}\r\n\r\n return filterableColumns.reduce<\r\n Record<string, Parser<string> | Parser<string[]>>\r\n >((acc, column) => {\r\n if (column.meta?.options) {\r\n acc[column.id ?? ''] = parseAsArrayOf(\r\n parseAsString,\r\n ARRAY_SEPARATOR\r\n ).withOptions(queryStateOptions)\r\n } else {\r\n acc[column.id ?? ''] = parseAsString.withOptions(queryStateOptions)\r\n }\r\n return acc\r\n }, {})\r\n }, [filterableColumns, queryStateOptions, enableAdvancedFilter])\r\n\r\n const [filterValues, setFilterValues] = useQueryStates(filterParsers)\r\n\r\n const debouncedSetFilterValues = useDebouncedCallback(\r\n (values: typeof filterValues) => {\r\n void setPage(1)\r\n void setFilterValues(values)\r\n },\r\n debounceMs\r\n )\r\n\r\n const initialColumnFilters: ColumnFiltersState = React.useMemo(() => {\r\n if (enableAdvancedFilter) return []\r\n\r\n return Object.entries(filterValues).reduce<ColumnFiltersState>(\r\n (filters, [key, value]) => {\r\n if (value !== null) {\r\n const processedValue = Array.isArray(value)\r\n ? value\r\n : typeof value === 'string' && /[^a-zA-Z0-9]/.test(value)\r\n ? value.split(/[^a-zA-Z0-9]+/).filter(Boolean)\r\n : [value]\r\n\r\n filters.push({\r\n id: key,\r\n value: processedValue,\r\n })\r\n }\r\n return filters\r\n },\r\n []\r\n )\r\n }, [filterValues, enableAdvancedFilter])\r\n\r\n const [columnFilters, setColumnFilters] =\r\n React.useState<ColumnFiltersState>(initialColumnFilters)\r\n\r\n const onColumnFiltersChange = React.useCallback(\r\n (updaterOrValue: Updater<ColumnFiltersState>) => {\r\n if (enableAdvancedFilter) return\r\n\r\n setColumnFilters(prev => {\r\n const next =\r\n typeof updaterOrValue === 'function'\r\n ? updaterOrValue(prev)\r\n : updaterOrValue\r\n\r\n const filterUpdates = next.reduce<\r\n Record<string, string | string[] | null>\r\n >((acc, filter) => {\r\n if (filterableColumns.find(column => column.id === filter.id)) {\r\n acc[filter.id] = filter.value as string | string[]\r\n }\r\n return acc\r\n }, {})\r\n\r\n for (const prevFilter of prev) {\r\n if (!next.some(filter => filter.id === prevFilter.id)) {\r\n filterUpdates[prevFilter.id] = null\r\n }\r\n }\r\n\r\n debouncedSetFilterValues(filterUpdates)\r\n return next\r\n })\r\n },\r\n [debouncedSetFilterValues, filterableColumns, enableAdvancedFilter]\r\n )\r\n\r\n const table = useReactTable({\r\n ...tableProps,\r\n columns,\r\n initialState,\r\n pageCount,\r\n state: {\r\n pagination,\r\n sorting,\r\n columnVisibility,\r\n rowSelection,\r\n columnFilters,\r\n globalFilter,\r\n },\r\n defaultColumn: {\r\n ...tableProps.defaultColumn,\r\n enableColumnFilter: false,\r\n },\r\n enableRowSelection: true,\r\n onRowSelectionChange: setRowSelection,\r\n onPaginationChange,\r\n onSortingChange,\r\n onColumnFiltersChange,\r\n onColumnVisibilityChange: setColumnVisibility,\r\n getCoreRowModel: getCoreRowModel(),\r\n getFilteredRowModel: getFilteredRowModel(),\r\n getPaginationRowModel: getPaginationRowModel(),\r\n getSortedRowModel: getSortedRowModel(),\r\n getFacetedRowModel: getFacetedRowModel(),\r\n getFacetedUniqueValues: getFacetedUniqueValues(),\r\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\r\n manualPagination: true,\r\n manualSorting: true,\r\n manualFiltering: true,\r\n })\r\n\r\n return { table, shallow, debounceMs, throttleMs }\r\n}\r\n"],"names":["PAGE_KEY","PER_PAGE_KEY","SORT_KEY","ARRAY_SEPARATOR","DEBOUNCE_MS","THROTTLE_MS","useDataTable","props","columns","pageCount","initialState","history","debounceMs","throttleMs","clearOnDefault","enableAdvancedFilter","scroll","shallow","startTransition","globalFilter","tableProps","queryStateOptions","React","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","page","setPage","useQueryState","parseAsInteger","perPage","setPerPage","pagination","onPaginationChange","updaterOrValue","newPagination","columnIds","Set","column","Boolean","sorting","setSorting","getSortingStateParser","onSortingChange","filterableColumns","filterParsers","acc","parseAsArrayOf","parseAsString","filterValues","setFilterValues","useQueryStates","debouncedSetFilterValues","useDebouncedCallback","values","initialColumnFilters","Object","filters","key","value","processedValue","Array","columnFilters","setColumnFilters","onColumnFiltersChange","prev","next","filterUpdates","filter","prevFilter","table","useReactTable","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  'use client'
2
- import*as e from"react/jsx-runtime";import*as a from"@phosphor-icons/react";import*as t from"nuqs";import*as r from"react";import*as l from"../badge.js";import*as n from"../button.js";import*as i from"../calendar.js";import*as s from"../command.js";import*as o from"./data-table-range-filter.js";import*as d from"../faceted.js";import*as c from"../input.js";import*as m from"../popover.js";import*as u from"../select.js";import*as p from"../sortable.js";import*as f from"../../hooks/use-debounced-callback.js";import*as x from"../../lib/data-table.js";import*as h from"../../lib/data-table-config.js";import*as j from"../../lib/format.js";import*as v from"../../lib/id.js";import*as g from"../../lib/parsers.js";import*as b from"../../lib/utils.js";let w=["backspace","delete"];function C({table:i,debounceMs:s=300,throttleMs:o=50,shallow:d=!0,...c}){let u=r.useId(),h=r.useId(),j=r.useId(),[C,y]=r.useState(!1),S=r.useRef(null),I=r.useMemo(()=>i.getAllColumns().filter(e=>e.columnDef.enableColumnFilter),[i]),[D,F]=(0,t.useQueryState)("filters",(0,g.getFiltersStateParser)(I.map(e=>e.id)).withDefault([]).withOptions({clearOnDefault:!0,shallow:d,throttleMs:o})),k=(0,f.useDebouncedCallback)(F,s),[$,T]=(0,t.useQueryState)("joinOperator",(0,t.parseAsStringEnum)(["and","or"]).withDefault("and").withOptions({clearOnDefault:!0,shallow:d})),O=r.useCallback(()=>{let e=I[0];e&&k([...D,{id:e.id,value:"",variant:e.columnDef.meta?.variant??"text",operator:(0,x.getDefaultFilterOperator)(e.columnDef.meta?.variant??"text"),filterId:(0,v.generateId)({length:8})}])},[I,D,k]),B=r.useCallback((e,a)=>{k(t=>t.map(t=>t.filterId===e?{...t,...a}:t))},[k]),E=r.useCallback(e=>{F(D.filter(a=>a.filterId!==e)),requestAnimationFrame(()=>{S.current?.focus()})},[D,F]),z=r.useCallback(()=>{F(null),T("and")},[F,T]);r.useEffect(()=>{function e(e){!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&("f"!==e.key.toLowerCase()||e.ctrlKey||e.metaKey||e.shiftKey||(e.preventDefault(),y(!0)),"f"===e.key.toLowerCase()&&e.shiftKey&&D.length>0&&(e.preventDefault(),E(D[D.length-1]?.filterId??"")))}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[D,E]);let L=r.useCallback(e=>{w.includes(e.key.toLowerCase())&&D.length>0&&(e.preventDefault(),E(D[D.length-1]?.filterId??""))},[D,E]);return(0,e.jsxs)(p.Sortable,{value:D,onValueChange:F,getItemValue:e=>e.filterId,children:[(0,e.jsxs)(m.Popover,{open:C,onOpenChange:y,children:[(0,e.jsx)(m.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(n.Button,{variant:"outline",size:"sm",onKeyDown:L,children:[(0,e.jsx)(a.FunnelSimple,{}),"Filter",D.length>0&&(0,e.jsx)(l.Badge,{variant:"secondary",className:"h-[18.24px] rounded-[3.2px] px-[5.12px] font-mono font-normal text-[10.4px]",children:D.length})]})}),(0,e.jsxs)(m.PopoverContent,{"aria-describedby":j,"aria-labelledby":h,className:"flex w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] flex-col gap-3.5 p-4 sm:min-w-[380px]",...c,children:[(0,e.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,e.jsx)("h4",{id:h,className:"font-medium leading-none",children:D.length>0?"Filters":"No filters applied"}),(0,e.jsx)("p",{id:j,className:(0,b.cn)("text-muted-foreground text-sm",D.length>0&&"sr-only"),children:D.length>0?"Modify filters to refine your rows.":"Add filters to refine your rows."})]}),D.length>0?(0,e.jsx)(p.SortableContent,{asChild:!0,children:(0,e.jsx)("div",{role:"list",className:"flex max-h-[300px] flex-col gap-2 overflow-y-auto p-1",children:D.map((a,t)=>(0,e.jsx)(N,{filter:a,index:t,filterItemId:`${u}-filter-${a.filterId}`,joinOperator:$,setJoinOperator:T,columns:I,onFilterUpdate:B,onFilterRemove:E},a.filterId))})}):null,(0,e.jsxs)("div",{className:"flex w-full items-center gap-2",children:[(0,e.jsx)(n.Button,{size:"sm",className:"rounded",ref:S,onClick:O,children:"Add filter"}),D.length>0?(0,e.jsx)(n.Button,{variant:"outline",size:"sm",className:"rounded",onClick:z,children:"Reset filters"}):null]})]})]}),(0,e.jsx)(p.SortableOverlay,{children:(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("div",{className:"h-8 min-w-[72px] rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"h-8 w-32 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"h-8 w-32 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"h-8 min-w-36 flex-1 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"size-8 shrink-0 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"size-8 shrink-0 rounded-sm bg-primary/10"})]})})]})}function N({filter:t,index:l,filterItemId:f,joinOperator:v,setJoinOperator:g,columns:C,onFilterUpdate:N,onFilterRemove:y}){let[S,I]=r.useState(!1),[D,F]=r.useState(!1),[k,$]=r.useState(!1),T=C.find(e=>e.id===t.id);if(!T)return null;let O=`${f}-join-operator-listbox`,B=`${f}-field-listbox`,E=`${f}-operator-listbox`,z=`${f}-input`,L=T.columnDef.meta,A=(0,x.getFilterOperators)(t.variant),P=r.useCallback(e=>{!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&(S||D||k||w.includes(e.key.toLowerCase())&&(e.preventDefault(),y(t.filterId)))},[t.filterId,S,D,k,y]);return(0,e.jsx)(p.SortableItem,{value:t.filterId,asChild:!0,children:(0,e.jsxs)("div",{role:"listitem",id:f,tabIndex:-1,className:"flex items-center gap-2",onKeyDown:P,children:[(0,e.jsx)("div",{className:"min-w-[72px] text-center",children:0===l?(0,e.jsx)("span",{className:"text-muted-foreground text-sm",children:"Where"}):1===l?(0,e.jsxs)(u.Select,{value:v,onValueChange:e=>g(e),children:[(0,e.jsx)(u.SelectTrigger,{"aria-label":"Select join operator","aria-controls":O,className:"h-8 rounded lowercase [&[data-size]]:h-8",children:(0,e.jsx)(u.SelectValue,{placeholder:v})}),(0,e.jsx)(u.SelectContent,{id:O,position:"popper",className:"min-w-(--radix-select-trigger-width) lowercase",children:h.dataTableConfig.joinOperators.map(a=>(0,e.jsx)(u.SelectItem,{value:a,children:a},a))})]}):(0,e.jsx)("span",{className:"text-muted-foreground text-sm",children:v})}),(0,e.jsxs)(m.Popover,{open:S,onOpenChange:I,children:[(0,e.jsx)(m.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(n.Button,{role:"combobox","aria-controls":B,variant:"outline",size:"sm",className:"w-32 justify-between rounded font-normal",children:[(0,e.jsx)("span",{className:"truncate",children:C.find(e=>e.id===t.id)?.columnDef.meta?.label??"Select field"}),(0,e.jsx)(a.CaretUpDown,{className:"opacity-50"})]})}),(0,e.jsx)(m.PopoverContent,{id:B,align:"start",className:"w-40 origin-[var(--radix-popover-content-transform-origin)] p-0",children:(0,e.jsxs)(s.Command,{children:[(0,e.jsx)(s.CommandInput,{placeholder:"Search fields..."}),(0,e.jsxs)(s.CommandList,{children:[(0,e.jsx)(s.CommandEmpty,{children:"No fields found."}),(0,e.jsx)(s.CommandGroup,{children:C.map(r=>(0,e.jsxs)(s.CommandItem,{value:r.id,onSelect:e=>{N(t.filterId,{id:e,variant:r.columnDef.meta?.variant??"text",operator:(0,x.getDefaultFilterOperator)(r.columnDef.meta?.variant??"text"),value:""}),I(!1)},children:[(0,e.jsx)("span",{className:"truncate",children:r.columnDef.meta?.label}),(0,e.jsx)(a.Check,{className:(0,b.cn)("ml-auto",r.id===t.id?"opacity-100":"opacity-0")})]},r.id))})]})]})})]}),(0,e.jsxs)(u.Select,{open:D,onOpenChange:F,value:t.operator,onValueChange:e=>N(t.filterId,{operator:e,value:"isEmpty"===e||"isNotEmpty"===e?"":t.value}),children:[(0,e.jsx)(u.SelectTrigger,{"aria-controls":E,className:"h-8 w-32 rounded lowercase [&[data-size]]:h-8",children:(0,e.jsx)("div",{className:"truncate",children:(0,e.jsx)(u.SelectValue,{placeholder:t.operator})})}),(0,e.jsx)(u.SelectContent,{id:E,className:"origin-[var(--radix-select-content-transform-origin)]",children:A.map(a=>(0,e.jsx)(u.SelectItem,{value:a.value,className:"lowercase",children:a.label},a.value))})]}),(0,e.jsx)("div",{className:"min-w-36 flex-1",children:function({filter:t,inputId:r,column:l,columnMeta:s,onFilterUpdate:p,showValueSelector:f,setShowValueSelector:x}){if("isEmpty"===t.operator||"isNotEmpty"===t.operator)return(0,e.jsx)("div",{id:r,role:"status","aria-label":`${s?.label} filter is ${"isEmpty"===t.operator?"empty":"not empty"}`,"aria-live":"polite",className:"h-8 w-full rounded border bg-transparent dark:bg-input/30"});switch(t.variant){case"text":case"number":case"range":{if("range"===t.variant&&"isBetween"===t.operator||"isBetween"===t.operator)return(0,e.jsx)(o.DataTableRangeFilter,{filter:t,column:l,inputId:r,onFilterUpdate:p});let a="number"===t.variant||"range"===t.variant;return(0,e.jsx)(c.Input,{id:r,type:a?"number":t.variant,"aria-label":`${s?.label} filter value`,"aria-describedby":`${r}-description`,inputMode:a?"numeric":void 0,placeholder:s?.placeholder??"Enter a value...",className:"h-8 w-full rounded",defaultValue:"string"==typeof t.value?t.value:void 0,onChange:e=>p(t.filterId,{value:e.target.value})})}case"boolean":{if(Array.isArray(t.value))return null;let a=`${r}-listbox`;return(0,e.jsxs)(u.Select,{open:f,onOpenChange:x,value:t.value,onValueChange:e=>p(t.filterId,{value:e}),children:[(0,e.jsx)(u.SelectTrigger,{id:r,"aria-controls":a,"aria-label":`${s?.label} boolean filter`,className:"h-8 w-full rounded [&[data-size]]:h-8",children:(0,e.jsx)(u.SelectValue,{placeholder:t.value?"True":"False"})}),(0,e.jsxs)(u.SelectContent,{id:a,children:[(0,e.jsx)(u.SelectItem,{value:"true",children:"True"}),(0,e.jsx)(u.SelectItem,{value:"false",children:"False"})]})]})}case"select":case"multiSelect":{let a=`${r}-listbox`,l="multiSelect"===t.variant,i=l?Array.isArray(t.value)?t.value:[]:"string"==typeof t.value?t.value:void 0;return(0,e.jsxs)(d.Faceted,{open:f,onOpenChange:x,value:i,onValueChange:e=>{p(t.filterId,{value:e})},multiple:l,children:[(0,e.jsx)(d.FacetedTrigger,{asChild:!0,children:(0,e.jsx)(n.Button,{id:r,"aria-controls":a,"aria-label":`${s?.label} filter value${l?"s":""}`,variant:"outline",size:"sm",className:"w-full rounded font-normal",children:(0,e.jsx)(d.FacetedBadgeList,{options:s?.options,placeholder:s?.placeholder??`Select option${l?"s":""}...`})})}),(0,e.jsxs)(d.FacetedContent,{id:a,className:"w-[200px] origin-[var(--radix-popover-content-transform-origin)]",children:[(0,e.jsx)(d.FacetedInput,{"aria-label":`Search ${s?.label} options`,placeholder:s?.placeholder??"Search options..."}),(0,e.jsxs)(d.FacetedList,{children:[(0,e.jsx)(d.FacetedEmpty,{children:"No options found."}),(0,e.jsx)(d.FacetedGroup,{children:s?.options?.map(a=>(0,e.jsxs)(d.FacetedItem,{value:a.value,children:[a.icon&&(0,e.jsx)(a.icon,{}),(0,e.jsx)("span",{children:a.label}),a.count&&(0,e.jsx)("span",{className:"ml-auto font-mono text-xs",children:a.count})]},a.value))})]})]})]})}case"date":case"dateRange":{let l=`${r}-listbox`,o=Array.isArray(t.value)?t.value.filter(Boolean):[t.value,t.value].filter(Boolean),d="isBetween"===t.operator&&2===o.length?`${(0,j.formatDate)(new Date(Number(o[0])))} - ${(0,j.formatDate)(new Date(Number(o[1])))}`:o[0]?(0,j.formatDate)(new Date(Number(o[0]))):"Pick a date";return(0,e.jsxs)(m.Popover,{open:f,onOpenChange:x,children:[(0,e.jsx)(m.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(n.Button,{id:r,"aria-controls":l,"aria-label":`${s?.label} date filter`,variant:"outline",size:"sm",className:(0,b.cn)("w-full justify-start rounded text-left font-normal",!t.value&&"text-muted-foreground"),children:[(0,e.jsx)(a.Calendar,{}),(0,e.jsx)("span",{className:"truncate",children:d})]})}),(0,e.jsx)(m.PopoverContent,{id:l,align:"start",className:"w-auto origin-[var(--radix-popover-content-transform-origin)] p-0",children:"isBetween"===t.operator?(0,e.jsx)(i.Calendar,{"aria-label":`Select ${s?.label} date range`,mode:"range",initialFocus:!0,selected:2===o.length?{from:new Date(Number(o[0])),to:new Date(Number(o[1]))}:{from:new Date,to:new Date},onSelect:e=>{p(t.filterId,{value:e?[(e.from?.getTime()??"").toString(),(e.to?.getTime()??"").toString()]:[]})}}):(0,e.jsx)(i.Calendar,{"aria-label":`Select ${s?.label} date`,mode:"single",initialFocus:!0,selected:o[0]?new Date(Number(o[0])):void 0,onSelect:e=>{p(t.filterId,{value:(e?.getTime()??"").toString()})}})})]})}default:return null}}({filter:t,inputId:z,column:T,columnMeta:L,onFilterUpdate:N,showValueSelector:k,setShowValueSelector:$})}),(0,e.jsx)(n.Button,{"aria-controls":f,variant:"outline",size:"icon",className:"size-8 rounded",onClick:()=>y(t.filterId),children:(0,e.jsx)(a.Trash,{})}),(0,e.jsx)(p.SortableItemHandle,{asChild:!0,children:(0,e.jsx)(n.Button,{variant:"outline",size:"icon",className:"size-8 rounded",children:(0,e.jsx)(a.DotsSixVertical,{})})})]})})}export{C as DataTableFilterList};
2
+ import*as e from"react/jsx-runtime";import*as a from"@phosphor-icons/react";import*as t from"nuqs";import*as r from"react";import*as l from"../badge.js";import*as n from"../button.js";import*as s from"../calendar.js";import*as i from"../command.js";import*as o from"./data-table-range-filter.js";import*as d from"../faceted.js";import*as c from"../input.js";import*as m from"../popover.js";import*as u from"../select.js";import*as p from"../sortable.js";import*as f from"../../hooks/use-debounced-callback.js";import*as x from"../../lib/data-table.js";import*as h from"../../lib/data-table-config.js";import*as j from"../../lib/format.js";import*as v from"../../lib/id.js";import*as g from"../../lib/parsers.js";import*as b from"../../lib/utils.js";let w=["backspace","delete"];function y({table:s,debounceMs:i=300,throttleMs:o=50,shallow:d=!0,...c}){let u=r.useId(),h=r.useId(),j=r.useId(),[y,N]=r.useState(!1),S=r.useRef(null),I=r.useMemo(()=>s.getAllColumns().filter(e=>e.columnDef.enableColumnFilter),[s]),[D,F]=(0,t.useQueryState)("filters",(0,g.getFiltersStateParser)(I.map(e=>e.id)).withDefault([]).withOptions({clearOnDefault:!0,shallow:d,throttleMs:o})),k=(0,f.useDebouncedCallback)(F,i),[$,T]=(0,t.useQueryState)("joinOperator",(0,t.parseAsStringEnum)(["and","or"]).withDefault("and").withOptions({clearOnDefault:!0,shallow:d})),O=r.useCallback(()=>{let e=I[0];e&&k([...D,{id:e.id,value:"",variant:e.columnDef.meta?.variant??"text",operator:(0,x.getDefaultFilterOperator)(e.columnDef.meta?.variant??"text"),filterId:(0,v.generateId)({length:8})}])},[I,D,k]),B=r.useCallback((e,a)=>{k(t=>t.map(t=>t.filterId===e?{...t,...a}:t))},[k]),E=r.useCallback(e=>{F(D.filter(a=>a.filterId!==e)),requestAnimationFrame(()=>{S.current?.focus()})},[D,F]),z=r.useCallback(()=>{F(null),T("and")},[F,T]);r.useEffect(()=>{function e(e){!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&("f"!==e.key.toLowerCase()||e.ctrlKey||e.metaKey||e.shiftKey||(e.preventDefault(),N(!0)),"f"===e.key.toLowerCase()&&e.shiftKey&&D.length>0&&(e.preventDefault(),E(D[D.length-1]?.filterId??"")))}return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[D,E]);let L=r.useCallback(e=>{w.includes(e.key.toLowerCase())&&D.length>0&&(e.preventDefault(),E(D[D.length-1]?.filterId??""))},[D,E]);return(0,e.jsxs)(p.Sortable,{value:D,onValueChange:F,getItemValue:e=>e.filterId,children:[(0,e.jsxs)(m.Popover,{open:y,onOpenChange:N,children:[(0,e.jsx)(m.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(n.Button,{variant:"secondary",size:"xs",onKeyDown:L,children:[(0,e.jsx)(a.FunnelSimple,{weight:"bold"}),"Filtro",D.length>0&&(0,e.jsx)(l.Badge,{variant:"secondary",className:"h-[18.24px] rounded-[3.2px] px-[5.12px] font-mono font-normal text-[10.4px]",children:D.length})]})}),(0,e.jsxs)(m.PopoverContent,{"aria-describedby":j,"aria-labelledby":h,className:"flex w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] flex-col gap-3.5 p-4 sm:min-w-[380px]",...c,children:[(0,e.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,e.jsx)("h4",{id:h,className:"font-medium leading-none",children:D.length>0?"Filtros":"Nenhum filtro aplicado"}),(0,e.jsx)("p",{id:j,className:(0,b.cn)("text-gray-400 text-sm",D.length>0&&"sr-only"),children:D.length>0?"Modifique os filtros para filtrar suas linhas.":"Adicione filtros para filtrar suas linhas."})]}),D.length>0?(0,e.jsx)(p.SortableContent,{asChild:!0,children:(0,e.jsx)("div",{role:"list",className:"flex max-h-[300px] flex-col gap-2 overflow-y-auto p-1",children:D.map((a,t)=>(0,e.jsx)(C,{filter:a,index:t,filterItemId:`${u}-filter-${a.filterId}`,joinOperator:$,setJoinOperator:T,columns:I,onFilterUpdate:B,onFilterRemove:E},a.filterId))})}):null,(0,e.jsxs)("div",{className:"flex w-full items-center gap-2",children:[(0,e.jsx)(n.Button,{size:"sm",className:"rounded",ref:S,onClick:O,children:"Add filter"}),D.length>0?(0,e.jsx)(n.Button,{variant:"outline",size:"sm",className:"rounded",onClick:z,children:"Reset filters"}):null]})]})]}),(0,e.jsx)(p.SortableOverlay,{children:(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("div",{className:"h-8 min-w-[72px] rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"h-8 w-32 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"h-8 w-32 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"h-8 min-w-36 flex-1 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"size-8 shrink-0 rounded-sm bg-primary/10"}),(0,e.jsx)("div",{className:"size-8 shrink-0 rounded-sm bg-primary/10"})]})})]})}function C({filter:t,index:l,filterItemId:f,joinOperator:v,setJoinOperator:g,columns:y,onFilterUpdate:C,onFilterRemove:N}){let[S,I]=r.useState(!1),[D,F]=r.useState(!1),[k,$]=r.useState(!1),T=y.find(e=>e.id===t.id);if(!T)return null;let O=`${f}-join-operator-listbox`,B=`${f}-field-listbox`,E=`${f}-operator-listbox`,z=`${f}-input`,L=T.columnDef.meta,A=(0,x.getFilterOperators)(t.variant),V=r.useCallback(e=>{!(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)&&(S||D||k||w.includes(e.key.toLowerCase())&&(e.preventDefault(),N(t.filterId)))},[t.filterId,S,D,k,N]);return(0,e.jsx)(p.SortableItem,{value:t.filterId,asChild:!0,children:(0,e.jsxs)("div",{role:"listitem",id:f,tabIndex:-1,className:"flex items-center gap-2",onKeyDown:V,children:[(0,e.jsx)("div",{className:"min-w-[72px] text-center",children:0===l?(0,e.jsx)("span",{className:"text-muted-foreground text-sm",children:"Onde"}):1===l?(0,e.jsxs)(u.Select,{value:v,onValueChange:e=>g(e),children:[(0,e.jsx)(u.SelectTrigger,{"aria-label":"Select join operator","aria-controls":O,className:"h-8 rounded lowercase [&[data-size]]:h-8",children:(0,e.jsx)(u.SelectValue,{placeholder:v})}),(0,e.jsx)(u.SelectContent,{id:O,position:"popper",className:"min-w-(--radix-select-trigger-width) lowercase",children:h.dataTableConfig.joinOperators.map(a=>(0,e.jsx)(u.SelectItem,{value:a,children:a},a))})]}):(0,e.jsx)("span",{className:"text-muted-foreground text-sm",children:v})}),(0,e.jsxs)(m.Popover,{open:S,onOpenChange:I,children:[(0,e.jsx)(m.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(n.Button,{role:"combobox","aria-controls":B,variant:"secondary",size:"xs",className:"w-32 justify-between rounded font-normal",children:[(0,e.jsx)("span",{className:"truncate",children:y.find(e=>e.id===t.id)?.columnDef.meta?.label??"Selecione o campo"}),(0,e.jsx)(a.CaretUpDown,{className:"opacity-50"})]})}),(0,e.jsx)(m.PopoverContent,{id:B,align:"start",className:"w-40 origin-[var(--radix-popover-content-transform-origin)] p-0",children:(0,e.jsxs)(i.Command,{children:[(0,e.jsx)(i.CommandInput,{placeholder:"Buscar campo..."}),(0,e.jsxs)(i.CommandList,{children:[(0,e.jsx)(i.CommandEmpty,{children:"Nenhum campo encontrado."}),(0,e.jsx)(i.CommandGroup,{children:y.map(r=>(0,e.jsxs)(i.CommandItem,{value:r.id,onSelect:e=>{C(t.filterId,{id:e,variant:r.columnDef.meta?.variant??"text",operator:(0,x.getDefaultFilterOperator)(r.columnDef.meta?.variant??"text"),value:""}),I(!1)},children:[(0,e.jsx)("span",{className:"truncate",children:r.columnDef.meta?.label}),(0,e.jsx)(a.Check,{className:(0,b.cn)("ml-auto",r.id===t.id?"opacity-100":"opacity-0")})]},r.id))})]})]})})]}),(0,e.jsxs)(u.Select,{open:D,onOpenChange:F,value:t.operator,onValueChange:e=>C(t.filterId,{operator:e,value:"isEmpty"===e||"isNotEmpty"===e?"":t.value}),children:[(0,e.jsx)(u.SelectTrigger,{"aria-controls":E,className:"h-8 w-32 rounded lowercase [&[data-size]]:h-8",children:(0,e.jsx)("div",{className:"truncate",children:(0,e.jsx)(u.SelectValue,{placeholder:t.operator})})}),(0,e.jsx)(u.SelectContent,{id:E,className:"origin-[var(--radix-select-content-transform-origin)]",children:A.map(a=>(0,e.jsx)(u.SelectItem,{value:a.value,className:"lowercase",children:a.label},a.value))})]}),(0,e.jsx)("div",{className:"min-w-36 flex-1",children:function({filter:t,inputId:r,column:l,columnMeta:i,onFilterUpdate:p,showValueSelector:f,setShowValueSelector:x}){if("isEmpty"===t.operator||"isNotEmpty"===t.operator)return(0,e.jsx)("div",{id:r,role:"status","aria-label":`${i?.label} filter is ${"isEmpty"===t.operator?"empty":"not empty"}`,"aria-live":"polite",className:"h-8 w-full rounded border bg-transparent dark:bg-input/30"});switch(t.variant){case"text":case"number":case"range":{if("range"===t.variant&&"isBetween"===t.operator||"isBetween"===t.operator)return(0,e.jsx)(o.DataTableRangeFilter,{filter:t,column:l,inputId:r,onFilterUpdate:p});let a="number"===t.variant||"range"===t.variant;return(0,e.jsx)(c.Input,{id:r,type:a?"number":t.variant,"aria-label":`${i?.label} filter value`,"aria-describedby":`${r}-description`,inputMode:a?"numeric":void 0,placeholder:i?.placeholder??"Enter a value...",className:"h-8 w-full rounded",defaultValue:"string"==typeof t.value?t.value:void 0,onChange:e=>p(t.filterId,{value:e.target.value})})}case"boolean":{if(Array.isArray(t.value))return null;let a=`${r}-listbox`;return(0,e.jsxs)(u.Select,{open:f,onOpenChange:x,value:t.value,onValueChange:e=>p(t.filterId,{value:e}),children:[(0,e.jsx)(u.SelectTrigger,{id:r,"aria-controls":a,"aria-label":`${i?.label} boolean filter`,className:"h-8 w-full rounded [&[data-size]]:h-8",children:(0,e.jsx)(u.SelectValue,{placeholder:t.value?"True":"False"})}),(0,e.jsxs)(u.SelectContent,{id:a,children:[(0,e.jsx)(u.SelectItem,{value:"true",children:"True"}),(0,e.jsx)(u.SelectItem,{value:"false",children:"False"})]})]})}case"select":case"multiSelect":{let a=`${r}-listbox`,l="multiSelect"===t.variant,s=l?Array.isArray(t.value)?t.value:[]:"string"==typeof t.value?t.value:void 0;return(0,e.jsxs)(d.Faceted,{open:f,onOpenChange:x,value:s,onValueChange:e=>{p(t.filterId,{value:e})},multiple:l,children:[(0,e.jsx)(d.FacetedTrigger,{asChild:!0,children:(0,e.jsx)(n.Button,{id:r,"aria-controls":a,"aria-label":`${i?.label} filter value${l?"s":""}`,variant:"outline",size:"sm",className:"w-full rounded font-normal",children:(0,e.jsx)(d.FacetedBadgeList,{options:i?.options,placeholder:i?.placeholder??`Select option${l?"s":""}...`})})}),(0,e.jsxs)(d.FacetedContent,{id:a,className:"w-[200px] origin-[var(--radix-popover-content-transform-origin)]",children:[(0,e.jsx)(d.FacetedInput,{"aria-label":`Search ${i?.label} options`,placeholder:i?.placeholder??"Search options..."}),(0,e.jsxs)(d.FacetedList,{children:[(0,e.jsx)(d.FacetedEmpty,{children:"No options found."}),(0,e.jsx)(d.FacetedGroup,{children:i?.options?.map(a=>(0,e.jsxs)(d.FacetedItem,{value:a.value,children:[a.icon&&(0,e.jsx)(a.icon,{}),(0,e.jsx)("span",{children:a.label}),a.count&&(0,e.jsx)("span",{className:"ml-auto font-mono text-xs",children:a.count})]},a.value))})]})]})]})}case"date":case"dateRange":{let l=`${r}-listbox`,o=Array.isArray(t.value)?t.value.filter(Boolean):[t.value,t.value].filter(Boolean),d="isBetween"===t.operator&&2===o.length?`${(0,j.formatDate)(new Date(Number(o[0])))} - ${(0,j.formatDate)(new Date(Number(o[1])))}`:o[0]?(0,j.formatDate)(new Date(Number(o[0]))):"Escolha uma data";return(0,e.jsxs)(m.Popover,{open:f,onOpenChange:x,children:[(0,e.jsx)(m.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(n.Button,{id:r,"aria-controls":l,"aria-label":`${i?.label} date filter`,variant:"secondary",size:"xs",className:(0,b.cn)("w-full justify-start rounded text-left font-normal",!t.value&&"text-gray-400"),children:[(0,e.jsx)(a.Calendar,{}),(0,e.jsx)("span",{className:"truncate",children:d})]})}),(0,e.jsx)(m.PopoverContent,{id:l,align:"start",className:"w-auto origin-[var(--radix-popover-content-transform-origin)] p-0",children:"isBetween"===t.operator?(0,e.jsx)(s.Calendar,{"aria-label":`Select ${i?.label} date range`,mode:"range",initialFocus:!0,selected:2===o.length?{from:new Date(Number(o[0])),to:new Date(Number(o[1]))}:{from:new Date,to:new Date},onSelect:e=>{p(t.filterId,{value:e?[(e.from?.getTime()??"").toString(),(e.to?.getTime()??"").toString()]:[]})}}):(0,e.jsx)(s.Calendar,{"aria-label":`Select ${i?.label} date`,mode:"single",initialFocus:!0,selected:o[0]?new Date(Number(o[0])):void 0,onSelect:e=>{p(t.filterId,{value:(e?.getTime()??"").toString()})}})})]})}default:return null}}({filter:t,inputId:z,column:T,columnMeta:L,onFilterUpdate:C,showValueSelector:k,setShowValueSelector:$})}),(0,e.jsx)(n.Button,{"aria-controls":f,variant:"secondary",size:"icon",className:"size-8 rounded",onClick:()=>N(t.filterId),children:(0,e.jsx)(a.Trash,{weight:"bold"})}),(0,e.jsx)(p.SortableItemHandle,{asChild:!0,children:(0,e.jsx)(n.Button,{variant:"secondary",size:"icon",className:"size-8 rounded",children:(0,e.jsx)(a.DotsSixVertical,{weight:"bold"})})})]})})}export{y as DataTableFilterList};
3
3
  //# sourceMappingURL=data-table-filter-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components\\data-table\\data-table-filter-list.js","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-filter-list.tsx"],"sourcesContent":["\r\n\r\nimport {\r\n 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":["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","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","Trash","SortableItemHandle","DotsSixVertical"],"mappings":"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"}
1
+ {"version":3,"file":"components\\data-table\\data-table-filter-list.js","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-filter-list.tsx"],"sourcesContent":["\r\n\r\nimport {\r\n 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=\"secondary\" size=\"xs\" onKeyDown={onTriggerKeyDown}>\r\n <FunnelSimple weight=\"bold\" />\r\n Filtro\r\n {filters.length > 0 && (\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"h-[18.24px] rounded-[3.2px] px-[5.12px] font-mono font-normal text-[10.4px]\"\r\n >\r\n {filters.length}\r\n </Badge>\r\n )}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n aria-describedby={descriptionId}\r\n aria-labelledby={labelId}\r\n className=\"flex w-full max-w-[var(--radix-popover-content-available-width)] origin-[var(--radix-popover-content-transform-origin)] flex-col gap-3.5 p-4 sm:min-w-[380px]\"\r\n {...props}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <h4 id={labelId} className=\"font-medium leading-none\">\r\n {filters.length > 0 ? 'Filtros' : 'Nenhum filtro aplicado'}\r\n </h4>\r\n <p\r\n id={descriptionId}\r\n className={cn(\r\n 'text-gray-400 text-sm',\r\n filters.length > 0 && 'sr-only'\r\n )}\r\n >\r\n {filters.length > 0\r\n ? 'Modifique os filtros para filtrar suas linhas.'\r\n : 'Adicione filtros para filtrar suas linhas.'}\r\n </p>\r\n </div>\r\n {filters.length > 0 ? (\r\n <SortableContent asChild>\r\n <div\r\n role=\"list\"\r\n className=\"flex max-h-[300px] flex-col gap-2 overflow-y-auto p-1\"\r\n >\r\n {filters.map((filter, index) => (\r\n <DataTableFilterItem<TData>\r\n key={filter.filterId}\r\n filter={filter}\r\n index={index}\r\n filterItemId={`${id}-filter-${filter.filterId}`}\r\n joinOperator={joinOperator}\r\n setJoinOperator={setJoinOperator}\r\n columns={columns}\r\n onFilterUpdate={onFilterUpdate}\r\n onFilterRemove={onFilterRemove}\r\n />\r\n ))}\r\n </div>\r\n </SortableContent>\r\n ) : null}\r\n <div className=\"flex w-full items-center gap-2\">\r\n <Button\r\n size=\"sm\"\r\n className=\"rounded\"\r\n ref={addButtonRef}\r\n onClick={onFilterAdd}\r\n >\r\n 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\">Onde</span>\r\n ) : index === 1 ? (\r\n <Select\r\n value={joinOperator}\r\n onValueChange={(value: JoinOperator) => setJoinOperator(value)}\r\n >\r\n <SelectTrigger\r\n aria-label=\"Select join operator\"\r\n aria-controls={joinOperatorListboxId}\r\n className=\"h-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=\"secondary\"\r\n size=\"xs\"\r\n className=\"w-32 justify-between rounded font-normal\"\r\n >\r\n <span className=\"truncate\">\r\n {columns.find(column => column.id === filter.id)?.columnDef.meta\r\n ?.label ?? 'Selecione o campo'}\r\n </span>\r\n <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=\"Buscar campo...\" />\r\n <CommandList>\r\n <CommandEmpty>Nenhum campo encontrado.</CommandEmpty>\r\n <CommandGroup>\r\n {columns.map(column => (\r\n <CommandItem\r\n key={column.id}\r\n value={column.id}\r\n onSelect={value => {\r\n onFilterUpdate(filter.filterId, {\r\n id: value as Extract<keyof TData, string>,\r\n variant: column.columnDef.meta?.variant ?? 'text',\r\n operator: getDefaultFilterOperator(\r\n column.columnDef.meta?.variant ?? 'text'\r\n ),\r\n value: '',\r\n })\r\n\r\n setShowFieldSelector(false)\r\n }}\r\n >\r\n <span className=\"truncate\">\r\n {column.columnDef.meta?.label}\r\n </span>\r\n <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=\"secondary\"\r\n size=\"icon\"\r\n className=\"size-8 rounded\"\r\n onClick={() => onFilterRemove(filter.filterId)}\r\n >\r\n <Trash weight=\"bold\" />\r\n </Button>\r\n <SortableItemHandle asChild>\r\n <Button variant=\"secondary\" size=\"icon\" className=\"size-8 rounded\">\r\n <DotsSixVertical weight=\"bold\" />\r\n </Button>\r\n </SortableItemHandle>\r\n </div>\r\n </SortableItem>\r\n )\r\n}\r\n\r\nfunction onFilterInputRender<TData>({\r\n filter,\r\n inputId,\r\n column,\r\n columnMeta,\r\n onFilterUpdate,\r\n showValueSelector,\r\n setShowValueSelector,\r\n}: {\r\n filter: ExtendedColumnFilter<TData>\r\n inputId: string\r\n column: Column<TData>\r\n columnMeta?: ColumnMeta<TData, unknown>\r\n onFilterUpdate: (\r\n filterId: string,\r\n updates: Partial<Omit<ExtendedColumnFilter<TData>, 'filterId'>>\r\n ) => void\r\n showValueSelector: boolean\r\n setShowValueSelector: (value: boolean) => void\r\n}) {\r\n if (filter.operator === 'isEmpty' || filter.operator === 'isNotEmpty') {\r\n return (\r\n <div\r\n id={inputId}\r\n role=\"status\"\r\n aria-label={`${columnMeta?.label} filter is ${\r\n filter.operator === 'isEmpty' ? 'empty' : 'not empty'\r\n }`}\r\n aria-live=\"polite\"\r\n className=\"h-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 : 'Escolha uma data'\r\n\r\n return (\r\n <Popover open={showValueSelector} onOpenChange={setShowValueSelector}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n id={inputId}\r\n aria-controls={inputListboxId}\r\n aria-label={`${columnMeta?.label} date filter`}\r\n variant=\"secondary\"\r\n size=\"xs\"\r\n className={cn(\r\n 'w-full justify-start rounded text-left font-normal',\r\n !filter.value && 'text-gray-400'\r\n )}\r\n >\r\n <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":["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","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","Trash","SortableItemHandle","DotsSixVertical"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  'use client'
2
- import*as o from"react/jsx-runtime";import*as s from"@phosphor-icons/react";import*as e from"../button.js";import*as a from"../command.js";import*as r from"../popover.js";import*as i from"../../lib/utils.js";import*as l from"react";function n({table:n}){let t=l.useMemo(()=>n.getAllColumns().filter(o=>void 0!==o.accessorFn&&o.getCanHide()),[n]);return(0,o.jsxs)(r.Popover,{children:[(0,o.jsx)(r.PopoverTrigger,{asChild:!0,children:(0,o.jsxs)(e.Button,{"aria-label":"Toggle columns",role:"combobox",variant:"secondary",size:"xs",className:"ml-auto hidden lg:flex",children:[(0,o.jsx)(s.SlidersHorizontal,{}),"Ver",(0,o.jsx)(s.CaretUpDown,{className:"ml-auto opacity-50"})]})}),(0,o.jsx)(r.PopoverContent,{align:"end",className:"w-44 p-0",children:(0,o.jsxs)(a.Command,{children:[(0,o.jsx)(a.CommandInput,{placeholder:"Buscar colunas..."}),(0,o.jsxs)(a.CommandList,{children:[(0,o.jsx)(a.CommandEmpty,{children:"No columns found."}),(0,o.jsx)(a.CommandGroup,{children:t.map(e=>(0,o.jsxs)(a.CommandItem,{onSelect:()=>e.toggleVisibility(!e.getIsVisible()),children:[(0,o.jsx)("span",{className:"truncate",children:e.columnDef.meta?.label??e.id}),(0,o.jsx)(s.Check,{className:(0,i.cn)("ml-auto size-4 shrink-0",e.getIsVisible()?"opacity-100":"opacity-0")})]},e.id))})]})]})})]})}export{n as DataTableViewOptions};
2
+ import*as e from"react/jsx-runtime";import*as o from"@phosphor-icons/react";import*as s from"../button.js";import*as a from"../command.js";import*as r from"../popover.js";import*as i from"../../lib/utils.js";import*as n from"react";function l({table:l}){let t=n.useMemo(()=>l.getAllColumns().filter(e=>void 0!==e.accessorFn&&e.getCanHide()),[l]);return(0,e.jsxs)(r.Popover,{children:[(0,e.jsx)(r.PopoverTrigger,{asChild:!0,children:(0,e.jsxs)(s.Button,{"aria-label":"Toggle columns",role:"combobox",variant:"secondary",size:"xs",className:"ml-auto hidden lg:flex",children:[(0,e.jsx)(o.SlidersHorizontal,{}),"Ver",(0,e.jsx)(o.CaretUpDown,{className:"ml-auto opacity-50"})]})}),(0,e.jsx)(r.PopoverContent,{align:"end",className:"w-44 p-0",children:(0,e.jsxs)(a.Command,{children:[(0,e.jsx)(a.CommandInput,{placeholder:"Buscar colunas..."}),(0,e.jsxs)(a.CommandList,{children:[(0,e.jsx)(a.CommandEmpty,{children:"Nenhuma coluna encontrada."}),(0,e.jsx)(a.CommandGroup,{children:t.map(s=>(0,e.jsxs)(a.CommandItem,{onSelect:()=>s.toggleVisibility(!s.getIsVisible()),children:[(0,e.jsx)("span",{className:"truncate",children:s.columnDef.meta?.label??s.id}),(0,e.jsx)(o.Check,{className:(0,i.cn)("ml-auto size-4 shrink-0",s.getIsVisible()?"opacity-100":"opacity-0")})]},s.id))})]})]})})]})}export{l as DataTableViewOptions};
3
3
  //# sourceMappingURL=data-table-view-options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components\\data-table\\data-table-view-options.js","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-view-options.tsx"],"sourcesContent":["\r\n\r\nimport { CaretUpDown, Check, SlidersHorizontal } from '@phosphor-icons/react'\r\nimport type { Table } from '@tanstack/react-table'\r\n\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} from '@/components/command'\r\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'\r\nimport { cn } from '@/lib/utils'\r\nimport * as React from 'react'\r\n\r\ninterface DataTableViewOptionsProps<TData> {\r\n table: Table<TData>\r\n}\r\n\r\nexport function DataTableViewOptions<TData>({\r\n table,\r\n}: DataTableViewOptionsProps<TData>) {\r\n const columns = React.useMemo(\r\n () =>\r\n table\r\n .getAllColumns()\r\n .filter(\r\n column =>\r\n typeof column.accessorFn !== 'undefined' && column.getCanHide()\r\n ),\r\n [table]\r\n )\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n aria-label=\"Toggle columns\"\r\n role=\"combobox\"\r\n variant=\"secondary\"\r\n size=\"xs\"\r\n className=\"ml-auto hidden lg:flex\"\r\n >\r\n <SlidersHorizontal />\r\n Ver\r\n <CaretUpDown className=\"ml-auto opacity-50\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className=\"w-44 p-0\">\r\n <Command>\r\n <CommandInput placeholder=\"Buscar colunas...\" />\r\n <CommandList>\r\n <CommandEmpty>No columns found.</CommandEmpty>\r\n <CommandGroup>\r\n {columns.map(column => (\r\n <CommandItem\r\n key={column.id}\r\n onSelect={() =>\r\n column.toggleVisibility(!column.getIsVisible())\r\n }\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 size-4 shrink-0',\r\n column.getIsVisible() ? '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 )\r\n}\r\n"],"names":["DataTableViewOptions","table","columns","React","column","Popover","PopoverTrigger","Button","SlidersHorizontal","CaretUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Check","cn"],"mappings":";wOAsBO,SAASA,EAA4B,CAC1CC,MAAAA,CAAK,CAC4B,EACjC,IAAMC,EAAUC,EAAAA,OAAa,CAC3B,IACEF,EACG,aAAa,GACb,MAAM,CACLG,GACE,SAAOA,EAAO,UAAU,EAAoBA,EAAO,UAAU,IAErE,CAACH,EAAM,EAGT,MACE,WAACI,EAAAA,OAAOA,CAAAA,C,UACN,UAACC,EAAAA,cAAcA,CAAAA,CAAC,QAAO,G,SACrB,WAACC,EAAAA,MAAMA,CAAAA,CACL,aAAW,iBACX,KAAK,WACL,QAAQ,YACR,KAAK,KACL,UAAU,yB,UAEV,UAACC,EAAAA,iBAAiBA,CAAAA,CAAAA,GAAG,MAErB,UAACC,EAAAA,WAAWA,CAAAA,CAAC,UAAU,oB,QAG3B,UAACC,EAAAA,cAAcA,CAAAA,CAAC,MAAM,MAAM,UAAU,W,SACpC,WAACC,EAAAA,OAAOA,CAAAA,C,UACN,UAACC,EAAAA,YAAYA,CAAAA,CAAC,YAAY,mB,GAC1B,WAACC,EAAAA,WAAWA,CAAAA,C,UACV,UAACC,EAAAA,YAAYA,CAAAA,C,SAAC,mB,GACd,UAACC,EAAAA,YAAYA,CAAAA,C,SACVb,EAAQ,GAAG,CAACE,GACX,WAACY,EAAAA,WAAWA,CAAAA,CAEV,SAAU,IACRZ,EAAO,gBAAgB,CAAC,CAACA,EAAO,YAAY,I,UAG9C,UAAC,QAAK,UAAU,W,SACbA,EAAO,SAAS,CAAC,IAAI,EAAE,OAASA,EAAO,EAAE,GAE5C,UAACa,EAAAA,KAAKA,CAAAA,CACJ,UAAWC,GAAAA,EAAAA,EAAAA,EACT,0BACAd,EAAO,YAAY,GAAK,cAAgB,Y,KAXvCA,EAAO,EAAE,E,aAsBhC,Q"}
1
+ {"version":3,"file":"components\\data-table\\data-table-view-options.js","sources":["webpack://@gbmtech/aurora-ui/./src/components/data-table/data-table-view-options.tsx"],"sourcesContent":["\r\n\r\nimport { CaretUpDown, Check, SlidersHorizontal } from '@phosphor-icons/react'\r\nimport type { Table } from '@tanstack/react-table'\r\n\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} from '@/components/command'\r\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/popover'\r\nimport { cn } from '@/lib/utils'\r\nimport * as React from 'react'\r\n\r\ninterface DataTableViewOptionsProps<TData> {\r\n table: Table<TData>\r\n}\r\n\r\nexport function DataTableViewOptions<TData>({\r\n table,\r\n}: DataTableViewOptionsProps<TData>) {\r\n const columns = React.useMemo(\r\n () =>\r\n table\r\n .getAllColumns()\r\n .filter(\r\n column =>\r\n typeof column.accessorFn !== 'undefined' && column.getCanHide()\r\n ),\r\n [table]\r\n )\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <Button\r\n aria-label=\"Toggle columns\"\r\n role=\"combobox\"\r\n variant=\"secondary\"\r\n size=\"xs\"\r\n className=\"ml-auto hidden lg:flex\"\r\n >\r\n <SlidersHorizontal />\r\n Ver\r\n <CaretUpDown className=\"ml-auto opacity-50\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className=\"w-44 p-0\">\r\n <Command>\r\n <CommandInput placeholder=\"Buscar colunas...\" />\r\n <CommandList>\r\n <CommandEmpty>Nenhuma coluna encontrada.</CommandEmpty>\r\n <CommandGroup>\r\n {columns.map(column => (\r\n <CommandItem\r\n key={column.id}\r\n onSelect={() =>\r\n column.toggleVisibility(!column.getIsVisible())\r\n }\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 size-4 shrink-0',\r\n column.getIsVisible() ? '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 )\r\n}\r\n"],"names":["DataTableViewOptions","table","columns","React","column","Popover","PopoverTrigger","Button","SlidersHorizontal","CaretUpDown","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Check","cn"],"mappings":";wOAsBO,SAASA,EAA4B,CAC1CC,MAAAA,CAAK,CAC4B,EACjC,IAAMC,EAAUC,EAAAA,OAAa,CAC3B,IACEF,EACG,aAAa,GACb,MAAM,CACLG,GACE,SAAOA,EAAO,UAAU,EAAoBA,EAAO,UAAU,IAErE,CAACH,EAAM,EAGT,MACE,WAACI,EAAAA,OAAOA,CAAAA,C,UACN,UAACC,EAAAA,cAAcA,CAAAA,CAAC,QAAO,G,SACrB,WAACC,EAAAA,MAAMA,CAAAA,CACL,aAAW,iBACX,KAAK,WACL,QAAQ,YACR,KAAK,KACL,UAAU,yB,UAEV,UAACC,EAAAA,iBAAiBA,CAAAA,CAAAA,GAAG,MAErB,UAACC,EAAAA,WAAWA,CAAAA,CAAC,UAAU,oB,QAG3B,UAACC,EAAAA,cAAcA,CAAAA,CAAC,MAAM,MAAM,UAAU,W,SACpC,WAACC,EAAAA,OAAOA,CAAAA,C,UACN,UAACC,EAAAA,YAAYA,CAAAA,CAAC,YAAY,mB,GAC1B,WAACC,EAAAA,WAAWA,CAAAA,C,UACV,UAACC,EAAAA,YAAYA,CAAAA,C,SAAC,4B,GACd,UAACC,EAAAA,YAAYA,CAAAA,C,SACVb,EAAQ,GAAG,CAACE,GACX,WAACY,EAAAA,WAAWA,CAAAA,CAEV,SAAU,IACRZ,EAAO,gBAAgB,CAAC,CAACA,EAAO,YAAY,I,UAG9C,UAAC,QAAK,UAAU,W,SACbA,EAAO,SAAS,CAAC,IAAI,EAAE,OAASA,EAAO,EAAE,GAE5C,UAACa,EAAAA,KAAKA,CAAAA,CACJ,UAAWC,GAAAA,EAAAA,EAAAA,EACT,0BACAd,EAAO,YAAY,GAAK,cAAgB,Y,KAXvCA,EAAO,EAAE,E,aAsBhC,Q"}
@@ -1 +1 @@
1
- import*as t from"./data-table-date-filter.js";import*as a from"./data-table-faceted-filter.js";import*as e from"./data-table-pagination.js";import*as o from"./data-table-slider-filter.js";import*as r from"./data-table-view-options.js";export*from"./data-table-action-bar.js";export*from"./data-table-advanced-toolbar.js";export*from"./data-table-column-header.js";export*from"./data-table-filter-list.js";export*from"./data-table-filter-menu.js";export*from"./data-table-range-filter.js";export*from"./data-table-skeleton.js";export*from"./data-table-sort-list.js";export*from"./data-table-toolbar.js";export*from"./data-table.js";var n={"@/components/data-table/data-table-date-filter":function(a){a.exports=t},"@/components/data-table/data-table-faceted-filter":function(t){t.exports=a},"@/components/data-table/data-table-pagination":function(t){t.exports=e},"@/components/data-table/data-table-slider-filter":function(t){t.exports=o},"@/components/data-table/data-table-view-options":function(t){t.exports=r}},d={};function l(t){var a=d[t];if(void 0!==a)return a.exports;var e=d[t]={exports:{}};return n[t](e,e.exports,l),e.exports}l.d=(t,a)=>{for(var e in a)l.o(a,e)&&!l.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:a[e]})},l.o=(t,a)=>Object.prototype.hasOwnProperty.call(t,a),l.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var i={};l.r(i);var f=l("@/components/data-table/data-table-date-filter"),b={};for(var s in f)"default"!==s&&(b[s]=(function(t){return f[t]}).bind(0,s));l.d(i,b);var p=l("@/components/data-table/data-table-faceted-filter"),b={};for(var s in p)"default"!==s&&(b[s]=(function(t){return p[t]}).bind(0,s));l.d(i,b);var m=l("@/components/data-table/data-table-pagination"),b={};for(var s in m)"default"!==s&&(b[s]=(function(t){return m[t]}).bind(0,s));l.d(i,b);var c=l("@/components/data-table/data-table-slider-filter"),b={};for(var s in c)"default"!==s&&(b[s]=(function(t){return c[t]}).bind(0,s));l.d(i,b);var u=l("@/components/data-table/data-table-view-options"),b={};for(var s in u)"default"!==s&&(b[s]=(function(t){return u[t]}).bind(0,s));l.d(i,b);
1
+ import*as t from"./data-table-view-options.js";export*from"./data-table-action-bar.js";export*from"./data-table-advanced-toolbar.js";export*from"./data-table-column-header.js";export*from"./data-table-date-filter.js";export*from"./data-table-faceted-filter.js";export*from"./data-table-filter-list.js";export*from"./data-table-filter-menu.js";export*from"./data-table-pagination.js";export*from"./data-table-range-filter.js";export*from"./data-table-skeleton.js";export*from"./data-table-slider-filter.js";export*from"./data-table-sort-list.js";export*from"./data-table-toolbar.js";export*from"./data-table.js";var a={"@/components/data-table/data-table-view-options":function(a){a.exports=t}},e={};!function t(o){var r=e[o];if(void 0!==r)return r.exports;var l=e[o]={exports:{}};return a[o](l,l.exports,t),l.exports}("@/components/data-table/data-table-view-options");
@@ -1,3 +1,3 @@
1
1
  'use client'
2
- import*as e from"@tanstack/react-table";import*as t from"nuqs";import*as a from"react";import*as o from"./use-debounced-callback.js";import*as i from"../lib/parsers.js";function l(l){let{columns:n,pageCount:r=-1,initialState:s,history:u="replace",debounceMs:d=300,throttleMs:g=50,clearOnDefault:p=!1,enableAdvancedFilter:c=!1,scroll:m=!1,shallow:f=!0,startTransition:w,...S}=l,M=a.useMemo(()=>({history:u,scroll:m,shallow:f,throttleMs:g,debounceMs:d,clearOnDefault:p,startTransition:w}),[u,m,f,g,d,p,w]),[b,y]=a.useState(s?.rowSelection??{}),[C,R]=a.useState(s?.columnVisibility??{}),[h,F]=(0,t.useQueryState)("page",t.parseAsInteger.withOptions(M).withDefault(1)),[A,O]=(0,t.useQueryState)("perPage",t.parseAsInteger.withOptions(M).withDefault(s?.pagination?.pageSize??10)),k=a.useMemo(()=>({pageIndex:h-1,pageSize:A}),[h,A]),x=a.useCallback(e=>{if("function"==typeof e){let t=e(k);F(t.pageIndex+1),O(t.pageSize)}else F(e.pageIndex+1),O(e.pageSize)},[k,F,O]),z=a.useMemo(()=>new Set(n.map(e=>e.id).filter(Boolean)),[n]),[V,D]=(0,t.useQueryState)("sort",(0,i.getSortingStateParser)(z).withOptions(M).withDefault(s?.sorting??[])),I=a.useCallback(e=>{"function"==typeof e?D(e(V)):D(e)},[V,D]),P=a.useMemo(()=>c?[]:n.filter(e=>e.enableColumnFilter),[n,c]),Q=a.useMemo(()=>c?{}:P.reduce((e,a)=>(a.meta?.options?e[a.id??""]=(0,t.parseAsArrayOf)(t.parseAsString,",").withOptions(M):e[a.id??""]=t.parseAsString.withOptions(M),e),{}),[P,M,c]),[j,q]=(0,t.useQueryStates)(Q),v=(0,o.useDebouncedCallback)(e=>{F(1),q(e)},d),B=a.useMemo(()=>c?[]:Object.entries(j).reduce((e,[t,a])=>{if(null!==a){let o=Array.isArray(a)?a:"string"==typeof a&&/[^a-zA-Z0-9]/.test(a)?a.split(/[^a-zA-Z0-9]+/).filter(Boolean):[a];e.push({id:t,value:o})}return e},[]),[j,c]),[T,U]=a.useState(B),Z=a.useCallback(e=>{c||U(t=>{let a="function"==typeof e?e(t):e,o=a.reduce((e,t)=>(P.find(e=>e.id===t.id)&&(e[t.id]=t.value),e),{});for(let e of t)a.some(t=>t.id===e.id)||(o[e.id]=null);return v(o),a})},[v,P,c]);return{table:(0,e.useReactTable)({...S,columns:n,initialState:s,pageCount:r,state:{pagination:k,sorting:V,columnVisibility:C,rowSelection:b,columnFilters:T},defaultColumn:{...S.defaultColumn,enableColumnFilter:!1},enableRowSelection:!0,onRowSelectionChange:y,onPaginationChange:x,onSortingChange:I,onColumnFiltersChange:Z,onColumnVisibilityChange:R,getCoreRowModel:(0,e.getCoreRowModel)(),getFilteredRowModel:(0,e.getFilteredRowModel)(),getPaginationRowModel:(0,e.getPaginationRowModel)(),getSortedRowModel:(0,e.getSortedRowModel)(),getFacetedRowModel:(0,e.getFacetedRowModel)(),getFacetedUniqueValues:(0,e.getFacetedUniqueValues)(),getFacetedMinMaxValues:(0,e.getFacetedMinMaxValues)(),manualPagination:!0,manualSorting:!0,manualFiltering:!0}),shallow:f,debounceMs:d,throttleMs:g}}export{l as useDataTable};
2
+ import*as e from"@tanstack/react-table";import*as t from"nuqs";import*as a from"react";import*as o from"./use-debounced-callback.js";import*as i from"../lib/parsers.js";function l(l){let{columns:n,pageCount:r=-1,initialState:s,history:u="replace",debounceMs:d=300,throttleMs:g=50,clearOnDefault:p=!1,enableAdvancedFilter:c=!1,scroll:m=!1,shallow:f=!0,startTransition:w,globalFilter:S,...M}=l,b=a.useMemo(()=>({history:u,scroll:m,shallow:f,throttleMs:g,debounceMs:d,clearOnDefault:p,startTransition:w}),[u,m,f,g,d,p,w]),[y,C]=a.useState(s?.rowSelection??{}),[R,h]=a.useState(s?.columnVisibility??{}),[F,A]=(0,t.useQueryState)("page",t.parseAsInteger.withOptions(b).withDefault(1)),[O,k]=(0,t.useQueryState)("perPage",t.parseAsInteger.withOptions(b).withDefault(s?.pagination?.pageSize??10)),x=a.useMemo(()=>({pageIndex:F-1,pageSize:O}),[F,O]),z=a.useCallback(e=>{if("function"==typeof e){let t=e(x);A(t.pageIndex+1),k(t.pageSize)}else A(e.pageIndex+1),k(e.pageSize)},[x,A,k]),V=a.useMemo(()=>new Set(n.map(e=>e.id).filter(Boolean)),[n]),[D,I]=(0,t.useQueryState)("sort",(0,i.getSortingStateParser)(V).withOptions(b).withDefault(s?.sorting??[])),P=a.useCallback(e=>{"function"==typeof e?I(e(D)):I(e)},[D,I]),Q=a.useMemo(()=>c?[]:n.filter(e=>e.enableColumnFilter),[n,c]),j=a.useMemo(()=>c?{}:Q.reduce((e,a)=>(a.meta?.options?e[a.id??""]=(0,t.parseAsArrayOf)(t.parseAsString,",").withOptions(b):e[a.id??""]=t.parseAsString.withOptions(b),e),{}),[Q,b,c]),[q,v]=(0,t.useQueryStates)(j),B=(0,o.useDebouncedCallback)(e=>{A(1),v(e)},d),T=a.useMemo(()=>c?[]:Object.entries(q).reduce((e,[t,a])=>{if(null!==a){let o=Array.isArray(a)?a:"string"==typeof a&&/[^a-zA-Z0-9]/.test(a)?a.split(/[^a-zA-Z0-9]+/).filter(Boolean):[a];e.push({id:t,value:o})}return e},[]),[q,c]),[U,Z]=a.useState(T),E=a.useCallback(e=>{c||Z(t=>{let a="function"==typeof e?e(t):e,o=a.reduce((e,t)=>(Q.find(e=>e.id===t.id)&&(e[t.id]=t.value),e),{});for(let e of t)a.some(t=>t.id===e.id)||(o[e.id]=null);return B(o),a})},[B,Q,c]);return{table:(0,e.useReactTable)({...M,columns:n,initialState:s,pageCount:r,state:{pagination:x,sorting:D,columnVisibility:R,rowSelection:y,columnFilters:U,globalFilter:S},defaultColumn:{...M.defaultColumn,enableColumnFilter:!1},enableRowSelection:!0,onRowSelectionChange:C,onPaginationChange:z,onSortingChange:P,onColumnFiltersChange:E,onColumnVisibilityChange:h,getCoreRowModel:(0,e.getCoreRowModel)(),getFilteredRowModel:(0,e.getFilteredRowModel)(),getPaginationRowModel:(0,e.getPaginationRowModel)(),getSortedRowModel:(0,e.getSortedRowModel)(),getFacetedRowModel:(0,e.getFacetedRowModel)(),getFacetedUniqueValues:(0,e.getFacetedUniqueValues)(),getFacetedMinMaxValues:(0,e.getFacetedMinMaxValues)(),manualPagination:!0,manualSorting:!0,manualFiltering:!0}),shallow:f,debounceMs:d,throttleMs:g}}export{l as useDataTable};
3
3
  //# sourceMappingURL=use-data-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks\\use-data-table.js","sources":["webpack://@gbmtech/aurora-ui/./src/hooks/use-data-table.ts"],"sourcesContent":["\r\n\r\nimport {\r\n type ColumnFiltersState,\r\n type PaginationState,\r\n type RowSelectionState,\r\n type SortingState,\r\n type TableOptions,\r\n type TableState,\r\n type Updater,\r\n type VisibilityState,\r\n getCoreRowModel,\r\n getFacetedMinMaxValues,\r\n getFacetedRowModel,\r\n getFacetedUniqueValues,\r\n getFilteredRowModel,\r\n getPaginationRowModel,\r\n getSortedRowModel,\r\n useReactTable,\r\n} from '@tanstack/react-table'\r\nimport {\r\n type Parser,\r\n type UseQueryStateOptions,\r\n parseAsArrayOf,\r\n parseAsInteger,\r\n parseAsString,\r\n useQueryState,\r\n useQueryStates,\r\n} from 'nuqs'\r\nimport * as React from 'react'\r\n\r\nimport { useDebouncedCallback } from '@/hooks/use-debounced-callback'\r\nimport { getSortingStateParser } from '@/lib/parsers'\r\nimport type { ExtendedColumnSort } from '@/types/data-table'\r\n\r\nconst PAGE_KEY = 'page'\r\nconst PER_PAGE_KEY = 'perPage'\r\nconst SORT_KEY = 'sort'\r\nconst ARRAY_SEPARATOR = ','\r\nconst DEBOUNCE_MS = 300\r\nconst THROTTLE_MS = 50\r\n\r\ninterface UseDataTableProps<TData>\r\n extends Omit<\r\n TableOptions<TData>,\r\n | 'state'\r\n | 'pageCount'\r\n | 'getCoreRowModel'\r\n | 'manualFiltering'\r\n | 'manualPagination'\r\n | 'manualSorting'\r\n >,\r\n Required<Pick<TableOptions<TData>, 'pageCount'>> {\r\n initialState?: Omit<Partial<TableState>, 'sorting'> & {\r\n sorting?: ExtendedColumnSort<TData>[]\r\n }\r\n history?: 'push' | 'replace'\r\n debounceMs?: number\r\n throttleMs?: number\r\n clearOnDefault?: boolean\r\n enableAdvancedFilter?: boolean\r\n scroll?: boolean\r\n shallow?: boolean\r\n startTransition?: React.TransitionStartFunction\r\n}\r\n\r\nexport function useDataTable<TData>(props: UseDataTableProps<TData>) {\r\n const {\r\n columns,\r\n pageCount = -1,\r\n initialState,\r\n history = 'replace',\r\n debounceMs = DEBOUNCE_MS,\r\n throttleMs = THROTTLE_MS,\r\n clearOnDefault = false,\r\n enableAdvancedFilter = false,\r\n scroll = false,\r\n shallow = true,\r\n startTransition,\r\n ...tableProps\r\n } = props\r\n\r\n const queryStateOptions = React.useMemo<\r\n Omit<UseQueryStateOptions<string>, 'parse'>\r\n >(\r\n () => ({\r\n history,\r\n scroll,\r\n shallow,\r\n throttleMs,\r\n debounceMs,\r\n clearOnDefault,\r\n startTransition,\r\n }),\r\n [\r\n history,\r\n scroll,\r\n shallow,\r\n throttleMs,\r\n debounceMs,\r\n clearOnDefault,\r\n startTransition,\r\n ]\r\n )\r\n\r\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\r\n initialState?.rowSelection ?? {}\r\n )\r\n const [columnVisibility, setColumnVisibility] =\r\n React.useState<VisibilityState>(initialState?.columnVisibility ?? {})\r\n\r\n const [page, setPage] = useQueryState(\r\n PAGE_KEY,\r\n parseAsInteger.withOptions(queryStateOptions).withDefault(1)\r\n )\r\n const [perPage, setPerPage] = useQueryState(\r\n PER_PAGE_KEY,\r\n parseAsInteger\r\n .withOptions(queryStateOptions)\r\n .withDefault(initialState?.pagination?.pageSize ?? 10)\r\n )\r\n\r\n const pagination: PaginationState = React.useMemo(() => {\r\n return {\r\n pageIndex: page - 1, // zero-based index -> one-based index\r\n pageSize: perPage,\r\n }\r\n }, [page, perPage])\r\n\r\n const onPaginationChange = React.useCallback(\r\n (updaterOrValue: Updater<PaginationState>) => {\r\n if (typeof updaterOrValue === 'function') {\r\n const newPagination = updaterOrValue(pagination)\r\n void setPage(newPagination.pageIndex + 1)\r\n void setPerPage(newPagination.pageSize)\r\n } else {\r\n void setPage(updaterOrValue.pageIndex + 1)\r\n void setPerPage(updaterOrValue.pageSize)\r\n }\r\n },\r\n [pagination, setPage, setPerPage]\r\n )\r\n\r\n const columnIds = React.useMemo(() => {\r\n return new Set(columns.map(column => column.id).filter(Boolean) as string[])\r\n }, [columns])\r\n\r\n const [sorting, setSorting] = useQueryState(\r\n SORT_KEY,\r\n getSortingStateParser<TData>(columnIds)\r\n .withOptions(queryStateOptions)\r\n .withDefault(initialState?.sorting ?? [])\r\n )\r\n\r\n const onSortingChange = React.useCallback(\r\n (updaterOrValue: Updater<SortingState>) => {\r\n if (typeof updaterOrValue === 'function') {\r\n const newSorting = updaterOrValue(sorting)\r\n setSorting(newSorting as ExtendedColumnSort<TData>[])\r\n } else {\r\n setSorting(updaterOrValue as ExtendedColumnSort<TData>[])\r\n }\r\n },\r\n [sorting, setSorting]\r\n )\r\n\r\n const filterableColumns = React.useMemo(() => {\r\n if (enableAdvancedFilter) return []\r\n\r\n return columns.filter(column => column.enableColumnFilter)\r\n }, [columns, enableAdvancedFilter])\r\n\r\n const filterParsers = React.useMemo(() => {\r\n if (enableAdvancedFilter) return {}\r\n\r\n return filterableColumns.reduce<\r\n Record<string, Parser<string> | Parser<string[]>>\r\n >((acc, column) => {\r\n if (column.meta?.options) {\r\n acc[column.id ?? ''] = parseAsArrayOf(\r\n parseAsString,\r\n ARRAY_SEPARATOR\r\n ).withOptions(queryStateOptions)\r\n } else {\r\n acc[column.id ?? ''] = parseAsString.withOptions(queryStateOptions)\r\n }\r\n return acc\r\n }, {})\r\n }, [filterableColumns, queryStateOptions, enableAdvancedFilter])\r\n\r\n const [filterValues, setFilterValues] = useQueryStates(filterParsers)\r\n\r\n const debouncedSetFilterValues = useDebouncedCallback(\r\n (values: typeof filterValues) => {\r\n void setPage(1)\r\n void setFilterValues(values)\r\n },\r\n debounceMs\r\n )\r\n\r\n const initialColumnFilters: ColumnFiltersState = React.useMemo(() => {\r\n if (enableAdvancedFilter) return []\r\n\r\n return Object.entries(filterValues).reduce<ColumnFiltersState>(\r\n (filters, [key, value]) => {\r\n if (value !== null) {\r\n const processedValue = Array.isArray(value)\r\n ? value\r\n : typeof value === 'string' && /[^a-zA-Z0-9]/.test(value)\r\n ? value.split(/[^a-zA-Z0-9]+/).filter(Boolean)\r\n : [value]\r\n\r\n filters.push({\r\n id: key,\r\n value: processedValue,\r\n })\r\n }\r\n return filters\r\n },\r\n []\r\n )\r\n }, [filterValues, enableAdvancedFilter])\r\n\r\n const [columnFilters, setColumnFilters] =\r\n React.useState<ColumnFiltersState>(initialColumnFilters)\r\n\r\n const onColumnFiltersChange = React.useCallback(\r\n (updaterOrValue: Updater<ColumnFiltersState>) => {\r\n if (enableAdvancedFilter) return\r\n\r\n setColumnFilters(prev => {\r\n const next =\r\n typeof updaterOrValue === 'function'\r\n ? updaterOrValue(prev)\r\n : updaterOrValue\r\n\r\n const filterUpdates = next.reduce<\r\n Record<string, string | string[] | null>\r\n >((acc, filter) => {\r\n if (filterableColumns.find(column => column.id === filter.id)) {\r\n acc[filter.id] = filter.value as string | string[]\r\n }\r\n return acc\r\n }, {})\r\n\r\n for (const prevFilter of prev) {\r\n if (!next.some(filter => filter.id === prevFilter.id)) {\r\n filterUpdates[prevFilter.id] = null\r\n }\r\n }\r\n\r\n debouncedSetFilterValues(filterUpdates)\r\n return next\r\n })\r\n },\r\n [debouncedSetFilterValues, filterableColumns, enableAdvancedFilter]\r\n )\r\n\r\n const table = useReactTable({\r\n ...tableProps,\r\n columns,\r\n initialState,\r\n pageCount,\r\n state: {\r\n pagination,\r\n sorting,\r\n columnVisibility,\r\n rowSelection,\r\n columnFilters,\r\n },\r\n defaultColumn: {\r\n ...tableProps.defaultColumn,\r\n enableColumnFilter: false,\r\n },\r\n enableRowSelection: true,\r\n onRowSelectionChange: setRowSelection,\r\n onPaginationChange,\r\n onSortingChange,\r\n onColumnFiltersChange,\r\n onColumnVisibilityChange: setColumnVisibility,\r\n getCoreRowModel: getCoreRowModel(),\r\n getFilteredRowModel: getFilteredRowModel(),\r\n getPaginationRowModel: getPaginationRowModel(),\r\n getSortedRowModel: getSortedRowModel(),\r\n getFacetedRowModel: getFacetedRowModel(),\r\n getFacetedUniqueValues: getFacetedUniqueValues(),\r\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\r\n manualPagination: true,\r\n manualSorting: true,\r\n manualFiltering: true,\r\n })\r\n\r\n return { table, shallow, debounceMs, throttleMs }\r\n}\r\n"],"names":["useDataTable","props","columns","pageCount","initialState","history","debounceMs","throttleMs","clearOnDefault","enableAdvancedFilter","scroll","shallow","startTransition","tableProps","queryStateOptions","React","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","page","setPage","useQueryState","parseAsInteger","perPage","setPerPage","pagination","onPaginationChange","updaterOrValue","newPagination","columnIds","Set","column","Boolean","sorting","setSorting","getSortingStateParser","onSortingChange","filterableColumns","filterParsers","acc","parseAsArrayOf","parseAsString","filterValues","setFilterValues","useQueryStates","debouncedSetFilterValues","useDebouncedCallback","values","initialColumnFilters","Object","filters","key","value","processedValue","Array","columnFilters","setColumnFilters","onColumnFiltersChange","prev","next","filterUpdates","filter","prevFilter","table","useReactTable","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues"],"mappings":"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"}
1
+ {"version":3,"file":"hooks\\use-data-table.js","sources":["webpack://@gbmtech/aurora-ui/./src/hooks/use-data-table.ts"],"sourcesContent":["\r\n\r\nimport {\r\n type ColumnFiltersState,\r\n type PaginationState,\r\n type RowSelectionState,\r\n type SortingState,\r\n type TableOptions,\r\n type TableState,\r\n type Updater,\r\n type VisibilityState,\r\n getCoreRowModel,\r\n getFacetedMinMaxValues,\r\n getFacetedRowModel,\r\n getFacetedUniqueValues,\r\n getFilteredRowModel,\r\n getPaginationRowModel,\r\n getSortedRowModel,\r\n useReactTable,\r\n} from '@tanstack/react-table'\r\nimport {\r\n type Parser,\r\n type UseQueryStateOptions,\r\n parseAsArrayOf,\r\n parseAsInteger,\r\n parseAsString,\r\n useQueryState,\r\n useQueryStates,\r\n} from 'nuqs'\r\nimport * as React from 'react'\r\n\r\nimport { useDebouncedCallback } from '@/hooks/use-debounced-callback'\r\nimport { getSortingStateParser } from '@/lib/parsers'\r\nimport type { ExtendedColumnSort } from '@/types/data-table'\r\n\r\nconst PAGE_KEY = 'page'\r\nconst PER_PAGE_KEY = 'perPage'\r\nconst SORT_KEY = 'sort'\r\nconst ARRAY_SEPARATOR = ','\r\nconst DEBOUNCE_MS = 300\r\nconst THROTTLE_MS = 50\r\n\r\ninterface UseDataTableProps<TData>\r\n extends Omit<\r\n TableOptions<TData>,\r\n | 'state'\r\n | 'pageCount'\r\n | 'getCoreRowModel'\r\n | 'manualFiltering'\r\n | 'manualPagination'\r\n | 'manualSorting'\r\n >,\r\n Required<Pick<TableOptions<TData>, 'pageCount'>> {\r\n initialState?: Omit<Partial<TableState>, 'sorting'> & {\r\n sorting?: ExtendedColumnSort<TData>[]\r\n }\r\n history?: 'push' | 'replace'\r\n debounceMs?: number\r\n throttleMs?: number\r\n clearOnDefault?: boolean\r\n enableAdvancedFilter?: boolean\r\n scroll?: boolean\r\n shallow?: boolean\r\n startTransition?: React.TransitionStartFunction\r\n globalFilter?: string | null\r\n}\r\n\r\nexport function useDataTable<TData>(props: UseDataTableProps<TData>) {\r\n const {\r\n columns,\r\n pageCount = -1,\r\n initialState,\r\n history = 'replace',\r\n debounceMs = DEBOUNCE_MS,\r\n throttleMs = THROTTLE_MS,\r\n clearOnDefault = false,\r\n enableAdvancedFilter = false,\r\n scroll = false,\r\n shallow = true,\r\n startTransition,\r\n globalFilter,\r\n ...tableProps\r\n } = props\r\n\r\n const queryStateOptions = React.useMemo<\r\n Omit<UseQueryStateOptions<string>, 'parse'>\r\n >(\r\n () => ({\r\n history,\r\n scroll,\r\n shallow,\r\n throttleMs,\r\n debounceMs,\r\n clearOnDefault,\r\n startTransition,\r\n }),\r\n [\r\n history,\r\n scroll,\r\n shallow,\r\n throttleMs,\r\n debounceMs,\r\n clearOnDefault,\r\n startTransition,\r\n ]\r\n )\r\n\r\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\r\n initialState?.rowSelection ?? {}\r\n )\r\n const [columnVisibility, setColumnVisibility] =\r\n React.useState<VisibilityState>(initialState?.columnVisibility ?? {})\r\n\r\n const [page, setPage] = useQueryState(\r\n PAGE_KEY,\r\n parseAsInteger.withOptions(queryStateOptions).withDefault(1)\r\n )\r\n const [perPage, setPerPage] = useQueryState(\r\n PER_PAGE_KEY,\r\n parseAsInteger\r\n .withOptions(queryStateOptions)\r\n .withDefault(initialState?.pagination?.pageSize ?? 10)\r\n )\r\n\r\n const pagination: PaginationState = React.useMemo(() => {\r\n return {\r\n pageIndex: page - 1, // zero-based index -> one-based index\r\n pageSize: perPage,\r\n }\r\n }, [page, perPage])\r\n\r\n const onPaginationChange = React.useCallback(\r\n (updaterOrValue: Updater<PaginationState>) => {\r\n if (typeof updaterOrValue === 'function') {\r\n const newPagination = updaterOrValue(pagination)\r\n void setPage(newPagination.pageIndex + 1)\r\n void setPerPage(newPagination.pageSize)\r\n } else {\r\n void setPage(updaterOrValue.pageIndex + 1)\r\n void setPerPage(updaterOrValue.pageSize)\r\n }\r\n },\r\n [pagination, setPage, setPerPage]\r\n )\r\n\r\n const columnIds = React.useMemo(() => {\r\n return new Set(columns.map(column => column.id).filter(Boolean) as string[])\r\n }, [columns])\r\n\r\n const [sorting, setSorting] = useQueryState(\r\n SORT_KEY,\r\n getSortingStateParser<TData>(columnIds)\r\n .withOptions(queryStateOptions)\r\n .withDefault(initialState?.sorting ?? [])\r\n )\r\n\r\n const onSortingChange = React.useCallback(\r\n (updaterOrValue: Updater<SortingState>) => {\r\n if (typeof updaterOrValue === 'function') {\r\n const newSorting = updaterOrValue(sorting)\r\n setSorting(newSorting as ExtendedColumnSort<TData>[])\r\n } else {\r\n setSorting(updaterOrValue as ExtendedColumnSort<TData>[])\r\n }\r\n },\r\n [sorting, setSorting]\r\n )\r\n\r\n const filterableColumns = React.useMemo(() => {\r\n if (enableAdvancedFilter) return []\r\n\r\n return columns.filter(column => column.enableColumnFilter)\r\n }, [columns, enableAdvancedFilter])\r\n\r\n const filterParsers = React.useMemo(() => {\r\n if (enableAdvancedFilter) return {}\r\n\r\n return filterableColumns.reduce<\r\n Record<string, Parser<string> | Parser<string[]>>\r\n >((acc, column) => {\r\n if (column.meta?.options) {\r\n acc[column.id ?? ''] = parseAsArrayOf(\r\n parseAsString,\r\n ARRAY_SEPARATOR\r\n ).withOptions(queryStateOptions)\r\n } else {\r\n acc[column.id ?? ''] = parseAsString.withOptions(queryStateOptions)\r\n }\r\n return acc\r\n }, {})\r\n }, [filterableColumns, queryStateOptions, enableAdvancedFilter])\r\n\r\n const [filterValues, setFilterValues] = useQueryStates(filterParsers)\r\n\r\n const debouncedSetFilterValues = useDebouncedCallback(\r\n (values: typeof filterValues) => {\r\n void setPage(1)\r\n void setFilterValues(values)\r\n },\r\n debounceMs\r\n )\r\n\r\n const initialColumnFilters: ColumnFiltersState = React.useMemo(() => {\r\n if (enableAdvancedFilter) return []\r\n\r\n return Object.entries(filterValues).reduce<ColumnFiltersState>(\r\n (filters, [key, value]) => {\r\n if (value !== null) {\r\n const processedValue = Array.isArray(value)\r\n ? value\r\n : typeof value === 'string' && /[^a-zA-Z0-9]/.test(value)\r\n ? value.split(/[^a-zA-Z0-9]+/).filter(Boolean)\r\n : [value]\r\n\r\n filters.push({\r\n id: key,\r\n value: processedValue,\r\n })\r\n }\r\n return filters\r\n },\r\n []\r\n )\r\n }, [filterValues, enableAdvancedFilter])\r\n\r\n const [columnFilters, setColumnFilters] =\r\n React.useState<ColumnFiltersState>(initialColumnFilters)\r\n\r\n const onColumnFiltersChange = React.useCallback(\r\n (updaterOrValue: Updater<ColumnFiltersState>) => {\r\n if (enableAdvancedFilter) return\r\n\r\n setColumnFilters(prev => {\r\n const next =\r\n typeof updaterOrValue === 'function'\r\n ? updaterOrValue(prev)\r\n : updaterOrValue\r\n\r\n const filterUpdates = next.reduce<\r\n Record<string, string | string[] | null>\r\n >((acc, filter) => {\r\n if (filterableColumns.find(column => column.id === filter.id)) {\r\n acc[filter.id] = filter.value as string | string[]\r\n }\r\n return acc\r\n }, {})\r\n\r\n for (const prevFilter of prev) {\r\n if (!next.some(filter => filter.id === prevFilter.id)) {\r\n filterUpdates[prevFilter.id] = null\r\n }\r\n }\r\n\r\n debouncedSetFilterValues(filterUpdates)\r\n return next\r\n })\r\n },\r\n [debouncedSetFilterValues, filterableColumns, enableAdvancedFilter]\r\n )\r\n\r\n const table = useReactTable({\r\n ...tableProps,\r\n columns,\r\n initialState,\r\n pageCount,\r\n state: {\r\n pagination,\r\n sorting,\r\n columnVisibility,\r\n rowSelection,\r\n columnFilters,\r\n globalFilter,\r\n },\r\n defaultColumn: {\r\n ...tableProps.defaultColumn,\r\n enableColumnFilter: false,\r\n },\r\n enableRowSelection: true,\r\n onRowSelectionChange: setRowSelection,\r\n onPaginationChange,\r\n onSortingChange,\r\n onColumnFiltersChange,\r\n onColumnVisibilityChange: setColumnVisibility,\r\n getCoreRowModel: getCoreRowModel(),\r\n getFilteredRowModel: getFilteredRowModel(),\r\n getPaginationRowModel: getPaginationRowModel(),\r\n getSortedRowModel: getSortedRowModel(),\r\n getFacetedRowModel: getFacetedRowModel(),\r\n getFacetedUniqueValues: getFacetedUniqueValues(),\r\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\r\n manualPagination: true,\r\n manualSorting: true,\r\n manualFiltering: true,\r\n })\r\n\r\n return { table, shallow, debounceMs, throttleMs }\r\n}\r\n"],"names":["useDataTable","props","columns","pageCount","initialState","history","debounceMs","throttleMs","clearOnDefault","enableAdvancedFilter","scroll","shallow","startTransition","globalFilter","tableProps","queryStateOptions","React","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","page","setPage","useQueryState","parseAsInteger","perPage","setPerPage","pagination","onPaginationChange","updaterOrValue","newPagination","columnIds","Set","column","Boolean","sorting","setSorting","getSortingStateParser","onSortingChange","filterableColumns","filterParsers","acc","parseAsArrayOf","parseAsString","filterValues","setFilterValues","useQueryStates","debouncedSetFilterValues","useDebouncedCallback","values","initialColumnFilters","Object","filters","key","value","processedValue","Array","columnFilters","setColumnFilters","onColumnFiltersChange","prev","next","filterUpdates","filter","prevFilter","table","useReactTable","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues"],"mappings":"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"}
@@ -13,6 +13,7 @@ interface UseDataTableProps<TData> extends Omit<TableOptions<TData>, 'state' | '
13
13
  scroll?: boolean;
14
14
  shallow?: boolean;
15
15
  startTransition?: React.TransitionStartFunction;
16
+ globalFilter?: string | null;
16
17
  }
17
18
  export declare function useDataTable<TData>(props: UseDataTableProps<TData>): {
18
19
  table: import("@tanstack/react-table").Table<TData>;
@@ -1 +1 @@
1
- {"version":3,"file":"use-data-table.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-data-table.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,UAAU,EAWhB,MAAM,uBAAuB,CAAA;AAU9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAS5D,UAAU,iBAAiB,CAAC,KAAK,CAC/B,SAAQ,IAAI,CACR,YAAY,CAAC,KAAK,CAAC,EACjB,OAAO,GACP,WAAW,GACX,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,eAAe,CAClB,EACD,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,GAAG;QACpD,OAAO,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAA;KACtC,CAAA;IACD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,eAAe,CAAC,EAAE,KAAK,CAAC,uBAAuB,CAAA;CAChD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;;;;;EAmOlE"}
1
+ {"version":3,"file":"use-data-table.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-data-table.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,UAAU,EAWhB,MAAM,uBAAuB,CAAA;AAU9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAS5D,UAAU,iBAAiB,CAAC,KAAK,CAC/B,SAAQ,IAAI,CACR,YAAY,CAAC,KAAK,CAAC,EACjB,OAAO,GACP,WAAW,GACX,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,eAAe,CAClB,EACD,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,GAAG;QACpD,OAAO,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAA;KACtC,CAAA;IACD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,eAAe,CAAC,EAAE,KAAK,CAAC,uBAAuB,CAAA;IAC/C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;;;;;EAqOlE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gbmtech/aurora-ui",
3
- "version": "0.1.44",
3
+ "version": "0.1.46",
4
4
  "main": "./dist/cjs/index.cjs",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/types/index.d.ts",