@sth87/shadcn-design-system 0.1.5 → 0.1.6

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 (48) hide show
  1. package/dist/AI_CONTEXT.md +1 -0
  2. package/dist/cjs/components/Button/Button.cjs +1 -1
  3. package/dist/cjs/components/Button/Button.cjs.map +1 -1
  4. package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -1
  5. package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -1
  6. package/dist/cjs/components/Input/Input.cjs +1 -1
  7. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  8. package/dist/cjs/components/Table/data-table.cjs +1 -1
  9. package/dist/cjs/components/Table/data-table.cjs.map +1 -1
  10. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +1 -1
  11. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +1 -1
  12. package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
  13. package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
  14. package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -1
  15. package/dist/cjs/packages/ui/src/components/combobox.cjs.map +1 -1
  16. package/dist/cjs/packages/ui/src/components/context-menu.cjs +1 -1
  17. package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +1 -1
  18. package/dist/cjs/packages/ui/src/components/popover.cjs +1 -1
  19. package/dist/cjs/packages/ui/src/components/popover.cjs.map +1 -1
  20. package/dist/cjs/packages/ui/src/components/sidebar.cjs +1 -1
  21. package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +1 -1
  22. package/dist/cjs/styles/index.css +1 -1
  23. package/dist/esm/components/Button/Button.js +22 -24
  24. package/dist/esm/components/Button/Button.js.map +1 -1
  25. package/dist/esm/components/DatePicker/RangePicker.js +41 -41
  26. package/dist/esm/components/DatePicker/RangePicker.js.map +1 -1
  27. package/dist/esm/components/Input/Input.js +37 -36
  28. package/dist/esm/components/Input/Input.js.map +1 -1
  29. package/dist/esm/components/Table/data-table.js +22 -16
  30. package/dist/esm/components/Table/data-table.js.map +1 -1
  31. package/dist/esm/packages/ui/src/components/alert-dialog.js +7 -7
  32. package/dist/esm/packages/ui/src/components/alert-dialog.js.map +1 -1
  33. package/dist/esm/packages/ui/src/components/calendar.js +1 -1
  34. package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
  35. package/dist/esm/packages/ui/src/components/combobox.js +1 -1
  36. package/dist/esm/packages/ui/src/components/combobox.js.map +1 -1
  37. package/dist/esm/packages/ui/src/components/context-menu.js +1 -1
  38. package/dist/esm/packages/ui/src/components/context-menu.js.map +1 -1
  39. package/dist/esm/packages/ui/src/components/popover.js +1 -1
  40. package/dist/esm/packages/ui/src/components/popover.js.map +1 -1
  41. package/dist/esm/packages/ui/src/components/sidebar.js +2 -2
  42. package/dist/esm/packages/ui/src/components/sidebar.js.map +1 -1
  43. package/dist/esm/styles/index.css +1 -1
  44. package/dist/types/components/Button/Button.d.ts.map +1 -1
  45. package/dist/types/components/Input/Input.d.ts +1 -0
  46. package/dist/types/components/Input/Input.d.ts.map +1 -1
  47. package/dist/types/components/Table/data-table.d.ts.map +1 -1
  48. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.js","sources":["../../../../../../../../packages/ui/src/components/calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\";\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { Button, buttonVariants } from \"@dsui/ui/components/button\";\n\ntype CalendarColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"foreground\";\n\ntype CalendarProps = React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"];\n variant?: \"default\" | \"rounded\";\n color?: CalendarColor;\n};\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n variant = \"default\",\n color = \"primary\",\n formatters,\n components,\n ...props\n}: CalendarProps) {\n const defaultClassNames = getDefaultClassNames();\n const colorClasses = getColorClasses(color);\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"ds:bg-background ds:group/calendar ds:p-3 ds:[--cell-size:--spacing(8)] ds:[[data-slot=card-content]_&]:bg-transparent ds:[[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`ds:rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`ds:rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"ds:w-fit\", defaultClassNames.root),\n months: cn(\n \"ds:flex ds:gap-4 ds:flex-col ds:md:flex-row ds:relative\",\n defaultClassNames.months\n ),\n month: cn(\"ds:flex ds:flex-col ds:w-full ds:gap-4\", defaultClassNames.month),\n nav: cn(\n \"ds:flex ds:items-center ds:gap-1 ds:w-full ds:absolute ds:top-0 ds:inset-x-0 ds:justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"ds:size-(--cell-size) ds:aria-disabled:opacity-50 ds:p-0 ds:select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"ds:size-(--cell-size) ds:aria-disabled:opacity-50 ds:p-0 ds:select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"ds:flex ds:items-center ds:justify-center ds:h-(--cell-size) ds:w-full ds:px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"ds:w-full ds:flex ds:items-center ds:text-sm ds:font-medium ds:justify-center ds:h-(--cell-size) ds:gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"ds:relative ds:has-focus:border-ring ds:border ds:border-input ds:shadow-xs ds:has-focus:ring-ring/50 ds:has-focus:ring-[3px] ds:rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"ds:absolute ds:bg-popover ds:inset-0 ds:opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"ds:select-none ds:font-medium\",\n captionLayout === \"label\"\n ? \"ds:text-sm\"\n : \"ds:rounded-md ds:pl-2 ds:pr-1 ds:flex ds:items-center ds:gap-1 ds:text-sm ds:h-8 ds:[&>svg]:text-muted-foreground ds:[&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"ds:w-full ds:border-collapse\",\n weekdays: cn(\"ds:flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"ds:text-muted-foreground ds:rounded-md ds:flex-1 ds:font-normal ds:text-[0.8rem] ds:select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"ds:flex ds:w-full ds:mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"ds:select-none ds:w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"ds:text-[0.8rem] ds:select-none ds:text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"ds:relative ds:w-full ds:h-full ds:p-0 ds:text-center ds:[&:last-child[data-selected=true]_button]:rounded-r-md ds:group/day ds:aspect-square ds:select-none\",\n props.showWeekNumber\n ? \"ds:[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"ds:[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n variant === \"rounded\"\n ? `${colorClasses.rangeBg} ds:rounded-l-full`\n : \"ds:rounded-l-md ds:bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\n variant === \"rounded\" ? \"ds:rounded-none\" : \"ds:rounded-none\",\n defaultClassNames.range_middle\n ),\n range_end: cn(\n variant === \"rounded\"\n ? `${colorClasses.rangeBg} ds:rounded-r-full`\n : \"ds:rounded-r-md ds:bg-accent\",\n defaultClassNames.range_end\n ),\n today: cn(\n variant === \"rounded\"\n ? `ds:rounded-full ds:bg-accent ds:data-[selected=true]:rounded-l-none ds:data-[selected=true]:${colorClasses.rangeBg} ds:[&_button[data-range-middle=true]]:bg-transparent`\n : \"ds:bg-accent ds:text-accent-foreground ds:rounded-md ds:data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"ds:text-muted-foreground ds:aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"ds:text-muted-foreground ds:opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"ds:invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n );\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"ds:size-4\", className)} {...props} />\n );\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"ds:size-4\", className)}\n {...props}\n />\n );\n }\n\n return (\n <ChevronDownIcon className={cn(\"ds:size-4\", className)} {...props} />\n );\n },\n DayButton: (props) => (\n <CalendarDayButton {...props} variant={variant} color={color} />\n ),\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"ds:flex ds:size-(--cell-size) ds:items-center ds:justify-center ds:text-center\">\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\ntype CalendarDayButtonProps = Omit<\n React.ComponentProps<typeof DayButton>,\n \"color\"\n> & {\n variant?: \"default\" | \"rounded\";\n color?: CalendarColor;\n};\n\n// Color variants for calendar day buttons\nconst getColorClasses = (color: CalendarColor = \"foreground\") => {\n const colorMap = {\n primary: {\n selected: \"ds:bg-primary ds:text-primary-foreground\",\n selectedHover: \"ds:hover:bg-primary/90\",\n rangeBg: \"ds:bg-primary/20 dark:ds:bg-primary/10\",\n focusRing: \"ds:ring-primary/20 dark:ds:ring-primary/40\",\n },\n secondary: {\n selected: \"ds:bg-secondary ds:text-secondary-foreground\",\n selectedHover: \"ds:hover:bg-secondary/90\",\n rangeBg: \"ds:bg-secondary/20 dark:ds:bg-secondary/10\",\n focusRing: \"ds:ring-secondary/20 dark:ds:ring-secondary/40\",\n },\n accent: {\n selected: \"ds:bg-accent ds:text-accent-foreground\",\n selectedHover: \"ds:hover:bg-accent/90\",\n rangeBg: \"ds:bg-accent/20 dark:ds:bg-accent/10\",\n focusRing: \"ds:ring-accent/20 dark:ds:ring-accent/40\",\n },\n destructive: {\n selected: \"ds:bg-destructive ds:text-destructive-foreground\",\n selectedHover: \"ds:hover:bg-destructive/90\",\n rangeBg: \"ds:bg-destructive/20 dark:ds:bg-destructive/10\",\n focusRing: \"ds:ring-destructive/20 dark:ds:ring-destructive/40\",\n },\n muted: {\n selected: \"ds:bg-muted ds:text-muted-foreground\",\n selectedHover: \"ds:hover:bg-muted/90\",\n rangeBg: \"ds:bg-muted/30 dark:ds:bg-muted/20\",\n focusRing: \"ds:ring-muted/20 dark:ds:ring-muted/40\",\n },\n success: {\n selected: \"ds:bg-success ds:text-success-foreground\",\n selectedHover: \"ds:hover:bg-success/90\",\n rangeBg: \"ds:bg-success/20 dark:ds:bg-success/10\",\n focusRing: \"ds:ring-success/20 dark:ds:ring-success/40\",\n },\n error: {\n selected: \"ds:bg-error ds:text-error-foreground\",\n selectedHover: \"ds:hover:bg-error/90\",\n rangeBg: \"ds:bg-error/20 dark:ds:bg-error/10\",\n focusRing: \"ds:ring-error/20 dark:ds:ring-error/40\",\n },\n warning: {\n selected: \"ds:bg-warning ds:text-warning-foreground\",\n selectedHover: \"ds:hover:bg-warning/90\",\n rangeBg: \"ds:bg-warning/20 dark:ds:bg-warning/10\",\n focusRing: \"ds:ring-warning/20 dark:ds:ring-warning/40\",\n },\n foreground: {\n selected: \"ds:bg-foreground ds:text-background\",\n selectedHover: \"ds:hover:bg-foreground/90\",\n rangeBg: \"ds:bg-foreground/10 dark:ds:bg-foreground/5\",\n focusRing: \"ds:ring-foreground/20 dark:ds:ring-foreground/40\",\n },\n };\n\n return colorMap[color];\n};\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n variant = \"default\",\n color = \"foreground\",\n ...props\n}: CalendarDayButtonProps) {\n const defaultClassNames = getDefaultClassNames();\n const colorClasses = getColorClasses(color);\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"ds:flex ds:aspect-square ds:size-auto ds:w-full ds:min-w-(--cell-size) ds:flex-col ds:gap-1 ds:leading-none ds:font-normal\",\n \"ds:group-data-[focused=true]/day:relative ds:group-data-[focused=true]/day:z-10 ds:group-data-[focused=true]/day:ring-[3px]\",\n \"ds:group-data-[focused=true]/day:border-ring ds:group-data-[focused=true]/day:ring-ring/50\",\n \"ds:[&>span]:text-xs ds:[&>span]:opacity-70\",\n // Hover effect chỉ khi chưa selected\n !modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n \"ds:hover:bg-accent ds:hover:text-accent-foreground ds:dark:hover:text-accent-foreground\",\n // Selected single day - chỉ apply color khi selected\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n colorClasses.selected,\n // Range start/end - chỉ apply color khi là range start/end\n modifiers.range_start && colorClasses.selected,\n modifiers.range_end && colorClasses.selected,\n // Range middle - apply rangeBg nhưng giữ text color mặc định\n modifiers.range_middle &&\n `${colorClasses.rangeBg} ds:text-accent-foreground`,\n variant === \"default\" && [\n \"ds:data-[range-end=true]:rounded-md ds:data-[range-end=true]:rounded-r-md\",\n \"ds:data-[range-middle=true]:rounded-none\",\n \"ds:data-[range-start=true]:rounded-md ds:data-[range-start=true]:rounded-l-md\",\n ],\n variant === \"rounded\" && [\n \"ds:data-[selected-single=true]:rounded-full\",\n \"ds:data-[range-end=true]:rounded-full\",\n \"ds:data-[range-start=true]:rounded-full\",\n modifiers.range_start &&\n `ds:group-data-[focused=true]/day:${colorClasses.focusRing}`,\n modifiers.range_end &&\n `ds:group-data-[focused=true]/day:${colorClasses.focusRing}`,\n modifiers.range_middle && \"ds:rounded-none\",\n // Chỉ hover:rounded-full khi chưa selected\n !modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n \"ds:hover:rounded-full\",\n ],\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Calendar,\n CalendarDayButton,\n type CalendarProps,\n type CalendarDayButtonProps,\n type CalendarColor,\n};\n"],"names":["Calendar","className","classNames","showOutsideDays","captionLayout","buttonVariant","variant","color","formatters","components","props","defaultClassNames","getDefaultClassNames","colorClasses","getColorClasses","jsx","DayPicker","cn","date","buttonVariants","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","children","day","modifiers","ref","React","Button"],"mappings":"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"}
