@egose/shadcn-theme 0.1.6 → 0.1.7

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 (92) hide show
  1. package/chunk-2NUE7GJ3.js +44 -0
  2. package/chunk-2NUE7GJ3.js.map +1 -0
  3. package/chunk-3PZY5HRH.mjs +82 -0
  4. package/chunk-3PZY5HRH.mjs.map +1 -0
  5. package/{components/ui/extension/multi-select.js → chunk-3TG6ZVFG.js} +63 -62
  6. package/chunk-3TG6ZVFG.js.map +1 -0
  7. package/{components/ui/extension/multi-select.mjs → chunk-7JYFZETL.mjs} +64 -63
  8. package/chunk-7JYFZETL.mjs.map +1 -0
  9. package/chunk-FSU3BKPK.js +130 -0
  10. package/chunk-FSU3BKPK.js.map +1 -0
  11. package/{chunk-3ZN766EW.js → chunk-G6WKPZTL.js} +3 -3
  12. package/{chunk-3ZN766EW.js.map → chunk-G6WKPZTL.js.map} +1 -1
  13. package/chunk-IQIHYWXX.js +83 -0
  14. package/chunk-IQIHYWXX.js.map +1 -0
  15. package/{chunk-AJLAS62X.js → chunk-LAIO3QZX.js} +4 -4
  16. package/{chunk-AJLAS62X.js.map → chunk-LAIO3QZX.js.map} +1 -1
  17. package/{chunk-MJT6B7OJ.js → chunk-LPDYWZN6.js} +3 -3
  18. package/{chunk-MJT6B7OJ.js.map → chunk-LPDYWZN6.js.map} +1 -1
  19. package/{chunk-432PQWGO.mjs → chunk-RJVQU443.mjs} +2 -2
  20. package/chunk-USW6AILM.mjs +43 -0
  21. package/chunk-USW6AILM.mjs.map +1 -0
  22. package/{chunk-HKZRXGJ7.mjs → chunk-YDRPNCWF.mjs} +4 -4
  23. package/{chunk-ZMMYQNQV.mjs → chunk-ZFBUIBJH.mjs} +2 -2
  24. package/chunk-ZQK6REIM.mjs +129 -0
  25. package/chunk-ZQK6REIM.mjs.map +1 -0
  26. package/components/form/hook-multi-select.d.mts +14 -0
  27. package/components/form/hook-multi-select.d.ts +14 -0
  28. package/components/form/hook-multi-select.js +76 -0
  29. package/components/form/hook-multi-select.js.map +1 -0
  30. package/components/form/hook-multi-select.mjs +75 -0
  31. package/components/form/hook-multi-select.mjs.map +1 -0
  32. package/components/form/hook-searchable-select.js +5 -5
  33. package/components/form/hook-searchable-select.mjs +4 -4
  34. package/components/form/hook-tag-picker.d.mts +12 -0
  35. package/components/form/hook-tag-picker.d.ts +12 -0
  36. package/components/form/hook-tag-picker.js +66 -0
  37. package/components/form/hook-tag-picker.js.map +1 -0
  38. package/components/form/hook-tag-picker.mjs +65 -0
  39. package/components/form/hook-tag-picker.mjs.map +1 -0
  40. package/components/form/multi-select.d.mts +25 -1
  41. package/components/form/multi-select.d.ts +25 -1
  42. package/components/form/multi-select.js +20 -1
  43. package/components/form/multi-select.js.map +1 -1
  44. package/components/form/multi-select.mjs +19 -0
  45. package/components/form/searchable-select.js +5 -5
  46. package/components/form/searchable-select.mjs +4 -4
  47. package/components/form/tag-picker.d.mts +21 -0
  48. package/components/form/tag-picker.d.ts +21 -0
  49. package/components/form/tag-picker.js +14 -0
  50. package/components/form/tag-picker.js.map +1 -0
  51. package/components/form/tag-picker.mjs +13 -0
  52. package/components/form/tag-picker.mjs.map +1 -0
  53. package/components/ui/combobox.js +5 -5
  54. package/components/ui/combobox.mjs +2 -2
  55. package/components/ui/command.js +4 -4
  56. package/components/ui/command.mjs +3 -3
  57. package/components/ui/input-group.js +3 -3
  58. package/components/ui/input-group.mjs +2 -2
  59. package/components/ui/{extension/multi-select.d.mts → multi-select.d.mts} +4 -3
  60. package/components/ui/{extension/multi-select.d.ts → multi-select.d.ts} +4 -3
  61. package/components/ui/multi-select.js +29 -0
  62. package/components/ui/multi-select.js.map +1 -0
  63. package/components/ui/multi-select.mjs +28 -0
  64. package/components/ui/multi-select.mjs.map +1 -0
  65. package/components/ui/tag-picker.d.mts +14 -0
  66. package/components/ui/tag-picker.d.ts +14 -0
  67. package/components/ui/tag-picker.js +12 -0
  68. package/components/ui/tag-picker.js.map +1 -0
  69. package/components/ui/tag-picker.mjs +11 -0
  70. package/components/ui/tag-picker.mjs.map +1 -0
  71. package/components/widgets/dialog-manager/index.js +1 -1
  72. package/components/widgets/dialog-manager/index.js.map +1 -1
  73. package/components/widgets/dialog-manager/index.mjs +1 -1
  74. package/layouts/sidebar1/app-sidebar.js +2 -2
  75. package/layouts/sidebar1/app-sidebar.mjs +2 -2
  76. package/layouts/sidebar1/context-switcher.js +1 -1
  77. package/layouts/sidebar1/context-switcher.mjs +1 -1
  78. package/layouts/sidebar1/index.js +3 -3
  79. package/layouts/sidebar1/index.js.map +1 -1
  80. package/layouts/sidebar1/index.mjs +3 -3
  81. package/layouts/sidebar1/nav-menus.js +1 -1
  82. package/layouts/sidebar1/nav-menus.mjs +1 -1
  83. package/layouts/sidebar1/nav-user.js +2 -2
  84. package/layouts/sidebar1/nav-user.mjs +2 -2
  85. package/layouts/simple/index.js +2 -2
  86. package/layouts/simple/index.mjs +3 -3
  87. package/package.json +1 -1
  88. package/components/ui/extension/multi-select.js.map +0 -1
  89. package/components/ui/extension/multi-select.mjs.map +0 -1
  90. /package/{chunk-432PQWGO.mjs.map → chunk-RJVQU443.mjs.map} +0 -0
  91. /package/{chunk-HKZRXGJ7.mjs.map → chunk-YDRPNCWF.mjs.map} +0 -0
  92. /package/{chunk-ZMMYQNQV.mjs.map → chunk-ZFBUIBJH.mjs.map} +0 -0
