@sth87/shadcn-design-system 0.1.0 → 0.1.2

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 (63) hide show
  1. package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
  2. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  3. package/dist/cjs/components/Input/Input.cjs +1 -1
  4. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  5. package/dist/cjs/components/Rate/Rate.cjs +1 -1
  6. package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
  7. package/dist/cjs/components/Sheet/Sheet.cjs +1 -1
  8. package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
  9. package/dist/cjs/components/Slider/Slider.cjs +1 -1
  10. package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
  11. package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
  12. package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
  13. package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
  14. package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
  15. package/dist/cjs/components/Switch/Switch.cjs +1 -1
  16. package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
  17. package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
  18. package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
  19. package/dist/cjs/components/Tabs/classes.cjs +1 -1
  20. package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
  21. package/dist/cjs/components/TimeGridView.cjs +1 -1
  22. package/dist/cjs/components/TimeGridView.cjs.map +1 -1
  23. package/dist/cjs/components/Toast/Toast.cjs +1 -1
  24. package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
  25. package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
  26. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
  27. package/dist/cjs/components/WheelColumn.cjs +1 -1
  28. package/dist/cjs/components/WheelColumn.cjs.map +1 -1
  29. package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
  30. package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
  31. package/dist/cjs/styles/index.css +1 -1
  32. package/dist/esm/components/Checkbox/Checkbox.js +20 -20
  33. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  34. package/dist/esm/components/Input/Input.js +43 -43
  35. package/dist/esm/components/Input/Input.js.map +1 -1
  36. package/dist/esm/components/Rate/Rate.js +15 -15
  37. package/dist/esm/components/Rate/Rate.js.map +1 -1
  38. package/dist/esm/components/Sheet/Sheet.js +25 -25
  39. package/dist/esm/components/Sheet/Sheet.js.map +1 -1
  40. package/dist/esm/components/Slider/Slider.js +139 -139
  41. package/dist/esm/components/Slider/Slider.js.map +1 -1
  42. package/dist/esm/components/Stepper/Stepper.js +52 -52
  43. package/dist/esm/components/Stepper/Stepper.js.map +1 -1
  44. package/dist/esm/components/Stepper/StepperWrapper.js +25 -25
  45. package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
  46. package/dist/esm/components/Switch/Switch.js +19 -19
  47. package/dist/esm/components/Switch/Switch.js.map +1 -1
  48. package/dist/esm/components/Table/data-table-column-header.js +22 -22
  49. package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
  50. package/dist/esm/components/Tabs/classes.js +128 -128
  51. package/dist/esm/components/Tabs/classes.js.map +1 -1
  52. package/dist/esm/components/TimeGridView.js +27 -27
  53. package/dist/esm/components/TimeGridView.js.map +1 -1
  54. package/dist/esm/components/Toast/Toast.js +26 -26
  55. package/dist/esm/components/Toast/Toast.js.map +1 -1
  56. package/dist/esm/components/Tooltip/Tooltip.js +42 -42
  57. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  58. package/dist/esm/components/WheelColumn.js +9 -9
  59. package/dist/esm/components/WheelColumn.js.map +1 -1
  60. package/dist/esm/packages/ui/src/components/calendar.js +73 -73
  61. package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
  62. package/dist/esm/styles/index.css +1 -1
  63. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-column-header.cjs","sources":["../../../../src/components/Table/data-table-column-header.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Column } from \"@tanstack/react-table\";\nimport {\n ChevronDown,\n ChevronsUpDown,\n ChevronUp,\n EyeOff,\n Filter,\n X,\n} from \"lucide-react\";\n\nimport { cn } from \"@dsui/ui\";\nimport DropdownMenu, {\n type DropdownMenuItem,\n} from \"../DropdownMenu/DropdownMenu\";\nimport { DataTableFilterPopover } from \"./TableFilter/data-table-filter-popover\";\nimport { Button } from \"../Button\";\n\ninterface DataTableColumnHeaderProps<TData, TValue> {\n column: Column<TData, TValue>;\n label?: string;\n className?: string;\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n label,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n const displayLabel =\n label ||\n (typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : null);\n\n const hasActions =\n column.getCanSort() || column.getCanHide() || column.getCanFilter();\n\n if (!hasActions) {\n return <div className={cn(className)}>{displayLabel}</div>;\n }\n\n const sortTrigger = (\n <button className=\"ds:-ml-1.5 ds:flex ds:h-8 ds:items-center ds:gap-1.5 ds:rounded-md ds:px-2 ds:py-1.5 ds:hover:bg-accent ds:focus:outline-none ds:focus:ring-1 ds:focus:ring-ring ds:data-[state=open]:bg-accent ds:[&_svg]:size-4 ds:[&_svg]:shrink-0 ds:[&_svg]:text-muted-foreground\">\n {displayLabel}\n {column.getCanSort() &&\n (column.getIsSorted() === \"desc\" ? (\n <ChevronDown />\n ) : column.getIsSorted() === \"asc\" ? (\n <ChevronUp />\n ) : (\n <ChevronsUpDown />\n ))}\n </button>\n );\n\n const filterButton =\n column.getCanFilter() && column.columnDef.meta?.variant ? (\n <DataTableFilterPopover\n column={column}\n trigger={\n <Button\n variant=\"ghost\"\n className={cn(\n \"ds:hover:bg-accent ds:rounded ds:p-1\",\n column.getFilterValue() ? \"ds:text-primary\" : \"\"\n )}\n >\n <Filter className=\"ds:size-4\" />\n </Button>\n }\n />\n ) : null;\n\n const items: DropdownMenuItem[] = [];\n\n if (column.getCanSort()) {\n items.push({\n key: \"asc\",\n type: \"checkbox\",\n label: \"Asc\",\n icon: <ChevronUp />,\n checked: column.getIsSorted() === \"asc\",\n onClick: () => column.toggleSorting(false),\n className:\n \"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\",\n });\n items.push({\n key: \"desc\",\n type: \"checkbox\",\n label: \"Desc\",\n icon: <ChevronDown />,\n checked: column.getIsSorted() === \"desc\",\n onClick: () => column.toggleSorting(true),\n className:\n \"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\",\n });\n if (column.getIsSorted()) {\n items.push({\n key: \"reset\",\n type: \"item\",\n label: \"Reset\",\n icon: <X />,\n onClick: () => column.clearSorting(),\n className: \"pl-2 [&_svg]:text-muted-foreground\",\n });\n }\n }\n\n if (column.getCanHide()) {\n items.push({\n key: \"hide\",\n type: \"checkbox\",\n label: \"Hide\",\n icon: <EyeOff />,\n checked: !column.getIsVisible(),\n onClick: () => column.toggleVisibility(false),\n className:\n \"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\",\n });\n }\n\n return (\n <div className={cn(\"ds:flex ds:items-center ds:gap-1.5\", className)}>\n <DropdownMenu\n trigger={sortTrigger}\n items={items}\n align=\"start\"\n contentClassName=\"ds:w-28\"\n />\n {filterButton}\n </div>\n );\n}\n"],"names":["DataTableColumnHeader","column","label","className","displayLabel","cn","sortTrigger","jsxs","jsx","ChevronDown","ChevronUp","ChevronsUpDown","filterButton","DataTableFilterPopover","Button","Filter","items","X","EyeOff","DropdownMenu"],"mappings":"qrDAyBO,SAASA,EAAqC,CACnD,OAAAC,EACA,MAAAC,EACA,UAAAC,CACF,EAA8C,CAC5C,MAAMC,EACJF,IACC,OAAOD,EAAO,UAAU,QAAW,SAChCA,EAAO,UAAU,OACjB,MAKN,GAAI,EAFFA,EAAO,WAAA,GAAgBA,EAAO,WAAA,GAAgBA,EAAO,aAAA,GAGrD,aAAQ,MAAA,CAAI,UAAWI,EAAAA,GAAGF,CAAS,EAAI,SAAAC,EAAa,EAGtD,MAAME,EACJC,EAAAA,KAAC,SAAA,CAAO,UAAU,yQACf,SAAA,CAAAH,EACAH,EAAO,WAAA,IACLA,EAAO,YAAA,IAAkB,OACxBO,EAAAA,IAACC,EAAAA,YAAA,EAAY,EACXR,EAAO,gBAAkB,YAC1BS,EAAAA,UAAA,CAAA,CAAU,QAEVC,EAAAA,eAAA,EAAe,EAAA,EAEtB,EAGIC,EACJX,EAAO,aAAA,GAAkBA,EAAO,UAAU,MAAM,QAC9CO,EAAAA,IAACK,EAAAA,uBAAA,CACC,OAAAZ,EACA,QACEO,EAAAA,IAACM,EAAAA,QAAA,CACC,QAAQ,QACR,UAAWT,EAAAA,GACT,uCACAJ,EAAO,eAAA,EAAmB,kBAAoB,EAAA,EAGhD,SAAAO,EAAAA,IAACO,EAAAA,OAAA,CAAO,UAAU,WAAA,CAAY,CAAA,CAAA,CAChC,CAAA,EAGF,KAEAC,EAA4B,CAAA,EAElC,OAAIf,EAAO,eACTe,EAAM,KAAK,CACT,IAAK,MACL,KAAM,WACN,MAAO,MACP,WAAON,EAAAA,UAAA,EAAU,EACjB,QAAST,EAAO,YAAA,IAAkB,MAClC,QAAS,IAAMA,EAAO,cAAc,EAAK,EACzC,UACE,8GAAA,CACH,EACDe,EAAM,KAAK,CACT,IAAK,OACL,KAAM,WACN,MAAO,OACP,WAAOP,EAAAA,YAAA,EAAY,EACnB,QAASR,EAAO,YAAA,IAAkB,OAClC,QAAS,IAAMA,EAAO,cAAc,EAAI,EACxC,UACE,8GAAA,CACH,EACGA,EAAO,eACTe,EAAM,KAAK,CACT,IAAK,QACL,KAAM,OACN,MAAO,QACP,WAAOC,EAAAA,EAAA,EAAE,EACT,QAAS,IAAMhB,EAAO,aAAA,EACtB,UAAW,oCAAA,CACZ,GAIDA,EAAO,cACTe,EAAM,KAAK,CACT,IAAK,OACL,KAAM,WACN,MAAO,OACP,WAAOE,EAAAA,OAAA,EAAO,EACd,QAAS,CAACjB,EAAO,aAAA,EACjB,QAAS,IAAMA,EAAO,iBAAiB,EAAK,EAC5C,UACE,8GAAA,CACH,SAIA,MAAA,CAAI,UAAWI,EAAAA,GAAG,qCAAsCF,CAAS,EAChE,SAAA,CAAAK,EAAAA,IAACW,EAAAA,QAAA,CACC,QAASb,EACT,MAAAU,EACA,MAAM,QACN,iBAAiB,SAAA,CAAA,EAElBJ,CAAA,EACH,CAEJ"}
