@cryptlex/web-components 6.6.6-alpha50 → 6.6.6-alpha53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/components/checkbox.js +1 -1
  2. package/dist/components/checkbox.js.map +1 -1
  3. package/dist/components/{table-actions.js → data-table-actions.js} +1 -1
  4. package/dist/components/data-table-actions.js.map +1 -0
  5. package/dist/components/data-table-filter.d.ts +1 -1
  6. package/dist/components/data-table-filter.js +1 -1
  7. package/dist/components/data-table.d.ts +11 -25
  8. package/dist/components/data-table.js +1 -1
  9. package/dist/components/data-table.js.map +1 -1
  10. package/dist/components/date-picker.js +1 -1
  11. package/dist/components/date-picker.js.map +1 -1
  12. package/dist/components/duration-field.js +1 -1
  13. package/dist/components/duration-field.js.map +1 -1
  14. package/dist/components/id-search.d.ts +4 -4
  15. package/dist/components/id-search.js +1 -1
  16. package/dist/components/id-search.js.map +1 -1
  17. package/dist/components/multi-select.js +1 -1
  18. package/dist/components/multi-select.js.map +1 -1
  19. package/dist/components/numberfield.js +1 -1
  20. package/dist/components/numberfield.js.map +1 -1
  21. package/dist/components/select-options.d.ts +1 -0
  22. package/dist/components/select-options.js +1 -1
  23. package/dist/components/select-options.js.map +1 -1
  24. package/dist/components/select.js +1 -1
  25. package/dist/components/select.js.map +1 -1
  26. package/dist/components/textfield.js +1 -1
  27. package/dist/components/textfield.js.map +1 -1
  28. package/dist/components/toast.d.ts +4 -8
  29. package/dist/components/toast.js +1 -1
  30. package/dist/components/toast.js.map +1 -1
  31. package/dist/utilities/form-context.d.ts +3 -1
  32. package/dist/utilities/form-context.js +1 -1
  33. package/dist/utilities/form-context.js.map +1 -1
  34. package/dist/utilities/resources.d.ts +9 -7
  35. package/dist/utilities/resources.js +1 -1
  36. package/dist/utilities/resources.js.map +1 -1
  37. package/package.json +1 -1
  38. package/dist/components/table-actions.js.map +0 -1
  39. /package/dist/components/{table-actions.d.ts → data-table-actions.d.ts} +0 -0
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as e,Fragment as k,jsxs as v}from"react/jsx-runtime";import{useId as C}from"react";import{Checkbox as y,composeRenderProps as l,CheckboxGroup as N}from"react-aria-components";import{useFieldContext as w}from"../utilities/form-context.js";import{classNames as r}from"../utilities/theme.js";import{FormField as I,labelVariants as B}from"./form.js";import{IcMinus as F,IcCheck as S}from"./icons.js";import"@tanstack/react-form";import"clsx";import"class-variance-authority";const i="group-data-[disabled]/checkbox:cursor-not-allowed group-data-[disabled]/checkbox:opacity-50",a="group-data-[invalid]/checkbox:border-destructive",u="focus:outline-none focus-visible:outline-none",b="group-data-[selected]/checkbox:bg-primary",j="relative shrink-0 h-6 w-11 rounded-full border border-input bg-elevation-2 transition-colors duration-200",z="absolute top-1/2 -translate-y-1/2 left-0.5 h-5 w-5 rounded-full bg-background border border-input transition-transform duration-200",D="flex size-input shrink-0 items-center bg-elevation-2 justify-center border border-input text-current ring-offset-background",H=N;function G({className:o,label:t,description:m,errorMessage:h,requiredIndicator:g,variant:p="checkbox",...c}){const x=C(),d=c.id||x,f=p==="switch";return e("div",{className:"group form-field",children:e(I,{label:t,description:m,errorMessage:h,requiredIndicator:g,htmlFor:d,children:e(y,{className:l(o,n=>r("group/checkbox cursor-pointer relative focus-ring flex items-center gap-x-2 disabled-muted",B,n)),id:d,...c,children:l(e(k,{}),(n,s)=>f?e("div",{className:r(j,b,i,a,"group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive",u),children:e("div",{className:r(z,"group-data-[selected]/checkbox:translate-x-4.5",i,a)})}):v("div",{className:r(D,"group-data-[indeterminate]/checkbox:bg-primary",b,"group-data-[indeterminate]/checkbox:text-primary-foreground group-data-[selected]/checkbox:text-primary-foreground",i,a,"group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive group-data-[invalid]/checkbox:group-data-[selected]/checkbox:text-destructive-foreground",u),children:[s.isIndeterminate&&e(F,{className:"size-icon"}),!s.isIndeterminate&&s.isSelected&&e(S,{className:"size-icon"})]}))})})})}function J({...o}){const t=w({disabled:o.isDisabled});return e(G,{...o,isSelected:t.state.value,isDisabled:t.form.state.isSubmitting||o.isDisabled,onChange:()=>t.handleChange(!t.state.value),onBlur:t.handleBlur})}export{G as Checkbox,H as CheckboxGroup,J as TfCheckbox};
1
+ "use client";import{jsx as e,Fragment as k,jsxs as v}from"react/jsx-runtime";import{useId as C}from"react";import{Checkbox as y,composeRenderProps as l,CheckboxGroup as I}from"react-aria-components";import{useFieldContext as N}from"../utilities/form-context.js";import{classNames as r}from"../utilities/theme.js";import{FormField as w,labelVariants as B}from"./form.js";import{IcMinus as F,IcCheck as S}from"./icons.js";import"@tanstack/react-form";import"clsx";import"class-variance-authority";const i="group-data-[disabled]/checkbox:cursor-not-allowed group-data-[disabled]/checkbox:opacity-50",a="group-data-[invalid]/checkbox:border-destructive",u="focus:outline-none focus-visible:outline-none",b="group-data-[selected]/checkbox:bg-primary",j="relative shrink-0 h-6 w-11 rounded-full border border-input bg-elevation-2 transition-colors duration-200",z="absolute top-1/2 -translate-y-1/2 left-0.5 h-5 w-5 rounded-full bg-background border border-input transition-transform duration-200",D="flex size-input shrink-0 items-center bg-elevation-2 justify-center border border-input text-current ring-offset-background",H=I;function G({className:o,label:t,description:m,errorMessage:h,requiredIndicator:g,variant:p="checkbox",...c}){const x=C(),d=c.id||x,f=p==="switch";return e("div",{className:"group form-field",children:e(w,{label:t,description:m,errorMessage:h,requiredIndicator:g,htmlFor:d,children:e(y,{className:l(o,n=>r("group/checkbox cursor-pointer relative focus-ring flex items-center gap-x-2 disabled-muted",B,n)),id:d,...c,children:l(e(k,{}),(n,s)=>f?e("div",{className:r(j,b,i,a,"group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive",u),children:e("div",{className:r(z,"group-data-[selected]/checkbox:translate-x-4.5",i,a)})}):v("div",{className:r(D,"group-data-[indeterminate]/checkbox:bg-primary",b,"group-data-[indeterminate]/checkbox:text-primary-foreground group-data-[selected]/checkbox:text-primary-foreground",i,a,"group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive group-data-[invalid]/checkbox:group-data-[selected]/checkbox:text-destructive-foreground",u),children:[s.isIndeterminate&&e(F,{className:"size-icon"}),!s.isIndeterminate&&s.isSelected&&e(S,{className:"size-icon"})]}))})})})}function J({...o}){const t=N({disabled:o.isDisabled});return e(G,{requiredIndicator:t.isRequired,isSelected:t.state.value,isDisabled:t.form.state.isSubmitting||o.isDisabled,onChange:()=>t.handleChange(!t.state.value),onBlur:t.handleBlur,...o})}export{G as Checkbox,H as CheckboxGroup,J as TfCheckbox};
2
2
  //# sourceMappingURL=checkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","sources":["../../lib/components/checkbox.tsx"],"sourcesContent":["'use client';\nimport { useId } from 'react';\nimport {\n Checkbox as AriaCheckbox,\n CheckboxGroup as AriaCheckboxGroup,\n composeRenderProps,\n type CheckboxProps as AriaCheckboxProps,\n} from 'react-aria-components';\n\nimport { useFieldContext } from '../utilities/form-context';\nimport { classNames } from '../utilities/theme';\nimport { FormField, labelVariants, type FormFieldProps } from './form';\nimport { IcCheck, IcMinus } from './icons';\n\nconst disabledClasses = 'group-data-[disabled]/checkbox:cursor-not-allowed group-data-[disabled]/checkbox:opacity-50';\nconst invalidBorderClasses = 'group-data-[invalid]/checkbox:border-destructive';\nconst focusResetClasses = 'focus:outline-none focus-visible:outline-none';\nconst selectedPrimaryClasses = 'group-data-[selected]/checkbox:bg-primary';\n\nconst switchBaseClasses =\n 'relative shrink-0 h-6 w-11 rounded-full border border-input bg-elevation-2 transition-colors duration-200';\nconst switchKnobClasses =\n 'absolute top-1/2 -translate-y-1/2 left-0.5 h-5 w-5 rounded-full bg-background border border-input transition-transform duration-200';\n\nconst checkboxBaseClasses =\n 'flex size-input shrink-0 items-center bg-elevation-2 justify-center border border-input text-current ring-offset-background';\n\nexport const CheckboxGroup = AriaCheckboxGroup;\ntype CheckboxProps = AriaCheckboxProps &\n FormFieldProps & {\n variant?: 'checkbox' | 'switch';\n };\nexport function Checkbox({\n className,\n label,\n description,\n errorMessage,\n requiredIndicator,\n variant = 'checkbox',\n ...props\n}: Omit<CheckboxProps, 'children'>) {\n const generatedId = useId();\n const fieldId = props.id || generatedId;\n const isSwitch = variant === 'switch';\n return (\n <div className=\"group form-field\">\n <FormField\n {...{\n label,\n description,\n errorMessage,\n requiredIndicator,\n htmlFor: fieldId,\n }}\n >\n <AriaCheckbox\n className={composeRenderProps(className, className =>\n classNames(\n 'group/checkbox cursor-pointer relative focus-ring flex items-center gap-x-2 disabled-muted',\n labelVariants,\n className\n )\n )}\n id={fieldId}\n {...props}\n >\n {composeRenderProps(<></>, (_, renderProps) => {\n if (isSwitch) {\n return (\n <div\n className={classNames(\n switchBaseClasses,\n selectedPrimaryClasses,\n disabledClasses,\n invalidBorderClasses,\n 'group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive',\n focusResetClasses\n )}\n >\n <div\n className={classNames(\n switchKnobClasses,\n 'group-data-[selected]/checkbox:translate-x-4.5',\n disabledClasses,\n invalidBorderClasses\n )}\n />\n </div>\n );\n }\n\n return (\n <div\n className={classNames(\n checkboxBaseClasses,\n 'group-data-[indeterminate]/checkbox:bg-primary',\n selectedPrimaryClasses,\n 'group-data-[indeterminate]/checkbox:text-primary-foreground group-data-[selected]/checkbox:text-primary-foreground',\n disabledClasses,\n invalidBorderClasses,\n 'group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive group-data-[invalid]/checkbox:group-data-[selected]/checkbox:text-destructive-foreground',\n focusResetClasses\n )}\n >\n {renderProps.isIndeterminate && <IcMinus className=\"size-icon\" />}\n {!renderProps.isIndeterminate && renderProps.isSelected && (\n <IcCheck className=\"size-icon\" />\n )}\n </div>\n );\n })}\n </AriaCheckbox>\n </FormField>\n </div>\n );\n}\n\nexport type TfCheckboxProps = Omit<React.ComponentProps<typeof Checkbox>, 'onChange' | 'onBlur' | 'isChecked'>;\nexport function TfCheckbox({ ...props }: TfCheckboxProps) {\n const field = useFieldContext<boolean>({ disabled: props.isDisabled });\n return (\n <Checkbox\n {...props}\n isSelected={field.state.value}\n isDisabled={field.form.state.isSubmitting || props.isDisabled}\n onChange={() => field.handleChange(!field.state.value)}\n onBlur={field.handleBlur}\n />\n );\n}\n"],"names":["disabledClasses","invalidBorderClasses","focusResetClasses","selectedPrimaryClasses","switchBaseClasses","switchKnobClasses","checkboxBaseClasses","CheckboxGroup","AriaCheckboxGroup","Checkbox","className","label","description","errorMessage","requiredIndicator","variant","props","generatedId","useId","fieldId","isSwitch","jsx","FormField","AriaCheckbox","composeRenderProps","classNames","labelVariants","Fragment","_","renderProps","jsxs","IcMinus","IcCheck","TfCheckbox","field","useFieldContext"],"mappings":"+eAcA,MAAMA,EAAkB,8FAClBC,EAAuB,mDACvBC,EAAoB,gDACpBC,EAAyB,4CAEzBC,EACF,4GACEC,EACF,sIAEEC,EACF,8HAESC,EAAgBC,EAKtB,SAASC,EAAS,CACrB,UAAAC,EACA,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,QAAAC,EAAU,WACV,GAAGC,CACP,EAAoC,CAChC,MAAMC,EAAcC,EAAA,EACdC,EAAUH,EAAM,IAAMC,EACtBG,EAAWL,IAAY,SAC7B,OACIM,EAAC,MAAA,CAAI,UAAU,mBACX,SAAAA,EAACC,EAAA,CAEO,MAAAX,EACA,YAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,QAASK,EAGb,SAAAE,EAACE,EAAA,CACG,UAAWC,EAAmBd,EAAWA,GACrCe,EACI,6FACAC,EACAhB,CAAA,CACJ,EAEJ,GAAIS,EACH,GAAGH,EAEH,SAAAQ,EAAmBH,EAAAM,EAAA,CAAA,CAAE,EAAK,CAACC,EAAGC,IACvBT,EAEIC,EAAC,MAAA,CACG,UAAWI,EACPrB,EACAD,EACAH,EACAC,EACA,8EACAC,CAAA,EAGJ,SAAAmB,EAAC,MAAA,CACG,UAAWI,EACPpB,EACA,iDACAL,EACAC,CAAA,CACJ,CAAA,CACJ,CAAA,EAMR6B,EAAC,MAAA,CACG,UAAWL,EACPnB,EACA,iDACAH,EACA,qHACAH,EACAC,EACA,uKACAC,CAAA,EAGH,SAAA,CAAA2B,EAAY,iBAAmBR,EAACU,EAAA,CAAQ,UAAU,YAAY,EAC9D,CAACF,EAAY,iBAAmBA,EAAY,YACzCR,EAACW,EAAA,CAAQ,UAAU,WAAA,CAAY,CAAA,CAAA,CAAA,CAI9C,CAAA,CAAA,CACL,CAAA,EAER,CAER,CAGO,SAASC,EAAW,CAAE,GAAGjB,GAA0B,CACtD,MAAMkB,EAAQC,EAAyB,CAAE,SAAUnB,EAAM,WAAY,EACrE,OACIK,EAACZ,EAAA,CACI,GAAGO,EACJ,WAAYkB,EAAM,MAAM,MACxB,WAAYA,EAAM,KAAK,MAAM,cAAgBlB,EAAM,WACnD,SAAU,IAAMkB,EAAM,aAAa,CAACA,EAAM,MAAM,KAAK,EACrD,OAAQA,EAAM,UAAA,CAAA,CAG1B"}
