@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,44 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3
+
4
+ var _chunkFSU3BKPKjs = require('./chunk-FSU3BKPK.js');
5
+
6
+
7
+ var _chunkCKGMFUU2js = require('./chunk-CKGMFUU2.js');
8
+
9
+
10
+ var _chunkPSPAJNNBjs = require('./chunk-PSPAJNNB.js');
11
+
12
+ // components/form/tag-picker.tsx
13
+ var _kebabCase2 = require('lodash-es/kebabCase'); var _kebabCase3 = _interopRequireDefault(_kebabCase2);
14
+ function FormTagPicker({
15
+ id,
16
+ name,
17
+ label,
18
+ value,
19
+ onChange,
20
+ suggestions = [],
21
+ placeholder = "Add tags...",
22
+ disabled = false,
23
+ required = false,
24
+ classNames
25
+ }) {
26
+ if (!id) id = _kebabCase3.default.call(void 0, name);
27
+ return /* @__PURE__ */ React.createElement("div", { className: _chunkPSPAJNNBjs.cn.call(void 0, "space-y-2", classNames == null ? void 0 : classNames.wrapper) }, label && /* @__PURE__ */ React.createElement(_chunkCKGMFUU2js.Label, { htmlFor: id, className: classNames == null ? void 0 : classNames.label, required }, label), /* @__PURE__ */ React.createElement(
28
+ _chunkFSU3BKPKjs.TagPicker,
29
+ {
30
+ id,
31
+ value,
32
+ onChange,
33
+ suggestions,
34
+ placeholder,
35
+ disabled,
36
+ className: classNames == null ? void 0 : classNames.input
37
+ }
38
+ ));
39
+ }
40
+
41
+
42
+
43
+ exports.FormTagPicker = FormTagPicker;
44
+ //# sourceMappingURL=chunk-2NUE7GJ3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-2NUE7GJ3.js","../components/form/tag-picker.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACTA,wGAAuB;AAuBhB,SAAS,aAAA,CAAc;AAAA,EAC5B,EAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc,CAAC,CAAA;AAAA,EACf,YAAA,EAAc,aAAA;AAAA,EACd,SAAA,EAAW,KAAA;AAAA,EACX,SAAA,EAAW,KAAA;AAAA,EACX;AACF,CAAA,EAAuB;AACrB,EAAA,GAAA,CAAI,CAAC,EAAA,EAAI,GAAA,EAAK,iCAAA,IAAe,CAAA;AAE7B,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,iCAAA,WAAG,EAAa,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,OAAO,EAAA,CAAA,EAChD,MAAA,mBACC,KAAA,CAAA,aAAA,CAAC,sBAAA,EAAA,EAAM,OAAA,EAAS,EAAA,EAAI,SAAA,EAAW,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY,KAAA,EAAO,SAAA,CAAA,EAC/C,KACH,CAAA,kBAGF,KAAA,CAAA,aAAA;AAAA,IAAC,0BAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA,EAAW,WAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA,UAAA,CAAY;AAAA,IAAA;AAAA,EACzB,CACF,CAAA;AAEJ;ADnBA;AACA;AACE;AACF,sCAAC","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-2NUE7GJ3.js","sourcesContent":[null,"\"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"]}
@@ -0,0 +1,82 @@
1
+ import {
2
+ MultiSelector,
3
+ MultiSelectorInput,
4
+ MultiSelectorItem,
5
+ MultiSelectorList,
6
+ MultiSelectorTrigger
7
+ } from "./chunk-7JYFZETL.mjs";
8
+ import {
9
+ Popover,
10
+ PopoverContent,
11
+ PopoverTrigger
12
+ } from "./chunk-CSL3CTEN.mjs";
13
+ import {
14
+ Label
15
+ } from "./chunk-MM5OJOOR.mjs";
16
+ import {
17
+ cn
18
+ } from "./chunk-KGUUDFJE.mjs";
19
+
20
+ // components/form/multi-select.tsx
21
+ import _isString from "lodash-es/isString";
22
+ import _kebabCase from "lodash-es/kebabCase";
23
+ import React from "react";
24
+ function FormMultiSelect({
25
+ id,
26
+ name,
27
+ label,
28
+ placeholder = "Select options...",
29
+ data,
30
+ value = [],
31
+ onChange,
32
+ classNames,
33
+ required,
34
+ disabled,
35
+ loop = false
36
+ }) {
37
+ const options = React.useMemo(() => {
38
+ if (!data || data.length === 0) return [];
39
+ if (_isString(data[0])) {
40
+ return data.map((currentValue) => ({ label: currentValue, value: currentValue }));
41
+ }
42
+ return data;
43
+ }, [data]);
44
+ const selectedValues = React.useMemo(() => {
45
+ return value.map((currentValue) => options.find((option) => option.value === currentValue)).filter((option) => !!option);
46
+ }, [options, value]);
47
+ const handleValueChange = (newValues) => {
48
+ onChange(newValues.map((currentValue) => currentValue.value));
49
+ };
50
+ if (!id) id = _kebabCase(name);
51
+ return /* @__PURE__ */ React.createElement("div", { className: cn("flex flex-col gap-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(
52
+ MultiSelector,
53
+ {
54
+ values: selectedValues,
55
+ onValuesChange: handleValueChange,
56
+ loop,
57
+ disabled,
58
+ className: "p-0"
59
+ },
60
+ /* @__PURE__ */ React.createElement(Popover, null, /* @__PURE__ */ React.createElement(PopoverTrigger, { asChild: true }, /* @__PURE__ */ React.createElement(MultiSelectorTrigger, { className: cn("cursor-pointer", classNames == null ? void 0 : classNames.trigger) }, /* @__PURE__ */ React.createElement(
61
+ MultiSelectorInput,
62
+ {
63
+ id,
64
+ disabled,
65
+ placeholder: selectedValues.length === 0 ? placeholder : "",
66
+ className: classNames == null ? void 0 : classNames.input
67
+ }
68
+ ))), /* @__PURE__ */ React.createElement(
69
+ PopoverContent,
70
+ {
71
+ align: "start",
72
+ className: cn("w-[var(--radix-popover-trigger-width)] p-0", classNames == null ? void 0 : classNames.content)
73
+ },
74
+ /* @__PURE__ */ React.createElement(MultiSelectorList, { className: "static relative border-none shadow-none" }, options.map((option) => /* @__PURE__ */ React.createElement(MultiSelectorItem, { key: option.value, value: option.value, label: option.label }, /* @__PURE__ */ React.createElement("span", null, option.label))))
75
+ ))
76
+ ));
77
+ }
78
+
79
+ export {
80
+ FormMultiSelect
81
+ };
82
+ //# sourceMappingURL=chunk-3PZY5HRH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/form/multi-select.tsx"],"sourcesContent":["\"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"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,OAAO,eAAe;AACtB,OAAO,gBAAgB;AACvB,OAAO,WAAW;AAkCX,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,QAAQ,CAAC;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAAyB;AACvB,QAAM,UAA8B,MAAM,QAAQ,MAAM;AACtD,QAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO,CAAC;AACxC,QAAI,UAAU,KAAK,CAAC,CAAC,GAAG;AACtB,aAAQ,KAAkB,IAAI,CAAC,kBAAkB,EAAE,OAAO,cAAc,OAAO,aAAa,EAAE;AAAA,IAChG;AACA,WAAO;AAAA,EACT,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,iBAAiB,MAAM,QAAQ,MAAM;AACzC,WAAO,MACJ,IAAI,CAAC,iBAAiB,QAAQ,KAAK,CAAC,WAAW,OAAO,UAAU,YAAY,CAAC,EAC7E,OAAO,CAAC,WAAuC,CAAC,CAAC,MAAM;AAAA,EAC5D,GAAG,CAAC,SAAS,KAAK,CAAC;AAEnB,QAAM,oBAAoB,CAAC,cAAkC;AAC3D,aAAS,UAAU,IAAI,CAAC,iBAAiB,aAAa,KAAK,CAAC;AAAA,EAC9D;AAEA,MAAI,CAAC,GAAI,MAAK,WAAW,IAAI;AAE7B,SACE,oCAAC,SAAI,WAAW,GAAG,uBAAuB,yCAAY,OAAO,KAC1D,SACC,oCAAC,SAAM,SAAS,IAAI,WAAW,yCAAY,OAAO,YAC/C,KACH,GAGF;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA,WAAU;AAAA;AAAA,IAEV,oCAAC,eACC,oCAAC,kBAAe,SAAO,QACrB,oCAAC,wBAAqB,WAAW,GAAG,kBAAkB,yCAAY,OAAO,KACvE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,aAAa,eAAe,WAAW,IAAI,cAAc;AAAA,QACzD,WAAW,yCAAY;AAAA;AAAA,IACzB,CACF,CACF,GAEA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,WAAW,GAAG,8CAA8C,yCAAY,OAAO;AAAA;AAAA,MAE/E,oCAAC,qBAAkB,WAAU,6CAC1B,QAAQ,IAAI,CAAC,WACZ,oCAAC,qBAAkB,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,SACvE,oCAAC,cAAM,OAAO,KAAM,CACtB,CACD,CACH;AAAA,IACF,CACF;AAAA,EACF,CACF;AAEJ;","names":[]}
@@ -2,29 +2,22 @@
2
2
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3
3
 
4
4
 
5
- var _chunk2YMMYND2js = require('../../../chunk-2YMMYND2.js');
6
5
 
7
6
 
7
+ var _chunkLAIO3QZXjs = require('./chunk-LAIO3QZX.js');
8
8
 
9
9
 
10
+ var _chunk2YMMYND2js = require('./chunk-2YMMYND2.js');
10
11
 
11
- var _chunkAJLAS62Xjs = require('../../../chunk-AJLAS62X.js');
12
- require('../../../chunk-MJT6B7OJ.js');
13
- require('../../../chunk-RFORRZRN.js');
14
- require('../../../chunk-UFRPUC7K.js');
15
- require('../../../chunk-RJG7QLDD.js');
16
- require('../../../chunk-KB6BX6LA.js');
17
- require('../../../chunk-GV62APQ6.js');
18
12
 
13
+ var _chunkPSPAJNNBjs = require('./chunk-PSPAJNNB.js');
19
14
 
20
- var _chunkPSPAJNNBjs = require('../../../chunk-PSPAJNNB.js');
21
15
 
22
16
 
23
17
 
18
+ var _chunk2NMEKWO5js = require('./chunk-2NMEKWO5.js');
24
19
 
25
- var _chunk2NMEKWO5js = require('../../../chunk-2NMEKWO5.js');
26
-
27
- // components/ui/extension/multi-select.tsx
20
+ // components/ui/multi-select.tsx
28
21
  var _iconsreact = require('@tabler/icons-react');
29
22
  var _cmdk = require('cmdk');
30
23
  var _react = require('react'); var _react2 = _interopRequireDefault(_react);
@@ -51,14 +44,16 @@ var MultiSelector = (_a) => {
51
44
  loop = false,
52
45
  className,
53
46
  children,
54
- dir
47
+ dir,
48
+ disabled = false
55
49
  } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, [
56
50
  "values",
57
51
  "onValuesChange",
58
52
  "loop",
59
53
  "className",
60
54
  "children",
61
- "dir"
55
+ "dir",
56
+ "disabled"
62
57
  ]);