1
+ {"version":3,"file":"data-table-column-header.cjs","sources":["../../../../src/components/Table/data-table-column-header.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Column } from \"@tanstack/react-table\";\nimport {\n ChevronDown,\n ChevronsUpDown,\n ChevronUp,\n EyeOff,\n Filter,\n X,\n} from \"lucide-react\";\n\nimport { cn } from \"@dsui/ui\";\nimport DropdownMenu, {\n type DropdownMenuItem,\n} from \"../DropdownMenu/DropdownMenu\";\nimport { DataTableFilterPopover } from \"./TableFilter/data-table-filter-popover\";\nimport { Button } from \"../Button\";\n\ninterface DataTableColumnHeaderProps<TData, TValue> {\n column: Column<TData, TValue>;\n label?: string;\n className?: string;\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n label,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n const displayLabel =\n label ||\n (typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : null);\n\n const hasActions =\n column.getCanSort() || column.getCanHide() || column.getCanFilter();\n\n if (!hasActions) {\n return <div className={cn(className)}>{displayLabel}</div>;\n }\n\n const sortTrigger = (\n <button className=\"ds:-ml-1.5 ds:flex ds:h-8 ds:items-center ds:gap-1.5 ds:rounded-md ds:px-2 ds:py-1.5 ds:hover:bg-accent ds:focus:outline-none ds:focus:ring-1 ds:focus:ring-ring ds:data-[state=open]:bg-accent ds:[&_svg]:size-4 ds:[&_svg]:shrink-0 ds:[&_svg]:text-muted-foreground\">\n {displayLabel}\n {column.getCanSort() &&\n (column.getIsSorted() === \"desc\" ? (\n <ChevronDown />\n ) : column.getIsSorted() === \"asc\" ? (\n <ChevronUp />\n ) : (\n <ChevronsUpDown />\n ))}\n </button>\n );\n\n const filterButton =\n column.getCanFilter() && column.columnDef.meta?.variant ? (\n <DataTableFilterPopover\n column={column}\n trigger={\n <Button\n variant=\"ghost\"\n className={cn(\n \"ds:hover:bg-accent ds:rounded ds:p-1\",\n column.getFilterValue() ? \"ds:text-primary\" : \"\"\n )}\n >\n <Filter className=\"ds:size-4\" />\n </Button>\n }\n />\n ) : null;\n\n const items: DropdownMenuItem[] = [];\n\n if (column.getCanSort()) {\n items.push({\n key: \"asc\",\n type: \"checkbox\",\n label: \"Asc\",\n icon: <ChevronUp />,\n checked: column.getIsSorted() === \"asc\",\n onClick: () => column.toggleSorting(false),\n className:\n \"ds:relative ds:pr-8 ds:pl-2 ds:[&>span:first-child]:right-2 ds:[&>span:first-child]:left-auto ds:[&_svg]:text-muted-foreground\",\n });\n items.push({\n key: \"desc\",\n type: \"checkbox\",\n label: \"Desc\",\n icon: <ChevronDown />,\n checked: column.getIsSorted() === \"desc\",\n onClick: () => column.toggleSorting(true),\n className:\n \"ds:relative ds:pr-8 ds:pl-2 ds:[&>span:first-child]:right-2 ds:[&>span:first-child]:left-auto ds:[&_svg]:text-muted-foreground\",\n });\n if (column.getIsSorted()) {\n items.push({\n key: \"reset\",\n type: \"item\",\n label: \"Reset\",\n icon: <X />,\n onClick: () => column.clearSorting(),\n className: \"ds:pl-2 ds:[&_svg]:text-muted-foreground\",\n });\n }\n }\n\n if (column.getCanHide()) {\n items.push({\n key: \"hide\",\n type: \"checkbox\",\n label: \"Hide\",\n icon: <EyeOff />,\n checked: !column.getIsVisible(),\n onClick: () => column.toggleVisibility(false),\n className:\n \"ds:relative ds:pr-8 ds:pl-2 ds:[&>span:first-child]:right-2 ds:[&>span:first-child]:left-auto ds:[&_svg]:text-muted-foreground\",\n });\n }\n\n return (\n <div className={cn(\"ds:flex ds:items-center ds:gap-1.5\", className)}>\n <DropdownMenu\n trigger={sortTrigger}\n items={items}\n align=\"start\"\n contentClassName=\"ds:w-28\"\n />\n {filterButton}\n </div>\n );\n}\n"],"names":["DataTableColumnHeader","column","label","className","displayLabel","cn","sortTrigger","jsxs","jsx","ChevronDown","ChevronUp","ChevronsUpDown","filterButton","DataTableFilterPopover","Button","Filter","items","X","EyeOff","DropdownMenu"],"mappings":"qrDAyBO,SAASA,EAAqC,CACnD,OAAAC,EACA,MAAAC,EACA,UAAAC,CACF,EAA8C,CAC5C,MAAMC,EACJF,IACC,OAAOD,EAAO,UAAU,QAAW,SAChCA,EAAO,UAAU,OACjB,MAKN,GAAI,EAFFA,EAAO,WAAA,GAAgBA,EAAO,WAAA,GAAgBA,EAAO,aAAA,GAGrD,aAAQ,MAAA,CAAI,UAAWI,EAAAA,GAAGF,CAAS,EAAI,SAAAC,EAAa,EAGtD,MAAME,EACJC,EAAAA,KAAC,SAAA,CAAO,UAAU,yQACf,SAAA,CAAAH,EACAH,EAAO,WAAA,IACLA,EAAO,YAAA,IAAkB,OACxBO,EAAAA,IAACC,EAAAA,YAAA,EAAY,EACXR,EAAO,gBAAkB,YAC1BS,EAAAA,UAAA,CAAA,CAAU,QAEVC,EAAAA,eAAA,EAAe,EAAA,EAEtB,EAGIC,EACJX,EAAO,aAAA,GAAkBA,EAAO,UAAU,MAAM,QAC9CO,EAAAA,IAACK,EAAAA,uBAAA,CACC,OAAAZ,EACA,QACEO,EAAAA,IAACM,EAAAA,QAAA,CACC,QAAQ,QACR,UAAWT,EAAAA,GACT,uCACAJ,EAAO,eAAA,EAAmB,kBAAoB,EAAA,EAGhD,SAAAO,EAAAA,IAACO,EAAAA,OAAA,CAAO,UAAU,WAAA,CAAY,CAAA,CAAA,CAChC,CAAA,EAGF,KAEAC,EAA4B,CAAA,EAElC,OAAIf,EAAO,eACTe,EAAM,KAAK,CACT,IAAK,MACL,KAAM,WACN,MAAO,MACP,WAAON,EAAAA,UAAA,EAAU,EACjB,QAAST,EAAO,YAAA,IAAkB,MAClC,QAAS,IAAMA,EAAO,cAAc,EAAK,EACzC,UACE,gIAAA,CACH,EACDe,EAAM,KAAK,CACT,IAAK,OACL,KAAM,WACN,MAAO,OACP,WAAOP,EAAAA,YAAA,EAAY,EACnB,QAASR,EAAO,YAAA,IAAkB,OAClC,QAAS,IAAMA,EAAO,cAAc,EAAI,EACxC,UACE,gIAAA,CACH,EACGA,EAAO,eACTe,EAAM,KAAK,CACT,IAAK,QACL,KAAM,OACN,MAAO,QACP,WAAOC,EAAAA,EAAA,EAAE,EACT,QAAS,IAAMhB,EAAO,aAAA,EACtB,UAAW,0CAAA,CACZ,GAIDA,EAAO,cACTe,EAAM,KAAK,CACT,IAAK,OACL,KAAM,WACN,MAAO,OACP,WAAOE,EAAAA,OAAA,EAAO,EACd,QAAS,CAACjB,EAAO,aAAA,EACjB,QAAS,IAAMA,EAAO,iBAAiB,EAAK,EAC5C,UACE,gIAAA,CACH,SAIA,MAAA,CAAI,UAAWI,EAAAA,GAAG,qCAAsCF,CAAS,EAChE,SAAA,CAAAK,EAAAA,IAACW,EAAAA,QAAA,CACC,QAASb,EACT,MAAAU,EACA,MAAM,QACN,iBAAiB,SAAA,CAAA,EAElBJ,CAAA,EACH,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("react/jsx-runtime");require("@radix-ui/react-label");const s=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("react");require("lucide-react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const o={sm:{horizontal:"ds:text-xs ds:h-7 ds:[&>button]:px-2",vertical:"ds:text-xs ds:[&>button]:py-0.5"},md:{horizontal:"ds:text-sm ds:h-9 ds:[&>button]:px-3",vertical:"ds:text-sm ds:[&>button]:py-1"},lg:{horizontal:"ds:text-base ds:h-11 ds:[&>button]:px-4",vertical:"ds:text-base ds:[&>button]:py-1.5"}},c={start:{horizontal:"ds:justify-start",vertical:"ds:items-start"},center:{horizontal:"ds:justify-center",vertical:"ds:items-center"},end:{horizontal:"ds:justify-end",vertical:"ds:items-end"}},i={top:{root:"ds:flex ds:flex-col",list:"ds:flex-row"},bottom:{root:"ds:flex ds:flex-col-reverse",list:"ds:flex-row"},left:{root:"ds:flex ds:flex-row",list:"ds:flex-col ds:h-fit"},right:{root:"ds:flex ds:flex-row-reverse",list:"ds:flex-col ds:h-fit"}},n=(r,t)=>{const e={primary:{bg:"data-[state=active]:bg-primary dark:data-[state=active]:bg-primary data-[state=active]:text-primary-foreground dark:data-[state=active]:text-primary-foreground",text:"data-[state=active]:text-primary dark:data-[state=active]:text-primary",border:"data-[state=active]:border-primary dark:data-[state=active]:border-primary"},secondary:{bg:"data-[state=active]:bg-secondary dark:data-[state=active]:bg-secondary data-[state=active]:text-secondary-foreground dark:data-[state=active]:text-secondary-foreground",text:"data-[state=active]:text-secondary dark:data-[state=active]:text-secondary",border:"data-[state=active]:border-secondary dark:data-[state=active]:border-secondary"},muted:{bg:"data-[state=active]:bg-muted dark:data-[state=active]:bg-muted data-[state=active]:text-muted-foreground dark:data-[state=active]:text-muted-foreground",text:"data-[state=active]:text-muted-foreground dark:data-[state=active]:text-muted-foreground",border:"data-[state=active]:border-border dark:data-[state=active]:border-border"},accent:{bg:"data-[state=active]:bg-accent dark:data-[state=active]:bg-accent data-[state=active]:text-accent-foreground dark:data-[state=active]:text-accent-foreground",text:"data-[state=active]:text-accent-foreground dark:data-[state=active]:text-accent-foreground",border:"data-[state=active]:border-accent dark:data-[state=active]:border-accent"},destructive:{bg:"data-[state=active]:bg-destructive dark:data-[state=active]:bg-destructive data-[state=active]:text-destructive-foreground dark:data-[state=active]:text-destructive-foreground",text:"data-[state=active]:text-destructive dark:data-[state=active]:text-destructive",border:"data-[state=active]:border-destructive dark:data-[state=active]:border-destructive"},success:{bg:"data-[state=active]:bg-success dark:data-[state=active]:bg-success data-[state=active]:text-success-foreground dark:data-[state=active]:text-success-foreground",text:"data-[state=active]:text-success dark:data-[state=active]:text-success",border:"data-[state=active]:border-success dark:data-[state=active]:border-success"},warning:{bg:"data-[state=active]:bg-warning dark:data-[state=active]:bg-warning data-[state=active]:text-warning-foreground dark:data-[state=active]:text-warning-foreground",text:"data-[state=active]:text-warning dark:data-[state=active]:text-warning",border:"data-[state=active]:border-warning dark:data-[state=active]:border-warning"}}[t];switch(r){case"bordered":case"pills":return`${e.bg} dark:data-[state=active]:border-transparent`;case"pill-stroke":return"data-[state=active]:bg-transparent dark:data-[state=active]:bg-transparent";case"text":return e.text;case"outline":return e.border;case"underlined":return s.cn(e.border,e.text);case"enclosed":return s.cn(e.border,e.text);case"enclosed-fill":return s.cn(e.border,e.text);default:return""}},b=(r,t,a)=>{if(r==="underlined")return{top:"border-b",bottom:"border-t",left:"border-r",right:"border-l"}[a];if(r==="enclosed"){const e={top:"border-b",bottom:"border-t",left:"border-r",right:"border-l"},d={top:{primary:"border-b-primary",secondary:"border-b-secondary",muted:"border-b-border",accent:"border-b-accent",destructive:"border-b-destructive",success:"border-b-success",warning:"border-b-warning"},bottom:{primary:"border-t-primary",secondary:"border-t-secondary",muted:"border-t-border",accent:"border-t-accent",destructive:"border-t-destructive",success:"border-t-success",warning:"border-t-warning"},left:{primary:"border-r-primary",secondary:"border-r-secondary",muted:"border-r-border",accent:"border-r-accent",destructive:"border-r-destructive",success:"border-r-success",warning:"border-r-warning"},right:{primary:"border-l-primary",secondary:"border-l-secondary",muted:"border-l-border",accent:"border-l-accent",destructive:"border-l-destructive",success:"border-l-success",warning:"border-l-warning"}};return`${e[a]} ${d[a][t]}`}if(r==="enclosed-fill"){const e={top:"border-b",bottom:"border-t",left:"border-r",right:"border-l"},d={top:{primary:"border-b-primary",secondary:"border-b-secondary",muted:"border-b-border",accent:"border-b-accent",destructive:"border-b-destructive",success:"border-b-success",warning:"border-b-warning"},bottom:{primary:"border-t-primary",secondary:"border-t-secondary",muted:"border-t-border",accent:"border-t-accent",destructive:"border-t-destructive",success:"border-t-success",warning:"border-t-warning"},left:{primary:"border-r-primary",secondary:"border-r-secondary",muted:"border-r-border",accent:"border-r-accent",destructive:"border-r-destructive",success:"border-r-success",warning:"border-r-warning"},right:{primary:"border-l-primary",secondary:"border-l-secondary",muted:"border-l-border",accent:"border-l-accent",destructive:"border-l-destructive",success:"border-l-success",warning:"border-l-warning"}};return`${e[a]} ${d[a][t]}`}return""},u=r=>{const t="ds:bg-background ds:dark:bg-background ds:rounded-none ds:border-0 ds:border-transparent ds:data-[state=active]:shadow-none";return{top:`${t} border-b-2 h-full`,bottom:`${t} border-t-2 h-full`,left:`${t} border-r-2 w-full`,right:`${t} border-l-2 w-full`}[r]},l=r=>{const t="ds:bg-background ds:dark:bg-background ds:border ds:border-transparent ds:data-[state=active]:shadow-none ds:rounded-none";return{top:`${t} rounded-t-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-b-0 data-[state=active]:border-b-background dark:data-[state=active]:border-b-background h-full data-[state=active]:-mb-0.5 data-[state=active]:translate-y-[0px]`,bottom:`${t} rounded-b-md data-[state=active]:border-b data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-t-0 data-[state=active]:border-t-background dark:data-[state=active]:border-t-background h-full data-[state=active]:-mt-0.5 data-[state=active]:translate-y-[0px]`,left:`${t} rounded-l-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-b data-[state=active]:border-r-0 data-[state=active]:border-r-background dark:data-[state=active]:border-r-background w-full data-[state=active]:-mr-0.5 data-[state=active]:translate-x-[1px]`,right:`${t} rounded-r-md data-[state=active]:border-t data-[state=active]:border-r data-[state=active]:border-b data-[state=active]:border-l-0 data-[state=active]:border-l-background dark:data-[state=active]:border-l-background w-full data-[state=active]:-ml-0.5 data-[state=active]:translate-x-[1px]`}[r]},g=r=>{const t="ds:bg-muted ds:dark:bg-muted ds:border ds:border-transparent ds:data-[state=active]:bg-background ds:dark:data-[state=active]:bg-background ds:data-[state=active]:shadow-none ds:rounded-none";return{top:`${t} rounded-t-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-b-0 data-[state=active]:border-b-background dark:data-[state=active]:border-b-background h-full data-[state=active]:-mb-0.5 data-[state=active]:translate-y-[0px]`,bottom:`${t} rounded-b-md data-[state=active]:border-b data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-t-0 data-[state=active]:border-t-background dark:data-[state=active]:border-t-background h-full data-[state=active]:-mt-0.5 data-[state=active]:translate-y-[0px]`,left:`${t} rounded-l-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-b data-[state=active]:border-r-0 data-[state=active]:border-r-background dark:data-[state=active]:border-r-background w-full data-[state=active]:-mr-0.5 data-[state=active]:translate-x-[1px]`,right:`${t} rounded-r-md data-[state=active]:border-t data-[state=active]:border-r data-[state=active]:border-b data-[state=active]:border-l-0 data-[state=active]:border-l-background dark:data-[state=active]:border-l-background w-full data-[state=active]:-ml-0.5 data-[state=active]:translate-x-[1px]`}[r]},v={solid:{list:{horizontal:"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]",vertical:"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]"},trigger:{horizontal:"",vertical:""}},bordered:{list:{horizontal:"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg",vertical:"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg"},trigger:{horizontal:"",vertical:""}},pills:{list:{horizontal:"ds:bg-transparent ds:p-0 ds:gap-1",vertical:"ds:bg-transparent ds:p-0 ds:gap-1"},trigger:{horizontal:"",vertical:""}},"pill-stroke":{list:{horizontal:"ds:bg-transparent ds:p-0 ds:gap-1",vertical:"ds:bg-transparent ds:p-0 ds:gap-1"},trigger:{horizontal:"ds:border ds:border-border ds:rounded-full ds:bg-transparent",vertical:"ds:border ds:border-border ds:rounded-full ds:bg-transparent"}},text:{list:{horizontal:"ds:bg-transparent ds:p-0 ds:gap-1",vertical:"ds:bg-transparent ds:p-0 ds:gap-1"},trigger:{horizontal:"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none",vertical:"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none"}},outline:{list:{horizontal:"ds:bg-transparent ds:p-0 ds:gap-1",vertical:"ds:bg-transparent ds:p-0 ds:gap-1"},trigger:{horizontal:"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none",vertical:"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none"}},underlined:{list:{horizontal:"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0",vertical:"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0"},trigger:{horizontal:"",vertical:""}},enclosed:{list:{horizontal:"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0",vertical:"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0"},trigger:{horizontal:"",vertical:""}},"enclosed-fill":{list:{horizontal:"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0 ds:gap-1",vertical:"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0 ds:gap-1"},trigger:{horizontal:"",vertical:""}}};exports.alignmentClasses=c;exports.getColorClasses=n;exports.getEnclosedFillTriggerClasses=g;exports.getEnclosedTriggerClasses=l;exports.getListBorderClasses=b;exports.getUnderlinedTriggerClasses=u;exports.positionClasses=i;exports.sizeClasses=o;exports.variantClasses=v;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("react/jsx-runtime");require("@radix-ui/react-label");const s=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("react");require("lucide-react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const o={sm:{horizontal:"ds:text-xs ds:h-7 ds:[&>button]:px-2",vertical:"ds:text-xs ds:[&>button]:py-0.5"},md:{horizontal:"ds:text-sm ds:h-9 ds:[&>button]:px-3",vertical:"ds:text-sm ds:[&>button]:py-1"},lg:{horizontal:"ds:text-base ds:h-11 ds:[&>button]:px-4",vertical:"ds:text-base ds:[&>button]:py-1.5"}},c={start:{horizontal:"ds:justify-start",vertical:"ds:items-start"},center:{horizontal:"ds:justify-center",vertical:"ds:items-center"},end:{horizontal:"ds:justify-end",vertical:"ds:items-end"}},i={top:{root:"ds:flex ds:flex-col",list:"ds:flex-row"},bottom:{root:"ds:flex ds:flex-col-reverse",list:"ds:flex-row"},left:{root:"ds:flex ds:flex-row",list:"ds:flex-col ds:h-fit"},right:{root:"ds:flex ds:flex-row-reverse",list:"ds:flex-col ds:h-fit"}},n=(r,t)=>{const e={primary:{bg:"ds:data-[state=active]:bg-primary ds:dark:data-[state=active]:bg-primary ds:data-[state=active]:text-primary-foreground ds:dark:data-[state=active]:text-primary-foreground",text:"ds:data-[state=active]:text-primary ds:dark:data-[state=active]:text-primary",border:"ds:data-[state=active]:border-primary ds:dark:data-[state=active]:border-primary"},secondary:{bg:"ds:data-[state=active]:bg-secondary ds:dark:data-[state=active]:bg-secondary ds:data-[state=active]:text-secondary-foreground ds:dark:data-[state=active]:text-secondary-foreground",text:"ds:data-[state=active]:text-secondary ds:dark:data-[state=active]:text-secondary",border:"ds:data-[state=active]:border-secondary ds:dark:data-[state=active]:border-secondary"},muted:{bg:"ds:data-[state=active]:bg-muted ds:dark:data-[state=active]:bg-muted ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground",text:"ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground",border:"ds:data-[state=active]:border-border ds:dark:data-[state=active]:border-border"},accent:{bg:"ds:data-[state=active]:bg-accent ds:dark:data-[state=active]:bg-accent ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground",text:"ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground",border:"ds:data-[state=active]:border-accent ds:dark:data-[state=active]:border-accent"},destructive:{bg:"ds:data-[state=active]:bg-destructive ds:dark:data-[state=active]:bg-destructive ds:data-[state=active]:text-destructive-foreground ds:dark:data-[state=active]:text-destructive-foreground",text:"ds:data-[state=active]:text-destructive ds:dark:data-[state=active]:text-destructive",border:"ds:data-[state=active]:border-destructive ds:dark:data-[state=active]:border-destructive"},success:{bg:"ds:data-[state=active]:bg-success ds:dark:data-[state=active]:bg-success ds:data-[state=active]:text-success-foreground ds:dark:data-[state=active]:text-success-foreground",text:"ds:data-[state=active]:text-success ds:dark:data-[state=active]:text-success",border:"ds:data-[state=active]:border-success ds:dark:data-[state=active]:border-success"},warning:{bg:"ds:data-[state=active]:bg-warning ds:dark:data-[state=active]:bg-warning ds:data-[state=active]:text-warning-foreground ds:dark:data-[state=active]:text-warning-foreground",text:"ds:data-[state=active]:text-warning ds:dark:data-[state=active]:text-warning",border:"ds:data-[state=active]:border-warning ds:dark:data-[state=active]:border-warning"}}[t];switch(r){case"bordered":case"pills":return`${e.bg} ds:dark:data-[state=active]:border-transparent`;case"pill-stroke":return"ds:data-[state=active]:bg-transparent ds:dark:data-[state=active]:bg-transparent";case"text":return e.text;case"outline":return e.border;case"underlined":return s.cn(e.border,e.text);case"enclosed":return s.cn(e.border,e.text);case"enclosed-fill":return s.cn(e.border,e.text);default:return""}},b=(r,t,d)=>{if(r==="underlined")return{top:"ds:border-b",bottom:"ds:border-t",left:"ds:border-r",right:"ds:border-l"}[d];if(r==="enclosed"){const e={top:"ds:border-b",bottom:"ds:border-t",left:"ds:border-r",right:"ds:border-l"},a={top:{primary:"ds:border-b-primary",secondary:"ds:border-b-secondary",muted:"ds:border-b-border",accent:"ds:border-b-accent",destructive:"ds:border-b-destructive",success:"ds:border-b-success",warning:"ds:border-b-warning"},bottom:{primary:"ds:border-t-primary",secondary:"ds:border-t-secondary",muted:"ds:border-t-border",accent:"ds:border-t-accent",destructive:"ds:border-t-destructive",success:"ds:border-t-success",warning:"ds:border-t-warning"},left:{primary:"ds:border-r-primary",secondary:"ds:border-r-secondary",muted:"ds:border-r-border",accent:"ds:border-r-accent",destructive:"ds:border-r-destructive",success:"ds:border-r-success",warning:"ds:border-r-warning"},right:{primary:"ds:border-l-primary",secondary:"ds:border-l-secondary",muted:"ds:border-l-border",accent:"ds:border-l-accent",destructive:"ds:border-l-destructive",success:"ds:border-l-success",warning:"ds:border-l-warning"}};return`${e[d]} ${a[d][t]}`}if(r==="enclosed-fill"){const e={top:"ds:border-b",bottom:"ds:border-t",left:"ds:border-r",right:"ds:border-l"},a={top:{primary:"ds:border-b-primary",secondary:"ds:border-b-secondary",muted:"ds:border-b-border",accent:"ds:border-b-accent",destructive:"ds:border-b-destructive",success:"ds:border-b-success",warning:"ds:border-b-warning"},bottom:{primary:"ds:border-t-primary",secondary:"ds:border-t-secondary",muted:"ds:border-t-border",accent:"ds:border-t-accent",destructive:"ds:border-t-destructive",success:"ds:border-t-success",warning:"ds:border-t-warning"},left:{primary:"ds:border-r-primary",secondary:"ds:border-r-secondary",muted:"ds:border-r-border",accent:"ds:border-r-accent",destructive:"ds:border-r-destructive",success:"ds:border-r-success",warning:"ds:border-r-warning"},right:{primary:"ds:border-l-primary",secondary:"ds:border-l-secondary",muted:"ds:border-l-border",accent:"ds:border-l-accent",destructive:"ds:border-l-destructive",success:"ds:border-l-success",warning:"ds:border-l-warning"}};return`${e[d]} ${a[d][t]}`}return""},u=r=>{const t="ds:bg-background ds:dark:bg-background ds:rounded-none ds:border-0 ds:border-transparent ds:data-[state=active]:shadow-none";return{top:`${t} ds:border-b-2 ds:h-full`,bottom:`${t} ds:border-t-2 ds:h-full`,left:`${t} ds:border-r-2 ds:w-full`,right:`${t} ds:border-l-2 ds:w-full`}[r]},l=r=>{const t="ds:bg-background ds:dark:bg-background ds:border ds:border-transparent ds:data-[state=active]:shadow-none ds:rounded-none";return{top:`${t} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,bottom:`${t} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,left:`${t} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,right:`${t} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`}[r]},g=r=>{const t="ds:bg-muted ds:dark:bg-muted ds:border ds:border-transparent ds:data-[state=active]:bg-background ds:dark:data-[state=active]:bg-background ds:data-[state=active]:shadow-none ds:rounded-none";return{top:`${t} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,bottom:`${t} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,left:`${t} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,right:`${t} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`}[r]},v={solid:{list:{horizontal:"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]",vertical:"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]"},trigger:{horizontal:"",vertical:""}},bordered:{list:{horizontal:"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg",vertical:"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg"},trigger:{horizontal:"",vertical:""}},pills:{list:{horizontal:"ds:bg-transparent ds:p-0 ds:gap-1",vertical:"ds:bg-transparent ds:p-0 ds:gap-1"},trigger:{horizontal:"",vertical:""}},"pill-stroke":{list:{horizontal:"ds:bg-transparent ds:p-0 ds:gap-1",vertical:"ds:bg-transparent ds:p-0 ds:gap-1"},trigger:{horizontal:"ds:border ds:border-border ds:rounded-full ds:bg-transparent",vertical:"ds:border ds:border-border ds:rounded-full ds:bg-transparent"}},text:{list:{horizontal:"ds:bg-transparent ds:p-0 ds:gap-1",vertical:"ds:bg-transparent ds:p-0 ds:gap-1"},trigger:{horizontal:"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none",vertical:"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none"}},outline:{list:{horizontal:"ds:bg-transparent ds:p-0 ds:gap-1",vertical:"ds:bg-transparent ds:p-0 ds:gap-1"},trigger:{horizontal:"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none",vertical:"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none"}},underlined:{list:{horizontal:"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0",vertical:"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0"},trigger:{horizontal:"",vertical:""}},enclosed:{list:{horizontal:"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0",vertical:"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0"},trigger:{horizontal:"",vertical:""}},"enclosed-fill":{list:{horizontal:"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0 ds:gap-1",vertical:"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0 ds:gap-1"},trigger:{horizontal:"",vertical:""}}};exports.alignmentClasses=c;exports.getColorClasses=n;exports.getEnclosedFillTriggerClasses=g;exports.getEnclosedTriggerClasses=l;exports.getListBorderClasses=b;exports.getUnderlinedTriggerClasses=u;exports.positionClasses=i;exports.sizeClasses=o;exports.variantClasses=v;
2
2
  //# sourceMappingURL=classes.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"classes.cjs","sources":["../../../../src/components/Tabs/classes.ts"],"sourcesContent":["import { cn } from \"@dsui/ui/index\";\nimport type {\n TabAlignment,\n TabColor,\n TabPosition,\n TabSize,\n TabVariant,\n} from \"./types\";\n\nexport const sizeClasses: Record<\n TabSize,\n { horizontal: string; vertical: string }\n> = {\n sm: {\n horizontal: \"ds:text-xs ds:h-7 ds:[&>button]:px-2\",\n vertical: \"ds:text-xs ds:[&>button]:py-0.5\",\n },\n md: {\n horizontal: \"ds:text-sm ds:h-9 ds:[&>button]:px-3\",\n vertical: \"ds:text-sm ds:[&>button]:py-1\",\n },\n lg: {\n horizontal: \"ds:text-base ds:h-11 ds:[&>button]:px-4\",\n vertical: \"ds:text-base ds:[&>button]:py-1.5\",\n },\n};\n\nexport const alignmentClasses: Record<\n TabAlignment,\n { horizontal: string; vertical: string }\n> = {\n start: {\n horizontal: \"ds:justify-start\",\n vertical: \"ds:items-start\",\n },\n center: {\n horizontal: \"ds:justify-center\",\n vertical: \"ds:items-center\",\n },\n end: {\n horizontal: \"ds:justify-end\",\n vertical: \"ds:items-end\",\n },\n};\n\nexport const positionClasses: Record<\n TabPosition,\n { root: string; list: string }\n> = {\n top: {\n root: \"ds:flex ds:flex-col\",\n list: \"ds:flex-row\",\n },\n bottom: {\n root: \"ds:flex ds:flex-col-reverse\",\n list: \"ds:flex-row\",\n },\n left: {\n root: \"ds:flex ds:flex-row\",\n list: \"ds:flex-col ds:h-fit\",\n },\n right: {\n root: \"ds:flex ds:flex-row-reverse\",\n list: \"ds:flex-col ds:h-fit\",\n },\n};\n\n// Color classes for backgrounds, text, and borders\nexport const getColorClasses = (\n variant: TabVariant,\n color: TabColor\n): string => {\n // Helper to generate color-specific classes based on variant\n const colorMap: Record<\n TabColor,\n { bg: string; text: string; border: string }\n > = {\n primary: {\n bg: \"data-[state=active]:bg-primary dark:data-[state=active]:bg-primary data-[state=active]:text-primary-foreground dark:data-[state=active]:text-primary-foreground\",\n text: \"data-[state=active]:text-primary dark:data-[state=active]:text-primary\",\n border:\n \"data-[state=active]:border-primary dark:data-[state=active]:border-primary\",\n },\n secondary: {\n bg: \"data-[state=active]:bg-secondary dark:data-[state=active]:bg-secondary data-[state=active]:text-secondary-foreground dark:data-[state=active]:text-secondary-foreground\",\n text: \"data-[state=active]:text-secondary dark:data-[state=active]:text-secondary\",\n border:\n \"data-[state=active]:border-secondary dark:data-[state=active]:border-secondary\",\n },\n muted: {\n bg: \"data-[state=active]:bg-muted dark:data-[state=active]:bg-muted data-[state=active]:text-muted-foreground dark:data-[state=active]:text-muted-foreground\",\n text: \"data-[state=active]:text-muted-foreground dark:data-[state=active]:text-muted-foreground\",\n border:\n \"data-[state=active]:border-border dark:data-[state=active]:border-border\",\n },\n accent: {\n bg: \"data-[state=active]:bg-accent dark:data-[state=active]:bg-accent data-[state=active]:text-accent-foreground dark:data-[state=active]:text-accent-foreground\",\n text: \"data-[state=active]:text-accent-foreground dark:data-[state=active]:text-accent-foreground\",\n border:\n \"data-[state=active]:border-accent dark:data-[state=active]:border-accent\",\n },\n destructive: {\n bg: \"data-[state=active]:bg-destructive dark:data-[state=active]:bg-destructive data-[state=active]:text-destructive-foreground dark:data-[state=active]:text-destructive-foreground\",\n text: \"data-[state=active]:text-destructive dark:data-[state=active]:text-destructive\",\n border:\n \"data-[state=active]:border-destructive dark:data-[state=active]:border-destructive\",\n },\n success: {\n bg: \"data-[state=active]:bg-success dark:data-[state=active]:bg-success data-[state=active]:text-success-foreground dark:data-[state=active]:text-success-foreground\",\n text: \"data-[state=active]:text-success dark:data-[state=active]:text-success\",\n border:\n \"data-[state=active]:border-success dark:data-[state=active]:border-success\",\n },\n warning: {\n bg: \"data-[state=active]:bg-warning dark:data-[state=active]:bg-warning data-[state=active]:text-warning-foreground dark:data-[state=active]:text-warning-foreground\",\n text: \"data-[state=active]:text-warning dark:data-[state=active]:text-warning\",\n border:\n \"data-[state=active]:border-warning dark:data-[state=active]:border-warning\",\n },\n };\n\n const colors = colorMap[color];\n\n switch (variant) {\n case \"bordered\":\n case \"pills\":\n // Background color on active state\n return `${colors.bg} dark:data-[state=active]:border-transparent`;\n case \"pill-stroke\":\n // Border color on active state, no background\n return `data-[state=active]:bg-transparent dark:data-[state=active]:bg-transparent`;\n case \"text\":\n // Text color only on active state\n return colors.text;\n case \"outline\":\n // Border color on active state\n return colors.border;\n case \"underlined\":\n // Bottom/side border color on active state\n return cn(colors.border, colors.text);\n case \"enclosed\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n case \"enclosed-fill\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n default:\n return \"\";\n }\n};\n\n// Get TabsList border classes based on position\nexport const getListBorderClasses = (\n variant: TabVariant,\n color: TabColor,\n tabPosition: TabPosition\n): string => {\n if (variant === \"underlined\") {\n // Underlined variant: border on the opposite side from where tabs connect\n const borderMap: Record<TabPosition, string> = {\n top: \"border-b\",\n bottom: \"border-t\",\n left: \"border-r\",\n right: \"border-l\",\n };\n return borderMap[tabPosition];\n }\n\n if (variant === \"enclosed\") {\n // Enclosed variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"border-b\",\n bottom: \"border-t\",\n left: \"border-r\",\n right: \"border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"border-b-primary\",\n secondary: \"border-b-secondary\",\n muted: \"border-b-border\",\n accent: \"border-b-accent\",\n destructive: \"border-b-destructive\",\n success: \"border-b-success\",\n warning: \"border-b-warning\",\n },\n bottom: {\n primary: \"border-t-primary\",\n secondary: \"border-t-secondary\",\n muted: \"border-t-border\",\n accent: \"border-t-accent\",\n destructive: \"border-t-destructive\",\n success: \"border-t-success\",\n warning: \"border-t-warning\",\n },\n left: {\n primary: \"border-r-primary\",\n secondary: \"border-r-secondary\",\n muted: \"border-r-border\",\n accent: \"border-r-accent\",\n destructive: \"border-r-destructive\",\n success: \"border-r-success\",\n warning: \"border-r-warning\",\n },\n right: {\n primary: \"border-l-primary\",\n secondary: \"border-l-secondary\",\n muted: \"border-l-border\",\n accent: \"border-l-accent\",\n destructive: \"border-l-destructive\",\n success: \"border-l-success\",\n warning: \"border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n if (variant === \"enclosed-fill\") {\n // Enclosed-fill variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"border-b\",\n bottom: \"border-t\",\n left: \"border-r\",\n right: \"border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"border-b-primary\",\n secondary: \"border-b-secondary\",\n muted: \"border-b-border\",\n accent: \"border-b-accent\",\n destructive: \"border-b-destructive\",\n success: \"border-b-success\",\n warning: \"border-b-warning\",\n },\n bottom: {\n primary: \"border-t-primary\",\n secondary: \"border-t-secondary\",\n muted: \"border-t-border\",\n accent: \"border-t-accent\",\n destructive: \"border-t-destructive\",\n success: \"border-t-success\",\n warning: \"border-t-warning\",\n },\n left: {\n primary: \"border-r-primary\",\n secondary: \"border-r-secondary\",\n muted: \"border-r-border\",\n accent: \"border-r-accent\",\n destructive: \"border-r-destructive\",\n success: \"border-r-success\",\n warning: \"border-r-warning\",\n },\n right: {\n primary: \"border-l-primary\",\n secondary: \"border-l-secondary\",\n muted: \"border-l-border\",\n accent: \"border-l-accent\",\n destructive: \"border-l-destructive\",\n success: \"border-l-success\",\n warning: \"border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n return \"\";\n};\n\n// Get trigger border classes for underlined variant based on position\nexport const getUnderlinedTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:border-0 ds:border-transparent ds:data-[state=active]:shadow-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} border-b-2 h-full`,\n bottom: `${baseClasses} border-t-2 h-full`,\n left: `${baseClasses} border-r-2 w-full`,\n right: `${baseClasses} border-l-2 w-full`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed variant based on position\nexport const getEnclosedTriggerClasses = (tabPosition: TabPosition): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:border ds:border-transparent ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} rounded-t-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-b-0 data-[state=active]:border-b-background dark:data-[state=active]:border-b-background h-full data-[state=active]:-mb-0.5 data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} rounded-b-md data-[state=active]:border-b data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-t-0 data-[state=active]:border-t-background dark:data-[state=active]:border-t-background h-full data-[state=active]:-mt-0.5 data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} rounded-l-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-b data-[state=active]:border-r-0 data-[state=active]:border-r-background dark:data-[state=active]:border-r-background w-full data-[state=active]:-mr-0.5 data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} rounded-r-md data-[state=active]:border-t data-[state=active]:border-r data-[state=active]:border-b data-[state=active]:border-l-0 data-[state=active]:border-l-background dark:data-[state=active]:border-l-background w-full data-[state=active]:-ml-0.5 data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed-fill variant based on position\nexport const getEnclosedFillTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-muted ds:dark:bg-muted ds:border ds:border-transparent ds:data-[state=active]:bg-background ds:dark:data-[state=active]:bg-background ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} rounded-t-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-b-0 data-[state=active]:border-b-background dark:data-[state=active]:border-b-background h-full data-[state=active]:-mb-0.5 data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} rounded-b-md data-[state=active]:border-b data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-t-0 data-[state=active]:border-t-background dark:data-[state=active]:border-t-background h-full data-[state=active]:-mt-0.5 data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} rounded-l-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-b data-[state=active]:border-r-0 data-[state=active]:border-r-background dark:data-[state=active]:border-r-background w-full data-[state=active]:-mr-0.5 data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} rounded-r-md data-[state=active]:border-t data-[state=active]:border-r data-[state=active]:border-b data-[state=active]:border-l-0 data-[state=active]:border-l-background dark:data-[state=active]:border-l-background w-full data-[state=active]:-ml-0.5 data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\nexport const variantClasses: Record<\n TabVariant,\n {\n list: { horizontal: string; vertical: string };\n trigger: { horizontal: string; vertical: string };\n }\n> = {\n // Solid: Default style (muted background, active has white background)\n solid: {\n list: {\n horizontal: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n vertical: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Bordered: With border on group and colored active background\n bordered: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pills: No border/background on group, colored background on active button\n pills: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pill-stroke: Pill-style with stroke border, stronger border radius, no background on active\n \"pill-stroke\": {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n vertical: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n },\n },\n\n // Text: No border/background on group, colored text on active button\n text: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Outline: No border/background on group, colored border (stroke) on active button\n outline: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Underlined: Bottom border on group, bottom border on active tab\n underlined: {\n list: {\n horizontal: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed: Border on active tab except bottom border (tab style)\n enclosed: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed-fill: Border on active tab except bottom border with background on inactive tabs\n \"enclosed-fill\": {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0 ds:gap-1\",\n vertical:\n \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n};\n"],"names":["sizeClasses","alignmentClasses","positionClasses","getColorClasses","variant","color","colors","cn","getListBorderClasses","tabPosition","borderBaseMap","colorBorderMap","getUnderlinedTriggerClasses","baseClasses","getEnclosedTriggerClasses","getEnclosedFillTriggerClasses","variantClasses"],"mappings":"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"}
