@uselets/ui 2.0.1 → 2.1.0
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/README.md +8 -0
- package/dist/{as-child-Dxg3Xo1G.d.ts → as-child-T9W73ZYU.d.ts} +1 -3
- package/dist/{chart-B_6nC_ih.d.ts → chart-8rgtsk95.d.ts} +1 -3
- package/dist/checkbox-group-context-HDVxTNPi.js +2 -0
- package/dist/checkbox-group-context-HDVxTNPi.js.map +1 -0
- package/dist/cli/uselets.mjs.map +1 -1
- package/dist/combobox-styles-CZ0aJayc.js +2 -0
- package/dist/combobox-styles-CZ0aJayc.js.map +1 -0
- package/dist/components/accordion.d.ts +1 -3
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/alert-dialog.d.ts +1 -3
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/alert.d.ts +0 -2
- package/dist/components/alert.js.map +1 -1
- package/dist/components/anchor.d.ts +1 -3
- package/dist/components/anchor.js.map +1 -1
- package/dist/components/area-chart.d.ts +1 -3
- package/dist/components/area-chart.js.map +1 -1
- package/dist/components/autocomplete.d.ts +46 -0
- package/dist/components/autocomplete.js +2 -0
- package/dist/components/autocomplete.js.map +1 -0
- package/dist/components/avatar.d.ts +1 -3
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/badge.d.ts +1 -3
- package/dist/components/badge.js +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/bar-chart.d.ts +1 -3
- package/dist/components/bar-chart.js.map +1 -1
- package/dist/components/bottom-nav.d.ts +1 -3
- package/dist/components/bottom-nav.js.map +1 -1
- package/dist/components/breadcrumb.d.ts +1 -3
- package/dist/components/breadcrumb.js.map +1 -1
- package/dist/components/button-group.d.ts +1 -3
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/button.d.ts +1 -3
- package/dist/components/button.js +1 -1
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar.d.ts +0 -2
- package/dist/components/calendar.js +1 -1
- package/dist/components/calendar.js.map +1 -1
- package/dist/components/card.d.ts +0 -2
- package/dist/components/card.js.map +1 -1
- package/dist/components/carousel.d.ts +0 -2
- package/dist/components/carousel.js.map +1 -1
- package/dist/components/center.d.ts +0 -2
- package/dist/components/center.js.map +1 -1
- package/dist/components/chart.d.ts +1 -1
- package/dist/components/chart.js.map +1 -1
- package/dist/components/checkbox-group.d.ts +19 -0
- package/dist/components/checkbox-group.js +2 -0
- package/dist/components/checkbox-group.js.map +1 -0
- package/dist/components/checkbox.d.ts +2 -4
- package/dist/components/checkbox.js +1 -1
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/code.d.ts +0 -2
- package/dist/components/code.js.map +1 -1
- package/dist/components/collapsible.d.ts +1 -3
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/combobox.d.ts +1 -3
- package/dist/components/combobox.js +1 -1
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/command.d.ts +0 -2
- package/dist/components/command.js +1 -1
- package/dist/components/command.js.map +1 -1
- package/dist/components/container.d.ts +0 -2
- package/dist/components/container.js.map +1 -1
- package/dist/components/data-table.d.ts +0 -2
- package/dist/components/data-table.js +1 -1
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-range-picker.d.ts +0 -2
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/dialog.d.ts +1 -3
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/direction.d.ts +0 -2
- package/dist/components/donut-chart.d.ts +0 -2
- package/dist/components/donut-chart.js.map +1 -1
- package/dist/components/drawer.d.ts +1 -3
- package/dist/components/drawer.js.map +1 -1
- package/dist/components/dropdown-menu.d.ts +1 -3
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/dropzone.d.ts +0 -2
- package/dist/components/dropzone.js +1 -1
- package/dist/components/dropzone.js.map +1 -1
- package/dist/components/empty.d.ts +0 -2
- package/dist/components/empty.js.map +1 -1
- package/dist/components/field.d.ts +0 -2
- package/dist/components/field.js +1 -1
- package/dist/components/field.js.map +1 -1
- package/dist/components/flex.d.ts +0 -2
- package/dist/components/flex.js.map +1 -1
- package/dist/components/grid.d.ts +0 -2
- package/dist/components/grid.js.map +1 -1
- package/dist/components/group.d.ts +0 -2
- package/dist/components/group.js.map +1 -1
- package/dist/components/heading.d.ts +1 -3
- package/dist/components/heading.js.map +1 -1
- package/dist/components/hover-card.d.ts +1 -3
- package/dist/components/hover-card.js.map +1 -1
- package/dist/components/input-group.d.ts +0 -2
- package/dist/components/input-group.js.map +1 -1
- package/dist/components/input-otp.d.ts +0 -2
- package/dist/components/input-otp.js.map +1 -1
- package/dist/components/input.d.ts +0 -2
- package/dist/components/input.js.map +1 -1
- package/dist/components/kbd.d.ts +0 -2
- package/dist/components/kbd.js.map +1 -1
- package/dist/components/label.d.ts +1 -3
- package/dist/components/label.js.map +1 -1
- package/dist/components/list.d.ts +1 -3
- package/dist/components/list.js.map +1 -1
- package/dist/components/logo.d.ts +0 -2
- package/dist/components/marker.d.ts +1 -3
- package/dist/components/marker.js.map +1 -1
- package/dist/components/mask-input.d.ts +1 -3
- package/dist/components/mask-input.js +1 -1
- package/dist/components/mask-input.js.map +1 -1
- package/dist/components/meter.d.ts +21 -0
- package/dist/components/meter.js +2 -0
- package/dist/components/meter.js.map +1 -0
- package/dist/components/native-select.d.ts +0 -2
- package/dist/components/native-select.js.map +1 -1
- package/dist/components/navigation-menu.d.ts +1 -3
- package/dist/components/navigation-menu.js.map +1 -1
- package/dist/components/number-field.d.ts +1 -3
- package/dist/components/number-field.js +1 -1
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/pagination.d.ts +0 -2
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/phone-input.d.ts +0 -2
- package/dist/components/phone-input.js +1 -1
- package/dist/components/phone-input.js.map +1 -1
- package/dist/components/pie-chart.d.ts +1 -3
- package/dist/components/pie-chart.js.map +1 -1
- package/dist/components/popover.d.ts +1 -3
- package/dist/components/popover.js.map +1 -1
- package/dist/components/progress.d.ts +0 -2
- package/dist/components/progress.js +1 -1
- package/dist/components/progress.js.map +1 -1
- package/dist/components/radio-group.d.ts +0 -2
- package/dist/components/radio-group.js +1 -1
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/resizable.d.ts +0 -2
- package/dist/components/resizable.js.map +1 -1
- package/dist/components/ring-progress.d.ts +0 -2
- package/dist/components/ring-progress.js +1 -1
- package/dist/components/ring-progress.js.map +1 -1
- package/dist/components/scroll-area.d.ts +0 -2
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/select.d.ts +1 -3
- package/dist/components/select.js.map +1 -1
- package/dist/components/separator.d.ts +1 -3
- package/dist/components/separator.js.map +1 -1
- package/dist/components/sidebar.d.ts +2 -4
- package/dist/components/sidebar.js +1 -1
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/simple-grid.d.ts +0 -2
- package/dist/components/simple-grid.js.map +1 -1
- package/dist/components/skeleton.d.ts +0 -2
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/slider.d.ts +0 -2
- package/dist/components/slider.js.map +1 -1
- package/dist/components/sonner.d.ts +0 -2
- package/dist/components/sonner.js.map +1 -1
- package/dist/components/spinner.d.ts +0 -2
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/stack.d.ts +0 -2
- package/dist/components/stack.js.map +1 -1
- package/dist/components/stepper.d.ts +1 -3
- package/dist/components/stepper.js +1 -1
- package/dist/components/stepper.js.map +1 -1
- package/dist/components/switch.d.ts +0 -2
- package/dist/components/switch.js +1 -1
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table.d.ts +0 -2
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.d.ts +1 -3
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/text.d.ts +1 -3
- package/dist/components/text.js.map +1 -1
- package/dist/components/textarea.d.ts +0 -2
- package/dist/components/textarea.js.map +1 -1
- package/dist/components/theme.d.ts +0 -2
- package/dist/components/theme.js.map +1 -1
- package/dist/components/timeline.d.ts +0 -2
- package/dist/components/timeline.js.map +1 -1
- package/dist/components/toggle-group.d.ts +1 -3
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle.d.ts +1 -3
- package/dist/components/toggle.js +1 -1
- package/dist/components/toggle.js.map +1 -1
- package/dist/components/toolbar.d.ts +30 -0
- package/dist/components/toolbar.js +2 -0
- package/dist/components/toolbar.js.map +1 -0
- package/dist/components/tooltip.d.ts +1 -3
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/unstyled-button.d.ts +1 -3
- package/dist/components/unstyled-button.js.map +1 -1
- package/dist/components/visibility.d.ts +0 -2
- package/dist/components/visibility.js.map +1 -1
- package/dist/hooks/use-breakpoint-value.d.ts +0 -2
- package/dist/hooks/use-breakpoint-value.js.map +1 -1
- package/dist/hooks/use-breakpoint.d.ts +0 -2
- package/dist/hooks/use-breakpoint.js.map +1 -1
- package/dist/hooks/use-disclosure.d.ts +0 -2
- package/dist/hooks/use-disclosure.js.map +1 -1
- package/dist/hooks/use-document-visibility.d.ts +0 -2
- package/dist/hooks/use-document-visibility.js.map +1 -1
- package/dist/hooks/use-hotkeys.d.ts +1 -1
- package/dist/hooks/use-idle.d.ts +0 -2
- package/dist/hooks/use-idle.js.map +1 -1
- package/dist/hooks/use-interval.d.ts +0 -2
- package/dist/hooks/use-interval.js.map +1 -1
- package/dist/hooks/use-local-storage.d.ts +0 -2
- package/dist/hooks/use-local-storage.js.map +1 -1
- package/dist/hooks/use-mask.d.ts +0 -2
- package/dist/hooks/use-mask.js.map +1 -1
- package/dist/hooks/use-mobile.d.ts +0 -2
- package/dist/hooks/use-mobile.js.map +1 -1
- package/dist/index.d.ts +21 -17
- package/dist/index.js +1 -1
- package/dist/lib/as-child.d.ts +1 -1
- package/dist/lib/as-child.js.map +1 -1
- package/dist/lib/badge.d.ts +0 -2
- package/dist/lib/badge.js.map +1 -1
- package/dist/lib/button.d.ts +0 -2
- package/dist/lib/button.js.map +1 -1
- package/dist/lib/color.d.ts +0 -2
- package/dist/lib/color.js.map +1 -1
- package/dist/lib/compose-refs.d.ts +0 -2
- package/dist/lib/compose-refs.js.map +1 -1
- package/dist/lib/progress.d.ts +0 -2
- package/dist/lib/progress.js.map +1 -1
- package/dist/lib/utils.d.ts +0 -2
- package/dist/lib/utils.js.map +1 -1
- package/dist/logo--R3_XDgA.js.map +1 -1
- package/dist/postcss.config.js.map +1 -1
- package/dist/resolve-class-name-BurP8ngI.js.map +1 -1
- package/dist/skills/uselets-ui/SKILL.md +3 -3
- package/dist/skills/uselets-ui/references/component-catalog.md +14 -2
- package/dist/skills/uselets-ui/references/package-guide.md +3 -3
- package/dist/{use-hotkeys-D1_TEIwN.d.ts → use-hotkeys-BVm0IGb8.d.ts} +1 -5
- package/dist/use-hotkeys-YDJmGWX6.js.map +1 -1
- package/package.json +14 -14
- package/skills/uselets-ui/SKILL.md +3 -3
- package/skills/uselets-ui/references/component-catalog.md +14 -2
- package/skills/uselets-ui/references/package-guide.md +3 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{
|
|
1
|
+
import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Dialog as t,DialogContent as n,DialogDescription as r,DialogHeader as i,DialogTitle as a}from"./dialog.js";import{useFieldControlId as o}from"./field.js";import{InputGroup as s,InputGroupAddon as c}from"./input-group.js";import{IconCheck as l,IconSearch as u}from"@tabler/icons-react";import{jsx as d,jsxs as f}from"react/jsx-runtime";import{Command as p}from"cmdk";function Command({className:t,...n}){return/* @__PURE__ */ d(p,{"data-slot":`command`,className:e(`flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground`,t),...n})}function CommandDialog({title:o=`Command Palette`,description:s=`Search for a command to run...`,children:c,className:l,showCloseButton:u=!1,size:p=`sm`,...m}){return/* @__PURE__ */ f(t,{size:p,...m,children:[/* @__PURE__ */ f(i,{className:`sr-only`,children:[/* @__PURE__ */ d(a,{children:o}),/* @__PURE__ */ d(r,{children:s})]}),/* @__PURE__ */ d(n,{className:e(`top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0`,l),showCloseButton:u,children:c})]})}function CommandInput({className:t,id:n,...r}){let i=o(n);return/* @__PURE__ */ d(`div`,{"data-slot":`command-input-wrapper`,className:`p-1 pb-0`,children:/* @__PURE__ */ f(s,{className:e(`h-8! rounded-lg! border-input/30 bg-input/30 shadow-none!`,`*:data-[slot=input-group-addon]:pl-2!`),children:[/* @__PURE__ */ d(p.Input,{id:i,"data-slot":`command-input`,className:e(`w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,t),...r}),/* @__PURE__ */ d(c,{children:/* @__PURE__ */ d(u,{className:`size-4 shrink-0 opacity-50`})})]})})}function CommandList({className:t,...n}){return/* @__PURE__ */ d(p.List,{"data-slot":`command-list`,className:e(`no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none`,t),...n})}function CommandEmpty({className:t,...n}){return/* @__PURE__ */ d(p.Empty,{"data-slot":`command-empty`,className:e(`py-6 text-center text-sm`,t),...n})}function CommandGroup({className:t,...n}){return/* @__PURE__ */ d(p.Group,{"data-slot":`command-group`,className:e(`overflow-hidden p-1 text-foreground`,`**:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5`,`**:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium`,`**:[[cmdk-group-heading]]:text-muted-foreground`,t),...n})}function CommandSeparator({className:t,...n}){return/* @__PURE__ */ d(p.Separator,{"data-slot":`command-separator`,className:e(`-mx-1 h-px bg-border`,t),...n})}function CommandItem({className:t,children:n,...r}){return/* @__PURE__ */ f(p.Item,{"data-slot":`command-item`,className:e(`group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none`,`in-data-[slot=dialog-content]:rounded-lg!`,`data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50`,`data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground`,`[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,t),...r,children:[n,/* @__PURE__ */ d(l,{className:e(`ml-auto opacity-0`,`group-has-data-[slot=command-shortcut]/command-item:hidden`,`group-data-[checked=true]/command-item:opacity-100`)})]})}function CommandShortcut({className:t,...n}){return/* @__PURE__ */ d(`span`,{"data-slot":`command-shortcut`,className:e(`ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground`,t),...n})}export{Command,CommandDialog,CommandEmpty,CommandGroup,CommandInput,CommandItem,CommandList,CommandSeparator,CommandShortcut};
|
|
2
2
|
//# sourceMappingURL=command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","names":["CommandPrimitive","Command$1","props","cn","className","Dialog","DialogHeader","DialogTitle","title","DialogDescription","description","DialogContent","fieldControlId","useFieldControlId","id","InputGroup","InputGroupAddon","IconSearch","children","IconCheck"],"sources":["../../src/components/command.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { IconCheck, IconSearch } from '@tabler/icons-react'\nimport { Command as CommandPrimitive } from 'cmdk'\n\nimport { cn } from '../lib/utils'\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog'\nimport { useFieldControlId } from './field'\nimport { InputGroup, InputGroupAddon } from './input-group'\n\nexport type CommandProps = React.ComponentProps<typeof CommandPrimitive>\n\nexport type CommandDialogProps = Omit<React.ComponentProps<typeof Dialog>, 'children'> & {\n children?: React.ReactNode\n /**\n * Dialog title, read by screen readers only.\n * @default 'Command Palette'\n */\n title?: string\n /**\n * Dialog description, read by screen readers only.\n * @default 'Search for a command to run...'\n */\n description?: string\n /** Classes for the dialog content. */\n className?: string\n /**\n * Shows the X button of the dialog.\n * @default false\n */\n showCloseButton?: boolean\n}\n\nexport type CommandInputProps = React.ComponentProps<typeof CommandPrimitive.Input>\n\nexport type CommandListProps = React.ComponentProps<typeof CommandPrimitive.List>\n\nexport type CommandEmptyProps = React.ComponentProps<typeof CommandPrimitive.Empty>\n\nexport type CommandGroupProps = React.ComponentProps<typeof CommandPrimitive.Group>\n\nexport type CommandSeparatorProps = React.ComponentProps<typeof CommandPrimitive.Separator>\n\nexport type CommandItemProps = React.ComponentProps<typeof CommandPrimitive.Item>\n\nexport type CommandShortcutProps = React.ComponentProps<'span'>\n\nfunction Command({ className, ...props }: CommandProps) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n 'flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n showCloseButton = false,\n size = 'sm',\n ...props\n}: CommandDialogProps) {\n return (\n <Dialog size={size} {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn('top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0', className)}\n showCloseButton={showCloseButton}\n >\n {children}\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({ className, id, ...props }: CommandInputProps) {\n const fieldControlId = useFieldControlId(id)\n\n return (\n <div data-slot=\"command-input-wrapper\" className=\"p-1 pb-0\">\n <InputGroup\n className={cn(\n 'h-8! rounded-lg! border-input/30 bg-input/30 shadow-none!',\n '*:data-[slot=input-group-addon]:pl-2!'\n )}\n >\n <CommandPrimitive.Input\n id={fieldControlId}\n data-slot=\"command-input\"\n className={cn('w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50', className)}\n {...props}\n />\n <InputGroupAddon>\n <IconSearch className=\"size-4 shrink-0 opacity-50\" />\n </InputGroupAddon>\n </InputGroup>\n </div>\n )\n}\n\nfunction CommandList({ className, ...props }: CommandListProps) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none', className)}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({ className, ...props }: CommandEmptyProps) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn('py-6 text-center text-sm', className)}\n {...props}\n />\n )\n}\n\nfunction CommandGroup({ className, ...props }: CommandGroupProps) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'overflow-hidden p-1 text-foreground',\n '**:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5',\n '**:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium',\n '**:[[cmdk-group-heading]]:text-muted-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({ className, ...props }: CommandSeparatorProps) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('-mx-1 h-px bg-border', className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({ className, children, ...props }: CommandItemProps) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n 'group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none',\n 'in-data-[slot=dialog-content]:rounded-lg!',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n 'data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground',\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <IconCheck\n className={cn(\n 'ml-auto opacity-0',\n 'group-has-data-[slot=command-shortcut]/command-item:hidden',\n 'group-data-[checked=true]/command-item:opacity-100'\n )}\n />\n </CommandPrimitive.Item>\n )\n}\n\nfunction CommandShortcut({ className, ...props }: CommandShortcutProps) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n 'ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut\n}\n"],"mappings":"kcA+CA,SAAS,QAAQ,CAAE,YAAW,GAAGE,GAAuB,CACtD,MACE,kBAACF,EAAD,CACE,YAAU,UACV,UAAWG,EACT,6FACAC,CACF,EACA,GAAIF,CACL,CAAA,CAEL,CAEA,SAAS,cAAc,CACrB,QAAQ,kBACR,cAAc,iCACd,WACA,YACA,kBAAkB,GAClB,OAAO,KACP,GAAGA,GACkB,CACrB,MACE,kBAACG,EAAD,CAAc,OAAM,GAAIH,EAAxB,SAAA,CACE,kBAACI,EAAD,CAAc,UAAU,UAAxB,SAAA,CACE,kBAACC,EAAD,CAAA,SAAcC,CAAmB,CAAA,EACjC,kBAACC,EAAD,CAAA,SAAoBC,CAA+B,CAAA,CACvC,CACd,CAAA,EAAA,kBAACC,EAAD,CACE,UAAWR,EAAG,wDAAyDC,CAAS,EAC/D,kBAEhB,UACY,CAAA,CACT,
|
|
1
|
+
{"version":3,"file":"command.js","names":["CommandPrimitive","Command$1","props","cn","className","Dialog","DialogHeader","DialogTitle","title","DialogDescription","description","DialogContent","fieldControlId","useFieldControlId","id","InputGroup","InputGroupAddon","IconSearch","children","IconCheck"],"sources":["../../src/components/command.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { IconCheck, IconSearch } from '@tabler/icons-react'\nimport { Command as CommandPrimitive } from 'cmdk'\n\nimport { cn } from '../lib/utils'\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog'\nimport { useFieldControlId } from './field'\nimport { InputGroup, InputGroupAddon } from './input-group'\n\nexport type CommandProps = React.ComponentProps<typeof CommandPrimitive>\n\nexport type CommandDialogProps = Omit<React.ComponentProps<typeof Dialog>, 'children'> & {\n children?: React.ReactNode\n /**\n * Dialog title, read by screen readers only.\n * @default 'Command Palette'\n */\n title?: string\n /**\n * Dialog description, read by screen readers only.\n * @default 'Search for a command to run...'\n */\n description?: string\n /** Classes for the dialog content. */\n className?: string\n /**\n * Shows the X button of the dialog.\n * @default false\n */\n showCloseButton?: boolean\n}\n\nexport type CommandInputProps = React.ComponentProps<typeof CommandPrimitive.Input>\n\nexport type CommandListProps = React.ComponentProps<typeof CommandPrimitive.List>\n\nexport type CommandEmptyProps = React.ComponentProps<typeof CommandPrimitive.Empty>\n\nexport type CommandGroupProps = React.ComponentProps<typeof CommandPrimitive.Group>\n\nexport type CommandSeparatorProps = React.ComponentProps<typeof CommandPrimitive.Separator>\n\nexport type CommandItemProps = React.ComponentProps<typeof CommandPrimitive.Item>\n\nexport type CommandShortcutProps = React.ComponentProps<'span'>\n\nfunction Command({ className, ...props }: CommandProps) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n 'flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n showCloseButton = false,\n size = 'sm',\n ...props\n}: CommandDialogProps) {\n return (\n <Dialog size={size} {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn('top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0', className)}\n showCloseButton={showCloseButton}\n >\n {children}\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({ className, id, ...props }: CommandInputProps) {\n const fieldControlId = useFieldControlId(id)\n\n return (\n <div data-slot=\"command-input-wrapper\" className=\"p-1 pb-0\">\n <InputGroup\n className={cn(\n 'h-8! rounded-lg! border-input/30 bg-input/30 shadow-none!',\n '*:data-[slot=input-group-addon]:pl-2!'\n )}\n >\n <CommandPrimitive.Input\n id={fieldControlId}\n data-slot=\"command-input\"\n className={cn('w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50', className)}\n {...props}\n />\n <InputGroupAddon>\n <IconSearch className=\"size-4 shrink-0 opacity-50\" />\n </InputGroupAddon>\n </InputGroup>\n </div>\n )\n}\n\nfunction CommandList({ className, ...props }: CommandListProps) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none', className)}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({ className, ...props }: CommandEmptyProps) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn('py-6 text-center text-sm', className)}\n {...props}\n />\n )\n}\n\nfunction CommandGroup({ className, ...props }: CommandGroupProps) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'overflow-hidden p-1 text-foreground',\n '**:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5',\n '**:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium',\n '**:[[cmdk-group-heading]]:text-muted-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({ className, ...props }: CommandSeparatorProps) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('-mx-1 h-px bg-border', className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({ className, children, ...props }: CommandItemProps) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n 'group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none',\n 'in-data-[slot=dialog-content]:rounded-lg!',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n 'data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground',\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <IconCheck\n className={cn(\n 'ml-auto opacity-0',\n 'group-has-data-[slot=command-shortcut]/command-item:hidden',\n 'group-data-[checked=true]/command-item:opacity-100'\n )}\n />\n </CommandPrimitive.Item>\n )\n}\n\nfunction CommandShortcut({ className, ...props }: CommandShortcutProps) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n 'ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut\n}\n"],"mappings":"A,kcA+CA,SAAS,QAAQ,CAAE,YAAW,GAAGE,GAAuB,CACtD,MACE,kBAACF,EAAD,CACE,YAAU,UACV,UAAWG,EACT,6FACAC,CACF,EACA,GAAIF,CACL,CAAA,CAEL,CAEA,SAAS,cAAc,CACrB,QAAQ,kBACR,cAAc,iCACd,WACA,YACA,kBAAkB,GAClB,OAAO,KACP,GAAGA,GACkB,CACrB,MACE,kBAACG,EAAD,CAAc,OAAM,GAAIH,EAAxB,SAAA,CACE,kBAACI,EAAD,CAAc,UAAU,UAAxB,SAAA,CACE,kBAACC,EAAD,CAAA,SAAcC,CAAmB,CAAA,EACjC,kBAACC,EAAD,CAAA,SAAoBC,CAA+B,CAAA,CACvC,CACd,CAAA,EAAA,kBAACC,EAAD,CACE,UAAWR,EAAG,wDAAyDC,CAAS,EAC/D,kBAEhB,UACY,CAAA,CACT,C,EAEZ,CAEA,SAAS,aAAa,CAAE,YAAW,KAAI,GAAGF,GAA4B,CACpE,IAAMU,EAAiBC,EAAkBC,CAAE,EAE3C,MACE,kBAAC,MAAD,CAAK,YAAU,wBAAwB,UAAU,WAC/C,SAAA,kBAACC,EAAD,CACE,UAAWZ,EACT,4DACA,uCACF,EAJF,SAAA,CAME,kBAACH,EAAiB,MAAlB,CACE,GAAIY,EACJ,YAAU,gBACV,UAAWT,EAAG,gFAAiFC,CAAS,EACxG,GAAIF,CACL,CAAA,EACD,kBAACc,EAAD,CAAA,SACE,kBAACC,EAAD,CAAY,UAAU,4BAA8B,CAAA,CACrC,CAAA,CACP,C,EACT,CAAA,CAET,CAEA,SAAS,YAAY,CAAE,YAAW,GAAGf,GAA2B,CAC9D,MACE,kBAACF,EAAiB,KAAlB,CACE,YAAU,eACV,UAAWG,EAAG,mFAAoFC,CAAS,EAC3G,GAAIF,CACL,CAAA,CAEL,CAEA,SAAS,aAAa,CAAE,YAAW,GAAGA,GAA4B,CAChE,MACE,kBAACF,EAAiB,MAAlB,CACE,YAAU,gBACV,UAAWG,EAAG,2BAA4BC,CAAS,EACnD,GAAIF,CACL,CAAA,CAEL,CAEA,SAAS,aAAa,CAAE,YAAW,GAAGA,GAA4B,CAChE,MACE,kBAACF,EAAiB,MAAlB,CACE,YAAU,gBACV,UAAWG,EACT,sCACA,kEACA,0EACA,kDACAC,CACF,EACA,GAAIF,CACL,CAAA,CAEL,CAEA,SAAS,iBAAiB,CAAE,YAAW,GAAGA,GAAgC,CACxE,MACE,kBAACF,EAAiB,UAAlB,CACE,YAAU,oBACV,UAAWG,EAAG,uBAAwBC,CAAS,EAC/C,GAAIF,CACL,CAAA,CAEL,CAEA,SAAS,YAAY,CAAE,YAAW,WAAU,GAAGA,GAA2B,CACxE,MACE,kBAACF,EAAiB,KAAlB,CACE,YAAU,eACV,UAAWG,EACT,+HACA,4CACA,2EACA,6FACA,oFACAC,CACF,EACA,GAAIF,EAVN,SAAA,CAYGgB,EACD,kBAACC,EAAD,CACE,UAAWhB,EACT,oBACA,6DACA,oDACF,CACD,CAAA,CACoB,C,EAE3B,CAEA,SAAS,gBAAgB,CAAE,YAAW,GAAGD,GAA+B,CACtE,MACE,kBAAC,OAAD,CACE,YAAU,mBACV,UAAWC,EACT,yGACAC,CACF,EACA,GAAIF,CACL,CAAA,CAEL,C"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { VariantProps } from "class-variance-authority";
|
|
4
|
-
//#region src/components/container.d.ts
|
|
5
4
|
declare const containerVariants: (props?: ({
|
|
6
5
|
size?: "full" | "lg" | "md" | "sm" | null | undefined;
|
|
7
6
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
7
|
export type ContainerProps = React.ComponentProps<'div'> & VariantProps<typeof containerVariants>;
|
|
9
8
|
declare function Container({ className, size, ...props }: ContainerProps): React.JSX.Element;
|
|
10
|
-
//#endregion
|
|
11
9
|
export { Container, containerVariants };
|
|
12
10
|
//# sourceMappingURL=container.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","names":["containerVariants","cva","props","size","cn","className"],"sources":["../../src/components/container.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst containerVariants = cva('mx-auto w-full', {\n variants: {\n size: {\n sm: 'max-w-3xl px-4 sm:px-6',\n md: 'max-w-5xl px-4 sm:px-6 lg:px-8',\n lg: 'max-w-7xl px-4 sm:px-6 lg:px-8',\n full: 'max-w-none px-4 sm:px-6 lg:px-8'\n }\n },\n defaultVariants: {\n size: 'lg'\n }\n})\n\nexport type ContainerProps = React.ComponentProps<'div'> & VariantProps<typeof containerVariants>\n\nfunction Container({ className, size = 'lg', ...props }: ContainerProps) {\n return (\n <div data-slot=\"container\" data-size={size} className={cn(containerVariants({ size }), className)} {...props} />\n )\n}\n\nexport { Container, containerVariants }\n"],"mappings":"oKAMA,MAAMA,EAAoBC,EAAI,iBAAkB,CAC9C,SAAU,CACR,KAAM,CACJ,GAAI,yBACJ,GAAI,iCACJ,GAAI,iCACJ,KAAM,iCACR,CACF,EACA,gBAAiB,CACf,KAAM,IACR,CACF,CAAC,EAID,SAAS,UAAU,CAAE,YAAW,OAAO,KAAM,GAAGC,GAAyB,CACvE,MACE,kBAAC,MAAD,CAAK,YAAU,YAAY,YAAWC,EAAM,UAAWC,EAAGJ,EAAkB,CAAE,MAAK,CAAC,EAAGK,CAAS,EAAG,GAAIH,CAAQ,CAAA,CAEnH"}
|
|
1
|
+
{"version":3,"file":"container.js","names":["containerVariants","cva","props","size","cn","className"],"sources":["../../src/components/container.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst containerVariants = cva('mx-auto w-full', {\n variants: {\n size: {\n sm: 'max-w-3xl px-4 sm:px-6',\n md: 'max-w-5xl px-4 sm:px-6 lg:px-8',\n lg: 'max-w-7xl px-4 sm:px-6 lg:px-8',\n full: 'max-w-none px-4 sm:px-6 lg:px-8'\n }\n },\n defaultVariants: {\n size: 'lg'\n }\n})\n\nexport type ContainerProps = React.ComponentProps<'div'> & VariantProps<typeof containerVariants>\n\nfunction Container({ className, size = 'lg', ...props }: ContainerProps) {\n return (\n <div data-slot=\"container\" data-size={size} className={cn(containerVariants({ size }), className)} {...props} />\n )\n}\n\nexport { Container, containerVariants }\n"],"mappings":"A,oKAMA,MAAMA,EAAoBC,EAAI,iBAAkB,CAC9C,SAAU,CACR,KAAM,CACJ,GAAI,yBACJ,GAAI,iCACJ,GAAI,iCACJ,KAAM,iCACR,CACF,EACA,gBAAiB,CACf,KAAM,IACR,CACF,CAAC,EAID,SAAS,UAAU,CAAE,YAAW,OAAO,KAAM,GAAGC,GAAyB,CACvE,MACE,kBAAC,MAAD,CAAK,YAAU,YAAY,YAAWC,EAAM,UAAWC,EAAGJ,EAAkB,CAAE,MAAK,CAAC,EAAGK,CAAS,EAAG,GAAIH,CAAQ,CAAA,CAEnH,C"}
|
|
@@ -3,7 +3,6 @@ import { Button } from "./button.js";
|
|
|
3
3
|
import { TableProps } from "./table.js";
|
|
4
4
|
import * as React from "react";
|
|
5
5
|
import { Column as Column$1, ColumnDef as ColumnDef$1, ReactTable, RowData, RowData as RowData$1 } from "@tanstack/react-table";
|
|
6
|
-
//#region src/components/data-table.d.ts
|
|
7
6
|
declare const features: {
|
|
8
7
|
columnFilteringFeature: import("@tanstack/react-table").TableFeature;
|
|
9
8
|
rowSortingFeature: import("@tanstack/react-table").TableFeature;
|
|
@@ -172,6 +171,5 @@ declare function createDataTableSelectColumn<TData extends RowData$1>(options?:
|
|
|
172
171
|
labels?: Pick<Partial<DataTableLabels>, 'selectAllRows' | 'selectRow'>;
|
|
173
172
|
}): ColumnDef<TData>;
|
|
174
173
|
declare function DataTable<TData extends RowData$1, TValue = unknown>({ columns, data, getRowId, filterColumns, pageSize, pageSizeOptions, enableRowSelection, enableSorting, showPagination, showColumnVisibility, toolbarActions, labels, className, tableClassName, variant }: DataTableProps<TData, TValue>): React.JSX.Element;
|
|
175
|
-
//#endregion
|
|
176
174
|
export { DataTable, DataTableBody, DataTableColumnHeader, DataTableHeader, DataTablePagination, DataTableRoot, DataTableToolbar, DataTableViewOptions, type RowData, createDataTableSelectColumn };
|
|
177
175
|
//# sourceMappingURL=data-table.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{Checkbox as n}from"./checkbox.js";import{Input as r}from"./input.js";import{InputGroup as i,InputGroupAddon as a,InputGroupInput as o}from"./input-group.js";import{DropdownMenu as s,DropdownMenuCheckboxItem as c,DropdownMenuContent as l,DropdownMenuGroup as u,DropdownMenuTrigger as d}from"./dropdown-menu.js";import{Select as f,SelectContent as p,SelectGroup as m,SelectItem as h,SelectTrigger as g,SelectValue as _}from"./select.js";import{Table as v,TableBody as y,TableCell as b,TableContainer as x,TableHead as S,TableHeader as C,TableRow as w}from"./table.js";import{IconArrowsSort as T,IconChevronLeft as E,IconChevronRight as D,IconChevronsLeft as ee,IconChevronsRight as te,IconColumns3 as ne,IconSortAscending as O,IconSortDescending as k}from"@tabler/icons-react";import*as A from"react";import{jsx as j,jsxs as M}from"react/jsx-runtime";import{columnFilteringFeature as N,columnVisibilityFeature as P,createFilteredRowModel as F,createPaginatedRowModel as I,createSortedRowModel as L,filterFn_arrIncludes as R,filterFn_equals as z,filterFn_inDateRange as B,filterFn_inNumberRange as V,filterFn_includesString as H,filterFn_weakEquals as U,flexRender as W,rowPaginationFeature as G,rowSelectionFeature as K,rowSortingFeature as q,sortFn_alphanumeric as J,sortFn_basic as Y,sortFn_datetime as X,sortFn_text as re,tableFeatures as ie,useTable as ae}from"@tanstack/react-table";const oe=ie({columnFilteringFeature:N,rowSortingFeature:q,rowPaginationFeature:G,rowSelectionFeature:K,columnVisibilityFeature:P,filteredRowModel:F(),sortedRowModel:L(),paginatedRowModel:I(),filterFns:{includesString:H,inNumberRange:V,equals:z,arrIncludes:R,inDateRange:B,weakEquals:U},sortFns:{alphanumeric:J,text:re,datetime:X,basic:Y}}),Z={filterPlaceholder:`Filtrar linhas...`,filterColumnSelectorLabel:`Coluna para filtrar`,emptyMessage:`Nenhum resultado.`,columnsButton:`Colunas`,rowsPerPage:`Linhas por página`,pageOf:(e,t)=>`Página ${e} de ${t}`,goToFirstPage:`Ir para a primeira página`,goToPreviousPage:`Ir para a página anterior`,goToNextPage:`Ir para a próxima página`,goToLastPage:`Ir para a última página`,selectAllRows:`Selecionar todas as linhas`,selectRow:`Selecionar linha`},Q=A.createContext(null),$=A.createContext(null);function useDataTableContext(){let e=A.useContext(Q);if(!e)throw Error(`useDataTableContext must be used within <DataTableRoot>`);return e}function useOptionalDataTableContext(){return A.useContext(Q)}function renderToolbarActions(e,t){return typeof e==`function`?e(t):e}function getColumnLabel(e){return e?e.columnDef.meta?.label??e.id:``}function useDataTable({columns:e,data:t,getRowId:n,pageSize:r=10,enableRowSelection:i=!1,enableSorting:a=!1,enablePagination:o=!1,labels:s}){let[c,l]=A.useState([]),[u,d]=A.useState([]),[f,p]=A.useState({}),[m,h]=A.useState({pageIndex:0,pageSize:r}),[g,_]=A.useState({}),[v,y]=A.useState(r);r!==v&&(y(r),h({pageIndex:0,pageSize:r}));let b=A.useMemo(()=>({...Z,...s}),[s]),x=A.useMemo(()=>!i||e.some(e=>e.id===`select`)?e:[createDataTableSelectColumn({labels:{selectAllRows:b.selectAllRows,selectRow:b.selectRow}}),...e],[e,i,b.selectAllRows,b.selectRow]);return ae({features:oe,data:t,columns:x,getRowId:n,enableRowSelection:i,enableSorting:a,manualPagination:!o,state:{sorting:c,columnFilters:u,columnVisibility:f,rowSelection:g,pagination:m},onSortingChange:l,onColumnFiltersChange:d,onColumnVisibilityChange:p,onPaginationChange:h,onRowSelectionChange:_})}function DataTableRootControlled({table:t,labels:n,className:r,children:i}){let a={table:t,labels:A.useMemo(()=>({...Z,...n}),[n])};return/* @__PURE__ */ j(Q.Provider,{value:a,children:/* @__PURE__ */ j(`div`,{className:e(`flex w-full flex-col gap-4`,r),children:i})})}function DataTableRootUncontrolled({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o,labels:s,className:c,children:l}){let[u,d]=A.useState(0),f=A.useCallback(()=>(d(e=>e+1),()=>d(e=>e-1)),[]),p=useDataTable({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o??u>0,labels:s});return/* @__PURE__ */ j($.Provider,{value:f,children:/* @__PURE__ */ j(DataTableRootControlled,{table:p,labels:s,className:c,children:l})})}function DataTableRoot(e){if(`table`in e&&e.table!==void 0){let{table:t,labels:n,className:r,children:i}=e;return/* @__PURE__ */ j(DataTableRootControlled,{table:t,labels:n,className:r,children:i})}let{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u}=e;return/* @__PURE__ */ j(DataTableRootUncontrolled,{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u})}function DataTableColumnHeader({column:n,title:r,className:i,...a}){if(!n.getCanSort())return/* @__PURE__ */ j(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:r});let o=n.getIsSorted();return/* @__PURE__ */ M(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:[r,/* @__PURE__ */ j(t,{variant:`ghost`,color:`zinc`,size:`icon-xs`,onClick:()=>{if(o===`desc`)return n.clearSorting();n.toggleSorting(o===`asc`)},children:j(o===`desc`?k:o===`asc`?O:T,{className:`size-4`,"data-icon":`inline-end`})})]})}function DataTableViewOptions({table:n,label:r,className:i,...a}){let o=useOptionalDataTableContext(),f=n??o?.table;if(!f)throw Error("DataTableViewOptions requires a `table` prop or to be rendered within <DataTableRoot>");let p=r??o?.labels.columnsButton??Z.columnsButton,m=f.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide());return m.length===0?null:/* @__PURE__ */ M(s,{children:[/* @__PURE__ */ j(d,{asChild:!0,children:/* @__PURE__ */ M(t,{type:`button`,variant:`secondary`,size:`sm`,className:e(`ml-auto`,i),...a,children:[/* @__PURE__ */ j(ne,{"data-icon":`inline-start`}),p]})}),/* @__PURE__ */ j(l,{align:`end`,className:`w-44`,children:/* @__PURE__ */ j(u,{children:m.map(e=>/* @__PURE__ */ j(c,{checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:getColumnLabel(e)},e.id))})})]})}function DataTableToolbar({filterColumns:t,showColumnVisibility:n,toolbarActions:s,labels:c,className:l}){let{table:u,labels:d}=useDataTableContext(),f=A.useMemo(()=>c?{...d,...c}:d,[d,c]),p=A.useMemo(()=>t?Array.isArray(t)?t:[t]:[],[t]),m=renderToolbarActions(s,u),h=p.length>0,[g,_]=A.useState(p[0]),v=A.useRef(p);if(A.useEffect(()=>{for(let e of v.current)p.includes(e)||u.getColumn(e)?.setFilterValue(void 0);v.current=p},[p,u]),A.useEffect(()=>{p.length===0?_(void 0):_(e=>e&&p.includes(e)?e:p[0])},[p]),!h&&!n&&!m)return null;let y=g?u.getColumn(g):void 0,b=y?.getFilterValue()??``,handleColumnChange=e=>{e!==g&&(g&&u.getColumn(g)?.setFilterValue(void 0),_(e))};return/* @__PURE__ */ M(`div`,{className:e(`flex flex-col gap-2 sm:flex-row sm:items-center`,l),children:[h&&y?p.length>1?/* @__PURE__ */ M(i,{className:`h-8 w-full sm:max-w-md`,children:[/* @__PURE__ */ j(a,{align:`inline-start`,className:`pr-0`,children:/* @__PURE__ */ j(`select`,{"aria-label":f.filterColumnSelectorLabel,value:g,onChange:e=>handleColumnChange(e.target.value),className:`cursor-pointer appearance-none border-0 bg-transparent pr-1 text-sm font-medium text-foreground outline-none focus:outline-none`,children:p.map(e=>/* @__PURE__ */ j(`option`,{value:e,children:getColumnLabel(u.getColumn(e))},e))})}),/* @__PURE__ */ j(o,{placeholder:f.filterPlaceholder,value:b,onChange:e=>y.setFilterValue(e.target.value)})]}):/* @__PURE__ */ j(r,{placeholder:f.filterPlaceholder,value:b,onChange:e=>y.setFilterValue(e.target.value),className:`h-8 w-full sm:max-w-xs`}):null,/* @__PURE__ */ M(`div`,{className:`flex flex-1 items-center justify-end gap-2`,children:[m,n?/* @__PURE__ */ j(DataTableViewOptions,{table:u,label:f.columnsButton,className:`ml-0`}):null]})]})}function DataTableHeader({className:e}={}){let{table:t}=useDataTableContext();return/* @__PURE__ */ j(C,{className:e,children:t.getHeaderGroups().map(e=>/* @__PURE__ */ j(w,{children:e.headers.map(e=>/* @__PURE__ */ j(S,{colSpan:e.colSpan,children:e.isPlaceholder?null:W(e.column.columnDef.header,e.getContext())},e.id))},e.id))})}function DataTableBody({emptyMessage:e,className:t}={}){let{table:n,labels:r}=useDataTableContext(),i=n.getRowModel().rows,a=n.getVisibleLeafColumns().length,o=e??r.emptyMessage;return/* @__PURE__ */ j(y,{className:t,children:i.length===0?/* @__PURE__ */ j(w,{children:/* @__PURE__ */ j(b,{colSpan:a,className:`h-24 text-center`,children:o})}):i.map(e=>/* @__PURE__ */ j(w,{"data-state":e.getIsSelected()?`selected`:void 0,children:e.getVisibleCells().map(e=>/* @__PURE__ */ j(b,{children:W(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})}function DataTablePagination({table:n,pageSizeOptions:r=[10,20,30,40,50],labels:i,className:a,...o}){let s=useOptionalDataTableContext(),c=A.useContext($);A.useLayoutEffect(()=>c?.(),[c]);let l=n??s?.table;if(!l)throw Error("DataTablePagination requires a `table` prop or to be rendered within <DataTableRoot>");let u=A.useMemo(()=>({...Z,...s?.labels,...i}),[s?.labels,i]),d=l.getPageCount(),v=Math.max(d,1),y=l.state.pagination.pageIndex;return/* @__PURE__ */ j(`div`,{className:e(`flex items-center justify-end gap-4 px-2`,a),...o,children:/* @__PURE__ */ M(`div`,{className:`flex items-center gap-6 lg:gap-8`,children:[/* @__PURE__ */ M(`div`,{className:`hidden items-center gap-2 sm:flex`,children:[/* @__PURE__ */ j(`p`,{className:`text-sm font-medium`,children:u.rowsPerPage}),/* @__PURE__ */ M(f,{value:`${l.state.pagination.pageSize}`,onValueChange:e=>e!==null&&l.setPageSize(Number(e)),children:[/* @__PURE__ */ j(g,{size:`sm`,className:`h-8 w-20`,children:/* @__PURE__ */ j(_,{})}),/* @__PURE__ */ j(p,{side:`top`,children:/* @__PURE__ */ j(m,{children:r.map(e=>/* @__PURE__ */ j(h,{value:`${e}`,children:e},e))})})]})]}),/* @__PURE__ */ j(`div`,{className:`text-sm font-medium`,children:u.pageOf(y+1,v)}),/* @__PURE__ */ M(`div`,{className:`flex items-center gap-1`,children:[/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>l.setPageIndex(0),disabled:!l.getCanPreviousPage(),"aria-label":u.goToFirstPage,children:/* @__PURE__ */ j(ee,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>l.previousPage(),disabled:!l.getCanPreviousPage(),"aria-label":u.goToPreviousPage,children:/* @__PURE__ */ j(E,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>l.nextPage(),disabled:!l.getCanNextPage(),"aria-label":u.goToNextPage,children:/* @__PURE__ */ j(D,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>l.setPageIndex(d-1),disabled:!l.getCanNextPage(),"aria-label":u.goToLastPage,children:/* @__PURE__ */ j(te,{})})]})]})})}function createDataTableSelectColumn(e){let t=e?.labels?.selectAllRows??Z.selectAllRows,r=e?.labels?.selectRow??Z.selectRow;return{id:`select`,enableSorting:!1,enableHiding:!1,header:({table:e})=>/* @__PURE__ */ j(n,{"aria-label":t,checked:e.getIsAllPageRowsSelected(),indeterminate:!e.getIsAllPageRowsSelected()&&e.getIsSomePageRowsSelected(),onCheckedChange:t=>e.toggleAllPageRowsSelected(t)}),cell:({row:e})=>/* @__PURE__ */ j(n,{"aria-label":r,checked:e.getIsSelected(),indeterminate:!e.getIsSelected()&&e.getIsSomeSelected(),disabled:!e.getCanSelect(),onCheckedChange:t=>e.toggleSelected(t)})}}function DataTable({columns:e,data:t,getRowId:n,filterColumns:r,pageSize:i=10,pageSizeOptions:a,enableRowSelection:o=!1,enableSorting:s=!1,showPagination:c=!1,showColumnVisibility:l=!1,toolbarActions:u,labels:d,className:f,tableClassName:p,variant:m}){return/* @__PURE__ */ M(DataTableRoot,{columns:e,data:t,getRowId:n,pageSize:i,enableRowSelection:o,enableSorting:s,enablePagination:c,labels:d,className:f,children:[/* @__PURE__ */ j(DataTableToolbar,{filterColumns:r,showColumnVisibility:l,toolbarActions:u}),/* @__PURE__ */ j(x,{children:/* @__PURE__ */ M(v,{className:p,variant:m,children:[/* @__PURE__ */ j(DataTableHeader,{}),/* @__PURE__ */ j(DataTableBody,{})]})}),c?/* @__PURE__ */ j(DataTablePagination,{pageSizeOptions:a}):null]})}export{DataTable,DataTableBody,DataTableColumnHeader,DataTableHeader,DataTablePagination,DataTableRoot,DataTableToolbar,DataTableViewOptions,createDataTableSelectColumn,Z as defaultDataTableLabels,useDataTable,useDataTableContext};
|
|
1
|
+
import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{Checkbox as n}from"./checkbox.js";import{DropdownMenu as r,DropdownMenuCheckboxItem as i,DropdownMenuContent as a,DropdownMenuGroup as o,DropdownMenuTrigger as s}from"./dropdown-menu.js";import{Input as c}from"./input.js";import{InputGroup as l,InputGroupAddon as u,InputGroupInput as d}from"./input-group.js";import{Select as f,SelectContent as p,SelectGroup as m,SelectItem as h,SelectTrigger as g,SelectValue as _}from"./select.js";import{Table as v,TableBody as y,TableCell as b,TableContainer as x,TableHead as S,TableHeader as C,TableRow as w}from"./table.js";import{IconArrowsSort as T,IconChevronLeft as E,IconChevronRight as D,IconChevronsLeft as ee,IconChevronsRight as te,IconColumns3 as ne,IconSortAscending as O,IconSortDescending as k}from"@tabler/icons-react";import*as A from"react";import{jsx as j,jsxs as M}from"react/jsx-runtime";import{columnFilteringFeature as N,columnVisibilityFeature as P,createFilteredRowModel as F,createPaginatedRowModel as I,createSortedRowModel as L,filterFn_arrIncludes as R,filterFn_equals as z,filterFn_inDateRange as B,filterFn_inNumberRange as V,filterFn_includesString as H,filterFn_weakEquals as U,flexRender as W,rowPaginationFeature as G,rowSelectionFeature as K,rowSortingFeature as q,sortFn_alphanumeric as J,sortFn_basic as Y,sortFn_datetime as X,sortFn_text as re,tableFeatures as ie,useTable as ae}from"@tanstack/react-table";const oe=ie({columnFilteringFeature:N,rowSortingFeature:q,rowPaginationFeature:G,rowSelectionFeature:K,columnVisibilityFeature:P,filteredRowModel:F(),sortedRowModel:L(),paginatedRowModel:I(),filterFns:{includesString:H,inNumberRange:V,equals:z,arrIncludes:R,inDateRange:B,weakEquals:U},sortFns:{alphanumeric:J,text:re,datetime:X,basic:Y}}),Z={filterPlaceholder:`Filtrar linhas...`,filterColumnSelectorLabel:`Coluna para filtrar`,emptyMessage:`Nenhum resultado.`,columnsButton:`Colunas`,rowsPerPage:`Linhas por página`,pageOf:(e,t)=>`Página ${e} de ${t}`,goToFirstPage:`Ir para a primeira página`,goToPreviousPage:`Ir para a página anterior`,goToNextPage:`Ir para a próxima página`,goToLastPage:`Ir para a última página`,selectAllRows:`Selecionar todas as linhas`,selectRow:`Selecionar linha`},Q=A.createContext(null),$=A.createContext(null);function useDataTableContext(){let e=A.useContext(Q);if(!e)throw Error(`useDataTableContext must be used within <DataTableRoot>`);return e}function useOptionalDataTableContext(){return A.useContext(Q)}function renderToolbarActions(e,t){return typeof e==`function`?e(t):e}function getColumnLabel(e){return e?e.columnDef.meta?.label??e.id:``}function useDataTable({columns:e,data:t,getRowId:n,pageSize:r=10,enableRowSelection:i=!1,enableSorting:a=!1,enablePagination:o=!1,labels:s}){let[c,l]=A.useState([]),[u,d]=A.useState([]),[f,p]=A.useState({}),[m,h]=A.useState({pageIndex:0,pageSize:r}),[g,_]=A.useState({}),[v,y]=A.useState(r);r!==v&&(y(r),h({pageIndex:0,pageSize:r}));let b=A.useMemo(()=>({...Z,...s}),[s]),x=A.useMemo(()=>!i||e.some(e=>e.id===`select`)?e:[createDataTableSelectColumn({labels:{selectAllRows:b.selectAllRows,selectRow:b.selectRow}}),...e],[e,i,b.selectAllRows,b.selectRow]);return ae({features:oe,data:t,columns:x,getRowId:n,enableRowSelection:i,enableSorting:a,manualPagination:!o,state:{sorting:c,columnFilters:u,columnVisibility:f,rowSelection:g,pagination:m},onSortingChange:l,onColumnFiltersChange:d,onColumnVisibilityChange:p,onPaginationChange:h,onRowSelectionChange:_})}function DataTableRootControlled({table:t,labels:n,className:r,children:i}){let a={table:t,labels:A.useMemo(()=>({...Z,...n}),[n])};return/* @__PURE__ */ j(Q.Provider,{value:a,children:/* @__PURE__ */ j(`div`,{className:e(`flex w-full flex-col gap-4`,r),children:i})})}function DataTableRootUncontrolled({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o,labels:s,className:c,children:l}){let[u,d]=A.useState(0),f=A.useCallback(()=>(d(e=>e+1),()=>d(e=>e-1)),[]),p=useDataTable({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o??u>0,labels:s});return/* @__PURE__ */ j($.Provider,{value:f,children:/* @__PURE__ */ j(DataTableRootControlled,{table:p,labels:s,className:c,children:l})})}function DataTableRoot(e){if(`table`in e&&e.table!==void 0){let{table:t,labels:n,className:r,children:i}=e;return/* @__PURE__ */ j(DataTableRootControlled,{table:t,labels:n,className:r,children:i})}let{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u}=e;return/* @__PURE__ */ j(DataTableRootUncontrolled,{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u})}function DataTableColumnHeader({column:n,title:r,className:i,...a}){if(!n.getCanSort())return/* @__PURE__ */ j(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:r});let o=n.getIsSorted();return/* @__PURE__ */ M(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:[r,/* @__PURE__ */ j(t,{variant:`ghost`,color:`zinc`,size:`icon-xs`,onClick:()=>{if(o===`desc`)return n.clearSorting();n.toggleSorting(o===`asc`)},children:j(o===`desc`?k:o===`asc`?O:T,{className:`size-4`,"data-icon":`inline-end`})})]})}function DataTableViewOptions({table:n,label:c,className:l,...u}){let d=useOptionalDataTableContext(),f=n??d?.table;if(!f)throw Error("DataTableViewOptions requires a `table` prop or to be rendered within <DataTableRoot>");let p=c??d?.labels.columnsButton??Z.columnsButton,m=f.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide());return m.length===0?null:/* @__PURE__ */ M(r,{children:[/* @__PURE__ */ j(s,{asChild:!0,children:/* @__PURE__ */ M(t,{type:`button`,variant:`secondary`,size:`sm`,className:e(`ml-auto`,l),...u,children:[/* @__PURE__ */ j(ne,{"data-icon":`inline-start`}),p]})}),/* @__PURE__ */ j(a,{align:`end`,className:`w-44`,children:/* @__PURE__ */ j(o,{children:m.map(e=>/* @__PURE__ */ j(i,{checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:getColumnLabel(e)},e.id))})})]})}function DataTableToolbar({filterColumns:t,showColumnVisibility:n,toolbarActions:r,labels:i,className:a}){let{table:o,labels:s}=useDataTableContext(),f=A.useMemo(()=>i?{...s,...i}:s,[s,i]),p=A.useMemo(()=>t?Array.isArray(t)?t:[t]:[],[t]),m=renderToolbarActions(r,o),h=p.length>0,[g,_]=A.useState(p[0]),v=A.useRef(p);if(A.useEffect(()=>{for(let e of v.current)p.includes(e)||o.getColumn(e)?.setFilterValue(void 0);v.current=p},[p,o]),A.useEffect(()=>{p.length===0?_(void 0):_(e=>e&&p.includes(e)?e:p[0])},[p]),!h&&!n&&!m)return null;let y=g?o.getColumn(g):void 0,b=y?.getFilterValue()??``,handleColumnChange=e=>{e!==g&&(g&&o.getColumn(g)?.setFilterValue(void 0),_(e))};return/* @__PURE__ */ M(`div`,{className:e(`flex flex-col gap-2 sm:flex-row sm:items-center`,a),children:[h&&y?p.length>1?/* @__PURE__ */ M(l,{className:`h-8 w-full sm:max-w-md`,children:[/* @__PURE__ */ j(u,{align:`inline-start`,className:`pr-0`,children:/* @__PURE__ */ j(`select`,{"aria-label":f.filterColumnSelectorLabel,value:g,onChange:e=>handleColumnChange(e.target.value),className:`cursor-pointer appearance-none border-0 bg-transparent pr-1 text-sm font-medium text-foreground outline-none focus:outline-none`,children:p.map(e=>/* @__PURE__ */ j(`option`,{value:e,children:getColumnLabel(o.getColumn(e))},e))})}),/* @__PURE__ */ j(d,{placeholder:f.filterPlaceholder,value:b,onChange:e=>y.setFilterValue(e.target.value)})]}):/* @__PURE__ */ j(c,{placeholder:f.filterPlaceholder,value:b,onChange:e=>y.setFilterValue(e.target.value),className:`h-8 w-full sm:max-w-xs`}):null,/* @__PURE__ */ M(`div`,{className:`flex flex-1 items-center justify-end gap-2`,children:[m,n?/* @__PURE__ */ j(DataTableViewOptions,{table:o,label:f.columnsButton,className:`ml-0`}):null]})]})}function DataTableHeader({className:e}={}){let{table:t}=useDataTableContext();return/* @__PURE__ */ j(C,{className:e,children:t.getHeaderGroups().map(e=>/* @__PURE__ */ j(w,{children:e.headers.map(e=>/* @__PURE__ */ j(S,{colSpan:e.colSpan,children:e.isPlaceholder?null:W(e.column.columnDef.header,e.getContext())},e.id))},e.id))})}function DataTableBody({emptyMessage:e,className:t}={}){let{table:n,labels:r}=useDataTableContext(),i=n.getRowModel().rows,a=n.getVisibleLeafColumns().length,o=e??r.emptyMessage;return/* @__PURE__ */ j(y,{className:t,children:i.length===0?/* @__PURE__ */ j(w,{children:/* @__PURE__ */ j(b,{colSpan:a,className:`h-24 text-center`,children:o})}):i.map(e=>/* @__PURE__ */ j(w,{"data-state":e.getIsSelected()?`selected`:void 0,children:e.getVisibleCells().map(e=>/* @__PURE__ */ j(b,{children:W(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})}function DataTablePagination({table:n,pageSizeOptions:r=[10,20,30,40,50],labels:i,className:a,...o}){let s=useOptionalDataTableContext(),c=A.useContext($);A.useLayoutEffect(()=>c?.(),[c]);let l=n??s?.table;if(!l)throw Error("DataTablePagination requires a `table` prop or to be rendered within <DataTableRoot>");let u=A.useMemo(()=>({...Z,...s?.labels,...i}),[s?.labels,i]),d=l.getPageCount(),v=Math.max(d,1),y=l.state.pagination.pageIndex;return/* @__PURE__ */ j(`div`,{className:e(`flex items-center justify-end gap-4 px-2`,a),...o,children:/* @__PURE__ */ M(`div`,{className:`flex items-center gap-6 lg:gap-8`,children:[/* @__PURE__ */ M(`div`,{className:`hidden items-center gap-2 sm:flex`,children:[/* @__PURE__ */ j(`p`,{className:`text-sm font-medium`,children:u.rowsPerPage}),/* @__PURE__ */ M(f,{value:`${l.state.pagination.pageSize}`,onValueChange:e=>e!==null&&l.setPageSize(Number(e)),children:[/* @__PURE__ */ j(g,{size:`sm`,className:`h-8 w-20`,children:/* @__PURE__ */ j(_,{})}),/* @__PURE__ */ j(p,{side:`top`,children:/* @__PURE__ */ j(m,{children:r.map(e=>/* @__PURE__ */ j(h,{value:`${e}`,children:e},e))})})]})]}),/* @__PURE__ */ j(`div`,{className:`text-sm font-medium`,children:u.pageOf(y+1,v)}),/* @__PURE__ */ M(`div`,{className:`flex items-center gap-1`,children:[/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>l.setPageIndex(0),disabled:!l.getCanPreviousPage(),"aria-label":u.goToFirstPage,children:/* @__PURE__ */ j(ee,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>l.previousPage(),disabled:!l.getCanPreviousPage(),"aria-label":u.goToPreviousPage,children:/* @__PURE__ */ j(E,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>l.nextPage(),disabled:!l.getCanNextPage(),"aria-label":u.goToNextPage,children:/* @__PURE__ */ j(D,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>l.setPageIndex(d-1),disabled:!l.getCanNextPage(),"aria-label":u.goToLastPage,children:/* @__PURE__ */ j(te,{})})]})]})})}function createDataTableSelectColumn(e){let t=e?.labels?.selectAllRows??Z.selectAllRows,r=e?.labels?.selectRow??Z.selectRow;return{id:`select`,enableSorting:!1,enableHiding:!1,header:({table:e})=>/* @__PURE__ */ j(n,{"aria-label":t,checked:e.getIsAllPageRowsSelected(),indeterminate:!e.getIsAllPageRowsSelected()&&e.getIsSomePageRowsSelected(),onCheckedChange:t=>e.toggleAllPageRowsSelected(t)}),cell:({row:e})=>/* @__PURE__ */ j(n,{"aria-label":r,checked:e.getIsSelected(),indeterminate:!e.getIsSelected()&&e.getIsSomeSelected(),disabled:!e.getCanSelect(),onCheckedChange:t=>e.toggleSelected(t)})}}function DataTable({columns:e,data:t,getRowId:n,filterColumns:r,pageSize:i=10,pageSizeOptions:a,enableRowSelection:o=!1,enableSorting:s=!1,showPagination:c=!1,showColumnVisibility:l=!1,toolbarActions:u,labels:d,className:f,tableClassName:p,variant:m}){return/* @__PURE__ */ M(DataTableRoot,{columns:e,data:t,getRowId:n,pageSize:i,enableRowSelection:o,enableSorting:s,enablePagination:c,labels:d,className:f,children:[/* @__PURE__ */ j(DataTableToolbar,{filterColumns:r,showColumnVisibility:l,toolbarActions:u}),/* @__PURE__ */ j(x,{children:/* @__PURE__ */ M(v,{className:p,variant:m,children:[/* @__PURE__ */ j(DataTableHeader,{}),/* @__PURE__ */ j(DataTableBody,{})]})}),c?/* @__PURE__ */ j(DataTablePagination,{pageSizeOptions:a}):null]})}export{DataTable,DataTableBody,DataTableColumnHeader,DataTableHeader,DataTablePagination,DataTableRoot,DataTableToolbar,DataTableViewOptions,createDataTableSelectColumn,Z as defaultDataTableLabels,useDataTable,useDataTableContext};
|
|
2
2
|
//# sourceMappingURL=data-table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.js","names":["React","features","tableFeatures","createFilteredRowModel","createSortedRowModel","createPaginatedRowModel","filterFn_includesString","filterFn_inNumberRange","filterFn_equals","filterFn_arrIncludes","filterFn_inDateRange","filterFn_weakEquals","sortFn_alphanumeric","sortFn_text","sortFn_datetime","sortFn_basic","defaultDataTableLabels","current","total","DataTableContext","DataTablePaginationRegistryContext","ctx","actions","table","column","sorting","setSorting","columnFilters","setColumnFilters","columnVisibility","setColumnVisibility","pagination","setPagination","rowSelection","setRowSelection","previousPageSize","setPreviousPageSize","pageSize","mergedLabels","labels","resolvedColumns","enableRowSelection","columns","useTable","enablePagination","value","cn","className","paginationCount","setPaginationCount","registerPagination","count","props","title","sorted","Button","jsx","IconSortDescending","IconSortAscending","IconArrowsSort","tableProp","resolvedLabel","label","DropdownMenu","DropdownMenuTrigger","IconColumns3","DropdownMenuContent","DropdownMenuGroup","DropdownMenuCheckboxItem","labelsOverride","contextLabels","filterColumnIds","filterColumns","toolbarActions","hasFilter","activeFilterColumn","setActiveFilterColumn","previousFilterColumnIdsRef","id","showColumnVisibility","activeColumn","filterValue","nextId","InputGroup","InputGroupAddon","event","InputGroupInput","Input","TableHeader","TableRow","headerGroup","TableHead","header","flexRender","rows","visibleColumnCount","resolvedEmptyMessage","emptyMessage","TableBody","TableCell","row","cell","pageCount","safePageCount","pageIndex","Select","SelectTrigger","SelectValue","SelectContent","SelectGroup","pageSizeOptions","SelectItem","IconChevronsLeft","IconChevronLeft","IconChevronRight","IconChevronsRight","selectAllRows","options","selectRow","Checkbox","showPagination","TableContainer","Table","tableClassName"],"sources":["../../src/components/data-table.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport {\n IconArrowsSort,\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n IconColumns3,\n IconSortAscending,\n IconSortDescending\n} from '@tabler/icons-react'\nimport type {\n ColumnFiltersState,\n ColumnVisibilityState,\n PaginationState,\n ReactTable,\n RowData,\n RowSelectionState,\n SortingState,\n Column as TSColumn,\n ColumnDef as TSColumnDef\n} from '@tanstack/react-table'\nimport {\n columnFilteringFeature,\n columnVisibilityFeature,\n createFilteredRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n filterFn_arrIncludes,\n filterFn_equals,\n filterFn_includesString,\n filterFn_inDateRange,\n filterFn_inNumberRange,\n filterFn_weakEquals,\n flexRender,\n rowPaginationFeature,\n rowSelectionFeature,\n rowSortingFeature,\n sortFn_alphanumeric,\n sortFn_basic,\n sortFn_datetime,\n sortFn_text,\n tableFeatures,\n useTable\n} from '@tanstack/react-table'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { Checkbox } from './checkbox'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuTrigger\n} from './dropdown-menu'\nimport { Input } from './input'\nimport { InputGroup, InputGroupAddon, InputGroupInput } from './input-group'\nimport { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from './select'\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableHeader, type TableProps, TableRow } from './table'\n\nconst features = tableFeatures({\n columnFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n columnVisibilityFeature,\n filteredRowModel: createFilteredRowModel(),\n sortedRowModel: createSortedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n filterFns: {\n includesString: filterFn_includesString,\n inNumberRange: filterFn_inNumberRange,\n equals: filterFn_equals,\n arrIncludes: filterFn_arrIncludes,\n inDateRange: filterFn_inDateRange,\n weakEquals: filterFn_weakEquals\n },\n sortFns: {\n alphanumeric: sortFn_alphanumeric,\n text: sortFn_text,\n datetime: sortFn_datetime,\n basic: sortFn_basic\n }\n})\n\nexport type ColumnDef<TData extends RowData, TValue = unknown> = TSColumnDef<typeof features, TData, TValue>\nexport type Column<TData extends RowData, TValue = unknown> = TSColumn<typeof features, TData, TValue>\nexport type TanStackTable<TData extends RowData> = ReactTable<typeof features, TData>\nexport type { RowData } from '@tanstack/react-table'\n\ntype DataTableToolbarActions<TData extends RowData> =\n | React.ReactNode\n | ((table: TanStackTable<TData>) => React.ReactNode)\n\nexport type DataTableLabels = {\n filterPlaceholder: string\n filterColumnSelectorLabel: string\n emptyMessage: React.ReactNode\n columnsButton: string\n rowsPerPage: string\n pageOf: (current: number, total: number) => React.ReactNode\n goToFirstPage: string\n goToPreviousPage: string\n goToNextPage: string\n goToLastPage: string\n selectAllRows: string\n selectRow: string\n}\n\nexport const defaultDataTableLabels: DataTableLabels = {\n filterPlaceholder: 'Filtrar linhas...',\n filterColumnSelectorLabel: 'Coluna para filtrar',\n emptyMessage: 'Nenhum resultado.',\n columnsButton: 'Colunas',\n rowsPerPage: 'Linhas por página',\n pageOf: (current, total) => `Página ${current} de ${total}`,\n goToFirstPage: 'Ir para a primeira página',\n goToPreviousPage: 'Ir para a página anterior',\n goToNextPage: 'Ir para a próxima página',\n goToLastPage: 'Ir para a última página',\n selectAllRows: 'Selecionar todas as linhas',\n selectRow: 'Selecionar linha'\n}\n\nexport type DataTableProps<TData extends RowData, TValue = unknown> = {\n /** Column definitions (TanStack `ColumnDef`). */\n columns: ColumnDef<TData, TValue>[]\n /** Rows to show. */\n data: TData[]\n /** Returns a stable id for each row. Recommended with row selection. */\n getRowId?: (originalRow: TData, index: number, parent?: { id: string }) => string\n /** Column id, or ids, searched by the text filter. With two or more, a select picks the column. */\n filterColumns?: string | string[]\n /**\n * Rows per page when pagination is on.\n * @default 10\n */\n pageSize?: number\n /**\n * Options of the rows-per-page select.\n * @default [10, 20, 30, 40, 50]\n */\n pageSizeOptions?: number[]\n /**\n * Adds a checkbox column for selecting rows.\n * @default false\n */\n enableRowSelection?: boolean\n /**\n * Makes columns sortable.\n * @default false\n */\n enableSorting?: boolean\n /**\n * Shows the pagination footer.\n * @default false\n */\n showPagination?: boolean\n /**\n * Shows the menu to hide and show columns.\n * @default false\n */\n showColumnVisibility?: boolean\n /** Content on the right of the toolbar, or a function that receives the `table`. */\n toolbarActions?: DataTableToolbarActions<TData>\n /** Overrides the default pt-BR texts. */\n labels?: Partial<DataTableLabels>\n /** Classes for the outer wrapper. */\n className?: string\n /** Classes for the `<table>`. */\n tableClassName?: string\n /**\n * Table chrome: `line` or `outline`.\n * @default 'line'\n */\n variant?: TableProps['variant']\n}\n\nexport type DataTableColumnHeaderProps<TData extends RowData, TValue> = React.ComponentProps<'div'> & {\n /** The column, from the `header` render function. */\n column: Column<TData, TValue>\n /** Header text. */\n title: React.ReactNode\n}\n\nexport type DataTablePaginationProps<TData extends RowData> = React.ComponentProps<'div'> & {\n table?: TanStackTable<TData>\n pageSizeOptions?: number[]\n labels?: Partial<DataTableLabels>\n}\n\nexport type DataTableViewOptionsProps<TData extends RowData> = React.ComponentProps<typeof Button> & {\n table?: TanStackTable<TData>\n label?: React.ReactNode\n}\n\nexport type UseDataTableOptions<TData extends RowData, TValue = unknown> = {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n getRowId?: (originalRow: TData, index: number, parent?: { id: string }) => string\n pageSize?: number\n enableRowSelection?: boolean\n enableSorting?: boolean\n enablePagination?: boolean\n labels?: Partial<DataTableLabels>\n}\n\nexport type DataTableRootProps<TData extends RowData, TValue = unknown> = {\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n} & (\n | { table: TanStackTable<TData>; columns?: never; data?: never }\n | (Omit<UseDataTableOptions<TData, TValue>, 'labels'> & { table?: never })\n)\n\nexport type DataTableToolbarProps<TData extends RowData> = {\n filterColumns?: string | string[]\n showColumnVisibility?: boolean\n toolbarActions?: DataTableToolbarActions<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n}\n\nexport type DataTableHeaderProps = {\n className?: string\n}\n\nexport type DataTableBodyProps = {\n /** Content shown when there are no rows. */\n emptyMessage?: React.ReactNode\n className?: string\n}\n\ntype DataTableContextValue<TData extends RowData> = {\n table: TanStackTable<TData>\n labels: DataTableLabels\n}\n\nconst DataTableContext = React.createContext<DataTableContextValue<RowData> | null>(null)\n\n// Lets a `DataTablePagination` rendered inside an uncontrolled `DataTableRoot` turn pagination on while mounted.\n// Returns the function that unregisters it.\nconst DataTablePaginationRegistryContext = React.createContext<(() => () => void) | null>(null)\n\nexport function useDataTableContext<TData extends RowData>(): DataTableContextValue<TData> {\n const ctx = React.useContext(DataTableContext)\n if (!ctx) {\n throw new Error('useDataTableContext must be used within <DataTableRoot>')\n }\n return ctx as unknown as DataTableContextValue<TData>\n}\n\nfunction useOptionalDataTableContext<TData extends RowData>(): DataTableContextValue<TData> | null {\n const ctx = React.useContext(DataTableContext)\n return ctx as unknown as DataTableContextValue<TData> | null\n}\n\nfunction renderToolbarActions<TData extends RowData>(\n actions: DataTableToolbarActions<TData> | undefined,\n table: TanStackTable<TData>\n) {\n return typeof actions === 'function' ? actions(table) : actions\n}\n\nfunction getColumnLabel<TData extends RowData>(column: ReturnType<TanStackTable<TData>['getColumn']>): string {\n if (!column) {\n return ''\n }\n const meta = column.columnDef.meta as { label?: string } | undefined\n return meta?.label ?? column.id\n}\n\nexport function useDataTable<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n pageSize = 10,\n enableRowSelection = false,\n enableSorting = false,\n enablePagination = false,\n labels\n}: UseDataTableOptions<TData, TValue>): TanStackTable<TData> {\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<ColumnVisibilityState>({})\n const [pagination, setPagination] = React.useState<PaginationState>({\n pageIndex: 0,\n pageSize\n })\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({})\n\n // A new `pageSize` prop replaces the current page size (including one picked in the pagination select) and\n // goes back to the first page. Adjusted during render so the table never paints a page with the old size.\n const [previousPageSize, setPreviousPageSize] = React.useState(pageSize)\n if (pageSize !== previousPageSize) {\n setPreviousPageSize(pageSize)\n setPagination({ pageIndex: 0, pageSize })\n }\n\n const mergedLabels = React.useMemo(() => ({ ...defaultDataTableLabels, ...labels }), [labels])\n const resolvedColumns = React.useMemo<ColumnDef<TData, TValue>[]>(() => {\n if (!enableRowSelection) {\n return columns\n }\n if (columns.some((column) => column.id === 'select')) {\n return columns\n }\n return [\n createDataTableSelectColumn<TData>({\n labels: { selectAllRows: mergedLabels.selectAllRows, selectRow: mergedLabels.selectRow }\n }) as ColumnDef<TData, TValue>,\n ...columns\n ]\n }, [columns, enableRowSelection, mergedLabels.selectAllRows, mergedLabels.selectRow])\n\n return useTable({\n features,\n data,\n columns: resolvedColumns as ColumnDef<TData>[],\n getRowId,\n enableRowSelection,\n enableSorting,\n manualPagination: !enablePagination,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n pagination\n },\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onPaginationChange: setPagination,\n onRowSelectionChange: setRowSelection\n })\n}\n\nfunction DataTableRootControlled<TData extends RowData>({\n table,\n labels,\n className,\n children\n}: {\n table: TanStackTable<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n}) {\n const mergedLabels = React.useMemo(() => ({ ...defaultDataTableLabels, ...labels }), [labels])\n const value: DataTableContextValue<TData> = { table, labels: mergedLabels }\n return (\n <DataTableContext.Provider value={value as unknown as DataTableContextValue<RowData>}>\n <div className={cn('flex w-full flex-col gap-4', className)}>{children}</div>\n </DataTableContext.Provider>\n )\n}\n\nfunction DataTableRootUncontrolled<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels,\n className,\n children\n}: Omit<UseDataTableOptions<TData, TValue>, 'labels'> & {\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n}) {\n const [paginationCount, setPaginationCount] = React.useState(0)\n const registerPagination = React.useCallback(() => {\n setPaginationCount((count) => count + 1)\n return () => setPaginationCount((count) => count - 1)\n }, [])\n\n const table = useDataTable<TData, TValue>({\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination: enablePagination ?? paginationCount > 0,\n labels\n })\n return (\n <DataTablePaginationRegistryContext.Provider value={registerPagination}>\n <DataTableRootControlled table={table} labels={labels} className={className}>\n {children}\n </DataTableRootControlled>\n </DataTablePaginationRegistryContext.Provider>\n )\n}\n\nfunction DataTableRoot<TData extends RowData, TValue = unknown>(props: DataTableRootProps<TData, TValue>) {\n if ('table' in props && props.table !== undefined) {\n const { table, labels, className, children } = props\n return (\n <DataTableRootControlled table={table} labels={labels} className={className}>\n {children}\n </DataTableRootControlled>\n )\n }\n const {\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels,\n className,\n children\n } = props\n return (\n <DataTableRootUncontrolled<TData, TValue>\n columns={columns!}\n data={data!}\n getRowId={getRowId}\n pageSize={pageSize}\n enableRowSelection={enableRowSelection}\n enableSorting={enableSorting}\n enablePagination={enablePagination}\n labels={labels}\n className={className}\n >\n {children}\n </DataTableRootUncontrolled>\n )\n}\n\nfunction DataTableColumnHeader<TData extends RowData, TValue>({\n column,\n title,\n className,\n ...props\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return (\n <div className={cn('inline-flex items-center gap-1', className)} {...props}>\n {title}\n </div>\n )\n }\n\n const sorted = column.getIsSorted()\n\n return (\n <div className={cn('inline-flex items-center gap-1', className)} {...props}>\n {title}\n <Button\n variant=\"ghost\"\n color=\"zinc\"\n size=\"icon-xs\"\n onClick={() => {\n if (sorted === 'desc') return column.clearSorting()\n column.toggleSorting(sorted === 'asc')\n }}\n >\n {sorted === 'desc' ? (\n <IconSortDescending className=\"size-4\" data-icon=\"inline-end\" />\n ) : sorted === 'asc' ? (\n <IconSortAscending className=\"size-4\" data-icon=\"inline-end\" />\n ) : (\n <IconArrowsSort className=\"size-4\" data-icon=\"inline-end\" />\n )}\n </Button>\n </div>\n )\n}\n\nfunction DataTableViewOptions<TData extends RowData>({\n table: tableProp,\n label,\n className,\n ...props\n}: DataTableViewOptionsProps<TData>) {\n const ctx = useOptionalDataTableContext<TData>()\n const table = tableProp ?? ctx?.table\n if (!table) {\n throw new Error('DataTableViewOptions requires a `table` prop or to be rendered within <DataTableRoot>')\n }\n const resolvedLabel = label ?? ctx?.labels.columnsButton ?? defaultDataTableLabels.columnsButton\n const columns = table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n\n if (columns.length === 0) {\n return null\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" className={cn('ml-auto', className)} {...props}>\n <IconColumns3 data-icon=\"inline-start\" />\n {resolvedLabel}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44\">\n <DropdownMenuGroup>\n {columns.map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(Boolean(value))}\n >\n {getColumnLabel(column)}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nfunction DataTableToolbar<TData extends RowData>({\n filterColumns,\n showColumnVisibility,\n toolbarActions,\n labels: labelsOverride,\n className\n}: DataTableToolbarProps<TData>) {\n const { table, labels: contextLabels } = useDataTableContext<TData>()\n const labels = React.useMemo(\n () => (labelsOverride ? { ...contextLabels, ...labelsOverride } : contextLabels),\n [contextLabels, labelsOverride]\n )\n const filterColumnIds = React.useMemo<string[]>(() => {\n if (!filterColumns) {\n return []\n }\n return Array.isArray(filterColumns) ? filterColumns : [filterColumns]\n }, [filterColumns])\n\n const actions = renderToolbarActions(toolbarActions, table)\n const hasFilter = filterColumnIds.length > 0\n const [activeFilterColumn, setActiveFilterColumn] = React.useState<string | undefined>(filterColumnIds[0])\n\n // Clears the filter of a column dropped from `filterColumns`; otherwise it keeps filtering the rows with no\n // input left to show or clear it.\n const previousFilterColumnIdsRef = React.useRef(filterColumnIds)\n React.useEffect(() => {\n for (const id of previousFilterColumnIdsRef.current) {\n if (!filterColumnIds.includes(id)) {\n table.getColumn(id)?.setFilterValue(undefined)\n }\n }\n previousFilterColumnIdsRef.current = filterColumnIds\n }, [filterColumnIds, table])\n\n React.useEffect(() => {\n if (filterColumnIds.length === 0) {\n setActiveFilterColumn(undefined)\n return\n }\n setActiveFilterColumn((current) => (current && filterColumnIds.includes(current) ? current : filterColumnIds[0]))\n }, [filterColumnIds])\n\n if (!hasFilter && !showColumnVisibility && !actions) {\n return null\n }\n\n const activeColumn = activeFilterColumn ? table.getColumn(activeFilterColumn) : undefined\n const filterValue = (activeColumn?.getFilterValue() as string | undefined) ?? ''\n\n const handleColumnChange = (nextId: string) => {\n if (nextId === activeFilterColumn) {\n return\n }\n if (activeFilterColumn) {\n table.getColumn(activeFilterColumn)?.setFilterValue(undefined)\n }\n setActiveFilterColumn(nextId)\n }\n\n return (\n <div className={cn('flex flex-col gap-2 sm:flex-row sm:items-center', className)}>\n {hasFilter && activeColumn ? (\n filterColumnIds.length > 1 ? (\n <InputGroup className=\"h-8 w-full sm:max-w-md\">\n <InputGroupAddon align=\"inline-start\" className=\"pr-0\">\n <select\n aria-label={labels.filterColumnSelectorLabel}\n value={activeFilterColumn}\n onChange={(event) => handleColumnChange(event.target.value)}\n className=\"cursor-pointer appearance-none border-0 bg-transparent pr-1 text-sm font-medium text-foreground outline-none focus:outline-none\"\n >\n {filterColumnIds.map((id) => (\n <option key={id} value={id}>\n {getColumnLabel(table.getColumn(id))}\n </option>\n ))}\n </select>\n </InputGroupAddon>\n <InputGroupInput\n placeholder={labels.filterPlaceholder}\n value={filterValue}\n onChange={(event) => activeColumn.setFilterValue(event.target.value)}\n />\n </InputGroup>\n ) : (\n <Input\n placeholder={labels.filterPlaceholder}\n value={filterValue}\n onChange={(event) => activeColumn.setFilterValue(event.target.value)}\n className=\"h-8 w-full sm:max-w-xs\"\n />\n )\n ) : null}\n <div className=\"flex flex-1 items-center justify-end gap-2\">\n {actions}\n {/* `ml-0`: the container already aligns to the end, and the button's own `ml-auto` would split it from the actions. */}\n {showColumnVisibility ? (\n <DataTableViewOptions table={table} label={labels.columnsButton} className=\"ml-0\" />\n ) : null}\n </div>\n </div>\n )\n}\n\nfunction DataTableHeader<TData extends RowData>({ className }: DataTableHeaderProps = {}) {\n const { table } = useDataTableContext<TData>()\n return (\n <TableHeader className={className}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id} colSpan={header.colSpan}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n )\n}\n\nfunction DataTableBody<TData extends RowData>({ emptyMessage, className }: DataTableBodyProps = {}) {\n const { table, labels } = useDataTableContext<TData>()\n const rows = table.getRowModel().rows\n const visibleColumnCount = table.getVisibleLeafColumns().length\n const resolvedEmptyMessage = emptyMessage ?? labels.emptyMessage\n\n return (\n <TableBody className={className}>\n {rows.length === 0 ? (\n <TableRow>\n <TableCell colSpan={visibleColumnCount} className=\"h-24 text-center\">\n {resolvedEmptyMessage}\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() ? 'selected' : undefined}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n )\n}\n\nfunction DataTablePagination<TData extends RowData>({\n table: tableProp,\n pageSizeOptions = [10, 20, 30, 40, 50],\n labels: labelsOverride,\n className,\n ...props\n}: DataTablePaginationProps<TData>) {\n const ctx = useOptionalDataTableContext<TData>()\n const registerPagination = React.useContext(DataTablePaginationRegistryContext)\n // Layout effect so the first paint already shows a single page instead of every row.\n React.useLayoutEffect(() => registerPagination?.(), [registerPagination])\n const table = tableProp ?? ctx?.table\n if (!table) {\n throw new Error('DataTablePagination requires a `table` prop or to be rendered within <DataTableRoot>')\n }\n const mergedLabels = React.useMemo(\n () => ({ ...defaultDataTableLabels, ...ctx?.labels, ...labelsOverride }),\n [ctx?.labels, labelsOverride]\n )\n const pageCount = table.getPageCount()\n const safePageCount = Math.max(pageCount, 1)\n const pageIndex = table.state.pagination.pageIndex\n\n return (\n <div className={cn('flex items-center justify-end gap-4 px-2', className)} {...props}>\n <div className=\"flex items-center gap-6 lg:gap-8\">\n <div className=\"hidden items-center gap-2 sm:flex\">\n <p className=\"text-sm font-medium\">{mergedLabels.rowsPerPage}</p>\n <Select\n value={`${table.state.pagination.pageSize}`}\n onValueChange={(value) => value !== null && table.setPageSize(Number(value))}\n >\n <SelectTrigger size=\"sm\" className=\"h-8 w-20\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent side=\"top\">\n <SelectGroup>\n {pageSizeOptions.map((pageSize) => (\n <SelectItem key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n <div className=\"text-sm font-medium\">{mergedLabels.pageOf(pageIndex + 1, safePageCount)}</div>\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n className=\"hidden lg:inline-flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label={mergedLabels.goToFirstPage}\n >\n <IconChevronsLeft />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label={mergedLabels.goToPreviousPage}\n >\n <IconChevronLeft />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label={mergedLabels.goToNextPage}\n >\n <IconChevronRight />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n className=\"hidden lg:inline-flex\"\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n aria-label={mergedLabels.goToLastPage}\n >\n <IconChevronsRight />\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nfunction createDataTableSelectColumn<TData extends RowData>(options?: {\n labels?: Pick<Partial<DataTableLabels>, 'selectAllRows' | 'selectRow'>\n}): ColumnDef<TData> {\n const selectAllRows = options?.labels?.selectAllRows ?? defaultDataTableLabels.selectAllRows\n const selectRow = options?.labels?.selectRow ?? defaultDataTableLabels.selectRow\n\n return {\n id: 'select',\n enableSorting: false,\n enableHiding: false,\n header: ({ table }) => (\n <Checkbox\n aria-label={selectAllRows}\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={!table.getIsAllPageRowsSelected() && table.getIsSomePageRowsSelected()}\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(value)}\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n aria-label={selectRow}\n checked={row.getIsSelected()}\n indeterminate={!row.getIsSelected() && row.getIsSomeSelected()}\n disabled={!row.getCanSelect()}\n onCheckedChange={(value) => row.toggleSelected(value)}\n />\n )\n }\n}\n\nfunction DataTable<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n filterColumns,\n pageSize = 10,\n pageSizeOptions,\n enableRowSelection = false,\n enableSorting = false,\n showPagination = false,\n showColumnVisibility = false,\n toolbarActions,\n labels,\n className,\n tableClassName,\n variant\n}: DataTableProps<TData, TValue>) {\n return (\n <DataTableRoot<TData, TValue>\n columns={columns}\n data={data}\n getRowId={getRowId}\n pageSize={pageSize}\n enableRowSelection={enableRowSelection}\n enableSorting={enableSorting}\n enablePagination={showPagination}\n labels={labels}\n className={className}\n >\n <DataTableToolbar\n filterColumns={filterColumns}\n showColumnVisibility={showColumnVisibility}\n toolbarActions={toolbarActions}\n />\n <TableContainer>\n <Table className={tableClassName} variant={variant}>\n <DataTableHeader />\n <DataTableBody />\n </Table>\n </TableContainer>\n {showPagination ? <DataTablePagination pageSizeOptions={pageSizeOptions} /> : null}\n </DataTableRoot>\n )\n}\n\nexport {\n createDataTableSelectColumn,\n DataTable,\n DataTableBody,\n DataTableColumnHeader,\n DataTableHeader,\n DataTablePagination,\n DataTableRoot,\n DataTableToolbar,\n DataTableViewOptions\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-table.js","names":["React","features","tableFeatures","createFilteredRowModel","createSortedRowModel","createPaginatedRowModel","filterFn_includesString","filterFn_inNumberRange","filterFn_equals","filterFn_arrIncludes","filterFn_inDateRange","filterFn_weakEquals","sortFn_alphanumeric","sortFn_text","sortFn_datetime","sortFn_basic","defaultDataTableLabels","current","total","DataTableContext","DataTablePaginationRegistryContext","ctx","actions","table","column","sorting","setSorting","columnFilters","setColumnFilters","columnVisibility","setColumnVisibility","pagination","setPagination","rowSelection","setRowSelection","previousPageSize","setPreviousPageSize","pageSize","mergedLabels","labels","resolvedColumns","enableRowSelection","columns","useTable","enablePagination","value","cn","className","paginationCount","setPaginationCount","registerPagination","count","props","title","sorted","Button","jsx","IconSortDescending","IconSortAscending","IconArrowsSort","tableProp","resolvedLabel","label","DropdownMenu","DropdownMenuTrigger","IconColumns3","DropdownMenuContent","DropdownMenuGroup","DropdownMenuCheckboxItem","labelsOverride","contextLabels","filterColumnIds","filterColumns","toolbarActions","hasFilter","activeFilterColumn","setActiveFilterColumn","previousFilterColumnIdsRef","id","showColumnVisibility","activeColumn","filterValue","nextId","InputGroup","InputGroupAddon","event","InputGroupInput","Input","TableHeader","TableRow","headerGroup","TableHead","header","flexRender","rows","visibleColumnCount","resolvedEmptyMessage","emptyMessage","TableBody","TableCell","row","cell","pageCount","safePageCount","pageIndex","Select","SelectTrigger","SelectValue","SelectContent","SelectGroup","pageSizeOptions","SelectItem","IconChevronsLeft","IconChevronLeft","IconChevronRight","IconChevronsRight","selectAllRows","options","selectRow","Checkbox","showPagination","TableContainer","Table","tableClassName"],"sources":["../../src/components/data-table.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport {\n IconArrowsSort,\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n IconColumns3,\n IconSortAscending,\n IconSortDescending\n} from '@tabler/icons-react'\nimport type {\n ColumnFiltersState,\n ColumnVisibilityState,\n PaginationState,\n ReactTable,\n RowData,\n RowSelectionState,\n SortingState,\n Column as TSColumn,\n ColumnDef as TSColumnDef\n} from '@tanstack/react-table'\nimport {\n columnFilteringFeature,\n columnVisibilityFeature,\n createFilteredRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n filterFn_arrIncludes,\n filterFn_equals,\n filterFn_includesString,\n filterFn_inDateRange,\n filterFn_inNumberRange,\n filterFn_weakEquals,\n flexRender,\n rowPaginationFeature,\n rowSelectionFeature,\n rowSortingFeature,\n sortFn_alphanumeric,\n sortFn_basic,\n sortFn_datetime,\n sortFn_text,\n tableFeatures,\n useTable\n} from '@tanstack/react-table'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\nimport { Checkbox } from './checkbox'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuTrigger\n} from './dropdown-menu'\nimport { Input } from './input'\nimport { InputGroup, InputGroupAddon, InputGroupInput } from './input-group'\nimport { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from './select'\nimport { Table, TableBody, TableCell, TableContainer, TableHead, TableHeader, type TableProps, TableRow } from './table'\n\nconst features = tableFeatures({\n columnFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n columnVisibilityFeature,\n filteredRowModel: createFilteredRowModel(),\n sortedRowModel: createSortedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n filterFns: {\n includesString: filterFn_includesString,\n inNumberRange: filterFn_inNumberRange,\n equals: filterFn_equals,\n arrIncludes: filterFn_arrIncludes,\n inDateRange: filterFn_inDateRange,\n weakEquals: filterFn_weakEquals\n },\n sortFns: {\n alphanumeric: sortFn_alphanumeric,\n text: sortFn_text,\n datetime: sortFn_datetime,\n basic: sortFn_basic\n }\n})\n\nexport type ColumnDef<TData extends RowData, TValue = unknown> = TSColumnDef<typeof features, TData, TValue>\nexport type Column<TData extends RowData, TValue = unknown> = TSColumn<typeof features, TData, TValue>\nexport type TanStackTable<TData extends RowData> = ReactTable<typeof features, TData>\nexport type { RowData } from '@tanstack/react-table'\n\ntype DataTableToolbarActions<TData extends RowData> =\n | React.ReactNode\n | ((table: TanStackTable<TData>) => React.ReactNode)\n\nexport type DataTableLabels = {\n filterPlaceholder: string\n filterColumnSelectorLabel: string\n emptyMessage: React.ReactNode\n columnsButton: string\n rowsPerPage: string\n pageOf: (current: number, total: number) => React.ReactNode\n goToFirstPage: string\n goToPreviousPage: string\n goToNextPage: string\n goToLastPage: string\n selectAllRows: string\n selectRow: string\n}\n\nexport const defaultDataTableLabels: DataTableLabels = {\n filterPlaceholder: 'Filtrar linhas...',\n filterColumnSelectorLabel: 'Coluna para filtrar',\n emptyMessage: 'Nenhum resultado.',\n columnsButton: 'Colunas',\n rowsPerPage: 'Linhas por página',\n pageOf: (current, total) => `Página ${current} de ${total}`,\n goToFirstPage: 'Ir para a primeira página',\n goToPreviousPage: 'Ir para a página anterior',\n goToNextPage: 'Ir para a próxima página',\n goToLastPage: 'Ir para a última página',\n selectAllRows: 'Selecionar todas as linhas',\n selectRow: 'Selecionar linha'\n}\n\nexport type DataTableProps<TData extends RowData, TValue = unknown> = {\n /** Column definitions (TanStack `ColumnDef`). */\n columns: ColumnDef<TData, TValue>[]\n /** Rows to show. */\n data: TData[]\n /** Returns a stable id for each row. Recommended with row selection. */\n getRowId?: (originalRow: TData, index: number, parent?: { id: string }) => string\n /** Column id, or ids, searched by the text filter. With two or more, a select picks the column. */\n filterColumns?: string | string[]\n /**\n * Rows per page when pagination is on.\n * @default 10\n */\n pageSize?: number\n /**\n * Options of the rows-per-page select.\n * @default [10, 20, 30, 40, 50]\n */\n pageSizeOptions?: number[]\n /**\n * Adds a checkbox column for selecting rows.\n * @default false\n */\n enableRowSelection?: boolean\n /**\n * Makes columns sortable.\n * @default false\n */\n enableSorting?: boolean\n /**\n * Shows the pagination footer.\n * @default false\n */\n showPagination?: boolean\n /**\n * Shows the menu to hide and show columns.\n * @default false\n */\n showColumnVisibility?: boolean\n /** Content on the right of the toolbar, or a function that receives the `table`. */\n toolbarActions?: DataTableToolbarActions<TData>\n /** Overrides the default pt-BR texts. */\n labels?: Partial<DataTableLabels>\n /** Classes for the outer wrapper. */\n className?: string\n /** Classes for the `<table>`. */\n tableClassName?: string\n /**\n * Table chrome: `line` or `outline`.\n * @default 'line'\n */\n variant?: TableProps['variant']\n}\n\nexport type DataTableColumnHeaderProps<TData extends RowData, TValue> = React.ComponentProps<'div'> & {\n /** The column, from the `header` render function. */\n column: Column<TData, TValue>\n /** Header text. */\n title: React.ReactNode\n}\n\nexport type DataTablePaginationProps<TData extends RowData> = React.ComponentProps<'div'> & {\n table?: TanStackTable<TData>\n pageSizeOptions?: number[]\n labels?: Partial<DataTableLabels>\n}\n\nexport type DataTableViewOptionsProps<TData extends RowData> = React.ComponentProps<typeof Button> & {\n table?: TanStackTable<TData>\n label?: React.ReactNode\n}\n\nexport type UseDataTableOptions<TData extends RowData, TValue = unknown> = {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n getRowId?: (originalRow: TData, index: number, parent?: { id: string }) => string\n pageSize?: number\n enableRowSelection?: boolean\n enableSorting?: boolean\n enablePagination?: boolean\n labels?: Partial<DataTableLabels>\n}\n\nexport type DataTableRootProps<TData extends RowData, TValue = unknown> = {\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n} & (\n | { table: TanStackTable<TData>; columns?: never; data?: never }\n | (Omit<UseDataTableOptions<TData, TValue>, 'labels'> & { table?: never })\n)\n\nexport type DataTableToolbarProps<TData extends RowData> = {\n filterColumns?: string | string[]\n showColumnVisibility?: boolean\n toolbarActions?: DataTableToolbarActions<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n}\n\nexport type DataTableHeaderProps = {\n className?: string\n}\n\nexport type DataTableBodyProps = {\n /** Content shown when there are no rows. */\n emptyMessage?: React.ReactNode\n className?: string\n}\n\ntype DataTableContextValue<TData extends RowData> = {\n table: TanStackTable<TData>\n labels: DataTableLabels\n}\n\nconst DataTableContext = React.createContext<DataTableContextValue<RowData> | null>(null)\n\n// Lets a `DataTablePagination` rendered inside an uncontrolled `DataTableRoot` turn pagination on while mounted.\n// Returns the function that unregisters it.\nconst DataTablePaginationRegistryContext = React.createContext<(() => () => void) | null>(null)\n\nexport function useDataTableContext<TData extends RowData>(): DataTableContextValue<TData> {\n const ctx = React.useContext(DataTableContext)\n if (!ctx) {\n throw new Error('useDataTableContext must be used within <DataTableRoot>')\n }\n return ctx as unknown as DataTableContextValue<TData>\n}\n\nfunction useOptionalDataTableContext<TData extends RowData>(): DataTableContextValue<TData> | null {\n const ctx = React.useContext(DataTableContext)\n return ctx as unknown as DataTableContextValue<TData> | null\n}\n\nfunction renderToolbarActions<TData extends RowData>(\n actions: DataTableToolbarActions<TData> | undefined,\n table: TanStackTable<TData>\n) {\n return typeof actions === 'function' ? actions(table) : actions\n}\n\nfunction getColumnLabel<TData extends RowData>(column: ReturnType<TanStackTable<TData>['getColumn']>): string {\n if (!column) {\n return ''\n }\n const meta = column.columnDef.meta as { label?: string } | undefined\n return meta?.label ?? column.id\n}\n\nexport function useDataTable<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n pageSize = 10,\n enableRowSelection = false,\n enableSorting = false,\n enablePagination = false,\n labels\n}: UseDataTableOptions<TData, TValue>): TanStackTable<TData> {\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<ColumnVisibilityState>({})\n const [pagination, setPagination] = React.useState<PaginationState>({\n pageIndex: 0,\n pageSize\n })\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({})\n\n // A new `pageSize` prop replaces the current page size (including one picked in the pagination select) and\n // goes back to the first page. Adjusted during render so the table never paints a page with the old size.\n const [previousPageSize, setPreviousPageSize] = React.useState(pageSize)\n if (pageSize !== previousPageSize) {\n setPreviousPageSize(pageSize)\n setPagination({ pageIndex: 0, pageSize })\n }\n\n const mergedLabels = React.useMemo(() => ({ ...defaultDataTableLabels, ...labels }), [labels])\n const resolvedColumns = React.useMemo<ColumnDef<TData, TValue>[]>(() => {\n if (!enableRowSelection) {\n return columns\n }\n if (columns.some((column) => column.id === 'select')) {\n return columns\n }\n return [\n createDataTableSelectColumn<TData>({\n labels: { selectAllRows: mergedLabels.selectAllRows, selectRow: mergedLabels.selectRow }\n }) as ColumnDef<TData, TValue>,\n ...columns\n ]\n }, [columns, enableRowSelection, mergedLabels.selectAllRows, mergedLabels.selectRow])\n\n return useTable({\n features,\n data,\n columns: resolvedColumns as ColumnDef<TData>[],\n getRowId,\n enableRowSelection,\n enableSorting,\n manualPagination: !enablePagination,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n pagination\n },\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onPaginationChange: setPagination,\n onRowSelectionChange: setRowSelection\n })\n}\n\nfunction DataTableRootControlled<TData extends RowData>({\n table,\n labels,\n className,\n children\n}: {\n table: TanStackTable<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n}) {\n const mergedLabels = React.useMemo(() => ({ ...defaultDataTableLabels, ...labels }), [labels])\n const value: DataTableContextValue<TData> = { table, labels: mergedLabels }\n return (\n <DataTableContext.Provider value={value as unknown as DataTableContextValue<RowData>}>\n <div className={cn('flex w-full flex-col gap-4', className)}>{children}</div>\n </DataTableContext.Provider>\n )\n}\n\nfunction DataTableRootUncontrolled<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels,\n className,\n children\n}: Omit<UseDataTableOptions<TData, TValue>, 'labels'> & {\n labels?: Partial<DataTableLabels>\n className?: string\n children: React.ReactNode\n}) {\n const [paginationCount, setPaginationCount] = React.useState(0)\n const registerPagination = React.useCallback(() => {\n setPaginationCount((count) => count + 1)\n return () => setPaginationCount((count) => count - 1)\n }, [])\n\n const table = useDataTable<TData, TValue>({\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination: enablePagination ?? paginationCount > 0,\n labels\n })\n return (\n <DataTablePaginationRegistryContext.Provider value={registerPagination}>\n <DataTableRootControlled table={table} labels={labels} className={className}>\n {children}\n </DataTableRootControlled>\n </DataTablePaginationRegistryContext.Provider>\n )\n}\n\nfunction DataTableRoot<TData extends RowData, TValue = unknown>(props: DataTableRootProps<TData, TValue>) {\n if ('table' in props && props.table !== undefined) {\n const { table, labels, className, children } = props\n return (\n <DataTableRootControlled table={table} labels={labels} className={className}>\n {children}\n </DataTableRootControlled>\n )\n }\n const {\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels,\n className,\n children\n } = props\n return (\n <DataTableRootUncontrolled<TData, TValue>\n columns={columns!}\n data={data!}\n getRowId={getRowId}\n pageSize={pageSize}\n enableRowSelection={enableRowSelection}\n enableSorting={enableSorting}\n enablePagination={enablePagination}\n labels={labels}\n className={className}\n >\n {children}\n </DataTableRootUncontrolled>\n )\n}\n\nfunction DataTableColumnHeader<TData extends RowData, TValue>({\n column,\n title,\n className,\n ...props\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return (\n <div className={cn('inline-flex items-center gap-1', className)} {...props}>\n {title}\n </div>\n )\n }\n\n const sorted = column.getIsSorted()\n\n return (\n <div className={cn('inline-flex items-center gap-1', className)} {...props}>\n {title}\n <Button\n variant=\"ghost\"\n color=\"zinc\"\n size=\"icon-xs\"\n onClick={() => {\n if (sorted === 'desc') return column.clearSorting()\n column.toggleSorting(sorted === 'asc')\n }}\n >\n {sorted === 'desc' ? (\n <IconSortDescending className=\"size-4\" data-icon=\"inline-end\" />\n ) : sorted === 'asc' ? (\n <IconSortAscending className=\"size-4\" data-icon=\"inline-end\" />\n ) : (\n <IconArrowsSort className=\"size-4\" data-icon=\"inline-end\" />\n )}\n </Button>\n </div>\n )\n}\n\nfunction DataTableViewOptions<TData extends RowData>({\n table: tableProp,\n label,\n className,\n ...props\n}: DataTableViewOptionsProps<TData>) {\n const ctx = useOptionalDataTableContext<TData>()\n const table = tableProp ?? ctx?.table\n if (!table) {\n throw new Error('DataTableViewOptions requires a `table` prop or to be rendered within <DataTableRoot>')\n }\n const resolvedLabel = label ?? ctx?.labels.columnsButton ?? defaultDataTableLabels.columnsButton\n const columns = table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n\n if (columns.length === 0) {\n return null\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" className={cn('ml-auto', className)} {...props}>\n <IconColumns3 data-icon=\"inline-start\" />\n {resolvedLabel}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-44\">\n <DropdownMenuGroup>\n {columns.map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(Boolean(value))}\n >\n {getColumnLabel(column)}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\nfunction DataTableToolbar<TData extends RowData>({\n filterColumns,\n showColumnVisibility,\n toolbarActions,\n labels: labelsOverride,\n className\n}: DataTableToolbarProps<TData>) {\n const { table, labels: contextLabels } = useDataTableContext<TData>()\n const labels = React.useMemo(\n () => (labelsOverride ? { ...contextLabels, ...labelsOverride } : contextLabels),\n [contextLabels, labelsOverride]\n )\n const filterColumnIds = React.useMemo<string[]>(() => {\n if (!filterColumns) {\n return []\n }\n return Array.isArray(filterColumns) ? filterColumns : [filterColumns]\n }, [filterColumns])\n\n const actions = renderToolbarActions(toolbarActions, table)\n const hasFilter = filterColumnIds.length > 0\n const [activeFilterColumn, setActiveFilterColumn] = React.useState<string | undefined>(filterColumnIds[0])\n\n // Clears the filter of a column dropped from `filterColumns`; otherwise it keeps filtering the rows with no\n // input left to show or clear it.\n const previousFilterColumnIdsRef = React.useRef(filterColumnIds)\n React.useEffect(() => {\n for (const id of previousFilterColumnIdsRef.current) {\n if (!filterColumnIds.includes(id)) {\n table.getColumn(id)?.setFilterValue(undefined)\n }\n }\n previousFilterColumnIdsRef.current = filterColumnIds\n }, [filterColumnIds, table])\n\n React.useEffect(() => {\n if (filterColumnIds.length === 0) {\n setActiveFilterColumn(undefined)\n return\n }\n setActiveFilterColumn((current) => (current && filterColumnIds.includes(current) ? current : filterColumnIds[0]))\n }, [filterColumnIds])\n\n if (!hasFilter && !showColumnVisibility && !actions) {\n return null\n }\n\n const activeColumn = activeFilterColumn ? table.getColumn(activeFilterColumn) : undefined\n const filterValue = (activeColumn?.getFilterValue() as string | undefined) ?? ''\n\n const handleColumnChange = (nextId: string) => {\n if (nextId === activeFilterColumn) {\n return\n }\n if (activeFilterColumn) {\n table.getColumn(activeFilterColumn)?.setFilterValue(undefined)\n }\n setActiveFilterColumn(nextId)\n }\n\n return (\n <div className={cn('flex flex-col gap-2 sm:flex-row sm:items-center', className)}>\n {hasFilter && activeColumn ? (\n filterColumnIds.length > 1 ? (\n <InputGroup className=\"h-8 w-full sm:max-w-md\">\n <InputGroupAddon align=\"inline-start\" className=\"pr-0\">\n <select\n aria-label={labels.filterColumnSelectorLabel}\n value={activeFilterColumn}\n onChange={(event) => handleColumnChange(event.target.value)}\n className=\"cursor-pointer appearance-none border-0 bg-transparent pr-1 text-sm font-medium text-foreground outline-none focus:outline-none\"\n >\n {filterColumnIds.map((id) => (\n <option key={id} value={id}>\n {getColumnLabel(table.getColumn(id))}\n </option>\n ))}\n </select>\n </InputGroupAddon>\n <InputGroupInput\n placeholder={labels.filterPlaceholder}\n value={filterValue}\n onChange={(event) => activeColumn.setFilterValue(event.target.value)}\n />\n </InputGroup>\n ) : (\n <Input\n placeholder={labels.filterPlaceholder}\n value={filterValue}\n onChange={(event) => activeColumn.setFilterValue(event.target.value)}\n className=\"h-8 w-full sm:max-w-xs\"\n />\n )\n ) : null}\n <div className=\"flex flex-1 items-center justify-end gap-2\">\n {actions}\n {/* `ml-0`: the container already aligns to the end, and the button's own `ml-auto` would split it from the actions. */}\n {showColumnVisibility ? (\n <DataTableViewOptions table={table} label={labels.columnsButton} className=\"ml-0\" />\n ) : null}\n </div>\n </div>\n )\n}\n\nfunction DataTableHeader<TData extends RowData>({ className }: DataTableHeaderProps = {}) {\n const { table } = useDataTableContext<TData>()\n return (\n <TableHeader className={className}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id} colSpan={header.colSpan}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n )\n}\n\nfunction DataTableBody<TData extends RowData>({ emptyMessage, className }: DataTableBodyProps = {}) {\n const { table, labels } = useDataTableContext<TData>()\n const rows = table.getRowModel().rows\n const visibleColumnCount = table.getVisibleLeafColumns().length\n const resolvedEmptyMessage = emptyMessage ?? labels.emptyMessage\n\n return (\n <TableBody className={className}>\n {rows.length === 0 ? (\n <TableRow>\n <TableCell colSpan={visibleColumnCount} className=\"h-24 text-center\">\n {resolvedEmptyMessage}\n </TableCell>\n </TableRow>\n ) : (\n rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() ? 'selected' : undefined}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n )\n}\n\nfunction DataTablePagination<TData extends RowData>({\n table: tableProp,\n pageSizeOptions = [10, 20, 30, 40, 50],\n labels: labelsOverride,\n className,\n ...props\n}: DataTablePaginationProps<TData>) {\n const ctx = useOptionalDataTableContext<TData>()\n const registerPagination = React.useContext(DataTablePaginationRegistryContext)\n // Layout effect so the first paint already shows a single page instead of every row.\n React.useLayoutEffect(() => registerPagination?.(), [registerPagination])\n const table = tableProp ?? ctx?.table\n if (!table) {\n throw new Error('DataTablePagination requires a `table` prop or to be rendered within <DataTableRoot>')\n }\n const mergedLabels = React.useMemo(\n () => ({ ...defaultDataTableLabels, ...ctx?.labels, ...labelsOverride }),\n [ctx?.labels, labelsOverride]\n )\n const pageCount = table.getPageCount()\n const safePageCount = Math.max(pageCount, 1)\n const pageIndex = table.state.pagination.pageIndex\n\n return (\n <div className={cn('flex items-center justify-end gap-4 px-2', className)} {...props}>\n <div className=\"flex items-center gap-6 lg:gap-8\">\n <div className=\"hidden items-center gap-2 sm:flex\">\n <p className=\"text-sm font-medium\">{mergedLabels.rowsPerPage}</p>\n <Select\n value={`${table.state.pagination.pageSize}`}\n onValueChange={(value) => value !== null && table.setPageSize(Number(value))}\n >\n <SelectTrigger size=\"sm\" className=\"h-8 w-20\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent side=\"top\">\n <SelectGroup>\n {pageSizeOptions.map((pageSize) => (\n <SelectItem key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n <div className=\"text-sm font-medium\">{mergedLabels.pageOf(pageIndex + 1, safePageCount)}</div>\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n className=\"hidden lg:inline-flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label={mergedLabels.goToFirstPage}\n >\n <IconChevronsLeft />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label={mergedLabels.goToPreviousPage}\n >\n <IconChevronLeft />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label={mergedLabels.goToNextPage}\n >\n <IconChevronRight />\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"icon-sm\"\n className=\"hidden lg:inline-flex\"\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n aria-label={mergedLabels.goToLastPage}\n >\n <IconChevronsRight />\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nfunction createDataTableSelectColumn<TData extends RowData>(options?: {\n labels?: Pick<Partial<DataTableLabels>, 'selectAllRows' | 'selectRow'>\n}): ColumnDef<TData> {\n const selectAllRows = options?.labels?.selectAllRows ?? defaultDataTableLabels.selectAllRows\n const selectRow = options?.labels?.selectRow ?? defaultDataTableLabels.selectRow\n\n return {\n id: 'select',\n enableSorting: false,\n enableHiding: false,\n header: ({ table }) => (\n <Checkbox\n aria-label={selectAllRows}\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={!table.getIsAllPageRowsSelected() && table.getIsSomePageRowsSelected()}\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(value)}\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n aria-label={selectRow}\n checked={row.getIsSelected()}\n indeterminate={!row.getIsSelected() && row.getIsSomeSelected()}\n disabled={!row.getCanSelect()}\n onCheckedChange={(value) => row.toggleSelected(value)}\n />\n )\n }\n}\n\nfunction DataTable<TData extends RowData, TValue = unknown>({\n columns,\n data,\n getRowId,\n filterColumns,\n pageSize = 10,\n pageSizeOptions,\n enableRowSelection = false,\n enableSorting = false,\n showPagination = false,\n showColumnVisibility = false,\n toolbarActions,\n labels,\n className,\n tableClassName,\n variant\n}: DataTableProps<TData, TValue>) {\n return (\n <DataTableRoot<TData, TValue>\n columns={columns}\n data={data}\n getRowId={getRowId}\n pageSize={pageSize}\n enableRowSelection={enableRowSelection}\n enableSorting={enableSorting}\n enablePagination={showPagination}\n labels={labels}\n className={className}\n >\n <DataTableToolbar\n filterColumns={filterColumns}\n showColumnVisibility={showColumnVisibility}\n toolbarActions={toolbarActions}\n />\n <TableContainer>\n <Table className={tableClassName} variant={variant}>\n <DataTableHeader />\n <DataTableBody />\n </Table>\n </TableContainer>\n {showPagination ? <DataTablePagination pageSizeOptions={pageSizeOptions} /> : null}\n </DataTableRoot>\n )\n}\n\nexport {\n createDataTableSelectColumn,\n DataTable,\n DataTableBody,\n DataTableColumnHeader,\n DataTableHeader,\n DataTablePagination,\n DataTableRoot,\n DataTableToolbar,\n DataTableViewOptions\n}\n"],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ import { Calendar, DateRange } from "./calendar.js";
|
|
|
4
4
|
import { Popover, PopoverContent } from "./popover.js";
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
import { Locale } from "react-day-picker";
|
|
7
|
-
//#region src/components/date-range-picker.d.ts
|
|
8
7
|
export type DateRangePickerPresetOption = {
|
|
9
8
|
label: string;
|
|
10
9
|
getRange: () => DateRange;
|
|
@@ -72,6 +71,5 @@ declare function DateRangePickerDateFields({ className, ...props }: DateRangePic
|
|
|
72
71
|
declare function DateRangePickerActions({ className, children, ...props }: DateRangePickerActionsProps): React.JSX.Element;
|
|
73
72
|
declare function DateRangePickerApply({ children, onClick, className, ...props }: DateRangePickerApplyProps): React.JSX.Element;
|
|
74
73
|
declare function DateRangePickerReset({ children, onClick, variant, className, ...props }: DateRangePickerResetProps): React.JSX.Element;
|
|
75
|
-
//#endregion
|
|
76
74
|
export { type DateRange, DateRangePicker, DateRangePickerActions, DateRangePickerApply, DateRangePickerCalendar, DateRangePickerContent, DateRangePickerDateFields, DateRangePickerPreset, DateRangePickerPresets, DateRangePickerReset, DateRangePickerTrigger, DateRangePickerValue };
|
|
77
75
|
//# sourceMappingURL=date-range-picker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-picker.js","names":["React","DateRangePickerContext","defaultPresetDefinitions","today","yesterday","previousWeekStart","previousMonth","valueProp","openProp","props","uncontrolledValue","setUncontrolledValue","defaultValue","uncontrolledOpen","setUncontrolledOpen","defaultOpen","isValueControlled","isOpenControlled","value","open","draft","setDraft","month","setMonth","updateDraft","normalizedDraft","nextDraft","nextMonth","commitValue","nextValue","onValueChange","setOpen","nextOpen","onOpenChange","apply","onApply","reset","onReset","context","locale","placeholder","Popover","children","Fragment","asChild","PopoverTrigger","Button","type","cn","className","IconCalendar","IconChevronDown","contextPlaceholder","childArray","presets","content","child","PopoverContent","resolveClassName","state","todayRelativeValue","yesterdayRelativeValue","range","preset","selected","days","id","inputValue","setInputValue","Input","label","event","Calendar","onMonthChange","date","IconArrowRight","onClick","match","year","day","targetDate","target","left","right","nextDate","amount"],"sources":["../../src/components/date-range-picker.tsx"],"sourcesContent":["import * as React from 'react'\nimport type { Locale } from 'react-day-picker'\n\nimport { IconArrowRight, IconCalendar, IconChevronDown } from '@tabler/icons-react'\n\nimport { cn } from '../lib/utils'\nimport { resolveClassName } from '../utils/resolve-class-name'\nimport { Button } from './button'\nimport { Calendar, type DateRange } from './calendar'\nimport { Input } from './input'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\n\ntype DateRangePickerContextValue = {\n value: DateRange | null\n draft: DateRange | undefined\n month: Date\n locale?: Partial<Locale>\n placeholder: string\n setDraft: (range: DateRange | undefined) => void\n setMonth: (month: Date) => void\n apply: () => void\n reset: () => void\n}\n\nconst DateRangePickerContext = React.createContext<DateRangePickerContextValue | null>(null)\n\nconst defaultPlaceholder = 'Selecione um período'\n\nconst defaultPresetDefinitions = [\n {\n label: 'Hoje',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: today, to: today }\n }\n },\n {\n label: 'Ontem',\n getRange: () => {\n const yesterday = addDays(startOfDay(new Date()), -1)\n return { from: yesterday, to: yesterday }\n }\n },\n {\n label: 'Últimos 7 dias',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: addDays(today, -7), to: today }\n }\n },\n {\n label: 'Últimos 15 dias',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: addDays(today, -15), to: today }\n }\n },\n {\n label: 'Últimos 30 dias',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: addDays(today, -30), to: today }\n }\n },\n {\n label: 'Últimos 60 dias',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: addDays(today, -60), to: today }\n }\n },\n {\n label: 'Últimos 90 dias',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: addDays(today, -90), to: today }\n }\n },\n {\n label: 'Semana passada',\n getRange: () => {\n const previousWeekStart = addDays(startOfWeek(new Date()), -7)\n return { from: previousWeekStart, to: addDays(previousWeekStart, 6) }\n }\n },\n {\n label: 'Este mês',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: startOfMonth(today), to: today }\n }\n },\n {\n label: 'Mês passado',\n getRange: () => {\n const previousMonth = new Date(new Date().getFullYear(), new Date().getMonth() - 1, 1)\n return { from: startOfMonth(previousMonth), to: endOfMonth(previousMonth) }\n }\n }\n] satisfies DateRangePickerPresetOption[]\n\nexport type DateRangePickerPresetOption = {\n label: string\n getRange: () => DateRange\n}\n\nexport type DateRangePickerProps = Omit<\n React.ComponentProps<typeof Popover>,\n 'open' | 'defaultOpen' | 'onOpenChange'\n> & {\n /** Selected range (controlled). `null` when empty. */\n value?: DateRange | null\n /**\n * Initial range (uncontrolled).\n * @default null\n */\n defaultValue?: DateRange | null\n /** Called when a range is applied, or with `null` when it is reset. */\n onValueChange?: (range: DateRange | null) => void\n /** Called after `DateRangePickerApply` commits the draft. */\n onApply?: (range: DateRange | null) => void\n /** Called after `DateRangePickerReset` clears the value. */\n onReset?: () => void\n /** Whether the popover is open (controlled). */\n open?: boolean\n /**\n * Whether the popover starts open (uncontrolled).\n * @default false\n */\n defaultOpen?: boolean\n /** Called when the popover opens or closes. */\n onOpenChange?: (open: boolean) => void\n /** `react-day-picker` locale used by the calendar and the formatted dates. */\n locale?: Partial<Locale>\n /** Trigger text when no range is selected. */\n placeholder?: string\n}\n\nexport type DateRangePickerTriggerProps = React.ComponentProps<typeof Button> & {\n asChild?: boolean\n}\n\nexport type DateRangePickerValueProps = React.ComponentProps<'span'> & {\n /** Text shown when no range is selected. Defaults to the picker `placeholder`. */\n placeholder?: string\n}\n\nexport type DateRangePickerContentProps = React.ComponentProps<typeof PopoverContent>\n\nexport type DateRangePickerPresetsProps = React.ComponentProps<'div'> & {\n /** Presets to show, as `{ label, getRange }`. Defaults to the pt-BR presets. */\n presets?: DateRangePickerPresetOption[]\n}\n\nexport type DateRangePickerPresetProps = React.ComponentProps<'button'> & {\n /**\n * Highlights the preset as the current selection.\n * @default false\n */\n selected?: boolean\n}\n\nexport type DateRangePickerCalendarProps = Omit<\n React.ComponentProps<typeof Calendar>,\n 'mode' | 'numberOfMonths' | 'selected' | 'onSelect' | 'month' | 'defaultMonth'\n>\n\nexport type DateRangePickerDateFieldsProps = React.ComponentProps<'div'>\n\nexport type DateRangePickerActionsProps = React.ComponentProps<'div'>\n\nexport type DateRangePickerApplyProps = React.ComponentProps<typeof Button>\n\nexport type DateRangePickerResetProps = React.ComponentProps<typeof Button>\n\nfunction DateRangePicker({\n value: valueProp,\n defaultValue = null,\n onValueChange,\n onApply,\n onReset,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n locale,\n placeholder = defaultPlaceholder,\n children,\n ...props\n}: DateRangePickerProps) {\n const [uncontrolledValue, setUncontrolledValue] = React.useState<DateRange | null>(defaultValue)\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n\n const isValueControlled = valueProp !== undefined\n const isOpenControlled = openProp !== undefined\n const value = isValueControlled ? (valueProp ?? null) : uncontrolledValue\n const open = isOpenControlled ? openProp : uncontrolledOpen\n\n const [draft, setDraft] = React.useState<DateRange | undefined>(() => toDraft(value))\n const [month, setMonth] = React.useState<Date>(() => getRangeMonth(toDraft(value)))\n\n const updateDraft = React.useCallback((nextDraft: DateRange | undefined) => {\n const normalizedDraft = normalizeDraft(nextDraft)\n setDraft(normalizedDraft)\n\n const nextMonth = getRangeMonth(normalizedDraft)\n if (nextMonth) {\n setMonth(nextMonth)\n }\n }, [])\n\n const commitValue = React.useCallback(\n (nextValue: DateRange | null) => {\n if (!isValueControlled) {\n setUncontrolledValue(nextValue)\n }\n\n onValueChange?.(nextValue)\n },\n [isValueControlled, onValueChange]\n )\n\n const setOpen = React.useCallback(\n (nextOpen: boolean) => {\n if (nextOpen) {\n const nextDraft = toDraft(value)\n setDraft(nextDraft)\n setMonth(getRangeMonth(nextDraft))\n }\n\n if (!isOpenControlled) {\n setUncontrolledOpen(nextOpen)\n }\n\n onOpenChange?.(nextOpen)\n },\n [isOpenControlled, onOpenChange, value]\n )\n\n const apply = React.useCallback(() => {\n const nextValue = toValue(draft)\n commitValue(nextValue)\n onApply?.(nextValue)\n setOpen(false)\n }, [commitValue, draft, onApply, setOpen])\n\n const reset = React.useCallback(() => {\n setDraft(undefined)\n commitValue(null)\n onReset?.()\n setOpen(false)\n }, [commitValue, onReset, setOpen])\n\n const context = React.useMemo<DateRangePickerContextValue>(\n () => ({\n value,\n draft,\n month,\n locale,\n placeholder,\n setDraft: updateDraft,\n setMonth,\n apply,\n reset\n }),\n [apply, draft, locale, month, placeholder, reset, updateDraft, value]\n )\n\n return (\n <DateRangePickerContext.Provider value={context}>\n <Popover open={open} onOpenChange={setOpen} {...props}>\n {children ?? (\n <>\n <DateRangePickerTrigger />\n <DateRangePickerContent>\n <DateRangePickerPresets />\n <DateRangePickerDateFields />\n <DateRangePickerCalendar />\n <DateRangePickerActions />\n </DateRangePickerContent>\n </>\n )}\n </Popover>\n </DateRangePickerContext.Provider>\n )\n}\n\nfunction DateRangePickerTrigger({\n className,\n children,\n asChild = false,\n variant = 'secondary',\n type,\n ...props\n}: DateRangePickerTriggerProps) {\n if (asChild) {\n return (\n <PopoverTrigger asChild className={className} type={type} {...props}>\n {children}\n </PopoverTrigger>\n )\n }\n\n return (\n <PopoverTrigger asChild>\n <Button\n type={type ?? 'button'}\n variant={variant}\n className={cn('min-w-64 justify-between font-normal', className)}\n {...props}\n >\n {children ?? (\n <>\n <IconCalendar data-icon=\"inline-start\" className=\"size-4 text-muted-foreground\" />\n <DateRangePickerValue className=\"flex-1 text-left\" />\n <IconChevronDown data-icon=\"inline-end\" className=\"size-4 text-muted-foreground\" />\n </>\n )}\n </Button>\n </PopoverTrigger>\n )\n}\n\nfunction DateRangePickerValue({ className, placeholder, ...props }: DateRangePickerValueProps) {\n const { value, locale, placeholder: contextPlaceholder } = useDateRangePicker()\n\n return (\n <span data-slot=\"date-range-picker-value\" className={cn('truncate', className)} {...props}>\n {formatRange(value, locale, placeholder ?? contextPlaceholder)}\n </span>\n )\n}\n\nfunction DateRangePickerContent({\n className,\n align = 'start',\n sideOffset = 8,\n children,\n ...props\n}: DateRangePickerContentProps) {\n const childArray = React.Children.toArray(children)\n const presets = childArray.filter(isDateRangePickerPresetsElement)\n const content = childArray.filter((child) => !isDateRangePickerPresetsElement(child))\n\n return (\n <PopoverContent\n align={align}\n sideOffset={sideOffset}\n className={(state) => cn('w-[calc(100vw-(--spacing(4)))] max-w-2xl p-2', resolveClassName(className, state))}\n {...props}\n >\n <div data-slot=\"date-range-picker-content\" className=\"grid gap-3 md:grid-cols-[10rem_minmax(0,1fr)]\">\n {presets}\n <div className=\"flex min-w-0 flex-col gap-3\">{content}</div>\n </div>\n </PopoverContent>\n )\n}\n\nfunction DateRangePickerPresets({\n className,\n presets = defaultPresetDefinitions,\n ...props\n}: DateRangePickerPresetsProps) {\n const { draft, setDraft } = useDateRangePicker()\n const todayRelativeValue = getRelativeDaysValue(draft, 'today')\n const yesterdayRelativeValue = getRelativeDaysValue(draft, 'yesterday')\n\n return (\n <div\n data-slot=\"date-range-picker-presets\"\n className={cn('hidden flex-col border-border pr-3 md:flex md:border-r', className)}\n {...props}\n >\n {presets.map((preset) => {\n const range = preset.getRange()\n const selected = isSameRange(draft, range)\n\n return (\n <DateRangePickerPreset key={preset.label} type=\"button\" selected={selected} onClick={() => setDraft(range)}>\n {preset.label}\n </DateRangePickerPreset>\n )\n })}\n\n <div className=\"my-3 flex flex-col gap-2\">\n <DateRangePickerRelativeField\n label=\"Dias até hoje\"\n value={todayRelativeValue}\n onValueChange={(days) => setDraft(getRelativeDaysRange(days, 'today'))}\n />\n <DateRangePickerRelativeField\n label=\"Dias até ontem\"\n value={yesterdayRelativeValue}\n onValueChange={(days) => setDraft(getRelativeDaysRange(days, 'yesterday'))}\n />\n </div>\n </div>\n )\n}\n\nfunction DateRangePickerPreset({ className, selected = false, ...props }: DateRangePickerPresetProps) {\n return (\n <button\n data-slot=\"date-range-picker-preset\"\n data-selected={selected}\n className={cn(\n 'flex h-8.5 w-full items-center border-l-3 border-border bg-transparent px-2 text-left text-sm text-foreground transition-colors outline-none',\n 'hover:border-primary hover:bg-primary-50 hover:text-primary-700 dark:hover:bg-primary-950 dark:hover:text-primary-300',\n 'focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-ring/50',\n 'data-[selected=true]:border-primary data-[selected=true]:bg-primary-50 data-[selected=true]:text-primary-700 dark:data-[selected=true]:bg-primary-950 dark:data-[selected=true]:text-primary-300',\n className\n )}\n aria-pressed={selected}\n {...props}\n />\n )\n}\n\nfunction DateRangePickerRelativeField({\n label,\n value,\n onValueChange\n}: {\n label: string\n value: number | undefined\n onValueChange: (days: number) => void\n}) {\n const id = React.useId()\n const [inputValue, setInputValue] = React.useState(() => formatRelativeInputValue(value))\n\n React.useEffect(() => {\n setInputValue(formatRelativeInputValue(value))\n }, [value])\n\n return (\n <div className=\"flex items-center gap-2 text-sm text-foreground\">\n <Input\n id={id}\n type=\"number\"\n name={label}\n min={1}\n step={1}\n value={inputValue}\n className=\"h-7 w-9 rounded-md px-1 text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n aria-label={label}\n onChange={(event) => {\n const nextValue = event.target.value\n setInputValue(nextValue)\n\n if (nextValue === '') return\n\n const days = parsePositiveInteger(nextValue)\n if (!days) return\n onValueChange(days)\n }}\n />\n <label htmlFor={id}>{label}</label>\n </div>\n )\n}\n\nfunction DateRangePickerCalendar({\n className,\n showOutsideDays = false,\n onMonthChange,\n ...props\n}: DateRangePickerCalendarProps) {\n const { draft, locale, month, setDraft, setMonth } = useDateRangePicker()\n\n return (\n <Calendar\n mode=\"range\"\n numberOfMonths={2}\n showOutsideDays={showOutsideDays}\n month={month}\n onMonthChange={(nextMonth) => {\n setMonth(nextMonth)\n onMonthChange?.(nextMonth)\n }}\n selected={draft}\n onSelect={setDraft}\n locale={locale}\n className={cn('mx-auto bg-transparent p-0', className)}\n {...props}\n />\n )\n}\n\nfunction DateRangePickerDateFields({ className, ...props }: DateRangePickerDateFieldsProps) {\n const { draft, setDraft } = useDateRangePicker()\n\n return (\n <div\n data-slot=\"date-range-picker-date-fields\"\n className={cn(\n 'pb-2 border-b flex justify-between gap-2 flex-wrap flex-col sm:flex-row sm:items-center',\n className\n )}\n {...props}\n >\n <Input\n type=\"date\"\n value={formatInputDate(draft?.from)}\n className=\"sm:w-max\"\n onChange={(event) => {\n if (event.target.value === '') {\n setDraft(undefined)\n return\n }\n\n const date = parseInputDate(event.target.value)\n if (!date) return\n setDraft(normalizeDraft({ from: date, to: draft?.to }))\n }}\n />\n <IconArrowRight className=\"size-4 text-primary hidden sm:block\" />\n <Input\n type=\"date\"\n value={formatInputDate(draft?.to)}\n className=\"sm:w-max\"\n onChange={(event) => {\n if (event.target.value === '') {\n setDraft(undefined)\n return\n }\n\n const date = parseInputDate(event.target.value)\n if (!date) return\n setDraft(normalizeDraft({ from: draft?.from, to: date }))\n }}\n />\n </div>\n )\n}\n\nfunction DateRangePickerActions({ className, children, ...props }: DateRangePickerActionsProps) {\n return (\n <div data-slot=\"date-range-picker-actions\" className={cn('flex items-center gap-2 mt-auto', className)} {...props}>\n {children ?? (\n <>\n <DateRangePickerReset />\n <DateRangePickerApply />\n </>\n )}\n </div>\n )\n}\n\nfunction DateRangePickerApply({ children = 'Aplicar', onClick, className, ...props }: DateRangePickerApplyProps) {\n const { apply } = useDateRangePicker()\n\n return (\n <Button\n size=\"sm\"\n className={cn('flex-1', className)}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n apply()\n }\n }}\n {...props}\n >\n {children}\n </Button>\n )\n}\n\nfunction DateRangePickerReset({\n children = 'Resetar',\n onClick,\n variant = 'secondary',\n className,\n ...props\n}: DateRangePickerResetProps) {\n const { reset } = useDateRangePicker()\n\n return (\n <Button\n size=\"sm\"\n className={cn('flex-1', className)}\n variant={variant}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n reset()\n }\n }}\n {...props}\n >\n {children}\n </Button>\n )\n}\n\nfunction useDateRangePicker() {\n const context = React.useContext(DateRangePickerContext)\n\n if (!context) {\n throw new Error('DateRangePicker components must be used within DateRangePicker.')\n }\n\n return context\n}\n\nfunction isDateRangePickerPresetsElement(child: React.ReactNode) {\n return React.isValidElement(child) && child.type === DateRangePickerPresets\n}\n\nfunction toDraft(range: DateRange | null | undefined) {\n return normalizeDraft(range ?? undefined)\n}\n\nfunction toValue(range: DateRange | undefined): DateRange | null {\n return normalizeDraft(range) ?? null\n}\n\nfunction getRangeMonth(range: DateRange | undefined) {\n return startOfDay(range?.from ?? range?.to ?? new Date())\n}\n\nfunction normalizeDraft(range: DateRange | undefined): DateRange | undefined {\n if (!range?.from && !range?.to) return undefined\n\n if (range.from && range.to && range.from > range.to) {\n return { from: startOfDay(range.to), to: startOfDay(range.from) }\n }\n\n return {\n from: range.from ? startOfDay(range.from) : undefined,\n to: range.to ? startOfDay(range.to) : undefined\n }\n}\n\nfunction formatRange(range: DateRange | null | undefined, locale: Partial<Locale> | undefined, placeholder: string) {\n if (!range?.from && !range?.to) return placeholder\n\n if (range.from && range.to) {\n return `${formatDisplayDate(range.from, locale)} - ${formatDisplayDate(range.to, locale)}`\n }\n\n return formatDisplayDate(range.from ?? range.to, locale)\n}\n\nfunction formatDisplayDate(date: Date | undefined, locale: Partial<Locale> | undefined) {\n if (!date) return ''\n\n return new Intl.DateTimeFormat(locale?.code ?? 'pt-BR', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric'\n }).format(date)\n}\n\nfunction formatInputDate(date: Date | undefined) {\n if (!date) return ''\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n}\n\nfunction parseInputDate(value: string) {\n if (!value) return undefined\n\n const match = /^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$/.exec(value)\n if (!match?.groups) return undefined\n\n const year = Number(match.groups.year)\n const month = Number(match.groups.month)\n const day = Number(match.groups.day)\n const date = new Date(year, month - 1, day)\n\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return undefined\n }\n\n return date\n}\n\nfunction parsePositiveInteger(value: string) {\n if (!value) return undefined\n\n const days = Number(value)\n if (!Number.isInteger(days) || days < 1) return undefined\n\n return days\n}\n\nfunction formatRelativeInputValue(value: number | undefined) {\n return value ? String(value) : ''\n}\n\nfunction getRelativeDaysRange(days: number, target: 'today' | 'yesterday'): DateRange {\n const today = startOfDay(new Date())\n const targetDate = target === 'today' ? addDays(today, -1) : addDays(today, -2)\n\n return {\n from: addDays(targetDate, -days + 1),\n to: targetDate\n }\n}\n\nfunction getRelativeDaysValue(range: DateRange | undefined, target: 'today' | 'yesterday') {\n if (!range?.from || !range.to) return undefined\n\n const today = startOfDay(new Date())\n const targetDate = target === 'today' ? addDays(today, -1) : addDays(today, -2)\n if (!isSameDay(range.to, targetDate)) return undefined\n\n const days = differenceInCalendarDays(targetDate, startOfDay(range.from)) + 1\n return days > 0 ? days : undefined\n}\n\nfunction isSameRange(left: DateRange | undefined, right: DateRange | undefined) {\n return isSameDay(left?.from, right?.from) && isSameDay(left?.to, right?.to)\n}\n\nfunction isSameDay(left: Date | undefined, right: Date | undefined) {\n if (!left || !right) return left === right\n\n return (\n left.getFullYear() === right.getFullYear() &&\n left.getMonth() === right.getMonth() &&\n left.getDate() === right.getDate()\n )\n}\n\nfunction startOfDay(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n}\n\nfunction startOfWeek(date: Date) {\n const day = startOfDay(date)\n return addDays(day, -day.getDay())\n}\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1)\n}\n\nfunction endOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0)\n}\n\nfunction differenceInCalendarDays(left: Date, right: Date) {\n const millisecondsPerDay = 24 * 60 * 60 * 1000\n return Math.round((startOfDay(left).getTime() - startOfDay(right).getTime()) / millisecondsPerDay)\n}\n\nfunction addDays(date: Date, amount: number) {\n const nextDate = startOfDay(date)\n nextDate.setDate(nextDate.getDate() + amount)\n return nextDate\n}\n\nexport {\n type DateRange,\n DateRangePicker,\n DateRangePickerActions,\n DateRangePickerApply,\n DateRangePickerCalendar,\n DateRangePickerContent,\n DateRangePickerDateFields,\n DateRangePickerPreset,\n DateRangePickerPresets,\n DateRangePickerReset,\n DateRangePickerTrigger,\n DateRangePickerValue\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"date-range-picker.js","names":["React","DateRangePickerContext","defaultPresetDefinitions","today","yesterday","previousWeekStart","previousMonth","valueProp","openProp","props","uncontrolledValue","setUncontrolledValue","defaultValue","uncontrolledOpen","setUncontrolledOpen","defaultOpen","isValueControlled","isOpenControlled","value","open","draft","setDraft","month","setMonth","updateDraft","normalizedDraft","nextDraft","nextMonth","commitValue","nextValue","onValueChange","setOpen","nextOpen","onOpenChange","apply","onApply","reset","onReset","context","locale","placeholder","Popover","children","Fragment","asChild","PopoverTrigger","Button","type","cn","className","IconCalendar","IconChevronDown","contextPlaceholder","childArray","presets","content","child","PopoverContent","resolveClassName","state","todayRelativeValue","yesterdayRelativeValue","range","preset","selected","days","id","inputValue","setInputValue","Input","label","event","Calendar","onMonthChange","date","IconArrowRight","onClick","match","year","day","targetDate","target","left","right","nextDate","amount"],"sources":["../../src/components/date-range-picker.tsx"],"sourcesContent":["import * as React from 'react'\nimport type { Locale } from 'react-day-picker'\n\nimport { IconArrowRight, IconCalendar, IconChevronDown } from '@tabler/icons-react'\n\nimport { cn } from '../lib/utils'\nimport { resolveClassName } from '../utils/resolve-class-name'\nimport { Button } from './button'\nimport { Calendar, type DateRange } from './calendar'\nimport { Input } from './input'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\n\ntype DateRangePickerContextValue = {\n value: DateRange | null\n draft: DateRange | undefined\n month: Date\n locale?: Partial<Locale>\n placeholder: string\n setDraft: (range: DateRange | undefined) => void\n setMonth: (month: Date) => void\n apply: () => void\n reset: () => void\n}\n\nconst DateRangePickerContext = React.createContext<DateRangePickerContextValue | null>(null)\n\nconst defaultPlaceholder = 'Selecione um período'\n\nconst defaultPresetDefinitions = [\n {\n label: 'Hoje',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: today, to: today }\n }\n },\n {\n label: 'Ontem',\n getRange: () => {\n const yesterday = addDays(startOfDay(new Date()), -1)\n return { from: yesterday, to: yesterday }\n }\n },\n {\n label: 'Últimos 7 dias',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: addDays(today, -7), to: today }\n }\n },\n {\n label: 'Últimos 15 dias',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: addDays(today, -15), to: today }\n }\n },\n {\n label: 'Últimos 30 dias',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: addDays(today, -30), to: today }\n }\n },\n {\n label: 'Últimos 60 dias',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: addDays(today, -60), to: today }\n }\n },\n {\n label: 'Últimos 90 dias',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: addDays(today, -90), to: today }\n }\n },\n {\n label: 'Semana passada',\n getRange: () => {\n const previousWeekStart = addDays(startOfWeek(new Date()), -7)\n return { from: previousWeekStart, to: addDays(previousWeekStart, 6) }\n }\n },\n {\n label: 'Este mês',\n getRange: () => {\n const today = startOfDay(new Date())\n return { from: startOfMonth(today), to: today }\n }\n },\n {\n label: 'Mês passado',\n getRange: () => {\n const previousMonth = new Date(new Date().getFullYear(), new Date().getMonth() - 1, 1)\n return { from: startOfMonth(previousMonth), to: endOfMonth(previousMonth) }\n }\n }\n] satisfies DateRangePickerPresetOption[]\n\nexport type DateRangePickerPresetOption = {\n label: string\n getRange: () => DateRange\n}\n\nexport type DateRangePickerProps = Omit<\n React.ComponentProps<typeof Popover>,\n 'open' | 'defaultOpen' | 'onOpenChange'\n> & {\n /** Selected range (controlled). `null` when empty. */\n value?: DateRange | null\n /**\n * Initial range (uncontrolled).\n * @default null\n */\n defaultValue?: DateRange | null\n /** Called when a range is applied, or with `null` when it is reset. */\n onValueChange?: (range: DateRange | null) => void\n /** Called after `DateRangePickerApply` commits the draft. */\n onApply?: (range: DateRange | null) => void\n /** Called after `DateRangePickerReset` clears the value. */\n onReset?: () => void\n /** Whether the popover is open (controlled). */\n open?: boolean\n /**\n * Whether the popover starts open (uncontrolled).\n * @default false\n */\n defaultOpen?: boolean\n /** Called when the popover opens or closes. */\n onOpenChange?: (open: boolean) => void\n /** `react-day-picker` locale used by the calendar and the formatted dates. */\n locale?: Partial<Locale>\n /** Trigger text when no range is selected. */\n placeholder?: string\n}\n\nexport type DateRangePickerTriggerProps = React.ComponentProps<typeof Button> & {\n asChild?: boolean\n}\n\nexport type DateRangePickerValueProps = React.ComponentProps<'span'> & {\n /** Text shown when no range is selected. Defaults to the picker `placeholder`. */\n placeholder?: string\n}\n\nexport type DateRangePickerContentProps = React.ComponentProps<typeof PopoverContent>\n\nexport type DateRangePickerPresetsProps = React.ComponentProps<'div'> & {\n /** Presets to show, as `{ label, getRange }`. Defaults to the pt-BR presets. */\n presets?: DateRangePickerPresetOption[]\n}\n\nexport type DateRangePickerPresetProps = React.ComponentProps<'button'> & {\n /**\n * Highlights the preset as the current selection.\n * @default false\n */\n selected?: boolean\n}\n\nexport type DateRangePickerCalendarProps = Omit<\n React.ComponentProps<typeof Calendar>,\n 'mode' | 'numberOfMonths' | 'selected' | 'onSelect' | 'month' | 'defaultMonth'\n>\n\nexport type DateRangePickerDateFieldsProps = React.ComponentProps<'div'>\n\nexport type DateRangePickerActionsProps = React.ComponentProps<'div'>\n\nexport type DateRangePickerApplyProps = React.ComponentProps<typeof Button>\n\nexport type DateRangePickerResetProps = React.ComponentProps<typeof Button>\n\nfunction DateRangePicker({\n value: valueProp,\n defaultValue = null,\n onValueChange,\n onApply,\n onReset,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n locale,\n placeholder = defaultPlaceholder,\n children,\n ...props\n}: DateRangePickerProps) {\n const [uncontrolledValue, setUncontrolledValue] = React.useState<DateRange | null>(defaultValue)\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n\n const isValueControlled = valueProp !== undefined\n const isOpenControlled = openProp !== undefined\n const value = isValueControlled ? (valueProp ?? null) : uncontrolledValue\n const open = isOpenControlled ? openProp : uncontrolledOpen\n\n const [draft, setDraft] = React.useState<DateRange | undefined>(() => toDraft(value))\n const [month, setMonth] = React.useState<Date>(() => getRangeMonth(toDraft(value)))\n\n const updateDraft = React.useCallback((nextDraft: DateRange | undefined) => {\n const normalizedDraft = normalizeDraft(nextDraft)\n setDraft(normalizedDraft)\n\n const nextMonth = getRangeMonth(normalizedDraft)\n if (nextMonth) {\n setMonth(nextMonth)\n }\n }, [])\n\n const commitValue = React.useCallback(\n (nextValue: DateRange | null) => {\n if (!isValueControlled) {\n setUncontrolledValue(nextValue)\n }\n\n onValueChange?.(nextValue)\n },\n [isValueControlled, onValueChange]\n )\n\n const setOpen = React.useCallback(\n (nextOpen: boolean) => {\n if (nextOpen) {\n const nextDraft = toDraft(value)\n setDraft(nextDraft)\n setMonth(getRangeMonth(nextDraft))\n }\n\n if (!isOpenControlled) {\n setUncontrolledOpen(nextOpen)\n }\n\n onOpenChange?.(nextOpen)\n },\n [isOpenControlled, onOpenChange, value]\n )\n\n const apply = React.useCallback(() => {\n const nextValue = toValue(draft)\n commitValue(nextValue)\n onApply?.(nextValue)\n setOpen(false)\n }, [commitValue, draft, onApply, setOpen])\n\n const reset = React.useCallback(() => {\n setDraft(undefined)\n commitValue(null)\n onReset?.()\n setOpen(false)\n }, [commitValue, onReset, setOpen])\n\n const context = React.useMemo<DateRangePickerContextValue>(\n () => ({\n value,\n draft,\n month,\n locale,\n placeholder,\n setDraft: updateDraft,\n setMonth,\n apply,\n reset\n }),\n [apply, draft, locale, month, placeholder, reset, updateDraft, value]\n )\n\n return (\n <DateRangePickerContext.Provider value={context}>\n <Popover open={open} onOpenChange={setOpen} {...props}>\n {children ?? (\n <>\n <DateRangePickerTrigger />\n <DateRangePickerContent>\n <DateRangePickerPresets />\n <DateRangePickerDateFields />\n <DateRangePickerCalendar />\n <DateRangePickerActions />\n </DateRangePickerContent>\n </>\n )}\n </Popover>\n </DateRangePickerContext.Provider>\n )\n}\n\nfunction DateRangePickerTrigger({\n className,\n children,\n asChild = false,\n variant = 'secondary',\n type,\n ...props\n}: DateRangePickerTriggerProps) {\n if (asChild) {\n return (\n <PopoverTrigger asChild className={className} type={type} {...props}>\n {children}\n </PopoverTrigger>\n )\n }\n\n return (\n <PopoverTrigger asChild>\n <Button\n type={type ?? 'button'}\n variant={variant}\n className={cn('min-w-64 justify-between font-normal', className)}\n {...props}\n >\n {children ?? (\n <>\n <IconCalendar data-icon=\"inline-start\" className=\"size-4 text-muted-foreground\" />\n <DateRangePickerValue className=\"flex-1 text-left\" />\n <IconChevronDown data-icon=\"inline-end\" className=\"size-4 text-muted-foreground\" />\n </>\n )}\n </Button>\n </PopoverTrigger>\n )\n}\n\nfunction DateRangePickerValue({ className, placeholder, ...props }: DateRangePickerValueProps) {\n const { value, locale, placeholder: contextPlaceholder } = useDateRangePicker()\n\n return (\n <span data-slot=\"date-range-picker-value\" className={cn('truncate', className)} {...props}>\n {formatRange(value, locale, placeholder ?? contextPlaceholder)}\n </span>\n )\n}\n\nfunction DateRangePickerContent({\n className,\n align = 'start',\n sideOffset = 8,\n children,\n ...props\n}: DateRangePickerContentProps) {\n const childArray = React.Children.toArray(children)\n const presets = childArray.filter(isDateRangePickerPresetsElement)\n const content = childArray.filter((child) => !isDateRangePickerPresetsElement(child))\n\n return (\n <PopoverContent\n align={align}\n sideOffset={sideOffset}\n className={(state) => cn('w-[calc(100vw-(--spacing(4)))] max-w-2xl p-2', resolveClassName(className, state))}\n {...props}\n >\n <div data-slot=\"date-range-picker-content\" className=\"grid gap-3 md:grid-cols-[10rem_minmax(0,1fr)]\">\n {presets}\n <div className=\"flex min-w-0 flex-col gap-3\">{content}</div>\n </div>\n </PopoverContent>\n )\n}\n\nfunction DateRangePickerPresets({\n className,\n presets = defaultPresetDefinitions,\n ...props\n}: DateRangePickerPresetsProps) {\n const { draft, setDraft } = useDateRangePicker()\n const todayRelativeValue = getRelativeDaysValue(draft, 'today')\n const yesterdayRelativeValue = getRelativeDaysValue(draft, 'yesterday')\n\n return (\n <div\n data-slot=\"date-range-picker-presets\"\n className={cn('hidden flex-col border-border pr-3 md:flex md:border-r', className)}\n {...props}\n >\n {presets.map((preset) => {\n const range = preset.getRange()\n const selected = isSameRange(draft, range)\n\n return (\n <DateRangePickerPreset key={preset.label} type=\"button\" selected={selected} onClick={() => setDraft(range)}>\n {preset.label}\n </DateRangePickerPreset>\n )\n })}\n\n <div className=\"my-3 flex flex-col gap-2\">\n <DateRangePickerRelativeField\n label=\"Dias até hoje\"\n value={todayRelativeValue}\n onValueChange={(days) => setDraft(getRelativeDaysRange(days, 'today'))}\n />\n <DateRangePickerRelativeField\n label=\"Dias até ontem\"\n value={yesterdayRelativeValue}\n onValueChange={(days) => setDraft(getRelativeDaysRange(days, 'yesterday'))}\n />\n </div>\n </div>\n )\n}\n\nfunction DateRangePickerPreset({ className, selected = false, ...props }: DateRangePickerPresetProps) {\n return (\n <button\n data-slot=\"date-range-picker-preset\"\n data-selected={selected}\n className={cn(\n 'flex h-8.5 w-full items-center border-l-3 border-border bg-transparent px-2 text-left text-sm text-foreground transition-colors outline-none',\n 'hover:border-primary hover:bg-primary-50 hover:text-primary-700 dark:hover:bg-primary-950 dark:hover:text-primary-300',\n 'focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-ring/50',\n 'data-[selected=true]:border-primary data-[selected=true]:bg-primary-50 data-[selected=true]:text-primary-700 dark:data-[selected=true]:bg-primary-950 dark:data-[selected=true]:text-primary-300',\n className\n )}\n aria-pressed={selected}\n {...props}\n />\n )\n}\n\nfunction DateRangePickerRelativeField({\n label,\n value,\n onValueChange\n}: {\n label: string\n value: number | undefined\n onValueChange: (days: number) => void\n}) {\n const id = React.useId()\n const [inputValue, setInputValue] = React.useState(() => formatRelativeInputValue(value))\n\n React.useEffect(() => {\n setInputValue(formatRelativeInputValue(value))\n }, [value])\n\n return (\n <div className=\"flex items-center gap-2 text-sm text-foreground\">\n <Input\n id={id}\n type=\"number\"\n name={label}\n min={1}\n step={1}\n value={inputValue}\n className=\"h-7 w-9 rounded-md px-1 text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n aria-label={label}\n onChange={(event) => {\n const nextValue = event.target.value\n setInputValue(nextValue)\n\n if (nextValue === '') return\n\n const days = parsePositiveInteger(nextValue)\n if (!days) return\n onValueChange(days)\n }}\n />\n <label htmlFor={id}>{label}</label>\n </div>\n )\n}\n\nfunction DateRangePickerCalendar({\n className,\n showOutsideDays = false,\n onMonthChange,\n ...props\n}: DateRangePickerCalendarProps) {\n const { draft, locale, month, setDraft, setMonth } = useDateRangePicker()\n\n return (\n <Calendar\n mode=\"range\"\n numberOfMonths={2}\n showOutsideDays={showOutsideDays}\n month={month}\n onMonthChange={(nextMonth) => {\n setMonth(nextMonth)\n onMonthChange?.(nextMonth)\n }}\n selected={draft}\n onSelect={setDraft}\n locale={locale}\n className={cn('mx-auto bg-transparent p-0', className)}\n {...props}\n />\n )\n}\n\nfunction DateRangePickerDateFields({ className, ...props }: DateRangePickerDateFieldsProps) {\n const { draft, setDraft } = useDateRangePicker()\n\n return (\n <div\n data-slot=\"date-range-picker-date-fields\"\n className={cn(\n 'pb-2 border-b flex justify-between gap-2 flex-wrap flex-col sm:flex-row sm:items-center',\n className\n )}\n {...props}\n >\n <Input\n type=\"date\"\n value={formatInputDate(draft?.from)}\n className=\"sm:w-max\"\n onChange={(event) => {\n if (event.target.value === '') {\n setDraft(undefined)\n return\n }\n\n const date = parseInputDate(event.target.value)\n if (!date) return\n setDraft(normalizeDraft({ from: date, to: draft?.to }))\n }}\n />\n <IconArrowRight className=\"size-4 text-primary hidden sm:block\" />\n <Input\n type=\"date\"\n value={formatInputDate(draft?.to)}\n className=\"sm:w-max\"\n onChange={(event) => {\n if (event.target.value === '') {\n setDraft(undefined)\n return\n }\n\n const date = parseInputDate(event.target.value)\n if (!date) return\n setDraft(normalizeDraft({ from: draft?.from, to: date }))\n }}\n />\n </div>\n )\n}\n\nfunction DateRangePickerActions({ className, children, ...props }: DateRangePickerActionsProps) {\n return (\n <div data-slot=\"date-range-picker-actions\" className={cn('flex items-center gap-2 mt-auto', className)} {...props}>\n {children ?? (\n <>\n <DateRangePickerReset />\n <DateRangePickerApply />\n </>\n )}\n </div>\n )\n}\n\nfunction DateRangePickerApply({ children = 'Aplicar', onClick, className, ...props }: DateRangePickerApplyProps) {\n const { apply } = useDateRangePicker()\n\n return (\n <Button\n size=\"sm\"\n className={cn('flex-1', className)}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n apply()\n }\n }}\n {...props}\n >\n {children}\n </Button>\n )\n}\n\nfunction DateRangePickerReset({\n children = 'Resetar',\n onClick,\n variant = 'secondary',\n className,\n ...props\n}: DateRangePickerResetProps) {\n const { reset } = useDateRangePicker()\n\n return (\n <Button\n size=\"sm\"\n className={cn('flex-1', className)}\n variant={variant}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n reset()\n }\n }}\n {...props}\n >\n {children}\n </Button>\n )\n}\n\nfunction useDateRangePicker() {\n const context = React.useContext(DateRangePickerContext)\n\n if (!context) {\n throw new Error('DateRangePicker components must be used within DateRangePicker.')\n }\n\n return context\n}\n\nfunction isDateRangePickerPresetsElement(child: React.ReactNode) {\n return React.isValidElement(child) && child.type === DateRangePickerPresets\n}\n\nfunction toDraft(range: DateRange | null | undefined) {\n return normalizeDraft(range ?? undefined)\n}\n\nfunction toValue(range: DateRange | undefined): DateRange | null {\n return normalizeDraft(range) ?? null\n}\n\nfunction getRangeMonth(range: DateRange | undefined) {\n return startOfDay(range?.from ?? range?.to ?? new Date())\n}\n\nfunction normalizeDraft(range: DateRange | undefined): DateRange | undefined {\n if (!range?.from && !range?.to) return undefined\n\n if (range.from && range.to && range.from > range.to) {\n return { from: startOfDay(range.to), to: startOfDay(range.from) }\n }\n\n return {\n from: range.from ? startOfDay(range.from) : undefined,\n to: range.to ? startOfDay(range.to) : undefined\n }\n}\n\nfunction formatRange(range: DateRange | null | undefined, locale: Partial<Locale> | undefined, placeholder: string) {\n if (!range?.from && !range?.to) return placeholder\n\n if (range.from && range.to) {\n return `${formatDisplayDate(range.from, locale)} - ${formatDisplayDate(range.to, locale)}`\n }\n\n return formatDisplayDate(range.from ?? range.to, locale)\n}\n\nfunction formatDisplayDate(date: Date | undefined, locale: Partial<Locale> | undefined) {\n if (!date) return ''\n\n return new Intl.DateTimeFormat(locale?.code ?? 'pt-BR', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric'\n }).format(date)\n}\n\nfunction formatInputDate(date: Date | undefined) {\n if (!date) return ''\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n}\n\nfunction parseInputDate(value: string) {\n if (!value) return undefined\n\n const match = /^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$/.exec(value)\n if (!match?.groups) return undefined\n\n const year = Number(match.groups.year)\n const month = Number(match.groups.month)\n const day = Number(match.groups.day)\n const date = new Date(year, month - 1, day)\n\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return undefined\n }\n\n return date\n}\n\nfunction parsePositiveInteger(value: string) {\n if (!value) return undefined\n\n const days = Number(value)\n if (!Number.isInteger(days) || days < 1) return undefined\n\n return days\n}\n\nfunction formatRelativeInputValue(value: number | undefined) {\n return value ? String(value) : ''\n}\n\nfunction getRelativeDaysRange(days: number, target: 'today' | 'yesterday'): DateRange {\n const today = startOfDay(new Date())\n const targetDate = target === 'today' ? addDays(today, -1) : addDays(today, -2)\n\n return {\n from: addDays(targetDate, -days + 1),\n to: targetDate\n }\n}\n\nfunction getRelativeDaysValue(range: DateRange | undefined, target: 'today' | 'yesterday') {\n if (!range?.from || !range.to) return undefined\n\n const today = startOfDay(new Date())\n const targetDate = target === 'today' ? addDays(today, -1) : addDays(today, -2)\n if (!isSameDay(range.to, targetDate)) return undefined\n\n const days = differenceInCalendarDays(targetDate, startOfDay(range.from)) + 1\n return days > 0 ? days : undefined\n}\n\nfunction isSameRange(left: DateRange | undefined, right: DateRange | undefined) {\n return isSameDay(left?.from, right?.from) && isSameDay(left?.to, right?.to)\n}\n\nfunction isSameDay(left: Date | undefined, right: Date | undefined) {\n if (!left || !right) return left === right\n\n return (\n left.getFullYear() === right.getFullYear() &&\n left.getMonth() === right.getMonth() &&\n left.getDate() === right.getDate()\n )\n}\n\nfunction startOfDay(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n}\n\nfunction startOfWeek(date: Date) {\n const day = startOfDay(date)\n return addDays(day, -day.getDay())\n}\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1)\n}\n\nfunction endOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0)\n}\n\nfunction differenceInCalendarDays(left: Date, right: Date) {\n const millisecondsPerDay = 24 * 60 * 60 * 1000\n return Math.round((startOfDay(left).getTime() - startOfDay(right).getTime()) / millisecondsPerDay)\n}\n\nfunction addDays(date: Date, amount: number) {\n const nextDate = startOfDay(date)\n nextDate.setDate(nextDate.getDate() + amount)\n return nextDate\n}\n\nexport {\n type DateRange,\n DateRangePicker,\n DateRangePickerActions,\n DateRangePickerApply,\n DateRangePickerCalendar,\n DateRangePickerContent,\n DateRangePickerDateFields,\n DateRangePickerPreset,\n DateRangePickerPresets,\n DateRangePickerReset,\n DateRangePickerTrigger,\n DateRangePickerValue\n}\n"],"mappings":"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"}
|