@ryuzaki13/react-foundation-ui 1.0.3 → 1.0.5
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/dist/advanced-search/index.js +90 -89
- package/dist/advanced-search/index.js.map +1 -1
- package/dist/chunks/Select-BJ5OqTe7.js +182 -0
- package/dist/chunks/Select-BJ5OqTe7.js.map +1 -0
- package/dist/chunks/{SerializableSelect-DkYeJtAO.js → SerializableSelect-CNe728Qa.js} +2 -2
- package/dist/chunks/{SerializableSelect-DkYeJtAO.js.map → SerializableSelect-CNe728Qa.js.map} +1 -1
- package/dist/chunks/{StateSelect-1jH3uLz9.js → StateSelect-ujAre258.js} +2 -2
- package/dist/chunks/{StateSelect-1jH3uLz9.js.map → StateSelect-ujAre258.js.map} +1 -1
- package/dist/chunks/multi-select-BYsbh2ca.js +126 -0
- package/dist/chunks/multi-select-BYsbh2ca.js.map +1 -0
- package/dist/chunks/{multi-select-BzYIviCU.js → odata-DSW7z3nh.js} +373 -569
- package/dist/chunks/odata-DSW7z3nh.js.map +1 -0
- package/dist/chunks/select-BkLc6dyx.js +81 -0
- package/dist/chunks/select-BkLc6dyx.js.map +1 -0
- package/dist/chunks/useODataSelectBase-BbeKdq6x.js +125 -0
- package/dist/chunks/useODataSelectBase-BbeKdq6x.js.map +1 -0
- package/dist/expandable-action-panel/stories/ExpandableActionPanel.stories.js +1 -1
- package/dist/multi-select/index.js +3 -3
- package/dist/preset-select/index.js +1 -1
- package/dist/preset-select/index.js.map +1 -1
- package/dist/select/Select.d.ts +10 -5
- package/dist/select/Select.d.ts.map +1 -1
- package/dist/select/index.d.ts +1 -0
- package/dist/select/index.d.ts.map +1 -1
- package/dist/select/index.js +4 -3
- package/dist/select/stories/Select.stories.d.ts +1 -1
- package/dist/select/stories/Select.stories.js +1 -1
- package/dist/select/stories/SerializableSelect.stories.js +1 -1
- package/dist/state-select/index.js +1 -1
- package/dist/state-select/stories/StateSelect.stories.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/tree-select/index.d.ts +2 -0
- package/dist/tree-select/index.d.ts.map +1 -1
- package/dist/tree-select/index.js +173 -4
- package/dist/tree-select/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/Select-CXeVjVKA.js +0 -182
- package/dist/chunks/Select-CXeVjVKA.js.map +0 -1
- package/dist/chunks/multi-select-BzYIviCU.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tree-select/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAE7B,mBAAmB,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tree-select/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAE7B,mBAAmB,SAAS,CAAC"}
|
|
@@ -1,10 +1,179 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t } from "../chunks/
|
|
1
|
+
import { a as e, i as t, n, o as r, r as i } from "../chunks/odata-DSW7z3nh.js";
|
|
2
|
+
import { t as a } from "../chunks/TreeMultiSelect-CfQhlfnC.js";
|
|
3
|
+
import { t as o } from "../chunks/TreeSelect-2wUXs90E.js";
|
|
4
|
+
import { useMemo as s } from "react";
|
|
5
|
+
import { jsx as c } from "react/jsx-runtime";
|
|
3
6
|
//#region src/tree-select/helpers.ts
|
|
4
|
-
function
|
|
7
|
+
function l(e) {
|
|
5
8
|
return e ? { [e.codeKey]: [e.value] } : {};
|
|
6
9
|
}
|
|
7
10
|
//#endregion
|
|
8
|
-
|
|
11
|
+
//#region src/tree-select/model/buildODataTreeNodes.ts
|
|
12
|
+
function u(e, t, n) {
|
|
13
|
+
return e ? `${e}/${t}:${n}` : `${t}:${n}`;
|
|
14
|
+
}
|
|
15
|
+
function d(e, t, n) {
|
|
16
|
+
let r = n[t];
|
|
17
|
+
return r && e[r] || e[t];
|
|
18
|
+
}
|
|
19
|
+
function f(e) {
|
|
20
|
+
return [...new Set(e.filter(Boolean))].join(" ");
|
|
21
|
+
}
|
|
22
|
+
function p(e) {
|
|
23
|
+
return {
|
|
24
|
+
id: u(e.parentId, e.codeKey, e.value),
|
|
25
|
+
codeKey: e.codeKey,
|
|
26
|
+
value: e.value,
|
|
27
|
+
label: e.label,
|
|
28
|
+
code: e.code,
|
|
29
|
+
searchText: f([
|
|
30
|
+
e.value,
|
|
31
|
+
e.label,
|
|
32
|
+
e.code
|
|
33
|
+
]),
|
|
34
|
+
children: [],
|
|
35
|
+
childByBranchKey: /* @__PURE__ */ new Map()
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function m(e) {
|
|
39
|
+
return {
|
|
40
|
+
id: e.id,
|
|
41
|
+
codeKey: e.codeKey,
|
|
42
|
+
value: e.value,
|
|
43
|
+
label: e.label,
|
|
44
|
+
code: e.code,
|
|
45
|
+
searchText: e.searchText,
|
|
46
|
+
children: e.children.length > 0 ? e.children.map(m) : void 0
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function h({ items: e, orderedCodeKeys: t, keyPairsMap: n, hiddenCodeKeys: r, textValueCodeKeys: i }) {
|
|
50
|
+
if (t.length === 0 || e.length === 0) return [];
|
|
51
|
+
let a = [], o = /* @__PURE__ */ new Map();
|
|
52
|
+
for (let s of e) {
|
|
53
|
+
let e;
|
|
54
|
+
for (let c of t) {
|
|
55
|
+
let t = String(s[c] ?? "");
|
|
56
|
+
if (!t) break;
|
|
57
|
+
let l = String(d(s, c, n) ?? ""), u = i?.has(c) ? l : t, f = `${c}:${u}`, m = e ? e.childByBranchKey : o, h = m.get(f);
|
|
58
|
+
h || (h = p({
|
|
59
|
+
parentId: e?.id,
|
|
60
|
+
codeKey: c,
|
|
61
|
+
value: u,
|
|
62
|
+
label: l,
|
|
63
|
+
code: r.has(c) ? void 0 : t
|
|
64
|
+
}), m.set(f, h), e ? e.children.push(h) : a.push(h)), e = h;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return a.map(m);
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
//#region src/tree-select/model/resolveOrderedTreeSegmentItems.ts
|
|
71
|
+
function g(e, n) {
|
|
72
|
+
return t(e, n);
|
|
73
|
+
}
|
|
74
|
+
//#endregion
|
|
75
|
+
//#region src/tree-select/model/useODataTreeData.ts
|
|
76
|
+
function _(e, t, n) {
|
|
77
|
+
return i([{
|
|
78
|
+
odata: e,
|
|
79
|
+
segments: t,
|
|
80
|
+
model: n
|
|
81
|
+
}]);
|
|
82
|
+
}
|
|
83
|
+
function v(e) {
|
|
84
|
+
return e[0]?.id;
|
|
85
|
+
}
|
|
86
|
+
function y({ odata: t, segments: i, model: a }) {
|
|
87
|
+
let o = `${t.service}.${t.target}`, c = s(() => _(t, i, a), [
|
|
88
|
+
t,
|
|
89
|
+
i,
|
|
90
|
+
a
|
|
91
|
+
]), l = n([t]), u = s(() => g(c, l), [c, l]), d = s(() => u.map((e) => e.id), [u]), f = r({
|
|
92
|
+
odata: t,
|
|
93
|
+
model: e({
|
|
94
|
+
codeKey: v(u) ?? Object.keys(i)[0],
|
|
95
|
+
...a
|
|
96
|
+
})
|
|
97
|
+
}), { hiddenCodeKeys: p, textValueCodeKeys: m } = s(() => {
|
|
98
|
+
let e = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set();
|
|
99
|
+
for (let r of u) (r.segment.hideCode ?? t.hideCode) && e.add(r.id), r.segment.selectText && n.add(r.id);
|
|
100
|
+
return {
|
|
101
|
+
hiddenCodeKeys: e,
|
|
102
|
+
textValueCodeKeys: n
|
|
103
|
+
};
|
|
104
|
+
}, [t.hideCode, u]), y = s(() => h({
|
|
105
|
+
items: f.data?.items ?? [],
|
|
106
|
+
orderedCodeKeys: d,
|
|
107
|
+
keyPairsMap: f.data?.keyPairsMap ?? {},
|
|
108
|
+
hiddenCodeKeys: p,
|
|
109
|
+
textValueCodeKeys: m
|
|
110
|
+
}), [
|
|
111
|
+
f.data?.items,
|
|
112
|
+
f.data?.keyPairsMap,
|
|
113
|
+
p,
|
|
114
|
+
d,
|
|
115
|
+
m
|
|
116
|
+
]), b = u[0]?.segment.placeholder ?? "Выберите значение", x = !!l[o]?.length;
|
|
117
|
+
return {
|
|
118
|
+
nodes: y,
|
|
119
|
+
orderedSegmentItems: u,
|
|
120
|
+
orderedCodeKeys: d,
|
|
121
|
+
isLoading: f.isLoading,
|
|
122
|
+
isError: f.isError,
|
|
123
|
+
placeholder: b,
|
|
124
|
+
hasResolvedChain: x
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//#endregion
|
|
128
|
+
//#region src/tree-select/ODataTreeMultiSelect.tsx
|
|
129
|
+
function b({ label: e, description: t, disabled: n, size: r, placeholder: i, query: o, defaultQuery: s, onQuery: l, value: u, onChange: d, odata: f, segments: p, model: m }) {
|
|
130
|
+
let h = y({
|
|
131
|
+
odata: f,
|
|
132
|
+
segments: p,
|
|
133
|
+
model: m
|
|
134
|
+
});
|
|
135
|
+
return /* @__PURE__ */ c(a, {
|
|
136
|
+
label: e,
|
|
137
|
+
description: t,
|
|
138
|
+
disabled: n || h.isLoading,
|
|
139
|
+
size: r,
|
|
140
|
+
placeholder: i ?? h.placeholder,
|
|
141
|
+
nodes: h.nodes,
|
|
142
|
+
value: u,
|
|
143
|
+
onChange: d,
|
|
144
|
+
query: o,
|
|
145
|
+
defaultQuery: s,
|
|
146
|
+
onQuery: l,
|
|
147
|
+
isLoading: h.isLoading,
|
|
148
|
+
error: h.isError ? "Ошибка загрузки" : void 0
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
//#endregion
|
|
152
|
+
//#region src/tree-select/ODataTreeSelect.tsx
|
|
153
|
+
function x({ label: e, description: t, disabled: n, size: r, placeholder: i, query: a, defaultQuery: s, onQuery: l, value: u, onChange: d, odata: f, segments: p, model: m, clearable: h }) {
|
|
154
|
+
let g = y({
|
|
155
|
+
odata: f,
|
|
156
|
+
segments: p,
|
|
157
|
+
model: m
|
|
158
|
+
});
|
|
159
|
+
return /* @__PURE__ */ c(o, {
|
|
160
|
+
label: e,
|
|
161
|
+
description: t,
|
|
162
|
+
disabled: n || g.isLoading,
|
|
163
|
+
size: r,
|
|
164
|
+
placeholder: i ?? g.placeholder,
|
|
165
|
+
nodes: g.nodes,
|
|
166
|
+
value: u,
|
|
167
|
+
onChange: d,
|
|
168
|
+
query: a,
|
|
169
|
+
defaultQuery: s,
|
|
170
|
+
onQuery: l,
|
|
171
|
+
isLoading: g.isLoading,
|
|
172
|
+
error: g.isError ? "Ошибка загрузки" : void 0,
|
|
173
|
+
clearable: h
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
//#endregion
|
|
177
|
+
export { b as ODataTreeMultiSelect, x as ODataTreeSelect, a as TreeMultiSelect, o as TreeSelect, l as treeSelectValueToSelectedFilters };
|
|
9
178
|
|
|
10
179
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/tree-select/helpers.ts"],"sourcesContent":["import { TreeMultiSelectValue, TreeSelectValue } from \"./types\";\n\nexport function treeSelectValueToSelectedFilters(value: TreeSelectValue | undefined): TreeMultiSelectValue {\n\tif (!value) {\n\t\treturn {};\n\t}\n\n\treturn {\n\t\t[value.codeKey]: [value.value]\n\t};\n}\n"],"mappings":";;;AAEA,SAAgB,EAAiC,GAA0D;CAK1G,OAJK,IAIE,GACL,EAAM,UAAU,CAAC,EAAM,KAAK,EAC9B,IALQ,CAAC;AAMV"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/tree-select/helpers.ts","../../src/tree-select/model/buildODataTreeNodes.ts","../../src/tree-select/model/resolveOrderedTreeSegmentItems.ts","../../src/tree-select/model/useODataTreeData.ts","../../src/tree-select/ODataTreeMultiSelect.tsx","../../src/tree-select/ODataTreeSelect.tsx"],"sourcesContent":["import { TreeMultiSelectValue, TreeSelectValue } from \"./types\";\n\nexport function treeSelectValueToSelectedFilters(value: TreeSelectValue | undefined): TreeMultiSelectValue {\n\tif (!value) {\n\t\treturn {};\n\t}\n\n\treturn {\n\t\t[value.codeKey]: [value.value]\n\t};\n}\n","import { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { TreeSelectNode } from \"../types\";\n\ntype BuildODataTreeNodesArgs = {\n\titems: CollectionItem[];\n\torderedCodeKeys: string[];\n\tkeyPairsMap: Record<string, string>;\n\thiddenCodeKeys: Set<string>;\n\ttextValueCodeKeys?: Set<string>;\n};\n\ntype MutableTreeNode = TreeSelectNode & {\n\tchildren: MutableTreeNode[];\n\tchildByBranchKey: Map<string, MutableTreeNode>;\n};\n\nfunction createNodeId(parentId: string | undefined, codeKey: string, value: string) {\n\treturn parentId ? `${parentId}/${codeKey}:${value}` : `${codeKey}:${value}`;\n}\n\nfunction resolveNodeLabel(item: CollectionItem, codeKey: string, keyPairsMap: Record<string, string>) {\n\tconst textKey = keyPairsMap[codeKey];\n\treturn (textKey && item[textKey]) || item[codeKey];\n}\n\nfunction createSearchText(parts: Array<string | undefined>) {\n\treturn [...new Set(parts.filter(Boolean))].join(\" \");\n}\n\nfunction createMutableNode(args: { parentId?: string; codeKey: string; value: string; label: string; code?: string }): MutableTreeNode {\n\treturn {\n\t\tid: createNodeId(args.parentId, args.codeKey, args.value),\n\t\tcodeKey: args.codeKey,\n\t\tvalue: args.value,\n\t\tlabel: args.label,\n\t\tcode: args.code,\n\t\tsearchText: createSearchText([args.value, args.label, args.code]),\n\t\tchildren: [],\n\t\tchildByBranchKey: new Map()\n\t};\n}\n\nfunction toPublicNode(node: MutableTreeNode): TreeSelectNode {\n\treturn {\n\t\tid: node.id,\n\t\tcodeKey: node.codeKey,\n\t\tvalue: node.value,\n\t\tlabel: node.label,\n\t\tcode: node.code,\n\t\tsearchText: node.searchText,\n\t\tchildren: node.children.length > 0 ? node.children.map(toPublicNode) : undefined\n\t};\n}\n\nexport function buildODataTreeNodes({\n\titems,\n\torderedCodeKeys,\n\tkeyPairsMap,\n\thiddenCodeKeys,\n\ttextValueCodeKeys\n}: BuildODataTreeNodesArgs): TreeSelectNode[] {\n\tif (orderedCodeKeys.length === 0 || items.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst roots: MutableTreeNode[] = [];\n\tconst rootByBranchKey = new Map<string, MutableTreeNode>();\n\n\tfor (const item of items) {\n\t\tlet parentNode: MutableTreeNode | undefined;\n\n\t\tfor (const codeKey of orderedCodeKeys) {\n\t\t\tconst codeValue = String(item[codeKey] ?? \"\");\n\n\t\t\tif (!codeValue) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst label = String(resolveNodeLabel(item, codeKey, keyPairsMap) ?? \"\");\n\t\t\tconst value = textValueCodeKeys?.has(codeKey) ? label : codeValue;\n\t\t\tconst branchKey = `${codeKey}:${value}`;\n\t\t\tconst container = parentNode ? parentNode.childByBranchKey : rootByBranchKey;\n\t\t\tlet currentNode = container.get(branchKey);\n\n\t\t\tif (!currentNode) {\n\t\t\t\tcurrentNode = createMutableNode({\n\t\t\t\t\tparentId: parentNode?.id,\n\t\t\t\t\tcodeKey,\n\t\t\t\t\tvalue,\n\t\t\t\t\tlabel,\n\t\t\t\t\tcode: hiddenCodeKeys.has(codeKey) ? undefined : codeValue\n\t\t\t\t});\n\t\t\t\tcontainer.set(branchKey, currentNode);\n\n\t\t\t\tif (parentNode) {\n\t\t\t\t\tparentNode.children.push(currentNode);\n\t\t\t\t} else {\n\t\t\t\t\troots.push(currentNode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tparentNode = currentNode;\n\t\t}\n\t}\n\n\treturn roots.map(toPublicNode);\n}\n","import { ODataDependentSegmentItem, sortODataDependentSegmentItemsByChains } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { ODataChainsMap } from \"@ryuzaki13/react-foundation-lib/odata-service\";\n\nexport function resolveOrderedTreeSegmentItems(items: readonly ODataDependentSegmentItem[], chains: ODataChainsMap) {\n\treturn sortODataDependentSegmentItemsByChains(items, chains);\n}\n","import { useMemo } from \"react\";\n\nimport {\n\tflattenODataDependentServices,\n\tODataCollectionModel,\n\tODataDependentBaseProps,\n\tODataDependentSegmentItem,\n\tuseODataCollection,\n\tuseODataCollectionChains,\n\tuseODataCollectionModel\n} from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { buildODataTreeNodes } from \"./buildODataTreeNodes\";\nimport { resolveOrderedTreeSegmentItems } from \"./resolveOrderedTreeSegmentItems\";\n\nfunction buildOrderedSegmentItems(\n\todata: ODataDependentBaseProps[\"odata\"],\n\tsegments: ODataDependentBaseProps[\"segments\"],\n\tmodel?: Omit<ODataCollectionModel, \"codeKey\">\n) {\n\treturn flattenODataDependentServices([\n\t\t{\n\t\t\todata,\n\t\t\tsegments,\n\t\t\tmodel\n\t\t}\n\t]);\n}\n\nfunction getRootCodeKey(orderedSegmentItems: readonly ODataDependentSegmentItem[]) {\n\treturn orderedSegmentItems[0]?.id;\n}\n\nexport function useODataTreeData({ odata, segments, model }: Pick<ODataDependentBaseProps, \"odata\" | \"segments\" | \"model\">) {\n\tconst serviceKey = `${odata.service}.${odata.target}`;\n\tconst baseSegmentItems = useMemo(() => buildOrderedSegmentItems(odata, segments, model), [odata, segments, model]);\n\tconst chains = useODataCollectionChains([odata]);\n\tconst orderedSegmentItems = useMemo(() => resolveOrderedTreeSegmentItems(baseSegmentItems, chains), [baseSegmentItems, chains]);\n\tconst orderedCodeKeys = useMemo(() => orderedSegmentItems.map((item) => item.id), [orderedSegmentItems]);\n\tconst rootCodeKey = getRootCodeKey(orderedSegmentItems) ?? Object.keys(segments)[0];\n\tconst odataModel = useODataCollectionModel({\n\t\tcodeKey: rootCodeKey,\n\t\t...model\n\t});\n\tconst collection = useODataCollection({\n\t\todata,\n\t\tmodel: odataModel\n\t});\n\tconst { hiddenCodeKeys, textValueCodeKeys } = useMemo(() => {\n\t\tconst nextHiddenCodeKeys = new Set<string>();\n\t\tconst nextTextValueCodeKeys = new Set<string>();\n\n\t\tfor (const item of orderedSegmentItems) {\n\t\t\tif (item.segment.hideCode ?? odata.hideCode) {\n\t\t\t\tnextHiddenCodeKeys.add(item.id);\n\t\t\t}\n\t\t\tif (item.segment.selectText) {\n\t\t\t\tnextTextValueCodeKeys.add(item.id);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\thiddenCodeKeys: nextHiddenCodeKeys,\n\t\t\ttextValueCodeKeys: nextTextValueCodeKeys\n\t\t};\n\t}, [odata.hideCode, orderedSegmentItems]);\n\tconst nodes = useMemo(\n\t\t() =>\n\t\t\tbuildODataTreeNodes({\n\t\t\t\titems: collection.data?.items ?? [],\n\t\t\t\torderedCodeKeys,\n\t\t\t\tkeyPairsMap: collection.data?.keyPairsMap ?? {},\n\t\t\t\thiddenCodeKeys,\n\t\t\t\ttextValueCodeKeys\n\t\t\t}),\n\t\t[collection.data?.items, collection.data?.keyPairsMap, hiddenCodeKeys, orderedCodeKeys, textValueCodeKeys]\n\t);\n\tconst placeholder = orderedSegmentItems[0]?.segment.placeholder ?? \"Выберите значение\";\n\tconst hasResolvedChain = Boolean(chains[serviceKey]?.length);\n\n\treturn {\n\t\tnodes,\n\t\torderedSegmentItems,\n\t\torderedCodeKeys,\n\t\tisLoading: collection.isLoading,\n\t\tisError: collection.isError,\n\t\tplaceholder,\n\t\thasResolvedChain\n\t};\n}\n","import { ODataDependentBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { UiBaseProps } from \"../types\";\n\nimport { useODataTreeData } from \"./model/useODataTreeData\";\nimport { TreeMultiSelect } from \"./TreeMultiSelect\";\nimport { TreeMultiSelectValue } from \"./types\";\n\nexport interface ODataTreeMultiSelectProps\n\textends Omit<ODataDependentBaseProps, \"model\" | \"value\" | \"dependencies\">, Omit<UiBaseProps<TreeMultiSelectValue>, \"placeholder\"> {\n\tmodel?: ODataDependentBaseProps[\"model\"];\n\tplaceholder?: string;\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n}\n\nexport function ODataTreeMultiSelect({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tplaceholder,\n\tquery,\n\tdefaultQuery,\n\tonQuery,\n\tvalue,\n\tonChange,\n\todata,\n\tsegments,\n\tmodel\n}: ODataTreeMultiSelectProps) {\n\tconst treeData = useODataTreeData({\n\t\todata,\n\t\tsegments,\n\t\tmodel\n\t});\n\n\treturn (\n\t\t<TreeMultiSelect\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled || treeData.isLoading}\n\t\t\tsize={size}\n\t\t\tplaceholder={placeholder ?? treeData.placeholder}\n\t\t\tnodes={treeData.nodes}\n\t\t\tvalue={value}\n\t\t\tonChange={onChange}\n\t\t\tquery={query}\n\t\t\tdefaultQuery={defaultQuery}\n\t\t\tonQuery={onQuery}\n\t\t\tisLoading={treeData.isLoading}\n\t\t\terror={treeData.isError ? \"Ошибка загрузки\" : undefined}\n\t\t/>\n\t);\n}\n","import { ODataDependentBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { UiBaseProps } from \"../types\";\n\nimport { useODataTreeData } from \"./model/useODataTreeData\";\nimport { TreeSelect } from \"./TreeSelect\";\nimport { TreeSelectValue } from \"./types\";\n\nexport interface ODataTreeSelectProps\n\textends\n\t\tOmit<ODataDependentBaseProps, \"model\" | \"value\" | \"dependencies\">,\n\t\tOmit<UiBaseProps<TreeSelectValue | undefined>, \"placeholder\"> {\n\tmodel?: ODataDependentBaseProps[\"model\"];\n\tplaceholder?: string;\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tclearable?: boolean;\n}\n\nexport function ODataTreeSelect({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tsize,\n\tplaceholder,\n\tquery,\n\tdefaultQuery,\n\tonQuery,\n\tvalue,\n\tonChange,\n\todata,\n\tsegments,\n\tmodel,\n\tclearable\n}: ODataTreeSelectProps) {\n\tconst treeData = useODataTreeData({\n\t\todata,\n\t\tsegments,\n\t\tmodel\n\t});\n\n\treturn (\n\t\t<TreeSelect\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled || treeData.isLoading}\n\t\t\tsize={size}\n\t\t\tplaceholder={placeholder ?? treeData.placeholder}\n\t\t\tnodes={treeData.nodes}\n\t\t\tvalue={value}\n\t\t\tonChange={onChange}\n\t\t\tquery={query}\n\t\t\tdefaultQuery={defaultQuery}\n\t\t\tonQuery={onQuery}\n\t\t\tisLoading={treeData.isLoading}\n\t\t\terror={treeData.isError ? \"Ошибка загрузки\" : undefined}\n\t\t\tclearable={clearable}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./ui.module-BisoTevy.js";
|
|
2
|
-
import { a as t, c as n, d as r, f as i, i as a, l as o, o as s, r as c, t as l, u as ee } from "./picker-Dg55Ss-B.js";
|
|
3
|
-
import { useRef as te, useState as ne } from "react";
|
|
4
|
-
import { cn as u } from "@ryuzaki13/react-foundation-lib/utils";
|
|
5
|
-
import { CheckIcon as d, XIcon as f } from "lucide-react";
|
|
6
|
-
import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
7
|
-
//#region src/select/lib/getOptionSearchText.ts
|
|
8
|
-
function re({ option: e, getOptionLabel: t, getOptionCode: n }) {
|
|
9
|
-
return [s(t(e)), s(n?.(e))].filter((e) => !!e).join(" ").toLowerCase();
|
|
10
|
-
}
|
|
11
|
-
function g(e, t, n) {
|
|
12
|
-
return e.find((e) => e.value === t) ?? n;
|
|
13
|
-
}
|
|
14
|
-
var _ = {
|
|
15
|
-
inputWithOverlay: "aEEqH1",
|
|
16
|
-
valueOverlay: "_4HQKa7"
|
|
17
|
-
};
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region src/select/Select.tsx
|
|
20
|
-
function v({ label: g, description: v, disabled: y, placeholder: b, size: ie, options: x, value: S, onChange: C, getOptionKey: w, getOptionLabel: T, getOptionCode: E, getOptionDisabled: D, getOptionAriaLabel: ae, getOptionClassName: oe, renderOption: O, renderValue: k, className: se, buttonClassName: ce, optionsClassName: le, optionsContentClassName: ue, searchable: A = !1, defaultFilter: de = !0, query: fe, defaultQuery: pe, onQuery: me, renderPopupHeader: he, emptyState: j, loadingState: M, errorState: N, placement: P = "bottom-start", clearable: F = !1 }) {
|
|
21
|
-
let I = te(null), [L, R] = ne(!1), z = A ? "search-single" : "display", B = S === void 0 ? void 0 : w(S), V = B === void 0 ? void 0 : x.find((e) => w(e) === B) ?? S, { query: H, setQuery: U } = c({
|
|
22
|
-
open: L,
|
|
23
|
-
query: fe,
|
|
24
|
-
defaultQuery: pe,
|
|
25
|
-
onQuery: me,
|
|
26
|
-
triggerMode: z
|
|
27
|
-
}), W = t({
|
|
28
|
-
options: x,
|
|
29
|
-
query: H,
|
|
30
|
-
enabled: A && de,
|
|
31
|
-
getSearchText: (e) => re({
|
|
32
|
-
option: e,
|
|
33
|
-
getOptionLabel: T,
|
|
34
|
-
getOptionCode: E
|
|
35
|
-
})
|
|
36
|
-
}), { activeIndex: ge, context: _e, floatingStyles: ve, getFloatingProps: ye, setReference: be, setFloating: xe, setOptionRef: Se, close: G, openList: Ce, toggleOpen: we, selectOption: Te, selectActiveOption: Ee, handleReferenceKeyDown: De, handleFloatingKeyDown: Oe, getOptionId: ke, getActiveOptionId: K } = a({
|
|
37
|
-
options: W,
|
|
38
|
-
selectedIndex: B === void 0 ? -1 : W.findIndex((e) => w(e) === B),
|
|
39
|
-
open: L,
|
|
40
|
-
onOpenChange: R,
|
|
41
|
-
getOptionDisabled: D,
|
|
42
|
-
onSelect: (e) => C(e),
|
|
43
|
-
disabled: y,
|
|
44
|
-
placement: P,
|
|
45
|
-
triggerMode: z
|
|
46
|
-
}), q = W.length > 0, J = V === void 0 ? void 0 : T(V), Y = V === void 0 ? void 0 : k ? k(V) : J, Ae = s(J), je = V === void 0 ? void 0 : s(E?.(V)), Me = s(Y) ?? Ae ?? je ?? (B === void 0 ? "" : String(B)), X = A && (L || H.length > 0), Z = X ? H : V === void 0 ? "" : Me, Q = V !== void 0 && Y !== void 0 && s(Y) === void 0 && !X, $ = l({
|
|
47
|
-
mode: z,
|
|
48
|
-
open: L,
|
|
49
|
-
currentQuery: H,
|
|
50
|
-
hasDisplayValue: V !== void 0,
|
|
51
|
-
inputRef: I,
|
|
52
|
-
setQuery: U,
|
|
53
|
-
openList: Ce,
|
|
54
|
-
close: G,
|
|
55
|
-
toggleOpen: we
|
|
56
|
-
}), Ne = (e) => {
|
|
57
|
-
I.current = e;
|
|
58
|
-
}, Pe = () => {
|
|
59
|
-
F && C(void 0), U(""), G();
|
|
60
|
-
};
|
|
61
|
-
return /* @__PURE__ */ m(i, {
|
|
62
|
-
label: g,
|
|
63
|
-
description: v,
|
|
64
|
-
disabled: y,
|
|
65
|
-
placeholder: b,
|
|
66
|
-
size: ie,
|
|
67
|
-
className: se,
|
|
68
|
-
children: ({ controlId: t, labelId: i, describedBy: a }) => {
|
|
69
|
-
let s = `${t}-listbox`;
|
|
70
|
-
return /* @__PURE__ */ h(p, { children: [/* @__PURE__ */ m(n, {
|
|
71
|
-
ref: Ne,
|
|
72
|
-
rootRef: be,
|
|
73
|
-
id: t,
|
|
74
|
-
type: "text",
|
|
75
|
-
disabled: y,
|
|
76
|
-
readOnly: !A,
|
|
77
|
-
autoComplete: "off",
|
|
78
|
-
role: "combobox",
|
|
79
|
-
value: Z,
|
|
80
|
-
placeholder: V === void 0 || X ? b : void 0,
|
|
81
|
-
"aria-labelledby": i,
|
|
82
|
-
"aria-describedby": a,
|
|
83
|
-
"aria-haspopup": "listbox",
|
|
84
|
-
"aria-expanded": L,
|
|
85
|
-
"aria-controls": L ? s : void 0,
|
|
86
|
-
"aria-autocomplete": A ? "list" : "none",
|
|
87
|
-
"aria-activedescendant": L ? K(s) : void 0,
|
|
88
|
-
inputClassName: u(Q && _.inputWithOverlay, ce, "textOverflow"),
|
|
89
|
-
overlay: Q ? /* @__PURE__ */ m("div", {
|
|
90
|
-
className: _.valueOverlay,
|
|
91
|
-
children: Y
|
|
92
|
-
}) : void 0,
|
|
93
|
-
endAdornment: /* @__PURE__ */ m(o, {
|
|
94
|
-
open: L,
|
|
95
|
-
disabled: y,
|
|
96
|
-
onToggleMouseDown: $.handleToggleMouseDown,
|
|
97
|
-
onToggleClick: $.handleToggleClick,
|
|
98
|
-
children: F && V !== void 0 && !y ? /* @__PURE__ */ m("button", {
|
|
99
|
-
type: "button",
|
|
100
|
-
className: e.uiClearButton,
|
|
101
|
-
"data-ui": "select-clear-button",
|
|
102
|
-
"data-action": "clear-select",
|
|
103
|
-
onMouseDown: (e) => {
|
|
104
|
-
e.preventDefault(), e.stopPropagation();
|
|
105
|
-
},
|
|
106
|
-
onClick: (e) => {
|
|
107
|
-
e.preventDefault(), e.stopPropagation(), Pe();
|
|
108
|
-
},
|
|
109
|
-
"aria-label": "Очистить выбор",
|
|
110
|
-
children: /* @__PURE__ */ m(f, {})
|
|
111
|
-
}) : null
|
|
112
|
-
}),
|
|
113
|
-
onChange: (e) => {
|
|
114
|
-
A && $.handleTriggerInputChange(e.target.value);
|
|
115
|
-
},
|
|
116
|
-
onClick: $.handleTriggerClick,
|
|
117
|
-
onFocus: (e) => {
|
|
118
|
-
$.handleTriggerFocus(e.currentTarget);
|
|
119
|
-
},
|
|
120
|
-
onKeyDown: (e) => {
|
|
121
|
-
De(e), !e.defaultPrevented && $.handleTriggerKeyDown({
|
|
122
|
-
event: e,
|
|
123
|
-
onActivateWhenOpen: Ee,
|
|
124
|
-
enableSpaceActivation: !A
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}), /* @__PURE__ */ m(r, {
|
|
128
|
-
open: L,
|
|
129
|
-
context: _e,
|
|
130
|
-
floatingStyles: ve,
|
|
131
|
-
listId: s,
|
|
132
|
-
labelId: i,
|
|
133
|
-
descriptionId: a,
|
|
134
|
-
activeOptionId: q ? K(s) : void 0,
|
|
135
|
-
setFloating: xe,
|
|
136
|
-
getFloatingProps: ye,
|
|
137
|
-
onKeyDown: Oe,
|
|
138
|
-
className: u(e.uiPopupOptions, le),
|
|
139
|
-
header: he,
|
|
140
|
-
children: /* @__PURE__ */ m("div", {
|
|
141
|
-
className: u(ue, "h100 scrollable"),
|
|
142
|
-
children: q ? W.map((t, n) => {
|
|
143
|
-
let r = w(t), i = B !== void 0 && r === B, a = n === ge, o = D?.(t) ?? !1, c = {
|
|
144
|
-
active: a,
|
|
145
|
-
selected: i,
|
|
146
|
-
disabled: o
|
|
147
|
-
};
|
|
148
|
-
return /* @__PURE__ */ m("div", {
|
|
149
|
-
id: ke(s, n),
|
|
150
|
-
ref: (e) => Se(n, e),
|
|
151
|
-
role: "option",
|
|
152
|
-
"aria-selected": i,
|
|
153
|
-
"aria-disabled": o || void 0,
|
|
154
|
-
"aria-label": ae?.(t),
|
|
155
|
-
className: u(e.uiPopupOption, o && e.disabled, a && e.uiPopupOptionActive, i && e.selected, oe?.(t, c)),
|
|
156
|
-
onClick: () => Te(t),
|
|
157
|
-
children: O ? O(t, c) : /* @__PURE__ */ h(p, { children: [
|
|
158
|
-
m(i ? d : "span", { className: e.uiPopupOptionIcon }),
|
|
159
|
-
/* @__PURE__ */ m("div", {
|
|
160
|
-
className: e.uiOptionText,
|
|
161
|
-
children: T(t)
|
|
162
|
-
}),
|
|
163
|
-
E && /* @__PURE__ */ m("div", {
|
|
164
|
-
className: e.uiOptionCode,
|
|
165
|
-
children: E(t)
|
|
166
|
-
})
|
|
167
|
-
] })
|
|
168
|
-
}, r);
|
|
169
|
-
}) : /* @__PURE__ */ m(ee, {
|
|
170
|
-
emptyState: j,
|
|
171
|
-
loadingState: M,
|
|
172
|
-
errorState: N
|
|
173
|
-
})
|
|
174
|
-
})
|
|
175
|
-
})] });
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
//#endregion
|
|
180
|
-
export { g as n, v as t };
|
|
181
|
-
|
|
182
|
-
//# sourceMappingURL=Select-CXeVjVKA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Select-CXeVjVKA.js","names":[],"sources":["../../src/select/lib/getOptionSearchText.ts","../../src/select/Select.module.scss","../../src/select/Select.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\n\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\n\nimport { extractPickerTextContent } from \"../../picker\";\n\nexport function getOptionSearchText<T extends InputType>({\n\toption,\n\tgetOptionLabel,\n\tgetOptionCode\n}: {\n\toption: T;\n\tgetOptionLabel: (option: T) => ReactNode;\n\tgetOptionCode?: (option: T) => ReactNode;\n}) {\n\treturn [extractPickerTextContent(getOptionLabel(option)), extractPickerTextContent(getOptionCode?.(option))]\n\t\t.filter((part): part is string => Boolean(part))\n\t\t.join(\" \")\n\t\t.toLowerCase();\n}\n\n/** Находит selected option по value и возвращает fallback, если значение еще не нормализовано. */\nexport function resolveSelectedOption<TOption extends { value: string }>(\n\toptions: readonly TOption[],\n\tvalue: string,\n\tfallback: TOption\n): TOption {\n\treturn options.find((option) => option.value === value) ?? fallback;\n}\n",".inputWithOverlay {\n\tcolor: transparent;\n\tcaret-color: transparent;\n}\n\n.valueOverlay {\n\tposition: absolute;\n\tinset: 0 calc(var(--control-height) + var(--space-xs)) 0 var(--space-md);\n\tdisplay: flex;\n\talign-items: center;\n\tpointer-events: none;\n\toverflow: hidden;\n}\n","import { ReactNode, useRef, useState } from \"react\";\n\nimport { Placement } from \"@floating-ui/react\";\nimport { InputType } from \"@ryuzaki13/react-foundation-lib/types\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { CheckIcon, XIcon } from \"lucide-react\";\n\nimport {\n\textractPickerTextContent,\n\tPickerField,\n\tPickerPopup,\n\tPickerStatus,\n\tPickerTriggerActions,\n\tPickerTriggerInput,\n\tusePickerDefaultFilter,\n\tusePickerFloatingListbox,\n\tusePickerQuery,\n\tusePickerTriggerController\n} from \"../picker\";\nimport { UiBaseProps } from \"../types\";\nimport uiStyles from \"../ui.module.scss\";\n\nimport { getOptionSearchText } from \"./lib\";\nimport styles from \"./Select.module.scss\";\n\nexport type SelectOptionKey = string | number;\n\nexport type SelectOptionState = {\n\tactive: boolean;\n\tselected: boolean;\n\tdisabled: boolean;\n};\n\nexport interface SelectProps<TOption extends InputType, TChangeValue extends TOption | undefined = TOption> extends UiBaseProps<\n\tTChangeValue,\n\tTOption | undefined\n> {\n\toptions: readonly TOption[];\n\tgetOptionKey: (option: TOption) => SelectOptionKey;\n\tgetOptionLabel: (option: TOption) => ReactNode;\n\tgetOptionCode?: (option: TOption) => ReactNode;\n\tgetOptionDisabled?: (option: TOption) => boolean;\n\tgetOptionAriaLabel?: (option: TOption) => string;\n\tgetOptionClassName?: (option: TOption, state: SelectOptionState) => string | undefined;\n\trenderOption?: (option: TOption, state: SelectOptionState) => ReactNode;\n\trenderValue?: (option: TOption) => ReactNode;\n\tclassName?: string;\n\tbuttonClassName?: string;\n\toptionsClassName?: string;\n\toptionsContentClassName?: string;\n\tsearchable?: boolean;\n\tquery?: string;\n\tdefaultQuery?: string;\n\tonQuery?: (value: string) => void;\n\tdefaultFilter?: boolean;\n\trenderPopupHeader?: ReactNode;\n\temptyState?: ReactNode;\n\tloadingState?: ReactNode;\n\terrorState?: ReactNode;\n\tplacement?: Placement;\n\tclearable?: boolean;\n}\n\n/**\n * Выпадающий список выбора значения из набора опций. Подходит для форм, фильтров и простых справочников.\n */\nexport function Select<TOption extends InputType, TChangeValue extends TOption | undefined = TOption>({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder,\n\tsize,\n\toptions,\n\tvalue,\n\tonChange,\n\tgetOptionKey,\n\tgetOptionLabel,\n\tgetOptionCode,\n\tgetOptionDisabled,\n\tgetOptionAriaLabel,\n\tgetOptionClassName,\n\trenderOption,\n\trenderValue,\n\tclassName,\n\tbuttonClassName,\n\toptionsClassName,\n\toptionsContentClassName,\n\tsearchable = false,\n\tdefaultFilter = true,\n\tquery,\n\tdefaultQuery,\n\tonQuery,\n\trenderPopupHeader,\n\temptyState,\n\tloadingState,\n\terrorState,\n\tplacement = \"bottom-start\",\n\tclearable = false\n}: SelectProps<TOption, TChangeValue>) {\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst triggerMode = searchable ? \"search-single\" : \"display\";\n\tconst selectedKey = value === undefined ? undefined : getOptionKey(value);\n\tconst selectedOption =\n\t\tselectedKey === undefined ? undefined : (options.find((option) => getOptionKey(option) === selectedKey) ?? value);\n\tconst { query: currentQuery, setQuery } = usePickerQuery({\n\t\topen,\n\t\tquery,\n\t\tdefaultQuery,\n\t\tonQuery,\n\t\ttriggerMode\n\t});\n\tconst visibleOptions = usePickerDefaultFilter({\n\t\toptions,\n\t\tquery: currentQuery,\n\t\tenabled: searchable && defaultFilter,\n\t\tgetSearchText: (option) =>\n\t\t\tgetOptionSearchText({\n\t\t\t\toption,\n\t\t\t\tgetOptionLabel,\n\t\t\t\tgetOptionCode\n\t\t\t})\n\t});\n\tconst selectedIndex = selectedKey === undefined ? -1 : visibleOptions.findIndex((option) => getOptionKey(option) === selectedKey);\n\tconst {\n\t\tactiveIndex,\n\t\tcontext,\n\t\tfloatingStyles,\n\t\tgetFloatingProps,\n\t\tsetReference,\n\t\tsetFloating,\n\t\tsetOptionRef,\n\t\tclose,\n\t\topenList,\n\t\ttoggleOpen,\n\t\tselectOption,\n\t\tselectActiveOption,\n\t\thandleReferenceKeyDown,\n\t\thandleFloatingKeyDown,\n\t\tgetOptionId,\n\t\tgetActiveOptionId\n\t} = usePickerFloatingListbox({\n\t\toptions: visibleOptions,\n\t\tselectedIndex,\n\t\topen,\n\t\tonOpenChange: setOpen,\n\t\tgetOptionDisabled,\n\t\tonSelect: (option) => onChange(option as TChangeValue),\n\t\tdisabled,\n\t\tplacement,\n\t\ttriggerMode\n\t});\n\n\tconst hasOptions = visibleOptions.length > 0;\n\tconst labelContent = selectedOption !== undefined ? getOptionLabel(selectedOption) : undefined;\n\tconst displayContent = selectedOption !== undefined ? (renderValue ? renderValue(selectedOption) : labelContent) : undefined;\n\tconst labelText = extractPickerTextContent(labelContent);\n\tconst codeText = selectedOption !== undefined ? extractPickerTextContent(getOptionCode?.(selectedOption)) : undefined;\n\tconst displayText =\n\t\textractPickerTextContent(displayContent) ?? labelText ?? codeText ?? (selectedKey !== undefined ? String(selectedKey) : \"\");\n\tconst showSearchValue = searchable && (open || currentQuery.length > 0);\n\tconst inputValue = showSearchValue ? currentQuery : selectedOption !== undefined ? displayText : \"\";\n\tconst showDisplayOverlay =\n\t\tselectedOption !== undefined &&\n\t\tdisplayContent !== undefined &&\n\t\textractPickerTextContent(displayContent) === undefined &&\n\t\t!showSearchValue;\n\tconst triggerController = usePickerTriggerController({\n\t\tmode: triggerMode,\n\t\topen,\n\t\tcurrentQuery,\n\t\thasDisplayValue: selectedOption !== undefined,\n\t\tinputRef,\n\t\tsetQuery,\n\t\topenList,\n\t\tclose,\n\t\ttoggleOpen\n\t});\n\tconst setInputNode = (node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\t};\n\tconst handleClear = () => {\n\t\tif (clearable) {\n\t\t\tonChange(undefined as TChangeValue);\n\t\t}\n\n\t\tsetQuery(\"\");\n\t\tclose();\n\t};\n\n\treturn (\n\t\t<PickerField\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\tclassName={className}>\n\t\t\t{({ controlId, labelId, describedBy }) => {\n\t\t\t\tconst listId = `${controlId}-listbox`;\n\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PickerTriggerInput\n\t\t\t\t\t\t\tref={setInputNode}\n\t\t\t\t\t\t\trootRef={setReference}\n\t\t\t\t\t\t\tid={controlId}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\treadOnly={!searchable}\n\t\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\tplaceholder={selectedOption === undefined || showSearchValue ? placeholder : undefined}\n\t\t\t\t\t\t\taria-labelledby={labelId}\n\t\t\t\t\t\t\taria-describedby={describedBy}\n\t\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\taria-controls={open ? listId : undefined}\n\t\t\t\t\t\t\taria-autocomplete={searchable ? \"list\" : \"none\"}\n\t\t\t\t\t\t\taria-activedescendant={open ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tinputClassName={cn(showDisplayOverlay && styles.inputWithOverlay, buttonClassName, \"textOverflow\")}\n\t\t\t\t\t\t\toverlay={showDisplayOverlay ? <div className={styles.valueOverlay}>{displayContent}</div> : undefined}\n\t\t\t\t\t\t\tendAdornment={\n\t\t\t\t\t\t\t\t<PickerTriggerActions\n\t\t\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonToggleMouseDown={triggerController.handleToggleMouseDown}\n\t\t\t\t\t\t\t\t\tonToggleClick={triggerController.handleToggleClick}>\n\t\t\t\t\t\t\t\t\t{clearable && selectedOption !== undefined && !disabled ? (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={uiStyles.uiClearButton}\n\t\t\t\t\t\t\t\t\t\t\tdata-ui=\"select-clear-button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-action=\"clear-select\"\n\t\t\t\t\t\t\t\t\t\t\tonMouseDown={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\thandleClear();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Очистить выбор\">\n\t\t\t\t\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</PickerTriggerActions>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonChange={(event) => {\n\t\t\t\t\t\t\t\tif (!searchable) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerInputChange(event.target.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonClick={triggerController.handleTriggerClick}\n\t\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerFocus(event.currentTarget);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\t\thandleReferenceKeyDown(event);\n\n\t\t\t\t\t\t\t\tif (event.defaultPrevented) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttriggerController.handleTriggerKeyDown({\n\t\t\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t\t\tonActivateWhenOpen: selectActiveOption,\n\t\t\t\t\t\t\t\t\tenableSpaceActivation: !searchable\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<PickerPopup\n\t\t\t\t\t\t\topen={open}\n\t\t\t\t\t\t\tcontext={context}\n\t\t\t\t\t\t\tfloatingStyles={floatingStyles}\n\t\t\t\t\t\t\tlistId={listId}\n\t\t\t\t\t\t\tlabelId={labelId}\n\t\t\t\t\t\t\tdescriptionId={describedBy}\n\t\t\t\t\t\t\tactiveOptionId={hasOptions ? getActiveOptionId(listId) : undefined}\n\t\t\t\t\t\t\tsetFloating={setFloating}\n\t\t\t\t\t\t\tgetFloatingProps={getFloatingProps}\n\t\t\t\t\t\t\tonKeyDown={handleFloatingKeyDown}\n\t\t\t\t\t\t\tclassName={cn(uiStyles.uiPopupOptions, optionsClassName)}\n\t\t\t\t\t\t\theader={renderPopupHeader}>\n\t\t\t\t\t\t\t<div className={cn(optionsContentClassName, \"h100 scrollable\")}>\n\t\t\t\t\t\t\t\t{hasOptions ? (\n\t\t\t\t\t\t\t\t\tvisibleOptions.map((option, index) => {\n\t\t\t\t\t\t\t\t\t\tconst optionKey = getOptionKey(option);\n\t\t\t\t\t\t\t\t\t\tconst selected = selectedKey !== undefined && optionKey === selectedKey;\n\t\t\t\t\t\t\t\t\t\tconst active = index === activeIndex;\n\t\t\t\t\t\t\t\t\t\tconst optionDisabled = getOptionDisabled?.(option) ?? false;\n\t\t\t\t\t\t\t\t\t\tconst optionState = { active, selected, disabled: optionDisabled };\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tkey={optionKey}\n\t\t\t\t\t\t\t\t\t\t\t\tid={getOptionId(listId, index)}\n\t\t\t\t\t\t\t\t\t\t\t\tref={(node) => setOptionRef(index, node)}\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-selected={selected}\n\t\t\t\t\t\t\t\t\t\t\t\taria-disabled={optionDisabled || undefined}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={getOptionAriaLabel?.(option)}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\tuiStyles.uiPopupOption,\n\t\t\t\t\t\t\t\t\t\t\t\t\toptionDisabled && uiStyles.disabled,\n\t\t\t\t\t\t\t\t\t\t\t\t\tactive && uiStyles.uiPopupOptionActive,\n\t\t\t\t\t\t\t\t\t\t\t\t\tselected && uiStyles.selected,\n\t\t\t\t\t\t\t\t\t\t\t\t\tgetOptionClassName?.(option, optionState)\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => selectOption(option)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{renderOption ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\trenderOption(option, optionState)\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{selected ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CheckIcon className={uiStyles.uiPopupOptionIcon} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className={uiStyles.uiPopupOptionIcon} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className={uiStyles.uiOptionText}>{getOptionLabel(option)}</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getOptionCode && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className={uiStyles.uiOptionCode}>{getOptionCode(option)}</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<PickerStatus emptyState={emptyState} loadingState={loadingState} errorState={errorState} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</PickerPopup>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t</PickerField>\n\t);\n}\n"],"mappings":"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"}
|