1
+ {"version":3,"file":"classes.cjs","sources":["../../../../src/components/Tabs/classes.ts"],"sourcesContent":["import { cn } from \"@dsui/ui/index\";\nimport type {\n TabAlignment,\n TabColor,\n TabPosition,\n TabSize,\n TabVariant,\n} from \"./types\";\n\nexport const sizeClasses: Record<\n TabSize,\n { horizontal: string; vertical: string }\n> = {\n sm: {\n horizontal: \"ds:text-xs ds:h-7 ds:[&>button]:px-2\",\n vertical: \"ds:text-xs ds:[&>button]:py-0.5\",\n },\n md: {\n horizontal: \"ds:text-sm ds:h-9 ds:[&>button]:px-3\",\n vertical: \"ds:text-sm ds:[&>button]:py-1\",\n },\n lg: {\n horizontal: \"ds:text-base ds:h-11 ds:[&>button]:px-4\",\n vertical: \"ds:text-base ds:[&>button]:py-1.5\",\n },\n};\n\nexport const alignmentClasses: Record<\n TabAlignment,\n { horizontal: string; vertical: string }\n> = {\n start: {\n horizontal: \"ds:justify-start\",\n vertical: \"ds:items-start\",\n },\n center: {\n horizontal: \"ds:justify-center\",\n vertical: \"ds:items-center\",\n },\n end: {\n horizontal: \"ds:justify-end\",\n vertical: \"ds:items-end\",\n },\n};\n\nexport const positionClasses: Record<\n TabPosition,\n { root: string; list: string }\n> = {\n top: {\n root: \"ds:flex ds:flex-col\",\n list: \"ds:flex-row\",\n },\n bottom: {\n root: \"ds:flex ds:flex-col-reverse\",\n list: \"ds:flex-row\",\n },\n left: {\n root: \"ds:flex ds:flex-row\",\n list: \"ds:flex-col ds:h-fit\",\n },\n right: {\n root: \"ds:flex ds:flex-row-reverse\",\n list: \"ds:flex-col ds:h-fit\",\n },\n};\n\n// Color classes for backgrounds, text, and borders\nexport const getColorClasses = (\n variant: TabVariant,\n color: TabColor\n): string => {\n // Helper to generate color-specific classes based on variant\n const colorMap: Record<\n TabColor,\n { bg: string; text: string; border: string }\n > = {\n primary: {\n bg: \"ds:data-[state=active]:bg-primary ds:dark:data-[state=active]:bg-primary ds:data-[state=active]:text-primary-foreground ds:dark:data-[state=active]:text-primary-foreground\",\n text: \"ds:data-[state=active]:text-primary ds:dark:data-[state=active]:text-primary\",\n border:\n \"ds:data-[state=active]:border-primary ds:dark:data-[state=active]:border-primary\",\n },\n secondary: {\n bg: \"ds:data-[state=active]:bg-secondary ds:dark:data-[state=active]:bg-secondary ds:data-[state=active]:text-secondary-foreground ds:dark:data-[state=active]:text-secondary-foreground\",\n text: \"ds:data-[state=active]:text-secondary ds:dark:data-[state=active]:text-secondary\",\n border:\n \"ds:data-[state=active]:border-secondary ds:dark:data-[state=active]:border-secondary\",\n },\n muted: {\n bg: \"ds:data-[state=active]:bg-muted ds:dark:data-[state=active]:bg-muted ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground\",\n text: \"ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground\",\n border:\n \"ds:data-[state=active]:border-border ds:dark:data-[state=active]:border-border\",\n },\n accent: {\n bg: \"ds:data-[state=active]:bg-accent ds:dark:data-[state=active]:bg-accent ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground\",\n text: \"ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground\",\n border:\n \"ds:data-[state=active]:border-accent ds:dark:data-[state=active]:border-accent\",\n },\n destructive: {\n bg: \"ds:data-[state=active]:bg-destructive ds:dark:data-[state=active]:bg-destructive ds:data-[state=active]:text-destructive-foreground ds:dark:data-[state=active]:text-destructive-foreground\",\n text: \"ds:data-[state=active]:text-destructive ds:dark:data-[state=active]:text-destructive\",\n border:\n \"ds:data-[state=active]:border-destructive ds:dark:data-[state=active]:border-destructive\",\n },\n success: {\n bg: \"ds:data-[state=active]:bg-success ds:dark:data-[state=active]:bg-success ds:data-[state=active]:text-success-foreground ds:dark:data-[state=active]:text-success-foreground\",\n text: \"ds:data-[state=active]:text-success ds:dark:data-[state=active]:text-success\",\n border:\n \"ds:data-[state=active]:border-success ds:dark:data-[state=active]:border-success\",\n },\n warning: {\n bg: \"ds:data-[state=active]:bg-warning ds:dark:data-[state=active]:bg-warning ds:data-[state=active]:text-warning-foreground ds:dark:data-[state=active]:text-warning-foreground\",\n text: \"ds:data-[state=active]:text-warning ds:dark:data-[state=active]:text-warning\",\n border:\n \"ds:data-[state=active]:border-warning ds:dark:data-[state=active]:border-warning\",\n },\n };\n\n const colors = colorMap[color];\n\n switch (variant) {\n case \"bordered\":\n case \"pills\":\n // Background color on active state\n return `${colors.bg} ds:dark:data-[state=active]:border-transparent`;\n case \"pill-stroke\":\n // Border color on active state, no background\n return `ds:data-[state=active]:bg-transparent ds:dark:data-[state=active]:bg-transparent`;\n case \"text\":\n // Text color only on active state\n return colors.text;\n case \"outline\":\n // Border color on active state\n return colors.border;\n case \"underlined\":\n // Bottom/side border color on active state\n return cn(colors.border, colors.text);\n case \"enclosed\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n case \"enclosed-fill\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n default:\n return \"\";\n }\n};\n\n// Get TabsList border classes based on position\nexport const getListBorderClasses = (\n variant: TabVariant,\n color: TabColor,\n tabPosition: TabPosition\n): string => {\n if (variant === \"underlined\") {\n // Underlined variant: border on the opposite side from where tabs connect\n const borderMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n return borderMap[tabPosition];\n }\n\n if (variant === \"enclosed\") {\n // Enclosed variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"ds:border-b-primary\",\n secondary: \"ds:border-b-secondary\",\n muted: \"ds:border-b-border\",\n accent: \"ds:border-b-accent\",\n destructive: \"ds:border-b-destructive\",\n success: \"ds:border-b-success\",\n warning: \"ds:border-b-warning\",\n },\n bottom: {\n primary: \"ds:border-t-primary\",\n secondary: \"ds:border-t-secondary\",\n muted: \"ds:border-t-border\",\n accent: \"ds:border-t-accent\",\n destructive: \"ds:border-t-destructive\",\n success: \"ds:border-t-success\",\n warning: \"ds:border-t-warning\",\n },\n left: {\n primary: \"ds:border-r-primary\",\n secondary: \"ds:border-r-secondary\",\n muted: \"ds:border-r-border\",\n accent: \"ds:border-r-accent\",\n destructive: \"ds:border-r-destructive\",\n success: \"ds:border-r-success\",\n warning: \"ds:border-r-warning\",\n },\n right: {\n primary: \"ds:border-l-primary\",\n secondary: \"ds:border-l-secondary\",\n muted: \"ds:border-l-border\",\n accent: \"ds:border-l-accent\",\n destructive: \"ds:border-l-destructive\",\n success: \"ds:border-l-success\",\n warning: \"ds:border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n if (variant === \"enclosed-fill\") {\n // Enclosed-fill variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"ds:border-b-primary\",\n secondary: \"ds:border-b-secondary\",\n muted: \"ds:border-b-border\",\n accent: \"ds:border-b-accent\",\n destructive: \"ds:border-b-destructive\",\n success: \"ds:border-b-success\",\n warning: \"ds:border-b-warning\",\n },\n bottom: {\n primary: \"ds:border-t-primary\",\n secondary: \"ds:border-t-secondary\",\n muted: \"ds:border-t-border\",\n accent: \"ds:border-t-accent\",\n destructive: \"ds:border-t-destructive\",\n success: \"ds:border-t-success\",\n warning: \"ds:border-t-warning\",\n },\n left: {\n primary: \"ds:border-r-primary\",\n secondary: \"ds:border-r-secondary\",\n muted: \"ds:border-r-border\",\n accent: \"ds:border-r-accent\",\n destructive: \"ds:border-r-destructive\",\n success: \"ds:border-r-success\",\n warning: \"ds:border-r-warning\",\n },\n right: {\n primary: \"ds:border-l-primary\",\n secondary: \"ds:border-l-secondary\",\n muted: \"ds:border-l-border\",\n accent: \"ds:border-l-accent\",\n destructive: \"ds:border-l-destructive\",\n success: \"ds:border-l-success\",\n warning: \"ds:border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n return \"\";\n};\n\n// Get trigger border classes for underlined variant based on position\nexport const getUnderlinedTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:border-0 ds:border-transparent ds:data-[state=active]:shadow-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:border-b-2 ds:h-full`,\n bottom: `${baseClasses} ds:border-t-2 ds:h-full`,\n left: `${baseClasses} ds:border-r-2 ds:w-full`,\n right: `${baseClasses} ds:border-l-2 ds:w-full`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed variant based on position\nexport const getEnclosedTriggerClasses = (tabPosition: TabPosition): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:border ds:border-transparent ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed-fill variant based on position\nexport const getEnclosedFillTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-muted ds:dark:bg-muted ds:border ds:border-transparent ds:data-[state=active]:bg-background ds:dark:data-[state=active]:bg-background ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\nexport const variantClasses: Record<\n TabVariant,\n {\n list: { horizontal: string; vertical: string };\n trigger: { horizontal: string; vertical: string };\n }\n> = {\n // Solid: Default style (muted background, active has white background)\n solid: {\n list: {\n horizontal: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n vertical: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Bordered: With border on group and colored active background\n bordered: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pills: No border/background on group, colored background on active button\n pills: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pill-stroke: Pill-style with stroke border, stronger border radius, no background on active\n \"pill-stroke\": {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n vertical: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n },\n },\n\n // Text: No border/background on group, colored text on active button\n text: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Outline: No border/background on group, colored border (stroke) on active button\n outline: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Underlined: Bottom border on group, bottom border on active tab\n underlined: {\n list: {\n horizontal: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed: Border on active tab except bottom border (tab style)\n enclosed: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed-fill: Border on active tab except bottom border with background on inactive tabs\n \"enclosed-fill\": {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0 ds:gap-1\",\n vertical:\n \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n};\n"],"names":["sizeClasses","alignmentClasses","positionClasses","getColorClasses","variant","color","colors","cn","getListBorderClasses","tabPosition","borderBaseMap","colorBorderMap","getUnderlinedTriggerClasses","baseClasses","getEnclosedTriggerClasses","getEnclosedFillTriggerClasses","variantClasses"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),d=require("react");require("@radix-ui/react-slot");require("../packages/ui/src/components/button.cjs");require("../packages/ui/src/components/button-group.cjs");require("../packages/ui/src/components/input.cjs");require("../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const w=require("../packages/ui/src/lib/utils.cjs");require("../packages/ui/src/components/select.cjs");require("../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("lucide-react");require("react-day-picker");require("../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../packages/ui/src/components/badge.cjs");require("../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../packages/ui/src/components/input-otp.cjs");require("../packages/ui/src/components/radio-group.cjs");require("../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../packages/ui/src/components/tabs.cjs");require("../packages/ui/src/components/toggle.cjs");const O=require("./Button/Button.cjs");function S(e){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const i in e)if(i!=="default"){const n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(o,i,n.get?n:{enumerable:!0,get:()=>e[i]})}}return o.default=e,Object.freeze(o)}const $=S(d),s=e=>String(e).padStart(2,"0"),h=(e="primary")=>({primary:{bg:"bg-primary",text:"text-primary-foreground"},secondary:{bg:"bg-secondary",text:"text-secondary-foreground"},accent:{bg:"bg-accent",text:"text-accent-foreground"},destructive:{bg:"bg-destructive",text:"text-destructive-foreground"},muted:{bg:"bg-muted",text:"text-muted-foreground"},success:{bg:"bg-success",text:"text-success-foreground"},error:{bg:"bg-error",text:"text-error-foreground"},warning:{bg:"bg-warning",text:"text-warning-foreground"},foreground:{bg:"bg-foreground",text:"text-background"}})[e],f=d.memo($.forwardRef(({HOURS:e,MINUTES:o,hours:i,minutes:n,disabled:q,isTimeDisabled:a,onTimeSelect:b,color:m="primary"},x)=>{const p=d.useMemo(()=>{const r=[];for(const t of e)for(const u of o)r.push({h:t,m:u,display:`${s(t)}:${s(u)}`});return r},[e,o]),y=i!==void 0&&n!==void 0?`${s(i)}:${s(n)}`:"",v=(r,t)=>{a(r,t,0)||b(r,t)};return c.jsx("div",{className:"ds:flex ds:flex-col ds:gap-2",children:c.jsx("div",{ref:x,className:"ds:flex ds:flex-col ds:gap-1 ds:h-64 ds:overflow-y-auto ds:p-2 ds:rounded-md",children:p.map(({h:r,m:t,display:u})=>{const j=a(r,t,0),g=u===y,l=h(m);return c.jsx(O.default,{type:"button",variant:"outline",onClick:()=>v(r,t),"data-selected":g||void 0,disabled:q||j,size:"sm",className:w.cn(g?`${l.bg} ${l.text} ds:font-semibold`:"ds:text-foreground"),children:u},u)})})})}));f.displayName="TimeGridView";exports.TimeGridView=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),c=require("react");require("@radix-ui/react-slot");require("../packages/ui/src/components/button.cjs");require("../packages/ui/src/components/button-group.cjs");require("../packages/ui/src/components/input.cjs");require("../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const w=require("../packages/ui/src/lib/utils.cjs");require("../packages/ui/src/components/select.cjs");require("../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("lucide-react");require("react-day-picker");require("../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../packages/ui/src/components/badge.cjs");require("../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../packages/ui/src/components/input-otp.cjs");require("../packages/ui/src/components/radio-group.cjs");require("../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../packages/ui/src/components/tabs.cjs");require("../packages/ui/src/components/toggle.cjs");const O=require("./Button/Button.cjs");function S(e){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const s in e)if(s!=="default"){const d=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(o,s,d.get?d:{enumerable:!0,get:()=>e[s]})}}return o.default=e,Object.freeze(o)}const $=S(c),u=e=>String(e).padStart(2,"0"),h=(e="primary")=>({primary:{bg:"ds:bg-primary",text:"ds:text-primary-foreground"},secondary:{bg:"ds:bg-secondary",text:"ds:text-secondary-foreground"},accent:{bg:"ds:bg-accent",text:"ds:text-accent-foreground"},destructive:{bg:"ds:bg-destructive",text:"ds:text-destructive-foreground"},muted:{bg:"ds:bg-muted",text:"ds:text-muted-foreground"},success:{bg:"ds:bg-success",text:"ds:text-success-foreground"},error:{bg:"ds:bg-error",text:"ds:text-error-foreground"},warning:{bg:"ds:bg-warning",text:"ds:text-warning-foreground"},foreground:{bg:"ds:bg-foreground",text:"ds:text-background"}})[e],f=c.memo($.forwardRef(({HOURS:e,MINUTES:o,hours:s,minutes:d,disabled:q,isTimeDisabled:a,onTimeSelect:b,color:m="primary"},x)=>{const p=c.useMemo(()=>{const r=[];for(const t of e)for(const i of o)r.push({h:t,m:i,display:`${u(t)}:${u(i)}`});return r},[e,o]),y=s!==void 0&&d!==void 0?`${u(s)}:${u(d)}`:"",v=(r,t)=>{a(r,t,0)||b(r,t)};return n.jsx("div",{className:"ds:flex ds:flex-col ds:gap-2",children:n.jsx("div",{ref:x,className:"ds:flex ds:flex-col ds:gap-1 ds:h-64 ds:overflow-y-auto ds:p-2 ds:rounded-md",children:p.map(({h:r,m:t,display:i})=>{const j=a(r,t,0),g=i===y,l=h(m);return n.jsx(O.default,{type:"button",variant:"outline",onClick:()=>v(r,t),"data-selected":g||void 0,disabled:q||j,size:"sm",className:w.cn(g?`${l.bg} ${l.text} ds:font-semibold`:"ds:text-foreground"),children:i},i)})})})}));f.displayName="TimeGridView";exports.TimeGridView=f;
2
2
  //# sourceMappingURL=TimeGridView.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimeGridView.cjs","sources":["../../../src/components/TimeGridView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useMemo } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport Button from \"./Button/Button\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time grid items\nconst getColorClasses = (color: CalendarColor = \"primary\") => {\n const colorMap = {\n primary: {\n bg: \"bg-primary\",\n text: \"text-primary-foreground\",\n },\n secondary: {\n bg: \"bg-secondary\",\n text: \"text-secondary-foreground\",\n },\n accent: {\n bg: \"bg-accent\",\n text: \"text-accent-foreground\",\n },\n destructive: {\n bg: \"bg-destructive\",\n text: \"text-destructive-foreground\",\n },\n muted: {\n bg: \"bg-muted\",\n text: \"text-muted-foreground\",\n },\n success: {\n bg: \"bg-success\",\n text: \"text-success-foreground\",\n },\n error: {\n bg: \"bg-error\",\n text: \"text-error-foreground\",\n },\n warning: {\n bg: \"bg-warning\",\n text: \"text-warning-foreground\",\n },\n foreground: {\n bg: \"bg-foreground\",\n text: \"text-background\",\n },\n };\n return colorMap[color];\n};\n\ntype TimeGridViewProps = {\n HOURS: number[];\n MINUTES: number[];\n hours: number | undefined;\n minutes: number | undefined;\n disabled: boolean;\n isTimeDisabled: (h: number, m: number, s: number) => boolean;\n onTimeSelect: (h: number, m: number) => void;\n color?: CalendarColor;\n};\n\nexport const TimeGridView = memo(\n React.forwardRef<HTMLDivElement, TimeGridViewProps>(\n (\n {\n HOURS,\n MINUTES,\n hours,\n minutes,\n disabled,\n isTimeDisabled,\n onTimeSelect,\n color = \"primary\",\n },\n ref\n ) => {\n // Generate all time combinations based on intervals (always HH:mm, never shows seconds)\n const timeOptions = useMemo(() => {\n const options: Array<{ h: number; m: number; display: string }> = [];\n\n for (const h of HOURS) {\n for (const m of MINUTES) {\n options.push({\n h,\n m,\n display: `${pad(h)}:${pad(m)}`,\n });\n }\n }\n\n return options;\n }, [HOURS, MINUTES]);\n\n const currentValue =\n hours !== undefined && minutes !== undefined\n ? `${pad(hours)}:${pad(minutes)}`\n : \"\";\n\n const handleTimeSelect = (h: number, m: number) => {\n // Always set seconds to 0 in grid mode\n if (!isTimeDisabled(h, m, 0)) {\n onTimeSelect(h, m);\n }\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:gap-2\">\n <div\n ref={ref}\n className=\"ds:flex ds:flex-col ds:gap-1 ds:h-64 ds:overflow-y-auto ds:p-2 ds:rounded-md\"\n >\n {timeOptions.map(({ h, m, display }) => {\n const itemDisabled = isTimeDisabled(h, m, 0);\n const isSelected = display === currentValue;\n const colorClasses = getColorClasses(color);\n\n return (\n <Button\n key={display}\n type=\"button\"\n variant=\"outline\"\n onClick={() => handleTimeSelect(h, m)}\n data-selected={isSelected || undefined}\n disabled={disabled || itemDisabled}\n size=\"sm\"\n className={cn(\n isSelected\n ? `${colorClasses.bg} ${colorClasses.text} ds:font-semibold`\n : \"ds:text-foreground\"\n )}\n >\n {display}\n </Button>\n );\n })}\n </div>\n </div>\n );\n }\n )\n);\n\nTimeGridView.displayName = \"TimeGridView\";\n"],"names":["pad","num","getColorClasses","color","TimeGridView","memo","React","HOURS","MINUTES","hours","minutes","disabled","isTimeDisabled","onTimeSelect","ref","timeOptions","useMemo","options","h","m","currentValue","handleTimeSelect","jsx","display","itemDisabled","isSelected","colorClasses","Button","cn"],"mappings":"ozDAMMA,EAAOC,GAAwB,OAAOA,CAAG,EAAE,SAAS,EAAG,GAAG,EAG1DC,EAAkB,CAACC,EAAuB,aAC7B,CACf,QAAS,CACP,GAAI,aACJ,KAAM,yBAAA,EAER,UAAW,CACT,GAAI,eACJ,KAAM,2BAAA,EAER,OAAQ,CACN,GAAI,YACJ,KAAM,wBAAA,EAER,YAAa,CACX,GAAI,iBACJ,KAAM,6BAAA,EAER,MAAO,CACL,GAAI,WACJ,KAAM,uBAAA,EAER,QAAS,CACP,GAAI,aACJ,KAAM,yBAAA,EAER,MAAO,CACL,GAAI,WACJ,KAAM,uBAAA,EAER,QAAS,CACP,GAAI,aACJ,KAAM,yBAAA,EAER,WAAY,CACV,GAAI,gBACJ,KAAM,iBAAA,CACR,GAEcA,CAAK,EAcVC,EAAeC,EAAAA,KAC1BC,EAAM,WACJ,CACE,CACE,MAAAC,EACA,QAAAC,EACA,MAAAC,EACA,QAAAC,EACA,SAAAC,EACA,eAAAC,EACA,aAAAC,EACA,MAAAV,EAAQ,SAAA,EAEVW,IACG,CAEH,MAAMC,EAAcC,EAAAA,QAAQ,IAAM,CAChC,MAAMC,EAA4D,CAAA,EAElE,UAAWC,KAAKX,EACd,UAAWY,KAAKX,EACdS,EAAQ,KAAK,CACX,EAAAC,EACA,EAAAC,EACA,QAAS,GAAGnB,EAAIkB,CAAC,CAAC,IAAIlB,EAAImB,CAAC,CAAC,EAAA,CAC7B,EAIL,OAAOF,CACT,EAAG,CAACV,EAAOC,CAAO,CAAC,EAEbY,EACJX,IAAU,QAAaC,IAAY,OAC/B,GAAGV,EAAIS,CAAK,CAAC,IAAIT,EAAIU,CAAO,CAAC,GAC7B,GAEAW,EAAmB,CAACH,EAAWC,IAAc,CAE5CP,EAAeM,EAAGC,EAAG,CAAC,GACzBN,EAAaK,EAAGC,CAAC,CAErB,EAEA,OACEG,EAAAA,IAAC,MAAA,CAAI,UAAU,+BACb,SAAAA,EAAAA,IAAC,MAAA,CACC,IAAAR,EACA,UAAU,+EAET,WAAY,IAAI,CAAC,CAAE,EAAAI,EAAG,EAAAC,EAAG,QAAAI,KAAc,CACtC,MAAMC,EAAeZ,EAAeM,EAAGC,EAAG,CAAC,EACrCM,EAAaF,IAAYH,EACzBM,EAAexB,EAAgBC,CAAK,EAE1C,OACEmB,EAAAA,IAACK,EAAAA,QAAA,CAEC,KAAK,SACL,QAAQ,UACR,QAAS,IAAMN,EAAiBH,EAAGC,CAAC,EACpC,gBAAeM,GAAc,OAC7B,SAAUd,GAAYa,EACtB,KAAK,KACL,UAAWI,EAAAA,GACTH,EACI,GAAGC,EAAa,EAAE,IAAIA,EAAa,IAAI,oBACvC,oBAAA,EAGL,SAAAH,CAAA,EAbIA,CAAA,CAgBX,CAAC,CAAA,CAAA,EAEL,CAEJ,CAAA,CAEJ,EAEAnB,EAAa,YAAc"}
