@uselets/ui 1.3.0 → 1.4.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.
Files changed (212) hide show
  1. package/README.md +91 -1
  2. package/dist/chart-DHS2QeM8.d.ts +80 -0
  3. package/dist/cli/uselets.mjs.map +1 -1
  4. package/dist/components/accordion.d.ts +4 -5
  5. package/dist/components/accordion.js.map +1 -1
  6. package/dist/components/alert-dialog.d.ts +12 -13
  7. package/dist/components/alert-dialog.js.map +1 -1
  8. package/dist/components/alert.d.ts +5 -7
  9. package/dist/components/alert.js.map +1 -1
  10. package/dist/components/anchor.d.ts +2 -4
  11. package/dist/components/anchor.js.map +1 -1
  12. package/dist/components/area-chart.d.ts +58 -0
  13. package/dist/components/area-chart.js +2 -0
  14. package/dist/components/area-chart.js.map +1 -0
  15. package/dist/components/avatar.d.ts +6 -7
  16. package/dist/components/avatar.js.map +1 -1
  17. package/dist/components/badge.d.ts +2 -4
  18. package/dist/components/badge.js.map +1 -1
  19. package/dist/components/bar-chart.d.ts +54 -0
  20. package/dist/components/bar-chart.js +2 -0
  21. package/dist/components/bar-chart.js.map +1 -0
  22. package/dist/components/breadcrumb.d.ts +7 -8
  23. package/dist/components/breadcrumb.js.map +1 -1
  24. package/dist/components/button-group.d.ts +4 -6
  25. package/dist/components/button-group.js.map +1 -1
  26. package/dist/components/button.d.ts +2 -4
  27. package/dist/components/button.js.map +1 -1
  28. package/dist/components/calendar.d.ts +2 -3
  29. package/dist/components/calendar.js.map +1 -1
  30. package/dist/components/card.d.ts +7 -8
  31. package/dist/components/card.js.map +1 -1
  32. package/dist/components/carousel.d.ts +6 -7
  33. package/dist/components/carousel.js.map +1 -1
  34. package/dist/components/carousel.spec.js +1 -1
  35. package/dist/components/carousel.spec.js.map +1 -1
  36. package/dist/components/center.d.ts +2 -4
  37. package/dist/components/center.js.map +1 -1
  38. package/dist/components/chart.d.ts +2 -263
  39. package/dist/components/chart.js +1 -1
  40. package/dist/components/chart.js.map +1 -1
  41. package/dist/components/checkbox.d.ts +2 -4
  42. package/dist/components/checkbox.js +1 -1
  43. package/dist/components/checkbox.js.map +1 -1
  44. package/dist/components/code.d.ts +1 -2
  45. package/dist/components/code.js.map +1 -1
  46. package/dist/components/collapsible.d.ts +3 -4
  47. package/dist/components/collapsible.js.map +1 -1
  48. package/dist/components/combobox.d.ts +15 -16
  49. package/dist/components/combobox.js.map +1 -1
  50. package/dist/components/command.d.ts +9 -10
  51. package/dist/components/command.js.map +1 -1
  52. package/dist/components/container.d.ts +2 -4
  53. package/dist/components/container.js.map +1 -1
  54. package/dist/components/data-table.d.ts +164 -0
  55. package/dist/components/data-table.js +2 -0
  56. package/dist/components/data-table.js.map +1 -0
  57. package/dist/components/date-range-picker.d.ts +11 -12
  58. package/dist/components/date-range-picker.js.map +1 -1
  59. package/dist/components/dialog.d.ts +11 -13
  60. package/dist/components/dialog.js.map +1 -1
  61. package/dist/components/donut-chart.d.ts +22 -0
  62. package/dist/components/donut-chart.js +2 -0
  63. package/dist/components/donut-chart.js.map +1 -0
  64. package/dist/components/drawer.d.ts +12 -14
  65. package/dist/components/drawer.js.map +1 -1
  66. package/dist/components/dropdown-menu.d.ts +15 -16
  67. package/dist/components/dropdown-menu.js.map +1 -1
  68. package/dist/components/dropzone.d.ts +1 -2
  69. package/dist/components/dropzone.js.map +1 -1
  70. package/dist/components/empty.d.ts +7 -9
  71. package/dist/components/empty.js.map +1 -1
  72. package/dist/components/field.d.ts +11 -13
  73. package/dist/components/field.js.map +1 -1
  74. package/dist/components/field.spec.js +1 -1
  75. package/dist/components/field.spec.js.map +1 -1
  76. package/dist/components/flex.d.ts +4 -6
  77. package/dist/components/flex.js.map +1 -1
  78. package/dist/components/grid.d.ts +2 -3
  79. package/dist/components/grid.js.map +1 -1
  80. package/dist/components/group.d.ts +6 -4
  81. package/dist/components/group.js +1 -1
  82. package/dist/components/group.js.map +1 -1
  83. package/dist/components/heading.d.ts +2 -4
  84. package/dist/components/heading.js.map +1 -1
  85. package/dist/components/hover-card.d.ts +3 -4
  86. package/dist/components/hover-card.js.map +1 -1
  87. package/dist/components/input-group.d.ts +8 -10
  88. package/dist/components/input-group.js.map +1 -1
  89. package/dist/components/input-otp.d.ts +4 -5
  90. package/dist/components/input-otp.js.map +1 -1
  91. package/dist/components/input.d.ts +1 -2
  92. package/dist/components/input.js.map +1 -1
  93. package/dist/components/kbd.d.ts +2 -3
  94. package/dist/components/kbd.js.map +1 -1
  95. package/dist/components/label.d.ts +1 -2
  96. package/dist/components/label.js.map +1 -1
  97. package/dist/components/list.d.ts +4 -6
  98. package/dist/components/list.js.map +1 -1
  99. package/dist/components/mask-input.d.ts +25 -0
  100. package/dist/components/mask-input.js +2 -0
  101. package/dist/components/mask-input.js.map +1 -0
  102. package/dist/components/native-select.d.ts +3 -4
  103. package/dist/components/native-select.js.map +1 -1
  104. package/dist/components/navigation-menu.d.ts +9 -11
  105. package/dist/components/navigation-menu.js.map +1 -1
  106. package/dist/components/pagination.d.ts +7 -8
  107. package/dist/components/pagination.js.map +1 -1
  108. package/dist/components/pie-chart.d.ts +58 -0
  109. package/dist/components/pie-chart.js +2 -0
  110. package/dist/components/pie-chart.js.map +1 -0
  111. package/dist/components/popover.d.ts +7 -8
  112. package/dist/components/popover.js.map +1 -1
  113. package/dist/components/progress.d.ts +1 -2
  114. package/dist/components/progress.js.map +1 -1
  115. package/dist/components/radio-group.d.ts +3 -5
  116. package/dist/components/radio-group.js.map +1 -1
  117. package/dist/components/resizable.d.ts +3 -4
  118. package/dist/components/resizable.js.map +1 -1
  119. package/dist/components/scroll-area.d.ts +2 -3
  120. package/dist/components/scroll-area.js.map +1 -1
  121. package/dist/components/select.d.ts +10 -11
  122. package/dist/components/select.js.map +1 -1
  123. package/dist/components/separator.d.ts +1 -2
  124. package/dist/components/separator.js.map +1 -1
  125. package/dist/components/sidebar.d.ts +24 -26
  126. package/dist/components/sidebar.js.map +1 -1
  127. package/dist/components/simple-grid.d.ts +1 -2
  128. package/dist/components/simple-grid.js.map +1 -1
  129. package/dist/components/skeleton.d.ts +1 -2
  130. package/dist/components/skeleton.js.map +1 -1
  131. package/dist/components/skeleton.spec.js +1 -1
  132. package/dist/components/skeleton.spec.js.map +1 -1
  133. package/dist/components/slider.d.ts +1 -2
  134. package/dist/components/slider.js.map +1 -1
  135. package/dist/components/sonner.d.ts +1 -2
  136. package/dist/components/sonner.js.map +1 -1
  137. package/dist/components/spinner.d.ts +2 -4
  138. package/dist/components/spinner.js.map +1 -1
  139. package/dist/components/stack.d.ts +6 -4
  140. package/dist/components/stack.js +1 -1
  141. package/dist/components/stack.js.map +1 -1
  142. package/dist/components/switch.d.ts +1 -2
  143. package/dist/components/switch.js.map +1 -1
  144. package/dist/components/table.d.ts +29 -11
  145. package/dist/components/table.js +1 -1
  146. package/dist/components/table.js.map +1 -1
  147. package/dist/components/tabs.d.ts +5 -7
  148. package/dist/components/tabs.js.map +1 -1
  149. package/dist/components/text.d.ts +2 -4
  150. package/dist/components/text.js.map +1 -1
  151. package/dist/components/textarea.d.ts +1 -2
  152. package/dist/components/textarea.js.map +1 -1
  153. package/dist/components/theme.d.ts +2 -3
  154. package/dist/components/theme.js.map +1 -1
  155. package/dist/components/timeline.d.ts +4 -5
  156. package/dist/components/timeline.js.map +1 -1
  157. package/dist/components/toggle-group.d.ts +2 -3
  158. package/dist/components/toggle-group.js.map +1 -1
  159. package/dist/components/toggle.d.ts +2 -4
  160. package/dist/components/toggle.js.map +1 -1
  161. package/dist/components/tooltip.d.ts +5 -6
  162. package/dist/components/tooltip.js.map +1 -1
  163. package/dist/components/unstyled-button.d.ts +1 -2
  164. package/dist/components/unstyled-button.js.map +1 -1
  165. package/dist/components/visibility.d.ts +2 -3
  166. package/dist/components/visibility.js.map +1 -1
  167. package/dist/{dist-QvsLCO1I.js → dist-C35vdEt2.js} +45 -25
  168. package/dist/dist-C35vdEt2.js.map +1 -0
  169. package/dist/hooks/use-breakpoint-value.js.map +1 -1
  170. package/dist/hooks/use-breakpoint-value.spec.js +1 -1
  171. package/dist/hooks/use-breakpoint-value.spec.js.map +1 -1
  172. package/dist/hooks/use-breakpoint.js.map +1 -1
  173. package/dist/hooks/use-breakpoint.spec.js +1 -1
  174. package/dist/hooks/use-breakpoint.spec.js.map +1 -1
  175. package/dist/hooks/use-disclosure.js.map +1 -1
  176. package/dist/hooks/use-disclosure.spec.js +1 -1
  177. package/dist/hooks/use-disclosure.spec.js.map +1 -1
  178. package/dist/hooks/use-document-visibility.js.map +1 -1
  179. package/dist/hooks/use-document-visibility.spec.js +1 -1
  180. package/dist/hooks/use-document-visibility.spec.js.map +1 -1
  181. package/dist/hooks/use-idle.js.map +1 -1
  182. package/dist/hooks/use-idle.spec.js +1 -1
  183. package/dist/hooks/use-idle.spec.js.map +1 -1
  184. package/dist/hooks/use-interval.js.map +1 -1
  185. package/dist/hooks/use-interval.spec.js +1 -1
  186. package/dist/hooks/use-interval.spec.js.map +1 -1
  187. package/dist/hooks/use-local-storage.js.map +1 -1
  188. package/dist/hooks/use-local-storage.spec.js +1 -1
  189. package/dist/hooks/use-local-storage.spec.js.map +1 -1
  190. package/dist/hooks/use-mask.d.ts +9 -0
  191. package/dist/hooks/use-mask.js +2 -0
  192. package/dist/hooks/use-mask.js.map +1 -0
  193. package/dist/hooks/use-mobile.js.map +1 -1
  194. package/dist/hooks/use-mobile.spec.js +1 -1
  195. package/dist/hooks/use-mobile.spec.js.map +1 -1
  196. package/dist/index.d.ts +10 -3
  197. package/dist/index.js +1 -1
  198. package/dist/lib/button.js.map +1 -1
  199. package/dist/lib/color.js.map +1 -1
  200. package/dist/lib/utils.js.map +1 -1
  201. package/dist/magic-string.es-C-uSEkg2.js.map +1 -1
  202. package/dist/postcss.config.js.map +1 -1
  203. package/dist/{react.esm-D_dNEsWM.js → react.esm-BagSCtI3.js} +11 -2
  204. package/dist/{react.esm-D_dNEsWM.js.map → react.esm-BagSCtI3.js.map} +1 -1
  205. package/dist/skills/uselets-ui/SKILL.md +1 -0
  206. package/dist/skills/uselets-ui/references/component-catalog.md +31 -4
  207. package/dist/skills/uselets-ui/references/package-guide.md +136 -1
  208. package/package.json +15 -13
  209. package/skills/uselets-ui/SKILL.md +1 -0
  210. package/skills/uselets-ui/references/component-catalog.md +31 -4
  211. package/skills/uselets-ui/references/package-guide.md +136 -1
  212. package/dist/dist-QvsLCO1I.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.js","names":["Table"],"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 Column,\n ColumnDef,\n ColumnFiltersState,\n PaginationState,\n RowData,\n RowSelectionState,\n SortingState,\n Table as TanStackTable,\n VisibilityState\n} from '@tanstack/react-table'\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\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\ntype DataTableToolbarActions<TData> = React.ReactNode | ((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 columns: ColumnDef<TData, TValue>[]\n data: TData[]\n getRowId?: (originalRow: TData, index: number, parent?: { id: string }) => string\n filterColumns?: string | string[]\n pageSize?: number\n pageSizeOptions?: number[]\n enableRowSelection?: boolean\n enableSorting?: boolean\n showPagination?: boolean\n showColumnVisibility?: boolean\n toolbarActions?: DataTableToolbarActions<TData>\n labels?: Partial<DataTableLabels>\n className?: string\n tableClassName?: string\n variant?: TableProps['variant']\n}\n\nexport type DataTableColumnHeaderProps<TData extends RowData, TValue> = React.ComponentProps<'div'> & {\n column: Column<TData, TValue>\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 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\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 = true,\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<VisibilityState>({})\n const [pagination, setPagination] = React.useState<PaginationState>({\n pageIndex: 0,\n pageSize\n })\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({})\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 useReactTable({\n data,\n columns: resolvedColumns,\n getRowId,\n enableRowSelection,\n enableSorting,\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 getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: enablePagination ? getPaginationRowModel() : undefined,\n getSortedRowModel: enableSorting ? getSortedRowModel() : undefined\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 table = useDataTable<TData, TValue>({\n columns,\n data,\n getRowId,\n pageSize,\n enableRowSelection,\n enableSorting,\n enablePagination,\n labels\n })\n return (\n <DataTableRootControlled table={table} labels={labels} className={className}>\n {children}\n </DataTableRootControlled>\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=\"outline\" color=\"zinc\" 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 {column.id}\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 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 {showColumnVisibility ? <DataTableViewOptions table={table} label={labels.columnsButton} /> : 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 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.getState().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.getState().pagination.pageSize}`}\n onValueChange={(value) => 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=\"outline\"\n color=\"zinc\"\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=\"outline\"\n color=\"zinc\"\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=\"outline\"\n color=\"zinc\"\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=\"outline\"\n color=\"zinc\"\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() || (table.getIsSomePageRowsSelected() && 'indeterminate')}\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(Boolean(value))}\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n aria-label={selectRow}\n checked={row.getIsSelected() || (row.getIsSomeSelected() && 'indeterminate')}\n disabled={!row.getCanSelect()}\n onCheckedChange={(value) => row.toggleSelected(Boolean(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 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 type { Column, ColumnDef, RowData, Table as TanStackTable } from '@tanstack/react-table'\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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"}
@@ -2,7 +2,6 @@ import { n as __name } from "../chunk-CHh1Zzun.js";
2
2
  import { Button } from "./button.js";
3
3
  import { Calendar, DateRange } from "./calendar.js";
4
4
  import { Popover, PopoverContent } from "./popover.js";
5
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
6
5
  import * as React from "react";
7
6
  import { Locale } from "react-day-picker";
8
7
 
@@ -54,7 +53,7 @@ declare function DateRangePicker({
54
53
  placeholder,
55
54
  children,
56
55
  ...props
57
- }: DateRangePickerProps): _$react_jsx_runtime0.JSX.Element;
56
+ }: DateRangePickerProps): import("react/jsx-runtime").JSX.Element;
58
57
  declare function DateRangePickerTrigger({
59
58
  className,
60
59
  children,
@@ -63,50 +62,50 @@ declare function DateRangePickerTrigger({
63
62
  color,
64
63
  type,
65
64
  ...props
66
- }: DateRangePickerTriggerProps): _$react_jsx_runtime0.JSX.Element;
65
+ }: DateRangePickerTriggerProps): import("react/jsx-runtime").JSX.Element;
67
66
  declare function DateRangePickerValue({
68
67
  className,
69
68
  placeholder,
70
69
  ...props
71
- }: DateRangePickerValueProps): _$react_jsx_runtime0.JSX.Element;
70
+ }: DateRangePickerValueProps): import("react/jsx-runtime").JSX.Element;
72
71
  declare function DateRangePickerContent({
73
72
  className,
74
73
  align,
75
74
  sideOffset,
76
75
  children,
77
76
  ...props
78
- }: DateRangePickerContentProps): _$react_jsx_runtime0.JSX.Element;
77
+ }: DateRangePickerContentProps): import("react/jsx-runtime").JSX.Element;
79
78
  declare function DateRangePickerPresets({
80
79
  className,
81
80
  presets,
82
81
  ...props
83
- }: DateRangePickerPresetsProps): _$react_jsx_runtime0.JSX.Element;
82
+ }: DateRangePickerPresetsProps): import("react/jsx-runtime").JSX.Element;
84
83
  declare function DateRangePickerPreset({
85
84
  className,
86
85
  selected,
87
86
  ...props
88
- }: DateRangePickerPresetProps): _$react_jsx_runtime0.JSX.Element;
87
+ }: DateRangePickerPresetProps): import("react/jsx-runtime").JSX.Element;
89
88
  declare function DateRangePickerCalendar({
90
89
  className,
91
90
  showOutsideDays,
92
91
  onMonthChange,
93
92
  ...props
94
- }: DateRangePickerCalendarProps): _$react_jsx_runtime0.JSX.Element;
93
+ }: DateRangePickerCalendarProps): import("react/jsx-runtime").JSX.Element;
95
94
  declare function DateRangePickerDateFields({
96
95
  className,
97
96
  ...props
98
- }: DateRangePickerDateFieldsProps): _$react_jsx_runtime0.JSX.Element;
97
+ }: DateRangePickerDateFieldsProps): import("react/jsx-runtime").JSX.Element;
99
98
  declare function DateRangePickerActions({
100
99
  className,
101
100
  children,
102
101
  ...props
103
- }: DateRangePickerActionsProps): _$react_jsx_runtime0.JSX.Element;
102
+ }: DateRangePickerActionsProps): import("react/jsx-runtime").JSX.Element;
104
103
  declare function DateRangePickerApply({
105
104
  children,
106
105
  onClick,
107
106
  className,
108
107
  ...props
109
- }: DateRangePickerApplyProps): _$react_jsx_runtime0.JSX.Element;
108
+ }: DateRangePickerApplyProps): import("react/jsx-runtime").JSX.Element;
110
109
  declare function DateRangePickerReset({
111
110
  children,
112
111
  onClick,
@@ -114,7 +113,7 @@ declare function DateRangePickerReset({
114
113
  color,
115
114
  className,
116
115
  ...props
117
- }: DateRangePickerResetProps): _$react_jsx_runtime0.JSX.Element;
116
+ }: DateRangePickerResetProps): import("react/jsx-runtime").JSX.Element;
118
117
  //#endregion