1
+ {"version":3,"file":"checkbox.js","sources":["../../lib/components/checkbox.tsx"],"sourcesContent":["'use client';\nimport { useId } from 'react';\nimport {\n Checkbox as AriaCheckbox,\n CheckboxGroup as AriaCheckboxGroup,\n composeRenderProps,\n type CheckboxProps as AriaCheckboxProps,\n} from 'react-aria-components';\n\nimport { useFieldContext } from '../utilities/form-context';\nimport { classNames } from '../utilities/theme';\nimport { FormField, labelVariants, type FormFieldProps } from './form';\nimport { IcCheck, IcMinus } from './icons';\n\nconst disabledClasses = 'group-data-[disabled]/checkbox:cursor-not-allowed group-data-[disabled]/checkbox:opacity-50';\nconst invalidBorderClasses = 'group-data-[invalid]/checkbox:border-destructive';\nconst focusResetClasses = 'focus:outline-none focus-visible:outline-none';\nconst selectedPrimaryClasses = 'group-data-[selected]/checkbox:bg-primary';\n\nconst switchBaseClasses =\n 'relative shrink-0 h-6 w-11 rounded-full border border-input bg-elevation-2 transition-colors duration-200';\nconst switchKnobClasses =\n 'absolute top-1/2 -translate-y-1/2 left-0.5 h-5 w-5 rounded-full bg-background border border-input transition-transform duration-200';\n\nconst checkboxBaseClasses =\n 'flex size-input shrink-0 items-center bg-elevation-2 justify-center border border-input text-current ring-offset-background';\n\nexport const CheckboxGroup = AriaCheckboxGroup;\ntype CheckboxProps = AriaCheckboxProps &\n FormFieldProps & {\n variant?: 'checkbox' | 'switch';\n };\nexport function Checkbox({\n className,\n label,\n description,\n errorMessage,\n requiredIndicator,\n variant = 'checkbox',\n ...props\n}: Omit<CheckboxProps, 'children'>) {\n const generatedId = useId();\n const fieldId = props.id || generatedId;\n const isSwitch = variant === 'switch';\n return (\n <div className=\"group form-field\">\n <FormField\n {...{\n label,\n description,\n errorMessage,\n requiredIndicator,\n htmlFor: fieldId,\n }}\n >\n <AriaCheckbox\n className={composeRenderProps(className, className =>\n classNames(\n 'group/checkbox cursor-pointer relative focus-ring flex items-center gap-x-2 disabled-muted',\n labelVariants,\n className\n )\n )}\n id={fieldId}\n {...props}\n >\n {composeRenderProps(<></>, (_, renderProps) => {\n if (isSwitch) {\n return (\n <div\n className={classNames(\n switchBaseClasses,\n selectedPrimaryClasses,\n disabledClasses,\n invalidBorderClasses,\n 'group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive',\n focusResetClasses\n )}\n >\n <div\n className={classNames(\n switchKnobClasses,\n 'group-data-[selected]/checkbox:translate-x-4.5',\n disabledClasses,\n invalidBorderClasses\n )}\n />\n </div>\n );\n }\n\n return (\n <div\n className={classNames(\n checkboxBaseClasses,\n 'group-data-[indeterminate]/checkbox:bg-primary',\n selectedPrimaryClasses,\n 'group-data-[indeterminate]/checkbox:text-primary-foreground group-data-[selected]/checkbox:text-primary-foreground',\n disabledClasses,\n invalidBorderClasses,\n 'group-data-[invalid]/checkbox:group-data-[selected]/checkbox:bg-destructive group-data-[invalid]/checkbox:group-data-[selected]/checkbox:text-destructive-foreground',\n focusResetClasses\n )}\n >\n {renderProps.isIndeterminate && <IcMinus className=\"size-icon\" />}\n {!renderProps.isIndeterminate && renderProps.isSelected && (\n <IcCheck className=\"size-icon\" />\n )}\n </div>\n );\n })}\n </AriaCheckbox>\n </FormField>\n </div>\n );\n}\n\nexport type TfCheckboxProps = Omit<React.ComponentProps<typeof Checkbox>, 'onChange' | 'onBlur' | 'isChecked'>;\nexport function TfCheckbox({ ...props }: TfCheckboxProps) {\n const field = useFieldContext<boolean>({ disabled: props.isDisabled });\n return (\n <Checkbox\n requiredIndicator={field.isRequired}\n isSelected={field.state.value}\n isDisabled={field.form.state.isSubmitting || props.isDisabled}\n onChange={() => field.handleChange(!field.state.value)}\n onBlur={field.handleBlur}\n {...props}\n />\n );\n}\n"],"names":["disabledClasses","invalidBorderClasses","focusResetClasses","selectedPrimaryClasses","switchBaseClasses","switchKnobClasses","checkboxBaseClasses","CheckboxGroup","AriaCheckboxGroup","Checkbox","className","label","description","errorMessage","requiredIndicator","variant","props","generatedId","useId","fieldId","isSwitch","jsx","FormField","AriaCheckbox","composeRenderProps","classNames","labelVariants","Fragment","_","renderProps","jsxs","IcMinus","IcCheck","TfCheckbox","field","useFieldContext"],"mappings":"+eAcA,MAAMA,EAAkB,8FAClBC,EAAuB,mDACvBC,EAAoB,gDACpBC,EAAyB,4CAEzBC,EACF,4GACEC,EACF,sIAEEC,EACF,8HAESC,EAAgBC,EAKtB,SAASC,EAAS,CACrB,UAAAC,EACA,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,QAAAC,EAAU,WACV,GAAGC,CACP,EAAoC,CAChC,MAAMC,EAAcC,EAAA,EACdC,EAAUH,EAAM,IAAMC,EACtBG,EAAWL,IAAY,SAC7B,OACIM,EAAC,MAAA,CAAI,UAAU,mBACX,SAAAA,EAACC,EAAA,CAEO,MAAAX,EACA,YAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,QAASK,EAGb,SAAAE,EAACE,EAAA,CACG,UAAWC,EAAmBd,EAAWA,GACrCe,EACI,6FACAC,EACAhB,CAAA,CACJ,EAEJ,GAAIS,EACH,GAAGH,EAEH,SAAAQ,EAAmBH,EAAAM,EAAA,CAAA,CAAE,EAAK,CAACC,EAAGC,IACvBT,EAEIC,EAAC,MAAA,CACG,UAAWI,EACPrB,EACAD,EACAH,EACAC,EACA,8EACAC,CAAA,EAGJ,SAAAmB,EAAC,MAAA,CACG,UAAWI,EACPpB,EACA,iDACAL,EACAC,CAAA,CACJ,CAAA,CACJ,CAAA,EAMR6B,EAAC,MAAA,CACG,UAAWL,EACPnB,EACA,iDACAH,EACA,qHACAH,EACAC,EACA,uKACAC,CAAA,EAGH,SAAA,CAAA2B,EAAY,iBAAmBR,EAACU,EAAA,CAAQ,UAAU,YAAY,EAC9D,CAACF,EAAY,iBAAmBA,EAAY,YACzCR,EAACW,EAAA,CAAQ,UAAU,WAAA,CAAY,CAAA,CAAA,CAAA,CAI9C,CAAA,CAAA,CACL,CAAA,EAER,CAER,CAGO,SAASC,EAAW,CAAE,GAAGjB,GAA0B,CACtD,MAAMkB,EAAQC,EAAyB,CAAE,SAAUnB,EAAM,WAAY,EACrE,OACIK,EAACZ,EAAA,CACG,kBAAmByB,EAAM,WACzB,WAAYA,EAAM,MAAM,MACxB,WAAYA,EAAM,KAAK,MAAM,cAAgBlB,EAAM,WACnD,SAAU,IAAMkB,EAAM,aAAa,CAACA,EAAM,MAAM,KAAK,EACrD,OAAQA,EAAM,WACb,GAAGlB,CAAA,CAAA,CAGhB"}
@@ -1,2 +1,2 @@
1
1
  "use client";import{jsxs as s,Fragment as b,jsx as r}from"react/jsx-runtime";import{normalizeLabel as d}from"../utilities/string.js";import{Button as g}from"./button.js";import{useDialogState as D,DialogActionRenderer as A,findItemByNormalizedLabel as y}from"./dialog-action-utils.js";import"lodash-es";import"class-variance-authority";import"react-aria-components";import"../utilities/theme.js";import"clsx";import"./loader.js";import"./icons.js";import"react";import"./dialog.js";function h(t){return t.type==="action"}function c(t){return t.type==="dialog"}function I(t,i){return t.isDisabled?t.isDisabled(i):!1}function k({items:t,rowsSelected:i,isFetching:p}){const{openKey:u,setOpenKey:e}=D();return s(b,{children:[t.map((n,o)=>{const a=d(n.label),f=n.icon,l=I(n,i)||p;return s(g,{"aria-label":n.label,type:"button",isDisabled:l,className:"animate-in fade-in slide-in-from-left-15 duration-300 transition-transform",onPress:m=>{l||(h(n)?n.onClick(m,i):c(n)&&e(a))},variant:n.variant??"neutral",children:[r(f,{}),r("span",{children:n.label})]},`${a}-${o}`)}),r(A,{openKey:u,onOpenChange:n=>{n||e(null)},findItem:n=>{const o=y(t,n);return!o||!c(o)?null:{component:o.component}},getDialogProps:n=>({data:i,tableAction:!0,close:n})})]})}export{k as TableActions};