1
+ {"version":3,"file":"TimeGridView.cjs","sources":["../../../src/components/TimeGridView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useMemo } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport Button from \"./Button/Button\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time grid items\nconst getColorClasses = (color: CalendarColor = \"primary\") => {\n const colorMap = {\n primary: {\n bg: \"ds:bg-primary\",\n text: \"ds:text-primary-foreground\",\n },\n secondary: {\n bg: \"ds:bg-secondary\",\n text: \"ds:text-secondary-foreground\",\n },\n accent: {\n bg: \"ds:bg-accent\",\n text: \"ds:text-accent-foreground\",\n },\n destructive: {\n bg: \"ds:bg-destructive\",\n text: \"ds:text-destructive-foreground\",\n },\n muted: {\n bg: \"ds:bg-muted\",\n text: \"ds:text-muted-foreground\",\n },\n success: {\n bg: \"ds:bg-success\",\n text: \"ds:text-success-foreground\",\n },\n error: {\n bg: \"ds:bg-error\",\n text: \"ds:text-error-foreground\",\n },\n warning: {\n bg: \"ds:bg-warning\",\n text: \"ds:text-warning-foreground\",\n },\n foreground: {\n bg: \"ds:bg-foreground\",\n text: \"ds:text-background\",\n },\n };\n return colorMap[color];\n};\n\ntype TimeGridViewProps = {\n HOURS: number[];\n MINUTES: number[];\n hours: number | undefined;\n minutes: number | undefined;\n disabled: boolean;\n isTimeDisabled: (h: number, m: number, s: number) => boolean;\n onTimeSelect: (h: number, m: number) => void;\n color?: CalendarColor;\n};\n\nexport const TimeGridView = memo(\n React.forwardRef<HTMLDivElement, TimeGridViewProps>(\n (\n {\n HOURS,\n MINUTES,\n hours,\n minutes,\n disabled,\n isTimeDisabled,\n onTimeSelect,\n color = \"primary\",\n },\n ref\n ) => {\n // Generate all time combinations based on intervals (always HH:mm, never shows seconds)\n const timeOptions = useMemo(() => {\n const options: Array<{ h: number; m: number; display: string }> = [];\n\n for (const h of HOURS) {\n for (const m of MINUTES) {\n options.push({\n h,\n m,\n display: `${pad(h)}:${pad(m)}`,\n });\n }\n }\n\n return options;\n }, [HOURS, MINUTES]);\n\n const currentValue =\n hours !== undefined && minutes !== undefined\n ? `${pad(hours)}:${pad(minutes)}`\n : \"\";\n\n const handleTimeSelect = (h: number, m: number) => {\n // Always set seconds to 0 in grid mode\n if (!isTimeDisabled(h, m, 0)) {\n onTimeSelect(h, m);\n }\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:gap-2\">\n <div\n ref={ref}\n className=\"ds:flex ds:flex-col ds:gap-1 ds:h-64 ds:overflow-y-auto ds:p-2 ds:rounded-md\"\n >\n {timeOptions.map(({ h, m, display }) => {\n const itemDisabled = isTimeDisabled(h, m, 0);\n const isSelected = display === currentValue;\n const colorClasses = getColorClasses(color);\n\n return (\n <Button\n key={display}\n type=\"button\"\n variant=\"outline\"\n onClick={() => handleTimeSelect(h, m)}\n data-selected={isSelected || undefined}\n disabled={disabled || itemDisabled}\n size=\"sm\"\n className={cn(\n isSelected\n ? `${colorClasses.bg} ${colorClasses.text} ds:font-semibold`\n : \"ds:text-foreground\"\n )}\n >\n {display}\n </Button>\n );\n })}\n </div>\n </div>\n );\n }\n )\n);\n\nTimeGridView.displayName = \"TimeGridView\";\n"],"names":["pad","num","getColorClasses","color","TimeGridView","memo","React","HOURS","MINUTES","hours","minutes","disabled","isTimeDisabled","onTimeSelect","ref","timeOptions","useMemo","options","h","m","currentValue","handleTimeSelect","jsx","display","itemDisabled","isSelected","colorClasses","Button","cn"],"mappings":"ozDAMMA,EAAOC,GAAwB,OAAOA,CAAG,EAAE,SAAS,EAAG,GAAG,EAG1DC,EAAkB,CAACC,EAAuB,aAC7B,CACf,QAAS,CACP,GAAI,gBACJ,KAAM,4BAAA,EAER,UAAW,CACT,GAAI,kBACJ,KAAM,8BAAA,EAER,OAAQ,CACN,GAAI,eACJ,KAAM,2BAAA,EAER,YAAa,CACX,GAAI,oBACJ,KAAM,gCAAA,EAER,MAAO,CACL,GAAI,cACJ,KAAM,0BAAA,EAER,QAAS,CACP,GAAI,gBACJ,KAAM,4BAAA,EAER,MAAO,CACL,GAAI,cACJ,KAAM,0BAAA,EAER,QAAS,CACP,GAAI,gBACJ,KAAM,4BAAA,EAER,WAAY,CACV,GAAI,mBACJ,KAAM,oBAAA,CACR,GAEcA,CAAK,EAcVC,EAAeC,EAAAA,KAC1BC,EAAM,WACJ,CACE,CACE,MAAAC,EACA,QAAAC,EACA,MAAAC,EACA,QAAAC,EACA,SAAAC,EACA,eAAAC,EACA,aAAAC,EACA,MAAAV,EAAQ,SAAA,EAEVW,IACG,CAEH,MAAMC,EAAcC,EAAAA,QAAQ,IAAM,CAChC,MAAMC,EAA4D,CAAA,EAElE,UAAWC,KAAKX,EACd,UAAWY,KAAKX,EACdS,EAAQ,KAAK,CACX,EAAAC,EACA,EAAAC,EACA,QAAS,GAAGnB,EAAIkB,CAAC,CAAC,IAAIlB,EAAImB,CAAC,CAAC,EAAA,CAC7B,EAIL,OAAOF,CACT,EAAG,CAACV,EAAOC,CAAO,CAAC,EAEbY,EACJX,IAAU,QAAaC,IAAY,OAC/B,GAAGV,EAAIS,CAAK,CAAC,IAAIT,EAAIU,CAAO,CAAC,GAC7B,GAEAW,EAAmB,CAACH,EAAWC,IAAc,CAE5CP,EAAeM,EAAGC,EAAG,CAAC,GACzBN,EAAaK,EAAGC,CAAC,CAErB,EAEA,OACEG,EAAAA,IAAC,MAAA,CAAI,UAAU,+BACb,SAAAA,EAAAA,IAAC,MAAA,CACC,IAAAR,EACA,UAAU,+EAET,WAAY,IAAI,CAAC,CAAE,EAAAI,EAAG,EAAAC,EAAG,QAAAI,KAAc,CACtC,MAAMC,EAAeZ,EAAeM,EAAGC,EAAG,CAAC,EACrCM,EAAaF,IAAYH,EACzBM,EAAexB,EAAgBC,CAAK,EAE1C,OACEmB,EAAAA,IAACK,EAAAA,QAAA,CAEC,KAAK,SACL,QAAQ,UACR,QAAS,IAAMN,EAAiBH,EAAGC,CAAC,EACpC,gBAAeM,GAAc,OAC7B,SAAUd,GAAYa,EACtB,KAAK,KACL,UAAWI,EAAAA,GACTH,EACI,GAAGC,EAAa,EAAE,IAAIA,EAAa,IAAI,oBACvC,oBAAA,EAGL,SAAAH,CAAA,EAbIA,CAAA,CAgBX,CAAC,CAAA,CAAA,EAEL,CAEJ,CAAA,CAEJ,EAEAnB,EAAa,YAAc"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),t=require("sonner"),o=require("lucide-react");require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const m=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const q={default:"ds:bg-neutral-800 ds:text-white ds:border ds:border-neutral-700",success:"ds:bg-success ds:text-white ds:border ds:border-success/20",error:"ds:bg-error ds:text-white ds:border ds:border-error/20",warning:"ds:bg-warning ds:text-black ds:border ds:border-warning/20",info:"ds:bg-info ds:text-foreground",primary:"ds:bg-primary ds:text-primary-foreground ds:border ds:border-primary/20",secondary:"ds:bg-secondary ds:text-secondary-foreground ds:border ds:border-secondary/20"},l={success:s.jsx(o.CheckCircle,{className:"ds:w-4 ds:h-4 ds:shrink-0"}),error:s.jsx(o.XCircle,{className:"ds:w-4 ds:h-4 ds:shrink-0"}),warning:s.jsx(o.AlertTriangle,{className:"ds:w-4 ds:h-4 ds:shrink-0"}),info:s.jsx(o.Info,{className:"ds:w-4 ds:h-4 ds:shrink-0"}),default:null,primary:s.jsx(o.Info,{className:"ds:w-4 ds:h-4 ds:shrink-0"}),secondary:s.jsx(o.Info,{className:"ds:w-4 ds:h-4 ds:shrink-0"})},d=(e,r)=>s.jsxs("div",{className:m.cn("ds:flex ds:items-center ds:gap-2 ds:rounded-md ds:px-3 ds:py-2 ds:shadow-md ds:text-sm ds:font-medium",q[e]),children:[l[e],s.jsx("span",{children:r})]}),b=Object.assign((...e)=>{const[r]=e,i=typeof r=="function"?r():r??"Notification";return t.toast.custom(()=>d("default",i))},{success:(e,r)=>t.toast.custom(()=>d("success",e),r),error:(e,r)=>t.toast.custom(()=>d("error",e),r),warning:(e,r)=>t.toast.custom(()=>d("warning",e),r),info:(e,r)=>t.toast.custom(()=>d("info",e),r),primary:(e,r)=>t.toast.custom(()=>d("primary",e),r),secondary:(e,r)=>t.toast.custom(()=>d("secondary",e),r)});function f({position:e="top-right",richColors:r=!0,closeButton:i=!1,expand:n=!1,visibleToasts:a=3,duration:u=4e3,...c}){return s.jsx(t.Toaster,{...c,position:e,richColors:r,closeButton:i,expand:n,visibleToasts:a,toastOptions:{duration:u,classNames:{toast:"rounded-md shadow-md border-none text-sm font-medium backdrop-blur-sm text-black dark:text-white",description:"text-muted-foreground",actionButton:"bg-white/10"}}})}exports.Toaster=f;exports.toast=b;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),t=require("sonner"),o=require("lucide-react");require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const m=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const q={default:"ds:bg-neutral-800 ds:text-white ds:border ds:border-neutral-700",success:"ds:bg-success ds:text-white ds:border ds:border-success/20",error:"ds:bg-error ds:text-white ds:border ds:border-error/20",warning:"ds:bg-warning ds:text-black ds:border ds:border-warning/20",info:"ds:bg-info ds:text-foreground",primary:"ds:bg-primary ds:text-primary-foreground ds:border ds:border-primary/20",secondary:"ds:bg-secondary ds:text-secondary-foreground ds:border ds:border-secondary/20"},l={success:s.jsx(o.CheckCircle,{className:"ds:w-4 ds:h-4 ds:shrink-0"}),error:s.jsx(o.XCircle,{className:"ds:w-4 ds:h-4 ds:shrink-0"}),warning:s.jsx(o.AlertTriangle,{className:"ds:w-4 ds:h-4 ds:shrink-0"}),info:s.jsx(o.Info,{className:"ds:w-4 ds:h-4 ds:shrink-0"}),default:null,primary:s.jsx(o.Info,{className:"ds:w-4 ds:h-4 ds:shrink-0"}),secondary:s.jsx(o.Info,{className:"ds:w-4 ds:h-4 ds:shrink-0"})},d=(e,r)=>s.jsxs("div",{className:m.cn("ds:flex ds:items-center ds:gap-2 ds:rounded-md ds:px-3 ds:py-2 ds:shadow-md ds:text-sm ds:font-medium",q[e]),children:[l[e],s.jsx("span",{children:r})]}),b=Object.assign((...e)=>{const[r]=e,i=typeof r=="function"?r():r??"Notification";return t.toast.custom(()=>d("default",i))},{success:(e,r)=>t.toast.custom(()=>d("success",e),r),error:(e,r)=>t.toast.custom(()=>d("error",e),r),warning:(e,r)=>t.toast.custom(()=>d("warning",e),r),info:(e,r)=>t.toast.custom(()=>d("info",e),r),primary:(e,r)=>t.toast.custom(()=>d("primary",e),r),secondary:(e,r)=>t.toast.custom(()=>d("secondary",e),r)});function f({position:e="top-right",richColors:r=!0,closeButton:i=!1,expand:n=!1,visibleToasts:a=3,duration:u=4e3,...c}){return s.jsx(t.Toaster,{...c,position:e,richColors:r,closeButton:i,expand:n,visibleToasts:a,toastOptions:{duration:u,classNames:{toast:"ds:rounded-md ds:shadow-md ds:border-none ds:text-sm ds:font-medium ds:backdrop-blur-sm ds:text-black ds:dark:text-white",description:"ds:text-muted-foreground",actionButton:"ds:bg-white/10"}}})}exports.Toaster=f;exports.toast=b;
2
2
  //# sourceMappingURL=Toast.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.cjs","sources":["../../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import {\n Toaster as SonnerToaster,\n toast as sonnerToast,\n type ToasterProps as SonnerToasterProps,\n} from \"sonner\";\nimport { CheckCircle, XCircle, Info, AlertTriangle } from \"lucide-react\";\nimport { cn } from \"@dsui/ui/index\";\n\nconst variantStyles = {\n default: \"ds:bg-neutral-800 ds:text-white ds:border ds:border-neutral-700\",\n success: \"ds:bg-success ds:text-white ds:border ds:border-success/20\",\n error: \"ds:bg-error ds:text-white ds:border ds:border-error/20\",\n warning: \"ds:bg-warning ds:text-black ds:border ds:border-warning/20\",\n info: \"ds:bg-info ds:text-foreground\",\n primary: \"ds:bg-primary ds:text-primary-foreground ds:border ds:border-primary/20\",\n secondary:\n \"ds:bg-secondary ds:text-secondary-foreground ds:border ds:border-secondary/20\",\n};\n\nconst variantIcons = {\n success: <CheckCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n error: <XCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n warning: <AlertTriangle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n info: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n default: null,\n primary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n secondary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n};\n\ntype Variant = keyof typeof variantStyles;\n\nconst renderToastContent = (variant: Variant, message: React.ReactNode) => (\n <div\n className={cn(\n \"ds:flex ds:items-center ds:gap-2 ds:rounded-md ds:px-3 ds:py-2 ds:shadow-md ds:text-sm ds:font-medium\",\n variantStyles[variant]\n )}\n >\n {variantIcons[variant]}\n <span>{message}</span>\n </div>\n);\n\nconst toast = Object.assign(\n (...args: Parameters<typeof sonnerToast>) => {\n const [message] = args;\n const content =\n typeof message === \"function\" ? message() : (message ?? \"Notification\");\n\n return sonnerToast.custom(() => renderToastContent(\"default\", content));\n },\n {\n success: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"success\", message), opts),\n\n error: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"error\", message), opts),\n\n warning: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"warning\", message), opts),\n\n info: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"info\", message), opts),\n\n primary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"primary\", message), opts),\n\n secondary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) =>\n sonnerToast.custom(() => renderToastContent(\"secondary\", message), opts),\n }\n) as any;\n\nfunction Toaster({\n position = \"top-right\",\n richColors = true,\n closeButton = false,\n expand = false,\n visibleToasts = 3,\n duration = 4000,\n ...props\n}: SonnerToasterProps) {\n return (\n <SonnerToaster\n {...props}\n position={position}\n richColors={richColors}\n closeButton={closeButton}\n expand={expand}\n visibleToasts={visibleToasts}\n toastOptions={{\n duration: duration,\n classNames: {\n toast:\n \"rounded-md shadow-md border-none text-sm font-medium backdrop-blur-sm text-black dark:text-white\",\n description: \"text-muted-foreground\",\n actionButton: \"bg-white/10\",\n },\n }}\n />\n );\n}\n\nexport { toast, Toaster };\n"],"names":["variantStyles","variantIcons","jsx","CheckCircle","XCircle","AlertTriangle","Info","renderToastContent","variant","message","jsxs","cn","toast","args","content","sonnerToast","opts","Toaster","position","richColors","closeButton","expand","visibleToasts","duration","props","SonnerToaster"],"mappings":"0jDAQA,MAAMA,EAAgB,CACpB,QAAS,kEACT,QAAS,6DACT,MAAO,yDACP,QAAS,6DACT,KAAM,gCACN,QAAS,0EACT,UACE,+EACJ,EAEMC,EAAe,CACnB,QAASC,EAAAA,IAACC,EAAAA,YAAA,CAAY,UAAU,2BAAA,CAA4B,EAC5D,MAAOD,EAAAA,IAACE,EAAAA,QAAA,CAAQ,UAAU,2BAAA,CAA4B,EACtD,QAASF,EAAAA,IAACG,EAAAA,cAAA,CAAc,UAAU,2BAAA,CAA4B,EAC9D,KAAMH,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,2BAAA,CAA4B,EAClD,QAAS,KACT,QAASJ,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,2BAAA,CAA4B,EACrD,UAAWJ,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,2BAAA,CAA4B,CACzD,EAIMC,EAAqB,CAACC,EAAkBC,IAC5CC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,wGACAX,EAAcQ,CAAO,CAAA,EAGtB,SAAA,CAAAP,EAAaO,CAAO,EACrBN,EAAAA,IAAC,QAAM,SAAAO,CAAA,CAAQ,CAAA,CAAA,CACjB,EAGIG,EAAQ,OAAO,OACnB,IAAIC,IAAyC,CAC3C,KAAM,CAACJ,CAAO,EAAII,EACZC,EACJ,OAAOL,GAAY,WAAaA,EAAA,EAAaA,GAAW,eAE1D,OAAOM,EAAAA,MAAY,OAAO,IAAMR,EAAmB,UAAWO,CAAO,CAAC,CACxE,EACA,CACE,QAAS,CACPL,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,UAAWE,CAAO,EAAGO,CAAI,EAE1E,MAAO,CACLP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,QAASE,CAAO,EAAGO,CAAI,EAExE,QAAS,CACPP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,UAAWE,CAAO,EAAGO,CAAI,EAE1E,KAAM,CACJP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,OAAQE,CAAO,EAAGO,CAAI,EAEvE,QAAS,CACPP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,UAAWE,CAAO,EAAGO,CAAI,EAE1E,UAAW,CACTP,EACAO,IAEAD,EAAAA,MAAY,OAAO,IAAMR,EAAmB,YAAaE,CAAO,EAAGO,CAAI,CAAA,CAE7E,EAEA,SAASC,EAAQ,CACf,SAAAC,EAAW,YACX,WAAAC,EAAa,GACb,YAAAC,EAAc,GACd,OAAAC,EAAS,GACT,cAAAC,EAAgB,EAChB,SAAAC,EAAW,IACX,GAAGC,CACL,EAAuB,CACrB,OACEtB,EAAAA,IAACuB,EAAAA,QAAA,CACE,GAAGD,EACJ,SAAAN,EACA,WAAAC,EACA,YAAAC,EACA,OAAAC,EACA,cAAAC,EACA,aAAc,CACZ,SAAAC,EACA,WAAY,CACV,MACE,mGACF,YAAa,wBACb,aAAc,aAAA,CAChB,CACF,CAAA,CAGN"}