119
118
  export { type DateRange, DateRangePicker, DateRangePickerActions, DateRangePickerActionsProps, DateRangePickerApply, DateRangePickerApplyProps, DateRangePickerCalendar, DateRangePickerCalendarProps, DateRangePickerContent, DateRangePickerContentProps, DateRangePickerDateFields, DateRangePickerDateFieldsProps, DateRangePickerPreset, DateRangePickerPresetOption, DateRangePickerPresetProps, DateRangePickerPresets, DateRangePickerPresetsProps, DateRangePickerProps, DateRangePickerReset, DateRangePickerResetProps, DateRangePickerTrigger, DateRangePickerTriggerProps, DateRangePickerValue, DateRangePickerValueProps };
120
119
  //# sourceMappingURL=date-range-picker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-range-picker.js","names":[],"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 { 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 value?: DateRange | null\n defaultValue?: DateRange | null\n onValueChange?: (range: DateRange | null) => void\n onApply?: (range: DateRange | null) => void\n onReset?: () => void\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n locale?: Partial<Locale>\n placeholder?: string\n}\n\nexport type DateRangePickerTriggerProps = React.ComponentProps<typeof Button> & {\n asChild?: boolean\n}\n\nexport type DateRangePickerValueProps = React.ComponentProps<'span'> & {\n placeholder?: string\n}\n\nexport type DateRangePickerContentProps = React.ComponentProps<typeof PopoverContent>\n\nexport type DateRangePickerPresetsProps = React.ComponentProps<'div'> & {\n presets?: DateRangePickerPresetOption[]\n}\n\nexport type DateRangePickerPresetProps = React.ComponentProps<'button'> & {\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 = 'outline',\n color = 'zinc',\n type = 'button',\n ...props\n}: DateRangePickerTriggerProps) {\n if (asChild) {\n return <PopoverTrigger asChild>{children}</PopoverTrigger>\n }\n\n return (\n <PopoverTrigger asChild>\n <Button\n type={type}\n variant={variant}\n color={color}\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={cn('w-[calc(100vw---spacing(4))] max-w-2xl p-2', className)}\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 = 'outline',\n color = 'zinc',\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 color={color}\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":[],"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 { 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 value?: DateRange | null\n defaultValue?: DateRange | null\n onValueChange?: (range: DateRange | null) => void\n onApply?: (range: DateRange | null) => void\n onReset?: () => void\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n locale?: Partial<Locale>\n placeholder?: string\n}\n\nexport type DateRangePickerTriggerProps = React.ComponentProps<typeof Button> & {\n asChild?: boolean\n}\n\nexport type DateRangePickerValueProps = React.ComponentProps<'span'> & {\n placeholder?: string\n}\n\nexport type DateRangePickerContentProps = React.ComponentProps<typeof PopoverContent>\n\nexport type DateRangePickerPresetsProps = React.ComponentProps<'div'> & {\n presets?: DateRangePickerPresetOption[]\n}\n\nexport type DateRangePickerPresetProps = React.ComponentProps<'button'> & {\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 = 'outline',\n color = 'zinc',\n type = 'button',\n ...props\n}: DateRangePickerTriggerProps) {\n if (asChild) {\n return <PopoverTrigger asChild>{children}</PopoverTrigger>\n }\n\n return (\n <PopoverTrigger asChild>\n <Button\n type={type}\n variant={variant}\n color={color}\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={cn('w-[calc(100vw---spacing(4))] max-w-2xl p-2', className)}\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 = 'outline',\n color = 'zinc',\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 color={color}\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,14 +1,12 @@
