@egose/shadcn-theme 0.1.6 → 0.1.8
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.
- package/chunk-ELSPE6GB.mjs +43 -0
- package/chunk-ELSPE6GB.mjs.map +1 -0
- package/{chunk-3ZN766EW.js → chunk-G6WKPZTL.js} +3 -3
- package/{chunk-3ZN766EW.js.map → chunk-G6WKPZTL.js.map} +1 -1
- package/{chunk-AJLAS62X.js → chunk-LAIO3QZX.js} +4 -4
- package/{chunk-AJLAS62X.js.map → chunk-LAIO3QZX.js.map} +1 -1
- package/{chunk-MJT6B7OJ.js → chunk-LPDYWZN6.js} +3 -3
- package/{chunk-MJT6B7OJ.js.map → chunk-LPDYWZN6.js.map} +1 -1
- package/chunk-NCJI2DCV.mjs +130 -0
- package/chunk-NCJI2DCV.mjs.map +1 -0
- package/chunk-P6L4JTWO.js +44 -0
- package/chunk-P6L4JTWO.js.map +1 -0
- package/{chunk-432PQWGO.mjs → chunk-RJVQU443.mjs} +2 -2
- package/{components/ui/extension/multi-select.mjs → chunk-RNKMPQDZ.mjs} +66 -64
- package/chunk-RNKMPQDZ.mjs.map +1 -0
- package/chunk-RSFL2TUC.mjs +82 -0
- package/chunk-RSFL2TUC.mjs.map +1 -0
- package/chunk-S6HQ25BZ.js +83 -0
- package/chunk-S6HQ25BZ.js.map +1 -0
- package/chunk-WK4MG4VT.js +131 -0
- package/chunk-WK4MG4VT.js.map +1 -0
- package/{components/ui/extension/multi-select.js → chunk-WXEEDLLR.js} +78 -76
- package/chunk-WXEEDLLR.js.map +1 -0
- package/{chunk-HKZRXGJ7.mjs → chunk-YDRPNCWF.mjs} +4 -4
- package/{chunk-ZMMYQNQV.mjs → chunk-ZFBUIBJH.mjs} +2 -2
- package/components/form/hook-multi-select.d.mts +14 -0
- package/components/form/hook-multi-select.d.ts +14 -0
- package/components/form/hook-multi-select.js +76 -0
- package/components/form/hook-multi-select.js.map +1 -0
- package/components/form/hook-multi-select.mjs +75 -0
- package/components/form/hook-multi-select.mjs.map +1 -0
- package/components/form/hook-searchable-select.js +5 -5
- package/components/form/hook-searchable-select.mjs +4 -4
- package/components/form/hook-tag-picker.d.mts +12 -0
- package/components/form/hook-tag-picker.d.ts +12 -0
- package/components/form/hook-tag-picker.js +66 -0
- package/components/form/hook-tag-picker.js.map +1 -0
- package/components/form/hook-tag-picker.mjs +65 -0
- package/components/form/hook-tag-picker.mjs.map +1 -0
- package/components/form/multi-select.d.mts +25 -1
- package/components/form/multi-select.d.ts +25 -1
- package/components/form/multi-select.js +20 -1
- package/components/form/multi-select.js.map +1 -1
- package/components/form/multi-select.mjs +19 -0
- package/components/form/searchable-select.js +5 -5
- package/components/form/searchable-select.mjs +4 -4
- package/components/form/tag-picker.d.mts +21 -0
- package/components/form/tag-picker.d.ts +21 -0
- package/components/form/tag-picker.js +14 -0
- package/components/form/tag-picker.js.map +1 -0
- package/components/form/tag-picker.mjs +13 -0
- package/components/form/tag-picker.mjs.map +1 -0
- package/components/ui/combobox.js +5 -5
- package/components/ui/combobox.mjs +2 -2
- package/components/ui/command.js +4 -4
- package/components/ui/command.mjs +3 -3
- package/components/ui/input-group.js +3 -3
- package/components/ui/input-group.mjs +2 -2
- package/components/ui/multi-select.d.mts +54 -0
- package/components/ui/multi-select.d.ts +54 -0
- package/components/ui/multi-select.js +29 -0
- package/components/ui/multi-select.js.map +1 -0
- package/components/ui/multi-select.mjs +28 -0
- package/components/ui/multi-select.mjs.map +1 -0
- package/components/ui/tag-picker.d.mts +14 -0
- package/components/ui/tag-picker.d.ts +14 -0
- package/components/ui/tag-picker.js +12 -0
- package/components/ui/tag-picker.js.map +1 -0
- package/components/ui/tag-picker.mjs +11 -0
- package/components/ui/tag-picker.mjs.map +1 -0
- package/components/widgets/dialog-manager/index.js +1 -1
- package/components/widgets/dialog-manager/index.js.map +1 -1
- package/components/widgets/dialog-manager/index.mjs +1 -1
- package/layouts/sidebar1/app-sidebar.js +2 -2
- package/layouts/sidebar1/app-sidebar.mjs +2 -2
- package/layouts/sidebar1/context-switcher.js +1 -1
- package/layouts/sidebar1/context-switcher.mjs +1 -1
- package/layouts/sidebar1/index.js +3 -3
- package/layouts/sidebar1/index.js.map +1 -1
- package/layouts/sidebar1/index.mjs +3 -3
- package/layouts/sidebar1/nav-menus.js +1 -1
- package/layouts/sidebar1/nav-menus.mjs +1 -1
- package/layouts/sidebar1/nav-user.js +2 -2
- package/layouts/sidebar1/nav-user.mjs +2 -2
- package/layouts/simple/index.js +2 -2
- package/layouts/simple/index.mjs +3 -3
- package/package.json +1 -1
- package/components/ui/extension/multi-select.d.mts +0 -53
- package/components/ui/extension/multi-select.d.ts +0 -53
- package/components/ui/extension/multi-select.js.map +0 -1
- package/components/ui/extension/multi-select.mjs.map +0 -1
- /package/{chunk-432PQWGO.mjs.map → chunk-RJVQU443.mjs.map} +0 -0
- /package/{chunk-HKZRXGJ7.mjs.map → chunk-YDRPNCWF.mjs.map} +0 -0
- /package/{chunk-ZMMYQNQV.mjs.map → chunk-ZFBUIBJH.mjs.map} +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use client";
|
|
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
|
+
|
|
4
|
+
var _chunk2YMMYND2js = require('./chunk-2YMMYND2.js');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkPSPAJNNBjs = require('./chunk-PSPAJNNB.js');
|
|
8
|
+
|
|
9
|
+
// components/ui/tag-picker.tsx
|
|
10
|
+
var _react = require('react'); var React = _interopRequireWildcard(_react);
|
|
11
|
+
var _iconsreact = require('@tabler/icons-react');
|
|
12
|
+
|
|
13
|
+
function normalizeTagName(name) {
|
|
14
|
+
return name.replace(/\s+/g, " ").trim();
|
|
15
|
+
}
|
|
16
|
+
function TagPicker({
|
|
17
|
+
id,
|
|
18
|
+
value,
|
|
19
|
+
onChange,
|
|
20
|
+
suggestions = [],
|
|
21
|
+
placeholder = "Add tags...",
|
|
22
|
+
disabled = false,
|
|
23
|
+
className
|
|
24
|
+
}) {
|
|
25
|
+
const [inputValue, setInputValue] = _react.useState.call(void 0, "");
|
|
26
|
+
const [isFocused, setIsFocused] = _react.useState.call(void 0, false);
|
|
27
|
+
const selectedKeys = _react.useMemo.call(void 0, () => new Set(value.map((item) => item.toLocaleLowerCase())), [value]);
|
|
28
|
+
const normalizedInput = normalizeTagName(inputValue);
|
|
29
|
+
const normalizedInputKey = normalizedInput.toLocaleLowerCase();
|
|
30
|
+
const filteredSuggestions = _react.useMemo.call(void 0, () => {
|
|
31
|
+
return suggestions.filter((suggestion) => !selectedKeys.has(suggestion.toLocaleLowerCase())).filter((suggestion) => {
|
|
32
|
+
if (!normalizedInput) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
return suggestion.toLocaleLowerCase().includes(normalizedInputKey);
|
|
36
|
+
}).slice(0, 8);
|
|
37
|
+
}, [normalizedInput, normalizedInputKey, selectedKeys, suggestions]);
|
|
38
|
+
const canCreate = !!normalizedInput && !selectedKeys.has(normalizedInputKey) && !suggestions.some((suggestion) => suggestion.toLocaleLowerCase() === normalizedInputKey);
|
|
39
|
+
const addTag = (rawName) => {
|
|
40
|
+
const nextName = normalizeTagName(rawName);
|
|
41
|
+
if (!nextName) {
|
|
42
|
+
setInputValue("");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const nextKey = nextName.toLocaleLowerCase();
|
|
46
|
+
const matchingSuggestion = suggestions.find((suggestion) => suggestion.toLocaleLowerCase() === nextKey);
|
|
47
|
+
const finalName = matchingSuggestion != null ? matchingSuggestion : nextName;
|
|
48
|
+
if (selectedKeys.has(finalName.toLocaleLowerCase())) {
|
|
49
|
+
setInputValue("");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
onChange([...value, finalName]);
|
|
53
|
+
setInputValue("");
|
|
54
|
+
};
|
|
55
|
+
const removeTag = (tagName) => {
|
|
56
|
+
onChange(value.filter((item) => item.toLocaleLowerCase() !== tagName.toLocaleLowerCase()));
|
|
57
|
+
};
|
|
58
|
+
const showMenu = !disabled && isFocused && (filteredSuggestions.length > 0 || canCreate);
|
|
59
|
+
return /* @__PURE__ */ React.createElement("div", { className: _chunkPSPAJNNBjs.cn.call(void 0, "space-y-2", className) }, /* @__PURE__ */ React.createElement("div", { className: "relative" }, /* @__PURE__ */ React.createElement(
|
|
60
|
+
"div",
|
|
61
|
+
{
|
|
62
|
+
className: _chunkPSPAJNNBjs.cn.call(void 0,
|
|
63
|
+
"flex min-h-8 flex-wrap items-center gap-1 rounded-lg border bg-background px-2 py-1 text-sm",
|
|
64
|
+
"focus-within:ring-1 focus-within:ring-ring",
|
|
65
|
+
disabled && "cursor-not-allowed opacity-60"
|
|
66
|
+
)
|
|
67
|
+
},
|
|
68
|
+
value.map((tagName) => /* @__PURE__ */ React.createElement(_chunk2YMMYND2js.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(
|
|
69
|
+
"button",
|
|
70
|
+
{
|
|
71
|
+
type: "button",
|
|
72
|
+
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",
|
|
73
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
74
|
+
onClick: () => removeTag(tagName),
|
|
75
|
+
"aria-label": `Remove ${tagName}`
|
|
76
|
+
},
|
|
77
|
+
/* @__PURE__ */ React.createElement(_iconsreact.IconX, { className: "h-3.5 w-3.5" })
|
|
78
|
+
))),
|
|
79
|
+
/* @__PURE__ */ React.createElement(
|
|
80
|
+
"input",
|
|
81
|
+
{
|
|
82
|
+
id,
|
|
83
|
+
value: inputValue,
|
|
84
|
+
disabled,
|
|
85
|
+
placeholder: value.length === 0 ? placeholder : "",
|
|
86
|
+
className: "min-w-24 flex-1 border-0 bg-transparent p-0 pl-1 text-sm outline-none placeholder:text-muted-foreground",
|
|
87
|
+
onFocus: () => setIsFocused(true),
|
|
88
|
+
onBlur: () => {
|
|
89
|
+
window.setTimeout(() => setIsFocused(false), 100);
|
|
90
|
+
},
|
|
91
|
+
onChange: (event) => setInputValue(event.target.value),
|
|
92
|
+
onKeyDown: (event) => {
|
|
93
|
+
if ((event.key === "Enter" || event.key === ",") && normalizedInput) {
|
|
94
|
+
event.preventDefault();
|
|
95
|
+
addTag(normalizedInput);
|
|
96
|
+
}
|
|
97
|
+
if (event.key === "Backspace" && !inputValue && value.length > 0) {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
removeTag(value[value.length - 1]);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
)
|
|
104
|
+
), 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(
|
|
105
|
+
"button",
|
|
106
|
+
{
|
|
107
|
+
key: suggestion,
|
|
108
|
+
type: "button",
|
|
109
|
+
className: "flex w-full items-center justify-between rounded-sm px-2 py-1.5 text-left text-sm hover:bg-muted",
|
|
110
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
111
|
+
onClick: () => addTag(suggestion)
|
|
112
|
+
},
|
|
113
|
+
/* @__PURE__ */ React.createElement("span", null, suggestion),
|
|
114
|
+
/* @__PURE__ */ React.createElement("span", { className: "text-xs text-muted-foreground" }, "Existing")
|
|
115
|
+
)), canCreate && /* @__PURE__ */ React.createElement(
|
|
116
|
+
"button",
|
|
117
|
+
{
|
|
118
|
+
type: "button",
|
|
119
|
+
className: "flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm hover:bg-muted",
|
|
120
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
121
|
+
onClick: () => addTag(normalizedInput)
|
|
122
|
+
},
|
|
123
|
+
/* @__PURE__ */ React.createElement(_iconsreact.IconPlus, { className: "h-3.5 w-3.5" }),
|
|
124
|
+
/* @__PURE__ */ React.createElement("span", null, 'Create "', normalizedInput, '"')
|
|
125
|
+
))));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
exports.TagPicker = TagPicker;
|
|
131
|
+
//# sourceMappingURL=chunk-WK4MG4VT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-WK4MG4VT.js","../components/ui/tag-picker.tsx"],"names":[],"mappings":"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","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-WK4MG4VT.js","sourcesContent":[null,"\"use client\";\nimport * as React from 'react';\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 "{normalizedInput}"</span>\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,33 +1,27 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function
|
|
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 _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
|
-
|
|
26
|
-
|
|
27
|
-
// components/ui/extension/multi-select.tsx
|
|
20
|
+
// components/ui/multi-select.tsx
|
|
21
|
+
var _react = require('react'); var React = _interopRequireWildcard(_react);
|
|
28
22
|
var _iconsreact = require('@tabler/icons-react');
|
|
29
23
|
var _cmdk = require('cmdk');
|
|
30
|
-
|
|
24
|
+
|
|
31
25
|
var MultiSelectContext = _react.createContext.call(void 0, null);
|
|
32
26
|
var useMultiSelect = () => {
|
|
33
27
|
const context = _react.useContext.call(void 0, MultiSelectContext);
|
|
@@ -51,35 +45,38 @@ var MultiSelector = (_a) => {
|
|
|
51
45
|
loop = false,
|
|
52
46
|
className,
|
|
53
47
|
children,
|
|
54
|
-
dir
|
|
48
|
+
dir,
|
|
49
|
+
disabled = false
|
|
55
50
|
} = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, [
|
|
56
51
|
"values",
|
|
57
52
|
"onValuesChange",
|
|
58
53
|
"loop",
|
|
59
54
|
"className",
|
|
60
55
|
"children",
|
|
61
|
-
"dir"
|
|
56
|
+
"dir",
|
|
57
|
+
"disabled"
|
|
62
58
|
]);
|
|
63
59
|
const [inputValue, setInputValue] = _react.useState.call(void 0, "");
|
|
64
60
|
const [open, setOpen] = _react.useState.call(void 0, false);
|
|
65
61
|
const [activeIndex, setActiveIndex] = _react.useState.call(void 0, -1);
|
|
66
|
-
const inputRef =
|
|
62
|
+
const inputRef = React.useRef(null);
|
|
67
63
|
const onValueChangeHandler = _react.useCallback.call(void 0,
|
|
68
64
|
(val) => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
if (disabled) return;
|
|
66
|
+
const exists = value.some((currentValue) => currentValue.value === val.value);
|
|
67
|
+
if (exists) {
|
|
68
|
+
onValueChange(value.filter((currentValue) => currentValue.value !== val.value));
|
|
72
69
|
} else {
|
|
73
70
|
onValueChange([...value, val]);
|
|
74
71
|
}
|
|
75
72
|
},
|
|
76
|
-
|
|
77
|
-
[value]
|
|
73
|
+
[disabled, onValueChange, value]
|
|
78
74
|
);
|
|
79
75
|
const handleKeyDown = _react.useCallback.call(void 0,
|
|
80
76
|
(e) => {
|
|
81
77
|
var _a2, _b2;
|
|
82
78
|
e.stopPropagation();
|
|
79
|
+
if (disabled) return;
|
|
83
80
|
const target = inputRef.current;
|
|
84
81
|
if (!target) return;
|
|
85
82
|
const selectionStart = (_a2 = target.selectionStart) != null ? _a2 : 0;
|
|
@@ -105,10 +102,8 @@ var MultiSelector = (_a) => {
|
|
|
105
102
|
if (value.length > 0 && (activeIndex !== -1 || loop)) {
|
|
106
103
|
moveNext();
|
|
107
104
|
}
|
|
108
|
-
} else {
|
|
109
|
-
|
|
110
|
-
movePrev();
|
|
111
|
-
}
|
|
105
|
+
} else if (value.length > 0 && target.selectionStart === 0) {
|
|
106
|
+
movePrev();
|
|
112
107
|
}
|
|
113
108
|
break;
|
|
114
109
|
case "ArrowRight":
|
|
@@ -116,10 +111,8 @@ var MultiSelector = (_a) => {
|
|
|
116
111
|
if (value.length > 0 && target.selectionStart === 0) {
|
|
117
112
|
movePrev();
|
|
118
113
|
}
|
|
119
|
-
} else {
|
|
120
|
-
|
|
121
|
-
moveNext();
|
|
122
|
-
}
|
|
114
|
+
} else if (value.length > 0 && (activeIndex !== -1 || loop)) {
|
|
115
|
+
moveNext();
|
|
123
116
|
}
|
|
124
117
|
break;
|
|
125
118
|
case "Backspace":
|
|
@@ -128,10 +121,8 @@ var MultiSelector = (_a) => {
|
|
|
128
121
|
if (activeIndex !== -1 && activeIndex < value.length) {
|
|
129
122
|
onValueChangeHandler(value[activeIndex]);
|
|
130
123
|
moveCurrent();
|
|
131
|
-
} else {
|
|
132
|
-
|
|
133
|
-
onValueChangeHandler(value[value.length - 1]);
|
|
134
|
-
}
|
|
124
|
+
} else if (target.selectionStart === 0) {
|
|
125
|
+
onValueChangeHandler(value[value.length - 1]);
|
|
135
126
|
}
|
|
136
127
|
}
|
|
137
128
|
break;
|
|
@@ -148,9 +139,9 @@ var MultiSelector = (_a) => {
|
|
|
148
139
|
break;
|
|
149
140
|
}
|
|
150
141
|
},
|
|
151
|
-
[
|
|
142
|
+
[activeIndex, dir, disabled, loop, onValueChangeHandler, open, value]
|
|
152
143
|
);
|
|
153
|
-
return /* @__PURE__ */
|
|
144
|
+
return /* @__PURE__ */ React.createElement(
|
|
154
145
|
MultiSelectContext.Provider,
|
|
155
146
|
{
|
|
156
147
|
value: {
|
|
@@ -162,14 +153,15 @@ var MultiSelector = (_a) => {
|
|
|
162
153
|
setInputValue,
|
|
163
154
|
activeIndex,
|
|
164
155
|
setActiveIndex,
|
|
165
|
-
ref: inputRef
|
|
156
|
+
ref: inputRef,
|
|
157
|
+
disabled
|
|
166
158
|
}
|
|
167
159
|
},
|
|
168
|
-
/* @__PURE__ */
|
|
169
|
-
|
|
160
|
+
/* @__PURE__ */ React.createElement(
|
|
161
|
+
_chunkLAIO3QZXjs.Command,
|
|
170
162
|
_chunk2NMEKWO5js.__spreadValues.call(void 0, {
|
|
171
163
|
onKeyDown: handleKeyDown,
|
|
172
|
-
className: _chunkPSPAJNNBjs.cn.call(void 0, "
|
|
164
|
+
className: _chunkPSPAJNNBjs.cn.call(void 0, "flex flex-col overflow-visible bg-transparent", className),
|
|
173
165
|
dir
|
|
174
166
|
}, props),
|
|
175
167
|
children
|
|
@@ -179,45 +171,49 @@ var MultiSelector = (_a) => {
|
|
|
179
171
|
var MultiSelectorTrigger = _react.forwardRef.call(void 0,
|
|
180
172
|
(_a, ref) => {
|
|
181
173
|
var _b = _a, { className, children } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, ["className", "children"]);
|
|
182
|
-
const { value, onValueChange, activeIndex } = useMultiSelect();
|
|
174
|
+
const { value, onValueChange, activeIndex, disabled } = useMultiSelect();
|
|
183
175
|
const mousePreventDefault = _react.useCallback.call(void 0, (e) => {
|
|
184
176
|
e.preventDefault();
|
|
185
177
|
e.stopPropagation();
|
|
186
178
|
}, []);
|
|
187
|
-
return /* @__PURE__ */
|
|
179
|
+
return /* @__PURE__ */ React.createElement(
|
|
188
180
|
"div",
|
|
189
181
|
_chunk2NMEKWO5js.__spreadValues.call(void 0, {
|
|
190
182
|
ref,
|
|
191
183
|
className: _chunkPSPAJNNBjs.cn.call(void 0,
|
|
192
|
-
"flex flex-wrap gap-1
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
},
|
|
184
|
+
"flex flex-wrap gap-1 rounded-lg border bg-background px-2 py-1",
|
|
185
|
+
activeIndex === -1 && "focus-within:ring-1 focus-within:ring-ring",
|
|
186
|
+
disabled && "cursor-not-allowed opacity-60",
|
|
196
187
|
className
|
|
197
188
|
)
|
|
198
189
|
}, props),
|
|
199
|
-
value.map((item, index) => /* @__PURE__ */
|
|
190
|
+
value.map((item, index) => /* @__PURE__ */ React.createElement(
|
|
200
191
|
_chunk2YMMYND2js.Badge,
|
|
201
192
|
{
|
|
202
193
|
key: item.value,
|
|
203
194
|
className: _chunkPSPAJNNBjs.cn.call(void 0,
|
|
204
|
-
"
|
|
205
|
-
activeIndex === index && "ring-2 ring-muted-foreground
|
|
195
|
+
"flex items-center gap-1 rounded-md px-1.5",
|
|
196
|
+
activeIndex === index && "ring-2 ring-muted-foreground"
|
|
206
197
|
),
|
|
207
198
|
variant: "secondary"
|
|
208
199
|
},
|
|
209
|
-
/* @__PURE__ */
|
|
210
|
-
/* @__PURE__ */
|
|
200
|
+
/* @__PURE__ */ React.createElement("span", { className: "text-xs" }, item.label),
|
|
201
|
+
/* @__PURE__ */ React.createElement(
|
|
211
202
|
"button",
|
|
212
203
|
{
|
|
213
|
-
"aria-label": `Remove ${item} option`,
|
|
214
|
-
"aria-roledescription": "button to remove option",
|
|
204
|
+
"aria-label": `Remove ${item.label} option`,
|
|
215
205
|
type: "button",
|
|
206
|
+
disabled,
|
|
216
207
|
onMouseDown: mousePreventDefault,
|
|
217
|
-
onClick: () =>
|
|
208
|
+
onClick: (event) => {
|
|
209
|
+
event.preventDefault();
|
|
210
|
+
event.stopPropagation();
|
|
211
|
+
onValueChange(item);
|
|
212
|
+
},
|
|
213
|
+
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
214
|
},
|
|
219
|
-
/* @__PURE__ */
|
|
220
|
-
/* @__PURE__ */
|
|
215
|
+
/* @__PURE__ */ React.createElement("span", { className: "sr-only" }, "Remove ", item.label, " option"),
|
|
216
|
+
/* @__PURE__ */ React.createElement(_iconsreact.IconX, { className: "h-3.5 w-3.5" })
|
|
221
217
|
)
|
|
222
218
|
)),
|
|
223
219
|
children
|
|
@@ -226,14 +222,15 @@ var MultiSelectorTrigger = _react.forwardRef.call(void 0,
|
|
|
226
222
|
);
|
|
227
223
|
MultiSelectorTrigger.displayName = "MultiSelectorTrigger";
|
|
228
224
|
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();
|
|
231
|
-
return /* @__PURE__ */
|
|
225
|
+
var _b = _a, { className, disabled: disabledProp } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, ["className", "disabled"]);
|
|
226
|
+
const { setOpen, inputValue, setInputValue, activeIndex, setActiveIndex, ref: inputRef, disabled } = useMultiSelect();
|
|
227
|
+
return /* @__PURE__ */ React.createElement(
|
|
232
228
|
_cmdk.Command.Input,
|
|
233
229
|
_chunk2NMEKWO5js.__spreadProps.call(void 0, _chunk2NMEKWO5js.__spreadValues.call(void 0, {}, props), {
|
|
234
230
|
tabIndex: 0,
|
|
235
231
|
ref: inputRef,
|
|
236
232
|
value: inputValue,
|
|
233
|
+
disabled: disabled || disabledProp,
|
|
237
234
|
onValueChange: activeIndex === -1 ? setInputValue : void 0,
|
|
238
235
|
onBlur: () => {
|
|
239
236
|
setInputValue("");
|
|
@@ -242,7 +239,7 @@ var MultiSelectorInput = _react.forwardRef.call(void 0, (_a, ref) => {
|
|
|
242
239
|
onFocus: () => setOpen(true),
|
|
243
240
|
onClick: () => setActiveIndex(-1),
|
|
244
241
|
className: _chunkPSPAJNNBjs.cn.call(void 0,
|
|
245
|
-
"
|
|
242
|
+
"flex-1 border-none bg-transparent p-0 text-sm outline-none placeholder:text-muted-foreground focus:outline-none focus:ring-0",
|
|
246
243
|
className,
|
|
247
244
|
activeIndex !== -1 && "caret-transparent"
|
|
248
245
|
)
|
|
@@ -252,41 +249,45 @@ var MultiSelectorInput = _react.forwardRef.call(void 0, (_a, ref) => {
|
|
|
252
249
|
MultiSelectorInput.displayName = "MultiSelectorInput";
|
|
253
250
|
var MultiSelectorContent = _react.forwardRef.call(void 0, ({ children }, ref) => {
|
|
254
251
|
const { open } = useMultiSelect();
|
|
255
|
-
|
|
252
|
+
if (!open) return null;
|
|
253
|
+
return /* @__PURE__ */ React.createElement("div", { ref, className: "relative" }, children);
|
|
256
254
|
});
|
|
257
255
|
MultiSelectorContent.displayName = "MultiSelectorContent";
|
|
258
256
|
var MultiSelectorList = _react.forwardRef.call(void 0, ({ className, children }, ref) => {
|
|
259
|
-
return /* @__PURE__ */
|
|
260
|
-
|
|
257
|
+
return /* @__PURE__ */ React.createElement(
|
|
258
|
+
_chunkLAIO3QZXjs.CommandList,
|
|
261
259
|
{
|
|
262
260
|
ref,
|
|
263
261
|
className: _chunkPSPAJNNBjs.cn.call(void 0,
|
|
264
|
-
"
|
|
262
|
+
"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
263
|
className
|
|
266
264
|
)
|
|
267
265
|
},
|
|
268
266
|
children,
|
|
269
|
-
/* @__PURE__ */
|
|
267
|
+
/* @__PURE__ */ React.createElement(_chunkLAIO3QZXjs.CommandEmpty, null, /* @__PURE__ */ React.createElement("span", { className: "text-muted-foreground" }, "No results found"))
|
|
270
268
|
);
|
|
271
269
|
});
|
|
272
270
|
MultiSelectorList.displayName = "MultiSelectorList";
|
|
273
271
|
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:
|
|
272
|
+
var _b = _a, { className, value, label, children, disabled: disabledProp } = _b, props = _chunk2NMEKWO5js.__objRest.call(void 0, _b, ["className", "value", "label", "children", "disabled"]);
|
|
273
|
+
const { value: options, onValueChange, setInputValue, disabled } = useMultiSelect();
|
|
276
274
|
const mousePreventDefault = _react.useCallback.call(void 0, (e) => {
|
|
277
275
|
e.preventDefault();
|
|
278
276
|
e.stopPropagation();
|
|
279
277
|
}, []);
|
|
280
|
-
const isIncluded = searchForValue(
|
|
278
|
+
const isIncluded = searchForValue(options, {
|
|
281
279
|
value,
|
|
282
280
|
label
|
|
283
281
|
}) !== -1;
|
|
284
|
-
|
|
285
|
-
|
|
282
|
+
const isDisabled = disabled || disabledProp;
|
|
283
|
+
return /* @__PURE__ */ React.createElement(
|
|
284
|
+
_chunkLAIO3QZXjs.CommandItem,
|
|
286
285
|
_chunk2NMEKWO5js.__spreadProps.call(void 0, _chunk2NMEKWO5js.__spreadValues.call(void 0, {
|
|
287
286
|
ref
|
|
288
287
|
}, props), {
|
|
288
|
+
disabled: isDisabled,
|
|
289
289
|
onSelect: () => {
|
|
290
|
+
if (isDisabled) return;
|
|
290
291
|
onValueChange({
|
|
291
292
|
value,
|
|
292
293
|
label
|
|
@@ -294,15 +295,15 @@ var MultiSelectorItem = _react.forwardRef.call(void 0, (_a, ref) => {
|
|
|
294
295
|
setInputValue("");
|
|
295
296
|
},
|
|
296
297
|
className: _chunkPSPAJNNBjs.cn.call(void 0,
|
|
297
|
-
"
|
|
298
|
+
"flex cursor-pointer justify-between rounded-md px-2 py-1 transition-colors",
|
|
298
299
|
className,
|
|
299
|
-
isIncluded && "opacity-50
|
|
300
|
-
|
|
300
|
+
isIncluded && "cursor-default opacity-50",
|
|
301
|
+
isDisabled && "cursor-not-allowed opacity-50"
|
|
301
302
|
),
|
|
302
303
|
onMouseDown: mousePreventDefault
|
|
303
304
|
}),
|
|
304
305
|
children,
|
|
305
|
-
isIncluded && /* @__PURE__ */
|
|
306
|
+
isIncluded && /* @__PURE__ */ React.createElement(_iconsreact.IconCheck, { className: "h-4 w-4" })
|
|
306
307
|
);
|
|
307
308
|
});
|
|
308
309
|
MultiSelectorItem.displayName = "MultiSelectorItem";
|
|
@@ -313,5 +314,6 @@ MultiSelectorItem.displayName = "MultiSelectorItem";
|
|
|
313
314
|
|
|
314
315
|
|
|
315
316
|
|
|
316
|
-
|
|
317
|
-
|
|
317
|
+
|
|
318
|
+
exports.MultiSelector = MultiSelector; exports.MultiSelectorTrigger = MultiSelectorTrigger; exports.MultiSelectorInput = MultiSelectorInput; exports.MultiSelectorContent = MultiSelectorContent; exports.MultiSelectorList = MultiSelectorList; exports.MultiSelectorItem = MultiSelectorItem;
|
|
319
|
+
//# sourceMappingURL=chunk-WXEEDLLR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-WXEEDLLR.js","../components/ui/multi-select.tsx"],"names":["_a","_b"],"mappings":"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","file":"/home/jahn/projects/shadcn-theme/packages/react/dist/chunk-WXEEDLLR.js","sourcesContent":[null,"\"use client\";\nimport * as React from 'react';\nimport { IconCheck, IconX } from '@tabler/icons-react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { 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"]}
|
|
@@ -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-
|
|
158
|
+
//# sourceMappingURL=chunk-YDRPNCWF.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
InputGroup,
|
|
3
3
|
InputGroupAddon
|
|
4
|
-
} from "./chunk-
|
|
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-
|
|
153
|
+
//# sourceMappingURL=chunk-ZFBUIBJH.mjs.map
|
|
@@ -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 };
|