@akshar-technosoft/ui 1.0.22 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/core/error.cjs.map +1 -1
- package/dist/components/core/error.js.map +1 -1
- package/dist/components/core/event-success.cjs.map +1 -1
- package/dist/components/core/event-success.js.map +1 -1
- package/dist/components/core/index.cjs.map +1 -1
- package/dist/components/core/index.js.map +1 -1
- package/dist/components/core/notfound.cjs.map +1 -1
- package/dist/components/core/notfound.js.map +1 -1
- package/dist/components/core/unauthorized.cjs.map +1 -1
- package/dist/components/core/unauthorized.js.map +1 -1
- package/dist/components/data/data-table/data-table-action-bar.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-action-bar.js.map +1 -1
- package/dist/components/data/data-table/data-table-column-header.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-column-header.js.map +1 -1
- package/dist/components/data/data-table/data-table-faceted-filter.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-faceted-filter.js.map +1 -1
- package/dist/components/data/data-table/data-table-pagination.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-pagination.js.map +1 -1
- package/dist/components/data/data-table/data-table-toolbar.cjs +1 -1
- package/dist/components/data/data-table/data-table-toolbar.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-toolbar.d.cts +1 -4
- package/dist/components/data/data-table/data-table-toolbar.d.ts +1 -4
- package/dist/components/data/data-table/data-table-toolbar.js +1 -1
- package/dist/components/data/data-table/data-table-toolbar.js.map +1 -1
- package/dist/components/data/data-table/data-table-types.cjs +1 -1
- package/dist/components/data/data-table/data-table-types.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-types.d.cts +0 -3
- package/dist/components/data/data-table/data-table-types.d.ts +0 -3
- package/dist/components/data/data-table/data-table-view-options.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-view-options.js.map +1 -1
- package/dist/components/data/data-table/data-table.cjs +1 -1
- package/dist/components/data/data-table/data-table.cjs.map +1 -1
- package/dist/components/data/data-table/data-table.js +1 -1
- package/dist/components/data/data-table/data-table.js.map +1 -1
- package/dist/components/data/data-table/index.cjs +1 -1
- package/dist/components/data/data-table/index.cjs.map +1 -1
- package/dist/components/data/data-table/index.js +1 -1
- package/dist/components/data/data-table/index.js.map +1 -1
- package/dist/components/data/data-template/data-template-action-bar.cjs.map +1 -1
- package/dist/components/data/data-template/data-template-action-bar.js.map +1 -1
- package/dist/components/data/data-template/data-template-pagination.cjs.map +1 -1
- package/dist/components/data/data-template/data-template-pagination.js.map +1 -1
- package/dist/components/data/data-template/data-template-toolbar.cjs.map +1 -1
- package/dist/components/data/data-template/data-template-toolbar.js.map +1 -1
- package/dist/components/data/data-template/data-template.cjs.map +1 -1
- package/dist/components/data/data-template/data-template.js.map +1 -1
- package/dist/components/data/data-template/index.cjs.map +1 -1
- package/dist/components/data/data-template/index.js.map +1 -1
- package/dist/components/general.cjs.map +1 -1
- package/dist/components/general.js.map +1 -1
- package/dist/components/helper/date-filter.cjs.map +1 -1
- package/dist/components/helper/date-filter.js.map +1 -1
- package/dist/components/layouts/app-content.cjs +1 -1
- package/dist/components/layouts/app-content.cjs.map +1 -1
- package/dist/components/layouts/app-content.js +1 -1
- package/dist/components/layouts/app-content.js.map +1 -1
- package/dist/components/layouts/app-header.cjs.map +1 -1
- package/dist/components/layouts/app-header.js.map +1 -1
- package/dist/components/layouts/factories.cjs +1 -1
- package/dist/components/layouts/factories.cjs.map +1 -1
- package/dist/components/layouts/factories.js +1 -1
- package/dist/components/layouts/factories.js.map +1 -1
- package/dist/components/layouts/index.cjs +1 -1
- package/dist/components/layouts/index.cjs.map +1 -1
- package/dist/components/layouts/index.js +1 -1
- package/dist/components/layouts/index.js.map +1 -1
- package/dist/components/ui/badge.cjs.map +1 -1
- package/dist/components/ui/badge.js.map +1 -1
- package/dist/components/ui/button.cjs.map +1 -1
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/calendar.cjs.map +1 -1
- package/dist/components/ui/calendar.js.map +1 -1
- package/dist/components/ui/card.cjs.map +1 -1
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/checkbox.cjs.map +1 -1
- package/dist/components/ui/checkbox.js.map +1 -1
- package/dist/components/ui/command.cjs.map +1 -1
- package/dist/components/ui/command.js.map +1 -1
- package/dist/components/ui/dialog.cjs.map +1 -1
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/dropdown-menu.cjs.map +1 -1
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/input.cjs.map +1 -1
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/popover.cjs.map +1 -1
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/select.cjs.map +1 -1
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/separator.cjs.map +1 -1
- package/dist/components/ui/separator.js.map +1 -1
- package/dist/components/ui/sheet.cjs.map +1 -1
- package/dist/components/ui/sheet.js.map +1 -1
- package/dist/components/ui/table.cjs.map +1 -1
- package/dist/components/ui/table.js.map +1 -1
- package/dist/components/ui/toggle.cjs.map +1 -1
- package/dist/components/ui/toggle.js.map +1 -1
- package/dist/components/ui/tooltip.cjs.map +1 -1
- package/dist/components/ui/tooltip.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/data/data-template/data-template-action-bar.tsx","../../../../src/components/ui/button.tsx","../../../../src/lib/utils.ts","../../../../src/components/ui/separator.tsx","../../../../src/components/ui/tooltip.tsx"],"sourcesContent":["import { Button } from \"../../ui/button.jsx\"\r\nimport { Separator } from \"../../ui/separator.jsx\"\r\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../../ui/tooltip.jsx\"\r\nimport { cn } from \"../../../lib/utils.js\"\r\nimport { Loader, X } from \"lucide-react\"\r\nimport { AnimatePresence, motion } from \"framer-motion\"\r\nimport * as React from \"react\"\r\nimport * as ReactDOM from \"react-dom\"\r\nimport type {\r\n DataTemplateController,\r\n DataTemplateActionBarProps,\r\n DataTemplateActionBarActionProps,\r\n} from \"./data-template-types.js\"\r\n\r\nfunction DataTemplateActionBar<T>({\r\n controller,\r\n visible: visibleProp,\r\n container: containerProp,\r\n children,\r\n className,\r\n ...props\r\n}: DataTemplateActionBarProps<T> & React.ComponentProps<typeof motion.div>) {\r\n const [mounted, setMounted] = React.useState(false)\r\n\r\n React.useLayoutEffect(() => {\r\n setMounted(true)\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n function onKeyDown(event: KeyboardEvent) {\r\n if (event.key === \"Escape\" && controller) {\r\n controller.clearSelection()\r\n }\r\n }\r\n\r\n window.addEventListener(\"keydown\", onKeyDown)\r\n return () => window.removeEventListener(\"keydown\", onKeyDown)\r\n }, [controller])\r\n\r\n const container = containerProp ?? (mounted ? globalThis.document?.body : null)\r\n\r\n if (!container || !controller) return null\r\n\r\n const selectedItems = controller.getSelectedItems()\r\n const visible = visibleProp ?? selectedItems.length > 0\r\n\r\n return ReactDOM.createPortal(\r\n <AnimatePresence>\r\n {visible && (\r\n <motion.div\r\n role=\"toolbar\"\r\n aria-orientation=\"horizontal\"\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: 20 }}\r\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\r\n className={cn(\r\n \"fixed inset-x-0 bottom-6 z-50 mx-auto flex w-fit flex-wrap items-center justify-center gap-2 rounded-xl border bg-primary/10 backdrop-blur-sm p-3 text-foreground ring-8 ring-primary/5\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <TooltipProvider>{children}</TooltipProvider>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>,\r\n container,\r\n )\r\n}\r\n\r\nfunction DataTemplateActionBarAction({\r\n size = \"sm\",\r\n variant = \"secondary\",\r\n tooltip,\r\n isPending,\r\n disabled,\r\n className,\r\n children,\r\n onClick,\r\n ...props\r\n}: DataTemplateActionBarActionProps) {\r\n const trigger = (\r\n <Button\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n \"gap-1.5 rounded-lg border border-secondary bg-secondary/50 hover:bg-secondary/70 transition-all duration-200\",\r\n size === \"icon\" ? \"size-8\" : \"h-8 px-3\",\r\n className,\r\n )}\r\n disabled={disabled || isPending}\r\n onClick={onClick}\r\n {...props}\r\n >\r\n {isPending ? <Loader className=\"animate-spin\" /> : children}\r\n </Button>\r\n )\r\n\r\n if (!tooltip) return trigger\r\n\r\n return (\r\n <Tooltip>\r\n <TooltipTrigger asChild>{trigger}</TooltipTrigger>\r\n <TooltipContent\r\n sideOffset={8}\r\n className=\"rounded-lg border font-semibold text-foreground bg-secondary [&>span]:hidden\"\r\n >\r\n <p>{tooltip}</p>\r\n </TooltipContent>\r\n </Tooltip>\r\n )\r\n}\r\n\r\ninterface DataTemplateActionBarSelectionProps<T> {\r\n controller: DataTemplateController<T>\r\n}\r\n\r\nfunction DataTemplateActionBarSelection<T>({ controller }: DataTemplateActionBarSelectionProps<T>) {\r\n const onClearSelection = React.useCallback(() => {\r\n if (controller) {\r\n controller.clearSelection()\r\n }\r\n }, [controller])\r\n\r\n if (!controller) return null\r\n\r\n const selectedItems = controller.getSelectedItems()\r\n\r\n return (\r\n <div className=\"flex h-8 items-center rounded-lg border bg-muted/50 pr-1 pl-3\">\r\n <span className=\"whitespace-nowrap text-sm font-medium\">{selectedItems.length} selected</span>\r\n <Separator orientation=\"vertical\" className=\"mr-2 ml-3 data-[orientation=vertical]:h-4\" />\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <Button variant=\"ghost\" size=\"icon\" className=\"size-6 rounded-md\" onClick={onClearSelection}>\r\n <X className=\"size-3.5\" />\r\n </Button>\r\n </TooltipTrigger>\r\n <TooltipContent\r\n sideOffset={10}\r\n className=\"flex items-center gap-2 rounded-lg border px-3 py-2 font-semibold text-foreground bg-secondary [&>span]:hidden\"\r\n >\r\n <p>Clear selection</p>\r\n <kbd className=\"select-none rounded border bg-primary/50 px-2 py-1 font-mono font-normal text-[0.7rem] text-foreground shadow-sm\">\r\n <abbr title=\"Escape\" className=\"no-underline\">\r\n Esc\r\n </abbr>\r\n </kbd>\r\n </TooltipContent>\r\n </Tooltip>\r\n </div>\r\n )\r\n}\r\n\r\nexport { DataTemplateActionBar, DataTemplateActionBarAction, DataTemplateActionBarSelection }\r\n","import * as React from \"react\"\nimport { Slot as SlotPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator-root\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n"],"mappings":"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","names":["data_template_action_bar_exports","__export","DataTemplateActionBar","DataTemplateActionBarAction","DataTemplateActionBarSelection","__toCommonJS","import_radix_ui","import_class_variance_authority","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","buttonVariants","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","import_radix_ui","import_jsx_runtime","Separator","className","orientation","decorative","props","SeparatorPrimitive","cn","import_radix_ui","import_jsx_runtime","TooltipProvider","delayDuration","props","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","className","sideOffset","children","cn","import_lucide_react","import_framer_motion","React","ReactDOM","import_jsx_runtime","DataTemplateActionBar","controller","visibleProp","containerProp","children","className","props","mounted","setMounted","onKeyDown","event","container","selectedItems","visible","cn","TooltipProvider","DataTemplateActionBarAction","size","variant","tooltip","isPending","disabled","onClick","trigger","Button","Tooltip","TooltipTrigger","TooltipContent","DataTemplateActionBarSelection","onClearSelection","Separator"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/data/data-template/data-template-action-bar.tsx","../../../../src/components/ui/button.tsx","../../../../src/lib/utils.ts","../../../../src/components/ui/separator.tsx","../../../../src/components/ui/tooltip.tsx"],"sourcesContent":["import { Button } from \"../../ui/button.jsx\"\r\nimport { Separator } from \"../../ui/separator.jsx\"\r\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../../ui/tooltip.jsx\"\r\nimport { cn } from \"../../../lib/utils.js\"\r\nimport { Loader, X } from \"lucide-react\"\r\nimport { AnimatePresence, motion } from \"framer-motion\"\r\nimport * as React from \"react\"\r\nimport * as ReactDOM from \"react-dom\"\r\nimport type {\r\n DataTemplateController,\r\n DataTemplateActionBarProps,\r\n DataTemplateActionBarActionProps,\r\n} from \"./data-template-types.js\"\r\n\r\nfunction DataTemplateActionBar<T>({\r\n controller,\r\n visible: visibleProp,\r\n container: containerProp,\r\n children,\r\n className,\r\n ...props\r\n}: DataTemplateActionBarProps<T> & React.ComponentProps<typeof motion.div>) {\r\n const [mounted, setMounted] = React.useState(false)\r\n\r\n React.useLayoutEffect(() => {\r\n setMounted(true)\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n function onKeyDown(event: KeyboardEvent) {\r\n if (event.key === \"Escape\" && controller) {\r\n controller.clearSelection()\r\n }\r\n }\r\n\r\n window.addEventListener(\"keydown\", onKeyDown)\r\n return () => window.removeEventListener(\"keydown\", onKeyDown)\r\n }, [controller])\r\n\r\n const container = containerProp ?? (mounted ? globalThis.document?.body : null)\r\n\r\n if (!container || !controller) return null\r\n\r\n const selectedItems = controller.getSelectedItems()\r\n const visible = visibleProp ?? selectedItems.length > 0\r\n\r\n return ReactDOM.createPortal(\r\n <AnimatePresence>\r\n {visible && (\r\n <motion.div\r\n role=\"toolbar\"\r\n aria-orientation=\"horizontal\"\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: 20 }}\r\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\r\n className={cn(\r\n \"fixed inset-x-0 bottom-6 z-50 mx-auto flex w-fit flex-wrap items-center justify-center gap-2 rounded-xl border bg-primary/10 backdrop-blur-sm p-3 text-foreground ring-8 ring-primary/5\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <TooltipProvider>{children}</TooltipProvider>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>,\r\n container,\r\n )\r\n}\r\n\r\nfunction DataTemplateActionBarAction({\r\n size = \"sm\",\r\n variant = \"secondary\",\r\n tooltip,\r\n isPending,\r\n disabled,\r\n className,\r\n children,\r\n onClick,\r\n ...props\r\n}: DataTemplateActionBarActionProps) {\r\n const trigger = (\r\n <Button\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n \"gap-1.5 rounded-lg border border-secondary bg-secondary/50 hover:bg-secondary/70 transition-all duration-200\",\r\n size === \"icon\" ? \"size-8\" : \"h-8 px-3\",\r\n className,\r\n )}\r\n disabled={disabled || isPending}\r\n onClick={onClick}\r\n {...props}\r\n >\r\n {isPending ? <Loader className=\"animate-spin\" /> : children}\r\n </Button>\r\n )\r\n\r\n if (!tooltip) return trigger\r\n\r\n return (\r\n <Tooltip>\r\n <TooltipTrigger asChild>{trigger}</TooltipTrigger>\r\n <TooltipContent\r\n sideOffset={8}\r\n className=\"rounded-lg border font-semibold text-foreground bg-secondary [&>span]:hidden\"\r\n >\r\n <p>{tooltip}</p>\r\n </TooltipContent>\r\n </Tooltip>\r\n )\r\n}\r\n\r\ninterface DataTemplateActionBarSelectionProps<T> {\r\n controller: DataTemplateController<T>\r\n}\r\n\r\nfunction DataTemplateActionBarSelection<T>({ controller }: DataTemplateActionBarSelectionProps<T>) {\r\n const onClearSelection = React.useCallback(() => {\r\n if (controller) {\r\n controller.clearSelection()\r\n }\r\n }, [controller])\r\n\r\n if (!controller) return null\r\n\r\n const selectedItems = controller.getSelectedItems()\r\n\r\n return (\r\n <div className=\"flex h-8 items-center rounded-lg border bg-muted/50 pr-1 pl-3\">\r\n <span className=\"whitespace-nowrap text-sm font-medium\">{selectedItems.length} selected</span>\r\n <Separator orientation=\"vertical\" className=\"mr-2 ml-3 data-[orientation=vertical]:h-4\" />\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <Button variant=\"ghost\" size=\"icon\" className=\"size-6 rounded-md\" onClick={onClearSelection}>\r\n <X className=\"size-3.5\" />\r\n </Button>\r\n </TooltipTrigger>\r\n <TooltipContent\r\n sideOffset={10}\r\n className=\"flex items-center gap-2 rounded-lg border px-3 py-2 font-semibold text-foreground bg-secondary [&>span]:hidden\"\r\n >\r\n <p>Clear selection</p>\r\n <kbd className=\"select-none rounded border bg-primary/50 px-2 py-1 font-mono font-normal text-[0.7rem] text-foreground shadow-sm\">\r\n <abbr title=\"Escape\" className=\"no-underline\">\r\n Esc\r\n </abbr>\r\n </kbd>\r\n </TooltipContent>\r\n </Tooltip>\r\n </div>\r\n )\r\n}\r\n\r\nexport { DataTemplateActionBar, DataTemplateActionBarAction, DataTemplateActionBarSelection }\r\n","import * as React from \"react\"\r\nimport { Slot as SlotPrimitive } from \"radix-ui\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"../../lib/utils.js\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\r\n outline:\r\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\r\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\r\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\r\n icon: \"size-9\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant,\r\n size,\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"button\"> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean\r\n }) {\r\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\r\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"../../lib/utils.js\"\r\n\r\nfunction Separator({\r\n className,\r\n orientation = \"horizontal\",\r\n decorative = true,\r\n ...props\r\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\r\n return (\r\n <SeparatorPrimitive.Root\r\n data-slot=\"separator-root\"\r\n decorative={decorative}\r\n orientation={orientation}\r\n className={cn(\r\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Separator }\r\n","import * as React from \"react\"\r\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"../../lib/utils.js\"\r\n\r\nfunction TooltipProvider({\r\n delayDuration = 0,\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\r\n return (\r\n <TooltipPrimitive.Provider\r\n data-slot=\"tooltip-provider\"\r\n delayDuration={delayDuration}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction Tooltip({\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\r\n return (\r\n <TooltipProvider>\r\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\r\n </TooltipProvider>\r\n )\r\n}\r\n\r\nfunction TooltipTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\r\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\r\n}\r\n\r\nfunction TooltipContent({\r\n className,\r\n sideOffset = 0,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\r\n return (\r\n <TooltipPrimitive.Portal>\r\n <TooltipPrimitive.Content\r\n data-slot=\"tooltip-content\"\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <TooltipPrimitive.Arrow className=\"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\r\n </TooltipPrimitive.Content>\r\n </TooltipPrimitive.Portal>\r\n )\r\n}\r\n\r\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\r\n"],"mappings":"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","names":["data_template_action_bar_exports","__export","DataTemplateActionBar","DataTemplateActionBarAction","DataTemplateActionBarSelection","__toCommonJS","import_radix_ui","import_class_variance_authority","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","buttonVariants","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","import_radix_ui","import_jsx_runtime","Separator","className","orientation","decorative","props","SeparatorPrimitive","cn","import_radix_ui","import_jsx_runtime","TooltipProvider","delayDuration","props","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","className","sideOffset","children","cn","import_lucide_react","import_framer_motion","React","ReactDOM","import_jsx_runtime","DataTemplateActionBar","controller","visibleProp","containerProp","children","className","props","mounted","setMounted","onKeyDown","event","container","selectedItems","visible","cn","TooltipProvider","DataTemplateActionBarAction","size","variant","tooltip","isPending","disabled","onClick","trigger","Button","Tooltip","TooltipTrigger","TooltipContent","DataTemplateActionBarSelection","onClearSelection","Separator"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ui/button.tsx","../../../../src/lib/utils.ts","../../../../src/components/ui/separator.tsx","../../../../src/components/ui/tooltip.tsx","../../../../src/components/data/data-template/data-template-action-bar.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Slot as SlotPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator-root\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import { Button } from \"../../ui/button.jsx\"\r\nimport { Separator } from \"../../ui/separator.jsx\"\r\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../../ui/tooltip.jsx\"\r\nimport { cn } from \"../../../lib/utils.js\"\r\nimport { Loader, X } from \"lucide-react\"\r\nimport { AnimatePresence, motion } from \"framer-motion\"\r\nimport * as React from \"react\"\r\nimport * as ReactDOM from \"react-dom\"\r\nimport type {\r\n DataTemplateController,\r\n DataTemplateActionBarProps,\r\n DataTemplateActionBarActionProps,\r\n} from \"./data-template-types.js\"\r\n\r\nfunction DataTemplateActionBar<T>({\r\n controller,\r\n visible: visibleProp,\r\n container: containerProp,\r\n children,\r\n className,\r\n ...props\r\n}: DataTemplateActionBarProps<T> & React.ComponentProps<typeof motion.div>) {\r\n const [mounted, setMounted] = React.useState(false)\r\n\r\n React.useLayoutEffect(() => {\r\n setMounted(true)\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n function onKeyDown(event: KeyboardEvent) {\r\n if (event.key === \"Escape\" && controller) {\r\n controller.clearSelection()\r\n }\r\n }\r\n\r\n window.addEventListener(\"keydown\", onKeyDown)\r\n return () => window.removeEventListener(\"keydown\", onKeyDown)\r\n }, [controller])\r\n\r\n const container = containerProp ?? (mounted ? globalThis.document?.body : null)\r\n\r\n if (!container || !controller) return null\r\n\r\n const selectedItems = controller.getSelectedItems()\r\n const visible = visibleProp ?? selectedItems.length > 0\r\n\r\n return ReactDOM.createPortal(\r\n <AnimatePresence>\r\n {visible && (\r\n <motion.div\r\n role=\"toolbar\"\r\n aria-orientation=\"horizontal\"\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: 20 }}\r\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\r\n className={cn(\r\n \"fixed inset-x-0 bottom-6 z-50 mx-auto flex w-fit flex-wrap items-center justify-center gap-2 rounded-xl border bg-primary/10 backdrop-blur-sm p-3 text-foreground ring-8 ring-primary/5\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <TooltipProvider>{children}</TooltipProvider>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>,\r\n container,\r\n )\r\n}\r\n\r\nfunction DataTemplateActionBarAction({\r\n size = \"sm\",\r\n variant = \"secondary\",\r\n tooltip,\r\n isPending,\r\n disabled,\r\n className,\r\n children,\r\n onClick,\r\n ...props\r\n}: DataTemplateActionBarActionProps) {\r\n const trigger = (\r\n <Button\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n \"gap-1.5 rounded-lg border border-secondary bg-secondary/50 hover:bg-secondary/70 transition-all duration-200\",\r\n size === \"icon\" ? \"size-8\" : \"h-8 px-3\",\r\n className,\r\n )}\r\n disabled={disabled || isPending}\r\n onClick={onClick}\r\n {...props}\r\n >\r\n {isPending ? <Loader className=\"animate-spin\" /> : children}\r\n </Button>\r\n )\r\n\r\n if (!tooltip) return trigger\r\n\r\n return (\r\n <Tooltip>\r\n <TooltipTrigger asChild>{trigger}</TooltipTrigger>\r\n <TooltipContent\r\n sideOffset={8}\r\n className=\"rounded-lg border font-semibold text-foreground bg-secondary [&>span]:hidden\"\r\n >\r\n <p>{tooltip}</p>\r\n </TooltipContent>\r\n </Tooltip>\r\n )\r\n}\r\n\r\ninterface DataTemplateActionBarSelectionProps<T> {\r\n controller: DataTemplateController<T>\r\n}\r\n\r\nfunction DataTemplateActionBarSelection<T>({ controller }: DataTemplateActionBarSelectionProps<T>) {\r\n const onClearSelection = React.useCallback(() => {\r\n if (controller) {\r\n controller.clearSelection()\r\n }\r\n }, [controller])\r\n\r\n if (!controller) return null\r\n\r\n const selectedItems = controller.getSelectedItems()\r\n\r\n return (\r\n <div className=\"flex h-8 items-center rounded-lg border bg-muted/50 pr-1 pl-3\">\r\n <span className=\"whitespace-nowrap text-sm font-medium\">{selectedItems.length} selected</span>\r\n <Separator orientation=\"vertical\" className=\"mr-2 ml-3 data-[orientation=vertical]:h-4\" />\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <Button variant=\"ghost\" size=\"icon\" className=\"size-6 rounded-md\" onClick={onClearSelection}>\r\n <X className=\"size-3.5\" />\r\n </Button>\r\n </TooltipTrigger>\r\n <TooltipContent\r\n sideOffset={10}\r\n className=\"flex items-center gap-2 rounded-lg border px-3 py-2 font-semibold text-foreground bg-secondary [&>span]:hidden\"\r\n >\r\n <p>Clear selection</p>\r\n <kbd className=\"select-none rounded border bg-primary/50 px-2 py-1 font-mono font-normal text-[0.7rem] text-foreground shadow-sm\">\r\n <abbr title=\"Escape\" className=\"no-underline\">\r\n Esc\r\n </abbr>\r\n </kbd>\r\n </TooltipContent>\r\n </Tooltip>\r\n </div>\r\n )\r\n}\r\n\r\nexport { DataTemplateActionBar, DataTemplateActionBarAction, DataTemplateActionBarSelection }\r\n"],"mappings":"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","names":["SlotPrimitive","cva","clsx","twMerge","cn","inputs","jsx","buttonVariants","cva","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","SeparatorPrimitive","jsx","Separator","className","orientation","decorative","props","SeparatorPrimitive","cn","TooltipPrimitive","jsx","jsxs","TooltipProvider","delayDuration","props","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","className","sideOffset","children","cn","Loader","X","AnimatePresence","motion","React","ReactDOM","jsx","jsxs","DataTemplateActionBar","controller","visibleProp","containerProp","children","className","props","mounted","setMounted","onKeyDown","event","container","selectedItems","visible","cn","TooltipProvider","DataTemplateActionBarAction","size","variant","tooltip","isPending","disabled","onClick","trigger","Button","Tooltip","TooltipTrigger","TooltipContent","DataTemplateActionBarSelection","onClearSelection","Separator"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ui/button.tsx","../../../../src/lib/utils.ts","../../../../src/components/ui/separator.tsx","../../../../src/components/ui/tooltip.tsx","../../../../src/components/data/data-template/data-template-action-bar.tsx"],"sourcesContent":["import * as React from \"react\"\r\nimport { Slot as SlotPrimitive } from \"radix-ui\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"../../lib/utils.js\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\r\n outline:\r\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\r\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\r\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\r\n icon: \"size-9\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant,\r\n size,\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"button\"> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean\r\n }) {\r\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\r\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"../../lib/utils.js\"\r\n\r\nfunction Separator({\r\n className,\r\n orientation = \"horizontal\",\r\n decorative = true,\r\n ...props\r\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\r\n return (\r\n <SeparatorPrimitive.Root\r\n data-slot=\"separator-root\"\r\n decorative={decorative}\r\n orientation={orientation}\r\n className={cn(\r\n \"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Separator }\r\n","import * as React from \"react\"\r\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\r\n\r\nimport { cn } from \"../../lib/utils.js\"\r\n\r\nfunction TooltipProvider({\r\n delayDuration = 0,\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\r\n return (\r\n <TooltipPrimitive.Provider\r\n data-slot=\"tooltip-provider\"\r\n delayDuration={delayDuration}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction Tooltip({\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\r\n return (\r\n <TooltipProvider>\r\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\r\n </TooltipProvider>\r\n )\r\n}\r\n\r\nfunction TooltipTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\r\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\r\n}\r\n\r\nfunction TooltipContent({\r\n className,\r\n sideOffset = 0,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\r\n return (\r\n <TooltipPrimitive.Portal>\r\n <TooltipPrimitive.Content\r\n data-slot=\"tooltip-content\"\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <TooltipPrimitive.Arrow className=\"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\r\n </TooltipPrimitive.Content>\r\n </TooltipPrimitive.Portal>\r\n )\r\n}\r\n\r\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\r\n","import { Button } from \"../../ui/button.jsx\"\r\nimport { Separator } from \"../../ui/separator.jsx\"\r\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../../ui/tooltip.jsx\"\r\nimport { cn } from \"../../../lib/utils.js\"\r\nimport { Loader, X } from \"lucide-react\"\r\nimport { AnimatePresence, motion } from \"framer-motion\"\r\nimport * as React from \"react\"\r\nimport * as ReactDOM from \"react-dom\"\r\nimport type {\r\n DataTemplateController,\r\n DataTemplateActionBarProps,\r\n DataTemplateActionBarActionProps,\r\n} from \"./data-template-types.js\"\r\n\r\nfunction DataTemplateActionBar<T>({\r\n controller,\r\n visible: visibleProp,\r\n container: containerProp,\r\n children,\r\n className,\r\n ...props\r\n}: DataTemplateActionBarProps<T> & React.ComponentProps<typeof motion.div>) {\r\n const [mounted, setMounted] = React.useState(false)\r\n\r\n React.useLayoutEffect(() => {\r\n setMounted(true)\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n function onKeyDown(event: KeyboardEvent) {\r\n if (event.key === \"Escape\" && controller) {\r\n controller.clearSelection()\r\n }\r\n }\r\n\r\n window.addEventListener(\"keydown\", onKeyDown)\r\n return () => window.removeEventListener(\"keydown\", onKeyDown)\r\n }, [controller])\r\n\r\n const container = containerProp ?? (mounted ? globalThis.document?.body : null)\r\n\r\n if (!container || !controller) return null\r\n\r\n const selectedItems = controller.getSelectedItems()\r\n const visible = visibleProp ?? selectedItems.length > 0\r\n\r\n return ReactDOM.createPortal(\r\n <AnimatePresence>\r\n {visible && (\r\n <motion.div\r\n role=\"toolbar\"\r\n aria-orientation=\"horizontal\"\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: 20 }}\r\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\r\n className={cn(\r\n \"fixed inset-x-0 bottom-6 z-50 mx-auto flex w-fit flex-wrap items-center justify-center gap-2 rounded-xl border bg-primary/10 backdrop-blur-sm p-3 text-foreground ring-8 ring-primary/5\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <TooltipProvider>{children}</TooltipProvider>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>,\r\n container,\r\n )\r\n}\r\n\r\nfunction DataTemplateActionBarAction({\r\n size = \"sm\",\r\n variant = \"secondary\",\r\n tooltip,\r\n isPending,\r\n disabled,\r\n className,\r\n children,\r\n onClick,\r\n ...props\r\n}: DataTemplateActionBarActionProps) {\r\n const trigger = (\r\n <Button\r\n variant={variant}\r\n size={size}\r\n className={cn(\r\n \"gap-1.5 rounded-lg border border-secondary bg-secondary/50 hover:bg-secondary/70 transition-all duration-200\",\r\n size === \"icon\" ? \"size-8\" : \"h-8 px-3\",\r\n className,\r\n )}\r\n disabled={disabled || isPending}\r\n onClick={onClick}\r\n {...props}\r\n >\r\n {isPending ? <Loader className=\"animate-spin\" /> : children}\r\n </Button>\r\n )\r\n\r\n if (!tooltip) return trigger\r\n\r\n return (\r\n <Tooltip>\r\n <TooltipTrigger asChild>{trigger}</TooltipTrigger>\r\n <TooltipContent\r\n sideOffset={8}\r\n className=\"rounded-lg border font-semibold text-foreground bg-secondary [&>span]:hidden\"\r\n >\r\n <p>{tooltip}</p>\r\n </TooltipContent>\r\n </Tooltip>\r\n )\r\n}\r\n\r\ninterface DataTemplateActionBarSelectionProps<T> {\r\n controller: DataTemplateController<T>\r\n}\r\n\r\nfunction DataTemplateActionBarSelection<T>({ controller }: DataTemplateActionBarSelectionProps<T>) {\r\n const onClearSelection = React.useCallback(() => {\r\n if (controller) {\r\n controller.clearSelection()\r\n }\r\n }, [controller])\r\n\r\n if (!controller) return null\r\n\r\n const selectedItems = controller.getSelectedItems()\r\n\r\n return (\r\n <div className=\"flex h-8 items-center rounded-lg border bg-muted/50 pr-1 pl-3\">\r\n <span className=\"whitespace-nowrap text-sm font-medium\">{selectedItems.length} selected</span>\r\n <Separator orientation=\"vertical\" className=\"mr-2 ml-3 data-[orientation=vertical]:h-4\" />\r\n <Tooltip>\r\n <TooltipTrigger asChild>\r\n <Button variant=\"ghost\" size=\"icon\" className=\"size-6 rounded-md\" onClick={onClearSelection}>\r\n <X className=\"size-3.5\" />\r\n </Button>\r\n </TooltipTrigger>\r\n <TooltipContent\r\n sideOffset={10}\r\n className=\"flex items-center gap-2 rounded-lg border px-3 py-2 font-semibold text-foreground bg-secondary [&>span]:hidden\"\r\n >\r\n <p>Clear selection</p>\r\n <kbd className=\"select-none rounded border bg-primary/50 px-2 py-1 font-mono font-normal text-[0.7rem] text-foreground shadow-sm\">\r\n <abbr title=\"Escape\" className=\"no-underline\">\r\n Esc\r\n </abbr>\r\n </kbd>\r\n </TooltipContent>\r\n </Tooltip>\r\n </div>\r\n )\r\n}\r\n\r\nexport { DataTemplateActionBar, DataTemplateActionBarAction, DataTemplateActionBarSelection }\r\n"],"mappings":"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","names":["SlotPrimitive","cva","clsx","twMerge","cn","inputs","jsx","buttonVariants","cva","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","SeparatorPrimitive","jsx","Separator","className","orientation","decorative","props","SeparatorPrimitive","cn","TooltipPrimitive","jsx","jsxs","TooltipProvider","delayDuration","props","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","className","sideOffset","children","cn","Loader","X","AnimatePresence","motion","React","ReactDOM","jsx","jsxs","DataTemplateActionBar","controller","visibleProp","containerProp","children","className","props","mounted","setMounted","onKeyDown","event","container","selectedItems","visible","cn","TooltipProvider","DataTemplateActionBarAction","size","variant","tooltip","isPending","disabled","onClick","trigger","Button","Tooltip","TooltipTrigger","TooltipContent","DataTemplateActionBarSelection","onClearSelection","Separator"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/data/data-template/data-template-pagination.tsx","../../../../src/components/ui/button.tsx","../../../../src/lib/utils.ts","../../../../src/components/ui/select.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from \"lucide-react\"\r\nimport { Button } from \"../../ui/button.jsx\"\r\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../../ui/select.jsx\"\r\nimport type { DataTemplatePaginationConfig } from \"./data-template-types.js\"\r\n\r\ninterface DataTemplatePaginationProps {\r\n currentPage: number\r\n totalPages: number\r\n pageSize: number\r\n totalItems: number\r\n onPageChange: (page: number) => void\r\n onPageSizeChange: (pageSize: number) => void\r\n config: DataTemplatePaginationConfig\r\n}\r\n\r\nexport function DataTemplatePagination({\r\n currentPage,\r\n totalPages,\r\n pageSize,\r\n totalItems,\r\n onPageChange,\r\n onPageSizeChange,\r\n config,\r\n}: DataTemplatePaginationProps) {\r\n // if (!config.enabled || totalPages <= 1) {\r\n if (!config.enabled) {\r\n return null\r\n }\r\n\r\n const pageSizeOptions = config.pageSizeOptions || [10, 20, 50, 100]\r\n const startItem = (currentPage - 1) * pageSize + 1\r\n const endItem = Math.min(currentPage * pageSize, totalItems)\r\n\r\n const canPreviousPage = currentPage > 1\r\n const canNextPage = currentPage < totalPages\r\n\r\n // Generate page numbers to show\r\n const getPageNumbers = () => {\r\n const delta = 2\r\n const range = []\r\n const rangeWithDots = []\r\n\r\n for (let i = Math.max(2, currentPage - delta); i <= Math.min(totalPages - 1, currentPage + delta); i++) {\r\n range.push(i)\r\n }\r\n\r\n if (currentPage - delta > 2) {\r\n rangeWithDots.push(1, \"...\")\r\n } else {\r\n rangeWithDots.push(1)\r\n }\r\n\r\n rangeWithDots.push(...range)\r\n\r\n if (currentPage + delta < totalPages - 1) {\r\n rangeWithDots.push(\"...\", totalPages)\r\n } else if (totalPages > 1) {\r\n rangeWithDots.push(totalPages)\r\n }\r\n\r\n return rangeWithDots\r\n }\r\n\r\n return (\r\n <div className=\"rounded-xl\">\r\n <div className=\"flex flex-col sm:flex-row items-center justify-between gap-4\">\r\n {/* Info Section */}\r\n <div className=\"flex items-center gap-6 text-sm text-muted-foreground\">\r\n {config.showInfo !== false && (\r\n <span>\r\n Showing {startItem} to {endItem} of {totalItems} entries\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Controls Section */}\r\n <div className=\"flex flex-col sm:flex-row items-center gap-4\">\r\n {/* Page Size Selector */}\r\n {pageSizeOptions && (\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm font-medium whitespace-nowrap\">Page size:</span>\r\n <Select value={`${pageSize}`} onValueChange={(value) => onPageSizeChange(Number(value))}>\r\n <SelectTrigger className=\"h-9 w-[70px] rounded-lg\">\r\n <SelectValue />\r\n </SelectTrigger>\r\n <SelectContent side=\"top\" className=\"rounded-lg\">\r\n {pageSizeOptions.map((size) => (\r\n <SelectItem key={size} value={`${size}`}>\r\n {size}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n )}\r\n\r\n {/* Navigation Controls */}\r\n <div className=\"flex items-center gap-2\">\r\n {/* First Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(1)}\r\n disabled={!canPreviousPage}\r\n className=\"hidden sm:flex rounded-lg\"\r\n >\r\n <ChevronsLeft className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Go to first page</span>\r\n </Button>\r\n\r\n {/* Previous Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(currentPage - 1)}\r\n disabled={!canPreviousPage}\r\n className=\"rounded-lg\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4 sm:mr-2\" />\r\n <span className=\"hidden sm:inline\">Previous</span>\r\n <span className=\"sr-only sm:hidden\">Go to previous page</span>\r\n </Button>\r\n\r\n {/* Page Numbers */}\r\n {config.showPageNumbers && totalPages > 1 && (\r\n <div className=\"hidden sm:flex items-center gap-1\">\r\n {getPageNumbers().map((pageNumber, index) => {\r\n if (pageNumber === \"...\") {\r\n return (\r\n <span key={`dots-${index}`} className=\"px-2 py-1 text-sm text-muted-foreground\">\r\n ...\r\n </span>\r\n )\r\n }\r\n\r\n const page = pageNumber as number\r\n return (\r\n <Button\r\n key={page}\r\n variant={page === currentPage ? \"default\" : \"outline\"}\r\n size=\"sm\"\r\n className=\"w-9 h-9 p-0 rounded-lg\"\r\n onClick={() => onPageChange(page)}\r\n >\r\n {page}\r\n </Button>\r\n )\r\n })}\r\n </div>\r\n )}\r\n\r\n {/* Current Page Indicator (Mobile) */}\r\n <div className=\"sm:hidden flex items-center gap-2 px-3 py-1 text-sm font-medium bg-muted rounded-lg\">\r\n {currentPage} of {totalPages}\r\n </div>\r\n\r\n {/* Next Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(currentPage + 1)}\r\n disabled={!canNextPage}\r\n className=\"rounded-lg\"\r\n >\r\n <span className=\"hidden sm:inline\">Next</span>\r\n <ChevronRight className=\"h-4 w-4 sm:ml-2\" />\r\n <span className=\"sr-only sm:hidden\">Go to next page</span>\r\n </Button>\r\n\r\n {/* Last Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(totalPages)}\r\n disabled={!canNextPage}\r\n className=\"hidden sm:flex rounded-lg\"\r\n >\r\n <ChevronsRight className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Go to last page</span>\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import * as React from \"react\"\nimport { Slot as SlotPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground 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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"],"mappings":"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","names":["data_template_pagination_exports","__export","DataTemplatePagination","__toCommonJS","import_lucide_react","import_radix_ui","import_class_variance_authority","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","buttonVariants","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","import_radix_ui","import_lucide_react","import_jsx_runtime","Select","props","SelectPrimitive","SelectValue","props","SelectPrimitive","SelectTrigger","className","size","children","cn","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectItem","className","children","props","SelectPrimitive","cn","SelectScrollUpButton","className","props","SelectPrimitive","cn","SelectScrollDownButton","import_jsx_runtime","DataTemplatePagination","currentPage","totalPages","pageSize","totalItems","onPageChange","onPageSizeChange","config","pageSizeOptions","startItem","endItem","canPreviousPage","canNextPage","getPageNumbers","range","rangeWithDots","i","Select","value","SelectTrigger","SelectValue","SelectContent","size","SelectItem","Button","pageNumber","index","page"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/data/data-template/data-template-pagination.tsx","../../../../src/components/ui/button.tsx","../../../../src/lib/utils.ts","../../../../src/components/ui/select.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from \"lucide-react\"\r\nimport { Button } from \"../../ui/button.jsx\"\r\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../../ui/select.jsx\"\r\nimport type { DataTemplatePaginationConfig } from \"./data-template-types.js\"\r\n\r\ninterface DataTemplatePaginationProps {\r\n currentPage: number\r\n totalPages: number\r\n pageSize: number\r\n totalItems: number\r\n onPageChange: (page: number) => void\r\n onPageSizeChange: (pageSize: number) => void\r\n config: DataTemplatePaginationConfig\r\n}\r\n\r\nexport function DataTemplatePagination({\r\n currentPage,\r\n totalPages,\r\n pageSize,\r\n totalItems,\r\n onPageChange,\r\n onPageSizeChange,\r\n config,\r\n}: DataTemplatePaginationProps) {\r\n // if (!config.enabled || totalPages <= 1) {\r\n if (!config.enabled) {\r\n return null\r\n }\r\n\r\n const pageSizeOptions = config.pageSizeOptions || [10, 20, 50, 100]\r\n const startItem = (currentPage - 1) * pageSize + 1\r\n const endItem = Math.min(currentPage * pageSize, totalItems)\r\n\r\n const canPreviousPage = currentPage > 1\r\n const canNextPage = currentPage < totalPages\r\n\r\n // Generate page numbers to show\r\n const getPageNumbers = () => {\r\n const delta = 2\r\n const range = []\r\n const rangeWithDots = []\r\n\r\n for (let i = Math.max(2, currentPage - delta); i <= Math.min(totalPages - 1, currentPage + delta); i++) {\r\n range.push(i)\r\n }\r\n\r\n if (currentPage - delta > 2) {\r\n rangeWithDots.push(1, \"...\")\r\n } else {\r\n rangeWithDots.push(1)\r\n }\r\n\r\n rangeWithDots.push(...range)\r\n\r\n if (currentPage + delta < totalPages - 1) {\r\n rangeWithDots.push(\"...\", totalPages)\r\n } else if (totalPages > 1) {\r\n rangeWithDots.push(totalPages)\r\n }\r\n\r\n return rangeWithDots\r\n }\r\n\r\n return (\r\n <div className=\"rounded-xl\">\r\n <div className=\"flex flex-col sm:flex-row items-center justify-between gap-4\">\r\n {/* Info Section */}\r\n <div className=\"flex items-center gap-6 text-sm text-muted-foreground\">\r\n {config.showInfo !== false && (\r\n <span>\r\n Showing {startItem} to {endItem} of {totalItems} entries\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Controls Section */}\r\n <div className=\"flex flex-col sm:flex-row items-center gap-4\">\r\n {/* Page Size Selector */}\r\n {pageSizeOptions && (\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm font-medium whitespace-nowrap\">Page size:</span>\r\n <Select value={`${pageSize}`} onValueChange={(value) => onPageSizeChange(Number(value))}>\r\n <SelectTrigger className=\"h-9 w-[70px] rounded-lg\">\r\n <SelectValue />\r\n </SelectTrigger>\r\n <SelectContent side=\"top\" className=\"rounded-lg\">\r\n {pageSizeOptions.map((size) => (\r\n <SelectItem key={size} value={`${size}`}>\r\n {size}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n )}\r\n\r\n {/* Navigation Controls */}\r\n <div className=\"flex items-center gap-2\">\r\n {/* First Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(1)}\r\n disabled={!canPreviousPage}\r\n className=\"hidden sm:flex rounded-lg\"\r\n >\r\n <ChevronsLeft className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Go to first page</span>\r\n </Button>\r\n\r\n {/* Previous Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(currentPage - 1)}\r\n disabled={!canPreviousPage}\r\n className=\"rounded-lg\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4 sm:mr-2\" />\r\n <span className=\"hidden sm:inline\">Previous</span>\r\n <span className=\"sr-only sm:hidden\">Go to previous page</span>\r\n </Button>\r\n\r\n {/* Page Numbers */}\r\n {config.showPageNumbers && totalPages > 1 && (\r\n <div className=\"hidden sm:flex items-center gap-1\">\r\n {getPageNumbers().map((pageNumber, index) => {\r\n if (pageNumber === \"...\") {\r\n return (\r\n <span key={`dots-${index}`} className=\"px-2 py-1 text-sm text-muted-foreground\">\r\n ...\r\n </span>\r\n )\r\n }\r\n\r\n const page = pageNumber as number\r\n return (\r\n <Button\r\n key={page}\r\n variant={page === currentPage ? \"default\" : \"outline\"}\r\n size=\"sm\"\r\n className=\"w-9 h-9 p-0 rounded-lg\"\r\n onClick={() => onPageChange(page)}\r\n >\r\n {page}\r\n </Button>\r\n )\r\n })}\r\n </div>\r\n )}\r\n\r\n {/* Current Page Indicator (Mobile) */}\r\n <div className=\"sm:hidden flex items-center gap-2 px-3 py-1 text-sm font-medium bg-muted rounded-lg\">\r\n {currentPage} of {totalPages}\r\n </div>\r\n\r\n {/* Next Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(currentPage + 1)}\r\n disabled={!canNextPage}\r\n className=\"rounded-lg\"\r\n >\r\n <span className=\"hidden sm:inline\">Next</span>\r\n <ChevronRight className=\"h-4 w-4 sm:ml-2\" />\r\n <span className=\"sr-only sm:hidden\">Go to next page</span>\r\n </Button>\r\n\r\n {/* Last Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(totalPages)}\r\n disabled={!canNextPage}\r\n className=\"hidden sm:flex rounded-lg\"\r\n >\r\n <ChevronsRight className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Go to last page</span>\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import * as React from \"react\"\r\nimport { Slot as SlotPrimitive } from \"radix-ui\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"../../lib/utils.js\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\r\n outline:\r\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\r\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\r\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\r\n icon: \"size-9\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant,\r\n size,\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"button\"> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean\r\n }) {\r\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\r\nimport { Select as SelectPrimitive } from \"radix-ui\"\r\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"../../lib/utils.js\"\r\n\r\nfunction Select({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\r\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\r\n}\r\n\r\nfunction SelectGroup({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\r\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\r\n}\r\n\r\nfunction SelectValue({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\r\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\r\n}\r\n\r\nfunction SelectTrigger({\r\n className,\r\n size = \"default\",\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\r\n size?: \"sm\" | \"default\"\r\n}) {\r\n return (\r\n <SelectPrimitive.Trigger\r\n data-slot=\"select-trigger\"\r\n data-size={size}\r\n className={cn(\r\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <SelectPrimitive.Icon asChild>\r\n <ChevronDownIcon className=\"size-4 opacity-50\" />\r\n </SelectPrimitive.Icon>\r\n </SelectPrimitive.Trigger>\r\n )\r\n}\r\n\r\nfunction SelectContent({\r\n className,\r\n children,\r\n position = \"popper\",\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\r\n return (\r\n <SelectPrimitive.Portal>\r\n <SelectPrimitive.Content\r\n data-slot=\"select-content\"\r\n className={cn(\r\n \"bg-popover text-popover-foreground 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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\r\n position === \"popper\" &&\r\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\r\n className\r\n )}\r\n position={position}\r\n {...props}\r\n >\r\n <SelectScrollUpButton />\r\n <SelectPrimitive.Viewport\r\n className={cn(\r\n \"p-1\",\r\n position === \"popper\" &&\r\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\r\n )}\r\n >\r\n {children}\r\n </SelectPrimitive.Viewport>\r\n <SelectScrollDownButton />\r\n </SelectPrimitive.Content>\r\n </SelectPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction SelectLabel({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\r\n return (\r\n <SelectPrimitive.Label\r\n data-slot=\"select-label\"\r\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SelectItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\r\n return (\r\n <SelectPrimitive.Item\r\n data-slot=\"select-item\"\r\n className={cn(\r\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\r\n <SelectPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </SelectPrimitive.ItemIndicator>\r\n </span>\r\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\r\n </SelectPrimitive.Item>\r\n )\r\n}\r\n\r\nfunction SelectSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\r\n return (\r\n <SelectPrimitive.Separator\r\n data-slot=\"select-separator\"\r\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SelectScrollUpButton({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\r\n return (\r\n <SelectPrimitive.ScrollUpButton\r\n data-slot=\"select-scroll-up-button\"\r\n className={cn(\r\n \"flex cursor-default items-center justify-center py-1\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronUpIcon className=\"size-4\" />\r\n </SelectPrimitive.ScrollUpButton>\r\n )\r\n}\r\n\r\nfunction SelectScrollDownButton({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\r\n return (\r\n <SelectPrimitive.ScrollDownButton\r\n data-slot=\"select-scroll-down-button\"\r\n className={cn(\r\n \"flex cursor-default items-center justify-center py-1\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronDownIcon className=\"size-4\" />\r\n </SelectPrimitive.ScrollDownButton>\r\n )\r\n}\r\n\r\nexport {\r\n Select,\r\n SelectContent,\r\n SelectGroup,\r\n SelectItem,\r\n SelectLabel,\r\n SelectScrollDownButton,\r\n SelectScrollUpButton,\r\n SelectSeparator,\r\n SelectTrigger,\r\n SelectValue,\r\n}\r\n"],"mappings":"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","names":["data_template_pagination_exports","__export","DataTemplatePagination","__toCommonJS","import_lucide_react","import_radix_ui","import_class_variance_authority","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","buttonVariants","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","import_radix_ui","import_lucide_react","import_jsx_runtime","Select","props","SelectPrimitive","SelectValue","props","SelectPrimitive","SelectTrigger","className","size","children","cn","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectItem","className","children","props","SelectPrimitive","cn","SelectScrollUpButton","className","props","SelectPrimitive","cn","SelectScrollDownButton","import_jsx_runtime","DataTemplatePagination","currentPage","totalPages","pageSize","totalItems","onPageChange","onPageSizeChange","config","pageSizeOptions","startItem","endItem","canPreviousPage","canNextPage","getPageNumbers","range","rangeWithDots","i","Select","value","SelectTrigger","SelectValue","SelectContent","size","SelectItem","Button","pageNumber","index","page"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/data/data-template/data-template-pagination.tsx","../../../../src/components/ui/button.tsx","../../../../src/lib/utils.ts","../../../../src/components/ui/select.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from \"lucide-react\"\r\nimport { Button } from \"../../ui/button.jsx\"\r\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../../ui/select.jsx\"\r\nimport type { DataTemplatePaginationConfig } from \"./data-template-types.js\"\r\n\r\ninterface DataTemplatePaginationProps {\r\n currentPage: number\r\n totalPages: number\r\n pageSize: number\r\n totalItems: number\r\n onPageChange: (page: number) => void\r\n onPageSizeChange: (pageSize: number) => void\r\n config: DataTemplatePaginationConfig\r\n}\r\n\r\nexport function DataTemplatePagination({\r\n currentPage,\r\n totalPages,\r\n pageSize,\r\n totalItems,\r\n onPageChange,\r\n onPageSizeChange,\r\n config,\r\n}: DataTemplatePaginationProps) {\r\n // if (!config.enabled || totalPages <= 1) {\r\n if (!config.enabled) {\r\n return null\r\n }\r\n\r\n const pageSizeOptions = config.pageSizeOptions || [10, 20, 50, 100]\r\n const startItem = (currentPage - 1) * pageSize + 1\r\n const endItem = Math.min(currentPage * pageSize, totalItems)\r\n\r\n const canPreviousPage = currentPage > 1\r\n const canNextPage = currentPage < totalPages\r\n\r\n // Generate page numbers to show\r\n const getPageNumbers = () => {\r\n const delta = 2\r\n const range = []\r\n const rangeWithDots = []\r\n\r\n for (let i = Math.max(2, currentPage - delta); i <= Math.min(totalPages - 1, currentPage + delta); i++) {\r\n range.push(i)\r\n }\r\n\r\n if (currentPage - delta > 2) {\r\n rangeWithDots.push(1, \"...\")\r\n } else {\r\n rangeWithDots.push(1)\r\n }\r\n\r\n rangeWithDots.push(...range)\r\n\r\n if (currentPage + delta < totalPages - 1) {\r\n rangeWithDots.push(\"...\", totalPages)\r\n } else if (totalPages > 1) {\r\n rangeWithDots.push(totalPages)\r\n }\r\n\r\n return rangeWithDots\r\n }\r\n\r\n return (\r\n <div className=\"rounded-xl\">\r\n <div className=\"flex flex-col sm:flex-row items-center justify-between gap-4\">\r\n {/* Info Section */}\r\n <div className=\"flex items-center gap-6 text-sm text-muted-foreground\">\r\n {config.showInfo !== false && (\r\n <span>\r\n Showing {startItem} to {endItem} of {totalItems} entries\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Controls Section */}\r\n <div className=\"flex flex-col sm:flex-row items-center gap-4\">\r\n {/* Page Size Selector */}\r\n {pageSizeOptions && (\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm font-medium whitespace-nowrap\">Page size:</span>\r\n <Select value={`${pageSize}`} onValueChange={(value) => onPageSizeChange(Number(value))}>\r\n <SelectTrigger className=\"h-9 w-[70px] rounded-lg\">\r\n <SelectValue />\r\n </SelectTrigger>\r\n <SelectContent side=\"top\" className=\"rounded-lg\">\r\n {pageSizeOptions.map((size) => (\r\n <SelectItem key={size} value={`${size}`}>\r\n {size}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n )}\r\n\r\n {/* Navigation Controls */}\r\n <div className=\"flex items-center gap-2\">\r\n {/* First Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(1)}\r\n disabled={!canPreviousPage}\r\n className=\"hidden sm:flex rounded-lg\"\r\n >\r\n <ChevronsLeft className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Go to first page</span>\r\n </Button>\r\n\r\n {/* Previous Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(currentPage - 1)}\r\n disabled={!canPreviousPage}\r\n className=\"rounded-lg\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4 sm:mr-2\" />\r\n <span className=\"hidden sm:inline\">Previous</span>\r\n <span className=\"sr-only sm:hidden\">Go to previous page</span>\r\n </Button>\r\n\r\n {/* Page Numbers */}\r\n {config.showPageNumbers && totalPages > 1 && (\r\n <div className=\"hidden sm:flex items-center gap-1\">\r\n {getPageNumbers().map((pageNumber, index) => {\r\n if (pageNumber === \"...\") {\r\n return (\r\n <span key={`dots-${index}`} className=\"px-2 py-1 text-sm text-muted-foreground\">\r\n ...\r\n </span>\r\n )\r\n }\r\n\r\n const page = pageNumber as number\r\n return (\r\n <Button\r\n key={page}\r\n variant={page === currentPage ? \"default\" : \"outline\"}\r\n size=\"sm\"\r\n className=\"w-9 h-9 p-0 rounded-lg\"\r\n onClick={() => onPageChange(page)}\r\n >\r\n {page}\r\n </Button>\r\n )\r\n })}\r\n </div>\r\n )}\r\n\r\n {/* Current Page Indicator (Mobile) */}\r\n <div className=\"sm:hidden flex items-center gap-2 px-3 py-1 text-sm font-medium bg-muted rounded-lg\">\r\n {currentPage} of {totalPages}\r\n </div>\r\n\r\n {/* Next Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(currentPage + 1)}\r\n disabled={!canNextPage}\r\n className=\"rounded-lg\"\r\n >\r\n <span className=\"hidden sm:inline\">Next</span>\r\n <ChevronRight className=\"h-4 w-4 sm:ml-2\" />\r\n <span className=\"sr-only sm:hidden\">Go to next page</span>\r\n </Button>\r\n\r\n {/* Last Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(totalPages)}\r\n disabled={!canNextPage}\r\n className=\"hidden sm:flex rounded-lg\"\r\n >\r\n <ChevronsRight className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Go to last page</span>\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import * as React from \"react\"\nimport { Slot as SlotPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground 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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n"],"mappings":"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","names":["ChevronLeft","ChevronRight","ChevronsLeft","ChevronsRight","SlotPrimitive","cva","clsx","twMerge","cn","inputs","jsx","buttonVariants","cva","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","SelectPrimitive","CheckIcon","ChevronDownIcon","ChevronUpIcon","jsx","jsxs","Select","props","SelectPrimitive","SelectValue","props","jsx","SelectPrimitive","SelectTrigger","className","size","children","jsxs","cn","ChevronDownIcon","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectItem","className","children","props","jsxs","SelectPrimitive","cn","jsx","CheckIcon","SelectScrollUpButton","className","props","jsx","SelectPrimitive","cn","ChevronUpIcon","SelectScrollDownButton","ChevronDownIcon","jsx","jsxs","DataTemplatePagination","currentPage","totalPages","pageSize","totalItems","onPageChange","onPageSizeChange","config","pageSizeOptions","startItem","endItem","canPreviousPage","canNextPage","getPageNumbers","range","rangeWithDots","i","Select","value","SelectTrigger","SelectValue","SelectContent","size","SelectItem","Button","ChevronsLeft","ChevronLeft","pageNumber","index","page","ChevronRight","ChevronsRight"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/data/data-template/data-template-pagination.tsx","../../../../src/components/ui/button.tsx","../../../../src/lib/utils.ts","../../../../src/components/ui/select.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from \"lucide-react\"\r\nimport { Button } from \"../../ui/button.jsx\"\r\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../../ui/select.jsx\"\r\nimport type { DataTemplatePaginationConfig } from \"./data-template-types.js\"\r\n\r\ninterface DataTemplatePaginationProps {\r\n currentPage: number\r\n totalPages: number\r\n pageSize: number\r\n totalItems: number\r\n onPageChange: (page: number) => void\r\n onPageSizeChange: (pageSize: number) => void\r\n config: DataTemplatePaginationConfig\r\n}\r\n\r\nexport function DataTemplatePagination({\r\n currentPage,\r\n totalPages,\r\n pageSize,\r\n totalItems,\r\n onPageChange,\r\n onPageSizeChange,\r\n config,\r\n}: DataTemplatePaginationProps) {\r\n // if (!config.enabled || totalPages <= 1) {\r\n if (!config.enabled) {\r\n return null\r\n }\r\n\r\n const pageSizeOptions = config.pageSizeOptions || [10, 20, 50, 100]\r\n const startItem = (currentPage - 1) * pageSize + 1\r\n const endItem = Math.min(currentPage * pageSize, totalItems)\r\n\r\n const canPreviousPage = currentPage > 1\r\n const canNextPage = currentPage < totalPages\r\n\r\n // Generate page numbers to show\r\n const getPageNumbers = () => {\r\n const delta = 2\r\n const range = []\r\n const rangeWithDots = []\r\n\r\n for (let i = Math.max(2, currentPage - delta); i <= Math.min(totalPages - 1, currentPage + delta); i++) {\r\n range.push(i)\r\n }\r\n\r\n if (currentPage - delta > 2) {\r\n rangeWithDots.push(1, \"...\")\r\n } else {\r\n rangeWithDots.push(1)\r\n }\r\n\r\n rangeWithDots.push(...range)\r\n\r\n if (currentPage + delta < totalPages - 1) {\r\n rangeWithDots.push(\"...\", totalPages)\r\n } else if (totalPages > 1) {\r\n rangeWithDots.push(totalPages)\r\n }\r\n\r\n return rangeWithDots\r\n }\r\n\r\n return (\r\n <div className=\"rounded-xl\">\r\n <div className=\"flex flex-col sm:flex-row items-center justify-between gap-4\">\r\n {/* Info Section */}\r\n <div className=\"flex items-center gap-6 text-sm text-muted-foreground\">\r\n {config.showInfo !== false && (\r\n <span>\r\n Showing {startItem} to {endItem} of {totalItems} entries\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Controls Section */}\r\n <div className=\"flex flex-col sm:flex-row items-center gap-4\">\r\n {/* Page Size Selector */}\r\n {pageSizeOptions && (\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-sm font-medium whitespace-nowrap\">Page size:</span>\r\n <Select value={`${pageSize}`} onValueChange={(value) => onPageSizeChange(Number(value))}>\r\n <SelectTrigger className=\"h-9 w-[70px] rounded-lg\">\r\n <SelectValue />\r\n </SelectTrigger>\r\n <SelectContent side=\"top\" className=\"rounded-lg\">\r\n {pageSizeOptions.map((size) => (\r\n <SelectItem key={size} value={`${size}`}>\r\n {size}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n )}\r\n\r\n {/* Navigation Controls */}\r\n <div className=\"flex items-center gap-2\">\r\n {/* First Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(1)}\r\n disabled={!canPreviousPage}\r\n className=\"hidden sm:flex rounded-lg\"\r\n >\r\n <ChevronsLeft className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Go to first page</span>\r\n </Button>\r\n\r\n {/* Previous Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(currentPage - 1)}\r\n disabled={!canPreviousPage}\r\n className=\"rounded-lg\"\r\n >\r\n <ChevronLeft className=\"h-4 w-4 sm:mr-2\" />\r\n <span className=\"hidden sm:inline\">Previous</span>\r\n <span className=\"sr-only sm:hidden\">Go to previous page</span>\r\n </Button>\r\n\r\n {/* Page Numbers */}\r\n {config.showPageNumbers && totalPages > 1 && (\r\n <div className=\"hidden sm:flex items-center gap-1\">\r\n {getPageNumbers().map((pageNumber, index) => {\r\n if (pageNumber === \"...\") {\r\n return (\r\n <span key={`dots-${index}`} className=\"px-2 py-1 text-sm text-muted-foreground\">\r\n ...\r\n </span>\r\n )\r\n }\r\n\r\n const page = pageNumber as number\r\n return (\r\n <Button\r\n key={page}\r\n variant={page === currentPage ? \"default\" : \"outline\"}\r\n size=\"sm\"\r\n className=\"w-9 h-9 p-0 rounded-lg\"\r\n onClick={() => onPageChange(page)}\r\n >\r\n {page}\r\n </Button>\r\n )\r\n })}\r\n </div>\r\n )}\r\n\r\n {/* Current Page Indicator (Mobile) */}\r\n <div className=\"sm:hidden flex items-center gap-2 px-3 py-1 text-sm font-medium bg-muted rounded-lg\">\r\n {currentPage} of {totalPages}\r\n </div>\r\n\r\n {/* Next Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(currentPage + 1)}\r\n disabled={!canNextPage}\r\n className=\"rounded-lg\"\r\n >\r\n <span className=\"hidden sm:inline\">Next</span>\r\n <ChevronRight className=\"h-4 w-4 sm:ml-2\" />\r\n <span className=\"sr-only sm:hidden\">Go to next page</span>\r\n </Button>\r\n\r\n {/* Last Page */}\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onPageChange(totalPages)}\r\n disabled={!canNextPage}\r\n className=\"hidden sm:flex rounded-lg\"\r\n >\r\n <ChevronsRight className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Go to last page</span>\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","import * as React from \"react\"\r\nimport { Slot as SlotPrimitive } from \"radix-ui\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"../../lib/utils.js\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\r\n destructive:\r\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\r\n outline:\r\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\r\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\r\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\r\n icon: \"size-9\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant,\r\n size,\r\n asChild = false,\r\n ...props\r\n}: React.ComponentProps<\"button\"> &\r\n VariantProps<typeof buttonVariants> & {\r\n asChild?: boolean\r\n }) {\r\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\r\n\r\n return (\r\n <Comp\r\n data-slot=\"button\"\r\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n","import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import * as React from \"react\"\r\nimport { Select as SelectPrimitive } from \"radix-ui\"\r\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"../../lib/utils.js\"\r\n\r\nfunction Select({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\r\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\r\n}\r\n\r\nfunction SelectGroup({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\r\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\r\n}\r\n\r\nfunction SelectValue({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\r\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\r\n}\r\n\r\nfunction SelectTrigger({\r\n className,\r\n size = \"default\",\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\r\n size?: \"sm\" | \"default\"\r\n}) {\r\n return (\r\n <SelectPrimitive.Trigger\r\n data-slot=\"select-trigger\"\r\n data-size={size}\r\n className={cn(\r\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <SelectPrimitive.Icon asChild>\r\n <ChevronDownIcon className=\"size-4 opacity-50\" />\r\n </SelectPrimitive.Icon>\r\n </SelectPrimitive.Trigger>\r\n )\r\n}\r\n\r\nfunction SelectContent({\r\n className,\r\n children,\r\n position = \"popper\",\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\r\n return (\r\n <SelectPrimitive.Portal>\r\n <SelectPrimitive.Content\r\n data-slot=\"select-content\"\r\n className={cn(\r\n \"bg-popover text-popover-foreground 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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\r\n position === \"popper\" &&\r\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\r\n className\r\n )}\r\n position={position}\r\n {...props}\r\n >\r\n <SelectScrollUpButton />\r\n <SelectPrimitive.Viewport\r\n className={cn(\r\n \"p-1\",\r\n position === \"popper\" &&\r\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\r\n )}\r\n >\r\n {children}\r\n </SelectPrimitive.Viewport>\r\n <SelectScrollDownButton />\r\n </SelectPrimitive.Content>\r\n </SelectPrimitive.Portal>\r\n )\r\n}\r\n\r\nfunction SelectLabel({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\r\n return (\r\n <SelectPrimitive.Label\r\n data-slot=\"select-label\"\r\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SelectItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\r\n return (\r\n <SelectPrimitive.Item\r\n data-slot=\"select-item\"\r\n className={cn(\r\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\r\n <SelectPrimitive.ItemIndicator>\r\n <CheckIcon className=\"size-4\" />\r\n </SelectPrimitive.ItemIndicator>\r\n </span>\r\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\r\n </SelectPrimitive.Item>\r\n )\r\n}\r\n\r\nfunction SelectSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\r\n return (\r\n <SelectPrimitive.Separator\r\n data-slot=\"select-separator\"\r\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction SelectScrollUpButton({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\r\n return (\r\n <SelectPrimitive.ScrollUpButton\r\n data-slot=\"select-scroll-up-button\"\r\n className={cn(\r\n \"flex cursor-default items-center justify-center py-1\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronUpIcon className=\"size-4\" />\r\n </SelectPrimitive.ScrollUpButton>\r\n )\r\n}\r\n\r\nfunction SelectScrollDownButton({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\r\n return (\r\n <SelectPrimitive.ScrollDownButton\r\n data-slot=\"select-scroll-down-button\"\r\n className={cn(\r\n \"flex cursor-default items-center justify-center py-1\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ChevronDownIcon className=\"size-4\" />\r\n </SelectPrimitive.ScrollDownButton>\r\n )\r\n}\r\n\r\nexport {\r\n Select,\r\n SelectContent,\r\n SelectGroup,\r\n SelectItem,\r\n SelectLabel,\r\n SelectScrollDownButton,\r\n SelectScrollUpButton,\r\n SelectSeparator,\r\n SelectTrigger,\r\n SelectValue,\r\n}\r\n"],"mappings":"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","names":["ChevronLeft","ChevronRight","ChevronsLeft","ChevronsRight","SlotPrimitive","cva","clsx","twMerge","cn","inputs","jsx","buttonVariants","cva","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","SelectPrimitive","CheckIcon","ChevronDownIcon","ChevronUpIcon","jsx","jsxs","Select","props","SelectPrimitive","SelectValue","props","jsx","SelectPrimitive","SelectTrigger","className","size","children","jsxs","cn","ChevronDownIcon","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectItem","className","children","props","jsxs","SelectPrimitive","cn","jsx","CheckIcon","SelectScrollUpButton","className","props","jsx","SelectPrimitive","cn","ChevronUpIcon","SelectScrollDownButton","ChevronDownIcon","jsx","jsxs","DataTemplatePagination","currentPage","totalPages","pageSize","totalItems","onPageChange","onPageSizeChange","config","pageSizeOptions","startItem","endItem","canPreviousPage","canNextPage","getPageNumbers","range","rangeWithDots","i","Select","value","SelectTrigger","SelectValue","SelectContent","size","SelectItem","Button","ChevronsLeft","ChevronLeft","pageNumber","index","page","ChevronRight","ChevronsRight"]}
|