1
1
  import { n as __name } from "../chunk-CHh1Zzun.js";
2
2
  import { Dialog as Dialog$1 } from "radix-ui";
3
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
3
  import { VariantProps } from "class-variance-authority";
5
4
  import * as React from "react";
6
- import * as _$class_variance_authority_types0 from "class-variance-authority/types";
7
5
 
8
6
  //#region src/components/dialog.d.ts
9
7
  declare const dialogContentVariants: (props?: ({
10
8
  size?: "sm" | "md" | "lg" | "xl" | "2xl" | null | undefined;
11
- } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
9
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
10
  type DialogSize = NonNullable<VariantProps<typeof dialogContentVariants>['size']>;
13
11
  type DialogProps = React.ComponentProps<typeof Dialog$1.Root> & {
14
12
  size?: DialogSize;
@@ -30,45 +28,45 @@ type DialogDescriptionProps = React.ComponentProps<typeof Dialog$1.Description>;
30
28
  declare function Dialog({
31
29
  size,
32
30
  ...props
33
- }: DialogProps): _$react_jsx_runtime0.JSX.Element;
31
+ }: DialogProps): import("react/jsx-runtime").JSX.Element;
34
32
  declare function DialogTrigger({
35
33
  ...props
36
- }: React.ComponentProps<typeof Dialog$1.Trigger>): _$react_jsx_runtime0.JSX.Element;
34
+ }: React.ComponentProps<typeof Dialog$1.Trigger>): import("react/jsx-runtime").JSX.Element;
37
35
  declare function DialogPortal({
38
36
  ...props
39
- }: DialogPortalProps): _$react_jsx_runtime0.JSX.Element;
37
+ }: DialogPortalProps): import("react/jsx-runtime").JSX.Element;
40
38
  declare function DialogClose({
41
39
  ...props
42
- }: React.ComponentProps<typeof Dialog$1.Close>): _$react_jsx_runtime0.JSX.Element;
40
+ }: React.ComponentProps<typeof Dialog$1.Close>): import("react/jsx-runtime").JSX.Element;
43
41
  declare function DialogOverlay({
44
42
  className,
45
43
  ...props
46
- }: DialogOverlayProps): _$react_jsx_runtime0.JSX.Element;
44
+ }: DialogOverlayProps): import("react/jsx-runtime").JSX.Element;
47
45
  declare function DialogContent({
48
46
  className,
49
47
  children,
50
48
  showCloseButton,
51
49
  overlayRef,
52
50
  ...props
53
- }: DialogContentProps): _$react_jsx_runtime0.JSX.Element;
51
+ }: DialogContentProps): import("react/jsx-runtime").JSX.Element;
54
52
  declare function DialogHeader({
55
53
  className,
56
54
  ...props
57
- }: DialogHeaderProps): _$react_jsx_runtime0.JSX.Element;
55
+ }: DialogHeaderProps): import("react/jsx-runtime").JSX.Element;
58
56
  declare function DialogFooter({
59
57
  className,
60
58
  showCloseButton,
61
59
  children,
62
60
  ...props
63
- }: DialogFooterProps): _$react_jsx_runtime0.JSX.Element;
61
+ }: DialogFooterProps): import("react/jsx-runtime").JSX.Element;
64
62
  declare function DialogTitle({
65
63
  className,
66
64
  ...props
67
- }: DialogTitleProps): _$react_jsx_runtime0.JSX.Element;
65
+ }: DialogTitleProps): import("react/jsx-runtime").JSX.Element;
68
66
  declare function DialogDescription({
69
67
  className,
70
68
  ...props
71
- }: DialogDescriptionProps): _$react_jsx_runtime0.JSX.Element;
69
+ }: DialogDescriptionProps): import("react/jsx-runtime").JSX.Element;
72
70
  //#endregion
73
71
  export { Dialog, DialogClose, DialogCloseProps, DialogContent, DialogContentProps, DialogDescription, DialogDescriptionProps, DialogFooter, DialogFooterProps, DialogHeader, DialogHeaderProps, DialogOverlay, DialogOverlayProps, DialogPortal, DialogPortalProps, DialogProps, DialogTitle, DialogTitleProps, DialogTrigger, DialogTriggerProps };