@@ -0,0 +1,83 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3
+
4
+
5
+
6
+
7
+
8
+ var _chunk3TG6ZVFGjs = require('./chunk-3TG6ZVFG.js');
9
+
10
+
11
+
12
+
13
+ var _chunkQHCOMBHIjs = require('./chunk-QHCOMBHI.js');
14
+
15
+
16
+ var _chunkCKGMFUU2js = require('./chunk-CKGMFUU2.js');
17
+
18
+
19
+ var _chunkPSPAJNNBjs = require('./chunk-PSPAJNNB.js');
20
+
21
+ // components/form/multi-select.tsx
22
+ var _isString2 = require('lodash-es/isString'); var _isString3 = _interopRequireDefault(_isString2);
23
+ var _kebabCase2 = require('lodash-es/kebabCase'); var _kebabCase3 = _interopRequireDefault(_kebabCase2);
24
+ var _react = require('react'); var _react2 = _interopRequireDefault(_react);
25
+ function FormMultiSelect({
26
+ id,
27
+ name,
28
+ label,
29
+ placeholder = "Select options...",
30
+ data,
31
+ value = [],
32
+ onChange,
33
+ classNames,
34
+ required,
35
+ disabled,
36
+ loop = false
37
+ }) {
38
+ const options = _react2.default.useMemo(() => {
39
+ if (!data || data.length === 0) return [];
40
+ if (_isString3.default.call(void 0, data[0])) {
41
+ return data.map((currentValue) => ({ label: currentValue, value: currentValue }));
42
+ }
43
+ return data;
44
+ }, [data]);
45
+ const selectedValues = _react2.default.useMemo(() => {
46
+ return value.map((currentValue) => options.find((option) => option.value === currentValue)).filter((option) => !!option);
47
+ }, [options, value]);
48
+ const handleValueChange = (newValues) => {
49
+ onChange(newValues.map((currentValue) => currentValue.value));
50
+ };
51
+ if (!id) id = _kebabCase3.default.call(void 0, name);
52
+ return /* @__PURE__ */ _react2.default.createElement("div", { className: _chunkPSPAJNNBjs.cn.call(void 0, "flex flex-col gap-2", classNames == null ? void 0 : classNames.wrapper) }, label && /* @__PURE__ */ _react2.default.createElement(_chunkCKGMFUU2js.Label, { htmlFor: id, className: classNames == null ? void 0 : classNames.label, required }, label), /* @__PURE__ */ _react2.default.createElement(
53
+ _chunk3TG6ZVFGjs.MultiSelector,
54
+ {
55
+ values: selectedValues,
56
+ onValuesChange: handleValueChange,
57
+ loop,
58
+ disabled,
59
+ className: "p-0"
60
+ },
61
+ /* @__PURE__ */ _react2.default.createElement(_chunkQHCOMBHIjs.Popover, null, /* @__PURE__ */ _react2.default.createElement(_chunkQHCOMBHIjs.PopoverTrigger, { asChild: true }, /* @__PURE__ */ _react2.default.createElement(_chunk3TG6ZVFGjs.MultiSelectorTrigger, { className: _chunkPSPAJNNBjs.cn.call(void 0, "cursor-pointer", classNames == null ? void 0 : classNames.trigger) }, /* @__PURE__ */ _react2.default.createElement(
62
+ _chunk3TG6ZVFGjs.MultiSelectorInput,
63
+ {
64
+ id,
65
+ disabled,
66
+ placeholder: selectedValues.length === 0 ? placeholder : "",
67
+ className: classNames == null ? void 0 : classNames.input
68
+ }
69
+ ))), /* @__PURE__ */ _react2.default.createElement(
70
+ _chunkQHCOMBHIjs.PopoverContent,
71
+ {
72
+ align: "start",
73
+ className: _chunkPSPAJNNBjs.cn.call(void 0, "w-[var(--radix-popover-trigger-width)] p-0", classNames == null ? void 0 : classNames.content)
74
+ },
75
+ /* @__PURE__ */ _react2.default.createElement(_chunk3TG6ZVFGjs.MultiSelectorList, { className: "static relative border-none shadow-none" }, options.map((option) => /* @__PURE__ */ _react2.default.createElement(_chunk3TG6ZVFGjs.MultiSelectorItem, { key: option.value, value: option.value, label: option.label }, /* @__PURE__ */ _react2.default.createElement("span", null, option.label))))
76
+ ))
77
+ ));
78
+ }
79
+
80
+
81
+
82
+ exports.FormMultiSelect = FormMultiSelect;
83
+ //# sourceMappingURL=chunk-IQIHYWXX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-IQIHYWXX.js","../components/form/multi-select.tsx"],"names":[],"mappings":"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","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-IQIHYWXX.js","sourcesContent":[null,"\"use client\";\nimport _isString from 'lodash-es/isString';\nimport _kebabCase from 'lodash-es/kebabCase';\nimport React from 'react';\n\nimport { cn } from '../../utils/ui';\nimport { Label } from '../ui/label';\nimport {\n MultiSelector,\n MultiSelectorInput,\n MultiSelectorItem,\n MultiSelectorList,\n MultiSelectorTrigger,\n type MultiSelectValue,\n} from '../ui/multi-select';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\n\nexport interface FormMultiSelectProps {\n id?: string;\n name: string;\n label?: string;\n placeholder?: string;\n data: MultiSelectValue[] | string[];\n value: string[];\n onChange: (values: string[]) => void;\n classNames?: {\n wrapper?: string;\n label?: string;\n trigger?: string;\n input?: string;\n content?: string;\n };\n required?: boolean;\n disabled?: boolean;\n loop?: boolean;\n}\n\nexport function FormMultiSelect({\n id,\n name,\n label,\n placeholder = 'Select options...',\n data,\n value = [],\n onChange,\n classNames,\n required,\n disabled,\n loop = false,\n}: FormMultiSelectProps) {\n const options: MultiSelectValue[] = React.useMemo(() => {\n if (!data || data.length === 0) return [];\n if (_isString(data[0])) {\n return (data as string[]).map((currentValue) => ({ label: currentValue, value: currentValue }));\n }\n return data as MultiSelectValue[];\n }, [data]);\n\n const selectedValues = React.useMemo(() => {\n return value\n .map((currentValue) => options.find((option) => option.value === currentValue))\n .filter((option): option is MultiSelectValue => !!option);\n }, [options, value]);\n\n const handleValueChange = (newValues: MultiSelectValue[]) => {\n onChange(newValues.map((currentValue) => currentValue.value));\n };\n\n if (!id) id = _kebabCase(name);\n\n return (\n <div className={cn('flex flex-col gap-2', classNames?.wrapper)}>\n {label && (\n <Label htmlFor={id} className={classNames?.label} required={required}>\n {label}\n </Label>\n )}\n\n <MultiSelector\n values={selectedValues}\n onValuesChange={handleValueChange}\n loop={loop}\n disabled={disabled}\n className=\"p-0\"\n >\n <Popover>\n <PopoverTrigger asChild>\n <MultiSelectorTrigger className={cn('cursor-pointer', classNames?.trigger)}>\n <MultiSelectorInput\n id={id}\n disabled={disabled}\n placeholder={selectedValues.length === 0 ? placeholder : ''}\n className={classNames?.input}\n />\n </MultiSelectorTrigger>\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn('w-[var(--radix-popover-trigger-width)] p-0', classNames?.content)}\n >\n <MultiSelectorList className=\"static relative border-none shadow-none\">\n {options.map((option) => (\n <MultiSelectorItem key={option.value} value={option.value} label={option.label}>\n <span>{option.label}</span>\n </MultiSelectorItem>\n ))}\n </MultiSelectorList>\n </PopoverContent>\n </Popover>\n </MultiSelector>\n </div>\n );\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }
3
3
 