63
58
  const [inputValue, setInputValue] = _react.useState.call(void 0, "");
64
59
  const [open, setOpen] = _react.useState.call(void 0, false);
@@ -66,20 +61,21 @@ var MultiSelector = (_a) => {
66
61
  const inputRef = _react2.default.useRef(null);
67
62
  const onValueChangeHandler = _react.useCallback.call(void 0,
68
63
  (val) => {
69
- const element = searchForValue(value, val);
70
- if (element !== -1) {
71
- onValueChange(value.filter((_, index) => index !== element));
64
+ if (disabled) return;
65
+ const exists = value.some((currentValue) => currentValue.value === val.value);
66
+ if (exists) {
67
+ onValueChange(value.filter((currentValue) => currentValue.value !== val.value));
72
68
  } else {
73
69
  onValueChange([...value, val]);
74
70
  }
75
71
  },
76
- // eslint-disable-next-line react-hooks/exhaustive-deps
77
- [value]
72
+ [disabled, onValueChange, value]
78
73
  );
79
74
  const handleKeyDown = _react.useCallback.call(void 0,
80
75
  (e) => {
81
76
  var _a2, _b2;
82
77
  e.stopPropagation();
78
+ if (disabled) return;
83
79
  const target = inputRef.current;
84
80
  if (!target) return;
85
81
  const selectionStart = (_a2 = target.selectionStart) != null ? _a2 : 0;
@@ -105,10 +101,8 @@ var MultiSelector = (_a) => {
105
101
  if (value.length > 0 && (activeIndex !== -1 || loop)) {
106
102
  moveNext();
107
103
  }
108
- } else {
109
- if (value.length > 0 && target.selectionStart === 0) {
110
- movePrev();
111
- }
104
+ } else if (value.length > 0 && target.selectionStart === 0) {
105
+ movePrev();
112
106
  }
113
107
  break;
114
108
  case "ArrowRight":
@@ -116,10 +110,8 @@ var MultiSelector = (_a) => {
116
110
  if (value.length > 0 && target.selectionStart === 0) {
117
111
  movePrev();
118
112
  }
119
- } else {
120
- if (value.length > 0 && (activeIndex !== -1 || loop)) {
121
- moveNext();
122
- }
113
+ } else if (value.length > 0 && (activeIndex !== -1 || loop)) {
114
+ moveNext();
123
115
  }
124
116
  break;
125
117
  case "Backspace":
@@ -128,10 +120,8 @@ var MultiSelector = (_a) => {
128
120
  if (activeIndex !== -1 && activeIndex < value.length) {
129
121
  onValueChangeHandler(value[activeIndex]);
130
122
  moveCurrent();
131
- } else {
132
- if (target.selectionStart === 0) {
133
- onValueChangeHandler(value[value.length - 1]);
134
- }
123
+ } else if (target.selectionStart === 0) {
124
+ onValueChangeHandler(value[value.length - 1]);
135
125
  }
136
126
  }
137
127
  break;
@@ -148,7 +138,7 @@ var MultiSelector = (_a) => {
148
138
  break;
149
139
  }
150
140
  },
151
- [value, activeIndex, loop]
141
+ [activeIndex, dir, disabled, loop, onValueChangeHandler, open, value]
152
142
  );
153
143
  return /* @__PURE__ */ _react2.default.createElement(
154
144
  MultiSelectContext.Provider,
@@ -162,14 +152,15 @@ var MultiSelector = (_a) => {
162
152
  setInputValue,
163
153
  activeIndex,
164
154
  setActiveIndex,
165
- ref: inputRef
155
+ ref: inputRef,
156
+ disabled
166
157
  }
167
158
  },
168
159
  /* @__PURE__ */ _react2.default.createElement(
169
- _chunkAJLAS62Xjs.Command,
160
+ _chunkLAIO3QZXjs.Command,
170
161
  _chunk2NMEKWO5js.__spreadValues.call(void 0, {
171
162
  onKeyDown: handleKeyDown,
172
- className: _chunkPSPAJNNBjs.cn.call(void 0, "overflow-visible bg-transparent flex flex-col space-y-2", className),
163
+ className: _chunkPSPAJNNBjs.cn.call(void 0, "flex flex-col overflow-visible bg-transparent", className),
173
164
  dir
174
165
  }, props),
175
166
  children
@@ -179,7 +170,7 @@ var MultiSelector = (_a) => {
179
170
  var MultiSelectorTrigger = _react.forwardRef.call(void 0,
180
171
  (_a, ref) => {
181
172
  var _b = _a, { className, children } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, ["className", "children"]);
182
- const { value, onValueChange, activeIndex } = useMultiSelect();
173
+ const { value, onValueChange, activeIndex, disabled } = useMultiSelect();
183
174
  const mousePreventDefault = _react.useCallback.call(void 0, (e) => {
184
175
  e.preventDefault();
185
176
  e.stopPropagation();
@@ -189,10 +180,9 @@ var MultiSelectorTrigger = _react.forwardRef.call(void 0,
189
180
  _chunk2NMEKWO5js.__spreadValues.call(void 0, {
190
181
  ref,
191
182
  className: _chunkPSPAJNNBjs.cn.call(void 0,
192
- "flex flex-wrap gap-1 px-2 py-2 ring-1 ring-muted rounded-lg bg-background border rounded-sm",
193
- {
194
- "ring-1 focus-within:ring-ring": activeIndex === -1
195
- },
183
+ "flex flex-wrap gap-1 rounded-lg border bg-background px-2 py-1",
184
+ activeIndex === -1 && "focus-within:ring-1 focus-within:ring-ring",
185
+ disabled && "cursor-not-allowed opacity-60",
196
186
  className
197
187
  )
198
188
  }, props),
@@ -201,8 +191,8 @@ var MultiSelectorTrigger = _react.forwardRef.call(void 0,
201
191
  {
202
192
  key: item.value,
203
193
  className: _chunkPSPAJNNBjs.cn.call(void 0,
204
- "px-1.5 rounded-md flex items-center gap-1",
205
- activeIndex === index && "ring-2 ring-muted-foreground "
194
+ "flex items-center gap-1 rounded-md px-1.5",
195
+ activeIndex === index && "ring-2 ring-muted-foreground"
206
196
  ),
207
197
  variant: "secondary"
208
198
  },
@@ -210,14 +200,19 @@ var MultiSelectorTrigger = _react.forwardRef.call(void 0,
210
200
  /* @__PURE__ */ _react2.default.createElement(
211
201
  "button",
212
202
  {
213
- "aria-label": `Remove ${item} option`,
214
- "aria-roledescription": "button to remove option",
203
+ "aria-label": `Remove ${item.label} option`,
215
204
  type: "button",
205
+ disabled,
216
206
  onMouseDown: mousePreventDefault,
217
- onClick: () => onValueChange(item)
207
+ onClick: (event) => {
208
+ event.preventDefault();
209
+ event.stopPropagation();
210
+ onValueChange(item);
211
+ },
212
+ 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 disabled:cursor-not-allowed"
218
213
  },
219
214
  /* @__PURE__ */ _react2.default.createElement("span", { className: "sr-only" }, "Remove ", item.label, " option"),
220
- /* @__PURE__ */ _react2.default.createElement(_iconsreact.IconX, { className: "h-4 w-4 hover:stroke-destructive" })
215
+ /* @__PURE__ */ _react2.default.createElement(_iconsreact.IconX, { className: "h-3.5 w-3.5" })
221
216
  )
222
217
  )),
223
218
  children
@@ -226,14 +221,15 @@ var MultiSelectorTrigger = _react.forwardRef.call(void 0,
226
221
  );
227
222
  MultiSelectorTrigger.displayName = "MultiSelectorTrigger";
228
223
  var MultiSelectorInput = _react.forwardRef.call(void 0, (_a, ref) => {
229
- var _b = _a, { className } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, ["className"]);
230
- const { setOpen, inputValue, setInputValue, activeIndex, setActiveIndex, ref: inputRef } = useMultiSelect();
224
+ var _b = _a, { className, disabled: disabledProp } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, ["className", "disabled"]);
225
+ const { setOpen, inputValue, setInputValue, activeIndex, setActiveIndex, ref: inputRef, disabled } = useMultiSelect();
231
226
  return /* @__PURE__ */ _react2.default.createElement(
232
227
  _cmdk.Command.Input,
233
228
  _chunk2NMEKWO5js.__spreadProps.call(void 0, _chunk2NMEKWO5js.__spreadValues.call(void 0, {}, props), {
234
229
  tabIndex: 0,
235
230
  ref: inputRef,
236
231
  value: inputValue,
232
+ disabled: disabled || disabledProp,
237
233
  onValueChange: activeIndex === -1 ? setInputValue : void 0,
238
234
  onBlur: () => {
239
235
  setInputValue("");
@@ -242,7 +238,7 @@ var MultiSelectorInput = _react.forwardRef.call(void 0, (_a, ref) => {
242
238
  onFocus: () => setOpen(true),
243
239
  onClick: () => setActiveIndex(-1),
244
240
  className: _chunkPSPAJNNBjs.cn.call(void 0,
245
- "p-0 bg-transparent border-none outline-none focus:outline-none focus:ring-0 placeholder:text-muted-foreground flex-1 text-sm",
241
+ "flex-1 border-none bg-transparent p-0 text-sm outline-none placeholder:text-muted-foreground focus:outline-none focus:ring-0",
246
242
  className,
247
243
  activeIndex !== -1 && "caret-transparent"
248
244
  )
@@ -252,41 +248,45 @@ var MultiSelectorInput = _react.forwardRef.call(void 0, (_a, ref) => {
252
248
  MultiSelectorInput.displayName = "MultiSelectorInput";
253
249
  var MultiSelectorContent = _react.forwardRef.call(void 0, ({ children }, ref) => {
254
250
  const { open } = useMultiSelect();
255
- return /* @__PURE__ */ _react2.default.createElement("div", { ref, className: "relative" }, open ? children : null);
251
+ if (!open) return null;
252
+ return /* @__PURE__ */ _react2.default.createElement("div", { ref, className: "relative" }, children);
256
253
  });
257
254
  MultiSelectorContent.displayName = "MultiSelectorContent";
258
255
  var MultiSelectorList = _react.forwardRef.call(void 0, ({ className, children }, ref) => {
259
256
  return /* @__PURE__ */ _react2.default.createElement(
260
- _chunkAJLAS62Xjs.CommandList,
257
+ _chunkLAIO3QZXjs.CommandList,
261
258
  {
262
259
  ref,
263
260
  className: _chunkPSPAJNNBjs.cn.call(void 0,
264
- "p-2 flex flex-col gap-2 rounded-md scrollbar-thin scrollbar-track-transparent transition-colors scrollbar-thumb-muted-foreground dark:scrollbar-thumb-muted scrollbar-thumb-rounded-lg w-full absolute bg-background shadow-md z-100 border border-muted top-0",
261
+ "absolute top-0 z-100 flex w-full flex-col gap-2 rounded-md border border-muted bg-background p-2 shadow-md scrollbar-thin scrollbar-track-transparent scrollbar-thumb-rounded-lg scrollbar-thumb-muted-foreground transition-colors dark:scrollbar-thumb-muted",
265
262
  className
266
263
  )
267
264
  },
268
265
  children,
269
- /* @__PURE__ */ _react2.default.createElement(_chunkAJLAS62Xjs.CommandEmpty, null, /* @__PURE__ */ _react2.default.createElement("span", { className: "text-muted-foreground" }, "No results found"))
266
+ /* @__PURE__ */ _react2.default.createElement(_chunkLAIO3QZXjs.CommandEmpty, null, /* @__PURE__ */ _react2.default.createElement("span", { className: "text-muted-foreground" }, "No results found"))
270
267
  );
271
268
  });
272
269
  MultiSelectorList.displayName = "MultiSelectorList";
273
270
  var MultiSelectorItem = _react.forwardRef.call(void 0, (_a, ref) => {
274
- var _b = _a, { className, value, label, children } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, ["className", "value", "label", "children"]);
275
- const { value: Options, onValueChange, setInputValue } = useMultiSelect();
271
+ var _b = _a, { className, value, label, children, disabled: disabledProp } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, ["className", "value", "label", "children", "disabled"]);
272
+ const { value: options, onValueChange, setInputValue, disabled } = useMultiSelect();
276
273
  const mousePreventDefault = _react.useCallback.call(void 0, (e) => {
277
274
  e.preventDefault();
278
275
  e.stopPropagation();
279
276
  }, []);
280
- const isIncluded = searchForValue(Options, {
277
+ const isIncluded = searchForValue(options, {
281
278
  value,
282
279
  label
283
280
  }) !== -1;
281
+ const isDisabled = disabled || disabledProp;
284
282
  return /* @__PURE__ */ _react2.default.createElement(
285
- _chunkAJLAS62Xjs.CommandItem,
283
+ _chunkLAIO3QZXjs.CommandItem,
286
284
  _chunk2NMEKWO5js.__spreadProps.call(void 0, _chunk2NMEKWO5js.__spreadValues.call(void 0, {
287
285
  ref
288
286
  }, props), {
287
+ disabled: isDisabled,
289
288
  onSelect: () => {
289
+ if (isDisabled) return;
290
290
  onValueChange({
291
291
  value,
292
292
  label
@@ -294,10 +294,10 @@ var MultiSelectorItem = _react.forwardRef.call(void 0, (_a, ref) => {
294
294
  setInputValue("");
295
295
  },
296
296
  className: _chunkPSPAJNNBjs.cn.call(void 0,
297
- "rounded-md cursor-pointer px-2 py-1 transition-colors flex justify-between",
297
+ "flex cursor-pointer justify-between rounded-md px-2 py-1 transition-colors",
298
298
  className,
299
- isIncluded && "opacity-50 cursor-default",
300
- props.disabled && "opacity-50 cursor-not-allowed"
299
+ isIncluded && "cursor-default opacity-50",
300
+ isDisabled && "cursor-not-allowed opacity-50"
301
301
  ),
302
302
  onMouseDown: mousePreventDefault
303
303
  }),
@@ -313,5 +313,6 @@ MultiSelectorItem.displayName = "MultiSelectorItem";
313
313
 
314
314
 
315
315
 
316
- exports.MultiSelector = MultiSelector; exports.MultiSelectorContent = MultiSelectorContent; exports.MultiSelectorInput = MultiSelectorInput; exports.MultiSelectorItem = MultiSelectorItem; exports.MultiSelectorList = MultiSelectorList; exports.MultiSelectorTrigger = MultiSelectorTrigger;
317
- //# sourceMappingURL=multi-select.js.map
316
+
317
+ exports.MultiSelector = MultiSelector; exports.MultiSelectorTrigger = MultiSelectorTrigger; exports.MultiSelectorInput = MultiSelectorInput; exports.MultiSelectorContent = MultiSelectorContent; exports.MultiSelectorList = MultiSelectorList; exports.MultiSelectorItem = MultiSelectorItem;
318
+ //# sourceMappingURL=chunk-3TG6ZVFG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-3TG6ZVFG.js","../components/ui/multi-select.tsx"],"names":["_a","_b"],"mappings":"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","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-3TG6ZVFG.js","sourcesContent":[null,"\"use client\";\nimport { IconCheck, IconX } from '@tabler/icons-react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport React, { type KeyboardEvent, createContext, forwardRef, useCallback, useContext, useState } from 'react';\n\nimport { cn } from '../../utils/ui';\nimport { Badge } from './badge';\nimport { Command, CommandEmpty, CommandItem, CommandList } from './command';\n\nexport type MultiSelectValue = {\n value: string;\n label: string;\n};\n\ninterface MultiSelectorProps extends React.ComponentPropsWithoutRef<typeof CommandPrimitive> {\n values: MultiSelectValue[];\n onValuesChange: (value: MultiSelectValue[]) => void;\n loop?: boolean;\n className?: string;\n children?: React.ReactNode;\n dir?: 'ltr' | 'rtl';\n disabled?: boolean;\n}\n\ninterface MultiSelectContextProps {\n value: MultiSelectValue[];\n onValueChange: (value: MultiSelectValue) => void;\n open: boolean;\n setOpen: (value: boolean) => void;\n inputValue: string;\n setInputValue: React.Dispatch<React.SetStateAction<string>>;\n activeIndex: number;\n setActiveIndex: React.Dispatch<React.SetStateAction<number>>;\n ref: React.RefObject<HTMLInputElement | null>;\n disabled: boolean;\n}\n\nconst MultiSelectContext = createContext<MultiSelectContextProps | null>(null);\n\nconst useMultiSelect = () => {\n const context = useContext(MultiSelectContext);\n if (!context) {\n throw new Error('useMultiSelect must be used within MultiSelectProvider');\n }\n return context;\n};\n\nfunction searchForValue(source: MultiSelectValue[], value: MultiSelectValue) {\n for (let i = 0; i < source.length; i++) {\n if (source[i].value === value.value) {\n return i;\n }\n }\n return -1;\n}\n\nconst MultiSelector = ({\n values: value,\n onValuesChange: onValueChange,\n loop = false,\n className,\n children,\n dir,\n disabled = false,\n ...props\n}: MultiSelectorProps) => {\n const [inputValue, setInputValue] = useState('');\n const [open, setOpen] = useState<boolean>(false);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const onValueChangeHandler = useCallback(\n (val: MultiSelectValue) => {\n if (disabled) return;\n\n const exists = value.some((currentValue) => currentValue.value === val.value);\n if (exists) {\n onValueChange(value.filter((currentValue) => currentValue.value !== val.value));\n } else {\n onValueChange([...value, val]);\n }\n },\n [disabled, onValueChange, value],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n e.stopPropagation();\n\n if (disabled) return;\n\n const target = inputRef.current;\n\n if (!target) return;\n\n const selectionStart = target.selectionStart ?? 0;\n const selectionEnd = target.selectionEnd ?? 0;\n\n if (selectionStart !== selectionEnd) {\n return;\n }\n\n const moveNext = () => {\n const nextIndex = activeIndex + 1;\n setActiveIndex(nextIndex > value.length - 1 ? (loop ? 0 : -1) : nextIndex);\n };\n\n const movePrev = () => {\n const prevIndex = activeIndex - 1;\n setActiveIndex(prevIndex < 0 ? value.length - 1 : prevIndex);\n };\n\n const moveCurrent = () => {\n const newIndex = activeIndex - 1 <= 0 ? (value.length - 1 === 0 ? -1 : 0) : activeIndex - 1;\n setActiveIndex(newIndex);\n };\n\n switch (e.key) {\n case 'ArrowLeft':\n if (dir === 'rtl') {\n if (value.length > 0 && (activeIndex !== -1 || loop)) {\n moveNext();\n }\n } else if (value.length > 0 && target.selectionStart === 0) {\n movePrev();\n }\n break;\n\n case 'ArrowRight':\n if (dir === 'rtl') {\n if (value.length > 0 && target.selectionStart === 0) {\n movePrev();\n }\n } else if (value.length > 0 && (activeIndex !== -1 || loop)) {\n moveNext();\n }\n break;\n\n case 'Backspace':\n case 'Delete':\n if (value.length > 0) {\n if (activeIndex !== -1 && activeIndex < value.length) {\n onValueChangeHandler(value[activeIndex]);\n moveCurrent();\n } else if (target.selectionStart === 0) {\n onValueChangeHandler(value[value.length - 1]);\n }\n }\n break;\n\n case 'Enter':\n setOpen(true);\n break;\n\n case 'Escape':\n if (activeIndex !== -1) {\n setActiveIndex(-1);\n } else if (open) {\n setInputValue('');\n setOpen(false);\n }\n break;\n }\n },\n [activeIndex, dir, disabled, loop, onValueChangeHandler, open, value],\n );\n\n return (\n <MultiSelectContext.Provider\n value={{\n value,\n onValueChange: onValueChangeHandler,\n open,\n setOpen,\n inputValue,\n setInputValue,\n activeIndex,\n setActiveIndex,\n ref: inputRef,\n disabled,\n }}\n >\n <Command\n onKeyDown={handleKeyDown}\n className={cn('flex flex-col overflow-visible bg-transparent', className)}\n dir={dir}\n {...props}\n >\n {children}\n </Command>\n </MultiSelectContext.Provider>\n );\n};\n\nconst MultiSelectorTrigger = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { value, onValueChange, activeIndex, disabled } = useMultiSelect();\n\n const mousePreventDefault = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-wrap gap-1 rounded-lg border bg-background px-2 py-1',\n activeIndex === -1 && 'focus-within:ring-1 focus-within:ring-ring',\n disabled && 'cursor-not-allowed opacity-60',\n className,\n )}\n {...props}\n >\n {value.map((item, index) => (\n <Badge\n key={item.value}\n className={cn(\n 'flex items-center gap-1 rounded-md px-1.5',\n activeIndex === index && 'ring-2 ring-muted-foreground',\n )}\n variant=\"secondary\"\n >\n <span className=\"text-xs\">{item.label}</span>\n <button\n aria-label={`Remove ${item.label} option`}\n type=\"button\"\n disabled={disabled}\n onMouseDown={mousePreventDefault}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n\n onValueChange(item);\n }}\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 disabled:cursor-not-allowed\"\n >\n <span className=\"sr-only\">Remove {item.label} option</span>\n <IconX className=\"h-3.5 w-3.5\" />\n </button>\n </Badge>\n ))}\n {children}\n </div>\n );\n },\n);\n\nMultiSelectorTrigger.displayName = 'MultiSelectorTrigger';\n\nconst MultiSelectorInput = forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, disabled: disabledProp, ...props }, ref) => {\n const { setOpen, inputValue, setInputValue, activeIndex, setActiveIndex, ref: inputRef, disabled } = useMultiSelect();\n\n return (\n <CommandPrimitive.Input\n {...props}\n tabIndex={0}\n ref={inputRef}\n value={inputValue}\n disabled={disabled || disabledProp}\n onValueChange={activeIndex === -1 ? setInputValue : undefined}\n onBlur={() => {\n setInputValue('');\n setOpen(false);\n }}\n onFocus={() => setOpen(true)}\n onClick={() => setActiveIndex(-1)}\n className={cn(\n 'flex-1 border-none bg-transparent p-0 text-sm outline-none placeholder:text-muted-foreground focus:outline-none focus:ring-0',\n className,\n activeIndex !== -1 && 'caret-transparent',\n )}\n />\n );\n});\n\nMultiSelectorInput.displayName = 'MultiSelectorInput';\n\nconst MultiSelectorContent = forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ children }, ref) => {\n const { open } = useMultiSelect();\n\n if (!open) return null;\n\n return (\n <div ref={ref} className=\"relative\">\n {children}\n </div>\n );\n});\n\nMultiSelectorContent.displayName = 'MultiSelectorContent';\n\nconst MultiSelectorList = forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, children }, ref) => {\n return (\n <CommandList\n ref={ref}\n className={cn(\n 'absolute top-0 z-100 flex w-full flex-col gap-2 rounded-md border border-muted bg-background p-2 shadow-md scrollbar-thin scrollbar-track-transparent scrollbar-thumb-rounded-lg scrollbar-thumb-muted-foreground transition-colors dark:scrollbar-thumb-muted',\n className,\n )}\n >\n {children}\n <CommandEmpty>\n <span className=\"text-muted-foreground\">No results found</span>\n </CommandEmpty>\n </CommandList>\n );\n});\n\nMultiSelectorList.displayName = 'MultiSelectorList';\n\nconst MultiSelectorItem = forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n { value: string; label: string } & React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, value, label, children, disabled: disabledProp, ...props }, ref) => {\n const { value: options, onValueChange, setInputValue, disabled } = useMultiSelect();\n\n const mousePreventDefault = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const isIncluded =\n searchForValue(options, {\n value,\n label,\n }) !== -1;\n\n const isDisabled = disabled || disabledProp;\n\n return (\n <CommandItem\n ref={ref}\n {...props}\n disabled={isDisabled}\n onSelect={() => {\n if (isDisabled) return;\n\n onValueChange({\n value,\n label,\n });\n setInputValue('');\n }}\n className={cn(\n 'flex cursor-pointer justify-between rounded-md px-2 py-1 transition-colors',\n className,\n isIncluded && 'cursor-default opacity-50',\n isDisabled && 'cursor-not-allowed opacity-50',\n )}\n onMouseDown={mousePreventDefault}\n >\n {children}\n {isIncluded && <IconCheck className=\"h-4 w-4\" />}\n </CommandItem>\n );\n});\n\nMultiSelectorItem.displayName = 'MultiSelectorItem';\n\nexport {\n MultiSelector,\n MultiSelectorTrigger,\n MultiSelectorInput,\n MultiSelectorContent,\n MultiSelectorList,\n MultiSelectorItem,\n};\n"]}