74
72
  //# sourceMappingURL=dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","names":["DialogPrimitive"],"sources":["../../src/components/dialog.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { IconX } from '@tabler/icons-react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Dialog as DialogPrimitive } from 'radix-ui'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\nconst dialogContentVariants = cva(\n 'bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-sm ring-1 duration-100 fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none',\n {\n variants: {\n size: {\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-xl',\n '2xl': 'sm:max-w-2xl'\n }\n },\n defaultVariants: {\n size: 'sm'\n }\n }\n)\n\ntype DialogSize = NonNullable<VariantProps<typeof dialogContentVariants>['size']>\ntype DialogSizeContextValue = { size: DialogSize }\nconst DialogSizeContext = React.createContext<DialogSizeContextValue>({ size: 'sm' })\n\nexport type DialogProps = React.ComponentProps<typeof DialogPrimitive.Root> & { size?: DialogSize }\nexport type DialogTriggerProps = React.ComponentProps<typeof DialogPrimitive.Trigger>\nexport type DialogPortalProps = React.ComponentProps<typeof DialogPrimitive.Portal>\nexport type DialogCloseProps = React.ComponentProps<typeof DialogPrimitive.Close>\nexport type DialogOverlayProps = React.ComponentProps<typeof DialogPrimitive.Overlay>\nexport type DialogContentProps = React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n overlayRef?: React.Ref<HTMLDivElement>\n}\nexport type DialogHeaderProps = React.ComponentProps<'div'>\nexport type DialogFooterProps = React.ComponentProps<'div'> & { showCloseButton?: boolean }\nexport type DialogTitleProps = React.ComponentProps<typeof DialogPrimitive.Title>\nexport type DialogDescriptionProps = React.ComponentProps<typeof DialogPrimitive.Description>\n\nfunction Dialog({ size = 'sm', ...props }: DialogProps) {\n const contextValue = React.useMemo<DialogSizeContextValue>(() => ({ size }), [size])\n\n return (\n <DialogSizeContext.Provider value={contextValue}>\n <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n </DialogSizeContext.Provider>\n )\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({ ...props }: DialogPortalProps) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({ className, ...props }: DialogOverlayProps) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'bg-black/10 fixed inset-0 isolate z-50',\n 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0',\n 'duration-100 supports-backdrop-filter:backdrop-blur-xs',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({ className, children, showCloseButton = true, overlayRef, ...props }: DialogContentProps) {\n const { size } = React.useContext(DialogSizeContext)\n\n return (\n <DialogPortal>\n <DialogOverlay ref={overlayRef} />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(dialogContentVariants({ size }), className)}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot=\"dialog-close\" asChild>\n <Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\">\n <IconX />\n <span className=\"sr-only\">Close</span>\n </Button>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: DialogHeaderProps) {\n return <div data-slot=\"dialog-header\" className={cn('gap-2 flex flex-col', className)} {...props} />\n}\n\nfunction DialogFooter({ className, showCloseButton = false, children, ...props }: DialogFooterProps) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n 'bg-muted/50 -mx-4 -mb-4 rounded-b-xl border-t p-4',\n 'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogTitleProps) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn('text-base leading-none font-medium', className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({ className, ...props }: DialogDescriptionProps) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n 'text-muted-foreground text-sm',\n '*:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger\n}\n"],"mappings":"8SASA,MAAM,EAAwB,EAC5B,wUACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,MAAO,eACR,CACF,CACD,gBAAiB,CACf,KAAM,KACP,CACF,CACF,CAIK,EAAoB,EAAM,cAAsC,CAAE,KAAM,KAAM,CAAC,CAgBrF,SAAS,OAAO,CAAE,OAAO,KAAM,GAAG,GAAsB,CACtD,IAAM,EAAe,EAAM,aAAuC,CAAE,OAAM,EAAG,CAAC,EAAK,CAAC,CAEpF,OACE,EAAC,EAAkB,SAAnB,CAA4B,MAAO,WACjC,EAACA,EAAgB,KAAjB,CAAsB,YAAU,SAAS,GAAI,EAAS,CAAA,CAC3B,CAAA,CAIjC,SAAS,cAAc,CAAE,GAAG,GAA+D,CACzF,OAAO,EAACA,EAAgB,QAAjB,CAAyB,YAAU,iBAAiB,GAAI,EAAS,CAAA,CAG1E,SAAS,aAAa,CAAE,GAAG,GAA4B,CACrD,OAAO,EAACA,EAAgB,OAAjB,CAAwB,YAAU,gBAAgB,GAAI,EAAS,CAAA,CAGxE,SAAS,YAAY,CAAE,GAAG,GAA6D,CACrF,OAAO,EAACA,EAAgB,MAAjB,CAAuB,YAAU,eAAe,GAAI,EAAS,CAAA,CAGtE,SAAS,cAAc,CAAE,YAAW,GAAG,GAA6B,CAClE,OACE,EAACA,EAAgB,QAAjB,CACE,YAAU,iBACV,UAAW,EACT,yCACA,0FACA,yDACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,cAAc,CAAE,YAAW,WAAU,kBAAkB,GAAM,aAAY,GAAG,GAA6B,CAChH,GAAM,CAAE,QAAS,EAAM,WAAW,EAAkB,CAEpD,OACE,EAAC,aAAD,CAAA,SAAA,CACE,EAAC,cAAD,CAAe,IAAK,EAAc,CAAA,CAClC,EAACA,EAAgB,QAAjB,CACE,YAAU,iBACV,UAAW,EAAG,EAAsB,CAAE,OAAM,CAAC,CAAE,EAAU,CACzD,GAAI,WAHN,CAKG,EACA,GACC,EAACA,EAAgB,MAAjB,CAAuB,YAAU,eAAe,QAAA,YAC9C,EAAC,EAAD,CAAQ,QAAQ,QAAQ,UAAU,yBAAyB,KAAK,mBAAhE,CACE,EAAC,EAAD,EAAS,CAAA,CACT,EAAC,OAAD,CAAM,UAAU,mBAAU,QAAY,CAAA,CAC/B,GACa,CAAA,CAEF,GACb,CAAA,CAAA,CAInB,SAAS,aAAa,CAAE,YAAW,GAAG,GAA4B,CAChE,OAAO,EAAC,MAAD,CAAK,YAAU,gBAAgB,UAAW,EAAG,sBAAuB,EAAU,CAAE,GAAI,EAAS,CAAA,CAGtG,SAAS,aAAa,CAAE,YAAW,kBAAkB,GAAO,WAAU,GAAG,GAA4B,CACnG,OACE,EAAC,MAAD,CACE,YAAU,gBACV,UAAW,EACT,oDACA,yDACA,EACD,CACD,GAAI,WAPN,CASG,EACA,GACC,EAACA,EAAgB,MAAjB,CAAuB,QAAA,YACrB,EAAC,EAAD,CAAQ,QAAQ,mBAAU,QAAc,CAAA,CAClB,CAAA,CAEtB,GAIV,SAAS,YAAY,CAAE,YAAW,GAAG,GAA2B,CAC9D,OACE,EAACA,EAAgB,MAAjB,CACE,YAAU,eACV,UAAW,EAAG,qCAAsC,EAAU,CAC9D,GAAI,EACJ,CAAA,CAIN,SAAS,kBAAkB,CAAE,YAAW,GAAG,GAAiC,CAC1E,OACE,EAACA,EAAgB,YAAjB,CACE,YAAU,qBACV,UAAW,EACT,gCACA,uEACA,EACD,CACD,GAAI,EACJ,CAAA"}