1
+ {"version":3,"file":"Toast.cjs","sources":["../../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import {\n Toaster as SonnerToaster,\n toast as sonnerToast,\n type ToasterProps as SonnerToasterProps,\n} from \"sonner\";\nimport { CheckCircle, XCircle, Info, AlertTriangle } from \"lucide-react\";\nimport { cn } from \"@dsui/ui/index\";\n\nconst variantStyles = {\n default: \"ds:bg-neutral-800 ds:text-white ds:border ds:border-neutral-700\",\n success: \"ds:bg-success ds:text-white ds:border ds:border-success/20\",\n error: \"ds:bg-error ds:text-white ds:border ds:border-error/20\",\n warning: \"ds:bg-warning ds:text-black ds:border ds:border-warning/20\",\n info: \"ds:bg-info ds:text-foreground\",\n primary: \"ds:bg-primary ds:text-primary-foreground ds:border ds:border-primary/20\",\n secondary:\n \"ds:bg-secondary ds:text-secondary-foreground ds:border ds:border-secondary/20\",\n};\n\nconst variantIcons = {\n success: <CheckCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n error: <XCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n warning: <AlertTriangle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n info: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n default: null,\n primary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n secondary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n};\n\ntype Variant = keyof typeof variantStyles;\n\nconst renderToastContent = (variant: Variant, message: React.ReactNode) => (\n <div\n className={cn(\n \"ds:flex ds:items-center ds:gap-2 ds:rounded-md ds:px-3 ds:py-2 ds:shadow-md ds:text-sm ds:font-medium\",\n variantStyles[variant]\n )}\n >\n {variantIcons[variant]}\n <span>{message}</span>\n </div>\n);\n\nconst toast = Object.assign(\n (...args: Parameters<typeof sonnerToast>) => {\n const [message] = args;\n const content =\n typeof message === \"function\" ? message() : (message ?? \"Notification\");\n\n return sonnerToast.custom(() => renderToastContent(\"default\", content));\n },\n {\n success: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"success\", message), opts),\n\n error: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"error\", message), opts),\n\n warning: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"warning\", message), opts),\n\n info: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"info\", message), opts),\n\n primary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"primary\", message), opts),\n\n secondary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) =>\n sonnerToast.custom(() => renderToastContent(\"secondary\", message), opts),\n }\n) as any;\n\nfunction Toaster({\n position = \"top-right\",\n richColors = true,\n closeButton = false,\n expand = false,\n visibleToasts = 3,\n duration = 4000,\n ...props\n}: SonnerToasterProps) {\n return (\n <SonnerToaster\n {...props}\n position={position}\n richColors={richColors}\n closeButton={closeButton}\n expand={expand}\n visibleToasts={visibleToasts}\n toastOptions={{\n duration: duration,\n classNames: {\n toast:\n \"ds:rounded-md ds:shadow-md ds:border-none ds:text-sm ds:font-medium ds:backdrop-blur-sm ds:text-black ds:dark:text-white\",\n description: \"ds:text-muted-foreground\",\n actionButton: \"ds:bg-white/10\",\n },\n }}\n />\n );\n}\n\nexport { toast, Toaster };\n"],"names":["variantStyles","variantIcons","jsx","CheckCircle","XCircle","AlertTriangle","Info","renderToastContent","variant","message","jsxs","cn","toast","args","content","sonnerToast","opts","Toaster","position","richColors","closeButton","expand","visibleToasts","duration","props","SonnerToaster"],"mappings":"0jDAQA,MAAMA,EAAgB,CACpB,QAAS,kEACT,QAAS,6DACT,MAAO,yDACP,QAAS,6DACT,KAAM,gCACN,QAAS,0EACT,UACE,+EACJ,EAEMC,EAAe,CACnB,QAASC,EAAAA,IAACC,EAAAA,YAAA,CAAY,UAAU,2BAAA,CAA4B,EAC5D,MAAOD,EAAAA,IAACE,EAAAA,QAAA,CAAQ,UAAU,2BAAA,CAA4B,EACtD,QAASF,EAAAA,IAACG,EAAAA,cAAA,CAAc,UAAU,2BAAA,CAA4B,EAC9D,KAAMH,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,2BAAA,CAA4B,EAClD,QAAS,KACT,QAASJ,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,2BAAA,CAA4B,EACrD,UAAWJ,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,2BAAA,CAA4B,CACzD,EAIMC,EAAqB,CAACC,EAAkBC,IAC5CC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,wGACAX,EAAcQ,CAAO,CAAA,EAGtB,SAAA,CAAAP,EAAaO,CAAO,EACrBN,EAAAA,IAAC,QAAM,SAAAO,CAAA,CAAQ,CAAA,CAAA,CACjB,EAGIG,EAAQ,OAAO,OACnB,IAAIC,IAAyC,CAC3C,KAAM,CAACJ,CAAO,EAAII,EACZC,EACJ,OAAOL,GAAY,WAAaA,EAAA,EAAaA,GAAW,eAE1D,OAAOM,EAAAA,MAAY,OAAO,IAAMR,EAAmB,UAAWO,CAAO,CAAC,CACxE,EACA,CACE,QAAS,CACPL,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,UAAWE,CAAO,EAAGO,CAAI,EAE1E,MAAO,CACLP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,QAASE,CAAO,EAAGO,CAAI,EAExE,QAAS,CACPP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,UAAWE,CAAO,EAAGO,CAAI,EAE1E,KAAM,CACJP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,OAAQE,CAAO,EAAGO,CAAI,EAEvE,QAAS,CACPP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,UAAWE,CAAO,EAAGO,CAAI,EAE1E,UAAW,CACTP,EACAO,IAEAD,EAAAA,MAAY,OAAO,IAAMR,EAAmB,YAAaE,CAAO,EAAGO,CAAI,CAAA,CAE7E,EAEA,SAASC,EAAQ,CACf,SAAAC,EAAW,YACX,WAAAC,EAAa,GACb,YAAAC,EAAc,GACd,OAAAC,EAAS,GACT,cAAAC,EAAgB,EAChB,SAAAC,EAAW,IACX,GAAGC,CACL,EAAuB,CACrB,OACEtB,EAAAA,IAACuB,EAAAA,QAAA,CACE,GAAGD,EACJ,SAAAN,EACA,WAAAC,EACA,YAAAC,EACA,OAAAC,EACA,cAAAC,EACA,aAAc,CACZ,SAAAC,EACA,WAAY,CACV,MACE,2HACF,YAAa,2BACb,aAAc,gBAAA,CAChB,CACF,CAAA,CAGN"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),l=require("react"),a=require("../../packages/ui/src/components/tooltip.cjs");require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const u=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("lucide-react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const t=require("motion/react"),C=require("../../utils/animations.cjs");function O(s){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const r in s)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(s,r);Object.defineProperty(i,r,n.get?n:{enumerable:!0,get:()=>s[r]})}}return i.default=s,Object.freeze(i)}const b=O(l),S=b.memo(function({content:i,children:r,sideOffset:n=4,delayDuration:q=0,className:d,childClassName:v,position:x="top",noArrow:h=!1,animation:c,...g}){const f={stiffness:100,damping:5},y=l.useMemo(()=>C.animationClass(c,d),[c,d]),p=l.useMemo(()=>{switch(g.color){case"primary":return"bg-primary text-primary-foreground [&>span>svg]:bg-primary [&>span>svg]:fill-primary";case"secondary":return"bg-secondary text-secondary-foreground [&>span>svg]:bg-secondary [&>span>svg]:fill-secondary";case"dark":return"";case"light":return"bg-neutral-200 text-neutral-950 [&_svg]:bg-neutral-200 [&_svg]:fill-neutral-200";case"inverted":return"dark:bg-white dark:text-black dark:[&_svg]:bg-white dark:[&_svg]:fill-white";case"success":return"bg-success text-success-foreground [&>span>svg]:bg-success [&>span>svg]:fill-success";case"warning":return"bg-warning text-warning-foreground [&>span>svg]:bg-warning [&>span>svg]:fill-warning";case"error":return"bg-error text-error-foreground [&>span>svg]:bg-error [&>span>svg]:fill-error";case"glass":return"bg-white/15 text-foreground backdrop-blur-sm shadow-lg [&>span>svg]:bg-white/15 [&>span>svg]:fill-white/15";default:return"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance"}},[g?.color]),o=t.useMotionValue(0),w=t.useSpring(t.useTransform(o,[-100,100],[-45,45]),f),j=t.useSpring(t.useTransform(o,[-100,100],[-50,50]),f),k=l.useCallback(m=>{const M=m.target.offsetWidth/2;o.set(m.nativeEvent.offsetX-M)},[o]),T=b.memo(()=>r?e.jsx("span",{onMouseMove:k,className:u.cn("ds:inline-block",v),children:r}):e.jsx(e.Fragment,{}));return c==="spec"?e.jsxs(t.motion.div,{className:u.cn("ds:relative ds:-me-2.5 ds:inline-block",d),whileHover:"hover",initial:"initial",children:[e.jsx(t.motion.div,{variants:{initial:{opacity:0,y:20,scale:0},hover:{opacity:1,y:-5,scale:1,transition:{type:"tween",duration:.2,ease:"easeOut"}}},style:{translateX:j,rotate:w,whiteSpace:"nowrap"},className:u.cn("ds:absolute ds:-top-2 ds:left-1/2 ds:z-50 ds:flex ds:-translate-x-1/2 ds:-translate-y-full ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-4 ds:py-2 ds:text-xs ds:shadow-xl",p),children:e.jsx("div",{className:"ds:relative ds:z-1",children:i})}),e.jsx(T,{})]}):e.jsx(a.TooltipProvider,{delayDuration:q,children:e.jsxs(a.Tooltip,{children:[e.jsx(a.TooltipTrigger,{asChild:!0,children:r}),e.jsx(a.TooltipContent,{...g,side:x,sideOffset:n,className:u.cn(y?.className,p,{"ds:[&>span>svg]:invisible":h}),children:i})]})})});exports.Tooltip=S;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),u=require("react"),d=require("../../packages/ui/src/components/tooltip.cjs");require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const a=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("lucide-react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const r=require("motion/react"),C=require("../../utils/animations.cjs");function O(t){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const n=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(i,s,n.get?n:{enumerable:!0,get:()=>t[s]})}}return i.default=t,Object.freeze(i)}const b=O(u),S=b.memo(function({content:i,children:s,sideOffset:n=4,delayDuration:q=0,className:l,childClassName:v,position:x="top",noArrow:h=!1,animation:c,...g}){const f={stiffness:100,damping:5},y=u.useMemo(()=>C.animationClass(c,l),[c,l]),p=u.useMemo(()=>{switch(g.color){case"primary":return"ds:bg-primary ds:text-primary-foreground ds:[&>span>svg]:bg-primary ds:[&>span>svg]:fill-primary";case"secondary":return"ds:bg-secondary ds:text-secondary-foreground ds:[&>span>svg]:bg-secondary ds:[&>span>svg]:fill-secondary";case"dark":return"";case"light":return"ds:bg-neutral-200 ds:text-neutral-950 ds:[&_svg]:bg-neutral-200 ds:[&_svg]:fill-neutral-200";case"inverted":return"ds:dark:bg-white ds:dark:text-black ds:dark:[&_svg]:bg-white ds:dark:[&_svg]:fill-white";case"success":return"ds:bg-success ds:text-success-foreground ds:[&>span>svg]:bg-success ds:[&>span>svg]:fill-success";case"warning":return"ds:bg-warning ds:text-warning-foreground ds:[&>span>svg]:bg-warning ds:[&>span>svg]:fill-warning";case"error":return"ds:bg-error ds:text-error-foreground ds:[&>span>svg]:bg-error ds:[&>span>svg]:fill-error";case"glass":return"ds:bg-white/15 ds:text-foreground ds:backdrop-blur-sm ds:shadow-lg ds:[&>span>svg]:bg-white/15 ds:[&>span>svg]:fill-white/15";default:return"ds:bg-foreground ds:text-background ds:animate-in ds:fade-in-0 ds:zoom-in-95 ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=closed]:zoom-out-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:w-fit ds:origin-(--radix-tooltip-content-transform-origin) ds:rounded-md ds:px-3 ds:py-1.5 ds:text-xs ds:text-balance"}},[g?.color]),o=r.useMotionValue(0),w=r.useSpring(r.useTransform(o,[-100,100],[-45,45]),f),j=r.useSpring(r.useTransform(o,[-100,100],[-50,50]),f),k=u.useCallback(m=>{const M=m.target.offsetWidth/2;o.set(m.nativeEvent.offsetX-M)},[o]),T=b.memo(()=>s?e.jsx("span",{onMouseMove:k,className:a.cn("ds:inline-block",v),children:s}):e.jsx(e.Fragment,{}));return c==="spec"?e.jsxs(r.motion.div,{className:a.cn("ds:relative ds:-me-2.5 ds:inline-block",l),whileHover:"hover",initial:"initial",children:[e.jsx(r.motion.div,{variants:{initial:{opacity:0,y:20,scale:0},hover:{opacity:1,y:-5,scale:1,transition:{type:"tween",duration:.2,ease:"easeOut"}}},style:{translateX:j,rotate:w,whiteSpace:"nowrap"},className:a.cn("ds:absolute ds:-top-2 ds:left-1/2 ds:z-50 ds:flex ds:-translate-x-1/2 ds:-translate-y-full ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-4 ds:py-2 ds:text-xs ds:shadow-xl",p),children:e.jsx("div",{className:"ds:relative ds:z-1",children:i})}),e.jsx(T,{})]}):e.jsx(d.TooltipProvider,{delayDuration:q,children:e.jsxs(d.Tooltip,{children:[e.jsx(d.TooltipTrigger,{asChild:!0,children:s}),e.jsx(d.TooltipContent,{...g,side:x,sideOffset:n,className:a.cn(y?.className,p,{"ds:[&>span>svg]:invisible":h}),children:i})]})})});exports.Tooltip=S;
2
2
  //# sourceMappingURL=Tooltip.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.cjs","sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as React from \"react\";\nimport {\n Tooltip as DsTooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n type TooltipContentProps,\n} from \"@dsui/ui/components/tooltip\";\nimport { cn } from \"@dsui/ui/index\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"motion/react\";\nimport type { BasicAnimation, BasicColor } from \"@/types/variables\";\nimport { useMemo, useCallback } from \"react\";\nimport { animationClass } from \"@/utils/animations\";\n\ntype Color = BasicColor | \"dark\" | \"light\" | \"inverted\";\n\nexport type TooltipProps = TooltipContentProps & {\n content: React.ReactNode;\n children: React.ReactNode;\n sideOffset?: number;\n delayDuration?: number;\n position?: \"top\" | \"right\" | \"bottom\" | \"left\";\n className?: string;\n childClassName?: string;\n noArrow?: boolean;\n animation?: BasicAnimation;\n color?: Color;\n};\n\nexport const Tooltip = React.memo(function Tooltip({\n content,\n children,\n sideOffset = 4,\n delayDuration = 0,\n className,\n childClassName,\n position = \"top\",\n noArrow = false,\n animation,\n ...props\n}: TooltipProps) {\n const springConfig = { stiffness: 100, damping: 5 };\n\n const tooltipAnimation = useMemo<{ className?: string } | null>(() => {\n return animationClass(animation, className);\n }, [animation, className]);\n\n const tooltipColor = useMemo<string>(() => {\n switch (props.color) {\n case \"primary\":\n return \"bg-primary text-primary-foreground [&>span>svg]:bg-primary [&>span>svg]:fill-primary\";\n case \"secondary\":\n return \"bg-secondary text-secondary-foreground [&>span>svg]:bg-secondary [&>span>svg]:fill-secondary\";\n case \"dark\":\n return \"\";\n case \"light\":\n return \"bg-neutral-200 text-neutral-950 [&_svg]:bg-neutral-200 [&_svg]:fill-neutral-200\";\n case \"inverted\":\n return \"dark:bg-white dark:text-black dark:[&_svg]:bg-white dark:[&_svg]:fill-white\";\n case \"success\":\n return \"bg-success text-success-foreground [&>span>svg]:bg-success [&>span>svg]:fill-success\";\n case \"warning\":\n return \"bg-warning text-warning-foreground [&>span>svg]:bg-warning [&>span>svg]:fill-warning\";\n case \"error\":\n return \"bg-error text-error-foreground [&>span>svg]:bg-error [&>span>svg]:fill-error\";\n case \"glass\":\n return \"bg-white/15 text-foreground backdrop-blur-sm shadow-lg [&>span>svg]:bg-white/15 [&>span>svg]:fill-white/15\";\n default:\n return \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\";\n }\n }, [props?.color]);\n\n // on mouse move\n const x = useMotionValue(0);\n // rotate the tooltip\n const rotate = useSpring(\n useTransform(x, [-100, 100], [-45, 45]),\n springConfig\n );\n // translate the tooltip\n const translateX = useSpring(\n useTransform(x, [-100, 100], [-50, 50]),\n springConfig\n );\n\n const handleMouseMove = useCallback(\n (event: React.MouseEvent) => {\n const halfWidth = (event.target as HTMLElement).offsetWidth / 2;\n x.set(event.nativeEvent.offsetX - halfWidth);\n },\n [x]\n );\n\n const ChildComp = React.memo(() => {\n if (!children) return <></>;\n\n return (\n <span\n onMouseMove={handleMouseMove}\n className={cn(\"ds:inline-block\", childClassName)}\n >\n {children}\n </span>\n );\n });\n\n if (animation === \"spec\") {\n return (\n <motion.div\n className={cn(\"ds:relative ds:-me-2.5 ds:inline-block\", className)}\n whileHover=\"hover\"\n initial=\"initial\"\n >\n <motion.div\n variants={{\n initial: { opacity: 0, y: 20, scale: 0 },\n hover: {\n opacity: 1,\n y: -5,\n scale: 1,\n transition: {\n type: \"tween\",\n duration: 0.2,\n ease: \"easeOut\",\n },\n },\n }}\n style={{\n translateX: translateX,\n rotate: rotate,\n whiteSpace: \"nowrap\",\n }}\n className={cn(\n \"ds:absolute ds:-top-2 ds:left-1/2 ds:z-50 ds:flex ds:-translate-x-1/2 ds:-translate-y-full ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-4 ds:py-2 ds:text-xs ds:shadow-xl\",\n tooltipColor\n )}\n >\n <div className=\"ds:relative ds:z-1\">{content}</div>\n </motion.div>\n\n <ChildComp />\n </motion.div>\n );\n }\n\n return (\n <TooltipProvider delayDuration={delayDuration}>\n <DsTooltip>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent\n {...props}\n side={position}\n sideOffset={sideOffset}\n className={cn(tooltipAnimation?.className, tooltipColor, {\n \"ds:[&>span>svg]:invisible\": noArrow,\n })}\n >\n {content}\n </TooltipContent>\n </DsTooltip>\n </TooltipProvider>\n );\n});\n"],"names":["Tooltip","React","content","children","sideOffset","delayDuration","className","childClassName","position","noArrow","animation","props","springConfig","tooltipAnimation","useMemo","animationClass","tooltipColor","x","useMotionValue","rotate","useSpring","useTransform","translateX","handleMouseMove","useCallback","event","halfWidth","ChildComp","jsx","cn","Fragment","jsxs","motion","TooltipProvider","DsTooltip","TooltipTrigger","TooltipContent"],"mappings":"+5DA6BaA,EAAUC,EAAM,KAAK,SAAiB,CACjD,QAAAC,EACA,SAAAC,EACA,WAAAC,EAAa,EACb,cAAAC,EAAgB,EAChB,UAAAC,EACA,eAAAC,EACA,SAAAC,EAAW,MACX,QAAAC,EAAU,GACV,UAAAC,EACA,GAAGC,CACL,EAAiB,CACf,MAAMC,EAAe,CAAE,UAAW,IAAK,QAAS,CAAA,EAE1CC,EAAmBC,EAAAA,QAAuC,IACvDC,EAAAA,eAAeL,EAAWJ,CAAS,EACzC,CAACI,EAAWJ,CAAS,CAAC,EAEnBU,EAAeF,EAAAA,QAAgB,IAAM,CACzC,OAAQH,EAAM,MAAA,CACZ,IAAK,UACH,MAAO,uFACT,IAAK,YACH,MAAO,+FACT,IAAK,OACH,MAAO,GACT,IAAK,QACH,MAAO,kFACT,IAAK,WACH,MAAO,8EACT,IAAK,UACH,MAAO,uFACT,IAAK,UACH,MAAO,uFACT,IAAK,QACH,MAAO,+EACT,IAAK,QACH,MAAO,6GACT,QACE,MAAO,maAAA,CAEb,EAAG,CAACA,GAAO,KAAK,CAAC,EAGXM,EAAIC,EAAAA,eAAe,CAAC,EAEpBC,EAASC,EAAAA,UACbC,EAAAA,aAAaJ,EAAG,CAAC,KAAM,GAAG,EAAG,CAAC,IAAK,EAAE,CAAC,EACtCL,CAAA,EAGIU,EAAaF,EAAAA,UACjBC,EAAAA,aAAaJ,EAAG,CAAC,KAAM,GAAG,EAAG,CAAC,IAAK,EAAE,CAAC,EACtCL,CAAA,EAGIW,EAAkBC,EAAAA,YACrBC,GAA4B,CAC3B,MAAMC,EAAaD,EAAM,OAAuB,YAAc,EAC9DR,EAAE,IAAIQ,EAAM,YAAY,QAAUC,CAAS,CAC7C,EACA,CAACT,CAAC,CAAA,EAGEU,EAAY1B,EAAM,KAAK,IACtBE,EAGHyB,EAAAA,IAAC,OAAA,CACC,YAAaL,EACb,UAAWM,EAAAA,GAAG,kBAAmBtB,CAAc,EAE9C,SAAAJ,CAAA,CAAA,EAPiByB,MAAAE,EAAAA,SAAA,CAAA,CAAE,CAUzB,EAED,OAAIpB,IAAc,OAEdqB,EAAAA,KAACC,EAAAA,OAAO,IAAP,CACC,UAAWH,EAAAA,GAAG,yCAA0CvB,CAAS,EACjE,WAAW,QACX,QAAQ,UAER,SAAA,CAAAsB,EAAAA,IAACI,EAAAA,OAAO,IAAP,CACC,SAAU,CACR,QAAS,CAAE,QAAS,EAAG,EAAG,GAAI,MAAO,CAAA,EACrC,MAAO,CACL,QAAS,EACT,EAAG,GACH,MAAO,EACP,WAAY,CACV,KAAM,QACN,SAAU,GACV,KAAM,SAAA,CACR,CACF,EAEF,MAAO,CACL,WAAAV,EACA,OAAAH,EACA,WAAY,QAAA,EAEd,UAAWU,EAAAA,GACT,iMACAb,CAAA,EAGF,SAAAY,EAAAA,IAAC,MAAA,CAAI,UAAU,qBAAsB,SAAA1B,CAAA,CAAQ,CAAA,CAAA,QAG9CyB,EAAA,CAAA,CAAU,CAAA,CAAA,CAAA,EAMfC,EAAAA,IAACK,EAAAA,gBAAA,CAAgB,cAAA5B,EACf,SAAA0B,OAACG,EAAAA,QAAA,CACC,SAAA,CAAAN,EAAAA,IAACO,EAAAA,eAAA,CAAe,QAAO,GAAE,SAAAhC,CAAA,CAAS,EAClCyB,EAAAA,IAACQ,EAAAA,eAAA,CACE,GAAGzB,EACJ,KAAMH,EACN,WAAAJ,EACA,UAAWyB,EAAAA,GAAGhB,GAAkB,UAAWG,EAAc,CACvD,4BAA6BP,CAAA,CAC9B,EAEA,SAAAP,CAAA,CAAA,CACH,CAAA,CACF,CAAA,CACF,CAEJ,CAAC"}
