bj-web-components 0.2.26 → 0.2.28

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 (109) hide show
  1. package/dist/favicon.ico +0 -0
  2. package/dist/file.svg +1 -0
  3. package/dist/globe.svg +1 -0
  4. package/dist/index.d.ts +1141 -0
  5. package/dist/index.js +51 -0
  6. package/dist/index.mjs +51 -0
  7. package/dist/miniapp.d.ts +1 -0
  8. package/dist/miniapp.js +1 -0
  9. package/dist/miniapp.mjs +1 -0
  10. package/dist/mobile.d.ts +1 -0
  11. package/dist/mobile.js +1 -0
  12. package/dist/mobile.mjs +1 -0
  13. package/dist/next.svg +1 -0
  14. package/dist/react.d.ts +1 -0
  15. package/dist/react.js +1 -0
  16. package/dist/react.mjs +1 -0
  17. package/dist/shared.d.ts +1 -0
  18. package/dist/shared.js +1 -0
  19. package/dist/shared.mjs +1 -0
  20. package/dist/style.css +3744 -0
  21. package/dist/vercel.svg +1 -0
  22. package/dist/web/BasicInput/BInput.js +208 -0
  23. package/dist/web/BasicInput/BInput.mjs +209 -0
  24. package/dist/web/BasicInput/utils.js +47 -0
  25. package/dist/web/BasicInput/utils.mjs +47 -0
  26. package/dist/web/CategoryDropdown/CategoryDropdown.js +307 -0
  27. package/dist/web/CategoryDropdown/CategoryDropdown.mjs +308 -0
  28. package/dist/web/CheckBox/BCheckBox.js +116 -0
  29. package/dist/web/CheckBox/BCheckBox.mjs +117 -0
  30. package/dist/web/CheckBox/Group.js +73 -0
  31. package/dist/web/CheckBox/Group.mjs +74 -0
  32. package/dist/web/CheckBox/context.js +5 -0
  33. package/dist/web/CheckBox/context.mjs +5 -0
  34. package/dist/web/CheckBox/index.js +8 -0
  35. package/dist/web/CheckBox/index.mjs +8 -0
  36. package/dist/web/Dropdown/BDropdown.js +186 -0
  37. package/dist/web/Dropdown/BDropdown.mjs +186 -0
  38. package/dist/web/EmptyInputBox/EmptyInputBox.js +77 -0
  39. package/dist/web/EmptyInputBox/EmptyInputBox.mjs +78 -0
  40. package/dist/web/FileCard/FileCard.js +157 -0
  41. package/dist/web/FileCard/FileCard.mjs +158 -0
  42. package/dist/web/Icon/Icon.js +9 -0
  43. package/dist/web/Icon/Icon.mjs +10 -0
  44. package/dist/web/Input/Input.js +181 -0
  45. package/dist/web/Input/Input.mjs +182 -0
  46. package/dist/web/InputNumber/BInputNumber.js +311 -0
  47. package/dist/web/InputNumber/BInputNumber.mjs +312 -0
  48. package/dist/web/InputNumber/StepHandler.js +69 -0
  49. package/dist/web/InputNumber/StepHandler.mjs +70 -0
  50. package/dist/web/InputNumber/hooks/useCursor.js +40 -0
  51. package/dist/web/InputNumber/hooks/useCursor.mjs +41 -0
  52. package/dist/web/InputNumber/hooks/useFrame.js +12 -0
  53. package/dist/web/InputNumber/hooks/useFrame.mjs +13 -0
  54. package/dist/web/InputNumber/utils/decimal.js +147 -0
  55. package/dist/web/InputNumber/utils/decimal.mjs +147 -0
  56. package/dist/web/Modal/Modal.js +84 -0
  57. package/dist/web/Modal/Modal.mjs +85 -0
  58. package/dist/web/OverlayScrollbar/BOverlayScrollbar.js +232 -0
  59. package/dist/web/OverlayScrollbar/BOverlayScrollbar.mjs +233 -0
  60. package/dist/web/Pagination/Pagination.js +328 -0
  61. package/dist/web/Pagination/Pagination.mjs +329 -0
  62. package/dist/web/ProductField/ProductField.js +272 -0
  63. package/dist/web/ProductField/ProductField.mjs +273 -0
  64. package/dist/web/ProductField/arrow-up.svg.js +3 -0
  65. package/dist/web/ProductField/arrow-up.svg.mjs +4 -0
  66. package/dist/web/ProductField/checkbox-no.svg.js +3 -0
  67. package/dist/web/ProductField/checkbox-no.svg.mjs +4 -0
  68. package/dist/web/ProductField/checkbox-ok.svg.js +3 -0
  69. package/dist/web/ProductField/checkbox-ok.svg.mjs +4 -0
  70. package/dist/web/ProductField/no_data_light.svg.js +3 -0
  71. package/dist/web/ProductField/no_data_light.svg.mjs +4 -0
  72. package/dist/web/ProductField/search.svg.js +3 -0
  73. package/dist/web/ProductField/search.svg.mjs +4 -0
  74. package/dist/web/ProductField/sort.svg.js +3 -0
  75. package/dist/web/ProductField/sort.svg.mjs +4 -0
  76. package/dist/web/SkuInputCard/SkuInputCard.js +276 -0
  77. package/dist/web/SkuInputCard/SkuInputCard.mjs +277 -0
  78. package/dist/web/SkuInputCard/spin_loading_red.gif.js +3 -0
  79. package/dist/web/SkuInputCard/spin_loading_red.gif.mjs +4 -0
  80. package/dist/web/Switch/Switch.js +70 -0
  81. package/dist/web/Switch/Switch.mjs +71 -0
  82. package/dist/web/Table/BTable.js +950 -0
  83. package/dist/web/Table/BTable.mjs +950 -0
  84. package/dist/web/Table/Column.js +5 -0
  85. package/dist/web/Table/Column.mjs +6 -0
  86. package/dist/web/Table/ColumnGroup.js +5 -0
  87. package/dist/web/Table/ColumnGroup.mjs +6 -0
  88. package/dist/web/Table/utils/columns.js +48 -0
  89. package/dist/web/Table/utils/columns.mjs +48 -0
  90. package/dist/web/Table/utils/sortFilter.js +84 -0
  91. package/dist/web/Table/utils/sortFilter.mjs +84 -0
  92. package/dist/web/Tabs/BTabs.js +150 -0
  93. package/dist/web/Tabs/BTabs.mjs +150 -0
  94. package/dist/web/Tabs/TabPane.js +8 -0
  95. package/dist/web/Tabs/TabPane.mjs +8 -0
  96. package/dist/web/Tooltip/ConfirmTooltip.js +26 -0
  97. package/dist/web/Tooltip/ConfirmTooltip.mjs +27 -0
  98. package/dist/web/Tooltip/ContentTooltip.js +94 -0
  99. package/dist/web/Tooltip/ContentTooltip.mjs +95 -0
  100. package/dist/web/Tooltip/ProgressTooltip.js +36 -0
  101. package/dist/web/Tooltip/ProgressTooltip.mjs +37 -0
  102. package/dist/web/Tooltip/TooltipWrapper.js +12 -0
  103. package/dist/web/Tooltip/TooltipWrapper.mjs +13 -0
  104. package/dist/web/Tooltip/useAutoPlacement.js +41 -0
  105. package/dist/web/Tooltip/useAutoPlacement.mjs +41 -0
  106. package/dist/web.d.ts +1141 -0
  107. package/dist/web.js +51 -0
  108. package/dist/web.mjs +51 -0
  109. package/package.json +1 -1
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ const jsxRuntime = require("react/jsx-runtime");
3
+ const react = require("react");
4
+ const reactDom = require("react-dom");
5
+ ;/* empty css */
6
+ const no_data_light = require("./no_data_light.svg.js");
7
+ const arrowUp = require("./arrow-up.svg.js");
8
+ const sort = require("./sort.svg.js");
9
+ const search = require("./search.svg.js");
10
+ const checkboxNo = require("./checkbox-no.svg.js");
11
+ const checkboxOk = require("./checkbox-ok.svg.js");
12
+ function CloseIcon({ size = 20 }) {
13
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16.5613 6.73027C16.7558 6.53571 17.0723 6.53442 17.2684 6.72736C17.4644 6.92032 17.4657 7.23444 17.2713 7.42901L12.7036 12.0002L17.2713 16.5714C17.4657 16.766 17.4644 17.0801 17.2684 17.273C17.0723 17.4659 16.7558 17.4646 16.5613 17.2701L11.9996 12.7047L7.43794 17.2701C7.24352 17.4647 6.92699 17.4659 6.73091 17.273C6.53485 17.0801 6.53355 16.7659 6.72798 16.5714L11.2955 12.0002L6.72798 7.42901C6.53355 7.23442 6.53485 6.92032 6.73091 6.72736C6.92698 6.53442 7.2435 6.53571 7.43794 6.73027L11.9996 11.2955L16.5613 6.73027Z", fill: "currentColor" }) });
14
+ }
15
+ function BuProductField({
16
+ options = [],
17
+ value = [],
18
+ onChange,
19
+ placeholder = "请选择",
20
+ emptyText = "暂无产品数据",
21
+ onManageField,
22
+ multiple = true,
23
+ showSearch = true,
24
+ showSort = true,
25
+ addButtonText,
26
+ onAdd,
27
+ labels,
28
+ className,
29
+ style,
30
+ getPopupContainer
31
+ }) {
32
+ const searchPlaceholder = (labels == null ? void 0 : labels.searchPlaceholder) ?? "搜索";
33
+ const sortDefault = (labels == null ? void 0 : labels.sortDefault) ?? "默认顺序";
34
+ const sortAsc = (labels == null ? void 0 : labels.sortAsc) ?? "名称A-Z";
35
+ const sortDesc = (labels == null ? void 0 : labels.sortDesc) ?? "名称Z-A";
36
+ const noMatchText = (labels == null ? void 0 : labels.noMatchText) ?? "暂无选项";
37
+ const manageFieldPre = (labels == null ? void 0 : labels.manageFieldPre) ?? "请前往";
38
+ const manageFieldLink = (labels == null ? void 0 : labels.manageFieldLink) ?? "管理字段";
39
+ const manageFieldPost = (labels == null ? void 0 : labels.manageFieldPost) ?? "添加";
40
+ const [open, setOpen] = react.useState(false);
41
+ const [search$1, setSearch] = react.useState("");
42
+ const [sortOrder, setSortOrder] = react.useState("none");
43
+ const [sortDropdownOpen, setSortDropdownOpen] = react.useState(false);
44
+ const rootRef = react.useRef(null);
45
+ const sortBtnRef = react.useRef(null);
46
+ const portalRef = react.useRef(null);
47
+ const [dropdownPos, setDropdownPos] = react.useState({ top: 0, left: 0, width: 0 });
48
+ const updatePosition = react.useCallback(() => {
49
+ if (!rootRef.current) return;
50
+ const rect = rootRef.current.getBoundingClientRect();
51
+ setDropdownPos({
52
+ top: rect.bottom + 4,
53
+ left: rect.left,
54
+ width: rect.width
55
+ });
56
+ }, []);
57
+ react.useLayoutEffect(() => {
58
+ if (open) updatePosition();
59
+ }, [open, updatePosition]);
60
+ react.useEffect(() => {
61
+ if (!open) return;
62
+ const handler = (e) => {
63
+ var _a, _b;
64
+ const target = e.target;
65
+ if (((_a = portalRef.current) == null ? void 0 : _a.contains(target)) || ((_b = rootRef.current) == null ? void 0 : _b.contains(target))) {
66
+ return;
67
+ }
68
+ close();
69
+ };
70
+ document.addEventListener("mousedown", handler);
71
+ window.addEventListener("scroll", updatePosition, true);
72
+ window.addEventListener("resize", updatePosition);
73
+ return () => {
74
+ document.removeEventListener("mousedown", handler);
75
+ window.removeEventListener("scroll", updatePosition, true);
76
+ window.removeEventListener("resize", updatePosition);
77
+ };
78
+ }, [open, updatePosition]);
79
+ react.useEffect(() => {
80
+ if (!sortDropdownOpen) return;
81
+ const handler = (e) => {
82
+ if (sortBtnRef.current && !sortBtnRef.current.contains(e.target)) {
83
+ setSortDropdownOpen(false);
84
+ }
85
+ };
86
+ document.addEventListener("mousedown", handler);
87
+ return () => document.removeEventListener("mousedown", handler);
88
+ }, [sortDropdownOpen]);
89
+ const tagsRef = react.useRef(null);
90
+ const triggerTagsRef = react.useRef(null);
91
+ const dragState = react.useRef({ dragging: false, startX: 0, scrollLeft: 0, target: null });
92
+ const makeDragHandlers = react.useCallback((ref) => ({
93
+ onMouseDown: (e) => {
94
+ const el = ref.current;
95
+ if (!el) return;
96
+ dragState.current = { dragging: true, startX: e.clientX, scrollLeft: el.scrollLeft, target: el };
97
+ },
98
+ onMouseMove: (e) => {
99
+ const { dragging, startX, scrollLeft, target } = dragState.current;
100
+ if (!dragging || !target) return;
101
+ e.preventDefault();
102
+ target.scrollLeft = scrollLeft - (e.clientX - startX);
103
+ },
104
+ onMouseUp: () => {
105
+ dragState.current.dragging = false;
106
+ },
107
+ onMouseLeave: () => {
108
+ dragState.current.dragging = false;
109
+ }
110
+ }), []);
111
+ function toggleOption(val) {
112
+ if (!multiple) {
113
+ onChange == null ? void 0 : onChange(value.includes(val) ? [] : [val]);
114
+ if (!value.includes(val)) close();
115
+ return;
116
+ }
117
+ const next = value.includes(val) ? value.filter((v) => v !== val) : [...value, val];
118
+ onChange == null ? void 0 : onChange(next);
119
+ }
120
+ function removeTag(val) {
121
+ onChange == null ? void 0 : onChange(value.filter((v) => v !== val));
122
+ }
123
+ function close() {
124
+ setOpen(false);
125
+ setSearch("");
126
+ setSortOrder("none");
127
+ }
128
+ function selectSort(order) {
129
+ setSortOrder(order);
130
+ setSortDropdownOpen(false);
131
+ }
132
+ const filteredOptions = react.useMemo(() => {
133
+ let list = options.filter((o) => {
134
+ const text = o.searchText ?? (typeof o.label === "string" ? o.label : "");
135
+ return text.toLowerCase().includes(search$1.toLowerCase());
136
+ });
137
+ const getText = (o) => o.searchText ?? (typeof o.label === "string" ? o.label : "");
138
+ if (sortOrder === "asc") list = [...list].sort((a, b) => getText(a).localeCompare(getText(b)));
139
+ if (sortOrder === "desc") list = [...list].sort((a, b) => getText(b).localeCompare(getText(a)));
140
+ return list;
141
+ }, [options, search$1, sortOrder]);
142
+ const selectedOptions = options.filter((o) => value.includes(o.value));
143
+ const hasOptions = options.length > 0;
144
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: rootRef, className: ["bu-pf", className].filter(Boolean).join(" "), style, children: [
145
+ !open && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `bu-pf__trigger${selectedOptions.length > 0 ? " bu-pf__trigger--selected" : ""}`, onClick: () => setOpen(true), children: [
146
+ selectedOptions.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
147
+ "div",
148
+ {
149
+ className: "bu-pf__trigger-tags",
150
+ ref: triggerTagsRef,
151
+ ...makeDragHandlers(triggerTagsRef),
152
+ children: selectedOptions.map((opt) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `bu-pf__tag${!multiple ? " bu-pf__tag--single" : ""}`, children: [
153
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bu-pf__tag-text", children: opt.label }),
154
+ /* @__PURE__ */ jsxRuntime.jsx(
155
+ "button",
156
+ {
157
+ type: "button",
158
+ className: "bu-pf__tag-close",
159
+ onClick: (e) => {
160
+ e.stopPropagation();
161
+ removeTag(opt.value);
162
+ },
163
+ children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, { size: 12 })
164
+ }
165
+ )
166
+ ] }, opt.value))
167
+ }
168
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bu-pf__placeholder", children: placeholder }),
169
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bu-pf__arrow", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: arrowUp, width: 24, height: 24, alt: "" }) })
170
+ ] }),
171
+ open && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
172
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bu-pf__panel", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bu-pf__header", children: [
173
+ /* @__PURE__ */ jsxRuntime.jsx(
174
+ "div",
175
+ {
176
+ className: "bu-pf__tags",
177
+ ref: tagsRef,
178
+ ...makeDragHandlers(tagsRef),
179
+ children: selectedOptions.length > 0 ? selectedOptions.map((opt) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `bu-pf__tag${!multiple ? " bu-pf__tag--single" : ""}`, children: [
180
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bu-pf__tag-text", children: opt.label }),
181
+ /* @__PURE__ */ jsxRuntime.jsx(
182
+ "button",
183
+ {
184
+ type: "button",
185
+ className: "bu-pf__tag-close",
186
+ onClick: () => removeTag(opt.value),
187
+ children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, { size: 12 })
188
+ }
189
+ )
190
+ ] }, opt.value)) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bu-pf__placeholder-inline", children: placeholder })
191
+ }
192
+ ),
193
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "bu-pf__close", onClick: close, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: arrowUp, width: 24, height: 24, alt: "" }) })
194
+ ] }) }),
195
+ reactDom.createPortal(
196
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: portalRef, className: "bu-pf__portal", style: { position: "fixed", top: dropdownPos.top, left: dropdownPos.left, width: dropdownPos.width, zIndex: 1050 }, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bu-pf__dropdown", children: [
197
+ (showSearch || showSort) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bu-pf__toolbar", children: [
198
+ showSearch && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bu-pf__search", children: [
199
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bu-pf__search-icon", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: search, width: 20, height: 20, alt: "" }) }),
200
+ /* @__PURE__ */ jsxRuntime.jsx(
201
+ "input",
202
+ {
203
+ className: "bu-pf__search-input",
204
+ placeholder: searchPlaceholder,
205
+ value: search$1,
206
+ onChange: (e) => setSearch(e.target.value)
207
+ }
208
+ )
209
+ ] }),
210
+ showSort && /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: sortBtnRef, className: "bu-pf__sort-wrap", children: [
211
+ /* @__PURE__ */ jsxRuntime.jsx(
212
+ "button",
213
+ {
214
+ type: "button",
215
+ className: `bu-pf__sort-btn${sortOrder !== "none" ? " bu-pf__sort-btn--active" : ""}`,
216
+ onClick: () => setSortDropdownOpen((v) => !v),
217
+ children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: sort, width: 24, height: 24, alt: "" })
218
+ }
219
+ ),
220
+ sortDropdownOpen && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bu-pf__sort-dropdown", children: [
221
+ { key: "none", label: sortDefault },
222
+ { key: "asc", label: sortAsc },
223
+ { key: "desc", label: sortDesc }
224
+ ].map(({ key, label }) => /* @__PURE__ */ jsxRuntime.jsx(
225
+ "div",
226
+ {
227
+ className: `bu-pf__sort-option${sortOrder === key ? " bu-pf__sort-option--active" : ""}`,
228
+ onClick: () => selectSort(key),
229
+ children: label
230
+ },
231
+ key
232
+ )) })
233
+ ] })
234
+ ] }),
235
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bu-pf__list", children: hasOptions && filteredOptions.length > 0 ? filteredOptions.map((opt) => {
236
+ const checked = value.includes(opt.value);
237
+ return /* @__PURE__ */ jsxRuntime.jsxs(
238
+ "div",
239
+ {
240
+ className: `bu-pf__option${multiple ? " bu-pf__option--multiple" : ""}${checked && !multiple ? " bu-pf__option--selected" : ""}`,
241
+ onClick: () => toggleOption(opt.value),
242
+ children: [
243
+ multiple && /* @__PURE__ */ jsxRuntime.jsx(
244
+ "img",
245
+ {
246
+ className: "bu-pf__checkbox-img",
247
+ src: checked ? checkboxOk : checkboxNo,
248
+ alt: ""
249
+ }
250
+ ),
251
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bu-pf__option-label", children: opt.label })
252
+ ]
253
+ },
254
+ opt.value
255
+ );
256
+ }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bu-pf__no-match", children: [
257
+ /* @__PURE__ */ jsxRuntime.jsx("img", { className: "bu-pf__no-match-img", src: no_data_light, alt: hasOptions ? noMatchText : emptyText }),
258
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "bu-pf__no-match-text", children: hasOptions ? noMatchText : emptyText }),
259
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "bu-pf__no-match-hint", children: [
260
+ manageFieldPre,
261
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "bu-pf__manage-btn", onClick: onManageField, children: manageFieldLink }),
262
+ manageFieldPost
263
+ ] })
264
+ ] }) }),
265
+ addButtonText && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bu-pf__add-row", onClick: onAdd, children: addButtonText })
266
+ ] }) }),
267
+ (getPopupContainer == null ? void 0 : getPopupContainer()) ?? document.body
268
+ )
269
+ ] })
270
+ ] });
271
+ }
272
+ module.exports = BuProductField;
@@ -0,0 +1,273 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { useState, useRef, useCallback, useLayoutEffect, useEffect, useMemo } from "react";
3
+ import { createPortal } from "react-dom";
4
+ /* empty css */
5
+ import defaultEmptyImage from "./no_data_light.svg.mjs";
6
+ import arrowUpImg from "./arrow-up.svg.mjs";
7
+ import sortImg from "./sort.svg.mjs";
8
+ import searchImg from "./search.svg.mjs";
9
+ import checkboxNoImg from "./checkbox-no.svg.mjs";
10
+ import checkboxOkImg from "./checkbox-ok.svg.mjs";
11
+ function CloseIcon({ size = 20 }) {
12
+ return /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx("path", { d: "M16.5613 6.73027C16.7558 6.53571 17.0723 6.53442 17.2684 6.72736C17.4644 6.92032 17.4657 7.23444 17.2713 7.42901L12.7036 12.0002L17.2713 16.5714C17.4657 16.766 17.4644 17.0801 17.2684 17.273C17.0723 17.4659 16.7558 17.4646 16.5613 17.2701L11.9996 12.7047L7.43794 17.2701C7.24352 17.4647 6.92699 17.4659 6.73091 17.273C6.53485 17.0801 6.53355 16.7659 6.72798 16.5714L11.2955 12.0002L6.72798 7.42901C6.53355 7.23442 6.53485 6.92032 6.73091 6.72736C6.92698 6.53442 7.2435 6.53571 7.43794 6.73027L11.9996 11.2955L16.5613 6.73027Z", fill: "currentColor" }) });
13
+ }
14
+ function BuProductField({
15
+ options = [],
16
+ value = [],
17
+ onChange,
18
+ placeholder = "请选择",
19
+ emptyText = "暂无产品数据",
20
+ onManageField,
21
+ multiple = true,
22
+ showSearch = true,
23
+ showSort = true,
24
+ addButtonText,
25
+ onAdd,
26
+ labels,
27
+ className,
28
+ style,
29
+ getPopupContainer
30
+ }) {
31
+ const searchPlaceholder = (labels == null ? void 0 : labels.searchPlaceholder) ?? "搜索";
32
+ const sortDefault = (labels == null ? void 0 : labels.sortDefault) ?? "默认顺序";
33
+ const sortAsc = (labels == null ? void 0 : labels.sortAsc) ?? "名称A-Z";
34
+ const sortDesc = (labels == null ? void 0 : labels.sortDesc) ?? "名称Z-A";
35
+ const noMatchText = (labels == null ? void 0 : labels.noMatchText) ?? "暂无选项";
36
+ const manageFieldPre = (labels == null ? void 0 : labels.manageFieldPre) ?? "请前往";
37
+ const manageFieldLink = (labels == null ? void 0 : labels.manageFieldLink) ?? "管理字段";
38
+ const manageFieldPost = (labels == null ? void 0 : labels.manageFieldPost) ?? "添加";
39
+ const [open, setOpen] = useState(false);
40
+ const [search, setSearch] = useState("");
41
+ const [sortOrder, setSortOrder] = useState("none");
42
+ const [sortDropdownOpen, setSortDropdownOpen] = useState(false);
43
+ const rootRef = useRef(null);
44
+ const sortBtnRef = useRef(null);
45
+ const portalRef = useRef(null);
46
+ const [dropdownPos, setDropdownPos] = useState({ top: 0, left: 0, width: 0 });
47
+ const updatePosition = useCallback(() => {
48
+ if (!rootRef.current) return;
49
+ const rect = rootRef.current.getBoundingClientRect();
50
+ setDropdownPos({
51
+ top: rect.bottom + 4,
52
+ left: rect.left,
53
+ width: rect.width
54
+ });
55
+ }, []);
56
+ useLayoutEffect(() => {
57
+ if (open) updatePosition();
58
+ }, [open, updatePosition]);
59
+ useEffect(() => {
60
+ if (!open) return;
61
+ const handler = (e) => {
62
+ var _a, _b;
63
+ const target = e.target;
64
+ if (((_a = portalRef.current) == null ? void 0 : _a.contains(target)) || ((_b = rootRef.current) == null ? void 0 : _b.contains(target))) {
65
+ return;
66
+ }
67
+ close();
68
+ };
69
+ document.addEventListener("mousedown", handler);
70
+ window.addEventListener("scroll", updatePosition, true);
71
+ window.addEventListener("resize", updatePosition);
72
+ return () => {
73
+ document.removeEventListener("mousedown", handler);
74
+ window.removeEventListener("scroll", updatePosition, true);
75
+ window.removeEventListener("resize", updatePosition);
76
+ };
77
+ }, [open, updatePosition]);
78
+ useEffect(() => {
79
+ if (!sortDropdownOpen) return;
80
+ const handler = (e) => {
81
+ if (sortBtnRef.current && !sortBtnRef.current.contains(e.target)) {
82
+ setSortDropdownOpen(false);
83
+ }
84
+ };
85
+ document.addEventListener("mousedown", handler);
86
+ return () => document.removeEventListener("mousedown", handler);
87
+ }, [sortDropdownOpen]);
88
+ const tagsRef = useRef(null);
89
+ const triggerTagsRef = useRef(null);
90
+ const dragState = useRef({ dragging: false, startX: 0, scrollLeft: 0, target: null });
91
+ const makeDragHandlers = useCallback((ref) => ({
92
+ onMouseDown: (e) => {
93
+ const el = ref.current;
94
+ if (!el) return;
95
+ dragState.current = { dragging: true, startX: e.clientX, scrollLeft: el.scrollLeft, target: el };
96
+ },
97
+ onMouseMove: (e) => {
98
+ const { dragging, startX, scrollLeft, target } = dragState.current;
99
+ if (!dragging || !target) return;
100
+ e.preventDefault();
101
+ target.scrollLeft = scrollLeft - (e.clientX - startX);
102
+ },
103
+ onMouseUp: () => {
104
+ dragState.current.dragging = false;
105
+ },
106
+ onMouseLeave: () => {
107
+ dragState.current.dragging = false;
108
+ }
109
+ }), []);
110
+ function toggleOption(val) {
111
+ if (!multiple) {
112
+ onChange == null ? void 0 : onChange(value.includes(val) ? [] : [val]);
113
+ if (!value.includes(val)) close();
114
+ return;
115
+ }
116
+ const next = value.includes(val) ? value.filter((v) => v !== val) : [...value, val];
117
+ onChange == null ? void 0 : onChange(next);
118
+ }
119
+ function removeTag(val) {
120
+ onChange == null ? void 0 : onChange(value.filter((v) => v !== val));
121
+ }
122
+ function close() {
123
+ setOpen(false);
124
+ setSearch("");
125
+ setSortOrder("none");
126
+ }
127
+ function selectSort(order) {
128
+ setSortOrder(order);
129
+ setSortDropdownOpen(false);
130
+ }
131
+ const filteredOptions = useMemo(() => {
132
+ let list = options.filter((o) => {
133
+ const text = o.searchText ?? (typeof o.label === "string" ? o.label : "");
134
+ return text.toLowerCase().includes(search.toLowerCase());
135
+ });
136
+ const getText = (o) => o.searchText ?? (typeof o.label === "string" ? o.label : "");
137
+ if (sortOrder === "asc") list = [...list].sort((a, b) => getText(a).localeCompare(getText(b)));
138
+ if (sortOrder === "desc") list = [...list].sort((a, b) => getText(b).localeCompare(getText(a)));
139
+ return list;
140
+ }, [options, search, sortOrder]);
141
+ const selectedOptions = options.filter((o) => value.includes(o.value));
142
+ const hasOptions = options.length > 0;
143
+ return /* @__PURE__ */ jsxs("div", { ref: rootRef, className: ["bu-pf", className].filter(Boolean).join(" "), style, children: [
144
+ !open && /* @__PURE__ */ jsxs("div", { className: `bu-pf__trigger${selectedOptions.length > 0 ? " bu-pf__trigger--selected" : ""}`, onClick: () => setOpen(true), children: [
145
+ selectedOptions.length > 0 ? /* @__PURE__ */ jsx(
146
+ "div",
147
+ {
148
+ className: "bu-pf__trigger-tags",
149
+ ref: triggerTagsRef,
150
+ ...makeDragHandlers(triggerTagsRef),
151
+ children: selectedOptions.map((opt) => /* @__PURE__ */ jsxs("span", { className: `bu-pf__tag${!multiple ? " bu-pf__tag--single" : ""}`, children: [
152
+ /* @__PURE__ */ jsx("span", { className: "bu-pf__tag-text", children: opt.label }),
153
+ /* @__PURE__ */ jsx(
154
+ "button",
155
+ {
156
+ type: "button",
157
+ className: "bu-pf__tag-close",
158
+ onClick: (e) => {
159
+ e.stopPropagation();
160
+ removeTag(opt.value);
161
+ },
162
+ children: /* @__PURE__ */ jsx(CloseIcon, { size: 12 })
163
+ }
164
+ )
165
+ ] }, opt.value))
166
+ }
167
+ ) : /* @__PURE__ */ jsx("span", { className: "bu-pf__placeholder", children: placeholder }),
168
+ /* @__PURE__ */ jsx("span", { className: "bu-pf__arrow", children: /* @__PURE__ */ jsx("img", { src: arrowUpImg, width: 24, height: 24, alt: "" }) })
169
+ ] }),
170
+ open && /* @__PURE__ */ jsxs(Fragment, { children: [
171
+ /* @__PURE__ */ jsx("div", { className: "bu-pf__panel", children: /* @__PURE__ */ jsxs("div", { className: "bu-pf__header", children: [
172
+ /* @__PURE__ */ jsx(
173
+ "div",
174
+ {
175
+ className: "bu-pf__tags",
176
+ ref: tagsRef,
177
+ ...makeDragHandlers(tagsRef),
178
+ children: selectedOptions.length > 0 ? selectedOptions.map((opt) => /* @__PURE__ */ jsxs("span", { className: `bu-pf__tag${!multiple ? " bu-pf__tag--single" : ""}`, children: [
179
+ /* @__PURE__ */ jsx("span", { className: "bu-pf__tag-text", children: opt.label }),
180
+ /* @__PURE__ */ jsx(
181
+ "button",
182
+ {
183
+ type: "button",
184
+ className: "bu-pf__tag-close",
185
+ onClick: () => removeTag(opt.value),
186
+ children: /* @__PURE__ */ jsx(CloseIcon, { size: 12 })
187
+ }
188
+ )
189
+ ] }, opt.value)) : /* @__PURE__ */ jsx("span", { className: "bu-pf__placeholder-inline", children: placeholder })
190
+ }
191
+ ),
192
+ /* @__PURE__ */ jsx("button", { type: "button", className: "bu-pf__close", onClick: close, children: /* @__PURE__ */ jsx("img", { src: arrowUpImg, width: 24, height: 24, alt: "" }) })
193
+ ] }) }),
194
+ createPortal(
195
+ /* @__PURE__ */ jsx("div", { ref: portalRef, className: "bu-pf__portal", style: { position: "fixed", top: dropdownPos.top, left: dropdownPos.left, width: dropdownPos.width, zIndex: 1050 }, children: /* @__PURE__ */ jsxs("div", { className: "bu-pf__dropdown", children: [
196
+ (showSearch || showSort) && /* @__PURE__ */ jsxs("div", { className: "bu-pf__toolbar", children: [
197
+ showSearch && /* @__PURE__ */ jsxs("div", { className: "bu-pf__search", children: [
198
+ /* @__PURE__ */ jsx("span", { className: "bu-pf__search-icon", children: /* @__PURE__ */ jsx("img", { src: searchImg, width: 20, height: 20, alt: "" }) }),
199
+ /* @__PURE__ */ jsx(
200
+ "input",
201
+ {
202
+ className: "bu-pf__search-input",
203
+ placeholder: searchPlaceholder,
204
+ value: search,
205
+ onChange: (e) => setSearch(e.target.value)
206
+ }
207
+ )
208
+ ] }),
209
+ showSort && /* @__PURE__ */ jsxs("div", { ref: sortBtnRef, className: "bu-pf__sort-wrap", children: [
210
+ /* @__PURE__ */ jsx(
211
+ "button",
212
+ {
213
+ type: "button",
214
+ className: `bu-pf__sort-btn${sortOrder !== "none" ? " bu-pf__sort-btn--active" : ""}`,
215
+ onClick: () => setSortDropdownOpen((v) => !v),
216
+ children: /* @__PURE__ */ jsx("img", { src: sortImg, width: 24, height: 24, alt: "" })
217
+ }
218
+ ),
219
+ sortDropdownOpen && /* @__PURE__ */ jsx("div", { className: "bu-pf__sort-dropdown", children: [
220
+ { key: "none", label: sortDefault },
221
+ { key: "asc", label: sortAsc },
222
+ { key: "desc", label: sortDesc }
223
+ ].map(({ key, label }) => /* @__PURE__ */ jsx(
224
+ "div",
225
+ {
226
+ className: `bu-pf__sort-option${sortOrder === key ? " bu-pf__sort-option--active" : ""}`,
227
+ onClick: () => selectSort(key),
228
+ children: label
229
+ },
230
+ key
231
+ )) })
232
+ ] })
233
+ ] }),
234
+ /* @__PURE__ */ jsx("div", { className: "bu-pf__list", children: hasOptions && filteredOptions.length > 0 ? filteredOptions.map((opt) => {
235
+ const checked = value.includes(opt.value);
236
+ return /* @__PURE__ */ jsxs(
237
+ "div",
238
+ {
239
+ className: `bu-pf__option${multiple ? " bu-pf__option--multiple" : ""}${checked && !multiple ? " bu-pf__option--selected" : ""}`,
240
+ onClick: () => toggleOption(opt.value),
241
+ children: [
242
+ multiple && /* @__PURE__ */ jsx(
243
+ "img",
244
+ {
245
+ className: "bu-pf__checkbox-img",
246
+ src: checked ? checkboxOkImg : checkboxNoImg,
247
+ alt: ""
248
+ }
249
+ ),
250
+ /* @__PURE__ */ jsx("span", { className: "bu-pf__option-label", children: opt.label })
251
+ ]
252
+ },
253
+ opt.value
254
+ );
255
+ }) : /* @__PURE__ */ jsxs("div", { className: "bu-pf__no-match", children: [
256
+ /* @__PURE__ */ jsx("img", { className: "bu-pf__no-match-img", src: defaultEmptyImage, alt: hasOptions ? noMatchText : emptyText }),
257
+ /* @__PURE__ */ jsx("p", { className: "bu-pf__no-match-text", children: hasOptions ? noMatchText : emptyText }),
258
+ /* @__PURE__ */ jsxs("p", { className: "bu-pf__no-match-hint", children: [
259
+ manageFieldPre,
260
+ /* @__PURE__ */ jsx("button", { type: "button", className: "bu-pf__manage-btn", onClick: onManageField, children: manageFieldLink }),
261
+ manageFieldPost
262
+ ] })
263
+ ] }) }),
264
+ addButtonText && /* @__PURE__ */ jsx("div", { className: "bu-pf__add-row", onClick: onAdd, children: addButtonText })
265
+ ] }) }),
266
+ (getPopupContainer == null ? void 0 : getPopupContainer()) ?? document.body
267
+ )
268
+ ] })
269
+ ] });
270
+ }
271
+ export {
272
+ BuProductField as default
273
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ const arrowUpImg = "data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.1868%2013.4098C17.3821%2013.6051%2017.3821%2013.9216%2017.1868%2014.1169C16.9915%2014.3121%2016.675%2014.3121%2016.4798%2014.1169L11.8362%209.47332L7.27307%2014.1139C7.07945%2014.3108%206.76292%2014.3134%206.56604%2014.1198C6.36918%2013.9262%206.36658%2013.6097%206.56018%2013.4128L11.2412%208.65252C11.5658%208.32242%2012.0972%208.32011%2012.4246%208.64748L17.1868%2013.4098Z'%20fill='%23333333'/%3e%3cpath%20d='M17.1868%2013.4098C17.3821%2013.6051%2017.3821%2013.9216%2017.1868%2014.1169C16.9915%2014.3121%2016.675%2014.3121%2016.4798%2014.1169L11.8362%209.47332L7.27307%2014.1139C7.07945%2014.3108%206.76292%2014.3134%206.56604%2014.1198C6.36918%2013.9262%206.36658%2013.6097%206.56018%2013.4128L11.2412%208.65252C11.5658%208.32242%2012.0972%208.32011%2012.4246%208.64748L17.1868%2013.4098Z'%20fill='black'%20fill-opacity='0.2'/%3e%3c/svg%3e";
3
+ module.exports = arrowUpImg;
@@ -0,0 +1,4 @@
1
+ const arrowUpImg = "data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M17.1868%2013.4098C17.3821%2013.6051%2017.3821%2013.9216%2017.1868%2014.1169C16.9915%2014.3121%2016.675%2014.3121%2016.4798%2014.1169L11.8362%209.47332L7.27307%2014.1139C7.07945%2014.3108%206.76292%2014.3134%206.56604%2014.1198C6.36918%2013.9262%206.36658%2013.6097%206.56018%2013.4128L11.2412%208.65252C11.5658%208.32242%2012.0972%208.32011%2012.4246%208.64748L17.1868%2013.4098Z'%20fill='%23333333'/%3e%3cpath%20d='M17.1868%2013.4098C17.3821%2013.6051%2017.3821%2013.9216%2017.1868%2014.1169C16.9915%2014.3121%2016.675%2014.3121%2016.4798%2014.1169L11.8362%209.47332L7.27307%2014.1139C7.07945%2014.3108%206.76292%2014.3134%206.56604%2014.1198C6.36918%2013.9262%206.36658%2013.6097%206.56018%2013.4128L11.2412%208.65252C11.5658%208.32242%2012.0972%208.32011%2012.4246%208.64748L17.1868%2013.4098Z'%20fill='black'%20fill-opacity='0.2'/%3e%3c/svg%3e";
2
+ export {
3
+ arrowUpImg as default
4
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ const checkboxNoImg = "data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M4%200.5H12C13.933%200.5%2015.5%202.067%2015.5%204V12C15.5%2013.933%2013.933%2015.5%2012%2015.5H4C2.067%2015.5%200.5%2013.933%200.5%2012V4C0.5%202.067%202.067%200.5%204%200.5Z'%20fill='white'%20fill-opacity='0.2'%20stroke='%23DBDBDB'/%3e%3c/svg%3e";
3
+ module.exports = checkboxNoImg;
@@ -0,0 +1,4 @@
1
+ const checkboxNoImg = "data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M4%200.5H12C13.933%200.5%2015.5%202.067%2015.5%204V12C15.5%2013.933%2013.933%2015.5%2012%2015.5H4C2.067%2015.5%200.5%2013.933%200.5%2012V4C0.5%202.067%202.067%200.5%204%200.5Z'%20fill='white'%20fill-opacity='0.2'%20stroke='%23DBDBDB'/%3e%3c/svg%3e";
2
+ export {
3
+ checkboxNoImg as default
4
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ const checkboxOkImg = "data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M0%204C0%201.79086%201.79086%200%204%200H12C14.2091%200%2016%201.79086%2016%204V12C16%2014.2091%2014.2091%2016%2012%2016H4C1.79086%2016%200%2014.2091%200%2012V4Z'%20fill='white'%20fill-opacity='0.2'/%3e%3cpath%20d='M4%200.5H12C13.933%200.5%2015.5%202.067%2015.5%204V12C15.5%2013.933%2013.933%2015.5%2012%2015.5H4C2.067%2015.5%200.5%2013.933%200.5%2012V4C0.5%202.067%202.067%200.5%204%200.5Z'%20stroke='%23DBDBDB'/%3e%3cpath%20d='M11.2976%204.51378C11.4%204.3608%2011.607%204.31982%2011.76%204.4222C11.913%204.52459%2011.954%204.73167%2011.8516%204.88466L7.46663%2011.437C7.30081%2011.6847%206.94289%2011.7021%206.75374%2011.4717L4.1677%208.32097C4.05092%208.17866%204.07163%207.96857%204.21392%207.85178C4.35622%207.73501%204.56632%207.75571%204.6831%207.89801L7.07905%2010.8173L11.2976%204.51378Z'%20fill='%23333333'/%3e%3c/svg%3e";
3
+ module.exports = checkboxOkImg;
@@ -0,0 +1,4 @@
1
+ const checkboxOkImg = "data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M0%204C0%201.79086%201.79086%200%204%200H12C14.2091%200%2016%201.79086%2016%204V12C16%2014.2091%2014.2091%2016%2012%2016H4C1.79086%2016%200%2014.2091%200%2012V4Z'%20fill='white'%20fill-opacity='0.2'/%3e%3cpath%20d='M4%200.5H12C13.933%200.5%2015.5%202.067%2015.5%204V12C15.5%2013.933%2013.933%2015.5%2012%2015.5H4C2.067%2015.5%200.5%2013.933%200.5%2012V4C0.5%202.067%202.067%200.5%204%200.5Z'%20stroke='%23DBDBDB'/%3e%3cpath%20d='M11.2976%204.51378C11.4%204.3608%2011.607%204.31982%2011.76%204.4222C11.913%204.52459%2011.954%204.73167%2011.8516%204.88466L7.46663%2011.437C7.30081%2011.6847%206.94289%2011.7021%206.75374%2011.4717L4.1677%208.32097C4.05092%208.17866%204.07163%207.96857%204.21392%207.85178C4.35622%207.73501%204.56632%207.75571%204.6831%207.89801L7.07905%2010.8173L11.2976%204.51378Z'%20fill='%23333333'/%3e%3c/svg%3e";
2
+ export {
3
+ checkboxOkImg as default
4
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ const defaultEmptyImage = "data:image/svg+xml,%3csvg%20width='80'%20height='80'%20viewBox='0%200%2080%2080'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3crect%20width='80'%20height='80'%20fill='url(%23pattern0_11245_89379)'/%3e%3cdefs%3e%3cpattern%20id='pattern0_11245_89379'%20patternContentUnits='objectBoundingBox'%20width='1'%20height='1'%3e%3cuse%20xlink:href='%23image0_11245_89379'%20transform='scale(0.00416667)'/%3e%3c/pattern%3e%3cimage%20id='image0_11245_89379'%20width='240'%20height='240'%20preserveAspectRatio='none'%20xlink:href='data:image/png;base64,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'/%3e%3c/defs%3e%3c/svg%3e";
3
+ module.exports = defaultEmptyImage;
@@ -0,0 +1,4 @@
1
+ const defaultEmptyImage = "data:image/svg+xml,%3csvg%20width='80'%20height='80'%20viewBox='0%200%2080%2080'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3crect%20width='80'%20height='80'%20fill='url(%23pattern0_11245_89379)'/%3e%3cdefs%3e%3cpattern%20id='pattern0_11245_89379'%20patternContentUnits='objectBoundingBox'%20width='1'%20height='1'%3e%3cuse%20xlink:href='%23image0_11245_89379'%20transform='scale(0.00416667)'/%3e%3c/pattern%3e%3cimage%20id='image0_11245_89379'%20width='240'%20height='240'%20preserveAspectRatio='none'%20xlink:href='data:image/png;base64,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'/%3e%3c/defs%3e%3c/svg%3e";
2
+ export {
3
+ defaultEmptyImage as default
4
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ const searchImg = "data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.38154%204.67725C11.9512%204.67725%2014.0343%206.76037%2014.0343%209.33002C14.0343%2010.5162%2013.5901%2011.5984%2012.8595%2012.4202L15.1454%2014.6078C15.3102%2014.7684%2015.3136%2015.0322%2015.153%2015.197C14.9924%2015.3618%2014.7286%2015.3652%2014.5638%2015.2046L12.2521%2012.9919C11.4614%2013.6126%2010.4647%2013.9828%209.38154%2013.9828C6.81188%2013.9828%204.72876%2011.8997%204.72876%209.33002C4.72876%206.76037%206.81188%204.67725%209.38154%204.67725ZM9.38154%205.51058C7.27212%205.51058%205.56209%207.2206%205.56209%209.33002C5.56209%2011.4394%207.27212%2013.1495%209.38154%2013.1495C11.491%2013.1495%2013.201%2011.4394%2013.201%209.33002C13.201%207.2206%2011.491%205.51058%209.38154%205.51058Z'%20fill='%23666666'/%3e%3c/svg%3e";
3
+ module.exports = searchImg;
@@ -0,0 +1,4 @@
1
+ const searchImg = "data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M9.38154%204.67725C11.9512%204.67725%2014.0343%206.76037%2014.0343%209.33002C14.0343%2010.5162%2013.5901%2011.5984%2012.8595%2012.4202L15.1454%2014.6078C15.3102%2014.7684%2015.3136%2015.0322%2015.153%2015.197C14.9924%2015.3618%2014.7286%2015.3652%2014.5638%2015.2046L12.2521%2012.9919C11.4614%2013.6126%2010.4647%2013.9828%209.38154%2013.9828C6.81188%2013.9828%204.72876%2011.8997%204.72876%209.33002C4.72876%206.76037%206.81188%204.67725%209.38154%204.67725ZM9.38154%205.51058C7.27212%205.51058%205.56209%207.2206%205.56209%209.33002C5.56209%2011.4394%207.27212%2013.1495%209.38154%2013.1495C11.491%2013.1495%2013.201%2011.4394%2013.201%209.33002C13.201%207.2206%2011.491%205.51058%209.38154%205.51058Z'%20fill='%23666666'/%3e%3c/svg%3e";
2
+ export {
3
+ searchImg as default
4
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ const sortImg = "data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M10.3576%2017.528C10.3576%2017.7887%2010.1444%2018%209.88136%2018C9.61835%2018%209.40513%2017.7887%209.40513%2017.528V7.58313L6.67551%2010.8295C6.50712%2011.0297%206.20676%2011.0568%206.00473%2010.8899C5.80272%2010.723%205.77545%2010.4254%205.9438%2010.2251L9.23476%206.31136C9.61494%205.85923%2010.3575%206.12565%2010.3576%206.71418V17.528ZM17.9981%2013.1613C18.1989%2013.3296%2018.2239%2013.6275%2018.0541%2013.8265L14.683%2017.7758C14.3009%2018.2233%2013.5632%2017.9556%2013.5632%2017.3694V6.47196C13.5632%206.21131%2013.7765%206.00001%2014.0395%206C14.3025%206%2014.5157%206.2113%2014.5157%206.47196V16.5101L17.327%2013.2169C17.4969%2013.0179%2017.7973%2012.993%2017.9981%2013.1613Z'%20fill='%23333333'/%3e%3cpath%20d='M10.3576%2017.528C10.3576%2017.7887%2010.1444%2018%209.88136%2018C9.61835%2018%209.40513%2017.7887%209.40513%2017.528V7.58313L6.67551%2010.8295C6.50712%2011.0297%206.20676%2011.0568%206.00473%2010.8899C5.80272%2010.723%205.77545%2010.4254%205.9438%2010.2251L9.23476%206.31136C9.61494%205.85923%2010.3575%206.12565%2010.3576%206.71418V17.528ZM17.9981%2013.1613C18.1989%2013.3296%2018.2239%2013.6275%2018.0541%2013.8265L14.683%2017.7758C14.3009%2018.2233%2013.5632%2017.9556%2013.5632%2017.3694V6.47196C13.5632%206.21131%2013.7765%206.00001%2014.0395%206C14.3025%206%2014.5157%206.2113%2014.5157%206.47196V16.5101L17.327%2013.2169C17.4969%2013.0179%2017.7973%2012.993%2017.9981%2013.1613Z'%20fill='black'%20fill-opacity='0.2'/%3e%3c/svg%3e";
3
+ module.exports = sortImg;