1
+ {"version":3,"file":"dialog.js","names":["DialogPrimitive"],"sources":["../../src/components/dialog.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { IconX } from '@tabler/icons-react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Dialog as DialogPrimitive } from 'radix-ui'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\nconst dialogContentVariants = cva(\n 'bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-sm ring-1 duration-100 fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none',\n {\n variants: {\n size: {\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-xl',\n '2xl': 'sm:max-w-2xl'\n }\n },\n defaultVariants: {\n size: 'sm'\n }\n }\n)\n\ntype DialogSize = NonNullable<VariantProps<typeof dialogContentVariants>['size']>\ntype DialogSizeContextValue = { size: DialogSize }\nconst DialogSizeContext = React.createContext<DialogSizeContextValue>({ size: 'sm' })\n\nexport type DialogProps = React.ComponentProps<typeof DialogPrimitive.Root> & { size?: DialogSize }\nexport type DialogTriggerProps = React.ComponentProps<typeof DialogPrimitive.Trigger>\nexport type DialogPortalProps = React.ComponentProps<typeof DialogPrimitive.Portal>\nexport type DialogCloseProps = React.ComponentProps<typeof DialogPrimitive.Close>\nexport type DialogOverlayProps = React.ComponentProps<typeof DialogPrimitive.Overlay>\nexport type DialogContentProps = React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n overlayRef?: React.Ref<HTMLDivElement>\n}\nexport type DialogHeaderProps = React.ComponentProps<'div'>\nexport type DialogFooterProps = React.ComponentProps<'div'> & { showCloseButton?: boolean }\nexport type DialogTitleProps = React.ComponentProps<typeof DialogPrimitive.Title>\nexport type DialogDescriptionProps = React.ComponentProps<typeof DialogPrimitive.Description>\n\nfunction Dialog({ size = 'sm', ...props }: DialogProps) {\n const contextValue = React.useMemo<DialogSizeContextValue>(() => ({ size }), [size])\n\n return (\n <DialogSizeContext.Provider value={contextValue}>\n <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n </DialogSizeContext.Provider>\n )\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({ ...props }: DialogPortalProps) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({ className, ...props }: DialogOverlayProps) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'bg-black/10 fixed inset-0 isolate z-50',\n 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0',\n 'duration-100 supports-backdrop-filter:backdrop-blur-xs',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({ className, children, showCloseButton = true, overlayRef, ...props }: DialogContentProps) {\n const { size } = React.useContext(DialogSizeContext)\n\n return (\n <DialogPortal>\n <DialogOverlay ref={overlayRef} />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(dialogContentVariants({ size }), className)}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot=\"dialog-close\" asChild>\n <Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\">\n <IconX />\n <span className=\"sr-only\">Close</span>\n </Button>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: DialogHeaderProps) {\n return <div data-slot=\"dialog-header\" className={cn('gap-2 flex flex-col', className)} {...props} />\n}\n\nfunction DialogFooter({ className, showCloseButton = false, children, ...props }: DialogFooterProps) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n 'bg-muted/50 -mx-4 -mb-4 rounded-b-xl border-t p-4',\n 'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogTitleProps) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn('text-base leading-none font-medium', className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({ className, ...props }: DialogDescriptionProps) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n 'text-muted-foreground text-sm',\n '*:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground',\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger\n}\n"],"mappings":"8SASA,MAAM,EAAwB,EAC5B,wUACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,MAAO,cACT,CACF,EACA,gBAAiB,CACf,KAAM,IACR,CACF,CACF,EAIM,EAAoB,EAAM,cAAsC,CAAE,KAAM,IAAK,CAAC,EAgBpF,SAAS,OAAO,CAAE,OAAO,KAAM,GAAG,GAAsB,CACtD,IAAM,EAAe,EAAM,aAAuC,CAAE,MAAK,GAAI,CAAC,CAAI,CAAC,EAEnF,OACE,EAAC,EAAkB,SAAnB,CAA4B,MAAO,WACjC,EAACA,EAAgB,KAAjB,CAAsB,YAAU,SAAS,GAAI,CAAQ,CAAA,CAC3B,CAAA,CAEhC,CAEA,SAAS,cAAc,CAAE,GAAG,GAA+D,CACzF,OAAO,EAACA,EAAgB,QAAjB,CAAyB,YAAU,iBAAiB,GAAI,CAAQ,CAAA,CACzE,CAEA,SAAS,aAAa,CAAE,GAAG,GAA4B,CACrD,OAAO,EAACA,EAAgB,OAAjB,CAAwB,YAAU,gBAAgB,GAAI,CAAQ,CAAA,CACvE,CAEA,SAAS,YAAY,CAAE,GAAG,GAA6D,CACrF,OAAO,EAACA,EAAgB,MAAjB,CAAuB,YAAU,eAAe,GAAI,CAAQ,CAAA,CACrE,CAEA,SAAS,cAAc,CAAE,YAAW,GAAG,GAA6B,CAClE,OACE,EAACA,EAAgB,QAAjB,CACE,YAAU,iBACV,UAAW,EACT,yCACA,0FACA,yDACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,cAAc,CAAE,YAAW,WAAU,kBAAkB,GAAM,aAAY,GAAG,GAA6B,CAChH,GAAM,CAAE,QAAS,EAAM,WAAW,CAAiB,EAEnD,OACE,EAAC,aAAD,CAAA,SAAA,CACE,EAAC,cAAD,CAAe,IAAK,CAAa,CAAA,EACjC,EAACA,EAAgB,QAAjB,CACE,YAAU,iBACV,UAAW,EAAG,EAAsB,CAAE,MAAK,CAAC,EAAG,CAAS,EACxD,GAAI,WAHN,CAKG,EACA,GACC,EAACA,EAAgB,MAAjB,CAAuB,YAAU,eAAe,QAAA,YAC9C,EAAC,EAAD,CAAQ,QAAQ,QAAQ,UAAU,yBAAyB,KAAK,mBAAhE,CACE,EAAC,EAAD,CAAQ,CAAA,EACR,EAAC,OAAD,CAAM,UAAU,mBAAU,OAAW,CAAA,CAC/B,GACa,CAAA,CAEF,GACb,CAAA,CAAA,CAElB,CAEA,SAAS,aAAa,CAAE,YAAW,GAAG,GAA4B,CAChE,OAAO,EAAC,MAAD,CAAK,YAAU,gBAAgB,UAAW,EAAG,sBAAuB,CAAS,EAAG,GAAI,CAAQ,CAAA,CACrG,CAEA,SAAS,aAAa,CAAE,YAAW,kBAAkB,GAAO,WAAU,GAAG,GAA4B,CACnG,OACE,EAAC,MAAD,CACE,YAAU,gBACV,UAAW,EACT,oDACA,yDACA,CACF,EACA,GAAI,WAPN,CASG,EACA,GACC,EAACA,EAAgB,MAAjB,CAAuB,QAAA,YACrB,EAAC,EAAD,CAAQ,QAAQ,mBAAU,OAAa,CAAA,CAClB,CAAA,CAEtB,GAET,CAEA,SAAS,YAAY,CAAE,YAAW,GAAG,GAA2B,CAC9D,OACE,EAACA,EAAgB,MAAjB,CACE,YAAU,eACV,UAAW,EAAG,qCAAsC,CAAS,EAC7D,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,kBAAkB,CAAE,YAAW,GAAG,GAAiC,CAC1E,OACE,EAACA,EAAgB,YAAjB,CACE,YAAU,qBACV,UAAW,EACT,gCACA,uEACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
@@ -0,0 +1,22 @@
1
+ import { n as __name } from "../chunk-CHh1Zzun.js";
2
+ import { PieChartProps } from "./pie-chart.js";
3
+ import * as React from "react";
4
+
5
+ //#region src/components/donut-chart.d.ts
6
+ type DonutChartProps = PieChartProps & {
7
+ thickness?: number;
8
+ withTotal?: boolean;
9
+ totalLabel?: React.ReactNode;
10
+ };
11
+ declare function DonutChart({
12
+ className,
13
+ thickness,
14
+ outerRadius,
15
+ withTotal,
16
+ totalLabel,
17
+ data,
18
+ ...props
19
+ }: DonutChartProps): import("react/jsx-runtime").JSX.Element;
20
+ //#endregion
21
+ export { DonutChart, DonutChartProps };
22
+ //# sourceMappingURL=donut-chart.d.ts.map
@@ -0,0 +1,2 @@
1
+ import"../chunk-CHh1Zzun.js";import{cn as e}from"../lib/utils.js";import{PieChartBase as t}from"./pie-chart.js";import{jsx as n,jsxs as r}from"react/jsx-runtime";import*as i from"react";import{Label as a}from"recharts";function DonutChart({className:o,thickness:s=.35,outerRadius:c=`80%`,withTotal:l=!1,totalLabel:u=`Total`,data:d,...f}){let p=i.useMemo(()=>{let e=Math.min(Math.max(1-s,0),1);if(typeof c==`number`)return c*e;let t=/^(\d+(?:\.\d+)?)%$/.exec(c);return t?`${Number(t[1])*e}%`:c},[c,s]),m=i.useMemo(()=>d.reduce((e,t)=>e+t.value,0),[d]);return n(t,{dataSlot:`donut-chart`,className:e(o),data:d,outerRadius:c,innerRadius:p,centerSlot:l?n(a,{position:`center`,content:({viewBox:e})=>!e||!(`cx`in e)||!(`cy`in e)?null:r(`text`,{x:e.cx,y:e.cy,textAnchor:`middle`,dominantBaseline:`middle`,children:[n(`tspan`,{x:e.cx,y:e.cy,className:`fill-foreground font-medium text-2xl tabular-nums`,children:m.toLocaleString()}),n(`tspan`,{x:e.cx,y:(e.cy??0)+20,className:`fill-muted-foreground text-xs`,children:u})]})}):null,...f})}export{DonutChart};
2
+ //# sourceMappingURL=donut-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"donut-chart.js","names":[],"sources":["../../src/components/donut-chart.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { Label } from 'recharts'\n\nimport { cn } from '../lib/utils'\nimport { PieChartBase, type PieChartProps } from './pie-chart'\n\nexport type DonutChartProps = PieChartProps & {\n thickness?: number\n withTotal?: boolean\n totalLabel?: React.ReactNode\n}\n\nfunction DonutChart({\n className,\n thickness = 0.35,\n outerRadius = '80%',\n withTotal = false,\n totalLabel = 'Total',\n data,\n ...props\n}: DonutChartProps) {\n const innerRadius = React.useMemo(() => {\n const ratio = Math.min(Math.max(1 - thickness, 0), 1)\n if (typeof outerRadius === 'number') {\n return outerRadius * ratio\n }\n const match = /^(\\d+(?:\\.\\d+)?)%$/.exec(outerRadius)\n if (match) {\n return `${Number(match[1]) * ratio}%`\n }\n return outerRadius\n }, [outerRadius, thickness])\n\n const total = React.useMemo(() => data.reduce((sum, item) => sum + item.value, 0), [data])\n\n return (\n <PieChartBase\n dataSlot=\"donut-chart\"\n className={cn(className)}\n data={data}\n outerRadius={outerRadius}\n innerRadius={innerRadius}\n centerSlot={\n withTotal ? (\n <Label\n position=\"center\"\n content={({ viewBox }) => {\n if (!viewBox || !('cx' in viewBox) || !('cy' in viewBox)) {\n return null\n }\n return (\n <text x={viewBox.cx} y={viewBox.cy} textAnchor=\"middle\" dominantBaseline=\"middle\">\n <tspan x={viewBox.cx} y={viewBox.cy} className=\"fill-foreground font-medium text-2xl tabular-nums\">\n {total.toLocaleString()}\n </tspan>\n <tspan x={viewBox.cx} y={(viewBox.cy ?? 0) + 20} className=\"fill-muted-foreground text-xs\">\n {totalLabel}\n </tspan>\n </text>\n )\n }}\n />\n ) : null\n }\n {...props}\n />\n )\n}\n\nexport { DonutChart }\n"],"mappings":"2NAaA,SAAS,WAAW,CAClB,YACA,YAAY,IACZ,cAAc,MACd,YAAY,GACZ,aAAa,QACb,OACA,GAAG,GACe,CAClB,IAAM,EAAc,EAAM,YAAc,CACtC,IAAM,EAAQ,KAAK,IAAI,KAAK,IAAI,EAAI,EAAW,CAAC,EAAG,CAAC,EACpD,GAAI,OAAO,GAAgB,SACzB,OAAO,EAAc,EAEvB,IAAM,EAAQ,qBAAqB,KAAK,CAAW,EAInD,OAHI,EACK,GAAG,OAAO,EAAM,EAAE,EAAI,EAAM,GAE9B,CACT,EAAG,CAAC,EAAa,CAAS,CAAC,EAErB,EAAQ,EAAM,YAAc,EAAK,QAAQ,EAAK,IAAS,EAAM,EAAK,MAAO,CAAC,EAAG,CAAC,CAAI,CAAC,EAEzF,OACE,EAAC,EAAD,CACE,SAAS,cACT,UAAW,EAAG,CAAS,EACjB,OACO,cACA,cACb,WACE,EACE,EAAC,EAAD,CACE,SAAS,SACT,SAAU,CAAE,aACN,CAAC,GAAW,EAAE,OAAQ,IAAY,EAAE,OAAQ,GACvC,KAGP,EAAC,OAAD,CAAM,EAAG,EAAQ,GAAI,EAAG,EAAQ,GAAI,WAAW,SAAS,iBAAiB,kBAAzE,CACE,EAAC,QAAD,CAAO,EAAG,EAAQ,GAAI,EAAG,EAAQ,GAAI,UAAU,6DAC5C,EAAM,eAAe,CACjB,CAAA,EACP,EAAC,QAAD,CAAO,EAAG,EAAQ,GAAI,GAAI,EAAQ,IAAM,GAAK,GAAI,UAAU,yCACxD,CACI,CAAA,CACH,GAGX,CAAA,EACC,KAEN,GAAI,CACL,CAAA,CAEL"}
@@ -1,14 +1,12 @@
1
1
  import { n as __name } from "../chunk-CHh1Zzun.js";
2
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
2
  import { VariantProps } from "class-variance-authority";
4
3
  import * as React from "react";
5
4
  import { Drawer as Drawer$1 } from "vaul";
6
- import * as _$class_variance_authority_types0 from "class-variance-authority/types";
7
5
 
8
6
  //#region src/components/drawer.d.ts
9
7
  declare const drawerContentVariants: (props?: ({
10
8
  size?: "sm" | "md" | "lg" | "xl" | null | undefined;
11
- } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
9
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
10
  type DrawerSize = NonNullable<VariantProps<typeof drawerContentVariants>['size']>;
13
11
  type DrawerProps = React.ComponentProps<typeof Drawer$1.Root> & {
14
12
  size?: DrawerSize;
@@ -28,46 +26,46 @@ type DrawerDescriptionProps = React.ComponentProps<typeof Drawer$1.Description>;
28
26
  declare function Drawer({
29
27
  size,
30
28
  ...props
31
- }: DrawerProps): _$react_jsx_runtime0.JSX.Element;
29
+ }: DrawerProps): import("react/jsx-runtime").JSX.Element;
32
30
  declare function DrawerTrigger({
33
31
  ...props
34
- }: DrawerTriggerProps): _$react_jsx_runtime0.JSX.Element;
32
+ }: DrawerTriggerProps): import("react/jsx-runtime").JSX.Element;
35
33
  declare function DrawerPortal({
36
34
  ...props
37
- }: DrawerPortalProps): _$react_jsx_runtime0.JSX.Element;
35
+ }: DrawerPortalProps): import("react/jsx-runtime").JSX.Element;
38
36
  declare function DrawerClose({
39
37
  ...props
40
- }: DrawerCloseProps): _$react_jsx_runtime0.JSX.Element;
38
+ }: DrawerCloseProps): import("react/jsx-runtime").JSX.Element;
41
39
  declare function DrawerOverlay({
42
40
  className,
43
41
  ...props
44
- }: DrawerOverlayProps): _$react_jsx_runtime0.JSX.Element;
42
+ }: DrawerOverlayProps): import("react/jsx-runtime").JSX.Element;
45
43
  declare function DrawerContent({
46
44
  className,
47
45
  children,
48
46
  showCloseButton,
49
47
  ...props
50
- }: DrawerContentProps): _$react_jsx_runtime0.JSX.Element;
48
+ }: DrawerContentProps): import("react/jsx-runtime").JSX.Element;
51
49
  declare function DrawerHeader({
52
50
  className,
53
51
  ...props
54
- }: DrawerHeaderProps): _$react_jsx_runtime0.JSX.Element;
52
+ }: DrawerHeaderProps): import("react/jsx-runtime").JSX.Element;
55
53
  declare function DrawerBody({
56
54
  className,
57
55
  ...props
58
- }: DrawerBodyProps): _$react_jsx_runtime0.JSX.Element;
56
+ }: DrawerBodyProps): import("react/jsx-runtime").JSX.Element;
59
57
  declare function DrawerFooter({
60
58
  className,
61
59
  ...props
62
- }: DrawerFooterProps): _$react_jsx_runtime0.JSX.Element;
60
+ }: DrawerFooterProps): import("react/jsx-runtime").JSX.Element;
63
61
  declare function DrawerTitle({
64
62
  className,
65
63
  ...props
66
- }: DrawerTitleProps): _$react_jsx_runtime0.JSX.Element;
64
+ }: DrawerTitleProps): import("react/jsx-runtime").JSX.Element;
67
65
  declare function DrawerDescription({
68
66
  className,
69
67
  ...props
70
- }: DrawerDescriptionProps): _$react_jsx_runtime0.JSX.Element;
68
+ }: DrawerDescriptionProps): import("react/jsx-runtime").JSX.Element;
71
69
  //#endregion
