@1money/component-ui 0.0.65 → 0.0.67-alpha.1

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 (61) hide show
  1. package/es/business/Filter/DateRange/DateRange.d.ts +2 -0
  2. package/es/business/Filter/DateRange/DateRange.js +393 -0
  3. package/es/business/Filter/DateRange/index.d.ts +2 -0
  4. package/es/business/Filter/DateRange/index.js +3 -0
  5. package/es/business/Filter/DateRange/interface.d.ts +68 -0
  6. package/es/business/Filter/DateRange/interface.js +9 -0
  7. package/es/business/Filter/DateRange/style/DateRange.css +85 -0
  8. package/es/business/Filter/DateRange/style/css.js +2 -0
  9. package/es/business/Filter/DateRange/style/index.d.ts +1 -0
  10. package/es/business/Filter/DateRange/style/index.js +2 -0
  11. package/es/business/Filter/Dropdown/Dropdown.d.ts +2 -0
  12. package/es/business/Filter/Dropdown/Dropdown.js +340 -0
  13. package/es/business/Filter/Dropdown/index.d.ts +2 -0
  14. package/es/business/Filter/Dropdown/index.js +3 -0
  15. package/es/business/Filter/Dropdown/interface.d.ts +136 -0
  16. package/es/business/Filter/Dropdown/interface.js +2 -0
  17. package/es/business/Filter/Dropdown/style/Dropdown.css +94 -0
  18. package/es/business/Filter/Dropdown/style/css.js +2 -0
  19. package/es/business/Filter/Dropdown/style/index.d.ts +1 -0
  20. package/es/business/Filter/Dropdown/style/index.js +2 -0
  21. package/es/business/Filter/index.d.ts +2 -0
  22. package/es/business/Filter/index.js +3 -0
  23. package/es/business/Select/Network/interface.d.ts +27 -22
  24. package/es/business/Select/PaymentMethod/interface.d.ts +6 -2
  25. package/es/business/index.d.ts +1 -0
  26. package/es/business/index.js +2 -1
  27. package/es/components/Select/Select.js +3 -2
  28. package/es/components/Select/interface.d.ts +2 -0
  29. package/es/index.css +1 -1
  30. package/lib/business/Filter/DateRange/DateRange.d.ts +2 -0
  31. package/lib/business/Filter/DateRange/DateRange.js +400 -0
  32. package/lib/business/Filter/DateRange/index.d.ts +2 -0
  33. package/lib/business/Filter/DateRange/index.js +28 -0
  34. package/lib/business/Filter/DateRange/interface.d.ts +68 -0
  35. package/lib/business/Filter/DateRange/interface.js +15 -0
  36. package/lib/business/Filter/DateRange/style/DateRange.css +85 -0
  37. package/lib/business/Filter/DateRange/style/css.js +4 -0
  38. package/lib/business/Filter/DateRange/style/index.d.ts +1 -0
  39. package/lib/business/Filter/DateRange/style/index.js +4 -0
  40. package/lib/business/Filter/Dropdown/Dropdown.d.ts +2 -0
  41. package/lib/business/Filter/Dropdown/Dropdown.js +347 -0
  42. package/lib/business/Filter/Dropdown/index.d.ts +2 -0
  43. package/lib/business/Filter/Dropdown/index.js +28 -0
  44. package/lib/business/Filter/Dropdown/interface.d.ts +136 -0
  45. package/lib/business/Filter/Dropdown/interface.js +6 -0
  46. package/lib/business/Filter/Dropdown/style/Dropdown.css +94 -0
  47. package/lib/business/Filter/Dropdown/style/css.js +4 -0
  48. package/lib/business/Filter/Dropdown/style/index.d.ts +1 -0
  49. package/lib/business/Filter/Dropdown/style/index.js +4 -0
  50. package/lib/business/Filter/index.d.ts +2 -0
  51. package/lib/business/Filter/index.js +28 -0
  52. package/lib/business/Select/Network/interface.d.ts +27 -22
  53. package/lib/business/Select/PaymentMethod/interface.d.ts +6 -2
  54. package/lib/business/index.d.ts +1 -0
  55. package/lib/business/index.js +12 -1
  56. package/lib/components/Select/Select.js +3 -2
  57. package/lib/components/Select/interface.d.ts +2 -0
  58. package/lib/index.css +1 -1
  59. package/package.json +16 -1
  60. package/scripts/mcp-server/examples.generated.json +6 -0
  61. package/scripts/mcp-server/index.generated.json +12 -0