1
+ {"version":3,"file":"Tooltip.cjs","sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as React from \"react\";\nimport {\n Tooltip as DsTooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n type TooltipContentProps,\n} from \"@dsui/ui/components/tooltip\";\nimport { cn } from \"@dsui/ui/index\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"motion/react\";\nimport type { BasicAnimation, BasicColor } from \"@/types/variables\";\nimport { useMemo, useCallback } from \"react\";\nimport { animationClass } from \"@/utils/animations\";\n\ntype Color = BasicColor | \"dark\" | \"light\" | \"inverted\";\n\nexport type TooltipProps = TooltipContentProps & {\n content: React.ReactNode;\n children: React.ReactNode;\n sideOffset?: number;\n delayDuration?: number;\n position?: \"top\" | \"right\" | \"bottom\" | \"left\";\n className?: string;\n childClassName?: string;\n noArrow?: boolean;\n animation?: BasicAnimation;\n color?: Color;\n};\n\nexport const Tooltip = React.memo(function Tooltip({\n content,\n children,\n sideOffset = 4,\n delayDuration = 0,\n className,\n childClassName,\n position = \"top\",\n noArrow = false,\n animation,\n ...props\n}: TooltipProps) {\n const springConfig = { stiffness: 100, damping: 5 };\n\n const tooltipAnimation = useMemo<{ className?: string } | null>(() => {\n return animationClass(animation, className);\n }, [animation, className]);\n\n const tooltipColor = useMemo<string>(() => {\n switch (props.color) {\n case \"primary\":\n return \"ds:bg-primary ds:text-primary-foreground ds:[&>span>svg]:bg-primary ds:[&>span>svg]:fill-primary\";\n case \"secondary\":\n return \"ds:bg-secondary ds:text-secondary-foreground ds:[&>span>svg]:bg-secondary ds:[&>span>svg]:fill-secondary\";\n case \"dark\":\n return \"\";\n case \"light\":\n return \"ds:bg-neutral-200 ds:text-neutral-950 ds:[&_svg]:bg-neutral-200 ds:[&_svg]:fill-neutral-200\";\n case \"inverted\":\n return \"ds:dark:bg-white ds:dark:text-black ds:dark:[&_svg]:bg-white ds:dark:[&_svg]:fill-white\";\n case \"success\":\n return \"ds:bg-success ds:text-success-foreground ds:[&>span>svg]:bg-success ds:[&>span>svg]:fill-success\";\n case \"warning\":\n return \"ds:bg-warning ds:text-warning-foreground ds:[&>span>svg]:bg-warning ds:[&>span>svg]:fill-warning\";\n case \"error\":\n return \"ds:bg-error ds:text-error-foreground ds:[&>span>svg]:bg-error ds:[&>span>svg]:fill-error\";\n case \"glass\":\n return \"ds:bg-white/15 ds:text-foreground ds:backdrop-blur-sm ds:shadow-lg ds:[&>span>svg]:bg-white/15 ds:[&>span>svg]:fill-white/15\";\n default:\n return \"ds:bg-foreground ds:text-background ds:animate-in ds:fade-in-0 ds:zoom-in-95 ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=closed]:zoom-out-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:w-fit ds:origin-(--radix-tooltip-content-transform-origin) ds:rounded-md ds:px-3 ds:py-1.5 ds:text-xs ds:text-balance\";\n }\n }, [props?.color]);\n\n // on mouse move\n const x = useMotionValue(0);\n // rotate the tooltip\n const rotate = useSpring(\n useTransform(x, [-100, 100], [-45, 45]),\n springConfig\n );\n // translate the tooltip\n const translateX = useSpring(\n useTransform(x, [-100, 100], [-50, 50]),\n springConfig\n );\n\n const handleMouseMove = useCallback(\n (event: React.MouseEvent) => {\n const halfWidth = (event.target as HTMLElement).offsetWidth / 2;\n x.set(event.nativeEvent.offsetX - halfWidth);\n },\n [x]\n );\n\n const ChildComp = React.memo(() => {\n if (!children) return <></>;\n\n return (\n <span\n onMouseMove={handleMouseMove}\n className={cn(\"ds:inline-block\", childClassName)}\n >\n {children}\n </span>\n );\n });\n\n if (animation === \"spec\") {\n return (\n <motion.div\n className={cn(\"ds:relative ds:-me-2.5 ds:inline-block\", className)}\n whileHover=\"hover\"\n initial=\"initial\"\n >\n <motion.div\n variants={{\n initial: { opacity: 0, y: 20, scale: 0 },\n hover: {\n opacity: 1,\n y: -5,\n scale: 1,\n transition: {\n type: \"tween\",\n duration: 0.2,\n ease: \"easeOut\",\n },\n },\n }}\n style={{\n translateX: translateX,\n rotate: rotate,\n whiteSpace: \"nowrap\",\n }}\n className={cn(\n \"ds:absolute ds:-top-2 ds:left-1/2 ds:z-50 ds:flex ds:-translate-x-1/2 ds:-translate-y-full ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-4 ds:py-2 ds:text-xs ds:shadow-xl\",\n tooltipColor\n )}\n >\n <div className=\"ds:relative ds:z-1\">{content}</div>\n </motion.div>\n\n <ChildComp />\n </motion.div>\n );\n }\n\n return (\n <TooltipProvider delayDuration={delayDuration}>\n <DsTooltip>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent\n {...props}\n side={position}\n sideOffset={sideOffset}\n className={cn(tooltipAnimation?.className, tooltipColor, {\n \"ds:[&>span>svg]:invisible\": noArrow,\n })}\n >\n {content}\n </TooltipContent>\n </DsTooltip>\n </TooltipProvider>\n );\n});\n"],"names":["Tooltip","React","content","children","sideOffset","delayDuration","className","childClassName","position","noArrow","animation","props","springConfig","tooltipAnimation","useMemo","animationClass","tooltipColor","x","useMotionValue","rotate","useSpring","useTransform","translateX","handleMouseMove","useCallback","event","halfWidth","ChildComp","jsx","cn","Fragment","jsxs","motion","TooltipProvider","DsTooltip","TooltipTrigger","TooltipContent"],"mappings":"+5DA6BaA,EAAUC,EAAM,KAAK,SAAiB,CACjD,QAAAC,EACA,SAAAC,EACA,WAAAC,EAAa,EACb,cAAAC,EAAgB,EAChB,UAAAC,EACA,eAAAC,EACA,SAAAC,EAAW,MACX,QAAAC,EAAU,GACV,UAAAC,EACA,GAAGC,CACL,EAAiB,CACf,MAAMC,EAAe,CAAE,UAAW,IAAK,QAAS,CAAA,EAE1CC,EAAmBC,EAAAA,QAAuC,IACvDC,EAAAA,eAAeL,EAAWJ,CAAS,EACzC,CAACI,EAAWJ,CAAS,CAAC,EAEnBU,EAAeF,EAAAA,QAAgB,IAAM,CACzC,OAAQH,EAAM,MAAA,CACZ,IAAK,UACH,MAAO,mGACT,IAAK,YACH,MAAO,2GACT,IAAK,OACH,MAAO,GACT,IAAK,QACH,MAAO,8FACT,IAAK,WACH,MAAO,0FACT,IAAK,UACH,MAAO,mGACT,IAAK,UACH,MAAO,mGACT,IAAK,QACH,MAAO,2FACT,IAAK,QACH,MAAO,+HACT,QACE,MAAO,+dAAA,CAEb,EAAG,CAACA,GAAO,KAAK,CAAC,EAGXM,EAAIC,EAAAA,eAAe,CAAC,EAEpBC,EAASC,EAAAA,UACbC,EAAAA,aAAaJ,EAAG,CAAC,KAAM,GAAG,EAAG,CAAC,IAAK,EAAE,CAAC,EACtCL,CAAA,EAGIU,EAAaF,EAAAA,UACjBC,EAAAA,aAAaJ,EAAG,CAAC,KAAM,GAAG,EAAG,CAAC,IAAK,EAAE,CAAC,EACtCL,CAAA,EAGIW,EAAkBC,EAAAA,YACrBC,GAA4B,CAC3B,MAAMC,EAAaD,EAAM,OAAuB,YAAc,EAC9DR,EAAE,IAAIQ,EAAM,YAAY,QAAUC,CAAS,CAC7C,EACA,CAACT,CAAC,CAAA,EAGEU,EAAY1B,EAAM,KAAK,IACtBE,EAGHyB,EAAAA,IAAC,OAAA,CACC,YAAaL,EACb,UAAWM,EAAAA,GAAG,kBAAmBtB,CAAc,EAE9C,SAAAJ,CAAA,CAAA,EAPiByB,MAAAE,EAAAA,SAAA,CAAA,CAAE,CAUzB,EAED,OAAIpB,IAAc,OAEdqB,EAAAA,KAACC,EAAAA,OAAO,IAAP,CACC,UAAWH,EAAAA,GAAG,yCAA0CvB,CAAS,EACjE,WAAW,QACX,QAAQ,UAER,SAAA,CAAAsB,EAAAA,IAACI,EAAAA,OAAO,IAAP,CACC,SAAU,CACR,QAAS,CAAE,QAAS,EAAG,EAAG,GAAI,MAAO,CAAA,EACrC,MAAO,CACL,QAAS,EACT,EAAG,GACH,MAAO,EACP,WAAY,CACV,KAAM,QACN,SAAU,GACV,KAAM,SAAA,CACR,CACF,EAEF,MAAO,CACL,WAAAV,EACA,OAAAH,EACA,WAAY,QAAA,EAEd,UAAWU,EAAAA,GACT,iMACAb,CAAA,EAGF,SAAAY,EAAAA,IAAC,MAAA,CAAI,UAAU,qBAAsB,SAAA1B,CAAA,CAAQ,CAAA,CAAA,QAG9CyB,EAAA,CAAA,CAAU,CAAA,CAAA,CAAA,EAMfC,EAAAA,IAACK,EAAAA,gBAAA,CAAgB,cAAA5B,EACf,SAAA0B,OAACG,EAAAA,QAAA,CACC,SAAA,CAAAN,EAAAA,IAACO,EAAAA,eAAA,CAAe,QAAO,GAAE,SAAAhC,CAAA,CAAS,EAClCyB,EAAAA,IAACQ,EAAAA,eAAA,CACE,GAAGzB,EACJ,KAAMH,EACN,WAAAJ,EACA,UAAWyB,EAAAA,GAAGhB,GAAkB,UAAWG,EAAc,CACvD,4BAA6BP,CAAA,CAC9B,EAEA,SAAAP,CAAA,CAAA,CACH,CAAA,CACF,CAAA,CACF,CAEJ,CAAC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),n=require("react");require("@radix-ui/react-slot");require("../packages/ui/src/components/button.cjs");require("../packages/ui/src/components/button-group.cjs");require("../packages/ui/src/components/input.cjs");require("../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const T=require("../packages/ui/src/lib/utils.cjs");require("../packages/ui/src/components/select.cjs");require("../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("lucide-react");require("react-day-picker");require("../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../packages/ui/src/components/badge.cjs");require("../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../packages/ui/src/components/input-otp.cjs");require("../packages/ui/src/components/radio-group.cjs");require("../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../packages/ui/src/components/tabs.cjs");require("../packages/ui/src/components/toggle.cjs");function E(r){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const o in r)if(o!=="default"){const a=Object.getOwnPropertyDescriptor(r,o);Object.defineProperty(t,o,a.get?a:{enumerable:!0,get:()=>r[o]})}}return t.default=r,Object.freeze(t)}const I=E(n),_=r=>String(r).padStart(2,"0"),z=(r="primary")=>({primary:"text-primary",secondary:"text-secondary",accent:"text-accent",destructive:"text-destructive",muted:"text-muted-foreground",success:"text-success",error:"text-error",warning:"text-warning",foreground:"text-foreground"})[r],j=n.memo(I.forwardRef(({items:r,value:t,onChange:o,timeLabel:a,itemClassName:H,isItemDisabled:b,disabled:g,color:N="primary"},p)=>{const c=n.useRef(null),d=n.useRef(null),[M,C]=n.useState(0),x=n.useCallback(()=>{if(!d.current||g)return;const e=d.current,l=e.scrollTop;C(l),c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{const u=e.scrollTop,s=40,f=e.clientHeight,q=f/2,v=u-120+q;let m=r[0],y=1/0;if(r.forEach((S,h)=>{const R=h*s+s/2,k=Math.abs(R-v);k<y&&(y=k,m=S)}),!b(m))if(m!==t)o(m);else{const h=120+r.indexOf(m)*s-f/2+s/2;Math.abs(e.scrollTop-h)>5&&e.scrollTo({top:h,behavior:"smooth"})}},100)},[r,t,o,b,g]);n.useEffect(()=>{const e=d.current;if(e)return e.addEventListener("scroll",x,{passive:!0}),()=>{e.removeEventListener("scroll",x),c.current&&clearTimeout(c.current)}},[x]),n.useEffect(()=>{if(d.current&&t!==void 0){const e=r.indexOf(t);if(e!==-1){const u=d.current.clientHeight,s=120+e*40-u/2+40/2;d.current.scrollTo({top:s,behavior:"smooth"})}}},[t,r]),n.useEffect(()=>()=>{c.current&&clearTimeout(c.current)},[]);const O=(e,l)=>{const q=120+e*40+20,w=Math.abs(q-(M+128)),v=256/2;return{opacity:Math.max(.3,1-w/v*.7),fontSize:l?"1.3rem":"1rem",transition:"opacity 0.2s ease, transform 0.2s ease"}};return i.jsxs("div",{className:"ds:flex ds:flex-col ds:items-center ds:gap-2 ds:w-full ds:h-full ds:max-h-72",children:[a&&i.jsx("div",{className:"ds:text-xs ds:font-semibold ds:text-muted-foreground ds:uppercase ds:p-2 ds:border-b ds:w-full ds:text-center ds:h-8",children:a}),i.jsxs("div",{className:T.cn("ds:relative ds:w-full",a?"ds:h-[calc(100%_-_2rem)]":" ds:h-full"),children:[i.jsx("div",{className:"ds:absolute ds:top-1/2 ds:left-0 ds:right-0 ds:h-10 ds:-translate-y-1/2 ds:border-t ds:border-b ds:border-border ds:pointer-events-none ds:z-10"}),i.jsxs("div",{ref:e=>{d.current=e,typeof p=="function"?p(e):p&&(p.current=e)},className:T.cn("ds:relative ds:h-full ds:w-full ds:min-w-20 ds:min-h-60 ds:overflow-y-scroll ds:scroll-smooth","ds:[&::-webkit-scrollbar]:w-1 ds:[&::-webkit-scrollbar-track]:bg-transparent","ds:[&::-webkit-scrollbar-thumb]:bg-border ds:[&::-webkit-scrollbar-thumb]:rounded","ds:flex ds:flex-col ds:snap-y ds:snap-mandatory",H),style:{maskImage:"linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)",WebkitMaskImage:"linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)"},children:[i.jsx("div",{className:"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0"}),r.map((e,l)=>{const u=b(e),s=t!==void 0&&e===t,f=O(l,s);return i.jsx("div",{onClick:g||u?void 0:()=>o(e),"data-selected":s||void 0,className:T.cn("ds:h-10 ds:flex-shrink-0 ds:flex ds:items-center ds:justify-center ds:transition-all ds:snap-center","ds:cursor-pointer ds:text-lg ds:font-medium ds:select-none","ds:disabled:opacity-30 ds:disabled:cursor-not-allowed ds:disabled:line-through",s?`${z(N)} ds:font-bold`:"ds:text-muted-foreground"),style:f,children:_(e)},e)}),i.jsx("div",{className:"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0"})]})]})]})}));j.displayName="TimeColumnwheel";exports.TimeColumnwheel=j;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),n=require("react");require("@radix-ui/react-slot");require("../packages/ui/src/components/button.cjs");require("../packages/ui/src/components/button-group.cjs");require("../packages/ui/src/components/input.cjs");require("../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const T=require("../packages/ui/src/lib/utils.cjs");require("../packages/ui/src/components/select.cjs");require("../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("lucide-react");require("react-day-picker");require("../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../packages/ui/src/components/badge.cjs");require("../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../packages/ui/src/components/input-otp.cjs");require("../packages/ui/src/components/radio-group.cjs");require("../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../packages/ui/src/components/tabs.cjs");require("../packages/ui/src/components/toggle.cjs");function E(r){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const o in r)if(o!=="default"){const a=Object.getOwnPropertyDescriptor(r,o);Object.defineProperty(t,o,a.get?a:{enumerable:!0,get:()=>r[o]})}}return t.default=r,Object.freeze(t)}const I=E(n),_=r=>String(r).padStart(2,"0"),z=(r="primary")=>({primary:"ds:text-primary",secondary:"ds:text-secondary",accent:"ds:text-accent",destructive:"ds:text-destructive",muted:"ds:text-muted-foreground",success:"ds:text-success",error:"ds:text-error",warning:"ds:text-warning",foreground:"ds:text-foreground"})[r],j=n.memo(I.forwardRef(({items:r,value:t,onChange:o,timeLabel:a,itemClassName:H,isItemDisabled:b,disabled:g,color:N="primary"},p)=>{const c=n.useRef(null),d=n.useRef(null),[M,C]=n.useState(0),x=n.useCallback(()=>{if(!d.current||g)return;const e=d.current,l=e.scrollTop;C(l),c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{const u=e.scrollTop,s=40,f=e.clientHeight,q=f/2,v=u-120+q;let m=r[0],y=1/0;if(r.forEach((S,h)=>{const R=h*s+s/2,k=Math.abs(R-v);k<y&&(y=k,m=S)}),!b(m))if(m!==t)o(m);else{const h=120+r.indexOf(m)*s-f/2+s/2;Math.abs(e.scrollTop-h)>5&&e.scrollTo({top:h,behavior:"smooth"})}},100)},[r,t,o,b,g]);n.useEffect(()=>{const e=d.current;if(e)return e.addEventListener("scroll",x,{passive:!0}),()=>{e.removeEventListener("scroll",x),c.current&&clearTimeout(c.current)}},[x]),n.useEffect(()=>{if(d.current&&t!==void 0){const e=r.indexOf(t);if(e!==-1){const u=d.current.clientHeight,s=120+e*40-u/2+40/2;d.current.scrollTo({top:s,behavior:"smooth"})}}},[t,r]),n.useEffect(()=>()=>{c.current&&clearTimeout(c.current)},[]);const O=(e,l)=>{const q=120+e*40+20,w=Math.abs(q-(M+128)),v=256/2;return{opacity:Math.max(.3,1-w/v*.7),fontSize:l?"1.3rem":"1rem",transition:"opacity 0.2s ease, transform 0.2s ease"}};return i.jsxs("div",{className:"ds:flex ds:flex-col ds:items-center ds:gap-2 ds:w-full ds:h-full ds:max-h-72",children:[a&&i.jsx("div",{className:"ds:text-xs ds:font-semibold ds:text-muted-foreground ds:uppercase ds:p-2 ds:border-b ds:w-full ds:text-center ds:h-8",children:a}),i.jsxs("div",{className:T.cn("ds:relative ds:w-full",a?"ds:h-[calc(100%_-_2rem)]":" ds:h-full"),children:[i.jsx("div",{className:"ds:absolute ds:top-1/2 ds:left-0 ds:right-0 ds:h-10 ds:-translate-y-1/2 ds:border-t ds:border-b ds:border-border ds:pointer-events-none ds:z-10"}),i.jsxs("div",{ref:e=>{d.current=e,typeof p=="function"?p(e):p&&(p.current=e)},className:T.cn("ds:relative ds:h-full ds:w-full ds:min-w-20 ds:min-h-60 ds:overflow-y-scroll ds:scroll-smooth","ds:[&::-webkit-scrollbar]:w-1 ds:[&::-webkit-scrollbar-track]:bg-transparent","ds:[&::-webkit-scrollbar-thumb]:bg-border ds:[&::-webkit-scrollbar-thumb]:rounded","ds:flex ds:flex-col ds:snap-y ds:snap-mandatory",H),style:{maskImage:"linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)",WebkitMaskImage:"linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)"},children:[i.jsx("div",{className:"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0"}),r.map((e,l)=>{const u=b(e),s=t!==void 0&&e===t,f=O(l,s);return i.jsx("div",{onClick:g||u?void 0:()=>o(e),"data-selected":s||void 0,className:T.cn("ds:h-10 ds:flex-shrink-0 ds:flex ds:items-center ds:justify-center ds:transition-all ds:snap-center","ds:cursor-pointer ds:text-lg ds:font-medium ds:select-none","ds:disabled:opacity-30 ds:disabled:cursor-not-allowed ds:disabled:line-through",s?`${z(N)} ds:font-bold`:"ds:text-muted-foreground"),style:f,children:_(e)},e)}),i.jsx("div",{className:"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0"})]})]})]})}));j.displayName="TimeColumnwheel";exports.TimeColumnwheel=j;
2
2
  //# sourceMappingURL=WheelColumn.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"WheelColumn.cjs","sources":["../../../src/components/WheelColumn.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time picker items\nconst getColorClass = (color: CalendarColor = \"primary\"): string => {\n const colorMap = {\n primary: \"text-primary\",\n secondary: \"text-secondary\",\n accent: \"text-accent\",\n destructive: \"text-destructive\",\n muted: \"text-muted-foreground\",\n success: \"text-success\",\n error: \"text-error\",\n warning: \"text-warning\",\n foreground: \"text-foreground\",\n };\n return colorMap[color];\n};\n\ntype TimeColumnwheelProps = {\n items: number[];\n value: number | undefined;\n onChange: (val: number) => void;\n timeLabel?: string;\n itemClassName?: string;\n isItemDisabled: (item: number) => boolean;\n disabled: boolean;\n color?: CalendarColor;\n};\n\nexport const TimeColumnwheel = memo(\n React.forwardRef<HTMLDivElement, TimeColumnwheelProps>(\n (\n {\n items,\n value: selectedValue,\n onChange: onChangeCol,\n timeLabel,\n itemClassName,\n isItemDisabled,\n disabled,\n color = \"primary\",\n },\n ref\n ) => {\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n // Debounced scroll handler\n const handleScroll = useCallback(() => {\n if (!containerRef.current || disabled) return;\n\n const container = containerRef.current;\n const currentScrollTop = container.scrollTop;\n setScrollTop(currentScrollTop);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new timer\n debounceTimerRef.current = setTimeout(() => {\n const scrollTop = container.scrollTop;\n const itemHeight = 40; // h-10 = 40px\n const containerHeight = container.clientHeight;\n const dividerCenter = containerHeight / 2; // Divider lines ở giữa container\n\n // Calculate which item is at the divider center\n // Account for top spacer (h-30 = 120px)\n const adjustedScrollTop = scrollTop - 120;\n const dividerPosition = adjustedScrollTop + dividerCenter;\n\n // Find the item whose center is closest to divider center\n let closestItem = items[0];\n let minDistance = Infinity;\n\n items.forEach((item, index) => {\n const itemTop = index * itemHeight;\n const itemCenter = itemTop + itemHeight / 2;\n const distance = Math.abs(itemCenter - dividerPosition);\n\n if (distance < minDistance) {\n minDistance = distance;\n closestItem = item;\n }\n });\n\n // Only trigger change if different from current value and not disabled\n if (!isItemDisabled(closestItem)) {\n // Always update if item is different, or snap to correct position\n if (closestItem !== selectedValue) {\n onChangeCol(closestItem);\n } else {\n // Re-trigger to ensure input reflects the snapped value\n // This handles cases where user scrolled slightly but ended on same value\n const itemIndex = items.indexOf(closestItem);\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n if (Math.abs(container.scrollTop - targetScrollTop) > 5) {\n container.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }\n }, 100); // 100ms debounce for faster response\n }, [items, selectedValue, onChangeCol, isItemDisabled, disabled]);\n\n // Set up scroll listener\n useEffect(() => {\n const container = containerRef.current;\n if (container) {\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n container.removeEventListener(\"scroll\", handleScroll);\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }\n }, [handleScroll]);\n\n // Scroll to selected value when it changes or on mount\n useEffect(() => {\n if (containerRef.current && selectedValue !== undefined) {\n const itemIndex = items.indexOf(selectedValue);\n if (itemIndex !== -1) {\n const itemHeight = 40;\n const containerHeight = containerRef.current.clientHeight;\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n containerRef.current.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedValue, items]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const getItemStyle = (index: number, isSelected: boolean) => {\n const itemHeight = 40;\n const containerHeight = 256; // h-64 = 256px\n const centerY = containerHeight / 2;\n const itemCenterY = 120 + index * itemHeight + itemHeight / 2; // 120px spacer + item position\n const distanceFromCenter = Math.abs(\n itemCenterY - (scrollTop + centerY)\n );\n const maxDistance = containerHeight / 2;\n\n // Calculate opacity and scale based on distance\n const opacity = Math.max(\n 0.3,\n 1 - (distanceFromCenter / maxDistance) * 0.7\n );\n const fontSize = isSelected ? \"1.3rem\" : \"1rem\";\n\n return {\n opacity,\n fontSize,\n transition: \"opacity 0.2s ease, transform 0.2s ease\",\n };\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-2 ds:w-full ds:h-full ds:max-h-72\">\n {timeLabel && (\n <div className=\"ds:text-xs ds:font-semibold ds:text-muted-foreground ds:uppercase ds:p-2 ds:border-b ds:w-full ds:text-center ds:h-8\">\n {timeLabel}\n </div>\n )}\n <div\n className={cn(\n \"ds:relative ds:w-full\",\n timeLabel ? \"ds:h-[calc(100%_-_2rem)]\" : \" ds:h-full\"\n )}\n >\n {/* wheel style divider lines */}\n <div className=\"ds:absolute ds:top-1/2 ds:left-0 ds:right-0 ds:h-10 ds:-translate-y-1/2 ds:border-t ds:border-b ds:border-border ds:pointer-events-none ds:z-10\" />\n\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n className={cn(\n \"ds:relative ds:h-full ds:w-full ds:min-w-20 ds:min-h-60 ds:overflow-y-scroll ds:scroll-smooth\",\n \"ds:[&::-webkit-scrollbar]:w-1 ds:[&::-webkit-scrollbar-track]:bg-transparent\",\n \"ds:[&::-webkit-scrollbar-thumb]:bg-border ds:[&::-webkit-scrollbar-thumb]:rounded\",\n \"ds:flex ds:flex-col ds:snap-y ds:snap-mandatory\",\n itemClassName\n )}\n style={{\n maskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n WebkitMaskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n }}\n >\n {/* Spacer Top */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n\n {items.map((item, index) => {\n const itemDisabled = isItemDisabled(item);\n const isSelected =\n selectedValue !== undefined && item === selectedValue;\n const itemStyle = getItemStyle(index, isSelected);\n\n return (\n <div\n key={item}\n onClick={\n disabled || itemDisabled\n ? undefined\n : () => onChangeCol(item)\n }\n data-selected={isSelected || undefined}\n className={cn(\n \"ds:h-10 ds:flex-shrink-0 ds:flex ds:items-center ds:justify-center ds:transition-all ds:snap-center\",\n \"ds:cursor-pointer ds:text-lg ds:font-medium ds:select-none\",\n \"ds:disabled:opacity-30 ds:disabled:cursor-not-allowed ds:disabled:line-through\",\n isSelected\n ? `${getColorClass(color)} ds:font-bold`\n : \"ds:text-muted-foreground\"\n )}\n style={itemStyle}\n >\n {pad(item)}\n </div>\n );\n })}\n\n {/* Spacer Bottom */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n </div>\n </div>\n </div>\n );\n }\n )\n);\n\nTimeColumnwheel.displayName = \"TimeColumnwheel\";\n"],"names":["pad","num","getColorClass","color","TimeColumnwheel","memo","React","items","selectedValue","onChangeCol","timeLabel","itemClassName","isItemDisabled","disabled","ref","debounceTimerRef","useRef","containerRef","scrollTop","setScrollTop","useState","handleScroll","useCallback","container","currentScrollTop","itemHeight","containerHeight","dividerCenter","dividerPosition","closestItem","minDistance","item","index","itemCenter","distance","targetScrollTop","useEffect","itemIndex","getItemStyle","isSelected","itemCenterY","distanceFromCenter","maxDistance","jsxs","jsx","cn","el","itemDisabled","itemStyle"],"mappings":"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"}