72
70
  export { Drawer, DrawerBody, DrawerBodyProps, DrawerClose, DrawerCloseProps, DrawerContent, DrawerContentProps, DrawerDescription, DrawerDescriptionProps, DrawerFooter, DrawerFooterProps, DrawerHeader, DrawerHeaderProps, DrawerOverlay, DrawerOverlayProps, DrawerPortal, DrawerPortalProps, DrawerProps, DrawerTitle, DrawerTitleProps, DrawerTrigger, DrawerTriggerProps };
73
71
  //# sourceMappingURL=drawer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.js","names":["DrawerPrimitive"],"sources":["../../src/components/drawer.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { IconX } from '@tabler/icons-react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Drawer as DrawerPrimitive } from 'vaul'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\nconst drawerContentVariants = cva(\n 'bg-background flex h-auto flex-col text-sm data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b group/drawer-content fixed z-50',\n {\n variants: {\n size: {\n sm: 'data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:sm:max-w-sm',\n md: 'data-[vaul-drawer-direction=bottom]:mt-20 data-[vaul-drawer-direction=bottom]:max-h-[85vh] data-[vaul-drawer-direction=top]:mb-20 data-[vaul-drawer-direction=top]:max-h-[85vh] data-[vaul-drawer-direction=left]:w-4/5 data-[vaul-drawer-direction=left]:sm:max-w-md data-[vaul-drawer-direction=right]:w-4/5 data-[vaul-drawer-direction=right]:sm:max-w-md',\n lg: 'data-[vaul-drawer-direction=bottom]:mt-12 data-[vaul-drawer-direction=bottom]:max-h-[90vh] data-[vaul-drawer-direction=top]:mb-12 data-[vaul-drawer-direction=top]:max-h-[90vh] data-[vaul-drawer-direction=left]:w-[90%] data-[vaul-drawer-direction=left]:sm:max-w-lg data-[vaul-drawer-direction=right]:w-[90%] data-[vaul-drawer-direction=right]:sm:max-w-lg',\n xl: 'data-[vaul-drawer-direction=bottom]:mt-12 data-[vaul-drawer-direction=bottom]:max-h-[90vh] data-[vaul-drawer-direction=top]:mb-12 data-[vaul-drawer-direction=top]:max-h-[90vh] data-[vaul-drawer-direction=left]:w-[90%] data-[vaul-drawer-direction=left]:sm:max-w-[780px] data-[vaul-drawer-direction=right]:w-[90%] data-[vaul-drawer-direction=right]:sm:max-w-[780px]'\n }\n },\n defaultVariants: {\n size: 'sm'\n }\n }\n)\n\ntype DrawerSize = NonNullable<VariantProps<typeof drawerContentVariants>['size']>\ntype DrawerSizeContextValue = { size: DrawerSize }\nconst DrawerSizeContext = React.createContext<DrawerSizeContextValue>({ size: 'sm' })\n\nexport type DrawerProps = React.ComponentProps<typeof DrawerPrimitive.Root> & { size?: DrawerSize }\nexport type DrawerTriggerProps = React.ComponentProps<typeof DrawerPrimitive.Trigger>\nexport type DrawerPortalProps = React.ComponentProps<typeof DrawerPrimitive.Portal>\nexport type DrawerCloseProps = React.ComponentProps<typeof DrawerPrimitive.Close>\nexport type DrawerOverlayProps = React.ComponentProps<typeof DrawerPrimitive.Overlay>\nexport type DrawerContentProps = React.ComponentProps<typeof DrawerPrimitive.Content> & { showCloseButton?: boolean }\nexport type DrawerHeaderProps = React.ComponentProps<'div'>\nexport type DrawerBodyProps = React.ComponentProps<'div'>\nexport type DrawerFooterProps = React.ComponentProps<'div'>\nexport type DrawerTitleProps = React.ComponentProps<typeof DrawerPrimitive.Title>\nexport type DrawerDescriptionProps = React.ComponentProps<typeof DrawerPrimitive.Description>\n\nfunction Drawer({ size = 'md', ...props }: DrawerProps) {\n const contextValue = React.useMemo<DrawerSizeContextValue>(() => ({ size }), [size])\n\n return (\n <DrawerSizeContext.Provider value={contextValue}>\n <DrawerPrimitive.Root data-slot=\"drawer\" direction=\"right\" handleOnly {...props} />\n </DrawerSizeContext.Provider>\n )\n}\n\nfunction DrawerTrigger({ ...props }: DrawerTriggerProps) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({ ...props }: DrawerPortalProps) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({ ...props }: DrawerCloseProps) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({ className, ...props }: DrawerOverlayProps) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n 'bg-black/10 fixed inset-0 z-50',\n 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0',\n 'supports-backdrop-filter:backdrop-blur-xs',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({ className, children, showCloseButton = true, ...props }: DrawerContentProps) {\n const { size } = React.useContext(DrawerSizeContext)\n\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(drawerContentVariants({ size }), className)}\n {...props}\n >\n <div className=\"bg-muted mt-4 h-1 w-25 rounded-full mx-auto hidden shrink-0 group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n {showCloseButton && (\n <DrawerClose asChild>\n <Button variant=\"ghost\" className=\"absolute top-3 right-3\" size=\"icon-sm\">\n <IconX />\n <span className=\"sr-only\">Close</span>\n </Button>\n </DrawerClose>\n )}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: DrawerHeaderProps) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n 'p-4 flex flex-col gap-0.5 md:gap-0.5',\n 'group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center',\n 'group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:text-left',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerBody({ className, ...props }: DrawerBodyProps) {\n return (\n <div data-slot=\"drawer-body\" className={cn('px-4 pb-4 flex-1 min-h-0 overflow-y-auto', className)} {...props} />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: DrawerFooterProps) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn('gap-2 p-4 mt-auto flex flex-col sm:flex-row sm:justify-end', className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({ className, ...props }: DrawerTitleProps) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn('text-foreground text-base font-medium', className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({ className, ...props }: DrawerDescriptionProps) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerBody,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerOverlay,\n DrawerPortal,\n DrawerTitle,\n DrawerTrigger\n}\n"],"mappings":"0SASA,MAAM,EAAwB,EAC5B,mxBACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,gWACJ,GAAI,gWACJ,GAAI,oWACJ,GAAI,8WACL,CACF,CACD,gBAAiB,CACf,KAAM,KACP,CACF,CACF,CAIK,EAAoB,EAAM,cAAsC,CAAE,KAAM,KAAM,CAAC,CAcrF,SAAS,OAAO,CAAE,OAAO,KAAM,GAAG,GAAsB,CACtD,IAAM,EAAe,EAAM,aAAuC,CAAE,OAAM,EAAG,CAAC,EAAK,CAAC,CAEpF,OACE,EAAC,EAAkB,SAAnB,CAA4B,MAAO,WACjC,EAACA,EAAgB,KAAjB,CAAsB,YAAU,SAAS,UAAU,QAAQ,WAAA,GAAW,GAAI,EAAS,CAAA,CACxD,CAAA,CAIjC,SAAS,cAAc,CAAE,GAAG,GAA6B,CACvD,OAAO,EAACA,EAAgB,QAAjB,CAAyB,YAAU,iBAAiB,GAAI,EAAS,CAAA,CAG1E,SAAS,aAAa,CAAE,GAAG,GAA4B,CACrD,OAAO,EAACA,EAAgB,OAAjB,CAAwB,YAAU,gBAAgB,GAAI,EAAS,CAAA,CAGxE,SAAS,YAAY,CAAE,GAAG,GAA2B,CACnD,OAAO,EAACA,EAAgB,MAAjB,CAAuB,YAAU,eAAe,GAAI,EAAS,CAAA,CAGtE,SAAS,cAAc,CAAE,YAAW,GAAG,GAA6B,CAClE,OACE,EAACA,EAAgB,QAAjB,CACE,YAAU,iBACV,UAAW,EACT,iCACA,0FACA,4CACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,cAAc,CAAE,YAAW,WAAU,kBAAkB,GAAM,GAAG,GAA6B,CACpG,GAAM,CAAE,QAAS,EAAM,WAAW,EAAkB,CAEpD,OACE,EAAC,aAAD,CAAc,YAAU,yBAAxB,CACE,EAAC,cAAD,EAAiB,CAAA,CACjB,EAACA,EAAgB,QAAjB,CACE,YAAU,iBACV,UAAW,EAAG,EAAsB,CAAE,OAAM,CAAC,CAAE,EAAU,CACzD,GAAI,WAHN,CAKE,EAAC,MAAD,CAAK,UAAU,6HAA+H,CAAA,CAC7I,EACA,GACC,EAAC,YAAD,CAAa,QAAA,YACX,EAAC,EAAD,CAAQ,QAAQ,QAAQ,UAAU,yBAAyB,KAAK,mBAAhE,CACE,EAAC,EAAD,EAAS,CAAA,CACT,EAAC,OAAD,CAAM,UAAU,mBAAU,QAAY,CAAA,CAC/B,GACG,CAAA,CAEQ,GACb,GAInB,SAAS,aAAa,CAAE,YAAW,GAAG,GAA4B,CAChE,OACE,EAAC,MAAD,CACE,YAAU,gBACV,UAAW,EACT,uCACA,uEACA,iFACA,EACD,CACD,GAAI,EACJ,CAAA,CAIN,SAAS,WAAW,CAAE,YAAW,GAAG,GAA0B,CAC5D,OACE,EAAC,MAAD,CAAK,YAAU,cAAc,UAAW,EAAG,2CAA4C,EAAU,CAAE,GAAI,EAAS,CAAA,CAIpH,SAAS,aAAa,CAAE,YAAW,GAAG,GAA4B,CAChE,OACE,EAAC,MAAD,CACE,YAAU,gBACV,UAAW,EAAG,6DAA8D,EAAU,CACtF,GAAI,EACJ,CAAA,CAIN,SAAS,YAAY,CAAE,YAAW,GAAG,GAA2B,CAC9D,OACE,EAACA,EAAgB,MAAjB,CACE,YAAU,eACV,UAAW,EAAG,wCAAyC,EAAU,CACjE,GAAI,EACJ,CAAA,CAIN,SAAS,kBAAkB,CAAE,YAAW,GAAG,GAAiC,CAC1E,OACE,EAACA,EAAgB,YAAjB,CACE,YAAU,qBACV,UAAW,EAAG,gCAAiC,EAAU,CACzD,GAAI,EACJ,CAAA"}
