@bigbinary/neeto-tags-frontend 2.2.31 → 2.2.32

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.
@@ -28,6 +28,7 @@
28
28
  "mergeTag_one": "Merge tag",
29
29
  "mergeTag_other": "Merge tags",
30
30
  "name": "Name",
31
+ "noTagsFound": "No tags found",
31
32
  "style": "Style",
32
33
  "tag_one": "Tag",
33
34
  "tag_other": "Tags"
@@ -42,7 +43,8 @@
42
43
  },
43
44
  "placeholder": {
44
45
  "selectOrCreateTag": "Select or create tag",
45
- "searchTags": "Search tags"
46
+ "searchTags": "Search tags",
47
+ "searchOrCreateTags": "Search or create tags"
46
48
  },
47
49
  "link": {
48
50
  "manageAllTags": "Manage all tags"
package/dist/.ready CHANGED
@@ -1 +1 @@
1
- Built at 2026-08-05T12:47:45.661Z
1
+ Built at 2026-09-09T04:39:41.859Z
@@ -14,6 +14,7 @@ var reactI18next = require('react-i18next');
14
14
  var i18next = require('i18next');
15
15
  var classNames = require('classnames');
16
16
  var jsxRuntime = require('react/jsx-runtime');
17
+ var reactDom = require('react-dom');
17
18
  var constants$1 = require('../../constants-BP1u7ku6.js');
18
19
 
19
20
  var KEYBOARD_SHORTCUTS = {
@@ -22,9 +23,12 @@ var KEYBOARD_SHORTCUTS = {
22
23
  description: i18next.t("neetoTags.shortcuts.addTag")
23
24
  }
24
25
  };
26
+ var POPOVER_PANEL_WIDTH = 256;
27
+ var POPOVER_VIEWPORT_MARGIN = 8;
28
+ var POPOVER_TRIGGER_GAP = 4;
25
29
 
26
- function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
27
- function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
30
+ function ownKeys$5(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
31
+ function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
28
32
  var Title = function Title(_ref) {
29
33
  var _ref$titleProps = _ref.titleProps,
30
34
  titleProps = _ref$titleProps === void 0 ? {} : _ref$titleProps,
@@ -56,7 +60,7 @@ var Title = function Title(_ref) {
56
60
  }, [didStartUpdate, isUpdating]);
57
61
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
58
62
  className: "flex items-center gap-2",
59
- children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Label, _objectSpread$4(_objectSpread$4({}, titleProps), {}, {
63
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Label, _objectSpread$5(_objectSpread$5({}, titleProps), {}, {
60
64
  children: tagsTitle
61
65
  })), /*#__PURE__*/jsxRuntime.jsxs("div", {
62
66
  className: "inline-flex h-6 items-center",
@@ -84,8 +88,8 @@ var TitleActionBlock = function TitleActionBlock(_ref) {
84
88
  });
85
89
  };
86
90
 
87
- function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
88
- function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
91
+ function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
92
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
89
93
  var Container = function Container(_ref) {
90
94
  var isMetadataBlock = _ref.isMetadataBlock,
91
95
  containerProps = _ref.containerProps,
@@ -95,12 +99,12 @@ var Container = function Container(_ref) {
95
99
  isTagsBodyVisible = _ref.isTagsBodyVisible,
96
100
  bodyProps = _ref.bodyProps;
97
101
  if (isMetadataBlock) {
98
- return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread$3(_objectSpread$3({
102
+ return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread$4(_objectSpread$4({
99
103
  className: "space-y-4 rounded-lg border border-border bg-background p-4"
100
104
  }, containerProps), {}, {
101
105
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
102
106
  className: "flex items-center justify-between",
103
- children: [/*#__PURE__*/jsxRuntime.jsx(Title, _objectSpread$3({}, titleComponentProps)), /*#__PURE__*/jsxRuntime.jsx(TitleActionBlock, _objectSpread$3({}, actionBlockProps))]
107
+ children: [/*#__PURE__*/jsxRuntime.jsx(Title, _objectSpread$4({}, titleComponentProps)), /*#__PURE__*/jsxRuntime.jsx(TitleActionBlock, _objectSpread$4({}, actionBlockProps))]
104
108
  }), isTagsBodyVisible && children]
105
109
  }));
106
110
  }
@@ -109,14 +113,14 @@ var Container = function Container(_ref) {
109
113
  var onHeaderClick = function onHeaderClick() {
110
114
  !isDisabled && setIsTagsDropdownVisible(ramda.not);
111
115
  };
112
- return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread$3(_objectSpread$3({
116
+ return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread$4(_objectSpread$4({
113
117
  className: "flex w-full flex-col items-start gap-2"
114
118
  }, containerProps), {}, {
115
119
  children: [titleComponentProps.showTitleBar && /*#__PURE__*/jsxRuntime.jsxs("div", {
116
120
  className: classNames("flex w-full cursor-pointer items-center justify-between gap-2 text-foreground", titleComponentProps.containerClassName),
117
121
  onClick: onHeaderClick,
118
- children: [/*#__PURE__*/jsxRuntime.jsx(Title, _objectSpread$3({}, titleComponentProps)), titleComponentProps.showAddTagsOnTitle && /*#__PURE__*/jsxRuntime.jsx(TitleActionBlock, _objectSpread$3({}, actionBlockProps))]
119
- }), isTagsBodyVisible && /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$3(_objectSpread$3({
122
+ children: [/*#__PURE__*/jsxRuntime.jsx(Title, _objectSpread$4({}, titleComponentProps)), titleComponentProps.showAddTagsOnTitle && /*#__PURE__*/jsxRuntime.jsx(TitleActionBlock, _objectSpread$4({}, actionBlockProps))]
123
+ }), isTagsBodyVisible && /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$4(_objectSpread$4({
120
124
  className: "w-full rounded-lg border border-border bg-background p-4"
121
125
  }, bodyProps), {}, {
122
126
  children: children
@@ -124,6 +128,265 @@ var Container = function Container(_ref) {
124
128
  }));
125
129
  };
126
130
 
131
+ function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
132
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
133
+ var PopoverTagsSelector = function PopoverTagsSelector(_ref) {
134
+ var _coords$top, _coords$left;
135
+ var open = _ref.open,
136
+ onOpenChange = _ref.onOpenChange,
137
+ tags = _ref.tags,
138
+ onChange = _ref.onChange,
139
+ onCreateOption = _ref.onCreateOption,
140
+ _ref$buttonProps = _ref.buttonProps,
141
+ buttonProps = _ref$buttonProps === void 0 ? {} : _ref$buttonProps,
142
+ _ref$isDisabled = _ref.isDisabled,
143
+ isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled;
144
+ var _useTranslation = reactI18next.useTranslation(),
145
+ t = _useTranslation.t;
146
+ var triggerRef = react.useRef(null);
147
+ var panelRef = react.useRef(null);
148
+ var rafRef = react.useRef(null);
149
+ var listboxId = react.useId();
150
+ var _useState = react.useState(""),
151
+ _useState2 = _slicedToArray(_useState, 2),
152
+ query = _useState2[0],
153
+ setQuery = _useState2[1];
154
+ var _useState3 = react.useState(0),
155
+ _useState4 = _slicedToArray(_useState3, 2),
156
+ activeIndex = _useState4[0],
157
+ setActiveIndex = _useState4[1];
158
+ // `null` until measured, so the panel stays hidden for its first paint and
159
+ // never flashes at the top-left corner before it is positioned.
160
+ var _useState5 = react.useState(null),
161
+ _useState6 = _slicedToArray(_useState5, 2),
162
+ coords = _useState6[0],
163
+ setCoords = _useState6[1];
164
+ var trimmedQuery = query.trim();
165
+ var filteredTags = react.useMemo(function () {
166
+ if (!trimmedQuery) return tags;
167
+ var search = trimmedQuery.toLowerCase();
168
+ return tags.filter(function (_ref2) {
169
+ var label = _ref2.label;
170
+ return label.toLowerCase().includes(search);
171
+ });
172
+ }, [tags, trimmedQuery]);
173
+ var canCreate = neetoCist.isNotEmpty(trimmedQuery) && !tags.some(function (_ref3) {
174
+ var label = _ref3.label;
175
+ return label.toLowerCase() === trimmedQuery.toLowerCase();
176
+ });
177
+ var optionCount = filteredTags.length + (canCreate ? 1 : 0);
178
+ var optionId = function optionId(index) {
179
+ return "".concat(listboxId, "-option-").concat(index);
180
+ };
181
+ var focusTrigger = function focusTrigger() {
182
+ var _triggerRef$current;
183
+ return (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 || (_triggerRef$current = _triggerRef$current.querySelector("button")) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.focus({
184
+ preventScroll: true
185
+ });
186
+ };
187
+ var close = react.useCallback(function () {
188
+ var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
189
+ _ref4$restoreFocus = _ref4.restoreFocus,
190
+ restoreFocus = _ref4$restoreFocus === void 0 ? false : _ref4$restoreFocus;
191
+ setQuery("");
192
+ setActiveIndex(0);
193
+ setCoords(null);
194
+ onOpenChange(false);
195
+ // Return focus to the trigger only for keyboard / selection dismissals;
196
+ // an outside click should leave focus wherever the user clicked.
197
+ if (restoreFocus) focusTrigger();
198
+ }, [onOpenChange]);
199
+ var handleSelect = function handleSelect(tag) {
200
+ onChange(tag);
201
+ close({
202
+ restoreFocus: true
203
+ });
204
+ };
205
+ var handleCreate = function handleCreate() {
206
+ onCreateOption(trimmedQuery);
207
+ close({
208
+ restoreFocus: true
209
+ });
210
+ };
211
+ var handleQueryChange = function handleQueryChange(event) {
212
+ setQuery(event.target.value);
213
+ setActiveIndex(0);
214
+ };
215
+ var handleKeyDown = function handleKeyDown(event) {
216
+ if (event.key === "Escape") {
217
+ event.preventDefault();
218
+ close({
219
+ restoreFocus: true
220
+ });
221
+ } else if (event.key === "ArrowDown" && optionCount > 0) {
222
+ event.preventDefault();
223
+ setActiveIndex(function (previous) {
224
+ return (previous + 1) % optionCount;
225
+ });
226
+ } else if (event.key === "ArrowUp" && optionCount > 0) {
227
+ event.preventDefault();
228
+ setActiveIndex(function (previous) {
229
+ return (previous - 1 + optionCount) % optionCount;
230
+ });
231
+ } else if (event.key === "Enter") {
232
+ event.preventDefault();
233
+ if (activeIndex < filteredTags.length) {
234
+ handleSelect(filteredTags[activeIndex]);
235
+ } else if (canCreate) {
236
+ handleCreate();
237
+ }
238
+ }
239
+ };
240
+ var updatePosition = react.useCallback(function () {
241
+ var _panelRef$current$off, _panelRef$current;
242
+ var trigger = triggerRef.current;
243
+ if (!trigger) return;
244
+ var rect = trigger.getBoundingClientRect();
245
+ var panelHeight = (_panelRef$current$off = (_panelRef$current = panelRef.current) === null || _panelRef$current === void 0 ? void 0 : _panelRef$current.offsetHeight) !== null && _panelRef$current$off !== void 0 ? _panelRef$current$off : 0;
246
+ var left = Math.max(POPOVER_VIEWPORT_MARGIN, Math.min(rect.left, window.innerWidth - POPOVER_PANEL_WIDTH - POPOVER_VIEWPORT_MARGIN));
247
+ var belowTop = rect.bottom + POPOVER_TRIGGER_GAP;
248
+ var overflowsBelow = belowTop + panelHeight + POPOVER_VIEWPORT_MARGIN > window.innerHeight;
249
+ var fitsAbove = rect.top - POPOVER_TRIGGER_GAP - panelHeight > POPOVER_VIEWPORT_MARGIN;
250
+ var top = overflowsBelow && fitsAbove ? rect.top - POPOVER_TRIGGER_GAP - panelHeight : belowTop;
251
+ setCoords({
252
+ top: top,
253
+ left: left
254
+ });
255
+ }, []);
256
+
257
+ // Position on open and whenever the panel's height changes (list filtering),
258
+ // synchronously before paint so the panel is never seen mispositioned.
259
+ react.useLayoutEffect(function () {
260
+ if (open) updatePosition();
261
+ }, [open, optionCount, updatePosition]);
262
+ react.useEffect(function () {
263
+ var _panelRef$current2;
264
+ if (!open) return undefined;
265
+
266
+ // Focus the search field without scrolling the surrounding column.
267
+ (_panelRef$current2 = panelRef.current) === null || _panelRef$current2 === void 0 || (_panelRef$current2 = _panelRef$current2.querySelector("input")) === null || _panelRef$current2 === void 0 || _panelRef$current2.focus({
268
+ preventScroll: true
269
+ });
270
+ var handleClickOutside = function handleClickOutside(event) {
271
+ var _triggerRef$current2, _panelRef$current3;
272
+ if ((_triggerRef$current2 = triggerRef.current) !== null && _triggerRef$current2 !== void 0 && _triggerRef$current2.contains(event.target)) return;
273
+ if ((_panelRef$current3 = panelRef.current) !== null && _panelRef$current3 !== void 0 && _panelRef$current3.contains(event.target)) return;
274
+ close();
275
+ };
276
+
277
+ // Coalesce scroll/resize repositioning into one measurement per frame to
278
+ // avoid layout thrashing on busy scroll containers.
279
+ var scheduleReposition = function scheduleReposition() {
280
+ if (rafRef.current) return;
281
+ rafRef.current = window.requestAnimationFrame(function () {
282
+ rafRef.current = null;
283
+ updatePosition();
284
+ });
285
+ };
286
+ document.addEventListener("mousedown", handleClickOutside);
287
+ window.addEventListener("resize", scheduleReposition);
288
+ window.addEventListener("scroll", scheduleReposition, true);
289
+ return function () {
290
+ document.removeEventListener("mousedown", handleClickOutside);
291
+ window.removeEventListener("resize", scheduleReposition);
292
+ window.removeEventListener("scroll", scheduleReposition, true);
293
+ if (rafRef.current) window.cancelAnimationFrame(rafRef.current);
294
+ rafRef.current = null;
295
+ };
296
+ }, [open, close, updatePosition]);
297
+ var optionClassName = function optionClassName(isActive) {
298
+ return classNames("flex w-full cursor-pointer items-center gap-2 rounded px-2 py-1.5 text-start text-sm", isActive ? "bg-accent text-accent-foreground" : "hover:bg-accent");
299
+ };
300
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
301
+ className: "inline-block",
302
+ ref: triggerRef,
303
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, _objectSpread$3({
304
+ "aria-expanded": open,
305
+ "aria-haspopup": "listbox",
306
+ disabled: isDisabled,
307
+ icon: lucideReact.Plus,
308
+ label: t("neetoTags.button.addTag", constants.SINGULAR),
309
+ size: "sm",
310
+ variant: "link",
311
+ onClick: function onClick() {
312
+ return onOpenChange(!open);
313
+ }
314
+ }, buttonProps)), open && /*#__PURE__*/reactDom.createPortal(/*#__PURE__*/jsxRuntime.jsxs("div", {
315
+ className: "bg-popover text-popover-foreground border-border fixed z-50 overflow-hidden rounded-md border shadow-md",
316
+ ref: panelRef,
317
+ style: {
318
+ top: (_coords$top = coords === null || coords === void 0 ? void 0 : coords.top) !== null && _coords$top !== void 0 ? _coords$top : 0,
319
+ left: (_coords$left = coords === null || coords === void 0 ? void 0 : coords.left) !== null && _coords$left !== void 0 ? _coords$left : 0,
320
+ width: POPOVER_PANEL_WIDTH,
321
+ visibility: coords ? "visible" : "hidden"
322
+ },
323
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
324
+ className: "border-border border-b p-2",
325
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Input, {
326
+ "aria-autocomplete": "list",
327
+ "aria-controls": listboxId,
328
+ "aria-expanded": open,
329
+ placeholder: t("neetoTags.placeholder.searchOrCreateTags"),
330
+ prefix: /*#__PURE__*/jsxRuntime.jsx(lucideReact.Search, {
331
+ size: 14
332
+ }),
333
+ role: "combobox",
334
+ size: "small",
335
+ value: query,
336
+ "aria-activedescendant": optionCount > 0 ? optionId(activeIndex) : undefined,
337
+ onChange: handleQueryChange,
338
+ onKeyDown: handleKeyDown
339
+ })
340
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
341
+ className: "max-h-56 overflow-y-auto p-1",
342
+ id: listboxId,
343
+ role: "listbox",
344
+ children: [filteredTags.map(function (tag, index) {
345
+ return /*#__PURE__*/jsxRuntime.jsx("button", {
346
+ "aria-selected": index === activeIndex,
347
+ className: optionClassName(index === activeIndex),
348
+ id: optionId(index),
349
+ role: "option",
350
+ type: "button",
351
+ onClick: function onClick() {
352
+ return handleSelect(tag);
353
+ },
354
+ onMouseEnter: function onMouseEnter() {
355
+ return setActiveIndex(index);
356
+ },
357
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Badge, {
358
+ label: tag.label,
359
+ variant: constants$1.TAG_STYLE_TO_BADGE_VARIANT[tag.style] || "secondary"
360
+ })
361
+ }, tag.value);
362
+ }), canCreate && /*#__PURE__*/jsxRuntime.jsxs("button", {
363
+ "aria-selected": activeIndex === filteredTags.length,
364
+ id: optionId(filteredTags.length),
365
+ role: "option",
366
+ type: "button",
367
+ className: optionClassName(activeIndex === filteredTags.length),
368
+ onClick: handleCreate,
369
+ onMouseEnter: function onMouseEnter() {
370
+ return setActiveIndex(filteredTags.length);
371
+ },
372
+ children: [/*#__PURE__*/jsxRuntime.jsx(lucideReact.Plus, {
373
+ size: 14
374
+ }), /*#__PURE__*/jsxRuntime.jsxs("span", {
375
+ className: "truncate",
376
+ children: [t("neetoTags.button.createNewTag"), ": ", /*#__PURE__*/jsxRuntime.jsx("span", {
377
+ className: "font-medium",
378
+ children: trimmedQuery
379
+ })]
380
+ })]
381
+ }), optionCount === 0 && /*#__PURE__*/jsxRuntime.jsx("div", {
382
+ className: "text-muted-foreground px-2 py-2 text-sm",
383
+ children: t("neetoTags.common.noTagsFound")
384
+ })]
385
+ })]
386
+ }), document.body)]
387
+ });
388
+ };
389
+
127
390
  function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
128
391
  function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
129
392
  var TagsList = function TagsList(_ref) {
@@ -232,7 +495,9 @@ var Tags = function Tags(_ref) {
232
495
  _ref$isDisabled = _ref.isDisabled,
233
496
  isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
234
497
  _ref$isMetadataBlock = _ref.isMetadataBlock,
235
- isMetadataBlock = _ref$isMetadataBlock === void 0 ? false : _ref$isMetadataBlock;
498
+ isMetadataBlock = _ref$isMetadataBlock === void 0 ? false : _ref$isMetadataBlock,
499
+ _ref$pickerVariant = _ref.pickerVariant,
500
+ pickerVariant = _ref$pickerVariant === void 0 ? "inline" : _ref$pickerVariant;
236
501
  var _useTranslation = reactI18next.useTranslation(),
237
502
  t = _useTranslation.t;
238
503
  var _useState = react.useState(false),
@@ -263,8 +528,13 @@ var Tags = function Tags(_ref) {
263
528
  // @ts-ignore
264
529
  showSuccessToastr && utils.showThumbsUpToastr();
265
530
  };
531
+ var handleCreateTag = function handleCreateTag(tagName) {
532
+ setIsTagsDropdownVisible(false);
533
+ onTagCreate(tagName);
534
+ };
535
+ var isPopoverPicker = pickerVariant === "popover";
266
536
  var isAddTagsButtonVisible = !showAddTagsOnTitle && !isTagsDropdownVisible;
267
- var isTagsBodyVisible = neetoCist.isNotEmpty(selectedTags) || isTagsDropdownVisible || isAddTagsButtonVisible;
537
+ var isTagsBodyVisible = neetoCist.isNotEmpty(selectedTags) || isTagsDropdownVisible || isAddTagsButtonVisible || isPopoverPicker;
268
538
  var titleComponentProps = {
269
539
  isLoading: isLoading,
270
540
  isUpdating: isUpdating,
@@ -287,10 +557,7 @@ var Tags = function Tags(_ref) {
287
557
  defaultMenuIsOpen: showAddTagsOnTitle,
288
558
  tags: tags,
289
559
  onChange: handleAddExistingTag,
290
- onCreateOption: function onCreateOption(tagName) {
291
- setIsTagsDropdownVisible(false);
292
- onTagCreate(tagName);
293
- },
560
+ onCreateOption: handleCreateTag,
294
561
  selectProps: selectProps
295
562
  };
296
563
  return /*#__PURE__*/jsxRuntime.jsxs(Container, {
@@ -300,16 +567,26 @@ var Tags = function Tags(_ref) {
300
567
  isMetadataBlock: isMetadataBlock,
301
568
  isTagsBodyVisible: isTagsBodyVisible,
302
569
  titleComponentProps: titleComponentProps,
303
- children: [neetoCist.isNotEmpty(selectedTags) && /*#__PURE__*/jsxRuntime.jsx(TagsList, _objectSpread({}, tagsListProps)), isTagsDropdownVisible && /*#__PURE__*/jsxRuntime.jsx(TagsSelector, _objectSpread({}, tagsSelectorProps)), isAddTagsButtonVisible && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, _objectSpread({
304
- disabled: isDisabled,
305
- icon: lucideReact.Plus,
306
- label: t("neetoTags.button.addTag", constants.SINGULAR),
307
- size: "sm",
308
- variant: "link",
309
- onClick: function onClick() {
310
- return setIsTagsDropdownVisible(true);
311
- }
312
- }, buttonProps))]
570
+ children: [neetoCist.isNotEmpty(selectedTags) && /*#__PURE__*/jsxRuntime.jsx(TagsList, _objectSpread({}, tagsListProps)), isPopoverPicker ? /*#__PURE__*/jsxRuntime.jsx(PopoverTagsSelector, {
571
+ buttonProps: buttonProps,
572
+ isDisabled: isDisabled,
573
+ tags: tags,
574
+ open: isTagsDropdownVisible,
575
+ onChange: handleAddExistingTag,
576
+ onCreateOption: handleCreateTag,
577
+ onOpenChange: setIsTagsDropdownVisible
578
+ }) : /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
579
+ children: [isTagsDropdownVisible && /*#__PURE__*/jsxRuntime.jsx(TagsSelector, _objectSpread({}, tagsSelectorProps)), isAddTagsButtonVisible && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, _objectSpread({
580
+ disabled: isDisabled,
581
+ icon: lucideReact.Plus,
582
+ label: t("neetoTags.button.addTag", constants.SINGULAR),
583
+ size: "sm",
584
+ variant: "link",
585
+ onClick: function onClick() {
586
+ return setIsTagsDropdownVisible(true);
587
+ }
588
+ }, buttonProps))]
589
+ })]
313
590
  });
314
591
  };
315
592
 
@@ -1 +1 @@
1
- {"version":3,"file":"TagsComponent.js","sources":["../../../app/javascript/src/v2/components/Tags/constants.js","../../../app/javascript/src/v2/components/Tags/Title.jsx","../../../app/javascript/src/v2/components/Tags/TitleActionBlock.jsx","../../../app/javascript/src/v2/components/Tags/Container.jsx","../../../app/javascript/src/v2/components/Tags/TagsList.jsx","../../../app/javascript/src/v2/components/Tags/TagsSelector.jsx","../../../app/javascript/src/v2/components/Tags/index.jsx"],"sourcesContent":["import { t } from \"i18next\";\n\nexport const KEYBOARD_SHORTCUTS = {\n addTag: {\n sequence: \"t\",\n description: t(\"neetoTags.shortcuts.addTag\"),\n },\n};\n","import { useEffect, useState } from \"react\";\n\nimport { Label, Spinner } from \"@bigbinary/neeto-atoms\";\nimport { Check } from \"lucide-react\";\nimport { PLURAL } from \"neetocommons/v2/constants\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Title = ({ titleProps = {}, title, isUpdating, isLoading }) => {\n const { t } = useTranslation();\n const tagsTitle = title || t(\"neetoTags.common.tag\", PLURAL);\n\n const [didStartUpdate, setDidStartUpdate] = useState(false);\n const [isCheckIconVisible, setIsCheckIconVisible] = useState(false);\n\n useEffect(() => {\n if (!isUpdating) return;\n\n setDidStartUpdate(true);\n }, [isUpdating]);\n\n useEffect(() => {\n if (isUpdating || !didStartUpdate) return;\n\n setIsCheckIconVisible(true);\n setDidStartUpdate(false);\n setTimeout(() => {\n setIsCheckIconVisible(false);\n }, 5000);\n }, [didStartUpdate, isUpdating]);\n\n return (\n <div className=\"flex items-center gap-2\">\n <Label {...titleProps}>{tagsTitle}</Label>\n <div className=\"inline-flex h-6 items-center\">\n {(isUpdating || isLoading) && <Spinner />}\n {!isUpdating && isCheckIconVisible && (\n <Check className=\"text-success-solid\" size={20} />\n )}\n </div>\n </div>\n );\n};\n\nexport default Title;\n","import { Button } from \"@bigbinary/neeto-atoms\";\nimport { Settings } from \"lucide-react\";\nimport { not } from \"ramda\";\n\nconst TitleActionBlock = ({ isDisabled, setIsTagsDropdownVisible }) => (\n <Button\n data-testid=\"neeto-tags-add-tag-button\"\n disabled={isDisabled}\n icon={Settings}\n size=\"icon-sm\"\n variant=\"ghost\"\n onClick={event => {\n event.stopPropagation();\n setIsTagsDropdownVisible(not);\n }}\n />\n);\n\nexport default TitleActionBlock;\n","import classNames from \"classnames\";\nimport { not } from \"ramda\";\n\nimport Title from \"./Title\";\nimport TitleActionBlock from \"./TitleActionBlock\";\n\nconst Container = ({\n isMetadataBlock,\n containerProps,\n actionBlockProps,\n titleComponentProps,\n children,\n isTagsBodyVisible,\n bodyProps,\n}) => {\n if (isMetadataBlock) {\n return (\n <div\n className=\"space-y-4 rounded-lg border border-border bg-background p-4\"\n {...containerProps}\n >\n <div className=\"flex items-center justify-between\">\n <Title {...titleComponentProps} />\n <TitleActionBlock {...actionBlockProps} />\n </div>\n {isTagsBodyVisible && children}\n </div>\n );\n }\n\n const { isDisabled, setIsTagsDropdownVisible } = actionBlockProps;\n const onHeaderClick = () => {\n !isDisabled && setIsTagsDropdownVisible(not);\n };\n\n return (\n <div className=\"flex w-full flex-col items-start gap-2\" {...containerProps}>\n {titleComponentProps.showTitleBar && (\n <div\n className={classNames(\n \"flex w-full cursor-pointer items-center justify-between gap-2 text-foreground\",\n titleComponentProps.containerClassName\n )}\n onClick={onHeaderClick}\n >\n <Title {...titleComponentProps} />\n {titleComponentProps.showAddTagsOnTitle && (\n <TitleActionBlock {...actionBlockProps} />\n )}\n </div>\n )}\n {isTagsBodyVisible && (\n <div\n className=\"w-full rounded-lg border border-border bg-background p-4\"\n {...bodyProps}\n >\n {children}\n </div>\n )}\n </div>\n );\n};\n\nexport default Container;\n","import { Badge } from \"@bigbinary/neeto-atoms\";\nimport classNames from \"classnames\";\nimport { isNotEmpty } from \"neetocist\";\n\nimport { TAG_STYLE_TO_BADGE_VARIANT } from \"v2/common/constants\";\n\nconst TagsList = ({ selectedTags, isDisabled, handleDeleteTag, tagProps }) => (\n <div\n className={classNames(\n \"flex flex-row flex-wrap items-start justify-start gap-2 break-all\",\n { \"mb-2\": isNotEmpty(selectedTags) }\n )}\n >\n {selectedTags?.map(tag => (\n <Badge\n disabled={isDisabled}\n key={tag.value}\n label={tag.label}\n variant={TAG_STYLE_TO_BADGE_VARIANT[tag.style] || \"secondary\"}\n className={classNames({\n \"cursor-not-allowed opacity-50\": isDisabled,\n })}\n onDismiss={isDisabled ? undefined : () => handleDeleteTag(tag)}\n {...tagProps}\n />\n ))}\n </div>\n);\n\nexport default TagsList;\n","import { useRef } from \"react\";\n\nimport { Badge, Select } from \"@bigbinary/neeto-atoms\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { TAG_STYLE_TO_BADGE_VARIANT } from \"v2/common/constants\";\n\nconst renderTagOption = option => (\n <Badge\n label={option.label}\n variant={TAG_STYLE_TO_BADGE_VARIANT[option.style] || \"secondary\"}\n />\n);\n\nconst TagsSelector = ({\n defaultMenuIsOpen,\n tags,\n onChange,\n onCreateOption,\n selectProps,\n}) => {\n const isMenuOpen = useRef(defaultMenuIsOpen);\n\n const { t } = useTranslation();\n\n const handleOpenChange = open => {\n isMenuOpen.current = open;\n if (open) {\n selectProps.onMenuOpen?.();\n } else {\n selectProps.onMenuClose?.();\n }\n };\n\n const handleChange = value => {\n const selectedTag = tags.find(tag => tag.value === value);\n if (selectedTag) {\n onChange(selectedTag);\n }\n };\n\n return (\n <Select\n isCreatable\n isSearchable\n formatOptionLabel={renderTagOption}\n options={tags}\n placeholder={t(\"neetoTags.placeholder.selectOrCreateTag\")}\n {...{ ...selectProps, onCreateOption }}\n onChange={handleChange}\n onOpenChange={handleOpenChange}\n />\n );\n};\n\nexport default TagsSelector;\n","import { useMemo, useState } from \"react\";\n\nimport { Button } from \"@bigbinary/neeto-atoms\";\nimport { Plus } from \"lucide-react\";\nimport { isNotEmpty } from \"neetocist\";\nimport { SINGULAR } from \"neetocommons/v2/constants\";\nimport { showThumbsUpToastr } from \"neetocommons/v2/utils\";\nimport useHotkeys from \"neetohotkeys\";\nimport { pluck } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { KEYBOARD_SHORTCUTS } from \"./constants\";\nimport Container from \"./Container\";\nimport TagsList from \"./TagsList\";\nimport TagsSelector from \"./TagsSelector\";\n\n/**\n * A component that helps to manage tags.\n * Renders selected tags, has dropdown to list down available tags\n * and allows user to remove tags from the list.\n */\nconst Tags = ({\n title = \"\",\n allTags,\n selectedTags,\n onTagSelect,\n onTagCreate,\n onTagDelete,\n tagProps,\n selectProps = {},\n buttonProps,\n showSuccessToastr = false,\n titleProps,\n containerProps = {},\n isUpdating = false,\n showAddTagsOnTitle = true,\n isLoading = false,\n showTitleBar = true,\n bodyProps = {},\n isDisabled = false,\n isMetadataBlock = false,\n}) => {\n const { t } = useTranslation();\n\n const [isTagsDropdownVisible, setIsTagsDropdownVisible] = useState(false);\n\n useHotkeys(KEYBOARD_SHORTCUTS.addTag.sequence, event => {\n event.preventDefault();\n setIsTagsDropdownVisible(true);\n });\n\n const tags = useMemo(() => {\n if (!allTags) return [];\n\n if (!selectedTags) return allTags;\n\n const selectedTagValues = pluck(\"value\", selectedTags);\n\n return allTags.filter(({ value }) => !selectedTagValues.includes(value));\n }, [allTags, selectedTags]);\n\n const handleAddExistingTag = tag => {\n setIsTagsDropdownVisible(false);\n onTagSelect(tag);\n // @ts-ignore\n showSuccessToastr && showThumbsUpToastr();\n };\n\n const handleDeleteTag = tag => {\n onTagDelete(tag);\n // @ts-ignore\n showSuccessToastr && showThumbsUpToastr();\n };\n\n const isAddTagsButtonVisible = !showAddTagsOnTitle && !isTagsDropdownVisible;\n const isTagsBodyVisible =\n isNotEmpty(selectedTags) || isTagsDropdownVisible || isAddTagsButtonVisible;\n\n const titleComponentProps = {\n isLoading,\n isUpdating,\n showAddTagsOnTitle,\n title,\n titleProps,\n showTitleBar,\n };\n\n const actionBlockProps = { isDisabled, setIsTagsDropdownVisible };\n\n const tagsListProps = { handleDeleteTag, isDisabled, selectedTags, tagProps };\n\n const tagsSelectorProps = {\n defaultMenuIsOpen: showAddTagsOnTitle,\n tags,\n onChange: handleAddExistingTag,\n onCreateOption: tagName => {\n setIsTagsDropdownVisible(false);\n onTagCreate(tagName);\n },\n selectProps,\n };\n\n return (\n <Container\n {...{\n actionBlockProps,\n bodyProps,\n containerProps,\n isMetadataBlock,\n isTagsBodyVisible,\n titleComponentProps,\n }}\n >\n {isNotEmpty(selectedTags) && <TagsList {...tagsListProps} />}\n {isTagsDropdownVisible && <TagsSelector {...tagsSelectorProps} />}\n {isAddTagsButtonVisible && (\n <Button\n disabled={isDisabled}\n icon={Plus}\n label={t(\"neetoTags.button.addTag\", SINGULAR)}\n size=\"sm\"\n variant=\"link\"\n onClick={() => setIsTagsDropdownVisible(true)}\n {...buttonProps}\n />\n )}\n </Container>\n );\n};\n\nexport default Tags;\n"],"names":["KEYBOARD_SHORTCUTS","addTag","sequence","description","t","Title","_ref","_ref$titleProps","titleProps","title","isUpdating","isLoading","_useTranslation","useTranslation","tagsTitle","PLURAL","_useState","useState","_useState2","_slicedToArray","didStartUpdate","setDidStartUpdate","_useState3","_useState4","isCheckIconVisible","setIsCheckIconVisible","useEffect","setTimeout","_jsxs","className","children","_jsx","Label","_objectSpread","Spinner","Check","size","TitleActionBlock","isDisabled","setIsTagsDropdownVisible","Button","disabled","icon","Settings","variant","onClick","event","stopPropagation","not","Container","isMetadataBlock","containerProps","actionBlockProps","titleComponentProps","isTagsBodyVisible","bodyProps","onHeaderClick","showTitleBar","classNames","containerClassName","showAddTagsOnTitle","TagsList","selectedTags","handleDeleteTag","tagProps","isNotEmpty","map","tag","Badge","label","TAG_STYLE_TO_BADGE_VARIANT","style","onDismiss","undefined","value","renderTagOption","option","TagsSelector","defaultMenuIsOpen","tags","onChange","onCreateOption","selectProps","isMenuOpen","useRef","handleOpenChange","open","current","_selectProps$onMenuOp","onMenuOpen","call","_selectProps$onMenuCl","onMenuClose","handleChange","selectedTag","find","Select","isCreatable","isSearchable","formatOptionLabel","options","placeholder","onOpenChange","Tags","_ref$title","allTags","onTagSelect","onTagCreate","onTagDelete","_ref$selectProps","buttonProps","_ref$showSuccessToast","showSuccessToastr","_ref$containerProps","_ref$isUpdating","_ref$showAddTagsOnTit","_ref$isLoading","_ref$showTitleBar","_ref$bodyProps","_ref$isDisabled","_ref$isMetadataBlock","isTagsDropdownVisible","useHotkeys","preventDefault","useMemo","selectedTagValues","pluck","filter","_ref2","includes","handleAddExistingTag","showThumbsUpToastr","isAddTagsButtonVisible","tagsListProps","tagsSelectorProps","tagName","Plus","SINGULAR"],"mappings":"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"}
1
+ {"version":3,"file":"TagsComponent.js","sources":["../../../app/javascript/src/v2/components/Tags/constants.js","../../../app/javascript/src/v2/components/Tags/Title.jsx","../../../app/javascript/src/v2/components/Tags/TitleActionBlock.jsx","../../../app/javascript/src/v2/components/Tags/Container.jsx","../../../app/javascript/src/v2/components/Tags/PopoverTagsSelector.jsx","../../../app/javascript/src/v2/components/Tags/TagsList.jsx","../../../app/javascript/src/v2/components/Tags/TagsSelector.jsx","../../../app/javascript/src/v2/components/Tags/index.jsx"],"sourcesContent":["import { t } from \"i18next\";\n\nexport const KEYBOARD_SHORTCUTS = {\n addTag: {\n sequence: \"t\",\n description: t(\"neetoTags.shortcuts.addTag\"),\n },\n};\n\nexport const POPOVER_PANEL_WIDTH = 256;\nexport const POPOVER_VIEWPORT_MARGIN = 8;\nexport const POPOVER_TRIGGER_GAP = 4;\n","import { useEffect, useState } from \"react\";\n\nimport { Label, Spinner } from \"@bigbinary/neeto-atoms\";\nimport { Check } from \"lucide-react\";\nimport { PLURAL } from \"neetocommons/v2/constants\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Title = ({ titleProps = {}, title, isUpdating, isLoading }) => {\n const { t } = useTranslation();\n const tagsTitle = title || t(\"neetoTags.common.tag\", PLURAL);\n\n const [didStartUpdate, setDidStartUpdate] = useState(false);\n const [isCheckIconVisible, setIsCheckIconVisible] = useState(false);\n\n useEffect(() => {\n if (!isUpdating) return;\n\n setDidStartUpdate(true);\n }, [isUpdating]);\n\n useEffect(() => {\n if (isUpdating || !didStartUpdate) return;\n\n setIsCheckIconVisible(true);\n setDidStartUpdate(false);\n setTimeout(() => {\n setIsCheckIconVisible(false);\n }, 5000);\n }, [didStartUpdate, isUpdating]);\n\n return (\n <div className=\"flex items-center gap-2\">\n <Label {...titleProps}>{tagsTitle}</Label>\n <div className=\"inline-flex h-6 items-center\">\n {(isUpdating || isLoading) && <Spinner />}\n {!isUpdating && isCheckIconVisible && (\n <Check className=\"text-success-solid\" size={20} />\n )}\n </div>\n </div>\n );\n};\n\nexport default Title;\n","import { Button } from \"@bigbinary/neeto-atoms\";\nimport { Settings } from \"lucide-react\";\nimport { not } from \"ramda\";\n\nconst TitleActionBlock = ({ isDisabled, setIsTagsDropdownVisible }) => (\n <Button\n data-testid=\"neeto-tags-add-tag-button\"\n disabled={isDisabled}\n icon={Settings}\n size=\"icon-sm\"\n variant=\"ghost\"\n onClick={event => {\n event.stopPropagation();\n setIsTagsDropdownVisible(not);\n }}\n />\n);\n\nexport default TitleActionBlock;\n","import classNames from \"classnames\";\nimport { not } from \"ramda\";\n\nimport Title from \"./Title\";\nimport TitleActionBlock from \"./TitleActionBlock\";\n\nconst Container = ({\n isMetadataBlock,\n containerProps,\n actionBlockProps,\n titleComponentProps,\n children,\n isTagsBodyVisible,\n bodyProps,\n}) => {\n if (isMetadataBlock) {\n return (\n <div\n className=\"space-y-4 rounded-lg border border-border bg-background p-4\"\n {...containerProps}\n >\n <div className=\"flex items-center justify-between\">\n <Title {...titleComponentProps} />\n <TitleActionBlock {...actionBlockProps} />\n </div>\n {isTagsBodyVisible && children}\n </div>\n );\n }\n\n const { isDisabled, setIsTagsDropdownVisible } = actionBlockProps;\n const onHeaderClick = () => {\n !isDisabled && setIsTagsDropdownVisible(not);\n };\n\n return (\n <div className=\"flex w-full flex-col items-start gap-2\" {...containerProps}>\n {titleComponentProps.showTitleBar && (\n <div\n className={classNames(\n \"flex w-full cursor-pointer items-center justify-between gap-2 text-foreground\",\n titleComponentProps.containerClassName\n )}\n onClick={onHeaderClick}\n >\n <Title {...titleComponentProps} />\n {titleComponentProps.showAddTagsOnTitle && (\n <TitleActionBlock {...actionBlockProps} />\n )}\n </div>\n )}\n {isTagsBodyVisible && (\n <div\n className=\"w-full rounded-lg border border-border bg-background p-4\"\n {...bodyProps}\n >\n {children}\n </div>\n )}\n </div>\n );\n};\n\nexport default Container;\n","import {\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { Badge, Button, Input } from \"@bigbinary/neeto-atoms\";\nimport classNames from \"classnames\";\nimport { Plus, Search } from \"lucide-react\";\nimport { isNotEmpty } from \"neetocist\";\nimport { SINGULAR } from \"neetocommons/v2/constants\";\nimport { createPortal } from \"react-dom\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { TAG_STYLE_TO_BADGE_VARIANT } from \"v2/common/constants\";\n\nimport {\n POPOVER_PANEL_WIDTH,\n POPOVER_TRIGGER_GAP,\n POPOVER_VIEWPORT_MARGIN,\n} from \"./constants\";\n\n// A compact tag picker whose search-and-create input lives inside the dropdown\n// panel, instead of expanding the row into a full-width select. Opt-in through\n// the `pickerVariant=\"popover\"` prop on the Tags component; the default inline\n// selector is left untouched. The panel is rendered in a portal with fixed,\n// viewport-clamped positioning so it never widens (and horizontally overflows)\n// the detail column it sits in.\nconst PopoverTagsSelector = ({\n open,\n onOpenChange,\n tags,\n onChange,\n onCreateOption,\n buttonProps = {},\n isDisabled = false,\n}) => {\n const { t } = useTranslation();\n\n const triggerRef = useRef(null);\n const panelRef = useRef(null);\n const rafRef = useRef(null);\n const listboxId = useId();\n\n const [query, setQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n // `null` until measured, so the panel stays hidden for its first paint and\n // never flashes at the top-left corner before it is positioned.\n const [coords, setCoords] = useState(null);\n\n const trimmedQuery = query.trim();\n\n const filteredTags = useMemo(() => {\n if (!trimmedQuery) return tags;\n const search = trimmedQuery.toLowerCase();\n\n return tags.filter(({ label }) => label.toLowerCase().includes(search));\n }, [tags, trimmedQuery]);\n\n const canCreate =\n isNotEmpty(trimmedQuery) &&\n !tags.some(\n ({ label }) => label.toLowerCase() === trimmedQuery.toLowerCase()\n );\n\n const optionCount = filteredTags.length + (canCreate ? 1 : 0);\n const optionId = index => `${listboxId}-option-${index}`;\n\n const focusTrigger = () =>\n triggerRef.current?.querySelector(\"button\")?.focus({ preventScroll: true });\n\n const close = useCallback(\n ({ restoreFocus = false } = {}) => {\n setQuery(\"\");\n setActiveIndex(0);\n setCoords(null);\n onOpenChange(false);\n // Return focus to the trigger only for keyboard / selection dismissals;\n // an outside click should leave focus wherever the user clicked.\n if (restoreFocus) focusTrigger();\n },\n [onOpenChange]\n );\n\n const handleSelect = tag => {\n onChange(tag);\n close({ restoreFocus: true });\n };\n\n const handleCreate = () => {\n onCreateOption(trimmedQuery);\n close({ restoreFocus: true });\n };\n\n const handleQueryChange = event => {\n setQuery(event.target.value);\n setActiveIndex(0);\n };\n\n const handleKeyDown = event => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n close({ restoreFocus: true });\n } else if (event.key === \"ArrowDown\" && optionCount > 0) {\n event.preventDefault();\n setActiveIndex(previous => (previous + 1) % optionCount);\n } else if (event.key === \"ArrowUp\" && optionCount > 0) {\n event.preventDefault();\n setActiveIndex(previous => (previous - 1 + optionCount) % optionCount);\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n if (activeIndex < filteredTags.length) {\n handleSelect(filteredTags[activeIndex]);\n } else if (canCreate) {\n handleCreate();\n }\n }\n };\n\n const updatePosition = useCallback(() => {\n const trigger = triggerRef.current;\n if (!trigger) return;\n\n const rect = trigger.getBoundingClientRect();\n const panelHeight = panelRef.current?.offsetHeight ?? 0;\n\n const left = Math.max(\n POPOVER_VIEWPORT_MARGIN,\n Math.min(\n rect.left,\n window.innerWidth - POPOVER_PANEL_WIDTH - POPOVER_VIEWPORT_MARGIN\n )\n );\n\n const belowTop = rect.bottom + POPOVER_TRIGGER_GAP;\n const overflowsBelow =\n belowTop + panelHeight + POPOVER_VIEWPORT_MARGIN > window.innerHeight;\n\n const fitsAbove =\n rect.top - POPOVER_TRIGGER_GAP - panelHeight > POPOVER_VIEWPORT_MARGIN;\n\n const top =\n overflowsBelow && fitsAbove\n ? rect.top - POPOVER_TRIGGER_GAP - panelHeight\n : belowTop;\n\n setCoords({ top, left });\n }, []);\n\n // Position on open and whenever the panel's height changes (list filtering),\n // synchronously before paint so the panel is never seen mispositioned.\n useLayoutEffect(() => {\n if (open) updatePosition();\n }, [open, optionCount, updatePosition]);\n\n useEffect(() => {\n if (!open) return undefined;\n\n // Focus the search field without scrolling the surrounding column.\n panelRef.current?.querySelector(\"input\")?.focus({ preventScroll: true });\n\n const handleClickOutside = event => {\n if (triggerRef.current?.contains(event.target)) return;\n\n if (panelRef.current?.contains(event.target)) return;\n close();\n };\n\n // Coalesce scroll/resize repositioning into one measurement per frame to\n // avoid layout thrashing on busy scroll containers.\n const scheduleReposition = () => {\n if (rafRef.current) return;\n rafRef.current = window.requestAnimationFrame(() => {\n rafRef.current = null;\n updatePosition();\n });\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n window.addEventListener(\"resize\", scheduleReposition);\n window.addEventListener(\"scroll\", scheduleReposition, true);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n window.removeEventListener(\"resize\", scheduleReposition);\n window.removeEventListener(\"scroll\", scheduleReposition, true);\n if (rafRef.current) window.cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n };\n }, [open, close, updatePosition]);\n\n const optionClassName = isActive =>\n classNames(\n \"flex w-full cursor-pointer items-center gap-2 rounded px-2 py-1.5 text-start text-sm\",\n isActive ? \"bg-accent text-accent-foreground\" : \"hover:bg-accent\"\n );\n\n return (\n <div className=\"inline-block\" ref={triggerRef}>\n <Button\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={isDisabled}\n icon={Plus}\n label={t(\"neetoTags.button.addTag\", SINGULAR)}\n size=\"sm\"\n variant=\"link\"\n onClick={() => onOpenChange(!open)}\n {...buttonProps}\n />\n {open &&\n createPortal(\n <div\n className=\"bg-popover text-popover-foreground border-border fixed z-50 overflow-hidden rounded-md border shadow-md\"\n ref={panelRef}\n style={{\n top: coords?.top ?? 0,\n left: coords?.left ?? 0,\n width: POPOVER_PANEL_WIDTH,\n visibility: coords ? \"visible\" : \"hidden\",\n }}\n >\n <div className=\"border-border border-b p-2\">\n <Input\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-expanded={open}\n placeholder={t(\"neetoTags.placeholder.searchOrCreateTags\")}\n prefix={<Search size={14} />}\n role=\"combobox\"\n size=\"small\"\n value={query}\n aria-activedescendant={\n optionCount > 0 ? optionId(activeIndex) : undefined\n }\n onChange={handleQueryChange}\n onKeyDown={handleKeyDown}\n />\n </div>\n <div\n className=\"max-h-56 overflow-y-auto p-1\"\n id={listboxId}\n role=\"listbox\"\n >\n {filteredTags.map((tag, index) => (\n <button\n aria-selected={index === activeIndex}\n className={optionClassName(index === activeIndex)}\n id={optionId(index)}\n key={tag.value}\n role=\"option\"\n type=\"button\"\n onClick={() => handleSelect(tag)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n <Badge\n label={tag.label}\n variant={\n TAG_STYLE_TO_BADGE_VARIANT[tag.style] || \"secondary\"\n }\n />\n </button>\n ))}\n {canCreate && (\n <button\n aria-selected={activeIndex === filteredTags.length}\n id={optionId(filteredTags.length)}\n role=\"option\"\n type=\"button\"\n className={optionClassName(\n activeIndex === filteredTags.length\n )}\n onClick={handleCreate}\n onMouseEnter={() => setActiveIndex(filteredTags.length)}\n >\n <Plus size={14} />\n <span className=\"truncate\">\n {t(\"neetoTags.button.createNewTag\")}\n {\": \"}\n <span className=\"font-medium\">{trimmedQuery}</span>\n </span>\n </button>\n )}\n {optionCount === 0 && (\n <div className=\"text-muted-foreground px-2 py-2 text-sm\">\n {t(\"neetoTags.common.noTagsFound\")}\n </div>\n )}\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n};\n\nexport default PopoverTagsSelector;\n","import { Badge } from \"@bigbinary/neeto-atoms\";\nimport classNames from \"classnames\";\nimport { isNotEmpty } from \"neetocist\";\n\nimport { TAG_STYLE_TO_BADGE_VARIANT } from \"v2/common/constants\";\n\nconst TagsList = ({ selectedTags, isDisabled, handleDeleteTag, tagProps }) => (\n <div\n className={classNames(\n \"flex flex-row flex-wrap items-start justify-start gap-2 break-all\",\n { \"mb-2\": isNotEmpty(selectedTags) }\n )}\n >\n {selectedTags?.map(tag => (\n <Badge\n disabled={isDisabled}\n key={tag.value}\n label={tag.label}\n variant={TAG_STYLE_TO_BADGE_VARIANT[tag.style] || \"secondary\"}\n className={classNames({\n \"cursor-not-allowed opacity-50\": isDisabled,\n })}\n onDismiss={isDisabled ? undefined : () => handleDeleteTag(tag)}\n {...tagProps}\n />\n ))}\n </div>\n);\n\nexport default TagsList;\n","import { useRef } from \"react\";\n\nimport { Badge, Select } from \"@bigbinary/neeto-atoms\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { TAG_STYLE_TO_BADGE_VARIANT } from \"v2/common/constants\";\n\nconst renderTagOption = option => (\n <Badge\n label={option.label}\n variant={TAG_STYLE_TO_BADGE_VARIANT[option.style] || \"secondary\"}\n />\n);\n\nconst TagsSelector = ({\n defaultMenuIsOpen,\n tags,\n onChange,\n onCreateOption,\n selectProps,\n}) => {\n const isMenuOpen = useRef(defaultMenuIsOpen);\n\n const { t } = useTranslation();\n\n const handleOpenChange = open => {\n isMenuOpen.current = open;\n if (open) {\n selectProps.onMenuOpen?.();\n } else {\n selectProps.onMenuClose?.();\n }\n };\n\n const handleChange = value => {\n const selectedTag = tags.find(tag => tag.value === value);\n if (selectedTag) {\n onChange(selectedTag);\n }\n };\n\n return (\n <Select\n isCreatable\n isSearchable\n formatOptionLabel={renderTagOption}\n options={tags}\n placeholder={t(\"neetoTags.placeholder.selectOrCreateTag\")}\n {...{ ...selectProps, onCreateOption }}\n onChange={handleChange}\n onOpenChange={handleOpenChange}\n />\n );\n};\n\nexport default TagsSelector;\n","import { useMemo, useState } from \"react\";\n\nimport { Button } from \"@bigbinary/neeto-atoms\";\nimport { Plus } from \"lucide-react\";\nimport { isNotEmpty } from \"neetocist\";\nimport { SINGULAR } from \"neetocommons/v2/constants\";\nimport { showThumbsUpToastr } from \"neetocommons/v2/utils\";\nimport useHotkeys from \"neetohotkeys\";\nimport { pluck } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { KEYBOARD_SHORTCUTS } from \"./constants\";\nimport Container from \"./Container\";\nimport PopoverTagsSelector from \"./PopoverTagsSelector\";\nimport TagsList from \"./TagsList\";\nimport TagsSelector from \"./TagsSelector\";\n\n/**\n * A component that helps to manage tags.\n * Renders selected tags, has dropdown to list down available tags\n * and allows user to remove tags from the list.\n */\nconst Tags = ({\n title = \"\",\n allTags,\n selectedTags,\n onTagSelect,\n onTagCreate,\n onTagDelete,\n tagProps,\n selectProps = {},\n buttonProps,\n showSuccessToastr = false,\n titleProps,\n containerProps = {},\n isUpdating = false,\n showAddTagsOnTitle = true,\n isLoading = false,\n showTitleBar = true,\n bodyProps = {},\n isDisabled = false,\n isMetadataBlock = false,\n pickerVariant = \"inline\",\n}) => {\n const { t } = useTranslation();\n\n const [isTagsDropdownVisible, setIsTagsDropdownVisible] = useState(false);\n\n useHotkeys(KEYBOARD_SHORTCUTS.addTag.sequence, event => {\n event.preventDefault();\n setIsTagsDropdownVisible(true);\n });\n\n const tags = useMemo(() => {\n if (!allTags) return [];\n\n if (!selectedTags) return allTags;\n\n const selectedTagValues = pluck(\"value\", selectedTags);\n\n return allTags.filter(({ value }) => !selectedTagValues.includes(value));\n }, [allTags, selectedTags]);\n\n const handleAddExistingTag = tag => {\n setIsTagsDropdownVisible(false);\n onTagSelect(tag);\n // @ts-ignore\n showSuccessToastr && showThumbsUpToastr();\n };\n\n const handleDeleteTag = tag => {\n onTagDelete(tag);\n // @ts-ignore\n showSuccessToastr && showThumbsUpToastr();\n };\n\n const handleCreateTag = tagName => {\n setIsTagsDropdownVisible(false);\n onTagCreate(tagName);\n };\n\n const isPopoverPicker = pickerVariant === \"popover\";\n const isAddTagsButtonVisible = !showAddTagsOnTitle && !isTagsDropdownVisible;\n const isTagsBodyVisible =\n isNotEmpty(selectedTags) ||\n isTagsDropdownVisible ||\n isAddTagsButtonVisible ||\n isPopoverPicker;\n\n const titleComponentProps = {\n isLoading,\n isUpdating,\n showAddTagsOnTitle,\n title,\n titleProps,\n showTitleBar,\n };\n\n const actionBlockProps = { isDisabled, setIsTagsDropdownVisible };\n\n const tagsListProps = { handleDeleteTag, isDisabled, selectedTags, tagProps };\n\n const tagsSelectorProps = {\n defaultMenuIsOpen: showAddTagsOnTitle,\n tags,\n onChange: handleAddExistingTag,\n onCreateOption: handleCreateTag,\n selectProps,\n };\n\n return (\n <Container\n {...{\n actionBlockProps,\n bodyProps,\n containerProps,\n isMetadataBlock,\n isTagsBodyVisible,\n titleComponentProps,\n }}\n >\n {isNotEmpty(selectedTags) && <TagsList {...tagsListProps} />}\n {isPopoverPicker ? (\n <PopoverTagsSelector\n {...{ buttonProps, isDisabled, tags }}\n open={isTagsDropdownVisible}\n onChange={handleAddExistingTag}\n onCreateOption={handleCreateTag}\n onOpenChange={setIsTagsDropdownVisible}\n />\n ) : (\n <>\n {isTagsDropdownVisible && <TagsSelector {...tagsSelectorProps} />}\n {isAddTagsButtonVisible && (\n <Button\n disabled={isDisabled}\n icon={Plus}\n label={t(\"neetoTags.button.addTag\", SINGULAR)}\n size=\"sm\"\n variant=\"link\"\n onClick={() => setIsTagsDropdownVisible(true)}\n {...buttonProps}\n />\n )}\n </>\n )}\n </Container>\n );\n};\n\nexport default Tags;\n"],"names":["KEYBOARD_SHORTCUTS","addTag","sequence","description","t","POPOVER_PANEL_WIDTH","POPOVER_VIEWPORT_MARGIN","POPOVER_TRIGGER_GAP","Title","_ref","_ref$titleProps","titleProps","title","isUpdating","isLoading","_useTranslation","useTranslation","tagsTitle","PLURAL","_useState","useState","_useState2","_slicedToArray","didStartUpdate","setDidStartUpdate","_useState3","_useState4","isCheckIconVisible","setIsCheckIconVisible","useEffect","setTimeout","_jsxs","className","children","_jsx","Label","_objectSpread","Spinner","Check","size","TitleActionBlock","isDisabled","setIsTagsDropdownVisible","Button","disabled","icon","Settings","variant","onClick","event","stopPropagation","not","Container","isMetadataBlock","containerProps","actionBlockProps","titleComponentProps","isTagsBodyVisible","bodyProps","onHeaderClick","showTitleBar","classNames","containerClassName","showAddTagsOnTitle","PopoverTagsSelector","_coords$top","_coords$left","open","onOpenChange","tags","onChange","onCreateOption","_ref$buttonProps","buttonProps","_ref$isDisabled","triggerRef","useRef","panelRef","rafRef","listboxId","useId","query","setQuery","activeIndex","setActiveIndex","_useState5","_useState6","coords","setCoords","trimmedQuery","trim","filteredTags","useMemo","search","toLowerCase","filter","_ref2","label","includes","canCreate","isNotEmpty","some","_ref3","optionCount","length","optionId","index","concat","focusTrigger","_triggerRef$current","current","querySelector","focus","preventScroll","close","useCallback","_ref4","arguments","undefined","_ref4$restoreFocus","restoreFocus","handleSelect","tag","handleCreate","handleQueryChange","target","value","handleKeyDown","key","preventDefault","previous","updatePosition","_panelRef$current$off","_panelRef$current","trigger","rect","getBoundingClientRect","panelHeight","offsetHeight","left","Math","max","min","window","innerWidth","belowTop","bottom","overflowsBelow","innerHeight","fitsAbove","top","useLayoutEffect","_panelRef$current2","handleClickOutside","_triggerRef$current2","_panelRef$current3","contains","scheduleReposition","requestAnimationFrame","document","addEventListener","removeEventListener","cancelAnimationFrame","optionClassName","isActive","ref","Plus","SINGULAR","createPortal","style","width","visibility","Input","placeholder","prefix","Search","role","onKeyDown","id","map","type","onMouseEnter","Badge","TAG_STYLE_TO_BADGE_VARIANT","body","TagsList","selectedTags","handleDeleteTag","tagProps","onDismiss","renderTagOption","option","TagsSelector","defaultMenuIsOpen","selectProps","isMenuOpen","handleOpenChange","_selectProps$onMenuOp","onMenuOpen","call","_selectProps$onMenuCl","onMenuClose","handleChange","selectedTag","find","Select","isCreatable","isSearchable","formatOptionLabel","options","Tags","_ref$title","allTags","onTagSelect","onTagCreate","onTagDelete","_ref$selectProps","_ref$showSuccessToast","showSuccessToastr","_ref$containerProps","_ref$isUpdating","_ref$showAddTagsOnTit","_ref$isLoading","_ref$showTitleBar","_ref$bodyProps","_ref$isMetadataBlock","_ref$pickerVariant","pickerVariant","isTagsDropdownVisible","useHotkeys","selectedTagValues","pluck","handleAddExistingTag","showThumbsUpToastr","handleCreateTag","tagName","isPopoverPicker","isAddTagsButtonVisible","tagsListProps","tagsSelectorProps","_Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;AAEO,IAAMA,kBAAkB,GAAG;AAChCC,EAAAA,MAAM,EAAE;AACNC,IAAAA,QAAQ,EAAE,GAAG;IACbC,WAAW,EAAEC,SAAC,CAAC,4BAA4B;AAC7C;AACF,CAAC;AAEM,IAAMC,mBAAmB,GAAG,GAAG;AAC/B,IAAMC,uBAAuB,GAAG,CAAC;AACjC,IAAMC,mBAAmB,GAAG,CAAC;;;;ACJpC,IAAMC,KAAK,GAAG,SAARA,KAAKA,CAAAC,IAAA,EAA0D;AAAA,EAAA,IAAAC,eAAA,GAAAD,IAAA,CAApDE,UAAU;AAAVA,IAAAA,UAAU,GAAAD,eAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,eAAA;IAAEE,KAAK,GAAAH,IAAA,CAALG,KAAK;IAAEC,UAAU,GAAAJ,IAAA,CAAVI,UAAU;IAAEC,SAAS,GAAAL,IAAA,CAATK,SAAS;AAC5D,EAAA,IAAAC,eAAA,GAAcC,2BAAc,EAAE;IAAtBZ,CAAC,GAAAW,eAAA,CAADX,CAAC;EACT,IAAMa,SAAS,GAAGL,KAAK,IAAIR,CAAC,CAAC,sBAAsB,EAAEc,gBAAM,CAAC;AAE5D,EAAA,IAAAC,SAAA,GAA4CC,cAAQ,CAAC,KAAK,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAApDI,IAAAA,cAAc,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,iBAAiB,GAAAH,UAAA,CAAA,CAAA,CAAA;AACxC,EAAA,IAAAI,UAAA,GAAoDL,cAAQ,CAAC,KAAK,CAAC;IAAAM,UAAA,GAAAJ,cAAA,CAAAG,UAAA,EAAA,CAAA,CAAA;AAA5DE,IAAAA,kBAAkB,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,qBAAqB,GAAAF,UAAA,CAAA,CAAA,CAAA;AAEhDG,EAAAA,eAAS,CAAC,YAAM;IACd,IAAI,CAAChB,UAAU,EAAE;IAEjBW,iBAAiB,CAAC,IAAI,CAAC;AACzB,EAAA,CAAC,EAAE,CAACX,UAAU,CAAC,CAAC;AAEhBgB,EAAAA,eAAS,CAAC,YAAM;AACd,IAAA,IAAIhB,UAAU,IAAI,CAACU,cAAc,EAAE;IAEnCK,qBAAqB,CAAC,IAAI,CAAC;IAC3BJ,iBAAiB,CAAC,KAAK,CAAC;AACxBM,IAAAA,UAAU,CAAC,YAAM;MACfF,qBAAqB,CAAC,KAAK,CAAC;IAC9B,CAAC,EAAE,IAAI,CAAC;AACV,EAAA,CAAC,EAAE,CAACL,cAAc,EAAEV,UAAU,CAAC,CAAC;AAEhC,EAAA,oBACEkB,eAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,yBAAyB;IAAAC,QAAA,EAAA,cACtCC,cAAA,CAACC,gBAAK,EAAAC,eAAA,CAAAA,eAAA,CAAA,EAAA,EAAKzB,UAAU,CAAA,EAAA,EAAA,EAAA;AAAAsB,MAAAA,QAAA,EAAGhB;KAAS,CAAQ,CAAC,eAC1Cc,eAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,8BAA8B;AAAAC,MAAAA,QAAA,GAC1C,CAACpB,UAAU,IAAIC,SAAS,kBAAKoB,cAAA,CAACG,kBAAO,IAAE,CAAC,EACxC,CAACxB,UAAU,IAAIc,kBAAkB,iBAChCO,cAAA,CAACI,iBAAK,EAAA;AAACN,QAAAA,SAAS,EAAC,oBAAoB;AAACO,QAAAA,IAAI,EAAE;AAAG,OAAE,CAClD;AAAA,KACE,CAAC;AAAA,GACH,CAAC;AAEV,CAAC;;ACrCD,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAA/B,IAAA,EAAA;AAAA,EAAA,IAAMgC,UAAU,GAAAhC,IAAA,CAAVgC,UAAU;IAAEC,wBAAwB,GAAAjC,IAAA,CAAxBiC,wBAAwB;EAAA,oBAC9DR,cAAA,CAACS,iBAAM,EAAA;AACL,IAAA,aAAA,EAAY,2BAA2B;AACvCC,IAAAA,QAAQ,EAAEH,UAAW;AACrBI,IAAAA,IAAI,EAAEC,oBAAS;AACfP,IAAAA,IAAI,EAAC,SAAS;AACdQ,IAAAA,OAAO,EAAC,OAAO;AACfC,IAAAA,OAAO,EAAE,SAATA,OAAOA,CAAEC,KAAK,EAAI;MAChBA,KAAK,CAACC,eAAe,EAAE;MACvBR,wBAAwB,CAACS,SAAG,CAAC;AAC/B,IAAA;AAAE,GACH,CAAC;AAAA,CACH;;;;ACVD,IAAMC,SAAS,GAAG,SAAZA,SAASA,CAAA3C,IAAA,EAQT;AAAA,EAAA,IAPJ4C,eAAe,GAAA5C,IAAA,CAAf4C,eAAe;IACfC,cAAc,GAAA7C,IAAA,CAAd6C,cAAc;IACdC,gBAAgB,GAAA9C,IAAA,CAAhB8C,gBAAgB;IAChBC,mBAAmB,GAAA/C,IAAA,CAAnB+C,mBAAmB;IACnBvB,QAAQ,GAAAxB,IAAA,CAARwB,QAAQ;IACRwB,iBAAiB,GAAAhD,IAAA,CAAjBgD,iBAAiB;IACjBC,SAAS,GAAAjD,IAAA,CAATiD,SAAS;AAET,EAAA,IAAIL,eAAe,EAAE;AACnB,IAAA,oBACEtB,eAAA,CAAA,KAAA,EAAAK,eAAA,CAAAA,eAAA,CAAA;AACEJ,MAAAA,SAAS,EAAC;AAA6D,KAAA,EACnEsB,cAAc,CAAA,EAAA,EAAA,EAAA;AAAArB,MAAAA,QAAA,gBAElBF,eAAA,CAAA,KAAA,EAAA;AAAKC,QAAAA,SAAS,EAAC,mCAAmC;AAAAC,QAAAA,QAAA,gBAChDC,cAAA,CAAC1B,KAAK,EAAA4B,eAAA,KAAKoB,mBAAmB,CAAG,CAAC,eAClCtB,cAAA,CAACM,gBAAgB,EAAAJ,eAAA,CAAA,EAAA,EAAKmB,gBAAgB,CAAG,CAAC;AAAA,OACvC,CAAC,EACLE,iBAAiB,IAAIxB,QAAQ;AAAA,KAAA,CAC3B,CAAC;AAEV,EAAA;AAEA,EAAA,IAAQQ,UAAU,GAA+Bc,gBAAgB,CAAzDd,UAAU;IAAEC,wBAAwB,GAAKa,gBAAgB,CAA7Cb,wBAAwB;AAC5C,EAAA,IAAMiB,aAAa,GAAG,SAAhBA,aAAaA,GAAS;AAC1B,IAAA,CAAClB,UAAU,IAAIC,wBAAwB,CAACS,SAAG,CAAC;EAC9C,CAAC;AAED,EAAA,oBACEpB,eAAA,CAAA,KAAA,EAAAK,eAAA,CAAAA,eAAA,CAAA;AAAKJ,IAAAA,SAAS,EAAC;AAAwC,GAAA,EAAKsB,cAAc,CAAA,EAAA,EAAA,EAAA;AAAArB,IAAAA,QAAA,EAAA,CACvEuB,mBAAmB,CAACI,YAAY,iBAC/B7B,eAAA,CAAA,KAAA,EAAA;MACEC,SAAS,EAAE6B,UAAU,CACnB,+EAA+E,EAC/EL,mBAAmB,CAACM,kBACtB,CAAE;AACFd,MAAAA,OAAO,EAAEW,aAAc;MAAA1B,QAAA,EAAA,cAEvBC,cAAA,CAAC1B,KAAK,EAAA4B,eAAA,CAAA,EAAA,EAAKoB,mBAAmB,CAAG,CAAC,EACjCA,mBAAmB,CAACO,kBAAkB,iBACrC7B,cAAA,CAACM,gBAAgB,EAAAJ,eAAA,CAAA,EAAA,EAAKmB,gBAAgB,CAAG,CAC1C;KACE,CACN,EACAE,iBAAiB,iBAChBvB,cAAA,CAAA,KAAA,EAAAE,eAAA,CAAAA,eAAA,CAAA;AACEJ,MAAAA,SAAS,EAAC;AAA0D,KAAA,EAChE0B,SAAS,CAAA,EAAA,EAAA,EAAA;AAAAzB,MAAAA,QAAA,EAEZA;AAAQ,KAAA,CACN,CACN;AAAA,GAAA,CACE,CAAC;AAEV,CAAC;;;;AC7BD,IAAM+B,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAAvD,IAAA,EAQnB;EAAA,IAAAwD,WAAA,EAAAC,YAAA;AAAA,EAAA,IAPJC,IAAI,GAAA1D,IAAA,CAAJ0D,IAAI;IACJC,YAAY,GAAA3D,IAAA,CAAZ2D,YAAY;IACZC,IAAI,GAAA5D,IAAA,CAAJ4D,IAAI;IACJC,QAAQ,GAAA7D,IAAA,CAAR6D,QAAQ;IACRC,cAAc,GAAA9D,IAAA,CAAd8D,cAAc;IAAAC,gBAAA,GAAA/D,IAAA,CACdgE,WAAW;AAAXA,IAAAA,WAAW,GAAAD,gBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,gBAAA;IAAAE,eAAA,GAAAjE,IAAA,CAChBgC,UAAU;AAAVA,IAAAA,UAAU,GAAAiC,eAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,eAAA;AAElB,EAAA,IAAA3D,eAAA,GAAcC,2BAAc,EAAE;IAAtBZ,CAAC,GAAAW,eAAA,CAADX,CAAC;AAET,EAAA,IAAMuE,UAAU,GAAGC,YAAM,CAAC,IAAI,CAAC;AAC/B,EAAA,IAAMC,QAAQ,GAAGD,YAAM,CAAC,IAAI,CAAC;AAC7B,EAAA,IAAME,MAAM,GAAGF,YAAM,CAAC,IAAI,CAAC;AAC3B,EAAA,IAAMG,SAAS,GAAGC,WAAK,EAAE;AAEzB,EAAA,IAAA7D,SAAA,GAA0BC,cAAQ,CAAC,EAAE,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAA/B8D,IAAAA,KAAK,GAAA5D,UAAA,CAAA,CAAA,CAAA;AAAE6D,IAAAA,QAAQ,GAAA7D,UAAA,CAAA,CAAA,CAAA;AACtB,EAAA,IAAAI,UAAA,GAAsCL,cAAQ,CAAC,CAAC,CAAC;IAAAM,UAAA,GAAAJ,cAAA,CAAAG,UAAA,EAAA,CAAA,CAAA;AAA1C0D,IAAAA,WAAW,GAAAzD,UAAA,CAAA,CAAA,CAAA;AAAE0D,IAAAA,cAAc,GAAA1D,UAAA,CAAA,CAAA,CAAA;AAClC;AACA;AACA,EAAA,IAAA2D,UAAA,GAA4BjE,cAAQ,CAAC,IAAI,CAAC;IAAAkE,UAAA,GAAAhE,cAAA,CAAA+D,UAAA,EAAA,CAAA,CAAA;AAAnCE,IAAAA,MAAM,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,SAAS,GAAAF,UAAA,CAAA,CAAA,CAAA;AAExB,EAAA,IAAMG,YAAY,GAAGR,KAAK,CAACS,IAAI,EAAE;AAEjC,EAAA,IAAMC,YAAY,GAAGC,aAAO,CAAC,YAAM;AACjC,IAAA,IAAI,CAACH,YAAY,EAAE,OAAOpB,IAAI;AAC9B,IAAA,IAAMwB,MAAM,GAAGJ,YAAY,CAACK,WAAW,EAAE;AAEzC,IAAA,OAAOzB,IAAI,CAAC0B,MAAM,CAAC,UAAAC,KAAA,EAAA;AAAA,MAAA,IAAGC,KAAK,GAAAD,KAAA,CAALC,KAAK;MAAA,OAAOA,KAAK,CAACH,WAAW,EAAE,CAACI,QAAQ,CAACL,MAAM,CAAC;IAAA,CAAA,CAAC;AACzE,EAAA,CAAC,EAAE,CAACxB,IAAI,EAAEoB,YAAY,CAAC,CAAC;AAExB,EAAA,IAAMU,SAAS,GACbC,oBAAU,CAACX,YAAY,CAAC,IACxB,CAACpB,IAAI,CAACgC,IAAI,CACR,UAAAC,KAAA,EAAA;AAAA,IAAA,IAAGL,KAAK,GAAAK,KAAA,CAALL,KAAK;IAAA,OAAOA,KAAK,CAACH,WAAW,EAAE,KAAKL,YAAY,CAACK,WAAW,EAAE;AAAA,EAAA,CACnE,CAAC;EAEH,IAAMS,WAAW,GAAGZ,YAAY,CAACa,MAAM,IAAIL,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7D,EAAA,IAAMM,QAAQ,GAAG,SAAXA,QAAQA,CAAGC,KAAK,EAAA;AAAA,IAAA,OAAA,EAAA,CAAAC,MAAA,CAAO5B,SAAS,EAAA,UAAA,CAAA,CAAA4B,MAAA,CAAWD,KAAK,CAAA;EAAA,CAAE;AAExD,EAAA,IAAME,YAAY,GAAG,SAAfA,YAAYA,GAAA;AAAA,IAAA,IAAAC,mBAAA;IAAA,OAAA,CAAAA,mBAAA,GAChBlC,UAAU,CAACmC,OAAO,MAAA,IAAA,IAAAD,mBAAA,KAAA,MAAA,IAAA,CAAAA,mBAAA,GAAlBA,mBAAA,CAAoBE,aAAa,CAAC,QAAQ,CAAC,MAAA,IAAA,IAAAF,mBAAA,KAAA,MAAA,GAAA,MAAA,GAA3CA,mBAAA,CAA6CG,KAAK,CAAC;AAAEC,MAAAA,aAAa,EAAE;AAAK,KAAC,CAAC;AAAA,EAAA,CAAA;AAE7E,EAAA,IAAMC,KAAK,GAAGC,iBAAW,CACvB,YAAmC;AAAA,IAAA,IAAAC,KAAA,GAAAC,SAAA,CAAAb,MAAA,GAAA,CAAA,IAAAa,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAP,EAAE;MAAAE,kBAAA,GAAAH,KAAA,CAA3BI,YAAY;AAAZA,MAAAA,YAAY,GAAAD,kBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,kBAAA;IACrBrC,QAAQ,CAAC,EAAE,CAAC;IACZE,cAAc,CAAC,CAAC,CAAC;IACjBI,SAAS,CAAC,IAAI,CAAC;IACfpB,YAAY,CAAC,KAAK,CAAC;AACnB;AACA;AACA,IAAA,IAAIoD,YAAY,EAAEZ,YAAY,EAAE;AAClC,EAAA,CAAC,EACD,CAACxC,YAAY,CACf,CAAC;AAED,EAAA,IAAMqD,YAAY,GAAG,SAAfA,YAAYA,CAAGC,GAAG,EAAI;IAC1BpD,QAAQ,CAACoD,GAAG,CAAC;AACbR,IAAAA,KAAK,CAAC;AAAEM,MAAAA,YAAY,EAAE;AAAK,KAAC,CAAC;EAC/B,CAAC;AAED,EAAA,IAAMG,YAAY,GAAG,SAAfA,YAAYA,GAAS;IACzBpD,cAAc,CAACkB,YAAY,CAAC;AAC5ByB,IAAAA,KAAK,CAAC;AAAEM,MAAAA,YAAY,EAAE;AAAK,KAAC,CAAC;EAC/B,CAAC;AAED,EAAA,IAAMI,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAG3E,KAAK,EAAI;AACjCiC,IAAAA,QAAQ,CAACjC,KAAK,CAAC4E,MAAM,CAACC,KAAK,CAAC;IAC5B1C,cAAc,CAAC,CAAC,CAAC;EACnB,CAAC;AAED,EAAA,IAAM2C,aAAa,GAAG,SAAhBA,aAAaA,CAAG9E,KAAK,EAAI;AAC7B,IAAA,IAAIA,KAAK,CAAC+E,GAAG,KAAK,QAAQ,EAAE;MAC1B/E,KAAK,CAACgF,cAAc,EAAE;AACtBf,MAAAA,KAAK,CAAC;AAAEM,QAAAA,YAAY,EAAE;AAAK,OAAC,CAAC;IAC/B,CAAC,MAAM,IAAIvE,KAAK,CAAC+E,GAAG,KAAK,WAAW,IAAIzB,WAAW,GAAG,CAAC,EAAE;MACvDtD,KAAK,CAACgF,cAAc,EAAE;MACtB7C,cAAc,CAAC,UAAA8C,QAAQ,EAAA;AAAA,QAAA,OAAI,CAACA,QAAQ,GAAG,CAAC,IAAI3B,WAAW;MAAA,CAAA,CAAC;IAC1D,CAAC,MAAM,IAAItD,KAAK,CAAC+E,GAAG,KAAK,SAAS,IAAIzB,WAAW,GAAG,CAAC,EAAE;MACrDtD,KAAK,CAACgF,cAAc,EAAE;MACtB7C,cAAc,CAAC,UAAA8C,QAAQ,EAAA;AAAA,QAAA,OAAI,CAACA,QAAQ,GAAG,CAAC,GAAG3B,WAAW,IAAIA,WAAW;MAAA,CAAA,CAAC;AACxE,IAAA,CAAC,MAAM,IAAItD,KAAK,CAAC+E,GAAG,KAAK,OAAO,EAAE;MAChC/E,KAAK,CAACgF,cAAc,EAAE;AACtB,MAAA,IAAI9C,WAAW,GAAGQ,YAAY,CAACa,MAAM,EAAE;AACrCiB,QAAAA,YAAY,CAAC9B,YAAY,CAACR,WAAW,CAAC,CAAC;MACzC,CAAC,MAAM,IAAIgB,SAAS,EAAE;AACpBwB,QAAAA,YAAY,EAAE;AAChB,MAAA;AACF,IAAA;EACF,CAAC;AAED,EAAA,IAAMQ,cAAc,GAAGhB,iBAAW,CAAC,YAAM;IAAA,IAAAiB,qBAAA,EAAAC,iBAAA;AACvC,IAAA,IAAMC,OAAO,GAAG3D,UAAU,CAACmC,OAAO;IAClC,IAAI,CAACwB,OAAO,EAAE;AAEd,IAAA,IAAMC,IAAI,GAAGD,OAAO,CAACE,qBAAqB,EAAE;IAC5C,IAAMC,WAAW,IAAAL,qBAAA,GAAA,CAAAC,iBAAA,GAAGxD,QAAQ,CAACiC,OAAO,MAAA,IAAA,IAAAuB,iBAAA,KAAA,MAAA,GAAA,MAAA,GAAhBA,iBAAA,CAAkBK,YAAY,MAAA,IAAA,IAAAN,qBAAA,KAAA,MAAA,GAAAA,qBAAA,GAAI,CAAC;IAEvD,IAAMO,IAAI,GAAGC,IAAI,CAACC,GAAG,CACnBvI,uBAAuB,EACvBsI,IAAI,CAACE,GAAG,CACNP,IAAI,CAACI,IAAI,EACTI,MAAM,CAACC,UAAU,GAAG3I,mBAAmB,GAAGC,uBAC5C,CACF,CAAC;AAED,IAAA,IAAM2I,QAAQ,GAAGV,IAAI,CAACW,MAAM,GAAG3I,mBAAmB;IAClD,IAAM4I,cAAc,GAClBF,QAAQ,GAAGR,WAAW,GAAGnI,uBAAuB,GAAGyI,MAAM,CAACK,WAAW;IAEvE,IAAMC,SAAS,GACbd,IAAI,CAACe,GAAG,GAAG/I,mBAAmB,GAAGkI,WAAW,GAAGnI,uBAAuB;AAExE,IAAA,IAAMgJ,GAAG,GACPH,cAAc,IAAIE,SAAS,GACvBd,IAAI,CAACe,GAAG,GAAG/I,mBAAmB,GAAGkI,WAAW,GAC5CQ,QAAQ;AAEdzD,IAAAA,SAAS,CAAC;AAAE8D,MAAAA,GAAG,EAAHA,GAAG;AAAEX,MAAAA,IAAI,EAAJA;AAAK,KAAC,CAAC;EAC1B,CAAC,EAAE,EAAE,CAAC;;AAEN;AACA;AACAY,EAAAA,qBAAe,CAAC,YAAM;AACpB,IAAA,IAAIpF,IAAI,EAAEgE,cAAc,EAAE;EAC5B,CAAC,EAAE,CAAChE,IAAI,EAAEoC,WAAW,EAAE4B,cAAc,CAAC,CAAC;AAEvCtG,EAAAA,eAAS,CAAC,YAAM;AAAA,IAAA,IAAA2H,kBAAA;AACd,IAAA,IAAI,CAACrF,IAAI,EAAE,OAAOmD,SAAS;;AAE3B;IACA,CAAAkC,kBAAA,GAAA3E,QAAQ,CAACiC,OAAO,MAAA,IAAA,IAAA0C,kBAAA,KAAA,MAAA,IAAA,CAAAA,kBAAA,GAAhBA,kBAAA,CAAkBzC,aAAa,CAAC,OAAO,CAAC,MAAA,IAAA,IAAAyC,kBAAA,KAAA,MAAA,IAAxCA,kBAAA,CAA0CxC,KAAK,CAAC;AAAEC,MAAAA,aAAa,EAAE;AAAK,KAAC,CAAC;AAExE,IAAA,IAAMwC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAGxG,KAAK,EAAI;MAAA,IAAAyG,oBAAA,EAAAC,kBAAA;AAClC,MAAA,IAAA,CAAAD,oBAAA,GAAI/E,UAAU,CAACmC,OAAO,cAAA4C,oBAAA,KAAA,MAAA,IAAlBA,oBAAA,CAAoBE,QAAQ,CAAC3G,KAAK,CAAC4E,MAAM,CAAC,EAAE;AAEhD,MAAA,IAAA,CAAA8B,kBAAA,GAAI9E,QAAQ,CAACiC,OAAO,cAAA6C,kBAAA,KAAA,MAAA,IAAhBA,kBAAA,CAAkBC,QAAQ,CAAC3G,KAAK,CAAC4E,MAAM,CAAC,EAAE;AAC9CX,MAAAA,KAAK,EAAE;IACT,CAAC;;AAED;AACA;AACA,IAAA,IAAM2C,kBAAkB,GAAG,SAArBA,kBAAkBA,GAAS;MAC/B,IAAI/E,MAAM,CAACgC,OAAO,EAAE;AACpBhC,MAAAA,MAAM,CAACgC,OAAO,GAAGiC,MAAM,CAACe,qBAAqB,CAAC,YAAM;QAClDhF,MAAM,CAACgC,OAAO,GAAG,IAAI;AACrBqB,QAAAA,cAAc,EAAE;AAClB,MAAA,CAAC,CAAC;IACJ,CAAC;AAED4B,IAAAA,QAAQ,CAACC,gBAAgB,CAAC,WAAW,EAAEP,kBAAkB,CAAC;AAC1DV,IAAAA,MAAM,CAACiB,gBAAgB,CAAC,QAAQ,EAAEH,kBAAkB,CAAC;IACrDd,MAAM,CAACiB,gBAAgB,CAAC,QAAQ,EAAEH,kBAAkB,EAAE,IAAI,CAAC;AAE3D,IAAA,OAAO,YAAM;AACXE,MAAAA,QAAQ,CAACE,mBAAmB,CAAC,WAAW,EAAER,kBAAkB,CAAC;AAC7DV,MAAAA,MAAM,CAACkB,mBAAmB,CAAC,QAAQ,EAAEJ,kBAAkB,CAAC;MACxDd,MAAM,CAACkB,mBAAmB,CAAC,QAAQ,EAAEJ,kBAAkB,EAAE,IAAI,CAAC;MAC9D,IAAI/E,MAAM,CAACgC,OAAO,EAAEiC,MAAM,CAACmB,oBAAoB,CAACpF,MAAM,CAACgC,OAAO,CAAC;MAC/DhC,MAAM,CAACgC,OAAO,GAAG,IAAI;IACvB,CAAC;EACH,CAAC,EAAE,CAAC3C,IAAI,EAAE+C,KAAK,EAAEiB,cAAc,CAAC,CAAC;AAEjC,EAAA,IAAMgC,eAAe,GAAG,SAAlBA,eAAeA,CAAGC,QAAQ,EAAA;IAAA,OAC9BvG,UAAU,CACR,sFAAsF,EACtFuG,QAAQ,GAAG,kCAAkC,GAAG,iBAClD,CAAC;AAAA,EAAA,CAAA;AAEH,EAAA,oBACErI,eAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,cAAc;AAACqI,IAAAA,GAAG,EAAE1F,UAAW;AAAA1C,IAAAA,QAAA,EAAA,cAC5CC,cAAA,CAACS,iBAAM,EAAAP,eAAA,CAAA;AACL,MAAA,eAAA,EAAe+B,IAAK;AACpB,MAAA,eAAA,EAAc,SAAS;AACvBvB,MAAAA,QAAQ,EAAEH,UAAW;AACrBI,MAAAA,IAAI,EAAEyH,gBAAK;AACXrE,MAAAA,KAAK,EAAE7F,CAAC,CAAC,yBAAyB,EAAEmK,kBAAQ,CAAE;AAC9ChI,MAAAA,IAAI,EAAC,IAAI;AACTQ,MAAAA,OAAO,EAAC,MAAM;MACdC,OAAO,EAAE,SAATA,OAAOA,GAAA;AAAA,QAAA,OAAQoB,YAAY,CAAC,CAACD,IAAI,CAAC;AAAA,MAAA;KAAC,EAC/BM,WAAW,CAChB,CAAC,EACDN,IAAI,iBACHqG,qBAAY,cACVzI,eAAA,CAAA,KAAA,EAAA;AACEC,MAAAA,SAAS,EAAC,yGAAyG;AACnHqI,MAAAA,GAAG,EAAExF,QAAS;AACd4F,MAAAA,KAAK,EAAE;AACLnB,QAAAA,GAAG,EAAA,CAAArF,WAAA,GAAEsB,MAAM,aAANA,MAAM,KAAA,MAAA,GAAA,MAAA,GAANA,MAAM,CAAE+D,GAAG,MAAA,IAAA,IAAArF,WAAA,KAAA,MAAA,GAAAA,WAAA,GAAI,CAAC;AACrB0E,QAAAA,IAAI,EAAA,CAAAzE,YAAA,GAAEqB,MAAM,aAANA,MAAM,KAAA,MAAA,GAAA,MAAA,GAANA,MAAM,CAAEoD,IAAI,MAAA,IAAA,IAAAzE,YAAA,KAAA,MAAA,GAAAA,YAAA,GAAI,CAAC;AACvBwG,QAAAA,KAAK,EAAErK,mBAAmB;AAC1BsK,QAAAA,UAAU,EAAEpF,MAAM,GAAG,SAAS,GAAG;OACjC;AAAAtD,MAAAA,QAAA,gBAEFC,cAAA,CAAA,KAAA,EAAA;AAAKF,QAAAA,SAAS,EAAC,4BAA4B;QAAAC,QAAA,eACzCC,cAAA,CAAC0I,gBAAK,EAAA;AACJ,UAAA,mBAAA,EAAkB,MAAM;AACxB,UAAA,eAAA,EAAe7F,SAAU;AACzB,UAAA,eAAA,EAAeZ,IAAK;AACpB0G,UAAAA,WAAW,EAAEzK,CAAC,CAAC,0CAA0C,CAAE;UAC3D0K,MAAM,eAAE5I,cAAA,CAAC6I,kBAAM,EAAA;AAACxI,YAAAA,IAAI,EAAE;AAAG,WAAE,CAAE;AAC7ByI,UAAAA,IAAI,EAAC,UAAU;AACfzI,UAAAA,IAAI,EAAC,OAAO;AACZuF,UAAAA,KAAK,EAAE7C,KAAM;UACb,uBAAA,EACEsB,WAAW,GAAG,CAAC,GAAGE,QAAQ,CAACtB,WAAW,CAAC,GAAGmC,SAC3C;AACDhD,UAAAA,QAAQ,EAAEsD,iBAAkB;AAC5BqD,UAAAA,SAAS,EAAElD;SACZ;OACE,CAAC,eACNhG,eAAA,CAAA,KAAA,EAAA;AACEC,QAAAA,SAAS,EAAC,8BAA8B;AACxCkJ,QAAAA,EAAE,EAAEnG,SAAU;AACdiG,QAAAA,IAAI,EAAC,SAAS;QAAA/I,QAAA,EAAA,CAEb0D,YAAY,CAACwF,GAAG,CAAC,UAACzD,GAAG,EAAEhB,KAAK,EAAA;AAAA,UAAA,oBAC3BxE,cAAA,CAAA,QAAA,EAAA;YACE,eAAA,EAAewE,KAAK,KAAKvB,WAAY;AACrCnD,YAAAA,SAAS,EAAEmI,eAAe,CAACzD,KAAK,KAAKvB,WAAW,CAAE;AAClD+F,YAAAA,EAAE,EAAEzE,QAAQ,CAACC,KAAK,CAAE;AAEpBsE,YAAAA,IAAI,EAAC,QAAQ;AACbI,YAAAA,IAAI,EAAC,QAAQ;YACbpI,OAAO,EAAE,SAATA,OAAOA,GAAA;cAAA,OAAQyE,YAAY,CAACC,GAAG,CAAC;YAAA,CAAC;YACjC2D,YAAY,EAAE,SAAdA,YAAYA,GAAA;cAAA,OAAQjG,cAAc,CAACsB,KAAK,CAAC;YAAA,CAAC;YAAAzE,QAAA,eAE1CC,cAAA,CAACoJ,gBAAK,EAAA;cACJrF,KAAK,EAAEyB,GAAG,CAACzB,KAAM;AACjBlD,cAAAA,OAAO,EACLwI,sCAA0B,CAAC7D,GAAG,CAAC+C,KAAK,CAAC,IAAI;aAE5C;WAAC,EAXG/C,GAAG,CAACI,KAYH,CAAC;AAAA,QAAA,CACV,CAAC,EACD3B,SAAS,iBACRpE,eAAA,CAAA,QAAA,EAAA;AACE,UAAA,eAAA,EAAeoD,WAAW,KAAKQ,YAAY,CAACa,MAAO;AACnD0E,UAAAA,EAAE,EAAEzE,QAAQ,CAACd,YAAY,CAACa,MAAM,CAAE;AAClCwE,UAAAA,IAAI,EAAC,QAAQ;AACbI,UAAAA,IAAI,EAAC,QAAQ;UACbpJ,SAAS,EAAEmI,eAAe,CACxBhF,WAAW,KAAKQ,YAAY,CAACa,MAC/B,CAAE;AACFxD,UAAAA,OAAO,EAAE2E,YAAa;UACtB0D,YAAY,EAAE,SAAdA,YAAYA,GAAA;AAAA,YAAA,OAAQjG,cAAc,CAACO,YAAY,CAACa,MAAM,CAAC;UAAA,CAAC;UAAAvE,QAAA,EAAA,cAExDC,cAAA,CAACoI,gBAAI,EAAA;AAAC/H,YAAAA,IAAI,EAAE;WAAK,CAAC,eAClBR,eAAA,CAAA,MAAA,EAAA;AAAMC,YAAAA,SAAS,EAAC,UAAU;YAAAC,QAAA,EAAA,CACvB7B,CAAC,CAAC,+BAA+B,CAAC,EAClC,IAAI,eACL8B,cAAA,CAAA,MAAA,EAAA;AAAMF,cAAAA,SAAS,EAAC,aAAa;AAAAC,cAAAA,QAAA,EAAEwD;AAAY,aAAO,CAAC;AAAA,WAC/C,CAAC;AAAA,SACD,CACT,EACAc,WAAW,KAAK,CAAC,iBAChBrE,cAAA,CAAA,KAAA,EAAA;AAAKF,UAAAA,SAAS,EAAC,yCAAyC;UAAAC,QAAA,EACrD7B,CAAC,CAAC,8BAA8B;AAAC,SAC/B,CACN;AAAA,OACE,CAAC;AAAA,KACH,CAAC,EACN2J,QAAQ,CAACyB,IACX,CAAC;AAAA,GACA,CAAC;AAEV,CAAC;;;;ACpSD,IAAMC,QAAQ,GAAG,SAAXA,QAAQA,CAAAhL,IAAA,EAAA;AAAA,EAAA,IAAMiL,YAAY,GAAAjL,IAAA,CAAZiL,YAAY;IAAEjJ,UAAU,GAAAhC,IAAA,CAAVgC,UAAU;IAAEkJ,eAAe,GAAAlL,IAAA,CAAfkL,eAAe;IAAEC,QAAQ,GAAAnL,IAAA,CAARmL,QAAQ;AAAA,EAAA,oBACrE1J,cAAA,CAAA,KAAA,EAAA;AACEF,IAAAA,SAAS,EAAE6B,UAAU,CACnB,mEAAmE,EACnE;MAAE,MAAM,EAAEuC,oBAAU,CAACsF,YAAY;AAAE,KACrC,CAAE;IAAAzJ,QAAA,EAEDyJ,YAAY,KAAA,IAAA,IAAZA,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZA,YAAY,CAAEP,GAAG,CAAC,UAAAzD,GAAG,EAAA;AAAA,MAAA,oBACpBxF,cAAA,CAACoJ,gBAAK,EAAAlJ,eAAA,CAAA;AACJQ,QAAAA,QAAQ,EAAEH,UAAW;QAErBwD,KAAK,EAAEyB,GAAG,CAACzB,KAAM;QACjBlD,OAAO,EAAEwI,sCAA0B,CAAC7D,GAAG,CAAC+C,KAAK,CAAC,IAAI,WAAY;QAC9DzI,SAAS,EAAE6B,UAAU,CAAC;AACpB,UAAA,+BAA+B,EAAEpB;AACnC,SAAC,CAAE;AACHoJ,QAAAA,SAAS,EAAEpJ,UAAU,GAAG6E,SAAS,GAAG,YAAA;UAAA,OAAMqE,eAAe,CAACjE,GAAG,CAAC;AAAA,QAAA;AAAC,OAAA,EAC3DkE,QAAQ,CAAA,EAPPlE,GAAG,CAACI,KAQV,CAAC;IAAA,CACH;AAAC,GACC,CAAC;AAAA,CACP;;;;ACpBD,IAAMgE,eAAe,GAAG,SAAlBA,eAAeA,CAAGC,MAAM,EAAA;EAAA,oBAC5B7J,cAAA,CAACoJ,gBAAK,EAAA;IACJrF,KAAK,EAAE8F,MAAM,CAAC9F,KAAM;AACpBlD,IAAAA,OAAO,EAAEwI,sCAA0B,CAACQ,MAAM,CAACtB,KAAK,CAAC,IAAI;AAAY,GAClE,CAAC;AAAA,CACH;AAED,IAAMuB,YAAY,GAAG,SAAfA,YAAYA,CAAAvL,IAAA,EAMZ;AAAA,EAAA,IALJwL,iBAAiB,GAAAxL,IAAA,CAAjBwL,iBAAiB;IACjB5H,IAAI,GAAA5D,IAAA,CAAJ4D,IAAI;IACJC,QAAQ,GAAA7D,IAAA,CAAR6D,QAAQ;IACRC,cAAc,GAAA9D,IAAA,CAAd8D,cAAc;IACd2H,WAAW,GAAAzL,IAAA,CAAXyL,WAAW;AAEX,EAAA,IAAMC,UAAU,GAAGvH,YAAM,CAACqH,iBAAiB,CAAC;AAE5C,EAAA,IAAAlL,eAAA,GAAcC,2BAAc,EAAE;IAAtBZ,CAAC,GAAAW,eAAA,CAADX,CAAC;AAET,EAAA,IAAMgM,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAGjI,IAAI,EAAI;IAC/BgI,UAAU,CAACrF,OAAO,GAAG3C,IAAI;AACzB,IAAA,IAAIA,IAAI,EAAE;AAAA,MAAA,IAAAkI,qBAAA;AACR,MAAA,CAAAA,qBAAA,GAAAH,WAAW,CAACI,UAAU,MAAA,IAAA,IAAAD,qBAAA,KAAA,MAAA,IAAtBA,qBAAA,CAAAE,IAAA,CAAAL,WAAyB,CAAC;AAC5B,IAAA,CAAC,MAAM;AAAA,MAAA,IAAAM,qBAAA;AACL,MAAA,CAAAA,qBAAA,GAAAN,WAAW,CAACO,WAAW,MAAA,IAAA,IAAAD,qBAAA,KAAA,MAAA,IAAvBA,qBAAA,CAAAD,IAAA,CAAAL,WAA0B,CAAC;AAC7B,IAAA;EACF,CAAC;AAED,EAAA,IAAMQ,YAAY,GAAG,SAAfA,YAAYA,CAAG5E,KAAK,EAAI;AAC5B,IAAA,IAAM6E,WAAW,GAAGtI,IAAI,CAACuI,IAAI,CAAC,UAAAlF,GAAG,EAAA;AAAA,MAAA,OAAIA,GAAG,CAACI,KAAK,KAAKA,KAAK;IAAA,CAAA,CAAC;AACzD,IAAA,IAAI6E,WAAW,EAAE;MACfrI,QAAQ,CAACqI,WAAW,CAAC;AACvB,IAAA;EACF,CAAC;AAED,EAAA,oBACEzK,cAAA,CAAC2K,iBAAM,EAAAzK,eAAA,CAAAA,eAAA,CAAA;IACL0K,WAAW,EAAA,IAAA;IACXC,YAAY,EAAA,IAAA;AACZC,IAAAA,iBAAiB,EAAElB,eAAgB;AACnCmB,IAAAA,OAAO,EAAE5I,IAAK;IACdwG,WAAW,EAAEzK,CAAC,CAAC,yCAAyC;AAAE,GAAA,EAAAgC,eAAA,CAAAA,eAAA,CAAA,EAAA,EACjD8J,WAAW,CAAA,EAAA,EAAA,EAAA;AAAE3H,IAAAA,cAAc,EAAdA;AAAc,GAAA,CAAA,CAAA,EAAA,EAAA,EAAA;AACpCD,IAAAA,QAAQ,EAAEoI,YAAa;AACvBtI,IAAAA,YAAY,EAAEgI;AAAiB,GAAA,CAChC,CAAC;AAEN,CAAC;;;;AC/BD,IAAMc,IAAI,GAAG,SAAPA,IAAIA,CAAAzM,IAAA,EAqBJ;AAAA,EAAA,IAAA0M,UAAA,GAAA1M,IAAA,CApBJG,KAAK;AAALA,IAAAA,KAAK,GAAAuM,UAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,UAAA;IACVC,OAAO,GAAA3M,IAAA,CAAP2M,OAAO;IACP1B,YAAY,GAAAjL,IAAA,CAAZiL,YAAY;IACZ2B,WAAW,GAAA5M,IAAA,CAAX4M,WAAW;IACXC,WAAW,GAAA7M,IAAA,CAAX6M,WAAW;IACXC,WAAW,GAAA9M,IAAA,CAAX8M,WAAW;IACX3B,QAAQ,GAAAnL,IAAA,CAARmL,QAAQ;IAAA4B,gBAAA,GAAA/M,IAAA,CACRyL,WAAW;AAAXA,IAAAA,WAAW,GAAAsB,gBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,gBAAA;IAChB/I,WAAW,GAAAhE,IAAA,CAAXgE,WAAW;IAAAgJ,qBAAA,GAAAhN,IAAA,CACXiN,iBAAiB;AAAjBA,IAAAA,iBAAiB,GAAAD,qBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,qBAAA;IACzB9M,UAAU,GAAAF,IAAA,CAAVE,UAAU;IAAAgN,mBAAA,GAAAlN,IAAA,CACV6C,cAAc;AAAdA,IAAAA,cAAc,GAAAqK,mBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,mBAAA;IAAAC,eAAA,GAAAnN,IAAA,CACnBI,UAAU;AAAVA,IAAAA,UAAU,GAAA+M,eAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,eAAA;IAAAC,qBAAA,GAAApN,IAAA,CAClBsD,kBAAkB;AAAlBA,IAAAA,kBAAkB,GAAA8J,qBAAA,KAAA,MAAA,GAAG,IAAI,GAAAA,qBAAA;IAAAC,cAAA,GAAArN,IAAA,CACzBK,SAAS;AAATA,IAAAA,SAAS,GAAAgN,cAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,cAAA;IAAAC,iBAAA,GAAAtN,IAAA,CACjBmD,YAAY;AAAZA,IAAAA,YAAY,GAAAmK,iBAAA,KAAA,MAAA,GAAG,IAAI,GAAAA,iBAAA;IAAAC,cAAA,GAAAvN,IAAA,CACnBiD,SAAS;AAATA,IAAAA,SAAS,GAAAsK,cAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,cAAA;IAAAtJ,eAAA,GAAAjE,IAAA,CACdgC,UAAU;AAAVA,IAAAA,UAAU,GAAAiC,eAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,eAAA;IAAAuJ,oBAAA,GAAAxN,IAAA,CAClB4C,eAAe;AAAfA,IAAAA,eAAe,GAAA4K,oBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,oBAAA;IAAAC,kBAAA,GAAAzN,IAAA,CACvB0N,aAAa;AAAbA,IAAAA,aAAa,GAAAD,kBAAA,KAAA,MAAA,GAAG,QAAQ,GAAAA,kBAAA;AAExB,EAAA,IAAAnN,eAAA,GAAcC,2BAAc,EAAE;IAAtBZ,CAAC,GAAAW,eAAA,CAADX,CAAC;AAET,EAAA,IAAAe,SAAA,GAA0DC,cAAQ,CAAC,KAAK,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAAlEiN,IAAAA,qBAAqB,GAAA/M,UAAA,CAAA,CAAA,CAAA;AAAEqB,IAAAA,wBAAwB,GAAArB,UAAA,CAAA,CAAA,CAAA;EAEtDgN,UAAU,CAACrO,kBAAkB,CAACC,MAAM,CAACC,QAAQ,EAAE,UAAA+C,KAAK,EAAI;IACtDA,KAAK,CAACgF,cAAc,EAAE;IACtBvF,wBAAwB,CAAC,IAAI,CAAC;AAChC,EAAA,CAAC,CAAC;AAEF,EAAA,IAAM2B,IAAI,GAAGuB,aAAO,CAAC,YAAM;AACzB,IAAA,IAAI,CAACwH,OAAO,EAAE,OAAO,EAAE;AAEvB,IAAA,IAAI,CAAC1B,YAAY,EAAE,OAAO0B,OAAO;AAEjC,IAAA,IAAMkB,iBAAiB,GAAGC,WAAK,CAAC,OAAO,EAAE7C,YAAY,CAAC;AAEtD,IAAA,OAAO0B,OAAO,CAACrH,MAAM,CAAC,UAAAC,KAAA,EAAA;AAAA,MAAA,IAAG8B,KAAK,GAAA9B,KAAA,CAAL8B,KAAK;AAAA,MAAA,OAAO,CAACwG,iBAAiB,CAACpI,QAAQ,CAAC4B,KAAK,CAAC;IAAA,CAAA,CAAC;AAC1E,EAAA,CAAC,EAAE,CAACsF,OAAO,EAAE1B,YAAY,CAAC,CAAC;AAE3B,EAAA,IAAM8C,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAG9G,GAAG,EAAI;IAClChF,wBAAwB,CAAC,KAAK,CAAC;IAC/B2K,WAAW,CAAC3F,GAAG,CAAC;AAChB;IACAgG,iBAAiB,IAAIe,wBAAkB,EAAE;EAC3C,CAAC;AAED,EAAA,IAAM9C,eAAe,GAAG,SAAlBA,eAAeA,CAAGjE,GAAG,EAAI;IAC7B6F,WAAW,CAAC7F,GAAG,CAAC;AAChB;IACAgG,iBAAiB,IAAIe,wBAAkB,EAAE;EAC3C,CAAC;AAED,EAAA,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAGC,OAAO,EAAI;IACjCjM,wBAAwB,CAAC,KAAK,CAAC;IAC/B4K,WAAW,CAACqB,OAAO,CAAC;EACtB,CAAC;AAED,EAAA,IAAMC,eAAe,GAAGT,aAAa,KAAK,SAAS;AACnD,EAAA,IAAMU,sBAAsB,GAAG,CAAC9K,kBAAkB,IAAI,CAACqK,qBAAqB;EAC5E,IAAM3K,iBAAiB,GACrB2C,oBAAU,CAACsF,YAAY,CAAC,IACxB0C,qBAAqB,IACrBS,sBAAsB,IACtBD,eAAe;AAEjB,EAAA,IAAMpL,mBAAmB,GAAG;AAC1B1C,IAAAA,SAAS,EAATA,SAAS;AACTD,IAAAA,UAAU,EAAVA,UAAU;AACVkD,IAAAA,kBAAkB,EAAlBA,kBAAkB;AAClBnD,IAAAA,KAAK,EAALA,KAAK;AACLD,IAAAA,UAAU,EAAVA,UAAU;AACViD,IAAAA,YAAY,EAAZA;GACD;AAED,EAAA,IAAML,gBAAgB,GAAG;AAAEd,IAAAA,UAAU,EAAVA,UAAU;AAAEC,IAAAA,wBAAwB,EAAxBA;GAA0B;AAEjE,EAAA,IAAMoM,aAAa,GAAG;AAAEnD,IAAAA,eAAe,EAAfA,eAAe;AAAElJ,IAAAA,UAAU,EAAVA,UAAU;AAAEiJ,IAAAA,YAAY,EAAZA,YAAY;AAAEE,IAAAA,QAAQ,EAARA;GAAU;AAE7E,EAAA,IAAMmD,iBAAiB,GAAG;AACxB9C,IAAAA,iBAAiB,EAAElI,kBAAkB;AACrCM,IAAAA,IAAI,EAAJA,IAAI;AACJC,IAAAA,QAAQ,EAAEkK,oBAAoB;AAC9BjK,IAAAA,cAAc,EAAEmK,eAAe;AAC/BxC,IAAAA,WAAW,EAAXA;GACD;EAED,oBACEnK,eAAA,CAACqB,SAAS,EAAA;AAENG,IAAAA,gBAAgB,EAAhBA,gBAAgB;AAChBG,IAAAA,SAAS,EAATA,SAAS;AACTJ,IAAAA,cAAc,EAAdA,cAAc;AACdD,IAAAA,eAAe,EAAfA,eAAe;AACfI,IAAAA,iBAAiB,EAAjBA,iBAAiB;AACjBD,IAAAA,mBAAmB,EAAnBA,mBAAmB;IAAAvB,QAAA,EAAA,CAGpBmE,oBAAU,CAACsF,YAAY,CAAC,iBAAIxJ,cAAA,CAACuJ,QAAQ,EAAArJ,aAAA,CAAA,EAAA,EAAK0M,aAAa,CAAG,CAAC,EAC3DF,eAAe,gBACd1M,cAAA,CAAC8B,mBAAmB,EAAA;AACZS,MAAAA,WAAW,EAAXA,WAAW;AAAEhC,MAAAA,UAAU,EAAVA,UAAU;AAAE4B,MAAAA,IAAI,EAAJA,IAAI;AACnCF,MAAAA,IAAI,EAAEiK,qBAAsB;AAC5B9J,MAAAA,QAAQ,EAAEkK,oBAAqB;AAC/BjK,MAAAA,cAAc,EAAEmK,eAAgB;AAChCtK,MAAAA,YAAY,EAAE1B;AAAyB,KACxC,CAAC,gBAEFX,eAAA,CAAAiN,mBAAA,EAAA;AAAA/M,MAAAA,QAAA,GACGmM,qBAAqB,iBAAIlM,cAAA,CAAC8J,YAAY,EAAA5J,aAAA,CAAA,EAAA,EAAK2M,iBAAiB,CAAG,CAAC,EAChEF,sBAAsB,iBACrB3M,cAAA,CAACS,iBAAM,EAAAP,aAAA,CAAA;AACLQ,QAAAA,QAAQ,EAAEH,UAAW;AACrBI,QAAAA,IAAI,EAAEyH,gBAAK;AACXrE,QAAAA,KAAK,EAAE7F,CAAC,CAAC,yBAAyB,EAAEmK,kBAAQ,CAAE;AAC9ChI,QAAAA,IAAI,EAAC,IAAI;AACTQ,QAAAA,OAAO,EAAC,MAAM;QACdC,OAAO,EAAE,SAATA,OAAOA,GAAA;UAAA,OAAQN,wBAAwB,CAAC,IAAI,CAAC;AAAA,QAAA;OAAC,EAC1C+B,WAAW,CAChB,CACF;AAAA,KACD,CACH;AAAA,GACQ,CAAC;AAEhB;;;;"}
@@ -35,6 +35,7 @@ require('@babel/runtime/helpers/objectWithoutProperties');
35
35
  require('axios');
36
36
  require('yup');
37
37
  require('@bigbinary/neeto-hotkeys');
38
+ require('react-dom');
38
39
 
39
40
 
40
41
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}