4
4
 
5
- var _chunkMJT6B7OJjs = require('./chunk-MJT6B7OJ.js');
5
+ var _chunkLPDYWZN6js = require('./chunk-LPDYWZN6.js');
6
6
 
7
7
 
8
8
 
@@ -60,13 +60,13 @@ function CommandDialog(_a) {
60
60
  }
61
61
  function CommandInput(_a) {
62
62
  var _b = _a, { className } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, ["className"]);
63
- return /* @__PURE__ */ React.createElement("div", { "data-slot": "command-input-wrapper", className: "p-1 pb-0" }, /* @__PURE__ */ React.createElement(_chunkMJT6B7OJjs.InputGroup, { className: "bg-input/30 border-input/30 h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!" }, /* @__PURE__ */ React.createElement(
63
+ return /* @__PURE__ */ React.createElement("div", { "data-slot": "command-input-wrapper", className: "p-1 pb-0" }, /* @__PURE__ */ React.createElement(_chunkLPDYWZN6js.InputGroup, { className: "bg-input/30 border-input/30 h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!" }, /* @__PURE__ */ React.createElement(
64
64
  _cmdk.Command.Input,
65
65
  _chunk2NMEKWO5js.__spreadValues.call(void 0, {
66
66
  "data-slot": "command-input",
67
67
  className: _chunkPSPAJNNBjs.cn.call(void 0, "w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className)
68
68
  }, props)
69
- ), /* @__PURE__ */ React.createElement(_chunkMJT6B7OJjs.InputGroupAddon, null, /* @__PURE__ */ React.createElement(_lucidereact.SearchIcon, { className: "size-4 shrink-0 opacity-50" }))));
69
+ ), /* @__PURE__ */ React.createElement(_chunkLPDYWZN6js.InputGroupAddon, null, /* @__PURE__ */ React.createElement(_lucidereact.SearchIcon, { className: "size-4 shrink-0 opacity-50" }))));
70
70
  }
71
71
  function CommandList(_a) {
72
72
  var _b = _a, { className } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, ["className"]);
@@ -151,4 +151,4 @@ function CommandShortcut(_a) {
151
151
 
152
152
 
153
153
  exports.Command = Command; exports.CommandDialog = CommandDialog; exports.CommandInput = CommandInput; exports.CommandList = CommandList; exports.CommandEmpty = CommandEmpty; exports.CommandGroup = CommandGroup; exports.CommandSeparator = CommandSeparator; exports.CommandItem = CommandItem; exports.CommandShortcut = CommandShortcut;
154
- //# sourceMappingURL=chunk-AJLAS62X.js.map
154
+ //# sourceMappingURL=chunk-LAIO3QZX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-AJLAS62X.js","../components/ui/command.tsx"],"names":[],"mappings":"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","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-AJLAS62X.js","sourcesContent":[null,"\"use client\";\nimport * as React from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { cn } from '../../utils/ui';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog';\nimport { InputGroup, InputGroupAddon } from './input-group';\nimport { SearchIcon, CheckIcon } from 'lucide-react';\n\nfunction Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n 'bg-popover text-popover-foreground rounded-xl! p-1 flex size-full flex-col overflow-hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n showCloseButton = false,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string;\n description?: string;\n className?: string;\n showCloseButton?: boolean;\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn('rounded-xl! top-1/3 translate-y-0 overflow-hidden p-0', className)}\n showCloseButton={showCloseButton}\n >\n {children}\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction CommandInput({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"p-1 pb-0\">\n <InputGroup className=\"bg-input/30 border-input/30 h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!\">\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn('w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50', className)}\n {...props}\n />\n <InputGroupAddon>\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n </InputGroupAddon>\n </InputGroup>\n </div>\n );\n}\n\nfunction CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('no-scrollbar max-h-72 scroll-py-1 outline-none overflow-x-hidden overflow-y-auto', className)}\n {...props}\n />\n );\n}\n\nfunction CommandEmpty({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn('py-6 text-center text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('bg-border -mx-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction CommandItem({ className, children, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-muted data-[selected=true]:text-foreground data-[selected=true]:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! [&_svg:not([class*='size-'])]:size-4 group/command-item data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n {children}\n <CheckIcon className=\"ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100\" />\n </CommandPrimitive.Item>\n );\n}\n\nfunction CommandShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n 'text-muted-foreground group-data-selected/command-item:text-foreground ml-auto text-xs tracking-widest',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n"]}
1
+ {"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-LAIO3QZX.js","../components/ui/command.tsx"],"names":[],"mappings":"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","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-LAIO3QZX.js","sourcesContent":[null,"\"use client\";\nimport * as React from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { cn } from '../../utils/ui';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog';\nimport { InputGroup, InputGroupAddon } from './input-group';\nimport { SearchIcon, CheckIcon } from 'lucide-react';\n\nfunction Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n 'bg-popover text-popover-foreground rounded-xl! p-1 flex size-full flex-col overflow-hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n showCloseButton = false,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string;\n description?: string;\n className?: string;\n showCloseButton?: boolean;\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn('rounded-xl! top-1/3 translate-y-0 overflow-hidden p-0', className)}\n showCloseButton={showCloseButton}\n >\n {children}\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction CommandInput({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"p-1 pb-0\">\n <InputGroup className=\"bg-input/30 border-input/30 h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!\">\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn('w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50', className)}\n {...props}\n />\n <InputGroupAddon>\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n </InputGroupAddon>\n </InputGroup>\n </div>\n );\n}\n\nfunction CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('no-scrollbar max-h-72 scroll-py-1 outline-none overflow-x-hidden overflow-y-auto', className)}\n {...props}\n />\n );\n}\n\nfunction CommandEmpty({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn('py-6 text-center text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('bg-border -mx-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction CommandItem({ className, children, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-muted data-[selected=true]:text-foreground data-[selected=true]:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! [&_svg:not([class*='size-'])]:size-4 group/command-item data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className,\n )}\n {...props}\n >\n {children}\n <CheckIcon className=\"ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100\" />\n </CommandPrimitive.Item>\n );\n}\n\nfunction CommandShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n 'text-muted-foreground group-data-selected/command-item:text-foreground ml-auto text-xs tracking-widest',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n"]}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }
3
3
 
4
- var _chunkUFRPUC7Kjs = require('./chunk-UFRPUC7K.js');
4
+ var _chunkRJG7QLDDjs = require('./chunk-RJG7QLDD.js');
5
5
 
6
6
 
7
- var _chunkRJG7QLDDjs = require('./chunk-RJG7QLDD.js');
7
+ var _chunkUFRPUC7Kjs = require('./chunk-UFRPUC7K.js');
8
8
 
9
9
 
10
10
  var _chunkKB6BX6LAjs = require('./chunk-KB6BX6LA.js');