2
- //# sourceMappingURL=table-actions.js.map
2
+ //# sourceMappingURL=data-table-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-actions.js","sources":["../../lib/components/data-table-actions.tsx"],"sourcesContent":["'use client';\nimport type React from 'react';\nimport type { PressEvent } from 'react-aria-components';\nimport { normalizeLabel } from '../utilities/string';\nimport { Button } from './button';\nimport { DialogActionRenderer, findItemByNormalizedLabel, useDialogState } from './dialog-action-utils';\nimport type { CtxIcon } from './icons';\n\nexport type TableActionDialogContentProps<T> = {\n /** Callback to close the dialog */\n close: () => void;\n /** The data passed to the dialog - array of selected rows */\n data: T[];\n /** Flag to identify table action dialogs */\n tableAction: true;\n};\n\n/** Base properties shared by all table actions */\nexport type TableActionBase<T> = {\n label: string;\n /** Optional function to determine if the action is disabled. Receives the rows and returns a boolean. Defaults to false if not provided */\n isDisabled?: (rows: T[]) => boolean;\n icon: CtxIcon;\n bulk: boolean;\n tooltip?: string;\n /** Optional button variant to pass through to Button (defaults to neutral) */\n variant?: React.ComponentProps<typeof Button>['variant'];\n};\n\n/** Action that triggers a callback */\nexport type TableActionAction<T> = TableActionBase<T> & {\n type: 'action';\n /** Callback triggered when the action is pressed. Receives the press event and selected rows as parameters */\n onClick: (e: PressEvent, rows: T[]) => void;\n};\n\n/** Action that opens a dialog */\nexport type TableActionDialog<T> = TableActionBase<T> & {\n type: 'dialog';\n /** Component to render in the dialog */\n component: React.ComponentType<TableActionDialogContentProps<T>>;\n};\n\n/** Common table action type that works for both action and dialog types */\nexport type TableAction<T> = TableActionAction<T> | TableActionDialog<T>;\n\nfunction isTableActionAction<T>(item: TableAction<T>): item is TableActionAction<T> {\n return item.type === 'action';\n}\n\nfunction isTableActionDialog<T>(item: TableAction<T>): item is TableActionDialog<T> {\n return item.type === 'dialog';\n}\n\nfunction getTableActionIsDisabled<T>(item: TableAction<T>, rows: T[]): boolean {\n return item.isDisabled ? item.isDisabled(rows) : false;\n}\n\nexport type TableActionsProps<T> = {\n /** Array of table actions to render */\n readonly items: TableAction<T>[];\n /** Array of selected rows */\n readonly rowsSelected: T[];\n /** Whether the table is currently fetching data */\n readonly isFetching?: boolean;\n};\n\nexport function TableActions<T>({ items, rowsSelected, isFetching }: TableActionsProps<T>) {\n const { openKey, setOpenKey } = useDialogState();\n\n return (\n <>\n {items.map((item, i) => {\n const id = normalizeLabel(item.label);\n const Icon = item.icon;\n const isDisabled = getTableActionIsDisabled(item, rowsSelected) || isFetching;\n\n return (\n <Button\n key={`${id}-${i}`}\n aria-label={item.label}\n type=\"button\"\n isDisabled={isDisabled}\n className=\"animate-in fade-in slide-in-from-left-15 duration-300 transition-transform\"\n onPress={e => {\n if (isDisabled) return;\n\n if (isTableActionAction(item)) {\n item.onClick(e, rowsSelected);\n } else if (isTableActionDialog(item)) {\n setOpenKey(id);\n }\n }}\n variant={item.variant ?? 'neutral'}\n >\n <Icon />\n <span>{item.label}</span>\n </Button>\n );\n })}\n\n <DialogActionRenderer<TableActionDialogContentProps<T>>\n openKey={openKey}\n onOpenChange={open => {\n if (!open) setOpenKey(null);\n }}\n findItem={key => {\n const item = findItemByNormalizedLabel(items, key);\n if (!item || !isTableActionDialog(item)) return null;\n return { component: item.component };\n }}\n getDialogProps={close => ({ data: rowsSelected, tableAction: true, close })}\n />\n </>\n );\n}\n"],"names":["isTableActionAction","item","isTableActionDialog","getTableActionIsDisabled","rows","TableActions","items","rowsSelected","isFetching","openKey","setOpenKey","useDialogState","jsxs","Fragment","i","id","normalizeLabel","Icon","isDisabled","Button","e","jsx","DialogActionRenderer","open","key","findItemByNormalizedLabel","close"],"mappings":"keA8CA,SAASA,EAAuBC,EAAoD,CAChF,OAAOA,EAAK,OAAS,QACzB,CAEA,SAASC,EAAuBD,EAAoD,CAChF,OAAOA,EAAK,OAAS,QACzB,CAEA,SAASE,EAA4BF,EAAsBG,EAAoB,CAC3E,OAAOH,EAAK,WAAaA,EAAK,WAAWG,CAAI,EAAI,EACrD,CAWO,SAASC,EAAgB,CAAE,MAAAC,EAAO,aAAAC,EAAc,WAAAC,GAAoC,CACvF,KAAM,CAAE,QAAAC,EAAS,WAAAC,CAAA,EAAeC,EAAA,EAEhC,OACIC,EAAAC,EAAA,CACK,SAAA,CAAAP,EAAM,IAAI,CAACL,EAAMa,IAAM,CACpB,MAAMC,EAAKC,EAAef,EAAK,KAAK,EAC9BgB,EAAOhB,EAAK,KACZiB,EAAaf,EAAyBF,EAAMM,CAAY,GAAKC,EAEnE,OACII,EAACO,EAAA,CAEG,aAAYlB,EAAK,MACjB,KAAK,SACL,WAAAiB,EACA,UAAU,6EACV,QAASE,GAAK,CACNF,IAEAlB,EAAoBC,CAAI,EACxBA,EAAK,QAAQmB,EAAGb,CAAY,EACrBL,EAAoBD,CAAI,GAC/BS,EAAWK,CAAE,EAErB,EACA,QAASd,EAAK,SAAW,UAEzB,SAAA,CAAAoB,EAACJ,EAAA,EAAK,EACNI,EAAC,OAAA,CAAM,SAAApB,EAAK,KAAA,CAAM,CAAA,CAAA,EAjBb,GAAGc,CAAE,IAAID,CAAC,EAAA,CAoB3B,CAAC,EAEDO,EAACC,EAAA,CACG,QAAAb,EACA,aAAcc,GAAQ,CACbA,GAAMb,EAAW,IAAI,CAC9B,EACA,SAAUc,GAAO,CACb,MAAMvB,EAAOwB,EAA0BnB,EAAOkB,CAAG,EACjD,MAAI,CAACvB,GAAQ,CAACC,EAAoBD,CAAI,EAAU,KACzC,CAAE,UAAWA,EAAK,SAAA,CAC7B,EACA,eAAgByB,IAAU,CAAE,KAAMnB,EAAc,YAAa,GAAM,MAAAmB,CAAA,EAAM,CAAA,CAC7E,EACJ,CAER"}
@@ -26,7 +26,7 @@ export type FilterConfig = {
26
26
  options: MultiSelectProps['items'];
27
27
  } | ({
28
28
  type: 'id-search';
29
- } & Pick<React.ComponentProps<typeof TfMultipleIdSearchInput>, 'accessor' | 'resource'>) | {
29
+ } & Pick<React.ComponentProps<typeof TfMultipleIdSearchInput>, 'accessor' | 'path'>) | {
30
30
  type: 'id';
31
31
  } | {
32
32
  type: 'bool';
@@ -1,2 +1,2 @@
1
- import"react/jsx-runtime";import"react";import"./button.js";import{C as Z,D as $,F as rr}from"./data-table.js";import"./date-picker.js";import"./menu.js";import"./popover.js";import"../utilities/form-hook.js";import"../utilities/resources.js";import"../utilities/theme.js";import"./icons.js";import"./id-search.js";import"class-variance-authority";import"react-aria-components";import"./loader.js";import"clsx";import"@dnd-kit/core";import"@dnd-kit/sortable";import"@dnd-kit/utilities";import"@tanstack/react-query";import"@tanstack/react-table";import"@uidotdev/usehooks";import"lodash-es";import"./badge.js";import"./dialog-menu.js";import"../utilities/string.js";import"./dialog-action-utils.js";import"./dialog.js";import"./list-box.js";import"./select.js";import"../utilities/form.js";import"../utilities/form-context.js";import"@tanstack/react-form";import"./form.js";import"./searchfield.js";import"./table.js";import"../utilities/countries.js";import"./select-options.js";import"../utilities/date.js";import"../utilities/numbers.js";import"zod";import"../utilities/duration.js";import"./checkbox.js";import"./table-actions.js";import"@internationalized/date";import"./calendar.js";import"./datefield.js";import"./multi-select.js";import"./numberfield.js";import"./textfield.js";import"../utilities/ctx-client.js";export{Z as COMPARISON_OPERATOR_LABELS,$ as DataTableFilter,rr as FILTER_COMPARISON_OPERATORS};
1
+ import"react/jsx-runtime";import"react";import"./button.js";import{C as Z,D as $,F as rr}from"./data-table.js";import"./date-picker.js";import"./menu.js";import"./popover.js";import"../utilities/form-hook.js";import"../utilities/resources.js";import"../utilities/theme.js";import"./icons.js";import"./id-search.js";import"class-variance-authority";import"react-aria-components";import"./loader.js";import"clsx";import"@dnd-kit/core";import"@dnd-kit/sortable";import"@dnd-kit/utilities";import"@tanstack/react-query";import"@tanstack/react-table";import"@uidotdev/usehooks";import"lodash-es";import"./badge.js";import"./dialog-menu.js";import"../utilities/string.js";import"./dialog-action-utils.js";import"./dialog.js";import"./list-box.js";import"./select.js";import"../utilities/form.js";import"../utilities/form-context.js";import"@tanstack/react-form";import"./form.js";import"./searchfield.js";import"./table.js";import"../utilities/countries.js";import"./select-options.js";import"../utilities/date.js";import"../utilities/numbers.js";import"zod";import"../utilities/duration.js";import"./checkbox.js";import"./data-table-actions.js";import"../utilities/ctx-client.js";import"@internationalized/date";import"./calendar.js";import"./datefield.js";import"./multi-select.js";import"./numberfield.js";import"./textfield.js";export{Z as COMPARISON_OPERATOR_LABELS,$ as DataTableFilter,rr as FILTER_COMPARISON_OPERATORS};
2
2
  //# sourceMappingURL=data-table-filter.js.map
@@ -1,34 +1,19 @@
1
1
  import { operations } from '@cryptlex/web-api-types/develop';
2
- import { ColumnDef, ColumnHelper, PaginationState, RowData, SortingState } from '@tanstack/react-table';
2
+ import { ColumnDef, PaginationState, RowData, SortingState, ColumnHelper } from '@tanstack/react-table';
3
3
  import { FiltersConfig, TableFilter } from '../components/data-table-filter';
4
4
  import { DialogMenuAction } from '../components/dialog-menu';
5
- import { CtxResourceName } from '../utilities/resources';
6
- import { TableAction } from './table-actions';
5
+ import { ApiResponseBody } from '../utilities/resources';
6
+ import { TableAction } from './data-table-actions';
7
+ import { ClientPathsWithMethod } from 'openapi-fetch';
8
+ import { CtxClientType } from '../utilities/ctx-client';
7
9
  export type DisplayType = 'string' | 'boolean' | 'date' | 'number' | 'enum' | 'badge' | 'country' | 'fileSize' | 'days';
8
10
  declare module '@tanstack/react-table' {
9
11
  interface ColumnMeta<TData extends RowData, TValue> {
10
12
  displayType: DisplayType;
11
13
  }
12
14
  }
13
- /** Reserved name for actions column */
14
- export type TableFetchFn<in out TData extends object> = (p: PaginationState, s: SortingState, q: string, f: Record<string, any>) => Promise<{
15
- total: number;
16
- data: TData[] | undefined;
17
- }>;
18
- export declare function getTableCallback<T extends object>(getter: (q: Record<string, any>) => Promise<{
19
- data?: T[];
20
- error?: {
21
- code?: string | null;
22
- message: string;
23
- };
24
- response: Response;
25
- }>): {
26
- callback: TableFetchFn<T>;
27
- columnHelper: ColumnHelper<T>;
28
- };
29
15
  type DataTableFactory<T extends object, TOperation extends keyof operations> = {
30
- resourceName: CtxResourceName;
31
- callback: TableFetchFn<T>;
16
+ path: NoInfer<ClientPathsWithMethod<CtxClientType, 'get'>>;
32
17
  columns: ColumnDef<T, any>[];
33
18
  tableActions: TableAction<T>[];
34
19
  columnsToHideByDefault?: Partial<Record<keyof T, boolean>>;
@@ -41,15 +26,16 @@ type DataTableState = {
41
26
  sorting: SortingState;
42
27
  pagination: PaginationState;
43
28
  };
29
+ export declare function getColumnHelper<O extends keyof operations>(): ColumnHelper<ApiResponseBody<O>>;
44
30
  /**
45
31
  * Hook for handling all data-table state. Used in DataTableContext
46
32
  */
47
- export declare function useDataTableState<T extends object, TOperation extends keyof operations>({ resourceName, columns, callback, filterConfig, columnsToHideByDefault, allowSelection, initialFilters, tableActions, rowActions, }: DataTableFactory<T, TOperation>): {
33
+ export declare function useDataTableState<T extends object, TOperation extends keyof operations>({ path, columns, filterConfig, columnsToHideByDefault, allowSelection, initialFilters, tableActions, rowActions, }: DataTableFactory<T, TOperation>): {
48
34
  readonly tableState: DataTableState;
49
35
  readonly updateTableState: (updates: Partial<DataTableState>) => void;
50
36
  readonly query: import('@tanstack/react-query').UseQueryResult<{
37
+ data: T[];
51
38
  total: number;
52
- data: T[] | undefined;
53
39
  }, Error>;
54
40
  readonly setSearchQuery: import('react').Dispatch<import('react').SetStateAction<string>>;
55
41
  readonly searchQuery: string;
@@ -68,8 +54,8 @@ export declare const DataTableContext: import('react').Context<{
68
54
  readonly tableState: DataTableState;
69
55
  readonly updateTableState: (updates: Partial<DataTableState>) => void;
70
56
  readonly query: import('@tanstack/react-query').UseQueryResult<{
57
+ data: object[];
71
58
  total: number;
72
- data: object[] | undefined;
73
59
  }, Error>;
74
60
  readonly setSearchQuery: import('react').Dispatch<import('react').SetStateAction<string>>;
75
61
  readonly searchQuery: string;
@@ -88,8 +74,8 @@ export declare function useDataTable(): {
88
74
  readonly tableState: DataTableState;
89
75
  readonly updateTableState: (updates: Partial<DataTableState>) => void;
90
76
  readonly query: import('@tanstack/react-query').UseQueryResult<{
77
+ data: object[];
91
78
  total: number;
92
- data: object[] | undefined;
93
79
  }, Error>;
94
80
  readonly setSearchQuery: import('react').Dispatch<import('react').SetStateAction<string>>;
95
81
  readonly searchQuery: string;
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as t,Fragment as w,jsxs as s}from"react/jsx-runtime";import{createContext as ae,useState as N,useMemo as ie,useEffect as oe,useContext as le,useRef as se}from"react";import{Button as y}from"./button.js";import{useSensors as ce,useSensor as H,PointerSensor as ue,KeyboardSensor as de,DndContext as me,closestCenter as ge,DragOverlay as pe}from"@dnd-kit/core";import{sortableKeyboardCoordinates as fe,SortableContext as he,verticalListSortingStrategy as be,arrayMove as Se,useSortable as ye}from"@dnd-kit/sortable";import{CSS as ve}from"@dnd-kit/utilities";import{useQuery as Ce,keepPreviousData as we}from"@tanstack/react-query";import{createColumnHelper as X,useReactTable as xe,getCoreRowModel as Te,flexRender as L}from"@tanstack/react-table";import{useLocalStorage as V}from"@uidotdev/usehooks";import{merge as Ie}from"lodash-es";import{Badge as Ne}from"./badge.js";import{TfDatePicker as Fe}from"./date-picker.js";import{EasyMenu as E,MenuItem as R}from"./menu.js";import{PopoverTrigger as Ae,Popover as De}from"./popover.js";import{useAppForm as Pe}from"../utilities/form-hook.js";import{useResourceFormatter as $}from"../utilities/resources.js";import{classNames as S}from"../utilities/theme.js";import{IcInfo as Re,IcMoreVertical as Oe,IcRefresh as ze,IcColumns as _e,IcGrip as Le,IcFirst as Me,IcLeft as Ee,IcRight as $e,IcLast as qe,IcSortAsc as je,IcSortDesc as ke,IcSortNone as He,IcFilter as Ve,IcRemove as U,IcCheck as B,IcMinus as Ue,IcAccount as Be,IcLicense as Ke,IcDate as Qe,IcFile as Ge}from"./icons.js";import{TfMultipleIdSearchInput as We}from"./id-search.js";import{DialogMenu as Xe}from"./dialog-menu.js";import{Loader as Ze}from"./loader.js";import{SearchField as Je}from"./searchfield.js";import{Table as Ye,TableHeader as et,TableRow as K,TableHead as tt,TableBody as nt,TableCell as rt}from"./table.js";import{CountryName as at}from"../utilities/countries.js";import{formatDate as it}from"../utilities/date.js";import{formatDays as ot,formatFilesize as lt,formatNumber as st}from"../utilities/numbers.js";import{Checkbox as Q}from"./checkbox.js";import{TableActions as ct}from"./table-actions.js";import"class-variance-authority";import"react-aria-components";import"@internationalized/date";import"./calendar.js";import"./form.js";import"./datefield.js";import"../utilities/form.js";import"../utilities/form-context.js";import"@tanstack/react-form";import"./list-box.js";import"./select.js";import"./multi-select.js";import"./numberfield.js";import"./textfield.js";import"../utilities/string.js";import"clsx";import"../utilities/ctx-client.js";import"./dialog-action-utils.js";import"./dialog.js";import"./select-options.js";import"zod";import"../utilities/duration.js";function wn(e){const r=async(i,a,g,l)=>{const u={...l,page:i.pageIndex+1,limit:i.pageSize,sort:ut(a[0]),search:g},p=await e(u);return{total:Number.parseInt(p.response.headers.get("Pagination-Count")||"0"),data:p.data}},n=X();return{callback:r,columnHelper:n}}function ut(e){return e?e.desc?`-${e.id}`:`+${e.id}`:"-createdAt"}const F=X(),dt=[F.accessor("checkbox",{header:({table:e})=>t(Q,{isIndeterminate:e.getIsSomeRowsSelected()&&!e.getIsAllPageRowsSelected(),isSelected:e.getIsAllPageRowsSelected()||e.getIsSomePageRowsSelected(),onChange:()=>e.toggleAllPageRowsSelected(),"aria-label":"Select all"}),cell:({row:e})=>t(Q,{isSelected:e.getIsSelected(),onChange:()=>e.toggleSelected(),"aria-label":"Select row"}),enableSorting:!1,enableHiding:!1})],mt=[F.accessor("id",{header:"ID",meta:{displayType:"string"}})],gt=[F.accessor("createdAt",{header:"Creation Date",meta:{displayType:"date"},enableHiding:!1}),F.accessor("updatedAt",{header:"Last Updated",meta:{displayType:"date"},enableHiding:!1})],C="TableActions",pt=e=>e.length===0?[]:[F.accessor(C,{header:"Actions",id:C,enableHiding:!1,cell:({row:r})=>t(Xe,{label:t(Oe,{}),data:r.original,items:e}),enableSorting:!1})];function xn({resourceName:e,columns:r,callback:n,filterConfig:i,columnsToHideByDefault:a={},allowSelection:g=!1,initialFilters:l=[],tableActions:u,rowActions:p}){const[d,v]=N({pagination:{pageIndex:0,pageSize:20},sorting:[]}),[m,c]=N({}),[h,f]=N(""),[b,q]=V(`${e}_ctx_column_order_preference`,[]),[j,ee]=V(`${e}_ctx_column_visibility_preference`,{id:!1,...a}),[O,te]=N(l),z=ie(()=>O.map(o=>Array.isArray(o.value)?{[o.property]:{[o.operator]:o.value.join(",")}}:{[o.property]:{[o.operator]:o.value}}).reduce((o,I)=>Ie(o,I),{}),[O]),_=o=>{v(I=>({...I,...o}))},{sorting:A,pagination:D}=d,P=Ce({queryKey:[e,D,A,h,z],queryFn:()=>n(D,A,h,z),placeholderData:we,retry:0,refetchOnWindowFocus:!1}),ne=[...g?dt:[],...mt,...r,...gt,...pt(p??[])];function re(o){return typeof o=="function"}function T(o,I){return re(o)?o(I):o}const k=xe({data:P.data?.data??[],columns:ne,getCoreRowModel:Te(),rowCount:P.data?.total,manualPagination:!0,onPaginationChange:o=>{_({pagination:T(o,D)})},manualSorting:!0,onSortingChange:o=>{c({}),_({sorting:[...T(o,A)]})},manualFiltering:!0,onColumnVisibilityChange:o=>{ee(T(o,j))},onRowSelectionChange:o=>{c(T(o,m))},onColumnOrderChange:o=>{q(T(o,b))},state:{sorting:A,columnVisibility:j,pagination:D,rowSelection:m,columnOrder:b},meta:{refetch:P.refetch}});return oe(()=>{q([...k.getAllLeafColumns().map(o=>o.id)])},[]),{tableState:d,updateTableState:_,query:P,setSearchQuery:f,searchQuery:h,tanTable:k,mergedFilters:z,filters:O,setFilters:te,filterConfig:i,tableActions:u}}const Z=ae(null);function x(){const e=le(Z);if(!e)throw Error("DataTable should be used within DataTableProvider.");return e}function Tn({children:e,...r}){return t(Z.Provider,{value:r,children:e})}function In({className:e,...r}){const{query:n,tanTable:i}=x();return t(w,{children:s("section",{...r,className:S("flex flex-col bg-elevation-1",e),children:[t(St,{}),s("div",{className:"w-full overflow-auto border-x h-table relative",tabIndex:0,children:[n.isLoading&&t(G,{className:"cursor-wait",children:t(Ze,{})}),!n.isLoading&&i.getRowModel().rows.length===0&&t(G,{className:"cursor-not-allowed",children:!n.isFetching&&(n.isError?s("span",{className:"flex gap-3 justify-center items-center",children:[t(Re,{}),t("span",{children:n.error.message})]}):n.data?.data?.length===0?t(w,{children:"No results found."}):t(w,{children:"Unknown error. Please contact customer support."}))}),!n.isLoading&&i.getRowModel().rows.length!==0&&t(vt,{className:"w-full"})]}),s("div",{className:"flex w-full justify-between border gap-icon p-icon overflow-x-auto",children:[s("div",{className:"flex gap-icon",children:[t(ft,{}),t(bt,{})]}),t(ht,{})]})]})})}function G({children:e,className:r}){return s(w,{children:[t("span",{className:S(r,"absolute top-0 bg-elevation-1 text-foreground z-20 size-full body-sm flex items-center justify-center"),children:e}),t("span",{className:"relative h-full w-0 block"})]})}function ft(){const{tanTable:e}=x(),[r,n]=N(null),i=$(),a=ce(H(ue),H(de,{coordinateGetter:fe}));return t(me,{sensors:a,collisionDetection:ge,onDragStart:l=>{const{active:u}=l;n(u.id.toString())},onDragEnd:l=>{const{active:u,over:p}=l;if(p&&u.id!==p.id){const d=e.getState().columnOrder,v=d.indexOf(u.id.toString()),m=d.indexOf(p.id.toString());e.setColumnOrder([...Se(d,v,m)])}n(null)},children:s(he,{items:e.getState().columnOrder,strategy:be,children:[s(E,{label:s(w,{children:[t(_e,{className:"inline align-bottom me-1"}),"Columns"]}),selectionMode:"multiple",items:e.getAllFlatColumns(),selectedKeys:e.getVisibleFlatColumns().map(l=>l.id),children:[t(R,{onAction:()=>e.toggleAllColumnsVisible(),className:"italic",children:"(select all)"}),e.getState().columnOrder.map(l=>{const u=e.getAllFlatColumns().find(p=>p.id===l);return!u||u.id==="checkbox"||u.id===C?null:t(g,{column:u},u.id)})]}),t(pe,{children:r?t("div",{className:"opacity-70 border-2 border-primary",children:i(r)}):null})]})});function g({column:l}){const{attributes:u,listeners:p,setNodeRef:d,transform:v,transition:m}=ye({id:l.id}),c={transform:ve.Transform.toString(v),transition:m,zIndex:"999"};return s(R,{ref:d,style:c,...u,id:l.id,onAction:()=>l.toggleVisibility(),isDisabled:!l.getCanHide(),className:"flex items-center",children:[t(Le,{...p,className:"size-icon cursor-grab"}),M(l),l.getIsSorted()&&t(J,{className:"size-icon",direction:l.getIsSorted()})]})}}function ht(){const{tanTable:e,query:r}=x(),n=r.data?.total??0;return s("div",{className:"flex items-center gap-2",children:[t("span",{className:"whitespace-nowrap body-sm text-muted",children:`${e.getState().pagination.pageIndex*e.getState().pagination.pageSize+1} - ${Math.min((e.getState().pagination.pageIndex+1)*e.getState().pagination.pageSize,n)} of ${n?.toLocaleString()}`}),t(y,{"aria-label":"First page",onPress:()=>e.firstPage(),isDisabled:!e.getCanPreviousPage(),variant:"neutral",size:"icon",children:t(Me,{})}),t(y,{"aria-label":"Previous page",onPress:()=>e.previousPage(),isDisabled:!e.getCanPreviousPage(),variant:"neutral",size:"icon",children:t(Ee,{})}),t(y,{"aria-label":"Next page",onPress:()=>e.nextPage(),isDisabled:!e.getCanNextPage(),variant:"neutral",size:"icon",children:t($e,{})}),t(y,{"aria-label":"Last page",onClick:()=>e.lastPage(),isDisabled:!e.getCanNextPage(),variant:"neutral",size:"icon",children:t(qe,{})})]})}function bt(){const{tanTable:e}=x(),r=[10,20,30,40,50];return t(E,{label:e.getState().pagination.pageSize.toString(),selectionMode:"single",selectedKeys:[e.getState().pagination.pageSize.toString()],items:r.map(n=>({id:n.toString(),value:n})),children:n=>t(R,{onAction:()=>e.setPageSize(n.value),children:n.value})})}function St(){const{query:e,tanTable:r,searchQuery:n,setSearchQuery:i,tableActions:a}=x(),g=r.getSelectedRowModel().rows.length>0,l=r.getSelectedRowModel().rows.map(p=>p.original),u=a.filter(p=>p.bulk===g);return s("section",{className:"flex bg-elevation-1 justify-between my-0 p-icon border gap-icon overflow-auto",children:[s("div",{className:"flex gap-icon",children:[t(y,{"aria-label":"Refresh",isPending:e.isFetching,onClick:()=>e.refetch(),variant:"neutral",size:"icon",children:t(ze,{})}),t(ct,{items:u,rowsSelected:l,isFetching:e.isFetching})]}),s("div",{className:"flex gap-icon",children:[t(xt,{}),t(Je,{value:n,onChange:i})]})]})}function J({direction:e,...r}){return e==="asc"?t(je,{className:"size-3.5",...r}):e==="desc"?t(ke,{className:"size-3.5",...r}):t(He,{className:"size-3.5",...r})}function M(e){const r=$(),n=e.columnDef.header;return typeof n=="string"?n:r(e.id)}function yt(e){const r=e.column.columnDef.meta?.displayType,n=e.getValue();if(n==null)return null;switch(r){case"date":return it(n);case"number":return st(n);case"boolean":case"badge":return t(Ne,{className:"uppercase w-full",children:String(n)});case"country":return t(at,{value:n});case"enum":return t("span",{className:"uppercase w-full",children:String(n)});case"fileSize":return lt(n);case"days":return ot(n);default:return String(n)}}function W({header:e}){const r=e.column.columnDef.header;return typeof r=="string"||!r?M(e.column):typeof r=="function"?typeof r(e.getContext())=="string"?M(e.column):L(r,e.getContext()):L(r,e.getContext())}function vt({className:e}){const{tanTable:r}=x(),n=(i,a,g="z-50")=>S("px-icon py-2 text-left body-sm font-medium whitespace-nowrap",i&&`bg-elevation-1 sticky right-0 ${g} text-center justify-center`,a);return s(Ye,{className:S("table-auto",e),children:[t(et,{className:"sticky top-0 z-10",children:r.getHeaderGroups().map(i=>t(K,{children:i.headers.map(a=>s(tt,{scope:"col",colSpan:a.colSpan,className:n(a.id===C,"bg-elevation-1"),children:[!a.column.getCanSort()&&!a.isPlaceholder&&t("div",{className:S("w-full py-1 inline-flex items-center gap-1 body-sm",a.id===C?"justify-center":"justify-start"),children:t(W,{header:a})}),a.column.getCanSort()&&s(y,{variant:"ghost",className:S("w-full p-1",a.id===C?"justify-center":"justify-start"),onPress:a.column.getToggleSortingHandler(),children:[t("span",{children:t(W,{header:a})}),t(J,{direction:a.column.getIsSorted()})]})]},a.id))},i.id))}),t(nt,{children:r.getRowModel().rows.map(i=>t(K,{className:S("transition-colors data-[selected=true]:bg-primary/10 hover:bg-muted-foreground/20"),"data-selected":i.getIsSelected(),children:i.getVisibleCells().map(a=>{const g=a.column.id===C,l=a.column.columnDef.meta?.displayType?yt(a):L(a.column.columnDef.cell,a.getContext());return t(rt,{className:S(n(g,void 0,"z-1"),g&&"flex justify-center items-center"),children:l},a.id)})},i.id))})]})}const Nn=["eq","ne","cn","nc","sw","ew","in","nin","gt","gte","lt","lte"],Ct={eq:"equal to",ne:"not equal to",cn:"contains",nc:"does not contain",sw:"starts with",ew:"ends with",in:"includes",nin:"does not include",gt:"greater than",gte:"greater than or equal to",lt:"less than",lte:"less than or equal to"};function wt(e,r){const n=`${r}-${Date.now()}`,i=Y[e][0];switch(e){case"bool":return{id:n,type:e,property:r,operator:i,value:!0};case"string":return{id:n,type:e,property:r,operator:i,value:""};case"date":return{id:n,type:e,property:r,operator:i,value:new Date().toISOString()};case"id":return{id:n,type:e,property:r,operator:i,value:""};case"id-search":return{id:n,type:e,property:r,operator:i,value:[]};case"enum":return{id:n,type:e,property:r,operator:i,value:new Set};case"number":return{id:n,type:e,property:r,operator:i,value:0}}}const Y={bool:["eq"],enum:["in","nin"],id:["in","nin"],"id-search":["in","nin"],string:["eq","ne","cn","nc","sw","ew","in","nin"],date:["lt","gt"],number:["eq","ne","gt","gte","lt","lte"]};function xt({className:e,...r}){const{filters:n,query:i,setFilters:a,filterConfig:g}=x(),l=se(null),u=$(),d=Pe({defaultValues:{filters:n},onSubmit:({value:m})=>{a(m.filters)}}),v=Object.keys(g).sort();return t("section",{...r,className:S("flex gap-icon items-center",e),children:s(Ae,{onOpenChange:m=>{m?l.current?.focus():d.handleSubmit()},children:[s("div",{className:"relative",children:[n.length>0&&t("div",{className:"size-2 rounded-full absolute bg-primary/90 z-20 top-0 right-0 translate-x-0.5 -translate-y-0.5"}),t(y,{"aria-label":"Filter",isDisabled:i.isPending||v.length===0,type:"button",size:"icon",variant:"neutral",children:t(Ve,{})})]}),t(De,{className:"w-full p-icon",children:t("form",{onSubmit:m=>{m.preventDefault()},className:"flex flex-col gap-icon max-h-table overflow-auto ",children:t(d.Field,{mode:"array",name:"filters",children:m=>s(w,{children:[m.state.value.map((c,h)=>s("div",{className:"flex gap-icon items-center justify-normal",children:[t("span",{className:"body-sm",children:u(c.property)}),t(d.AppField,{name:`filters[${h}].operator`,children:f=>t(f.TfSingleSelect,{items:Y[c.type].map(b=>({id:b,label:t(w,{children:Ct[b]})}))})},c.id),c.type==="bool"&&t(d.AppField,{name:`filters[${h}].value`,children:f=>t(f.TfCheckbox,{autoFocus:!0})}),c.type==="date"&&t(d.AppField,{name:`filters[${h}].value`,children:f=>t(Fe,{autoFocus:!0})}),c.type==="id"&&t(d.AppField,{name:`filters[${h}].value`,children:f=>t(f.TfTextField,{autoFocus:!0})}),c.type==="string"&&t(d.AppField,{name:`filters[${h}].value`,children:f=>t(f.TfTextField,{autoFocus:!0})}),c.type==="number"&&t(d.AppField,{name:`filters[${h}].value`,children:f=>t(f.TfNumberField,{autoFocus:!0})}),c.type==="enum"&&t(d.AppField,{name:`filters[${h}].value`,children:f=>{const b=g[c.property];return b.type!=="enum"?null:t(f.TfMultiSelect,{items:b.options})}}),c.type==="id-search"&&t(d.AppField,{name:`filters[${h}].value`,children:f=>{const b=g[c.property];return b.type!=="id-search"?null:t(We,{resource:b.resource,accessor:b.accessor})}}),t(y,{type:"button",variant:"neutral",size:"icon",onPress:()=>m.removeValue(h),children:t(U,{})})]},c.id)),s("div",{className:"flex w-full items-center justify-end gap-2 not-first:mt-icon",children:[t(E,{label:"Add filter",autoFocus:!0,children:v.sort().map(c=>{const h=g[c].type,f=Tt[h];return s(R,{onAction:()=>{const b=wt(h,c);m.pushValue(b)},children:[u(c),t(f,{})]},c)})}),m.state.value.length>0?s(y,{type:"button",variant:"neutral",onPress:()=>{m.setValue([])},children:[t(U,{}),"Reset"]}):null]})]})})})})]})})}const Tt={"id-search":Ge,bool:B,date:Qe,enum:Ke,id:Be,number:Ue,string:B};export{Ct as C,xt as D,In as DataTable,Z as DataTableContext,Tn as DataTableProvider,Nn as F,wn as getTableCallback,x as useDataTable,xn as useDataTableState};
1
+ "use client";import{jsx as e,Fragment as w,jsxs as l}from"react/jsx-runtime";import{createContext as ie,useState as T,useMemo as le,useEffect as se,useContext as ce,useRef as ue}from"react";import{Button as v}from"./button.js";import{useSensors as de,useSensor as q,PointerSensor as me,KeyboardSensor as ge,DndContext as pe,closestCenter as fe,DragOverlay as he}from"@dnd-kit/core";import{sortableKeyboardCoordinates as be,SortableContext as Se,verticalListSortingStrategy as ye,arrayMove as ve,useSortable as Ce}from"@dnd-kit/sortable";import{CSS as we}from"@dnd-kit/utilities";import{useQuery as xe}from"@tanstack/react-query";import{createColumnHelper as G,useReactTable as Ne,getCoreRowModel as Ie,flexRender as z}from"@tanstack/react-table";import{useLocalStorage as V}from"@uidotdev/usehooks";import{merge as Te}from"lodash-es";import{Badge as Fe}from"./badge.js";import{TfDatePicker as Ae}from"./date-picker.js";import{EasyMenu as M,MenuItem as P}from"./menu.js";import{PopoverTrigger as Pe,Popover as De}from"./popover.js";import{useAppForm as Re}from"../utilities/form-hook.js";import{useResourceFormatter as _}from"../utilities/resources.js";import{classNames as y}from"../utilities/theme.js";import{IcInfo as ze,IcMoreVertical as Oe,IcRefresh as Me,IcColumns as _e,IcGrip as Le,IcFirst as je,IcLeft as Ee,IcRight as $e,IcLast as qe,IcSortAsc as Ve,IcSortDesc as He,IcSortNone as ke,IcFilter as Ue,IcRemove as H,IcCheck as k,IcMinus as Be,IcAccount as Ke,IcLicense as Qe,IcDate as Ge,IcFile as Xe}from"./icons.js";import{TfMultipleIdSearchInput as Ze}from"./id-search.js";import{DialogMenu as Je}from"./dialog-menu.js";import{Loader as We}from"./loader.js";import{SearchField as Ye}from"./searchfield.js";import{Table as et,TableHeader as tt,TableRow as U,TableHead as nt,TableBody as rt,TableCell as at}from"./table.js";import{CountryName as ot}from"../utilities/countries.js";import{formatDate as it}from"../utilities/date.js";import{formatDays as lt,formatFilesize as st,formatNumber as ct}from"../utilities/numbers.js";import{Checkbox as B}from"./checkbox.js";import{TableActions as ut}from"./data-table-actions.js";import{useCtxClient as dt}from"../utilities/ctx-client.js";import"class-variance-authority";import"react-aria-components";import"@internationalized/date";import"./calendar.js";import"./form.js";import"./datefield.js";import"../utilities/form.js";import"../utilities/form-context.js";import"@tanstack/react-form";import"./list-box.js";import"./select.js";import"./multi-select.js";import"./numberfield.js";import"./textfield.js";import"../utilities/string.js";import"clsx";import"./dialog-action-utils.js";import"./dialog.js";import"./select-options.js";import"zod";import"../utilities/duration.js";function mt(t){return t?t.desc?`-${t.id}`:`+${t.id}`:"-createdAt"}const X=G(),gt=[X.accessor("checkbox",{header:({table:t})=>e(B,{isIndeterminate:t.getIsSomeRowsSelected()&&!t.getIsAllPageRowsSelected(),isSelected:t.getIsAllPageRowsSelected()||t.getIsSomePageRowsSelected(),onChange:()=>t.toggleAllPageRowsSelected(),"aria-label":"Select all"}),cell:({row:t})=>e(B,{isSelected:t.getIsSelected(),onChange:()=>t.toggleSelected(),"aria-label":"Select row"}),enableSorting:!1,enableHiding:!1})],C="TableActions",pt=t=>t.length===0?[]:[X.accessor(C,{header:"Actions",id:C,enableHiding:!1,cell:({row:n})=>e(Je,{label:e(Oe,{}),data:n.original,items:t}),enableSorting:!1})];function wn(){return G()}function xn({path:t,columns:n,filterConfig:r,columnsToHideByDefault:i={},allowSelection:o=!1,initialFilters:p=[],tableActions:s,rowActions:d}){const[f,m]=T({pagination:{pageIndex:0,pageSize:20},sorting:[]}),{sorting:S,pagination:u}=f,[c,h]=T(""),[g,b]=T({}),[F,Y]=T(p),ee=le(()=>F.map(a=>Array.isArray(a.value)?{[a.property]:{[a.operator]:a.value.join(",")}}:{[a.property]:{[a.operator]:a.value}}).reduce((a,I)=>Te(a,I),{}),[F]),te={...F,page:u.pageIndex+1,limit:u.pageSize,sort:mt(S[0]),search:c},ne=dt(),D=["get",t],[L,j]=V(`${D.join("")}_ctx_column_order_preference`,[]),[E,re]=V(`${D.join("")}_ctx_column_visibility_preference`,{id:!1,...i}),R=a=>{m(I=>({...I,...a}))},A=xe({queryKey:D,queryFn:async()=>{const a=await ne.GET(t,{params:{query:te}});return{data:a.data??[],total:Number.parseInt(a.response.headers.get("Pagination-Count")||"0")}}}),ae=[...o?gt:[],...n,...pt(d??[])];function oe(a){return typeof a=="function"}function N(a,I){return oe(a)?a(I):a}const $=Ne({data:A.data?.data??[],columns:ae,getCoreRowModel:Ie(),rowCount:A.data?.total??0,manualPagination:!0,onPaginationChange:a=>{R({pagination:N(a,u)})},manualSorting:!0,onSortingChange:a=>{b({}),R({sorting:[...N(a,S)]})},manualFiltering:!0,onColumnVisibilityChange:a=>{re(N(a,E))},onRowSelectionChange:a=>{b(N(a,g))},onColumnOrderChange:a=>{j(N(a,L))},state:{sorting:S,columnVisibility:E,pagination:u,rowSelection:g,columnOrder:L},meta:{refetch:A.refetch}});return se(()=>{j([...$.getAllLeafColumns().map(a=>a.id)])},[]),{tableState:f,updateTableState:R,query:A,setSearchQuery:h,searchQuery:c,tanTable:$,mergedFilters:ee,filters:F,setFilters:Y,filterConfig:r,tableActions:s}}const Z=ie(null);function x(){const t=ce(Z);if(!t)throw Error("DataTable should be used within DataTableProvider.");return t}function Nn({children:t,...n}){return e(Z.Provider,{value:n,children:t})}function In({className:t,...n}){const{query:r,tanTable:i}=x();return e(w,{children:l("section",{...n,className:y("flex flex-col bg-elevation-1",t),children:[e(St,{}),l("div",{className:"w-full overflow-auto border-x h-table relative",tabIndex:0,children:[r.isLoading&&e(K,{className:"cursor-wait",children:e(We,{})}),!r.isLoading&&i.getRowModel().rows.length===0&&e(K,{className:"cursor-not-allowed",children:!r.isFetching&&(r.isError?l("span",{className:"flex gap-3 justify-center items-center",children:[e(ze,{}),e("span",{children:r.error.message})]}):r.data?.data?.length===0?e(w,{children:"No results found."}):e(w,{children:"Unknown error. Please contact customer support."}))}),!r.isLoading&&i.getRowModel().rows.length!==0&&e(vt,{className:"w-full"})]}),l("div",{className:"flex w-full justify-between border gap-icon p-icon overflow-x-auto",children:[l("div",{className:"flex gap-icon",children:[e(ft,{}),e(bt,{})]}),e(ht,{})]})]})})}function K({children:t,className:n}){return l(w,{children:[e("span",{className:y(n,"absolute top-0 bg-elevation-1 text-foreground z-20 size-full body-sm flex items-center justify-center"),children:t}),e("span",{className:"relative h-full w-0 block"})]})}function ft(){const{tanTable:t}=x(),[n,r]=T(null),i=_(),o=de(q(me),q(ge,{coordinateGetter:be}));return e(pe,{sensors:o,collisionDetection:fe,onDragStart:s=>{const{active:d}=s;r(d.id.toString())},onDragEnd:s=>{const{active:d,over:f}=s;if(f&&d.id!==f.id){const m=t.getState().columnOrder,S=m.indexOf(d.id.toString()),u=m.indexOf(f.id.toString());t.setColumnOrder([...ve(m,S,u)])}r(null)},children:l(Se,{items:t.getState().columnOrder,strategy:ye,children:[l(M,{label:l(w,{children:[e(_e,{className:"inline align-bottom me-1"}),"Columns"]}),selectionMode:"multiple",items:t.getAllFlatColumns(),selectedKeys:t.getVisibleFlatColumns().map(s=>s.id),children:[e(P,{onAction:()=>t.toggleAllColumnsVisible(),className:"italic",children:"(select all)"}),t.getState().columnOrder.map(s=>{const d=t.getAllFlatColumns().find(f=>f.id===s);return!d||d.id==="checkbox"||d.id===C?null:e(p,{column:d},d.id)})]}),e(he,{children:n?e("div",{className:"opacity-70 border-2 border-primary",children:i(n)}):null})]})});function p({column:s}){const{attributes:d,listeners:f,setNodeRef:m,transform:S,transition:u}=Ce({id:s.id}),c={transform:we.Transform.toString(S),transition:u,zIndex:"999"};return l(P,{ref:m,style:c,...d,id:s.id,onAction:()=>s.toggleVisibility(),isDisabled:!s.getCanHide(),className:"flex items-center",children:[e(Le,{...f,className:"size-icon cursor-grab"}),O(s),s.getIsSorted()&&e(J,{className:"size-icon",direction:s.getIsSorted()})]})}}function ht(){const{tanTable:t}=x(),n=t.getRowCount();return l("div",{className:"flex items-center gap-2",children:[e("span",{className:"whitespace-nowrap body-sm text-muted",children:`${t.getState().pagination.pageIndex*t.getState().pagination.pageSize+1} - ${Math.min((t.getState().pagination.pageIndex+1)*t.getState().pagination.pageSize,n)} of ${n?.toLocaleString()}`}),e(v,{"aria-label":"First page",onPress:()=>t.firstPage(),isDisabled:!t.getCanPreviousPage(),variant:"neutral",size:"icon",children:e(je,{})}),e(v,{"aria-label":"Previous page",onPress:()=>t.previousPage(),isDisabled:!t.getCanPreviousPage(),variant:"neutral",size:"icon",children:e(Ee,{})}),e(v,{"aria-label":"Next page",onPress:()=>t.nextPage(),isDisabled:!t.getCanNextPage(),variant:"neutral",size:"icon",children:e($e,{})}),e(v,{"aria-label":"Last page",onClick:()=>t.lastPage(),isDisabled:!t.getCanNextPage(),variant:"neutral",size:"icon",children:e(qe,{})})]})}function bt(){const{tanTable:t}=x(),n=[10,20,30,40,50];return e(M,{label:t.getState().pagination.pageSize.toString(),selectionMode:"single",selectedKeys:[t.getState().pagination.pageSize.toString()],items:n.map(r=>({id:r.toString(),value:r})),children:r=>e(P,{onAction:()=>t.setPageSize(r.value),children:r.value})})}function St(){const{query:t,tanTable:n,searchQuery:r,setSearchQuery:i,tableActions:o}=x(),p=n.getSelectedRowModel().rows.length>0,s=n.getSelectedRowModel().rows.map(f=>f.original),d=o.filter(f=>f.bulk===p);return l("section",{className:"flex bg-elevation-1 justify-between my-0 p-icon border gap-icon overflow-auto",children:[l("div",{className:"flex gap-icon",children:[e(v,{"aria-label":"Refresh",isPending:t.isFetching,onClick:()=>t.refetch(),variant:"neutral",size:"icon",children:e(Me,{})}),e(ut,{items:d,rowsSelected:s,isFetching:t.isFetching})]}),l("div",{className:"flex gap-icon",children:[e(xt,{}),e(Ye,{value:r,onChange:i})]})]})}function J({direction:t,...n}){return t==="asc"?e(Ve,{className:"size-3.5",...n}):t==="desc"?e(He,{className:"size-3.5",...n}):e(ke,{className:"size-3.5",...n})}function O(t){const n=_(),r=t.columnDef.header;return typeof r=="string"?r:n(t.id)}function yt(t){const n=t.column.columnDef.meta?.displayType,r=t.getValue();if(r==null)return null;switch(n){case"date":return it(r);case"number":return ct(r);case"boolean":case"badge":return e(Fe,{className:"uppercase w-full",children:String(r)});case"country":return e(ot,{value:r});case"enum":return e("span",{className:"uppercase w-full",children:String(r)});case"fileSize":return st(r);case"days":return lt(r);default:return String(r)}}function Q({header:t}){const n=t.column.columnDef.header;return typeof n=="string"||!n?O(t.column):typeof n=="function"?typeof n(t.getContext())=="string"?O(t.column):z(n,t.getContext()):z(n,t.getContext())}function vt({className:t}){const{tanTable:n}=x(),r=(i,o,p="z-50")=>y("px-icon py-2 text-left body-sm font-medium whitespace-nowrap",i&&`bg-elevation-1 sticky right-0 ${p} text-center justify-center`,o);return l(et,{className:y("table-auto",t),children:[e(tt,{className:"sticky top-0 z-10",children:n.getHeaderGroups().map(i=>e(U,{children:i.headers.map(o=>l(nt,{scope:"col",colSpan:o.colSpan,className:r(o.id===C,"bg-elevation-1"),children:[!o.column.getCanSort()&&!o.isPlaceholder&&e("div",{className:y("w-full py-1 inline-flex items-center gap-1 body-sm",o.id===C?"justify-center":"justify-start"),children:e(Q,{header:o})}),o.column.getCanSort()&&l(v,{variant:"ghost",className:y("w-full p-1",o.id===C?"justify-center":"justify-start"),onPress:o.column.getToggleSortingHandler(),children:[e("span",{children:e(Q,{header:o})}),e(J,{direction:o.column.getIsSorted()})]})]},o.id))},i.id))}),e(rt,{children:n.getRowModel().rows.map(i=>e(U,{className:y("transition-colors data-[selected=true]:bg-primary/10 hover:bg-muted-foreground/20"),"data-selected":i.getIsSelected(),children:i.getVisibleCells().map(o=>{const p=o.column.id===C,s=o.column.columnDef.meta?.displayType?yt(o):z(o.column.columnDef.cell,o.getContext());return e(at,{className:y(r(p,void 0,"z-1"),p&&"flex justify-center items-center"),children:s},o.id)})},i.id))})]})}const Tn=["eq","ne","cn","nc","sw","ew","in","nin","gt","gte","lt","lte"],Ct={eq:"equal to",ne:"not equal to",cn:"contains",nc:"does not contain",sw:"starts with",ew:"ends with",in:"includes",nin:"does not include",gt:"greater than",gte:"greater than or equal to",lt:"less than",lte:"less than or equal to"};function wt(t,n){const r=`${n}-${Date.now()}`,i=W[t][0];switch(t){case"bool":return{id:r,type:t,property:n,operator:i,value:!0};case"string":return{id:r,type:t,property:n,operator:i,value:""};case"date":return{id:r,type:t,property:n,operator:i,value:new Date().toISOString()};case"id":return{id:r,type:t,property:n,operator:i,value:""};case"id-search":return{id:r,type:t,property:n,operator:i,value:[]};case"enum":return{id:r,type:t,property:n,operator:i,value:new Set};case"number":return{id:r,type:t,property:n,operator:i,value:0}}}const W={bool:["eq"],enum:["in","nin"],id:["in","nin"],"id-search":["in","nin"],string:["eq","ne","cn","nc","sw","ew","in","nin"],date:["lt","gt"],number:["eq","ne","gt","gte","lt","lte"]};function xt({className:t,...n}){const{filters:r,query:i,setFilters:o,filterConfig:p}=x(),s=ue(null),d=_(),m=Re({defaultValues:{filters:r},onSubmit:({value:u})=>{o(u.filters)}}),S=Object.keys(p).sort();return e("section",{...n,className:y("flex gap-icon items-center",t),children:l(Pe,{onOpenChange:u=>{u?s.current?.focus():m.handleSubmit()},children:[l("div",{className:"relative",children:[r.length>0&&e("div",{className:"size-2 rounded-full absolute bg-primary/90 z-20 top-0 right-0 translate-x-0.5 -translate-y-0.5"}),e(v,{"aria-label":"Filter",isDisabled:i.isPending||S.length===0,type:"button",size:"icon",variant:"neutral",children:e(Ue,{})})]}),e(De,{className:"w-full p-icon",children:e("form",{onSubmit:u=>{u.preventDefault()},className:"flex flex-col gap-icon max-h-table overflow-auto ",children:e(m.Field,{mode:"array",name:"filters",children:u=>l(w,{children:[u.state.value.map((c,h)=>l("div",{className:"flex gap-icon items-center justify-normal",children:[e("span",{className:"body-sm",children:d(c.property)}),e(m.AppField,{name:`filters[${h}].operator`,children:g=>e(g.TfSingleSelect,{items:W[c.type].map(b=>({id:b,label:e(w,{children:Ct[b]})}))})},c.id),c.type==="bool"&&e(m.AppField,{name:`filters[${h}].value`,children:g=>e(g.TfCheckbox,{autoFocus:!0})}),c.type==="date"&&e(m.AppField,{name:`filters[${h}].value`,children:g=>e(Ae,{autoFocus:!0})}),c.type==="id"&&e(m.AppField,{name:`filters[${h}].value`,children:g=>e(g.TfTextField,{autoFocus:!0})}),c.type==="string"&&e(m.AppField,{name:`filters[${h}].value`,children:g=>e(g.TfTextField,{autoFocus:!0})}),c.type==="number"&&e(m.AppField,{name:`filters[${h}].value`,children:g=>e(g.TfNumberField,{autoFocus:!0})}),c.type==="enum"&&e(m.AppField,{name:`filters[${h}].value`,children:g=>{const b=p[c.property];return b.type!=="enum"?null:e(g.TfMultiSelect,{items:b.options})}}),c.type==="id-search"&&e(m.AppField,{name:`filters[${h}].value`,children:g=>{const b=p[c.property];return b.type!=="id-search"?null:e(Ze,{path:b.path,accessor:b.accessor})}}),e(v,{type:"button",variant:"neutral",size:"icon",onPress:()=>u.removeValue(h),children:e(H,{})})]},c.id)),l("div",{className:"flex w-full items-center justify-end gap-2 not-first:mt-icon",children:[e(M,{label:"Add filter",autoFocus:!0,children:S.sort().map(c=>{const h=p[c].type,g=Nt[h];return l(P,{onAction:()=>{const b=wt(h,c);u.pushValue(b)},children:[d(c),e(g,{})]},c)})}),u.state.value.length>0?l(v,{type:"button",variant:"neutral",onPress:()=>{u.setValue([])},children:[e(H,{}),"Reset"]}):null]})]})})})})]})})}const Nt={"id-search":Xe,bool:k,date:Ge,enum:Qe,id:Ke,number:Be,string:k};export{Ct as C,xt as D,In as DataTable,Z as DataTableContext,Nn as DataTableProvider,Tn as F,wn as getColumnHelper,x as useDataTable,xn as useDataTableState};
2
2
  //# sourceMappingURL=data-table.js.map