@@ -0,0 +1,340 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ var __rest = this && this.__rest || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
6
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
7
+ }
8
+ return t;
9
+ };
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ import { memo, useCallback, useImperativeHandle, useMemo, useState } from 'react';
12
+ import { Button } from '../../../components/Button';
13
+ import { Checkbox } from '../../../components/Checkbox';
14
+ import { Empty } from '../../../components/Empty';
15
+ import { Flex } from '../../../components/Flex';
16
+ import { Select } from '../../../components/Select';
17
+ import { Tag } from '../../../components/Tag';
18
+ import { TypographyBody, TypographyLabel } from '../../../components/Typography';
19
+ import { joinCls } from '../../../utils/classnames';
20
+ var WRAP_CLS = 'om-dropdown-filter';
21
+ // The panel is portaled to <body>, so panel-scoped overrides are keyed off this
22
+ // class (passed as `panelClassName`) rather than the trigger root.
23
+ var PANEL_CLS = "".concat(WRAP_CLS, "-panel");
24
+ var GROUP_LABEL_CLS = "".concat(WRAP_CLS, "__group-label");
25
+ var ICON_CLS = "".concat(WRAP_CLS, "-icon");
26
+ var ICON_SIZE = 24;
27
+ var RESET_LABEL = 'Reset';
28
+ var APPLY_LABEL = 'Apply';
29
+ var DEFAULT_PLACEHOLDER = 'Select';
30
+ var DEFAULT_SEARCH_PLACEHOLDER = 'Search';
31
+ var DEFAULT_SEARCH_KEYS = ['label', 'description'];
32
+ var DEFAULT_EMPTY = _jsx(Empty, {
33
+ icon: 'search',
34
+ title: 'No results'
35
+ });
36
+ var MORE_SUFFIX = function MORE_SUFFIX(count) {
37
+ return " + ".concat(count, " more");
38
+ };
39
+ var FULL_WIDTH_STYLE = {
40
+ flex: 1
41
+ };
42
+ var toOption = function toOption(raw) {
43
+ return {
44
+ label: raw.label,
45
+ value: raw.value,
46
+ description: raw.description,
47
+ iconUrl: raw.iconUrl,
48
+ tag: raw.tag,
49
+ // Restrict matching to the configured keys via `searchText`; see makeFilter.
50
+ searchText: [raw.label, raw.description].filter(Boolean).join(' ')
51
+ };
52
+ };
53
+ // Bucket consecutive options by `group`, preserving input order. Ungrouped runs
54
+ // stay flat (no heading); grouped runs become a SelectOptionGroup with a label.
55
+ var toGroupedData = function toGroupedData(options) {
56
+ var data = [];
57
+ var bucket = null;
58
+ var flush = function flush() {
59
+ if (!bucket) return;
60
+ if (bucket.group) {
61
+ data.push({
62
+ key: bucket.group,
63
+ label: bucket.group,
64
+ options: bucket.options
65
+ });
66
+ } else {
67
+ bucket.options.forEach(function (option) {
68
+ return data.push(option);
69
+ });
70
+ }
71
+ bucket = null;
72
+ };
73
+ options.forEach(function (raw) {
74
+ var group = raw.group;
75
+ if (!bucket || bucket.group !== group) {
76
+ flush();
77
+ bucket = {
78
+ group: group,
79
+ options: []
80
+ };
81
+ }
82
+ bucket.options.push(toOption(raw));
83
+ });
84
+ flush();
85
+ return data;
86
+ };
87
+ var getInitialValue = function getInitialValue(options, allLabel, defaultSelectAll) {
88
+ // With an "All" row, "all selected" is represented by an empty array.
89
+ if (allLabel && defaultSelectAll) return [];
90
+ return options.filter(function (option) {
91
+ return option.defaultValue;
92
+ }).map(function (option) {
93
+ return option.value;
94
+ });
95
+ };
96
+ var DropdownFilterBase = function DropdownFilterBase(_a) {
97
+ var ref = _a.ref,
98
+ className = _a.className,
99
+ _a$size = _a.size,
100
+ size = _a$size === void 0 ? 'small' : _a$size,
101
+ label = _a.label,
102
+ _a$placeholder = _a.placeholder,
103
+ placeholder = _a$placeholder === void 0 ? DEFAULT_PLACEHOLDER : _a$placeholder,
104
+ options = _a.options,
105
+ allLabel = _a.allLabel,
106
+ _a$defaultSelectAll = _a.defaultSelectAll,
107
+ defaultSelectAll = _a$defaultSelectAll === void 0 ? false : _a$defaultSelectAll,
108
+ _a$search = _a.search,
109
+ search = _a$search === void 0 ? false : _a$search,
110
+ _a$searchPlaceholder = _a.searchPlaceholder,
111
+ searchPlaceholder = _a$searchPlaceholder === void 0 ? DEFAULT_SEARCH_PLACEHOLDER : _a$searchPlaceholder,
112
+ _a$searchKeys = _a.searchKeys,
113
+ searchKeys = _a$searchKeys === void 0 ? DEFAULT_SEARCH_KEYS : _a$searchKeys,
114
+ _a$searchEmpty = _a.searchEmpty,
115
+ searchEmpty = _a$searchEmpty === void 0 ? DEFAULT_EMPTY : _a$searchEmpty,
116
+ onApply = _a.onApply,
117
+ onReset = _a.onReset,
118
+ rest = __rest(_a, ["ref", "className", "size", "label", "placeholder", "options", "allLabel", "defaultSelectAll", "search", "searchPlaceholder", "searchKeys", "searchEmpty", "onApply", "onReset"]);
119
+ var initialValue = useMemo(function () {
120
+ return getInitialValue(options, allLabel, defaultSelectAll);
121
+ }, [options, allLabel, defaultSelectAll]);
122
+ var _useState = useState(false),
123
+ _useState2 = _slicedToArray(_useState, 2),
124
+ open = _useState2[0],
125
+ setOpen = _useState2[1];
126
+ var _useState3 = useState(''),
127
+ _useState4 = _slicedToArray(_useState3, 2),
128
+ keyword = _useState4[0],
129
+ setKeyword = _useState4[1];
130
+ // `temp` is the in-panel draft; `committed` is the last Applied selection.
131
+ // Only Apply promotes `temp` → `committed` and notifies the parent.
132
+ var _useState5 = useState(initialValue),
133
+ _useState6 = _slicedToArray(_useState5, 2),
134
+ temp = _useState6[0],
135
+ setTemp = _useState6[1];
136
+ var _useState7 = useState(initialValue),
137
+ _useState8 = _slicedToArray(_useState7, 2),
138
+ committed = _useState8[0],
139
+ setCommitted = _useState8[1];
140
+ var groupedData = useMemo(function () {
141
+ return toGroupedData(options);
142
+ }, [options]);
143
+ var allValues = useMemo(function () {
144
+ return options.map(function (option) {
145
+ return option.value;
146
+ });
147
+ }, [options]);
148
+ var optionByValue = useMemo(function () {
149
+ var map = new Map();
150
+ options.forEach(function (option) {
151
+ return map.set(option.value, option);
152
+ });
153
+ return map;
154
+ }, [options]);
155
+ // The "All" row is checked exactly when nothing specific is selected.
156
+ var allChecked = temp.length === 0;
157
+ var filterOption = useCallback(function (searchValue, option) {
158
+ var term = searchValue.trim().toLowerCase();
159
+ if (!term) return true;
160
+ var mapped = option;
161
+ return searchKeys.some(function (key) {
162
+ var field = key === 'label' ? mapped.label : mapped.description;
163
+ return typeof field === 'string' && field.toLowerCase().includes(term);
164
+ });
165
+ }, [searchKeys]);
166
+ useImperativeHandle(ref, function () {
167
+ return {
168
+ clear: function clear() {
169
+ setTemp([]);
170
+ setCommitted([]);
171
+ },
172
+ reset: function reset() {
173
+ setTemp(initialValue);
174
+ setCommitted(initialValue);
175
+ onReset === null || onReset === void 0 ? void 0 : onReset(initialValue);
176
+ }
177
+ };
178
+ }, [initialValue, onReset]);
179
+ var handleSelectChange = useCallback(function (next) {
180
+ var nextValues = (Array.isArray(next) ? next : []).map(String);
181
+ // With an "All" row, selecting every concrete option collapses to "all"
182
+ // ([]), matching the backend convention that empty == no filter. Without
183
+ // an "All" row (e.g. recipients), a full selection stays explicit so the
184
+ // trigger still summarizes it ("Name + N more").
185
+ var collapse = !!allLabel && nextValues.length === allValues.length;
186
+ setTemp(collapse ? [] : nextValues);
187
+ }, [allLabel, allValues]);
188
+ var handleAllClick = useCallback(function () {
189
+ // The "All" row is exclusive: turning it on clears specific picks.
190
+ setTemp([]);
191
+ }, []);
192
+ var handleApply = useCallback(function () {
193
+ setCommitted(temp);
194
+ onApply(temp);
195
+ setOpen(false);
196
+ }, [temp, onApply]);
197
+ var handleReset = useCallback(function () {
198
+ setTemp(initialValue);
199
+ setCommitted(initialValue);
200
+ onReset === null || onReset === void 0 ? void 0 : onReset(initialValue);
201
+ }, [initialValue, onReset]);
202
+ var handleOpenChange = useCallback(function (nextOpen) {
203
+ setOpen(nextOpen);
204
+ if (nextOpen) return;
205
+ // Closing without Apply discards the draft.
206
+ setTemp(committed);
207
+ if (search) setKeyword('');
208
+ }, [committed, search]);
209
+ var renderRow = useCallback(function (option, checked) {
210
+ var text = typeof option.label === 'string' ? option.label : '';
211
+ return _jsxs(Flex, {
212
+ align: 'center',
213
+ justify: 'space-between',
214
+ gap: 8,
215
+ className: "".concat(WRAP_CLS, "__row"),
216
+ children: [_jsxs(Flex, {
217
+ align: 'center',
218
+ gap: 8,
219
+ className: "".concat(WRAP_CLS, "__row-main"),
220
+ children: [option.iconUrl && _jsx("img", {
221
+ src: option.iconUrl,
222
+ alt: text,
223
+ width: ICON_SIZE,
224
+ height: ICON_SIZE,
225
+ className: ICON_CLS
226
+ }), _jsxs(Flex, {
227
+ vertical: true,
228
+ gap: 0,
229
+ align: 'start',
230
+ className: "".concat(WRAP_CLS, "__row-text"),
231
+ children: [_jsxs(Flex, {
232
+ align: 'center',
233
+ gap: 8,
234
+ className: "".concat(WRAP_CLS, "__row-label"),
235
+ children: [_jsx(TypographyLabel, {
236
+ size: 'md',
237
+ children: option.label
238
+ }), option.tag && _jsx(Tag, {
239
+ label: option.tag,
240
+ size: 'small',
241
+ color: 'recommended'
242
+ })]
243
+ }), option.description && _jsx(TypographyBody, {
244
+ size: 'sm',
245
+ color: 'default-tertiary',
246
+ children: option.description
247
+ })]
248
+ })]
249
+ }), _jsx(Checkbox, {
250
+ checked: checked,
251
+ readOnly: true,
252
+ className: "".concat(WRAP_CLS, "__row-check")
253
+ })]
254
+ });
255
+ }, []);
256
+ // The trigger reflects the COMMITTED selection (not the in-panel draft).
257
+ // `renderValue` short-circuits Select's own placeholder handling, so the
258
+ // empty state must return the placeholder explicitly.
259
+ var renderValue = useCallback(function () {
260
+ if (allChecked) {
261
+ var text = allLabel !== null && allLabel !== void 0 ? allLabel : placeholder;
262
+ return _jsx(TypographyBody, {
263
+ size: 'md',
264
+ color: allLabel ? 'default' : 'default-tertiary',
265
+ className: "".concat(WRAP_CLS, "__value"),
266
+ children: text
267
+ });
268
+ }
269
+ var first = optionByValue.get(committed[0]);
270
+ var firstLabel = first ? first.label : committed[0];
271
+ var extra = committed.length - 1;
272
+ return _jsxs(TypographyBody, {
273
+ size: 'md',
274
+ className: "".concat(WRAP_CLS, "__value"),
275
+ children: [firstLabel, extra > 0 && _jsx("span", {
276
+ className: "".concat(WRAP_CLS, "__value-more"),
277
+ children: MORE_SUFFIX(extra)
278
+ })]
279
+ });
280
+ }, [allChecked, allLabel, placeholder, committed, optionByValue]);
281
+ return _jsx(Select, Object.assign({}, rest, {
282
+ multiple: true,
283
+ size: size,
284
+ label: label,
285
+ placeholder: placeholder,
286
+ className: joinCls(WRAP_CLS, className),
287
+ panelClassName: PANEL_CLS,
288
+ groupLabelClassName: GROUP_LABEL_CLS,
289
+ value: temp,
290
+ open: open,
291
+ onOpenChange: handleOpenChange,
292
+ onChange: handleSelectChange,
293
+ searchable: search,
294
+ searchPlaceholder: searchPlaceholder,
295
+ searchValue: keyword,
296
+ onSearchChange: setKeyword,
297
+ filterOption: filterOption,
298
+ options: groupedData,
299
+ panelHeader: allLabel ? _jsxs("button", {
300
+ type: 'button',
301
+ className: joinCls("".concat(WRAP_CLS, "__all"), allChecked && "".concat(WRAP_CLS, "__all--checked")),
302
+ onClick: handleAllClick,
303
+ children: [_jsx(TypographyLabel, {
304
+ size: 'md',
305
+ children: allLabel
306
+ }), _jsx(Checkbox, {
307
+ checked: allChecked,
308
+ readOnly: true,
309
+ className: "".concat(WRAP_CLS, "__row-check")
310
+ })]
311
+ }) : undefined,
312
+ emptyContent: searchEmpty,
313
+ renderValue: renderValue,
314
+ renderOption: function renderOption(option, meta) {
315
+ return renderRow(option, meta.selected);
316
+ },
317
+ panelFooter: _jsxs(Flex, {
318
+ gap: 8,
319
+ className: "".concat(WRAP_CLS, "__footer"),
320
+ children: [_jsx(Button, {
321
+ color: 'grey',
322
+ size: 'small',
323
+ style: FULL_WIDTH_STYLE,
324
+ onClick: handleReset,
325
+ children: RESET_LABEL
326
+ }), _jsx(Button, {
327
+ color: 'primary',
328
+ size: 'small',
329
+ style: FULL_WIDTH_STYLE,
330
+ // With an "All" row, an empty draft means "all" (valid). Without
331
+ // one, an empty draft means "nothing picked" — block Apply.
332
+ disabled: !allLabel && temp.length === 0,
333
+ onClick: handleApply,
334
+ children: APPLY_LABEL
335
+ })]
336
+ })
337
+ }));
338
+ };
339
+ export var DropdownFilter = /*#__PURE__*/memo(DropdownFilterBase);
340
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbHRlci9Ecm9wZG93bi9Ecm9wZG93bi5qcyIsImJ1c2luZXNzL0ZpbHRlci9zcmMvYnVzaW5lc3MvRmlsdGVyL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCJdLCJuYW1lcyI6WyJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJtZW1vIiwidXNlQ2FsbGJhY2siLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlTWVtbyIsInVzZVN0YXRlIiwiQnV0dG9uIiwiQ2hlY2tib3giLCJFbXB0eSIsIkZsZXgiLCJTZWxlY3QiLCJUYWciLCJUeXBvZ3JhcGh5Qm9keSIsIlR5cG9ncmFwaHlMYWJlbCIsImpvaW5DbHMiLCJXUkFQX0NMUyIsIlBBTkVMX0NMUyIsImNvbmNhdCIsIkdST1VQX0xBQkVMX0NMUyIsIklDT05fQ0xTIiwiSUNPTl9TSVpFIiwiUkVTRVRfTEFCRUwiLCJBUFBMWV9MQUJFTCIsIkRFRkFVTFRfUExBQ0VIT0xERVIiLCJERUZBVUxUX1NFQVJDSF9QTEFDRUhPTERFUiIsIkRFRkFVTFRfU0VBUkNIX0tFWVMiLCJERUZBVUxUX0VNUFRZIiwiaWNvbiIsInRpdGxlIiwiTU9SRV9TVUZGSVgiLCJjb3VudCIsIkZVTExfV0lEVEhfU1RZTEUiLCJmbGV4IiwidG9PcHRpb24iLCJyYXciLCJsYWJlbCIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJpY29uVXJsIiwidGFnIiwic2VhcmNoVGV4dCIsImZpbHRlciIsIkJvb2xlYW4iLCJqb2luIiwidG9Hcm91cGVkRGF0YSIsIm9wdGlvbnMiLCJkYXRhIiwiYnVja2V0IiwiZmx1c2giLCJncm91cCIsInB1c2giLCJrZXkiLCJmb3JFYWNoIiwib3B0aW9uIiwiZ2V0SW5pdGlhbFZhbHVlIiwiYWxsTGFiZWwiLCJkZWZhdWx0U2VsZWN0QWxsIiwiZGVmYXVsdFZhbHVlIiwibWFwIiwiRHJvcGRvd25GaWx0ZXJCYXNlIiwiX2EiLCJyZWYiLCJjbGFzc05hbWUiLCJfYSRzaXplIiwic2l6ZSIsIl9hJHBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiLCJfYSRkZWZhdWx0U2VsZWN0QWxsIiwiX2Ekc2VhcmNoIiwic2VhcmNoIiwiX2Ekc2VhcmNoUGxhY2Vob2xkZXIiLCJzZWFyY2hQbGFjZWhvbGRlciIsIl9hJHNlYXJjaEtleXMiLCJzZWFyY2hLZXlzIiwiX2Ekc2VhcmNoRW1wdHkiLCJzZWFyY2hFbXB0eSIsIm9uQXBwbHkiLCJvblJlc2V0IiwicmVzdCIsImluaXRpYWxWYWx1ZSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsIm9wZW4iLCJzZXRPcGVuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJrZXl3b3JkIiwic2V0S2V5d29yZCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwidGVtcCIsInNldFRlbXAiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImNvbW1pdHRlZCIsInNldENvbW1pdHRlZCIsImdyb3VwZWREYXRhIiwiYWxsVmFsdWVzIiwib3B0aW9uQnlWYWx1ZSIsIk1hcCIsInNldCIsImFsbENoZWNrZWQiLCJmaWx0ZXJPcHRpb24iLCJzZWFyY2hWYWx1ZSIsInRlcm0iLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJtYXBwZWQiLCJzb21lIiwiZmllbGQiLCJpbmNsdWRlcyIsImNsZWFyIiwicmVzZXQiLCJoYW5kbGVTZWxlY3RDaGFuZ2UiLCJuZXh0IiwibmV4dFZhbHVlcyIsIkFycmF5IiwiaXNBcnJheSIsIlN0cmluZyIsImNvbGxhcHNlIiwiaGFuZGxlQWxsQ2xpY2siLCJoYW5kbGVBcHBseSIsImhhbmRsZVJlc2V0IiwiaGFuZGxlT3BlbkNoYW5nZSIsIm5leHRPcGVuIiwicmVuZGVyUm93IiwiY2hlY2tlZCIsInRleHQiLCJhbGlnbiIsImp1c3RpZnkiLCJnYXAiLCJjaGlsZHJlbiIsInNyYyIsImFsdCIsIndpZHRoIiwiaGVpZ2h0IiwidmVydGljYWwiLCJjb2xvciIsInJlYWRPbmx5IiwicmVuZGVyVmFsdWUiLCJmaXJzdCIsImdldCIsImZpcnN0TGFiZWwiLCJleHRyYSIsImFzc2lnbiIsIm11bHRpcGxlIiwicGFuZWxDbGFzc05hbWUiLCJncm91cExhYmVsQ2xhc3NOYW1lIiwib25PcGVuQ2hhbmdlIiwib25DaGFuZ2UiLCJzZWFyY2hhYmxlIiwib25TZWFyY2hDaGFuZ2UiLCJwYW5lbEhlYWRlciIsInR5cGUiLCJvbkNsaWNrIiwidW5kZWZpbmVkIiwiZW1wdHlDb250ZW50IiwicmVuZGVyT3B0aW9uIiwibWV0YSIsInNlbGVjdGVkIiwicGFuZWxGb290ZXIiLCJzdHlsZSIsImRpc2FibGVkIiwiRHJvcGRvd25GaWx0ZXIiXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJQSxNQUFNLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsTUFBTSxJQUFLLFVBQVVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQ2xELElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUlDLENBQUMsSUFBSUgsQ0FBQyxFQUFFLElBQUlJLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUMsSUFBSUYsQ0FBQyxDQUFDTyxPQUFPLENBQUNMLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0VELENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLEdBQUdILENBQUMsQ0FBQ0csQ0FBQyxDQUFDO0VBQ2YsSUFBSUgsQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPSSxNQUFNLENBQUNLLHFCQUFxQixLQUFLLFVBQVUsRUFDL0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFUCxDQUFDLEdBQUdDLE1BQU0sQ0FBQ0sscUJBQXFCLENBQUNULENBQUMsQ0FBQyxF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Q3RJLElBQUEsQ0FBQ1EsTUFBTSxFQUFBO1FBQUNvSSxLQUFLLEVBQUMsTUFBTTtRQUFDMUUsSUFBSSxFQUFDLE9BQU87UUFBQ2tHLEtBQUssRUFBRW5JLGdCQUFnQjtRQUFFNEgsT0FBTyxFQUFFaEMsV0FBVztRQUFBUyxRQUFBLEVBQzVFL0c7TUFBVyxDQUFBLENBQ0wsRUFDVHZCLElBQUEsQ0FBQ1EsTUFBTSxFQUFBO1FBQ0xvSSxLQUFLLEVBQUMsU0FBUztRQUNmMUUsSUFBSSxFQUFDLE9BQU87UUFDWmtHLEtBQUssRUFBRW5JLGdCQUFnQjtRQUN2QjtRQUNBO1FBQ0FvSSxRQUFRLEVBQUUsQ0FBQzVHLFFBQVEsSUFBSW9DLElBQUksQ0FBQ2hHLE1BQU0sS0FBSyxDQUFDO1FBQ3hDZ0ssT0FBTyxFQUFFakMsV0FBVztRQUFBVSxRQUFBLEVBRW5COUc7TUFBVyxDQUFBLENBQ0w7SUFBQSxDQUFBO0VBQ0osQ0FBQSxDQUFBLENBRVQ7QUFFTixDQUFDO0FBRUQsT0FBTyxJQUFNOEksY0FBYyxnQkFBR25LLElBQUksQ0FBQzBELGtCQUFrQixDQUFDIiwiZmlsZSI6ImJ1c2luZXNzL0ZpbHRlci9Ecm9wZG93bi9Ecm9wZG93bi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBtZW1vLCB1c2VDYWxsYmFjaywgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL0J1dHRvbic7XG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvQ2hlY2tib3gnO1xuaW1wb3J0IHsgRW1wdHkgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL0VtcHR5JztcbmltcG9ydCB7IEZsZXggfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL0ZsZXgnO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9TZWxlY3QnO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9UYWcnO1xuaW1wb3J0IHsgVHlwb2dyYXBoeUJvZHksIFR5cG9ncmFwaHlMYWJlbCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvVHlwb2dyYXBoeSc7XG5pbXBvcnQgeyBqb2luQ2xzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5jb25zdCBXUkFQX0NMUyA9ICdvbS1kcm9wZG93bi1maWx0ZXInO1xuLy8gVGhlIHBhbmVsIGlzIHBvcnRhbGVkIHRvIDxib2R5Piwgc28gcGFuZWwtc2NvcGVkIG92ZXJyaWRlcyBhcmUga2V5ZWQgb2ZmIHRoaXNcbi8vIGNsYXNzIChwYXNzZWQgYXMgYHBhbmVsQ2xhc3NOYW1lYCkgcmF0aGVyIHRoYW4gdGhlIHRyaWdnZXIgcm9vdC5cbmNvbnN0IFBBTkVMX0NMUyA9IGAke1dSQVBfQ0xTfS1wYW5lbGA7XG5jb25zdCBHUk9VUF9MQUJFTF9DTFMgPSBgJHtXUkFQX0NMU31fX2dyb3VwLWxhYmVsYDtcbmNvbnN0IElDT05fQ0xTID0gYCR7V1JBUF9DTFN9LWljb25gO1xuY29uc3QgSUNPTl9TSVpFID0gMjQ7XG5jb25zdCBSRVNFVF9MQUJFTCA9ICdSZXNldCc7XG5jb25zdCBBUFBMWV9MQUJFTCA9ICdBcHBseSc7XG5jb25zdCBERUZBVUxUX1BMQUNFSE9MREVSID0gJ1NlbGVjdCc7XG5jb25zdCBERUZBVUxUX1NFQVJDSF9QTEFDRUhPTERFUiA9ICdTZWFyY2gnO1xuY29uc3QgREVGQVVMVF9TRUFSQ0hfS0VZUyA9IFsnbGFiZWwnLCAnZGVzY3JpcHRpb24nXTtcbmNvbnN0IERFRkFVTFRfRU1QVFkgPSBfanN4KEVtcHR5LCB7IGljb246ICdzZWFyY2gnLCB0aXRsZTogJ05vIHJlc3VsdHMnIH0pO1xuY29uc3QgTU9SRV9TVUZGSVggPSAoY291bnQpID0+IGAgKyAke2NvdW50fSBtb3JlYDtcbmNvbnN0IEZVTExfV0lEVEhfU1RZTEUgPSB7IGZsZXg6IDEgfTtcbmNvbnN0IHRvT3B0aW9uID0gKHJhdykgPT4gKHtcbiAgICBsYWJlbDogcmF3LmxhYmVsLFxuICAgIHZhbHVlOiByYXcudmFsdWUsXG4gICAgZGVzY3JpcHRpb246IHJhdy5kZXNjcmlwdGlvbixcbiAgICBpY29uVXJsOiByYXcuaWNvblVybCxcbiAgICB0YWc6IHJhdy50YWcsXG4gICAgLy8gUmVzdHJpY3QgbWF0Y2hpbmcgdG8gdGhlIGNvbmZpZ3VyZWQga2V5cyB2aWEgYHNlYXJjaFRleHRgOyBzZWUgbWFrZUZpbHRlci5cbiAgICBzZWFyY2hUZXh0OiBbcmF3LmxhYmVsLCByYXcuZGVzY3JpcHRpb25dLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyksXG59KTtcbi8vIEJ1Y2tldCBjb25zZWN1dGl2ZSBvcHRpb25zIGJ5IGBncm91cGAsIHByZXNlcnZpbmcgaW5wdXQgb3JkZXIuIFVuZ3JvdXBlZCBydW5zXG4vLyBzdGF5IGZsYXQgKG5vIGhlYWRpbmcpOyBncm91cGVkIHJ1bnMgYmVjb21lIGEgU2VsZWN0T3B0aW9uR3JvdXAgd2l0aCBhIGxhYmVsLlxuY29uc3QgdG9Hcm91cGVkRGF0YSA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IFtdO1xuICAgIGxldCBidWNrZXQgPSBudWxsO1xuICAgIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWJ1Y2tldClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGJ1Y2tldC5ncm91cCkge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsga2V5OiBidWNrZXQuZ3JvdXAsIGxhYmVsOiBidWNrZXQuZ3JvdXAsIG9wdGlvbnM6IGJ1Y2tldC5vcHRpb25zIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnVja2V0Lm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiBkYXRhLnB1c2gob3B0aW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnVja2V0ID0gbnVsbDtcbiAgICB9O1xuICAgIG9wdGlvbnMuZm9yRWFjaCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gcmF3Lmdyb3VwO1xuICAgICAgICBpZiAoIWJ1Y2tldCB8fCBidWNrZXQuZ3JvdXAgIT09IGdyb3VwKSB7XG4gICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgYnVja2V0ID0geyBncm91cCwgb3B0aW9uczogW10gfTtcbiAgICAgICAgfVxuICAgICAgICBidWNrZXQub3B0aW9ucy5wdXNoKHRvT3B0aW9uKHJhdykpO1xuICAgIH0pO1xuICAgIGZsdXNoKCk7XG4gICAgcmV0dXJuIGRhdGE7XG59O1xuY29uc3QgZ2V0SW5pdGlhbFZhbHVlID0gKG9wdGlvbnMsIGFsbExhYmVsLCBkZWZhdWx0U2VsZWN0QWxsKSA9PiB7XG4gICAgLy8gV2l0aCBhbiBcIkFsbFwiIHJvdywgXCJhbGwgc2VsZWN0ZWRcIiBpcyByZXByZXNlbnRlZCBieSBhbiBlbXB0eSBhcnJheS5cbiAgICBpZiAoYWxsTGFiZWwgJiYgZGVmYXVsdFNlbGVjdEFsbClcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uZGVmYXVsdFZhbHVlKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbn07XG5jb25zdCBEcm9wZG93bkZpbHRlckJhc2UgPSAoX2EpID0+IHtcbiAgICB2YXIgeyByZWYsIGNsYXNzTmFtZSwgc2l6ZSA9ICdzbWFsbCcsIGxhYmVsLCBwbGFjZWhvbGRlciA9IERFRkFVTFRfUExBQ0VIT0xERVIsIG9wdGlvbnMsIGFsbExhYmVsLCBkZWZhdWx0U2VsZWN0QWxsID0gZmFsc2UsIHNlYXJjaCA9IGZhbHNlLCBzZWFyY2hQbGFjZWhvbGRlciA9IERFRkFVTFRfU0VBUkNIX1BMQUNFSE9MREVSLCBzZWFyY2hLZXlzID0gREVGQVVMVF9TRUFSQ0hfS0VZUywgc2VhcmNoRW1wdHkgPSBERUZBVUxUX0VNUFRZLCBvbkFwcGx5LCBvblJlc2V0IH0gPSBfYSwgcmVzdCA9IF9fcmVzdChfYSwgW1wicmVmXCIsIFwiY2xhc3NOYW1lXCIsIFwic2l6ZVwiLCBcImxhYmVsXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJvcHRpb25zXCIsIFwiYWxsTGFiZWxcIiwgXCJkZWZhdWx0U2VsZWN0QWxsXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUGxhY2Vob2xkZXJcIiwgXCJzZWFyY2hLZXlzXCIsIFwic2VhcmNoRW1wdHlcIiwgXCJvbkFwcGx5XCIsIFwib25SZXNldFwiXSk7XG4gICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdXNlTWVtbygoKSA9PiBnZXRJbml0aWFsVmFsdWUob3B0aW9ucywgYWxsTGFiZWwsIGRlZmF1bHRTZWxlY3RBbGwpLCBbb3B0aW9ucywgYWxsTGFiZWwsIGRlZmF1bHRTZWxlY3RBbGxdKTtcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2tleXdvcmQsIHNldEtleXdvcmRdID0gdXNlU3RhdGUoJycpO1xuICAgIC8vIGB0ZW1wYCBpcyB0aGUgaW4tcGFuZWwgZHJhZnQ7IGBjb21taXR0ZWRgIGlzIHRoZSBsYXN0IEFwcGxpZWQgc2VsZWN0aW9uLlxuICAgIC8vIE9ubHkgQXBwbHkgcHJvbW90ZXMgYHRlbXBgIOKGkiBgY29tbWl0dGVkYCBhbmQgbm90aWZpZXMgdGhlIHBhcmVudC5cbiAgICBjb25zdCBbdGVtcCwgc2V0VGVtcF0gPSB1c2VTdGF0ZShpbml0aWFsVmFsdWUpO1xuICAgIGNvbnN0IFtjb21taXR0ZWQsIHNldENvbW1pdHRlZF0gPSB1c2VTdGF0ZShpbml0aWFsVmFsdWUpO1xuICAgIGNvbnN0IGdyb3VwZWREYXRhID0gdXNlTWVtbygoKSA9PiB0b0dyb3VwZWREYXRhKG9wdGlvbnMpLCBbb3B0aW9uc10pO1xuICAgIGNvbnN0IGFsbFZhbHVlcyA9IHVzZU1lbW8oKCkgPT4gb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKSwgW29wdGlvbnNdKTtcbiAgICBjb25zdCBvcHRpb25CeVZhbHVlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IG1hcC5zZXQob3B0aW9uLnZhbHVlLCBvcHRpb24pKTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCBbb3B0aW9uc10pO1xuICAgIC8vIFRoZSBcIkFsbFwiIHJvdyBpcyBjaGVja2VkIGV4YWN0bHkgd2hlbiBub3RoaW5nIHNwZWNpZmljIGlzIHNlbGVjdGVkLlxuICAgIGNvbnN0IGFsbENoZWNrZWQgPSB0ZW1wLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBmaWx0ZXJPcHRpb24gPSB1c2VDYWxsYmFjaygoc2VhcmNoVmFsdWUsIG9wdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGVybSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCBtYXBwZWQgPSBvcHRpb247XG4gICAgICAgIHJldHVybiBzZWFyY2hLZXlzLnNvbWUoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBrZXkgPT09ICdsYWJlbCcgPyBtYXBwZWQubGFiZWwgOiBtYXBwZWQuZGVzY3JpcHRpb247XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJyAmJiBmaWVsZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pO1xuICAgICAgICB9KTtcbiAgICB9LCBbc2VhcmNoS2V5c10pO1xuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgc2V0VGVtcChbXSk7XG4gICAgICAgICAgICBzZXRDb21taXR0ZWQoW10pO1xuICAgICAgICB9LFxuICAgICAgICByZXNldDogKCkgPT4ge1xuICAgICAgICAgICAgc2V0VGVtcChpbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgc2V0Q29tbWl0dGVkKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICB9KSwgW2luaXRpYWxWYWx1ZSwgb25SZXNldF0pO1xuICAgIGNvbnN0IGhhbmRsZVNlbGVjdENoYW5nZSA9IHVzZUNhbGxiYWNrKChuZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZXMgPSAoQXJyYXkuaXNBcnJheShuZXh0KSA/IG5leHQgOiBbXSkubWFwKFN0cmluZyk7XG4gICAgICAgIC8vIFdpdGggYW4gXCJBbGxcIiByb3csIHNlbGVjdGluZyBldmVyeSBjb25jcmV0ZSBvcHRpb24gY29sbGFwc2VzIHRvIFwiYWxsXCJcbiAgICAgICAgLy8gKFtdKSwgbWF0Y2hpbmcgdGhlIGJhY2tlbmQgY29udmVudGlvbiB0aGF0IGVtcHR5ID09IG5vIGZpbHRlci4gV2l0aG91dFxuICAgICAgICAvLyBhbiBcIkFsbFwiIHJvdyAoZS5nLiByZWNpcGllbnRzKSwgYSBmdWxsIHNlbGVjdGlvbiBzdGF5cyBleHBsaWNpdCBzbyB0aGVcbiAgICAgICAgLy8gdHJpZ2dlciBzdGlsbCBzdW1tYXJpemVzIGl0IChcIk5hbWUgKyBOIG1vcmVcIikuXG4gICAgICAgIGNvbnN0IGNvbGxhcHNlID0gISFhbGxMYWJlbCAmJiBuZXh0VmFsdWVzLmxlbmd0aCA9PT0gYWxsVmFsdWVzLmxlbmd0aDtcbiAgICAgICAgc2V0VGVtcChjb2xsYXBzZSA/IFtdIDogbmV4dFZhbHVlcyk7XG4gICAgfSwgW2FsbExhYmVsLCBhbGxWYWx1ZXNdKTtcbiAgICBjb25zdCBoYW5kbGVBbGxDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgLy8gVGhlIFwiQWxsXCIgcm93IGlzIGV4Y2x1c2l2ZTogdHVybmluZyBpdCBvbiBjbGVhcnMgc3BlY2lmaWMgcGlja3MuXG4gICAgICAgIHNldFRlbXAoW10pO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBoYW5kbGVBcHBseSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgc2V0Q29tbWl0dGVkKHRlbXApO1xuICAgICAgICBvbkFwcGx5KHRlbXApO1xuICAgICAgICBzZXRPcGVuKGZhbHNlKTtcbiAgICB9LCBbdGVtcCwgb25BcHBseV0pO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBzZXRUZW1wKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIHNldENvbW1pdHRlZChpbml0aWFsVmFsdWUpO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoaW5pdGlhbFZhbHVlKTtcbiAgICB9LCBbaW5pdGlhbFZhbHVlLCBvblJlc2V0XSk7XG4gICAgY29uc3QgaGFuZGxlT3BlbkNoYW5nZSA9IHVzZUNhbGxiYWNrKChuZXh0T3BlbikgPT4ge1xuICAgICAgICBzZXRPcGVuKG5leHRPcGVuKTtcbiAgICAgICAgaWYgKG5leHRPcGVuKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBDbG9zaW5nIHdpdGhvdXQgQXBwbHkgZGlzY2FyZHMgdGhlIGRyYWZ0LlxuICAgICAgICBzZXRUZW1wKGNvbW1pdHRlZCk7XG4gICAgICAgIGlmIChzZWFyY2gpXG4gICAgICAgICAgICBzZXRLZXl3b3JkKCcnKTtcbiAgICB9LCBbY29tbWl0dGVkLCBzZWFyY2hdKTtcbiAgICBjb25zdCByZW5kZXJSb3cgPSB1c2VDYWxsYmFjaygob3B0aW9uLCBjaGVja2VkKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0eXBlb2Ygb3B0aW9uLmxhYmVsID09PSAnc3RyaW5nJyA/IG9wdGlvbi5sYWJlbCA6ICcnO1xuICAgICAgICByZXR1cm4gKF9qc3hzKEZsZXgsIHsgYWxpZ246ICdjZW50ZXInLCBqdXN0aWZ5OiAnc3BhY2UtYmV0d2VlbicsIGdhcDogOCwgY2xhc3NOYW1lOiBgJHtXUkFQX0NMU31fX3Jvd2AsIGNoaWxkcmVuOiBbX2pzeHMoRmxleCwgeyBhbGlnbjogJ2NlbnRlcicsIGdhcDogOCwgY2xhc3NOYW1lOiBgJHtXUkFQX0NMU31fX3Jvdy1tYWluYCwgY2hpbGRyZW46IFtvcHRpb24uaWNvblVybCAmJiAoX2pzeChcImltZ1wiLCB7IHNyYzogb3B0aW9uLmljb25VcmwsIGFsdDogdGV4dCwgd2lkdGg6IElDT05fU0laRSwgaGVpZ2h0OiBJQ09OX1NJWkUsIGNsYXNzTmFtZTogSUNPTl9DTFMgfSkpLCBfanN4cyhGbGV4LCB7IHZlcnRpY2FsOiB0cnVlLCBnYXA6IDAsIGFsaWduOiAnc3RhcnQnLCBjbGFzc05hbWU6IGAke1dSQVBfQ0xTfV9fcm93LXRleHRgLCBjaGlsZHJlbjogW19qc3hzKEZsZXgsIHsgYWxpZ246ICdjZW50ZXInLCBnYXA6IDgsIGNsYXNzTmFtZTogYCR7V1JBUF9DTFN9X19yb3ctbGFiZWxgLCBjaGlsZHJlbjogW19qc3goVHlwb2dyYXBoeUxhYmVsLCB7IHNpemU6ICdtZCcsIGNoaWxkcmVuOiBvcHRpb24ubGFiZWwgfSksIG9wdGlvbi50YWcgJiYgX2pzeChUYWcsIHsgbGFiZWw6IG9wdGlvbi50YWcsIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAncmVjb21tZW5kZWQnIH0pXSB9KSwgb3B0aW9uLmRlc2NyaXB0aW9uICYmIChfanN4KFR5cG9ncmFwaHlCb2R5LCB7IHNpemU6ICdzbScsIGNvbG9yOiAnZGVmYXVsdC10ZXJ0aWFyeScsIGNoaWxkcmVuOiBvcHRpb24uZGVzY3JpcHRpb24gfSkpXSB9KV0gfSksIF9qc3goQ2hlY2tib3gsIHsgY2hlY2tlZDogY2hlY2tlZCwgcmVhZE9ubHk6IHRydWUsIGNsYXNzTmFtZTogYCR7V1JBUF9DTFN9X19yb3ctY2hlY2tgIH0pXSB9KSk7XG4gICAgfSwgW10pO1xuICAgIC8vIFRoZSB0cmlnZ2VyIHJlZmxlY3RzIHRoZSBDT01NSVRURUQgc2VsZWN0aW9uIChub3QgdGhlIGluLXBhbmVsIGRyYWZ0KS5cbiAgICAvLyBgcmVuZGVyVmFsdWVgIHNob3J0LWNpcmN1aXRzIFNlbGVjdCdzIG93biBwbGFjZWhvbGRlciBoYW5kbGluZywgc28gdGhlXG4gICAgLy8gZW1wdHkgc3RhdGUgbXVzdCByZXR1cm4gdGhlIHBsYWNlaG9sZGVyIGV4cGxpY2l0bHkuXG4gICAgY29uc3QgcmVuZGVyVmFsdWUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGlmIChhbGxDaGVja2VkKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYWxsTGFiZWwgIT09IG51bGwgJiYgYWxsTGFiZWwgIT09IHZvaWQgMCA/IGFsbExhYmVsIDogcGxhY2Vob2xkZXI7XG4gICAgICAgICAgICByZXR1cm4gKF9qc3goVHlwb2dyYXBoeUJvZHksIHsgc2l6ZTogJ21kJywgY29sb3I6IGFsbExhYmVsID8gJ2RlZmF1bHQnIDogJ2RlZmF1bHQtdGVydGlhcnknLCBjbGFzc05hbWU6IGAke1dSQVBfQ0xTfV9fdmFsdWVgLCBjaGlsZHJlbjogdGV4dCB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3QgPSBvcHRpb25CeVZhbHVlLmdldChjb21taXR0ZWRbMF0pO1xuICAgICAgICBjb25zdCBmaXJzdExhYmVsID0gZmlyc3QgPyBmaXJzdC5sYWJlbCA6IGNvbW1pdHRlZFswXTtcbiAgICAgICAgY29uc3QgZXh0cmEgPSBjb21taXR0ZWQubGVuZ3RoIC0gMTtcbiAgICAgICAgcmV0dXJuIChfanN4cyhUeXBvZ3JhcGh5Qm9keSwgeyBzaXplOiAnbWQnLCBjbGFzc05hbWU6IGAke1dSQVBfQ0xTfV9fdmFsdWVgLCBjaGlsZHJlbjogW2ZpcnN0TGFiZWwsIGV4dHJhID4gMCAmJiAoX2pzeChcInNwYW5cIiwgeyBjbGFzc05hbWU6IGAke1dSQVBfQ0xTfV9fdmFsdWUtbW9yZWAsIGNoaWxkcmVuOiBNT1JFX1NVRkZJWChleHRyYSkgfSkpXSB9KSk7XG4gICAgfSwgW2FsbENoZWNrZWQsIGFsbExhYmVsLCBwbGFjZWhvbGRlciwgY29tbWl0dGVkLCBvcHRpb25CeVZhbHVlXSk7XG4gICAgcmV0dXJuIChfanN4KFNlbGVjdCwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyBtdWx0aXBsZTogdHJ1ZSwgc2l6ZTogc2l6ZSwgbGFiZWw6IGxhYmVsLCBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsIGNsYXNzTmFtZTogam9pbkNscyhXUkFQX0NMUywgY2xhc3NOYW1lKSwgcGFuZWxDbGFzc05hbWU6IFBBTkVMX0NMUywgZ3JvdXBMYWJlbENsYXNzTmFtZTogR1JPVVBfTEFCRUxfQ0xTLCB2YWx1ZTogdGVtcCwgb3Blbjogb3Blbiwgb25PcGVuQ2hhbmdlOiBoYW5kbGVPcGVuQ2hhbmdlLCBvbkNoYW5nZTogaGFuZGxlU2VsZWN0Q2hhbmdlLCBzZWFyY2hhYmxlOiBzZWFyY2gsIHNlYXJjaFBsYWNlaG9sZGVyOiBzZWFyY2hQbGFjZWhvbGRlciwgc2VhcmNoVmFsdWU6IGtleXdvcmQsIG9uU2VhcmNoQ2hhbmdlOiBzZXRLZXl3b3JkLCBmaWx0ZXJPcHRpb246IGZpbHRlck9wdGlvbiwgb3B0aW9uczogZ3JvdXBlZERhdGEsIHBhbmVsSGVhZGVyOiBhbGxMYWJlbCA/IChfanN4cyhcImJ1dHRvblwiLCB7IHR5cGU6ICdidXR0b24nLCBjbGFzc05hbWU6IGpvaW5DbHMoYCR7V1JBUF9DTFN9X19hbGxgLCBhbGxDaGVja2VkICYmIGAke1dSQVBfQ0xTfV9fYWxsLS1jaGVja2VkYCksIG9uQ2xpY2s6IGhhbmRsZUFsbENsaWNrLCBjaGlsZHJlbjogW19qc3goVHlwb2dyYXBoeUxhYmVsLCB7IHNpemU6ICdtZCcsIGNoaWxkcmVuOiBhbGxMYWJlbCB9KSwgX2pzeChDaGVja2JveCwgeyBjaGVja2VkOiBhbGxDaGVja2VkLCByZWFkT25seTogdHJ1ZSwgY2xhc3NOYW1lOiBgJHtXUkFQX0NMU31fX3Jvdy1jaGVja2AgfSldIH0pKSA6IHVuZGVmaW5lZCwgZW1wdHlDb250ZW50OiBzZWFyY2hFbXB0eSwgcmVuZGVyVmFsdWU6IHJlbmRlclZhbHVlLCByZW5kZXJPcHRpb246IChvcHRpb24sIG1ldGEpID0+IHJlbmRlclJvdyhvcHRpb24sIG1ldGEuc2VsZWN0ZWQpLCBwYW5lbEZvb3RlcjogX2pzeHMoRmxleCwgeyBnYXA6IDgsIGNsYXNzTmFtZTogYCR7V1JBUF9DTFN9X19mb290ZXJgLCBjaGlsZHJlbjogW19qc3goQnV0dG9uLCB7IGNvbG9yOiAnZ3JleScsIHNpemU6ICdzbWFsbCcsIHN0eWxlOiBGVUxMX1dJRFRIX1NUWUxFLCBvbkNsaWNrOiBoYW5kbGVSZXNldCwgY2hpbGRyZW46IFJFU0VUX0xBQkVMIH0pLCBfanN4KEJ1dHRvbiwgeyBjb2xvcjogJ3ByaW1hcnknLCBzaXplOiAnc21hbGwnLCBzdHlsZTogRlVMTF9XSURUSF9TVFlMRSwgXG4gICAgICAgICAgICAgICAgICAgIC8vIFdpdGggYW4gXCJBbGxcIiByb3csIGFuIGVtcHR5IGRyYWZ0IG1lYW5zIFwiYWxsXCIgKHZhbGlkKS4gV2l0aG91dFxuICAgICAgICAgICAgICAgICAgICAvLyBvbmUsIGFuIGVtcHR5IGRyYWZ0IG1lYW5zIFwibm90aGluZyBwaWNrZWRcIiDigJQgYmxvY2sgQXBwbHkuXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhYWxsTGFiZWwgJiYgdGVtcC5sZW5ndGggPT09IDAsIG9uQ2xpY2s6IGhhbmRsZUFwcGx5LCBjaGlsZHJlbjogQVBQTFlfTEFCRUwgfSldIH0pIH0pKSk7XG59O1xuZXhwb3J0IGNvbnN0IERyb3Bkb3duRmlsdGVyID0gbWVtbyhEcm9wZG93bkZpbHRlckJhc2UpOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,2 @@
1
+ export { DropdownFilter } from './Dropdown';
2
+ export * from './interface';
@@ -0,0 +1,3 @@
1
+ export { DropdownFilter } from './Dropdown';
2
+ export * from './interface';
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbHRlci9zcmMvYnVzaW5lc3MvRmlsdGVyL0Ryb3Bkb3duL2luZGV4LnRzIl0sIm5hbWVzIjpbIkRyb3Bkb3duRmlsdGVyIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxjQUFjLFFBQVEsWUFBWTtBQUMzQyxjQUFjLGFBQWEiLCJmaWxlIjoiYnVzaW5lc3MvRmlsdGVyL0Ryb3Bkb3duL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -0,0 +1,136 @@
1
+ import type { ReactNode, RefObject } from 'react';
2
+ import type { SelectProps, SelectSize } from "../../../components/Select";
3
+ /**
4
+ * A single selectable row in the dropdown filter. Consumers map their raw
5
+ * backend list into this shape — the component renders a fixed row layout from
6
+ * these fields (icon + label + optional second line + optional tag + trailing
7
+ * checkbox) and never exposes a render slot.
8
+ *
9
+ * Which optional fields you provide drives the row's appearance:
10
+ * - `iconUrl` present → a leading round icon is shown.
11
+ * - `description` present → a muted second line is shown under `label`.
12
+ * - `group` present → rows are bucketed under a group heading.
13
+ * - `tag` present → a small badge is shown after `label`.
14
+ */
15
+ export interface DropdownFilterOption {
16
+ /** Primary row text, e.g. `"Bitcoin"` / `"Sent"` / `"Yvonne Ni"`. */
17
+ label: string;
18
+ /**
19
+ * Stable identifier echoed back through `onApply`, e.g. the asset symbol
20
+ * `"USDC"`, the direction `"SENT"`, or a counterparty id.
21
+ */
22
+ value: string;
23
+ /**
24
+ * Muted second line under `label`, e.g. a network `"Solana"`, an account
25
+ * number, or an email. Omit for a single-line row.
26
+ */
27
+ description?: string;
28
+ /**
29
+ * Public URL of a leading round icon (rendered with `<img>`), e.g. an asset
30
+ * icon. Omit for a row with no icon.
31
+ */
32
+ iconUrl?: string;
33
+ /**
34
+ * Group heading this row belongs to, e.g. `"Cash"` / `"Stablecoins"`.
35
+ * Consecutive rows sharing a `group` render under one heading. Omit to keep
36
+ * the row ungrouped (no heading).
37
+ */
38
+ group?: string;
39
+ /** Small trailing badge after `label`, e.g. `"Main"`. Omit for no badge. */
40
+ tag?: string;
41
+ /** Pre-select this row on mount (and on `reset`). */
42
+ defaultValue?: boolean;
43
+ }
44
+ /** Keys of {@link DropdownFilterOption} that the search box matches against. */
45
+ export type DropdownFilterSearchKey = 'label' | 'description';
46
+ /** Imperative handle exposed via `ref` for parent-driven reset/clear. */
47
+ export interface DropdownFilterHandler {
48
+ /** Wipe the selection to empty (no rows checked) without firing callbacks. */
49
+ clear: () => void;
50
+ /** Restore the initial state (respecting `defaultSelectAll`) and fire `onReset`. */
51
+ reset: () => void;
52
+ }
53
+ export interface DropdownFilterProps extends Omit<SelectProps, 'ref' | 'options' | 'multiple' | 'value' | 'defaultValue' | 'onChange' | 'searchable' | 'searchValue' | 'defaultSearchValue' | 'onSearchChange' | 'filterOption' | 'renderOption' | 'renderOptionContent' | 'renderValue' | 'panelHeader' | 'panelFooter' | 'emptyContent' | 'open' | 'defaultOpen' | 'onOpenChange' | 'allowDeselect' | 'maxVisibleValues' | 'size' | 'onReset'> {
54
+ ref?: RefObject<DropdownFilterHandler | null>;
55
+ /**
56
+ * Trigger size. Mirrors the host filter row sizing.
57
+ * @default 'small'
58
+ */
59
+ size?: SelectSize;
60
+ /** Optional field label rendered above the trigger. */
61
+ label?: ReactNode;
62
+ /**
63
+ * Trigger placeholder shown before any selection.
64
+ * @default 'Select'
65
+ */
66
+ placeholder?: string;
67
+ /**
68
+ * The selectable rows. Map your backend list into {@link DropdownFilterOption}.
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * const options: DropdownFilterOption[] = [
73
+ * { label: 'Bitcoin', value: 'BTC', iconUrl: 'https://…/btc.png', group: 'Stablecoins' },
74
+ * ];
75
+ * <DropdownFilter options={options} search allLabel='All assets' />
76
+ * ```
77
+ */
78
+ options: DropdownFilterOption[];
79
+ /**
80
+ * Text for the leading "select all" row, e.g. `"All assets"`. When provided,
81
+ * an exclusive "All" row is rendered above the options; selecting it clears
82
+ * every specific selection (`onApply` receives `[]`). Omit to render no
83
+ * "All" row (e.g. the recipient filter).
84
+ */
85
+ allLabel?: string;
86
+ /**
87
+ * Start with everything selected (the "All" row checked, `value = []`). Also
88
+ * the state `reset` returns to. Only meaningful together with `allLabel`.
89
+ * @default false
90
+ */
91
+ defaultSelectAll?: boolean;
92
+ /**
93
+ * Show a search box above the list.
94
+ * @default false
95
+ */
96
+ search?: boolean;
97
+ /**
98
+ * Placeholder for the search box.
99
+ * @default 'Search'
100
+ */
101
+ searchPlaceholder?: string;
102
+ /**
103
+ * Which option fields the search box matches against.
104
+ * @default ['label', 'description']
105
+ */
106
+ searchKeys?: DropdownFilterSearchKey[];
107
+ /**
108
+ * Content shown when the list is empty (no options, or a search with no
109
+ * matches). Pass a node to fully customize it — e.g. a different icon and
110
+ * copy. Defaults to an `<Empty icon='search' title='No results' />`.
111
+ * @example
112
+ * ```tsx
113
+ * searchEmpty={
114
+ * <Empty icon='id' title='No recipients found'
115
+ * description='Try a different name or adjust your search filters.' />
116
+ * }
117
+ * ```
118
+ */
119
+ searchEmpty?: ReactNode;
120
+ /**
121
+ * Fired when the user commits the selection via the panel's Apply button.
122
+ * Receives the selected `value`s, or `[]` for "all / nothing" — the component
123
+ * never injects an `'all'` sentinel, so translate `[]` to whatever your API
124
+ * expects (omit the field, `['ALL']`, etc.) at the call site.
125
+ * @example
126
+ * ```ts
127
+ * <DropdownFilter
128
+ * options={assets}
129
+ * onApply={(values) => setAssetName(values.length ? values : undefined)}
130
+ * />
131
+ * ```
132
+ */
133
+ onApply: (values: string[]) => void;
134
+ /** Fired when the user clears the selection via the panel's Reset button. */
135
+ onReset?: (values: string[]) => void;
136
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzaW5lc3MvRmlsdGVyL0Ryb3Bkb3duL2ludGVyZmFjZS5qcyIsIm5hbWVzIjpbXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyIsInNvdXJjZXMiOlsiYnVzaW5lc3MvRmlsdGVyL0Ryb3Bkb3duL2ludGVyZmFjZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge307Il0sIm1hcHBpbmdzIjoiQUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Retrieves the spacing value for a given token key.
3
+ *
4
+ * @param {string} $key - The spacing token key (e.g., '100', '200').
5
+ * @return {length|null} The computed spacing value or null if the key is invalid.
6
+ * @example
7
+ * .element {
8
+ * padding: om-spacing-token('200'); // Returns 8px if $om-sys-spacing-unit is 4px
9
+ * }
10
+ */
11
+ /**
12
+ * Computes the spacing value based on a token key or a direct length value.
13
+ *
14
+ * @param {string|length} $value - The spacing token key (e.g., '100') or a direct length value (e.g., '16px').
15
+ * @return {length} The computed spacing value.
16
+ * @example
17
+ * .element {
18
+ * margin: om-spacing-value('300'); // Returns 12px if $om-sys-spacing-unit is 4px
19
+ * padding: om-spacing-value(16px); // Returns 16px
20
+ * gap: om-spacing-value(2); // Returns 8px if $om-sys-spacing-unit is 4px
21
+ * }
22
+ */
23
+ .om-dropdown-filter__value {
24
+ display: inline-flex;
25
+ align-items: center;
26
+ width: 100%;
27
+ overflow: hidden;
28
+ line-height: 18px;
29
+ white-space: nowrap;
30
+ text-overflow: ellipsis;
31
+ }
32
+ .om-dropdown-filter__value-more {
33
+ flex: 0 0 auto;
34
+ margin-left: var(--om-spacing-100, 4px);
35
+ color: var(--om-text-default-tertiary, #646465);
36
+ }
37
+
38
+ .om-dropdown-filter-panel {
39
+ min-width: 224px;
40
+ }
41
+ .om-dropdown-filter-panel .om-component-ui-select-panel-header {
42
+ margin-bottom: var(--om-spacing-050, 2px);
43
+ }
44
+ .om-dropdown-filter-panel .om-dropdown-filter__group-label {
45
+ padding-top: var(--om-spacing-200, 8px);
46
+ padding-bottom: var(--om-spacing-050, 2px);
47
+ }
48
+ .om-dropdown-filter-panel .om-dropdown-filter__group-label [class*=om-component-ui-typography] {
49
+ font-size: var(--om-body-sm-font-size);
50
+ font-family: var(--om-body-sm-font-family);
51
+ line-height: var(--om-body-sm-line-height);
52
+ letter-spacing: var(--om-body-sm-letter-spacing);
53
+ font-weight: var(--om-body-sm-strong-font-weight);
54
+ color: var(--om-text-default-tertiary, #646465);
55
+ }
56
+ .om-dropdown-filter-panel .om-dropdown-filter__row {
57
+ width: 100%;
58
+ }
59
+ .om-dropdown-filter-panel .om-dropdown-filter__row-main {
60
+ min-width: 0;
61
+ }
62
+ .om-dropdown-filter-panel .om-dropdown-filter__row-text {
63
+ min-width: 0;
64
+ }
65
+ .om-dropdown-filter-panel .om-dropdown-filter__row-label {
66
+ min-width: 0;
67
+ }
68
+ .om-dropdown-filter-panel .om-dropdown-filter__row-check {
69
+ flex: 0 0 auto;
70
+ pointer-events: none;
71
+ }
72
+ .om-dropdown-filter-panel .om-dropdown-filter__all {
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: space-between;
76
+ width: 100%;
77
+ padding: var(--om-spacing-200, 8px);
78
+ border: none;
79
+ background: transparent;
80
+ border-radius: var(--om-radius-200, 8px);
81
+ cursor: pointer;
82
+ }
83
+ .om-dropdown-filter-panel .om-dropdown-filter__all:hover, .om-dropdown-filter-panel .om-dropdown-filter__all--checked {
84
+ background: var(--om-bg-default-secondary, #f8f8f8);
85
+ }
86
+
87
+ .om-dropdown-filter-icon {
88
+ flex: 0 0 auto;
89
+ width: 24px;
90
+ height: 24px;
91
+ -o-object-fit: cover;
92
+ object-fit: cover;
93
+ border-radius: var(--om-radius-full, 9999px);
94
+ }
@@ -0,0 +1,2 @@
1
+ import './Dropdown.css';
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbHRlci9Ecm9wZG93bi9zcmMvYnVzaW5lc3MvRmlsdGVyL0Ryb3Bkb3duL3N0eWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUJBQWlCIiwiZmlsZSI6ImJ1c2luZXNzL0ZpbHRlci9Ecm9wZG93bi9zdHlsZS9jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1 @@
1
+ import './Dropdown.css';
@@ -0,0 +1,2 @@
1
+ import './Dropdown.css';
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbHRlci9Ecm9wZG93bi9zcmMvYnVzaW5lc3MvRmlsdGVyL0Ryb3Bkb3duL3N0eWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUJBQWlCIiwiZmlsZSI6ImJ1c2luZXNzL0ZpbHRlci9Ecm9wZG93bi9zdHlsZS9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,2 @@
1
+ export * from './DateRange';
2
+ export * from './Dropdown';