@addsign/moje-agenda-shared-lib 2.0.41 → 2.0.42

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 (103) hide show
  1. package/dist/Combination-D2GKeTwa.js +1162 -0
  2. package/dist/Combination-D2GKeTwa.js.map +1 -0
  3. package/dist/Dialog-CCrUyF91.js +424 -0
  4. package/dist/Dialog-CCrUyF91.js.map +1 -0
  5. package/dist/assets/style.css +61 -8
  6. package/dist/chevron-down-CfJmko7t.js +14 -0
  7. package/dist/chevron-down-CfJmko7t.js.map +1 -0
  8. package/dist/components/Attachments.js +2 -1
  9. package/dist/components/Attachments.js.map +1 -1
  10. package/dist/components/ConfirmationModalDialog.js +1 -1
  11. package/dist/components/ConfirmationModalDialog.js.map +1 -1
  12. package/dist/components/Modal.js +1 -1
  13. package/dist/components/Modal.js.map +1 -1
  14. package/dist/components/datatable/DataTable.js +3 -2
  15. package/dist/components/datatable/DataTable.js.map +1 -1
  16. package/dist/components/datatable/DataTableServer.js +35 -9
  17. package/dist/components/datatable/DataTableServer.js.map +1 -1
  18. package/dist/components/form/AutocompleteSearchBar.js +5 -4
  19. package/dist/components/form/AutocompleteSearchBar.js.map +1 -1
  20. package/dist/components/form/AutocompleteSearchBarServer.js +2 -1
  21. package/dist/components/form/AutocompleteSearchBarServer.js.map +1 -1
  22. package/dist/components/form/DateRangeField.js +2 -2
  23. package/dist/components/form/DateRangeField.js.map +1 -1
  24. package/dist/components/form/FileInput.js +3 -2
  25. package/dist/components/form/FileInput.js.map +1 -1
  26. package/dist/components/form/FileInputMultiple.js +3 -2
  27. package/dist/components/form/FileInputMultiple.js.map +1 -1
  28. package/dist/components/form/FormField.js +8 -7
  29. package/dist/components/form/FormField.js.map +1 -1
  30. package/dist/components/form/InputField.js +3 -2
  31. package/dist/components/form/InputField.js.map +1 -1
  32. package/dist/components/form/PositionsSelectorSingle.js +2 -1
  33. package/dist/components/form/PositionsSelectorSingle.js.map +1 -1
  34. package/dist/components/form/RadioGroup.js +1 -1
  35. package/dist/components/form/RadioGroup.js.map +1 -1
  36. package/dist/components/form/SelectField.js +5 -4
  37. package/dist/components/form/SelectField.js.map +1 -1
  38. package/dist/components/layout/Neoptimizovano.js +2 -1
  39. package/dist/components/layout/Neoptimizovano.js.map +1 -1
  40. package/dist/components/layout/PageTitle.js +1 -1
  41. package/dist/components/layout/PageTitle.js.map +1 -1
  42. package/dist/components/layout/SectionTitle.js +1 -1
  43. package/dist/components/layout/SectionTitle.js.map +1 -1
  44. package/dist/components/profiles/ProfileOverview.js +2 -1
  45. package/dist/components/profiles/ProfileOverview.js.map +1 -1
  46. package/dist/components/ui/Combobox.js +1 -1
  47. package/dist/components/ui/DatePicker.js +1 -1
  48. package/dist/components/ui/DateTimePicker.js +1 -1
  49. package/dist/components/ui/Dialog.js +1 -1
  50. package/dist/components/ui/ScrollArea.js +2 -2
  51. package/dist/components/ui/badge.d.ts +9 -0
  52. package/dist/components/ui/badge.js +27 -0
  53. package/dist/components/ui/badge.js.map +1 -0
  54. package/dist/components/ui/checkbox.js +4 -4
  55. package/dist/components/ui/command.js +2 -2
  56. package/dist/components/ui/multi-select.d.ts +67 -0
  57. package/dist/components/ui/multi-select.js +295 -0
  58. package/dist/components/ui/multi-select.js.map +1 -0
  59. package/dist/components/ui/popover.js +1 -1
  60. package/dist/components/ui/radioGroup.js +5 -5
  61. package/dist/components/ui/select.js +8 -16
  62. package/dist/components/ui/select.js.map +1 -1
  63. package/dist/components/ui/toast.js +5 -5
  64. package/dist/components/ui/tooltip.js +6 -6
  65. package/dist/index-B0wyIFEr.js +47 -0
  66. package/dist/index-B0wyIFEr.js.map +1 -0
  67. package/dist/index-BcR8DnnV.js +234 -0
  68. package/dist/index-BcR8DnnV.js.map +1 -0
  69. package/dist/index-CK9QfV6i.js +40 -0
  70. package/dist/index-CK9QfV6i.js.map +1 -0
  71. package/dist/index-CcNKXchf.js +2203 -0
  72. package/dist/index-CcNKXchf.js.map +1 -0
  73. package/dist/index-D75exu1X.js +18 -0
  74. package/dist/index-D75exu1X.js.map +1 -0
  75. package/dist/index-DzfDO78K.js +15 -0
  76. package/dist/index-DzfDO78K.js.map +1 -0
  77. package/dist/index-NZPkObcw.js +110 -0
  78. package/dist/index-NZPkObcw.js.map +1 -0
  79. package/dist/index-qqHvAsVd.js +2266 -0
  80. package/dist/index-qqHvAsVd.js.map +1 -0
  81. package/dist/index-wO-IHm1z.js +131 -0
  82. package/dist/index-wO-IHm1z.js.map +1 -0
  83. package/dist/main.d.ts +1 -0
  84. package/dist/main.js +3 -1
  85. package/dist/main.js.map +1 -1
  86. package/dist/popover-CcrzvSk7.js +319 -0
  87. package/dist/popover-CcrzvSk7.js.map +1 -0
  88. package/lib/components/ConfirmationModalDialog.tsx +1 -1
  89. package/lib/components/Modal.tsx +1 -1
  90. package/lib/components/datatable/DataTable.tsx +1 -1
  91. package/lib/components/datatable/DataTableServer.tsx +49 -15
  92. package/lib/components/form/AutocompleteSearchBar.tsx +3 -3
  93. package/lib/components/form/DateRangeField.tsx +2 -2
  94. package/lib/components/form/FormField.tsx +6 -6
  95. package/lib/components/form/InputField.tsx +3 -2
  96. package/lib/components/form/RadioGroup.tsx +1 -1
  97. package/lib/components/form/SelectField.tsx +3 -3
  98. package/lib/components/layout/PageTitle.tsx +19 -19
  99. package/lib/components/layout/SectionTitle.tsx +1 -1
  100. package/lib/components/ui/badge.tsx +36 -0
  101. package/lib/components/ui/multi-select.tsx +365 -0
  102. package/lib/main.ts +4 -0
  103. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog-CCrUyF91.js","sources":["../node_modules/@radix-ui/react-dialog/dist/index.mjs","../lib/components/ui/Dialog.tsx"],"sourcesContent":["\"use client\";\n\n// packages/react/dialog/src/Dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\r\nimport { X } from \"lucide-react\";\r\nimport { cn } from \"../../utils/utils\";\r\n\r\nconst Dialog = DialogPrimitive.Root;\r\n\r\nconst DialogTrigger = DialogPrimitive.Trigger;\r\n\r\nconst DialogPortal = DialogPrimitive.Portal;\r\n\r\nconst DialogClose = DialogPrimitive.Close;\r\n\r\nconst DialogOverlay = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Overlay>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Overlay\r\n ref={ref}\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\r\n\r\nconst DialogContent = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\r\n>(({ className, children, ...props }, ref) => (\r\n <DialogPortal>\r\n <DialogOverlay />\r\n <DialogPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-white p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\r\n <X className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Close</span>\r\n </DialogPrimitive.Close>\r\n </DialogPrimitive.Content>\r\n </DialogPortal>\r\n));\r\nDialogContent.displayName = DialogPrimitive.Content.displayName;\r\n\r\nconst DialogHeader = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\"flex flex-col space-y-1.5 sm:text-left\", className)}\r\n {...props}\r\n />\r\n);\r\nDialogHeader.displayName = \"DialogHeader\";\r\n\r\nconst DialogFooter = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n);\r\nDialogFooter.displayName = \"DialogFooter\";\r\n\r\nconst DialogTitle = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Title>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Title\r\n ref={ref}\r\n className={cn(\r\n \"text-lg font-semibold leading-none tracking-tight\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n));\r\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\r\n\r\nconst DialogDescription = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Description>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Description\r\n ref={ref}\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n));\r\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\r\n\r\nexport {\r\n Dialog,\r\n DialogPortal,\r\n DialogOverlay,\r\n DialogClose,\r\n DialogTrigger,\r\n DialogContent,\r\n DialogHeader,\r\n DialogFooter,\r\n DialogTitle,\r\n DialogDescription,\r\n};\r\n"],"names":["Dialog","DialogTrigger","DialogPortal","PortalPrimitive","DialogOverlay","RemoveScroll","DialogContent","DialogTitle","DialogDescription","DialogClose","createContext","DialogPrimitive.Root","DialogPrimitive.Trigger","DialogPrimitive.Portal","DialogPrimitive.Close","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Title","DialogPrimitive.Description"],"mappings":";;;;;;;;;;;;;AAmBA,IAAI,cAAc;AAClB,IAAI,CAAC,qBAAqB,iBAAiB,IAAI,mBAAmB,WAAW;AAC7E,IAAI,CAAC,gBAAgB,gBAAgB,IAAI,oBAAoB,WAAW;AACxE,IAAIA,WAAS,CAAC,UAAU;AACtB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACT,IAAG;AACJ,QAAM,aAAa,MAAM,OAAO,IAAI;AACpC,QAAM,aAAa,MAAM,OAAO,IAAI;AACpC,QAAM,CAAC,OAAO,OAAO,OAAO,IAAI,qBAAqB;AAAA,IACnD,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACd,CAAG;AACD,SAAuB;AAAA,IACrB;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,WAAW,MAAO;AAAA,MAClB,SAAS,MAAO;AAAA,MAChB,eAAe,MAAO;AAAA,MACtB;AAAA,MACA,cAAc;AAAA,MACd,cAAc,MAAM,YAAY,MAAM,QAAQ,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC;AAAA,MACjF;AAAA,MACA;AAAA,IACD;AAAA,EACL;AACA;AACAA,SAAO,cAAc;AACrB,IAAI,eAAe;AACnB,IAAIC,kBAAgB,MAAM;AAAA,EACxB,CAAC,OAAO,iBAAiB;AACvB,UAAM,EAAE,eAAe,GAAG,aAAY,IAAK;AAC3C,UAAM,UAAU,iBAAiB,cAAc,aAAa;AAC5D,UAAM,qBAAqB,gBAAgB,cAAc,QAAQ,UAAU;AAC3E,WAAuB;AAAA,MACrB,UAAU;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,iBAAiB;AAAA,QACjB,iBAAiB,QAAQ;AAAA,QACzB,iBAAiB,QAAQ;AAAA,QACzB,cAAc,SAAS,QAAQ,IAAI;AAAA,QACnC,GAAG;AAAA,QACH,KAAK;AAAA,QACL,SAAS,qBAAqB,MAAM,SAAS,QAAQ,YAAY;AAAA,MAClE;AAAA,IACP;AAAA,EACG;AACH;AACAA,gBAAc,cAAc;AAC5B,IAAI,cAAc;AAClB,IAAI,CAAC,gBAAgB,gBAAgB,IAAI,oBAAoB,aAAa;AAAA,EACxE,YAAY;AACd,CAAC;AACD,IAAIC,iBAAe,CAAC,UAAU;AAC5B,QAAM,EAAE,eAAe,YAAY,UAAU,UAAS,IAAK;AAC3D,QAAM,UAAU,iBAAiB,aAAa,aAAa;AAC3D,SAAuB,oBAAI,gBAAgB,EAAE,OAAO,eAAe,YAAY,UAAU,MAAM,SAAS,IAAI,UAAU,CAAC,UAA0B,oBAAI,UAAU,EAAE,SAAS,cAAc,QAAQ,MAAM,UAA0B,oBAAIC,UAAiB,EAAE,SAAS,MAAM,WAAW,UAAU,MAAO,CAAA,EAAG,CAAA,CAAC,EAAC,CAAE;AAC3S;AACAD,eAAa,cAAc;AAC3B,IAAI,eAAe;AACnB,IAAIE,kBAAgB,MAAM;AAAA,EACxB,CAAC,OAAO,iBAAiB;AACvB,UAAM,gBAAgB,iBAAiB,cAAc,MAAM,aAAa;AACxE,UAAM,EAAE,aAAa,cAAc,YAAY,GAAG,aAAc,IAAG;AACnE,UAAM,UAAU,iBAAiB,cAAc,MAAM,aAAa;AAClE,WAAO,QAAQ,QAAwB,oBAAI,UAAU,EAAE,SAAS,cAAc,QAAQ,MAAM,UAA0B,oBAAI,mBAAmB,EAAE,GAAG,cAAc,KAAK,aAAc,CAAA,GAAG,IAAI;AAAA,EAC3L;AACH;AACAA,gBAAc,cAAc;AAC5B,IAAI,oBAAoB,MAAM;AAAA,EAC5B,CAAC,OAAO,iBAAiB;AACvB,UAAM,EAAE,eAAe,GAAG,aAAY,IAAK;AAC3C,UAAM,UAAU,iBAAiB,cAAc,aAAa;AAC5D;AAAA;AAAA;AAAA,MAGkB,oBAAIC,mBAAc,EAAE,IAAI,MAAM,gBAAgB,MAAM,QAAQ,CAAC,QAAQ,UAAU,GAAG,UAA0B;AAAA,QAC1H,UAAU;AAAA,QACV;AAAA,UACE,cAAc,SAAS,QAAQ,IAAI;AAAA,UACnC,GAAG;AAAA,UACH,KAAK;AAAA,UACL,OAAO,EAAE,eAAe,QAAQ,GAAG,aAAa,MAAO;AAAA,QACxD;AAAA,MACT,GAAS;AAAA;AAAA,EAEN;AACH;AACA,IAAI,eAAe;AACnB,IAAIC,kBAAgB,MAAM;AAAA,EACxB,CAAC,OAAO,iBAAiB;AACvB,UAAM,gBAAgB,iBAAiB,cAAc,MAAM,aAAa;AACxE,UAAM,EAAE,aAAa,cAAc,YAAY,GAAG,aAAc,IAAG;AACnE,UAAM,UAAU,iBAAiB,cAAc,MAAM,aAAa;AAClE,WAAuB,oBAAI,UAAU,EAAE,SAAS,cAAc,QAAQ,MAAM,UAAU,QAAQ,QAAwB,oBAAI,oBAAoB,EAAE,GAAG,cAAc,KAAK,aAAc,CAAA,IAAoB,oBAAI,uBAAuB,EAAE,GAAG,cAAc,KAAK,aAAc,CAAA,EAAG,CAAA;AAAA,EAC7Q;AACH;AACAA,gBAAc,cAAc;AAC5B,IAAI,qBAAqB,MAAM;AAAA,EAC7B,CAAC,OAAO,iBAAiB;AACvB,UAAM,UAAU,iBAAiB,cAAc,MAAM,aAAa;AAClE,UAAM,aAAa,MAAM,OAAO,IAAI;AACpC,UAAM,eAAe,gBAAgB,cAAc,QAAQ,YAAY,UAAU;AACjF,UAAM,UAAU,MAAM;AACpB,YAAM,UAAU,WAAW;AAC3B,UAAI;AAAS,eAAO,WAAW,OAAO;AAAA,IACvC,GAAE,CAAE,CAAA;AACL,WAAuB;AAAA,MACrB;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,KAAK;AAAA,QACL,WAAW,QAAQ;AAAA,QACnB,6BAA6B;AAAA,QAC7B,kBAAkB,qBAAqB,MAAM,kBAAkB,CAAC,UAAU;;AACxE,gBAAM,eAAc;AACpB,wBAAQ,WAAW,YAAnB,mBAA4B;AAAA,QACtC,CAAS;AAAA,QACD,sBAAsB,qBAAqB,MAAM,sBAAsB,CAAC,UAAU;AAChF,gBAAM,gBAAgB,MAAM,OAAO;AACnC,gBAAM,gBAAgB,cAAc,WAAW,KAAK,cAAc,YAAY;AAC9E,gBAAM,eAAe,cAAc,WAAW,KAAK;AACnD,cAAI;AAAc,kBAAM;QAClC,CAAS;AAAA,QACD,gBAAgB;AAAA,UACd,MAAM;AAAA,UACN,CAAC,UAAU,MAAM,eAAgB;AAAA,QAClC;AAAA,MACF;AAAA,IACP;AAAA,EACG;AACH;AACA,IAAI,wBAAwB,MAAM;AAAA,EAChC,CAAC,OAAO,iBAAiB;AACvB,UAAM,UAAU,iBAAiB,cAAc,MAAM,aAAa;AAClE,UAAM,0BAA0B,MAAM,OAAO,KAAK;AAClD,UAAM,2BAA2B,MAAM,OAAO,KAAK;AACnD,WAAuB;AAAA,MACrB;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,KAAK;AAAA,QACL,WAAW;AAAA,QACX,6BAA6B;AAAA,QAC7B,kBAAkB,CAAC,UAAU;;AAC3B,sBAAM,qBAAN,+BAAyB;AACzB,cAAI,CAAC,MAAM,kBAAkB;AAC3B,gBAAI,CAAC,wBAAwB;AAAS,4BAAQ,WAAW,YAAnB,mBAA4B;AAClE,kBAAM,eAAc;AAAA,UACrB;AACD,kCAAwB,UAAU;AAClC,mCAAyB,UAAU;AAAA,QACpC;AAAA,QACD,mBAAmB,CAAC,UAAU;;AAC5B,sBAAM,sBAAN,+BAA0B;AAC1B,cAAI,CAAC,MAAM,kBAAkB;AAC3B,oCAAwB,UAAU;AAClC,gBAAI,MAAM,OAAO,cAAc,SAAS,eAAe;AACrD,uCAAyB,UAAU;AAAA,YACpC;AAAA,UACF;AACD,gBAAM,SAAS,MAAM;AACrB,gBAAM,mBAAkB,aAAQ,WAAW,YAAnB,mBAA4B,SAAS;AAC7D,cAAI;AAAiB,kBAAM;AAC3B,cAAI,MAAM,OAAO,cAAc,SAAS,aAAa,yBAAyB,SAAS;AACrF,kBAAM,eAAc;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,IACP;AAAA,EACG;AACH;AACA,IAAI,oBAAoB,MAAM;AAAA,EAC5B,CAAC,OAAO,iBAAiB;AACvB,UAAM,EAAE,eAAe,WAAW,iBAAiB,kBAAkB,GAAG,aAAc,IAAG;AACzF,UAAM,UAAU,iBAAiB,cAAc,aAAa;AAC5D,UAAM,aAAa,MAAM,OAAO,IAAI;AACpC,UAAM,eAAe,gBAAgB,cAAc,UAAU;AAC7D;AACA,WAAuB,qBAAK,UAAU,EAAE,UAAU;AAAA,MAChC;AAAA,QACd;AAAA,QACA;AAAA,UACE,SAAS;AAAA,UACT,MAAM;AAAA,UACN,SAAS;AAAA,UACT,kBAAkB;AAAA,UAClB,oBAAoB;AAAA,UACpB,UAA0B;AAAA,YACxB;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,IAAI,QAAQ;AAAA,cACZ,oBAAoB,QAAQ;AAAA,cAC5B,mBAAmB,QAAQ;AAAA,cAC3B,cAAc,SAAS,QAAQ,IAAI;AAAA,cACnC,GAAG;AAAA,cACH,KAAK;AAAA,cACL,WAAW,MAAM,QAAQ,aAAa,KAAK;AAAA,YAC5C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACe,qBAAK,UAAU,EAAE,UAAU;AAAA,QACzB,oBAAI,cAAc,EAAE,SAAS,QAAQ,QAAO,CAAE;AAAA,QAC9C,oBAAI,oBAAoB,EAAE,YAAY,eAAe,QAAQ,eAAe;AAAA,MACpG,GAAS;AAAA,IACJ,EAAA,CAAE;AAAA,EACJ;AACH;AACA,IAAI,aAAa;AACjB,IAAIC,gBAAc,MAAM;AAAA,EACtB,CAAC,OAAO,iBAAiB;AACvB,UAAM,EAAE,eAAe,GAAG,WAAU,IAAK;AACzC,UAAM,UAAU,iBAAiB,YAAY,aAAa;AAC1D,WAAuB,oBAAI,UAAU,IAAI,EAAE,IAAI,QAAQ,SAAS,GAAG,YAAY,KAAK,aAAc,CAAA;AAAA,EACnG;AACH;AACAA,cAAY,cAAc;AAC1B,IAAI,mBAAmB;AACvB,IAAIC,sBAAoB,MAAM;AAAA,EAC5B,CAAC,OAAO,iBAAiB;AACvB,UAAM,EAAE,eAAe,GAAG,iBAAgB,IAAK;AAC/C,UAAM,UAAU,iBAAiB,kBAAkB,aAAa;AAChE,WAAuB,oBAAI,UAAU,GAAG,EAAE,IAAI,QAAQ,eAAe,GAAG,kBAAkB,KAAK,aAAc,CAAA;AAAA,EAC9G;AACH;AACAA,oBAAkB,cAAc;AAChC,IAAI,aAAa;AACjB,IAAIC,gBAAc,MAAM;AAAA,EACtB,CAAC,OAAO,iBAAiB;AACvB,UAAM,EAAE,eAAe,GAAG,WAAU,IAAK;AACzC,UAAM,UAAU,iBAAiB,YAAY,aAAa;AAC1D,WAAuB;AAAA,MACrB,UAAU;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,GAAG;AAAA,QACH,KAAK;AAAA,QACL,SAAS,qBAAqB,MAAM,SAAS,MAAM,QAAQ,aAAa,KAAK,CAAC;AAAA,MAC/E;AAAA,IACP;AAAA,EACG;AACH;AACAA,cAAY,cAAc;AAC1B,SAAS,SAAS,MAAM;AACtB,SAAO,OAAO,SAAS;AACzB;AACA,IAAI,qBAAqB;AACzB,IAAI,CAAC,iBAAiB,iBAAiB,IAAIC,eAAc,oBAAoB;AAAA,EAC3E,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AACZ,CAAC;AACD,IAAI,eAAe,CAAC,EAAE,cAAc;AAClC,QAAM,sBAAsB,kBAAkB,kBAAkB;AAChE,QAAM,UAAU,KAAK,oBAAoB,WAAW,mBAAmB,oBAAoB,SAAS;AAAA;AAAA,4BAE1E,oBAAoB,SAAS;AAAA;AAAA,4EAEmB,oBAAoB,QAAQ;AACtG,QAAM,UAAU,MAAM;AACpB,QAAI,SAAS;AACX,YAAM,WAAW,SAAS,eAAe,OAAO;AAChD,UAAI,CAAC;AAAU,gBAAQ,MAAM,OAAO;AAAA,IACrC;AAAA,EACL,GAAK,CAAC,SAAS,OAAO,CAAC;AACrB,SAAO;AACT;AACA,IAAI,2BAA2B;AAC/B,IAAI,qBAAqB,CAAC,EAAE,YAAY,oBAAoB;AAC1D,QAAM,4BAA4B,kBAAkB,wBAAwB;AAC5E,QAAM,UAAU,6EAA6E,0BAA0B,WAAW;AAClI,QAAM,UAAU,MAAM;;AACpB,UAAM,iBAAgB,gBAAW,YAAX,mBAAoB,aAAa;AACvD,QAAI,iBAAiB,eAAe;AAClC,YAAM,iBAAiB,SAAS,eAAe,aAAa;AAC5D,UAAI,CAAC;AAAgB,gBAAQ,KAAK,OAAO;AAAA,IAC1C;AAAA,EACF,GAAE,CAAC,SAAS,YAAY,aAAa,CAAC;AACvC,SAAO;AACT;AACG,IAAC,OAAOV;AACX,IAAI,UAAUC;AACX,IAAC,SAASC;AACV,IAAC,UAAUE;AACX,IAAC,UAAUE;AACd,IAAI,QAAQC;AACZ,IAAI,cAAcC;AAClB,IAAI,QAAQC;ACvTZ,MAAM,SAASE;AAEf,MAAM,gBAAgBC;AAEtB,MAAM,eAAeC;AAErB,MAAM,cAAcC;AAEd,MAAA,gBAAgB,MAAM,WAG1B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAACC;AAAAA,EAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA,EAAA;AACN,CACD;AACD,cAAc,cAAcA,QAAwB;AAEpD,MAAM,gBAAgB,MAAM,WAG1B,CAAC,EAAE,WAAW,UAAU,GAAG,MAAM,GAAG,QACpC,qBAAC,cACC,EAAA,UAAA;AAAA,EAAA,oBAAC,eAAc,EAAA;AAAA,EACf;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH,UAAA;AAAA,QAAA;AAAA,QACA,qBAAAF,OAAA,EAAsB,WAAU,iRAC/B,UAAA;AAAA,UAAC,oBAAA,GAAA,EAAE,WAAU,UAAU,CAAA;AAAA,UACtB,oBAAA,QAAA,EAAK,WAAU,WAAU,UAAK,SAAA;AAAA,QAAA,GACjC;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AAAA,EAAA,CACF,CACD;AACD,cAAc,cAAcE,QAAwB;AAEpD,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW,GAAG,0CAA0C,SAAS;AAAA,IAChE,GAAG;AAAA,EAAA;AACN;AAEF,aAAa,cAAc;AAE3B,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA,EAAA;AACN;AAEF,aAAa,cAAc;AAErB,MAAA,cAAc,MAAM,WAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAACC;AAAAA,EAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA,EAAA;AACN,CACD;AACD,YAAY,cAAcA,MAAsB;AAE1C,MAAA,oBAAoB,MAAM,WAG9B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAACC;AAAAA,EAAA;AAAA,IACC;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA,EAAA;AACN,CACD;AACD,kBAAkB,cAAcA,YAA4B;","x_google_ignoreList":[0]}