1
+ {"version":3,"file":"calendar.js","sources":["../../../../../../../../packages/ui/src/components/calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\";\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { Button, buttonVariants } from \"@dsui/ui/components/button\";\n\ntype CalendarColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"foreground\";\n\ntype CalendarProps = React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"];\n variant?: \"default\" | \"rounded\";\n color?: CalendarColor;\n};\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n variant = \"default\",\n color = \"primary\",\n formatters,\n components,\n ...props\n}: CalendarProps) {\n const defaultClassNames = getDefaultClassNames();\n const colorClasses = getColorClasses(color);\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"ds:bg-background ds:group/calendar ds:p-3 ds:[--cell-size:--ds-spacing(8)] ds:[[data-slot=card-content]_&]:bg-transparent ds:[[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`ds:rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`ds:rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"ds:w-fit\", defaultClassNames.root),\n months: cn(\n \"ds:flex ds:gap-4 ds:flex-col ds:md:flex-row ds:relative\",\n defaultClassNames.months\n ),\n month: cn(\"ds:flex ds:flex-col ds:w-full ds:gap-4\", defaultClassNames.month),\n nav: cn(\n \"ds:flex ds:items-center ds:gap-1 ds:w-full ds:absolute ds:top-0 ds:inset-x-0 ds:justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"ds:size-(--cell-size) ds:aria-disabled:opacity-50 ds:p-0 ds:select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"ds:size-(--cell-size) ds:aria-disabled:opacity-50 ds:p-0 ds:select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"ds:flex ds:items-center ds:justify-center ds:h-(--cell-size) ds:w-full ds:px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"ds:w-full ds:flex ds:items-center ds:text-sm ds:font-medium ds:justify-center ds:h-(--cell-size) ds:gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"ds:relative ds:has-focus:border-ring ds:border ds:border-input ds:shadow-xs ds:has-focus:ring-ring/50 ds:has-focus:ring-[3px] ds:rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"ds:absolute ds:bg-popover ds:inset-0 ds:opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"ds:select-none ds:font-medium\",\n captionLayout === \"label\"\n ? \"ds:text-sm\"\n : \"ds:rounded-md ds:pl-2 ds:pr-1 ds:flex ds:items-center ds:gap-1 ds:text-sm ds:h-8 ds:[&>svg]:text-muted-foreground ds:[&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"ds:w-full ds:border-collapse\",\n weekdays: cn(\"ds:flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"ds:text-muted-foreground ds:rounded-md ds:flex-1 ds:font-normal ds:text-[0.8rem] ds:select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"ds:flex ds:w-full ds:mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"ds:select-none ds:w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"ds:text-[0.8rem] ds:select-none ds:text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"ds:relative ds:w-full ds:h-full ds:p-0 ds:text-center ds:[&:last-child[data-selected=true]_button]:rounded-r-md ds:group/day ds:aspect-square ds:select-none\",\n props.showWeekNumber\n ? \"ds:[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"ds:[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n variant === \"rounded\"\n ? `${colorClasses.rangeBg} ds:rounded-l-full`\n : \"ds:rounded-l-md ds:bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\n variant === \"rounded\" ? \"ds:rounded-none\" : \"ds:rounded-none\",\n defaultClassNames.range_middle\n ),\n range_end: cn(\n variant === \"rounded\"\n ? `${colorClasses.rangeBg} ds:rounded-r-full`\n : \"ds:rounded-r-md ds:bg-accent\",\n defaultClassNames.range_end\n ),\n today: cn(\n variant === \"rounded\"\n ? `ds:rounded-full ds:bg-accent ds:data-[selected=true]:rounded-l-none ds:data-[selected=true]:${colorClasses.rangeBg} ds:[&_button[data-range-middle=true]]:bg-transparent`\n : \"ds:bg-accent ds:text-accent-foreground ds:rounded-md ds:data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"ds:text-muted-foreground ds:aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"ds:text-muted-foreground ds:opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"ds:invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n );\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"ds:size-4\", className)} {...props} />\n );\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"ds:size-4\", className)}\n {...props}\n />\n );\n }\n\n return (\n <ChevronDownIcon className={cn(\"ds:size-4\", className)} {...props} />\n );\n },\n DayButton: (props) => (\n <CalendarDayButton {...props} variant={variant} color={color} />\n ),\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"ds:flex ds:size-(--cell-size) ds:items-center ds:justify-center ds:text-center\">\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\ntype CalendarDayButtonProps = Omit<\n React.ComponentProps<typeof DayButton>,\n \"color\"\n> & {\n variant?: \"default\" | \"rounded\";\n color?: CalendarColor;\n};\n\n// Color variants for calendar day buttons\nconst getColorClasses = (color: CalendarColor = \"foreground\") => {\n const colorMap = {\n primary: {\n selected: \"ds:bg-primary ds:text-primary-foreground\",\n selectedHover: \"ds:hover:bg-primary/90\",\n rangeBg: \"ds:bg-primary/20 dark:ds:bg-primary/10\",\n focusRing: \"ds:ring-primary/20 dark:ds:ring-primary/40\",\n },\n secondary: {\n selected: \"ds:bg-secondary ds:text-secondary-foreground\",\n selectedHover: \"ds:hover:bg-secondary/90\",\n rangeBg: \"ds:bg-secondary/20 dark:ds:bg-secondary/10\",\n focusRing: \"ds:ring-secondary/20 dark:ds:ring-secondary/40\",\n },\n accent: {\n selected: \"ds:bg-accent ds:text-accent-foreground\",\n selectedHover: \"ds:hover:bg-accent/90\",\n rangeBg: \"ds:bg-accent/20 dark:ds:bg-accent/10\",\n focusRing: \"ds:ring-accent/20 dark:ds:ring-accent/40\",\n },\n destructive: {\n selected: \"ds:bg-destructive ds:text-destructive-foreground\",\n selectedHover: \"ds:hover:bg-destructive/90\",\n rangeBg: \"ds:bg-destructive/20 dark:ds:bg-destructive/10\",\n focusRing: \"ds:ring-destructive/20 dark:ds:ring-destructive/40\",\n },\n muted: {\n selected: \"ds:bg-muted ds:text-muted-foreground\",\n selectedHover: \"ds:hover:bg-muted/90\",\n rangeBg: \"ds:bg-muted/30 dark:ds:bg-muted/20\",\n focusRing: \"ds:ring-muted/20 dark:ds:ring-muted/40\",\n },\n success: {\n selected: \"ds:bg-success ds:text-success-foreground\",\n selectedHover: \"ds:hover:bg-success/90\",\n rangeBg: \"ds:bg-success/20 dark:ds:bg-success/10\",\n focusRing: \"ds:ring-success/20 dark:ds:ring-success/40\",\n },\n error: {\n selected: \"ds:bg-error ds:text-error-foreground\",\n selectedHover: \"ds:hover:bg-error/90\",\n rangeBg: \"ds:bg-error/20 dark:ds:bg-error/10\",\n focusRing: \"ds:ring-error/20 dark:ds:ring-error/40\",\n },\n warning: {\n selected: \"ds:bg-warning ds:text-warning-foreground\",\n selectedHover: \"ds:hover:bg-warning/90\",\n rangeBg: \"ds:bg-warning/20 dark:ds:bg-warning/10\",\n focusRing: \"ds:ring-warning/20 dark:ds:ring-warning/40\",\n },\n foreground: {\n selected: \"ds:bg-foreground ds:text-background\",\n selectedHover: \"ds:hover:bg-foreground/90\",\n rangeBg: \"ds:bg-foreground/10 dark:ds:bg-foreground/5\",\n focusRing: \"ds:ring-foreground/20 dark:ds:ring-foreground/40\",\n },\n };\n\n return colorMap[color];\n};\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n variant = \"default\",\n color = \"foreground\",\n ...props\n}: CalendarDayButtonProps) {\n const defaultClassNames = getDefaultClassNames();\n const colorClasses = getColorClasses(color);\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"ds:flex ds:aspect-square ds:size-auto ds:w-full ds:min-w-(--cell-size) ds:flex-col ds:gap-1 ds:leading-none ds:font-normal\",\n \"ds:group-data-[focused=true]/day:relative ds:group-data-[focused=true]/day:z-10 ds:group-data-[focused=true]/day:ring-[3px]\",\n \"ds:group-data-[focused=true]/day:border-ring ds:group-data-[focused=true]/day:ring-ring/50\",\n \"ds:[&>span]:text-xs ds:[&>span]:opacity-70\",\n // Hover effect chỉ khi chưa selected\n !modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n \"ds:hover:bg-accent ds:hover:text-accent-foreground ds:dark:hover:text-accent-foreground\",\n // Selected single day - chỉ apply color khi selected\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n colorClasses.selected,\n // Range start/end - chỉ apply color khi là range start/end\n modifiers.range_start && colorClasses.selected,\n modifiers.range_end && colorClasses.selected,\n // Range middle - apply rangeBg nhưng giữ text color mặc định\n modifiers.range_middle &&\n `${colorClasses.rangeBg} ds:text-accent-foreground`,\n variant === \"default\" && [\n \"ds:data-[range-end=true]:rounded-md ds:data-[range-end=true]:rounded-r-md\",\n \"ds:data-[range-middle=true]:rounded-none\",\n \"ds:data-[range-start=true]:rounded-md ds:data-[range-start=true]:rounded-l-md\",\n ],\n variant === \"rounded\" && [\n \"ds:data-[selected-single=true]:rounded-full\",\n \"ds:data-[range-end=true]:rounded-full\",\n \"ds:data-[range-start=true]:rounded-full\",\n modifiers.range_start &&\n `ds:group-data-[focused=true]/day:${colorClasses.focusRing}`,\n modifiers.range_end &&\n `ds:group-data-[focused=true]/day:${colorClasses.focusRing}`,\n modifiers.range_middle && \"ds:rounded-none\",\n // Chỉ hover:rounded-full khi chưa selected\n !modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n \"ds:hover:rounded-full\",\n ],\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Calendar,\n CalendarDayButton,\n type CalendarProps,\n type CalendarDayButtonProps,\n type CalendarColor,\n};\n"],"names":["Calendar","className","classNames","showOutsideDays","captionLayout","buttonVariant","variant","color","formatters","components","props","defaultClassNames","getDefaultClassNames","colorClasses","getColorClasses","jsx","DayPicker","cn","date","buttonVariants","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","children","day","modifiers","ref","React","Button"],"mappings":";;;;;;AA6BA,SAASA,EAAS;AAAA,EAChB,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,eAAAC,IAAgB;AAAA,EAChB,eAAAC,IAAgB;AAAA,EAChB,SAAAC,IAAU;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,GAAGC;AACL,GAAkB;AAChB,QAAMC,IAAoBC,EAAA,GACpBC,IAAeC,EAAgBP,CAAK;AAE1C,SACE,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,iBAAAb;AAAA,MACA,WAAWc;AAAA,QACT;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,QACPhB;AAAA,MAAA;AAAA,MAEF,eAAAG;AAAA,MACA,YAAY;AAAA,QACV,qBAAqB,CAACc,MACpBA,EAAK,eAAe,WAAW,EAAE,OAAO,SAAS;AAAA,QACnD,GAAGV;AAAA,MAAA;AAAA,MAEL,YAAY;AAAA,QACV,MAAMS,EAAG,YAAYN,EAAkB,IAAI;AAAA,QAC3C,QAAQM;AAAA,UACN;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,OAAOM,EAAG,0CAA0CN,EAAkB,KAAK;AAAA,QAC3E,KAAKM;AAAA,UACH;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,iBAAiBM;AAAA,UACfE,EAAe,EAAE,SAASd,GAAe;AAAA,UACzC;AAAA,UACAM,EAAkB;AAAA,QAAA;AAAA,QAEpB,aAAaM;AAAA,UACXE,EAAe,EAAE,SAASd,GAAe;AAAA,UACzC;AAAA,UACAM,EAAkB;AAAA,QAAA;AAAA,QAEpB,eAAeM;AAAA,UACb;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,WAAWM;AAAA,UACT;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,eAAeM;AAAA,UACb;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,UAAUM;AAAA,UACR;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,eAAeM;AAAA,UACb;AAAA,UACAb,MAAkB,UACd,eACA;AAAA,UACJO,EAAkB;AAAA,QAAA;AAAA,QAEpB,OAAO;AAAA,QACP,UAAUM,EAAG,WAAWN,EAAkB,QAAQ;AAAA,QAClD,SAASM;AAAA,UACP;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,MAAMM,EAAG,6BAA6BN,EAAkB,IAAI;AAAA,QAC5D,oBAAoBM;AAAA,UAClB;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,aAAaM;AAAA,UACX;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,KAAKM;AAAA,UACH;AAAA,UACAP,EAAM,iBACF,gEACA;AAAA,UACJC,EAAkB;AAAA,QAAA;AAAA,QAEpB,aAAaM;AAAA,UACXX,MAAY,YACR,GAAGO,EAAa,OAAO,uBACvB;AAAA,UACJF,EAAkB;AAAA,QAAA;AAAA,QAEpB,cAAcM;AAAA,UACY;AAAA,UACxBN,EAAkB;AAAA,QAAA;AAAA,QAEpB,WAAWM;AAAA,UACTX,MAAY,YACR,GAAGO,EAAa,OAAO,uBACvB;AAAA,UACJF,EAAkB;AAAA,QAAA;AAAA,QAEpB,OAAOM;AAAA,UACLX,MAAY,YACR,+FAA+FO,EAAa,OAAO,0DACnH;AAAA,UACJF,EAAkB;AAAA,QAAA;AAAA,QAEpB,SAASM;AAAA,UACP;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,UAAUM;AAAA,UACR;AAAA,UACAN,EAAkB;AAAA,QAAA;AAAA,QAEpB,QAAQM,EAAG,gBAAgBN,EAAkB,MAAM;AAAA,QACnD,GAAGT;AAAA,MAAA;AAAA,MAEL,YAAY;AAAA,QACV,MAAM,CAAC,EAAE,WAAAD,GAAW,SAAAmB,GAAS,GAAGV,QAE5B,gBAAAK;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAU;AAAA,YACV,KAAKK;AAAA,YACL,WAAWH,EAAGhB,CAAS;AAAA,YACtB,GAAGS;AAAAA,UAAA;AAAA,QAAA;AAAA,QAIV,SAAS,CAAC,EAAE,WAAAT,GAAW,aAAAoB,GAAa,GAAGX,QACjCW,MAAgB,SAEhB,gBAAAN,EAACO,KAAgB,WAAWL,EAAG,aAAahB,CAAS,GAAI,GAAGS,GAAO,IAInEW,MAAgB,UAEhB,gBAAAN;AAAA,UAACQ;AAAA,UAAA;AAAA,YACC,WAAWN,EAAG,aAAahB,CAAS;AAAA,YACnC,GAAGS;AAAAA,UAAA;AAAA,QAAA,IAMR,gBAAAK,EAACS,KAAgB,WAAWP,EAAG,aAAahB,CAAS,GAAI,GAAGS,GAAO;AAAA,QAGvE,WAAW,CAACA,MACV,gBAAAK,EAACU,KAAmB,GAAGf,GAAO,SAAAJ,GAAkB,OAAAC,GAAc;AAAA,QAEhE,YAAY,CAAC,EAAE,UAAAmB,GAAU,GAAGhB,QAExB,gBAAAK,EAAC,QAAI,GAAGL,GACN,4BAAC,OAAA,EAAI,WAAU,kFACZ,UAAAgB,EAAA,CACH,EAAA,CACF;AAAA,QAGJ,GAAGjB;AAAA,MAAA;AAAA,MAEJ,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV;AAWA,MAAMI,IAAkB,CAACP,IAAuB,kBAC7B;AAAA,EACf,SAAS;AAAA,IACP,UAAU;AAAA,IACV,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA,EAEb,WAAW;AAAA,IACT,UAAU;AAAA,IACV,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA,EAEb,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA,EAEb,aAAa;AAAA,IACX,UAAU;AAAA,IACV,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA,EAEb,OAAO;AAAA,IACL,UAAU;AAAA,IACV,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA,EAEb,SAAS;AAAA,IACP,UAAU;AAAA,IACV,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA,EAEb,OAAO;AAAA,IACL,UAAU;AAAA,IACV,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA,EAEb,SAAS;AAAA,IACP,UAAU;AAAA,IACV,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA,EAEb,YAAY;AAAA,IACV,UAAU;AAAA,IACV,eAAe;AAAA,IACf,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AACb,GAGcA,CAAK;AAGvB,SAASkB,EAAkB;AAAA,EACzB,WAAAxB;AAAA,EACA,KAAA0B;AAAA,EACA,WAAAC;AAAA,EACA,SAAAtB,IAAU;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,GAAGG;AACL,GAA2B;AACzB,QAAMC,IAAoBC,EAAA,GACpBC,IAAeC,EAAgBP,CAAK,GAEpCsB,IAAMC,EAAM,OAA0B,IAAI;AAChD,SAAAA,EAAM,UAAU,MAAM;AACpB,IAAIF,EAAU,WAASC,EAAI,SAAS,MAAA;AAAA,EACtC,GAAG,CAACD,EAAU,OAAO,CAAC,GAGpB,gBAAAb;AAAA,IAACgB;AAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,YAAUF,EAAI,KAAK,mBAAA;AAAA,MACnB,wBACEC,EAAU,YACV,CAACA,EAAU,eACX,CAACA,EAAU,aACX,CAACA,EAAU;AAAA,MAEb,oBAAkBA,EAAU;AAAA,MAC5B,kBAAgBA,EAAU;AAAA,MAC1B,qBAAmBA,EAAU;AAAA,MAC7B,WAAWX;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA,CAACW,EAAU,YACT,CAACA,EAAU,eACX,CAACA,EAAU,aACX,CAACA,EAAU,gBACX;AAAA;AAAA,QAEFA,EAAU,YACR,CAACA,EAAU,eACX,CAACA,EAAU,aACX,CAACA,EAAU,gBACXf,EAAa;AAAA;AAAA,QAEfe,EAAU,eAAef,EAAa;AAAA,QACtCe,EAAU,aAAaf,EAAa;AAAA;AAAA,QAEpCe,EAAU,gBACR,GAAGf,EAAa,OAAO;AAAA,QACzBP,MAAY,aAAa;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAEFA,MAAY,aAAa;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACAsB,EAAU,eACR,oCAAoCf,EAAa,SAAS;AAAA,UAC5De,EAAU,aACR,oCAAoCf,EAAa,SAAS;AAAA,UAC5De,EAAU,gBAAgB;AAAA;AAAA,UAE1B,CAACA,EAAU,YACT,CAACA,EAAU,eACX,CAACA,EAAU,aACX,CAACA,EAAU,gBACX;AAAA,QAAA;AAAA,QAEJjB,EAAkB;AAAA,QAClBV;AAAA,MAAA;AAAA,MAED,GAAGS;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -7,7 +7,7 @@ import { Popover as F, PopoverTrigger as G, PopoverContent as T } from "./popove
7
7
  import { cn as r } from "../lib/utils.js";
8
8
  import { Label as g } from "./label.js";
9
9
  const U = I(
10
- "ds:justify-between ds:relative ds:dark:bg-background ds:dark:hover:bg-input/50 ds:border-input ds:w-full ds:min-w-0 ds:rounded-md ds:border ds:bg-transparent ds:shadow-xs ds:transition-[color,box-shadow] ds:outline-none ds:file:inline-flex ds:file:h-7 ds:file:border-0 ds:file:bg-transparent ds:file:text-sm ds:file:font-medium ds:disabled:pointer-events-none ds:disabled:cursor-not-allowed ds:disabled:opacity-50 ds:focus-visible:border-ring ds:focus-visible:ring-ring/50 ds:focus-visible:ring-[3px] ds:aria-invalid:ring-destructive/20 ds:dark:aria-invalid:ring-destructive/40 ds:aria-invalid:border-destructive",
10
+ "ds:justify-between ds:relative ds:dark:bg-background ds:dark:hover:bg-input/50 ds:border-input ds:w-full ds:min-w-0 ds:rounded-md ds:border ds:border-border ds:bg-transparent ds:shadow-xs ds:transition-[color,box-shadow] ds:outline-none ds:file:inline-flex ds:file:h-7 ds:file:border-0 ds:file:bg-transparent ds:file:text-sm ds:file:font-medium ds:disabled:pointer-events-none ds:disabled:cursor-not-allowed ds:disabled:opacity-50 ds:focus-visible:border-ring ds:focus-visible:ring-ring/50 ds:focus-visible:ring-[3px] ds:aria-invalid:ring-destructive/20 ds:dark:aria-invalid:ring-destructive/40 ds:aria-invalid:border-destructive",
11
11
  {
12
12
  variants: {
13
13
  size: {
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.js","sources":["../../../../../../../../packages/ui/src/components/combobox.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Check, ChevronDown, ChevronUp, X } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"./command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport { cn } from \"../lib/utils\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Label } from \"./label\";\n\nconst comboboxVariants = cva(\n \"ds:justify-between ds:relative ds:dark:bg-background ds:dark:hover:bg-input/50 ds:border-input ds:w-full ds:min-w-0 ds:rounded-md ds:border ds:bg-transparent ds:shadow-xs ds:transition-[color,box-shadow] ds:outline-none ds:file:inline-flex ds:file:h-7 ds:file:border-0 ds:file:bg-transparent ds:file:text-sm ds:file:font-medium ds:disabled:pointer-events-none ds:disabled:cursor-not-allowed ds:disabled:opacity-50 ds:focus-visible:border-ring ds:focus-visible:ring-ring/50 ds:focus-visible:ring-[3px] ds:aria-invalid:ring-destructive/20 ds:dark:aria-invalid:ring-destructive/40 ds:aria-invalid:border-destructive\",\n {\n variants: {\n size: {\n xs: \"ds:h-6 ds:text-xs ds:px-2 ds:py-0.5\",\n sm: \"ds:h-8 ds:text-sm ds:px-2.5 ds:py-1\",\n normal: \"ds:h-9 ds:px-3 ds:py-1\",\n lg: \"ds:h-11 ds:px-4 ds:py-2\",\n xl: \"ds:h-14 ds:px-5 ds:py-3\",\n },\n state: {\n default: \"\",\n success:\n \"ds:border-success ds:ring-success/30 ds:focus-visible:border-success ds:focus-visible:ring-success/50\",\n error:\n \"ds:border-destructive ds:ring-destructive/30 ds:focus-visible:border-destructive ds:focus-visible:ring-destructive/50\",\n warning:\n \"ds:border-warning ds:ring-warning/30 ds:focus-visible:border-warning ds:focus-visible:ring-warning/50\",\n },\n },\n defaultVariants: {\n size: \"normal\",\n state: \"default\",\n },\n }\n);\n\ntype SelectOption = {\n label: React.ReactNode;\n value: string;\n group?: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n};\n\ntype ComboboxProps = Omit<\n React.ComponentProps<typeof PopoverPrimitive.Trigger>,\n \"onChange\"\n> & {\n value?: string;\n options?: SelectOption[];\n placeHolder?: string;\n onChange?: (value?: string | null) => void;\n clearable?: boolean;\n emptyText?: string;\n className?: string;\n dropdownClassName?: string;\n children?: React.ReactNode;\n size?: \"normal\" | \"sm\" | \"xs\" | \"lg\" | \"xl\";\n state?: \"default\" | \"success\" | \"error\" | \"warning\";\n searchable?: boolean;\n tagRender?: (\n option: SelectOption & { onClick?: () => void }\n ) => React.ReactNode;\n} & VariantProps<typeof comboboxVariants>;\n\nfunction Combobox({\n value,\n options,\n placeHolder,\n emptyText,\n onChange,\n clearable,\n className,\n dropdownClassName,\n children,\n size,\n state = \"default\",\n searchable = true,\n tagRender,\n ...props\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n\n const handleOpenChange = React.useCallback((newOpen: boolean) => {\n setOpen(newOpen);\n }, []);\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange} modal={true}>\n <PopoverTrigger asChild {...props}>\n {children ?? (\n <Label className={cn(comboboxVariants({ size, state }), className)}>\n <span\n className={cn(\n \"ds:truncate ds:w-full ds:inline-block ds:align-middle ds:text-left\",\n {\n \"ds:pr-8\": clearable,\n }\n )}\n >\n {value\n ? options?.find((option) => option.value === value)?.label\n : placeHolder}\n </span>\n {open && (\n <ChevronUp\n className={cn(\n \"ds:z-10 ds:opacity-50\",\n {\n \"ds:size-4 ds:min-w-4\": size === \"sm\" || size === \"xs\",\n \"ds:size-5 ds:min-w-5\": size === \"lg\" || size === \"xl\",\n },\n dropdownClassName\n )}\n />\n )}\n {!open && (\n <ChevronDown\n className={cn(\n \"ds:z-10 ds:opacity-50\",\n {\n \"ds:size-4 ds:min-w-4\": size === \"sm\" || size === \"xs\",\n \"ds:size-5 ds:min-w-5\": size === \"lg\" || size === \"xl\",\n },\n dropdownClassName\n )}\n />\n )}\n </Label>\n )}\n </PopoverTrigger>\n\n {clearable && value && (\n <Label\n onClick={(e) => {\n e.stopPropagation();\n onChange?.(\"\");\n }}\n className=\"ds:absolute ds:right-11 ds:top-1/2 ds:-translate-y-1/2 ds:rounded-sm ds:p-1 ds:text-muted-foreground ds:hover:bg-accent ds:hover:text-accent-foreground ds:cursor-pointer ds:size-6 ds:opacity-50\"\n >\n <X className=\"ds:h-4 ds:w-4\" />\n </Label>\n )}\n <PopoverContent\n className={cn(\"ds:p-0 ds:w-(--radix-popover-trigger-width)\")}\n onInteractOutside={(e) => {\n // Prevent closing when clicking the trigger\n const target = e.target as HTMLElement;\n if (target.closest('[data-slot=\"popover-trigger\"]')) {\n e.preventDefault();\n }\n }}\n >\n <Command>\n {searchable && (\n <CommandInput placeholder={placeHolder} className=\"ds:h-9\" />\n )}\n <CommandList>\n <CommandEmpty>{emptyText || \"Not found\"}</CommandEmpty>\n <CommandGroup>\n {options?.map((option) => (\n <CommandItem\n key={option.value}\n value={String(option.label)} // Để Command search theo label\n onSelect={\n option?.disabled\n ? undefined\n : () => {\n onChange?.(option.value); // Lưu value thực sự\n setOpen(false);\n }\n }\n className={cn(\n option?.disabled &&\n \"ds:opacity-50 ds:cursor-not-allowed ds:grayscale\",\n value === option.value && \"ds:bg-primary/10 ds:dark:bg-primary/20\"\n )}\n >\n {tagRender ? (\n tagRender(option)\n ) : (\n <>\n {option.icon && (\n <span className=\"ds:mr-2 ds:max-w-4 ds:max-h-4\">\n {option.icon}\n </span>\n )}\n {option.label}\n </>\n )}\n <Check\n className={cn(\n \"ds:ml-auto\",\n value === option.value ? \"ds:opacity-100\" : \"ds:opacity-0\" // So sánh theo value\n )}\n />\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { Combobox, type ComboboxProps, type SelectOption };\n"],"names":["comboboxVariants","cva","Combobox","value","options","placeHolder","emptyText","onChange","clearable","className","dropdownClassName","children","size","state","searchable","tagRender","props","open","setOpen","React","handleOpenChange","newOpen","Popover","jsx","PopoverTrigger","jsxs","Label","cn","option","ChevronUp","ChevronDown","e","X","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Fragment","Check"],"mappings":"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"}
1
+ {"version":3,"file":"combobox.js","sources":["../../../../../../../../packages/ui/src/components/combobox.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Check, ChevronDown, ChevronUp, X } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"./command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\nimport { cn } from \"../lib/utils\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { Label } from \"./label\";\n\nconst comboboxVariants = cva(\n \"ds:justify-between ds:relative ds:dark:bg-background ds:dark:hover:bg-input/50 ds:border-input ds:w-full ds:min-w-0 ds:rounded-md ds:border ds:border-border ds:bg-transparent ds:shadow-xs ds:transition-[color,box-shadow] ds:outline-none ds:file:inline-flex ds:file:h-7 ds:file:border-0 ds:file:bg-transparent ds:file:text-sm ds:file:font-medium ds:disabled:pointer-events-none ds:disabled:cursor-not-allowed ds:disabled:opacity-50 ds:focus-visible:border-ring ds:focus-visible:ring-ring/50 ds:focus-visible:ring-[3px] ds:aria-invalid:ring-destructive/20 ds:dark:aria-invalid:ring-destructive/40 ds:aria-invalid:border-destructive\",\n {\n variants: {\n size: {\n xs: \"ds:h-6 ds:text-xs ds:px-2 ds:py-0.5\",\n sm: \"ds:h-8 ds:text-sm ds:px-2.5 ds:py-1\",\n normal: \"ds:h-9 ds:px-3 ds:py-1\",\n lg: \"ds:h-11 ds:px-4 ds:py-2\",\n xl: \"ds:h-14 ds:px-5 ds:py-3\",\n },\n state: {\n default: \"\",\n success:\n \"ds:border-success ds:ring-success/30 ds:focus-visible:border-success ds:focus-visible:ring-success/50\",\n error:\n \"ds:border-destructive ds:ring-destructive/30 ds:focus-visible:border-destructive ds:focus-visible:ring-destructive/50\",\n warning:\n \"ds:border-warning ds:ring-warning/30 ds:focus-visible:border-warning ds:focus-visible:ring-warning/50\",\n },\n },\n defaultVariants: {\n size: \"normal\",\n state: \"default\",\n },\n }\n);\n\ntype SelectOption = {\n label: React.ReactNode;\n value: string;\n group?: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n};\n\ntype ComboboxProps = Omit<\n React.ComponentProps<typeof PopoverPrimitive.Trigger>,\n \"onChange\"\n> & {\n value?: string;\n options?: SelectOption[];\n placeHolder?: string;\n onChange?: (value?: string | null) => void;\n clearable?: boolean;\n emptyText?: string;\n className?: string;\n dropdownClassName?: string;\n children?: React.ReactNode;\n size?: \"normal\" | \"sm\" | \"xs\" | \"lg\" | \"xl\";\n state?: \"default\" | \"success\" | \"error\" | \"warning\";\n searchable?: boolean;\n tagRender?: (\n option: SelectOption & { onClick?: () => void }\n ) => React.ReactNode;\n} & VariantProps<typeof comboboxVariants>;\n\nfunction Combobox({\n value,\n options,\n placeHolder,\n emptyText,\n onChange,\n clearable,\n className,\n dropdownClassName,\n children,\n size,\n state = \"default\",\n searchable = true,\n tagRender,\n ...props\n}: ComboboxProps) {\n const [open, setOpen] = React.useState(false);\n\n const handleOpenChange = React.useCallback((newOpen: boolean) => {\n setOpen(newOpen);\n }, []);\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange} modal={true}>\n <PopoverTrigger asChild {...props}>\n {children ?? (\n <Label className={cn(comboboxVariants({ size, state }), className)}>\n <span\n className={cn(\n \"ds:truncate ds:w-full ds:inline-block ds:align-middle ds:text-left\",\n {\n \"ds:pr-8\": clearable,\n }\n )}\n >\n {value\n ? options?.find((option) => option.value === value)?.label\n : placeHolder}\n </span>\n {open && (\n <ChevronUp\n className={cn(\n \"ds:z-10 ds:opacity-50\",\n {\n \"ds:size-4 ds:min-w-4\": size === \"sm\" || size === \"xs\",\n \"ds:size-5 ds:min-w-5\": size === \"lg\" || size === \"xl\",\n },\n dropdownClassName\n )}\n />\n )}\n {!open && (\n <ChevronDown\n className={cn(\n \"ds:z-10 ds:opacity-50\",\n {\n \"ds:size-4 ds:min-w-4\": size === \"sm\" || size === \"xs\",\n \"ds:size-5 ds:min-w-5\": size === \"lg\" || size === \"xl\",\n },\n dropdownClassName\n )}\n />\n )}\n </Label>\n )}\n </PopoverTrigger>\n\n {clearable && value && (\n <Label\n onClick={(e) => {\n e.stopPropagation();\n onChange?.(\"\");\n }}\n className=\"ds:absolute ds:right-11 ds:top-1/2 ds:-translate-y-1/2 ds:rounded-sm ds:p-1 ds:text-muted-foreground ds:hover:bg-accent ds:hover:text-accent-foreground ds:cursor-pointer ds:size-6 ds:opacity-50\"\n >\n <X className=\"ds:h-4 ds:w-4\" />\n </Label>\n )}\n <PopoverContent\n className={cn(\"ds:p-0 ds:w-(--radix-popover-trigger-width)\")}\n onInteractOutside={(e) => {\n // Prevent closing when clicking the trigger\n const target = e.target as HTMLElement;\n if (target.closest('[data-slot=\"popover-trigger\"]')) {\n e.preventDefault();\n }\n }}\n >\n <Command>\n {searchable && (\n <CommandInput placeholder={placeHolder} className=\"ds:h-9\" />\n )}\n <CommandList>\n <CommandEmpty>{emptyText || \"Not found\"}</CommandEmpty>\n <CommandGroup>\n {options?.map((option) => (\n <CommandItem\n key={option.value}\n value={String(option.label)} // Để Command search theo label\n onSelect={\n option?.disabled\n ? undefined\n : () => {\n onChange?.(option.value); // Lưu value thực sự\n setOpen(false);\n }\n }\n className={cn(\n option?.disabled &&\n \"ds:opacity-50 ds:cursor-not-allowed ds:grayscale\",\n value === option.value && \"ds:bg-primary/10 ds:dark:bg-primary/20\"\n )}\n >\n {tagRender ? (\n tagRender(option)\n ) : (\n <>\n {option.icon && (\n <span className=\"ds:mr-2 ds:max-w-4 ds:max-h-4\">\n {option.icon}\n </span>\n )}\n {option.label}\n </>\n )}\n <Check\n className={cn(\n \"ds:ml-auto\",\n value === option.value ? \"ds:opacity-100\" : \"ds:opacity-0\" // So sánh theo value\n )}\n />\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { Combobox, type ComboboxProps, type SelectOption };\n"],"names":["comboboxVariants","cva","Combobox","value","options","placeHolder","emptyText","onChange","clearable","className","dropdownClassName","children","size","state","searchable","tagRender","props","open","setOpen","React","handleOpenChange","newOpen","Popover","jsx","PopoverTrigger","jsxs","Label","cn","option","ChevronUp","ChevronDown","e","X","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","Fragment","Check"],"mappings":"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"}
@@ -70,7 +70,7 @@ function z({
70
70
  {
71
71
  "data-slot": "context-menu-sub-content",
72
72
  className: o(
73
- "ds:bg-popover ds:text-popover-foreground ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:z-50 ds:min-w-[8rem] ds:origin-(--radix-context-menu-content-transform-origin) ds:overflow-hidden ds:rounded-md ds:border ds:p-1 ds:shadow-lg",
73
+ "ds:bg-popover ds:text-popover-foreground ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:z-50 ds:min-w-[8rem] ds:origin-(--radix-context-menu-content-transform-origin) ds:overflow-hidden ds:rounded-md ds:border ds:border-border ds:p-1 ds:shadow-lg",
74
74
  t
75
75
  ),
76
76
  ...s
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.js","sources":["../../../../../../../../packages/ui/src/components/context-menu.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nfunction ContextMenu({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />;\n}\n\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return (\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n );\n}\n\nfunction ContextMenuGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n );\n}\n\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return (\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n );\n}\n\nfunction ContextMenuSub({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />;\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n );\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"ds:focus:bg-accent ds:focus:text-accent-foreground ds:data-[state=open]:bg-accent ds:data-[state=open]:text-accent-foreground ds:[&_svg:not([class*='text-'])]:text-muted-foreground ds:flex ds:cursor-default ds:items-center ds:rounded-sm ds:px-2 ds:py-1.5 ds:text-sm ds:outline-hidden ds:select-none ds:data-[inset]:pl-8 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0 ds:[&_svg:not([class*='size-'])]:size-4 ds:gap-2\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ds:ml-auto\" />\n </ContextMenuPrimitive.SubTrigger>\n );\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-menu-sub-content\"\n className={cn(\n \"ds:bg-popover ds:text-popover-foreground ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:z-50 ds:min-w-[8rem] ds:origin-(--radix-context-menu-content-transform-origin) ds:overflow-hidden ds:rounded-md ds:border ds:p-1 ds:shadow-lg\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-content\"\n updatePositionStrategy=\"always\"\n className={cn(\n \"ds:bg-popover ds:text-popover-foreground ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:z-50 ds:max-h-(--radix-context-menu-content-available-height) ds:min-w-[8rem] ds:origin-(--radix-context-menu-content-transform-origin) ds:overflow-x-hidden ds:overflow-y-auto ds:rounded-md ds:border ds:p-1 ds:shadow-md\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n );\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"ds:focus:bg-accent ds:focus:text-accent-foreground ds:data-[variant=destructive]:text-destructive ds:data-[variant=destructive]:focus:bg-destructive/10 ds:dark:data-[variant=destructive]:focus:bg-destructive/20 ds:data-[variant=destructive]:focus:text-destructive ds:data-[variant=destructive]:*:[svg]:!text-destructive ds:[&_svg:not([class*='text-'])]:text-muted-foreground ds:relative ds:flex ds:cursor-default ds:items-center ds:gap-2 ds:rounded-sm ds:px-2 ds:py-1.5 ds:text-sm ds:outline-hidden ds:select-none ds:data-[disabled]:pointer-events-none ds:data-[disabled]:opacity-50 ds:data-[inset]:pl-8 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0 ds:[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n className={cn(\n \"ds:focus:bg-accent ds:focus:text-accent-foreground ds:relative ds:flex ds:cursor-default ds:items-center ds:gap-2 ds:rounded-sm ds:py-1.5 ds:pr-2 ds:pl-8 ds:text-sm ds:outline-hidden ds:select-none ds:data-[disabled]:pointer-events-none ds:data-[disabled]:opacity-50 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0 ds:[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"ds:pointer-events-none ds:absolute ds:left-2 ds:flex ds:size-3.5 ds:items-center ds:justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"ds:size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n className={cn(\n \"ds:focus:bg-accent ds:focus:text-accent-foreground ds:relative ds:flex ds:cursor-default ds:items-center ds:gap-2 ds:rounded-sm ds:py-1.5 ds:pr-2 ds:pl-8 ds:text-sm ds:outline-hidden ds:select-none ds:data-[disabled]:pointer-events-none ds:data-[disabled]:opacity-50 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0 ds:[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"ds:pointer-events-none ds:absolute ds:left-2 ds:flex ds:size-3.5 ds:items-center ds:justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"ds:size-2 ds:fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n );\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn(\n \"ds:text-foreground ds:px-2 ds:py-1.5 ds:text-sm ds:font-medium ds:data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn(\"ds:bg-border ds:-mx-1 ds:my-1 ds:h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(\n \"ds:text-muted-foreground ds:ml-auto ds:text-xs ds:tracking-widest\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n};\n"],"names":["ContextMenu","props","ContextMenuPrimitive","ContextMenuTrigger","ContextMenuGroup","ContextMenuPortal","ContextMenuSub","ContextMenuRadioGroup","jsx","ContextMenuSubTrigger","className","inset","children","jsxs","cn","ChevronRightIcon","ContextMenuSubContent","ContextMenuContent","ContextMenuItem","variant","ContextMenuCheckboxItem","checked","CheckIcon","ContextMenuRadioItem","CircleIcon","ContextMenuLabel","ContextMenuSeparator","ContextMenuShortcut"],"mappings":"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"}
1
+ {"version":3,"file":"context-menu.js","sources":["../../../../../../../../packages/ui/src/components/context-menu.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nfunction ContextMenu({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />;\n}\n\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return (\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n );\n}\n\nfunction ContextMenuGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n );\n}\n\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return (\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n );\n}\n\nfunction ContextMenuSub({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />;\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n );\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"ds:focus:bg-accent ds:focus:text-accent-foreground ds:data-[state=open]:bg-accent ds:data-[state=open]:text-accent-foreground ds:[&_svg:not([class*='text-'])]:text-muted-foreground ds:flex ds:cursor-default ds:items-center ds:rounded-sm ds:px-2 ds:py-1.5 ds:text-sm ds:outline-hidden ds:select-none ds:data-[inset]:pl-8 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0 ds:[&_svg:not([class*='size-'])]:size-4 ds:gap-2\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ds:ml-auto\" />\n </ContextMenuPrimitive.SubTrigger>\n );\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-menu-sub-content\"\n className={cn(\n \"ds:bg-popover ds:text-popover-foreground ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:z-50 ds:min-w-[8rem] ds:origin-(--radix-context-menu-content-transform-origin) ds:overflow-hidden ds:rounded-md ds:border ds:border-border ds:p-1 ds:shadow-lg\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-content\"\n updatePositionStrategy=\"always\"\n className={cn(\n \"ds:bg-popover ds:text-popover-foreground ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:z-50 ds:max-h-(--radix-context-menu-content-available-height) ds:min-w-[8rem] ds:origin-(--radix-context-menu-content-transform-origin) ds:overflow-x-hidden ds:overflow-y-auto ds:rounded-md ds:border ds:p-1 ds:shadow-md\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n );\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"ds:focus:bg-accent ds:focus:text-accent-foreground ds:data-[variant=destructive]:text-destructive ds:data-[variant=destructive]:focus:bg-destructive/10 ds:dark:data-[variant=destructive]:focus:bg-destructive/20 ds:data-[variant=destructive]:focus:text-destructive ds:data-[variant=destructive]:*:[svg]:!text-destructive ds:[&_svg:not([class*='text-'])]:text-muted-foreground ds:relative ds:flex ds:cursor-default ds:items-center ds:gap-2 ds:rounded-sm ds:px-2 ds:py-1.5 ds:text-sm ds:outline-hidden ds:select-none ds:data-[disabled]:pointer-events-none ds:data-[disabled]:opacity-50 ds:data-[inset]:pl-8 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0 ds:[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n className={cn(\n \"ds:focus:bg-accent ds:focus:text-accent-foreground ds:relative ds:flex ds:cursor-default ds:items-center ds:gap-2 ds:rounded-sm ds:py-1.5 ds:pr-2 ds:pl-8 ds:text-sm ds:outline-hidden ds:select-none ds:data-[disabled]:pointer-events-none ds:data-[disabled]:opacity-50 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0 ds:[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"ds:pointer-events-none ds:absolute ds:left-2 ds:flex ds:size-3.5 ds:items-center ds:justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"ds:size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n className={cn(\n \"ds:focus:bg-accent ds:focus:text-accent-foreground ds:relative ds:flex ds:cursor-default ds:items-center ds:gap-2 ds:rounded-sm ds:py-1.5 ds:pr-2 ds:pl-8 ds:text-sm ds:outline-hidden ds:select-none ds:data-[disabled]:pointer-events-none ds:data-[disabled]:opacity-50 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0 ds:[&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"ds:pointer-events-none ds:absolute ds:left-2 ds:flex ds:size-3.5 ds:items-center ds:justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"ds:size-2 ds:fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n );\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn(\n \"ds:text-foreground ds:px-2 ds:py-1.5 ds:text-sm ds:font-medium ds:data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn(\"ds:bg-border ds:-mx-1 ds:my-1 ds:h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(\n \"ds:text-muted-foreground ds:ml-auto ds:text-xs ds:tracking-widest\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n};\n"],"names":["ContextMenu","props","ContextMenuPrimitive","ContextMenuTrigger","ContextMenuGroup","ContextMenuPortal","ContextMenuSub","ContextMenuRadioGroup","jsx","ContextMenuSubTrigger","className","inset","children","jsxs","cn","ChevronRightIcon","ContextMenuSubContent","ContextMenuContent","ContextMenuItem","variant","ContextMenuCheckboxItem","checked","CheckIcon","ContextMenuRadioItem","CircleIcon","ContextMenuLabel","ContextMenuSeparator","ContextMenuShortcut"],"mappings":"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"}
@@ -22,7 +22,7 @@ function v({
22
22
  align: t,
23
23
  sideOffset: d,
24
24
  className: i(
25
- "ds:bg-popover ds:text-popover-foreground ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:origin-(--radix-popover-content-transform-origin) ds:rounded-md ds:border ds:p-4 ds:shadow-md ds:outline-hidden",
25
+ "ds:bg-popover ds:text-popover-foreground ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:origin-(--radix-popover-content-transform-origin) ds:rounded-md ds:border ds:border-border ds:p-4 ds:shadow-md ds:outline-hidden",
26
26
  a ? "ds:z-[100]" : "ds:z-50",
27
27
  o
28
28
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"popover.js","sources":["../../../../../../../../packages/ui/src/components/popover.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\n\ntype PopoverProps = React.ComponentProps<typeof PopoverPrimitive.Root>;\nfunction Popover({ modal, ...props }: PopoverProps) {\n return <PopoverPrimitive.Root data-slot=\"popover\" modal={modal} {...props} />;\n}\n\ntype PopoverTriggerProps = React.ComponentProps<\n typeof PopoverPrimitive.Trigger\n>;\nfunction PopoverTrigger({ ...props }: PopoverTriggerProps) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\ntype PopoverContentProps = React.ComponentProps<\n typeof PopoverPrimitive.Content\n> & {\n /** Increase z-index for use in modals/dialogs */\n modal?: boolean;\n};\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n modal = false,\n ...props\n}: PopoverContentProps) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"ds:bg-popover ds:text-popover-foreground ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:origin-(--radix-popover-content-transform-origin) ds:rounded-md ds:border ds:p-4 ds:shadow-md ds:outline-hidden\",\n modal ? \"ds:z-[100]\" : \"ds:z-50\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\ntype PopoverAnchorProps = React.ComponentProps<typeof PopoverPrimitive.Anchor>;\nconst PopoverAnchor = React.forwardRef<HTMLDivElement, PopoverAnchorProps>(\n ({ ...props }, ref) => {\n return (\n <PopoverPrimitive.Anchor\n ref={ref}\n data-slot=\"popover-anchor\"\n {...props}\n />\n );\n }\n);\n\nPopoverAnchor.displayName = \"PopoverAnchor\";\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n type PopoverProps,\n type PopoverTriggerProps,\n type PopoverAnchorProps,\n type PopoverContentProps,\n};\n"],"names":["Popover","modal","props","jsx","PopoverPrimitive","PopoverTrigger","PopoverContent","className","align","sideOffset","cn","PopoverAnchor","React","ref"],"mappings":";;;;AAQA,SAASA,EAAQ,EAAE,OAAAC,GAAO,GAAGC,KAAuB;AAClD,SAAO,gBAAAC,EAACC,EAAiB,MAAjB,EAAsB,aAAU,WAAU,OAAAH,GAAe,GAAGC,GAAO;AAC7E;AAKA,SAASG,EAAe,EAAE,GAAGH,KAA8B;AACzD,2BAAQE,EAAiB,SAAjB,EAAyB,aAAU,mBAAmB,GAAGF,GAAO;AAC1E;AAQA,SAASI,EAAe;AAAA,EACtB,WAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,YAAAC,IAAa;AAAA,EACb,OAAAR,IAAQ;AAAA,EACR,GAAGC;AACL,GAAwB;AACtB,SACE,gBAAAC,EAACC,EAAiB,QAAjB,EACC,UAAA,gBAAAD;AAAA,IAACC,EAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,OAAAI;AAAA,MACA,YAAAC;AAAA,MACA,WAAWC;AAAA,QACT;AAAA,QACAT,IAAQ,eAAe;AAAA,QACvBM;AAAA,MAAA;AAAA,MAED,GAAGL;AAAA,IAAA;AAAA,EAAA,GAER;AAEJ;AAGA,MAAMS,IAAgBC,EAAM;AAAA,EAC1B,CAAC,EAAE,GAAGV,EAAA,GAASW,MAEX,gBAAAV;AAAA,IAACC,EAAiB;AAAA,IAAjB;AAAA,MACC,KAAAS;AAAA,MACA,aAAU;AAAA,MACT,GAAGX;AAAA,IAAA;AAAA,EAAA;AAIZ;AAEAS,EAAc,cAAc;"}
1
+ {"version":3,"file":"popover.js","sources":["../../../../../../../../packages/ui/src/components/popover.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\n\ntype PopoverProps = React.ComponentProps<typeof PopoverPrimitive.Root>;\nfunction Popover({ modal, ...props }: PopoverProps) {\n return <PopoverPrimitive.Root data-slot=\"popover\" modal={modal} {...props} />;\n}\n\ntype PopoverTriggerProps = React.ComponentProps<\n typeof PopoverPrimitive.Trigger\n>;\nfunction PopoverTrigger({ ...props }: PopoverTriggerProps) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\ntype PopoverContentProps = React.ComponentProps<\n typeof PopoverPrimitive.Content\n> & {\n /** Increase z-index for use in modals/dialogs */\n modal?: boolean;\n};\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n modal = false,\n ...props\n}: PopoverContentProps) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"ds:bg-popover ds:text-popover-foreground ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:origin-(--radix-popover-content-transform-origin) ds:rounded-md ds:border ds:border-border ds:p-4 ds:shadow-md ds:outline-hidden\",\n modal ? \"ds:z-[100]\" : \"ds:z-50\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\ntype PopoverAnchorProps = React.ComponentProps<typeof PopoverPrimitive.Anchor>;\nconst PopoverAnchor = React.forwardRef<HTMLDivElement, PopoverAnchorProps>(\n ({ ...props }, ref) => {\n return (\n <PopoverPrimitive.Anchor\n ref={ref}\n data-slot=\"popover-anchor\"\n {...props}\n />\n );\n }\n);\n\nPopoverAnchor.displayName = \"PopoverAnchor\";\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n type PopoverProps,\n type PopoverTriggerProps,\n type PopoverAnchorProps,\n type PopoverContentProps,\n};\n"],"names":["Popover","modal","props","jsx","PopoverPrimitive","PopoverTrigger","PopoverContent","className","align","sideOffset","cn","PopoverAnchor","React","ref"],"mappings":";;;;AAQA,SAASA,EAAQ,EAAE,OAAAC,GAAO,GAAGC,KAAuB;AAClD,SAAO,gBAAAC,EAACC,EAAiB,MAAjB,EAAsB,aAAU,WAAU,OAAAH,GAAe,GAAGC,GAAO;AAC7E;AAKA,SAASG,EAAe,EAAE,GAAGH,KAA8B;AACzD,2BAAQE,EAAiB,SAAjB,EAAyB,aAAU,mBAAmB,GAAGF,GAAO;AAC1E;AAQA,SAASI,EAAe;AAAA,EACtB,WAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,YAAAC,IAAa;AAAA,EACb,OAAAR,IAAQ;AAAA,EACR,GAAGC;AACL,GAAwB;AACtB,SACE,gBAAAC,EAACC,EAAiB,QAAjB,EACC,UAAA,gBAAAD;AAAA,IAACC,EAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,OAAAI;AAAA,MACA,YAAAC;AAAA,MACA,WAAWC;AAAA,QACT;AAAA,QACAT,IAAQ,eAAe;AAAA,QACvBM;AAAA,MAAA;AAAA,MAED,GAAGL;AAAA,IAAA;AAAA,EAAA,GAER;AAEJ;AAGA,MAAMS,IAAgBC,EAAM;AAAA,EAC1B,CAAC,EAAE,GAAGV,EAAA,GAASW,MAEX,gBAAAV;AAAA,IAACC,EAAiB;AAAA,IAAjB;AAAA,MACC,KAAAS;AAAA,MACA,aAAU;AAAA,MACT,GAAGX;AAAA,IAAA;AAAA,EAAA;AAIZ;AAEAS,EAAc,cAAc;"}
@@ -130,7 +130,7 @@ function oe({
130
130
  "ds:group-data-[collapsible=offcanvas]:w-0",
131
131
  "ds:group-data-[side=right]:rotate-180",
132
132
  "ds:group-data-[side=right]:hidden",
133
- e === "floating" || e === "inset" ? "ds:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "ds:group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
133
+ e === "floating" || e === "inset" ? "ds:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--ds-spacing(4)))]" : "ds:group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
134
134
  )
135
135
  }
136
136
  ),
@@ -142,7 +142,7 @@ function oe({
142
142
  "ds:fixed ds:inset-y-0 ds:z-10 ds:hidden ds:h-svh ds:w-(--sidebar-width) ds:transition-[left,right,width] ds:duration-200 ds:ease-linear ds:md:flex",
143
143
  a === "left" ? "ds:left-0 ds:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "ds:right-0 ds:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
144
144
  // Adjust the padding for floating and inset variants.
145
- e === "floating" || e === "inset" ? "ds:p-2 ds:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "ds:group-data-[collapsible=icon]:w-(--sidebar-width-icon) ds:group-data-[side=left]:border-r ds:group-data-[side=right]:border-l",
145
+ e === "floating" || e === "inset" ? "ds:p-2 ds:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--ds-spacing(4))+2px)]" : "ds:group-data-[collapsible=icon]:w-(--sidebar-width-icon) ds:group-data-[side=left]:border-r ds:group-data-[side=right]:border-l",
146
146
  r
147
147
  ),
148
148
  ...l,
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.js","sources":["../../../../../../../../packages/ui/src/components/sidebar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { PanelLeftIcon } from \"lucide-react\";\n\nimport { useIsMobile } from \"@dsui/ui/hooks/use-mobile\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { Button } from \"@dsui/ui/components/button\";\nimport { Input } from \"@dsui/ui/components/input\";\nimport { Separator } from \"@dsui/ui/components/separator\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@dsui/ui/components/sheet\";\nimport { Skeleton } from \"@dsui/ui/components/skeleton\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@dsui/ui/components/tooltip\";\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"ds:group/sidebar-wrapper ds:has-data-[variant=inset]:bg-sidebar ds:flex ds:min-h-svh ds:w-full\",\n \"ds:has-data-[variant=tilt]:[perspective:1000px] ds:has-data-[variant=tilt]:bg-black/20\",\n \"ds:has-data-[variant=depth]:[perspective:1000px] ds:has-data-[variant=depth]:bg-black/20\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\" | \"tilt\" | \"depth\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"ds:bg-sidebar ds:text-sidebar-foreground ds:flex ds:h-full ds:w-(--sidebar-width) ds:flex-col\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"ds:bg-sidebar ds:text-sidebar-foreground ds:w-(--sidebar-width) ds:p-0 ds:[&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"ds:sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"ds:flex ds:h-full ds:w-full ds:flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"ds:group ds:peer ds:text-sidebar-foreground ds:hidden ds:md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"ds:relative ds:w-(--sidebar-width) ds:bg-transparent ds:transition-[width] ds:duration-200 ds:ease-linear\",\n \"ds:group-data-[collapsible=offcanvas]:w-0\",\n \"ds:group-data-[side=right]:rotate-180\",\n \"ds:group-data-[side=right]:hidden\",\n variant === \"floating\" || variant === \"inset\"\n ? \"ds:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"ds:group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"ds:fixed ds:inset-y-0 ds:z-10 ds:hidden ds:h-svh ds:w-(--sidebar-width) ds:transition-[left,right,width] ds:duration-200 ds:ease-linear ds:md:flex\",\n side === \"left\"\n ? \"ds:left-0 ds:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"ds:right-0 ds:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"ds:p-2 ds:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"ds:group-data-[collapsible=icon]:w-(--sidebar-width-icon) ds:group-data-[side=left]:border-r ds:group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"ds:bg-sidebar ds:group-data-[variant=floating]:border-sidebar-border ds:flex ds:h-full ds:w-full ds:flex-col ds:group-data-[variant=floating]:rounded-lg ds:group-data-[variant=floating]:border ds:group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"ds:size-7\", className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"ds:sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"ds:hover:after:bg-sidebar-border ds:absolute ds:inset-y-0 ds:z-20 ds:hidden ds:w-4 ds:-translate-x-1/2 ds:transition-all ds:ease-linear ds:group-data-[side=left]:-right-4 ds:group-data-[side=right]:left-0 ds:after:absolute ds:after:inset-y-0 ds:after:left-1/2 ds:after:w-[2px] ds:sm:flex\",\n \"ds:in-data-[side=left]:cursor-w-resize ds:in-data-[side=right]:cursor-e-resize\",\n \"ds:[[data-side=left][data-state=collapsed]_&]:cursor-e-resize ds:[[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"ds:hover:group-data-[collapsible=offcanvas]:bg-sidebar ds:group-data-[collapsible=offcanvas]:translate-x-0 ds:group-data-[collapsible=offcanvas]:after:left-full\",\n \"ds:[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"ds:[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n const { setOpen, state } = useSidebar();\n const mainRef = React.useRef<HTMLElement>(null);\n\n const handleClick = React.useCallback(() => {\n if (mainRef.current) {\n const sidebar = mainRef.current.parentElement?.querySelector(\n '[data-slot=\"sidebar\"]'\n );\n const variant = sidebar?.getAttribute(\"data-variant\");\n if ((variant === \"tilt\" || variant === \"depth\") && state === \"expanded\") {\n setOpen(false);\n }\n }\n }, [setOpen, state]);\n\n return (\n <main\n ref={mainRef}\n data-slot=\"sidebar-inset\"\n onClick={handleClick}\n className={cn(\n \"ds:bg-background ds:relative ds:flex ds:w-full ds:flex-1 ds:flex-col\",\n \"ds:md:peer-data-[variant=inset]:m-2 ds:md:peer-data-[variant=inset]:ml-0 ds:md:peer-data-[variant=inset]:rounded-xl ds:md:peer-data-[variant=inset]:shadow-sm ds:md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n \"ds:md:peer-data-[variant=sidebar]:peer-data-[side=left]:peer-data-[state=collapsed]:peer-data-[collapsible=icon]:ml-(--sidebar-width-icon) ds:md:peer-data-[variant=sidebar]:peer-data-[side=right]:peer-data-[state=collapsed]:peer-data-[collapsible=icon]:mr-(--sidebar-width-icon)\",\n \"ds:md:peer-data-[variant=sidebar]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:ml-0 ds:md:peer-data-[variant=sidebar]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:mr-0\",\n \"ds:md:peer-data-[variant=sidebar]:peer-data-[side=right]:mr-(--sidebar-width)\",\n \"ds:md:peer-data-[variant=inset]:peer-data-[side=left]:peer-data-[state=collapsed]:peer-data-[collapsible=icon]:ml-(--sidebar-width-icon) ds:md:peer-data-[variant=inset]:peer-data-[side=right]:peer-data-[state=collapsed]:peer-data-[collapsible=icon]:mr-(--sidebar-width-icon)\",\n \"ds:md:peer-data-[variant=inset]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:ml-0 ds:md:peer-data-[variant=inset]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:mr-0\",\n \"ds:md:peer-data-[variant=inset]:peer-data-[side=right]:mr-(--sidebar-width)\",\n \"ds:md:peer-data-[variant=tilt]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:ml-0 ds:md:peer-data-[variant=tilt]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:mr-0\",\n \"ds:md:peer-data-[variant=tilt]:peer-data-[side=right]:mr-(--sidebar-width)\",\n \"ds:md:peer-data-[variant=tilt]:transition-transform ds:md:peer-data-[variant=tilt]:duration-200 ds:md:peer-data-[variant=tilt]:ease-linear\",\n \"ds:md:peer-data-[variant=tilt]:peer-data-[side=left]:origin-right ds:md:peer-data-[variant=tilt]:peer-data-[side=left]:peer-data-[state=expanded]:[transform:rotate3d(0,1,0,-25deg)]\",\n \"ds:md:peer-data-[variant=tilt]:peer-data-[side=right]:origin-left ds:md:peer-data-[variant=tilt]:peer-data-[side=right]:peer-data-[state=expanded]:[transform:rotate3d(0,1,0,25deg)]\",\n \"ds:md:peer-data-[variant=tilt]:peer-data-[state=expanded]:blur-[2px]\",\n \"ds:md:peer-data-[variant=depth]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:ml-0 ds:md:peer-data-[variant=depth]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:mr-0\",\n \"ds:md:peer-data-[variant=depth]:peer-data-[side=right]:mr-(--sidebar-width)\",\n \"ds:md:peer-data-[variant=depth]:transition-transform ds:md:peer-data-[variant=depth]:duration-200 ds:md:peer-data-[variant=depth]:ease-linear\",\n \"ds:md:peer-data-[variant=depth]:peer-data-[state=expanded]:[transform:scale(0.95)_translateZ(-50px)]\",\n \"ds:md:peer-data-[variant=depth]:peer-data-[state=expanded]:backdrop-blur-[1px]\",\n \"ds:md:peer-data-[variant=depth]:peer-data-[state=expanded]:blur-[2px]\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"ds:bg-background ds:h-8 ds:w-full ds:shadow-none\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"ds:flex ds:flex-col ds:gap-2 ds:p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"ds:flex ds:flex-col ds:gap-2 ds:p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"ds:bg-sidebar-border ds:mx-2 ds:w-auto\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"ds:flex ds:min-h-0 ds:flex-1 ds:flex-col ds:gap-2 ds:overflow-auto ds:group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"ds:relative ds:flex ds:w-full ds:min-w-0 ds:flex-col ds:p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"ds:text-sidebar-foreground/70 ds:ring-sidebar-ring ds:flex ds:h-8 ds:shrink-0 ds:items-center ds:rounded-md ds:px-2 ds:text-xs ds:font-medium ds:outline-hidden ds:transition-[margin,opacity] ds:duration-200 ds:ease-linear ds:focus-visible:ring-2 ds:[&>svg]:size-4 ds:[&>svg]:shrink-0\",\n \"ds:group-data-[collapsible=icon]:-mt-8 ds:group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"ds:text-sidebar-foreground ds:ring-sidebar-ring ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground ds:absolute ds:top-3.5 ds:right-3 ds:flex ds:aspect-square ds:w-5 ds:items-center ds:justify-center ds:rounded-md ds:p-0 ds:outline-hidden ds:transition-transform ds:focus-visible:ring-2 ds:[&>svg]:size-4 ds:[&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"ds:after:absolute ds:after:-inset-2 ds:md:after:hidden\",\n \"ds:group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"ds:w-full ds:text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"ds:flex ds:w-full ds:min-w-0 ds:flex-col ds:gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"ds:group/menu-item ds:relative\", className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"ds:peer/menu-button ds:flex ds:w-full ds:items-center ds:gap-2 ds:overflow-hidden ds:rounded-md ds:p-2 ds:text-left ds:text-sm ds:outline-hidden ds:ring-sidebar-ring ds:transition-[width,height,padding] ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground ds:focus-visible:ring-2 ds:active:bg-sidebar-accent ds:active:text-sidebar-accent-foreground ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:group-has-data-[sidebar=menu-action]/menu-item:pr-8 ds:aria-disabled:pointer-events-none ds:aria-disabled:opacity-50 ds:data-[active=true]:bg-sidebar-accent ds:data-[active=true]:font-medium ds:data-[active=true]:text-sidebar-accent-foreground ds:data-[state=open]:hover:bg-sidebar-accent ds:data-[state=open]:hover:text-sidebar-accent-foreground ds:group-data-[collapsible=icon]:size-8! ds:group-data-[collapsible=icon]:p-2! ds:[&>span:last-child]:truncate ds:[&>svg]:size-4 ds:[&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground\",\n outline:\n \"ds:bg-background ds:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground ds:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"ds:h-8 ds:text-sm\",\n sm: \"ds:h-7 ds:text-xs\",\n lg: \"ds:h-12 ds:text-sm ds:group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : \"button\";\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"ds:text-sidebar-foreground ds:ring-sidebar-ring ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground ds:peer-hover/menu-button:text-sidebar-accent-foreground ds:absolute ds:top-1.5 ds:right-1 ds:flex ds:aspect-square ds:w-5 ds:items-center ds:justify-center ds:rounded-md ds:p-0 ds:outline-hidden ds:transition-transform ds:focus-visible:ring-2 ds:[&>svg]:size-4 ds:[&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"ds:after:absolute ds:after:-inset-2 ds:md:after:hidden\",\n \"ds:peer-data-[size=sm]/menu-button:top-1\",\n \"ds:peer-data-[size=default]/menu-button:top-1.5\",\n \"ds:peer-data-[size=lg]/menu-button:top-2.5\",\n \"ds:group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"ds:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground ds:group-focus-within/menu-item:opacity-100 ds:group-hover/menu-item:opacity-100 ds:data-[state=open]:opacity-100 ds:md:opacity-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"ds:text-sidebar-foreground ds:pointer-events-none ds:absolute ds:right-1 ds:flex ds:h-5 ds:min-w-5 ds:items-center ds:justify-center ds:rounded-md ds:px-1 ds:text-xs ds:font-medium ds:tabular-nums ds:select-none\",\n \"ds:peer-hover/menu-button:text-sidebar-accent-foreground ds:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"ds:peer-data-[size=sm]/menu-button:top-1\",\n \"ds:peer-data-[size=default]/menu-button:top-1.5\",\n \"ds:peer-data-[size=lg]/menu-button:top-2.5\",\n \"ds:group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"ds:flex ds:h-8 ds:items-center ds:gap-2 ds:rounded-md ds:px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"ds:size-4 ds:rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"ds:h-4 ds:max-w-(--skeleton-width) ds:flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"ds:border-sidebar-border ds:mx-3.5 ds:flex ds:min-w-0 ds:translate-x-px ds:flex-col ds:gap-1 ds:border-l ds:px-2.5 ds:py-0.5\",\n \"ds:group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"ds:group/menu-sub-item ds:relative\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"ds:text-sidebar-foreground ds:ring-sidebar-ring ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground ds:active:bg-sidebar-accent ds:active:text-sidebar-accent-foreground ds:[&>svg]:text-sidebar-accent-foreground ds:flex ds:h-7 ds:min-w-0 ds:-translate-x-px ds:items-center ds:gap-2 ds:overflow-hidden ds:rounded-md ds:px-2 ds:outline-hidden ds:focus-visible:ring-2 ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:aria-disabled:pointer-events-none ds:aria-disabled:opacity-50 ds:[&>span:last-child]:truncate ds:[&>svg]:size-4 ds:[&>svg]:shrink-0\",\n \"ds:data-[active=true]:bg-sidebar-accent ds:data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"ds:text-xs\",\n size === \"md\" && \"ds:text-sm\",\n \"ds:group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n};\n"],"names":["SIDEBAR_COOKIE_NAME","SIDEBAR_COOKIE_MAX_AGE","SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","React","useSidebar","context","SidebarProvider","defaultOpen","openProp","setOpenProp","className","style","children","props","isMobile","useIsMobile","openMobile","setOpenMobile","_open","_setOpen","open","setOpen","value","openState","toggleSidebar","handleKeyDown","event","state","contextValue","jsx","TooltipProvider","cn","Sidebar","side","variant","collapsible","Sheet","jsxs","SheetContent","SheetHeader","SheetTitle","SheetDescription","SidebarTrigger","onClick","Button","PanelLeftIcon","SidebarRail","SidebarInset","mainRef","handleClick","SidebarInput","Input","SidebarHeader","SidebarFooter","SidebarSeparator","Separator","SidebarContent","SidebarGroup","SidebarGroupLabel","asChild","Slot","SidebarGroupAction","SidebarGroupContent","SidebarMenu","SidebarMenuItem","sidebarMenuButtonVariants","cva","SidebarMenuButton","isActive","size","tooltip","Comp","button","Tooltip","TooltipTrigger","TooltipContent","SidebarMenuAction","showOnHover","SidebarMenuBadge","SidebarMenuSkeleton","showIcon","width","Skeleton","SidebarMenuSub","SidebarMenuSubItem","SidebarMenuSubButton"],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.js","sources":["../../../../../../../../packages/ui/src/components/sidebar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { PanelLeftIcon } from \"lucide-react\";\n\nimport { useIsMobile } from \"@dsui/ui/hooks/use-mobile\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { Button } from \"@dsui/ui/components/button\";\nimport { Input } from \"@dsui/ui/components/input\";\nimport { Separator } from \"@dsui/ui/components/separator\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@dsui/ui/components/sheet\";\nimport { Skeleton } from \"@dsui/ui/components/skeleton\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@dsui/ui/components/tooltip\";\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"ds:group/sidebar-wrapper ds:has-data-[variant=inset]:bg-sidebar ds:flex ds:min-h-svh ds:w-full\",\n \"ds:has-data-[variant=tilt]:[perspective:1000px] ds:has-data-[variant=tilt]:bg-black/20\",\n \"ds:has-data-[variant=depth]:[perspective:1000px] ds:has-data-[variant=depth]:bg-black/20\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\" | \"tilt\" | \"depth\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"ds:bg-sidebar ds:text-sidebar-foreground ds:flex ds:h-full ds:w-(--sidebar-width) ds:flex-col\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"ds:bg-sidebar ds:text-sidebar-foreground ds:w-(--sidebar-width) ds:p-0 ds:[&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"ds:sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"ds:flex ds:h-full ds:w-full ds:flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"ds:group ds:peer ds:text-sidebar-foreground ds:hidden ds:md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"ds:relative ds:w-(--sidebar-width) ds:bg-transparent ds:transition-[width] ds:duration-200 ds:ease-linear\",\n \"ds:group-data-[collapsible=offcanvas]:w-0\",\n \"ds:group-data-[side=right]:rotate-180\",\n \"ds:group-data-[side=right]:hidden\",\n variant === \"floating\" || variant === \"inset\"\n ? \"ds:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--ds-spacing(4)))]\"\n : \"ds:group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"ds:fixed ds:inset-y-0 ds:z-10 ds:hidden ds:h-svh ds:w-(--sidebar-width) ds:transition-[left,right,width] ds:duration-200 ds:ease-linear ds:md:flex\",\n side === \"left\"\n ? \"ds:left-0 ds:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"ds:right-0 ds:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"ds:p-2 ds:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--ds-spacing(4))+2px)]\"\n : \"ds:group-data-[collapsible=icon]:w-(--sidebar-width-icon) ds:group-data-[side=left]:border-r ds:group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"ds:bg-sidebar ds:group-data-[variant=floating]:border-sidebar-border ds:flex ds:h-full ds:w-full ds:flex-col ds:group-data-[variant=floating]:rounded-lg ds:group-data-[variant=floating]:border ds:group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"ds:size-7\", className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"ds:sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"ds:hover:after:bg-sidebar-border ds:absolute ds:inset-y-0 ds:z-20 ds:hidden ds:w-4 ds:-translate-x-1/2 ds:transition-all ds:ease-linear ds:group-data-[side=left]:-right-4 ds:group-data-[side=right]:left-0 ds:after:absolute ds:after:inset-y-0 ds:after:left-1/2 ds:after:w-[2px] ds:sm:flex\",\n \"ds:in-data-[side=left]:cursor-w-resize ds:in-data-[side=right]:cursor-e-resize\",\n \"ds:[[data-side=left][data-state=collapsed]_&]:cursor-e-resize ds:[[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"ds:hover:group-data-[collapsible=offcanvas]:bg-sidebar ds:group-data-[collapsible=offcanvas]:translate-x-0 ds:group-data-[collapsible=offcanvas]:after:left-full\",\n \"ds:[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"ds:[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n const { setOpen, state } = useSidebar();\n const mainRef = React.useRef<HTMLElement>(null);\n\n const handleClick = React.useCallback(() => {\n if (mainRef.current) {\n const sidebar = mainRef.current.parentElement?.querySelector(\n '[data-slot=\"sidebar\"]'\n );\n const variant = sidebar?.getAttribute(\"data-variant\");\n if ((variant === \"tilt\" || variant === \"depth\") && state === \"expanded\") {\n setOpen(false);\n }\n }\n }, [setOpen, state]);\n\n return (\n <main\n ref={mainRef}\n data-slot=\"sidebar-inset\"\n onClick={handleClick}\n className={cn(\n \"ds:bg-background ds:relative ds:flex ds:w-full ds:flex-1 ds:flex-col\",\n \"ds:md:peer-data-[variant=inset]:m-2 ds:md:peer-data-[variant=inset]:ml-0 ds:md:peer-data-[variant=inset]:rounded-xl ds:md:peer-data-[variant=inset]:shadow-sm ds:md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n \"ds:md:peer-data-[variant=sidebar]:peer-data-[side=left]:peer-data-[state=collapsed]:peer-data-[collapsible=icon]:ml-(--sidebar-width-icon) ds:md:peer-data-[variant=sidebar]:peer-data-[side=right]:peer-data-[state=collapsed]:peer-data-[collapsible=icon]:mr-(--sidebar-width-icon)\",\n \"ds:md:peer-data-[variant=sidebar]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:ml-0 ds:md:peer-data-[variant=sidebar]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:mr-0\",\n \"ds:md:peer-data-[variant=sidebar]:peer-data-[side=right]:mr-(--sidebar-width)\",\n \"ds:md:peer-data-[variant=inset]:peer-data-[side=left]:peer-data-[state=collapsed]:peer-data-[collapsible=icon]:ml-(--sidebar-width-icon) ds:md:peer-data-[variant=inset]:peer-data-[side=right]:peer-data-[state=collapsed]:peer-data-[collapsible=icon]:mr-(--sidebar-width-icon)\",\n \"ds:md:peer-data-[variant=inset]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:ml-0 ds:md:peer-data-[variant=inset]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:mr-0\",\n \"ds:md:peer-data-[variant=inset]:peer-data-[side=right]:mr-(--sidebar-width)\",\n \"ds:md:peer-data-[variant=tilt]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:ml-0 ds:md:peer-data-[variant=tilt]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:mr-0\",\n \"ds:md:peer-data-[variant=tilt]:peer-data-[side=right]:mr-(--sidebar-width)\",\n \"ds:md:peer-data-[variant=tilt]:transition-transform ds:md:peer-data-[variant=tilt]:duration-200 ds:md:peer-data-[variant=tilt]:ease-linear\",\n \"ds:md:peer-data-[variant=tilt]:peer-data-[side=left]:origin-right ds:md:peer-data-[variant=tilt]:peer-data-[side=left]:peer-data-[state=expanded]:[transform:rotate3d(0,1,0,-25deg)]\",\n \"ds:md:peer-data-[variant=tilt]:peer-data-[side=right]:origin-left ds:md:peer-data-[variant=tilt]:peer-data-[side=right]:peer-data-[state=expanded]:[transform:rotate3d(0,1,0,25deg)]\",\n \"ds:md:peer-data-[variant=tilt]:peer-data-[state=expanded]:blur-[2px]\",\n \"ds:md:peer-data-[variant=depth]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:ml-0 ds:md:peer-data-[variant=depth]:peer-data-[state=collapsed]:peer-data-[collapsible=offcanvas]:mr-0\",\n \"ds:md:peer-data-[variant=depth]:peer-data-[side=right]:mr-(--sidebar-width)\",\n \"ds:md:peer-data-[variant=depth]:transition-transform ds:md:peer-data-[variant=depth]:duration-200 ds:md:peer-data-[variant=depth]:ease-linear\",\n \"ds:md:peer-data-[variant=depth]:peer-data-[state=expanded]:[transform:scale(0.95)_translateZ(-50px)]\",\n \"ds:md:peer-data-[variant=depth]:peer-data-[state=expanded]:backdrop-blur-[1px]\",\n \"ds:md:peer-data-[variant=depth]:peer-data-[state=expanded]:blur-[2px]\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"ds:bg-background ds:h-8 ds:w-full ds:shadow-none\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"ds:flex ds:flex-col ds:gap-2 ds:p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"ds:flex ds:flex-col ds:gap-2 ds:p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"ds:bg-sidebar-border ds:mx-2 ds:w-auto\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"ds:flex ds:min-h-0 ds:flex-1 ds:flex-col ds:gap-2 ds:overflow-auto ds:group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"ds:relative ds:flex ds:w-full ds:min-w-0 ds:flex-col ds:p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"ds:text-sidebar-foreground/70 ds:ring-sidebar-ring ds:flex ds:h-8 ds:shrink-0 ds:items-center ds:rounded-md ds:px-2 ds:text-xs ds:font-medium ds:outline-hidden ds:transition-[margin,opacity] ds:duration-200 ds:ease-linear ds:focus-visible:ring-2 ds:[&>svg]:size-4 ds:[&>svg]:shrink-0\",\n \"ds:group-data-[collapsible=icon]:-mt-8 ds:group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"ds:text-sidebar-foreground ds:ring-sidebar-ring ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground ds:absolute ds:top-3.5 ds:right-3 ds:flex ds:aspect-square ds:w-5 ds:items-center ds:justify-center ds:rounded-md ds:p-0 ds:outline-hidden ds:transition-transform ds:focus-visible:ring-2 ds:[&>svg]:size-4 ds:[&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"ds:after:absolute ds:after:-inset-2 ds:md:after:hidden\",\n \"ds:group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"ds:w-full ds:text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"ds:flex ds:w-full ds:min-w-0 ds:flex-col ds:gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"ds:group/menu-item ds:relative\", className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"ds:peer/menu-button ds:flex ds:w-full ds:items-center ds:gap-2 ds:overflow-hidden ds:rounded-md ds:p-2 ds:text-left ds:text-sm ds:outline-hidden ds:ring-sidebar-ring ds:transition-[width,height,padding] ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground ds:focus-visible:ring-2 ds:active:bg-sidebar-accent ds:active:text-sidebar-accent-foreground ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:group-has-data-[sidebar=menu-action]/menu-item:pr-8 ds:aria-disabled:pointer-events-none ds:aria-disabled:opacity-50 ds:data-[active=true]:bg-sidebar-accent ds:data-[active=true]:font-medium ds:data-[active=true]:text-sidebar-accent-foreground ds:data-[state=open]:hover:bg-sidebar-accent ds:data-[state=open]:hover:text-sidebar-accent-foreground ds:group-data-[collapsible=icon]:size-8! ds:group-data-[collapsible=icon]:p-2! ds:[&>span:last-child]:truncate ds:[&>svg]:size-4 ds:[&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground\",\n outline:\n \"ds:bg-background ds:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground ds:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"ds:h-8 ds:text-sm\",\n sm: \"ds:h-7 ds:text-xs\",\n lg: \"ds:h-12 ds:text-sm ds:group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : \"button\";\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"ds:text-sidebar-foreground ds:ring-sidebar-ring ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground ds:peer-hover/menu-button:text-sidebar-accent-foreground ds:absolute ds:top-1.5 ds:right-1 ds:flex ds:aspect-square ds:w-5 ds:items-center ds:justify-center ds:rounded-md ds:p-0 ds:outline-hidden ds:transition-transform ds:focus-visible:ring-2 ds:[&>svg]:size-4 ds:[&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"ds:after:absolute ds:after:-inset-2 ds:md:after:hidden\",\n \"ds:peer-data-[size=sm]/menu-button:top-1\",\n \"ds:peer-data-[size=default]/menu-button:top-1.5\",\n \"ds:peer-data-[size=lg]/menu-button:top-2.5\",\n \"ds:group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"ds:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground ds:group-focus-within/menu-item:opacity-100 ds:group-hover/menu-item:opacity-100 ds:data-[state=open]:opacity-100 ds:md:opacity-0\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"ds:text-sidebar-foreground ds:pointer-events-none ds:absolute ds:right-1 ds:flex ds:h-5 ds:min-w-5 ds:items-center ds:justify-center ds:rounded-md ds:px-1 ds:text-xs ds:font-medium ds:tabular-nums ds:select-none\",\n \"ds:peer-hover/menu-button:text-sidebar-accent-foreground ds:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"ds:peer-data-[size=sm]/menu-button:top-1\",\n \"ds:peer-data-[size=default]/menu-button:top-1.5\",\n \"ds:peer-data-[size=lg]/menu-button:top-2.5\",\n \"ds:group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"ds:flex ds:h-8 ds:items-center ds:gap-2 ds:rounded-md ds:px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"ds:size-4 ds:rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"ds:h-4 ds:max-w-(--skeleton-width) ds:flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"ds:border-sidebar-border ds:mx-3.5 ds:flex ds:min-w-0 ds:translate-x-px ds:flex-col ds:gap-1 ds:border-l ds:px-2.5 ds:py-0.5\",\n \"ds:group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"ds:group/menu-sub-item ds:relative\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"ds:text-sidebar-foreground ds:ring-sidebar-ring ds:hover:bg-sidebar-accent ds:hover:text-sidebar-accent-foreground ds:active:bg-sidebar-accent ds:active:text-sidebar-accent-foreground ds:[&>svg]:text-sidebar-accent-foreground ds:flex ds:h-7 ds:min-w-0 ds:-translate-x-px ds:items-center ds:gap-2 ds:overflow-hidden ds:rounded-md ds:px-2 ds:outline-hidden ds:focus-visible:ring-2 ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:aria-disabled:pointer-events-none ds:aria-disabled:opacity-50 ds:[&>span:last-child]:truncate ds:[&>svg]:size-4 ds:[&>svg]:shrink-0\",\n \"ds:data-[active=true]:bg-sidebar-accent ds:data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"ds:text-xs\",\n size === \"md\" && \"ds:text-sm\",\n \"ds:group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n};\n"],"names":["SIDEBAR_COOKIE_NAME","SIDEBAR_COOKIE_MAX_AGE","SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","React","useSidebar","context","SidebarProvider","defaultOpen","openProp","setOpenProp","className","style","children","props","isMobile","useIsMobile","openMobile","setOpenMobile","_open","_setOpen","open","setOpen","value","openState","toggleSidebar","handleKeyDown","event","state","contextValue","jsx","TooltipProvider","cn","Sidebar","side","variant","collapsible","Sheet","jsxs","SheetContent","SheetHeader","SheetTitle","SheetDescription","SidebarTrigger","onClick","Button","PanelLeftIcon","SidebarRail","SidebarInset","mainRef","handleClick","SidebarInput","Input","SidebarHeader","SidebarFooter","SidebarSeparator","Separator","SidebarContent","SidebarGroup","SidebarGroupLabel","asChild","Slot","SidebarGroupAction","SidebarGroupContent","SidebarMenu","SidebarMenuItem","sidebarMenuButtonVariants","cva","SidebarMenuButton","isActive","size","tooltip","Comp","button","Tooltip","TooltipTrigger","TooltipContent","SidebarMenuAction","showOnHover","SidebarMenuBadge","SidebarMenuSkeleton","showIcon","width","Skeleton","SidebarMenuSub","SidebarMenuSubItem","SidebarMenuSubButton"],"mappings":"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"}