1
+ {"version":3,"file":"drawer.js","names":["DrawerPrimitive"],"sources":["../../src/components/drawer.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { IconX } from '@tabler/icons-react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { Drawer as DrawerPrimitive } from 'vaul'\n\nimport { cn } from '../lib/utils'\nimport { Button } from './button'\n\nconst drawerContentVariants = cva(\n 'bg-background flex h-auto flex-col text-sm data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b group/drawer-content fixed z-50',\n {\n variants: {\n size: {\n sm: 'data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:sm:max-w-sm',\n md: 'data-[vaul-drawer-direction=bottom]:mt-20 data-[vaul-drawer-direction=bottom]:max-h-[85vh] data-[vaul-drawer-direction=top]:mb-20 data-[vaul-drawer-direction=top]:max-h-[85vh] data-[vaul-drawer-direction=left]:w-4/5 data-[vaul-drawer-direction=left]:sm:max-w-md data-[vaul-drawer-direction=right]:w-4/5 data-[vaul-drawer-direction=right]:sm:max-w-md',\n lg: 'data-[vaul-drawer-direction=bottom]:mt-12 data-[vaul-drawer-direction=bottom]:max-h-[90vh] data-[vaul-drawer-direction=top]:mb-12 data-[vaul-drawer-direction=top]:max-h-[90vh] data-[vaul-drawer-direction=left]:w-[90%] data-[vaul-drawer-direction=left]:sm:max-w-lg data-[vaul-drawer-direction=right]:w-[90%] data-[vaul-drawer-direction=right]:sm:max-w-lg',\n xl: 'data-[vaul-drawer-direction=bottom]:mt-12 data-[vaul-drawer-direction=bottom]:max-h-[90vh] data-[vaul-drawer-direction=top]:mb-12 data-[vaul-drawer-direction=top]:max-h-[90vh] data-[vaul-drawer-direction=left]:w-[90%] data-[vaul-drawer-direction=left]:sm:max-w-[780px] data-[vaul-drawer-direction=right]:w-[90%] data-[vaul-drawer-direction=right]:sm:max-w-[780px]'\n }\n },\n defaultVariants: {\n size: 'sm'\n }\n }\n)\n\ntype DrawerSize = NonNullable<VariantProps<typeof drawerContentVariants>['size']>\ntype DrawerSizeContextValue = { size: DrawerSize }\nconst DrawerSizeContext = React.createContext<DrawerSizeContextValue>({ size: 'sm' })\n\nexport type DrawerProps = React.ComponentProps<typeof DrawerPrimitive.Root> & { size?: DrawerSize }\nexport type DrawerTriggerProps = React.ComponentProps<typeof DrawerPrimitive.Trigger>\nexport type DrawerPortalProps = React.ComponentProps<typeof DrawerPrimitive.Portal>\nexport type DrawerCloseProps = React.ComponentProps<typeof DrawerPrimitive.Close>\nexport type DrawerOverlayProps = React.ComponentProps<typeof DrawerPrimitive.Overlay>\nexport type DrawerContentProps = React.ComponentProps<typeof DrawerPrimitive.Content> & { showCloseButton?: boolean }\nexport type DrawerHeaderProps = React.ComponentProps<'div'>\nexport type DrawerBodyProps = React.ComponentProps<'div'>\nexport type DrawerFooterProps = React.ComponentProps<'div'>\nexport type DrawerTitleProps = React.ComponentProps<typeof DrawerPrimitive.Title>\nexport type DrawerDescriptionProps = React.ComponentProps<typeof DrawerPrimitive.Description>\n\nfunction Drawer({ size = 'md', ...props }: DrawerProps) {\n const contextValue = React.useMemo<DrawerSizeContextValue>(() => ({ size }), [size])\n\n return (\n <DrawerSizeContext.Provider value={contextValue}>\n <DrawerPrimitive.Root data-slot=\"drawer\" direction=\"right\" handleOnly {...props} />\n </DrawerSizeContext.Provider>\n )\n}\n\nfunction DrawerTrigger({ ...props }: DrawerTriggerProps) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({ ...props }: DrawerPortalProps) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({ ...props }: DrawerCloseProps) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({ className, ...props }: DrawerOverlayProps) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n 'bg-black/10 fixed inset-0 z-50',\n 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0',\n 'supports-backdrop-filter:backdrop-blur-xs',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({ className, children, showCloseButton = true, ...props }: DrawerContentProps) {\n const { size } = React.useContext(DrawerSizeContext)\n\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(drawerContentVariants({ size }), className)}\n {...props}\n >\n <div className=\"bg-muted mt-4 h-1 w-25 rounded-full mx-auto hidden shrink-0 group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n {showCloseButton && (\n <DrawerClose asChild>\n <Button variant=\"ghost\" className=\"absolute top-3 right-3\" size=\"icon-sm\">\n <IconX />\n <span className=\"sr-only\">Close</span>\n </Button>\n </DrawerClose>\n )}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: DrawerHeaderProps) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n 'p-4 flex flex-col gap-0.5 md:gap-0.5',\n 'group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center',\n 'group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:text-left',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerBody({ className, ...props }: DrawerBodyProps) {\n return (\n <div data-slot=\"drawer-body\" className={cn('px-4 pb-4 flex-1 min-h-0 overflow-y-auto', className)} {...props} />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: DrawerFooterProps) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn('gap-2 p-4 mt-auto flex flex-col sm:flex-row sm:justify-end', className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({ className, ...props }: DrawerTitleProps) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn('text-foreground text-base font-medium', className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({ className, ...props }: DrawerDescriptionProps) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerBody,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerOverlay,\n DrawerPortal,\n DrawerTitle,\n DrawerTrigger\n}\n"],"mappings":"0SASA,MAAM,EAAwB,EAC5B,mxBACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,gWACJ,GAAI,gWACJ,GAAI,oWACJ,GAAI,6WACN,CACF,EACA,gBAAiB,CACf,KAAM,IACR,CACF,CACF,EAIM,EAAoB,EAAM,cAAsC,CAAE,KAAM,IAAK,CAAC,EAcpF,SAAS,OAAO,CAAE,OAAO,KAAM,GAAG,GAAsB,CACtD,IAAM,EAAe,EAAM,aAAuC,CAAE,MAAK,GAAI,CAAC,CAAI,CAAC,EAEnF,OACE,EAAC,EAAkB,SAAnB,CAA4B,MAAO,WACjC,EAACA,EAAgB,KAAjB,CAAsB,YAAU,SAAS,UAAU,QAAQ,WAAA,GAAW,GAAI,CAAQ,CAAA,CACxD,CAAA,CAEhC,CAEA,SAAS,cAAc,CAAE,GAAG,GAA6B,CACvD,OAAO,EAACA,EAAgB,QAAjB,CAAyB,YAAU,iBAAiB,GAAI,CAAQ,CAAA,CACzE,CAEA,SAAS,aAAa,CAAE,GAAG,GAA4B,CACrD,OAAO,EAACA,EAAgB,OAAjB,CAAwB,YAAU,gBAAgB,GAAI,CAAQ,CAAA,CACvE,CAEA,SAAS,YAAY,CAAE,GAAG,GAA2B,CACnD,OAAO,EAACA,EAAgB,MAAjB,CAAuB,YAAU,eAAe,GAAI,CAAQ,CAAA,CACrE,CAEA,SAAS,cAAc,CAAE,YAAW,GAAG,GAA6B,CAClE,OACE,EAACA,EAAgB,QAAjB,CACE,YAAU,iBACV,UAAW,EACT,iCACA,0FACA,4CACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,cAAc,CAAE,YAAW,WAAU,kBAAkB,GAAM,GAAG,GAA6B,CACpG,GAAM,CAAE,QAAS,EAAM,WAAW,CAAiB,EAEnD,OACE,EAAC,aAAD,CAAc,YAAU,yBAAxB,CACE,EAAC,cAAD,CAAgB,CAAA,EAChB,EAACA,EAAgB,QAAjB,CACE,YAAU,iBACV,UAAW,EAAG,EAAsB,CAAE,MAAK,CAAC,EAAG,CAAS,EACxD,GAAI,WAHN,CAKE,EAAC,MAAD,CAAK,UAAU,4HAA8H,CAAA,EAC5I,EACA,GACC,EAAC,YAAD,CAAa,QAAA,YACX,EAAC,EAAD,CAAQ,QAAQ,QAAQ,UAAU,yBAAyB,KAAK,mBAAhE,CACE,EAAC,EAAD,CAAQ,CAAA,EACR,EAAC,OAAD,CAAM,UAAU,mBAAU,OAAW,CAAA,CAC/B,GACG,CAAA,CAEQ,GACb,GAElB,CAEA,SAAS,aAAa,CAAE,YAAW,GAAG,GAA4B,CAChE,OACE,EAAC,MAAD,CACE,YAAU,gBACV,UAAW,EACT,uCACA,uEACA,iFACA,CACF,EACA,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,WAAW,CAAE,YAAW,GAAG,GAA0B,CAC5D,OACE,EAAC,MAAD,CAAK,YAAU,cAAc,UAAW,EAAG,2CAA4C,CAAS,EAAG,GAAI,CAAQ,CAAA,CAEnH,CAEA,SAAS,aAAa,CAAE,YAAW,GAAG,GAA4B,CAChE,OACE,EAAC,MAAD,CACE,YAAU,gBACV,UAAW,EAAG,6DAA8D,CAAS,EACrF,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,YAAY,CAAE,YAAW,GAAG,GAA2B,CAC9D,OACE,EAACA,EAAgB,MAAjB,CACE,YAAU,eACV,UAAW,EAAG,wCAAyC,CAAS,EAChE,GAAI,CACL,CAAA,CAEL,CAEA,SAAS,kBAAkB,CAAE,YAAW,GAAG,GAAiC,CAC1E,OACE,EAACA,EAAgB,YAAjB,CACE,YAAU,qBACV,UAAW,EAAG,gCAAiC,CAAS,EACxD,GAAI,CACL,CAAA,CAEL"}