@@ -714,6 +714,14 @@ video {
714
714
  margin-left: -0.25rem;
715
715
  margin-right: -0.25rem;
716
716
  }
717
+ .mx-2 {
718
+ margin-left: 0.5rem;
719
+ margin-right: 0.5rem;
720
+ }
721
+ .mx-3 {
722
+ margin-left: 0.75rem;
723
+ margin-right: 0.75rem;
724
+ }
717
725
  .mx-auto {
718
726
  margin-left: auto;
719
727
  margin-right: auto;
@@ -916,6 +924,9 @@ video {
916
924
  .h-\[var\(--radix-select-trigger-height\)\] {
917
925
  height: var(--radix-select-trigger-height);
918
926
  }
927
+ .h-auto {
928
+ height: auto;
929
+ }
919
930
  .h-full {
920
931
  height: 100%;
921
932
  }
@@ -940,9 +951,15 @@ video {
940
951
  .max-h-screen {
941
952
  max-height: 100vh;
942
953
  }
954
+ .min-h-10 {
955
+ min-height: 2.5rem;
956
+ }
943
957
  .min-h-5 {
944
958
  min-height: 1.25rem;
945
959
  }
960
+ .min-h-6 {
961
+ min-height: 1.5rem;
962
+ }
946
963
  .min-h-\[285px\] {
947
964
  min-height: 285px;
948
965
  }
@@ -1599,6 +1616,9 @@ video {
1599
1616
  .bg-border {
1600
1617
  background-color: var(--border);
1601
1618
  }
1619
+ .bg-card {
1620
+ background-color: var(--card);
1621
+ }
1602
1622
  .bg-cyan-100 {
1603
1623
  --tw-bg-opacity: 1;
1604
1624
  background-color: rgb(207 250 254 / var(--tw-bg-opacity));
@@ -1887,6 +1907,10 @@ video {
1887
1907
  padding-left: 0.5rem;
1888
1908
  padding-right: 0.5rem;
1889
1909
  }
1910
+ .px-2\.5 {
1911
+ padding-left: 0.625rem;
1912
+ padding-right: 0.625rem;
1913
+ }
1890
1914
  .px-3 {
1891
1915
  padding-left: 0.75rem;
1892
1916
  padding-right: 0.75rem;
@@ -2224,10 +2248,6 @@ video {
2224
2248
  --tw-text-opacity: 1;
2225
2249
  color: rgb(31 41 55 / var(--tw-text-opacity));
2226
2250
  }
2227
- .text-gray-900 {
2228
- --tw-text-opacity: 1;
2229
- color: rgb(17 24 39 / var(--tw-text-opacity));
2230
- }
2231
2251
  .text-green-500 {
2232
2252
  --tw-text-opacity: 1;
2233
2253
  color: rgb(34 197 94 / var(--tw-text-opacity));
@@ -2321,10 +2341,6 @@ video {
2321
2341
  --tw-text-opacity: 1;
2322
2342
  color: rgb(2 132 199 / var(--tw-text-opacity));
2323
2343
  }
2324
- .text-slate-400 {
2325
- --tw-text-opacity: 1;
2326
- color: rgb(148 163 184 / var(--tw-text-opacity));
2327
- }
2328
2344
  .text-slate-600 {
2329
2345
  --tw-text-opacity: 1;
2330
2346
  color: rgb(71 85 105 / var(--tw-text-opacity));
@@ -2390,6 +2406,12 @@ video {
2390
2406
  --tw-placeholder-opacity: 1;
2391
2407
  color: rgb(156 163 175 / var(--tw-placeholder-opacity));
2392
2408
  }
2409
+ .placeholder-muted-foreground::-moz-placeholder {
2410
+ color: var(--muted-foreground);
2411
+ }
2412
+ .placeholder-muted-foreground::placeholder {
2413
+ color: var(--muted-foreground);
2414
+ }
2393
2415
  .accent-primary {
2394
2416
  accent-color: var(--color-primary);
2395
2417
  }
@@ -2491,6 +2513,13 @@ video {
2491
2513
  .filter {
2492
2514
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
2493
2515
  }
2516
+ .transition {
2517
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
2518
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
2519
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
2520
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2521
+ transition-duration: 150ms;
2522
+ }
2494
2523
  .transition-all {
2495
2524
  transition-property: all;
2496
2525
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
@@ -2506,6 +2535,9 @@ video {
2506
2535
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2507
2536
  transition-duration: 150ms;
2508
2537
  }
2538
+ .delay-150 {
2539
+ transition-delay: 150ms;
2540
+ }
2509
2541
  .duration-200 {
2510
2542
  transition-duration: 200ms;
2511
2543
  }
@@ -2515,6 +2547,9 @@ video {
2515
2547
  .duration-500 {
2516
2548
  transition-duration: 500ms;
2517
2549
  }
2550
+ .ease-in-out {
2551
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2552
+ }
2518
2553
  .ease-out {
2519
2554
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
2520
2555
  }
@@ -2710,6 +2745,12 @@ video {
2710
2745
 
2711
2746
 
2712
2747
 
2748
+ .hover\:bg-inherit:hover {
2749
+ background-color: inherit;
2750
+ }
2751
+
2752
+
2753
+
2713
2754
  .hover\:bg-lime-600:hover {
2714
2755
  --tw-bg-opacity: 1;
2715
2756
  background-color: rgb(101 163 13 / var(--tw-bg-opacity));
@@ -4560,6 +4601,18 @@ video {
4560
4601
 
4561
4602
 
4562
4603
 
4604
+ .\[\&_svg\]\:pointer-events-auto svg {
4605
+ pointer-events: auto;
4606
+ }
4607
+
4608
+
4609
+
4610
+ .\[\&_svg\]\:invisible svg {
4611
+ visibility: hidden;
4612
+ }
4613
+
4614
+
4615
+
4563
4616
  .\[\&_svg\]\:size-4 svg {
4564
4617
  width: 1rem;
4565
4618
  height: 1rem;
@@ -0,0 +1,14 @@
1
+ import { c as createLucideIcon } from "./createLucideIcon-KSoQd4Wi.js";
2
+ /**
3
+ * @license lucide-react v0.456.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */
8
+ const ChevronDown = createLucideIcon("ChevronDown", [
9
+ ["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]
10
+ ]);
11
+ export {
12
+ ChevronDown as C
13
+ };
14
+ //# sourceMappingURL=chevron-down-CfJmko7t.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chevron-down-CfJmko7t.js","sources":["../node_modules/lucide-react/dist/esm/icons/chevron-down.js"],"sourcesContent":["/**\n * @license lucide-react v0.456.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronDown = createLucideIcon(\"ChevronDown\", [\n [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\n]);\n\nexport { ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASK,MAAC,cAAc,iBAAiB,eAAe;AAAA,EAClD,CAAC,QAAQ,EAAE,GAAG,gBAAgB,KAAK,SAAQ,CAAE;AAC/C,CAAC;","x_google_ignoreList":[0]}
@@ -1,11 +1,12 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import "../tailwind-l0sNRNKZ.js";
3
3
  import "react";
4
+ import "./ui/multi-select.js";
4
5
  import "../index.esm-ifS8v9eQ.js";
5
6
  import "../jspdf.plugin.autotable-7hp3hM-a.js";
6
7
  import "../contexts/FederationContext.js";
7
8
  import { getFullNameList } from "../utils/getFullName.js";
8
- import "../Dialog-BmQoVu5C.js";
9
+ import "../Dialog-CCrUyF91.js";
9
10
  import "./ui/ScrollArea.js";
10
11
  import "./ui/input.js";
11
12
  import "./ui/form.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Attachments.js","sources":["../../lib/components/Attachments.tsx"],"sourcesContent":["import { getFullNameList, IAttachment } from \"../main\";\r\n\r\nexport interface IAttachmentsProps {\r\n attachmentList: IAttachment[];\r\n}\r\n\r\nexport function Attachments({ attachmentList }: IAttachmentsProps) {\r\n return (\r\n <div>\r\n {attachmentList.map((attachment: IAttachment) => (\r\n <div>\r\n <a\r\n key={attachment?.id}\r\n href={`/api/files/download/${attachment?.id}`}\r\n className=\"flex flex-grow text-left underline text-primary\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n >\r\n {attachment?.filename}\r\n </a>\r\n <div className=\"text-xs text-gray-500\">\r\n Vložil/a: {getFullNameList(attachment?.createdByEmp, true, true)},{\" \"}\r\n {new Date(attachment.created).toLocaleString()}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAMgB,SAAA,YAAY,EAAE,kBAAqC;AACjE,6BACG,OACE,EAAA,UAAA,eAAe,IAAI,CAAC,oCAClB,OACC,EAAA,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,MAAM,uBAAuB,yCAAY,EAAE;AAAA,QAC3C,WAAU;AAAA,QACV,QAAO;AAAA,QACP,KAAI;AAAA,QAEH,UAAY,yCAAA;AAAA,MAAA;AAAA,MANR,yCAAY;AAAA,IAOnB;AAAA,IACA,qBAAC,OAAI,EAAA,WAAU,yBAAwB,UAAA;AAAA,MAAA;AAAA,MAC1B,gBAAgB,yCAAY,cAAc,MAAM,IAAI;AAAA,MAAE;AAAA,MAAE;AAAA,MAClE,IAAI,KAAK,WAAW,OAAO,EAAE,eAAe;AAAA,IAAA,GAC/C;AAAA,EAAA,EACF,CAAA,CACD,EACH,CAAA;AAEJ;"}
1
+ {"version":3,"file":"Attachments.js","sources":["../../lib/components/Attachments.tsx"],"sourcesContent":["import { getFullNameList, IAttachment } from \"../main\";\r\n\r\nexport interface IAttachmentsProps {\r\n attachmentList: IAttachment[];\r\n}\r\n\r\nexport function Attachments({ attachmentList }: IAttachmentsProps) {\r\n return (\r\n <div>\r\n {attachmentList.map((attachment: IAttachment) => (\r\n <div>\r\n <a\r\n key={attachment?.id}\r\n href={`/api/files/download/${attachment?.id}`}\r\n className=\"flex flex-grow text-left underline text-primary\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n >\r\n {attachment?.filename}\r\n </a>\r\n <div className=\"text-xs text-gray-500\">\r\n Vložil/a: {getFullNameList(attachment?.createdByEmp, true, true)},{\" \"}\r\n {new Date(attachment.created).toLocaleString()}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAMgB,SAAA,YAAY,EAAE,kBAAqC;AACjE,6BACG,OACE,EAAA,UAAA,eAAe,IAAI,CAAC,oCAClB,OACC,EAAA,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,MAAM,uBAAuB,yCAAY,EAAE;AAAA,QAC3C,WAAU;AAAA,QACV,QAAO;AAAA,QACP,KAAI;AAAA,QAEH,UAAY,yCAAA;AAAA,MAAA;AAAA,MANR,yCAAY;AAAA,IAOnB;AAAA,IACA,qBAAC,OAAI,EAAA,WAAU,yBAAwB,UAAA;AAAA,MAAA;AAAA,MAC1B,gBAAgB,yCAAY,cAAc,MAAM,IAAI;AAAA,MAAE;AAAA,MAAE;AAAA,MAClE,IAAI,KAAK,WAAW,OAAO,EAAE,eAAe;AAAA,IAAA,GAC/C;AAAA,EAAA,EACF,CAAA,CACD,EACH,CAAA;AAEJ;"}
@@ -52,7 +52,7 @@ function ConfirmationModalDialog({
52
52
  /* @__PURE__ */ jsxs("div", { className: "self-stretch h-40 px-6 pt-6 flex-col justify-start items-start gap-4 flex", children: [
53
53
  /* @__PURE__ */ jsx("div", { className: "w-12 h-12 relative bg-red-100 rounded-full", children: /* @__PURE__ */ jsx(FaRegTrashAlt, { className: "w-6 h-6 left-[12px] top-[12px] absolute" }) }),
54
54
  /* @__PURE__ */ jsxs("div", { className: "self-stretch h-16 flex-col justify-start items-start gap-1 flex", children: [
55
- /* @__PURE__ */ jsx("div", { className: "self-stretch text-gray-900 text-lg font-semibold font-['Inter'] leading-7", children: title }),
55
+ /* @__PURE__ */ jsx("div", { className: "self-stretch text-muted-foreground text-lg font-semibold font-['Inter'] leading-7", children: title }),
56
56
  /* @__PURE__ */ jsx("div", { className: "self-stretch text-slate-600 text-sm font-normal font-['Open Sans'] leading-tight", children: description })
57
57
  ] })
58
58
  ] }),
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmationModalDialog.js","sources":["../../lib/components/ConfirmationModalDialog.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\r\nimport { FaRegTrashAlt } from \"react-icons/fa\";\r\nimport { IoCloseOutline } from \"react-icons/io5\";\r\nimport Button from \"./Button\";\r\n\r\nexport interface IConfirmationModalDialogProps {\r\n title: string;\r\n confirmAction: () => void;\r\n cancelAction: () => void;\r\n description?: string;\r\n agreeeText?: string;\r\n cancelText?: string;\r\n}\r\n\r\nexport function ConfirmationModalDialog({\r\n title,\r\n confirmAction,\r\n cancelAction,\r\n description,\r\n agreeeText,\r\n cancelText,\r\n}: IConfirmationModalDialogProps) {\r\n const [isConfirming, setIsConfirming] = useState(false);\r\n\r\n useEffect(() => {\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n if (event.key === \"Escape\") {\r\n cancelAction();\r\n }\r\n };\r\n window.addEventListener(\"keydown\", handleKeyDown);\r\n return () => {\r\n window.removeEventListener(\"keydown\", handleKeyDown);\r\n };\r\n }, [cancelAction]);\r\n\r\n return (\r\n <div\r\n className=\"fixed inset-0 bg-black bg-opacity-25 flex items-center justify-center p-4\"\r\n style={{ zIndex: 50 }}\r\n >\r\n <div className=\"w-96 h-64 bg-white rounded-xl shadow flex-col justify-start items-center inline-flex relative overflow-hidden\">\r\n <div\r\n id=\"graphics\"\r\n className=\"w-80 h-80 left-[-120px] top-[-120px] absolute \"\r\n >\r\n <div className=\"w-80 h-80 left-0 top-0 absolute\">\r\n <div className=\"w-24 h-24 left-[120px] top-[120px] absolute rounded-full border border-gray-150\" />\r\n <div className=\"w-36 h-36 left-[96px] top-[96px] absolute rounded-full border border-gray-100 \" />\r\n <div className=\"w-48 h-48 left-[72px] top-[72px] absolute rounded-full border border-gray-100 \" />\r\n <div className=\"w-60 h-60 left-[48px] top-[48px] absolute rounded-full border border-gray-50 \" />\r\n <div className=\"w-72 h-72 left-[24px] top-[24px] absolute rounded-full border border-gray-50\" />\r\n </div>\r\n </div>\r\n <div\r\n id=\"header\"\r\n className=\"self-stretch h-40 flex-col justify-start items-center flex z-40\"\r\n >\r\n <div className=\"self-stretch h-40 px-6 pt-6 flex-col justify-start items-start gap-4 flex\">\r\n <div className=\"w-12 h-12 relative bg-red-100 rounded-full\">\r\n <FaRegTrashAlt className=\"w-6 h-6 left-[12px] top-[12px] absolute\" />\r\n </div>\r\n <div className=\"self-stretch h-16 flex-col justify-start items-start gap-1 flex\">\r\n <div className=\"self-stretch text-gray-900 text-lg font-semibold font-['Inter'] leading-7\">\r\n {title}\r\n </div>\r\n <div className=\"self-stretch text-slate-600 text-sm font-normal font-['Open Sans'] leading-tight\">\r\n {description}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n className=\"w-11 h-11 p-2 right-0 top-[16px] absolute rounded-full justify-center items-center inline-flex mr-4 hover:bg-gray-100\"\r\n onClick={cancelAction}\r\n >\r\n <IoCloseOutline className=\"w-6 h-6 relative text-gray-400\" />\r\n </div>\r\n </div>\r\n <div\r\n id=\"actions\"\r\n className=\"self-stretch h-24 pt-8 flex-col justify-start items-start flex z-40\"\r\n >\r\n <div className=\"self-stretch px-6 pb-6 justify-start items-start gap-3 flex\">\r\n <Button\r\n id=\"ConfirmationModalDialog:back\"\r\n type=\"button\"\r\n variant=\"secondary\"\r\n onClick={cancelAction}\r\n className=\"flex-1\"\r\n >\r\n {cancelText || \"Zrušit\"}\r\n </Button>\r\n <Button\r\n id=\"ConfirmationModalDialog:agree\"\r\n type=\"button\"\r\n variant=\"danger\"\r\n onClick={() => {\r\n if (!isConfirming) {\r\n setIsConfirming(true);\r\n confirmAction();\r\n }\r\n }}\r\n disabled={isConfirming}\r\n className=\"flex-1\"\r\n >\r\n {agreeeText || \"OK\"}{\" \"}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ConfirmationModalDialog;\r\n"],"names":[],"mappings":";;;;;AAcO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkC;AAChC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AAEtD,YAAU,MAAM;AACR,UAAA,gBAAgB,CAAC,UAAyB;AAC1C,UAAA,MAAM,QAAQ,UAAU;AACb;MACf;AAAA,IAAA;AAEK,WAAA,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM;AACJ,aAAA,oBAAoB,WAAW,aAAa;AAAA,IAAA;AAAA,EACrD,GACC,CAAC,YAAY,CAAC;AAGf,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,QAAQ,GAAG;AAAA,MAEpB,UAAA,qBAAC,OAAI,EAAA,WAAU,iHACb,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA,qBAAC,OAAI,EAAA,WAAU,mCACb,UAAA;AAAA,cAAC,oBAAA,OAAA,EAAI,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,+EAA+E,CAAA;AAAA,YAAA,GAChG;AAAA,UAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA;AAAA,cAAC,qBAAA,OAAA,EAAI,WAAU,6EACb,UAAA;AAAA,gBAAA,oBAAC,SAAI,WAAU,8CACb,8BAAC,eAAc,EAAA,WAAU,2CAA0C,EACrE,CAAA;AAAA,gBACA,qBAAC,OAAI,EAAA,WAAU,mEACb,UAAA;AAAA,kBAAC,oBAAA,OAAA,EAAI,WAAU,6EACZ,UACH,OAAA;AAAA,kBACC,oBAAA,OAAA,EAAI,WAAU,oFACZ,UACH,aAAA;AAAA,gBAAA,GACF;AAAA,cAAA,GACF;AAAA,cACA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,SAAS;AAAA,kBAET,UAAA,oBAAC,gBAAe,EAAA,WAAU,iCAAiC,CAAA;AAAA,gBAAA;AAAA,cAC7D;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA,qBAAC,OAAI,EAAA,WAAU,gEACb,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,WAAU;AAAA,kBAET,UAAc,cAAA;AAAA,gBAAA;AAAA,cACjB;AAAA,cACA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAS,MAAM;AACb,wBAAI,CAAC,cAAc;AACjB,sCAAgB,IAAI;AACN;oBAChB;AAAA,kBACF;AAAA,kBACA,UAAU;AAAA,kBACV,WAAU;AAAA,kBAET,UAAA;AAAA,oBAAc,cAAA;AAAA,oBAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACvB;AAAA,YAAA,GACF;AAAA,UAAA;AAAA,QACF;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"ConfirmationModalDialog.js","sources":["../../lib/components/ConfirmationModalDialog.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\r\nimport { FaRegTrashAlt } from \"react-icons/fa\";\r\nimport { IoCloseOutline } from \"react-icons/io5\";\r\nimport Button from \"./Button\";\r\n\r\nexport interface IConfirmationModalDialogProps {\r\n title: string;\r\n confirmAction: () => void;\r\n cancelAction: () => void;\r\n description?: string;\r\n agreeeText?: string;\r\n cancelText?: string;\r\n}\r\n\r\nexport function ConfirmationModalDialog({\r\n title,\r\n confirmAction,\r\n cancelAction,\r\n description,\r\n agreeeText,\r\n cancelText,\r\n}: IConfirmationModalDialogProps) {\r\n const [isConfirming, setIsConfirming] = useState(false);\r\n\r\n useEffect(() => {\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n if (event.key === \"Escape\") {\r\n cancelAction();\r\n }\r\n };\r\n window.addEventListener(\"keydown\", handleKeyDown);\r\n return () => {\r\n window.removeEventListener(\"keydown\", handleKeyDown);\r\n };\r\n }, [cancelAction]);\r\n\r\n return (\r\n <div\r\n className=\"fixed inset-0 bg-black bg-opacity-25 flex items-center justify-center p-4\"\r\n style={{ zIndex: 50 }}\r\n >\r\n <div className=\"w-96 h-64 bg-white rounded-xl shadow flex-col justify-start items-center inline-flex relative overflow-hidden\">\r\n <div\r\n id=\"graphics\"\r\n className=\"w-80 h-80 left-[-120px] top-[-120px] absolute \"\r\n >\r\n <div className=\"w-80 h-80 left-0 top-0 absolute\">\r\n <div className=\"w-24 h-24 left-[120px] top-[120px] absolute rounded-full border border-gray-150\" />\r\n <div className=\"w-36 h-36 left-[96px] top-[96px] absolute rounded-full border border-gray-100 \" />\r\n <div className=\"w-48 h-48 left-[72px] top-[72px] absolute rounded-full border border-gray-100 \" />\r\n <div className=\"w-60 h-60 left-[48px] top-[48px] absolute rounded-full border border-gray-50 \" />\r\n <div className=\"w-72 h-72 left-[24px] top-[24px] absolute rounded-full border border-gray-50\" />\r\n </div>\r\n </div>\r\n <div\r\n id=\"header\"\r\n className=\"self-stretch h-40 flex-col justify-start items-center flex z-40\"\r\n >\r\n <div className=\"self-stretch h-40 px-6 pt-6 flex-col justify-start items-start gap-4 flex\">\r\n <div className=\"w-12 h-12 relative bg-red-100 rounded-full\">\r\n <FaRegTrashAlt className=\"w-6 h-6 left-[12px] top-[12px] absolute\" />\r\n </div>\r\n <div className=\"self-stretch h-16 flex-col justify-start items-start gap-1 flex\">\r\n <div className=\"self-stretch text-muted-foreground text-lg font-semibold font-['Inter'] leading-7\">\r\n {title}\r\n </div>\r\n <div className=\"self-stretch text-slate-600 text-sm font-normal font-['Open Sans'] leading-tight\">\r\n {description}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n className=\"w-11 h-11 p-2 right-0 top-[16px] absolute rounded-full justify-center items-center inline-flex mr-4 hover:bg-gray-100\"\r\n onClick={cancelAction}\r\n >\r\n <IoCloseOutline className=\"w-6 h-6 relative text-gray-400\" />\r\n </div>\r\n </div>\r\n <div\r\n id=\"actions\"\r\n className=\"self-stretch h-24 pt-8 flex-col justify-start items-start flex z-40\"\r\n >\r\n <div className=\"self-stretch px-6 pb-6 justify-start items-start gap-3 flex\">\r\n <Button\r\n id=\"ConfirmationModalDialog:back\"\r\n type=\"button\"\r\n variant=\"secondary\"\r\n onClick={cancelAction}\r\n className=\"flex-1\"\r\n >\r\n {cancelText || \"Zrušit\"}\r\n </Button>\r\n <Button\r\n id=\"ConfirmationModalDialog:agree\"\r\n type=\"button\"\r\n variant=\"danger\"\r\n onClick={() => {\r\n if (!isConfirming) {\r\n setIsConfirming(true);\r\n confirmAction();\r\n }\r\n }}\r\n disabled={isConfirming}\r\n className=\"flex-1\"\r\n >\r\n {agreeeText || \"OK\"}{\" \"}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ConfirmationModalDialog;\r\n"],"names":[],"mappings":";;;;;AAcO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkC;AAChC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AAEtD,YAAU,MAAM;AACR,UAAA,gBAAgB,CAAC,UAAyB;AAC1C,UAAA,MAAM,QAAQ,UAAU;AACb;MACf;AAAA,IAAA;AAEK,WAAA,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM;AACJ,aAAA,oBAAoB,WAAW,aAAa;AAAA,IAAA;AAAA,EACrD,GACC,CAAC,YAAY,CAAC;AAGf,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,QAAQ,GAAG;AAAA,MAEpB,UAAA,qBAAC,OAAI,EAAA,WAAU,iHACb,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA,qBAAC,OAAI,EAAA,WAAU,mCACb,UAAA;AAAA,cAAC,oBAAA,OAAA,EAAI,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,+EAA+E,CAAA;AAAA,YAAA,GAChG;AAAA,UAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA;AAAA,cAAC,qBAAA,OAAA,EAAI,WAAU,6EACb,UAAA;AAAA,gBAAA,oBAAC,SAAI,WAAU,8CACb,8BAAC,eAAc,EAAA,WAAU,2CAA0C,EACrE,CAAA;AAAA,gBACA,qBAAC,OAAI,EAAA,WAAU,mEACb,UAAA;AAAA,kBAAC,oBAAA,OAAA,EAAI,WAAU,qFACZ,UACH,OAAA;AAAA,kBACC,oBAAA,OAAA,EAAI,WAAU,oFACZ,UACH,aAAA;AAAA,gBAAA,GACF;AAAA,cAAA,GACF;AAAA,cACA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,SAAS;AAAA,kBAET,UAAA,oBAAC,gBAAe,EAAA,WAAU,iCAAiC,CAAA;AAAA,gBAAA;AAAA,cAC7D;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA,qBAAC,OAAI,EAAA,WAAU,gEACb,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,WAAU;AAAA,kBAET,UAAc,cAAA;AAAA,gBAAA;AAAA,cACjB;AAAA,cACA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAS,MAAM;AACb,wBAAI,CAAC,cAAc;AACjB,sCAAgB,IAAI;AACN;oBAChB;AAAA,kBACF;AAAA,kBACA,UAAU;AAAA,kBACV,WAAU;AAAA,kBAET,UAAA;AAAA,oBAAc,cAAA;AAAA,oBAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACvB;AAAA,YAAA,GACF;AAAA,UAAA;AAAA,QACF;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -35,7 +35,7 @@ function Modal({
35
35
  children: /* @__PURE__ */ jsxs("div", { className: "self-stretch h-40 px-6 pt-6 flex-col justify-start items-start gap-4 flex", children: [
36
36
  /* @__PURE__ */ jsx("div", { className: "w-12 h-12 relative bg-red-100 rounded-full", children: /* @__PURE__ */ jsx(FaRegTrashAlt, { className: "w-6 h-6 left-[12px] top-[12px] absolute" }) }),
37
37
  /* @__PURE__ */ jsxs("div", { className: "self-stretch h-16 flex-col justify-start items-start gap-1 flex", children: [
38
- /* @__PURE__ */ jsx("div", { className: "self-stretch text-gray-900 text-lg font-semibold font-['Inter'] leading-7", children: title }),
38
+ /* @__PURE__ */ jsx("div", { className: "self-stretch text-muted-foreground text-lg font-semibold font-['Inter'] leading-7", children: title }),
39
39
  /* @__PURE__ */ jsx("div", { className: "self-stretch text-slate-600 text-sm font-normal font-['Open Sans'] leading-tight", children: description })
40
40
  ] })
41
41
  ] })
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sources":["../../lib/components/Modal.tsx"],"sourcesContent":["import { FaRegTrashAlt } from \"react-icons/fa\";\r\nimport Button from \"./Button\";\r\n\r\nexport interface IConfirmationModalDialogProps {\r\n title: string;\r\n confirmAction: () => void;\r\n description?: string;\r\n agreeeText?: string;\r\n}\r\n\r\nexport function Modal({\r\n title,\r\n confirmAction,\r\n description,\r\n agreeeText = \"OK\",\r\n}: IConfirmationModalDialogProps) {\r\n return (\r\n <div\r\n className=\"fixed inset-0 bg-black bg-opacity-25 flex items-center justify-center p-4\"\r\n style={{ zIndex: 50 }}\r\n >\r\n <div className=\"w-[500px] h-[300px] bg-white rounded-xl shadow flex-col justify-start items-center inline-flex relative overflow-hidden\">\r\n <div\r\n id=\"graphics\"\r\n className=\"w-80 h-80 left-[-120px] top-[-120px] absolute \"\r\n >\r\n <div className=\"w-80 h-80 left-0 top-0 absolute\">\r\n <div className=\"w-24 h-24 left-[120px] top-[120px] absolute rounded-full border border-gray-150\" />\r\n <div className=\"w-36 h-36 left-[96px] top-[96px] absolute rounded-full border border-gray-100 \" />\r\n <div className=\"w-48 h-48 left-[72px] top-[72px] absolute rounded-full border border-gray-100 \" />\r\n <div className=\"w-60 h-60 left-[48px] top-[48px] absolute rounded-full border border-gray-50 \" />\r\n <div className=\"w-72 h-72 left-[24px] top-[24px] absolute rounded-full border border-gray-50\" />\r\n </div>\r\n </div>\r\n <div\r\n id=\"header\"\r\n className=\"self-stretch h-40 flex-col justify-start items-center flex z-40\"\r\n >\r\n <div className=\"self-stretch h-40 px-6 pt-6 flex-col justify-start items-start gap-4 flex\">\r\n <div className=\"w-12 h-12 relative bg-red-100 rounded-full\">\r\n <FaRegTrashAlt className=\"w-6 h-6 left-[12px] top-[12px] absolute\" />\r\n </div>\r\n <div className=\"self-stretch h-16 flex-col justify-start items-start gap-1 flex\">\r\n <div className=\"self-stretch text-gray-900 text-lg font-semibold font-['Inter'] leading-7\">\r\n {title}\r\n </div>\r\n <div className=\"self-stretch text-slate-600 text-sm font-normal font-['Open Sans'] leading-tight\">\r\n {description}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n id=\"actions\"\r\n className=\"self-stretch h-24 pt-8 flex-col justify-start items-start flex z-40\"\r\n >\r\n <div className=\"self-stretch px-6 pb-6 justify-start items-start gap-3 flex\">\r\n <Button\r\n type=\"button\"\r\n variant=\"primary\"\r\n onClick={confirmAction}\r\n className=\"flex-1\"\r\n >\r\n {agreeeText || \"OK\"}{\" \"}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Modal;\r\n"],"names":[],"mappings":";;;AAUO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AACf,GAAkC;AAE9B,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,QAAQ,GAAG;AAAA,MAEpB,UAAA,qBAAC,OAAI,EAAA,WAAU,2HACb,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA,qBAAC,OAAI,EAAA,WAAU,mCACb,UAAA;AAAA,cAAC,oBAAA,OAAA,EAAI,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,+EAA+E,CAAA;AAAA,YAAA,GAChG;AAAA,UAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA,qBAAC,OAAI,EAAA,WAAU,6EACb,UAAA;AAAA,cAAA,oBAAC,SAAI,WAAU,8CACb,8BAAC,eAAc,EAAA,WAAU,2CAA0C,EACrE,CAAA;AAAA,cACA,qBAAC,OAAI,EAAA,WAAU,mEACb,UAAA;AAAA,gBAAC,oBAAA,OAAA,EAAI,WAAU,6EACZ,UACH,OAAA;AAAA,gBACC,oBAAA,OAAA,EAAI,WAAU,oFACZ,UACH,aAAA;AAAA,cAAA,GACF;AAAA,YAAA,GACF;AAAA,UAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA,oBAAC,OAAI,EAAA,WAAU,gEACb,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,WAAU;AAAA,gBAET,UAAA;AAAA,kBAAc,cAAA;AAAA,kBAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,GAEzB;AAAA,UAAA;AAAA,QACF;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"Modal.js","sources":["../../lib/components/Modal.tsx"],"sourcesContent":["import { FaRegTrashAlt } from \"react-icons/fa\";\r\nimport Button from \"./Button\";\r\n\r\nexport interface IConfirmationModalDialogProps {\r\n title: string;\r\n confirmAction: () => void;\r\n description?: string;\r\n agreeeText?: string;\r\n}\r\n\r\nexport function Modal({\r\n title,\r\n confirmAction,\r\n description,\r\n agreeeText = \"OK\",\r\n}: IConfirmationModalDialogProps) {\r\n return (\r\n <div\r\n className=\"fixed inset-0 bg-black bg-opacity-25 flex items-center justify-center p-4\"\r\n style={{ zIndex: 50 }}\r\n >\r\n <div className=\"w-[500px] h-[300px] bg-white rounded-xl shadow flex-col justify-start items-center inline-flex relative overflow-hidden\">\r\n <div\r\n id=\"graphics\"\r\n className=\"w-80 h-80 left-[-120px] top-[-120px] absolute \"\r\n >\r\n <div className=\"w-80 h-80 left-0 top-0 absolute\">\r\n <div className=\"w-24 h-24 left-[120px] top-[120px] absolute rounded-full border border-gray-150\" />\r\n <div className=\"w-36 h-36 left-[96px] top-[96px] absolute rounded-full border border-gray-100 \" />\r\n <div className=\"w-48 h-48 left-[72px] top-[72px] absolute rounded-full border border-gray-100 \" />\r\n <div className=\"w-60 h-60 left-[48px] top-[48px] absolute rounded-full border border-gray-50 \" />\r\n <div className=\"w-72 h-72 left-[24px] top-[24px] absolute rounded-full border border-gray-50\" />\r\n </div>\r\n </div>\r\n <div\r\n id=\"header\"\r\n className=\"self-stretch h-40 flex-col justify-start items-center flex z-40\"\r\n >\r\n <div className=\"self-stretch h-40 px-6 pt-6 flex-col justify-start items-start gap-4 flex\">\r\n <div className=\"w-12 h-12 relative bg-red-100 rounded-full\">\r\n <FaRegTrashAlt className=\"w-6 h-6 left-[12px] top-[12px] absolute\" />\r\n </div>\r\n <div className=\"self-stretch h-16 flex-col justify-start items-start gap-1 flex\">\r\n <div className=\"self-stretch text-muted-foreground text-lg font-semibold font-['Inter'] leading-7\">\r\n {title}\r\n </div>\r\n <div className=\"self-stretch text-slate-600 text-sm font-normal font-['Open Sans'] leading-tight\">\r\n {description}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n id=\"actions\"\r\n className=\"self-stretch h-24 pt-8 flex-col justify-start items-start flex z-40\"\r\n >\r\n <div className=\"self-stretch px-6 pb-6 justify-start items-start gap-3 flex\">\r\n <Button\r\n type=\"button\"\r\n variant=\"primary\"\r\n onClick={confirmAction}\r\n className=\"flex-1\"\r\n >\r\n {agreeeText || \"OK\"}{\" \"}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Modal;\r\n"],"names":[],"mappings":";;;AAUO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AACf,GAAkC;AAE9B,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,QAAQ,GAAG;AAAA,MAEpB,UAAA,qBAAC,OAAI,EAAA,WAAU,2HACb,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA,qBAAC,OAAI,EAAA,WAAU,mCACb,UAAA;AAAA,cAAC,oBAAA,OAAA,EAAI,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,kFAAkF,CAAA;AAAA,cACjG,oBAAC,OAAI,EAAA,WAAU,+EAA+E,CAAA;AAAA,YAAA,GAChG;AAAA,UAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA,qBAAC,OAAI,EAAA,WAAU,6EACb,UAAA;AAAA,cAAA,oBAAC,SAAI,WAAU,8CACb,8BAAC,eAAc,EAAA,WAAU,2CAA0C,EACrE,CAAA;AAAA,cACA,qBAAC,OAAI,EAAA,WAAU,mEACb,UAAA;AAAA,gBAAC,oBAAA,OAAA,EAAI,WAAU,qFACZ,UACH,OAAA;AAAA,gBACC,oBAAA,OAAA,EAAI,WAAU,oFACZ,UACH,aAAA;AAAA,cAAA,GACF;AAAA,YAAA,GACF;AAAA,UAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAEV,UAAA,oBAAC,OAAI,EAAA,WAAU,gEACb,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,WAAU;AAAA,gBAET,UAAA;AAAA,kBAAc,cAAA;AAAA,kBAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,GAEzB;AAAA,UAAA;AAAA,QACF;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -5,10 +5,11 @@ import Button from "../Button.js";
5
5
  import { f as MdOutlineFilterAlt, g as MdOutlineFilterAltOff, h as MdSearch, b as MdClose, i as MdArrowBack, j as MdArrowForward, k as MdArrowUpward, l as MdArrowDownward } from "../../index-DVD0PiGU.js";
6
6
  import FormField from "../form/FormField.js";
7
7
  import Spinner from "../Spinner.js";
8
+ import "../ui/multi-select.js";
8
9
  import "../../index.esm-ifS8v9eQ.js";
9
10
  import "../../jspdf.plugin.autotable-7hp3hM-a.js";
10
11
  import "../../contexts/FederationContext.js";
11
- import "../../Dialog-BmQoVu5C.js";
12
+ import "../../Dialog-CCrUyF91.js";
12
13
  import "../ui/ScrollArea.js";
13
14
  import "../ui/input.js";
14
15
  import "../ui/form.js";
@@ -253,7 +254,7 @@ function DataTable({
253
254
  "td",
254
255
  {
255
256
  className: `px-5 py-2
256
- ${colIndex == 0 ? " font-medium text-gray-900" : " text-gray-700"} ${classes}`,
257
+ ${colIndex == 0 ? " font-medium text-muted-foreground" : " text-gray-700"} ${classes}`,
257
258
  children: [
258
259
  render ? render(item) : "",
259
260
  actions && actions.filter((it) => {
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","sources":["../../../lib/components/datatable/DataTable.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\r\n\r\nimport { Button, FormField, Spinner } from \"../../main\";\r\nimport {\r\n MdArrowBack,\r\n MdArrowDownward,\r\n MdArrowForward,\r\n MdArrowUpward,\r\n MdClose,\r\n MdOutlineFilterAlt,\r\n MdOutlineFilterAltOff,\r\n MdSearch,\r\n} from \"react-icons/md\";\r\n\r\nexport interface DataTableColumn<T> {\r\n key: keyof T | \"actions\";\r\n header: string;\r\n render?: (item: T) => React.ReactNode;\r\n actions?: DataTableAction<T>[];\r\n filterType?: string;\r\n classes?: string;\r\n type?: \"string\" | \"number\" | \"date\";\r\n filterOperator?: \">=\" | \"<=\" | \"==\";\r\n}\r\nexport interface DataTableAction<T> {\r\n label: string;\r\n onClick: (item: T) => void;\r\n visible?: (item: T) => boolean;\r\n icon?: React.ReactNode;\r\n}\r\ninterface DataTableProps<T> {\r\n items: T[];\r\n columns: DataTableColumn<T | \"actions\">[];\r\n itemsPerPage?: number;\r\n title?: string;\r\n subtitle?: string;\r\n allowSearch?: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\ntype DataTableInternalItems = {\r\n _isHighlighted?: boolean;\r\n};\r\n\r\nfunction DataTable<T extends DataTableInternalItems>({\r\n items,\r\n columns,\r\n itemsPerPage = 10,\r\n title,\r\n subtitle,\r\n allowSearch = true,\r\n isLoading,\r\n}: DataTableProps<T>) {\r\n const [currentPage, setCurrentPage] = useState(0);\r\n const [fulltextSearch, setFulltextSearch] = useState(\"\");\r\n const [filterOptions, setFilterOptions] = useState<Record<string, any[]>>({});\r\n const [columnFilters, setColumnFilters] = useState<Record<string, string>>(\r\n {}\r\n );\r\n\r\n const [showColFilters, setShowColFilters] = useState(false);\r\n\r\n const [sortConfig, setSortConfig] = useState<{\r\n key: keyof T | \"actions\";\r\n direction: \"ascending\" | \"descending\" | null;\r\n } | null>(null);\r\n\r\n useEffect(() => {\r\n const newFilterOptions: Record<string, any[]> = {};\r\n\r\n columns.forEach((column) => {\r\n if (column.filterType && items.length > 0) {\r\n const uniqueOptions = new Set(\r\n items.map((item) => item[column.key as keyof T])\r\n );\r\n // Convert Set to an array of { value, label } objects\r\n let sortedOptions = Array.from(uniqueOptions).map((option) => ({\r\n value: option,\r\n label:\r\n column.type === \"date\"\r\n ? new Date(option as string)?.toLocaleDateString()\r\n : option,\r\n }));\r\n\r\n // Sort the options array by label in ascending alphabetical order\r\n if (column.type === \"date\") {\r\n // Convert labels to timestamps and sort accordingly\r\n sortedOptions = sortedOptions.sort((a, b) => {\r\n const timestampA = new Date(a.value as string).getTime();\r\n const timestampB = new Date(b.value as string).getTime();\r\n return timestampA - timestampB;\r\n });\r\n } else {\r\n // Sort alphabetically by label for non-date columns\r\n sortedOptions = sortedOptions.sort((a, b) =>\r\n (a.label as string)?.localeCompare(b.label as string)\r\n );\r\n }\r\n\r\n // Add a default option if needed\r\n newFilterOptions[column.key as string] = [\r\n { value: \"\", label: \"\" },\r\n ...sortedOptions,\r\n ];\r\n }\r\n });\r\n\r\n setFilterOptions(newFilterOptions);\r\n }, [items, columns]);\r\n\r\n const requestSort = (key: keyof T | \"actions\") => {\r\n if (sortConfig?.key === key && sortConfig.direction !== null) {\r\n setSortConfig({\r\n key,\r\n direction: sortConfig.direction === \"ascending\" ? \"descending\" : null,\r\n });\r\n } else {\r\n setSortConfig({ key, direction: \"ascending\" });\r\n }\r\n };\r\n\r\n const getSortIcon = (key: keyof T | \"actions\") => {\r\n if (sortConfig?.key === key) {\r\n return sortConfig.direction === \"ascending\" ? (\r\n <MdArrowUpward fontSize=\"small\" />\r\n ) : sortConfig.direction === \"descending\" ? (\r\n <MdArrowDownward fontSize=\"small\" />\r\n ) : (\r\n <MdArrowUpward\r\n fontSize=\"small\"\r\n className=\"text-gray-300 invisible group-hover:visible \"\r\n />\r\n );\r\n }\r\n return (\r\n <MdArrowUpward\r\n fontSize=\"small\"\r\n className=\"text-gray-300 invisible group-hover:visible \"\r\n />\r\n );\r\n };\r\n\r\n const sortedItems = sortConfig?.direction\r\n ? [...items].sort((a, b) => {\r\n const aValue = a[sortConfig.key as keyof T];\r\n const bValue = b[sortConfig.key as keyof T];\r\n\r\n // Check if values are Date objects\r\n if (aValue instanceof Date && bValue instanceof Date) {\r\n return sortConfig.direction === \"ascending\"\r\n ? aValue.getTime() - bValue.getTime()\r\n : bValue.getTime() - aValue.getTime();\r\n }\r\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\r\n return sortConfig.direction === \"ascending\"\r\n ? aValue - bValue\r\n : bValue - aValue;\r\n }\r\n return sortConfig.direction === \"ascending\"\r\n ? String(aValue).localeCompare(String(bValue))\r\n : String(bValue).localeCompare(String(aValue));\r\n })\r\n : items;\r\n\r\n // const searchableKeys = new Set(\r\n // columns.filter((col) => !col.actions).map((col) => col.key)\r\n // );\r\n\r\n const filteredItems = sortedItems.filter((item: any) => {\r\n const textSearchMatch = fulltextSearch\r\n ? columns.some((column) => {\r\n const value = item[column.key];\r\n return (\r\n (typeof value === \"string\" || typeof value === \"number\") &&\r\n value\r\n .toString()\r\n .toLowerCase()\r\n .includes(fulltextSearch.toLowerCase())\r\n );\r\n })\r\n : true;\r\n\r\n const columnFiltersMatch = columns.every((column) => {\r\n // debugger;\r\n const filterValue = columnFilters[column.key as string];\r\n if (!filterValue) return true; // Ignore filter if 'None' is selected\r\n\r\n const itemValue = item[column.key];\r\n if ((column.type || typeof itemValue) === \"string\") {\r\n if (column.filterOperator == \">=\") {\r\n return itemValue.toLowerCase() >= filterValue.toLowerCase();\r\n } else if (column.filterOperator == \"<=\") {\r\n return itemValue.toLowerCase() <= filterValue.toLowerCase();\r\n }\r\n if (column.filterType == \"text\") {\r\n return itemValue.toLowerCase().includes(filterValue.toLowerCase());\r\n } else {\r\n return itemValue.toLowerCase() == filterValue.toLowerCase();\r\n }\r\n } else {\r\n if (column.filterOperator == \">=\") {\r\n return itemValue >= filterValue;\r\n } else if (column.filterOperator == \"<=\") {\r\n return itemValue <= filterValue;\r\n } else {\r\n return itemValue == filterValue;\r\n }\r\n }\r\n });\r\n\r\n return textSearchMatch && columnFiltersMatch;\r\n });\r\n\r\n // Pagination logic\r\n const indexOfLastItem = (currentPage + 1) * itemsPerPage;\r\n const indexOfFirstItem = indexOfLastItem - itemsPerPage;\r\n const currentItems = filteredItems.slice(indexOfFirstItem, indexOfLastItem);\r\n\r\n const nextPage = () => {\r\n setCurrentPage(currentPage + 1);\r\n };\r\n\r\n const prevPage = () => {\r\n setCurrentPage(currentPage - 1);\r\n };\r\n const handleSearchChanged = (\r\n e: React.ChangeEvent<\r\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\r\n >\r\n ) => {\r\n setFulltextSearch(e.target?.value);\r\n setCurrentPage(0);\r\n };\r\n\r\n const totalPages = Math.max(\r\n 1,\r\n Math.ceil(filteredItems.length / itemsPerPage)\r\n );\r\n\r\n // Pagination display logic\r\n const paginationDisplay = `Strana ${currentPage + 1} z ${totalPages}`;\r\n\r\n const filterHandler = (key: keyof T, value: string) => {\r\n setColumnFilters((prev) => ({ ...prev, [key]: value }));\r\n setCurrentPage(0);\r\n };\r\n\r\n if (isLoading) return <Spinner />;\r\n return (\r\n <>\r\n <div className=\"container shadow-lg border border-gray-200 rounded-xl overflow-hidden \">\r\n {(title || subtitle || allowSearch) && (\r\n <div className=\"p-5 leading-9 flex \">\r\n <div className=\"flex-grow\">\r\n {title && (\r\n <h1 className=\"font-semibold text-xl leading-[42px] \">\r\n {title}\r\n </h1>\r\n )}\r\n {subtitle && (\r\n <p className=\"font-normal text-gray-600\">{subtitle}</p>\r\n )}\r\n </div>\r\n <div\r\n className=\"flex items-center text-xl h-full p-3 mr-5 cursor-pointer text-gray-500 \"\r\n onClick={() => setShowColFilters(!showColFilters)}\r\n >\r\n {!showColFilters && <MdOutlineFilterAlt />}\r\n {showColFilters && <MdOutlineFilterAltOff />}\r\n </div>\r\n {allowSearch && (\r\n <div className=\"\">\r\n <FormField\r\n placeholder=\"Vyhledávání\"\r\n name=\"search\"\r\n onInputChange={handleSearchChanged}\r\n type=\"text\"\r\n value={fulltextSearch}\r\n >\r\n {\" \"}\r\n <div className=\" text-gray-500 leading-5 flex items-center h-full\">\r\n {!fulltextSearch && <MdSearch></MdSearch>}\r\n {fulltextSearch && (\r\n <MdClose onClick={() => setFulltextSearch(\"\")}></MdClose>\r\n )}\r\n </div>\r\n </FormField>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full leading-normal\">\r\n <thead>\r\n {showColFilters &&\r\n columns.findIndex((it) => it.filterType) > -1 && (\r\n <tr>\r\n {columns.map(({ key, header, filterType }) => (\r\n <th\r\n key={String(key) + \"_filter\"}\r\n // className=\"cursor-pointer px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-sm font-medium text-gray-600 uppercase tracking-wider\"\r\n className={` font-medium cursor-pointer !leading-9 text-xs text-left pl-5 pb-5 text-gray-600 ${\r\n !title && !subtitle ? \"border-t-0\" : \"\"\r\n }`}\r\n >\r\n {filterType && (\r\n <FormField\r\n label={header}\r\n name={String(key) + \"_filter\"}\r\n onInputChange={(e) =>\r\n filterHandler(key as keyof T, e.target.value)\r\n }\r\n type={filterType}\r\n options={filterOptions[String(key)] || []}\r\n value={columnFilters[String(key)]}\r\n clearable\r\n ></FormField>\r\n )}\r\n </th>\r\n ))}\r\n </tr>\r\n )}\r\n <tr>\r\n {columns.map(({ key, header, actions }) => (\r\n <th\r\n key={String(key)}\r\n // className=\"cursor-pointer px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-sm font-medium text-gray-600 uppercase tracking-wider\"\r\n className={`group font-medium cursor-pointer !leading-9 text-xs text-left px-5 text-gray-600 bg bg-gray-50 border-t border-b border-gray-200 ${\r\n !title && !subtitle ? \"border-t-0\" : \"\"\r\n }`}\r\n onClick={() => requestSort(key)}\r\n >\r\n <span className=\"inline-flex items-center gap-2\">\r\n {header} {!actions ? getSortIcon(key) : \"\"}\r\n </span>\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {currentItems.map((item, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className={`${\r\n item._isHighlighted ? \" bg-gray-200 \" : \" \"\r\n } hover:bg-gray-50 border-gray-200 border-b text-sm `}\r\n >\r\n {columns.map(({ render, actions, classes }, colIndex) => (\r\n <td\r\n key={`${rowIndex}-${colIndex}`}\r\n className={`px-5 py-2\r\n ${\r\n colIndex == 0\r\n ? \" font-medium text-gray-900\"\r\n : \" text-gray-700\"\r\n } ${classes}`}\r\n >\r\n {render ? render(item) : \"\"}\r\n {actions &&\r\n actions\r\n .filter((it) => {\r\n if (it.visible) {\r\n return it.visible(item);\r\n } else true;\r\n })\r\n .map((action, actionIndex) => (\r\n <div\r\n key={`${rowIndex}-${colIndex}-${actionIndex}`}\r\n className=\"inline-flex align-middle\"\r\n >\r\n {action.icon && (\r\n <Button\r\n variant=\"icon\"\r\n onClick={() => action.onClick(item)}\r\n >\r\n {\" \"}\r\n {action.icon}\r\n </Button>\r\n )}\r\n {!action.icon && (\r\n <Button\r\n variant=\"transparent\"\r\n onClick={() => action.onClick(item)}\r\n >\r\n {\" \"}\r\n {action.label}\r\n </Button>\r\n )}\r\n </div>\r\n ))}\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n {currentItems.length == 0 && (\r\n <tr key=\"tr-nodata \">\r\n <td\r\n key=\"td-nodata\"\r\n className=\"px-5 py-3 border-b border-gray-200 bg-white text-sm items-center justify-center align-middle\"\r\n colSpan={columns.length}\r\n >\r\n Žádná data\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n <div className=\"w-full p-5 grid grid-cols-3\">\r\n <div className=\"text-left items-start justify-start\">\r\n {currentPage !== 0 && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={prevPage}\r\n className=\"flex items-center float-left\"\r\n >\r\n <MdArrowBack className=\"mr-1.5\" /> Předchozí\r\n </Button>\r\n )}\r\n </div>\r\n <div className=\" text-center text-xs text-gray-800\">\r\n {paginationDisplay} {/* Updated to use dynamic page numbers */}\r\n </div>\r\n <div className=\"text-right items-end justify-end\">\r\n {indexOfLastItem < filteredItems.length && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={nextPage}\r\n className=\"flex items-center float-right\"\r\n >\r\n Následující <MdArrowForward className=\"ml-2\" size={20} />\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport default DataTable;\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,SAAS,UAA4C;AAAA,EACnD;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AACF,GAAsB;AACpB,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,CAAC;AAChD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,EAAE;AACvD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAgC,CAAE,CAAA;AACtE,QAAA,CAAC,eAAe,gBAAgB,IAAI;AAAA,IACxC,CAAC;AAAA,EAAA;AAGH,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAE1D,QAAM,CAAC,YAAY,aAAa,IAAI,SAG1B,IAAI;AAEd,YAAU,MAAM;AACd,UAAM,mBAA0C,CAAA;AAExC,YAAA,QAAQ,CAAC,WAAW;AAC1B,UAAI,OAAO,cAAc,MAAM,SAAS,GAAG;AACzC,cAAM,gBAAgB,IAAI;AAAA,UACxB,MAAM,IAAI,CAAC,SAAS,KAAK,OAAO,GAAc,CAAC;AAAA,QAAA;AAGjD,YAAI,gBAAgB,MAAM,KAAK,aAAa,EAAE,IAAI,CAAC,WAAY;;AAAA;AAAA,YAC7D,OAAO;AAAA,YACP,OACE,OAAO,SAAS,UACZ,SAAI,KAAK,MAAgB,MAAzB,mBAA4B,uBAC5B;AAAA,UACN;AAAA,SAAA;AAGE,YAAA,OAAO,SAAS,QAAQ;AAE1B,0BAAgB,cAAc,KAAK,CAAC,GAAG,MAAM;AAC3C,kBAAM,aAAa,IAAI,KAAK,EAAE,KAAe,EAAE;AAC/C,kBAAM,aAAa,IAAI,KAAK,EAAE,KAAe,EAAE;AAC/C,mBAAO,aAAa;AAAA,UAAA,CACrB;AAAA,QAAA,OACI;AAEL,0BAAgB,cAAc;AAAA,YAAK,CAAC,GAAG;;AACpC,6BAAE,UAAF,mBAAoB,cAAc,EAAE;AAAA;AAAA,UAAe;AAAA,QAExD;AAGiB,yBAAA,OAAO,GAAa,IAAI;AAAA,UACvC,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA,UACvB,GAAG;AAAA,QAAA;AAAA,MAEP;AAAA,IAAA,CACD;AAED,qBAAiB,gBAAgB;AAAA,EAAA,GAChC,CAAC,OAAO,OAAO,CAAC;AAEb,QAAA,cAAc,CAAC,QAA6B;AAChD,SAAI,yCAAY,SAAQ,OAAO,WAAW,cAAc,MAAM;AAC9C,oBAAA;AAAA,QACZ;AAAA,QACA,WAAW,WAAW,cAAc,cAAc,eAAe;AAAA,MAAA,CAClE;AAAA,IAAA,OACI;AACL,oBAAc,EAAE,KAAK,WAAW,YAAa,CAAA;AAAA,IAC/C;AAAA,EAAA;AAGI,QAAA,cAAc,CAAC,QAA6B;AAC5C,SAAA,yCAAY,SAAQ,KAAK;AAC3B,aAAO,WAAW,cAAc,cAC9B,oBAAC,iBAAc,UAAS,QAAQ,CAAA,IAC9B,WAAW,cAAc,eAC3B,oBAAC,iBAAgB,EAAA,UAAS,QAAQ,CAAA,IAElC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,UAAS;AAAA,UACT,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAGhB;AAEE,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ;AAIE,QAAA,eAAc,yCAAY,aAC5B,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM;AAClB,UAAA,SAAS,EAAE,WAAW,GAAc;AACpC,UAAA,SAAS,EAAE,WAAW,GAAc;AAGtC,QAAA,kBAAkB,QAAQ,kBAAkB,MAAM;AACpD,aAAO,WAAW,cAAc,cAC5B,OAAO,QAAQ,IAAI,OAAO,QAAA,IAC1B,OAAO,QAAQ,IAAI,OAAO,QAAQ;AAAA,IACxC;AACA,QAAI,OAAO,WAAW,YAAY,OAAO,WAAW,UAAU;AAC5D,aAAO,WAAW,cAAc,cAC5B,SAAS,SACT,SAAS;AAAA,IACf;AACA,WAAO,WAAW,cAAc,cAC5B,OAAO,MAAM,EAAE,cAAc,OAAO,MAAM,CAAC,IAC3C,OAAO,MAAM,EAAE,cAAc,OAAO,MAAM,CAAC;AAAA,EAChD,CAAA,IACD;AAMJ,QAAM,gBAAgB,YAAY,OAAO,CAAC,SAAc;AACtD,UAAM,kBAAkB,iBACpB,QAAQ,KAAK,CAAC,WAAW;AACjB,YAAA,QAAQ,KAAK,OAAO,GAAG;AAC7B,cACG,OAAO,UAAU,YAAY,OAAO,UAAU,aAC/C,MACG,SAAS,EACT,YAAY,EACZ,SAAS,eAAe,YAAa,CAAA;AAAA,IAE3C,CAAA,IACD;AAEJ,UAAM,qBAAqB,QAAQ,MAAM,CAAC,WAAW;AAE7C,YAAA,cAAc,cAAc,OAAO,GAAa;AACtD,UAAI,CAAC;AAAoB,eAAA;AAEnB,YAAA,YAAY,KAAK,OAAO,GAAG;AACjC,WAAK,OAAO,QAAQ,OAAO,eAAe,UAAU;AAC9C,YAAA,OAAO,kBAAkB,MAAM;AACjC,iBAAO,UAAU,YAAA,KAAiB,YAAY,YAAY;AAAA,QAAA,WACjD,OAAO,kBAAkB,MAAM;AACxC,iBAAO,UAAU,YAAA,KAAiB,YAAY,YAAY;AAAA,QAC5D;AACI,YAAA,OAAO,cAAc,QAAQ;AAC/B,iBAAO,UAAU,YAAY,EAAE,SAAS,YAAY,aAAa;AAAA,QAAA,OAC5D;AACL,iBAAO,UAAU,YAAA,KAAiB,YAAY,YAAY;AAAA,QAC5D;AAAA,MAAA,OACK;AACD,YAAA,OAAO,kBAAkB,MAAM;AACjC,iBAAO,aAAa;AAAA,QAAA,WACX,OAAO,kBAAkB,MAAM;AACxC,iBAAO,aAAa;AAAA,QAAA,OACf;AACL,iBAAO,aAAa;AAAA,QACtB;AAAA,MACF;AAAA,IAAA,CACD;AAED,WAAO,mBAAmB;AAAA,EAAA,CAC3B;AAGK,QAAA,mBAAmB,cAAc,KAAK;AAC5C,QAAM,mBAAmB,kBAAkB;AAC3C,QAAM,eAAe,cAAc,MAAM,kBAAkB,eAAe;AAE1E,QAAM,WAAW,MAAM;AACrB,mBAAe,cAAc,CAAC;AAAA,EAAA;AAGhC,QAAM,WAAW,MAAM;AACrB,mBAAe,cAAc,CAAC;AAAA,EAAA;AAE1B,QAAA,sBAAsB,CAC1B,MAGG;;AACe,uBAAA,OAAE,WAAF,mBAAU,KAAK;AACjC,mBAAe,CAAC;AAAA,EAAA;AAGlB,QAAM,aAAa,KAAK;AAAA,IACtB;AAAA,IACA,KAAK,KAAK,cAAc,SAAS,YAAY;AAAA,EAAA;AAI/C,QAAM,oBAAoB,UAAU,cAAc,CAAC,MAAM,UAAU;AAE7D,QAAA,gBAAgB,CAAC,KAAc,UAAkB;AACpC,qBAAA,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,MAAQ,EAAA;AACtD,mBAAe,CAAC;AAAA,EAAA;AAGd,MAAA;AAAW,+BAAQ,SAAQ,CAAA,CAAA;AAC/B,SAEI,oBAAA,UAAA,EAAA,UAAA,qBAAC,OAAI,EAAA,WAAU,2EACX,UAAA;AAAA,KAAA,SAAS,YAAY,gBACpB,qBAAA,OAAA,EAAI,WAAU,uBACb,UAAA;AAAA,MAAC,qBAAA,OAAA,EAAI,WAAU,aACZ,UAAA;AAAA,QAAA,SACE,oBAAA,MAAA,EAAG,WAAU,yCACX,UACH,OAAA;AAAA,QAED,YACC,oBAAC,KAAE,EAAA,WAAU,6BAA6B,UAAS,UAAA;AAAA,MAAA,GAEvD;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAM,kBAAkB,CAAC,cAAc;AAAA,UAE/C,UAAA;AAAA,YAAC,CAAA,sCAAmB,oBAAmB,EAAA;AAAA,YACvC,sCAAmB,uBAAsB,EAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAC5C;AAAA,MACC,eACC,oBAAC,OAAI,EAAA,WAAU,IACb,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,aAAY;AAAA,UACZ,MAAK;AAAA,UACL,eAAe;AAAA,UACf,MAAK;AAAA,UACL,OAAO;AAAA,UAEN,UAAA;AAAA,YAAA;AAAA,YACD,qBAAC,OAAI,EAAA,WAAU,qDACZ,UAAA;AAAA,cAAC,CAAA,sCAAmB,UAAS,EAAA;AAAA,cAC7B,kBACE,oBAAA,SAAA,EAAQ,SAAS,MAAM,kBAAkB,EAAE,GAAG;AAAA,YAAA,GAEnD;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,GAEJ;AAAA,IAAA,GAEJ;AAAA,wBAED,OAAI,EAAA,WAAU,mBACb,UAAC,qBAAA,SAAA,EAAM,WAAU,yBACf,UAAA;AAAA,MAAA,qBAAC,SACE,EAAA,UAAA;AAAA,QAAA,kBACC,QAAQ,UAAU,CAAC,OAAO,GAAG,UAAU,IAAI,MACxC,oBAAA,MAAA,EACE,kBAAQ,IAAI,CAAC,EAAE,KAAK,QAAQ,iBAC3B;AAAA,UAAC;AAAA,UAAA;AAAA,YAGC,WAAW,qFACT,CAAC,SAAS,CAAC,WAAW,eAAe,EACvC;AAAA,YAEC,UACC,cAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,gBACP,MAAM,OAAO,GAAG,IAAI;AAAA,gBACpB,eAAe,CAAC,MACd,cAAc,KAAgB,EAAE,OAAO,KAAK;AAAA,gBAE9C,MAAM;AAAA,gBACN,SAAS,cAAc,OAAO,GAAG,CAAC,KAAK,CAAC;AAAA,gBACxC,OAAO,cAAc,OAAO,GAAG,CAAC;AAAA,gBAChC,WAAS;AAAA,cAAA;AAAA,YACV;AAAA,UAAA;AAAA,UAjBE,OAAO,GAAG,IAAI;AAAA,QAoBtB,CAAA,GACH;AAAA,QAEJ,oBAAC,QACE,UAAQ,QAAA,IAAI,CAAC,EAAE,KAAK,QAAQ,QAAA,MAC3B;AAAA,UAAC;AAAA,UAAA;AAAA,YAGC,WAAW,oIACT,CAAC,SAAS,CAAC,WAAW,eAAe,EACvC;AAAA,YACA,SAAS,MAAM,YAAY,GAAG;AAAA,YAE9B,UAAA,qBAAC,QAAK,EAAA,WAAU,kCACb,UAAA;AAAA,cAAA;AAAA,cAAO;AAAA,cAAE,CAAC,UAAU,YAAY,GAAG,IAAI;AAAA,YAAA,GAC1C;AAAA,UAAA;AAAA,UATK,OAAO,GAAG;AAAA,QAWlB,CAAA,GACH;AAAA,MAAA,GACF;AAAA,2BAEC,SACE,EAAA,UAAA;AAAA,QAAa,aAAA,IAAI,CAAC,MAAM,aACvB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAW,GACT,KAAK,iBAAiB,mBAAmB,GAC3C;AAAA,YAEC,UAAA,QAAQ,IAAI,CAAC,EAAE,QAAQ,SAAS,WAAW,aAC1C;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAW;AAAA,qBAEZ,YAAY,IACR,+BACA,gBACN,IAAI,OAAO;AAAA,gBAEP,UAAA;AAAA,kBAAS,SAAA,OAAO,IAAI,IAAI;AAAA,kBACxB,WACC,QACG,OAAO,CAAC,OAAO;AACd,wBAAI,GAAG,SAAS;AACP,6BAAA,GAAG,QAAQ,IAAI;AAAA,oBACjB;AAAA,kBACR,CAAA,EACA,IAAI,CAAC,QAAQ,gBACZ;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBAEC,WAAU;AAAA,sBAET,UAAA;AAAA,wBAAA,OAAO,QACN;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,SAAQ;AAAA,4BACR,SAAS,MAAM,OAAO,QAAQ,IAAI;AAAA,4BAEjC,UAAA;AAAA,8BAAA;AAAA,8BACA,OAAO;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACV;AAAA,wBAED,CAAC,OAAO,QACP;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,SAAQ;AAAA,4BACR,SAAS,MAAM,OAAO,QAAQ,IAAI;AAAA,4BAEjC,UAAA;AAAA,8BAAA;AAAA,8BACA,OAAO;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACV;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAnBG,GAAG,QAAQ,IAAI,QAAQ,IAAI,WAAW;AAAA,kBAAA,CAsB9C;AAAA,gBAAA;AAAA,cAAA;AAAA,cAxCA,GAAG,QAAQ,IAAI,QAAQ;AAAA,YAAA,CA0C/B;AAAA,UAAA;AAAA,UAjDI;AAAA,QAAA,CAmDR;AAAA,QACA,aAAa,UAAU,KACtB,oBAAC,MACC,EAAA,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YACV,SAAS,QAAQ;AAAA,YAClB,UAAA;AAAA,UAAA;AAAA,UAHK;AAAA,aAFA,cAQR;AAAA,MAAA,GAEJ;AAAA,IAAA,EAAA,CACF,EACF,CAAA;AAAA,IACA,qBAAC,OAAI,EAAA,WAAU,+BACb,UAAA;AAAA,MAAA,oBAAC,OAAI,EAAA,WAAU,uCACZ,UAAA,gBAAgB,KACf;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS;AAAA,UACT,WAAU;AAAA,UAEV,UAAA;AAAA,YAAC,oBAAA,aAAA,EAAY,WAAU,SAAS,CAAA;AAAA,YAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,GAGxC;AAAA,MACA,qBAAC,OAAI,EAAA,WAAU,sCACZ,UAAA;AAAA,QAAA;AAAA,QAAkB;AAAA,MAAA,GACrB;AAAA,0BACC,OAAI,EAAA,WAAU,oCACZ,UAAA,kBAAkB,cAAc,UAC/B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS;AAAA,UACT,WAAU;AAAA,UACX,UAAA;AAAA,YAAA;AAAA,YACc,oBAAA,gBAAA,EAAe,WAAU,QAAO,MAAM,IAAI;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,GAG7D;AAAA,IAAA,GACF;AAAA,EAAA,EACF,CAAA,EACF,CAAA;AAEJ;"}
1
+ {"version":3,"file":"DataTable.js","sources":["../../../lib/components/datatable/DataTable.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\r\n\r\nimport { Button, FormField, Spinner } from \"../../main\";\r\nimport {\r\n MdArrowBack,\r\n MdArrowDownward,\r\n MdArrowForward,\r\n MdArrowUpward,\r\n MdClose,\r\n MdOutlineFilterAlt,\r\n MdOutlineFilterAltOff,\r\n MdSearch,\r\n} from \"react-icons/md\";\r\n\r\nexport interface DataTableColumn<T> {\r\n key: keyof T | \"actions\";\r\n header: string;\r\n render?: (item: T) => React.ReactNode;\r\n actions?: DataTableAction<T>[];\r\n filterType?: string;\r\n classes?: string;\r\n type?: \"string\" | \"number\" | \"date\";\r\n filterOperator?: \">=\" | \"<=\" | \"==\";\r\n}\r\nexport interface DataTableAction<T> {\r\n label: string;\r\n onClick: (item: T) => void;\r\n visible?: (item: T) => boolean;\r\n icon?: React.ReactNode;\r\n}\r\ninterface DataTableProps<T> {\r\n items: T[];\r\n columns: DataTableColumn<T | \"actions\">[];\r\n itemsPerPage?: number;\r\n title?: string;\r\n subtitle?: string;\r\n allowSearch?: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\ntype DataTableInternalItems = {\r\n _isHighlighted?: boolean;\r\n};\r\n\r\nfunction DataTable<T extends DataTableInternalItems>({\r\n items,\r\n columns,\r\n itemsPerPage = 10,\r\n title,\r\n subtitle,\r\n allowSearch = true,\r\n isLoading,\r\n}: DataTableProps<T>) {\r\n const [currentPage, setCurrentPage] = useState(0);\r\n const [fulltextSearch, setFulltextSearch] = useState(\"\");\r\n const [filterOptions, setFilterOptions] = useState<Record<string, any[]>>({});\r\n const [columnFilters, setColumnFilters] = useState<Record<string, string>>(\r\n {}\r\n );\r\n\r\n const [showColFilters, setShowColFilters] = useState(false);\r\n\r\n const [sortConfig, setSortConfig] = useState<{\r\n key: keyof T | \"actions\";\r\n direction: \"ascending\" | \"descending\" | null;\r\n } | null>(null);\r\n\r\n useEffect(() => {\r\n const newFilterOptions: Record<string, any[]> = {};\r\n\r\n columns.forEach((column) => {\r\n if (column.filterType && items.length > 0) {\r\n const uniqueOptions = new Set(\r\n items.map((item) => item[column.key as keyof T])\r\n );\r\n // Convert Set to an array of { value, label } objects\r\n let sortedOptions = Array.from(uniqueOptions).map((option) => ({\r\n value: option,\r\n label:\r\n column.type === \"date\"\r\n ? new Date(option as string)?.toLocaleDateString()\r\n : option,\r\n }));\r\n\r\n // Sort the options array by label in ascending alphabetical order\r\n if (column.type === \"date\") {\r\n // Convert labels to timestamps and sort accordingly\r\n sortedOptions = sortedOptions.sort((a, b) => {\r\n const timestampA = new Date(a.value as string).getTime();\r\n const timestampB = new Date(b.value as string).getTime();\r\n return timestampA - timestampB;\r\n });\r\n } else {\r\n // Sort alphabetically by label for non-date columns\r\n sortedOptions = sortedOptions.sort((a, b) =>\r\n (a.label as string)?.localeCompare(b.label as string)\r\n );\r\n }\r\n\r\n // Add a default option if needed\r\n newFilterOptions[column.key as string] = [\r\n { value: \"\", label: \"\" },\r\n ...sortedOptions,\r\n ];\r\n }\r\n });\r\n\r\n setFilterOptions(newFilterOptions);\r\n }, [items, columns]);\r\n\r\n const requestSort = (key: keyof T | \"actions\") => {\r\n if (sortConfig?.key === key && sortConfig.direction !== null) {\r\n setSortConfig({\r\n key,\r\n direction: sortConfig.direction === \"ascending\" ? \"descending\" : null,\r\n });\r\n } else {\r\n setSortConfig({ key, direction: \"ascending\" });\r\n }\r\n };\r\n\r\n const getSortIcon = (key: keyof T | \"actions\") => {\r\n if (sortConfig?.key === key) {\r\n return sortConfig.direction === \"ascending\" ? (\r\n <MdArrowUpward fontSize=\"small\" />\r\n ) : sortConfig.direction === \"descending\" ? (\r\n <MdArrowDownward fontSize=\"small\" />\r\n ) : (\r\n <MdArrowUpward\r\n fontSize=\"small\"\r\n className=\"text-gray-300 invisible group-hover:visible \"\r\n />\r\n );\r\n }\r\n return (\r\n <MdArrowUpward\r\n fontSize=\"small\"\r\n className=\"text-gray-300 invisible group-hover:visible \"\r\n />\r\n );\r\n };\r\n\r\n const sortedItems = sortConfig?.direction\r\n ? [...items].sort((a, b) => {\r\n const aValue = a[sortConfig.key as keyof T];\r\n const bValue = b[sortConfig.key as keyof T];\r\n\r\n // Check if values are Date objects\r\n if (aValue instanceof Date && bValue instanceof Date) {\r\n return sortConfig.direction === \"ascending\"\r\n ? aValue.getTime() - bValue.getTime()\r\n : bValue.getTime() - aValue.getTime();\r\n }\r\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\r\n return sortConfig.direction === \"ascending\"\r\n ? aValue - bValue\r\n : bValue - aValue;\r\n }\r\n return sortConfig.direction === \"ascending\"\r\n ? String(aValue).localeCompare(String(bValue))\r\n : String(bValue).localeCompare(String(aValue));\r\n })\r\n : items;\r\n\r\n // const searchableKeys = new Set(\r\n // columns.filter((col) => !col.actions).map((col) => col.key)\r\n // );\r\n\r\n const filteredItems = sortedItems.filter((item: any) => {\r\n const textSearchMatch = fulltextSearch\r\n ? columns.some((column) => {\r\n const value = item[column.key];\r\n return (\r\n (typeof value === \"string\" || typeof value === \"number\") &&\r\n value\r\n .toString()\r\n .toLowerCase()\r\n .includes(fulltextSearch.toLowerCase())\r\n );\r\n })\r\n : true;\r\n\r\n const columnFiltersMatch = columns.every((column) => {\r\n // debugger;\r\n const filterValue = columnFilters[column.key as string];\r\n if (!filterValue) return true; // Ignore filter if 'None' is selected\r\n\r\n const itemValue = item[column.key];\r\n if ((column.type || typeof itemValue) === \"string\") {\r\n if (column.filterOperator == \">=\") {\r\n return itemValue.toLowerCase() >= filterValue.toLowerCase();\r\n } else if (column.filterOperator == \"<=\") {\r\n return itemValue.toLowerCase() <= filterValue.toLowerCase();\r\n }\r\n if (column.filterType == \"text\") {\r\n return itemValue.toLowerCase().includes(filterValue.toLowerCase());\r\n } else {\r\n return itemValue.toLowerCase() == filterValue.toLowerCase();\r\n }\r\n } else {\r\n if (column.filterOperator == \">=\") {\r\n return itemValue >= filterValue;\r\n } else if (column.filterOperator == \"<=\") {\r\n return itemValue <= filterValue;\r\n } else {\r\n return itemValue == filterValue;\r\n }\r\n }\r\n });\r\n\r\n return textSearchMatch && columnFiltersMatch;\r\n });\r\n\r\n // Pagination logic\r\n const indexOfLastItem = (currentPage + 1) * itemsPerPage;\r\n const indexOfFirstItem = indexOfLastItem - itemsPerPage;\r\n const currentItems = filteredItems.slice(indexOfFirstItem, indexOfLastItem);\r\n\r\n const nextPage = () => {\r\n setCurrentPage(currentPage + 1);\r\n };\r\n\r\n const prevPage = () => {\r\n setCurrentPage(currentPage - 1);\r\n };\r\n const handleSearchChanged = (\r\n e: React.ChangeEvent<\r\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\r\n >\r\n ) => {\r\n setFulltextSearch(e.target?.value);\r\n setCurrentPage(0);\r\n };\r\n\r\n const totalPages = Math.max(\r\n 1,\r\n Math.ceil(filteredItems.length / itemsPerPage)\r\n );\r\n\r\n // Pagination display logic\r\n const paginationDisplay = `Strana ${currentPage + 1} z ${totalPages}`;\r\n\r\n const filterHandler = (key: keyof T, value: string) => {\r\n setColumnFilters((prev) => ({ ...prev, [key]: value }));\r\n setCurrentPage(0);\r\n };\r\n\r\n if (isLoading) return <Spinner />;\r\n return (\r\n <>\r\n <div className=\"container shadow-lg border border-gray-200 rounded-xl overflow-hidden \">\r\n {(title || subtitle || allowSearch) && (\r\n <div className=\"p-5 leading-9 flex \">\r\n <div className=\"flex-grow\">\r\n {title && (\r\n <h1 className=\"font-semibold text-xl leading-[42px] \">\r\n {title}\r\n </h1>\r\n )}\r\n {subtitle && (\r\n <p className=\"font-normal text-gray-600\">{subtitle}</p>\r\n )}\r\n </div>\r\n <div\r\n className=\"flex items-center text-xl h-full p-3 mr-5 cursor-pointer text-gray-500 \"\r\n onClick={() => setShowColFilters(!showColFilters)}\r\n >\r\n {!showColFilters && <MdOutlineFilterAlt />}\r\n {showColFilters && <MdOutlineFilterAltOff />}\r\n </div>\r\n {allowSearch && (\r\n <div className=\"\">\r\n <FormField\r\n placeholder=\"Vyhledávání\"\r\n name=\"search\"\r\n onInputChange={handleSearchChanged}\r\n type=\"text\"\r\n value={fulltextSearch}\r\n >\r\n {\" \"}\r\n <div className=\" text-gray-500 leading-5 flex items-center h-full\">\r\n {!fulltextSearch && <MdSearch></MdSearch>}\r\n {fulltextSearch && (\r\n <MdClose onClick={() => setFulltextSearch(\"\")}></MdClose>\r\n )}\r\n </div>\r\n </FormField>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n <div className=\"overflow-x-auto\">\r\n <table className=\"w-full leading-normal\">\r\n <thead>\r\n {showColFilters &&\r\n columns.findIndex((it) => it.filterType) > -1 && (\r\n <tr>\r\n {columns.map(({ key, header, filterType }) => (\r\n <th\r\n key={String(key) + \"_filter\"}\r\n // className=\"cursor-pointer px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-sm font-medium text-gray-600 uppercase tracking-wider\"\r\n className={` font-medium cursor-pointer !leading-9 text-xs text-left pl-5 pb-5 text-gray-600 ${\r\n !title && !subtitle ? \"border-t-0\" : \"\"\r\n }`}\r\n >\r\n {filterType && (\r\n <FormField\r\n label={header}\r\n name={String(key) + \"_filter\"}\r\n onInputChange={(e) =>\r\n filterHandler(key as keyof T, e.target.value)\r\n }\r\n type={filterType}\r\n options={filterOptions[String(key)] || []}\r\n value={columnFilters[String(key)]}\r\n clearable\r\n ></FormField>\r\n )}\r\n </th>\r\n ))}\r\n </tr>\r\n )}\r\n <tr>\r\n {columns.map(({ key, header, actions }) => (\r\n <th\r\n key={String(key)}\r\n // className=\"cursor-pointer px-5 py-3 border-b-2 border-gray-200 bg-gray-100 text-left text-sm font-medium text-gray-600 uppercase tracking-wider\"\r\n className={`group font-medium cursor-pointer !leading-9 text-xs text-left px-5 text-gray-600 bg bg-gray-50 border-t border-b border-gray-200 ${\r\n !title && !subtitle ? \"border-t-0\" : \"\"\r\n }`}\r\n onClick={() => requestSort(key)}\r\n >\r\n <span className=\"inline-flex items-center gap-2\">\r\n {header} {!actions ? getSortIcon(key) : \"\"}\r\n </span>\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {currentItems.map((item, rowIndex) => (\r\n <tr\r\n key={rowIndex}\r\n className={`${\r\n item._isHighlighted ? \" bg-gray-200 \" : \" \"\r\n } hover:bg-gray-50 border-gray-200 border-b text-sm `}\r\n >\r\n {columns.map(({ render, actions, classes }, colIndex) => (\r\n <td\r\n key={`${rowIndex}-${colIndex}`}\r\n className={`px-5 py-2\r\n ${\r\n colIndex == 0\r\n ? \" font-medium text-muted-foreground\"\r\n : \" text-gray-700\"\r\n } ${classes}`}\r\n >\r\n {render ? render(item) : \"\"}\r\n {actions &&\r\n actions\r\n .filter((it) => {\r\n if (it.visible) {\r\n return it.visible(item);\r\n } else true;\r\n })\r\n .map((action, actionIndex) => (\r\n <div\r\n key={`${rowIndex}-${colIndex}-${actionIndex}`}\r\n className=\"inline-flex align-middle\"\r\n >\r\n {action.icon && (\r\n <Button\r\n variant=\"icon\"\r\n onClick={() => action.onClick(item)}\r\n >\r\n {\" \"}\r\n {action.icon}\r\n </Button>\r\n )}\r\n {!action.icon && (\r\n <Button\r\n variant=\"transparent\"\r\n onClick={() => action.onClick(item)}\r\n >\r\n {\" \"}\r\n {action.label}\r\n </Button>\r\n )}\r\n </div>\r\n ))}\r\n </td>\r\n ))}\r\n </tr>\r\n ))}\r\n {currentItems.length == 0 && (\r\n <tr key=\"tr-nodata \">\r\n <td\r\n key=\"td-nodata\"\r\n className=\"px-5 py-3 border-b border-gray-200 bg-white text-sm items-center justify-center align-middle\"\r\n colSpan={columns.length}\r\n >\r\n Žádná data\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n <div className=\"w-full p-5 grid grid-cols-3\">\r\n <div className=\"text-left items-start justify-start\">\r\n {currentPage !== 0 && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={prevPage}\r\n className=\"flex items-center float-left\"\r\n >\r\n <MdArrowBack className=\"mr-1.5\" /> Předchozí\r\n </Button>\r\n )}\r\n </div>\r\n <div className=\" text-center text-xs text-gray-800\">\r\n {paginationDisplay} {/* Updated to use dynamic page numbers */}\r\n </div>\r\n <div className=\"text-right items-end justify-end\">\r\n {indexOfLastItem < filteredItems.length && (\r\n <Button\r\n variant=\"secondary\"\r\n onClick={nextPage}\r\n className=\"flex items-center float-right\"\r\n >\r\n Následující <MdArrowForward className=\"ml-2\" size={20} />\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport default DataTable;\r\n"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ import "../../jspdf.plugin.autotable-7hp3hM-a.js";
13
13
  import "../../contexts/FederationContext.js";
14
14
  import { useFederationContext } from "../../contexts/useFederationContext.js";
15
15
  import { handleErrors } from "../../utils/handleErrors.js";
16
- import "../../Dialog-BmQoVu5C.js";
16
+ import "../../Dialog-CCrUyF91.js";
17
17
  import "../ui/ScrollArea.js";
18
18
  import "../ui/input.js";
19
19
  import "../ui/form.js";
@@ -25,6 +25,7 @@ import "../ui/tooltip.js";
25
25
  import "../ui/separator.js";
26
26
  import "../ui/textarea.js";
27
27
  import "../ui/checkbox.js";
28
+ import { MultiSelect } from "../ui/multi-select.js";
28
29
  import "../ui/button.js";
29
30
  import "../../Calendar-DWT4e7Th.js";
30
31
  import "../ui/DateTimePicker.js";
@@ -21792,16 +21793,22 @@ function DataTableServer({
21792
21793
  setIsLoading(true);
21793
21794
  const filteredMergedFilters = Object.entries(mergedFilters).reduce(
21794
21795
  (acc, [key, value]) => {
21795
- if (value !== null && value !== "") {
21796
- acc[key] = value;
21796
+ if (value === null || value === "") {
21797
+ return acc;
21797
21798
  }
21799
+ if (Array.isArray(value)) {
21800
+ if (value.length > 0) {
21801
+ acc[key] = value.join(",");
21802
+ }
21803
+ return acc;
21804
+ }
21805
+ acc[key] = value;
21798
21806
  return acc;
21799
21807
  },
21800
21808
  {}
21801
21809
  );
21802
21810
  federationContext.apiClient.get(url, {
21803
21811
  signal: currentAbortController.signal,
21804
- // Pass the AbortController signal to the request
21805
21812
  params: {
21806
21813
  ...filteredMergedFilters,
21807
21814
  pageSize: itemsPerPageLocal,
@@ -21891,13 +21898,15 @@ function DataTableServer({
21891
21898
  const updateFilterOptions = async () => {
21892
21899
  const newFilterOptions = {};
21893
21900
  for (const column of columns) {
21894
- if (column.filterType === "select" && (column.filterSource || column.filterOptions) && column.filterValueKey && column.filterLabelKey && column.filterParam) {
21901
+ if ((column.filterType === "select" || column.filterType === "multi-select") && (column.filterSource || column.filterOptions) && column.filterValueKey && column.filterLabelKey && column.filterParam) {
21895
21902
  const options = await fetchFilterOptions(column);
21896
- if (options) {
21903
+ if (options && column.filterType === "select") {
21897
21904
  newFilterOptions[column.filterParam] = [
21898
21905
  { value: "", label: "" },
21899
21906
  ...options
21900
21907
  ];
21908
+ } else if (options && column.filterType === "multi-select") {
21909
+ newFilterOptions[column.filterParam] = options;
21901
21910
  }
21902
21911
  }
21903
21912
  }
@@ -22221,7 +22230,7 @@ function DataTableServer({
22221
22230
  options: filterOptions[String(filterParam)] || [],
22222
22231
  value: (mergedFilters == null ? void 0 : mergedFilters[String(filterParam)]) ?? "",
22223
22232
  clearable: true,
22224
- className: " px-0",
22233
+ className: "px-0",
22225
22234
  placeholder: "Zadejte filtr",
22226
22235
  rounded: true,
22227
22236
  disabled: Object.keys(
@@ -22229,6 +22238,23 @@ function DataTableServer({
22229
22238
  ).includes(String(filterParam))
22230
22239
  },
22231
22240
  JSON.stringify(mergedFilters)
22241
+ ) : filterType === "multi-select" ? /* @__PURE__ */ jsx(
22242
+ MultiSelect,
22243
+ {
22244
+ options: filterOptions[String(filterParam)] || [],
22245
+ onChange: (values) => filterHandler(
22246
+ filterParam,
22247
+ values
22248
+ ),
22249
+ value: (mergedFilters == null ? void 0 : mergedFilters[String(filterParam)]) || [],
22250
+ placeholder: "Zadejte filtr",
22251
+ className: "px-0",
22252
+ disabled: Object.keys(
22253
+ filters || {}
22254
+ ).includes(String(filterParam)),
22255
+ variant: "secondary"
22256
+ },
22257
+ JSON.stringify(mergedFilters)
22232
22258
  ) : filterType === "dateRange" ? /* @__PURE__ */ jsx(
22233
22259
  DateRangeField,
22234
22260
  {
@@ -22321,7 +22347,7 @@ function DataTableServer({
22321
22347
  "td",
22322
22348
  {
22323
22349
  onClick: rowAction ? () => rowAction(item) : void 0,
22324
- className: `px-3 py-2 ${rowAction ? "cursor-pointer" : ""} ${colIndex === 0 ? "font-medium text-gray-900" : "text-gray-700"} ${classes || ""}`,
22350
+ className: `px-3 py-2 ${rowAction ? "cursor-pointer" : ""} ${colIndex === 0 ? "font-medium text-muted-foreground" : "text-gray-700"} ${classes || ""}`,
22325
22351
  children: [
22326
22352
  render ? render(item) : "",
22327
22353
  actions && actions.filter((it) => {
@@ -22334,7 +22360,7 @@ function DataTableServer({
22334
22360
  }).map((action, actionIndex) => /* @__PURE__ */ jsxs(
22335
22361
  "div",
22336
22362
  {
22337
- className: "flex inline-flex align-middle",
22363
+ className: "inline-flex align-middle",
22338
22364
  children: [
22339
22365
  action.icon && /* @__PURE__ */ jsx(
22340
22366
  Button,