@@ -156,4 +156,4 @@ function InputGroupTextarea(_a) {
156
156
 
157
157
 
158
158
  exports.InputGroup = InputGroup; exports.InputGroupAddon = InputGroupAddon; exports.InputGroupButton = InputGroupButton; exports.InputGroupText = InputGroupText; exports.InputGroupInput = InputGroupInput; exports.InputGroupTextarea = InputGroupTextarea;
159
- //# sourceMappingURL=chunk-MJT6B7OJ.js.map
159
+ //# sourceMappingURL=chunk-LPDYWZN6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-MJT6B7OJ.js","../components/ui/input-group.tsx"],"names":["_a","_b"],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACA;AChBA,2EAAuB;AACvB,kEAAuC;AAOvC,SAAS,UAAA,CAAW,EAAA,EAAsD;AAAtD,EAAA,IAAA,GAAA,EAAA,EAAA,EAAE,EAAA,UATtB,EAAA,EASoB,EAAA,EAAgB,MAAA,EAAA,wCAAA,EAAhB,EAAgB,CAAd,WAAA,CAAA,CAAA;AACpB,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA,6CAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW,iCAAA;AAAA,QACT,ulCAAA;AAAA,QACA;AAAA,MACF;AAAA,IAAA,CAAA,EACI,KAAA;AAAA,EACN,CAAA;AAEJ;AAEA,IAAM,wBAAA,EAA0B,yCAAA;AAAA,EAC9B,yPAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,KAAA,EAAO;AAAA,QACL,cAAA,EAAgB,sEAAA;AAAA,QAChB,YAAA,EAAc,qEAAA;AAAA,QACd,aAAA,EACE,mGAAA;AAAA,QACF,WAAA,EAAa;AAAA,MACf;AAAA,IACF,CAAA;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO;AAAA,IACT;AAAA,EACF;AACF,CAAA;AAEA,SAAS,eAAA,CAAgB,EAAA,EAIsD;AAJtD,EAAA,IAAA,GAAA,EAAA,EAAA,EACvB;AAAA,IAAA,SAAA;AAAA,IACA,MAAA,EAAQ;AAAA,EA3CV,EAAA,EAyCyB,EAAA,EAGpB,MAAA,EAAA,wCAAA,EAHoB,EAGpB;AAAA,IAFH,WAAA;AAAA,IACA;AAAA,EAAA,CAAA,CAAA;AAGA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA,6CAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAU,mBAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,iCAAA,uBAAG,CAAwB,EAAE,MAAM,CAAC,CAAA,EAAG,SAAS,CAAA;AAAA,MAC3D,OAAA,EAAS,CAAC,CAAA,EAAA,GAAM;AApDtB,QAAA,IAAAA,GAAAA,EAAAC,GAAAA;AAqDQ,QAAA,GAAA,CAAK,CAAA,CAAE,MAAA,CAAuB,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC/C,UAAA,MAAA;AAAA,QACF;AACA,QAAA,CAAAA,IAAAA,EAAAA,CAAAD,IAAAA,EAAA,CAAA,CAAE,aAAA,CAAc,aAAA,EAAA,GAAhB,KAAA,EAAA,KAAA,EAAA,EAAAA,GAAAA,CAA+B,aAAA,CAAc,OAAA,CAAA,EAAA,GAA7C,KAAA,EAAA,KAAA,EAAA,EAAAC,GAAAA,CAAuD,KAAA,CAAA,CAAA;AAAA,MACzD;AAAA,IAAA,CAAA,EACI,KAAA;AAAA,EACN,CAAA;AAEJ;AAEA,IAAM,yBAAA,EAA2B,yCAAA,6CAAI,EAA+C;AAAA,EAClF,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,2FAAA;AAAA,MACJ,EAAA,EAAI,EAAA;AAAA,MACJ,SAAA,EAAW,6DAAA;AAAA,MACX,SAAA,EAAW;AAAA,IACb;AAAA,EACF,CAAA;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA,EACR;AACF,CAAC,CAAA;AAED,SAAS,gBAAA,CAAiB,EAAA,EAM4E;AAN5E,EAAA,IAAA,GAAA,EAAA,EAAA,EACxB;AAAA,IAAA,SAAA;AAAA,IACA,KAAA,EAAO,QAAA;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,KAAA,EAAO;AAAA,EAjFT,EAAA,EA6E0B,EAAA,EAKrB,MAAA,EAAA,wCAAA,EALqB,EAKrB;AAAA,IAJH,WAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,EAAA,CAAA,CAAA;AAGA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,uBAAA;AAAA,IAAA,6CAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA,EAAW,IAAA;AAAA,MACX,OAAA;AAAA,MACA,SAAA,EAAW,iCAAA,wBAAG,CAAyB,EAAE,KAAK,CAAC,CAAA,EAAG,SAAS;AAAA,IAAA,CAAA,EACvD,KAAA;AAAA,EACN,CAAA;AAEJ;AAEA,SAAS,cAAA,CAAe,EAAA,EAAuD;AAAvD,EAAA,IAAA,GAAA,EAAA,EAAA,EAAE,EAAA,UA/F1B,EAAA,EA+FwB,EAAA,EAAgB,MAAA,EAAA,wCAAA,EAAhB,EAAgB,CAAd,WAAA,CAAA,CAAA;AACxB,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA,6CAAA;AAAA,MACC,SAAA,EAAW,iCAAA;AAAA,QACT,wHAAA;AAAA,QACA;AAAA,MACF;AAAA,IAAA,CAAA,EACI,KAAA;AAAA,EACN,CAAA;AAEJ;AAEA,SAAS,eAAA,CAAgB,EAAA,EAAwD;AAAxD,EAAA,IAAA,GAAA,EAAA,EAAA,EAAE,EAAA,UA3G3B,EAAA,EA2GyB,EAAA,EAAgB,MAAA,EAAA,wCAAA,EAAhB,EAAgB,CAAd,WAAA,CAAA,CAAA;AACzB,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,sBAAA;AAAA,IAAA,6CAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,iCAAA;AAAA,QACT,kLAAA;AAAA,QACA;AAAA,MACF;AAAA,IAAA,CAAA,EACI,KAAA;AAAA,EACN,CAAA;AAEJ;AAEA,SAAS,kBAAA,CAAmB,EAAA,EAA2D;AAA3D,EAAA,IAAA,GAAA,EAAA,EAAA,EAAE,EAAA,UAxH9B,EAAA,EAwH4B,EAAA,EAAgB,MAAA,EAAA,wCAAA,EAAhB,EAAgB,CAAd,WAAA,CAAA,CAAA;AAC5B,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,yBAAA;AAAA,IAAA,6CAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAW,iCAAA;AAAA,QACT,mMAAA;AAAA,QACA;AAAA,MACF;AAAA,IAAA,CAAA,EACI,KAAA;AAAA,EACN,CAAA;AAEJ;ADiBA;AACA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,6PAAC","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-MJT6B7OJ.js","sourcesContent":[null,"\"use client\";\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../utils/ui';\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Textarea } from './textarea';\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n 'border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-disabled:bg-input/50 dark:has-disabled:bg-input/80 h-8 rounded-lg border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5 group/input-group relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto',\n className,\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4 flex cursor-text items-center justify-center select-none\",\n {\n variants: {\n align: {\n 'inline-start': 'pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem] order-first',\n 'inline-end': 'pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem] order-last',\n 'block-start':\n 'px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2 order-first w-full justify-start',\n 'block-end': 'px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2 order-last w-full justify-start',\n },\n },\n defaultVariants: {\n align: 'inline-start',\n },\n },\n);\n\nfunction InputGroupAddon({\n className,\n align = 'inline-start',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest('button')) {\n return;\n }\n e.currentTarget.parentElement?.querySelector('input')?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva('gap-2 text-sm flex items-center shadow-none', {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: '',\n 'icon-xs': 'size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0',\n 'icon-sm': 'size-8 p-0 has-[>svg]:p-0',\n },\n },\n defaultVariants: {\n size: 'xs',\n },\n});\n\nfunction InputGroupButton({\n className,\n type = 'button',\n variant = 'ghost',\n size = 'xs',\n ...props\n}: Omit<React.ComponentProps<typeof Button>, 'size'> & VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n \"text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4 flex items-center [&_svg]:pointer-events-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<'input'>) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n 'rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent flex-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n 'rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent flex-1 resize-none',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea };\n"]}
1
+ {"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-LPDYWZN6.js","../components/ui/input-group.tsx"],"names":["_a","_b"],"mappings":"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","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-LPDYWZN6.js","sourcesContent":[null,"\"use client\";\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../utils/ui';\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Textarea } from './textarea';\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n 'border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-disabled:bg-input/50 dark:has-disabled:bg-input/80 h-8 rounded-lg border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5 group/input-group relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto',\n className,\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4 flex cursor-text items-center justify-center select-none\",\n {\n variants: {\n align: {\n 'inline-start': 'pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem] order-first',\n 'inline-end': 'pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem] order-last',\n 'block-start':\n 'px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2 order-first w-full justify-start',\n 'block-end': 'px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2 order-last w-full justify-start',\n },\n },\n defaultVariants: {\n align: 'inline-start',\n },\n },\n);\n\nfunction InputGroupAddon({\n className,\n align = 'inline-start',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest('button')) {\n return;\n }\n e.currentTarget.parentElement?.querySelector('input')?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva('gap-2 text-sm flex items-center shadow-none', {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: '',\n 'icon-xs': 'size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0',\n 'icon-sm': 'size-8 p-0 has-[>svg]:p-0',\n },\n },\n defaultVariants: {\n size: 'xs',\n },\n});\n\nfunction InputGroupButton({\n className,\n type = 'button',\n variant = 'ghost',\n size = 'xs',\n ...props\n}: Omit<React.ComponentProps<typeof Button>, 'size'> & VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n \"text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4 flex items-center [&_svg]:pointer-events-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<'input'>) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n 'rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent flex-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n 'rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent flex-1 resize-none',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea };\n"]}
@@ -5,7 +5,7 @@ import {
5
5
  CommandInput,
6
6
  CommandItem,
7
7
  CommandList
8
- } from "./chunk-ZMMYQNQV.mjs";
8
+ } from "./chunk-ZFBUIBJH.mjs";
9
9
  import {
10
10
  Popover,
11
11
  PopoverContent,
@@ -84,4 +84,4 @@ function FormSearchableSelect({
84
84
  export {
85
85
  FormSearchableSelect
86
86
  };
87
- //# sourceMappingURL=chunk-432PQWGO.mjs.map
87
+ //# sourceMappingURL=chunk-RJVQU443.mjs.map
@@ -0,0 +1,43 @@
1
+ import {
2
+ TagPicker
3
+ } from "./chunk-ZQK6REIM.mjs";
4
+ import {
5
+ Label
6
+ } from "./chunk-MM5OJOOR.mjs";
7
+ import {
8
+ cn
9
+ } from "./chunk-KGUUDFJE.mjs";
10
+
11
+ // components/form/tag-picker.tsx
12
+ import _kebabCase from "lodash-es/kebabCase";
13
+ function FormTagPicker({
14
+ id,
15
+ name,
16
+ label,
17
+ value,
18
+ onChange,
19
+ suggestions = [],
20
+ placeholder = "Add tags...",
21
+ disabled = false,
22
+ required = false,
23
+ classNames
24
+ }) {
25
+ if (!id) id = _kebabCase(name);
26
+ return /* @__PURE__ */ React.createElement("div", { className: cn("space-y-2", classNames == null ? void 0 : classNames.wrapper) }, label && /* @__PURE__ */ React.createElement(Label, { htmlFor: id, className: classNames == null ? void 0 : classNames.label, required }, label), /* @__PURE__ */ React.createElement(
27
+ TagPicker,
28
+ {
29
+ id,
30
+ value,
31
+ onChange,
32
+ suggestions,
33
+ placeholder,
34
+ disabled,
35
+ className: classNames == null ? void 0 : classNames.input
36
+ }
37
+ ));
38
+ }
39
+
40
+ export {
41
+ FormTagPicker
42
+ };
43
+ //# sourceMappingURL=chunk-USW6AILM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/form/tag-picker.tsx"],"sourcesContent":["\"use client\";\nimport _kebabCase from 'lodash-es/kebabCase';\n\nimport { cn } from '../../utils/ui';\nimport { Label } from '../ui/label';\nimport { TagPicker } from '../ui/tag-picker';\n\nexport interface FormTagPickerProps {\n id?: string;\n name: string;\n label?: string;\n value: string[];\n onChange: (values: string[]) => void;\n suggestions?: string[];\n placeholder?: string;\n disabled?: boolean;\n required?: boolean;\n classNames?: {\n wrapper?: string;\n label?: string;\n input?: string;\n };\n}\n\nexport function FormTagPicker({\n id,\n name,\n label,\n value,\n onChange,\n suggestions = [],\n placeholder = 'Add tags...',\n disabled = false,\n required = false,\n classNames,\n}: FormTagPickerProps) {\n if (!id) id = _kebabCase(name);\n\n return (\n <div className={cn('space-y-2', classNames?.wrapper)}>\n {label && (\n <Label htmlFor={id} className={classNames?.label} required={required}>\n {label}\n </Label>\n )}\n\n <TagPicker\n id={id}\n value={value}\n onChange={onChange}\n suggestions={suggestions}\n placeholder={placeholder}\n disabled={disabled}\n className={classNames?.input}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AACA,OAAO,gBAAgB;AAuBhB,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc,CAAC;AAAA,EACf,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AACF,GAAuB;AACrB,MAAI,CAAC,GAAI,MAAK,WAAW,IAAI;AAE7B,SACE,oCAAC,SAAI,WAAW,GAAG,aAAa,yCAAY,OAAO,KAChD,SACC,oCAAC,SAAM,SAAS,IAAI,WAAW,yCAAY,OAAO,YAC/C,KACH,GAGF;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,yCAAY;AAAA;AAAA,EACzB,CACF;AAEJ;","names":[]}
@@ -1,9 +1,9 @@
1
- import {
2
- Input
3
- } from "./chunk-QF6PFV6M.mjs";
4
1
  import {
5
2
  Textarea
6
3
  } from "./chunk-YQENFZOY.mjs";
4
+ import {
5
+ Input
6
+ } from "./chunk-QF6PFV6M.mjs";
7
7
  import {
8
8
  Button
9
9
  } from "./chunk-7BYWDRRI.mjs";
@@ -155,4 +155,4 @@ export {
155
155
  InputGroupInput,
156
156
  InputGroupTextarea
157
157
  };
158
- //# sourceMappingURL=chunk-HKZRXGJ7.mjs.map
158
+ //# sourceMappingURL=chunk-YDRPNCWF.mjs.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  InputGroup,
3
3
  InputGroupAddon
4
- } from "./chunk-HKZRXGJ7.mjs";
4
+ } from "./chunk-YDRPNCWF.mjs";
5
5
  import {
6
6
  Dialog,
7
7
  DialogContent,
@@ -150,4 +150,4 @@ export {
150
150
  CommandItem,
151
151
  CommandShortcut
152
152
  };
153
- //# sourceMappingURL=chunk-ZMMYQNQV.mjs.map
153
+ //# sourceMappingURL=chunk-ZFBUIBJH.mjs.map
@@ -0,0 +1,129 @@
1
+ import {
2
+ Badge
3
+ } from "./chunk-WIISPZZE.mjs";
4
+ import {
5
+ cn
6
+ } from "./chunk-KGUUDFJE.mjs";
7
+
8
+ // components/ui/tag-picker.tsx
9
+ import { IconPlus, IconX } from "@tabler/icons-react";
10
+ import { useMemo, useState } from "react";
11
+ function normalizeTagName(name) {
12
+ return name.replace(/\s+/g, " ").trim();
13
+ }
14
+ function TagPicker({
15
+ id,
16
+ value,
17
+ onChange,
18
+ suggestions = [],
19
+ placeholder = "Add tags...",
20
+ disabled = false,
21
+ className
22
+ }) {
23
+ const [inputValue, setInputValue] = useState("");
24
+ const [isFocused, setIsFocused] = useState(false);
25
+ const selectedKeys = useMemo(() => new Set(value.map((item) => item.toLocaleLowerCase())), [value]);
26
+ const normalizedInput = normalizeTagName(inputValue);
27
+ const normalizedInputKey = normalizedInput.toLocaleLowerCase();
28
+ const filteredSuggestions = useMemo(() => {
29
+ return suggestions.filter((suggestion) => !selectedKeys.has(suggestion.toLocaleLowerCase())).filter((suggestion) => {
30
+ if (!normalizedInput) {
31
+ return true;
32
+ }
33
+ return suggestion.toLocaleLowerCase().includes(normalizedInputKey);
34
+ }).slice(0, 8);
35
+ }, [normalizedInput, normalizedInputKey, selectedKeys, suggestions]);
36
+ const canCreate = !!normalizedInput && !selectedKeys.has(normalizedInputKey) && !suggestions.some((suggestion) => suggestion.toLocaleLowerCase() === normalizedInputKey);
37
+ const addTag = (rawName) => {
38
+ const nextName = normalizeTagName(rawName);
39
+ if (!nextName) {
40
+ setInputValue("");
41
+ return;
42
+ }
43
+ const nextKey = nextName.toLocaleLowerCase();
44
+ const matchingSuggestion = suggestions.find((suggestion) => suggestion.toLocaleLowerCase() === nextKey);
45
+ const finalName = matchingSuggestion != null ? matchingSuggestion : nextName;
46
+ if (selectedKeys.has(finalName.toLocaleLowerCase())) {
47
+ setInputValue("");
48
+ return;
49
+ }
50
+ onChange([...value, finalName]);
51
+ setInputValue("");
52
+ };
53
+ const removeTag = (tagName) => {
54
+ onChange(value.filter((item) => item.toLocaleLowerCase() !== tagName.toLocaleLowerCase()));
55
+ };
56
+ const showMenu = !disabled && isFocused && (filteredSuggestions.length > 0 || canCreate);
57
+ return /* @__PURE__ */ React.createElement("div", { className: cn("space-y-2", className) }, /* @__PURE__ */ React.createElement("div", { className: "relative" }, /* @__PURE__ */ React.createElement(
58
+ "div",
59
+ {
60
+ className: cn(
61
+ "flex min-h-8 flex-wrap items-center gap-1 rounded-lg border bg-background px-2 py-1 text-sm",
62
+ "focus-within:ring-1 focus-within:ring-ring",
63
+ disabled && "cursor-not-allowed opacity-60"
64
+ )
65
+ },
66
+ value.map((tagName) => /* @__PURE__ */ React.createElement(Badge, { key: tagName, variant: "secondary", className: "flex items-center gap-1 rounded-md px-1.5" }, /* @__PURE__ */ React.createElement("span", { className: "text-xs" }, tagName), !disabled && /* @__PURE__ */ React.createElement(
67
+ "button",
68
+ {
69
+ type: "button",
70
+ className: "inline-flex cursor-pointer items-center justify-center rounded-md p-1 transition-colors hover:bg-red-50 hover:text-red-700 focus-visible:bg-red-100 focus-visible:outline-none",
71
+ onMouseDown: (event) => event.preventDefault(),
72
+ onClick: () => removeTag(tagName),
73
+ "aria-label": `Remove ${tagName}`
74
+ },
75
+ /* @__PURE__ */ React.createElement(IconX, { className: "h-3.5 w-3.5" })
76
+ ))),
77
+ /* @__PURE__ */ React.createElement(
78
+ "input",
79
+ {
80
+ id,
81
+ value: inputValue,
82
+ disabled,
83
+ placeholder: value.length === 0 ? placeholder : "",
84
+ className: "min-w-24 flex-1 border-0 bg-transparent p-0 pl-1 text-sm outline-none placeholder:text-muted-foreground",
85
+ onFocus: () => setIsFocused(true),
86
+ onBlur: () => {
87
+ window.setTimeout(() => setIsFocused(false), 100);
88
+ },
89
+ onChange: (event) => setInputValue(event.target.value),
90
+ onKeyDown: (event) => {
91
+ if ((event.key === "Enter" || event.key === ",") && normalizedInput) {
92
+ event.preventDefault();
93
+ addTag(normalizedInput);
94
+ }
95
+ if (event.key === "Backspace" && !inputValue && value.length > 0) {
96
+ event.preventDefault();
97
+ removeTag(value[value.length - 1]);
98
+ }
99
+ }
100
+ }
101
+ )
102
+ ), showMenu && /* @__PURE__ */ React.createElement("div", { className: "absolute z-50 mt-1 w-full rounded-md border bg-background p-1 shadow-md" }, filteredSuggestions.map((suggestion) => /* @__PURE__ */ React.createElement(
103
+ "button",
104
+ {
105
+ key: suggestion,
106
+ type: "button",
107
+ className: "flex w-full items-center justify-between rounded-sm px-2 py-1.5 text-left text-sm hover:bg-muted",
108
+ onMouseDown: (event) => event.preventDefault(),
109
+ onClick: () => addTag(suggestion)
110
+ },
111
+ /* @__PURE__ */ React.createElement("span", null, suggestion),
112
+ /* @__PURE__ */ React.createElement("span", { className: "text-xs text-muted-foreground" }, "Existing")
113
+ )), canCreate && /* @__PURE__ */ React.createElement(
114
+ "button",
115
+ {
116
+ type: "button",
117
+ className: "flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm hover:bg-muted",
118
+ onMouseDown: (event) => event.preventDefault(),
119
+ onClick: () => addTag(normalizedInput)
120
+ },
121
+ /* @__PURE__ */ React.createElement(IconPlus, { className: "h-3.5 w-3.5" }),
122
+ /* @__PURE__ */ React.createElement("span", null, 'Create "', normalizedInput, '"')
123
+ ))));
124
+ }
125
+
126
+ export {
127
+ TagPicker
128
+ };
129
+ //# sourceMappingURL=chunk-ZQK6REIM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/ui/tag-picker.tsx"],"sourcesContent":["\"use client\";\nimport { IconPlus, IconX } from '@tabler/icons-react';\nimport { useMemo, useState } from 'react';\n\nimport { cn } from '../../utils/ui';\nimport { Badge } from './badge';\n\nfunction normalizeTagName(name: string) {\n return name.replace(/\\s+/g, ' ').trim();\n}\n\nexport interface TagPickerProps {\n id?: string;\n value: string[];\n onChange: (values: string[]) => void;\n suggestions?: string[];\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function TagPicker({\n id,\n value,\n onChange,\n suggestions = [],\n placeholder = 'Add tags...',\n disabled = false,\n className,\n}: TagPickerProps) {\n const [inputValue, setInputValue] = useState('');\n const [isFocused, setIsFocused] = useState(false);\n\n const selectedKeys = useMemo(() => new Set(value.map((item) => item.toLocaleLowerCase())), [value]);\n const normalizedInput = normalizeTagName(inputValue);\n const normalizedInputKey = normalizedInput.toLocaleLowerCase();\n\n const filteredSuggestions = useMemo(() => {\n return suggestions\n .filter((suggestion) => !selectedKeys.has(suggestion.toLocaleLowerCase()))\n .filter((suggestion) => {\n if (!normalizedInput) {\n return true;\n }\n return suggestion.toLocaleLowerCase().includes(normalizedInputKey);\n })\n .slice(0, 8);\n }, [normalizedInput, normalizedInputKey, selectedKeys, suggestions]);\n\n const canCreate =\n !!normalizedInput &&\n !selectedKeys.has(normalizedInputKey) &&\n !suggestions.some((suggestion) => suggestion.toLocaleLowerCase() === normalizedInputKey);\n\n const addTag = (rawName: string) => {\n const nextName = normalizeTagName(rawName);\n if (!nextName) {\n setInputValue('');\n return;\n }\n\n const nextKey = nextName.toLocaleLowerCase();\n const matchingSuggestion = suggestions.find((suggestion) => suggestion.toLocaleLowerCase() === nextKey);\n const finalName = matchingSuggestion ?? nextName;\n\n if (selectedKeys.has(finalName.toLocaleLowerCase())) {\n setInputValue('');\n return;\n }\n\n onChange([...value, finalName]);\n setInputValue('');\n };\n\n const removeTag = (tagName: string) => {\n onChange(value.filter((item) => item.toLocaleLowerCase() !== tagName.toLocaleLowerCase()));\n };\n\n const showMenu = !disabled && isFocused && (filteredSuggestions.length > 0 || canCreate);\n\n return (\n <div className={cn('space-y-2', className)}>\n <div className=\"relative\">\n <div\n className={cn(\n 'flex min-h-8 flex-wrap items-center gap-1 rounded-lg border bg-background px-2 py-1 text-sm',\n 'focus-within:ring-1 focus-within:ring-ring',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n >\n {value.map((tagName) => (\n <Badge key={tagName} variant=\"secondary\" className=\"flex items-center gap-1 rounded-md px-1.5\">\n <span className=\"text-xs\">{tagName}</span>\n {!disabled && (\n <button\n type=\"button\"\n className=\"inline-flex cursor-pointer items-center justify-center rounded-md p-1 transition-colors hover:bg-red-50 hover:text-red-700 focus-visible:bg-red-100 focus-visible:outline-none\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => removeTag(tagName)}\n aria-label={`Remove ${tagName}`}\n >\n <IconX className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </Badge>\n ))}\n\n <input\n id={id}\n value={inputValue}\n disabled={disabled}\n placeholder={value.length === 0 ? placeholder : ''}\n className=\"min-w-24 flex-1 border-0 bg-transparent p-0 pl-1 text-sm outline-none placeholder:text-muted-foreground\"\n onFocus={() => setIsFocused(true)}\n onBlur={() => {\n window.setTimeout(() => setIsFocused(false), 100);\n }}\n onChange={(event) => setInputValue(event.target.value)}\n onKeyDown={(event) => {\n if ((event.key === 'Enter' || event.key === ',') && normalizedInput) {\n event.preventDefault();\n addTag(normalizedInput);\n }\n\n if (event.key === 'Backspace' && !inputValue && value.length > 0) {\n event.preventDefault();\n removeTag(value[value.length - 1]);\n }\n }}\n />\n </div>\n\n {showMenu && (\n <div className=\"absolute z-50 mt-1 w-full rounded-md border bg-background p-1 shadow-md\">\n {filteredSuggestions.map((suggestion) => (\n <button\n key={suggestion}\n type=\"button\"\n className=\"flex w-full items-center justify-between rounded-sm px-2 py-1.5 text-left text-sm hover:bg-muted\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => addTag(suggestion)}\n >\n <span>{suggestion}</span>\n <span className=\"text-xs text-muted-foreground\">Existing</span>\n </button>\n ))}\n\n {canCreate && (\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm hover:bg-muted\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => addTag(normalizedInput)}\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n <span>Create &quot;{normalizedInput}&quot;</span>\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { FieldValues, Path } from 'react-hook-form';
3
+ import { FormMultiSelectProps } from './multi-select.mjs';
4
+ import { HookFormRules } from './types.mjs';
5
+ import '../ui/multi-select.mjs';
6
+ import 'cmdk';
7
+
8
+ declare function HookFormMultiSelect<T extends FieldValues>({ id, name, label, error, rules, classNames, disabled, ...rest }: Omit<FormMultiSelectProps, 'name' | 'onChange' | 'value'> & {
9
+ rules?: HookFormRules<T>;
10
+ name: Path<T>;
11
+ error?: string;
12
+ }): React.JSX.Element;
13
+
14
+ export { HookFormMultiSelect };
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { FieldValues, Path } from 'react-hook-form';
3
+ import { FormMultiSelectProps } from './multi-select.js';
4
+ import { HookFormRules } from './types.js';
5
+ import '../ui/multi-select.js';
6
+ import 'cmdk';
7
+
8
+ declare function HookFormMultiSelect<T extends FieldValues>({ id, name, label, error, rules, classNames, disabled, ...rest }: Omit<FormMultiSelectProps, 'name' | 'onChange' | 'value'> & {
9
+ rules?: HookFormRules<T>;
10
+ name: Path<T>;
11
+ error?: string;
12
+ }): React.JSX.Element;
13
+
14
+ export { HookFormMultiSelect };
@@ -0,0 +1,76 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
3
+
4
+
5
+ var _chunkIQIHYWXXjs = require('../../chunk-IQIHYWXX.js');
6
+ require('../../chunk-3TG6ZVFG.js');
7
+ require('../../chunk-LAIO3QZX.js');
8
+ require('../../chunk-LPDYWZN6.js');
9
+ require('../../chunk-RFORRZRN.js');
10
+ require('../../chunk-RJG7QLDD.js');
11
+ require('../../chunk-UFRPUC7K.js');
12
+ require('../../chunk-2YMMYND2.js');
13
+
14
+
15
+ var _chunk6POWZMNDjs = require('../../chunk-6POWZMND.js');
16
+ require('../../chunk-QHCOMBHI.js');
17
+ require('../../chunk-KB6BX6LA.js');
18
+ require('../../chunk-GV62APQ6.js');
19
+ require('../../chunk-CKGMFUU2.js');
20
+
21
+
22
+ var _chunkPSPAJNNBjs = require('../../chunk-PSPAJNNB.js');
23
+
24
+
25
+
26
+ var _chunk2NMEKWO5js = require('../../chunk-2NMEKWO5.js');
27
+
28
+ // components/form/hook-multi-select.tsx
29
+ var _reacthookform = require('react-hook-form');
30
+ function HookFormMultiSelect(_a) {
31
+ var _b = _a, {
32
+ id,
33
+ name,
34
+ label,
35
+ error,
36
+ rules,
37
+ classNames,
38
+ disabled = false
39
+ } = _b, rest = _chunk2NMEKWO5js.__objRest.call(void 0, _b, [
40
+ "id",
41
+ "name",
42
+ "label",
43
+ "error",
44
+ "rules",
45
+ "classNames",
46
+ "disabled"
47
+ ]);
48
+ const { control } = _reacthookform.useFormContext.call(void 0, );
49
+ const _a2 = classNames != null ? classNames : {}, { wrapper } = _a2, restClassnames = _chunk2NMEKWO5js.__objRest.call(void 0, _a2, ["wrapper"]);
50
+ return /* @__PURE__ */ React.createElement("div", { className: _chunkPSPAJNNBjs.cn.call(void 0, "$hook-multi-select", wrapper) }, /* @__PURE__ */ React.createElement(
51
+ _reacthookform.Controller,
52
+ {
53
+ control,
54
+ name,
55
+ rules,
56
+ render: ({ field: { onChange, value } }) => {
57
+ return /* @__PURE__ */ React.createElement(
58
+ _chunkIQIHYWXXjs.FormMultiSelect,
59
+ _chunk2NMEKWO5js.__spreadValues.call(void 0, {
60
+ id,
61
+ name,
62
+ label,
63
+ value: value != null ? value : [],
64
+ onChange,
65
+ disabled,
66
+ classNames: restClassnames
67
+ }, rest)
68
+ );
69
+ }
70
+ }
71
+ ), /* @__PURE__ */ React.createElement(_chunk6POWZMNDjs.FormError, { field: name, className: "mt-1", message: error }));
72
+ }
73
+
74
+
75
+ exports.HookFormMultiSelect = HookFormMultiSelect;
76
+ //# sourceMappingURL=hook-multi-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/components/form/hook-multi-select.js","../../../components/form/hook-multi-select.tsx"],"names":["_a"],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,0DAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC;AACE;AACF,0DAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC,mCAAgC;AAChC;AACE;AACF,0DAAgC;AAChC;AACE;AACA;AACF,0DAAgC;AAChC;AACA;ACzBA,gDAAwE;AASjE,SAAS,mBAAA,CAA2C,EAAA,EAaxD;AAbwD,EAAA,IAAA,GAAA,EAAA,EAAA,EACzD;AAAA,IAAA,EAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW;AAAA,EAjBb,EAAA,EAU2D,EAAA,EAQtD,KAAA,EAAA,wCAAA,EARsD,EAQtD;AAAA,IAPH,IAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,EAAA,CAAA,CAAA;AAOA,EAAA,MAAM,EAAE,QAAQ,EAAA,EAAI,2CAAA,CAAkB;AACtC,EAAA,MAAuCA,IAAAA,EAAA,WAAA,GAAA,KAAA,EAAA,WAAA,EAAc,CAAC,CAAA,EAA9C,EAAA,QAzBV,EAAA,EAyByCA,GAAAA,EAAnB,eAAA,EAAA,wCAAA,GAAmBA,EAAnB,CAAZ,SAAA,CAAA,CAAA;AAER,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,iCAAA,oBAAG,EAAsB,OAAO,EAAA,CAAA,kBAC9C,KAAA,CAAA,aAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,EAAE,QAAA,EAAU,MAAM,EAAE,CAAA,EAAA,GAAM;AAC1C,QAAA,uBACE,KAAA,CAAA,aAAA;AAAA,UAAC,gCAAA;AAAA,UAAA,6CAAA;AAAA,YACC,EAAA;AAAA,YACA,IAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA,EAAO,MAAA,GAAA,KAAA,EAAA,MAAA,EAAS,CAAC,CAAA;AAAA,YACjB,QAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAA,EAAY;AAAA,UAAA,CAAA,EACR,IAAA;AAAA,QACN,CAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EACF,CAAA,kBAEA,KAAA,CAAA,aAAA,CAAC,0BAAA,EAAA,EAAU,KAAA,EAAO,IAAA,EAAM,SAAA,EAAU,MAAA,EAAO,OAAA,EAAS,MAAA,CAAO,CAC3D,CAAA;AAEJ;ADmBA;AACE;AACF,kDAAC","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/components/form/hook-multi-select.js","sourcesContent":[null,"\"use client\";\nimport { Controller, type FieldValues, type Path, useFormContext } from 'react-hook-form';\n\nimport { cn } from '../../utils/ui';\nimport { FormError } from './error';\nimport { FormMultiSelect } from './multi-select';\n\nimport type { FormMultiSelectProps } from './multi-select';\nimport type { HookFormRules } from './types';\n\nexport function HookFormMultiSelect<T extends FieldValues>({\n id,\n name,\n label,\n error,\n rules,\n classNames,\n disabled = false,\n ...rest\n}: Omit<FormMultiSelectProps, 'name' | 'onChange' | 'value'> & {\n rules?: HookFormRules<T>;\n name: Path<T>;\n error?: string;\n}) {\n const { control } = useFormContext<T>();\n const { wrapper, ...restClassnames } = classNames ?? {};\n\n return (\n <div className={cn('$hook-multi-select', wrapper)}>\n <Controller\n control={control}\n name={name}\n rules={rules}\n render={({ field: { onChange, value } }) => {\n return (\n <FormMultiSelect\n id={id}\n name={name}\n label={label}\n value={value ?? []}\n onChange={onChange}\n disabled={disabled}\n classNames={restClassnames}\n {...rest}\n />\n );\n }}\n />\n\n <FormError field={name} className=\"mt-1\" message={error} />\n </div>\n );\n}\n"]}