1
+ {"version":3,"file":"WheelColumn.cjs","sources":["../../../src/components/WheelColumn.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time picker items\nconst getColorClass = (color: CalendarColor = \"primary\"): string => {\n const colorMap = {\n primary: \"ds:text-primary\",\n secondary: \"ds:text-secondary\",\n accent: \"ds:text-accent\",\n destructive: \"ds:text-destructive\",\n muted: \"ds:text-muted-foreground\",\n success: \"ds:text-success\",\n error: \"ds:text-error\",\n warning: \"ds:text-warning\",\n foreground: \"ds:text-foreground\",\n };\n return colorMap[color];\n};\n\ntype TimeColumnwheelProps = {\n items: number[];\n value: number | undefined;\n onChange: (val: number) => void;\n timeLabel?: string;\n itemClassName?: string;\n isItemDisabled: (item: number) => boolean;\n disabled: boolean;\n color?: CalendarColor;\n};\n\nexport const TimeColumnwheel = memo(\n React.forwardRef<HTMLDivElement, TimeColumnwheelProps>(\n (\n {\n items,\n value: selectedValue,\n onChange: onChangeCol,\n timeLabel,\n itemClassName,\n isItemDisabled,\n disabled,\n color = \"primary\",\n },\n ref\n ) => {\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n // Debounced scroll handler\n const handleScroll = useCallback(() => {\n if (!containerRef.current || disabled) return;\n\n const container = containerRef.current;\n const currentScrollTop = container.scrollTop;\n setScrollTop(currentScrollTop);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new timer\n debounceTimerRef.current = setTimeout(() => {\n const scrollTop = container.scrollTop;\n const itemHeight = 40; // h-10 = 40px\n const containerHeight = container.clientHeight;\n const dividerCenter = containerHeight / 2; // Divider lines ở giữa container\n\n // Calculate which item is at the divider center\n // Account for top spacer (h-30 = 120px)\n const adjustedScrollTop = scrollTop - 120;\n const dividerPosition = adjustedScrollTop + dividerCenter;\n\n // Find the item whose center is closest to divider center\n let closestItem = items[0];\n let minDistance = Infinity;\n\n items.forEach((item, index) => {\n const itemTop = index * itemHeight;\n const itemCenter = itemTop + itemHeight / 2;\n const distance = Math.abs(itemCenter - dividerPosition);\n\n if (distance < minDistance) {\n minDistance = distance;\n closestItem = item;\n }\n });\n\n // Only trigger change if different from current value and not disabled\n if (!isItemDisabled(closestItem)) {\n // Always update if item is different, or snap to correct position\n if (closestItem !== selectedValue) {\n onChangeCol(closestItem);\n } else {\n // Re-trigger to ensure input reflects the snapped value\n // This handles cases where user scrolled slightly but ended on same value\n const itemIndex = items.indexOf(closestItem);\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n if (Math.abs(container.scrollTop - targetScrollTop) > 5) {\n container.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }\n }, 100); // 100ms debounce for faster response\n }, [items, selectedValue, onChangeCol, isItemDisabled, disabled]);\n\n // Set up scroll listener\n useEffect(() => {\n const container = containerRef.current;\n if (container) {\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n container.removeEventListener(\"scroll\", handleScroll);\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }\n }, [handleScroll]);\n\n // Scroll to selected value when it changes or on mount\n useEffect(() => {\n if (containerRef.current && selectedValue !== undefined) {\n const itemIndex = items.indexOf(selectedValue);\n if (itemIndex !== -1) {\n const itemHeight = 40;\n const containerHeight = containerRef.current.clientHeight;\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n containerRef.current.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedValue, items]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const getItemStyle = (index: number, isSelected: boolean) => {\n const itemHeight = 40;\n const containerHeight = 256; // h-64 = 256px\n const centerY = containerHeight / 2;\n const itemCenterY = 120 + index * itemHeight + itemHeight / 2; // 120px spacer + item position\n const distanceFromCenter = Math.abs(\n itemCenterY - (scrollTop + centerY)\n );\n const maxDistance = containerHeight / 2;\n\n // Calculate opacity and scale based on distance\n const opacity = Math.max(\n 0.3,\n 1 - (distanceFromCenter / maxDistance) * 0.7\n );\n const fontSize = isSelected ? \"1.3rem\" : \"1rem\";\n\n return {\n opacity,\n fontSize,\n transition: \"opacity 0.2s ease, transform 0.2s ease\",\n };\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-2 ds:w-full ds:h-full ds:max-h-72\">\n {timeLabel && (\n <div className=\"ds:text-xs ds:font-semibold ds:text-muted-foreground ds:uppercase ds:p-2 ds:border-b ds:w-full ds:text-center ds:h-8\">\n {timeLabel}\n </div>\n )}\n <div\n className={cn(\n \"ds:relative ds:w-full\",\n timeLabel ? \"ds:h-[calc(100%_-_2rem)]\" : \" ds:h-full\"\n )}\n >\n {/* wheel style divider lines */}\n <div className=\"ds:absolute ds:top-1/2 ds:left-0 ds:right-0 ds:h-10 ds:-translate-y-1/2 ds:border-t ds:border-b ds:border-border ds:pointer-events-none ds:z-10\" />\n\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n className={cn(\n \"ds:relative ds:h-full ds:w-full ds:min-w-20 ds:min-h-60 ds:overflow-y-scroll ds:scroll-smooth\",\n \"ds:[&::-webkit-scrollbar]:w-1 ds:[&::-webkit-scrollbar-track]:bg-transparent\",\n \"ds:[&::-webkit-scrollbar-thumb]:bg-border ds:[&::-webkit-scrollbar-thumb]:rounded\",\n \"ds:flex ds:flex-col ds:snap-y ds:snap-mandatory\",\n itemClassName\n )}\n style={{\n maskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n WebkitMaskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n }}\n >\n {/* Spacer Top */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n\n {items.map((item, index) => {\n const itemDisabled = isItemDisabled(item);\n const isSelected =\n selectedValue !== undefined && item === selectedValue;\n const itemStyle = getItemStyle(index, isSelected);\n\n return (\n <div\n key={item}\n onClick={\n disabled || itemDisabled\n ? undefined\n : () => onChangeCol(item)\n }\n data-selected={isSelected || undefined}\n className={cn(\n \"ds:h-10 ds:flex-shrink-0 ds:flex ds:items-center ds:justify-center ds:transition-all ds:snap-center\",\n \"ds:cursor-pointer ds:text-lg ds:font-medium ds:select-none\",\n \"ds:disabled:opacity-30 ds:disabled:cursor-not-allowed ds:disabled:line-through\",\n isSelected\n ? `${getColorClass(color)} ds:font-bold`\n : \"ds:text-muted-foreground\"\n )}\n style={itemStyle}\n >\n {pad(item)}\n </div>\n );\n })}\n\n {/* Spacer Bottom */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n </div>\n </div>\n </div>\n );\n }\n )\n);\n\nTimeColumnwheel.displayName = \"TimeColumnwheel\";\n"],"names":["pad","num","getColorClass","color","TimeColumnwheel","memo","React","items","selectedValue","onChangeCol","timeLabel","itemClassName","isItemDisabled","disabled","ref","debounceTimerRef","useRef","containerRef","scrollTop","setScrollTop","useState","handleScroll","useCallback","container","currentScrollTop","itemHeight","containerHeight","dividerCenter","dividerPosition","closestItem","minDistance","item","index","itemCenter","distance","targetScrollTop","useEffect","itemIndex","getItemStyle","isSelected","itemCenterY","distanceFromCenter","maxDistance","jsxs","jsx","cn","el","itemDisabled","itemStyle"],"mappings":"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"}