UNPKG

701 kBJavaScriptView Raw
1import React__default, { useContext, useState, useEffect, useCallback, useRef, createRef, useMemo, useLayoutEffect, useImperativeHandle, createContext, memo, Fragment, createElement } from 'react';
2import tokens, { durationBase, durationSlow } from '@shopify/polaris-tokens';
3import { hsluvToHex, hexToHsluv } from 'hsluv';
4import isEqual from 'lodash/isEqual';
5import { clamp as clamp$1 } from '@shopify/javascript-utilities/math';
6import { __rest } from 'tslib';
7import { CaretDownMinor, HorizontalDotsMinor, TickSmallMinor, AlertMinor, CaretUpMinor, CircleCancelMinor, CancelSmallMinor, CircleTickMajorTwotone, CircleInformationMajorTwotone, CircleAlertMajorTwotone, CircleDisabledMajorTwotone, FlagMajorTwotone, ChevronLeftMinor, MinusMinor, ChevronRightMinor, ArrowLeftMinor, ArrowRightMinor, DragDropMajorMonotone, CircleAlertMajorMonotone, SearchMinor, ChevronUpMinor, ChevronDownMinor, QuestionMarkMajorTwotone, MobileCancelMajorMonotone, ExternalSmallMinor, ArrowUpDownMinor, CalendarMinor, EnableSelectionMinor, MobileHamburgerMajorMonotone } from '@shopify/polaris-icons';
8import { FOCUSABLE_SELECTOR, findFirstFocusableNode, focusFirstFocusableNode, focusLastFocusableNode } from '@shopify/javascript-utilities/focus';
9import debounce from 'lodash/debounce';
10import { addEventListener, removeEventListener } from '@shopify/javascript-utilities/events';
11import { closest, nodeContainsDescendant } from '@shopify/javascript-utilities/dom';
12import { getRectForNode, Rect } from '@shopify/javascript-utilities/geometry';
13import { createPortal } from 'react-dom';
14import { createUniqueIDFactory } from '@shopify/javascript-utilities/other';
15import { write, read } from '@shopify/javascript-utilities/fastdom';
16import createApp, { getShopOrigin, LifecycleHook } from '@shopify/app-bridge';
17import hoistStatics from 'hoist-non-react-statics';
18import { isSameDay, Months, Weekdays, getWeeksForMonth, isDateBefore, isDateAfter, dateIsSelected, dateIsInRange, getNewRange, getNextDisplayYear, getNextDisplayMonth, getPreviousDisplayYear, getPreviousDisplayMonth } from '@shopify/javascript-utilities/dates';
19export { Months } from '@shopify/javascript-utilities/dates';
20import { CSSTransition, TransitionGroup, Transition } from '@material-ui/react-transition-group';
21import { Redirect, ButtonGroup as ButtonGroup$1, Button as Button$1, Modal as Modal$2, Loading as Loading$2, TitleBar, ResourcePicker as ResourcePicker$2, Toast as Toast$2 } from '@shopify/app-bridge/actions';
22
23if (typeof window !== 'undefined') {
24 window.Polaris = window.Polaris || {};
25 window.Polaris.VERSION = '4.9.1';
26}
27
28var polarisVersion = '4.9.1';
29
30var ThemeContext = React__default.createContext(undefined);
31
32function _classCallCheck(instance, Constructor) {
33 if (!(instance instanceof Constructor)) {
34 throw new TypeError("Cannot call a class as a function");
35 }
36}
37
38function _defineProperties(target, props) {
39 for (var i = 0; i < props.length; i++) {
40 var descriptor = props[i];
41 descriptor.enumerable = descriptor.enumerable || false;
42 descriptor.configurable = true;
43 if ("value" in descriptor) descriptor.writable = true;
44 Object.defineProperty(target, descriptor.key, descriptor);
45 }
46}
47
48function _createClass(Constructor, protoProps, staticProps) {
49 if (protoProps) _defineProperties(Constructor.prototype, protoProps);
50 if (staticProps) _defineProperties(Constructor, staticProps);
51 return Constructor;
52}
53
54function _inherits(subClass, superClass) {
55 if (typeof superClass !== "function" && superClass !== null) {
56 throw new TypeError("Super expression must either be null or a function");
57 }
58
59 subClass.prototype = Object.create(superClass && superClass.prototype, {
60 constructor: {
61 value: subClass,
62 writable: true,
63 configurable: true
64 }
65 });
66 if (superClass) _setPrototypeOf(subClass, superClass);
67}
68
69function _getPrototypeOf(o) {
70 _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
71 return o.__proto__ || Object.getPrototypeOf(o);
72 };
73 return _getPrototypeOf(o);
74}
75
76function _setPrototypeOf(o, p) {
77 _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
78 o.__proto__ = p;
79 return o;
80 };
81
82 return _setPrototypeOf(o, p);
83}
84
85function isNativeReflectConstruct() {
86 if (typeof Reflect === "undefined" || !Reflect.construct) return false;
87 if (Reflect.construct.sham) return false;
88 if (typeof Proxy === "function") return true;
89
90 try {
91 Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
92 return true;
93 } catch (e) {
94 return false;
95 }
96}
97
98function _construct(Parent, args, Class) {
99 if (isNativeReflectConstruct()) {
100 _construct = Reflect.construct;
101 } else {
102 _construct = function _construct(Parent, args, Class) {
103 var a = [null];
104 a.push.apply(a, args);
105 var Constructor = Function.bind.apply(Parent, a);
106 var instance = new Constructor();
107 if (Class) _setPrototypeOf(instance, Class.prototype);
108 return instance;
109 };
110 }
111
112 return _construct.apply(null, arguments);
113}
114
115function _isNativeFunction(fn) {
116 return Function.toString.call(fn).indexOf("[native code]") !== -1;
117}
118
119function _wrapNativeSuper(Class) {
120 var _cache = typeof Map === "function" ? new Map() : undefined;
121
122 _wrapNativeSuper = function _wrapNativeSuper(Class) {
123 if (Class === null || !_isNativeFunction(Class)) return Class;
124
125 if (typeof Class !== "function") {
126 throw new TypeError("Super expression must either be null or a function");
127 }
128
129 if (typeof _cache !== "undefined") {
130 if (_cache.has(Class)) return _cache.get(Class);
131
132 _cache.set(Class, Wrapper);
133 }
134
135 function Wrapper() {
136 return _construct(Class, arguments, _getPrototypeOf(this).constructor);
137 }
138
139 Wrapper.prototype = Object.create(Class.prototype, {
140 constructor: {
141 value: Wrapper,
142 enumerable: false,
143 writable: true,
144 configurable: true
145 }
146 });
147 return _setPrototypeOf(Wrapper, Class);
148 };
149
150 return _wrapNativeSuper(Class);
151}
152
153function _assertThisInitialized(self) {
154 if (self === void 0) {
155 throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
156 }
157
158 return self;
159}
160
161function _possibleConstructorReturn(self, call) {
162 if (call && (typeof call === "object" || typeof call === "function")) {
163 return call;
164 }
165
166 return _assertThisInitialized(self);
167}
168
169function _slicedToArray(arr, i) {
170 return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();
171}
172
173function _toConsumableArray(arr) {
174 return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
175}
176
177function _arrayWithoutHoles(arr) {
178 if (Array.isArray(arr)) {
179 for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
180
181 return arr2;
182 }
183}
184
185function _arrayWithHoles(arr) {
186 if (Array.isArray(arr)) return arr;
187}
188
189function _iterableToArray(iter) {
190 if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
191}
192
193function _iterableToArrayLimit(arr, i) {
194 if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) {
195 return;
196 }
197
198 var _arr = [];
199 var _n = true;
200 var _d = false;
201 var _e = undefined;
202
203 try {
204 for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
205 _arr.push(_s.value);
206
207 if (i && _arr.length === i) break;
208 }
209 } catch (err) {
210 _d = true;
211 _e = err;
212 } finally {
213 try {
214 if (!_n && _i["return"] != null) _i["return"]();
215 } finally {
216 if (_d) throw _e;
217 }
218 }
219
220 return _arr;
221}
222
223function _nonIterableSpread() {
224 throw new TypeError("Invalid attempt to spread non-iterable instance");
225}
226
227function _nonIterableRest() {
228 throw new TypeError("Invalid attempt to destructure non-iterable instance");
229}
230
231var MissingAppProviderError =
232/*#__PURE__*/
233function (_Error) {
234 _inherits(MissingAppProviderError, _Error);
235
236 function MissingAppProviderError() {
237 var _this;
238
239 var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
240
241 _classCallCheck(this, MissingAppProviderError);
242
243 _this = _possibleConstructorReturn(this, _getPrototypeOf(MissingAppProviderError).call(this, "".concat(message ? "".concat(message, " ") : message, "Your application must be wrapped in an <AppProvider> component. See https://polaris.shopify.com/components/structure/app-provider for implementation instructions.")));
244 _this.name = 'MissingAppProviderError';
245 return _this;
246 }
247
248 return MissingAppProviderError;
249}(_wrapNativeSuper(Error));
250
251function useTheme() {
252 var theme = useContext(ThemeContext);
253
254 if (!theme) {
255 throw new MissingAppProviderError('No Theme was provided.');
256 }
257
258 return theme;
259}
260
261// eslint-disable-next-line shopify/typescript/prefer-pascal-case-enums
262var UNSTABLE_Color;
263
264(function (UNSTABLE_Color) {
265 UNSTABLE_Color["Surface"] = "#FAFAFA";
266 UNSTABLE_Color["DarkSurface"] = "#111213";
267 UNSTABLE_Color["OnSurface"] = "#111213";
268 UNSTABLE_Color["Interactive"] = "#2E72D2";
269 UNSTABLE_Color["Neutral"] = "#111213";
270 UNSTABLE_Color["Primary"] = "#008060";
271 UNSTABLE_Color["Critical"] = "#D82C0D";
272 UNSTABLE_Color["Warning"] = "#FFC453";
273 UNSTABLE_Color["Highlight"] = "#5BCDDA";
274 UNSTABLE_Color["Success"] = "#008060";
275 UNSTABLE_Color["Decorative"] = "#FDC7CE";
276})(UNSTABLE_Color || (UNSTABLE_Color = {}));
277
278var roleVariants = {
279 surface: [{
280 name: 'surface',
281 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
282 light: {},
283 dark: {}
284 }, {
285 name: 'surfaceBackground',
286 description: 'For use in the background of our UIs as a background color, in components such as Page and Frame backgrounds.',
287 light: {
288 lightness: 98.3
289 },
290 dark: {
291 lightness: 3.3
292 }
293 }, {
294 name: 'surfaceForeground',
295 description: 'For use in the foreground of our UIs as a background color, in components such as Card, Modal, and Popover.',
296 light: {
297 lightness: 100
298 },
299 dark: {
300 lightness: 12.7
301 }
302 }, {
303 name: 'surfaceForegroundSubdued',
304 description: 'For use in the foreground of our UIs as a subdued background color, in components such as Card, Modal, and Popover.',
305 light: {
306 lightness: 98.3
307 },
308 dark: {
309 lightness: 10
310 }
311 }, {
312 name: 'surfaceHovered',
313 description: 'For use as a surface color on interactive elements such as resource list items and action list items when in a hovered state.',
314 light: {
315 lightness: 96
316 },
317 dark: {
318 lightness: 20
319 }
320 }, {
321 name: 'surfacePressed',
322 description: 'For use as a surface color on interactive elements such as resource list items and action list items when in a pressed state.',
323 light: {
324 lightness: 90
325 },
326 dark: {
327 lightness: 27
328 }
329 }, {
330 name: 'backdrop',
331 description: 'For use as the background color of the backdrop component for navigation and modal. This color has an alpha of `0.5`.',
332 light: {
333 hue: 0,
334 saturation: 0,
335 lightness: 0,
336 alpha: 0.5
337 },
338 dark: {
339 hue: 0,
340 saturation: 0,
341 lightness: 0,
342 alpha: 0.5
343 }
344 }, {
345 name: 'shadowFromAmbientLight',
346 description: 'For use in building shadows for popovers, cards, and modals. This color has an alpha of `0.05`.',
347 light: {
348 hue: 180,
349 saturation: 5,
350 lightness: 8,
351 alpha: 0.05
352 },
353 dark: {
354 hue: 180,
355 saturation: 5,
356 lightness: 8,
357 alpha: 0.05
358 }
359 }, {
360 name: 'shadowFromDirectLight',
361 description: 'For use in building shadows for popovers, cards, and modals. This color has an alpha of `0.15`.',
362 light: {
363 hue: 0,
364 saturation: 0,
365 lightness: 0,
366 alpha: 0.15
367 },
368 dark: {
369 hue: 0,
370 saturation: 0,
371 lightness: 0,
372 alpha: 0.15
373 }
374 }],
375 onSurface: [{
376 name: 'onSurface',
377 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
378 light: {},
379 dark: {}
380 }, {
381 name: 'borderOnSurface',
382 description: 'For use as a border (border or interactive outline).',
383 light: {
384 lightness: 75
385 },
386 dark: {
387 lightness: 35
388 }
389 }, {
390 name: 'borderDisabledOnSurface',
391 description: 'For use as a an interactive outline on disabled elements.',
392 light: {
393 lightness: 95
394 },
395 dark: {
396 lightness: 70
397 }
398 }, {
399 name: 'borderSubduedOnSurface',
400 description: 'For use as a subdued border (border or interactive outline).',
401 light: {
402 lightness: 85
403 },
404 dark: {
405 lightness: 32
406 }
407 }, {
408 name: 'iconOnSurface',
409 description: 'For use as the fill color of neutral icons.',
410 light: {
411 lightness: 40.1
412 },
413 dark: {
414 lightness: 70.1
415 }
416 }, {
417 name: 'iconDisabledOnSurface',
418 description: 'For use as the fill color of disabled neutral icons.',
419 light: {
420 lightness: 76.9
421 },
422 dark: {
423 lightness: 36.8
424 }
425 }, {
426 name: 'iconSubduedOnSurface',
427 description: 'For use as the fill color of subdued neutral icons.',
428 light: {
429 lightness: 59.8
430 },
431 dark: {
432 lightness: 52.1
433 }
434 }, {
435 name: 'textOnSurface',
436 description: 'For use as a neutral text color.',
437 light: {
438 lightness: 13.1
439 },
440 dark: {
441 lightness: 90.8
442 }
443 }, {
444 name: 'textDisabledOnSurface',
445 description: 'For use as a disabled neutral text color.',
446 light: {
447 lightness: 61.3
448 },
449 dark: {
450 lightness: 48.2
451 }
452 }, {
453 name: 'textSubduedOnSurface',
454 description: 'For use as a subdued neutral text color.',
455 light: {
456 lightness: 47.4
457 },
458 dark: {
459 lightness: 65.1
460 }
461 }],
462 interactive: [{
463 name: 'interactive',
464 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
465 light: {},
466 dark: {}
467 }, {
468 name: 'interactiveAction',
469 description: 'Used for links and plain buttons.',
470 light: {
471 lightness: 48.6
472 },
473 dark: {
474 lightness: 65,
475 saturation: 100,
476 hue: 247.6
477 }
478 }, {
479 name: 'interactiveActionDisabled',
480 description: 'Used for disabled links and plain buttons.',
481 light: {
482 lightness: 58
483 },
484 dark: {
485 lightness: 42
486 }
487 }, {
488 name: 'interactiveActionHovered',
489 description: 'Used for hovered links and plain buttons.',
490 light: {
491 lightness: 37
492 },
493 dark: {
494 lightness: 70,
495 saturation: 100,
496 hue: 247.6
497 }
498 }, {
499 name: 'interactiveActionSubdued',
500 description: 'Used for subdued links and plain buttons.',
501 light: {
502 lightness: 51
503 },
504 dark: {
505 lightness: 49
506 }
507 }, {
508 name: 'interactiveActionPressed',
509 description: 'Used for pressed links and plain buttons.',
510 light: {
511 lightness: 31
512 },
513 dark: {
514 lightness: 75,
515 saturation: 100,
516 hue: 247.6
517 }
518 }, {
519 name: 'interactiveFocus',
520 description: 'For use in the focus ring on interactive elements.',
521 light: {
522 lightness: 58
523 },
524 dark: {
525 lightness: 42
526 }
527 }, {
528 name: 'interactiveSelected',
529 description: 'For use as a surface color in selected interactive elements, in components such as option list and resource list.',
530 light: {
531 lightness: 96
532 },
533 dark: {
534 lightness: 4
535 }
536 }, {
537 name: 'interactiveSelectedHovered',
538 description: 'For use as a surface color in selected interactive elements that are hovered, in components such as option list and resource list.',
539 light: {
540 lightness: 89
541 },
542 dark: {
543 lightness: 11
544 }
545 }, {
546 name: 'interactiveSelectedPressed',
547 description: 'For use as a surface color in selected interactive elements that are pressed, in components such as option list and resource list.',
548 light: {
549 lightness: 82
550 },
551 dark: {
552 lightness: 18
553 }
554 }],
555 neutral: [{
556 name: 'neutral',
557 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
558 light: {},
559 dark: {}
560 }, {
561 name: 'neutralAction',
562 description: 'Used for secondary buttons and tertiary buttons, as well as in form elements as a background color and pontentially other neutral surfaces.',
563 light: {
564 lightness: 93
565 },
566 dark: {
567 lightness: 22
568 }
569 }, {
570 name: 'neutralActionDisabled',
571 description: 'Used as a disabled state for secondary buttons',
572 light: {
573 lightness: 94
574 },
575 dark: {
576 lightness: 13
577 }
578 }, {
579 name: 'neutralActionHovered',
580 description: 'Used as a hovered state for secondary buttons',
581 light: {
582 lightness: 90
583 },
584 dark: {
585 lightness: 37
586 }
587 }, {
588 name: 'neutralActionPressed',
589 description: 'Used as a pressed state for secondary buttons',
590 light: {
591 lightness: 87
592 },
593 dark: {
594 lightness: 42
595 }
596 }],
597 primary: [{
598 name: 'primary',
599 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
600 light: {},
601 dark: {}
602 }, {
603 name: 'primaryAction',
604 description: 'Used as the background color for primary actions, and as the fill color for icons and the text color in navigation and tabs to communicate interaction states.',
605 light: {
606 lightness: 47.3
607 },
608 dark: {
609 lightness: 47.3
610 }
611 }, {
612 name: 'primaryActionDisabled',
613 description: 'Used as the background color for disabled primary actions, and as the fill color for icons and the text color in navigation and tabs to communicate interaction states.',
614 light: {
615 lightness: 32
616 },
617 dark: {
618 lightness: 32
619 }
620 }, {
621 name: 'primaryActionHovered',
622 description: 'Used as the background color for hovered primary actions, and as the fill color for icons and the text color in navigation and tabs to communicate interaction states.',
623 light: {
624 lightness: 42.3
625 },
626 dark: {
627 lightness: 55
628 }
629 }, {
630 name: 'primaryActionPressed',
631 description: 'Used as the background color for pressed primary actions, and as the fill color for icons and the text color in navigation and tabs to communicate interaction states.',
632 light: {
633 lightness: 37.3
634 },
635 dark: {
636 lightness: 60
637 }
638 }, {
639 name: 'iconOnPrimary',
640 description: 'For use as a fill color for icons on primary actions. Not for use in icons on navigation and tabs.',
641 light: {
642 lightness: 98
643 },
644 dark: {
645 lightness: 98
646 }
647 }, {
648 name: 'textOnPrimary',
649 description: 'For use as a text color on primary actions. Not for use in text on navigation and tabs.',
650 light: {
651 lightness: 100
652 },
653 dark: {
654 lightness: 100
655 }
656 }, {
657 name: 'primarySelected',
658 description: 'Used as a surface color to indicate selected interactive states in navigation and tabs.',
659 light: {
660 lightness: 95,
661 saturation: 30
662 },
663 dark: {
664 lightness: 5,
665 saturation: 30
666 }
667 }, {
668 name: 'primarySelectedHovered',
669 description: 'Used as a surface color to indicate selected interactive states that are hovered in navigation and tabs.',
670 light: {
671 lightness: 81,
672 saturation: 22
673 },
674 dark: {
675 lightness: 19,
676 saturation: 22
677 }
678 }, {
679 name: 'primarySelectedPressed',
680 description: 'Used as a surface color to indicate selected interactive states that are pressed in navigation and tabs.',
681 light: {
682 lightness: 74,
683 saturation: 22
684 },
685 dark: {
686 lightness: 26,
687 saturation: 22
688 }
689 }],
690 critical: [{
691 name: 'critical',
692 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
693 light: {},
694 dark: {}
695 }, {
696 name: 'criticalBorder',
697 description: 'For use as a border on critical components such as banners, and as an outline on interactive elements in an error state.',
698 light: {
699 lightness: 50
700 },
701 dark: {
702 lightness: 50
703 }
704 }, {
705 name: 'criticalBorderDisabled',
706 description: 'For use as a disabled border on critical components such as banners, and as an outline on interactive elements in an error state.',
707 light: {
708 lightness: 82
709 },
710 dark: {
711 lightness: 28
712 }
713 }, {
714 name: 'criticalIcon',
715 description: 'For use as an icon fill color on top of critical elements.',
716 light: {
717 lightness: 52
718 },
719 dark: {
720 lightness: 48
721 }
722 }, {
723 name: 'criticalSurface',
724 description: 'For use as a surface color on critical elements including badges.',
725 light: {
726 lightness: 98.6
727 },
728 dark: {
729 lightness: 12
730 }
731 }, {
732 name: 'criticalSurfaceSubdued',
733 description: 'For use as a subdued surface color on critical elements including banners.',
734 light: {
735 lightness: 98
736 },
737 dark: {
738 lightness: 12
739 }
740 }, {
741 name: 'criticalSurfaceSubduedHovered',
742 description: 'For use as a surface color on critical interactive elements including action list items in a hovered state.',
743 light: {
744 lightness: 96
745 },
746 dark: {
747 lightness: 15,
748 saturation: 60
749 }
750 }, {
751 name: 'criticalSurfaceSubduedPressed',
752 description: 'For use as a surface color on critical interactive elements including action list items in a pressed state.',
753 light: {
754 lightness: 88
755 },
756 dark: {
757 lightness: 22
758 }
759 }, {
760 name: 'criticalText',
761 description: 'For use as a text color in inert critical elements such as exception list. Not for use as a text color on banners and badges.',
762 light: {
763 lightness: 47.3
764 },
765 dark: {
766 lightness: 65,
767 saturation: 70
768 }
769 }, {
770 name: 'criticalAction',
771 description: 'For use as the background color for destructive buttons, and as the background color for error toast messages.',
772 light: {
773 lightness: 47.5
774 },
775 dark: {
776 lightness: 45
777 }
778 }, {
779 name: 'criticalActionDisabled',
780 description: 'For use as the background color for disabled destructive buttons, and as the background color for error toast messages.',
781 light: {
782 lightness: 59
783 },
784 dark: {
785 lightness: 41
786 }
787 }, {
788 name: 'criticalActionHovered',
789 description: 'For use as the background color for hovered destructive buttons, and as the background color for error toast messages.',
790 light: {
791 lightness: 42.5
792 },
793 dark: {
794 lightness: 50
795 }
796 }, {
797 name: 'criticalActionPressed',
798 description: 'For use as the background color for pressed destructive buttons, and as the background color for error toast messages.',
799 light: {
800 lightness: 37.5
801 },
802 dark: {
803 lightness: 55
804 }
805 }, {
806 name: 'iconOnCritical',
807 description: 'For use as a fill color for icons on critical actions.',
808 light: {
809 lightness: 98
810 },
811 dark: {
812 lightness: 98
813 }
814 }, {
815 name: 'textOnCritical',
816 description: 'For use as a text color on critical actions.',
817 light: {
818 lightness: 100
819 },
820 dark: {
821 lightness: 100
822 }
823 }, {
824 name: 'criticalLink',
825 description: 'For use as a text color in destructive plain buttons, as well as a text color on destructive action list items. Not for use on critical banners and badges.',
826 light: {
827 lightness: 48.5
828 },
829 dark: {
830 lightness: 65
831 }
832 }, {
833 name: 'criticalLinkDisabled',
834 description: 'For use as a text color in disabled destructive plain buttons, as well as a text color on destructive action list items. Not for use on critical banners and badges.',
835 light: {
836 lightness: 72
837 },
838 dark: {
839 lightness: 78
840 }
841 }, {
842 name: 'criticalLinkHovered',
843 description: 'For use as a text color in hovered destructive plain buttons, as well as a text color on destructive action list items. Not for use on critical banners and badges.',
844 light: {
845 lightness: 45
846 },
847 dark: {
848 lightness: 70
849 }
850 }, {
851 name: 'criticalLinkPressed',
852 description: 'For use as a text color in pressed destructive plain buttons, as well as a text color on destructive action list items. Not for use on critical banners and badges.',
853 light: {
854 lightness: 21
855 },
856 dark: {
857 lightness: 75
858 }
859 }],
860 warning: [{
861 name: 'warning',
862 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
863 light: {},
864 dark: {}
865 }, {
866 name: 'warningBorder',
867 description: 'For use as a border on warning components such as banners.',
868 light: {
869 lightness: 76.6
870 },
871 dark: {
872 lightness: 50
873 }
874 }, {
875 name: 'warningIcon',
876 description: 'For use as an icon fill color on top of warning elements.',
877 light: {
878 lightness: 66
879 },
880 dark: {
881 lightness: 34
882 }
883 }, {
884 name: 'warningSurface',
885 description: 'For use as a surface color on warning elements including badges.',
886 light: {
887 lightness: 84.5
888 },
889 dark: {
890 lightness: 50
891 }
892 }, {
893 name: 'warningSurfaceSubdued',
894 description: 'For use as a subdued surface color on warning elements including banners.',
895 light: {
896 lightness: 96
897 },
898 dark: {
899 lightness: 26,
900 saturation: 71
901 }
902 }, {
903 name: 'warningText',
904 description: 'For use as a text color in inert critical elements such as exception list. Not for use as a text color on banners and badges.',
905 light: {
906 lightness: 47.4
907 },
908 dark: {
909 lightness: 64.9
910 }
911 }],
912 highlight: [{
913 name: 'highlight',
914 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
915 light: {},
916 dark: {}
917 }, {
918 name: 'highlightBorder',
919 description: 'For use as a border on informational components such as banners.',
920 light: {
921 lightness: 60
922 },
923 dark: {
924 lightness: 60
925 }
926 }, {
927 name: 'highlightIcon',
928 description: 'For use as an icon fill color on top of informational elements.',
929 light: {
930 lightness: 58
931 },
932 dark: {
933 lightness: 42
934 }
935 }, {
936 name: 'highlightSurface',
937 description: 'For use as a surface color on information elements including badges.',
938 light: {
939 lightness: 84.5,
940 saturation: 60
941 },
942 dark: {
943 lightness: 40,
944 saturation: 100
945 }
946 }, {
947 name: 'highlightSurfaceSubdued',
948 description: 'For use as a surface color on information elements including banners.',
949 light: {
950 lightness: 98.6
951 },
952 dark: {
953 lightness: 20
954 }
955 }, {
956 name: 'highlightext',
957 description: 'For use as a text color in inert informational elements. Not for use as a text color on banners and badges.',
958 light: {
959 lightness: 10
960 },
961 dark: {
962 lightness: 90
963 }
964 }],
965 success: [{
966 name: 'success',
967 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
968 light: {},
969 dark: {}
970 }, {
971 name: 'successBorder',
972 description: 'For use as a border on success components such as banners.',
973 light: {
974 lightness: 50
975 },
976 dark: {
977 lightness: 50
978 }
979 }, {
980 name: 'successIcon',
981 description: 'For use as an icon fill color on top of success elements.',
982 light: {
983 lightness: 25
984 },
985 dark: {
986 lightness: 35
987 }
988 }, {
989 name: 'successSurface',
990 description: 'For use as a surface color on success elements including badges.',
991 light: {
992 lightness: 84.5,
993 saturation: 60
994 },
995 dark: {
996 lightness: 35
997 }
998 }, {
999 name: 'successSurfaceSubdued',
1000 description: 'For use as a surface color on information elements including banners.',
1001 light: {
1002 lightness: 99,
1003 saturation: 60
1004 },
1005 dark: {
1006 lightness: 20,
1007 saturation: 60
1008 }
1009 }, {
1010 name: 'successText',
1011 description: 'For use as a text color in inert success elements. Not for use as a text color on banners and badges.',
1012 light: {
1013 lightness: 47.3
1014 },
1015 dark: {
1016 lightness: 65,
1017 saturation: 70
1018 }
1019 }],
1020 decorative: [{
1021 name: 'decorativeOneSurface',
1022 description: 'For use as a decorative surface color.',
1023 light: {
1024 hue: 56,
1025 saturation: 100,
1026 lightness: 84
1027 },
1028 dark: {
1029 hue: 54,
1030 saturation: 98,
1031 lightness: 46
1032 }
1033 }, {
1034 name: 'decorativeOneText',
1035 description: 'For use as a decorative text color that is applied on a decorative surface.',
1036 light: {
1037 hue: 52,
1038 saturation: 100,
1039 lightness: 18
1040 },
1041 dark: {
1042 lightness: 100
1043 }
1044 }, {
1045 name: 'decorativeTwoSurface',
1046 description: 'For use as a decorative surface color.',
1047 light: {
1048 hue: 30,
1049 saturation: 100,
1050 lightness: 84
1051 },
1052 dark: {
1053 hue: 24,
1054 saturation: 96,
1055 lightness: 52
1056 }
1057 }, {
1058 name: 'decorativeTwoText',
1059 description: 'For use as a decorative text color that is applied on a decorative surface.',
1060 light: {
1061 hue: 362,
1062 saturation: 80,
1063 lightness: 14
1064 },
1065 dark: {
1066 lightness: 100
1067 }
1068 }, {
1069 name: 'decorativeThreeSurface',
1070 description: 'For use as a decorative surface color.',
1071 light: {
1072 hue: 144,
1073 saturation: 54,
1074 lightness: 84
1075 },
1076 dark: {
1077 hue: 154,
1078 saturation: 100,
1079 lightness: 46
1080 }
1081 }, {
1082 name: 'decorativeThreeText',
1083 description: 'For use as a decorative text color that is applied on a decorative surface.',
1084 light: {
1085 hue: 144,
1086 saturation: 100,
1087 lightness: 16
1088 },
1089 dark: {
1090 lightness: 100
1091 }
1092 }, {
1093 name: 'decorativeFourSurface',
1094 description: 'For use as a decorative surface color.',
1095 light: {
1096 hue: 180,
1097 saturation: 56,
1098 lightness: 84
1099 },
1100 dark: {
1101 hue: 188,
1102 saturation: 95,
1103 lightness: 47
1104 }
1105 }, {
1106 name: 'decorativeFourText',
1107 description: 'For use as a decorative text color that is applied on a decorative surface.',
1108 light: {
1109 hue: 190,
1110 saturation: 100,
1111 lightness: 16
1112 },
1113 dark: {
1114 lightness: 100
1115 }
1116 }, {
1117 name: 'decorativeFiveSurface',
1118 description: 'For use as a decorative surface color.',
1119 light: {},
1120 dark: {
1121 hue: 363,
1122 saturation: 77,
1123 lightness: 45
1124 }
1125 }, {
1126 name: 'decorativeFiveText',
1127 description: 'For use as a decorative text color that is applied on a decorative surface.',
1128 light: {
1129 hue: 363,
1130 saturation: 78,
1131 lightness: 16
1132 },
1133 dark: {
1134 lightness: 100
1135 }
1136 }]
1137};
1138
1139function compose() {
1140 for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {
1141 fns[_key] = arguments[_key];
1142 }
1143
1144 return fns.reduce(function (func, group) {
1145 return function () {
1146 return func(group.apply(void 0, arguments));
1147 };
1148 });
1149}
1150
1151function rgbString(color) {
1152 var red = color.red,
1153 green = color.green,
1154 blue = color.blue;
1155
1156 if (Object.prototype.hasOwnProperty.call(color, 'alpha')) {
1157 return "rgba(".concat(red, ", ").concat(green, ", ").concat(blue, ", ").concat(color.alpha, ")");
1158 } else {
1159 return "rgb(".concat(red, ", ").concat(green, ", ").concat(blue, ")");
1160 }
1161}
1162var rgbaString = rgbString;
1163function rgbToHex(_ref) {
1164 var red = _ref.red,
1165 green = _ref.green,
1166 blue = _ref.blue;
1167 return "#".concat(componentToHex(red)).concat(componentToHex(green)).concat(componentToHex(blue));
1168}
1169
1170function componentToHex(component) {
1171 var hex = component.toString(16);
1172 return hex.length === 1 ? "0".concat(hex) : hex;
1173}
1174
1175function hsbToHex(color) {
1176 return rgbToHex(hsbToRgb(color));
1177}
1178
1179function rgbFromHueAndChroma(hue, chroma) {
1180 var huePrime = hue / 60;
1181 var hueDelta = 1 - Math.abs(huePrime % 2 - 1);
1182 var intermediateValue = chroma * hueDelta;
1183 var red = 0;
1184 var green = 0;
1185 var blue = 0;
1186
1187 if (huePrime >= 0 && huePrime <= 1) {
1188 red = chroma;
1189 green = intermediateValue;
1190 blue = 0;
1191 }
1192
1193 if (huePrime >= 1 && huePrime <= 2) {
1194 red = intermediateValue;
1195 green = chroma;
1196 blue = 0;
1197 }
1198
1199 if (huePrime >= 2 && huePrime <= 3) {
1200 red = 0;
1201 green = chroma;
1202 blue = intermediateValue;
1203 }
1204
1205 if (huePrime >= 3 && huePrime <= 4) {
1206 red = 0;
1207 green = intermediateValue;
1208 blue = chroma;
1209 }
1210
1211 if (huePrime >= 4 && huePrime <= 5) {
1212 red = intermediateValue;
1213 green = 0;
1214 blue = chroma;
1215 }
1216
1217 if (huePrime >= 5 && huePrime <= 6) {
1218 red = chroma;
1219 green = 0;
1220 blue = intermediateValue;
1221 }
1222
1223 return {
1224 red,
1225 green,
1226 blue
1227 };
1228}
1229
1230function hsbToRgb(color) {
1231 var hue = color.hue,
1232 saturation = color.saturation,
1233 brightness = color.brightness,
1234 _color$alpha = color.alpha,
1235 alpha = _color$alpha === void 0 ? 1 : _color$alpha;
1236 var chroma = brightness * saturation;
1237
1238 var _rgbFromHueAndChroma = rgbFromHueAndChroma(hue, chroma),
1239 red = _rgbFromHueAndChroma.red,
1240 green = _rgbFromHueAndChroma.green,
1241 blue = _rgbFromHueAndChroma.blue;
1242
1243 var chromaBrightnessDelta = brightness - chroma;
1244 red += chromaBrightnessDelta;
1245 green += chromaBrightnessDelta;
1246 blue += chromaBrightnessDelta;
1247 return {
1248 red: Math.round(red * 255),
1249 green: Math.round(green * 255),
1250 blue: Math.round(blue * 255),
1251 alpha
1252 };
1253}
1254function hslToRgb(color) {
1255 var hue = color.hue,
1256 saturation = color.saturation,
1257 lightness = color.lightness,
1258 _color$alpha2 = color.alpha,
1259 alpha = _color$alpha2 === void 0 ? 1 : _color$alpha2;
1260 var chroma = (1 - Math.abs(2 * (lightness / 100) - 1)) * (saturation / 100);
1261
1262 var _rgbFromHueAndChroma2 = rgbFromHueAndChroma(hue, chroma),
1263 red = _rgbFromHueAndChroma2.red,
1264 green = _rgbFromHueAndChroma2.green,
1265 blue = _rgbFromHueAndChroma2.blue;
1266
1267 var lightnessVal = lightness / 100 - chroma / 2;
1268 red += lightnessVal;
1269 green += lightnessVal;
1270 blue += lightnessVal;
1271 return {
1272 red: Math.round(red * 255),
1273 green: Math.round(green * 255),
1274 blue: Math.round(blue * 255),
1275 alpha
1276 };
1277} // ref https://en.wikipedia.org/wiki/HSL_and_HSV
1278
1279function rgbToHsbl(color) {
1280 var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'b';
1281 var r = color.red,
1282 g = color.green,
1283 b = color.blue,
1284 _color$alpha3 = color.alpha,
1285 alpha = _color$alpha3 === void 0 ? 1 : _color$alpha3;
1286 var red = r / 255;
1287 var green = g / 255;
1288 var blue = b / 255;
1289 var largestComponent = Math.max(red, green, blue);
1290 var smallestComponent = Math.min(red, green, blue);
1291 var delta = largestComponent - smallestComponent;
1292 var lightness = (largestComponent + smallestComponent) / 2;
1293 var saturation = 0;
1294
1295 if (largestComponent === 0) {
1296 saturation = 0;
1297 } else if (type === 'b') {
1298 saturation = delta / largestComponent;
1299 } else if (type === 'l') {
1300 var baseSaturation = lightness > 0.5 ? delta / (2 - largestComponent - smallestComponent) : delta / (largestComponent + smallestComponent);
1301 saturation = isNaN(baseSaturation) ? 0 : baseSaturation;
1302 }
1303
1304 var huePercentage = 0;
1305
1306 switch (largestComponent) {
1307 case red:
1308 huePercentage = (green - blue) / delta + (green < blue ? 6 : 0);
1309 break;
1310
1311 case green:
1312 huePercentage = (blue - red) / delta + 2;
1313 break;
1314
1315 case blue:
1316 huePercentage = (red - green) / delta + 4;
1317 }
1318
1319 var hue = Math.round(huePercentage / 6 * 360);
1320 return {
1321 hue: clamp$1(hue, 0, 360) || 0,
1322 saturation: parseFloat(clamp$1(saturation, 0, 1).toFixed(2)),
1323 brightness: parseFloat(clamp$1(largestComponent, 0, 1).toFixed(2)),
1324 lightness: parseFloat(lightness.toFixed(2)),
1325 alpha: parseFloat(alpha.toFixed(2))
1326 };
1327}
1328
1329function rgbToHsb(color) {
1330 var _rgbToHsbl = rgbToHsbl(color, 'b'),
1331 hue = _rgbToHsbl.hue,
1332 saturation = _rgbToHsbl.saturation,
1333 brightness = _rgbToHsbl.brightness,
1334 _rgbToHsbl$alpha = _rgbToHsbl.alpha,
1335 alpha = _rgbToHsbl$alpha === void 0 ? 1 : _rgbToHsbl$alpha;
1336
1337 return {
1338 hue,
1339 saturation,
1340 brightness,
1341 alpha
1342 };
1343}
1344function rgbToHsl(color) {
1345 var _rgbToHsbl2 = rgbToHsbl(color, 'l'),
1346 hue = _rgbToHsbl2.hue,
1347 rawSaturation = _rgbToHsbl2.saturation,
1348 rawLightness = _rgbToHsbl2.lightness,
1349 _rgbToHsbl2$alpha = _rgbToHsbl2.alpha,
1350 alpha = _rgbToHsbl2$alpha === void 0 ? 1 : _rgbToHsbl2$alpha;
1351
1352 var saturation = rawSaturation * 100;
1353 var lightness = rawLightness * 100;
1354 return {
1355 hue,
1356 saturation,
1357 lightness,
1358 alpha
1359 };
1360}
1361function hexToRgb(color) {
1362 if (color.length === 4) {
1363 var repeatHex = function repeatHex(hex1, hex2) {
1364 return color.slice(hex1, hex2).repeat(2);
1365 };
1366
1367 var _red = parseInt(repeatHex(1, 2), 16);
1368
1369 var _green = parseInt(repeatHex(2, 3), 16);
1370
1371 var _blue = parseInt(repeatHex(3, 4), 16);
1372
1373 return {
1374 red: _red,
1375 green: _green,
1376 blue: _blue
1377 };
1378 }
1379
1380 var red = parseInt(color.slice(1, 3), 16);
1381 var green = parseInt(color.slice(3, 5), 16);
1382 var blue = parseInt(color.slice(5, 7), 16);
1383 return {
1384 red,
1385 green,
1386 blue
1387 };
1388}
1389var ColorType;
1390
1391(function (ColorType) {
1392 ColorType["Hex"] = "hex";
1393 ColorType["Rgb"] = "rgb";
1394 ColorType["Rgba"] = "rgba";
1395 ColorType["Hsl"] = "hsl";
1396 ColorType["Hsla"] = "hsla";
1397 ColorType["Default"] = "default";
1398})(ColorType || (ColorType = {}));
1399
1400function getColorType(color) {
1401 if (color.includes('#')) {
1402 return ColorType.Hex;
1403 } else if (color.includes('rgb')) {
1404 return ColorType.Rgb;
1405 } else if (color.includes('rgba')) {
1406 return ColorType.Rgba;
1407 } else if (color.includes('hsl')) {
1408 return ColorType.Hsl;
1409 } else if (color.includes('hsla')) {
1410 return ColorType.Hsla;
1411 } else {
1412 if (process.env.NODE_ENV === 'development') {
1413 /* eslint-disable-next-line no-console */
1414 console.warn('Accepted colors formats are: hex, rgb, rgba, hsl and hsla');
1415 }
1416
1417 return ColorType.Default;
1418 }
1419}
1420
1421function hslToString(hslColor) {
1422 if (typeof hslColor === 'string') {
1423 return hslColor;
1424 }
1425
1426 var _hslColor$alpha = hslColor.alpha,
1427 alpha = _hslColor$alpha === void 0 ? 1 : _hslColor$alpha,
1428 hue = hslColor.hue,
1429 lightness = hslColor.lightness,
1430 saturation = hslColor.saturation;
1431 return "hsla(".concat(hue, ", ").concat(saturation, "%, ").concat(lightness, "%, ").concat(alpha, ")");
1432}
1433
1434function rgbToObject(color) {
1435 // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec
1436 var colorMatch = color.match(/\(([^)]+)\)/);
1437
1438 if (!colorMatch) {
1439 return {
1440 red: 0,
1441 green: 0,
1442 blue: 0,
1443 alpha: 0
1444 };
1445 }
1446
1447 var _colorMatch$1$split = colorMatch[1].split(','),
1448 _colorMatch$1$split2 = _slicedToArray(_colorMatch$1$split, 4),
1449 red = _colorMatch$1$split2[0],
1450 green = _colorMatch$1$split2[1],
1451 blue = _colorMatch$1$split2[2],
1452 alpha = _colorMatch$1$split2[3];
1453
1454 var objColor = {
1455 red: parseInt(red, 10),
1456 green: parseInt(green, 10),
1457 blue: parseInt(blue, 10),
1458 alpha: parseInt(alpha, 10) || 1
1459 };
1460 return objColor;
1461}
1462
1463var hexToHsla = compose(rgbToHsl, hexToRgb);
1464var rbgStringToHsla = compose(rgbToHsl, rgbToObject);
1465
1466function hslToObject(color) {
1467 // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec
1468 var colorMatch = color.match(/\(([^)]+)\)/);
1469
1470 if (!colorMatch) {
1471 return {
1472 hue: 0,
1473 saturation: 0,
1474 lightness: 0,
1475 alpha: 0
1476 };
1477 }
1478
1479 var _colorMatch$1$split3 = colorMatch[1].split(','),
1480 _colorMatch$1$split4 = _slicedToArray(_colorMatch$1$split3, 4),
1481 hue = _colorMatch$1$split4[0],
1482 saturation = _colorMatch$1$split4[1],
1483 lightness = _colorMatch$1$split4[2],
1484 alpha = _colorMatch$1$split4[3];
1485
1486 var objColor = {
1487 hue: parseInt(hue, 10),
1488 saturation: parseInt(saturation, 10),
1489 lightness: parseInt(lightness, 10),
1490 alpha: parseFloat(alpha) || 1
1491 };
1492 return objColor;
1493}
1494
1495function colorToHsla(color) {
1496 var type = getColorType(color);
1497
1498 switch (type) {
1499 case ColorType.Hex:
1500 return hexToHsla(color);
1501
1502 case ColorType.Rgb:
1503 case ColorType.Rgba:
1504 return rbgStringToHsla(color);
1505
1506 case ColorType.Hsla:
1507 case ColorType.Hsl:
1508 return hslToObject(color);
1509
1510 case ColorType.Default:
1511 default:
1512 throw new Error('Accepted color formats are: hex, rgb, rgba, hsl and hsla');
1513 }
1514}
1515
1516// implements: https://www.w3.org/WAI/ER/WD-AERT/#color-contrast
1517function isLight(_ref) {
1518 var red = _ref.red,
1519 green = _ref.green,
1520 blue = _ref.blue;
1521 var contrast = (red * 299 + green * 587 + blue * 114) / 1000;
1522 return contrast > 125;
1523}
1524
1525function normalizeName(name) {
1526 return name.split(/(?=[A-Z])/).join('-').toLowerCase();
1527}
1528function constructColorName(baseName, property, suffix) {
1529 var name = normalizeName(baseName);
1530 var propertyName = property ? "-".concat(normalizeName(property)) : '';
1531 var constructedSuffix = suffix ? "-".concat(suffix) : '';
1532 return "--".concat(name).concat(propertyName).concat(constructedSuffix);
1533}
1534
1535function lightenColor(color) {
1536 var lighten = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
1537
1538 if (typeof color === 'string') {
1539 return color;
1540 }
1541
1542 var lightness = color.lightness;
1543 var nextLightness = lightness + lighten;
1544 return Object.assign({}, color, {
1545 lightness: clamp$1(nextLightness, 0, 100)
1546 });
1547}
1548function saturateColor(color) {
1549 var saturate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
1550
1551 if (typeof color === 'string') {
1552 return color;
1553 }
1554
1555 var saturation = color.saturation;
1556 var nextSaturation = saturation + saturate;
1557 return Object.assign({}, color, {
1558 saturation: nextSaturation
1559 });
1560}
1561function createLightColor(color, lightness, saturation) {
1562 var lightenedColor = lightenColor(color, lightness);
1563 var saturatedColor = saturateColor(lightenedColor, -saturation);
1564 return saturatedColor;
1565}
1566
1567var needsVariantList = ['topBar'];
1568
1569var BorderRadius = {
1570 borderRadiusBase: rem('4px'),
1571 borderRadiusWide: rem('8px')
1572};
1573var Shadow = {
1574 cardShadow: '0px 0px 5px var(--p-shadow-from-ambient-light), 0px 1px 2px var(--p-shadow-from-direct-light)',
1575 popoverShadow: '-1px 0px 20px var(--p-shadow-from-ambient-light), 0px 1px 5px var(--p-shadow-from-direct-light)',
1576 modalShadow: '0px 6px 32px var(--p-shadow-from-ambient-light), 0px 1px 6px var(--p-shadow-from-direct-light)'
1577};
1578var Overrides = {
1579 overrideNone: 'none',
1580 overrideTransparent: 'transparent',
1581 overrideOne: '1',
1582 overrideVisible: 'visible',
1583 overrideZero: '0',
1584 overrideLoadingZIndex: '514',
1585 buttonFontWeight: '500',
1586 nonNullContent: "''",
1587 bannerDefaultBorder: buildBannerBorder('--p-border-on-surface'),
1588 bannerSuccessBorder: buildBannerBorder('--p-success-border'),
1589 bannerHighlightBorder: buildBannerBorder('--p-highlight-border'),
1590 bannerWarningBorder: buildBannerBorder('--p-warning-border'),
1591 bannerCriticalBorder: buildBannerBorder('--p-critical-border'),
1592 badgeMixBlendMode: 'luminosity',
1593 borderSubdued: "".concat(rem('1px'), " solid var(--p-border-subdued-on-surface)"),
1594 textFieldSpinnerOffset: rem('2px'),
1595 textFieldFocusRingOffset: rem('-4px'),
1596 textFieldFocusRingBorderRadius: rem('7px'),
1597 buttonGroupItemSpacing: rem('2px')
1598};
1599var Tokens = Object.assign({}, BorderRadius, Shadow, Overrides);
1600
1601function rem(px) {
1602 var baseFontSize = 10;
1603 return "".concat(parseInt(px, 10) / baseFontSize, "rem");
1604}
1605
1606function buildBannerBorder(cssVar) {
1607 return "inset 0 ".concat(rem('2px'), " 0 0 var(").concat(cssVar, "), inset 0 0 0 ").concat(rem('2px'), " var(").concat(cssVar, ")");
1608}
1609
1610function buildCustomProperties(themeConfig, globalTheming) {
1611 return globalTheming ? customPropertyTransformer(Object.assign({}, buildColors(themeConfig, roleVariants), Tokens)) : buildLegacyColors(themeConfig);
1612}
1613function buildThemeContext(themeConfig, cssCustomProperties) {
1614 var logo = themeConfig.logo;
1615 return {
1616 logo,
1617 UNSTABLE_cssCustomProperties: toString(cssCustomProperties)
1618 };
1619}
1620
1621function toString(obj) {
1622 if (obj) {
1623 return Object.entries(obj).map(function (pair) {
1624 return pair.join(':');
1625 }).join(';');
1626 } else {
1627 return undefined;
1628 }
1629}
1630
1631function hexToHsluvObj(hex) {
1632 var _hexToHsluv = hexToHsluv(hex),
1633 _hexToHsluv2 = _slicedToArray(_hexToHsluv, 3),
1634 hue = _hexToHsluv2[0],
1635 saturation = _hexToHsluv2[1],
1636 lightness = _hexToHsluv2[2];
1637
1638 return {
1639 hue,
1640 saturation,
1641 lightness
1642 };
1643}
1644
1645function buildColors(theme, roleVariants) {
1646 var colors = Object.assign({
1647 surface: UNSTABLE_Color.Surface,
1648 onSurface: UNSTABLE_Color.OnSurface,
1649 interactive: UNSTABLE_Color.Interactive,
1650 neutral: UNSTABLE_Color.Neutral,
1651 primary: UNSTABLE_Color.Primary,
1652 critical: UNSTABLE_Color.Critical,
1653 warning: UNSTABLE_Color.Warning,
1654 highlight: UNSTABLE_Color.Highlight,
1655 success: UNSTABLE_Color.Success,
1656 decorative: UNSTABLE_Color.Decorative
1657 }, theme.UNSTABLE_colors);
1658 var lightSurface = isLight(hexToRgb(colors.surface));
1659 return Object.entries(roleVariants).reduce(function (acc1, _ref) {
1660 var _ref2 = _slicedToArray(_ref, 2),
1661 role = _ref2[0],
1662 variants = _ref2[1];
1663
1664 var base = hexToHsluvObj(colors[role]);
1665 return Object.assign({}, acc1, variants.reduce(function (acc2, _ref3) {
1666 var name = _ref3.name,
1667 light = _ref3.light,
1668 dark = _ref3.dark;
1669 var configs = {
1670 default: lightSurface ? light : dark
1671 };
1672
1673 if (!isEqual(light, dark)) {
1674 configs.Inverse = lightSurface ? dark : light;
1675 configs.Light = light;
1676 configs.Dark = dark;
1677 }
1678
1679 return Object.assign({}, acc2, Object.entries(configs).reduce(function (acc3, _ref4) {
1680 var _ref5 = _slicedToArray(_ref4, 2),
1681 variant = _ref5[0],
1682 config = _ref5[1];
1683
1684 var _config$hue = config.hue,
1685 hue = _config$hue === void 0 ? base.hue : _config$hue,
1686 _config$saturation = config.saturation,
1687 saturation = _config$saturation === void 0 ? base.saturation : _config$saturation,
1688 _config$lightness = config.lightness,
1689 lightness = _config$lightness === void 0 ? base.lightness : _config$lightness,
1690 _config$alpha = config.alpha,
1691 alpha = _config$alpha === void 0 ? 1 : _config$alpha;
1692 var displayName = variant === 'default' ? name : "".concat(name).concat(variant);
1693 return Object.assign({}, acc3, {
1694 [displayName]: hslToString(Object.assign({}, colorToHsla(hsluvToHex([hue, saturation, lightness])), {
1695 alpha
1696 }))
1697 });
1698 }, {}));
1699 }, {}));
1700 }, {});
1701}
1702
1703function customPropertyTransformer(properties) {
1704 return Object.entries(properties).reduce(function (transformed, _ref6) {
1705 var _ref7 = _slicedToArray(_ref6, 2),
1706 key = _ref7[0],
1707 value = _ref7[1];
1708
1709 return Object.assign({}, transformed, {
1710 [toCssCustomPropertySyntax(key)]: value
1711 });
1712 }, {});
1713}
1714
1715function toCssCustomPropertySyntax(camelCase) {
1716 return "--p-".concat(camelCase.replace(/([A-Z0-9])/g, '-$1').toLowerCase());
1717}
1718
1719function buildLegacyColors(theme) {
1720 var colorPairs;
1721 var colors = theme && theme.colors && theme.colors.topBar ? theme.colors.topBar : {
1722 background: '#00848e',
1723 backgroundLighter: '#1d9ba4',
1724 color: '#f9fafb'
1725 };
1726 var colorKey = 'topBar';
1727 var colorKeys = Object.keys(colors);
1728
1729 if (colorKeys.length > 1) {
1730 colorPairs = colorKeys.map(function (key) {
1731 return [constructColorName(colorKey, key), colors[key]];
1732 });
1733 } else {
1734 colorPairs = parseColors([colorKey, colors]);
1735 }
1736
1737 return colorPairs.reduce(function (state, _ref8) {
1738 var _ref9 = _slicedToArray(_ref8, 2),
1739 key = _ref9[0],
1740 value = _ref9[1];
1741
1742 return Object.assign({}, state, {
1743 [key]: value
1744 });
1745 }, {});
1746}
1747
1748function needsVariant(name) {
1749 return needsVariantList.includes(name);
1750}
1751var lightenToString = compose(hslToString, createLightColor);
1752function setTextColor(name) {
1753 var variant = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'dark';
1754
1755 if (variant === 'light') {
1756 return [name, tokens.colorInk];
1757 }
1758
1759 return [name, tokens.colorWhite];
1760}
1761function setTheme(color, baseName, key, variant) {
1762 var colorPairs = [];
1763
1764 switch (variant) {
1765 case 'light':
1766 colorPairs.push(setTextColor(constructColorName(baseName, null, 'color'), 'light'));
1767 colorPairs.push([constructColorName(baseName, key, 'lighter'), lightenToString(color, 7, -10)]);
1768 break;
1769
1770 case 'dark':
1771 colorPairs.push(setTextColor(constructColorName(baseName, null, 'color'), 'dark'));
1772 colorPairs.push([constructColorName(baseName, key, 'lighter'), lightenToString(color, 15, 15)]);
1773 break;
1774
1775 default:
1776 }
1777
1778 return colorPairs;
1779}
1780
1781function parseColors(_ref10) {
1782 var _ref11 = _slicedToArray(_ref10, 2),
1783 baseName = _ref11[0],
1784 colors = _ref11[1];
1785
1786 var keys = Object.keys(colors);
1787 var colorPairs = [];
1788
1789 for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
1790 var key = _keys[_i];
1791 colorPairs.push([constructColorName(baseName, key), colors[key]]);
1792
1793 if (needsVariant(baseName)) {
1794 var hslColor = colorToHsla(colors[key]);
1795
1796 if (typeof hslColor === 'string') {
1797 return colorPairs;
1798 }
1799
1800 var rgbColor = hslToRgb(hslColor);
1801
1802 if (isLight(rgbColor)) {
1803 colorPairs.push.apply(colorPairs, _toConsumableArray(setTheme(hslColor, baseName, key, 'light')));
1804 } else {
1805 colorPairs.push.apply(colorPairs, _toConsumableArray(setTheme(hslColor, baseName, key, 'dark')));
1806 }
1807 }
1808 }
1809
1810 return colorPairs;
1811}
1812
1813var Key;
1814
1815(function (Key) {
1816 Key[Key["Backspace"] = 8] = "Backspace";
1817 Key[Key["Tab"] = 9] = "Tab";
1818 Key[Key["Enter"] = 13] = "Enter";
1819 Key[Key["Shift"] = 16] = "Shift";
1820 Key[Key["Ctrl"] = 17] = "Ctrl";
1821 Key[Key["Alt"] = 18] = "Alt";
1822 Key[Key["Pause"] = 19] = "Pause";
1823 Key[Key["CapsLock"] = 20] = "CapsLock";
1824 Key[Key["Escape"] = 27] = "Escape";
1825 Key[Key["Space"] = 32] = "Space";
1826 Key[Key["PageUp"] = 33] = "PageUp";
1827 Key[Key["PageDown"] = 34] = "PageDown";
1828 Key[Key["End"] = 35] = "End";
1829 Key[Key["Home"] = 36] = "Home";
1830 Key[Key["LeftArrow"] = 37] = "LeftArrow";
1831 Key[Key["UpArrow"] = 38] = "UpArrow";
1832 Key[Key["RightArrow"] = 39] = "RightArrow";
1833 Key[Key["DownArrow"] = 40] = "DownArrow";
1834 Key[Key["Insert"] = 45] = "Insert";
1835 Key[Key["Delete"] = 46] = "Delete";
1836 Key[Key["Key0"] = 48] = "Key0";
1837 Key[Key["Key1"] = 49] = "Key1";
1838 Key[Key["Key2"] = 50] = "Key2";
1839 Key[Key["Key3"] = 51] = "Key3";
1840 Key[Key["Key4"] = 52] = "Key4";
1841 Key[Key["Key5"] = 53] = "Key5";
1842 Key[Key["Key6"] = 54] = "Key6";
1843 Key[Key["Key7"] = 55] = "Key7";
1844 Key[Key["Key8"] = 56] = "Key8";
1845 Key[Key["Key9"] = 57] = "Key9";
1846 Key[Key["KeyA"] = 65] = "KeyA";
1847 Key[Key["KeyB"] = 66] = "KeyB";
1848 Key[Key["KeyC"] = 67] = "KeyC";
1849 Key[Key["KeyD"] = 68] = "KeyD";
1850 Key[Key["KeyE"] = 69] = "KeyE";
1851 Key[Key["KeyF"] = 70] = "KeyF";
1852 Key[Key["KeyG"] = 71] = "KeyG";
1853 Key[Key["KeyH"] = 72] = "KeyH";
1854 Key[Key["KeyI"] = 73] = "KeyI";
1855 Key[Key["KeyJ"] = 74] = "KeyJ";
1856 Key[Key["KeyK"] = 75] = "KeyK";
1857 Key[Key["KeyL"] = 76] = "KeyL";
1858 Key[Key["KeyM"] = 77] = "KeyM";
1859 Key[Key["KeyN"] = 78] = "KeyN";
1860 Key[Key["KeyO"] = 79] = "KeyO";
1861 Key[Key["KeyP"] = 80] = "KeyP";
1862 Key[Key["KeyQ"] = 81] = "KeyQ";
1863 Key[Key["KeyR"] = 82] = "KeyR";
1864 Key[Key["KeyS"] = 83] = "KeyS";
1865 Key[Key["KeyT"] = 84] = "KeyT";
1866 Key[Key["KeyU"] = 85] = "KeyU";
1867 Key[Key["KeyV"] = 86] = "KeyV";
1868 Key[Key["KeyW"] = 87] = "KeyW";
1869 Key[Key["KeyX"] = 88] = "KeyX";
1870 Key[Key["KeyY"] = 89] = "KeyY";
1871 Key[Key["KeyZ"] = 90] = "KeyZ";
1872 Key[Key["LeftMeta"] = 91] = "LeftMeta";
1873 Key[Key["RightMeta"] = 92] = "RightMeta";
1874 Key[Key["Select"] = 93] = "Select";
1875 Key[Key["Numpad0"] = 96] = "Numpad0";
1876 Key[Key["Numpad1"] = 97] = "Numpad1";
1877 Key[Key["Numpad2"] = 98] = "Numpad2";
1878 Key[Key["Numpad3"] = 99] = "Numpad3";
1879 Key[Key["Numpad4"] = 100] = "Numpad4";
1880 Key[Key["Numpad5"] = 101] = "Numpad5";
1881 Key[Key["Numpad6"] = 102] = "Numpad6";
1882 Key[Key["Numpad7"] = 103] = "Numpad7";
1883 Key[Key["Numpad8"] = 104] = "Numpad8";
1884 Key[Key["Numpad9"] = 105] = "Numpad9";
1885 Key[Key["Multiply"] = 106] = "Multiply";
1886 Key[Key["Add"] = 107] = "Add";
1887 Key[Key["Subtract"] = 109] = "Subtract";
1888 Key[Key["Decimal"] = 110] = "Decimal";
1889 Key[Key["Divide"] = 111] = "Divide";
1890 Key[Key["F1"] = 112] = "F1";
1891 Key[Key["F2"] = 113] = "F2";
1892 Key[Key["F3"] = 114] = "F3";
1893 Key[Key["F4"] = 115] = "F4";
1894 Key[Key["F5"] = 116] = "F5";
1895 Key[Key["F6"] = 117] = "F6";
1896 Key[Key["F7"] = 118] = "F7";
1897 Key[Key["F8"] = 119] = "F8";
1898 Key[Key["F9"] = 120] = "F9";
1899 Key[Key["F10"] = 121] = "F10";
1900 Key[Key["F11"] = 122] = "F11";
1901 Key[Key["F12"] = 123] = "F12";
1902 Key[Key["NumLock"] = 144] = "NumLock";
1903 Key[Key["ScrollLock"] = 145] = "ScrollLock";
1904 Key[Key["Semicolon"] = 186] = "Semicolon";
1905 Key[Key["Equals"] = 187] = "Equals";
1906 Key[Key["Comma"] = 188] = "Comma";
1907 Key[Key["Dash"] = 189] = "Dash";
1908 Key[Key["Period"] = 190] = "Period";
1909 Key[Key["ForwardSlash"] = 191] = "ForwardSlash";
1910 Key[Key["GraveAccent"] = 192] = "GraveAccent";
1911 Key[Key["OpenBracket"] = 219] = "OpenBracket";
1912 Key[Key["BackSlash"] = 220] = "BackSlash";
1913 Key[Key["CloseBracket"] = 221] = "CloseBracket";
1914 Key[Key["SingleQuote"] = 222] = "SingleQuote";
1915})(Key || (Key = {}));
1916
1917var TypeOf;
1918
1919(function (TypeOf) {
1920 TypeOf["Undefined"] = "undefined";
1921 TypeOf["Object"] = "object";
1922 TypeOf["Boolean"] = "boolean";
1923 TypeOf["Number"] = "number";
1924 TypeOf["String"] = "string";
1925 TypeOf["Symbol"] = "symbol";
1926 TypeOf["Function"] = "function";
1927})(TypeOf || (TypeOf = {}));
1928
1929function classNames() {
1930 for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {
1931 classes[_key] = arguments[_key];
1932 }
1933
1934 return classes.filter(Boolean).join(' ');
1935}
1936function variationName(name, value) {
1937 return "".concat(name).concat(value.charAt(0).toUpperCase()).concat(value.slice(1));
1938}
1939
1940var FeaturesContext = React__default.createContext(undefined);
1941
1942function useFeatures() {
1943 var features = useContext(FeaturesContext);
1944
1945 if (!features) {
1946 throw new Error('No Features were provided.');
1947 }
1948
1949 return features;
1950}
1951
1952var I18nContext = React__default.createContext(undefined);
1953
1954function useI18n() {
1955 var i18n = useContext(I18nContext);
1956
1957 if (!i18n) {
1958 throw new MissingAppProviderError('No i18n was provided.');
1959 }
1960
1961 return i18n;
1962}
1963
1964var OBJECT_NOTATION_MATCHER = /\[(.*?)\]|(\w+)/g;
1965function get(obj, keypath, defaultValue) {
1966 if (obj == null) return undefined;
1967 var keys = Array.isArray(keypath) ? keypath : getKeypath(keypath);
1968 var acc = obj; // eslint-disable-next-line @typescript-eslint/prefer-for-of
1969
1970 for (var i = 0; i < keys.length; i++) {
1971 var val = acc[keys[i]];
1972 if (val === undefined) return defaultValue;
1973 acc = val;
1974 }
1975
1976 return acc;
1977}
1978
1979function getKeypath(str) {
1980 var path = [];
1981 var result;
1982
1983 while (result = OBJECT_NOTATION_MATCHER.exec(str)) {
1984 var _result = result,
1985 _result2 = _slicedToArray(_result, 3),
1986 first = _result2[1],
1987 second = _result2[2];
1988
1989 path.push(first || second);
1990 }
1991
1992 return path;
1993}
1994
1995function merge() {
1996 var final = {};
1997
1998 for (var _len = arguments.length, objs = new Array(_len), _key = 0; _key < _len; _key++) {
1999 objs[_key] = arguments[_key];
2000 }
2001
2002 for (var _i = 0, _objs = objs; _i < _objs.length; _i++) {
2003 var obj = _objs[_i];
2004 final = mergeRecursively(final, obj);
2005 }
2006
2007 return final;
2008}
2009
2010function mergeRecursively(inputObjA, objB) {
2011 var objA = Array.isArray(inputObjA) ? _toConsumableArray(inputObjA) : Object.assign({}, inputObjA);
2012
2013 for (var key in objB) {
2014 if (!Object.prototype.hasOwnProperty.call(objB, key)) {
2015 continue;
2016 } else if (isMergeableValue(objB[key]) && isMergeableValue(objA[key])) {
2017 objA[key] = mergeRecursively(objA[key], objB[key]);
2018 } else {
2019 objA[key] = objB[key];
2020 }
2021 }
2022
2023 return objA;
2024}
2025
2026function isMergeableValue(value) {
2027 return value !== null && typeof value === 'object';
2028}
2029
2030var REPLACE_REGEX = /{([^}]*)}/g;
2031var I18n =
2032/*#__PURE__*/
2033function () {
2034 function I18n(translation) {
2035 var _this = this;
2036
2037 _classCallCheck(this, I18n);
2038
2039 this.translation = translation;
2040
2041 this.translate = function (id, replacements) {
2042 return translate(id, _this.translation, replacements);
2043 };
2044
2045 this.setTranslation(translation);
2046 }
2047
2048 _createClass(I18n, [{
2049 key: "setTranslation",
2050 value: function setTranslation(translation) {
2051 this.translation = Array.isArray(translation) ? merge.apply(void 0, _toConsumableArray(translation)) : translation;
2052 }
2053 }, {
2054 key: "translationKeyExists",
2055 value: function translationKeyExists(path) {
2056 return Boolean(get(this.translation, path));
2057 }
2058 }]);
2059
2060 return I18n;
2061}();
2062function translate(id, translations, replacements) {
2063 var text = get(translations, id);
2064
2065 if (!text) {
2066 return '';
2067 }
2068
2069 if (replacements) {
2070 return text.replace(REPLACE_REGEX, function (match) {
2071 var replacement = match.substring(1, match.length - 1);
2072
2073 if (!Object.prototype.hasOwnProperty.call(replacements, replacement)) {
2074 throw new Error("No replacement found for key '".concat(replacement, "'. The following replacements were passed: ").concat(Object.keys(replacements).map(function (key) {
2075 return "'".concat(key, "'");
2076 }).join(', ')));
2077 }
2078
2079 return replacements[replacement];
2080 });
2081 }
2082
2083 return text;
2084}
2085
2086var isServer = typeof window === 'undefined' || typeof document === 'undefined';
2087
2088function Image(_a) {
2089 var sourceSet = _a.sourceSet,
2090 source = _a.source,
2091 crossOrigin = _a.crossOrigin,
2092 rest = __rest(_a, ["sourceSet", "source", "crossOrigin"]);
2093
2094 var finalSourceSet = sourceSet ? sourceSet.map(function (_ref) {
2095 var subSource = _ref.source,
2096 descriptor = _ref.descriptor;
2097 return "".concat(subSource, " ").concat(descriptor);
2098 }).join(',') : null;
2099 return finalSourceSet ? // eslint-disable-next-line jsx-a11y/alt-text
2100 React__default.createElement("img", Object.assign({
2101 src: source,
2102 srcSet: finalSourceSet,
2103 crossOrigin: crossOrigin
2104 }, rest)) : // eslint-disable-next-line jsx-a11y/alt-text
2105 React__default.createElement("img", Object.assign({
2106 src: source
2107 }, rest, {
2108 crossOrigin: crossOrigin
2109 }));
2110}
2111
2112var styles = {
2113 "Avatar": "Polaris-Avatar",
2114 "hidden": "Polaris-Avatar--hidden",
2115 "sizeSmall": "Polaris-Avatar--sizeSmall",
2116 "sizeMedium": "Polaris-Avatar--sizeMedium",
2117 "sizeLarge": "Polaris-Avatar--sizeLarge",
2118 "styleOne": "Polaris-Avatar--styleOne",
2119 "styleTwo": "Polaris-Avatar--styleTwo",
2120 "styleThree": "Polaris-Avatar--styleThree",
2121 "styleFour": "Polaris-Avatar--styleFour",
2122 "styleFive": "Polaris-Avatar--styleFive",
2123 "styleSix": "Polaris-Avatar--styleSix",
2124 "hasImage": "Polaris-Avatar--hasImage",
2125 "Image": "Polaris-Avatar__Image",
2126 "Initials": "Polaris-Avatar__Initials",
2127 "Svg": "Polaris-Avatar__Svg"
2128};
2129
2130var avatar1 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjMjQ1YjQ4IiBkPSJNMCAwaDEwMHYxMDBIMHoiLz48cGF0aCBmaWxsPSIjMmRiMTY3IiBkPSJNNjkgMHY2NS42NWwtMi0uMDF2MTkuODVsMiAuMDJWMTAwSDBWMGg2OXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNjcgNjUuNjR2MTkuODVsLTI1LjU3LS4xOUMzMiA4NS4yMiAyNS42IDgxLjQ2IDI1LjY4IDcyLjA2cy4yNS02Ljc0LjI1LTYuNzR6Ii8+PHBhdGggZmlsbD0iIzhkYzk1OCIgZD0iTTg2Ljk5IDU4SDY5VjBoMTAuOTNsNy4wNiA1OHoiLz48cGF0aCBmaWxsPSIjZWJlZGYxIiBkPSJNMjQuNTMgNDAuMjlhMTIuMjMgMTIuMjMgMCAwMTI0LjQ2IDAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZmlsbD0iIzhkYzk1OCIgZD0iTTU5LjYyIDU4QTEwLjY5IDEwLjY5IDAgMDE4MSA1OHoiLz48L3N2Zz4K';
2131
2132var avatar2 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjMWUyNjVjIiBkPSJNLS4wMSAwaDEwMHYxMDBoLTEwMHoiLz48cGF0aCBmaWxsPSIjNWQ2Y2MxIiBkPSJNLS4wMSAwaDY5LjAydjEwMEgtLjAxeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik02OC45MyA2NS44OGwtMjQuNDQtLjE5LS4wNSA2LjA5YzAgNS4yMiAzLjQ4IDkuNDcgOC42OSA5LjUybDE1LjguMTJ6Ii8+PHBhdGggZmlsbD0iI2ZmYzA0ZCIgZD0iTTY4LjkxIDExLjNsMTkuMTcgNDYuMjktMTkuMTctLjE2VjExLjN6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0yMy4yNSAzNi40M2EzLjIyIDMuMjIgMCAxMDAgNi40NG0yMS4wMS02LjQ0YTMuMjIgMy4yMiAwIDAwMCA2LjQ0bS0xMy41NSAzLjc0YTMuMjIgMy4yMiAwIDEwMCA2LjQ0bTMuMjItMjUuNTFhMy4yMiAzLjIyIDAgMDAwIDYuNDQiLz48L3N2Zz4K';
2133
2134var avatar3 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjNWQ2Y2MxIiBkPSJNLS4wMiAwaDEwMHYxMDBoLTEwMHoiLz48cGF0aCBmaWxsPSIjNmRjYWNlIiBkPSJNLjM5IDBoNjkuMDJ2MTAwSC4zOXoiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjUiIGQ9Ik0yNC4xOCAzMS4yMXYzLjQ3QTEwLjQzIDEwLjQzIDAgMDAzNC40IDQ1LjIxYTEwLjQzIDEwLjQzIDAgMDAxMC4yMi0xMC41M3YtMy40NyIvPjxwYXRoIGZpbGw9IiNlYmVkZjEiIGQ9Ik0yMC4xMSA0OS4wN2ExNi4yMiAxNi4yMiAwIDExMCAzMi40NCIgb3BhY2l0eT0iLjIiLz48cGF0aCBkPSJNNjkuNDQgMTguODNMOTAgNzFINjkuNDRWMTguODN6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTU3LjU5IDcxYTYgNiAwIDAxMTIgMHoiIGZpbGw9IiNmZmYiLz48L3N2Zz4K';
2135
2136var avatar4 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjZmZlMGMzIiBkPSJNMC0uMDFoMTAwdjEwMEgweiIvPjxwYXRoIGZpbGw9IiM1ZDZjYzEiIGQ9Ik0wIDBoNjkuMDJ2MTAwSDB6Ii8+PHBhdGggZD0iTTY5LjAyIDBsMjQuMDMgNjEuNjlINjkuMDJWMHoiIGZpbGw9IiNmZjk2N2QiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjUiIGQ9Ik0zMC42OSAzMS45MXYtM2MwLTQuNzggMy40Ni04LjY1IDgtOC42NXM4IDMuODcgOCA4LjY1djMiLz48cGF0aCBmaWxsPSIjZWJlZGYxIiBkPSJNMTIuNzYgNTYuMDZhMTMuMzYgMTMuMzYgMCAxMTI2LjcyIDAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTgwIDYxLjQ2bC0yOS4zNC4yM3YtNy4zM2MwLTYuMjggNC4wNy0xMS4zNiAxMC4zNC0xMS40NGwxOS0uMTR6IiBmaWxsPSIjZmY5NjdkIi8+PC9zdmc+Cg==';
2137
2138var avatar5 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjOGRjOTU4IiBkPSJNMCAwaDcwLjAydjEwMEgweiIvPjxwYXRoIGQ9Ik02OS45MiAwdjU2LjMyTDQ5IDY3bC0uMyAyNS4wN1YxMDBIMTAwVjB6IiBmaWxsPSIjMmRiMTY3Ii8+PHBhdGggZmlsbD0iIzI0NWI0OCIgZD0iTTU5LjI3IDU4LjI5YTUuMjIgNS4yMiAwIDAwLTkuNDMgNC40OCIvPjxwYXRoIGQ9Ik0yNy4xMiA5LjMzaDQ0LjUzdjIuMTlIMjcuMTJ6bS0xMi40MSA5LjQ5aDU2Ljk0djIuMTlIMTQuNzF6IiBmaWxsPSIjMmRiMTY3Ii8+PGNpcmNsZSBjeD0iMTkuNjYiIGN5PSI0NC44IiByPSIxMS4yMiIgZmlsbD0iI2ViZWRmMSIgb3BhY2l0eT0iLjIiLz48L3N2Zz4K';
2139
2140var avatar6 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBkPSJNLS4wMi0uMDFoMTAwdjEwMGgtMTAweiIgZmlsbD0iI2ZmZTBjMyIvPjxwYXRoIGZpbGw9IiNmZjk2N2QiIGQ9Ik0wIDBoNjkuNDF2MTAwSDB6Ii8+PHBhdGggZD0iTTY5LjkyIDB2NDQuMzJMNTEuMzQgNTV2NDVIMTAwVjB6IiBmaWxsPSIjZmZlMGMzIi8+PHBhdGggZmlsbD0iIzMyY2FjNiIgZD0iTTM5LjMyIDc2YTExLjg1IDExLjg1IDAgMDAxMiAxMS42MlY3NiIvPjxwYXRoIGZpbGw9IiMwMDk3OTYiIGQ9Ik0zOS4zMiA3NmExMiAxMiAwIDAxMTItMTEuODJWNzYiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjUiIGQ9Ik00My43NCAxOS44M2ExMi44MiAxMi44MiAwIDExLTI1LjY0IDAiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjQiIGQ9Ik0yNy4zOSAzMS42bC0xLjU4IDUuOTZtOS4zNy01LjcybDIuNTUgNS40N200LjI2LTkuODVsMy41MyA0LjVtLTI1LjQzLTQuNWwtMy41MyA0LjUiLz48L3N2Zz4K';
2141
2142var avatar7 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBkPSJNMCAwaDEwMHYxMDAuNDhIMHoiIGZpbGw9IiM4ZGM5NTgiLz48cGF0aCBmaWxsPSIjMmRiMTY3IiBkPSJNODMgNjh2MzJsLTE0LS4xNnYuMTZIMFYwaDY5djY4aDE0eiIvPjxwYXRoIGQ9Ik02OS4yOSA0MS42OUgyMC42NnMtLjA5LTMtLjE3IDcuMTUgNyAxOC41MSAxNy4zNSAxOC41OWwzMS40NS41N3oiIGZpbGw9IiM4ZGM5NTgiLz48cGF0aCBkPSJNNjguNyAxMi40bDExLjU0IDI5LjI5SDY4LjdWMTIuNHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNNjIuMjIgNDEuNjlhMy4zNCAzLjM0IDAgMTE2LjY5IDB6IiBmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iIzI0NWI0OCIgZD0iTTQxLjQ1IDE4LjA2YTIuNTcgMi41NyAwIDAwLTUuMTQgME0zMy4zMyAyNGEyLjU3IDIuNTcgMCAxMC01LjE0IDBtMjAuMzYgMi41OGEyLjU3IDIuNTcgMCAxMC01LjE0IDAiLz48L3N2Zz4K';
2143
2144var avatar8 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjZmZlZGI5IiBkPSJNMCAwaDEwMHYxMDBIMHoiLz48cGF0aCBkPSJNNjQuNjMgMTcuMzNhMTcgMTcgMCAwMTUgMjkuNzIgMTYuNzUgMTYuNzUgMCAwMS01IDIuNjIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjUiLz48cGF0aCBmaWxsPSIjZmZjMDRkIiBkPSJNMCAwaDY5LjAydjEwMEgweiIvPjxjaXJjbGUgY3g9IjQ1LjExIiBjeT0iMzMuNDkiIHI9IjE2Ljk4IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtMzcuMDIgNDUuMTI0IDMzLjQ5MykiLz48cGF0aCBmaWxsPSIjNWQ2Y2MxIiBkPSJNNjkuMDIgMzQuNDhsMTkuNDcgMzguNzQtMTkuNDcgMS41M1YzNC40OHoiLz48cGF0aCBkPSJNNjEuNiAzMy42N2ExMC4xNyAxMC4xNyAwIDAxMTUuNC4wOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iNSIvPjwvc3ZnPgo=';
2145
2146var avatar9 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBkPSJNMCAwaDEwMHYxMDBIMHoiIGZpbGw9IiNmZmMwNGQiLz48cGF0aCBkPSJNMCAwaDY5LjQxdjEwMEgweiIgZmlsbD0iIzVkNmNjMSIvPjxwYXRoIGQ9Ik03MC4yMSA4MC44OGgtMTUuMWMtNC44MSAwLTUuNjgtNS44NC01LjY4LTUuODRoMjAuNzgiIGZpbGw9IiNmZmMwNGQiLz48cGF0aCBkPSJNODIgNjAuNDhsLTE0IC4yNVYwaDEwLjE3QzgwLjU5IDIwLjE0IDgyIDYwLjQ4IDgyIDYwLjQ4eiIgZmlsbD0iIzVkNmNjMSIvPjxwYXRoIGZpbGw9IiM0MTIzNmUiIGQ9Ik01Ny43MSA2MC40OGE1LjQ0IDUuNDQgMCAxMTEwLjg3IDAiLz48Y2lyY2xlIGN4PSIyNC43NyIgY3k9IjQwLjE5IiByPSIxMS4yMiIgZmlsbD0iI2ViZWRmMSIgb3BhY2l0eT0iLjIiLz48L3N2Zz4K';
2147
2148
2149
2150var avatars = /*#__PURE__*/Object.freeze({
2151 avatarOne: avatar1,
2152 avatarTwo: avatar2,
2153 avatarThree: avatar3,
2154 avatarFour: avatar4,
2155 avatarFive: avatar5,
2156 avatarSix: avatar6,
2157 avatarSeven: avatar7,
2158 avatarEight: avatar8,
2159 avatarNine: avatar9
2160});
2161
2162var Status;
2163
2164(function (Status) {
2165 Status["Pending"] = "PENDING";
2166 Status["Loaded"] = "LOADED";
2167 Status["Errored"] = "ERRORED";
2168})(Status || (Status = {}));
2169
2170var STYLE_CLASSES = ['one', 'two', 'three', 'four', 'five'];
2171var AVATAR_IMAGES = Object.keys(avatars).map( // import/namespace does not allow computed values by default
2172// eslint-disable-next-line import/namespace
2173function (key) {
2174 return avatars[key];
2175});
2176function Avatar(_ref) {
2177 var name = _ref.name,
2178 source = _ref.source,
2179 initials = _ref.initials,
2180 customer = _ref.customer,
2181 _ref$size = _ref.size,
2182 size = _ref$size === void 0 ? 'medium' : _ref$size,
2183 accessibilityLabel = _ref.accessibilityLabel;
2184 var i18n = useI18n();
2185
2186 var _useFeatures = useFeatures(),
2187 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
2188 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
2189
2190 function styleClass(name) {
2191 var finalStyleClasses = unstableGlobalTheming ? STYLE_CLASSES : [].concat(STYLE_CLASSES, ['six']);
2192 return name ? finalStyleClasses[name.charCodeAt(0) % finalStyleClasses.length] : finalStyleClasses[0];
2193 }
2194
2195 var _useState = useState(Status.Pending),
2196 _useState2 = _slicedToArray(_useState, 2),
2197 status = _useState2[0],
2198 setStatus = _useState2[1]; // If the source changes, set the status back to pending
2199
2200
2201 useEffect(function () {
2202 setStatus(Status.Pending);
2203 }, [source]);
2204 var handleError = useCallback(function () {
2205 setStatus(Status.Errored);
2206 }, []);
2207 var handleLoad = useCallback(function () {
2208 setStatus(Status.Loaded);
2209 }, []);
2210 var hasImage = (source || customer) && status !== Status.Errored;
2211 var nameString = name || initials;
2212 var finalSource;
2213 var label;
2214
2215 if (accessibilityLabel) {
2216 label = accessibilityLabel;
2217 } else if (name) {
2218 label = name;
2219 } else if (initials) {
2220 var splitInitials = initials.split('').join(' ');
2221 label = i18n.translate('Polaris.Avatar.labelWithInitials', {
2222 initials: splitInitials
2223 });
2224 } else {
2225 label = i18n.translate('Polaris.Avatar.label');
2226 }
2227
2228 if (source) {
2229 finalSource = source;
2230 } else if (customer) {
2231 finalSource = customerPlaceholder(nameString);
2232 }
2233
2234 var className = classNames(styles.Avatar, styles[variationName('style', styleClass(nameString))], size && styles[variationName('size', size)], hasImage && status !== Status.Loaded && styles.hidden, hasImage && styles.hasImage);
2235 var imageMarkUp = finalSource && !isServer && status !== Status.Errored ? React__default.createElement(Image, {
2236 className: styles.Image,
2237 source: finalSource,
2238 alt: "",
2239 role: "presentation",
2240 onLoad: handleLoad,
2241 onError: handleError
2242 }) : null; // Use `dominant-baseline: central` instead of `dy` when Edge supports it.
2243
2244 var verticalOffset = '0.35em';
2245 var initialsMarkup = initials && !hasImage ? React__default.createElement("span", {
2246 className: styles.Initials
2247 }, React__default.createElement("svg", {
2248 className: styles.Svg,
2249 viewBox: "0 0 48 48"
2250 }, React__default.createElement("text", {
2251 x: "50%",
2252 y: "50%",
2253 dy: verticalOffset,
2254 fill: "currentColor",
2255 fontSize: "26",
2256 textAnchor: "middle"
2257 }, initials))) : null;
2258 return React__default.createElement("span", {
2259 "aria-label": label,
2260 role: "img",
2261 className: className
2262 }, initialsMarkup, imageMarkUp);
2263}
2264
2265function customerPlaceholder(name) {
2266 return name ? AVATAR_IMAGES[name.charCodeAt(0) % AVATAR_IMAGES.length] : AVATAR_IMAGES[0];
2267}
2268
2269function isElementInViewport(element) {
2270 var _element$getBoundingC = element.getBoundingClientRect(),
2271 top = _element$getBoundingC.top,
2272 left = _element$getBoundingC.left,
2273 bottom = _element$getBoundingC.bottom,
2274 right = _element$getBoundingC.right;
2275
2276 return top >= 0 && right <= window.innerWidth && bottom <= window.innerHeight && left >= 0;
2277}
2278
2279function handleMouseUpByBlurring(_ref) {
2280 var currentTarget = _ref.currentTarget;
2281 currentTarget.blur();
2282}
2283function nextFocusableNode(node, filter) {
2284 var allFocusableElements = _toConsumableArray(document.querySelectorAll(FOCUSABLE_SELECTOR));
2285
2286 var sliceLocation = allFocusableElements.indexOf(node) + 1;
2287 var focusableElementsAfterNode = allFocusableElements.slice(sliceLocation);
2288 var _iteratorNormalCompletion = true;
2289 var _didIteratorError = false;
2290 var _iteratorError = undefined;
2291
2292 try {
2293 for (var _iterator = focusableElementsAfterNode[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
2294 var focusableElement = _step.value;
2295
2296 if (isElementInViewport(focusableElement) && (!filter || filter && filter(focusableElement))) {
2297 return focusableElement;
2298 }
2299 }
2300 } catch (err) {
2301 _didIteratorError = true;
2302 _iteratorError = err;
2303 } finally {
2304 try {
2305 if (!_iteratorNormalCompletion && _iterator.return != null) {
2306 _iterator.return();
2307 }
2308 } finally {
2309 if (_didIteratorError) {
2310 throw _iteratorError;
2311 }
2312 }
2313 }
2314
2315 return null;
2316}
2317function focusNextFocusableNode(node, filter) {
2318 var nextFocusable = nextFocusableNode(node, filter);
2319
2320 if (nextFocusable && nextFocusable instanceof HTMLElement) {
2321 nextFocusable.focus();
2322 return true;
2323 }
2324
2325 return false;
2326}
2327
2328var scrollable = {
2329 props: {
2330 'data-polaris-scrollable': true
2331 },
2332 selector: '[data-polaris-scrollable]'
2333};
2334var overlay = {
2335 props: {
2336 'data-polaris-overlay': true
2337 },
2338 selector: '[data-polaris-overlay]'
2339};
2340var layer = {
2341 props: {
2342 'data-polaris-layer': true
2343 },
2344 selector: '[data-polaris-layer]'
2345};
2346var unstyled = {
2347 props: {
2348 'data-polaris-unstyled': true
2349 },
2350 selector: '[data-polaris-unstyled]'
2351};
2352var dataPolarisTopBar = {
2353 props: {
2354 'data-polaris-top-bar': true
2355 },
2356 selector: '[data-polaris-top-bar]'
2357};
2358var headerCell = {
2359 props: {
2360 'data-polaris-header-cell': true
2361 },
2362 selector: '[data-polaris-header-cell]'
2363};
2364var portal = {
2365 props: ['data-portal-id'],
2366 selector: '[data-portal-id]'
2367};
2368var DATA_ATTRIBUTE = {
2369 overlay,
2370 layer
2371}; // these match our values in duration.scss
2372
2373var Duration;
2374
2375(function (Duration) {
2376 Duration[Duration["Instant"] = 0] = "Instant";
2377 Duration[Duration["Fast"] = 100] = "Fast";
2378 Duration[Duration["Base"] = 200] = "Base";
2379 Duration[Duration["Slow"] = 300] = "Slow";
2380 Duration[Duration["Slower"] = 400] = "Slower";
2381 Duration[Duration["Slowest"] = 500] = "Slowest";
2382})(Duration || (Duration = {}));
2383
2384var LinkContext = React__default.createContext(undefined);
2385
2386function useLink() {
2387 return React__default.useContext(LinkContext);
2388}
2389
2390// https://github.com/facebook/react/issues/16722
2391// but eslint-plugin-react doesn't know that just yet
2392// eslint-disable-next-line react/display-name
2393
2394var UnstyledLink = React__default.memo(React__default.forwardRef(function UnstyledLink(props, _ref) {
2395 var LinkComponent = useLink();
2396
2397 if (LinkComponent) {
2398 return React__default.createElement(LinkComponent, Object.assign({}, unstyled.props, props));
2399 }
2400
2401 var external = props.external,
2402 url = props.url,
2403 rest = __rest(props, ["external", "url"]);
2404
2405 var target = external ? '_blank' : undefined;
2406 var rel = external ? 'noopener noreferrer' : undefined;
2407 return React__default.createElement("a", Object.assign({
2408 target: target
2409 }, rest, {
2410 href: url,
2411 rel: rel
2412 }, unstyled.props));
2413}));
2414
2415var TelemetryContext = React__default.createContext(undefined);
2416
2417function noop() {}
2418
2419var defaultTelemetry = {
2420 produce: noop
2421};
2422function useTelemetry() {
2423 return React__default.useContext(TelemetryContext) || defaultTelemetry;
2424}
2425
2426var styles$1 = {
2427 "Icon": "Polaris-Icon",
2428 "hasBackdrop": "Polaris-Icon--hasBackdrop",
2429 "isColored": "Polaris-Icon--isColored",
2430 "colorWhite": "Polaris-Icon--colorWhite",
2431 "colorBlack": "Polaris-Icon--colorBlack",
2432 "colorSkyLighter": "Polaris-Icon--colorSkyLighter",
2433 "colorSkyLight": "Polaris-Icon--colorSkyLight",
2434 "colorSky": "Polaris-Icon--colorSky",
2435 "colorSkyDark": "Polaris-Icon--colorSkyDark",
2436 "colorInkLightest": "Polaris-Icon--colorInkLightest",
2437 "colorInkLighter": "Polaris-Icon--colorInkLighter",
2438 "colorInkLight": "Polaris-Icon--colorInkLight",
2439 "colorInk": "Polaris-Icon--colorInk",
2440 "colorBlueLighter": "Polaris-Icon--colorBlueLighter",
2441 "colorBlueLight": "Polaris-Icon--colorBlueLight",
2442 "colorBlue": "Polaris-Icon--colorBlue",
2443 "colorBlueDark": "Polaris-Icon--colorBlueDark",
2444 "colorBlueDarker": "Polaris-Icon--colorBlueDarker",
2445 "colorIndigoLighter": "Polaris-Icon--colorIndigoLighter",
2446 "colorIndigoLight": "Polaris-Icon--colorIndigoLight",
2447 "colorIndigo": "Polaris-Icon--colorIndigo",
2448 "colorIndigoDark": "Polaris-Icon--colorIndigoDark",
2449 "colorIndigoDarker": "Polaris-Icon--colorIndigoDarker",
2450 "colorTealLighter": "Polaris-Icon--colorTealLighter",
2451 "colorTealLight": "Polaris-Icon--colorTealLight",
2452 "colorTeal": "Polaris-Icon--colorTeal",
2453 "colorTealDark": "Polaris-Icon--colorTealDark",
2454 "colorTealDarker": "Polaris-Icon--colorTealDarker",
2455 "colorGreenLighter": "Polaris-Icon--colorGreenLighter",
2456 "colorGreen": "Polaris-Icon--colorGreen",
2457 "colorGreenDark": "Polaris-Icon--colorGreenDark",
2458 "colorYellowLighter": "Polaris-Icon--colorYellowLighter",
2459 "colorYellow": "Polaris-Icon--colorYellow",
2460 "colorYellowDark": "Polaris-Icon--colorYellowDark",
2461 "colorOrange": "Polaris-Icon--colorOrange",
2462 "colorOrangeDark": "Polaris-Icon--colorOrangeDark",
2463 "colorRedLighter": "Polaris-Icon--colorRedLighter",
2464 "colorRed": "Polaris-Icon--colorRed",
2465 "colorRedDark": "Polaris-Icon--colorRedDark",
2466 "colorPurple": "Polaris-Icon--colorPurple",
2467 "Svg": "Polaris-Icon__Svg",
2468 "Img": "Polaris-Icon__Img",
2469 "Placeholder": "Polaris-Icon__Placeholder"
2470};
2471
2472var COLORS_WITH_BACKDROPS = ['teal', 'tealDark', 'greenDark', 'redDark', 'yellowDark', 'ink', 'inkLighter'];
2473function Icon(_ref) {
2474 var source = _ref.source,
2475 color = _ref.color,
2476 backdrop = _ref.backdrop,
2477 accessibilityLabel = _ref.accessibilityLabel;
2478 var i18n = useI18n();
2479 var telemetry = useTelemetry();
2480 useEffect(function () {
2481 telemetry.produce('polaris_icons_usage/1.0', {
2482 // eslint-disable-next-line @typescript-eslint/camelcase
2483 icon_source: parseSource(source)
2484 });
2485 }, [source, telemetry]);
2486
2487 if (color && backdrop && !COLORS_WITH_BACKDROPS.includes(color)) {
2488 // eslint-disable-next-line no-console
2489 console.warn(i18n.translate('Polaris.Icon.backdropWarning', {
2490 color,
2491 colorsWithBackDrops: COLORS_WITH_BACKDROPS.join(', ')
2492 }));
2493 }
2494
2495 var className = classNames(styles$1.Icon, color && styles$1[variationName('color', color)], color && color !== 'white' && styles$1.isColored, backdrop && styles$1.hasBackdrop);
2496 var contentMarkup;
2497
2498 if (typeof source === 'function') {
2499 var SourceComponent = source;
2500 contentMarkup = React__default.createElement(SourceComponent, {
2501 className: styles$1.Svg,
2502 focusable: "false",
2503 "aria-hidden": "true"
2504 });
2505 } else if (source === 'placeholder') {
2506 contentMarkup = React__default.createElement("div", {
2507 className: styles$1.Placeholder
2508 });
2509 } else {
2510 contentMarkup = React__default.createElement("img", {
2511 className: styles$1.Img,
2512 src: "data:image/svg+xml;utf8,".concat(source),
2513 alt: "",
2514 "aria-hidden": "true"
2515 });
2516 }
2517
2518 return React__default.createElement("span", {
2519 className: className,
2520 "aria-label": accessibilityLabel
2521 }, contentMarkup);
2522}
2523
2524function parseSource(source) {
2525 if (typeof source === 'function') {
2526 return source.name;
2527 } else if (source === 'placeholder') {
2528 return source;
2529 }
2530
2531 return 'custom icon string';
2532}
2533
2534var styles$2 = {
2535 "VisuallyHidden": "Polaris-VisuallyHidden"
2536};
2537
2538function VisuallyHidden(_ref) {
2539 var children = _ref.children;
2540 return React__default.createElement("span", {
2541 className: styles$2.VisuallyHidden
2542 }, children);
2543}
2544
2545/**
2546 * useIsAfterInitialMount will trigger a re-render to provide
2547 * you with an updated value. Using this you enhance server-side
2548 * code that can only run on the client.
2549 * @returns MutableRefObject<T> - Returns a ref object with the
2550 * results from invoking initial value
2551 * @example
2552 * function ComponentExample({children}) {
2553 * const isMounted = useIsAfterInitialMount();
2554 * const content = isMounted ? children : null;
2555 *
2556 * return <React.Fragment>{content}</React.Fragment>;
2557 * }
2558 */
2559
2560function useIsAfterInitialMount() {
2561 var _useState = useState(false),
2562 _useState2 = _slicedToArray(_useState, 2),
2563 isAfterInitialMount = _useState2[0],
2564 setIsAfterInitialMount = _useState2[1];
2565
2566 useEffect(function () {
2567 setIsAfterInitialMount(true);
2568 }, []);
2569 return isAfterInitialMount;
2570}
2571
2572var styles$3 = {
2573 "Spinner": "Polaris-Spinner",
2574 "loading": "Polaris-Spinner--loading",
2575 "sizeSmall": "Polaris-Spinner--sizeSmall",
2576 "sizeLarge": "Polaris-Spinner--sizeLarge",
2577 "colorWhite": "Polaris-Spinner--colorWhite",
2578 "colorTeal": "Polaris-Spinner--colorTeal",
2579 "colorInkLightest": "Polaris-Spinner--colorInkLightest"
2580};
2581
2582var spinnerLarge = 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNDQgNDQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjU0MiAxLjQ4N0EyMS41MDcgMjEuNTA3IDAgMDAuNSAyMmMwIDExLjg3NCA5LjYyNiAyMS41IDIxLjUgMjEuNSA5Ljg0NyAwIDE4LjM2NC02LjY3NSAyMC44MDktMTYuMDcyYTEuNSAxLjUgMCAwMC0yLjkwNC0uNzU2QzM3LjgwMyAzNC43NTUgMzAuNDczIDQwLjUgMjIgNDAuNSAxMS43ODMgNDAuNSAzLjUgMzIuMjE3IDMuNSAyMmMwLTguMTM3IDUuMy0xNS4yNDcgMTIuOTQyLTE3LjY1YTEuNSAxLjUgMCAxMC0uOS0yLjg2M3oiIGZpbGw9IiM5MTlFQUIiLz48L3N2Zz4K';
2583
2584var spinnerSmall = 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjI5IDEuMTczYTkuMjUgOS4yNSAwIDEwMTEuNjU1IDExLjQxMiAxLjI1IDEuMjUgMCAxMC0yLjQtLjY5OCA2Ljc1IDYuNzUgMCAxMS04LjUwNi04LjMyOSAxLjI1IDEuMjUgMCAxMC0uNzUtMi4zODV6IiBmaWxsPSIjOTE5RUFCIi8+PC9zdmc+Cg==';
2585
2586var COLORS_FOR_LARGE_SPINNER = ['teal', 'inkLightest'];
2587function Spinner(_ref) {
2588 var _ref$size = _ref.size,
2589 size = _ref$size === void 0 ? 'large' : _ref$size,
2590 _ref$color = _ref.color,
2591 color = _ref$color === void 0 ? 'teal' : _ref$color,
2592 accessibilityLabel = _ref.accessibilityLabel,
2593 hasFocusableParent = _ref.hasFocusableParent;
2594 var i18n = useI18n();
2595 var isAfterInitialMount = useIsAfterInitialMount();
2596
2597 if (size === 'large' && !COLORS_FOR_LARGE_SPINNER.includes(color)) {
2598 if (process.env.NODE_ENV === 'development') {
2599 // eslint-disable-next-line no-console
2600 console.warn(i18n.translate('Polaris.Spinner.warningMessage', {
2601 color,
2602 size,
2603 colors: COLORS_FOR_LARGE_SPINNER.join(', ')
2604 }));
2605 } // eslint-disable-next-line no-param-reassign
2606
2607
2608 size = 'small';
2609 }
2610
2611 var className = classNames(styles$3.Spinner, color && styles$3[variationName('color', color)], size && styles$3[variationName('size', size)]);
2612 var spinnerSVG = size === 'large' ? spinnerLarge : spinnerSmall;
2613 var spanAttributes = Object.assign({}, !hasFocusableParent && {
2614 role: 'status'
2615 });
2616 var accessibilityLabelMarkup = (isAfterInitialMount || !hasFocusableParent) && React__default.createElement(VisuallyHidden, null, accessibilityLabel);
2617 return React__default.createElement(React__default.Fragment, null, React__default.createElement(Image, {
2618 alt: "",
2619 source: spinnerSVG,
2620 className: className,
2621 draggable: false
2622 }), React__default.createElement("span", spanAttributes, accessibilityLabelMarkup));
2623}
2624
2625var styles$4 = {
2626 "Button": "Polaris-Button",
2627 "globalTheming": "Polaris-Button--globalTheming",
2628 "disabled": "Polaris-Button--disabled",
2629 "Content": "Polaris-Button__Content",
2630 "textAlignLeft": "Polaris-Button--textAlignLeft",
2631 "textAlignCenter": "Polaris-Button--textAlignCenter",
2632 "textAlignRight": "Polaris-Button--textAlignRight",
2633 "Icon": "Polaris-Button__Icon",
2634 "Spinner": "Polaris-Button__Spinner",
2635 "primary": "Polaris-Button--primary",
2636 "pressed": "Polaris-Button--pressed",
2637 "destructive": "Polaris-Button--destructive",
2638 "outline": "Polaris-Button--outline",
2639 "loading": "Polaris-Button--loading",
2640 "plain": "Polaris-Button--plain",
2641 "iconOnly": "Polaris-Button--iconOnly",
2642 "fullWidth": "Polaris-Button--fullWidth",
2643 "sizeSlim": "Polaris-Button--sizeSlim",
2644 "sizeLarge": "Polaris-Button--sizeLarge",
2645 "monochrome": "Polaris-Button--monochrome",
2646 "Text": "Polaris-Button__Text",
2647 "DisclosureIcon": "Polaris-Button__DisclosureIcon",
2648 "DisclosureIconFacingUp": "Polaris-Button__DisclosureIconFacingUp"
2649};
2650
2651var DEFAULT_SIZE = 'medium';
2652function Button(_ref) {
2653 var id = _ref.id,
2654 url = _ref.url,
2655 disabled = _ref.disabled,
2656 loading = _ref.loading,
2657 children = _ref.children,
2658 accessibilityLabel = _ref.accessibilityLabel,
2659 ariaControls = _ref.ariaControls,
2660 ariaExpanded = _ref.ariaExpanded,
2661 ariaPressed = _ref.ariaPressed,
2662 onClick = _ref.onClick,
2663 onFocus = _ref.onFocus,
2664 onBlur = _ref.onBlur,
2665 onKeyDown = _ref.onKeyDown,
2666 onKeyPress = _ref.onKeyPress,
2667 onKeyUp = _ref.onKeyUp,
2668 onMouseEnter = _ref.onMouseEnter,
2669 onTouchStart = _ref.onTouchStart,
2670 external = _ref.external,
2671 download = _ref.download,
2672 icon = _ref.icon,
2673 primary = _ref.primary,
2674 outline = _ref.outline,
2675 destructive = _ref.destructive,
2676 disclosure = _ref.disclosure,
2677 plain = _ref.plain,
2678 monochrome = _ref.monochrome,
2679 submit = _ref.submit,
2680 _ref$size = _ref.size,
2681 size = _ref$size === void 0 ? DEFAULT_SIZE : _ref$size,
2682 textAlign = _ref.textAlign,
2683 fullWidth = _ref.fullWidth,
2684 pressed = _ref.pressed;
2685
2686 var _useFeatures = useFeatures(),
2687 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
2688 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
2689
2690 var hasGivenDeprecationWarning = useRef(false);
2691
2692 if (ariaPressed && !hasGivenDeprecationWarning.current) {
2693 // eslint-disable-next-line no-console
2694 console.warn('Deprecation: The ariaPressed prop has been replaced with pressed');
2695 hasGivenDeprecationWarning.current = true;
2696 }
2697
2698 var i18n = useI18n();
2699 var isDisabled = disabled || loading;
2700 var className = classNames(styles$4.Button, unstableGlobalTheming && styles$4.globalTheming, primary && styles$4.primary, outline && styles$4.outline, destructive && styles$4.destructive, isDisabled && styles$4.disabled, loading && styles$4.loading, plain && styles$4.plain, pressed && !disabled && !url && styles$4.pressed, monochrome && styles$4.monochrome, size && size !== DEFAULT_SIZE && styles$4[variationName('size', size)], textAlign && styles$4[variationName('textAlign', textAlign)], fullWidth && styles$4.fullWidth, icon && children == null && styles$4.iconOnly);
2701 var disclosureIcon = React__default.createElement(Icon, {
2702 source: loading ? 'placeholder' : CaretDownMinor
2703 });
2704 var disclosureIconMarkup = disclosure ? React__default.createElement(IconWrapper, null, React__default.createElement("div", {
2705 className: classNames(styles$4.DisclosureIcon, disclosure === 'up' && styles$4.DisclosureIconFacingUp)
2706 }, disclosureIcon)) : null;
2707 var iconMarkup;
2708
2709 if (icon) {
2710 var iconInner = isIconSource(icon) ? React__default.createElement(Icon, {
2711 source: loading ? 'placeholder' : icon
2712 }) : icon;
2713 iconMarkup = React__default.createElement(IconWrapper, null, iconInner);
2714 }
2715
2716 var childMarkup = children ? React__default.createElement("span", {
2717 className: styles$4.Text
2718 }, children) : null;
2719 var spinnerColor = primary || destructive ? 'white' : 'inkLightest';
2720 var spinnerSVGMarkup = loading ? React__default.createElement("span", {
2721 className: styles$4.Spinner
2722 }, React__default.createElement(Spinner, {
2723 size: "small",
2724 color: spinnerColor,
2725 accessibilityLabel: i18n.translate('Polaris.Button.spinnerAccessibilityLabel')
2726 })) : null;
2727 var content = iconMarkup || disclosureIconMarkup ? React__default.createElement("span", {
2728 className: styles$4.Content
2729 }, spinnerSVGMarkup, iconMarkup, childMarkup, disclosureIconMarkup) : React__default.createElement("span", {
2730 className: styles$4.Content
2731 }, spinnerSVGMarkup, childMarkup);
2732 var type = submit ? 'submit' : 'button';
2733
2734 if (url) {
2735 return isDisabled ? // Render an `<a>` so toggling disabled/enabled state changes only the
2736 // `href` attribute instead of replacing the whole element.
2737 // eslint-disable-next-line jsx-a11y/anchor-is-valid
2738 React__default.createElement("a", {
2739 id: id,
2740 className: className,
2741 "aria-label": accessibilityLabel
2742 }, content) : React__default.createElement(UnstyledLink, {
2743 id: id,
2744 url: url,
2745 external: external,
2746 download: download,
2747 onClick: onClick,
2748 onFocus: onFocus,
2749 onBlur: onBlur,
2750 onMouseUp: handleMouseUpByBlurring,
2751 onMouseEnter: onMouseEnter,
2752 onTouchStart: onTouchStart,
2753 className: className,
2754 "aria-label": accessibilityLabel
2755 }, content);
2756 }
2757
2758 var ariaPressedStatus = pressed !== undefined ? pressed : ariaPressed;
2759 return React__default.createElement("button", {
2760 id: id,
2761 type: type,
2762 onClick: onClick,
2763 onFocus: onFocus,
2764 onBlur: onBlur,
2765 onKeyDown: onKeyDown,
2766 onKeyUp: onKeyUp,
2767 onKeyPress: onKeyPress,
2768 onMouseUp: handleMouseUpByBlurring,
2769 onMouseEnter: onMouseEnter,
2770 onTouchStart: onTouchStart,
2771 className: className,
2772 disabled: isDisabled,
2773 "aria-label": accessibilityLabel,
2774 "aria-controls": ariaControls,
2775 "aria-expanded": ariaExpanded,
2776 "aria-pressed": ariaPressedStatus,
2777 role: loading ? 'alert' : undefined,
2778 "aria-busy": loading ? true : undefined
2779 }, content);
2780}
2781function IconWrapper(_ref2) {
2782 var children = _ref2.children;
2783 return React__default.createElement("span", {
2784 className: styles$4.Icon
2785 }, children);
2786}
2787
2788function isIconSource(x) {
2789 return typeof x === 'string' || typeof x === 'object' && x.body || typeof x === 'function';
2790}
2791
2792function buttonsFrom(actions) {
2793 var overrides = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2794
2795 if (Array.isArray(actions)) {
2796 return actions.map(function (action, index) {
2797 return buttonFrom(action, overrides, index);
2798 });
2799 } else {
2800 var action = actions;
2801 return buttonFrom(action, overrides);
2802 }
2803}
2804function buttonFrom(_a, overrides, key) {
2805 var content = _a.content,
2806 onAction = _a.onAction,
2807 action = __rest(_a, ["content", "onAction"]);
2808
2809 return React__default.createElement(Button, Object.assign({
2810 key: key,
2811 onClick: onAction
2812 }, action, overrides), content);
2813}
2814
2815function useToggle(initialState) {
2816 var _useState = useState(initialState),
2817 _useState2 = _slicedToArray(_useState, 2),
2818 state = _useState2[0],
2819 setState = _useState2[1];
2820
2821 var toggle = useCallback(function () {
2822 return setState(function (state) {
2823 return !state;
2824 });
2825 }, []); // cast needed to say this returns a two item array with the items in
2826 // their specific positions instead of `(typeof state | typeof toggle)[]`
2827
2828 return [state, toggle];
2829}
2830function useForcibleToggle(initialState) {
2831 var _useState3 = useState(initialState),
2832 _useState4 = _slicedToArray(_useState3, 2),
2833 state = _useState4[0],
2834 setState = _useState4[1];
2835
2836 var toggles = {
2837 toggle: useCallback(function () {
2838 return setState(function (state) {
2839 return !state;
2840 });
2841 }, []),
2842 forceTrue: useCallback(function () {
2843 return setState(true);
2844 }, []),
2845 forceFalse: useCallback(function () {
2846 return setState(false);
2847 }, [])
2848 }; // cast needed to say this returns a two item array with the items in
2849 // their specific positions instead of `(typeof state | typeof toggles)[]`
2850
2851 return [state, toggles];
2852}
2853
2854var WithinContentContext = React__default.createContext(false);
2855
2856// `Component`. If `props` is passed, those will be added as props on the
2857// wrapped component. If `element` is null, the component is not wrapped.
2858
2859function wrapWithComponent(element, Component, props) {
2860 if (element == null) {
2861 return null;
2862 }
2863
2864 return isElementOfType(element, Component) ? element : React__default.createElement(Component, props, element);
2865} // In development, we compare based on the name of the function because
2866// React Hot Loader proxies React components in order to make updates. In
2867// production we can simply compare the components for equality.
2868
2869var isComponent = process.env.NODE_ENV === 'development' ? hotReloadComponentCheck : function (AComponent, AnotherComponent) {
2870 return AComponent === AnotherComponent;
2871}; // Checks whether `element` is a React element of type `Component` (or one of
2872// the passed components, if `Component` is an array of React components).
2873
2874function isElementOfType(element, Component) {
2875 if (element == null || !React__default.isValidElement(element) || typeof element.type === 'string') {
2876 return false;
2877 }
2878
2879 var type = element.type;
2880 var Components = Array.isArray(Component) ? Component : [Component];
2881 return Components.some(function (AComponent) {
2882 return typeof type !== 'string' && isComponent(AComponent, type);
2883 });
2884} // Returns all children that are valid elements as an array. Can optionally be
2885// filtered by passing `predicate`.
2886
2887function elementChildren(children) {
2888 var predicate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
2889 return true;
2890 };
2891 return React__default.Children.toArray(children).filter(function (child) {
2892 return React__default.isValidElement(child) && predicate(child);
2893 });
2894}
2895
2896function hotReloadComponentCheck(AComponent, AnotherComponent) {
2897 var componentName = AComponent.name;
2898 var anotherComponentName = AnotherComponent.displayName;
2899 return AComponent === AnotherComponent || Boolean(componentName) && componentName === anotherComponentName;
2900}
2901
2902var styles$5 = {
2903 "ButtonGroup": "Polaris-ButtonGroup",
2904 "Item": "Polaris-ButtonGroup__Item",
2905 "Item-plain": "Polaris-ButtonGroup__Item--plain",
2906 "segmented": "Polaris-ButtonGroup--segmented",
2907 "Item-focused": "Polaris-ButtonGroup__Item--focused",
2908 "fullWidth": "Polaris-ButtonGroup--fullWidth"
2909};
2910
2911function Item(_ref) {
2912 var button = _ref.button;
2913
2914 var _useForcibleToggle = useForcibleToggle(false),
2915 _useForcibleToggle2 = _slicedToArray(_useForcibleToggle, 2),
2916 focused = _useForcibleToggle2[0],
2917 _useForcibleToggle2$ = _useForcibleToggle2[1],
2918 forceTrueFocused = _useForcibleToggle2$.forceTrue,
2919 forceFalseFocused = _useForcibleToggle2$.forceFalse;
2920
2921 var className = classNames(styles$5.Item, focused && styles$5['Item-focused'], button.props.plain && styles$5['Item-plain']);
2922 return React__default.createElement("div", {
2923 className: className,
2924 onFocus: forceTrueFocused,
2925 onBlur: forceFalseFocused
2926 }, button);
2927}
2928
2929function ButtonGroup(_ref) {
2930 var children = _ref.children,
2931 segmented = _ref.segmented,
2932 fullWidth = _ref.fullWidth,
2933 connectedTop = _ref.connectedTop;
2934 var className = classNames(styles$5.ButtonGroup, segmented && styles$5.segmented, fullWidth && styles$5.fullWidth);
2935 var contents = elementChildren(children).map(function (child, index) {
2936 return React__default.createElement(Item, {
2937 button: child,
2938 key: index
2939 });
2940 });
2941 return React__default.createElement("div", {
2942 className: className,
2943 "data-buttongroup-segmented": segmented,
2944 "data-buttongroup-connected-top": connectedTop,
2945 "data-buttongroup-full-width": fullWidth
2946 }, contents);
2947}
2948
2949var StickyManagerContext = React__default.createContext(undefined);
2950
2951function useStickyManager() {
2952 var stickyManager = useContext(StickyManagerContext);
2953
2954 if (!stickyManager) {
2955 throw new MissingAppProviderError('No StickyManager was provided.');
2956 }
2957
2958 return stickyManager;
2959}
2960
2961var Breakpoints = {
2962 navigationBarCollapsed: '768px',
2963 stackedContent: '1043px'
2964};
2965var noWindowMatches = {
2966 media: '',
2967 addListener: noop$1,
2968 removeListener: noop$1,
2969 matches: false,
2970 onchange: noop$1,
2971 addEventListener: noop$1,
2972 removeEventListener: noop$1,
2973 dispatchEvent: function dispatchEvent(_) {
2974 return true;
2975 }
2976};
2977
2978function noop$1() {}
2979
2980function navigationBarCollapsed() {
2981 return typeof window === 'undefined' ? noWindowMatches : window.matchMedia("(max-width: ".concat(Breakpoints.navigationBarCollapsed, ")"));
2982}
2983function stackedContent() {
2984 return typeof window === 'undefined' ? noWindowMatches : window.matchMedia("(max-width: ".concat(Breakpoints.stackedContent, ")"));
2985}
2986
2987var StickyManager =
2988/*#__PURE__*/
2989function () {
2990 function StickyManager(container) {
2991 var _this = this;
2992
2993 _classCallCheck(this, StickyManager);
2994
2995 this.stickyItems = [];
2996 this.stuckItems = [];
2997 this.topBarOffset = 0;
2998 this.handleResize = debounce(function () {
2999 _this.manageStickyItems();
3000 }, 40, {
3001 leading: true,
3002 trailing: true,
3003 maxWait: 40
3004 });
3005 this.handleScroll = debounce(function () {
3006 _this.manageStickyItems();
3007 }, 40, {
3008 leading: true,
3009 trailing: true,
3010 maxWait: 40
3011 });
3012
3013 if (container) {
3014 this.setContainer(container);
3015 }
3016 }
3017
3018 _createClass(StickyManager, [{
3019 key: "registerStickyItem",
3020 value: function registerStickyItem(stickyItem) {
3021 this.stickyItems.push(stickyItem);
3022 }
3023 }, {
3024 key: "unregisterStickyItem",
3025 value: function unregisterStickyItem(nodeToRemove) {
3026 var nodeIndex = this.stickyItems.findIndex(function (_ref) {
3027 var stickyNode = _ref.stickyNode;
3028 return nodeToRemove === stickyNode;
3029 });
3030 this.stickyItems.splice(nodeIndex, 1);
3031 }
3032 }, {
3033 key: "setContainer",
3034 value: function setContainer(el) {
3035 this.container = el;
3036
3037 if (isDocument(el)) {
3038 this.setTopBarOffset();
3039 }
3040
3041 addEventListener(this.container, 'scroll', this.handleScroll);
3042 addEventListener(window, 'resize', this.handleResize);
3043 this.manageStickyItems();
3044 }
3045 }, {
3046 key: "removeScrollListener",
3047 value: function removeScrollListener() {
3048 if (this.container) {
3049 removeEventListener(this.container, 'scroll', this.handleScroll);
3050 removeEventListener(window, 'resize', this.handleResize);
3051 }
3052 }
3053 }, {
3054 key: "manageStickyItems",
3055 value: function manageStickyItems() {
3056 var _this2 = this;
3057
3058 if (this.stickyItems.length <= 0) {
3059 return;
3060 }
3061
3062 var scrollTop = scrollTopFor(this.container);
3063 var containerTop = getRectForNode(this.container).top + this.topBarOffset;
3064 this.stickyItems.forEach(function (stickyItem) {
3065 var handlePositioning = stickyItem.handlePositioning;
3066
3067 var _this2$evaluateSticky = _this2.evaluateStickyItem(stickyItem, scrollTop, containerTop),
3068 sticky = _this2$evaluateSticky.sticky,
3069 top = _this2$evaluateSticky.top,
3070 left = _this2$evaluateSticky.left,
3071 width = _this2$evaluateSticky.width;
3072
3073 _this2.updateStuckItems(stickyItem, sticky);
3074
3075 handlePositioning(sticky, top, left, width);
3076 });
3077 }
3078 }, {
3079 key: "evaluateStickyItem",
3080 value: function evaluateStickyItem(stickyItem, scrollTop, containerTop) {
3081 var stickyNode = stickyItem.stickyNode,
3082 placeHolderNode = stickyItem.placeHolderNode,
3083 boundingElement = stickyItem.boundingElement,
3084 offset = stickyItem.offset,
3085 disableWhenStacked = stickyItem.disableWhenStacked;
3086
3087 if (disableWhenStacked && stackedContent().matches) {
3088 return {
3089 sticky: false,
3090 top: 0,
3091 left: 0,
3092 width: 'auto'
3093 };
3094 }
3095
3096 var stickyOffset = offset ? this.getOffset(stickyNode) + parseInt(tokens.spacingLoose, 10) : this.getOffset(stickyNode);
3097 var scrollPosition = scrollTop + stickyOffset;
3098 var placeHolderNodeCurrentTop = placeHolderNode.getBoundingClientRect().top - containerTop + scrollTop;
3099 var top = containerTop + stickyOffset;
3100 var width = placeHolderNode.getBoundingClientRect().width;
3101 var left = placeHolderNode.getBoundingClientRect().left;
3102 var sticky;
3103
3104 if (boundingElement == null) {
3105 sticky = scrollPosition >= placeHolderNodeCurrentTop;
3106 } else {
3107 var stickyItemHeight = stickyNode.getBoundingClientRect().height;
3108 var stickyItemBottomPosition = boundingElement.getBoundingClientRect().bottom - stickyItemHeight + scrollTop - containerTop;
3109 sticky = scrollPosition >= placeHolderNodeCurrentTop && scrollPosition < stickyItemBottomPosition;
3110 }
3111
3112 return {
3113 sticky,
3114 top,
3115 left,
3116 width
3117 };
3118 }
3119 }, {
3120 key: "updateStuckItems",
3121 value: function updateStuckItems(item, sticky) {
3122 var stickyNode = item.stickyNode;
3123
3124 if (sticky && !this.isNodeStuck(stickyNode)) {
3125 this.addStuckItem(item);
3126 } else if (!sticky && this.isNodeStuck(stickyNode)) {
3127 this.removeStuckItem(item);
3128 }
3129 }
3130 }, {
3131 key: "addStuckItem",
3132 value: function addStuckItem(stickyItem) {
3133 this.stuckItems.push(stickyItem);
3134 }
3135 }, {
3136 key: "removeStuckItem",
3137 value: function removeStuckItem(stickyItem) {
3138 var nodeToRemove = stickyItem.stickyNode;
3139 var nodeIndex = this.stuckItems.findIndex(function (_ref2) {
3140 var stickyNode = _ref2.stickyNode;
3141 return nodeToRemove === stickyNode;
3142 });
3143 this.stuckItems.splice(nodeIndex, 1);
3144 }
3145 }, {
3146 key: "getOffset",
3147 value: function getOffset(node) {
3148 if (this.stuckItems.length === 0) {
3149 return 0;
3150 }
3151
3152 var offset = 0;
3153 var count = 0;
3154 var stuckNodesLength = this.stuckItems.length;
3155 var nodeRect = getRectForNode(node);
3156
3157 while (count < stuckNodesLength) {
3158 var stuckNode = this.stuckItems[count].stickyNode;
3159
3160 if (stuckNode !== node) {
3161 var stuckNodeRect = getRectForNode(stuckNode);
3162
3163 if (!horizontallyOverlaps(nodeRect, stuckNodeRect)) {
3164 offset += getRectForNode(stuckNode).height;
3165 }
3166 } else {
3167 break;
3168 }
3169
3170 count++;
3171 }
3172
3173 return offset;
3174 }
3175 }, {
3176 key: "isNodeStuck",
3177 value: function isNodeStuck(node) {
3178 var nodeFound = this.stuckItems.findIndex(function (_ref3) {
3179 var stickyNode = _ref3.stickyNode;
3180 return node === stickyNode;
3181 });
3182 return nodeFound >= 0;
3183 }
3184 }, {
3185 key: "setTopBarOffset",
3186 value: function setTopBarOffset() {
3187 var topbarElement = this.container.querySelector(":not(".concat(scrollable.selector, ") ").concat(dataPolarisTopBar.selector));
3188 this.topBarOffset = topbarElement ? topbarElement.clientHeight : 0;
3189 }
3190 }]);
3191
3192 return StickyManager;
3193}();
3194
3195function isDocument(node) {
3196 return node === document;
3197}
3198
3199function scrollTopFor(container) {
3200 return isDocument(container) ? document.body.scrollTop || document.documentElement.scrollTop : container.scrollTop;
3201}
3202
3203function horizontallyOverlaps(rect1, rect2) {
3204 var rect1Left = rect1.left;
3205 var rect1Right = rect1.left + rect1.width;
3206 var rect2Left = rect2.left;
3207 var rect2Right = rect2.left + rect2.width;
3208 return rect2Right < rect1Left || rect1Right < rect2Left;
3209}
3210
3211var UniqueIdFactoryContext = React__default.createContext(undefined);
3212
3213/**
3214 * Returns a unique id that remains consistent across multiple re-renders of the
3215 * same hook
3216 * @param prefix Defines a prefix for the ID. You probably want to set this to
3217 * the name of the component you're calling `useUniqueId` in.
3218 * @param overrideId Defines a fixed value to use instead of generating a unique
3219 * ID. Useful for components that allow consumers to specify their own ID.
3220 */
3221
3222function useUniqueId() {
3223 var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
3224 var overrideId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
3225 var idFactory = useContext(UniqueIdFactoryContext); // By using a ref to store the uniqueId for each invocation of the hook and
3226 // checking that it is not already populated we ensure that we don’t generate
3227 // a new ID on every re-render of a component.
3228
3229 var uniqueIdRef = useRef(null);
3230
3231 if (!idFactory) {
3232 throw new MissingAppProviderError('No UniqueIdFactory was provided.');
3233 } // If an override was specified, then use that instead of using a unique ID
3234 // Hooks can’t be called conditionally so this has to go after all use* calls
3235
3236
3237 if (overrideId) {
3238 return overrideId;
3239 } // If a unique id has not yet been generated, then get a new one
3240
3241
3242 if (!uniqueIdRef.current) {
3243 uniqueIdRef.current = idFactory.nextId(prefix);
3244 }
3245
3246 return uniqueIdRef.current;
3247}
3248
3249var UniqueIdFactory =
3250/*#__PURE__*/
3251function () {
3252 function UniqueIdFactory(idGeneratorFactory) {
3253 _classCallCheck(this, UniqueIdFactory);
3254
3255 this.idGenerators = {};
3256 this.idGeneratorFactory = idGeneratorFactory;
3257 }
3258
3259 _createClass(UniqueIdFactory, [{
3260 key: "nextId",
3261 value: function nextId(prefix) {
3262 if (!this.idGenerators[prefix]) {
3263 this.idGenerators[prefix] = this.idGeneratorFactory(prefix);
3264 }
3265
3266 return this.idGenerators[prefix]();
3267 }
3268 }]);
3269
3270 return UniqueIdFactory;
3271}();
3272function globalIdGeneratorFactory() {
3273 var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
3274 var index = 1;
3275 return function () {
3276 return "Polaris".concat(prefix).concat(index++);
3277 };
3278}
3279
3280var ScrollableContext = React__default.createContext(undefined);
3281
3282function ScrollTo() {
3283 var anchorNode = useRef(null);
3284 var scrollToPosition = useContext(ScrollableContext);
3285 useEffect(function () {
3286 if (!scrollToPosition || !anchorNode.current) {
3287 return;
3288 }
3289
3290 scrollToPosition(anchorNode.current.offsetTop);
3291 }, [scrollToPosition]);
3292 var id = useUniqueId("ScrollTo"); // eslint-disable-next-line jsx-a11y/anchor-is-valid
3293
3294 return React__default.createElement("a", {
3295 id: id,
3296 ref: anchorNode
3297 });
3298}
3299
3300var styles$6 = {
3301 "Scrollable": "Polaris-Scrollable",
3302 "horizontal": "Polaris-Scrollable--horizontal",
3303 "vertical": "Polaris-Scrollable--vertical",
3304 "hasTopShadow": "Polaris-Scrollable--hasTopShadow",
3305 "hasBottomShadow": "Polaris-Scrollable--hasBottomShadow"
3306};
3307
3308var MAX_SCROLL_DISTANCE = 100;
3309var DELTA_THRESHOLD = 0.2;
3310var DELTA_PERCENTAGE = 0.2;
3311var EVENTS_TO_LOCK = ['scroll', 'touchmove', 'wheel'];
3312var PREFERS_REDUCED_MOTION = prefersReducedMotion();
3313var Scrollable =
3314/*#__PURE__*/
3315function (_React$Component) {
3316 _inherits(Scrollable, _React$Component);
3317
3318 function Scrollable() {
3319 var _this;
3320
3321 _classCallCheck(this, Scrollable);
3322
3323 _this = _possibleConstructorReturn(this, _getPrototypeOf(Scrollable).apply(this, arguments));
3324 _this.state = {
3325 topShadow: false,
3326 bottomShadow: false,
3327 scrollPosition: 0
3328 };
3329 _this.stickyManager = new StickyManager();
3330 _this.handleResize = debounce(function () {
3331 _this.handleScroll();
3332 }, 50, {
3333 trailing: true
3334 });
3335
3336 _this.setScrollArea = function (scrollArea) {
3337 _this.scrollArea = scrollArea;
3338 };
3339
3340 _this.handleScroll = function () {
3341 var _assertThisInitialize = _assertThisInitialized(_this),
3342 scrollArea = _assertThisInitialize.scrollArea;
3343
3344 var _this$props = _this.props,
3345 shadow = _this$props.shadow,
3346 onScrolledToBottom = _this$props.onScrolledToBottom;
3347
3348 if (scrollArea == null) {
3349 return;
3350 }
3351
3352 var scrollTop = scrollArea.scrollTop,
3353 clientHeight = scrollArea.clientHeight,
3354 scrollHeight = scrollArea.scrollHeight;
3355 var shouldBottomShadow = Boolean(shadow && !(scrollTop + clientHeight >= scrollHeight));
3356 var shouldTopShadow = Boolean(shadow && scrollTop > 0);
3357 var canScroll = scrollHeight > clientHeight;
3358 var hasScrolledToBottom = scrollHeight - scrollTop === clientHeight;
3359
3360 if (canScroll && hasScrolledToBottom && onScrolledToBottom) {
3361 onScrolledToBottom();
3362 }
3363
3364 _this.setState({
3365 topShadow: shouldTopShadow,
3366 bottomShadow: shouldBottomShadow,
3367 scrollPosition: scrollTop
3368 });
3369 };
3370
3371 _this.scrollHint = function () {
3372 var _assertThisInitialize2 = _assertThisInitialized(_this),
3373 scrollArea = _assertThisInitialize2.scrollArea;
3374
3375 if (scrollArea == null) {
3376 return;
3377 }
3378
3379 var clientHeight = scrollArea.clientHeight,
3380 scrollHeight = scrollArea.scrollHeight;
3381
3382 if (PREFERS_REDUCED_MOTION || _this.state.scrollPosition > 0 || scrollHeight <= clientHeight) {
3383 return;
3384 }
3385
3386 var scrollDistance = scrollHeight - clientHeight;
3387
3388 _this.toggleLock();
3389
3390 _this.setState({
3391 scrollPosition: scrollDistance > MAX_SCROLL_DISTANCE ? MAX_SCROLL_DISTANCE : scrollDistance
3392 }, function () {
3393 window.requestAnimationFrame(_this.scrollStep);
3394 });
3395 };
3396
3397 _this.scrollStep = function () {
3398 _this.setState(function (_ref) {
3399 var scrollPosition = _ref.scrollPosition;
3400 var delta = scrollPosition * DELTA_PERCENTAGE;
3401 return {
3402 scrollPosition: delta < DELTA_THRESHOLD ? 0 : scrollPosition - delta
3403 };
3404 }, function () {
3405 if (_this.state.scrollPosition > 0) {
3406 window.requestAnimationFrame(_this.scrollStep);
3407 } else {
3408 _this.toggleLock(false);
3409 }
3410 });
3411 };
3412
3413 _this.scrollToPosition = function (scrollY) {
3414 _this.setState({
3415 scrollPosition: scrollY
3416 });
3417 };
3418
3419 return _this;
3420 }
3421
3422 _createClass(Scrollable, [{
3423 key: "componentDidMount",
3424 value: function componentDidMount() {
3425 var _this2 = this;
3426
3427 if (this.scrollArea == null) {
3428 return;
3429 }
3430
3431 this.stickyManager.setContainer(this.scrollArea);
3432 addEventListener(this.scrollArea, 'scroll', function () {
3433 window.requestAnimationFrame(_this2.handleScroll);
3434 });
3435 addEventListener(window, 'resize', this.handleResize);
3436 window.requestAnimationFrame(function () {
3437 _this2.handleScroll();
3438
3439 if (_this2.props.hint) {
3440 _this2.scrollHint();
3441 }
3442 });
3443 }
3444 }, {
3445 key: "componentWillUnmount",
3446 value: function componentWillUnmount() {
3447 if (this.scrollArea == null) {
3448 return;
3449 }
3450
3451 removeEventListener(this.scrollArea, 'scroll', this.handleScroll);
3452 removeEventListener(window, 'resize', this.handleResize);
3453 this.stickyManager.removeScrollListener();
3454 }
3455 }, {
3456 key: "componentDidUpdate",
3457 value: function componentDidUpdate() {
3458 var scrollPosition = this.state.scrollPosition;
3459
3460 if (scrollPosition && this.scrollArea && scrollPosition > 0) {
3461 this.scrollArea.scrollTop = scrollPosition;
3462 }
3463 }
3464 }, {
3465 key: "render",
3466 value: function render() {
3467 var _this$state = this.state,
3468 topShadow = _this$state.topShadow,
3469 bottomShadow = _this$state.bottomShadow;
3470
3471 var _a = this.props,
3472 children = _a.children,
3473 className = _a.className,
3474 horizontal = _a.horizontal,
3475 _a$vertical = _a.vertical,
3476 vertical = _a$vertical === void 0 ? true : _a$vertical,
3477 shadow = _a.shadow,
3478 hint = _a.hint,
3479 onScrolledToBottom = _a.onScrolledToBottom,
3480 rest = __rest(_a, ["children", "className", "horizontal", "vertical", "shadow", "hint", "onScrolledToBottom"]);
3481
3482 var finalClassName = classNames(className, styles$6.Scrollable, vertical && styles$6.vertical, horizontal && styles$6.horizontal, topShadow && styles$6.hasTopShadow, bottomShadow && styles$6.hasBottomShadow);
3483 return React__default.createElement(ScrollableContext.Provider, {
3484 value: this.scrollToPosition
3485 }, React__default.createElement(StickyManagerContext.Provider, {
3486 value: this.stickyManager
3487 }, React__default.createElement("div", Object.assign({
3488 className: finalClassName
3489 }, scrollable.props, rest, {
3490 ref: this.setScrollArea
3491 }), children)));
3492 }
3493 }, {
3494 key: "toggleLock",
3495 value: function toggleLock() {
3496 var shouldLock = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
3497 var scrollArea = this.scrollArea;
3498
3499 if (scrollArea == null) {
3500 return;
3501 }
3502
3503 EVENTS_TO_LOCK.forEach(function (eventName) {
3504 if (shouldLock) {
3505 addEventListener(scrollArea, eventName, prevent);
3506 } else {
3507 removeEventListener(scrollArea, eventName, prevent);
3508 }
3509 });
3510 }
3511 }], [{
3512 key: "forNode",
3513 value: function forNode(node) {
3514 return closest(node, scrollable.selector) || document;
3515 }
3516 }]);
3517
3518 return Scrollable;
3519}(React__default.Component);
3520Scrollable.ScrollTo = ScrollTo;
3521
3522function prevent(evt) {
3523 evt.preventDefault();
3524}
3525
3526function prefersReducedMotion() {
3527 try {
3528 return window.matchMedia('(prefers-reduced-motion: reduce)').matches;
3529 } catch (err) {
3530 return false;
3531 }
3532}
3533
3534var styles$7 = {
3535 "Badge": "Polaris-Badge",
3536 "Pip": "Polaris-Badge__Pip",
3537 "sizeSmall": "Polaris-Badge--sizeSmall",
3538 "statusSuccess": "Polaris-Badge--statusSuccess",
3539 "Content": "Polaris-Badge__Content",
3540 "statusInfo": "Polaris-Badge--statusInfo",
3541 "statusAttention": "Polaris-Badge--statusAttention",
3542 "statusWarning": "Polaris-Badge--statusWarning",
3543 "statusNew": "Polaris-Badge--statusNew",
3544 "progressIncomplete": "Polaris-Badge--progressIncomplete",
3545 "progressPartiallyComplete": "Polaris-Badge--progressPartiallyComplete",
3546 "progressComplete": "Polaris-Badge--progressComplete"
3547};
3548
3549var PROGRESS_LABELS = {
3550 incomplete: 'incomplete',
3551 partiallyComplete: 'partiallyComplete',
3552 complete: 'complete'
3553};
3554var STATUS_LABELS = {
3555 info: 'info',
3556 success: 'success',
3557 warning: 'warning',
3558 attention: 'attention',
3559 new: 'new'
3560};
3561var DEFAULT_SIZE$1 = 'medium';
3562function Badge(_ref) {
3563 var children = _ref.children,
3564 status = _ref.status,
3565 progress = _ref.progress,
3566 _ref$size = _ref.size,
3567 size = _ref$size === void 0 ? DEFAULT_SIZE$1 : _ref$size;
3568 var i18n = useI18n();
3569 var className = classNames(styles$7.Badge, status && styles$7[variationName('status', status)], progress && styles$7[variationName('progress', progress)], size && size !== DEFAULT_SIZE$1 && styles$7[variationName('size', size)]);
3570 var progressMarkup;
3571
3572 switch (progress) {
3573 case PROGRESS_LABELS.incomplete:
3574 progressMarkup = i18n.translate('Polaris.Badge.PROGRESS_LABELS.incomplete');
3575 break;
3576
3577 case PROGRESS_LABELS.partiallyComplete:
3578 progressMarkup = i18n.translate('Polaris.Badge.PROGRESS_LABELS.partiallyComplete');
3579 break;
3580
3581 case PROGRESS_LABELS.complete:
3582 progressMarkup = i18n.translate('Polaris.Badge.PROGRESS_LABELS.complete');
3583 break;
3584 }
3585
3586 var pipMarkup = progress ? React__default.createElement("span", {
3587 className: styles$7.Pip
3588 }, React__default.createElement(VisuallyHidden, null, progressMarkup)) : null;
3589 var statusMarkup;
3590
3591 switch (status) {
3592 case STATUS_LABELS.info:
3593 statusMarkup = i18n.translate('Polaris.Badge.STATUS_LABELS.info');
3594 break;
3595
3596 case STATUS_LABELS.success:
3597 statusMarkup = i18n.translate('Polaris.Badge.STATUS_LABELS.success');
3598 break;
3599
3600 case STATUS_LABELS.warning:
3601 statusMarkup = i18n.translate('Polaris.Badge.STATUS_LABELS.warning');
3602 break;
3603
3604 case STATUS_LABELS.attention:
3605 statusMarkup = i18n.translate('Polaris.Badge.STATUS_LABELS.attention');
3606 break;
3607
3608 case STATUS_LABELS.new:
3609 statusMarkup = i18n.translate('Polaris.Badge.STATUS_LABELS.new');
3610 break;
3611 }
3612
3613 var statusLabelMarkup = status ? React__default.createElement(VisuallyHidden, null, statusMarkup) : null;
3614 return React__default.createElement("span", {
3615 className: className
3616 }, statusLabelMarkup, pipMarkup, React__default.createElement("span", {
3617 className: styles$7.Content
3618 }, children));
3619}
3620
3621var styles$8 = {
3622 "variationPositive": "Polaris-TextStyle--variationPositive",
3623 "variationNegative": "Polaris-TextStyle--variationNegative",
3624 "variationCode": "Polaris-TextStyle--variationCode",
3625 "variationStrong": "Polaris-TextStyle--variationStrong",
3626 "variationSubdued": "Polaris-TextStyle--variationSubdued"
3627};
3628
3629var VariationValue;
3630
3631(function (VariationValue) {
3632 VariationValue["Positive"] = "positive";
3633 VariationValue["Negative"] = "negative";
3634 VariationValue["Strong"] = "strong";
3635 VariationValue["Subdued"] = "subdued";
3636 VariationValue["Code"] = "code";
3637})(VariationValue || (VariationValue = {}));
3638
3639function TextStyle(_ref) {
3640 var variation = _ref.variation,
3641 children = _ref.children;
3642 var className = classNames(variation && styles$8[variationName('variation', variation)], variation === VariationValue.Code && styles$8.code);
3643 var Element = variationElement(variation);
3644 return React__default.createElement(Element, {
3645 className: className
3646 }, children);
3647}
3648
3649function variationElement(variation) {
3650 return variation === VariationValue.Code ? 'code' : 'span';
3651}
3652
3653var styles$9 = {
3654 "ActionList": "Polaris-ActionList",
3655 "globalTheming": "Polaris-ActionList--globalTheming",
3656 "Section-withoutTitle": "Polaris-ActionList__Section--withoutTitle",
3657 "Actions": "Polaris-ActionList__Actions",
3658 "Section": "Polaris-ActionList__Section",
3659 "Title": "Polaris-ActionList__Title",
3660 "Item": "Polaris-ActionList__Item",
3661 "active": "Polaris-ActionList--active",
3662 "destructive": "Polaris-ActionList--destructive",
3663 "disabled": "Polaris-ActionList--disabled",
3664 "Image": "Polaris-ActionList__Image",
3665 "Content": "Polaris-ActionList__Content",
3666 "Text": "Polaris-ActionList__Text",
3667 "BadgeWrapper": "Polaris-ActionList__BadgeWrapper"
3668};
3669
3670function Item$1(_ref) {
3671 var id = _ref.id,
3672 badge = _ref.badge,
3673 content = _ref.content,
3674 accessibilityLabel = _ref.accessibilityLabel,
3675 helpText = _ref.helpText,
3676 url = _ref.url,
3677 onAction = _ref.onAction,
3678 icon = _ref.icon,
3679 image = _ref.image,
3680 disabled = _ref.disabled,
3681 external = _ref.external,
3682 destructive = _ref.destructive,
3683 ellipsis = _ref.ellipsis,
3684 active = _ref.active,
3685 role = _ref.role;
3686
3687 var _useFeatures = useFeatures(),
3688 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
3689 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
3690
3691 var className = classNames(styles$9.Item, disabled && styles$9.disabled, destructive && styles$9.destructive, active && styles$9.active, unstableGlobalTheming && styles$9.globalTheming);
3692 var imageElement = null;
3693
3694 if (icon) {
3695 imageElement = React__default.createElement("div", {
3696 className: styles$9.Image
3697 }, React__default.createElement(Icon, {
3698 source: icon
3699 }));
3700 } else if (image) {
3701 imageElement = React__default.createElement("div", {
3702 role: "presentation",
3703 className: styles$9.Image,
3704 style: {
3705 backgroundImage: "url(".concat(image)
3706 }
3707 });
3708 }
3709
3710 var contentText = ellipsis && content ? "".concat(content, "\u2026") : content;
3711 var contentMarkup = helpText ? React__default.createElement("div", null, React__default.createElement("div", null, contentText), React__default.createElement(TextStyle, {
3712 variation: "subdued"
3713 }, helpText)) : contentText;
3714 var badgeMarkup = badge && React__default.createElement("span", {
3715 className: styles$9.BadgeWrapper
3716 }, React__default.createElement(Badge, {
3717 status: badge.status
3718 }, badge.content));
3719 var textMarkup = imageElement ? React__default.createElement("div", {
3720 className: styles$9.Text
3721 }, contentMarkup) : contentMarkup;
3722 var contentElement = React__default.createElement("div", {
3723 className: styles$9.Content
3724 }, imageElement, textMarkup, badgeMarkup);
3725 var scrollMarkup = active ? React__default.createElement(Scrollable.ScrollTo, null) : null;
3726 var control = url ? React__default.createElement(UnstyledLink, {
3727 id: id,
3728 url: url,
3729 className: className,
3730 external: external,
3731 "aria-label": accessibilityLabel,
3732 onClick: onAction
3733 }, contentElement) : React__default.createElement("button", {
3734 id: id,
3735 type: "button",
3736 className: className,
3737 disabled: disabled,
3738 "aria-label": accessibilityLabel,
3739 onClick: onAction
3740 }, contentElement);
3741 return React__default.createElement("li", {
3742 role: role,
3743 "aria-selected": active
3744 }, scrollMarkup, control);
3745}
3746
3747function Section(_ref) {
3748 var section = _ref.section,
3749 hasMultipleSections = _ref.hasMultipleSections,
3750 actionRole = _ref.actionRole,
3751 onActionAnyItem = _ref.onActionAnyItem;
3752
3753 var handleAction = function handleAction(itemOnAction) {
3754 return function () {
3755 if (itemOnAction) {
3756 itemOnAction();
3757 }
3758
3759 if (onActionAnyItem) {
3760 onActionAnyItem();
3761 }
3762 };
3763 };
3764
3765 var actionMarkup = section.items.map(function (_a, index) {
3766 var content = _a.content,
3767 helpText = _a.helpText,
3768 onAction = _a.onAction,
3769 item = __rest(_a, ["content", "helpText", "onAction"]);
3770
3771 return React__default.createElement(Item$1, Object.assign({
3772 key: "".concat(content, "-").concat(index),
3773 content: content,
3774 helpText: helpText,
3775 role: actionRole,
3776 onAction: handleAction(onAction)
3777 }, item));
3778 });
3779 var className = section.title ? undefined : styles$9['Section-withoutTitle'];
3780 var titleMarkup = section.title ? React__default.createElement("p", {
3781 className: styles$9.Title
3782 }, section.title) : null;
3783 var sectionRole = actionRole === 'option' ? 'presentation' : undefined;
3784 var sectionMarkup = React__default.createElement("div", {
3785 className: className
3786 }, titleMarkup, React__default.createElement("ul", {
3787 className: styles$9.Actions,
3788 role: sectionRole
3789 }, actionMarkup));
3790 return hasMultipleSections ? React__default.createElement("li", {
3791 className: styles$9.Section
3792 }, sectionMarkup) : sectionMarkup;
3793}
3794
3795function ActionList(_ref) {
3796 var items = _ref.items,
3797 _ref$sections = _ref.sections,
3798 sections = _ref$sections === void 0 ? [] : _ref$sections,
3799 actionRole = _ref.actionRole,
3800 onActionAnyItem = _ref.onActionAnyItem;
3801 var finalSections = [];
3802
3803 if (items) {
3804 finalSections = [{
3805 items
3806 }].concat(_toConsumableArray(sections));
3807 } else if (sections) {
3808 finalSections = sections;
3809 }
3810
3811 var _useFeatures = useFeatures(),
3812 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
3813 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
3814
3815 var className = classNames(styles$9.ActionList, unstableGlobalTheming && styles$9.globalTheming);
3816 var hasMultipleSections = finalSections.length > 1; // Type asserting to any is required for TS3.2 but can be removed when we update to 3.3
3817 // see https://github.com/Microsoft/TypeScript/issues/28768
3818
3819 var Element = hasMultipleSections ? 'ul' : 'div';
3820 var sectionMarkup = finalSections.map(function (section, index) {
3821 return section.items.length > 0 ? React__default.createElement(Section, {
3822 key: section.title || index,
3823 section: section,
3824 hasMultipleSections: hasMultipleSections,
3825 actionRole: actionRole,
3826 onActionAnyItem: onActionAnyItem
3827 }) : null;
3828 });
3829 return React__default.createElement(Element, {
3830 className: className
3831 }, sectionMarkup);
3832}
3833
3834var getUniqueID = createUniqueIDFactory('portal-');
3835var Portal =
3836/*#__PURE__*/
3837function (_React$PureComponent) {
3838 _inherits(Portal, _React$PureComponent);
3839
3840 function Portal() {
3841 var _this;
3842
3843 _classCallCheck(this, Portal);
3844
3845 _this = _possibleConstructorReturn(this, _getPrototypeOf(Portal).apply(this, arguments));
3846 _this.state = {
3847 isMounted: false
3848 };
3849 _this.portalId = _this.props.idPrefix !== '' ? "".concat(_this.props.idPrefix, "-").concat(getUniqueID()) : getUniqueID();
3850 return _this;
3851 }
3852
3853 _createClass(Portal, [{
3854 key: "componentDidMount",
3855 value: function componentDidMount() {
3856 this.portalNode = document.createElement('div');
3857 this.portalNode.setAttribute(portal.props[0], this.portalId);
3858
3859 if (this.context != null) {
3860 var UNSTABLE_cssCustomProperties = this.context.UNSTABLE_cssCustomProperties;
3861
3862 if (UNSTABLE_cssCustomProperties != null) {
3863 this.portalNode.setAttribute('style', UNSTABLE_cssCustomProperties);
3864 } else {
3865 this.portalNode.removeAttribute('style');
3866 }
3867 }
3868
3869 document.body.appendChild(this.portalNode);
3870 this.setState({
3871 isMounted: true
3872 });
3873 }
3874 }, {
3875 key: "componentDidUpdate",
3876 value: function componentDidUpdate(_, prevState) {
3877 var _this$props$onPortalC = this.props.onPortalCreated,
3878 onPortalCreated = _this$props$onPortalC === void 0 ? noop$2 : _this$props$onPortalC;
3879
3880 if (this.context != null) {
3881 var UNSTABLE_cssCustomProperties = this.context.UNSTABLE_cssCustomProperties;
3882
3883 if (UNSTABLE_cssCustomProperties != null) {
3884 this.portalNode.setAttribute('style', UNSTABLE_cssCustomProperties);
3885 } else {
3886 this.portalNode.removeAttribute('style');
3887 }
3888 }
3889
3890 if (!prevState.isMounted && this.state.isMounted) {
3891 onPortalCreated();
3892 }
3893 }
3894 }, {
3895 key: "componentWillUnmount",
3896 value: function componentWillUnmount() {
3897 document.body.removeChild(this.portalNode);
3898 }
3899 }, {
3900 key: "render",
3901 value: function render() {
3902 return this.state.isMounted ? createPortal(this.props.children, this.portalNode) : null;
3903 }
3904 }]);
3905
3906 return Portal;
3907}(React__default.PureComponent);
3908Portal.defaultProps = {
3909 idPrefix: ''
3910};
3911Portal.contextType = ThemeContext;
3912
3913function noop$2() {}
3914
3915var styles$a = {
3916 "Popover": "Polaris-Popover",
3917 "PopoverOverlay": "Polaris-Popover__PopoverOverlay",
3918 "PopoverOverlay-entering": "Polaris-Popover__PopoverOverlay--entering",
3919 "PopoverOverlay-open": "Polaris-Popover__PopoverOverlay--open",
3920 "PopoverOverlay-exiting": "Polaris-Popover__PopoverOverlay--exiting",
3921 "measuring": "Polaris-Popover--measuring",
3922 "fullWidth": "Polaris-Popover--fullWidth",
3923 "Content": "Polaris-Popover__Content",
3924 "positionedAbove": "Polaris-Popover--positionedAbove",
3925 "Wrapper": "Polaris-Popover__Wrapper",
3926 "Content-fullHeight": "Polaris-Popover__Content--fullHeight",
3927 "Content-fluidContent": "Polaris-Popover__Content--fluidContent",
3928 "Pane": "Polaris-Popover__Pane",
3929 "Pane-fixed": "Polaris-Popover__Pane--fixed",
3930 "Section": "Polaris-Popover__Section",
3931 "FocusTracker": "Polaris-Popover__FocusTracker"
3932};
3933
3934function Section$1(_ref) {
3935 var children = _ref.children;
3936 return React__default.createElement("div", {
3937 className: styles$a.Section
3938 }, children);
3939}
3940
3941function Pane(_ref) {
3942 var fixed = _ref.fixed,
3943 sectioned = _ref.sectioned,
3944 children = _ref.children,
3945 onScrolledToBottom = _ref.onScrolledToBottom;
3946 var className = classNames(styles$a.Pane, fixed && styles$a['Pane-fixed']);
3947 var content = sectioned ? wrapWithComponent(children, Section$1, {}) : children;
3948 return fixed ? React__default.createElement("div", {
3949 className: className
3950 }, content) : React__default.createElement(Scrollable, {
3951 hint: true,
3952 shadow: true,
3953 className: className,
3954 onScrolledToBottom: onScrolledToBottom
3955 }, content);
3956}
3957
3958var EventListener =
3959/*#__PURE__*/
3960function (_React$PureComponent) {
3961 _inherits(EventListener, _React$PureComponent);
3962
3963 function EventListener() {
3964 _classCallCheck(this, EventListener);
3965
3966 return _possibleConstructorReturn(this, _getPrototypeOf(EventListener).apply(this, arguments));
3967 }
3968
3969 _createClass(EventListener, [{
3970 key: "componentDidMount",
3971 value: function componentDidMount() {
3972 this.attachListener();
3973 }
3974 }, {
3975 key: "componentDidUpdate",
3976 value: function componentDidUpdate(_a) {
3977 var passive = _a.passive,
3978 detachProps = __rest(_a, ["passive"]);
3979
3980 this.detachListener(detachProps);
3981 this.attachListener();
3982 }
3983 }, {
3984 key: "componentWillUnmount",
3985 value: function componentWillUnmount() {
3986 this.detachListener();
3987 }
3988 }, {
3989 key: "render",
3990 value: function render() {
3991 return null;
3992 }
3993 }, {
3994 key: "attachListener",
3995 value: function attachListener() {
3996 var _this$props = this.props,
3997 event = _this$props.event,
3998 handler = _this$props.handler,
3999 capture = _this$props.capture,
4000 passive = _this$props.passive;
4001 addEventListener(window, event, handler, {
4002 capture,
4003 passive
4004 });
4005 }
4006 }, {
4007 key: "detachListener",
4008 value: function detachListener(prevProps) {
4009 var _ref = prevProps || this.props,
4010 event = _ref.event,
4011 handler = _ref.handler,
4012 capture = _ref.capture;
4013
4014 removeEventListener(window, event, handler, capture);
4015 }
4016 }]);
4017
4018 return EventListener;
4019}(React__default.PureComponent);
4020
4021var KeypressListener =
4022/*#__PURE__*/
4023function (_React$Component) {
4024 _inherits(KeypressListener, _React$Component);
4025
4026 function KeypressListener() {
4027 var _this;
4028
4029 _classCallCheck(this, KeypressListener);
4030
4031 _this = _possibleConstructorReturn(this, _getPrototypeOf(KeypressListener).apply(this, arguments));
4032
4033 _this.handleKeyEvent = function (event) {
4034 var _this$props = _this.props,
4035 keyCode = _this$props.keyCode,
4036 handler = _this$props.handler;
4037
4038 if (event.keyCode === keyCode) {
4039 handler(event);
4040 }
4041 };
4042
4043 return _this;
4044 }
4045
4046 _createClass(KeypressListener, [{
4047 key: "componentDidMount",
4048 value: function componentDidMount() {
4049 addEventListener(document, 'keyup', this.handleKeyEvent);
4050 }
4051 }, {
4052 key: "componentWillUnmount",
4053 value: function componentWillUnmount() {
4054 removeEventListener(document, 'keyup', this.handleKeyEvent);
4055 }
4056 }, {
4057 key: "render",
4058 value: function render() {
4059 return null;
4060 }
4061 }]);
4062
4063 return KeypressListener;
4064}(React__default.Component);
4065
4066function calculateVerticalPosition(activatorRect, overlayRect, overlayMargins, scrollableContainerRect, containerRect, preferredPosition, fixed) {
4067 var activatorTop = activatorRect.top;
4068 var activatorBottom = activatorTop + activatorRect.height;
4069 var spaceAbove = activatorRect.top;
4070 var spaceBelow = containerRect.height - activatorRect.top - activatorRect.height;
4071 var desiredHeight = overlayRect.height;
4072 var verticalMargins = overlayMargins.activator + overlayMargins.container;
4073 var minimumSpaceToScroll = overlayMargins.container;
4074 var distanceToTopScroll = activatorRect.top - Math.max(scrollableContainerRect.top, 0);
4075 var distanceToBottomScroll = containerRect.top + Math.min(containerRect.height, scrollableContainerRect.top + scrollableContainerRect.height) - (activatorRect.top + activatorRect.height);
4076 var enoughSpaceFromTopScroll = distanceToTopScroll >= minimumSpaceToScroll;
4077 var enoughSpaceFromBottomScroll = distanceToBottomScroll >= minimumSpaceToScroll;
4078 var heightIfBelow = Math.min(spaceBelow, desiredHeight);
4079 var heightIfAbove = Math.min(spaceAbove, desiredHeight);
4080 var containerRectTop = fixed ? 0 : containerRect.top;
4081 var positionIfAbove = {
4082 height: heightIfAbove - verticalMargins,
4083 top: activatorTop + containerRectTop - heightIfAbove,
4084 positioning: 'above'
4085 };
4086 var positionIfBelow = {
4087 height: heightIfBelow - verticalMargins,
4088 top: activatorBottom + containerRectTop,
4089 positioning: 'below'
4090 };
4091
4092 if (preferredPosition === 'above') {
4093 return (enoughSpaceFromTopScroll || distanceToTopScroll >= distanceToBottomScroll && !enoughSpaceFromBottomScroll) && (spaceAbove > desiredHeight || spaceAbove > spaceBelow) ? positionIfAbove : positionIfBelow;
4094 }
4095
4096 if (preferredPosition === 'below') {
4097 return (enoughSpaceFromBottomScroll || distanceToBottomScroll >= distanceToTopScroll && !enoughSpaceFromTopScroll) && (spaceBelow > desiredHeight || spaceBelow > spaceAbove) ? positionIfBelow : positionIfAbove;
4098 }
4099
4100 if (enoughSpaceFromTopScroll && enoughSpaceFromBottomScroll) {
4101 return spaceAbove > spaceBelow ? positionIfAbove : positionIfBelow;
4102 }
4103
4104 return distanceToTopScroll > minimumSpaceToScroll ? positionIfAbove : positionIfBelow;
4105}
4106function calculateHorizontalPosition(activatorRect, overlayRect, containerRect, overlayMargins, preferredAlignment) {
4107 var maximum = containerRect.width - overlayRect.width;
4108
4109 if (preferredAlignment === 'left') {
4110 return Math.min(maximum, Math.max(0, activatorRect.left - overlayMargins.horizontal));
4111 } else if (preferredAlignment === 'right') {
4112 var activatorRight = activatorRect.left + activatorRect.width;
4113 return Math.min(maximum, Math.max(0, activatorRight - overlayRect.width + overlayMargins.horizontal));
4114 }
4115
4116 return Math.min(maximum, Math.max(0, activatorRect.center.x - overlayRect.width / 2));
4117}
4118function rectIsOutsideOfRect(inner, outer) {
4119 var center = inner.center;
4120 return center.y < outer.top || center.y > outer.top + outer.height;
4121}
4122
4123var styles$b = {
4124 "PositionedOverlay": "Polaris-PositionedOverlay",
4125 "fixed": "Polaris-PositionedOverlay--fixed",
4126 "calculating": "Polaris-PositionedOverlay--calculating"
4127};
4128
4129var OBSERVER_CONFIG = {
4130 childList: true,
4131 subtree: true
4132};
4133var PositionedOverlay =
4134/*#__PURE__*/
4135function (_React$PureComponent) {
4136 _inherits(PositionedOverlay, _React$PureComponent);
4137
4138 function PositionedOverlay(props) {
4139 var _this;
4140
4141 _classCallCheck(this, PositionedOverlay);
4142
4143 _this = _possibleConstructorReturn(this, _getPrototypeOf(PositionedOverlay).call(this, props));
4144 _this.state = {
4145 measuring: true,
4146 activatorRect: getRectForNode(_this.props.activator),
4147 left: 0,
4148 top: 0,
4149 height: 0,
4150 width: null,
4151 positioning: 'below',
4152 zIndex: null,
4153 outsideScrollableContainer: false,
4154 lockPosition: false
4155 };
4156 _this.overlay = null;
4157 _this.scrollableContainer = null;
4158
4159 _this.overlayDetails = function () {
4160 var _this$state = _this.state,
4161 measuring = _this$state.measuring,
4162 left = _this$state.left,
4163 positioning = _this$state.positioning,
4164 height = _this$state.height,
4165 activatorRect = _this$state.activatorRect;
4166 return {
4167 measuring,
4168 left,
4169 desiredHeight: height,
4170 positioning,
4171 activatorRect
4172 };
4173 };
4174
4175 _this.setOverlay = function (node) {
4176 _this.overlay = node;
4177 };
4178
4179 _this.handleMeasurement = function () {
4180 var _this$state2 = _this.state,
4181 lockPosition = _this$state2.lockPosition,
4182 top = _this$state2.top;
4183
4184 _this.observer.disconnect();
4185
4186 _this.setState(function (_ref) {
4187 var left = _ref.left,
4188 top = _ref.top;
4189 return {
4190 left,
4191 top,
4192 height: 0,
4193 positioning: 'below',
4194 measuring: true
4195 };
4196 }, function () {
4197 if (_this.overlay == null || _this.scrollableContainer == null) {
4198 return;
4199 }
4200
4201 var _this$props = _this.props,
4202 activator = _this$props.activator,
4203 _this$props$preferred = _this$props.preferredPosition,
4204 preferredPosition = _this$props$preferred === void 0 ? 'below' : _this$props$preferred,
4205 _this$props$preferred2 = _this$props.preferredAlignment,
4206 preferredAlignment = _this$props$preferred2 === void 0 ? 'center' : _this$props$preferred2,
4207 onScrollOut = _this$props.onScrollOut,
4208 fullWidth = _this$props.fullWidth,
4209 fixed = _this$props.fixed;
4210 var textFieldActivator = activator.querySelector('input');
4211 var activatorRect = textFieldActivator != null ? getRectForNode(textFieldActivator) : getRectForNode(activator);
4212 var currentOverlayRect = getRectForNode(_this.overlay);
4213 var scrollableElement = isDocument$1(_this.scrollableContainer) ? document.body : _this.scrollableContainer;
4214 var scrollableContainerRect = getRectForNode(scrollableElement);
4215 var overlayRect = fullWidth ? Object.assign({}, currentOverlayRect, {
4216 width: activatorRect.width
4217 }) : currentOverlayRect; // If `body` is 100% height, it still acts as though it were not constrained to that size. This adjusts for that.
4218
4219 if (scrollableElement === document.body) {
4220 scrollableContainerRect.height = document.body.scrollHeight;
4221 }
4222
4223 var overlayMargins = _this.overlay.firstElementChild ? getMarginsForNode(_this.overlay.firstElementChild) : {
4224 activator: 0,
4225 container: 0,
4226 horizontal: 0
4227 };
4228 var containerRect = windowRect();
4229 var zIndexForLayer = getZIndexForLayerFromNode(activator);
4230 var zIndex = zIndexForLayer == null ? zIndexForLayer : zIndexForLayer + 1;
4231 var verticalPosition = calculateVerticalPosition(activatorRect, overlayRect, overlayMargins, scrollableContainerRect, containerRect, preferredPosition, fixed);
4232 var horizontalPosition = calculateHorizontalPosition(activatorRect, overlayRect, containerRect, overlayMargins, preferredAlignment);
4233
4234 _this.setState({
4235 measuring: false,
4236 activatorRect: getRectForNode(activator),
4237 left: horizontalPosition,
4238 top: lockPosition ? top : verticalPosition.top,
4239 lockPosition: Boolean(fixed),
4240 height: verticalPosition.height || 0,
4241 width: fullWidth ? overlayRect.width : null,
4242 positioning: verticalPosition.positioning,
4243 outsideScrollableContainer: onScrollOut != null && rectIsOutsideOfRect(activatorRect, intersectionWithViewport(scrollableContainerRect)),
4244 zIndex
4245 }, function () {
4246 if (!_this.overlay) return;
4247
4248 _this.observer.observe(_this.overlay, OBSERVER_CONFIG);
4249 });
4250 });
4251 };
4252
4253 _this.observer = new MutationObserver(_this.handleMeasurement);
4254 return _this;
4255 }
4256
4257 _createClass(PositionedOverlay, [{
4258 key: "componentDidMount",
4259 value: function componentDidMount() {
4260 this.scrollableContainer = Scrollable.forNode(this.props.activator);
4261
4262 if (this.scrollableContainer && !this.props.fixed) {
4263 this.scrollableContainer.addEventListener('scroll', this.handleMeasurement);
4264 }
4265
4266 this.handleMeasurement();
4267 }
4268 }, {
4269 key: "componentWillUnmount",
4270 value: function componentWillUnmount() {
4271 if (this.scrollableContainer && !this.props.fixed) {
4272 this.scrollableContainer.removeEventListener('scroll', this.handleMeasurement);
4273 }
4274 }
4275 }, {
4276 key: "componentDidUpdate",
4277 value: function componentDidUpdate() {
4278 var _this$state3 = this.state,
4279 outsideScrollableContainer = _this$state3.outsideScrollableContainer,
4280 top = _this$state3.top;
4281 var _this$props2 = this.props,
4282 onScrollOut = _this$props2.onScrollOut,
4283 active = _this$props2.active;
4284
4285 if (active && onScrollOut != null && top !== 0 && outsideScrollableContainer) {
4286 onScrollOut();
4287 }
4288 }
4289 }, {
4290 key: "render",
4291 value: function render() {
4292 var _this$state4 = this.state,
4293 left = _this$state4.left,
4294 top = _this$state4.top,
4295 zIndex = _this$state4.zIndex,
4296 width = _this$state4.width;
4297 var _this$props3 = this.props,
4298 render = _this$props3.render,
4299 fixed = _this$props3.fixed,
4300 propClassNames = _this$props3.classNames;
4301 var style = {
4302 top: top == null || isNaN(top) ? undefined : top,
4303 left: left == null || isNaN(left) ? undefined : left,
4304 width: width == null || isNaN(width) ? undefined : width,
4305 zIndex: zIndex == null || isNaN(zIndex) ? undefined : zIndex
4306 };
4307 var className = classNames(styles$b.PositionedOverlay, fixed && styles$b.fixed, propClassNames);
4308 return React__default.createElement("div", {
4309 className: className,
4310 style: style,
4311 ref: this.setOverlay
4312 }, React__default.createElement(EventListener, {
4313 event: "resize",
4314 handler: this.handleMeasurement
4315 }), render(this.overlayDetails()));
4316 }
4317 }]);
4318
4319 return PositionedOverlay;
4320}(React__default.PureComponent);
4321function intersectionWithViewport(rect) {
4322 var viewport = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : windowRect();
4323 var top = Math.max(rect.top, 0);
4324 var left = Math.max(rect.left, 0);
4325 var bottom = Math.min(rect.top + rect.height, viewport.height);
4326 var right = Math.min(rect.left + rect.width, viewport.width);
4327 return new Rect({
4328 top,
4329 left,
4330 height: bottom - top,
4331 width: right - left
4332 });
4333}
4334
4335function getMarginsForNode(node) {
4336 var nodeStyles = window.getComputedStyle(node);
4337 return {
4338 activator: parseFloat(nodeStyles.marginTop || ''),
4339 container: parseFloat(nodeStyles.marginBottom || ''),
4340 horizontal: parseFloat(nodeStyles.marginLeft || '')
4341 };
4342}
4343
4344function getZIndexForLayerFromNode(node) {
4345 var layerNode = closest(node, layer.selector) || document.body;
4346 var zIndex = layerNode === document.body ? 'auto' : parseInt(window.getComputedStyle(layerNode).zIndex || '0', 10);
4347 return zIndex === 'auto' || isNaN(zIndex) ? null : zIndex;
4348}
4349
4350function windowRect() {
4351 return new Rect({
4352 top: window.scrollY,
4353 left: window.scrollX,
4354 height: window.innerHeight,
4355 width: window.innerWidth
4356 });
4357}
4358
4359function isDocument$1(node) {
4360 return node === document;
4361}
4362
4363var CloseSource;
4364
4365(function (CloseSource) {
4366 CloseSource[CloseSource["Click"] = 0] = "Click";
4367 CloseSource[CloseSource["EscapeKeypress"] = 1] = "EscapeKeypress";
4368 CloseSource[CloseSource["FocusOut"] = 2] = "FocusOut";
4369 CloseSource[CloseSource["ScrollOut"] = 3] = "ScrollOut";
4370})(CloseSource || (CloseSource = {}));
4371
4372var TransitionStatus;
4373
4374(function (TransitionStatus) {
4375 TransitionStatus["Entering"] = "entering";
4376 TransitionStatus["Entered"] = "entered";
4377 TransitionStatus["Exiting"] = "exiting";
4378 TransitionStatus["Exited"] = "exited";
4379})(TransitionStatus || (TransitionStatus = {}));
4380
4381var PopoverOverlay =
4382/*#__PURE__*/
4383function (_React$PureComponent) {
4384 _inherits(PopoverOverlay, _React$PureComponent);
4385
4386 function PopoverOverlay() {
4387 var _this;
4388
4389 _classCallCheck(this, PopoverOverlay);
4390
4391 _this = _possibleConstructorReturn(this, _getPrototypeOf(PopoverOverlay).apply(this, arguments));
4392 _this.state = {
4393 transitionStatus: _this.props.active ? TransitionStatus.Entering : TransitionStatus.Exited
4394 };
4395 _this.contentNode = createRef();
4396
4397 _this.renderPopover = function (overlayDetails) {
4398 var measuring = overlayDetails.measuring,
4399 desiredHeight = overlayDetails.desiredHeight,
4400 positioning = overlayDetails.positioning;
4401 var _this$props = _this.props,
4402 id = _this$props.id,
4403 children = _this$props.children,
4404 sectioned = _this$props.sectioned,
4405 fullWidth = _this$props.fullWidth,
4406 fullHeight = _this$props.fullHeight,
4407 fluidContent = _this$props.fluidContent;
4408 var className = classNames(styles$a.Popover, positioning === 'above' && styles$a.positionedAbove, fullWidth && styles$a.fullWidth, measuring && styles$a.measuring);
4409 var contentStyles = measuring ? undefined : {
4410 height: desiredHeight
4411 };
4412 var contentClassNames = classNames(styles$a.Content, fullHeight && styles$a['Content-fullHeight'], fluidContent && styles$a['Content-fluidContent']);
4413 var content = React__default.createElement("div", {
4414 id: id,
4415 tabIndex: -1,
4416 className: contentClassNames,
4417 style: contentStyles,
4418 ref: _this.contentNode
4419 }, renderPopoverContent(children, {
4420 sectioned
4421 }));
4422 return React__default.createElement("div", Object.assign({
4423 className: className
4424 }, overlay.props), React__default.createElement(EventListener, {
4425 event: "click",
4426 handler: _this.handleClick
4427 }), React__default.createElement(EventListener, {
4428 event: "touchstart",
4429 handler: _this.handleClick
4430 }), React__default.createElement(KeypressListener, {
4431 keyCode: Key.Escape,
4432 handler: _this.handleEscape
4433 }), React__default.createElement("div", {
4434 className: styles$a.FocusTracker // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
4435 ,
4436 tabIndex: 0,
4437 onFocus: _this.handleFocusFirstItem
4438 }), React__default.createElement("div", {
4439 className: styles$a.Wrapper
4440 }, content), React__default.createElement("div", {
4441 className: styles$a.FocusTracker // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
4442 ,
4443 tabIndex: 0,
4444 onFocus: _this.handleFocusLastItem
4445 }));
4446 };
4447
4448 _this.handleClick = function (event) {
4449 var target = event.target;
4450
4451 var _assertThisInitialize = _assertThisInitialized(_this),
4452 contentNode = _assertThisInitialize.contentNode,
4453 _assertThisInitialize2 = _assertThisInitialize.props,
4454 activator = _assertThisInitialize2.activator,
4455 onClose = _assertThisInitialize2.onClose;
4456
4457 var isDescendant = contentNode.current != null && nodeContainsDescendant(contentNode.current, target);
4458 var isActivatorDescendant = nodeContainsDescendant(activator, target);
4459
4460 if (isDescendant || isActivatorDescendant || _this.state.transitionStatus !== TransitionStatus.Entered) {
4461 return;
4462 }
4463
4464 onClose(CloseSource.Click);
4465 };
4466
4467 _this.handleScrollOut = function () {
4468 _this.props.onClose(CloseSource.ScrollOut);
4469 };
4470
4471 _this.handleEscape = function () {
4472 _this.props.onClose(CloseSource.EscapeKeypress);
4473 };
4474
4475 _this.handleFocusFirstItem = function () {
4476 _this.props.onClose(CloseSource.FocusOut);
4477 };
4478
4479 _this.handleFocusLastItem = function () {
4480 _this.props.onClose(CloseSource.FocusOut);
4481 };
4482
4483 return _this;
4484 }
4485
4486 _createClass(PopoverOverlay, [{
4487 key: "changeTransitionStatus",
4488 value: function changeTransitionStatus(transitionStatus, cb) {
4489 this.setState({
4490 transitionStatus
4491 }, cb); // Forcing a reflow to enable the animation
4492
4493 this.contentNode.current && this.contentNode.current.getBoundingClientRect();
4494 }
4495 }, {
4496 key: "componentDidMount",
4497 value: function componentDidMount() {
4498 if (this.props.active) {
4499 this.focusContent();
4500 this.changeTransitionStatus(TransitionStatus.Entered);
4501 }
4502 }
4503 }, {
4504 key: "componentDidUpdate",
4505 value: function componentDidUpdate(oldProps) {
4506 var _this2 = this;
4507
4508 if (this.props.active && !oldProps.active) {
4509 this.focusContent();
4510 this.changeTransitionStatus(TransitionStatus.Entering, function () {
4511 _this2.clearTransitionTimeout();
4512
4513 _this2.enteringTimer = window.setTimeout(function () {
4514 _this2.setState({
4515 transitionStatus: TransitionStatus.Entered
4516 });
4517 }, durationBase);
4518 });
4519 }
4520
4521 if (!this.props.active && oldProps.active) {
4522 this.changeTransitionStatus(TransitionStatus.Exiting, function () {
4523 _this2.clearTransitionTimeout();
4524
4525 _this2.exitingTimer = window.setTimeout(function () {
4526 _this2.setState({
4527 transitionStatus: TransitionStatus.Exited
4528 });
4529 }, durationBase);
4530 });
4531 }
4532 }
4533 }, {
4534 key: "componentWillUnmount",
4535 value: function componentWillUnmount() {
4536 this.clearTransitionTimeout();
4537 }
4538 }, {
4539 key: "render",
4540 value: function render() {
4541 var _this$props2 = this.props,
4542 active = _this$props2.active,
4543 activator = _this$props2.activator,
4544 fullWidth = _this$props2.fullWidth,
4545 _this$props2$preferre = _this$props2.preferredPosition,
4546 preferredPosition = _this$props2$preferre === void 0 ? 'below' : _this$props2$preferre,
4547 _this$props2$preferre2 = _this$props2.preferredAlignment,
4548 preferredAlignment = _this$props2$preferre2 === void 0 ? 'center' : _this$props2$preferre2,
4549 fixed = _this$props2.fixed;
4550 var transitionStatus = this.state.transitionStatus;
4551 if (transitionStatus === TransitionStatus.Exited && !active) return null;
4552 var className = classNames(styles$a.PopoverOverlay, transitionStatus === TransitionStatus.Entering && styles$a['PopoverOverlay-entering'], transitionStatus === TransitionStatus.Entered && styles$a['PopoverOverlay-open'], transitionStatus === TransitionStatus.Exiting && styles$a['PopoverOverlay-exiting']);
4553 return React__default.createElement(PositionedOverlay, {
4554 fullWidth: fullWidth,
4555 active: active,
4556 activator: activator,
4557 preferredPosition: preferredPosition,
4558 preferredAlignment: preferredAlignment,
4559 render: this.renderPopover.bind(this),
4560 fixed: fixed,
4561 onScrollOut: this.handleScrollOut,
4562 classNames: className
4563 });
4564 }
4565 }, {
4566 key: "clearTransitionTimeout",
4567 value: function clearTransitionTimeout() {
4568 if (this.enteringTimer) {
4569 window.clearTimeout(this.enteringTimer);
4570 }
4571
4572 if (this.exitingTimer) {
4573 window.clearTimeout(this.exitingTimer);
4574 }
4575 }
4576 }, {
4577 key: "focusContent",
4578 value: function focusContent() {
4579 var _this3 = this;
4580
4581 if (this.props.preventAutofocus) {
4582 return;
4583 }
4584
4585 if (this.contentNode == null) {
4586 return;
4587 }
4588
4589 write(function () {
4590 if (_this3.contentNode.current == null) {
4591 return;
4592 }
4593
4594 _this3.contentNode.current.focus({
4595 preventScroll: process.env.NODE_ENV === 'development'
4596 });
4597 });
4598 }
4599 }]);
4600
4601 return PopoverOverlay;
4602}(React__default.PureComponent);
4603
4604function renderPopoverContent(children, props) {
4605 var childrenArray = React__default.Children.toArray(children);
4606
4607 if (isElementOfType(childrenArray[0], Pane)) {
4608 return childrenArray;
4609 }
4610
4611 return wrapWithComponent(childrenArray, Pane, props);
4612}
4613
4614function setActivatorAttributes(activator, _ref) {
4615 var id = _ref.id,
4616 active = _ref.active,
4617 ariaHaspopup = _ref.ariaHaspopup;
4618 activator.tabIndex = activator.tabIndex || 0;
4619 activator.setAttribute('aria-controls', id);
4620 activator.setAttribute('aria-owns', id);
4621 activator.setAttribute('aria-expanded', String(active));
4622
4623 if (ariaHaspopup != null) {
4624 activator.setAttribute('aria-haspopup', String(ariaHaspopup));
4625 }
4626}
4627
4628// subcomponents so explicitly state the subcomponents in the type definition.
4629// Letting this be implicit works in this project but fails in projects that use
4630// generated *.d.ts files.
4631
4632var Popover = function Popover(_a) {
4633 var _a$activatorWrapper = _a.activatorWrapper,
4634 activatorWrapper = _a$activatorWrapper === void 0 ? 'div' : _a$activatorWrapper,
4635 children = _a.children,
4636 onClose = _a.onClose,
4637 activator = _a.activator,
4638 active = _a.active,
4639 fixed = _a.fixed,
4640 ariaHaspopup = _a.ariaHaspopup,
4641 rest = __rest(_a, ["activatorWrapper", "children", "onClose", "activator", "active", "fixed", "ariaHaspopup"]);
4642
4643 var _useState = useState(),
4644 _useState2 = _slicedToArray(_useState, 2),
4645 activatorNode = _useState2[0],
4646 setActivatorNode = _useState2[1];
4647
4648 var activatorContainer = useRef(null);
4649 var WrapperComponent = activatorWrapper;
4650 var id = useUniqueId('popover');
4651 var setAccessibilityAttributes = useCallback(function () {
4652 if (activatorContainer.current == null) {
4653 return;
4654 }
4655
4656 var firstFocusable = findFirstFocusableNode(activatorContainer.current);
4657 var focusableActivator = firstFocusable || activatorContainer.current;
4658 setActivatorAttributes(focusableActivator, {
4659 id,
4660 active,
4661 ariaHaspopup
4662 });
4663 }, [active, ariaHaspopup, id]);
4664
4665 var handleClose = function handleClose(source) {
4666 onClose(source);
4667
4668 if (activatorContainer.current == null) {
4669 return;
4670 }
4671
4672 if ((source === CloseSource.FocusOut || source === CloseSource.EscapeKeypress) && activatorNode) {
4673 var focusableActivator = findFirstFocusableNode(activatorNode) || findFirstFocusableNode(activatorContainer.current) || activatorContainer.current;
4674
4675 if (!focusNextFocusableNode(focusableActivator, isInPortal)) {
4676 focusableActivator.focus();
4677 }
4678 }
4679 };
4680
4681 useEffect(function () {
4682 if (!activatorNode && activatorContainer.current) {
4683 setActivatorNode(activatorContainer.current.firstElementChild);
4684 } else if (activatorNode && activatorContainer.current && !activatorContainer.current.contains(activatorNode)) {
4685 setActivatorNode(activatorContainer.current.firstElementChild);
4686 }
4687
4688 setAccessibilityAttributes();
4689 }, [activatorNode, setAccessibilityAttributes]);
4690 useEffect(function () {
4691 if (activatorNode && activatorContainer.current) {
4692 setActivatorNode(activatorContainer.current.firstElementChild);
4693 }
4694
4695 setAccessibilityAttributes();
4696 }, [activatorNode, setAccessibilityAttributes]);
4697 var portal = activatorNode ? React__default.createElement(Portal, {
4698 idPrefix: "popover"
4699 }, React__default.createElement(PopoverOverlay, Object.assign({
4700 id: id,
4701 activator: activatorNode,
4702 onClose: handleClose,
4703 active: active,
4704 fixed: fixed
4705 }, rest), children)) : null;
4706 return React__default.createElement(WrapperComponent, {
4707 ref: activatorContainer
4708 }, React__default.Children.only(activator), portal);
4709};
4710
4711function isInPortal(element) {
4712 var parentElement = element.parentElement;
4713
4714 while (parentElement) {
4715 if (parentElement.matches(portal.selector)) return false;
4716 parentElement = parentElement.parentElement;
4717 }
4718
4719 return true;
4720}
4721
4722Popover.Pane = Pane;
4723Popover.Section = Section$1;
4724
4725var styles$c = {
4726 "Stack": "Polaris-Stack",
4727 "Item": "Polaris-Stack__Item",
4728 "noWrap": "Polaris-Stack--noWrap",
4729 "spacingNone": "Polaris-Stack--spacingNone",
4730 "spacingExtraTight": "Polaris-Stack--spacingExtraTight",
4731 "spacingTight": "Polaris-Stack--spacingTight",
4732 "spacingLoose": "Polaris-Stack--spacingLoose",
4733 "spacingExtraLoose": "Polaris-Stack--spacingExtraLoose",
4734 "distributionLeading": "Polaris-Stack--distributionLeading",
4735 "distributionTrailing": "Polaris-Stack--distributionTrailing",
4736 "distributionCenter": "Polaris-Stack--distributionCenter",
4737 "distributionEqualSpacing": "Polaris-Stack--distributionEqualSpacing",
4738 "distributionFill": "Polaris-Stack--distributionFill",
4739 "distributionFillEvenly": "Polaris-Stack--distributionFillEvenly",
4740 "alignmentLeading": "Polaris-Stack--alignmentLeading",
4741 "alignmentTrailing": "Polaris-Stack--alignmentTrailing",
4742 "alignmentCenter": "Polaris-Stack--alignmentCenter",
4743 "alignmentFill": "Polaris-Stack--alignmentFill",
4744 "alignmentBaseline": "Polaris-Stack--alignmentBaseline",
4745 "vertical": "Polaris-Stack--vertical",
4746 "Item-fill": "Polaris-Stack__Item--fill"
4747};
4748
4749function Item$2(_ref) {
4750 var children = _ref.children,
4751 fill = _ref.fill;
4752 var className = classNames(styles$c.Item, fill && styles$c['Item-fill']);
4753 return React__default.createElement("div", {
4754 className: className
4755 }, children);
4756}
4757
4758var Stack =
4759/*#__PURE__*/
4760function (_React$PureComponent) {
4761 _inherits(Stack, _React$PureComponent);
4762
4763 function Stack() {
4764 _classCallCheck(this, Stack);
4765
4766 return _possibleConstructorReturn(this, _getPrototypeOf(Stack).apply(this, arguments));
4767 }
4768
4769 _createClass(Stack, [{
4770 key: "render",
4771 value: function render() {
4772 var _this$props = this.props,
4773 children = _this$props.children,
4774 vertical = _this$props.vertical,
4775 spacing = _this$props.spacing,
4776 distribution = _this$props.distribution,
4777 alignment = _this$props.alignment,
4778 wrap = _this$props.wrap;
4779 var className = classNames(styles$c.Stack, vertical && styles$c.vertical, spacing && styles$c[variationName('spacing', spacing)], distribution && styles$c[variationName('distribution', distribution)], alignment && styles$c[variationName('alignment', alignment)], wrap === false && styles$c.noWrap);
4780 var itemMarkup = elementChildren(children).map(function (child, index) {
4781 var props = {
4782 key: index
4783 };
4784 return wrapWithComponent(child, Item$2, props);
4785 });
4786 return React__default.createElement("div", {
4787 className: className
4788 }, itemMarkup);
4789 }
4790 }]);
4791
4792 return Stack;
4793}(React__default.PureComponent);
4794Stack.Item = Item$2;
4795
4796var styles$d = {
4797 "Heading": "Polaris-Heading"
4798};
4799
4800function Heading(_ref) {
4801 var _ref$element = _ref.element,
4802 Element = _ref$element === void 0 ? 'h2' : _ref$element,
4803 children = _ref.children;
4804 return React__default.createElement(Element, {
4805 className: styles$d.Heading
4806 }, children);
4807}
4808
4809var styles$e = {
4810 "Card": "Polaris-Card",
4811 "subdued": "Polaris-Card--subdued",
4812 "Header": "Polaris-Card__Header",
4813 "Section": "Polaris-Card__Section",
4814 "Section-fullWidth": "Polaris-Card__Section--fullWidth",
4815 "Section-subdued": "Polaris-Card__Section--subdued",
4816 "SectionHeader": "Polaris-Card__SectionHeader",
4817 "Subsection": "Polaris-Card__Subsection",
4818 "Footer": "Polaris-Card__Footer",
4819 "LeftJustified": "Polaris-Card__LeftJustified"
4820};
4821
4822function Header(_ref) {
4823 var children = _ref.children,
4824 title = _ref.title,
4825 actions = _ref.actions;
4826 var actionMarkup = actions ? React__default.createElement(ButtonGroup, null, buttonsFrom(actions, {
4827 plain: true
4828 })) : null;
4829 var titleMarkup = React__default.isValidElement(title) ? title : React__default.createElement(Heading, null, title);
4830 var headingMarkup = actionMarkup || children ? React__default.createElement(Stack, {
4831 alignment: "baseline"
4832 }, React__default.createElement(Stack.Item, {
4833 fill: true
4834 }, titleMarkup), actionMarkup, children) : titleMarkup;
4835 return React__default.createElement("div", {
4836 className: styles$e.Header
4837 }, headingMarkup);
4838}
4839
4840var styles$f = {
4841 "Subheading": "Polaris-Subheading"
4842};
4843
4844function Subheading(_ref) {
4845 var _ref$element = _ref.element,
4846 Element = _ref$element === void 0 ? 'h3' : _ref$element,
4847 children = _ref.children;
4848 var ariaLabel = typeof children === 'string' ? children : undefined;
4849 return React__default.createElement(Element, {
4850 "aria-label": ariaLabel,
4851 className: styles$f.Subheading
4852 }, children);
4853}
4854
4855function Section$2(_ref) {
4856 var children = _ref.children,
4857 title = _ref.title,
4858 subdued = _ref.subdued,
4859 fullWidth = _ref.fullWidth,
4860 actions = _ref.actions;
4861 var className = classNames(styles$e.Section, subdued && styles$e['Section-subdued'], fullWidth && styles$e['Section-fullWidth']);
4862 var actionMarkup = actions ? React__default.createElement(ButtonGroup, null, buttonsFrom(actions, {
4863 plain: true
4864 })) : null;
4865 var titleMarkup = typeof title === 'string' ? React__default.createElement(Subheading, null, title) : title;
4866 var titleAreaMarkup = titleMarkup || actionMarkup ? React__default.createElement("div", {
4867 className: styles$e.SectionHeader
4868 }, actionMarkup ? React__default.createElement(Stack, {
4869 alignment: "baseline"
4870 }, React__default.createElement(Stack.Item, {
4871 fill: true
4872 }, titleMarkup), actionMarkup) : titleMarkup) : null;
4873 return React__default.createElement("div", {
4874 className: className
4875 }, titleAreaMarkup, children);
4876}
4877
4878function Subsection(_ref) {
4879 var children = _ref.children;
4880 return React__default.createElement("div", {
4881 className: styles$e.Subsection
4882 }, children);
4883}
4884
4885// subcomponents so explicitly state the subcomponents in the type definition.
4886// Letting this be implicit works in this project but fails in projects that use
4887// generated *.d.ts files.
4888
4889var Card = function Card(_ref) {
4890 var children = _ref.children,
4891 title = _ref.title,
4892 subdued = _ref.subdued,
4893 sectioned = _ref.sectioned,
4894 actions = _ref.actions,
4895 primaryFooterAction = _ref.primaryFooterAction,
4896 secondaryFooterActions = _ref.secondaryFooterActions,
4897 secondaryFooterActionsDisclosureText = _ref.secondaryFooterActionsDisclosureText,
4898 _ref$footerActionAlig = _ref.footerActionAlignment,
4899 footerActionAlignment = _ref$footerActionAlig === void 0 ? 'right' : _ref$footerActionAlig;
4900 var i18n = useI18n();
4901
4902 var _useToggle = useToggle(false),
4903 _useToggle2 = _slicedToArray(_useToggle, 2),
4904 secondaryActionsPopoverOpen = _useToggle2[0],
4905 toggleSecondaryActionsPopoverOpen = _useToggle2[1];
4906
4907 var className = classNames(styles$e.Card, subdued && styles$e.subdued);
4908 var headerMarkup = title || actions ? React__default.createElement(Header, {
4909 actions: actions,
4910 title: title
4911 }) : null;
4912 var content = sectioned ? React__default.createElement(Section$2, null, children) : children;
4913 var primaryFooterActionMarkup = primaryFooterAction ? buttonFrom(primaryFooterAction, {
4914 primary: true
4915 }) : null;
4916 var secondaryFooterActionsMarkup = null;
4917
4918 if (secondaryFooterActions && secondaryFooterActions.length) {
4919 if (secondaryFooterActions.length === 1) {
4920 secondaryFooterActionsMarkup = buttonFrom(secondaryFooterActions[0]);
4921 } else {
4922 secondaryFooterActionsMarkup = React__default.createElement(React__default.Fragment, null, React__default.createElement(Popover, {
4923 active: secondaryActionsPopoverOpen,
4924 activator: React__default.createElement(Button, {
4925 disclosure: true,
4926 onClick: toggleSecondaryActionsPopoverOpen
4927 }, secondaryFooterActionsDisclosureText || i18n.translate('Polaris.Common.more')),
4928 onClose: toggleSecondaryActionsPopoverOpen
4929 }, React__default.createElement(ActionList, {
4930 items: secondaryFooterActions
4931 })));
4932 }
4933 }
4934
4935 var footerMarkup = primaryFooterActionMarkup || secondaryFooterActionsMarkup ? React__default.createElement("div", {
4936 className: classNames(styles$e.Footer, footerActionAlignment === 'left' && styles$e.LeftJustified)
4937 }, footerActionAlignment === 'right' ? React__default.createElement(ButtonGroup, null, secondaryFooterActionsMarkup, primaryFooterActionMarkup) : React__default.createElement(ButtonGroup, null, primaryFooterActionMarkup, secondaryFooterActionsMarkup)) : null;
4938 return React__default.createElement(WithinContentContext.Provider, {
4939 value: true
4940 }, React__default.createElement("div", {
4941 className: className
4942 }, headerMarkup, content, footerMarkup));
4943};
4944Card.Header = Header;
4945Card.Section = Section$2;
4946Card.Subsection = Subsection;
4947
4948var styles$g = {
4949 "SettingAction": "Polaris-SettingAction",
4950 "Setting": "Polaris-SettingAction__Setting",
4951 "Action": "Polaris-SettingAction__Action"
4952};
4953
4954function SettingAction(_ref) {
4955 var action = _ref.action,
4956 children = _ref.children;
4957 return React__default.createElement("div", {
4958 className: styles$g.SettingAction
4959 }, React__default.createElement("div", {
4960 className: styles$g.Setting
4961 }, children), React__default.createElement("div", {
4962 className: styles$g.Action
4963 }, action));
4964}
4965
4966var styles$h = {
4967 "TermsOfService": "Polaris-AccountConnection__TermsOfService",
4968 "Content": "Polaris-AccountConnection__Content"
4969};
4970
4971function AccountConnection(_ref) {
4972 var _ref$connected = _ref.connected,
4973 connected = _ref$connected === void 0 ? false : _ref$connected,
4974 action = _ref.action,
4975 avatarUrl = _ref.avatarUrl,
4976 _ref$accountName = _ref.accountName,
4977 accountName = _ref$accountName === void 0 ? '' : _ref$accountName,
4978 title = _ref.title,
4979 details = _ref.details,
4980 termsOfService = _ref.termsOfService;
4981 var initials = accountName ? accountName.split(/\s+/).map(function (name) {
4982 return name[0];
4983 }).join('') : undefined;
4984 var avatarMarkup = connected ? React__default.createElement(Avatar, {
4985 accessibilityLabel: "",
4986 name: accountName,
4987 initials: initials,
4988 source: avatarUrl
4989 }) : null;
4990 var titleMarkup = null;
4991
4992 if (title) {
4993 titleMarkup = React__default.createElement("div", null, title);
4994 } else if (accountName) {
4995 titleMarkup = React__default.createElement("div", null, accountName);
4996 }
4997
4998 var detailsMarkup = details ? React__default.createElement("div", null, React__default.createElement(TextStyle, {
4999 variation: "subdued"
5000 }, details)) : null;
5001 var termsOfServiceMarkup = termsOfService ? React__default.createElement("div", {
5002 className: styles$h.TermsOfService
5003 }, termsOfService) : null;
5004 var actionElement = action ? buttonFrom(action, {
5005 primary: !connected
5006 }) : null;
5007 return React__default.createElement(Card, {
5008 sectioned: true
5009 }, React__default.createElement(SettingAction, {
5010 action: actionElement
5011 }, React__default.createElement(Stack, null, avatarMarkup, React__default.createElement(Stack.Item, {
5012 fill: true
5013 }, React__default.createElement("div", {
5014 className: styles$h.Content
5015 }, titleMarkup, detailsMarkup)))), termsOfServiceMarkup);
5016}
5017
5018var styles$i = {
5019 "MenuAction": "Polaris-ActionMenu-MenuAction",
5020 "IconWrapper": "Polaris-ActionMenu-MenuAction__IconWrapper",
5021 "disabled": "Polaris-ActionMenu-MenuAction--disabled",
5022 "ContentWrapper": "Polaris-ActionMenu-MenuAction__ContentWrapper"
5023};
5024
5025function MenuAction(_ref) {
5026 var content = _ref.content,
5027 accessibilityLabel = _ref.accessibilityLabel,
5028 url = _ref.url,
5029 external = _ref.external,
5030 icon = _ref.icon,
5031 disclosure = _ref.disclosure,
5032 disabled = _ref.disabled,
5033 onAction = _ref.onAction;
5034 var iconMarkup = icon && React__default.createElement("span", {
5035 className: styles$i.IconWrapper
5036 }, React__default.createElement(Icon, {
5037 source: icon
5038 }));
5039 var disclosureIconMarkup = disclosure && React__default.createElement("span", {
5040 className: styles$i.IconWrapper
5041 }, React__default.createElement(Icon, {
5042 source: CaretDownMinor
5043 }));
5044 var contentMarkup = iconMarkup || disclosureIconMarkup ? React__default.createElement("span", {
5045 className: styles$i.ContentWrapper
5046 }, iconMarkup, React__default.createElement("span", {
5047 className: styles$i.Content
5048 }, content), disclosureIconMarkup) : content;
5049 var menuActionClassNames = classNames(styles$i.MenuAction, disabled && styles$i.disabled);
5050
5051 if (url) {
5052 return React__default.createElement(UnstyledLink, {
5053 className: menuActionClassNames,
5054 url: url,
5055 external: external,
5056 "aria-label": accessibilityLabel,
5057 onMouseUp: handleMouseUpByBlurring
5058 }, contentMarkup);
5059 }
5060
5061 return React__default.createElement("button", {
5062 type: "button",
5063 className: menuActionClassNames,
5064 disabled: disabled,
5065 "aria-label": accessibilityLabel,
5066 onClick: onAction,
5067 onMouseUp: handleMouseUpByBlurring
5068 }, contentMarkup);
5069}
5070
5071var styles$j = {
5072 "Details": "Polaris-ActionMenu-MenuGroup__Details"
5073};
5074
5075var MenuGroup =
5076/*#__PURE__*/
5077function (_React$Component) {
5078 _inherits(MenuGroup, _React$Component);
5079
5080 function MenuGroup() {
5081 var _this;
5082
5083 _classCallCheck(this, MenuGroup);
5084
5085 _this = _possibleConstructorReturn(this, _getPrototypeOf(MenuGroup).apply(this, arguments));
5086
5087 _this.handleClose = function () {
5088 var _this$props = _this.props,
5089 title = _this$props.title,
5090 onClose = _this$props.onClose;
5091 onClose(title);
5092 };
5093
5094 _this.handleOpen = function () {
5095 var _this$props2 = _this.props,
5096 title = _this$props2.title,
5097 onOpen = _this$props2.onOpen;
5098 onOpen(title);
5099 };
5100
5101 return _this;
5102 }
5103
5104 _createClass(MenuGroup, [{
5105 key: "render",
5106 value: function render() {
5107 var _this$props3 = this.props,
5108 accessibilityLabel = _this$props3.accessibilityLabel,
5109 active = _this$props3.active,
5110 actions = _this$props3.actions,
5111 details = _this$props3.details,
5112 title = _this$props3.title,
5113 icon = _this$props3.icon;
5114
5115 if (!actions.length) {
5116 return null;
5117 }
5118
5119 var popoverActivator = React__default.createElement(MenuAction, {
5120 disclosure: true,
5121 content: title,
5122 icon: icon,
5123 accessibilityLabel: accessibilityLabel,
5124 onAction: this.handleOpen
5125 });
5126 return React__default.createElement(Popover, {
5127 active: Boolean(active),
5128 activator: popoverActivator,
5129 preferredAlignment: "left",
5130 onClose: this.handleClose
5131 }, React__default.createElement(ActionList, {
5132 items: actions,
5133 onActionAnyItem: this.handleClose
5134 }), details && React__default.createElement("div", {
5135 className: styles$j.Details
5136 }, details));
5137 }
5138 }]);
5139
5140 return MenuGroup;
5141}(React__default.Component);
5142
5143var styles$k = {
5144 "RollupActivator": "Polaris-ActionMenu-RollupActions__RollupActivator"
5145};
5146
5147function RollupActions(_ref) {
5148 var _ref$items = _ref.items,
5149 items = _ref$items === void 0 ? [] : _ref$items,
5150 _ref$sections = _ref.sections,
5151 sections = _ref$sections === void 0 ? [] : _ref$sections;
5152 var i18n = useI18n();
5153
5154 var _useToggle = useToggle(false),
5155 _useToggle2 = _slicedToArray(_useToggle, 2),
5156 rollupOpen = _useToggle2[0],
5157 toggleRollupOpen = _useToggle2[1];
5158
5159 if (items.length === 0 && sections.length === 0) {
5160 return null;
5161 }
5162
5163 var activatorMarkup = React__default.createElement("div", {
5164 className: styles$k.RollupActivator
5165 }, React__default.createElement(Button, {
5166 plain: true,
5167 icon: HorizontalDotsMinor,
5168 accessibilityLabel: i18n.translate('Polaris.ActionMenu.RollupActions.rollupButton'),
5169 onClick: toggleRollupOpen
5170 }));
5171 return React__default.createElement(Popover, {
5172 active: rollupOpen,
5173 activator: activatorMarkup,
5174 preferredAlignment: "right",
5175 onClose: toggleRollupOpen
5176 }, React__default.createElement(ActionList, {
5177 items: items,
5178 sections: sections,
5179 onActionAnyItem: toggleRollupOpen
5180 }));
5181}
5182
5183var styles$l = {
5184 "ActionMenu": "Polaris-ActionMenu",
5185 "rollup": "Polaris-ActionMenu--rollup",
5186 "ActionsLayout": "Polaris-ActionMenu__ActionsLayout"
5187};
5188
5189var ActionMenu =
5190/*#__PURE__*/
5191function (_React$PureComponent) {
5192 _inherits(ActionMenu, _React$PureComponent);
5193
5194 function ActionMenu() {
5195 var _this;
5196
5197 _classCallCheck(this, ActionMenu);
5198
5199 _this = _possibleConstructorReturn(this, _getPrototypeOf(ActionMenu).apply(this, arguments));
5200 _this.state = {
5201 activeMenuGroup: undefined
5202 };
5203
5204 _this.renderActions = function () {
5205 var _this$props = _this.props,
5206 _this$props$actions = _this$props.actions,
5207 actions = _this$props$actions === void 0 ? [] : _this$props$actions,
5208 _this$props$groups = _this$props.groups,
5209 groups = _this$props$groups === void 0 ? [] : _this$props$groups;
5210 var activeMenuGroup = _this.state.activeMenuGroup;
5211 var actionsMarkup = actions.length > 0 ? actions.map(function (_a, index) {
5212 var content = _a.content,
5213 action = __rest(_a, ["content"]);
5214
5215 return React__default.createElement(MenuAction, Object.assign({
5216 key: "MenuAction-".concat(content || index),
5217 content: content
5218 }, action));
5219 }) : null;
5220 var groupsMarkup = hasGroupsWithActions(groups) ? groups.map(function (_a, index) {
5221 var title = _a.title,
5222 rest = __rest(_a, ["title"]);
5223
5224 return React__default.createElement(MenuGroup, Object.assign({
5225 key: "MenuGroup-".concat(title || index),
5226 title: title,
5227 active: title === activeMenuGroup
5228 }, rest, {
5229 onOpen: _this.handleMenuGroupToggle,
5230 onClose: _this.handleMenuGroupClose
5231 }));
5232 }) : null;
5233 return actionsMarkup || groupsMarkup ? React__default.createElement("div", {
5234 className: styles$l.ActionsLayout
5235 }, actionsMarkup, groupsMarkup) : null;
5236 };
5237
5238 _this.handleMenuGroupToggle = function (group) {
5239 _this.setState(function (_ref) {
5240 var activeMenuGroup = _ref.activeMenuGroup;
5241 return {
5242 activeMenuGroup: activeMenuGroup ? undefined : group
5243 };
5244 });
5245 };
5246
5247 _this.handleMenuGroupClose = function () {
5248 _this.setState({
5249 activeMenuGroup: undefined
5250 });
5251 };
5252
5253 return _this;
5254 }
5255
5256 _createClass(ActionMenu, [{
5257 key: "render",
5258 value: function render() {
5259 var _this$props2 = this.props,
5260 _this$props2$actions = _this$props2.actions,
5261 actions = _this$props2$actions === void 0 ? [] : _this$props2$actions,
5262 _this$props2$groups = _this$props2.groups,
5263 groups = _this$props2$groups === void 0 ? [] : _this$props2$groups,
5264 rollup = _this$props2.rollup;
5265
5266 if (actions.length === 0 && groups.length === 0) {
5267 return null;
5268 }
5269
5270 var actionMenuClassNames = classNames(styles$l.ActionMenu, rollup && styles$l.rollup);
5271 var rollupSections = groups.map(function (group) {
5272 return convertGroupToSection(group);
5273 });
5274 return React__default.createElement("div", {
5275 className: actionMenuClassNames
5276 }, rollup ? React__default.createElement(RollupActions, {
5277 items: actions,
5278 sections: rollupSections
5279 }) : this.renderActions());
5280 }
5281 }]);
5282
5283 return ActionMenu;
5284}(React__default.PureComponent);
5285function hasGroupsWithActions() {
5286 var groups = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
5287 return groups.length === 0 ? false : groups.some(function (group) {
5288 return group.actions.length > 0;
5289 });
5290}
5291function convertGroupToSection(_ref2) {
5292 var title = _ref2.title,
5293 actions = _ref2.actions;
5294 return {
5295 title,
5296 items: actions
5297 };
5298}
5299
5300function ThemeProvider(_ref) {
5301 var themeConfig = _ref.theme,
5302 children = _ref.children;
5303
5304 var _useFeatures = useFeatures(),
5305 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
5306 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
5307
5308 var customProperties = useMemo(function () {
5309 return buildCustomProperties(themeConfig, unstableGlobalTheming);
5310 }, [unstableGlobalTheming, themeConfig]);
5311 var theme = useMemo(function () {
5312 return buildThemeContext(themeConfig, unstableGlobalTheming ? customProperties : undefined);
5313 }, [customProperties, themeConfig, unstableGlobalTheming]); // We want these values to be `null` instead of `undefined` when not set.
5314 // Otherwise, setting a style property to `undefined` does not remove it from the DOM.
5315
5316 var backgroundColor = customProperties['--p-surface-background'] || null;
5317 var color = customProperties['--p-text-on-surface'] || null;
5318 useEffect(function () {
5319 document.body.style.backgroundColor = backgroundColor;
5320 document.body.style.color = color;
5321 }, [backgroundColor, color]);
5322 return React__default.createElement(ThemeContext.Provider, {
5323 value: theme
5324 }, React__default.createElement("div", {
5325 style: customProperties
5326 }, children));
5327}
5328
5329var MediaQueryContext = React__default.createContext(undefined);
5330
5331function useMediaQuery() {
5332 var mediaQuery = useContext(MediaQueryContext);
5333
5334 if (!mediaQuery) {
5335 throw new Error('No mediaQuery was provided. Your application must be wrapped in an <AppProvider> component. See https://polaris.shopify.com/components/structure/app-provider for implementation instructions.');
5336 }
5337
5338 return mediaQuery;
5339}
5340
5341var MediaQueryProvider = function MediaQueryProvider(_ref) {
5342 var children = _ref.children;
5343
5344 var _useState = useState(navigationBarCollapsed().matches),
5345 _useState2 = _slicedToArray(_useState, 2),
5346 isNavigationCollapsed = _useState2[0],
5347 setIsNavigationCollapsed = _useState2[1];
5348
5349 var handleResize = useCallback(debounce(function () {
5350 if (isNavigationCollapsed !== navigationBarCollapsed().matches) {
5351 setIsNavigationCollapsed(!isNavigationCollapsed);
5352 }
5353 }, 40, {
5354 trailing: true,
5355 leading: true,
5356 maxWait: 40
5357 }), [isNavigationCollapsed]);
5358 useEffect(function () {
5359 setIsNavigationCollapsed(navigationBarCollapsed().matches);
5360 }, []);
5361 return React__default.createElement(MediaQueryContext.Provider, {
5362 value: {
5363 isNavigationCollapsed
5364 }
5365 }, React__default.createElement(EventListener, {
5366 event: "resize",
5367 handler: handleResize
5368 }), children);
5369};
5370
5371var ScrollLockManagerContext = React__default.createContext(undefined);
5372
5373function useScrollLockManager() {
5374 var scrollLockManager = useContext(ScrollLockManagerContext);
5375
5376 if (!scrollLockManager) {
5377 throw new MissingAppProviderError('No ScrollLockManager was provided.');
5378 }
5379
5380 return scrollLockManager;
5381}
5382
5383var SCROLL_LOCKING_ATTRIBUTE = 'data-lock-scrolling';
5384var SCROLL_LOCKING_WRAPPER_ATTRIBUTE = 'data-lock-scrolling-wrapper';
5385var scrollPosition = 0;
5386var ScrollLockManager =
5387/*#__PURE__*/
5388function () {
5389 function ScrollLockManager() {
5390 _classCallCheck(this, ScrollLockManager);
5391
5392 this.scrollLocks = 0;
5393 this.locked = false;
5394 }
5395
5396 _createClass(ScrollLockManager, [{
5397 key: "registerScrollLock",
5398 value: function registerScrollLock() {
5399 this.scrollLocks += 1;
5400 this.handleScrollLocking();
5401 }
5402 }, {
5403 key: "unregisterScrollLock",
5404 value: function unregisterScrollLock() {
5405 this.scrollLocks -= 1;
5406 this.handleScrollLocking();
5407 }
5408 }, {
5409 key: "handleScrollLocking",
5410 value: function handleScrollLocking() {
5411 if (isServer) return;
5412 var scrollLocks = this.scrollLocks;
5413 var _document = document,
5414 body = _document.body;
5415 var wrapper = body.firstElementChild;
5416
5417 if (scrollLocks === 0) {
5418 body.removeAttribute(SCROLL_LOCKING_ATTRIBUTE);
5419
5420 if (wrapper) {
5421 wrapper.removeAttribute(SCROLL_LOCKING_WRAPPER_ATTRIBUTE);
5422 }
5423
5424 window.scroll(0, scrollPosition);
5425 this.locked = false;
5426 } else if (scrollLocks > 0 && !this.locked) {
5427 scrollPosition = window.pageYOffset;
5428 body.setAttribute(SCROLL_LOCKING_ATTRIBUTE, '');
5429
5430 if (wrapper) {
5431 wrapper.setAttribute(SCROLL_LOCKING_WRAPPER_ATTRIBUTE, '');
5432 wrapper.scrollTop = scrollPosition;
5433 }
5434
5435 this.locked = true;
5436 }
5437 }
5438 }, {
5439 key: "resetScrollPosition",
5440 value: function resetScrollPosition() {
5441 scrollPosition = 0;
5442 }
5443 }]);
5444
5445 return ScrollLockManager;
5446}();
5447
5448var AppBridgeContext = React__default.createContext(undefined);
5449
5450function useAppBridge() {
5451 return useContext(AppBridgeContext);
5452}
5453
5454function createAppBridge(_ref) {
5455 var apiKey = _ref.apiKey,
5456 shopOrigin = _ref.shopOrigin,
5457 forceRedirect = _ref.forceRedirect;
5458 var appBridge = apiKey ? createApp({
5459 apiKey,
5460 shopOrigin: shopOrigin || getShopOrigin(),
5461 forceRedirect
5462 }) : undefined;
5463
5464 if (appBridge !== undefined) {
5465 // eslint-disable-next-line no-console
5466 console.warn('Deprecation: Using `apiKey` and `shopOrigin` on `AppProvider` to initialize the Shopify App Bridge is deprecated. Support for this will be removed in v5.0. Use `Provider` from `@shopify/app-bridge-react` instead: https://help.shopify.com/en/api/embedded-apps/app-bridge/react-components/provider');
5467 }
5468
5469 if (appBridge && appBridge.hooks) {
5470 appBridge.hooks.set(LifecycleHook.DispatchAction, setClientInterfaceHook);
5471 }
5472
5473 return appBridge;
5474}
5475var setClientInterfaceHook = function setClientInterfaceHook(next) {
5476 return function (action) {
5477 action.clientInterface = {
5478 name: '@shopify/polaris',
5479 version: polarisVersion
5480 };
5481 return next(action);
5482 };
5483};
5484
5485var AppProvider =
5486/*#__PURE__*/
5487function (_React$Component) {
5488 _inherits(AppProvider, _React$Component);
5489
5490 function AppProvider(props) {
5491 var _this;
5492
5493 _classCallCheck(this, AppProvider);
5494
5495 _this = _possibleConstructorReturn(this, _getPrototypeOf(AppProvider).call(this, props));
5496 _this.stickyManager = new StickyManager();
5497 _this.scrollLockManager = new ScrollLockManager();
5498 _this.uniqueIdFactory = new UniqueIdFactory(globalIdGeneratorFactory);
5499 var _this$props = _this.props,
5500 i18n = _this$props.i18n,
5501 apiKey = _this$props.apiKey,
5502 shopOrigin = _this$props.shopOrigin,
5503 forceRedirect = _this$props.forceRedirect,
5504 linkComponent = _this$props.linkComponent; // eslint-disable-next-line react/state-in-constructor
5505
5506 _this.state = {
5507 link: linkComponent,
5508 intl: new I18n(i18n),
5509 appBridge: createAppBridge({
5510 shopOrigin,
5511 apiKey,
5512 forceRedirect
5513 })
5514 };
5515 return _this;
5516 }
5517
5518 _createClass(AppProvider, [{
5519 key: "componentDidMount",
5520 value: function componentDidMount() {
5521 if (document != null) {
5522 this.stickyManager.setContainer(document);
5523 }
5524 }
5525 }, {
5526 key: "componentDidUpdate",
5527 value: function componentDidUpdate(_ref) {
5528 var prevI18n = _ref.i18n,
5529 prevLinkComponent = _ref.linkComponent,
5530 prevApiKey = _ref.apiKey,
5531 prevShopOrigin = _ref.shopOrigin,
5532 prevForceRedirect = _ref.forceRedirect;
5533 var _this$props2 = this.props,
5534 i18n = _this$props2.i18n,
5535 linkComponent = _this$props2.linkComponent,
5536 apiKey = _this$props2.apiKey,
5537 shopOrigin = _this$props2.shopOrigin,
5538 forceRedirect = _this$props2.forceRedirect;
5539
5540 if (i18n === prevI18n && linkComponent === prevLinkComponent && apiKey === prevApiKey && shopOrigin === prevShopOrigin && forceRedirect === prevForceRedirect) {
5541 return;
5542 } // eslint-disable-next-line react/no-did-update-set-state
5543
5544
5545 this.setState({
5546 link: linkComponent,
5547 intl: new I18n(i18n),
5548 appBridge: createAppBridge({
5549 shopOrigin,
5550 apiKey,
5551 forceRedirect
5552 })
5553 });
5554 }
5555 }, {
5556 key: "render",
5557 value: function render() {
5558 var _this$props3 = this.props,
5559 _this$props3$theme = _this$props3.theme,
5560 theme = _this$props3$theme === void 0 ? {} : _this$props3$theme,
5561 _this$props3$features = _this$props3.features,
5562 features = _this$props3$features === void 0 ? {} : _this$props3$features,
5563 UNSTABLE_telemetry = _this$props3.UNSTABLE_telemetry,
5564 children = _this$props3.children;
5565 var _this$state = this.state,
5566 intl = _this$state.intl,
5567 appBridge = _this$state.appBridge,
5568 link = _this$state.link;
5569 return React__default.createElement(FeaturesContext.Provider, {
5570 value: features
5571 }, React__default.createElement(I18nContext.Provider, {
5572 value: intl
5573 }, React__default.createElement(ScrollLockManagerContext.Provider, {
5574 value: this.scrollLockManager
5575 }, React__default.createElement(StickyManagerContext.Provider, {
5576 value: this.stickyManager
5577 }, React__default.createElement(UniqueIdFactoryContext.Provider, {
5578 value: this.uniqueIdFactory
5579 }, React__default.createElement(AppBridgeContext.Provider, {
5580 value: appBridge
5581 }, React__default.createElement(LinkContext.Provider, {
5582 value: link
5583 }, React__default.createElement(ThemeProvider, {
5584 theme: theme
5585 }, React__default.createElement(TelemetryContext.Provider, {
5586 value: UNSTABLE_telemetry
5587 }, React__default.createElement(MediaQueryProvider, null, children))))))))));
5588 }
5589 }]);
5590
5591 return AppProvider;
5592}(React__default.Component);
5593
5594function arraysAreEqual(firstArray, secondArray, comparator) {
5595 if (firstArray.length !== secondArray.length) {
5596 return false;
5597 }
5598
5599 return firstArray.every(function (firstItem, index) {
5600 var secondItem = secondArray[index];
5601
5602 if (comparator != null) {
5603 return comparator(firstItem, secondItem);
5604 }
5605
5606 return firstItem === secondItem;
5607 });
5608}
5609
5610/**
5611 * Allows for custom or deep comparison of a dependency list. Useful to keep a consistent dependency
5612 * list across reference changes.
5613 * @param dependencies A dependency array similar to React.useEffect/React.useCallback/React.useMemo
5614 * @param comparator An optional function to compare dependencies that'll default to a deep comparison
5615 * @returns A dependency list
5616 * @see {@link https://github.com/Shopify/polaris-react/blob/master/src/utilities/use-deep-effect.tsx}
5617 * @see {@link https://github.com/Shopify/polaris-react/blob/master/src/utilities/use-deep-callback.tsx}
5618 * @example
5619 * function useDeepEffectExample(callback, dependencies, customCompare) {
5620 * useEffect(callback, useDeepCompareRef(dependencies, customCompare));
5621 * }
5622 */
5623
5624function useDeepCompareRef(dependencies) {
5625 var comparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : isEqual;
5626 var dependencyList = useRef(dependencies);
5627
5628 if (!comparator(dependencyList.current, dependencies)) {
5629 dependencyList.current = dependencies;
5630 }
5631
5632 return dependencyList.current;
5633}
5634
5635/**
5636 * A replacement for React.useEffect that'll allow for custom and deep
5637 * compares of the dependency list.
5638 * @see {@link https://reactjs.org/docs/hooks-reference.html#useeffect}
5639 * @param callback Accepts a callback that's forwarded to React.useEffect
5640 * @param dependencies A dependency array similar to React.useEffect however it utilizes a deep compare
5641 * @param customCompare Opportunity to provide a custom compare function
5642 * @example
5643 * function ComponentExample() {
5644 * const [, forceUpdate] = useState();
5645 * const obj = {a: 1};
5646 *
5647 * useDeepEffect(() => {
5648 * console.log('useDeepEffect invocation');
5649 * forceUpdate(obj);
5650 * }, [obj]);
5651 *
5652 * return null;
5653 * }
5654 */
5655
5656function useDeepEffect(callback, dependencies, customCompare) {
5657 useEffect(callback, useDeepCompareRef(dependencies, customCompare));
5658}
5659
5660var styles$m = {
5661 "Checkbox": "Polaris-OptionList-Checkbox",
5662 "Input": "Polaris-OptionList-Checkbox__Input",
5663 "Backdrop": "Polaris-OptionList-Checkbox__Backdrop",
5664 "Icon": "Polaris-OptionList-Checkbox__Icon",
5665 "active": "Polaris-OptionList-Checkbox--active"
5666};
5667
5668function Checkbox(_ref) {
5669 var idProp = _ref.id,
5670 _ref$checked = _ref.checked,
5671 checked = _ref$checked === void 0 ? false : _ref$checked,
5672 disabled = _ref.disabled,
5673 active = _ref.active,
5674 onChange = _ref.onChange,
5675 name = _ref.name,
5676 value = _ref.value,
5677 role = _ref.role;
5678 var id = useUniqueId('Checkbox', idProp);
5679 var className = classNames(styles$m.Checkbox, active && styles$m.active);
5680 return React__default.createElement("div", {
5681 className: className
5682 }, React__default.createElement("input", {
5683 id: id,
5684 name: name,
5685 value: value,
5686 type: "checkbox",
5687 checked: checked,
5688 disabled: disabled,
5689 className: styles$m.Input,
5690 "aria-checked": checked,
5691 onChange: onChange,
5692 role: role
5693 }), React__default.createElement("div", {
5694 className: styles$m.Backdrop
5695 }), React__default.createElement("div", {
5696 className: styles$m.Icon
5697 }, React__default.createElement(Icon, {
5698 source: TickSmallMinor
5699 })));
5700}
5701
5702var styles$n = {
5703 "Option": "Polaris-OptionList-Option",
5704 "SingleSelectOption": "Polaris-OptionList-Option__SingleSelectOption",
5705 "disabled": "Polaris-OptionList-Option--disabled",
5706 "Media": "Polaris-OptionList-Option__Media",
5707 "Label": "Polaris-OptionList-Option__Label",
5708 "Checkbox": "Polaris-OptionList-Option__Checkbox",
5709 "focused": "Polaris-OptionList-Option--focused",
5710 "select": "Polaris-OptionList-Option--select",
5711 "active": "Polaris-OptionList-Option--active"
5712};
5713
5714var Option =
5715/*#__PURE__*/
5716function (_React$Component) {
5717 _inherits(Option, _React$Component);
5718
5719 function Option() {
5720 var _this;
5721
5722 _classCallCheck(this, Option);
5723
5724 _this = _possibleConstructorReturn(this, _getPrototypeOf(Option).apply(this, arguments));
5725 _this.state = {
5726 focused: false
5727 };
5728
5729 _this.handleClick = function () {
5730 var _this$props = _this.props,
5731 onClick = _this$props.onClick,
5732 section = _this$props.section,
5733 index = _this$props.index,
5734 disabled = _this$props.disabled;
5735
5736 if (disabled) {
5737 return;
5738 }
5739
5740 onClick(section, index);
5741 };
5742
5743 _this.toggleFocus = function () {
5744 _this.setState(function (prevState) {
5745 return {
5746 focused: !prevState.focused
5747 };
5748 });
5749 };
5750
5751 return _this;
5752 }
5753
5754 _createClass(Option, [{
5755 key: "render",
5756 value: function render() {
5757 var _this$props2 = this.props,
5758 label = _this$props2.label,
5759 value = _this$props2.value,
5760 id = _this$props2.id,
5761 select = _this$props2.select,
5762 active = _this$props2.active,
5763 allowMultiple = _this$props2.allowMultiple,
5764 disabled = _this$props2.disabled,
5765 role = _this$props2.role,
5766 media = _this$props2.media;
5767 var focused = this.state.focused;
5768 var mediaMarkup = media ? React__default.createElement("div", {
5769 className: styles$n.Media
5770 }, media) : null;
5771 var singleSelectClassName = classNames(styles$n.SingleSelectOption, focused && styles$n.focused, disabled && styles$n.disabled, select && styles$n.select, active && styles$n.active);
5772 var multiSelectClassName = classNames(styles$n.Label, active && styles$n.active);
5773 var checkBoxRole = role === 'option' ? 'presentation' : undefined;
5774 var optionMarkup = allowMultiple ? React__default.createElement("label", {
5775 htmlFor: id,
5776 className: multiSelectClassName
5777 }, React__default.createElement("div", {
5778 className: styles$n.Checkbox
5779 }, React__default.createElement(Checkbox, {
5780 id: id,
5781 value: value,
5782 checked: select,
5783 active: active,
5784 disabled: disabled,
5785 onChange: this.handleClick,
5786 role: checkBoxRole
5787 })), mediaMarkup, label) : React__default.createElement("button", {
5788 id: id,
5789 type: "button",
5790 className: singleSelectClassName,
5791 onClick: this.handleClick,
5792 disabled: disabled,
5793 onFocus: this.toggleFocus,
5794 onBlur: this.toggleFocus
5795 }, mediaMarkup, label);
5796 var scrollMarkup = active ? React__default.createElement(Scrollable.ScrollTo, null) : null;
5797 return React__default.createElement("li", {
5798 key: id,
5799 className: styles$n.Option,
5800 tabIndex: -1,
5801 "aria-selected": active,
5802 role: role
5803 }, scrollMarkup, optionMarkup);
5804 }
5805 }]);
5806
5807 return Option;
5808}(React__default.Component);
5809
5810var styles$o = {
5811 "OptionList": "Polaris-OptionList",
5812 "Options": "Polaris-OptionList__Options",
5813 "Title": "Polaris-OptionList__Title"
5814};
5815
5816function OptionList(_ref) {
5817 var options = _ref.options,
5818 sections = _ref.sections,
5819 title = _ref.title,
5820 selected = _ref.selected,
5821 allowMultiple = _ref.allowMultiple,
5822 role = _ref.role,
5823 optionRole = _ref.optionRole,
5824 onChange = _ref.onChange,
5825 idProp = _ref.id;
5826
5827 var _useState = useState(createNormalizedOptions(options, sections, title)),
5828 _useState2 = _slicedToArray(_useState, 2),
5829 normalizedOptions = _useState2[0],
5830 setNormalizedOptions = _useState2[1];
5831
5832 var id = useUniqueId('OptionList', idProp);
5833 useDeepEffect(function () {
5834 setNormalizedOptions(createNormalizedOptions(options || [], sections || [], title));
5835 }, [options, sections, title], optionArraysAreEqual);
5836 var handleClick = useCallback(function (sectionIndex, optionIndex) {
5837 var selectedValue = normalizedOptions[sectionIndex].options[optionIndex].value;
5838 var foundIndex = selected.indexOf(selectedValue);
5839
5840 if (allowMultiple) {
5841 var newSelection = foundIndex === -1 ? [selectedValue].concat(_toConsumableArray(selected)) : [].concat(_toConsumableArray(selected.slice(0, foundIndex)), _toConsumableArray(selected.slice(foundIndex + 1, selected.length)));
5842 onChange(newSelection);
5843 return;
5844 }
5845
5846 onChange([selectedValue]);
5847 }, [normalizedOptions, selected, allowMultiple, onChange]);
5848 var optionsExist = normalizedOptions.length > 0;
5849 var optionsMarkup = optionsExist ? normalizedOptions.map(function (_ref2, sectionIndex) {
5850 var title = _ref2.title,
5851 options = _ref2.options;
5852 var titleMarkup = title ? React__default.createElement("p", {
5853 className: styles$o.Title,
5854 role: role
5855 }, title) : null;
5856 var optionsMarkup = options && options.map(function (option, optionIndex) {
5857 var isSelected = selected.includes(option.value);
5858 var optionId = option.id || "".concat(id, "-").concat(sectionIndex, "-").concat(optionIndex);
5859 return React__default.createElement(Option, Object.assign({}, option, {
5860 key: optionId,
5861 id: optionId,
5862 section: sectionIndex,
5863 index: optionIndex,
5864 onClick: handleClick,
5865 select: isSelected,
5866 allowMultiple: allowMultiple,
5867 role: optionRole
5868 }));
5869 });
5870 return React__default.createElement("li", {
5871 key: title || "noTitle-".concat(sectionIndex)
5872 }, titleMarkup, React__default.createElement("ul", {
5873 className: styles$o.Options,
5874 id: "".concat(id, "-").concat(sectionIndex),
5875 role: role,
5876 "aria-multiselectable": allowMultiple
5877 }, optionsMarkup));
5878 }) : null;
5879 return React__default.createElement("ul", {
5880 className: styles$o.OptionList,
5881 role: role
5882 }, optionsMarkup);
5883}
5884
5885function createNormalizedOptions(options, sections, title) {
5886 if (options == null) {
5887 var section = {
5888 options: [],
5889 title
5890 };
5891 return sections == null ? [] : [section].concat(_toConsumableArray(sections));
5892 }
5893
5894 if (sections == null) {
5895 return [{
5896 title,
5897 options
5898 }];
5899 }
5900
5901 return [{
5902 title,
5903 options
5904 }].concat(_toConsumableArray(sections));
5905}
5906
5907function isSection(arr) {
5908 return typeof arr[0] === 'object' && Object.prototype.hasOwnProperty.call(arr[0], 'options');
5909}
5910
5911function optionArraysAreEqual(firstArray, secondArray) {
5912 if (isSection(firstArray) && isSection(secondArray)) {
5913 return arraysAreEqual(firstArray, secondArray, testSectionsPropEquality);
5914 }
5915
5916 return arraysAreEqual(firstArray, secondArray);
5917}
5918
5919function testSectionsPropEquality(previousSection, currentSection) {
5920 var previousOptions = previousSection.options;
5921 var currentOptions = currentSection.options;
5922 var optionsAreEqual = arraysAreEqual(previousOptions, currentOptions);
5923 var titlesAreEqual = previousSection.title === currentSection.title;
5924 return optionsAreEqual && titlesAreEqual;
5925}
5926
5927var ComboBoxContext = React__default.createContext({});
5928
5929var styles$p = {
5930 "EmptyState": "Polaris-Autocomplete-ComboBox__EmptyState"
5931};
5932
5933var getUniqueId = createUniqueIDFactory('ComboBox');
5934var ComboBox =
5935/*#__PURE__*/
5936function (_React$PureComponent) {
5937 _inherits(ComboBox, _React$PureComponent);
5938
5939 function ComboBox() {
5940 var _this;
5941
5942 _classCallCheck(this, ComboBox);
5943
5944 _this = _possibleConstructorReturn(this, _getPrototypeOf(ComboBox).apply(this, arguments));
5945 _this.state = {
5946 comboBoxId: _this.getComboBoxId(),
5947 selectedOption: undefined,
5948 selectedIndex: -1,
5949 selectedOptions: _this.props.selected,
5950 navigableOptions: [],
5951 popoverActive: false,
5952 popoverWasActive: false
5953 };
5954
5955 _this.handleDownArrow = function () {
5956 _this.selectNextOption();
5957
5958 _this.handlePopoverOpen;
5959 };
5960
5961 _this.handleUpArrow = function () {
5962 _this.selectPreviousOption();
5963
5964 _this.handlePopoverOpen;
5965 };
5966
5967 _this.handleEnter = function (event) {
5968 if (event.keyCode !== Key.Enter) {
5969 return;
5970 }
5971
5972 var selectedOption = _this.state.selectedOption;
5973
5974 if (_this.state.popoverActive && selectedOption) {
5975 if (isOption(selectedOption)) {
5976 event.preventDefault();
5977
5978 _this.handleSelection(selectedOption.value);
5979 } else {
5980 selectedOption.onAction && selectedOption.onAction();
5981 }
5982 }
5983
5984 _this.handlePopoverOpen;
5985 };
5986
5987 _this.handleFocus = function () {
5988 _this.setState({
5989 popoverActive: true,
5990 popoverWasActive: true
5991 });
5992 };
5993
5994 _this.handleBlur = function () {
5995 _this.setState({
5996 popoverActive: false,
5997 popoverWasActive: false
5998 }, function () {
5999 _this.resetVisuallySelectedOptions();
6000 });
6001 };
6002
6003 _this.handleClick = function () {
6004 !_this.state.popoverActive && _this.setState({
6005 popoverActive: true
6006 });
6007 };
6008
6009 _this.handleSelection = function (newSelected) {
6010 var _this$props = _this.props,
6011 selected = _this$props.selected,
6012 allowMultiple = _this$props.allowMultiple;
6013 var newlySelectedOptions = selected;
6014
6015 if (selected.includes(newSelected)) {
6016 newlySelectedOptions.splice(newlySelectedOptions.indexOf(newSelected), 1);
6017 } else if (allowMultiple) {
6018 newlySelectedOptions.push(newSelected);
6019 } else {
6020 newlySelectedOptions = [newSelected];
6021 }
6022
6023 _this.selectOptions(newlySelectedOptions);
6024 };
6025
6026 _this.selectOptions = function (selected) {
6027 var _this$props2 = _this.props,
6028 onSelect = _this$props2.onSelect,
6029 allowMultiple = _this$props2.allowMultiple;
6030 selected && onSelect(selected);
6031
6032 if (!allowMultiple) {
6033 _this.resetVisuallySelectedOptions();
6034
6035 _this.setState({
6036 popoverActive: false,
6037 popoverWasActive: false
6038 });
6039 }
6040 };
6041
6042 _this.updateIndexOfSelectedOption = function (newOptions) {
6043 var _this$state = _this.state,
6044 selectedIndex = _this$state.selectedIndex,
6045 selectedOption = _this$state.selectedOption;
6046
6047 if (selectedOption && newOptions.includes(selectedOption)) {
6048 _this.selectOptionAtIndex(newOptions.indexOf(selectedOption));
6049 } else if (selectedIndex > newOptions.length - 1) {
6050 _this.resetVisuallySelectedOptions();
6051 } else {
6052 _this.selectOptionAtIndex(selectedIndex);
6053 }
6054 };
6055
6056 _this.resetVisuallySelectedOptions = function () {
6057 var navigableOptions = _this.state.navigableOptions;
6058
6059 _this.setState({
6060 selectedOption: undefined,
6061 selectedIndex: -1
6062 });
6063
6064 navigableOptions && navigableOptions.forEach(function (option) {
6065 option.active = false;
6066 });
6067 };
6068
6069 _this.handlePopoverClose = function () {
6070 _this.setState({
6071 popoverActive: false,
6072 popoverWasActive: false
6073 });
6074 };
6075
6076 _this.handlePopoverOpen = function () {
6077 var _this$state2 = _this.state,
6078 popoverActive = _this$state2.popoverActive,
6079 navigableOptions = _this$state2.navigableOptions;
6080 !popoverActive && navigableOptions && navigableOptions.length > 0 && _this.setState({
6081 popoverActive: true,
6082 popoverWasActive: true
6083 });
6084 };
6085
6086 _this.selectNextOption = function () {
6087 var _this$state3 = _this.state,
6088 selectedIndex = _this$state3.selectedIndex,
6089 navigableOptions = _this$state3.navigableOptions;
6090
6091 if (!navigableOptions || navigableOptions.length === 0) {
6092 return;
6093 }
6094
6095 var newIndex = selectedIndex;
6096
6097 if (selectedIndex + 1 >= navigableOptions.length) {
6098 newIndex = 0;
6099 } else {
6100 newIndex++;
6101 }
6102
6103 _this.selectOptionAtIndex(newIndex);
6104 };
6105
6106 _this.selectPreviousOption = function () {
6107 var _this$state4 = _this.state,
6108 selectedIndex = _this$state4.selectedIndex,
6109 navigableOptions = _this$state4.navigableOptions;
6110
6111 if (!navigableOptions || navigableOptions.length === 0) {
6112 return;
6113 }
6114
6115 var newIndex = selectedIndex;
6116
6117 if (selectedIndex <= 0) {
6118 newIndex = navigableOptions.length - 1;
6119 } else {
6120 newIndex--;
6121 }
6122
6123 _this.selectOptionAtIndex(newIndex);
6124 };
6125
6126 _this.selectOptionAtIndex = function (newOptionIndex) {
6127 _this.setState(function (prevState) {
6128 if (!prevState.navigableOptions || prevState.navigableOptions.length === 0) {
6129 return prevState;
6130 }
6131
6132 var newSelectedOption = prevState.navigableOptions[newOptionIndex];
6133
6134 _this.visuallyUpdateSelectedOption(newSelectedOption, prevState.selectedOption);
6135
6136 return Object.assign({}, prevState, {
6137 selectedOption: newSelectedOption,
6138 selectedIndex: newOptionIndex
6139 });
6140 });
6141 };
6142
6143 _this.visuallyUpdateSelectedOption = function (newOption, oldOption) {
6144 if (oldOption) {
6145 oldOption.active = false;
6146 }
6147
6148 if (newOption) {
6149 newOption.active = true;
6150 }
6151 };
6152
6153 return _this;
6154 }
6155
6156 _createClass(ComboBox, [{
6157 key: "componentDidMount",
6158 value: function componentDidMount() {
6159 var _this$props3 = this.props,
6160 options = _this$props3.options,
6161 actionsBefore = _this$props3.actionsBefore,
6162 actionsAfter = _this$props3.actionsAfter;
6163 var comboBoxId = this.getComboBoxId();
6164 var navigableOptions = [];
6165
6166 if (actionsBefore) {
6167 navigableOptions = navigableOptions.concat(actionsBefore);
6168 }
6169
6170 if (options) {
6171 navigableOptions = navigableOptions.concat(options);
6172 }
6173
6174 if (actionsAfter) {
6175 navigableOptions = navigableOptions.concat(actionsAfter);
6176 }
6177
6178 navigableOptions = assignOptionIds(navigableOptions, comboBoxId);
6179 this.setState({
6180 navigableOptions
6181 });
6182 }
6183 }, {
6184 key: "componentDidUpdate",
6185 value: function componentDidUpdate(_, prevState) {
6186 var _this$props4 = this.props,
6187 contentBefore = _this$props4.contentBefore,
6188 contentAfter = _this$props4.contentAfter,
6189 emptyState = _this$props4.emptyState;
6190 var _this$state5 = this.state,
6191 navigableOptions = _this$state5.navigableOptions,
6192 popoverWasActive = _this$state5.popoverWasActive;
6193 var optionsChanged = navigableOptions && prevState.navigableOptions && !optionsAreEqual(navigableOptions, prevState.navigableOptions);
6194
6195 if (optionsChanged) {
6196 this.updateIndexOfSelectedOption(navigableOptions);
6197 }
6198
6199 if (navigableOptions && navigableOptions.length === 0 && !contentBefore && !contentAfter && !emptyState) {
6200 // eslint-disable-next-line react/no-did-update-set-state
6201 this.setState({
6202 popoverActive: false
6203 });
6204 } else if (popoverWasActive && navigableOptions && navigableOptions.length !== 0) {
6205 // eslint-disable-next-line react/no-did-update-set-state
6206 this.setState({
6207 popoverActive: true
6208 });
6209 }
6210 }
6211 }, {
6212 key: "getComboBoxId",
6213 value: function getComboBoxId() {
6214 if (this.state && this.state.comboBoxId) {
6215 return this.state.comboBoxId;
6216 }
6217
6218 return this.props.id || getUniqueId();
6219 }
6220 }, {
6221 key: "render",
6222 value: function render() {
6223 var _this$props5 = this.props,
6224 options = _this$props5.options,
6225 textField = _this$props5.textField,
6226 listTitle = _this$props5.listTitle,
6227 allowMultiple = _this$props5.allowMultiple,
6228 preferredPosition = _this$props5.preferredPosition,
6229 actionsBefore = _this$props5.actionsBefore,
6230 actionsAfter = _this$props5.actionsAfter,
6231 contentBefore = _this$props5.contentBefore,
6232 contentAfter = _this$props5.contentAfter,
6233 onEndReached = _this$props5.onEndReached,
6234 emptyState = _this$props5.emptyState;
6235 var _this$state6 = this.state,
6236 comboBoxId = _this$state6.comboBoxId,
6237 navigableOptions = _this$state6.navigableOptions,
6238 selectedOptions = _this$state6.selectedOptions;
6239 var actionsBeforeMarkup = actionsBefore && actionsBefore.length > 0 && React__default.createElement(ActionList, {
6240 actionRole: "option",
6241 items: actionsBefore
6242 });
6243 var actionsAfterMarkup = actionsAfter && actionsAfter.length > 0 && React__default.createElement(ActionList, {
6244 actionRole: "option",
6245 items: actionsAfter
6246 });
6247 var optionsMarkup = options.length > 0 && React__default.createElement(OptionList, {
6248 role: "presentation",
6249 optionRole: "option",
6250 options: filterForOptions(navigableOptions),
6251 onChange: this.selectOptions,
6252 selected: selectedOptions,
6253 title: listTitle,
6254 allowMultiple: allowMultiple
6255 });
6256 var emptyStateMarkup = !actionsAfter && !actionsBefore && !contentAfter && !contentBefore && options.length === 0 && emptyState && React__default.createElement("div", {
6257 className: styles$p.EmptyState
6258 }, emptyState);
6259 var context = {
6260 comboBoxId,
6261 selectedOptionId: this.selectedOptionId
6262 };
6263 return React__default.createElement(ComboBoxContext.Provider, {
6264 value: context
6265 }, React__default.createElement("div", {
6266 onClick: this.handleClick,
6267 role: "combobox",
6268 "aria-expanded": this.state.popoverActive,
6269 "aria-owns": this.state.comboBoxId,
6270 "aria-controls": this.state.comboBoxId,
6271 "aria-haspopup": true,
6272 onFocus: this.handleFocus,
6273 onBlur: this.handleBlur,
6274 tabIndex: 0
6275 }, React__default.createElement(KeypressListener, {
6276 keyCode: Key.DownArrow,
6277 handler: this.handleDownArrow
6278 }), React__default.createElement(KeypressListener, {
6279 keyCode: Key.UpArrow,
6280 handler: this.handleUpArrow
6281 }), React__default.createElement(EventListener, {
6282 event: "keydown",
6283 handler: this.handleEnter
6284 }), React__default.createElement(KeypressListener, {
6285 keyCode: Key.Escape,
6286 handler: this.handlePopoverClose
6287 }), React__default.createElement(Popover, {
6288 activator: textField,
6289 active: this.state.popoverActive,
6290 onClose: this.handlePopoverClose,
6291 preferredPosition: preferredPosition,
6292 fullWidth: true,
6293 preventAutofocus: true
6294 }, React__default.createElement(Popover.Pane, {
6295 onScrolledToBottom: onEndReached
6296 }, React__default.createElement("div", {
6297 id: this.state.comboBoxId,
6298 role: "listbox",
6299 "aria-multiselectable": allowMultiple
6300 }, contentBefore, actionsBeforeMarkup, optionsMarkup, actionsAfterMarkup, contentAfter, emptyStateMarkup)))));
6301 }
6302 }, {
6303 key: "selectedOptionId",
6304 get: function get() {
6305 var _this$state7 = this.state,
6306 selectedOption = _this$state7.selectedOption,
6307 selectedIndex = _this$state7.selectedIndex,
6308 comboBoxId = _this$state7.comboBoxId;
6309 return selectedOption ? "".concat(comboBoxId, "-").concat(selectedIndex) : undefined;
6310 }
6311 }], [{
6312 key: "getDerivedStateFromProps",
6313 value: function getDerivedStateFromProps(_ref, _ref2) {
6314 var nextOptions = _ref.options,
6315 nextSelected = _ref.selected,
6316 nextActionsBefore = _ref.actionsBefore,
6317 nextActionsAfter = _ref.actionsAfter;
6318 var navigableOptions = _ref2.navigableOptions,
6319 selectedOptions = _ref2.selectedOptions,
6320 comboBoxId = _ref2.comboBoxId;
6321 var optionsChanged = filterForOptions(navigableOptions) && nextOptions && !optionsAreEqual(navigableOptions, nextOptions);
6322 var newNavigableOptions = [];
6323
6324 if (nextActionsBefore) {
6325 newNavigableOptions = newNavigableOptions.concat(nextActionsBefore);
6326 }
6327
6328 if (optionsChanged || nextActionsBefore) {
6329 newNavigableOptions = newNavigableOptions.concat(nextOptions);
6330 }
6331
6332 if (nextActionsAfter) {
6333 newNavigableOptions = newNavigableOptions.concat(nextActionsAfter);
6334 }
6335
6336 newNavigableOptions = assignOptionIds(newNavigableOptions, comboBoxId);
6337
6338 if (optionsChanged && selectedOptions !== nextSelected) {
6339 return {
6340 navigableOptions: newNavigableOptions,
6341 selectedOptions: nextSelected
6342 };
6343 } else if (optionsChanged) {
6344 return {
6345 navigableOptions: newNavigableOptions
6346 };
6347 } else if (selectedOptions !== nextSelected) {
6348 return {
6349 selectedOptions: nextSelected
6350 };
6351 }
6352
6353 return null;
6354 }
6355 }]);
6356
6357 return ComboBox;
6358}(React__default.PureComponent);
6359
6360function assignOptionIds(options, comboBoxId) {
6361 options.map(function (option, optionIndex) {
6362 option.id = "".concat(comboBoxId, "-").concat(optionIndex);
6363 });
6364 return options;
6365}
6366
6367function optionsAreEqual(firstOptions, secondOptions) {
6368 if (firstOptions.length !== secondOptions.length) {
6369 return false;
6370 }
6371
6372 return firstOptions.every(function (firstItem, index) {
6373 var secondItem = secondOptions[index];
6374
6375 if (isOption(firstItem)) {
6376 if (isOption(secondItem)) {
6377 return firstItem.value === secondItem.value;
6378 }
6379
6380 return false;
6381 } else {
6382 if (!isOption(secondItem)) {
6383 return firstItem.content === secondItem.content;
6384 }
6385
6386 return false;
6387 }
6388 });
6389}
6390
6391function isOption(navigableOption) {
6392 return navigableOption.value !== undefined;
6393}
6394
6395function filterForOptions(mixedArray) {
6396 return mixedArray.filter(function (item) {
6397 return isOption(item);
6398 });
6399}
6400
6401var styles$q = {
6402 "Label": "Polaris-Label",
6403 "hidden": "Polaris-Label--hidden",
6404 "Text": "Polaris-Label__Text"
6405};
6406
6407function labelID(id) {
6408 return "".concat(id, "Label");
6409}
6410function Label(_ref) {
6411 var children = _ref.children,
6412 id = _ref.id,
6413 hidden = _ref.hidden;
6414 var className = classNames(styles$q.Label, hidden && styles$q.hidden);
6415 return React__default.createElement("div", {
6416 className: className
6417 }, React__default.createElement("label", {
6418 id: labelID(id),
6419 htmlFor: id,
6420 className: styles$q.Text
6421 }, children));
6422}
6423
6424var styles$r = {
6425 "InlineError": "Polaris-InlineError",
6426 "Icon": "Polaris-InlineError__Icon"
6427};
6428
6429function InlineError(_ref) {
6430 var message = _ref.message,
6431 fieldID = _ref.fieldID;
6432
6433 if (!message) {
6434 return null;
6435 }
6436
6437 return React__default.createElement("div", {
6438 id: errorTextID(fieldID),
6439 className: styles$r.InlineError
6440 }, React__default.createElement("div", {
6441 className: styles$r.Icon
6442 }, React__default.createElement(Icon, {
6443 source: AlertMinor
6444 })), message);
6445}
6446function errorTextID(id) {
6447 return "".concat(id, "Error");
6448}
6449
6450var styles$s = {
6451 "hidden": "Polaris-Labelled--hidden",
6452 "LabelWrapper": "Polaris-Labelled__LabelWrapper",
6453 "HelpText": "Polaris-Labelled__HelpText",
6454 "Error": "Polaris-Labelled__Error",
6455 "Action": "Polaris-Labelled__Action"
6456};
6457
6458function Labelled(_a) {
6459 var id = _a.id,
6460 label = _a.label,
6461 error = _a.error,
6462 action = _a.action,
6463 helpText = _a.helpText,
6464 children = _a.children,
6465 labelHidden = _a.labelHidden,
6466 rest = __rest(_a, ["id", "label", "error", "action", "helpText", "children", "labelHidden"]);
6467
6468 var className = classNames(labelHidden && styles$s.hidden);
6469 var actionMarkup = action ? React__default.createElement("div", {
6470 className: styles$s.Action
6471 }, buttonFrom(action, {
6472 plain: true
6473 })) : null;
6474 var helpTextMarkup = helpText ? React__default.createElement("div", {
6475 className: styles$s.HelpText,
6476 id: helpTextID(id)
6477 }, helpText) : null;
6478 var errorMarkup = error && typeof error !== 'boolean' && React__default.createElement("div", {
6479 className: styles$s.Error
6480 }, React__default.createElement(InlineError, {
6481 message: error,
6482 fieldID: id
6483 }));
6484 var labelMarkup = label ? React__default.createElement("div", {
6485 className: styles$s.LabelWrapper
6486 }, React__default.createElement(Label, Object.assign({
6487 id: id
6488 }, rest, {
6489 hidden: false
6490 }), label), actionMarkup) : null;
6491 return React__default.createElement("div", {
6492 className: className
6493 }, labelMarkup, children, errorMarkup, helpTextMarkup);
6494}
6495function helpTextID(id) {
6496 return "".concat(id, "HelpText");
6497}
6498
6499var styles$t = {
6500 "Connected": "Polaris-Connected",
6501 "Item": "Polaris-Connected__Item",
6502 "Item-primary": "Polaris-Connected__Item--primary",
6503 "Item-connection": "Polaris-Connected__Item--connection",
6504 "Item-focused": "Polaris-Connected__Item--focused"
6505};
6506
6507var ItemPosition;
6508
6509(function (ItemPosition) {
6510 ItemPosition[ItemPosition["Left"] = 0] = "Left";
6511 ItemPosition[ItemPosition["Primary"] = 1] = "Primary";
6512 ItemPosition[ItemPosition["Right"] = 2] = "Right";
6513})(ItemPosition || (ItemPosition = {}));
6514
6515var Item$3 =
6516/*#__PURE__*/
6517function (_React$PureComponent) {
6518 _inherits(Item, _React$PureComponent);
6519
6520 function Item() {
6521 var _this;
6522
6523 _classCallCheck(this, Item);
6524
6525 _this = _possibleConstructorReturn(this, _getPrototypeOf(Item).apply(this, arguments));
6526 _this.state = {
6527 focused: false
6528 };
6529
6530 _this.handleBlur = function () {
6531 _this.setState({
6532 focused: false
6533 });
6534 };
6535
6536 _this.handleFocus = function () {
6537 _this.setState({
6538 focused: true
6539 });
6540 };
6541
6542 return _this;
6543 }
6544
6545 _createClass(Item, [{
6546 key: "render",
6547 value: function render() {
6548 var focused = this.state.focused;
6549 var _this$props = this.props,
6550 children = _this$props.children,
6551 position = _this$props.position;
6552 var className = classNames(styles$t.Item, focused && styles$t['Item-focused'], position === ItemPosition.Primary ? styles$t['Item-primary'] : styles$t['Item-connection']);
6553 return React__default.createElement("div", {
6554 onBlur: this.handleBlur,
6555 onFocus: this.handleFocus,
6556 className: className
6557 }, children);
6558 }
6559 }]);
6560
6561 return Item;
6562}(React__default.PureComponent);
6563
6564function Connected(_ref) {
6565 var children = _ref.children,
6566 left = _ref.left,
6567 right = _ref.right;
6568 var leftConnectionMarkup = left ? React__default.createElement(Item$3, {
6569 position: ItemPosition.Left
6570 }, left) : null;
6571 var rightConnectionMarkup = right ? React__default.createElement(Item$3, {
6572 position: ItemPosition.Right
6573 }, right) : null;
6574 return React__default.createElement("div", {
6575 className: styles$t.Connected
6576 }, leftConnectionMarkup, React__default.createElement(Item$3, {
6577 position: ItemPosition.Primary
6578 }, children), rightConnectionMarkup);
6579}
6580
6581var styles$u = {
6582 "TextField": "Polaris-TextField",
6583 "multiline": "Polaris-TextField--multiline",
6584 "Input": "Polaris-TextField__Input",
6585 "hasValue": "Polaris-TextField--hasValue",
6586 "focus": "Polaris-TextField--focus",
6587 "Backdrop": "Polaris-TextField__Backdrop",
6588 "error": "Polaris-TextField--error",
6589 "readOnly": "Polaris-TextField--readOnly",
6590 "disabled": "Polaris-TextField--disabled",
6591 "Prefix": "Polaris-TextField__Prefix",
6592 "Input-hasClearButton": "Polaris-TextField__Input--hasClearButton",
6593 "Input-suffixed": "Polaris-TextField__Input--suffixed",
6594 "Input-alignRight": "Polaris-TextField__Input--alignRight",
6595 "Input-alignLeft": "Polaris-TextField__Input--alignLeft",
6596 "Input-alignCenter": "Polaris-TextField__Input--alignCenter",
6597 "Suffix": "Polaris-TextField__Suffix",
6598 "CharacterCount": "Polaris-TextField__CharacterCount",
6599 "AlignFieldBottom": "Polaris-TextField__AlignFieldBottom",
6600 "ClearButton": "Polaris-TextField__ClearButton",
6601 "Spinner": "Polaris-TextField__Spinner",
6602 "SpinnerIcon": "Polaris-TextField__SpinnerIcon",
6603 "Resizer": "Polaris-TextField__Resizer",
6604 "DummyInput": "Polaris-TextField__DummyInput",
6605 "Segment": "Polaris-TextField__Segment",
6606 "globalTheming": "Polaris-TextField--globalTheming"
6607};
6608
6609function Resizer(_ref) {
6610 var contents = _ref.contents,
6611 _ref$currentHeight = _ref.currentHeight,
6612 currentHeightProp = _ref$currentHeight === void 0 ? null : _ref$currentHeight,
6613 minimumLines = _ref.minimumLines,
6614 onHeightChange = _ref.onHeightChange;
6615 var contentNode = useRef(null);
6616 var minimumLinesNode = useRef(null);
6617 var animationFrame = useRef();
6618 var currentHeight = useRef(currentHeightProp);
6619
6620 if (currentHeightProp !== currentHeight.current) {
6621 currentHeight.current = currentHeightProp;
6622 }
6623
6624 useEffect(function () {
6625 return function () {
6626 if (animationFrame.current) {
6627 cancelAnimationFrame(animationFrame.current);
6628 }
6629 };
6630 }, []);
6631 var minimumLinesMarkup = minimumLines ? React__default.createElement("div", {
6632 ref: minimumLinesNode,
6633 className: styles$u.DummyInput,
6634 dangerouslySetInnerHTML: {
6635 __html: getContentsForMinimumLines(minimumLines)
6636 }
6637 }) : null;
6638 var handleHeightCheck = useCallback(function () {
6639 if (animationFrame.current) {
6640 cancelAnimationFrame(animationFrame.current);
6641 }
6642
6643 animationFrame.current = requestAnimationFrame(function () {
6644 if (!contentNode.current || !minimumLinesNode.current) {
6645 return;
6646 }
6647
6648 var newHeight = Math.max(contentNode.current.offsetHeight, minimumLinesNode.current.offsetHeight);
6649
6650 if (newHeight !== currentHeight.current) {
6651 onHeightChange(newHeight);
6652 }
6653 });
6654 }, [onHeightChange]);
6655 useLayoutEffect(function () {
6656 handleHeightCheck();
6657 });
6658 return React__default.createElement("div", {
6659 "aria-hidden": true,
6660 className: styles$u.Resizer
6661 }, React__default.createElement(EventListener, {
6662 event: "resize",
6663 handler: handleHeightCheck
6664 }), React__default.createElement("div", {
6665 ref: contentNode,
6666 className: styles$u.DummyInput,
6667 dangerouslySetInnerHTML: {
6668 __html: getFinalContents(contents)
6669 }
6670 }), minimumLinesMarkup);
6671}
6672var ENTITIES_TO_REPLACE = {
6673 '&': '&amp;',
6674 '<': '&lt;',
6675 '>': '&gt;',
6676 '\n': '<br>',
6677 '\r': ''
6678};
6679var REPLACE_REGEX$1 = new RegExp("[".concat(Object.keys(ENTITIES_TO_REPLACE).join(), "]"), 'g');
6680
6681function replaceEntity(entity) {
6682 return ENTITIES_TO_REPLACE[entity];
6683}
6684
6685function getContentsForMinimumLines(minimumLines) {
6686 var content = '';
6687
6688 for (var line = 0; line < minimumLines; line++) {
6689 content += '<br>';
6690 }
6691
6692 return content;
6693}
6694
6695function getFinalContents(contents) {
6696 return contents ? "".concat(contents.replace(REPLACE_REGEX$1, replaceEntity), "<br>") : '<br>';
6697}
6698
6699function Spinner$1(_ref) {
6700 var onChange = _ref.onChange,
6701 onClick = _ref.onClick,
6702 onMouseDown = _ref.onMouseDown,
6703 onMouseUp = _ref.onMouseUp;
6704
6705 function handleStep(step) {
6706 return function () {
6707 return onChange(step);
6708 };
6709 }
6710
6711 function handleMouseDown(onChange) {
6712 return function (event) {
6713 if (event.button !== 0) return;
6714 onMouseDown(onChange);
6715 };
6716 }
6717
6718 return React__default.createElement("div", {
6719 className: styles$u.Spinner,
6720 onClick: onClick,
6721 "aria-hidden": true
6722 }, React__default.createElement("div", {
6723 role: "button",
6724 className: styles$u.Segment,
6725 tabIndex: -1,
6726 onClick: handleStep(1),
6727 onMouseDown: handleMouseDown(handleStep(1)),
6728 onMouseUp: onMouseUp
6729 }, React__default.createElement("div", {
6730 className: styles$u.SpinnerIcon
6731 }, React__default.createElement(Icon, {
6732 source: CaretUpMinor
6733 }))), React__default.createElement("div", {
6734 role: "button",
6735 className: styles$u.Segment,
6736 tabIndex: -1,
6737 onClick: handleStep(-1),
6738 onMouseDown: handleMouseDown(handleStep(-1)),
6739 onMouseUp: onMouseUp
6740 }, React__default.createElement("div", {
6741 className: styles$u.SpinnerIcon
6742 }, React__default.createElement(Icon, {
6743 source: CaretDownMinor
6744 }))));
6745}
6746
6747function TextField(_ref) {
6748 var prefix = _ref.prefix,
6749 suffix = _ref.suffix,
6750 placeholder = _ref.placeholder,
6751 value = _ref.value,
6752 helpText = _ref.helpText,
6753 label = _ref.label,
6754 labelAction = _ref.labelAction,
6755 labelHidden = _ref.labelHidden,
6756 disabled = _ref.disabled,
6757 clearButton = _ref.clearButton,
6758 readOnly = _ref.readOnly,
6759 autoFocus = _ref.autoFocus,
6760 focused = _ref.focused,
6761 multiline = _ref.multiline,
6762 error = _ref.error,
6763 connectedRight = _ref.connectedRight,
6764 connectedLeft = _ref.connectedLeft,
6765 type = _ref.type,
6766 name = _ref.name,
6767 idProp = _ref.id,
6768 role = _ref.role,
6769 _ref$step = _ref.step,
6770 step = _ref$step === void 0 ? 1 : _ref$step,
6771 autoComplete = _ref.autoComplete,
6772 _ref$max = _ref.max,
6773 max = _ref$max === void 0 ? Infinity : _ref$max,
6774 maxLength = _ref.maxLength,
6775 _ref$min = _ref.min,
6776 min = _ref$min === void 0 ? -Infinity : _ref$min,
6777 minLength = _ref.minLength,
6778 pattern = _ref.pattern,
6779 spellCheck = _ref.spellCheck,
6780 ariaOwns = _ref.ariaOwns,
6781 ariaControls = _ref.ariaControls,
6782 ariaActiveDescendant = _ref.ariaActiveDescendant,
6783 ariaAutocomplete = _ref.ariaAutocomplete,
6784 showCharacterCount = _ref.showCharacterCount,
6785 align = _ref.align,
6786 onClearButtonClick = _ref.onClearButtonClick,
6787 onChange = _ref.onChange,
6788 onFocus = _ref.onFocus,
6789 onBlur = _ref.onBlur;
6790 var i18n = useI18n();
6791
6792 var _useState = useState(null),
6793 _useState2 = _slicedToArray(_useState, 2),
6794 height = _useState2[0],
6795 setHeight = _useState2[1];
6796
6797 var _useState3 = useState(Boolean(focused)),
6798 _useState4 = _slicedToArray(_useState3, 2),
6799 focus = _useState4[0],
6800 setFocus = _useState4[1];
6801
6802 var isAfterInitial = useIsAfterInitialMount();
6803 var id = useUniqueId('TextField', idProp);
6804 var inputRef = useRef(null);
6805 var prefixRef = useRef(null);
6806 var suffixRef = useRef(null);
6807 var buttonPressTimer = useRef();
6808 useEffect(function () {
6809 var input = inputRef.current;
6810 if (!input || focused === undefined) return;
6811 focused ? input.focus() : input.blur();
6812 }, [focused]);
6813 var normalizedValue = value != null ? value : '';
6814
6815 var _useFeatures = useFeatures(),
6816 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
6817 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
6818
6819 var className = classNames(styles$u.TextField, Boolean(normalizedValue) && styles$u.hasValue, disabled && styles$u.disabled, readOnly && styles$u.readOnly, error && styles$u.error, multiline && styles$u.multiline, focus && styles$u.focus, unstableGlobalTheming && styles$u.globalTheming);
6820 var inputType = type === 'currency' ? 'text' : type;
6821 var prefixMarkup = prefix ? React__default.createElement("div", {
6822 className: styles$u.Prefix,
6823 id: "".concat(id, "Prefix"),
6824 ref: prefixRef
6825 }, prefix) : null;
6826 var suffixMarkup = suffix ? React__default.createElement("div", {
6827 className: styles$u.Suffix,
6828 id: "".concat(id, "Suffix"),
6829 ref: suffixRef
6830 }, suffix) : null;
6831 var characterCount = normalizedValue.length;
6832 var characterCountLabel = i18n.translate(maxLength ? 'Polaris.TextField.characterCountWithMaxLength' : 'Polaris.TextField.characterCount', {
6833 count: characterCount,
6834 limit: maxLength
6835 });
6836 var characterCountClassName = classNames(styles$u.CharacterCount, multiline && styles$u.AlignFieldBottom);
6837 var characterCountText = !maxLength ? characterCount : "".concat(characterCount, "/").concat(maxLength);
6838 var characterCountMarkup = showCharacterCount ? React__default.createElement("div", {
6839 id: "".concat(id, "CharacterCounter"),
6840 className: characterCountClassName,
6841 "aria-label": characterCountLabel,
6842 "aria-live": focus ? 'polite' : 'off',
6843 "aria-atomic": "true"
6844 }, characterCountText) : null;
6845 var clearButtonMarkup = clearButton && normalizedValue !== '' ? React__default.createElement("button", {
6846 type: "button",
6847 className: styles$u.ClearButton,
6848 onClick: handleClearButtonPress,
6849 disabled: disabled
6850 }, React__default.createElement(VisuallyHidden, null, i18n.translate('Polaris.Common.clear')), React__default.createElement(Icon, {
6851 source: CircleCancelMinor,
6852 color: "inkLightest"
6853 })) : null;
6854 var handleNumberChange = useCallback(function (steps) {
6855 if (onChange == null) {
6856 return;
6857 } // Returns the length of decimal places in a number
6858
6859
6860 var dpl = function dpl(num) {
6861 return (num.toString().split('.')[1] || []).length;
6862 };
6863
6864 var numericValue = value ? parseFloat(value) : 0;
6865
6866 if (isNaN(numericValue)) {
6867 return;
6868 } // Making sure the new value has the same length of decimal places as the
6869 // step / value has.
6870
6871
6872 var decimalPlaces = Math.max(dpl(numericValue), dpl(step));
6873 var newValue = Math.min(Number(max), Math.max(numericValue + steps * step, Number(min)));
6874 onChange(String(newValue.toFixed(decimalPlaces)), id);
6875 }, [id, max, min, onChange, step, value]);
6876 var handleButtonRelease = useCallback(function () {
6877 clearTimeout(buttonPressTimer.current);
6878 }, []);
6879 var handleButtonPress = useCallback(function (onChange) {
6880 var minInterval = 50;
6881 var decrementBy = 10;
6882 var interval = 200;
6883
6884 var onChangeInterval = function onChangeInterval() {
6885 if (interval > minInterval) interval -= decrementBy;
6886 onChange();
6887 buttonPressTimer.current = window.setTimeout(onChangeInterval, interval);
6888 };
6889
6890 buttonPressTimer.current = window.setTimeout(onChangeInterval, interval);
6891 addEventListener(document, 'mouseup', handleButtonRelease, {
6892 once: true
6893 });
6894 }, [handleButtonRelease]);
6895 var spinnerMarkup = type === 'number' && !disabled && !readOnly ? React__default.createElement(Spinner$1, {
6896 onChange: handleNumberChange,
6897 onMouseDown: handleButtonPress,
6898 onMouseUp: handleButtonRelease
6899 }) : null;
6900 var style = multiline && height ? {
6901 height
6902 } : null;
6903 var handleExpandingResize = useCallback(function (height) {
6904 setHeight(height);
6905 }, []);
6906 var resizer = multiline && isAfterInitial ? React__default.createElement(Resizer, {
6907 contents: normalizedValue || placeholder,
6908 currentHeight: height,
6909 minimumLines: typeof multiline === 'number' ? multiline : 1,
6910 onHeightChange: handleExpandingResize
6911 }) : null;
6912 var describedBy = [];
6913
6914 if (error) {
6915 describedBy.push("".concat(id, "Error"));
6916 }
6917
6918 if (helpText) {
6919 describedBy.push(helpTextID(id));
6920 }
6921
6922 if (showCharacterCount) {
6923 describedBy.push("".concat(id, "CharacterCounter"));
6924 }
6925
6926 var labelledBy = [];
6927
6928 if (prefix) {
6929 labelledBy.push("".concat(id, "Prefix"));
6930 }
6931
6932 if (suffix) {
6933 labelledBy.push("".concat(id, "Suffix"));
6934 }
6935
6936 labelledBy.unshift(labelID(id));
6937 var inputClassName = classNames(styles$u.Input, align && styles$u[variationName('Input-align', align)], suffix && styles$u['Input-suffixed'], clearButton && styles$u['Input-hasClearButton']);
6938 var input = React__default.createElement(multiline ? 'textarea' : 'input', {
6939 name,
6940 id,
6941 disabled,
6942 readOnly,
6943 role,
6944 autoFocus,
6945 value: normalizedValue,
6946 placeholder,
6947 onFocus,
6948 onBlur,
6949 onKeyPress: handleKeyPress,
6950 style,
6951 autoComplete: normalizeAutoComplete(autoComplete),
6952 className: inputClassName,
6953 onChange: handleChange,
6954 ref: inputRef,
6955 min,
6956 max,
6957 step,
6958 minLength,
6959 maxLength,
6960 spellCheck,
6961 pattern,
6962 type: inputType,
6963 'aria-describedby': describedBy.length ? describedBy.join(' ') : undefined,
6964 'aria-labelledby': labelledBy.join(' '),
6965 'aria-invalid': Boolean(error),
6966 'aria-owns': ariaOwns,
6967 'aria-activedescendant': ariaActiveDescendant,
6968 'aria-autocomplete': ariaAutocomplete,
6969 'aria-controls': ariaControls,
6970 'aria-multiline': normalizeAriaMultiline(multiline)
6971 });
6972 return React__default.createElement(Labelled, {
6973 label: label,
6974 id: id,
6975 error: error,
6976 action: labelAction,
6977 labelHidden: labelHidden,
6978 helpText: helpText
6979 }, React__default.createElement(Connected, {
6980 left: connectedLeft,
6981 right: connectedRight
6982 }, React__default.createElement("div", {
6983 className: className,
6984 onFocus: handleFocus,
6985 onBlur: handleBlur,
6986 onClick: handleClick
6987 }, prefixMarkup, input, suffixMarkup, characterCountMarkup, clearButtonMarkup, spinnerMarkup, React__default.createElement("div", {
6988 className: styles$u.Backdrop
6989 }), resizer)));
6990
6991 function handleClearButtonPress() {
6992 onClearButtonClick && onClearButtonClick(id);
6993 }
6994
6995 function handleKeyPress(event) {
6996 var key = event.key,
6997 which = event.which;
6998 var numbersSpec = /[\d.eE+-]$/;
6999
7000 if (type !== 'number' || which === Key.Enter || numbersSpec.test(key)) {
7001 return;
7002 }
7003
7004 event.preventDefault();
7005 }
7006
7007 function containsAffix(target) {
7008 return target instanceof HTMLElement && (prefixRef.current && prefixRef.current.contains(target) || suffixRef.current && suffixRef.current.contains(target));
7009 }
7010
7011 function handleChange(event) {
7012 onChange && onChange(event.currentTarget.value, id);
7013 }
7014
7015 function handleFocus(_ref2) {
7016 var target = _ref2.target;
7017
7018 if (containsAffix(target)) {
7019 return;
7020 }
7021
7022 setFocus(true);
7023 }
7024
7025 function handleBlur() {
7026 setFocus(false);
7027 }
7028
7029 function handleClick(_ref3) {
7030 var target = _ref3.target;
7031
7032 if (containsAffix(target)) {
7033 return;
7034 }
7035
7036 inputRef.current && inputRef.current.focus();
7037 }
7038}
7039
7040function normalizeAutoComplete(autoComplete) {
7041 if (autoComplete == null) {
7042 return autoComplete;
7043 } else if (autoComplete === true) {
7044 return 'on';
7045 } else if (autoComplete === false) {
7046 return 'off';
7047 } else {
7048 return autoComplete;
7049 }
7050}
7051
7052function normalizeAriaMultiline(multiline) {
7053 switch (typeof multiline) {
7054 case 'undefined':
7055 return false;
7056
7057 case 'boolean':
7058 return multiline;
7059
7060 case 'number':
7061 return Boolean(multiline > 0);
7062 }
7063}
7064
7065function TextField$1(props) {
7066 return React__default.createElement(ComboBoxContext.Consumer, null, function (_ref) {
7067 var selectedOptionId = _ref.selectedOptionId,
7068 comboBoxId = _ref.comboBoxId;
7069 return React__default.createElement(TextField, Object.assign({}, props, {
7070 autoComplete: false,
7071 ariaAutocomplete: "list",
7072 ariaActiveDescendant: selectedOptionId,
7073 ariaControls: comboBoxId
7074 }));
7075 });
7076}
7077
7078var styles$v = {
7079 "Loading": "Polaris-Autocomplete__Loading"
7080};
7081
7082// subcomponents so explicitly state the subcomponents in the type definition.
7083// Letting this be implicit works in this project but fails in projects that use
7084// generated *.d.ts files.
7085
7086var Autocomplete = function Autocomplete(_ref) {
7087 var id = _ref.id,
7088 options = _ref.options,
7089 selected = _ref.selected,
7090 textField = _ref.textField,
7091 preferredPosition = _ref.preferredPosition,
7092 listTitle = _ref.listTitle,
7093 allowMultiple = _ref.allowMultiple,
7094 loading = _ref.loading,
7095 actionBefore = _ref.actionBefore,
7096 willLoadMoreResults = _ref.willLoadMoreResults,
7097 emptyState = _ref.emptyState,
7098 onSelect = _ref.onSelect,
7099 onLoadMoreResults = _ref.onLoadMoreResults;
7100 var i18n = useI18n();
7101 var spinnerMarkup = loading ? React__default.createElement("div", {
7102 className: styles$v.Loading
7103 }, React__default.createElement(Spinner, {
7104 size: "small",
7105 accessibilityLabel: i18n.translate('Polaris.Autocomplete.spinnerAccessibilityLabel')
7106 })) : null;
7107 var conditionalOptions = loading && !willLoadMoreResults ? [] : options;
7108 var conditionalAction = actionBefore && actionBefore !== [] ? [actionBefore] : undefined;
7109 return React__default.createElement(ComboBox, {
7110 id: id,
7111 options: conditionalOptions,
7112 selected: selected,
7113 textField: textField,
7114 preferredPosition: preferredPosition,
7115 listTitle: listTitle,
7116 allowMultiple: allowMultiple,
7117 contentAfter: spinnerMarkup,
7118 actionsBefore: conditionalAction,
7119 onSelect: onSelect,
7120 onEndReached: onLoadMoreResults,
7121 emptyState: emptyState
7122 });
7123};
7124Autocomplete.ComboBox = ComboBox;
7125Autocomplete.TextField = TextField$1;
7126
7127// in the styleguide works without warnings about unfound props
7128
7129function ScrollLock(_) {
7130 var scrollLockManager = useScrollLockManager();
7131 useEffect(function () {
7132 scrollLockManager.registerScrollLock();
7133 return function () {
7134 scrollLockManager.unregisterScrollLock();
7135 };
7136 }, [scrollLockManager]);
7137 return null;
7138}
7139
7140var styles$w = {
7141 "Backdrop": "Polaris-Backdrop",
7142 "fade-in": "Polaris-Backdrop__fade--in",
7143 "transparent": "Polaris-Backdrop--transparent",
7144 "belowNavigation": "Polaris-Backdrop--belowNavigation"
7145};
7146
7147function Backdrop(props) {
7148 var onClick = props.onClick,
7149 onTouchStart = props.onTouchStart,
7150 belowNavigation = props.belowNavigation,
7151 transparent = props.transparent;
7152 var className = classNames(styles$w.Backdrop, belowNavigation && styles$w.belowNavigation, transparent && styles$w.transparent);
7153 return React__default.createElement(React__default.Fragment, null, React__default.createElement(ScrollLock, null), React__default.createElement("div", {
7154 className: className,
7155 onClick: onClick,
7156 onTouchStart: onTouchStart
7157 }));
7158}
7159
7160var BannerContext = React__default.createContext(false);
7161
7162var styles$x = {
7163 "Banner": "Polaris-Banner",
7164 "withinContentContainer": "Polaris-Banner--withinContentContainer",
7165 "statusSuccess": "Polaris-Banner--statusSuccess",
7166 "statusInfo": "Polaris-Banner--statusInfo",
7167 "statusWarning": "Polaris-Banner--statusWarning",
7168 "statusCritical": "Polaris-Banner--statusCritical",
7169 "Ribbon": "Polaris-Banner__Ribbon",
7170 "Actions": "Polaris-Banner__Actions",
7171 "Dismiss": "Polaris-Banner__Dismiss",
7172 "withinPage": "Polaris-Banner--withinPage",
7173 "hasDismiss": "Polaris-Banner--hasDismiss",
7174 "Heading": "Polaris-Banner__Heading",
7175 "Content": "Polaris-Banner__Content",
7176 "PrimaryAction": "Polaris-Banner__PrimaryAction",
7177 "SecondaryAction": "Polaris-Banner__SecondaryAction",
7178 "Text": "Polaris-Banner__Text"
7179};
7180
7181var Banner =
7182/*#__PURE__*/
7183function (_React$PureComponent) {
7184 _inherits(Banner, _React$PureComponent);
7185
7186 function Banner() {
7187 var _this;
7188
7189 _classCallCheck(this, Banner);
7190
7191 _this = _possibleConstructorReturn(this, _getPrototypeOf(Banner).apply(this, arguments));
7192 _this.wrapper = React__default.createRef();
7193 return _this;
7194 }
7195
7196 _createClass(Banner, [{
7197 key: "focus",
7198 value: function focus() {
7199 this.wrapper.current && this.wrapper.current.focus();
7200 }
7201 }, {
7202 key: "render",
7203 value: function render() {
7204 var _this2 = this;
7205
7206 return React__default.createElement(BannerContext.Provider, {
7207 value: true
7208 }, React__default.createElement(WithinContentContext.Consumer, null, function (withinContentContainer) {
7209 var _this2$props = _this2.props,
7210 icon = _this2$props.icon,
7211 action = _this2$props.action,
7212 secondaryAction = _this2$props.secondaryAction,
7213 title = _this2$props.title,
7214 children = _this2$props.children,
7215 status = _this2$props.status,
7216 onDismiss = _this2$props.onDismiss,
7217 stopAnnouncements = _this2$props.stopAnnouncements;
7218 var color;
7219 var defaultIcon;
7220 var ariaRoleType = 'status';
7221
7222 switch (status) {
7223 case 'success':
7224 color = 'greenDark';
7225 defaultIcon = CircleTickMajorTwotone;
7226 break;
7227
7228 case 'info':
7229 color = 'tealDark';
7230 defaultIcon = CircleInformationMajorTwotone;
7231 break;
7232
7233 case 'warning':
7234 color = 'yellowDark';
7235 defaultIcon = CircleAlertMajorTwotone;
7236 ariaRoleType = 'alert';
7237 break;
7238
7239 case 'critical':
7240 color = 'redDark';
7241 defaultIcon = CircleDisabledMajorTwotone;
7242 ariaRoleType = 'alert';
7243 break;
7244
7245 default:
7246 color = 'inkLighter';
7247 defaultIcon = FlagMajorTwotone;
7248 }
7249
7250 var className = classNames(styles$x.Banner, status && styles$x[variationName('status', status)], onDismiss && styles$x.hasDismiss, withinContentContainer ? styles$x.withinContentContainer : styles$x.withinPage);
7251 var id = uniqueID();
7252 var iconName = icon || defaultIcon;
7253 var headingMarkup = null;
7254 var headingID;
7255
7256 if (title) {
7257 headingID = "".concat(id, "Heading");
7258 headingMarkup = React__default.createElement("div", {
7259 className: styles$x.Heading,
7260 id: headingID
7261 }, React__default.createElement(Heading, {
7262 element: "p"
7263 }, title));
7264 }
7265
7266 var buttonSizeValue = withinContentContainer ? 'slim' : undefined;
7267 var secondaryActionMarkup = secondaryAction ? secondaryActionFrom(secondaryAction) : null;
7268 var actionMarkup = action ? React__default.createElement("div", {
7269 className: styles$x.Actions
7270 }, React__default.createElement(ButtonGroup, null, React__default.createElement("div", {
7271 className: styles$x.PrimaryAction
7272 }, buttonFrom(action, {
7273 outline: true,
7274 size: buttonSizeValue
7275 })), secondaryActionMarkup)) : null;
7276 var contentMarkup = null;
7277 var contentID;
7278
7279 if (children || actionMarkup) {
7280 contentID = "".concat(id, "Content");
7281 contentMarkup = React__default.createElement("div", {
7282 className: styles$x.Content,
7283 id: contentID
7284 }, children, actionMarkup);
7285 }
7286
7287 var dismissButton = onDismiss ? React__default.createElement("div", {
7288 className: styles$x.Dismiss
7289 }, React__default.createElement(Button, {
7290 plain: true,
7291 icon: CancelSmallMinor,
7292 onClick: onDismiss,
7293 accessibilityLabel: "Dismiss notification"
7294 })) : null;
7295 return React__default.createElement("div", {
7296 className: className // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
7297 ,
7298 tabIndex: 0,
7299 ref: _this2.wrapper,
7300 role: ariaRoleType,
7301 "aria-live": stopAnnouncements ? 'off' : 'polite',
7302 onMouseUp: handleMouseUp,
7303 "aria-labelledby": headingID,
7304 "aria-describedby": contentID
7305 }, dismissButton, React__default.createElement("div", {
7306 className: styles$x.Ribbon
7307 }, React__default.createElement(Icon, {
7308 source: iconName,
7309 color: color,
7310 backdrop: true
7311 })), React__default.createElement("div", null, headingMarkup, contentMarkup));
7312 }));
7313 }
7314 }]);
7315
7316 return Banner;
7317}(React__default.PureComponent);
7318var index = 1;
7319
7320function uniqueID() {
7321 return "Banner".concat(index++);
7322}
7323
7324function handleMouseUp(_ref) {
7325 var currentTarget = _ref.currentTarget;
7326 currentTarget.blur();
7327}
7328
7329function secondaryActionFrom(action) {
7330 if (action.url) {
7331 return React__default.createElement(UnstyledLink, {
7332 className: styles$x.SecondaryAction,
7333 url: action.url,
7334 external: action.external
7335 }, React__default.createElement("span", {
7336 className: styles$x.Text
7337 }, action.content));
7338 }
7339
7340 return React__default.createElement("button", {
7341 className: styles$x.SecondaryAction,
7342 onClick: action.onAction
7343 }, React__default.createElement("span", {
7344 className: styles$x.Text
7345 }, action.content));
7346}
7347
7348var styles$y = {
7349 "Breadcrumb": "Polaris-Breadcrumbs__Breadcrumb",
7350 "Icon": "Polaris-Breadcrumbs__Icon",
7351 "ContentWrapper": "Polaris-Breadcrumbs__ContentWrapper",
7352 "Content": "Polaris-Breadcrumbs__Content"
7353};
7354
7355var Breadcrumbs =
7356/*#__PURE__*/
7357function (_React$PureComponent) {
7358 _inherits(Breadcrumbs, _React$PureComponent);
7359
7360 function Breadcrumbs() {
7361 _classCallCheck(this, Breadcrumbs);
7362
7363 return _possibleConstructorReturn(this, _getPrototypeOf(Breadcrumbs).apply(this, arguments));
7364 }
7365
7366 _createClass(Breadcrumbs, [{
7367 key: "render",
7368 value: function render() {
7369 var breadcrumbs = this.props.breadcrumbs;
7370 var breadcrumb = breadcrumbs[breadcrumbs.length - 1];
7371
7372 if (breadcrumb == null) {
7373 return null;
7374 }
7375
7376 var content = breadcrumb.content;
7377 var contentMarkup = React__default.createElement("span", {
7378 className: styles$y.ContentWrapper
7379 }, React__default.createElement("span", {
7380 className: styles$y.Icon
7381 }, React__default.createElement(Icon, {
7382 source: ChevronLeftMinor
7383 })), React__default.createElement("span", {
7384 className: styles$y.Content
7385 }, content));
7386 var breadcrumbMarkup = 'url' in breadcrumb ? React__default.createElement(UnstyledLink, {
7387 key: content,
7388 url: breadcrumb.url,
7389 className: styles$y.Breadcrumb,
7390 onMouseUp: handleMouseUpByBlurring,
7391 "aria-label": breadcrumb.accessibilityLabel
7392 }, contentMarkup) : React__default.createElement("button", {
7393 key: content,
7394 className: styles$y.Breadcrumb,
7395 onClick: breadcrumb.onAction,
7396 onMouseUp: handleMouseUpByBlurring,
7397 type: "button",
7398 "aria-label": breadcrumb.accessibilityLabel
7399 }, contentMarkup);
7400 return React__default.createElement("nav", {
7401 role: "navigation"
7402 }, breadcrumbMarkup);
7403 }
7404 }]);
7405
7406 return Breadcrumbs;
7407}(React__default.PureComponent);
7408
7409var styles$z = {
7410 "TextContainer": "Polaris-TextContainer",
7411 "spacingTight": "Polaris-TextContainer--spacingTight",
7412 "spacingLoose": "Polaris-TextContainer--spacingLoose"
7413};
7414
7415function TextContainer(_ref) {
7416 var spacing = _ref.spacing,
7417 children = _ref.children;
7418 var className = classNames(styles$z.TextContainer, spacing && styles$z[variationName('spacing', spacing)]);
7419 return React__default.createElement("div", {
7420 className: className
7421 }, children);
7422}
7423
7424var styles$A = {
7425 "CalloutCard": "Polaris-CalloutCard",
7426 "Image": "Polaris-CalloutCard__Image",
7427 "DismissImage": "Polaris-CalloutCard__DismissImage",
7428 "Content": "Polaris-CalloutCard__Content",
7429 "Title": "Polaris-CalloutCard__Title",
7430 "Buttons": "Polaris-CalloutCard__Buttons",
7431 "Container": "Polaris-CalloutCard__Container",
7432 "Dismiss": "Polaris-CalloutCard__Dismiss"
7433};
7434
7435function CalloutCard(_ref) {
7436 var title = _ref.title,
7437 children = _ref.children,
7438 illustration = _ref.illustration,
7439 primaryAction = _ref.primaryAction,
7440 secondaryAction = _ref.secondaryAction,
7441 onDismiss = _ref.onDismiss;
7442 var primaryActionMarkup = buttonFrom(primaryAction);
7443 var secondaryActionMarkup = secondaryAction ? buttonFrom(secondaryAction, {
7444 plain: true
7445 }) : null;
7446 var buttonMarkup = secondaryActionMarkup ? React__default.createElement(ButtonGroup, null, primaryActionMarkup, secondaryActionMarkup) : primaryActionMarkup;
7447 var dismissButton = onDismiss ? React__default.createElement("div", {
7448 className: styles$A.Dismiss
7449 }, React__default.createElement(Button, {
7450 plain: true,
7451 icon: CancelSmallMinor,
7452 onClick: onDismiss,
7453 accessibilityLabel: "Dismiss card"
7454 })) : null;
7455 var imageClassName = classNames(styles$A.Image, onDismiss && styles$A.DismissImage);
7456 return React__default.createElement(Card, null, React__default.createElement("div", {
7457 className: styles$A.Container
7458 }, dismissButton, React__default.createElement(Card.Section, null, React__default.createElement("div", {
7459 className: styles$A.CalloutCard
7460 }, React__default.createElement("div", {
7461 className: styles$A.Content
7462 }, React__default.createElement("div", {
7463 className: styles$A.Title
7464 }, React__default.createElement(Heading, null, title)), React__default.createElement(TextContainer, null, children), React__default.createElement("div", {
7465 className: styles$A.Buttons
7466 }, buttonMarkup)), React__default.createElement(Image, {
7467 alt: "",
7468 className: imageClassName,
7469 source: illustration
7470 })))));
7471}
7472
7473var styles$B = {
7474 "Caption": "Polaris-Caption"
7475};
7476
7477function Caption(_ref) {
7478 var children = _ref.children;
7479 return React__default.createElement("p", {
7480 className: styles$B.Caption
7481 }, children);
7482}
7483
7484var styles$C = {
7485 "Choice": "Polaris-Choice",
7486 "labelHidden": "Polaris-Choice--labelHidden",
7487 "Label": "Polaris-Choice__Label",
7488 "Control": "Polaris-Choice__Control",
7489 "disabled": "Polaris-Choice--disabled",
7490 "Descriptions": "Polaris-Choice__Descriptions",
7491 "HelpText": "Polaris-Choice__HelpText"
7492};
7493
7494function Choice(_ref) {
7495 var id = _ref.id,
7496 label = _ref.label,
7497 disabled = _ref.disabled,
7498 error = _ref.error,
7499 children = _ref.children,
7500 labelHidden = _ref.labelHidden,
7501 helpText = _ref.helpText,
7502 onClick = _ref.onClick;
7503 var className = classNames(styles$C.Choice, labelHidden && styles$C.labelHidden, disabled && styles$C.disabled);
7504 var labelMarkup = React__default.createElement("label", {
7505 className: className,
7506 htmlFor: id,
7507 onClick: onClick
7508 }, React__default.createElement("span", {
7509 className: styles$C.Control
7510 }, children), React__default.createElement("span", {
7511 className: styles$C.Label
7512 }, label));
7513 var helpTextMarkup = helpText ? React__default.createElement("div", {
7514 className: styles$C.HelpText,
7515 id: helpTextID$1(id)
7516 }, helpText) : null;
7517 var errorMarkup = error && typeof error !== 'boolean' && React__default.createElement("div", {
7518 className: styles$C.Error
7519 }, React__default.createElement(InlineError, {
7520 message: error,
7521 fieldID: id
7522 }));
7523 var descriptionMarkup = helpTextMarkup || errorMarkup ? React__default.createElement("div", {
7524 className: styles$C.Descriptions
7525 }, errorMarkup, helpTextMarkup) : null;
7526 return descriptionMarkup ? React__default.createElement("div", null, labelMarkup, descriptionMarkup) : labelMarkup;
7527}
7528function helpTextID$1(id) {
7529 return "".concat(id, "HelpText");
7530}
7531
7532var styles$D = {
7533 "Checkbox": "Polaris-Checkbox",
7534 "error": "Polaris-Checkbox--error",
7535 "Input": "Polaris-Checkbox__Input",
7536 "Backdrop": "Polaris-Checkbox__Backdrop",
7537 "Input-indeterminate": "Polaris-Checkbox__Input--indeterminate",
7538 "Icon": "Polaris-Checkbox__Icon"
7539};
7540
7541var Checkbox$1 = React__default.forwardRef(function Checkbox(_ref, ref) {
7542 var ariaDescribedByProp = _ref.ariaDescribedBy,
7543 label = _ref.label,
7544 labelHidden = _ref.labelHidden,
7545 _ref$checked = _ref.checked,
7546 checked = _ref$checked === void 0 ? false : _ref$checked,
7547 helpText = _ref.helpText,
7548 disabled = _ref.disabled,
7549 idProp = _ref.id,
7550 name = _ref.name,
7551 value = _ref.value,
7552 error = _ref.error,
7553 onChange = _ref.onChange,
7554 onFocus = _ref.onFocus,
7555 onBlur = _ref.onBlur;
7556 var inputNode = useRef(null);
7557 var id = useUniqueId('Checkbox', idProp);
7558 useImperativeHandle(ref, function () {
7559 return {
7560 focus: function focus() {
7561 if (inputNode.current) {
7562 inputNode.current.focus();
7563 }
7564 }
7565 };
7566 });
7567
7568 var handleInput = function handleInput() {
7569 if (onChange == null || inputNode.current == null || disabled) {
7570 return;
7571 }
7572
7573 onChange(!inputNode.current.checked, id);
7574 inputNode.current.focus();
7575 };
7576
7577 var handleKeyUp = function handleKeyUp(event) {
7578 var keyCode = event.keyCode;
7579 if (keyCode !== Key.Space) return;
7580 handleInput();
7581 };
7582
7583 var describedBy = [];
7584
7585 if (error && typeof error !== 'boolean') {
7586 describedBy.push(errorTextID(id));
7587 }
7588
7589 if (helpText) {
7590 describedBy.push(helpTextID$1(id));
7591 }
7592
7593 if (ariaDescribedByProp) {
7594 describedBy.push(ariaDescribedByProp);
7595 }
7596
7597 var ariaDescribedBy = describedBy.length ? describedBy.join(' ') : undefined;
7598 var wrapperClassName = classNames(styles$D.Checkbox, error && styles$D.error);
7599 var isIndeterminate = checked === 'indeterminate';
7600 var isChecked = !isIndeterminate && Boolean(checked);
7601 var indeterminateAttributes = isIndeterminate ? {
7602 indeterminate: 'true',
7603 'aria-checked': 'mixed'
7604 } : {
7605 'aria-checked': isChecked
7606 };
7607 var iconSource = isIndeterminate ? MinusMinor : TickSmallMinor;
7608 var inputClassName = classNames(styles$D.Input, isIndeterminate && styles$D['Input-indeterminate']);
7609 return (
7610 /* eslint-disable jsx-a11y/no-redundant-roles */
7611 React__default.createElement(Choice, {
7612 id: id,
7613 label: label,
7614 labelHidden: labelHidden,
7615 helpText: helpText,
7616 error: error,
7617 disabled: disabled,
7618 onClick: handleInput
7619 }, React__default.createElement("span", {
7620 className: wrapperClassName
7621 }, React__default.createElement("input", Object.assign({
7622 onKeyUp: handleKeyUp,
7623 ref: inputNode,
7624 id: id,
7625 name: name,
7626 value: value,
7627 type: "checkbox",
7628 checked: isChecked,
7629 disabled: disabled,
7630 className: inputClassName,
7631 onFocus: onFocus,
7632 onBlur: onBlur,
7633 onClick: stopPropagation,
7634 onChange: noop$3,
7635 "aria-invalid": error != null,
7636 "aria-describedby": ariaDescribedBy,
7637 role: "checkbox"
7638 }, indeterminateAttributes)), React__default.createElement("span", {
7639 className: styles$D.Backdrop
7640 }), React__default.createElement("span", {
7641 className: styles$D.Icon
7642 }, React__default.createElement(Icon, {
7643 source: iconSource
7644 }))))
7645 /* eslint-enable jsx-a11y/no-redundant-roles */
7646
7647 );
7648});
7649
7650function noop$3() {}
7651
7652function stopPropagation(event) {
7653 event.stopPropagation();
7654}
7655
7656var styles$E = {
7657 "RadioButton": "Polaris-RadioButton",
7658 "Input": "Polaris-RadioButton__Input",
7659 "Backdrop": "Polaris-RadioButton__Backdrop",
7660 "Icon": "Polaris-RadioButton__Icon"
7661};
7662
7663function RadioButton(_ref) {
7664 var ariaDescribedByProp = _ref.ariaDescribedBy,
7665 label = _ref.label,
7666 labelHidden = _ref.labelHidden,
7667 helpText = _ref.helpText,
7668 checked = _ref.checked,
7669 disabled = _ref.disabled,
7670 onChange = _ref.onChange,
7671 onFocus = _ref.onFocus,
7672 onBlur = _ref.onBlur,
7673 idProp = _ref.id,
7674 nameProp = _ref.name,
7675 value = _ref.value;
7676 var id = useUniqueId('RadioButton', idProp);
7677 var name = nameProp || id;
7678
7679 function handleChange(_ref2) {
7680 var currentTarget = _ref2.currentTarget;
7681 onChange && onChange(currentTarget.checked, id);
7682 }
7683
7684 var describedBy = [];
7685
7686 if (helpText) {
7687 describedBy.push(helpTextID$1(id));
7688 }
7689
7690 if (ariaDescribedByProp) {
7691 describedBy.push(ariaDescribedByProp);
7692 }
7693
7694 var ariaDescribedBy = describedBy.length ? describedBy.join(' ') : undefined;
7695 return React__default.createElement(Choice, {
7696 label: label,
7697 labelHidden: labelHidden,
7698 disabled: disabled,
7699 id: id,
7700 helpText: helpText
7701 }, React__default.createElement("span", {
7702 className: styles$E.RadioButton
7703 }, React__default.createElement("input", {
7704 id: id,
7705 name: name,
7706 value: value,
7707 type: "radio",
7708 checked: checked,
7709 disabled: disabled,
7710 className: styles$E.Input,
7711 onChange: handleChange,
7712 onFocus: onFocus,
7713 onBlur: onBlur,
7714 "aria-describedby": ariaDescribedBy
7715 }), React__default.createElement("span", {
7716 className: styles$E.Backdrop
7717 }), React__default.createElement("span", {
7718 className: styles$E.Icon
7719 })));
7720}
7721
7722var styles$F = {
7723 "ChoiceList": "Polaris-ChoiceList",
7724 "titleHidden": "Polaris-ChoiceList--titleHidden",
7725 "Title": "Polaris-ChoiceList__Title",
7726 "Choices": "Polaris-ChoiceList__Choices",
7727 "ChoiceChildren": "Polaris-ChoiceList__ChoiceChildren",
7728 "ChoiceError": "Polaris-ChoiceList__ChoiceError"
7729};
7730
7731function ChoiceList(_ref) {
7732 var title = _ref.title,
7733 titleHidden = _ref.titleHidden,
7734 allowMultiple = _ref.allowMultiple,
7735 choices = _ref.choices,
7736 selected = _ref.selected,
7737 _ref$onChange = _ref.onChange,
7738 onChange = _ref$onChange === void 0 ? noop$4 : _ref$onChange,
7739 error = _ref.error,
7740 _ref$disabled = _ref.disabled,
7741 disabled = _ref$disabled === void 0 ? false : _ref$disabled,
7742 nameProp = _ref.name;
7743 // Type asserting to any is required for TS3.2 but can be removed when we update to 3.3
7744 // see https://github.com/Microsoft/TypeScript/issues/28768
7745 var ControlComponent = allowMultiple ? Checkbox$1 : RadioButton;
7746 var name = useUniqueId('ChoiceList', nameProp);
7747 var finalName = allowMultiple ? "".concat(name, "[]") : name;
7748 var className = classNames(styles$F.ChoiceList, titleHidden && styles$F.titleHidden);
7749 var titleMarkup = title ? React__default.createElement("legend", {
7750 className: styles$F.Title
7751 }, title) : null;
7752 var choicesMarkup = choices.map(function (choice) {
7753 var value = choice.value,
7754 label = choice.label,
7755 helpText = choice.helpText,
7756 choiceDisabled = choice.disabled,
7757 describedByError = choice.describedByError;
7758
7759 function handleChange(checked) {
7760 onChange(updateSelectedChoices(choice, checked, selected, allowMultiple), name);
7761 }
7762
7763 var isSelected = choiceIsSelected(choice, selected);
7764 var renderedChildren = choice.renderChildren ? choice.renderChildren(isSelected) : null;
7765 var children = renderedChildren ? React__default.createElement("div", {
7766 className: styles$F.ChoiceChildren
7767 }, renderedChildren) : null;
7768 return React__default.createElement("li", {
7769 key: value
7770 }, React__default.createElement(ControlComponent, {
7771 name: finalName,
7772 value: value,
7773 label: label,
7774 disabled: choiceDisabled || disabled,
7775 checked: choiceIsSelected(choice, selected),
7776 helpText: helpText,
7777 onChange: handleChange,
7778 ariaDescribedBy: error && describedByError ? errorTextID(finalName) : null
7779 }), children);
7780 });
7781 var errorMarkup = error && React__default.createElement("div", {
7782 className: styles$F.ChoiceError
7783 }, React__default.createElement(InlineError, {
7784 message: error,
7785 fieldID: finalName
7786 }));
7787 return React__default.createElement("fieldset", {
7788 className: className,
7789 id: finalName,
7790 "aria-invalid": error != null
7791 }, titleMarkup, React__default.createElement("ul", {
7792 className: styles$F.Choices
7793 }, choicesMarkup), errorMarkup);
7794}
7795
7796function noop$4() {}
7797
7798function choiceIsSelected(_ref2, selected) {
7799 var value = _ref2.value;
7800 return selected.includes(value);
7801}
7802
7803function updateSelectedChoices(_ref3, checked, selected) {
7804 var value = _ref3.value;
7805 var allowMultiple = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
7806
7807 if (checked) {
7808 return allowMultiple ? [].concat(_toConsumableArray(selected), [value]) : [value];
7809 }
7810
7811 return selected.filter(function (selectedChoice) {
7812 return selectedChoice !== value;
7813 });
7814}
7815
7816var styles$G = {
7817 "Collapsible": "Polaris-Collapsible",
7818 "animating": "Polaris-Collapsible--animating",
7819 "open": "Polaris-Collapsible--open",
7820 "fullyOpen": "Polaris-Collapsible--fullyOpen"
7821};
7822
7823var ParentCollapsibleExpandingContext = createContext(false);
7824
7825var Collapsible =
7826/*#__PURE__*/
7827function (_React$Component) {
7828 _inherits(Collapsible, _React$Component);
7829
7830 function Collapsible() {
7831 var _this;
7832
7833 _classCallCheck(this, Collapsible);
7834
7835 _this = _possibleConstructorReturn(this, _getPrototypeOf(Collapsible).apply(this, arguments));
7836 _this.state = {
7837 height: null,
7838 animationState: 'idle',
7839 // eslint-disable-next-line react/no-unused-state
7840 open: _this.props.open
7841 };
7842 _this.node = createRef();
7843 _this.heightNode = createRef();
7844
7845 _this.handleTransitionEnd = function (event) {
7846 var target = event.target;
7847
7848 if (target === _this.node.current) {
7849 _this.setState({
7850 animationState: 'idle',
7851 height: null
7852 });
7853 }
7854 };
7855
7856 return _this;
7857 }
7858
7859 _createClass(Collapsible, [{
7860 key: "componentDidUpdate",
7861 value: function componentDidUpdate(_ref) {
7862 var _this2 = this;
7863
7864 var wasOpen = _ref.open;
7865 var animationState = this.state.animationState;
7866 var parentCollapsibleExpanding = this.context;
7867
7868 if (parentCollapsibleExpanding && animationState !== 'idle') {
7869 // eslint-disable-next-line react/no-did-update-set-state
7870 this.setState({
7871 animationState: 'idle'
7872 });
7873 return;
7874 }
7875
7876 read(function () {
7877 var heightNode = _this2.heightNode.current;
7878
7879 switch (animationState) {
7880 case 'idle':
7881 break;
7882
7883 case 'measuring':
7884 _this2.setState({
7885 animationState: wasOpen ? 'closingStart' : 'openingStart',
7886 height: wasOpen && heightNode ? heightNode.scrollHeight : 0
7887 });
7888
7889 break;
7890
7891 case 'closingStart':
7892 _this2.setState({
7893 animationState: 'closing',
7894 height: 0
7895 });
7896
7897 break;
7898
7899 case 'openingStart':
7900 _this2.setState({
7901 animationState: 'opening',
7902 height: heightNode ? heightNode.scrollHeight : 0
7903 });
7904
7905 }
7906 });
7907 }
7908 }, {
7909 key: "render",
7910 value: function render() {
7911 var _this$props = this.props,
7912 id = _this$props.id,
7913 open = _this$props.open,
7914 children = _this$props.children;
7915 var _this$state = this.state,
7916 animationState = _this$state.animationState,
7917 height = _this$state.height;
7918 var parentCollapsibleExpanding = this.context;
7919 var animating = animationState !== 'idle';
7920 var wrapperClassName = classNames(styles$G.Collapsible, open && styles$G.open, animating && styles$G.animating, !animating && open && styles$G.fullyOpen);
7921 var displayHeight = collapsibleHeight(open, animationState, height);
7922 var content = animating || open ? children : null;
7923 return React__default.createElement(ParentCollapsibleExpandingContext.Provider, {
7924 value: parentCollapsibleExpanding || open && animationState !== 'idle'
7925 }, React__default.createElement("div", {
7926 id: id,
7927 "aria-hidden": !open,
7928 style: {
7929 maxHeight: displayHeight
7930 },
7931 className: wrapperClassName,
7932 ref: this.node,
7933 onTransitionEnd: this.handleTransitionEnd
7934 }, React__default.createElement("div", {
7935 ref: this.heightNode
7936 }, content)));
7937 }
7938 }], [{
7939 key: "getDerivedStateFromProps",
7940 value: function getDerivedStateFromProps(_ref2, _ref3) {
7941 var willOpen = _ref2.open;
7942 var open = _ref3.open,
7943 prevAnimationState = _ref3.animationState;
7944 var nextAnimationState = prevAnimationState;
7945
7946 if (open !== willOpen) {
7947 nextAnimationState = 'measuring';
7948 }
7949
7950 return {
7951 animationState: nextAnimationState,
7952 open: willOpen
7953 };
7954 }
7955 }]);
7956
7957 return Collapsible;
7958}(React__default.Component);
7959
7960Collapsible.contextType = ParentCollapsibleExpandingContext;
7961
7962function collapsibleHeight(open, animationState, height) {
7963 if (animationState === 'idle' && open) {
7964 return open ? 'none' : undefined;
7965 }
7966
7967 if (animationState === 'measuring') {
7968 return open ? undefined : 'none';
7969 }
7970
7971 return "".concat(height || 0, "px");
7972} // Use named export once we work out why not casting this breaks web
7973
7974var styles$H = {
7975 "ColorPicker": "Polaris-ColorPicker",
7976 "MainColor": "Polaris-ColorPicker__MainColor",
7977 "Dragger": "Polaris-ColorPicker__Dragger",
7978 "ColorLayer": "Polaris-ColorPicker__ColorLayer",
7979 "HuePicker": "Polaris-ColorPicker__HuePicker",
7980 "AlphaPicker": "Polaris-ColorPicker__AlphaPicker",
7981 "Slidable": "Polaris-ColorPicker__Slidable"
7982};
7983
7984var isDragging = false; // Required to solve a bug causing the underlying page/container to scroll
7985// while trying to drag the ColorPicker controls.
7986// This must be called as soon as possible to properly prevent the event.
7987// `passive: false` must also be set, as it seems webkit has changed the "default" behaviour
7988// https://bugs.webkit.org/show_bug.cgi?id=182521
7989
7990if (!isServer) {
7991 window.addEventListener('touchmove', function (event) {
7992 if (!isDragging) {
7993 return;
7994 }
7995
7996 event.preventDefault();
7997 }, {
7998 passive: false
7999 });
8000}
8001
8002var Slidable =
8003/*#__PURE__*/
8004function (_React$PureComponent) {
8005 _inherits(Slidable, _React$PureComponent);
8006
8007 function Slidable() {
8008 var _this;
8009
8010 _classCallCheck(this, Slidable);
8011
8012 _this = _possibleConstructorReturn(this, _getPrototypeOf(Slidable).apply(this, arguments));
8013 _this.state = {
8014 dragging: false
8015 };
8016 _this.node = null;
8017 _this.draggerNode = null;
8018
8019 _this.setDraggerNode = function (node) {
8020 _this.draggerNode = node;
8021 };
8022
8023 _this.setNode = function (node) {
8024 _this.node = node;
8025 };
8026
8027 _this.startDrag = function (event) {
8028 if (event.type === 'mousedown') {
8029 var mouseEvent = event;
8030
8031 _this.handleDraggerMove(mouseEvent.clientX, mouseEvent.clientY);
8032 }
8033
8034 isDragging = true;
8035
8036 _this.setState({
8037 dragging: true
8038 });
8039 };
8040
8041 _this.handleDragEnd = function () {
8042 isDragging = false;
8043
8044 _this.setState({
8045 dragging: false
8046 });
8047 };
8048
8049 _this.handleMove = function (event) {
8050 event.stopImmediatePropagation();
8051 event.stopPropagation();
8052
8053 if (event.cancelable) {
8054 event.preventDefault();
8055 }
8056
8057 if (event.type === 'mousemove') {
8058 var mouseEvent = event;
8059
8060 _this.handleDraggerMove(mouseEvent.clientX, mouseEvent.clientY);
8061
8062 return;
8063 }
8064
8065 var touchEvent = event;
8066
8067 _this.handleDraggerMove(touchEvent.touches[0].clientX, touchEvent.touches[0].clientY);
8068 };
8069
8070 _this.handleDraggerMove = function (x, y) {
8071 if (_this.node == null) {
8072 return;
8073 }
8074
8075 var onChange = _this.props.onChange;
8076
8077 var rect = _this.node.getBoundingClientRect();
8078
8079 var offsetX = x - rect.left;
8080 var offsetY = y - rect.top;
8081 onChange({
8082 x: offsetX,
8083 y: offsetY
8084 });
8085 };
8086
8087 return _this;
8088 }
8089
8090 _createClass(Slidable, [{
8091 key: "componentDidMount",
8092 value: function componentDidMount() {
8093 var onDraggerHeight = this.props.onDraggerHeight;
8094
8095 if (onDraggerHeight == null) {
8096 return;
8097 }
8098
8099 var draggerNode = this.draggerNode;
8100
8101 if (draggerNode == null) {
8102 return;
8103 }
8104
8105 onDraggerHeight(draggerNode.clientWidth);
8106
8107 if (process.env.NODE_ENV === 'development') {
8108 setTimeout(function () {
8109 onDraggerHeight(draggerNode.clientWidth);
8110 }, 0);
8111 }
8112 }
8113 }, {
8114 key: "render",
8115 value: function render() {
8116 var dragging = this.state.dragging;
8117 var _this$props = this.props,
8118 _this$props$draggerX = _this$props.draggerX,
8119 draggerX = _this$props$draggerX === void 0 ? 0 : _this$props$draggerX,
8120 _this$props$draggerY = _this$props.draggerY,
8121 draggerY = _this$props$draggerY === void 0 ? 0 : _this$props$draggerY;
8122 var draggerPositioning = {
8123 transform: "translate3d(".concat(draggerX, "px, ").concat(draggerY, "px, 0)")
8124 };
8125 var moveListener = dragging ? React__default.createElement(EventListener, {
8126 event: "mousemove",
8127 handler: this.handleMove,
8128 passive: false
8129 }) : null;
8130 var touchMoveListener = dragging ? React__default.createElement(EventListener, {
8131 event: "touchmove",
8132 handler: this.handleMove,
8133 passive: false
8134 }) : null;
8135 var endDragListener = dragging ? React__default.createElement(EventListener, {
8136 event: "mouseup",
8137 handler: this.handleDragEnd
8138 }) : null;
8139 var touchEndListener = dragging ? React__default.createElement(EventListener, {
8140 event: "touchend",
8141 handler: this.handleDragEnd
8142 }) : null;
8143 var touchCancelListener = dragging ? React__default.createElement(EventListener, {
8144 event: "touchcancel",
8145 handler: this.handleDragEnd
8146 }) : null;
8147 return React__default.createElement("div", {
8148 ref: this.setNode,
8149 className: styles$H.Slidable,
8150 onMouseDown: this.startDrag,
8151 onTouchStart: this.startDrag
8152 }, endDragListener, moveListener, touchMoveListener, touchEndListener, touchCancelListener, React__default.createElement("div", {
8153 style: draggerPositioning,
8154 className: styles$H.Dragger,
8155 ref: this.setDraggerNode
8156 }));
8157 }
8158 }]);
8159
8160 return Slidable;
8161}(React__default.PureComponent);
8162
8163var VERTICAL_PADDING = 13;
8164function calculateDraggerY(alpha, sliderHeight, draggerHeight) {
8165 var offset = offsetForAlpha(alpha, sliderHeight, draggerHeight);
8166 return clamp$1(offset, 0, sliderHeight);
8167}
8168function alphaForDraggerY(y, sliderHeight) {
8169 var offsetY = clamp$1(y, 0, sliderHeight);
8170 return alphaForOffset(offsetY, sliderHeight);
8171}
8172function alphaForOffset(offset, sliderHeight) {
8173 var selectionHeight = offset - VERTICAL_PADDING;
8174 var slidableArea = sliderHeight - VERTICAL_PADDING * 2;
8175 return clamp$1(1 - selectionHeight / slidableArea, 0, 1);
8176}
8177
8178function offsetForAlpha(alpha, sliderHeight, draggerHeight) {
8179 var slidableArea = sliderHeight - (draggerHeight + VERTICAL_PADDING);
8180 return clamp$1((1 - alpha) * slidableArea + VERTICAL_PADDING, 0, sliderHeight - draggerHeight);
8181}
8182
8183var AlphaPicker =
8184/*#__PURE__*/
8185function (_React$PureComponent) {
8186 _inherits(AlphaPicker, _React$PureComponent);
8187
8188 function AlphaPicker() {
8189 var _this;
8190
8191 _classCallCheck(this, AlphaPicker);
8192
8193 _this = _possibleConstructorReturn(this, _getPrototypeOf(AlphaPicker).apply(this, arguments));
8194 _this.state = {
8195 sliderHeight: 0,
8196 draggerHeight: 0
8197 };
8198
8199 _this.setSliderHeight = function (node) {
8200 if (node == null) {
8201 return;
8202 }
8203
8204 _this.setState({
8205 sliderHeight: node.clientHeight
8206 });
8207
8208 if (process.env.NODE_ENV === 'development') {
8209 setTimeout(function () {
8210 _this.setState({
8211 sliderHeight: node.clientHeight
8212 });
8213 }, 0);
8214 }
8215 };
8216
8217 _this.setDraggerHeight = function (height) {
8218 _this.setState({
8219 draggerHeight: height
8220 });
8221 };
8222
8223 _this.handleChange = function (_ref) {
8224 var y = _ref.y;
8225 var onChange = _this.props.onChange;
8226 var sliderHeight = _this.state.sliderHeight;
8227 var alpha = alphaForDraggerY(y, sliderHeight);
8228 onChange(alpha);
8229 };
8230
8231 return _this;
8232 }
8233
8234 _createClass(AlphaPicker, [{
8235 key: "render",
8236 value: function render() {
8237 var _this$props = this.props,
8238 color = _this$props.color,
8239 alpha = _this$props.alpha;
8240 var _this$state = this.state,
8241 sliderHeight = _this$state.sliderHeight,
8242 draggerHeight = _this$state.draggerHeight;
8243 var draggerY = calculateDraggerY(alpha, sliderHeight, draggerHeight);
8244 var background = alphaGradientForColor(color);
8245 return React__default.createElement("div", {
8246 className: styles$H.AlphaPicker,
8247 ref: this.setSliderHeight
8248 }, React__default.createElement("div", {
8249 className: styles$H.ColorLayer,
8250 style: {
8251 background
8252 }
8253 }), React__default.createElement(Slidable, {
8254 draggerY: draggerY,
8255 draggerX: 0,
8256 onChange: this.handleChange,
8257 onDraggerHeight: this.setDraggerHeight
8258 }));
8259 }
8260 }]);
8261
8262 return AlphaPicker;
8263}(React__default.PureComponent);
8264
8265function alphaGradientForColor(color) {
8266 var _hsbToRgb = hsbToRgb(color),
8267 red = _hsbToRgb.red,
8268 green = _hsbToRgb.green,
8269 blue = _hsbToRgb.blue;
8270
8271 var rgb = "".concat(red, ", ").concat(green, ", ").concat(blue);
8272 return "linear-gradient(to top, rgba(".concat(rgb, ", 0) 18px, rgba(").concat(rgb, ", 1) calc(100% - 18px))");
8273}
8274
8275var VERTICAL_PADDING$1 = 13;
8276function calculateDraggerY$1(hue, sliderHeight, draggerHeight) {
8277 var offset = offsetForHue(hue, sliderHeight, draggerHeight);
8278 return clamp$1(offset, 0, sliderHeight);
8279}
8280function hueForDraggerY(y, sliderHeight) {
8281 var offsetY = clamp$1(y, 0, sliderHeight);
8282 return hueForOffset(offsetY, sliderHeight);
8283}
8284
8285function hueForOffset(offset, sliderHeight) {
8286 var selectionHeight = offset - VERTICAL_PADDING$1;
8287 var slidableArea = sliderHeight - VERTICAL_PADDING$1 * 2;
8288 return clamp$1(selectionHeight / slidableArea * 360, 0, 360);
8289}
8290
8291function offsetForHue(hue, sliderHeight, draggerHeight) {
8292 var slidableArea = sliderHeight - (draggerHeight + VERTICAL_PADDING$1);
8293 return clamp$1(hue / 360 * slidableArea + VERTICAL_PADDING$1, 0, sliderHeight - draggerHeight);
8294}
8295
8296var HuePicker =
8297/*#__PURE__*/
8298function (_React$PureComponent) {
8299 _inherits(HuePicker, _React$PureComponent);
8300
8301 function HuePicker() {
8302 var _this;
8303
8304 _classCallCheck(this, HuePicker);
8305
8306 _this = _possibleConstructorReturn(this, _getPrototypeOf(HuePicker).apply(this, arguments));
8307 _this.state = {
8308 sliderHeight: 0,
8309 draggerHeight: 0
8310 };
8311
8312 _this.setSliderHeight = function (node) {
8313 if (node == null) {
8314 return;
8315 }
8316
8317 _this.setState({
8318 sliderHeight: node.clientHeight
8319 });
8320
8321 if (process.env.NODE_ENV === 'development') {
8322 setTimeout(function () {
8323 _this.setState({
8324 sliderHeight: node.clientHeight
8325 });
8326 }, 0);
8327 }
8328 };
8329
8330 _this.setDraggerHeight = function (height) {
8331 _this.setState({
8332 draggerHeight: height
8333 });
8334 };
8335
8336 _this.handleChange = function (_ref) {
8337 var y = _ref.y;
8338 var onChange = _this.props.onChange;
8339 var sliderHeight = _this.state.sliderHeight;
8340 var hue = hueForDraggerY(y, sliderHeight);
8341 onChange(hue);
8342 };
8343
8344 return _this;
8345 }
8346
8347 _createClass(HuePicker, [{
8348 key: "render",
8349 value: function render() {
8350 var hue = this.props.hue;
8351 var _this$state = this.state,
8352 sliderHeight = _this$state.sliderHeight,
8353 draggerHeight = _this$state.draggerHeight;
8354 var draggerY = calculateDraggerY$1(hue, sliderHeight, draggerHeight);
8355 return React__default.createElement("div", {
8356 className: styles$H.HuePicker,
8357 ref: this.setSliderHeight
8358 }, React__default.createElement(Slidable, {
8359 draggerY: draggerY,
8360 draggerX: 0,
8361 onChange: this.handleChange,
8362 onDraggerHeight: this.setDraggerHeight
8363 }));
8364 }
8365 }]);
8366
8367 return HuePicker;
8368}(React__default.PureComponent);
8369
8370var ColorPicker =
8371/*#__PURE__*/
8372function (_React$PureComponent) {
8373 _inherits(ColorPicker, _React$PureComponent);
8374
8375 function ColorPicker() {
8376 var _this;
8377
8378 _classCallCheck(this, ColorPicker);
8379
8380 _this = _possibleConstructorReturn(this, _getPrototypeOf(ColorPicker).apply(this, arguments));
8381 _this.state = {
8382 pickerSize: 0
8383 };
8384 _this.colorNode = null;
8385
8386 _this.setColorNode = function (node) {
8387 _this.colorNode = node;
8388 };
8389
8390 _this.handleHueChange = function (hue) {
8391 var _this$props = _this.props,
8392 _this$props$color = _this$props.color,
8393 brightness = _this$props$color.brightness,
8394 saturation = _this$props$color.saturation,
8395 _this$props$color$alp = _this$props$color.alpha,
8396 alpha = _this$props$color$alp === void 0 ? 1 : _this$props$color$alp,
8397 onChange = _this$props.onChange;
8398 onChange({
8399 hue,
8400 brightness,
8401 saturation,
8402 alpha
8403 });
8404 };
8405
8406 _this.handleAlphaChange = function (alpha) {
8407 var _this$props2 = _this.props,
8408 _this$props2$color = _this$props2.color,
8409 hue = _this$props2$color.hue,
8410 brightness = _this$props2$color.brightness,
8411 saturation = _this$props2$color.saturation,
8412 onChange = _this$props2.onChange;
8413 onChange({
8414 hue,
8415 brightness,
8416 saturation,
8417 alpha
8418 });
8419 };
8420
8421 _this.handleDraggerMove = function (_ref) {
8422 var x = _ref.x,
8423 y = _ref.y;
8424 var pickerSize = _this.state.pickerSize;
8425 var _this$props3 = _this.props,
8426 _this$props3$color = _this$props3.color,
8427 hue = _this$props3$color.hue,
8428 _this$props3$color$al = _this$props3$color.alpha,
8429 alpha = _this$props3$color$al === void 0 ? 1 : _this$props3$color$al,
8430 onChange = _this$props3.onChange;
8431 var saturation = clamp$1(x / pickerSize, 0, 1);
8432 var brightness = clamp$1(1 - y / pickerSize, 0, 1);
8433 onChange({
8434 hue,
8435 saturation,
8436 brightness,
8437 alpha
8438 });
8439 };
8440
8441 _this.handlePickerDrag = function (event) {
8442 // prevents external elements from being selected
8443 event.preventDefault();
8444 };
8445
8446 return _this;
8447 }
8448
8449 _createClass(ColorPicker, [{
8450 key: "componentDidMount",
8451 value: function componentDidMount() {
8452 var _this2 = this;
8453
8454 var colorNode = this.colorNode;
8455
8456 if (colorNode == null) {
8457 return;
8458 }
8459
8460 this.setState({
8461 pickerSize: colorNode.clientWidth
8462 });
8463
8464 if (process.env.NODE_ENV === 'development') {
8465 setTimeout(function () {
8466 _this2.setState({
8467 pickerSize: colorNode.clientWidth
8468 });
8469 }, 0);
8470 }
8471 }
8472 }, {
8473 key: "render",
8474 value: function render() {
8475 var _this$props4 = this.props,
8476 id = _this$props4.id,
8477 color = _this$props4.color,
8478 allowAlpha = _this$props4.allowAlpha;
8479 var hue = color.hue,
8480 saturation = color.saturation,
8481 brightness = color.brightness,
8482 providedAlpha = color.alpha;
8483 var pickerSize = this.state.pickerSize;
8484 var alpha = providedAlpha != null && allowAlpha ? providedAlpha : 1;
8485
8486 var _hsbToRgb = hsbToRgb({
8487 hue,
8488 saturation: 1,
8489 brightness: 1
8490 }),
8491 red = _hsbToRgb.red,
8492 green = _hsbToRgb.green,
8493 blue = _hsbToRgb.blue;
8494
8495 var colorString = "rgba(".concat(red, ", ").concat(green, ", ").concat(blue, ", ").concat(alpha, ")");
8496 var draggerX = clamp$1(saturation * pickerSize, 0, pickerSize);
8497 var draggerY = clamp$1(pickerSize - brightness * pickerSize, 0, pickerSize);
8498 var alphaSliderMarkup = allowAlpha ? React__default.createElement(AlphaPicker, {
8499 alpha: alpha,
8500 color: color,
8501 onChange: this.handleAlphaChange
8502 }) : null;
8503 return React__default.createElement("div", {
8504 className: styles$H.ColorPicker,
8505 id: id,
8506 onMouseDown: this.handlePickerDrag
8507 }, React__default.createElement("div", {
8508 ref: this.setColorNode,
8509 className: styles$H.MainColor
8510 }, React__default.createElement("div", {
8511 className: styles$H.ColorLayer,
8512 style: {
8513 backgroundColor: colorString
8514 }
8515 }), React__default.createElement(Slidable, {
8516 onChange: this.handleDraggerMove,
8517 draggerX: draggerX,
8518 draggerY: draggerY
8519 })), React__default.createElement(HuePicker, {
8520 hue: hue,
8521 onChange: this.handleHueChange
8522 }), alphaSliderMarkup);
8523 }
8524 }]);
8525
8526 return ColorPicker;
8527}(React__default.PureComponent);
8528
8529var FrameContext = React__default.createContext(undefined);
8530
8531var defaultFrame = {
8532 showToast: noop$5,
8533 hideToast: noop$5,
8534 setContextualSaveBar: noop$5,
8535 removeContextualSaveBar: noop$5,
8536 startLoading: noop$5,
8537 stopLoading: noop$5
8538};
8539function useFrame() {
8540 var frame = useContext(FrameContext);
8541 var appBridge = useAppBridge();
8542
8543 if (!frame && !appBridge) {
8544 throw new Error('No Frame context was provided. Your component must be wrapped in a <Frame> component, or be used within an embedded application by setting the apiKey and shopOrigin properties on <AppProvider>. See https://polaris.shopify.com/components/structure/frame for implementation instructions.');
8545 } // This makes sure the useFrame hook always returns a FrameContext object, never undefined
8546
8547
8548 if (appBridge || !frame) {
8549 return defaultFrame;
8550 }
8551
8552 return frame;
8553}
8554
8555function noop$5() {}
8556
8557var ContextualSaveBar = React__default.memo(function ContextualSaveBar(_ref) {
8558 var message = _ref.message,
8559 saveAction = _ref.saveAction,
8560 discardAction = _ref.discardAction,
8561 alignContentFlush = _ref.alignContentFlush;
8562
8563 var _useFrame = useFrame(),
8564 setContextualSaveBar = _useFrame.setContextualSaveBar,
8565 removeContextualSaveBar = _useFrame.removeContextualSaveBar;
8566
8567 React__default.useEffect(function () {
8568 setContextualSaveBar({
8569 message,
8570 saveAction,
8571 discardAction,
8572 alignContentFlush
8573 });
8574 }, [message, saveAction, discardAction, alignContentFlush, setContextualSaveBar]);
8575 React__default.useEffect(function () {
8576 return removeContextualSaveBar;
8577 }, [removeContextualSaveBar]);
8578 return null;
8579});
8580
8581function withAppProvider() {
8582 return function addProvider(WrappedComponent) {
8583 var WithAppProvider = function WithAppProvider(props) {
8584 var polaris = {
8585 intl: useI18n(),
8586 stickyManager: useStickyManager(),
8587 appBridge: useAppBridge(),
8588 mediaQuery: useMediaQuery()
8589 };
8590 return React__default.createElement(WrappedComponent, Object.assign({}, props, {
8591 polaris: polaris
8592 }));
8593 };
8594
8595 WithAppProvider.displayName = "WithAppProvider(".concat(getDisplayName(WrappedComponent), ")");
8596 var FinalComponent = hoistStatics(WithAppProvider, WrappedComponent);
8597 return FinalComponent;
8598 };
8599}
8600
8601function getDisplayName(WrappedComponent) {
8602 return WrappedComponent.displayName || WrappedComponent.name || 'Component';
8603}
8604
8605var styles$I = {
8606 "DataTable": "Polaris-DataTable",
8607 "condensed": "Polaris-DataTable--condensed",
8608 "Navigation": "Polaris-DataTable__Navigation",
8609 "Pip": "Polaris-DataTable__Pip",
8610 "Pip-visible": "Polaris-DataTable__Pip--visible",
8611 "ScrollContainer": "Polaris-DataTable__ScrollContainer",
8612 "Table": "Polaris-DataTable__Table",
8613 "TableRow": "Polaris-DataTable__TableRow",
8614 "Cell": "Polaris-DataTable__Cell",
8615 "Cell-firstColumn": "Polaris-DataTable__Cell--firstColumn",
8616 "Cell-numeric": "Polaris-DataTable__Cell--numeric",
8617 "Cell-truncated": "Polaris-DataTable__Cell--truncated",
8618 "Cell-header": "Polaris-DataTable__Cell--header",
8619 "Cell-sortable": "Polaris-DataTable__Cell--sortable",
8620 "Cell-verticalAlignTop": "Polaris-DataTable__Cell--verticalAlignTop",
8621 "Cell-verticalAlignBottom": "Polaris-DataTable__Cell--verticalAlignBottom",
8622 "Cell-verticalAlignMiddle": "Polaris-DataTable__Cell--verticalAlignMiddle",
8623 "Cell-verticalAlignBaseline": "Polaris-DataTable__Cell--verticalAlignBaseline",
8624 "Icon": "Polaris-DataTable__Icon",
8625 "Heading": "Polaris-DataTable__Heading",
8626 "Heading-left": "Polaris-DataTable__Heading--left",
8627 "Cell-sorted": "Polaris-DataTable__Cell--sorted",
8628 "Cell-total": "Polaris-DataTable__Cell--total",
8629 "Cell-total-footer": "Polaris-DataTable--cellTotalFooter",
8630 "Footer": "Polaris-DataTable__Footer"
8631};
8632
8633function Cell(_ref) {
8634 var content = _ref.content,
8635 contentType = _ref.contentType,
8636 firstColumn = _ref.firstColumn,
8637 truncate = _ref.truncate,
8638 header = _ref.header,
8639 total = _ref.total,
8640 totalInFooter = _ref.totalInFooter,
8641 sorted = _ref.sorted,
8642 sortable = _ref.sortable,
8643 sortDirection = _ref.sortDirection,
8644 _ref$verticalAlign = _ref.verticalAlign,
8645 verticalAlign = _ref$verticalAlign === void 0 ? 'top' : _ref$verticalAlign,
8646 _ref$defaultSortDirec = _ref.defaultSortDirection,
8647 defaultSortDirection = _ref$defaultSortDirec === void 0 ? 'ascending' : _ref$defaultSortDirec,
8648 onSort = _ref.onSort;
8649 var i18n = useI18n();
8650 var numeric = contentType === 'numeric';
8651 var className = classNames(styles$I.Cell, styles$I["Cell-".concat(variationName('verticalAlign', verticalAlign))], firstColumn && styles$I['Cell-firstColumn'], firstColumn && truncate && styles$I['Cell-truncated'], header && styles$I['Cell-header'], total && styles$I['Cell-total'], totalInFooter && styles$I['Cell-total-footer'], numeric && styles$I['Cell-numeric'], sortable && styles$I['Cell-sortable'], sorted && styles$I['Cell-sorted']);
8652 var headerClassName = classNames(header && styles$I.Heading, header && contentType === 'text' && styles$I['Heading-left']);
8653 var iconClassName = classNames(sortable && styles$I.Icon);
8654 var direction = sorted ? sortDirection : defaultSortDirection;
8655 var source = direction === 'descending' ? CaretDownMinor : CaretUpMinor;
8656 var oppositeDirection = sortDirection === 'ascending' ? 'descending' : 'ascending';
8657 var sortAccessibilityLabel = i18n.translate('Polaris.DataTable.sortAccessibilityLabel', {
8658 direction: sorted ? oppositeDirection : direction
8659 });
8660 var iconMarkup = React__default.createElement("span", {
8661 className: iconClassName
8662 }, React__default.createElement(Icon, {
8663 source: source,
8664 accessibilityLabel: sortAccessibilityLabel
8665 }));
8666 var sortableHeadingContent = React__default.createElement("button", {
8667 className: headerClassName,
8668 onClick: onSort
8669 }, iconMarkup, content);
8670 var columnHeadingContent = sortable ? sortableHeadingContent : content;
8671 var headingMarkup = header ? React__default.createElement("th", Object.assign({}, headerCell.props, {
8672 className: className,
8673 scope: "col",
8674 "aria-sort": sortDirection
8675 }), columnHeadingContent) : React__default.createElement("th", {
8676 className: className,
8677 scope: "row"
8678 }, content);
8679 var cellMarkup = header || firstColumn ? headingMarkup : React__default.createElement("td", {
8680 className: className
8681 }, content);
8682 return cellMarkup;
8683}
8684
8685function Navigation(_ref) {
8686 var columnVisibilityData = _ref.columnVisibilityData,
8687 isScrolledFarthestLeft = _ref.isScrolledFarthestLeft,
8688 isScrolledFarthestRight = _ref.isScrolledFarthestRight,
8689 navigateTableLeft = _ref.navigateTableLeft,
8690 navigateTableRight = _ref.navigateTableRight;
8691 var i18n = useI18n();
8692 var pipMarkup = columnVisibilityData.map(function (column, index) {
8693 var className = classNames(styles$I.Pip, column.isVisible && styles$I['Pip-visible']);
8694 return React__default.createElement("div", {
8695 className: className,
8696 key: "pip-".concat(index)
8697 });
8698 });
8699 var leftA11yLabel = i18n.translate('Polaris.DataTable.navAccessibilityLabel', {
8700 direction: 'left'
8701 });
8702 var rightA11yLabel = i18n.translate('Polaris.DataTable.navAccessibilityLabel', {
8703 direction: 'right'
8704 });
8705 return React__default.createElement("div", {
8706 className: styles$I.Navigation
8707 }, React__default.createElement(Button, {
8708 plain: true,
8709 icon: ChevronLeftMinor,
8710 disabled: isScrolledFarthestLeft,
8711 accessibilityLabel: leftA11yLabel,
8712 onClick: navigateTableLeft
8713 }), pipMarkup, React__default.createElement(Button, {
8714 plain: true,
8715 icon: ChevronRightMinor,
8716 disabled: isScrolledFarthestRight,
8717 accessibilityLabel: rightA11yLabel,
8718 onClick: navigateTableRight
8719 }));
8720}
8721
8722function measureColumn(tableData) {
8723 return function (column, index) {
8724 var firstVisibleColumnIndex = tableData.firstVisibleColumnIndex,
8725 tableStart = tableData.tableLeftVisibleEdge,
8726 tableEnd = tableData.tableRightVisibleEdge;
8727 var leftEdge = column.offsetLeft;
8728 var rightEdge = leftEdge + column.offsetWidth;
8729 var isVisibleLeft = isEdgeVisible(leftEdge, tableStart, tableEnd);
8730 var isVisibleRight = isEdgeVisible(rightEdge, tableStart, tableEnd);
8731 var isVisible = isVisibleLeft || isVisibleRight;
8732
8733 if (isVisible) {
8734 tableData.firstVisibleColumnIndex = Math.min(firstVisibleColumnIndex, index);
8735 }
8736
8737 return {
8738 leftEdge,
8739 rightEdge,
8740 isVisible
8741 };
8742 };
8743}
8744function isEdgeVisible(position, start, end) {
8745 var minVisiblePixels = 30;
8746 return position >= start + minVisiblePixels && position <= end - minVisiblePixels;
8747}
8748function getPrevAndCurrentColumns(tableData, columnData) {
8749 var firstVisibleColumnIndex = tableData.firstVisibleColumnIndex;
8750 var previousColumnIndex = Math.max(firstVisibleColumnIndex - 1, 0);
8751 var previousColumn = columnData[previousColumnIndex];
8752 var currentColumn = columnData[firstVisibleColumnIndex];
8753 return {
8754 previousColumn,
8755 currentColumn
8756 };
8757}
8758
8759var DataTable =
8760/*#__PURE__*/
8761function (_React$PureComponent) {
8762 _inherits(DataTable, _React$PureComponent);
8763
8764 function DataTable(props) {
8765 var _this;
8766
8767 _classCallCheck(this, DataTable);
8768
8769 _this = _possibleConstructorReturn(this, _getPrototypeOf(DataTable).call(this, props));
8770 _this.state = {
8771 condensed: false,
8772 columnVisibilityData: [],
8773 isScrolledFarthestLeft: true,
8774 isScrolledFarthestRight: false
8775 };
8776 _this.dataTable = React__default.createRef();
8777 _this.scrollContainer = React__default.createRef();
8778 _this.table = React__default.createRef();
8779 _this.handleResize = debounce(function () {
8780 var _assertThisInitialize = _assertThisInitialized(_this),
8781 table = _assertThisInitialize.table.current,
8782 scrollContainer = _assertThisInitialize.scrollContainer.current;
8783
8784 var condensed = false;
8785
8786 if (table && scrollContainer) {
8787 condensed = table.scrollWidth > scrollContainer.clientWidth;
8788 }
8789
8790 _this.setState(Object.assign({
8791 condensed
8792 }, _this.calculateColumnVisibilityData(condensed)));
8793 });
8794
8795 _this.calculateColumnVisibilityData = function (condensed) {
8796 var _assertThisInitialize2 = _assertThisInitialized(_this),
8797 table = _assertThisInitialize2.table.current,
8798 scrollContainer = _assertThisInitialize2.scrollContainer.current,
8799 dataTable = _assertThisInitialize2.dataTable.current;
8800
8801 if (condensed && table && scrollContainer && dataTable) {
8802 var headerCells = table.querySelectorAll(headerCell.selector);
8803 var firstVisibleColumnIndex = headerCells.length - 1;
8804 var tableLeftVisibleEdge = scrollContainer.scrollLeft;
8805 var tableRightVisibleEdge = scrollContainer.scrollLeft + dataTable.offsetWidth;
8806 var tableData = {
8807 firstVisibleColumnIndex,
8808 tableLeftVisibleEdge,
8809 tableRightVisibleEdge
8810 };
8811
8812 var columnVisibilityData = _toConsumableArray(headerCells).map(measureColumn(tableData));
8813
8814 var lastColumn = columnVisibilityData[columnVisibilityData.length - 1];
8815 return Object.assign({
8816 columnVisibilityData
8817 }, getPrevAndCurrentColumns(tableData, columnVisibilityData), {
8818 isScrolledFarthestLeft: tableLeftVisibleEdge === 0,
8819 isScrolledFarthestRight: lastColumn.rightEdge <= tableRightVisibleEdge
8820 });
8821 }
8822
8823 return {
8824 columnVisibilityData: [],
8825 previousColumn: undefined,
8826 currentColumn: undefined
8827 };
8828 };
8829
8830 _this.scrollListener = function () {
8831 _this.setState(function (prevState) {
8832 return Object.assign({}, _this.calculateColumnVisibilityData(prevState.condensed));
8833 });
8834 };
8835
8836 _this.navigateTable = function (direction) {
8837 var _this$state = _this.state,
8838 currentColumn = _this$state.currentColumn,
8839 previousColumn = _this$state.previousColumn;
8840 var scrollContainer = _this.scrollContainer.current;
8841
8842 var handleScroll = function handleScroll() {
8843 if (!currentColumn || !previousColumn) {
8844 return;
8845 }
8846
8847 if (scrollContainer) {
8848 scrollContainer.scrollLeft = direction === 'right' ? currentColumn.rightEdge : previousColumn.leftEdge;
8849 requestAnimationFrame(function () {
8850 _this.setState(function (prevState) {
8851 return Object.assign({}, _this.calculateColumnVisibilityData(prevState.condensed));
8852 });
8853 });
8854 }
8855 };
8856
8857 return handleScroll;
8858 };
8859
8860 _this.renderHeadings = function (heading, headingIndex) {
8861 var _this$props = _this.props,
8862 sortable = _this$props.sortable,
8863 _this$props$truncate = _this$props.truncate,
8864 truncate = _this$props$truncate === void 0 ? false : _this$props$truncate,
8865 columnContentTypes = _this$props.columnContentTypes,
8866 defaultSortDirection = _this$props.defaultSortDirection,
8867 _this$props$initialSo = _this$props.initialSortColumnIndex,
8868 initialSortColumnIndex = _this$props$initialSo === void 0 ? 0 : _this$props$initialSo,
8869 verticalAlign = _this$props.verticalAlign;
8870 var _this$state2 = _this.state,
8871 _this$state2$sortDire = _this$state2.sortDirection,
8872 sortDirection = _this$state2$sortDire === void 0 ? defaultSortDirection : _this$state2$sortDire,
8873 _this$state2$sortedCo = _this$state2.sortedColumnIndex,
8874 sortedColumnIndex = _this$state2$sortedCo === void 0 ? initialSortColumnIndex : _this$state2$sortedCo;
8875 var sortableHeadingProps;
8876 var id = "heading-cell-".concat(headingIndex);
8877
8878 if (sortable) {
8879 var isSortable = sortable[headingIndex];
8880 var isSorted = isSortable && sortedColumnIndex === headingIndex;
8881 var direction = isSorted ? sortDirection : 'none';
8882 sortableHeadingProps = {
8883 defaultSortDirection,
8884 sorted: isSorted,
8885 sortable: isSortable,
8886 sortDirection: direction,
8887 onSort: _this.defaultOnSort(headingIndex)
8888 };
8889 }
8890
8891 return React__default.createElement(Cell, Object.assign({
8892 header: true,
8893 key: id,
8894 content: heading,
8895 contentType: columnContentTypes[headingIndex],
8896 firstColumn: headingIndex === 0,
8897 truncate: truncate
8898 }, sortableHeadingProps, {
8899 verticalAlign: verticalAlign
8900 }));
8901 };
8902
8903 _this.renderTotals = function (total, index) {
8904 var id = "totals-cell-".concat(index);
8905 var _this$props2 = _this.props,
8906 _this$props2$truncate = _this$props2.truncate,
8907 truncate = _this$props2$truncate === void 0 ? false : _this$props2$truncate,
8908 verticalAlign = _this$props2.verticalAlign;
8909 var content;
8910 var contentType;
8911
8912 if (index === 0) {
8913 content = _this.totalsRowHeading;
8914 }
8915
8916 if (total !== '' && index > 0) {
8917 contentType = 'numeric';
8918 content = total;
8919 }
8920
8921 var totalInFooter = _this.props.showTotalsInFooter;
8922 return React__default.createElement(Cell, {
8923 total: true,
8924 totalInFooter: totalInFooter,
8925 firstColumn: index === 0,
8926 key: id,
8927 content: content,
8928 contentType: contentType,
8929 truncate: truncate,
8930 verticalAlign: verticalAlign
8931 });
8932 };
8933
8934 _this.defaultRenderRow = function (row, index) {
8935 var className = classNames(styles$I.TableRow);
8936 var _this$props3 = _this.props,
8937 columnContentTypes = _this$props3.columnContentTypes,
8938 _this$props3$truncate = _this$props3.truncate,
8939 truncate = _this$props3$truncate === void 0 ? false : _this$props3$truncate,
8940 verticalAlign = _this$props3.verticalAlign;
8941 return React__default.createElement("tr", {
8942 key: "row-".concat(index),
8943 className: className
8944 }, row.map(function (content, cellIndex) {
8945 var id = "cell-".concat(cellIndex, "-row-").concat(index);
8946 return React__default.createElement(Cell, {
8947 key: id,
8948 content: content,
8949 contentType: columnContentTypes[cellIndex],
8950 firstColumn: cellIndex === 0,
8951 truncate: truncate,
8952 verticalAlign: verticalAlign
8953 });
8954 }));
8955 };
8956
8957 _this.defaultOnSort = function (headingIndex) {
8958 var _this$props4 = _this.props,
8959 onSort = _this$props4.onSort,
8960 _this$props4$defaultS = _this$props4.defaultSortDirection,
8961 defaultSortDirection = _this$props4$defaultS === void 0 ? 'ascending' : _this$props4$defaultS,
8962 initialSortColumnIndex = _this$props4.initialSortColumnIndex;
8963 var _this$state3 = _this.state,
8964 _this$state3$sortDire = _this$state3.sortDirection,
8965 sortDirection = _this$state3$sortDire === void 0 ? defaultSortDirection : _this$state3$sortDire,
8966 _this$state3$sortedCo = _this$state3.sortedColumnIndex,
8967 sortedColumnIndex = _this$state3$sortedCo === void 0 ? initialSortColumnIndex : _this$state3$sortedCo;
8968 var newSortDirection = defaultSortDirection;
8969
8970 if (sortedColumnIndex === headingIndex) {
8971 newSortDirection = sortDirection === 'ascending' ? 'descending' : 'ascending';
8972 }
8973
8974 var handleSort = function handleSort() {
8975 _this.setState({
8976 sortDirection: newSortDirection,
8977 sortedColumnIndex: headingIndex
8978 }, function () {
8979 if (onSort) {
8980 onSort(headingIndex, newSortDirection);
8981 }
8982 });
8983 };
8984
8985 return handleSort;
8986 };
8987
8988 var intl = props.polaris.intl;
8989 _this.totalsRowHeading = intl.translate('Polaris.DataTable.totalsRowHeading');
8990 return _this;
8991 }
8992
8993 _createClass(DataTable, [{
8994 key: "componentDidMount",
8995 value: function componentDidMount() {
8996 var _this2 = this;
8997
8998 // We need to defer the calculation in development so the styles have time to be injected.
8999 if (process.env.NODE_ENV === 'development') {
9000 setTimeout(function () {
9001 _this2.handleResize();
9002 }, 10);
9003 } else {
9004 this.handleResize();
9005 }
9006 }
9007 }, {
9008 key: "componentDidUpdate",
9009 value: function componentDidUpdate(prevProps) {
9010 if (isEqual(prevProps, this.props)) {
9011 return;
9012 }
9013
9014 this.handleResize();
9015 }
9016 }, {
9017 key: "render",
9018 value: function render() {
9019 var _this$props5 = this.props,
9020 headings = _this$props5.headings,
9021 totals = _this$props5.totals,
9022 showTotalsInFooter = _this$props5.showTotalsInFooter,
9023 rows = _this$props5.rows,
9024 footerContent = _this$props5.footerContent;
9025 var _this$state4 = this.state,
9026 condensed = _this$state4.condensed,
9027 columnVisibilityData = _this$state4.columnVisibilityData,
9028 isScrolledFarthestLeft = _this$state4.isScrolledFarthestLeft,
9029 isScrolledFarthestRight = _this$state4.isScrolledFarthestRight;
9030 var className = classNames(styles$I.DataTable, condensed && styles$I.condensed);
9031 var wrapperClassName = classNames(styles$I.TableWrapper, condensed && styles$I.condensed);
9032 var headingMarkup = React__default.createElement("tr", null, headings.map(this.renderHeadings));
9033 var totalsMarkup = totals ? React__default.createElement("tr", null, totals.map(this.renderTotals)) : null;
9034 var bodyMarkup = rows.map(this.defaultRenderRow);
9035 var footerMarkup = footerContent ? React__default.createElement("div", {
9036 className: styles$I.Footer
9037 }, footerContent) : null;
9038 var headerTotalsMarkup = !showTotalsInFooter ? totalsMarkup : null;
9039 var footerTotalsMarkup = showTotalsInFooter ? React__default.createElement("tfoot", null, totalsMarkup) : null;
9040 return React__default.createElement("div", {
9041 className: wrapperClassName
9042 }, React__default.createElement(Navigation, {
9043 columnVisibilityData: columnVisibilityData,
9044 isScrolledFarthestLeft: isScrolledFarthestLeft,
9045 isScrolledFarthestRight: isScrolledFarthestRight,
9046 navigateTableLeft: this.navigateTable('left'),
9047 navigateTableRight: this.navigateTable('right')
9048 }), React__default.createElement("div", {
9049 className: className,
9050 ref: this.dataTable
9051 }, React__default.createElement("div", {
9052 className: styles$I.ScrollContainer,
9053 ref: this.scrollContainer
9054 }, React__default.createElement(EventListener, {
9055 event: "resize",
9056 handler: this.handleResize
9057 }), React__default.createElement(EventListener, {
9058 capture: true,
9059 event: "scroll",
9060 handler: this.scrollListener
9061 }), React__default.createElement("table", {
9062 className: styles$I.Table,
9063 ref: this.table
9064 }, React__default.createElement("thead", null, headingMarkup, headerTotalsMarkup), React__default.createElement("tbody", null, bodyMarkup), footerTotalsMarkup)), footerMarkup));
9065 }
9066 }]);
9067
9068 return DataTable;
9069}(React__default.PureComponent); // Use named export once withAppProvider is refactored away
9070// eslint-disable-next-line import/no-default-export
9071
9072
9073var DataTable$1 = withAppProvider()(DataTable);
9074
9075function monthName(month) {
9076 switch (month) {
9077 case 0:
9078 return 'january';
9079
9080 case 1:
9081 return 'february';
9082
9083 case 2:
9084 return 'march';
9085
9086 case 3:
9087 return 'april';
9088
9089 case 4:
9090 return 'may';
9091
9092 case 5:
9093 return 'june';
9094
9095 case 6:
9096 return 'july';
9097
9098 case 7:
9099 return 'august';
9100
9101 case 8:
9102 return 'september';
9103
9104 case 9:
9105 return 'october';
9106
9107 case 10:
9108 return 'november';
9109
9110 case 11:
9111 return 'december';
9112 }
9113}
9114function weekdayName(weekday) {
9115 switch (weekday) {
9116 case 0:
9117 return 'sunday';
9118
9119 case 1:
9120 return 'monday';
9121
9122 case 2:
9123 return 'tuesday';
9124
9125 case 3:
9126 return 'wednesday';
9127
9128 case 4:
9129 return 'thursday';
9130
9131 case 5:
9132 return 'friday';
9133
9134 case 6:
9135 return 'saturday';
9136 }
9137}
9138
9139var styles$J = {
9140 "DatePicker": "Polaris-DatePicker",
9141 "MonthContainer": "Polaris-DatePicker__MonthContainer",
9142 "Month": "Polaris-DatePicker__Month",
9143 "Month-current": "Polaris-DatePicker__Month--current",
9144 "Week": "Polaris-DatePicker__Week",
9145 "WeekHeadings": "Polaris-DatePicker__WeekHeadings",
9146 "Day": "Polaris-DatePicker__Day",
9147 "EmptyDay": "Polaris-DatePicker__EmptyDay",
9148 "Day-today": "Polaris-DatePicker__Day--today",
9149 "Day-inRange": "Polaris-DatePicker__Day--inRange",
9150 "Day-selected": "Polaris-DatePicker__Day--selected",
9151 "Day-disabled": "Polaris-DatePicker__Day--disabled",
9152 "Weekday": "Polaris-DatePicker__Weekday",
9153 "Weekday-current": "Polaris-DatePicker__Weekday--current",
9154 "Header": "Polaris-DatePicker__Header",
9155 "Title": "Polaris-DatePicker__Title"
9156};
9157
9158function Day(_ref) {
9159 var day = _ref.day,
9160 focused = _ref.focused,
9161 onClick = _ref.onClick,
9162 _ref$onHover = _ref.onHover,
9163 onHover = _ref$onHover === void 0 ? noop$6 : _ref$onHover,
9164 _ref$onFocus = _ref.onFocus,
9165 _onFocus = _ref$onFocus === void 0 ? noop$6 : _ref$onFocus,
9166 selected = _ref.selected,
9167 inRange = _ref.inRange,
9168 inHoveringRange = _ref.inHoveringRange,
9169 disabled = _ref.disabled;
9170
9171 var i18n = useI18n();
9172 var dayNode = useRef(null);
9173 useEffect(function () {
9174 if (focused && dayNode.current) {
9175 dayNode.current.focus();
9176 }
9177 }, [focused]);
9178
9179 if (!day) {
9180 return React__default.createElement("div", {
9181 className: styles$J.EmptyDay,
9182 onMouseOver: function onMouseOver() {
9183 return onHover(day);
9184 }
9185 });
9186 }
9187
9188 var handleClick = onClick && !disabled ? onClick.bind(null, day) : noop$6;
9189 var today = isSameDay(new Date(), day);
9190 var className = classNames(styles$J.Day, selected && styles$J['Day-selected'], disabled && styles$J['Day-disabled'], today && styles$J['Day-today'], (inRange || inHoveringRange) && !disabled && styles$J['Day-inRange']);
9191 var date = day.getDate();
9192 var tabIndex = (focused || selected || today || date === 1) && !disabled ? 0 : -1;
9193 var ariaLabel = ["".concat(today ? i18n.translate('Polaris.DatePicker.today') : ''), "".concat(Months[day.getMonth()], " "), "".concat(date, " "), "".concat(day.getFullYear())].join('');
9194 return React__default.createElement("button", {
9195 onFocus: function onFocus() {
9196 return _onFocus(day);
9197 },
9198 type: "button",
9199 ref: dayNode,
9200 tabIndex: tabIndex,
9201 className: className,
9202 onMouseOver: function onMouseOver() {
9203 return onHover(day);
9204 },
9205 onClick: handleClick,
9206 "aria-label": ariaLabel,
9207 "aria-selected": selected,
9208 "aria-disabled": disabled,
9209 role: "gridcell"
9210 }, date);
9211}
9212
9213function noop$6() {}
9214
9215function Weekday(_ref) {
9216 var label = _ref.label,
9217 title = _ref.title,
9218 current = _ref.current;
9219 var className = classNames(styles$J.Weekday, current && styles$J['Weekday-current']);
9220 return React__default.createElement("div", {
9221 "aria-label": Weekdays[label],
9222 className: className
9223 }, title);
9224}
9225
9226var WEEKDAYS = [Weekdays.Sunday, Weekdays.Monday, Weekdays.Tuesday, Weekdays.Wednesday, Weekdays.Thursday, Weekdays.Friday, Weekdays.Saturday];
9227function Month(_ref) {
9228 var focusedDate = _ref.focusedDate,
9229 selected = _ref.selected,
9230 hoverDate = _ref.hoverDate,
9231 disableDatesBefore = _ref.disableDatesBefore,
9232 disableDatesAfter = _ref.disableDatesAfter,
9233 allowRange = _ref.allowRange,
9234 _ref$onChange = _ref.onChange,
9235 onChange = _ref$onChange === void 0 ? noop$7 : _ref$onChange,
9236 _ref$onHover = _ref.onHover,
9237 onHover = _ref$onHover === void 0 ? noop$7 : _ref$onHover,
9238 _ref$onFocus = _ref.onFocus,
9239 onFocus = _ref$onFocus === void 0 ? noop$7 : _ref$onFocus,
9240 month = _ref.month,
9241 year = _ref.year,
9242 weekStartsOn = _ref.weekStartsOn;
9243 var i18n = useI18n();
9244 var isInHoveringRange = allowRange ? hoveringDateIsInRange : function () {
9245 return false;
9246 };
9247 var now = new Date();
9248 var current = now.getMonth() === month && now.getFullYear() === year;
9249 var className = classNames(styles$J.Title, current && styles$J['Month-current']);
9250 var weeks = getWeeksForMonth(month, year, weekStartsOn);
9251 var weekdays = getWeekdaysOrdered(weekStartsOn).map(function (weekday) {
9252 return React__default.createElement(Weekday, {
9253 key: weekday,
9254 title: i18n.translate("Polaris.DatePicker.daysAbbreviated.".concat(weekdayName(weekday))),
9255 current: current && new Date().getDay() === weekday,
9256 label: weekday
9257 });
9258 });
9259
9260 function handleDateClick(selectedDate) {
9261 onChange(getNewRange(allowRange ? selected : undefined, selectedDate));
9262 }
9263
9264 function renderWeek(day, dayIndex) {
9265 if (day == null) {
9266 var lastDayOfMonth = new Date(year, month + 1, 0);
9267 return React__default.createElement(Day, {
9268 key: dayIndex,
9269 onHover: onHover.bind(null, lastDayOfMonth)
9270 });
9271 }
9272
9273 var disabled = disableDatesBefore && isDateBefore(day, disableDatesBefore) || disableDatesAfter && isDateAfter(day, disableDatesAfter);
9274 return React__default.createElement(Day, {
9275 focused: focusedDate != null && isSameDay(day, focusedDate),
9276 day: day,
9277 key: dayIndex,
9278 onFocus: onFocus,
9279 onClick: handleDateClick,
9280 onHover: onHover,
9281 selected: selected != null && dateIsSelected(day, selected),
9282 inRange: selected != null && dateIsInRange(day, selected),
9283 disabled: disabled,
9284 inHoveringRange: selected != null && hoverDate != null && isInHoveringRange(day, selected, hoverDate)
9285 });
9286 }
9287
9288 var weeksMarkup = weeks.map(function (week, index) {
9289 return React__default.createElement("div", {
9290 role: "row",
9291 className: styles$J.Week,
9292 key: index
9293 }, week.map(renderWeek));
9294 });
9295 return React__default.createElement("div", {
9296 role: "grid",
9297 className: styles$J.Month
9298 }, React__default.createElement("div", {
9299 className: className
9300 }, i18n.translate("Polaris.DatePicker.months.".concat(monthName(month))), " ", year), React__default.createElement("div", {
9301 role: "rowheader",
9302 className: styles$J.WeekHeadings
9303 }, weekdays), weeksMarkup);
9304}
9305
9306function noop$7() {}
9307
9308function hoveringDateIsInRange(day, range, hoverEndDate) {
9309 if (day == null) {
9310 return false;
9311 }
9312
9313 var start = range.start,
9314 end = range.end;
9315 return Boolean(isSameDay(start, end) && day > start && day <= hoverEndDate);
9316}
9317
9318function getWeekdaysOrdered(weekStartsOn) {
9319 var weekDays = [].concat(WEEKDAYS);
9320 var restOfDays = weekDays.splice(weekStartsOn);
9321 return [].concat(_toConsumableArray(restOfDays), _toConsumableArray(weekDays));
9322}
9323
9324function DatePicker(_ref) {
9325 var id = _ref.id,
9326 selected = _ref.selected,
9327 month = _ref.month,
9328 year = _ref.year,
9329 allowRange = _ref.allowRange,
9330 multiMonth = _ref.multiMonth,
9331 disableDatesBefore = _ref.disableDatesBefore,
9332 disableDatesAfter = _ref.disableDatesAfter,
9333 _ref$weekStartsOn = _ref.weekStartsOn,
9334 weekStartsOn = _ref$weekStartsOn === void 0 ? Weekdays.Sunday : _ref$weekStartsOn,
9335 onMonthChange = _ref.onMonthChange,
9336 _ref$onChange = _ref.onChange,
9337 onChange = _ref$onChange === void 0 ? noop$8 : _ref$onChange;
9338 var i18n = useI18n();
9339
9340 var _useState = useState(undefined),
9341 _useState2 = _slicedToArray(_useState, 2),
9342 hoverDate = _useState2[0],
9343 setHoverDate = _useState2[1];
9344
9345 var _useState3 = useState(undefined),
9346 _useState4 = _slicedToArray(_useState3, 2),
9347 focusDate = _useState4[0],
9348 setFocusDate = _useState4[1];
9349
9350 useEffect(function () {
9351 setFocusDate(undefined);
9352 }, [selected]);
9353 var handleFocus = useCallback(function (date) {
9354 setFocusDate(date);
9355 }, []);
9356 var setFocusDateAndHandleMonthChange = useCallback(function (date) {
9357 if (onMonthChange) {
9358 onMonthChange(date.getMonth(), date.getFullYear());
9359 }
9360
9361 setHoverDate(date);
9362 setFocusDate(date);
9363 }, [onMonthChange]);
9364 var handleDateSelection = useCallback(function (range) {
9365 var end = range.end;
9366 setHoverDate(end);
9367 setFocusDate(new Date(end));
9368 onChange(range);
9369 }, [onChange]);
9370 var handleMonthChangeClick = useCallback(function (month, year) {
9371 if (!onMonthChange) {
9372 return;
9373 }
9374
9375 setFocusDate(undefined);
9376 onMonthChange(month, year);
9377 }, [onMonthChange]);
9378 var handleHover = useCallback(function (date) {
9379 setHoverDate(date);
9380 }, []);
9381 var handleKeyUp = useCallback(function (event) {
9382 var key = event.key;
9383 var range = deriveRange(selected);
9384 var focusedDate = focusDate || range && range.start;
9385
9386 if (focusedDate == null) {
9387 return;
9388 }
9389
9390 if (key === 'ArrowUp') {
9391 var previousWeek = new Date(focusedDate);
9392 previousWeek.setDate(focusedDate.getDate() - 7);
9393
9394 if (!(disableDatesBefore && isDateBefore(previousWeek, disableDatesBefore))) {
9395 setFocusDateAndHandleMonthChange(previousWeek);
9396 }
9397 }
9398
9399 if (key === 'ArrowDown') {
9400 var nextWeek = new Date(focusedDate);
9401 nextWeek.setDate(focusedDate.getDate() + 7);
9402
9403 if (!(disableDatesAfter && isDateAfter(nextWeek, disableDatesAfter))) {
9404 setFocusDateAndHandleMonthChange(nextWeek);
9405 }
9406 }
9407
9408 if (key === 'ArrowRight') {
9409 var tomorrow = new Date(focusedDate);
9410 tomorrow.setDate(focusedDate.getDate() + 1);
9411
9412 if (!(disableDatesAfter && isDateAfter(tomorrow, disableDatesAfter))) {
9413 setFocusDateAndHandleMonthChange(tomorrow);
9414 }
9415 }
9416
9417 if (key === 'ArrowLeft') {
9418 var yesterday = new Date(focusedDate);
9419 yesterday.setDate(focusedDate.getDate() - 1);
9420
9421 if (!(disableDatesBefore && isDateBefore(yesterday, disableDatesBefore))) {
9422 setFocusDateAndHandleMonthChange(yesterday);
9423 }
9424 }
9425 }, [disableDatesAfter, disableDatesBefore, focusDate, selected, setFocusDateAndHandleMonthChange]);
9426 var showNextYear = getNextDisplayYear(month, year);
9427 var showNextMonth = getNextDisplayMonth(month);
9428 var showNextToNextYear = getNextDisplayYear(showNextMonth, showNextYear);
9429 var showNextToNextMonth = getNextDisplayMonth(showNextMonth);
9430 var showPreviousYear = getPreviousDisplayYear(month, year);
9431 var showPreviousMonth = getPreviousDisplayMonth(month);
9432 var previousMonthName = i18n.translate("Polaris.DatePicker.months.".concat(monthName(showPreviousMonth)));
9433 var nextMonth = multiMonth ? i18n.translate("Polaris.DatePicker.months.".concat(monthName(showNextToNextMonth))) : i18n.translate("Polaris.DatePicker.months.".concat(monthName(showNextMonth)));
9434 var nextYear = multiMonth ? showNextToNextYear : showNextYear;
9435 var secondDatePicker = multiMonth ? React__default.createElement(Month, {
9436 onFocus: handleFocus,
9437 focusedDate: focusDate,
9438 month: showNextMonth,
9439 year: showNextYear,
9440 selected: deriveRange(selected),
9441 hoverDate: hoverDate,
9442 onChange: handleDateSelection,
9443 onHover: handleHover,
9444 disableDatesBefore: disableDatesBefore,
9445 disableDatesAfter: disableDatesAfter,
9446 allowRange: allowRange,
9447 weekStartsOn: weekStartsOn
9448 }) : null;
9449 return React__default.createElement("div", {
9450 id: id,
9451 className: styles$J.DatePicker,
9452 onKeyDown: handleKeyDown,
9453 onKeyUp: handleKeyUp
9454 }, React__default.createElement("div", {
9455 className: styles$J.Header
9456 }, React__default.createElement(Button, {
9457 plain: true,
9458 icon: ArrowLeftMinor,
9459 accessibilityLabel: i18n.translate('Polaris.DatePicker.previousMonth', {
9460 previousMonthName,
9461 showPreviousYear
9462 }),
9463 onClick: function onClick() {
9464 return handleMonthChangeClick(showPreviousMonth, showPreviousYear);
9465 }
9466 }), React__default.createElement(Button, {
9467 plain: true,
9468 icon: ArrowRightMinor,
9469 accessibilityLabel: i18n.translate('Polaris.DatePicker.nextMonth', {
9470 nextMonth,
9471 nextYear
9472 }),
9473 onClick: function onClick() {
9474 return handleMonthChangeClick(showNextMonth, showNextYear);
9475 }
9476 })), React__default.createElement("div", {
9477 className: styles$J.MonthContainer
9478 }, React__default.createElement(Month, {
9479 onFocus: handleFocus,
9480 focusedDate: focusDate,
9481 month: month,
9482 year: year,
9483 selected: deriveRange(selected),
9484 hoverDate: hoverDate,
9485 onChange: handleDateSelection,
9486 onHover: handleHover,
9487 disableDatesBefore: disableDatesBefore,
9488 disableDatesAfter: disableDatesAfter,
9489 allowRange: allowRange,
9490 weekStartsOn: weekStartsOn
9491 }), secondDatePicker));
9492}
9493
9494function noop$8() {}
9495
9496function handleKeyDown(event) {
9497 var key = event.key;
9498
9499 if (key === 'ArrowUp' || key === 'ArrowDown' || key === 'ArrowLeft' || key === 'ArrowRight') {
9500 event.preventDefault();
9501 event.stopPropagation();
9502 }
9503}
9504
9505function deriveRange(selected) {
9506 return selected instanceof Date ? {
9507 start: selected,
9508 end: selected
9509 } : selected;
9510}
9511
9512var styles$K = {
9513 "DescriptionList": "Polaris-DescriptionList",
9514 "Term": "Polaris-DescriptionList__Term",
9515 "Description": "Polaris-DescriptionList__Description"
9516};
9517
9518var getUniqueTermKey = createUniqueIDFactory("Term");
9519var getUniqueDescriptionKey = createUniqueIDFactory("Description");
9520function DescriptionList(_ref) {
9521 var items = _ref.items;
9522 var terms = items.reduce(function (allTerms, _ref2) {
9523 var term = _ref2.term,
9524 description = _ref2.description;
9525 return [].concat(_toConsumableArray(allTerms), [React__default.createElement("dt", {
9526 key: getUniqueTermKey(),
9527 className: styles$K.Term
9528 }, term), React__default.createElement("dd", {
9529 key: getUniqueDescriptionKey(),
9530 className: styles$K.Description
9531 }, description)]);
9532 }, []);
9533 return React__default.createElement("dl", {
9534 className: styles$K.DescriptionList
9535 }, terms);
9536}
9537
9538var styles$L = {
9539 "DisplayText": "Polaris-DisplayText",
9540 "sizeSmall": "Polaris-DisplayText--sizeSmall",
9541 "sizeMedium": "Polaris-DisplayText--sizeMedium",
9542 "sizeLarge": "Polaris-DisplayText--sizeLarge",
9543 "sizeExtraLarge": "Polaris-DisplayText--sizeExtraLarge"
9544};
9545
9546function DisplayText(_ref) {
9547 var _ref$element = _ref.element,
9548 Element = _ref$element === void 0 ? 'p' : _ref$element,
9549 children = _ref.children,
9550 _ref$size = _ref.size,
9551 size = _ref$size === void 0 ? 'medium' : _ref$size;
9552 var className = classNames(styles$L.DisplayText, size && styles$L[variationName('size', size)]);
9553 return React__default.createElement(Element, {
9554 className: className
9555 }, children);
9556}
9557
9558function capitalize() {
9559 var word = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
9560 var wordLower = word.toLowerCase();
9561 return wordLower.charAt(0).toUpperCase() + wordLower.slice(1);
9562}
9563
9564/**
9565 * Attaches and removes event listeners from the target
9566 * @param target Defines a target for the listener to be placed on. Defaults to window.
9567 * @param type Defines the type of event, i.e blur or focus
9568 * @param handler Defines a callback to be invoked when the event type occurs
9569 * @param listenerOptions Object that specifies event properties
9570 * @param options Object that defines properties used in the hook
9571 * interface Options {
9572 * // Uses window as a back up event target when the current
9573 * // target is falsy
9574 * defaultToWindow: boolean;
9575 * }
9576 * @example
9577 * function Playground() {
9578 * useEventListener(window, 'resize', () => console.log('resize'));
9579 *
9580 * return null;
9581 * }
9582 */
9583
9584function useEventListener(target, type, handler, listenerOptions, options) {
9585 useEffect(function () {
9586 var eventTarget = target && 'current' in target ? target.current : target;
9587
9588 if (!eventTarget && options && options.defaultToWindow) {
9589 eventTarget = window;
9590 }
9591
9592 if (!eventTarget) return;
9593 eventTarget.addEventListener(type, handler, listenerOptions);
9594 return function () {
9595 eventTarget && eventTarget.removeEventListener(type, handler, listenerOptions);
9596 };
9597 }, [handler, listenerOptions, options, target, type]);
9598}
9599
9600/**
9601 * Similarly to the life-cycle method componentDidMount, useComponentDidMount
9602 * will be invoked after the component has mounted, and only the initial mount.
9603 * @param callback Defines a callback to invoke once the component has
9604 * initially mounted.
9605 * @example
9606 * function Playground({active}) {
9607 * useComponentDidMount(() => {
9608 * if (active) {
9609 * console.warning(`Component has mounted.`);
9610 * }
9611 * });
9612 *
9613 * return null;
9614 * }
9615 */
9616
9617function useComponentDidMount(callback) {
9618 var isAfterInitialMount = useIsAfterInitialMount();
9619 var hasInvokedLifeCycle = useRef(false);
9620
9621 if (isAfterInitialMount && !hasInvokedLifeCycle.current) {
9622 hasInvokedLifeCycle.current = true;
9623 return callback();
9624 }
9625}
9626
9627var fileUpload = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJNNjkuODEgMTI0LjQzYTEuMzkgMS4zOSAwIDAxLS41Ny0uMTIgMS40MyAxLjQzIDAgMDEtLjQ5LS4zMiAxLjUyIDEuNTIgMCAwMS0uNDQtMS4wNiAxLjUgMS41IDAgMDEuNDQtMS4wNiAxLjUzIDEuNTMgMCAwMTEuMzUtLjQyIDEuMzEgMS4zMSAwIDAxLjI4LjA5IDEuMDggMS4wOCAwIDAxLjI2LjE0IDEuMDYgMS4wNiAwIDAxLjIzLjE5IDEuMzcgMS4zNyAwIDAxLjE5LjIyIDEuMjYgMS4yNiAwIDAxLjEzLjI2IDEuNDkgMS40OSAwIDAxLS4zMiAxLjY0IDEuMzQgMS4zNCAwIDAxLS40OS4zMiAxLjM5IDEuMzkgMCAwMS0uNTcuMTJ6bS05LjcxLTEuNWExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41MSAxLjUxIDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptLTguMjIgMGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bS04LjIyIDBhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUxIDEuNTEgMCAwMTEuNTEgMS41IDEuNTEgMS41MSAwIDAxLTEuNTEgMS41IDEuNTEgMS41MSAwIDAxLTEuNS0xLjV6bS04LjIxIDBhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS41em0tOC4yMiAwYTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41MSAxLjUxIDAgMDExLjUxIDEuNSAxLjUxIDEuNTEgMCAwMS0xLjUxIDEuNSAxLjUxIDEuNTEgMCAwMS0xLjUtMS41em0tOC4yMSAwYTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41IDEuNSAwIDAxMS41IDEuNSAxLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41Mi0xLjV6bS04LjIyIDBhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUxIDEuNTEgMCAwMTEuNTEgMS41IDEuNTEgMS41MSAwIDAxLTEuNTEgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS41em0tNi43MSAxLjVBMS41IDEuNSAwIDAxMyAxMjRhMS40NyAxLjQ3IDAgMDEtLjQ0LTEuMDYgMS41MyAxLjUzIDAgMDEwLS4zYzAtLjA5IDAtLjE5LjA4LS4yOGEyLjE1IDIuMTUgMCAwMS4xNC0uMjYgMS4zNyAxLjM3IDAgMDEuMTktLjIyIDEuMDYgMS4wNiAwIDAxLjIzLS4xOSAxLjA4IDEuMDggMCAwMS4yNi0uMTQgMS4zMSAxLjMxIDAgMDEuMjgtLjA5IDEuODggMS44OCAwIDAxLjU4IDAgMS4zMSAxLjMxIDAgMDEuMjguMDkgMS4zIDEuMyAwIDAxLjI2LjE0IDEuMzcgMS4zNyAwIDAxLjIzLjE5IDEuMzcgMS4zNyAwIDAxLjE5LjIyIDEuMjYgMS4yNiAwIDAxLjEzLjI2IDEuNDEgMS40MSAwIDAxLjEyLjU4IDEuNTYgMS41NiAwIDAxLS4xMS41NyAxLjYzIDEuNjMgMCAwMS0uMzMuNDkgMS41IDEuNSAwIDAxLTEgLjQzem0tMS41LTkuNWExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjQ5em0wLThhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS40OXptMC04YTEuNSAxLjUgMCAwMTEuNS0xLjVBMS41IDEuNSAwIDAxNS41OSA4M2ExLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptMC04YTEuNSAxLjUgMCAwMTEuNS0xLjVBMS41IDEuNSAwIDAxNS41OSA3NWExLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptMC04YTEuNSAxLjUgMCAwMTEuNS0xLjVBMS41IDEuNSAwIDAxNS41OSA2N2ExLjUxIDEuNTEgMCAwMS0xLjUgMS41MUExLjUxIDEuNTEgMCAwMTIuNTkgNjd6bTAtOGExLjUgMS41IDAgMDExLjUtMS41QTEuNSAxLjUgMCAwMTUuNTkgNTlhMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bTAtOGExLjUxIDEuNTEgMCAwMTEuNS0xLjUxQTEuNTEgMS41MSAwIDAxNS41OSA1MWExLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptMS41LTYuNDZBMS41IDEuNSAwIDAxMi41OSA0M2ExLjM2IDEuMzYgMCAwMTAtLjI5IDIuMjkgMi4yOSAwIDAxLjA4LS4yOCAyLjE1IDIuMTUgMCAwMS4xNC0uMjYgMS41NyAxLjU3IDAgMDEuNDItLjQyIDIgMiAwIDAxLjI1LS4xNGwuMjktLjA4YTEuNSAxLjUgMCAwMTEuMzUuNDEgMS40NSAxLjQ1IDAgMDEuMTkuMjMgMS4yNiAxLjI2IDAgMDEuMTMuMjYgMS4zMSAxLjMxIDAgMDEuMDkuMjggMS4zNiAxLjM2IDAgMDEwIC4yOSAxLjUyIDEuNTIgMCAwMS0uMzggMSAyLjExIDIuMTEgMCAwMS0uMjMuMTkgMS4yNiAxLjI2IDAgMDEtLjI2LjEzIDEuMzEgMS4zMSAwIDAxLS4yOC4wOSAxLjQzIDEuNDMgMCAwMS0uMjkuMDZ6TTYwLjEgNDNhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS41em0tOC4yMiAwYTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41IDEuNSAwIDAxMS41IDEuNSAxLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptLTguMjIgMGExLjUgMS41IDAgMDExLjUtMS41IDEuNTEgMS41MSAwIDAxMS41MSAxLjUgMS41MSAxLjUxIDAgMDEtMS41MSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bS04LjIxIDBhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS41em0tOC4yMiAwYTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41IDEuNSAwIDAxMS41IDEuNSAxLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXpNMTkgNDNhMS41IDEuNSAwIDAxMS41LTEuNUExLjUgMS41IDAgMDEyMiA0M2ExLjUgMS41IDAgMDEtMS41IDEuNUExLjUgMS41IDAgMDExOSA0M3ptLTguMiAwYTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41IDEuNSAwIDAxMS41IDEuNSAxLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptNTkuMDEgMS40N2ExLjUgMS41IDAgMDEtMS4wNi0uNDcgMS41MiAxLjUyIDAgMDEtLjQ0LTEgMS41IDEuNSAwIDAxMS43OS0xLjVsLjI4LjA4LjI2LjE0YTIuMTEgMi4xMSAwIDAxLjIzLjE5IDEuNSAxLjUgMCAwMS40NCAxLjA5IDEuNTIgMS41MiAwIDAxLS40NCAxIDIuMTEgMi4xMSAwIDAxLS4yMy4xOSAxLjI2IDEuMjYgMCAwMS0uMjYuMTMgMS4zMSAxLjMxIDAgMDEtLjI4LjA5IDEuMzYgMS4zNiAwIDAxLS4yOS4wNnptLTEuNSA3MC40NmExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjQ5em0wLThhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS40OXptMC04YTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41IDEuNSAwIDAxMS41IDEuNSAxLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNDN6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjQzem0wLThhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS40OSAxLjUgMS41IDAgMDEtMS41LTEuNDJ6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjQzem0wLThhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS40M3oiIGZpbGw9IiNkZWU0ZjUiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjYuNjcgMy41N2g3OS40MXY5Ni42MUgyNi42N3oiLz48cGF0aCBkPSJNMTA2LjkyIDEwMUg5MS43OGMtMS42NCAwLTMuMjQuMTUtNC45LjE4cy0zLjM5LS4wNS01LjExLS4xM2MtLjg1IDAtMS43LS4wNi0yLjU0IDBzLTEuNjcgMC0yLjQ5IDBsLTkuOTEuMjljLTMuMzIuMDgtNi42Mi4yNC0xMCAuMjZzLTYuNzgtLjI3LTEwLjExLS4xOWMtNi42My40Mi0xMy40LjE2LTIwLjA3IDBoLS4wOGExLjEgMS4xIDAgMDEtMS4wNy0xLjEzYy4wOC0yIC4wNi00IC4wOC02czAtNCAwLTYtLjE5LTQtLjIzLTYgLjE1LTQgLjI4LTZhMjEuNiAyMS42IDAgMDAwLTMgMjcuODYgMjcuODYgMCAwMS0uMTQtM3YtNmwuMTMtMTIuMDh2LTEybC4zMy02YTUzIDUzIDAgMDAtLjEzLTZjLS4yMy00IC4xMi04IC4yNi0xMi4wOGwuMDYtM3YtM2wtLjA4LTZBLjU1LjU1IDAgMDEyNi42NCAzYzMuMy0uMSA2LjYxIDAgOS45MiAwczYuNjIgMCA5LjkzLjA2YzEuNjUgMCAzLjMxLjA2IDUgLjA3SDU0bDIuNDgtLjA4IDkuOTMtLjMzQzczIDIuNTQgNzkuNiAyLjQgODYuMjIgMi40M2MzLjMxLjA3IDYuNjIuMyA5LjkzLjI0bDkuOTItLjI2YTEuMTMgMS4xMyAwIDAxMS4xNiAxLjF2LjA2bC4xOCA2LjFjMCAyLS4xMSA0LjA2LS4xNiA2LjA4IDAgNC4wNi4yMiA4LjE2LjEzIDEyLjIyIDAgMi0uMjYgNC0uMzMgNi0uMDYgMSAwIDIgMCAzdjYuMDZsLS4xMiAzYTQ2Ljc1IDQ2Ljc1IDAgMDAuMDkgNi4xM2MuMjEgNC4xNi0uMjEgOC0uMiAxMi4wOC0uMTcgNCAuMTMgOC4yIDAgMTIuMjEgMCAyLS4xNSA0LS4xNiA2cy4wNyA0LjExLjEzIDYuMTlsLjA4IDMuMTJ2My4wNmMuMDYgMi4xOC4xMyA0LjE4LjA1IDYuMTh6bS0xLjctMS42OVY4Ny4zN2MwLTIgLjA4LTMuOTMuMDYtNS45M3MtLjItNC4xMy0uMjYtNi4xNWMtLjE1LTQuMDguMjItNy44MyAwLTExLjkzLS4wNi0yLS4xNi00LjA2LS4yNy02LjFhNDMuODkgNDMuODkgMCAwMTAtNiAzMS4xNCAzMS4xNCAwIDAwLjE2LTUuOSA0NC43NSA0NC43NSAwIDAxLS4wOS02IDU4LjQ1IDU4LjQ1IDAgMDAuMTgtNS44NmMwLTItLjI3LTQuMDUtLjI4LTZzMC00IC4xMS01Ljk1LjE1LTQgLjE0LTYtLjE5LTQtLjE2LTZsLjE0LTYgMS4xMSAxLjExYy0zLjMxLS4wNy02LjYxLS4xOS05LjkyLS4xOHMtNi42Mi4zLTkuOTMuNDNDNzkuNiA1LjA2IDczIDUgNjYuMzcgNC44M2MtMS42NiAwLTMuMzEtLjEtNS0uMTdsLTUtLjI5Yy0zLjMxLS4xOC02LjYxIDAtOS45Mi4xMy02LjYyLjIyLTEzLjI0LjM5LTE5Ljg1LjI3bDEuMi0xLjItLjI4IDZ2M2wuMSAzYy4yMiA0IC44MyA4LjA2LjM3IDEyLjA4LS4xMSAxLS4yNyAyLS4zNCAzczAgMiAwIDNjLjExIDIgLjQxIDQgLjUgNnYzbC0uMDcgMy0uMTQgNkwyOCA2NGwtLjA2IDZhMjIgMjIgMCAwMS0uMiAzIDIwLjE4IDIwLjE4IDAgMDAtLjA4IDNjLjA5IDIgLjI4IDQgLjE5IDZsLS4yNyA2Yy0uMDYgNC0uMTQgOC4wNS0uMTMgMTIuMDhsLS43NC0uNzVoOS44NWMzLjI4IDAgNi41OC4wOCA5Ljg2LjA2czYuNTEtLjI1IDkuNzYtLjI5IDYuNTcuMSA5Ljg3LjE0bDkuOTEuMTloNC44OWMxLjU5IDAgMy4xOC0uMTQgNC44Mi0uMTRzMy4zNC4xMSA1IC4xNGw0Ljg2LS4wNmMzLjE3LS4wNSA2LjQ3LS4wMiA5LjY5LS4wNHoiIGZpbGw9IiNmZmYiLz48ZyBvcGFjaXR5PSIuNSIgZmlsbD0iI2RlZTRmNSI+PHBhdGggZD0iTTI2LjY3IDMuNTdoNzkuNDF2OTYuNjFIMjYuNjd6Ii8+PHBhdGggZD0iTTEwNi45MiAxMDFIOTEuNzhjLTEuNjQgMC0zLjI0LjE1LTQuOS4xOHMtMy4zOS0uMDUtNS4xMS0uMTNjLS44NSAwLTEuNy0uMDYtMi41NCAwcy0xLjY3IDAtMi40OSAwbC05LjkxLjI5Yy0zLjMyLjA4LTYuNjIuMjQtMTAgLjI2cy02Ljc4LS4yNy0xMC4xMS0uMTljLTYuNjMuNDItMTMuNC4xNi0yMC4wNyAwaC0uMDhhMS4xIDEuMSAwIDAxLTEuMDctMS4xM2MuMDgtMiAuMDYtNCAuMDgtNnMwLTQgMC02LS4xOS00LS4yMy02IC4xNS00IC4yOC02YTIxLjYgMjEuNiAwIDAwMC0zIDI3Ljg2IDI3Ljg2IDAgMDEtLjE0LTN2LTZsLjEzLTEyLjA4di0xMmwuMzMtNmE1MyA1MyAwIDAwLS4xMy02Yy0uMjMtNCAuMTItOCAuMjYtMTIuMDhsLjA2LTN2LTNsLS4wOC02QS41NS41NSAwIDAxMjYuNjQgM2MzLjMtLjEgNi42MSAwIDkuOTIgMHM2LjYyIDAgOS45My4wNmMxLjY1IDAgMy4zMS4wNiA1IC4wN0g1NGwyLjQ4LS4wOCA5LjkzLS4zM0M3MyAyLjU0IDc5LjYgMi40IDg2LjIyIDIuNDNjMy4zMS4wNyA2LjYyLjMgOS45My4yNGw5LjkyLS4yNmExLjEzIDEuMTMgMCAwMTEuMTYgMS4xdi4wNmwuMTggNi4xYzAgMi0uMTEgNC4wNi0uMTYgNi4wOCAwIDQuMDYuMjIgOC4xNi4xMyAxMi4yMiAwIDItLjI2IDQtLjMzIDYtLjA2IDEgMCAyIDAgM3Y2LjA2bC0uMTIgM2E0Ni43NSA0Ni43NSAwIDAwLjA5IDYuMTNjLjIxIDQuMTYtLjIxIDgtLjIgMTIuMDgtLjE3IDQgLjEzIDguMiAwIDEyLjIxIDAgMi0uMTUgNC0uMTYgNnMuMDcgNC4xMS4xMyA2LjE5bC4wOCAzLjEydjMuMDZjLjA2IDIuMTguMTMgNC4xOC4wNSA2LjE4em0tMS43LTEuNjlWODcuMzdjMC0yIC4wOC0zLjkzLjA2LTUuOTNzLS4yLTQuMTMtLjI2LTYuMTVjLS4xNS00LjA4LjIyLTcuODMgMC0xMS45My0uMDYtMi0uMTYtNC4wNi0uMjctNi4xYTQzLjg5IDQzLjg5IDAgMDEwLTYgMzEuMTQgMzEuMTQgMCAwMC4xNi01LjkgNDQuNzUgNDQuNzUgMCAwMS0uMDktNiA1OC40NSA1OC40NSAwIDAwLjE4LTUuODZjMC0yLS4yNy00LjA1LS4yOC02czAtNCAuMTEtNS45NS4xNS00IC4xNC02LS4xOS00LS4xNi02bC4xNC02IDEuMTEgMS4xMWMtMy4zMS0uMDctNi42MS0uMTktOS45Mi0uMThzLTYuNjIuMy05LjkzLjQzQzc5LjYgNS4wNiA3MyA1IDY2LjM3IDQuODNjLTEuNjYgMC0zLjMxLS4xLTUtLjE3bC01LS4yOWMtMy4zMS0uMTgtNi42MSAwLTkuOTIuMTMtNi42Mi4yMi0xMy4yNC4zOS0xOS44NS4yN2wxLjItMS4yLS4yOCA2djNsLjEgM2MuMjIgNCAuODMgOC4wNi4zNyAxMi4wOC0uMTEgMS0uMjcgMi0uMzQgM3MwIDIgMCAzYy4xMSAyIC40MSA0IC41IDZ2M2wtLjA3IDMtLjE0IDZMMjggNjRsLS4wNiA2YTIyIDIyIDAgMDEtLjIgMyAyMC4xOCAyMC4xOCAwIDAwLS4wOCAzYy4wOSAyIC4yOCA0IC4xOSA2bC0uMjcgNmMtLjA2IDQtLjE0IDguMDUtLjEzIDEyLjA4bC0uNzQtLjc1aDkuODVjMy4yOCAwIDYuNTguMDggOS44Ni4wNnM2LjUxLS4yNSA5Ljc2LS4yOSA2LjU3LjEgOS44Ny4xNGw5LjkxLjE5aDQuODljMS41OSAwIDMuMTgtLjE0IDQuODItLjE0czMuMzQuMTEgNSAuMTRsNC44Ni0uMDZjMy4xNy0uMDUgNi40Ny0uMDIgOS42OS0uMDR6Ii8+PC9nPjxyZWN0IHg9IjM4LjgiIHk9IjE2LjE3IiB3aWR0aD0iMjEuOTYiIGhlaWdodD0iMjMuMzMiIHJ4PSIxMC43MSIgcnk9IjEwLjcxIiBmaWxsPSIjZGVlNGY1Ii8+PHBhdGggZD0iTTUwLjA1IDQwLjI5YTExLjc4IDExLjc4IDAgMDEtNC43LS44MmMtLjcyLS4zNS0xLjQzLS43Mi0yLjE1LTEuMDktLjM1LS4xOS0uNjgtLjQzLTEtLjY0cy0uNjUtLjUtMS0uNzZhMTEuNDUgMTEuNDUgMCAwMS0zLjI3LTguODdMMzggMjdjMC0uMzkgMC0uOC4wNy0xLjJzLjE0LS44LjIyLTEuMmwuMzQtMS4xNmExMC42OCAxMC42OCAwIDAxMi41MS00IDE1LjUxIDE1LjUxIDAgMDExLjc2LTEuNTggMTAuMTggMTAuMTggMCAwMTIuMDYtMS4xNiAxMy42MyAxMy42MyAwIDAxNC41OC0uOTUgMTEuODUgMTEuODUgMCAwMTQuNTguODEgMTIuMjkgMTIuMjkgMCAwMTQgMi40MSAxMS43NSAxMS43NSAwIDAxMy40NiA4LjY1IDEyLjYxIDEyLjYxIDAgMDEtMyA4LjgyIDcuNTcgNy41NyAwIDAxLS44OS44MSA4LjQ2IDguNDYgMCAwMS0xIC43MiAxMi40MiAxMi40MiAwIDAxLTIgMS4yMyAxMS4xNCAxMS4xNCAwIDAxLTQuNjQgMS4wOXptMC0xLjU4YTkuNjkgOS42OSAwIDAwNC0uOTIgOS4zMiA5LjMyIDAgMDAxLjc3LTEuMDYgNS4xMiA1LjEyIDAgMDAuNzYtLjcxIDcuMDcgNy4wNyAwIDAwLjY3LS43OCAxMS4xNSAxMS4xNSAwIDAwMi4wOS0zLjQ5bC4zLTEgLjE2LTEgLjA3LTF2LTEuMThjMC0uMzguMDUtLjc2IDAtMS4xYTYuMTUgNi4xNSAwIDAwMC0xIDYgNiAwIDAwLS41My0yQTEwLjE5IDEwLjE5IDAgMDA1Ny4wNSAyMGMtLjUxLS40Ny0xLjA3LS44Ni0xLjU3LTEuMzZhNC40NCA0LjQ0IDAgMDAtMS44Mi0xIDYuMDcgNi4wNyAwIDAwLTEtLjI1IDYuMTQgNi4xNCAwIDAwLTEtLjEyYy0uNzEtLjA4LTEuMzMgMC0yLjExIDBoLTFhOC42MSA4LjYxIDAgMDAtMSAuMTIgOS4zOCA5LjM4IDAgMDAtMiAuNjggMTEuMzIgMTEuMzIgMCAwMC0xLjc5IDEgNSA1IDAgMDAtLjgzLjYybC0uMzkuMzUtLjMyLjRhMjUuMzUgMjUuMzUgMCAwMC0yLjExIDMuNTUgNi40OCA2LjQ4IDAgMDAtLjMyIDFjLS4wNS4zNC0uMTEuNjktLjE1IDFMMzkuNDYgMjdsLS4xIDEuMTNhOS4zOCA5LjM4IDAgMDAzIDcuNzFjLjI0LjI1LjUuNDkuNzUuNzRzLjU0LjQ1LjgzLjY2YTUuNTkgNS41OSAwIDAwMS45LjkyIDExLjIzIDExLjIzIDAgMDA0LjIxLjU1eiIgZmlsbD0iI2RlZTRmNSIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik00OS43NyAyNy44NGgyOC42OHYzMC40N0g0OS43N3oiLz48cGF0aCBkPSJNNzkgNTguODdjLTIuNDMuMDUtNS0uMTMtNy4zMS4wN2E0MS40MiA0MS40MiAwIDAwLTcuMjYuMTggMjQuODcgMjQuODcgMCAwMS0zLjY3IDAgMTYgMTYgMCAwMC0zLjY3LjA1Yy0yLjQzLjE2LTQuOTItLjItNy4zNC0uMjFhLjY3LjY3IDAgMDEtLjY3LS42OHYtMS45MWMwLS42NC0uMS0xLjI3LS4xNS0xLjktLjE1LTEuMjcuNDQtMi41NC4wOC0zLjgxIDAtMi41NC4xLTUuMDguMS03LjYyYTMyLjMxIDMyLjMxIDAgMDEuMDktMy44MSAxNS4yNiAxNS4yNiAwIDAwLjE4LTEuOWMwLS42NC0uMTMtMS4yNy0uMTYtMS45MSAwLTEuMjYuMTUtMi41My4yMy0zLjhzMC0yLjU0LS4wNS0zLjgxYS4zNi4zNiAwIDAxLjM0LS4zN2MxLjItLjA2IDIuMzkgMCAzLjU5IDBzMi4zOSAwIDMuNTguMDZjMi4zOS4xNiA0Ljc4LS4yMyA3LjE3LS4yOWE4Ni4xIDg2LjEgMCAwMTMuNTktLjEzIDI1LjE5IDI1LjE5IDAgMDEzLjU4LjA5IDYzLjYyIDYzLjYyIDAgMDA3LjItLjE3Ljg3Ljg3IDAgMDEuODkuODN2LjA2YTE4IDE4IDAgMDEtLjEgMS45NCAxOCAxOCAwIDAwMCAxLjk0IDE1LjYxIDE1LjYxIDAgMDEtLjEyIDMuODcgMzguMyAzOC4zIDAgMDAtLjA2IDMuODcgMTMuMiAxMy4yIDAgMDAtLjExIDEuOSAxOS42NCAxOS42NCAwIDAxLjE1IDJjLS4wNiAxLjI3LS4yMiAyLjQ5LS4yMiAzLjc3cy4xNiAyLjY5IDAgMy45MWEyMS4wOCAyMS4wOCAwIDAwMCAzLjg5djJjMCAuNjYuMTIgMS4yNi4xMiAxLjg5em0tMS4xMy0xLjEzdi0zLjcxYTE4LjY0IDE4LjY0IDAgMDAtLjA4LTMuNzggMzUuNSAzNS41IDAgMDEwLTMuNzJjMC0xLjI1LS4yMy0yLjU5LS4yOC0zLjg0YTguNjcgOC42NyAwIDAxLjIxLTEuNzggMTEuMjggMTEuMjggMCAwMC0uMTItMS45IDguNTQgOC41NCAwIDAxLjEtMS44MyA3LjgyIDcuODIgMCAwMDAtMS44NyAxNC4yMSAxNC4yMSAwIDAxMC0zLjc0IDE0LjM5IDE0LjM5IDAgMDAuMDYtMS44NmMwLS42My0uMTEtMS4yNS0uMDktMS44N2wuODMuODNjLTIuMzkgMC00Ljc4LS40LTcuMTctLjA4YTIxLjQ5IDIxLjQ5IDAgMDEtMy41OC4xOUg2NS45bC0xLjc5LS4wN2MtMi4zOSAwLTQuNzgtLjY0LTcuMTctLjI5YTY4LjY5IDY4LjY5IDAgMDEtNy4xNy4yMmwuOC0uOGEyMi4wOSAyMi4wOSAwIDAwLS4xNiAzLjgxIDIyLjMzIDIyLjMzIDAgMDEuMzcgMy44IDE2IDE2IDAgMDAtLjM1IDEuOTEgOC44NiA4Ljg2IDAgMDAuMjYgMS45IDE2LjE5IDE2LjE5IDAgMDEwIDMuODFjLS4xMSAyLjU0IDAgNS4wOC0uMTcgNy42Mi0uNDIgMS4yNy4xMyAyLjU0IDAgMy44MWwtLjE4IDEuOS0uMDUgMS45MS0uNTMtLjUzYzIuMzcuMDkgNC43MSAwIDcuMDggMGEyMi41NyAyMi41NyAwIDAwMy41LS4xIDI1LjQ4IDI1LjQ4IDAgMDEzLjUgMCA0NSA0NSAwIDAwNy4wNS4wNmMyLjQ3LjE3IDQuNjYtLjAzIDcgMHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNODMuNzEgNDEuMTlMNzQgNTkuMjhsMjEuNDYtLjY3LTExLjE1LTE3LjQ1YS4zNC4zNCAwIDAwLS42LjAzeiIgZmlsbD0iI2RlZTRmNSIvPjxwYXRoIGQ9Ik04NC40IDQxLjU2Yy0uODIgMS41LTEuNTkgMy0yLjQ5IDQuNDhsLTEgMi4zN2MtLjM1Ljc4LS43NSAxLjUzLTEuMTcgMi4yOGwtMi41MiA0LjQ3Yy0uODEgMS41LTEuNjcgMy0yLjU0IDQuNDVsLS42NS0xYzEuNzkgMCAzLjU4LjE0IDUuMzcgMHMzLjU4IDAgNS4zNy0uMDkgMy41NyAwIDUuMzYtLjEyYTUzLjUxIDUzLjUxIDAgMDE1LjM2LS40M2wtLjU1IDEtMS40OS0yLjIzYy0uNTItLjc0LTEtMS40Ny0xLjUyLTIuMjJDOTEgNTMgOTAuMTMgNTEuNDMgODkuMSA1MGMtLjQ4LS43Ni0xLTEuNDgtMS40NS0yLjI2cy0uODUtMS41OC0xLjM2LTIuMzEtMS0xLjQ5LTEuNTEtMi4yMkw4NCA0Mi4wOGwtLjMxLS40NmEuNDQuNDQgMCAwMC43MS0uMDZ6bS0xLjQtLjc0YTEuMTMgMS4xMyAwIDAxLjg1LS42IDEuMTUgMS4xNSAwIDAxMSAuMzYgMiAyIDAgMDEuMTcuMjRsLjA5LjE0LjE5LjI4LjczIDEuMTIgMS40OCAyLjI0Yy40Ny43NiAxLjA2IDEuNDQgMS41OCAyLjE3cy45NCAxLjUyIDEuNDEgMi4yOGMuODkgMS41NiAxLjg2IDMuMDYgMi43OCA0LjYuNDQuNzguODUgMS41OCAxLjM0IDIuMzNsMS41MyAyLjJhLjc4Ljc4IDAgMDEtLjIgMS4wOC43NS43NSAwIDAxLS4zOC4xM2gtLjA2YTI0LjcyIDI0LjcyIDAgMDEtNS4zNy4wN2MtMS43OS4wNy0zLjU3LjUyLTUuMzYuNDRhMTcuMjYgMTcuMjYgMCAwMC0yLjY5IDBjLS44OS4wNi0xLjc4LjA3LTIuNjguMDgtMS43OS0uMTUtMy41Ny40MS01LjM2LjE0aC0uMjVhLjguOCAwIDAxLS42Ny0uOTIuNjkuNjkgMCAwMS4xMi0uMzJsLjc1LTEuMDkuNi0xLjEzYy40NS0uNzMuOTMtMS40NCAxLjQtMi4xNS44OS0xLjQ3IDEuNi0zIDIuMzQtNC41Ny4zNi0uNzguNzItMS41NSAxLjE0LTIuM2wxLjMtMi4yMWMuNjYtMS41OCAxLjQ4LTMuMDggMi4yMi00LjYxem0xNC43NiAzNi42OUg4NmExIDEgMCAwMTAtMmgxMS43NmExIDEgMCAwMTAgMnptLTIwLjE2IDBIMzVhMSAxIDAgMDEwLTJoNDIuNmExIDEgMCAwMTAgMnpNOTggODguMTRINjkuMzFhMSAxIDAgMDEwLTJIOThhMSAxIDAgMDEwIDJ6bS0zNy4yNSAwSDM1YTEgMSAwIDAxMC0yaDI1Ljc1YTEgMSAwIDAxMCAyeiIgZmlsbD0iI2RlZTRmNSIvPjxjaXJjbGUgY3g9IjEwNy40MSIgY3k9IjEwNi40MyIgcj0iMTgiIGZpbGw9IiNkZWU0ZjUiIHN0cm9rZT0iI2RlZTRmNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzIiBkPSJNMTA3LjQxIDk2Ljg0djE5LjE4bTcuMTgtOS41OWwtNy4xOC05LjU5LTcuMTggOS41OSIvPjwvc3ZnPgo=';
9628
9629var imageUpload = 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTI5IDEwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik02OC43OCAxMDYuMjVhMS41MiAxLjUyIDAgMDEtMS4wNi0uNDQgMS41NCAxLjU0IDAgMDEtLjMyLS40OSAxLjM5IDEuMzkgMCAwMS0uMTItLjU3IDEuNDEgMS40MSAwIDAxLjEyLS41OC45NC45NCAwIDAxLjE0LS4yNiAxIDEgMCAwMS4xOC0uMjIgMS41NCAxLjU0IDAgMDEyLjEyIDAgMS41IDEuNSAwIDAxLTEuMDYgMi41NnptLTkuNzgtMS41YTEuNSAxLjUgMCAxMTMgMCAxLjUgMS41IDAgMDEtMyAwem0tOC4zMSAwYTEuNSAxLjUgMCAwMTMgMCAxLjUxIDEuNTEgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUzLTEuNWguMDN6bS04LjMyIDBhMS41IDEuNSAwIDExMS41IDEuNSAxLjUgMS41IDAgMDEtMS41My0xLjVoLjAzem0tOC4zMSAwYTEuNSAxLjUgMCAxMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNTYtMS41aC4wNnptLTguMzEgMGExLjUgMS41IDAgMTExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUzLTEuNWguMDN6bS04LjMyIDBhMS41IDEuNSAwIDExMS41IDEuNSAxLjUxIDEuNTEgMCAwMS0xLjUzLTEuNWguMDN6bS04LjMxIDBhMS41IDEuNSAwIDExMS41IDEuNSAxLjUgMS41IDAgMDEtMS41My0xLjVoLjAzem0tNi44NCAxLjVhMS41IDEuNSAwIDAxLTEuMDYtLjQ0IDEuNSAxLjUgMCAwMTAtMi4xMiAxLjA2IDEuMDYgMCAwMS4yMy0uMTkgMS4wOCAxLjA4IDAgMDEuMjYtLjE0IDEuMzEgMS4zMSAwIDAxLjI4LS4wOSAxLjg4IDEuODggMCAwMS41OCAwIDEuMzEgMS4zMSAwIDAxLjI4LjA5IDEuMyAxLjMgMCAwMS4yNi4xNCAxLjM3IDEuMzcgMCAwMS4yMy4xOSAxLjUgMS41IDAgMDEuNDQgMS4wNiAxLjUgMS41IDAgMDEtMS41IDEuNXptLTEuNS05LjQzYTEuNSAxLjUgMCAxMTMgMCAxLjUgMS41IDAgMDEtMyAwem0wLTcuOTJhMS41IDEuNSAwIDExMyAwIDEuNSAxLjUgMCAwMS0zIDB6bTAtNy45MmExLjUgMS41IDAgMTEzIC4wMiAxLjUgMS41IDAgMDEtMyAwdi0uMDJ6bTAtNy45M2ExLjUgMS41IDAgMTEzIDAgMS41IDEuNSAwIDAxLTMgMHptMC03LjkyYTEuNSAxLjUgMCAxMTMgMCAxLjUgMS41IDAgMDEtMyAwem0wLTcuOTNhMS41IDEuNSAwIDExMyAwIDEuNSAxLjUgMCAwMS0zIDB6bTAtNy45MmExLjUgMS41IDAgMTEzIDAgMS41IDEuNSAwIDAxLTMgMHptMS41LTYuNDJhMS41IDEuNSAwIDAxLTEuMDYtMi41NiAxLjA2IDEuMDYgMCAwMS4yMy0uMTkgMS41OSAxLjU5IDAgMDEuMjYtLjExbC4yOS0uMTFhMS40MiAxLjQyIDAgMDEuNTggMGwuMjguMDguMjYuMTRhMS4zNyAxLjM3IDAgMDEuMjMuMTkgMS41IDEuNSAwIDAxLTEuMDYgMi41NmgtLjAxek01OSA0MS4zNmExLjUgMS41IDAgMTEzIDAgMS41IDEuNSAwIDAxLTMgMHptLTguMzEgMGExLjUgMS41IDAgMTExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUzLTEuNWguMDN6bS04LjMyIDBhMS41IDEuNSAwIDExMS41IDEuNSAxLjUgMS41IDAgMDEtMS41My0xLjVoLjAzem0tOC4zMSAwYTEuNSAxLjUgMCAxMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNTYtMS41aC4wNnptLTguMzEgMGExLjUgMS41IDAgMTExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUzLTEuNWguMDN6bS04LjMyIDBhMS41IDEuNSAwIDExMS41IDEuNSAxLjUgMS41IDAgMDEtMS41My0xLjVoLjAzem0tOC4zMSAwYTEuNSAxLjUgMCAxMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNTMtMS41aC4wM3ptNTkuNjYgMS41YTEuNDkgMS40OSAwIDAxLTEuMzgtMi4wOCAxLjEgMS4xIDAgMDEuMTQtLjI2IDEuMjQgMS4yNCAwIDAxLjE4LS4yMiAxLjUyIDEuNTIgMCAwMTEuMzYtLjQxbC4yOC4wOGEyIDIgMCAwMS4yNS4xNCAxLjA2IDEuMDYgMCAwMS4yMy4xOSAxLjMgMS4zIDAgMDEuMTkuMjJjMCAuMDkuMS4xNy4xNC4yNmExLjQ3IDEuNDcgMCAwMS4wOC4yOCAxLjUgMS41IDAgMDEtLjQxIDEuMzYgMSAxIDAgMDEtLjIzLjE4IDEuMjMgMS4yMyAwIDAxLS4yNS4xNCAxLjQxIDEuNDEgMCAwMS0uNTguMTJ6bS0xLjUgNTMuOTZhMS41IDEuNSAwIDExMyAwIDEuNSAxLjUgMCAwMS0zIDB6bTAtNy45MmExLjUgMS41IDAgMTEzIDAgMS41IDEuNSAwIDAxLTMgMHptMC03LjkyYzAtLjgzLjY3LTEuNTA1IDEuNS0xLjUxYTEuNTEgMS41MSAwIDAxMS41IDEuNTMgMS41IDEuNSAwIDAxLTMgMHYtLjAyem0wLTcuOTNhMS41IDEuNSAwIDExMyAwIDEuNSAxLjUgMCAwMS0zIDB6bTAtNy45MmExLjUgMS41IDAgMTEzIDAgMS41IDEuNSAwIDAxLTMgMHptMC03LjkzYTEuNSAxLjUgMCAxMTMgMCAxLjUgMS41IDAgMDEtMyAwem0wLTcuOTJhMS41IDEuNSAwIDExMyAwIDEuNSAxLjUgMCAwMS0zIDB6IiBmaWxsPSIjREVFNEY1IiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xNy42NCAxLjk4aDkxLjI2djg3LjU1SDE3LjY0eiIvPjxwYXRoIGQ9Ik0xMDkuNzUgOTAuMzhIOTguMTZjLTEuOTIgMC0zLjg4LS4wNi01LjczIDAtLjk0IDAtMS44NS4xLTIuODEuMWgtMi45MWMtMi0uMDctMy45NS0uMTctNS44Ni0uMTZsLTUuNjguMTUtMTEuMzguMzNjLTEuOTEgMC0zLjgxLjEzLTUuNzUuMXMtMy44OS0uMTMtNS44My0uMTdjLTEuOTQtLjA0LTMuODUgMC01Ljc1LjA2cy0zLjgxLjE3LTUuNzMuMTljLTMuODctLjA3LTcuNzItLjE0LTExLjU4LS4yNmwtMi44OC0uMDhoLTguNjNhMSAxIDAgMDEtMS0xYzAtMy42NS0uMzktNy4yOS0uMTctMTAuOTRhNDUuNSA0NS41IDAgMDAuMjMtNS40N2MtLjA2LS45MS0uMTctMS44My0uMTgtMi43NC0uMDEtLjkxIDAtMS44MiAwLTIuNzMgMC03LjMuMjEtMTQuNi4xNi0yMS44OVY0MC40YzAtMS44Mi4xNy0zLjY1LjI1LTUuNDguMDgtMS44My4xOS0zLjY0LjEzLTUuNDctLjA2LTEuODMtLjI0LTMuNjQtLjIzLTUuNDcgMC0zLjY1LjMtNy4yOS4zNy0xMC45NC4wNy0zLjY1IDAtNy4zLS4wOC0xMC45NSAwLS4zLjI0LS41NDUuNTQtLjU1IDMuOC0uMDkgNy42MSAwIDExLjQxIDBzNy42IDAgMTEuNDEuMTFjMS45IDAgMy44LjA1IDUuNyAwbDUuNy0uMThjMy44MS0uMTYgNy42MS0uMjQgMTEuNDEtLjMzIDMuOC0uMDkgNy42LS4xMiAxMS40MS0uMTggMy44MS0uMDYgNy42LjIxIDExLjQuMjYgMy44LjA1IDcuNjEtLjE2IDExLjQxLS4yNCAzLjgtLjA4IDcuNjEtLjMzIDExLjQxLS4xaC4wOEExLjE5IDEuMTkgMCAwMTExMC4xMyAyYzAgLjkzLS4wNiAxLjg1LS4wNyAyLjc3bC4wNiAyLjc2LjExIDUuNTRjMCAxLjg1IDAgMy42OS0uMTIgNS41Mi0uMTIgMS44My0uMjYgMy42NC0uMjcgNS40OCAwIDMuNjguMTYgNy40MS0uMDkgMTFhNDUuMjEgNDUuMjEgMCAwMC4xMSA1LjU2IDUzLjcyIDUzLjcyIDAgMDEwIDUuNTNjLS4xNiAzLjYyLS4yNSA3LjI1LS4yNiAxMC45My0uMDEgMy42OC4xNyA3LjQ3IDAgMTEtLjE3IDMuNTMgMCA3LjM0LjA4IDExLjExLjA2IDEuOSAwIDMuNzMuMDYgNS41OS4wNiAxLjg2LjAzIDMuNzcuMDEgNS41OXptLTEuNy0xLjdWNzcuODdjLjA2LTMuNTUuMTgtNy4wOC0uMDYtMTAuODUtLjEtMS44Ny0uMTktMy43Mi0uMTctNS41MWwuMTEtNS4zNGMwLTMuNi0uMTgtNy4zLS4zNy0xMWEzNi44OSAzNi44OSAwIDAxMC01LjM3IDMwLjUyIDMwLjUyIDAgMDAuMTgtNS4zNSA1MCA1MCAwIDAxLS4xNi01LjQ1YzAtMS43OC4yMy0zLjU1LjIzLTUuMzZ2LTIuNzJsLS4xNi0yLjczYy0uMTItMS44Mi0uMTItMy42Mi0uMDktNS40MmwuMTctNS40LjA4LTIuN1YxLjk1bDEuMTQgMS4xNWMtNy42MS4zMi0xNS4yMS0uMzktMjIuODItLjE4LTEuOSAwLTMuOC4xOS01LjcuMjktLjk1LjA3LTEuOS4xLTIuODUuMTMtLjk1LjAzLTEuOS4wNS0yLjg1IDAtMy44MSAwLTcuNjEuMDUtMTEuNDEtLjA3LTMuOC0uMTItNy42LS4wOS0xMS40MS0uMzNhOTQuMyA5NC4zIDAgMDAtMTEuNC0uMmMtNy42MS4zMi0xNS4yMS40OC0yMi44Mi4zOEwxOC44NCAyYy0uMTQgMy42NS0uNDEgNy4zLS4yNSAxMSAuMTYgMy43LjU4IDcuMjkuNTkgMTAuOTQgMCAxLjgzLS4zNCAzLjY1LS41IDUuNDdhMjAuODkgMjAuODkgMCAwMDAgMi43NGMwIC45MS4xIDEuODIuMTggMi43M2E1MC40MSA1MC40MSAwIDAxLjM2IDUuNDhjLjA1IDEuODItLjA1IDMuNjQtLjA4IDUuNDdsLS4xNCA1LjR2NS40N2wtLjA4IDExdjIuNzNjMCAuOTEtLjE2IDEuODMtLjI0IDIuNzRhNDMuNDUgNDMuNDUgMCAwMC4xNCA1LjQ3Yy4xNyAzLjY1LS4yNCA3LjI5LS4yOCAxMC45NGwtLjg0LS44NGM3LjU2LjE1IDE1LjEyLjA4IDIyLjY3LjA2bDUuNjcuMDZjMS44OSAwIDMuNzkgMCA1LjY1LS4wN2w1LjU5LS4xOWg1LjY2bDExLjQuMiA1LjcuMDljMS44OSAwIDMuNzItLjEgNS41NS0uMTcgMS44My0uMDcgMy43MyAwIDUuNjcgMGg1LjY2YzMuNjMtLjAzIDcuNC0uMDIgMTEuMTMtLjA0eiIgZmlsbD0iI0RFRTRGNSIgZmlsbC1ydWxlPSJub256ZXJvIi8+PGcgb3BhY2l0eT0iLjUiIGZpbGw9IiNERUU0RjUiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZD0iTTI1LjkgOS45aDc0Ljc1djcxLjcxSDI1Ljl6Ii8+PHBhdGggZD0iTTEwMS4yMSA4Mi4xOEg4Ny4wNmMtMS41MiAwLTMuMDguMS00LjY5IDAtMS42MS0uMS0zLjIxLS4wOS00Ljc3LS4wOGwtNC42NS4xLTkuMzQuMjJjLTMuMDkuMTItNi4yOSAwLTkuNDUgMC0xLjU4LS4wNi0zLjE0IDAtNC43IDBsLTQuNy4xMWMtNi4zMS0uMDctMTIuNi0uMjktMTguODYtLjI1YS43LjcgMCAwMS0uNzEtLjY5YzAtMy0uMjQtNi0uMTEtOWE0NC43MSA0NC43MSAwIDAwLjE2LTQuNDhjMC0uNzUtLjEyLTEuNS0uMTItMi4yNHYtMi4xOGMwLTYgLjE0LTEyIC4xMS0xNy45My0uMDMtNS45My41Ny0xMS45NS4xLTE3LjkzbC4yNC05Yy4wNi0zIDAtNi0uMDUtOSAwLS4yLjE2LS4zNjUuMzYtLjM3IDMuMTEtLjA2IDYuMjIgMCA5LjM0IDBzNi4yMyAwIDkuMzQuMDdoNC42N2w0LjY4LS4xMmMzLjExLS4xIDYuMjMtLjE2IDkuMzQtLjIyIDMuMTEtLjA2IDYuMjMtLjA3IDkuMzQtLjExIDMuMTEtLjA0IDYuMjMuMTEgOS4zNS4xNSAzLjEyLjA0IDYuMjMtLjA5IDkuMzQtLjE0IDMuMTEtLjA1IDYuMjMtLjE5IDkuMzQtLjA3aC4wNmEuODEuODEgMCAwMS43Ny44MnY0LjUybC4wNiA0LjUzYzAgMS41MSAwIDMtLjA4IDQuNTEtLjA4IDEuNTEtLjE0IDMtLjE3IDQuNDkgMCAzIC4xIDYgMCA5LS4wNyAxLjQ4IDAgMyAuMDYgNC41My4wNiAxLjUzIDAgMyAwIDQuNTMtLjEgMy0uMTYgNS45NC0uMTcgOC45NS0uMDEgMy4wMS4xMSA2LjA5IDAgOXMwIDYgLjA1IDkuMDggMCA2LjE3LjAxIDkuMnptLTEuMTMtMS4xM3YtOC44OGMwLTIuODguMS01Ljg1IDAtOC45LS4xLTMuMDUtLjA5LTYgMC04LjkuMDktMi45LS4xMS02LS4yNC05YTQwLjYzIDQwLjYzIDAgMDEwLTQuNDIgMzIgMzIgMCAwMC4xMi00LjRjLS4yNS0zIDAtNS45MSAwLTguODcgMC0yLjk2LS4zMy02LS4xOC04LjkxbC4xLTQuNDRWOS44OGwuNzcuNzdjLTMuMTEuMTItNi4yMiAwLTkuMzQgMHMtNi4yMy0uMTItOS4zNC0uMDhjLTMuMTEuMDQtNi4yMy4zMy05LjM1LjMtMy4xMi0uMDMtNi4yMyAwLTkuMzQgMC0zLjExIDAtNi4yMy0uMDgtOS4zNC0uMjNsLTQuNjgtLjE3Yy0xLjU1LS4wNS0zLjExIDAtNC42NyAwLTYuMjMuMjItMTIuNDYuMzItMTguNjguMjVsLjgtLjhjLS4xIDMtLjI4IDYtLjE3IDkgLjExIDMgLjM5IDYgLjM5IDkgMCAxLjUtLjIyIDMtLjMyIDQuNDhhMzEuODkgMzEuODkgMCAwMC4xIDQuNDggNzAuNjkgNzAuNjkgMCAwMS4xOCA5Yy0uMTUgNi0uMDcgMTEuOTUtLjE1IDE3LjkzdjIuMjRjMCAuNzQtLjExIDEuNDktLjE2IDIuMjRhNDEuODcgNDEuODcgMCAwMC4wOSA0LjQ4Yy4xIDMtLjE1IDYtLjE4IDlsLS41Ni0uNTZjNi4xOS4xIDEyLjM5IDAgMTguNTggMCAzLjEgMCA2LjIzLjExIDkuMjkgMCAzLjA2LS4xMSA2LjEyLS4yIDkuMjQtLjExbDkuMzQuMTQgNC42Ny4wNiA0LjU3LS4xYzEuNTEtLjA2IDMuMDcgMCA0LjY1IDBoNC42NGMzLjAxLS4xNSA2LjA5LS4xNCA5LjE3LS4xNXoiLz48L2c+PHJlY3QgZmlsbD0iI0RFRTRGNSIgZmlsbC1ydWxlPSJub256ZXJvIiB4PSIzNC42NyIgeT0iMjMuMTEiIHdpZHRoPSIyMi4xNSIgaGVpZ2h0PSIyNC41MiIgcng9IjExLjAyIi8+PHBhdGggZD0iTTQ1Ljc5IDQ4YTEyLjA3IDEyLjA3IDAgMDEtOC42MS0zLjcgMTEuMTEgMTEuMTEgMCAwMS0yLjQyLTQuMTZjLS4xMi0uMzktLjItLjc5LS4zLTEuMTgtLjEtLjM5LS4xMi0uNzktLjE4LTEuMTlsLS4wNS0xLjIxdi0xLjE0YzAtLjc3IDAtMS41NS4wNy0yLjM2IDAtLjQuMTMtLjguMTktMS4xOWwuMzItMS4xNmExMS4wNiAxMS4wNiAwIDAxMi40My00LjA4IDExLjM5IDExLjM5IDAgMDEzLjgyLTIuNzggMTIuMjcgMTIuMjcgMCAwMTQuNjItMSAxMS4yNSAxMS4yNSAwIDAxNC42MSAxIDEyIDEyIDAgMDEzLjg4IDIuNjkgMTEuNDEgMTEuNDEgMCAwMTIuNDMgNC4wOWMuMTMuMzcuMjIuNzcuMzIgMS4xNS4xLjM4LjE0Ljc5LjIxIDEuMTlsLjA3IDEuMTl2MS4xN2MwIC43NyAwIDEuNTUtLjA5IDIuMzUtLjA1LjQtLjEzLjgtLjE5IDEuMTlMNTYuNjQgNDBhMTAuODcgMTAuODcgMCAwMS0yLjM1IDQuMTQgNy40OCA3LjQ4IDAgMDEtLjg2LjgzIDguMjYgOC4yNiAwIDAxLS45NC43NEExMC45MiAxMC45MiAwIDAxNTAuNDQgNDdhMTEuNjIgMTEuNjIgMCAwMS00LjY1IDF6bTAtLjc5YTEwLjI5IDEwLjI5IDAgMDA3Ljg2LTMuNjQgMTEuMjMgMTEuMjMgMCAwMDIuMjItMy44MSAxMyAxMyAwIDAwLjUzLTQuNDZ2LTIuMjljLS4wNi0uMzctLjA5LS43NC0uMTYtMS4xMS0uMDctLjM3LS4xOS0uNzMtLjMxLTEuMDhhMTAuNjkgMTAuNjkgMCAwMC0yLjMtMy44MiAxMC40OCAxMC40OCAwIDAwLTMuNTctMi42NSAxMS4yNyAxMS4yNyAwIDAwLTQuMzctLjc4aC0xLjExYTEwLjYgMTAuNiAwIDAwLTEuMTEuMTYgMTEgMTEgMCAwMC0yLjEuNzEgMTAuMjggMTAuMjggMCAwMC0zLjU4IDIuNjEgMTQuMTIgMTQuMTIgMCAwMC0yLjIzIDMuODMgMTAuMjIgMTAuMjIgMCAwMC0uMzEgMS4xMmMwIC4zNy0uMTIuNzQtLjE2IDEuMTEtLjA4Ljc0LS4xMiAxLjUxLS4xNCAyLjI5YTEwLjU3IDEwLjU3IDAgMDAyLjg0IDguMzQgMTAuMjMgMTAuMjMgMCAwMDggMy40OXYtLjAyeiIgZmlsbD0iI0RFRTRGNSIgZmlsbC1ydWxlPSJub256ZXJvIi8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNDUuNzQgMzUuMzdoMjguOTN2MzIuMDJINDUuNzR6Ii8+PHBhdGggZD0iTTc1IDY3LjY3Yy0yLjQzIDAtNC45NC0uMDYtNy4zIDAtMi41MS0uMTEtNC44NyAwLTcuMjkuMDctMS4yMSAwLTIuNDEuMDktMy42NSAwLTEuMjQtLjA5LTIuNDYtLjA3LTMuNjYgMC0yLjQzLjEyLTQuODktLjA3LTcuMzItLjA3YS4zNi4zNiAwIDAxLS4zNi0uMzZ2LTRjMC0xLjMzLjEyLTIuNjcgMC00LS4wOC0yLjY2IDAtNS4zMyAwLTh2LTRsLjA5LTJjMC0uNjcgMC0xLjM0LS4wNi0yIDAtMS4zMy4wNi0yLjY2LjA5LTQgLjAzLTEuMzQgMC0yLjY3IDAtNGEuMi4yIDAgMDEuMTktLjE5aDcuMjNjMi40MS4wOCA0LjgzLS4xIDcuMjQtLjEyaDcuMjRjMi40MS4xMSA0LjgyIDAgNy4yMy0uMDhhLjQyLjQyIDAgMDEuNDMuNGMuMDcgMS4zNS0uMDkgMi42OSAwIDRzLjA3IDIuNzEgMCA0LS4wNyAyLjY3IDAgNGwtLjA3IDItLjAzIDIuMmMwIDEuMzQtLjEgMi42NS0uMTEgNC0uMDEgMS4zNS4wOCAyLjc0IDAgNGwtLjA1IDIgLjA1IDIuMDZDNzUgNjUgNzUgNjYuMzEgNzUgNjcuNjd6bS0uNTctLjU2di02bC0uMDctMmMtLjA5LTEuMzcgMC0yLjYxIDAtNGwtLjE0LTRjMC0uNjYuMTMtMS4yNy4xMi0xLjk0LS4wMS0uNjctLjA2LTEuMzQtLjA4LTJhMzcuMTIgMzcuMTIgMCAwMDAtNGMtLjA5LTEuMzQgMC0yLjY0IDAtNCAwLTEuMzYtLjA3LTIuNjUgMC00bC40LjRjLTIuNDEgMC00LjgyLS4xNi03LjIzIDBsLTEuODEuMDdINjAuMmMtMi40MSAwLTQuODMtLjI5LTcuMjQtLjEzLTIuNDEuMTYtNC44Mi4xNi03LjIzLjFsLjM5LS4zOWMwIDEuMzMtLjE0IDIuNjctLjA2IDQgLjA4IDEuMzMuMjMgMi42Ny4xNiA0YTE5LjQzIDE5LjQzIDAgMDAtLjE2IDJjMCAuNjYuMDkgMS4zMy4xNCAyIC4xMiAxLjMzIDAgMi42NiAwIDQtLjA2IDIuNjcgMCA1LjM0LS4xMiA4LS4wOSAxLjM0LjEyIDIuNjcgMCA0cy0uMDcgMi42Ny0uMDkgNGwtLjI2LS4yNWg3LjE5YzEuMiAwIDIuMzkgMCAzLjU3LS4wNyAxLjE4LS4wNyAyLjM4IDAgMy41OCAwIDIuNCAwIDQuODUuMTMgNy4xNyAwIDIuNDUuMjkgNC43Ni4xOSA3LjE1LjIxaC4wNHoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxwYXRoIGQ9Ik04MCA0OS40bC05Ljc2IDE5IDIxLjY1LS43LTExLjMxLTE4LjMzYS4zMy4zMyAwIDAwLS41OC4wM3oiIGZpbGw9IiNERUU0RjUiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxwYXRoIGQ9Ik04MC4zMyA0OS41OGMtLjgyIDEuNTgtMS42MiAzLjE3LTIuNDggNC43M2wtMS4xMiAyLjQzLTEuMiAyLjM4Yy0xLjY4IDMuMTUtMy4yOSA2LjMyLTUgOS40NWwtLjMzLS41MmMxLjggMCAzLjYxIDAgNS40Mi0uMDlzMy42MSAwIDUuNDEtLjEzYzEuOC0uMTMgMy42MS0uMDkgNS40MS0uMTYgMS44LS4wNyAzLjYxLS4yMyA1LjQxLS4zbC0uMjcuNTEtMy00LjcxYy0xLTEuNTgtMS44Ny0zLjItMi44OC00Ljc2LS40OS0uNzktMS0xLjU3LTEuNDctMi4zN3MtLjkxLTEuNjItMS40Mi0yLjRsLTEuNDgtMi4zNS0uNzUtMS4xOC0uMzUtLjU0LjEuMDF6bS0uNy0uMzZhLjc0Ljc0IDAgMDEuNTctLjQxLjcxLjcxIDAgMDEuNjYuMjdjLjE5LjI3LjI3LjQxLjQuNjNsLjc0IDEuMTggMS40OCAyLjM2Yy40OC44IDEgMS41NSAxLjUyIDIuMzQuNTIuNzkgMSAxLjU5IDEuNDQgMi4zOGwyLjg2IDQuNzhhNjUuMzUgNjUuMzUgMCAwMDEuNDEgMi40bDEuNSAyLjM1YS4zOC4zOCAwIDAxLS4xMi41NC4zMy4zMyAwIDAxLS4xOS4wNmwtMi43MS4xM2MtLjkuMDgtMS44MSAwLTIuNzEgMC0xLjguMDktMy42LjI5LTUuNDEuMzEtMS44MS4wMi0zLjYxLjEzLTUuNDEuMTQtMS44LjAxLTMuNjEuMjYtNS40Mi4xN2EuNDMuNDMgMCAwMS0uNDEtLjQ1LjQ2LjQ2IDAgMDEwLS4yYy40NS0uNzcuOS0xLjU0IDEuMjktMi4zNC4zOS0uOC44OC0xLjU1IDEuMy0yLjMzLjg4LTEuNTMgMS41OC0zLjE3IDIuNDEtNC43N0w3NiA1Ni4zNyA3Ny4yNyA1NGMuNzMtMS42IDEuNTctMy4xOSAyLjM2LTQuNzh6IiBmaWxsPSIjREVFNEY1IiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48Y2lyY2xlIGZpbGw9IiNERUU0RjUiIGZpbGwtcnVsZT0ibm9uemVybyIgY3g9IjEwOC42NCIgY3k9Ijg4LjI1IiByPSIxOS41Ii8+PHBhdGggZD0iTTEwOC42NCA3OC42NnYxOS4xOG03LjE4LTkuNTlsLTcuMTgtOS41OS03LjE4IDkuNTkiIHN0cm9rZT0iI0ZGRiIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L2c+PC9zdmc+Cg==';
9630
9631var DropZoneContext = React__default.createContext({
9632 disabled: false,
9633 focused: false,
9634 size: 'extraLarge',
9635 type: 'file',
9636 measuring: false
9637});
9638
9639var styles$M = {
9640 "FileUpload": "Polaris-DropZone-FileUpload",
9641 "measuring": "Polaris-DropZone-FileUpload--measuring",
9642 "Button": "Polaris-DropZone-FileUpload__Button",
9643 "globalTheming": "Polaris-DropZone-FileUpload--globalTheming",
9644 "disabled": "Polaris-DropZone-FileUpload--disabled",
9645 "focused": "Polaris-DropZone-FileUpload--focused",
9646 "sizeSlim": "Polaris-DropZone-FileUpload--sizeSlim",
9647 "ActionTitle": "Polaris-DropZone-FileUpload__ActionTitle",
9648 "ActionTitle-disabled": "Polaris-DropZone-FileUpload__ActionTitle--disabled",
9649 "ActionTitle-focused": "Polaris-DropZone-FileUpload__ActionTitle--focused",
9650 "Image": "Polaris-DropZone-FileUpload__Image",
9651 "sizeExtraLarge": "Polaris-DropZone-FileUpload--sizeExtraLarge",
9652 "sizeLarge": "Polaris-DropZone-FileUpload--sizeLarge"
9653};
9654
9655function FileUpload(props) {
9656 var i18n = useI18n();
9657
9658 var _useContext = useContext(DropZoneContext),
9659 size = _useContext.size,
9660 measuring = _useContext.measuring,
9661 type = _useContext.type,
9662 focused = _useContext.focused,
9663 disabled = _useContext.disabled;
9664
9665 var suffix = capitalize(type);
9666 var _props$actionTitle = props.actionTitle,
9667 actionTitle = _props$actionTitle === void 0 ? i18n.translate("Polaris.DropZone.FileUpload.actionTitle".concat(suffix)) : _props$actionTitle,
9668 _props$actionHint = props.actionHint,
9669 actionHint = _props$actionHint === void 0 ? i18n.translate("Polaris.DropZone.FileUpload.actionHint".concat(suffix)) : _props$actionHint;
9670 var imageClasses = classNames(styles$M.Image, size && size === 'extraLarge' && styles$M.sizeExtraLarge, size && size === 'large' && styles$M.sizeLarge);
9671 var buttonStyles = size === 'extraLarge' || size === 'large' ? classNames(styles$M.Button, size && size !== 'extraLarge' && styles$M.slim, focused && styles$M.focused, disabled && styles$M.disabled) : null;
9672 var buttonMarkup = (size === 'extraLarge' || size === 'large') && buttonStyles ? React__default.createElement("div", {
9673 className: buttonStyles
9674 }, actionTitle) : null;
9675 var extraLargeView = size === 'extraLarge' ? React__default.createElement(Stack, {
9676 vertical: true
9677 }, type === 'file' && React__default.createElement("img", {
9678 className: imageClasses,
9679 src: fileUpload,
9680 alt: ""
9681 }), type === 'image' && React__default.createElement("img", {
9682 className: imageClasses,
9683 src: imageUpload,
9684 alt: ""
9685 }), buttonMarkup, React__default.createElement(TextStyle, {
9686 variation: "subdued"
9687 }, actionHint)) : null;
9688 var largeView = size === 'large' ? React__default.createElement(Stack, {
9689 vertical: true,
9690 spacing: "tight"
9691 }, type === 'file' && React__default.createElement("img", {
9692 className: imageClasses,
9693 src: fileUpload,
9694 alt: ""
9695 }), type === 'image' && React__default.createElement("img", {
9696 className: imageClasses,
9697 src: imageUpload,
9698 alt: ""
9699 }), buttonMarkup, React__default.createElement(Caption, null, React__default.createElement(TextStyle, {
9700 variation: "subdued"
9701 }, actionHint))) : null;
9702 var actionTitleClassName = classNames(styles$M.ActionTitle, focused && !disabled && styles$M['ActionTitle-focused'], disabled && styles$M['ActionTitle-disabled']);
9703 var actionTitleMarkup = React__default.createElement("div", {
9704 className: actionTitleClassName
9705 }, actionTitle);
9706 var mediumView = size === 'medium' ? React__default.createElement(Stack, {
9707 vertical: true,
9708 spacing: "tight"
9709 }, actionTitleMarkup, React__default.createElement(Caption, null, React__default.createElement(TextStyle, {
9710 variation: "subdued"
9711 }, actionHint))) : null;
9712 var smallView = size === 'small' ? React__default.createElement(Stack, {
9713 vertical: true,
9714 spacing: "tight"
9715 }, React__default.createElement(Icon, {
9716 source: DragDropMajorMonotone,
9717 color: "inkLightest"
9718 })) : null;
9719 var fileUploadClassName = classNames(styles$M.FileUpload, measuring && styles$M.measuring);
9720 return React__default.createElement("div", {
9721 className: fileUploadClassName
9722 }, smallView, mediumView, largeView, extraLargeView);
9723}
9724
9725var dragEvents = ['dragover', 'dragenter', 'drop'];
9726function fileAccepted(file, accept) {
9727 return file.type === 'application/x-moz-file' || accepts(file, accept);
9728}
9729function getDataTransferFiles(event) {
9730 if (isDragEvent(event) && event.dataTransfer) {
9731 var dt = event.dataTransfer;
9732
9733 if (dt.files && dt.files.length) {
9734 return Array.from(dt.files);
9735 } else if (dt.items && dt.items.length) {
9736 // Chrome is the only browser that allows to read the file list on drag
9737 // events and uses `items` instead of `files` in this case.
9738 return Array.from(dt.items);
9739 }
9740 } else if (isChangeEvent(event) && event.target.files) {
9741 // Return files from even when a file was selected from an upload dialog
9742 return Array.from(event.target.files);
9743 }
9744
9745 return [];
9746}
9747
9748function accepts(file, acceptedFiles) {
9749 if (file && acceptedFiles) {
9750 var fileName = file.name || '';
9751 var mimeType = file.type || '';
9752 var baseMimeType = mimeType.replace(/\/.*$/, '');
9753 var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');
9754 return acceptedFilesArray.some(function (type) {
9755 var validType = type.trim();
9756
9757 if (validType.startsWith('.')) {
9758 return fileName.toLowerCase().endsWith(validType.toLowerCase());
9759 } else if (validType.endsWith('/*')) {
9760 // This is something like a image/* mime type
9761 return baseMimeType === validType.replace(/\/.*$/, '');
9762 }
9763
9764 return mimeType === validType;
9765 });
9766 }
9767
9768 return true;
9769}
9770
9771function isDragEvent(event) {
9772 return dragEvents.indexOf(event.type) > 0;
9773}
9774
9775function isChangeEvent(event) {
9776 return Object.prototype.hasOwnProperty.call(event, 'target');
9777}
9778
9779var styles$N = {
9780 "DropZone": "Polaris-DropZone",
9781 "hasOutline": "Polaris-DropZone--hasOutline",
9782 "isDisabled": "Polaris-DropZone--isDisabled",
9783 "focused": "Polaris-DropZone--focused",
9784 "isDragging": "Polaris-DropZone--isDragging",
9785 "sizeExtraLarge": "Polaris-DropZone--sizeExtraLarge",
9786 "sizeLarge": "Polaris-DropZone--sizeLarge",
9787 "sizeMedium": "Polaris-DropZone--sizeMedium",
9788 "sizeSmall": "Polaris-DropZone--sizeSmall",
9789 "measuring": "Polaris-DropZone--measuring",
9790 "Container": "Polaris-DropZone__Container",
9791 "Overlay": "Polaris-DropZone__Overlay",
9792 "hasError": "Polaris-DropZone--hasError"
9793};
9794
9795// subcomponents so explicitly state the subcomponents in the type definition.
9796// Letting this be implicit works in this project but fails in projects that use
9797// generated *.d.ts files.
9798
9799var DropZone = function DropZone(_ref) {
9800 var dropOnPage = _ref.dropOnPage,
9801 label = _ref.label,
9802 labelAction = _ref.labelAction,
9803 labelHidden = _ref.labelHidden,
9804 children = _ref.children,
9805 _ref$disabled = _ref.disabled,
9806 disabled = _ref$disabled === void 0 ? false : _ref$disabled,
9807 _ref$outline = _ref.outline,
9808 outline = _ref$outline === void 0 ? true : _ref$outline,
9809 accept = _ref.accept,
9810 active = _ref.active,
9811 _ref$overlay = _ref.overlay,
9812 overlay = _ref$overlay === void 0 ? true : _ref$overlay,
9813 _ref$allowMultiple = _ref.allowMultiple,
9814 allowMultiple = _ref$allowMultiple === void 0 ? true : _ref$allowMultiple,
9815 overlayText = _ref.overlayText,
9816 errorOverlayText = _ref.errorOverlayText,
9817 idProp = _ref.id,
9818 _ref$type = _ref.type,
9819 type = _ref$type === void 0 ? 'file' : _ref$type,
9820 onClick = _ref.onClick,
9821 error = _ref.error,
9822 openFileDialog = _ref.openFileDialog,
9823 onFileDialogClose = _ref.onFileDialogClose,
9824 customValidator = _ref.customValidator,
9825 onDrop = _ref.onDrop,
9826 onDropAccepted = _ref.onDropAccepted,
9827 onDropRejected = _ref.onDropRejected,
9828 onDragEnter = _ref.onDragEnter,
9829 onDragOver = _ref.onDragOver,
9830 onDragLeave = _ref.onDragLeave;
9831 var node = useRef(null);
9832 var fileInputNode = useRef(null);
9833 var dragTargets = useRef([]);
9834 var adjustSize = useCallback(debounce(function () {
9835 if (!node.current) {
9836 return;
9837 }
9838
9839 var size = 'extraLarge';
9840 var width = node.current.getBoundingClientRect().width;
9841
9842 if (width < 100) {
9843 size = 'small';
9844 } else if (width < 160) {
9845 size = 'medium';
9846 } else if (width < 300) {
9847 size = 'large';
9848 }
9849
9850 setSize(size);
9851 measuring && setMeasuring(false);
9852 }, 50, {
9853 trailing: true
9854 }), []);
9855
9856 var _useState = useState(false),
9857 _useState2 = _slicedToArray(_useState, 2),
9858 dragging = _useState2[0],
9859 setDragging = _useState2[1];
9860
9861 var _useState3 = useState(false),
9862 _useState4 = _slicedToArray(_useState3, 2),
9863 internalError = _useState4[0],
9864 setInternalError = _useState4[1];
9865
9866 var _useForcibleToggle = useForcibleToggle(false),
9867 _useForcibleToggle2 = _slicedToArray(_useForcibleToggle, 2),
9868 focused = _useForcibleToggle2[0],
9869 _useForcibleToggle2$ = _useForcibleToggle2[1],
9870 handleFocus = _useForcibleToggle2$.forceTrue,
9871 handleBlur = _useForcibleToggle2$.forceFalse;
9872
9873 var _useState5 = useState(0),
9874 _useState6 = _slicedToArray(_useState5, 2),
9875 numFiles = _useState6[0],
9876 setNumFiles = _useState6[1];
9877
9878 var _useState7 = useState('extraLarge'),
9879 _useState8 = _slicedToArray(_useState7, 2),
9880 size = _useState8[0],
9881 setSize = _useState8[1];
9882
9883 var _useState9 = useState(true),
9884 _useState10 = _slicedToArray(_useState9, 2),
9885 measuring = _useState10[0],
9886 setMeasuring = _useState10[1];
9887
9888 var i18n = useI18n();
9889 var dropNode = dropOnPage ? document : node;
9890 var getValidatedFiles = useCallback(function (files) {
9891 var acceptedFiles = [];
9892 var rejectedFiles = [];
9893 Array.from(files).forEach(function (file) {
9894 !fileAccepted(file, accept) || customValidator && !customValidator(file) ? rejectedFiles.push(file) : acceptedFiles.push(file);
9895 });
9896
9897 if (!allowMultiple) {
9898 acceptedFiles.splice(1, acceptedFiles.length);
9899 rejectedFiles.push.apply(rejectedFiles, _toConsumableArray(acceptedFiles.slice(1)));
9900 }
9901
9902 return {
9903 files,
9904 acceptedFiles,
9905 rejectedFiles
9906 };
9907 }, [accept, allowMultiple, customValidator]);
9908 var handleDrop = useCallback(function (event) {
9909 stopEvent(event);
9910 if (disabled || !allowMultiple && numFiles > 0) return;
9911 var fileList = getDataTransferFiles(event);
9912
9913 var _getValidatedFiles = getValidatedFiles(fileList),
9914 files = _getValidatedFiles.files,
9915 acceptedFiles = _getValidatedFiles.acceptedFiles,
9916 rejectedFiles = _getValidatedFiles.rejectedFiles;
9917
9918 dragTargets.current = [];
9919 setDragging(false);
9920 setInternalError(rejectedFiles.length > 0);
9921 setNumFiles(function (numFiles) {
9922 return numFiles + acceptedFiles.length;
9923 });
9924 onDrop && onDrop(files, acceptedFiles, rejectedFiles);
9925 onDropAccepted && acceptedFiles.length && onDropAccepted(acceptedFiles);
9926 onDropRejected && rejectedFiles.length && onDropRejected(rejectedFiles);
9927 event.target.value = '';
9928 }, [allowMultiple, disabled, getValidatedFiles, numFiles, onDrop, onDropAccepted, onDropRejected]);
9929 var handleDragEnter = useCallback(function (event) {
9930 stopEvent(event);
9931 if (disabled || !allowMultiple && numFiles > 0) return;
9932 var fileList = getDataTransferFiles(event);
9933
9934 if (event.target && !dragTargets.current.includes(event.target)) {
9935 dragTargets.current.push(event.target);
9936 }
9937
9938 if (dragging) return;
9939
9940 var _getValidatedFiles2 = getValidatedFiles(fileList),
9941 rejectedFiles = _getValidatedFiles2.rejectedFiles;
9942
9943 setDragging(true);
9944 setInternalError(rejectedFiles.length > 0);
9945 onDragEnter && onDragEnter();
9946 }, [allowMultiple, disabled, dragging, getValidatedFiles, numFiles, onDragEnter]);
9947 var handleDragOver = useCallback(function (event) {
9948 stopEvent(event);
9949 if (disabled || !allowMultiple && numFiles > 0) return;
9950 onDragOver && onDragOver();
9951 }, [allowMultiple, disabled, numFiles, onDragOver]);
9952 var handleDragLeave = useCallback(function (event) {
9953 event.preventDefault();
9954 if (disabled || !allowMultiple && numFiles > 0) return;
9955 dragTargets.current = dragTargets.current.filter(function (el) {
9956 var compareNode = dropNode && 'current' in dropNode ? dropNode.current : document;
9957 return el !== event.target && compareNode && compareNode.contains(el);
9958 });
9959 if (dragTargets.current.length > 0) return;
9960 setDragging(false);
9961 setInternalError(false);
9962 onDragLeave && onDragLeave();
9963 }, [allowMultiple, disabled, dropNode, numFiles, onDragLeave]);
9964 useEventListener(dropNode, 'drop', handleDrop);
9965 useEventListener(dropNode, 'dragover', handleDragOver);
9966 useEventListener(dropNode, 'dragenter', handleDragEnter);
9967 useEventListener(dropNode, 'dragleave', handleDragLeave);
9968 useEventListener(null, 'resize', adjustSize, {}, {
9969 defaultToWindow: true
9970 });
9971 useComponentDidMount(function () {
9972 adjustSize();
9973 });
9974 useEffect(function () {
9975 if (!openFileDialog) return;
9976 open();
9977 onFileDialogClose && onFileDialogClose();
9978 }, [onFileDialogClose, openFileDialog]);
9979 var id = useUniqueId('DropZone', idProp);
9980 var suffix = capitalize(type);
9981 var overlayTextWithDefault = overlayText === undefined ? i18n.translate("Polaris.DropZone.overlayText".concat(suffix)) : overlayText;
9982 var errorOverlayTextWithDefault = errorOverlayText === undefined ? i18n.translate("Polaris.DropZone.errorOverlayText".concat(suffix)) : errorOverlayText;
9983 var inputAttributes = {
9984 id,
9985 accept,
9986 disabled,
9987 type: 'file',
9988 multiple: allowMultiple,
9989 ref: fileInputNode,
9990 onChange: handleDrop,
9991 autoComplete: 'off',
9992 onFocus: handleFocus,
9993 onBlur: handleBlur
9994 };
9995 var classes = classNames(styles$N.DropZone, outline && styles$N.hasOutline, focused && styles$N.focused, (active || dragging) && styles$N.isDragging, disabled && styles$N.isDisabled, (internalError || error) && styles$N.hasError, styles$N[variationName('size', size)], measuring && styles$N.measuring);
9996 var dragOverlay = (active || dragging) && (!internalError || !error) && overlay && overlayMarkup(DragDropMajorMonotone, 'indigo', overlayTextWithDefault);
9997 var dragErrorOverlay = dragging && (internalError || error) && overlayMarkup(CircleAlertMajorMonotone, 'red', errorOverlayTextWithDefault);
9998 var labelValue = label || i18n.translate('Polaris.DropZone.FileUpload.label');
9999 var labelHiddenValue = label ? labelHidden : true;
10000 var context = useMemo(function () {
10001 return {
10002 disabled,
10003 focused,
10004 size,
10005 type: type || 'file',
10006 measuring
10007 };
10008 }, [disabled, focused, measuring, size, type]);
10009 return React__default.createElement(DropZoneContext.Provider, {
10010 value: context
10011 }, React__default.createElement(Labelled, {
10012 id: id,
10013 label: labelValue,
10014 action: labelAction,
10015 labelHidden: labelHiddenValue
10016 }, React__default.createElement("div", {
10017 ref: node,
10018 className: classes,
10019 "aria-disabled": disabled,
10020 onClick: handleClick,
10021 onDragStart: stopEvent
10022 }, dragOverlay, dragErrorOverlay, React__default.createElement("div", {
10023 className: styles$N.Container
10024 }, children), React__default.createElement(VisuallyHidden, null, React__default.createElement("input", inputAttributes)))));
10025
10026 function overlayMarkup(icon, color, text) {
10027 return React__default.createElement("div", {
10028 className: styles$N.Overlay
10029 }, React__default.createElement(Stack, {
10030 vertical: true,
10031 spacing: "tight"
10032 }, React__default.createElement(Icon, {
10033 source: icon,
10034 color: color
10035 }), size === 'extraLarge' && React__default.createElement(DisplayText, {
10036 size: "small",
10037 element: "p"
10038 }, text), (size === 'medium' || size === 'large') && React__default.createElement(Caption, null, text)));
10039 }
10040
10041 function open() {
10042 fileInputNode.current && fileInputNode.current.click();
10043 }
10044
10045 function handleClick(event) {
10046 if (disabled || !allowMultiple && numFiles > 0) return;
10047 return onClick ? onClick(event) : open();
10048 }
10049};
10050
10051function stopEvent(event) {
10052 event.preventDefault();
10053 event.stopPropagation();
10054}
10055
10056DropZone.FileUpload = FileUpload;
10057
10058var emptySearch = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNzggMTU4Ij48cGF0aCBkPSJNOS4xOSAxMjkuODRhNDAuMDI5IDQwLjAyOSAwIDAxLTQuOS03LjE0Qy0xMy45MSA4OC41OSA1OC4wOC00MS44OCAxMzUuODUgMTguNDNhMTA1Ljk0NiAxMDUuOTQ2IDAgMDE4LjM0IDcuMThjLjMyLjMuNjMuNi45NS45MSA4Ny40OSA4NS04Mi4zIDE2Ni4yOC0xMzUuOTUgMTAzLjMyeiIgZmlsbD0iI2Y0ZjZmOCIvPjxwYXRoIGQ9Ik0xMjIuNiAxMDAuODg1Yy0zLjM2NyA1LjQtNy44MzQgMTAuNzY1LTEzLjY0NiAxMy42MDUtNC4yODcgMi4xLTE0LjQ1MyA5Ljc1LTMxLjcwOSA3LjAzMy03LjU2LTE0LjUyMyA0MC40MzEtMTEuMzIzIDIzLjE0OS0zMi44Ny04LjA3Mi0xMC4wODEgMTMuMzI3LTE0LjEyIDEwLjc0Ny0yMy42MDctMS43NTYtNi40NTItMTIuNTktNy40MS02LjA5My0xOS4yMTYgNC4xNzQtNy41ODktNC45Ny04LjE5NC05LjgzOS0xMC45MTRhOC40MzkgOC40MzkgMCAwMS0yLjk2LTIuNzE0IDI1LjU0IDI1LjU0IDAgMDEyLjYyNC40NzJjNC42MDkgMS4xIDkuMzE3IDMuNjI0IDEzLjMyNSA2LjExOSAxMC44ODEgNi43ODcgMTQuODM2IDEzLjQxNCAxNy4yMjEgMTkuNDggNS43NzUgMTQuNzQ5IDUuNzA1IDI4Ljk1MS0yLjgxOSA0Mi42MTJ6IiBmaWxsPSIjZmZmIiBvcGFjaXR5PSIuNCIvPjxwYXRoIGQ9Ik0xMTMuNyAyOC4yMDZjLS4xNTUuMTM2LS4zMTQuMjcyLS40NjkuNDEyLS40NDIuMzktLjg4NS43OS0xLjMzMSAxLjE4NGEyNC4xIDI0LjEgMCAwMS0zLjY0MiAyLjgxIDE5LjMzNSAxOS4zMzUgMCAwMS00LjU2OS45MzhjLTIuNDA1LTEuNTMyLTcuNzIzLTEuNC03LjQ2Ni00Ljg3OS4xNy0yLjI4OCAyLjMtNC44NTYgNC4xMzgtNi4zNDMuMTYzLS4xMzIuMzI1LS4yNTMuNDgtLjM2NyAzLjUzMi0yLjU0OSA4LjI2LTIuNDIxIDEyLjM0NS0xLjY2IDQuNTU5Ljg0NyAzLjYxNCA1LjIzOC41MTQgNy45MDV6IiBmaWxsPSIjYWZiYWRkIi8+PHBhdGggZD0iTTExMy45NjQgMjguNTA4Yy0uODIzLjcyMS0xLjcyIDEuMzc1LTIuNDg4IDIuMTc5LS45NTUuNTkxLTEuNyAxLjQ0LTIuNjQ3IDIuMDc3bC0uMzU4LjI0OGEzLjEgMy4xIDAgMDEtLjQ2NS4yMTIgNC4xNTcgNC4xNTcgMCAwMS0uODM5LjE3OCA5Ljg4MSA5Ljg4MSAwIDAwLTEuNjI5LjQgOS4yMzggOS4yMzggMCAwMS0xLjcyNS4xNjIuODEzLjgxMyAwIDAxLS4yMjItLjAzNi40MDcuNDA3IDAgMDEtLjEzLS4wNjZsLS4wMzktLjAyNy0uMTU2LS4xMDlhNC40NzIgNC40NzIgMCAwMC0uMzQ0LS4xNzkgOC41NTIgOC41NTIgMCAwMC0uNzMzLS4zMDcgNy4wNTEgNy4wNTEgMCAwMS0xLjU2MS0uNDc4IDEuODcgMS44NyAwIDAwLS44LS4yMjFjLS4yNzEtLjA2OS0uNTMyLS4xNzItLjgtLjI2OGE3LjgyNSA3LjgyNSAwIDAxLTEuNTUyLS43NTIgMy40NDkgMy40NDkgMCAwMS0xLjI3Ni0xLjI4OCAzLjk2NyAzLjk2NyAwIDAxLS4xNjktMS43ODlBMy4yMzEgMy4yMzEgMCAwMTk2LjUgMjYuOGExNy45IDE3LjkgMCAwMTEuODU2LTIuOCAxMi44MjMgMTIuODIzIDAgMDEyLjQ5NC0yLjIyMSA5Ljg5MSA5Ljg5MSAwIDAxMi45NC0xLjY1OSAxMC4wNSAxMC4wNSAwIDAxMS42NDQtLjQyOGMuNTYxLS4wODMgMS4xMy0uMDYgMS42ODYtLjEyNXMxLjExOS0uMTEzIDEuNjgtLjEzNmE1LjgzNSA1LjgzNSAwIDAxMS42NzkuMDg5Yy41NTYuMDY3IDEuMTE3LjA3OCAxLjY3MS4xNThhMTUuNDM0IDE1LjQzNCAwIDAxMS42NDMuNDMyIDUuNyA1LjcgMCAwMS44MzcuMjc2IDMuMTggMy4xOCAwIDAxLjczOS41MDdjLjIxNS4yMS40NzIuMzc0LjY5MS42YTIuMTIyIDIuMTIyIDAgMDEuNDIyLjgyOSA0LjY3NCA0LjY3NCAwIDAxLjA1MSAxLjc4OCAzLjc4OCAzLjc4OCAwIDAxLS41MyAxLjY0OWMtLjMuNDg5LS41NjYuOTkyLS44ODQgMS40NzRhNy43MTQgNy43MTQgMCAwMS0xLjE1NSAxLjI3NXptLS41MjUtLjZhMTEuMjc3IDExLjI3NyAwIDAwMS4xMTYtMS4xMjEgMy42MDkgMy42MDkgMCAwMC44NjItMS4zMTNjLjEzOS0uNTA4LjM2Ni0uOTY0LjQ3Ni0xLjQ2YTIuMiAyLjIgMCAwMC0uMTg4LTEuNDJjLS4xLS4yMDktLjIyMi0uMzg5LS4zMTctLjZhMS4xMTQgMS4xMTQgMCAwMC0uNDIyLS41NzFjLS4yMTUtLjEyMy0uNDQ3LS4yLS42NjctLjMxNWE1LjQxMSA1LjQxMSAwIDAwLS42ODctLjMzMmMtLjQ4NC0uMTczLTEuMDcxLS4wODMtMS42LS4yMWExMy43NDcgMTMuNzQ3IDAgMDAtMS42MDgtLjI3MWMtMS4wODcuMDMxLTIuMTYxLS4yMDktMy4yNDctLjExMmE3LjggNy44IDAgMDAtMS41ODIuMzRjLS41MTkuMTIxLTEuMDQuMjI1LTEuNTQ1LjM4OWExMi4zNzEgMTIuMzcxIDAgMDAtMS41LjUxOSA4IDggMCAwMC0xLjQ2LjY3IDE2LjA2NCAxNi4wNjQgMCAwMC0yLjI2IDIuM2MtLjYzNC44MzktMS41NTMgMS41Ni0xLjc0MiAyLjY1YTUuMzE3IDUuMzE3IDAgMDEtLjQ0MiAxLjQ2OC44NzguODc4IDAgMDAtLjAxMS43MjVjLjEuMjI3LjI0My40LjMzMS41OTNhMi43MyAyLjczIDAgMDAuOTMzIDEuMDEgOC4yMiA4LjIyIDAgMDAxLjQxMS42NjRjLjI0OC4xLjUwOS4xNzQuNzYuMjhhMS42ODYgMS42ODYgMCAwMC43Ny4yOTIgNS40MzEgNS40MzEgMCAwMTEuNTc1LjU1OWMuMjYyLjEuNTIzLjIxNC43NzguMzQ0bC4zOC4yLjE4OS4xMDljLjExOS4wNi0uMDM1IDAgLjA2NC4wMTlhMTUuODQ4IDE1Ljg0OCAwIDAwMS41ODUtLjI0MyA3LjYyNiA3LjYyNiAwIDAwMS41OTQtLjM4MmMuMjU2LS4xLjUxMy0uMTkxLjc2Mi0uMjY2YTIuNzI2IDIuNzI2IDAgMDAuMzIzLS4xbC4zNDUtLjJBMTAuNTIzIDEwLjUyMyAwIDAwMTExIDMwLjE0Yy44NzgtLjY2NiAxLjYxMi0xLjQ5NiAyLjQzOS0yLjI0eiIgZmlsbD0iI2FmYmFkZCIvPjxnIG9wYWNpdHk9Ii40IiBmaWxsPSIjN2I4ZWQwIj48cGF0aCBkPSJNMTEzLjIzMyAyOC42MThjLS40NDIuMzktLjg4NS43OS0xLjMzMSAxLjE4NGEyNC4xIDI0LjEgMCAwMS0zLjY0MiAyLjgxIDE5LjMzNSAxOS4zMzUgMCAwMS00LjU2OS45MzhjLTIuNDA1LTEuNTMyLTcuNzIzLTEuNC03LjQ2Ni00Ljg3OS4xNy0yLjI4OCAyLjMtNC44NTYgNC4xMzgtNi4zNDNhMjIuNjY4IDIyLjY2OCAwIDAxMTIuODcgNi4yOXoiLz48cGF0aCBkPSJNMTEzLjYzMiAyOC42MzFhMTMuNjMxIDEzLjYzMSAwIDAxLTEuNSAxLjQxOGMtLjI0LjE3Ny0uMzkyLjQ1NC0uNjM3LjYyOC0uMjMuMTkxLS41MTUuMzE2LS43MzkuNTE1bC0xLjM1OCAxLjJhOC4zMTMgOC4zMTMgMCAwMS0uNzM4LjU0MiAxLjUxOCAxLjUxOCAwIDAxLS41LjIxNGwtLjQ2Ni4wOTFhNC42NzMgNC42NzMgMCAwMC0uODY3LjI3NCA0LjI1OSA0LjI1OSAwIDAxLS44ODMuMTc1Yy0uNi4wNzItMS4xOS4xMjMtMS44LjIwOGwtLjI0My4wMThoLS4xNDNjLS4wNDItLjAwNi0uMDU5IDAtLjEyMy0uMDEyYS41NDYuNTQ2IDAgMDEtLjEzNC0uMDUybC0uMDI0LS4wMWEzLjg3OCAzLjg3OCAwIDAwLS4zODMtLjE1NCAzIDMgMCAwMS0uNzQ1LS40MDhjLS41NjYtLjEyMy0xLjExMi0uMzI2LTEuNjc3LS41MDdsLTEuNy0uNTdjLS42LS4xNDQtMS4wMzMtLjY2Ni0xLjYxOC0uODgxYTIuMjY3IDIuMjY3IDAgMDEtMS4xMjUtMS40ODcgMy4xMzcgMy4xMzcgMCAwMS0uMDkzLTEuODQzIDYuMzczIDYuMzczIDAgMDEuNjY0LTEuNjljLjMxNy0uNTE0LjYyNS0xLjAyNS45MzMtMS41NDZhOS43IDkuNyAwIDAxMi40MDctMi43bC4wNTYtLjA0MWEuMjQyLjI0MiAwIDAxLjIxLS4wMzdjMS4xOTMuMzUyIDIuNDgzLjIyNyAzLjY0LjcyNi41NzUuMjI4IDEuMi4zMDYgMS43Ni41OWE5LjA0NiA5LjA0NiAwIDAwLjgwOC40NjZjLjI3OC4xMzEuNTc0LjIyNi44NDYuMzcxYTMuNzM3IDMuNzM3IDAgMDAuOC40NiAyLjQxNSAyLjQxNSAwIDAxLjgyNy40MTQgMTEuMyAxMS4zIDAgMDAxLjUyOSAxLjAzOGMuNTU3LjI4NC45MTguODI1IDEuNDY0IDEuMTI2LjI1MS4xNzkuNTE4LjM0NC43NTIuNTQ3YTQuMTQzIDQuMTQzIDAgMDEuOC45MTd6bS0uOC0uMDI2YTEuMjI3IDEuMjI3IDAgMDEtLjUyNi0uMzIzYy0uMjI4LS4xOTEtLjQxOS0uNDI1LS42MzUtLjYzNC0uNC0uNDU3LTEuMDM3LS42MTItMS40NjgtMS4wMjlhNC45NDEgNC45NDEgMCAwMC0xLjU0My0uOTA2IDEuODkxIDEuODkxIDAgMDEtLjc0LS41MDggMi40MDggMi40MDggMCAwMC0uODEzLS4zNzZjLS4yNzctLjExMS0uNTA1LS4zMjYtLjc3NC0uNDU4YTUuMTUzIDUuMTUzIDAgMDAtLjg1OS0uMjY3Yy0uNTctLjE3NC0xLjA4LS41MTgtMS42NjItLjY2Ni0xLjE2Ni0uMjE0LTIuMjctLjg0Ny0zLjUtLjY5bC4zMTItLjA5MWMtLjgyMS44LTEuNjUgMS41ODgtMi40NTIgMi40MjdhMy4yMzYgMy4yMzYgMCAwMC0uOTUyIDEuNDM0IDkuNDA3IDkuNDA3IDAgMDAtLjUgMS42IDMuNjc0IDMuNjc0IDAgMDAtLjA4NCAxLjU2M2MuMjExLjUyMS43OTMuNjA3IDEuMDc2IDEuMDg5YS44NTEuODUxIDAgMDAuNzE3LjQgMi4yODggMi4yODggMCAwMS44Mi4yMzIgMTEuMzQgMTEuMzQgMCAwMDEuNjQ0LjYgNy40NDQgNy40NDQgMCAwMTEuNjc3LjY3IDIuMDg1IDIuMDg1IDAgMDEuODY3LjMyN2MuMTMuMDkuMjU4LjE4Ny4zODIuMjg3LS4xLS4wMTctLjAyMy4wMDcuMDQzIDBsLjItLjAwOWExMS4yODEgMTEuMjgxIDAgMDAxLjcyOS0uMjc4IDE1LjI0OCAxNS4yNDggMCAwMDEuNzA5LS40MDhjLjEzNC0uMDU2LjI2OS0uMTEuMzkxLS4xNzRhMi41MzcgMi41MzcgMCAwMC4zMTctLjJjLjI0OS0uMTQ2LjUtLjI4OS43NDUtLjQ0Ny40ODktLjMxNC45NzMtLjY0NSAxLjQzNS0xLjAwNy4yMjktLjE4NS40LS40MzkuNjEzLS42MzlzLjQ4LS4zNDYuNjg1LS41NTlhNi45MTMgNi45MTMgMCAwMTEuMTQ3LS45NjV6Ii8+PC9nPjxwYXRoIGQ9Ik0xMTQuOCA2Mi43OTFjLjA2OSAyMS40NzgtMTIuMTgxIDE4Ljg0Mi0zMS41IDM1LjE4Ny0xMi44NzYgMTAuODkzLTIyLjcgNi40NzctMjQuMjQ2LS43MzhhOS42NDggOS42NDggMCAwMS0uMi0yLjUyNEM1OS4xMTQgODkuNDEgNjMuNiA4My40NDQgNzQgODAuOTI1IDg0LjgzNyA3OC4zIDgwLjggNTkuNyA5OS42NDUgNTEuNGMuNDQ2LS4yLjktLjM4NiAxLjM3NC0uNTcxLjIwNi0uMDgyLjQwOC0uMTU1LjYwNS0uMjI3IDkuMzM1LTMuMzcgMTMuMTQ2IDEuODM2IDEzLjE3NiAxMi4xODl6IiBmaWxsPSIjZmZiZjRkIi8+PHBhdGggZD0iTTExNSA2Mi43OWEzMy44NTMgMzMuODUzIDAgMDEtMS40NTQgMTAuNSAxNi45NTQgMTYuOTU0IDAgMDEtMi40NzkgNC43MWwtLjgyMSAxLjA1OWMtLjI4MS4zNDYtLjYyMS42MzgtLjkyOS45NnMtLjYyNy42MzQtLjk1Mi45MzlsLTEuMDM1Ljg0YTg2LjEzMiA4Ni4xMzIgMCAwMS04Ljg2MSA1LjgxN2MtMy4wMjUgMS44MDktNS45OSAzLjcwNi04Ljg1OCA1Ljc0NS0yLjg5MSAyLjAyMS01LjUzOSA0LjMxLTguMzcyIDYuNDU2YTI0LjY4NCAyNC42ODQgMCAwMS05LjU0IDQuNTQ0bC0xLjMxNS4yMzYtMS4zMzYuMDcyYTcuMjcgNy4yNyAwIDAxLTEuMzM2LS4wNDcgNi41IDYuNSAwIDAxLTEuMzI0LS4xODUgOS4zMjIgOS4zMjIgMCAwMS03LjItMTIuMjIxIDE0LjggMTQuOCAwIDAxNi41ODEtOC4wODYgMjYuMzE1IDI2LjMxNSAwIDAxNC43NzctMi4zMDhjMS42NDUtLjY1MSAzLjQ0MS0uOTIgNS4wMjItMS42YTkuNTc4IDkuNTc4IDAgMDAzLjg2MS0zLjQgMjguMzE1IDI4LjMxNSAwIDAwMi40ODQtNC42MjEgODIuMTI5IDgyLjEyOSAwIDAxNC41ODctOS41NDggMjcuNyAyNy43IDAgMDE3LjAyOS03LjkxNUEzMC43MDkgMzAuNzA5IDAgMDExMDMgNDkuOTkzYTEyLjA0MiAxMi4wNDIgMCAwMTUuMy0uNDA3IDYuNiA2LjYgMCAwMTQuMzg4IDIuOTE4IDEzLjUyNSAxMy41MjUgMCAwMTEuODcyIDQuOTg4IDM0LjAzNCAzNC4wMzQgMCAwMS40NCA1LjI5OHptLS40IDBhMzMuNjUxIDMzLjY1MSAwIDAwLS40MzYtNS4yMjggMTMuMTQxIDEzLjE0MSAwIDAwLTEuODA4LTQuODM4IDYuMiA2LjIgMCAwMC00LjEzNS0yLjc1MyAxMS41NDYgMTEuNTQ2IDAgMDAtNS4xMTUuNCAzMC43ODcgMzAuNzg3IDAgMDAtOS4zMzQgNC42ODEgMjcuMzcgMjcuMzcgMCAwMC02Ljk0MiA3Ljc5NSA4MS44NzUgODEuODc1IDAgMDAtNC41ODcgOS41IDI4LjY0NCAyOC42NDQgMCAwMS0yLjUyNiA0LjY4IDkuOTMxIDkuOTMxIDAgMDEtNC4wMDggMy41MDljLTEuNjgyLjcxNy0zLjQxNC45NTktNS4wNTEgMS42YTI1Ljk4NyAyNS45ODcgMCAwMC00LjcxNyAyLjI2OCAxNC40MDYgMTQuNDA2IDAgMDAtNi40NTEgNy45IDkuMjQyIDkuMjQyIDAgMDAyLjQxIDkuNDk2IDkuMTM1IDkuMTM1IDAgMDA0LjU2NyAyLjIzOCA2LjE3IDYuMTcgMCAwMDEuMjc4LjE3MSA3LjQ0MyA3LjQ0MyAwIDAwMS4yOTIuMDQ3bDEuMy0uMDY0IDEuMjgyLS4yMjVhMjQuMzEgMjQuMzEgMCAwMDkuNDA5LTQuNDM0YzIuNzg5LTIuMTE0IDUuNDQzLTQuNDkzIDguMzU2LTYuNDg1IDIuODgtMi4wNDQgNS44NjQtMy45MzggOC44ODgtNS43NTFhOTAuMDA3IDkwLjAwNyAwIDAwOC43OTUtNS44MjFsMS4wMjEtLjgyNy45MzMtLjkyYy4zLS4zMTUuNjM3LS42LjkxMi0uOTM5bC44LTEuMDM0YTE2LjU0MSAxNi41NDEgMCAwMDIuNDI5LTQuNiAzMy40NzEgMzMuNDcxIDAgMDAxLjQzOC0xMC4zNjV6TTU5LjMxMyA4Ny41YTMuMjE2IDMuMjE2IDAgMDEuNzY4LTEuMDgybC4xMjUtLjExMWMuMDU2LS4wMjUuMTMtLjAzNC4xNTYtLjA4NGwuMjMzLS4yMzRjLjE0OC0uMTYzLjM5MS0uMjM0LjU0NC0uMzg4bC44MzctMS4wMjNhMS4yNjIgMS4yNjIgMCAwMS41MzMtLjM4OCAzLjkzMiAzLjkzMiAwIDAwLjQ3OC0uNDU2bC40OC42NGMtLjE1Ni4xNDItLjMuMy0uNDYuNDMzcy0uNC4xNzYtLjUyNi4zNTFjLS4zMDkuMjg0LS42MTMuNTczLS44OTIuODg1LS4xMjguMTY4LS4xOS4zOTQtLjM3OS41LS4wOTMuMDU2LS4yMTcuMDg1LS4zMDcuMTQ2LS4wNjUuMDEzLS4wNjguMDgtLjA5LjEyOWwtLjEzMy4wOTNhLjkyOC45MjggMCAwMC0uMjQ5LjJjLS4wNTcuMDg5LS4wNDQuMjMyLS4xMTcuMzA4LS4xMTcuMTc0LS4yMDguMzY1LS4zMzguNTI4eiIgZmlsbD0iI2ZmYmY0ZCIvPjxwYXRoIGQ9Ik02Ni40IDgxLjY1NWEyOS43NjggMjkuNzY4IDAgMDE1LjcyMy0yLjE1NSA5LjA1NSA5LjA1NSAwIDAwNC45MTItMi44MDggMTIuNTY2IDEyLjU2NiAwIDAwLjkxNi0xLjEzNSA5LjQ1NyA5LjQ1NyAwIDAwLjg0Ni0xLjIxMSAzMy42NyAzMy42NyAwIDAwMS4zNzYtMi42NDlsMi41NzItNS40NTlhMzUuMTI0IDM1LjEyNCAwIDAxNi41Mi0xMC4yMDggMjIuMjg0IDIyLjI4NCAwIDAxNC43ODItMy43OSAzNS4zMzUgMzUuMzM1IDAgMDE1LjQwOS0yLjgxM2wuMjk0Ljc0NGEzMi41MTQgMzIuNTE0IDAgMDAtNS4yNzUgMi43NDIgMjQuNzMyIDI0LjczMiAwIDAwLTQuNjY0IDMuNjU3IDMzLjM1OSAzMy4zNTkgMCAwMC02LjQ5IDkuOTM0Yy0uODE1IDEuODI4LTEuNDkgMy43MjMtMi40MDggNS41MzZhMjkuNTc3IDI5LjU3NyAwIDAxLTEuNSAyLjY2NWMtLjMuNDItLjUyNy44NzctLjgxOCAxLjNhMTEuNzExIDExLjcxMSAwIDAxLS45ODUgMS4yIDEwLjAyMyAxMC4wMjMgMCAwMS0yLjQyNiAxLjkzIDEwLjcgMTAuNyAwIDAxLTEuMzg3LjcxNSAxMy40OTEgMTMuNDkxIDAgMDEtMS40NzEuNDYxIDI4Ljk0MyAyOC45NDMgMCAwMC01LjU3NyAyLjA2MnoiIGZpbGw9IiNmZmJmNGQiLz48cGF0aCBkPSJNMTE0LjggNjIuNzkxYy4wNjkgMjEuNDc4LTEyLjE4MSAxOC44NDItMzEuNSAzNS4xODctMTIuODc2IDEwLjg5My0yMi43IDYuNDc3LTI0LjI0Ni0uNzM4YTkuNjQ4IDkuNjQ4IDAgMDEtLjItMi41MjQgMTkuNTEzIDE5LjUxMyAwIDAxOC40NjQtMy45ODNjNC4zODItLjYgOC45NzUtLjI1OCAxMy4zNzgtMS4xNDIgOC4zODctMS42ODIgMTkuMDg3LTEwLjM2NSAxNy4zMTQtMTkuOTM3LS44NzEtNC43LTIuNDEyLTguNjc0LS43LTEzLjQ1MWEyMy4wMDkgMjMuMDA5IDAgMDEyLjMzNS00LjhjLjQ0Ni0uMi45LS4zODYgMS4zNzQtLjU3MS4yMDYtLjA4Mi40MDgtLjE1NS42MDUtLjIyNyA5LjMzNS0zLjM3MyAxMy4xNDYgMS44MzMgMTMuMTc2IDEyLjE4NnoiIGZpbGw9IiNmZmFhMTAiIHN0cm9rZT0iI2ZmYWExMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIuNSIvPjxwYXRoIGQ9Ik0zOC4xMTMgODQuNjU5YTE3LjI2NSAxNy4yNjUgMCAwMS0zLjIwNyAzLjYxNiAyOS4zIDI5LjMgMCAwMS0zLjY3MiAyLjcwOCAxMi4xNzIgMTIuMTcyIDAgMDEtMS41MTMuODEzYy0zLjU4OSAxLjY0NS03LjczOCAxLjc4NS0xMS4wOTMgMy45OS0yLjY1MSAxLjc0NC00LjU3MyA1LjE3OC04LjE4MSA0Ljg5LTMuNTU1LS4yODQtNS4yNzYtMy40MjMtNC4yNTUtNi42NTMgMS4zOTItNC40MjUgNy40NzctMy45MTUgMTAuNjItNi41MjhhNDEuODIxIDQxLjgyMSAwIDAwNC41LTQuODcxYy4zMTgtLjM3NC42NTEtLjc0NS45OC0xLjFhMTMuNjczIDEzLjY3MyAwIDAxNC41MjctMy40OCA4LjAzNiA4LjAzNiAwIDAxMS42OTQtLjUzYzQuMTU0LS44MTQgMTMuNTY0Ljk3NiA5LjYgNy4xNDV6IiBmaWxsPSIjYWZiYWRkIi8+PHBhdGggZD0iTTM4LjQ0OSA4NC44NzVhMjEuMjE4IDIxLjIxOCAwIDAxLTMuNzEgNC4wMjkgNDIuNDg5IDQyLjQ4OSAwIDAxLTQuNSAzLjExMiA5Ljk3NSA5Ljk3NSAwIDAxLTIuNTYgMS4wMDhjLS44ODguMjEtMS43MzYuNTI2LTIuNi43NzdhMjUuMzkxIDI1LjM5MSAwIDAwLTUuMDUgMS41ODcgOS4zMTYgOS4zMTYgMCAwMC0yLjEyOSAxLjQ3N3EtLjUzLjM4OC0xLjA1NS44MDhjLS4zNDcuMjgzLS41OTEuNjc5LS45NDkuOTYyYTEyLjU0MiAxMi41NDIgMCAwMS0yLjIyOCAxLjY0MiA1Ljc2OCA1Ljc2OCAwIDAxLTIuNzMuNzQyIDQuOSA0LjkgMCAwMS0yLjcxOS0uNzA5IDYuNTYyIDYuNTYyIDAgMDEtMS4xLS44NzcgNC41NzkgNC41NzkgMCAwMS0uODk1LTEuMDk1IDQuOTkxIDQuOTkxIDAgMDEtLjQ3OS0yLjczOCA2Ljg2MSA2Ljg2MSAwIDAxLjcyNS0yLjY1QTUuMDUzIDUuMDUzIDAgMDE4LjQwOCA5MWExMS43IDExLjcgMCAwMTIuNDktMS4xIDIyLjk3MiAyMi45NzIgMCAwMDQuOS0yLjA2NyAxMC40IDEwLjQgMCAwMDEuOTU4LTEuNzExYy41ODUtLjY1OSAxLjIzOS0xLjI2NSAxLjgyOC0xLjkzOSAxLjItMS4zMjEgMi4xODUtMi44NTkgMy41NDItNC4xMDdhMjUuNjQ5IDI1LjY0OSAwIDAxMi4xNzQtMS43MjIgNi44OCA2Ljg4IDAgMDEyLjU5My0xLjA0MyA5LjIwOCA5LjIwOCAwIDAxMi43NTEtLjMgMjIuNiAyMi42IDAgMDEyLjczOC4xOSAxNi41NTUgMTYuNTU1IDAgMDEyLjYyOC44MjEgNS41MTggNS41MTggMCAwMTIuMzYyIDEuNDg5IDMuOTg2IDMuOTg2IDAgMDExLjAyMSAyLjY3NyA1LjU4NyA1LjU4NyAwIDAxLS45NDQgMi42ODd6bS0uNjczLS40MzNhNS41ODUgNS41ODUgMCAwMC45MDUtMi4zIDIuNzA5IDIuNzA5IDAgMDAtLjExLTEuMTgyIDIuNjU0IDIuNjU0IDAgMDAtLjY5LS45ODIgOC43NjkgOC43NjkgMCAwMC0yLjEwOC0xLjM2MyAxMC41NDkgMTAuNTQ5IDAgMDAtMi41MzQtLjU3MyAxMi4yNTggMTIuMjU4IDAgMDAtNS4xNjYtLjA1MSAxNS42MSAxNS42MSAwIDAwLTIuMzE5IDEuMSA4LjQ4MyA4LjQ4MyAwIDAwLTIuMDYzIDEuNTg4IDQzLjg1NiA0My44NTYgMCAwMC0zLjYxMyAzLjkyMSAxNC45NTggMTQuOTU4IDAgMDEtMS43MjIgMi4xMTEgOS44MTMgOS44MTMgMCAwMS0yLjE3MyAxLjc2MWMtMS42MzYgMS4wMDctMy41MTYgMS4wODktNS4xMzggMS44MzZDOS40MjYgOTEgNy44MTEgOTEuOCA2Ljk3IDkzLjIzOGE0LjQwOSA0LjQwOSAwIDAwLS43MzkgMi4zODUgNS4yMjMgNS4yMjMgMCAwMC42ODYgMi4zNDcgNC45MzYgNC45MzYgMCAwMC41ODMgMS4wNzcgMi40MTEgMi40MTEgMCAwMDEuMDQxLjY1NiA4LjkgOC45IDAgMDAyLjM4NS40OTRjMS42NjYuMDg4IDMuMTI0LTEuMDA1IDQuNDMtMi4xNTguMzEtLjMxNS43MzMtLjUxOSAxLjA1MS0uODM4cy42MzctLjY0NS45NzEtLjk2YTEyLjI4NSAxMi4yODUgMCAwMTIuMzc0LTEuNDE1YzMuMzA5LTEuNTkgNy4wMjYtMS44NTggMTAuMTQ1LTMuNTFsMS4xNjktLjU5NXEuNTcyLS4zNDUgMS4xMzEtLjcwOWExMi42NTIgMTIuNjUyIDAgMDAyLjA5MS0xLjY0NSAxOSAxOSAwIDAwMS45MjItMS44MiAxNy42ODQgMTcuNjg0IDAgMDAxLjU2Ni0yLjEwNXoiIGZpbGw9IiNhZmJhZGQiLz48ZyBvcGFjaXR5PSIuNCIgZmlsbD0iIzdiOGVkMCI+PHBhdGggZD0iTTM4LjExMyA4NC42NTlhMTcuMjY1IDE3LjI2NSAwIDAxLTMuMjA3IDMuNjE2IDI5LjMgMjkuMyAwIDAxLTMuNjcyIDIuNzA4IDEyLjE3MiAxMi4xNzIgMCAwMS0xLjUxMy44MTNjLS4yMTktMy4yODMuMzYzLTYuMzg4LS45MTUtOS43NjZhMjcuMDE4IDI3LjAxOCAwIDAwLTEuOTgyLTMuOTkgOC4wMzYgOC4wMzYgMCAwMTEuNjk0LS41M2M0LjE0OS0uODEgMTMuNTU5Ljk4IDkuNTk1IDcuMTQ5eiIvPjxwYXRoIGQ9Ik0zOC40NDkgODQuODc1QTkuNzU0IDkuNzU0IDAgMDEzNy41NzUgODZjLS4zNDkuMzI0LS41MjYuOC0uOTE1IDEuMDg4LS43NjguNTY5LTEuMjkyIDEuMzc3LTIuMDA1IDIuMDA1YTUuODI2IDUuODI2IDAgMDEtMS4xNTMuODIyYy0uNC4yNTItLjcuNjQ0LTEuMTExLjg3My0uNzkxLjUtMS43Ljg0Ni0yLjUyNCAxLjMyNWEuMzI5LjMyOSAwIDAxLS40OTItLjI0MWwtLjAwNy0uMDU3YTYuODYxIDYuODYxIDAgMDEtLjExNy0uOTA1IDQuOSA0LjkgMCAwMC4wNzgtLjkwNiAzLjAxIDMuMDEgMCAwMS0uMDQ0LS45bC4wMjctLjg5NGExNi44MzIgMTYuODMyIDAgMDAtLjAwNy0xLjc3NGMtLjA5MS0uNTc5LjE0Ni0xLjE5NC0uMDU2LTEuNzY0YTExLjExNCAxMS4xMTQgMCAwMS0uMzEyLTEuNzM2IDkuMDY3IDkuMDY3IDAgMDAtLjY0OC0xLjY0NSAyNi45OTIgMjYuOTkyIDAgMDAtLjc1NC0xLjYwOCA3LjUyOCA3LjUyOCAwIDAwLS44OTMtMS41NDMuMTg3LjE4NyAwIDAxLjAzNy0uMjYybC4wMi0uMDEzLjA0LS4wMjJhNi44NjcgNi44NjcgMCAwMTQuMzQtLjgwOCAxNi4zNDEgMTYuMzQxIDAgMDEyLjIyMS4wNjVjLjcuMjY0IDEuNDc3LjIzMiAyLjE3Mi41NDdhOC41MjYgOC41MjYgMCAwMDEuMDA3LjUxN2MuMTc0LjA3My4zNDUuMTUyLjUxNi4yMzVhNC4zMDggNC4zMDggMCAwMS40NTMuMzQ5Yy4yNzUuMjU3LjcuMzQ5LjkzNC42ODFhMy44MTYgMy44MTYgMCAwMS42MDYgMS4wMTIgNC41NTggNC41NTggMCAwMS4zNzQgMS4xMjUgMy4yNzQgMy4yNzQgMCAwMS0uMTMyIDEuMTY0IDYuNjYgNi42NiAwIDAxLS4yNjYgMS4xMjQgOC45OTIgOC45OTIgMCAwMS0uNTE1IDEuMDIxem0tLjY3My0uNDMzYTguMjIzIDguMjIzIDAgMDAuNS0uOSAzLjMgMy4zIDAgMDAuMzkxLS45MzEgNS4wMjQgNS4wMjQgMCAwMC0uMDM4LS45NzEgMS44MTIgMS44MTIgMCAwMC0uMjE3LS45MTIgMi43MTggMi43MTggMCAwMC0uNjUtLjdjLS4yNDctLjE4OS0uMzU5LS41ODItLjY4My0uNzIyYTIuOTU1IDIuOTU1IDAgMDEtLjg5NC0uNSAyLjQzMiAyLjQzMiAwIDAwLS45OTEtLjMyMiA3LjQ2NCA3LjQ2NCAwIDAwLTIuMDMxLS41MzEgMTMuMzUzIDEzLjM1MyAwIDAwLTIuMS0uMzA3IDUuNSA1LjUgMCAwMC0xLjA1NS4xNDljLS4zNDcuMDU5LS42OTMuMDY2LTEuMDMzLjExOWExNi40NzQgMTYuNDc0IDAgMDAtMi4wMTcuNDMxbC4xNTMtLjQ3YTUuNzE3IDUuNzE3IDAgMDAuODc1IDEuNTc5IDEyLjIxOSAxMi4yMTkgMCAwMS44NyAxLjZjLjI3LjU0OS4yOTQgMS4xOTQuNTQxIDEuNzU2LjIyNC41NjQuNjUyIDEuMTI0LjQ2OCAxLjc3OS0uMTI2LjYyOS4zODYgMS4xOTIuMjkyIDEuODE2LS4wMTcuNjEyLS4wNDUgMS4yMTUtLjA0MiAxLjgxNWwtLjAyMy45QTIuOTUyIDIuOTUyIDAgMDEzMCA5MGEzLjM0NSAzLjM0NSAwIDAwLjA3Ljg4NWMwIC4yOTUtLjAzOS41OS0uMDU2Ljg4N2wtLjQxMy0uMjQ3YTEzLjI0NyAxMy4yNDcgMCAwMDIuMzc4LTEuMzQ5IDExLjM1OSAxMS4zNTkgMCAwMDEuMTI5LS43OTMgOS4zMjQgOS4zMjQgMCAwMTEuMDMyLS45MTRjLjM2NC0uMjc2LjcyNS0uNTYzIDEuMDc0LS44NThhMy45ODMgMy45ODMgMCAwMC45NDUtLjk5M2MuMjQ1LS4zOTEuNjYxLS42MzIuODg2LTEuMDM3LjI0Ni0uMzgxLjUwNC0uNzUuNzMxLTEuMTM5eiIvPjwvZz48cGF0aCBkPSJNMTQ0LjE5IDI1LjYxYS4yNDkuMjQ5IDAgMDEtLjA3LjA0IDQwLjUyMSA0MC41MjEgMCAwMC01LjQ5IDMuMDdjLTMuMSAyLjMyLTMuOTggOC4wNS04LjM2IDguMzYtMy4yMS4yMi01LjcyLTIuMDYtNS4yLTUuNC41My0zLjM5IDQuMTItNC40IDYuMzItNi40NiAyLjAyLTEuOSAzLjEyLTQuNDIgNC40Ni02Ljc5YTEwNS45NDYgMTA1Ljk0NiAwIDAxOC4zNCA3LjE4eiIgZmlsbD0iI2FmYmFkZCIvPjxwYXRoIGQ9Ik0xMTcuODU1IDM3LjAzM2E1MC45MzYgNTAuOTM2IDAgMTA0LjI2NSA3MS45MDggNTAuNjcxIDUwLjY3MSAwIDAwLTQuMjY1LTcxLjkwOHptOS43IDQ5LjYzOGMtMi4xNzYgNi44OTItNS4xNzUgMTMuMjk1LTEwLjAxMiAxOC43NDItNC4yMjUgNC43NTMtOS41MzMgOS4zLTE1LjczOSAxMS4xMTktMy45NzggMS4xNy04LjAyIDIuOTY2LTEyLjEzNCAzLjYwN2E0NS4zMjggNDUuMzI4IDAgMDEtOC43OTMuMjEyIDQ0LjUxNiA0NC41MTYgMCAwMS0yNi45NjctMTEuMTY0Yy04LjctNy43MjktMTIuOTQzLTE3LjM3OS0xNC40NDYtMjguNjE2YTM3LjIgMzcuMiAwIDAxLS4xNzUtMTAuNTY0YzEuMjI1LTguNDkgNS4xNDYtMTguMDM2IDEwLjg0Ny0yNC40NTMgOS45LTExLjE1MiAyNy44MTctMTguNzM1IDQyLjY4Ni0xNC42MzlhNzAuNjc0IDcwLjY3NCAwIDAxOC44NCAyLjU5NGM0LjM2IDEuODYzIDguNTc3IDUuMTM4IDEyLjEwNyA4LjI3MWE0Ny45NDMgNDcuOTQzIDAgMDE5LjE4NyAxMC42MzYgMjguMTU1IDI4LjE1NSAwIDAxMi4wNjUgMy42MDggMzguNSAzOC41IDAgMDEyLjQ1MSA3Ljg1M2MxLjQ3MiA3LjA3NyAyLjI5NCAxNS43OTkuMDg3IDIyLjc5NHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIzLjMgMTA5Ljk4NmE1MS41NTQgNTEuNTU0IDAgMDEtMTYuMzY2IDEyLjMwNmMtMS41NjYuNy0zLjIgMS4yMzEtNC43NjkgMS45MjJsLTQuODY1IDEuNjc4Yy0xLjY1Ny40NDEtMy4zMzcuODE0LTUuMDEzIDEuMjI4bC01LjEyNi43NDFhNDkuNTUzIDQ5LjU1MyAwIDAxLTIwLjQxNC0yLjg0MyA1My44IDUzLjggMCAwMS0xNy42NjctMTAuNTQ2bC0zLjY2My0zLjYzOWMtMS4xMjUtMS4zLTIuMi0yLjY0OS0zLjI5LTMuOTc3LS45OTUtMS40LTEuOS0yLjg3MS0yLjg0NC00LjMtLjg1NS0xLjQ4OC0xLjYtMy4wMzgtMi40MDYtNC41NTItLjctMS41NjMtMS4zLTMuMTc2LTEuOTQ2LTQuNzU5LS41MzYtMS42MjUtLjk3OC0zLjI4Mi0xLjQ2OC00LjkyLS4zNjgtMS42Ny0uNjM0LTMuMzYyLS45NDUtNS4wMzhsLS40NDMtNS4xYy4wMjktMS43LjAxMy0zLjQwNiAwLTUuMTA2LjE1My0xLjY5NC4yNTYtMy4zOTQuNDMzLTUuMDg1LjMtMS42NzUuNTg2LTMuMzU2Ljk2NC01LjAxMi40OTQtMS42MjguOTI0LTMuMjc3IDEuNDc0LTQuODg0LjY1Ni0xLjU2OSAxLjI1OS0zLjE2IDEuOTc2LTQuNy44MTUtMS40OSAxLjU1NS0zLjAyIDIuNDA5LTQuNDgyLjk1Ny0xLjQgMS44MjEtMi44NjEgMi43NzMtNC4yNjNsMy4xNDYtNGE1MS4zODQgNTEuMzg0IDAgMDExNi4xNzMtMTIuMTMzIDUzLjA0IDUzLjA0IDAgMDE0LjY4LTEuOTc3IDgxLjE5IDgxLjE5IDAgMDE0LjgtMS42ODkgNDYuNjA4IDQ2LjYwOCAwIDAxNC45NjEtMS4yMiA1Mi41MTIgNTIuNTEyIDAgMDE1LjA4Mi0uNiA1Mi40NjcgNTIuNDY3IDAgMDEzNy45ODUgMTIuNzcybDMuNjIxIDMuNjY5YzEuMTEzIDEuMzA3IDIuMTY1IDIuNjY2IDMuMjQ1IDQgLjk5MyAxLjQgMS44ODkgMi44NjIgMi44MzMgNC4yODkuODY1IDEuNDc1IDEuNjU2IDMgMi40ODUgNC41LjczNiAxLjU0NCAxLjM2IDMuMTQzIDIuMDQzIDQuNzE1LjU3MiAxLjYxMyAxLjA0NSAzLjI2MyAxLjU3IDQuOS40IDEuNjY2LjcyMyAzLjM1MSAxLjA4NCA1LjAyOC4yMzUgMS43LjM2MiAzLjQxMy41MDcgNS4xMThsLS4wNjEgNS4xMzYtLjU0OSA1LjFjLS4zMTEgMS42NzctLjU3MSAzLjM2OC0uOTI5IDUuMDM1LS40ODEgMS42MzgtLjg4IDMuMy0xLjM5MyA0LjkzMWE1Mi4zMjYgNTIuMzI2IDAgMDEtMTAuMDg3IDE3Ljc1N3ptLTIuMzU1LTIuMDkxYTQ5LjU4MSA0OS41ODEgMCAwMDkuNjM0LTE2LjY1NWMuNS0xLjUzMS44ODEtMy4xIDEuMzMxLTQuNjQ1LjMzNC0xLjU3NC41NzMtMy4xNy44NjktNC43NTEuMTUtMS42LjE4Ny0zLjIxNi4yOS00LjgxNmwtLjE2OS00LjgxYy0uMjItMS41OS0uNDE2LTMuMTc2LS41NjgtNC43Ny0uMzE4LTEuNTY3LS41OTUtMy4xNDYtLjkzOS00LjcxLS40NjgtMS41MzEtLjg5NC0zLjA3Ny0xLjM4Ny00LjYtLjYwOS0xLjQ4MS0xLjE1Ni0yLjk5NC0xLjgxMS00LjQ1OWE0OC4yNzIgNDguMjcyIDAgMDAtMTEuNDU1LTE1LjM5NCA0My45MiA0My45MiAwIDAwLTE2LjUwNy05LjkyMSA0OS45NTMgNDkuOTUzIDAgMDAtMTkuMTA2LTIuMzU1IDQ5LjE3IDQ5LjE3IDAgMDAtNC43ODkuNTg2Yy0xLjU5LjI0NS0zLjE3Mi41MjMtNC43NjguOGEzMC45MjggMzAuOTI4IDAgMDAtOS4xMzQgMy4yMTIgNTMuNDM0IDUzLjQzNCAwIDAwLTE0Ljk4NyAxMi4wMDZjLTEuMDE4IDEuMjM1LTIuMDgzIDIuNDM2LTMuMTIzIDMuNjY1YTc1LjMyOCA3NS4zMjggMCAwMC0yLjcxOSAzLjk4M2MtLjc4MyAxLjQtMS40NzggMi44NTctMi4yMDkgNC4yODgtLjY0MiAxLjQ3Mi0xLjE1NSAzLTEuNzU2IDQuNDg4LS41MDggMS41MjItLjkgMy4wODMtMS4zNjIgNC42MjEtLjM1IDEuNTY3LS41ODQgMy4xNTktLjkzNCA0LjczMS0uMjExIDEuNTkzLS4zNDcgMy4yLS41IDQuOC0uMDIuOCAwIDEuNjExIDAgMi40MTZsLjA4MyAyLjQxNC43MjIgNC43N2MuMzY4IDEuNTYzLjY4OSAzLjEzMSAxIDQuN2wuNjU5IDIuMzEzYy4yMTYuNzcyLjM4MSAxLjU2NS42MzggMi4zMjYuNTczIDEuNSAxLjA5MyAzLjAzIDEuNzE2IDQuNTIuNzI0IDEuNDM4IDEuMzcyIDIuOTMzIDIuMjIyIDQuMzA3LjkxOCAxLjMzMiAxLjc4NSAyLjcgMi43NCA0IDEuMDE0IDEuMjU4IDEuOTY2IDIuNTc0IDIuOTkzIDMuODM0bDMuMzU0IDMuNTUxYTQ0LjAyMyA0NC4wMjMgMCAwMDE2Ljc0OCA5Ljg3NSA1MS4xNTggNTEuMTU4IDAgMDAxOS4yNTEgMi4zMjZsNC44NDUtLjQ0NmMxLjU5Mi0uMzEgMy4yLS41ODEgNC43ODYtLjkxOCAxLjU1MS0uNDc5IDMuMTQ0LS44NDggNC42NjktMS40MTMgMS40ODEtLjY3OSAyLjk4Ny0xLjMgNC40MjktMi4wMzlhNTAuOTI5IDUwLjkyOSAwIDAwMTUuMjQyLTExLjgzem02Ljg4OSAzLjcwNWMyLjkgMi4zNDcgNS43NjQgNC43NCA4LjQ0IDcuMzQzIDEuMzQ2IDEuMjkyIDIuNiAyLjY4NCAzLjk3NSAzLjk0NyAxLjM1IDEuMjg4IDIuNzk1IDIuNDY5IDQuMjUxIDMuNjM3czIuOSAyLjM0NSA0LjI2NyAzLjYxOSAyLjcgMi41NzcgNC4wNDkgMy44NjRjLjY2Ny42NTMgMS40IDEuMjM3IDIuMDkzIDEuODU1bDIuMiAxLjczN2MuNzQyLjU2OCAxLjQxNyAxLjIxMyAyLjEyMSAxLjgyNHMxLjQgMS4yMzUgMi4wNjUgMS44ODdhMS44IDEuOCAwIDAxLTIuMzQ0IDIuNzMybC0uMDQ5LS4wMzdjLS43NDgtLjU2Mi0xLjQ3LTEuMTUyLTIuMTg3LTEuNzQ5cy0xLjQ1NC0xLjE3MS0yLjE0Mi0xLjhjLS43MDYtLjYwOS0xLjM4LTEuMjU0LTIuMDYyLTEuODlzLTEuMzE2LTEuMzI2LTIuMDIzLTEuOTM0Yy0yLjgwOS0yLjQ1Mi01LjYtNC45MjEtOC4yMzYtNy41NzItMS4zMjYtMS4zMTUtMi42NTUtMi42MjYtNC4wNjEtMy44NXMtMi44NTItMi40LTQuMjY0LTMuNjIyYy0xLjQ1MS0xLjE3My0yLjctMi41NzItNC4wODUtMy44MjRhNDEuMjQyIDQxLjI0MiAwIDAwLTQuNC0zLjQ3IDEuOCAxLjggMCAwMTItM3EuMDY4LjA0Ni4xMzEuMXoiIGZpbGw9IiMwODExNDAiLz48cGF0aCBkPSJNMTcwIDE0MS44MThhNi45NDMgNi45NDMgMCAwMS0xLjY3IDQuMzg1Yy0xLjEgMS40Ni0zLjI2OCA1LjA4My01LjA2IDUuNjIyLTIuNjkzLjgwOC02LjUtMi43NDYtOC4zMTctNC4xLTQuNjc1LTMuNDg0LTQuNDA2LTMuMDI0LTguNjc2LTYuOTgyLTQuMzEtNC04LjUyOS04LjA4OS0xMi43NzgtMTIuMTUtMi4zLTIuMTkzLTkuMjUzLTUuODgzLTcuMzE4LTEwLjEzNC45NzYtMi4xMSA0Ljg3My01LjEyOSA2LjctNi40OTMgNS44MzItNC4zNjEgMTcuMTQ1IDEwLjE4MyAyMC45ODYgMTMuNTkzIDQuNTU1IDQuMDQ0IDQuNTI4IDMuNjQ4IDkuMDgyIDcuNjkyIDIuODMxIDIuNTE4IDYuOTI5IDQuOTc1IDcuMDUxIDguNTY3eiIgZmlsbD0iIzA4MTE0MCIvPjxwYXRoIGQ9Ik0xNzAuMTk0IDE0MS44MTFhNi42MzkgNi42MzkgMCAwMS0xLjE3NiAzLjczNSAyMTQuMjUgMjE0LjI1IDAgMDEtMi4yMzcgMy4xNiAxNC4yMTIgMTQuMjEyIDAgMDEtMi42MzEgMi44OSAyLjkyIDIuOTIgMCAwMS0xLjk0OC41NjUgNS41NzggNS41NzggMCAwMS0xLjkzNi0uNWMtMi40MjktMS4wODItNC4yOTItMi45NDUtNi4zNjUtNC40MjVhNjQuNjM3IDY0LjYzNyAwIDAxLTYuMDc1LTQuNzg1Yy0zLjc3Ny0zLjUtNy40NDktNy4xLTExLjE2Ny0xMC42NjRhNTYuNTMzIDU2LjUzMyAwIDAwLTUuNzU5LTUuMTA2IDI5LjA5MSAyOS4wOTEgMCAwMS0yLjk0Mi0yLjUxNyA3LjYyNyA3LjYyNyAwIDAxLTIuMTA1LTMuMjUyIDMuNiAzLjYgMCAwMS4wMjQtMS45NjcgNS4wNTQgNS4wNTQgMCAwMS45NTQtMS43MTMgMjEuMzg0IDIxLjM4NCAwIDAxMi43MjktMi43NTFjLjk3My0uODQ4IDEuOTkzLTEuNjM2IDMuMDEyLTIuNDIzYTQuNDQgNC40NCAwIDAxMy43MTItLjk2OCAxMC44NDEgMTAuODQxIDAgMDEzLjYyMSAxLjQzMyAyNi4zNDggMjYuMzQ4IDAgMDEzLjE3MyAyLjIzNCA2Ny42MTEgNjcuNjExIDAgMDE1LjY2MiA1LjI2OWwyLjY3MyAyLjc4NmMuODg1LjkzMiAxLjc1MyAxLjg4MiAyLjcgMi43MyAxLjg5NCAxLjc0MyAzLjkxMSAzLjMyMiA1LjkxMSA0Ljk1MSAxIC44MTcgMS45NTggMS42NzYgMi45MTUgMi41MzdzMS45NjYgMS42NDUgMi45NiAyLjQ2N2ExOS4zNjQgMTkuMzY0IDAgMDEyLjc5IDIuNzA3IDYuMTg2IDYuMTg2IDAgMDExLjUwNSAzLjYwN3ptLS4zOTMuMDEzYTUuOCA1LjggMCAwMC0xLjQwNy0zLjM4NyAxOC43ODMgMTguNzgzIDAgMDAtMi43My0yLjY1NmMtLjk4NS0uODE5LTIuMDA3LTEuNjA2LTIuOTg1LTIuNDU3bC0yLjkzLTIuNWMtMS45OC0xLjYyNS0zLjk5LTMuMjYxLTUuOS00Ljk4Ny0xLjkxOC0xLjc2LTMuNTg4LTMuNzA5LTUuMzgzLTUuNTUxYTU5LjY2OCA1OS42NjggMCAwMC01LjYxOC01LjI1MyAyNS45ODUgMjUuOTg1IDAgMDAtMy4xMzEtMi4yIDEwLjQ4NCAxMC40ODQgMCAwMC0zLjQ5NC0xLjM4MSA0LjE0IDQuMTQgMCAwMC0zLjQ3Ni44MzMgNDQuMDAyIDQ0LjAwMiAwIDAwLTIuOTg2IDIuNDIxIDIxLjA3NSAyMS4wNzUgMCAwMC0yLjY1OSAyLjczMSAzLjc3OCAzLjc3OCAwIDAwLS45IDMuMzc4IDcuMTMzIDcuMTMzIDAgMDAxLjk5MiAzLjEwOCAyOC43NzkgMjguNzc5IDAgMDAyLjkyMyAyLjQ2OCAyOC40MjYgMjguNDI2IDAgMDEyLjk5NSAyLjQ2N2wyLjc4NSAyLjY3MWMzLjggMy40NjcgNy40IDcuMTU3IDExLjE4NCAxMC42MzIuOTQzLjg3MyAxLjkgMS43MiAyLjkyMyAyLjVzMi4wOCAxLjUxMSAzLjExNCAyLjI3N2MyLjEwNiAxLjQ4MSAzLjk4IDMuMzE2IDYuMzE0IDQuMzQxIDEuMTI2LjQ4OCAyLjUuNzg3IDMuNTE0LjAxNWExMS43NTIgMTEuNzUyIDAgMDAyLjU1Ni0yLjhsMi4yLTMuMTU3YTYuMjU5IDYuMjU5IDAgMDAxLjA5OC0zLjUxM3oiIGZpbGw9IiMwODExNDAiLz48cGF0aCBkPSJNMTQxLjc1MiAxMTQuMDYyYTM1LjU0IDM1LjU0IDAgMDEtMi43MjYgMy4xMjMgMjMuNzE0IDIzLjcxNCAwIDAwLTIuODQgMy4wMjMgMzAuMDY2IDMwLjA2NiAwIDAxLTIuNzkyIDMuMDY1IDE1LjU2NiAxNS41NjYgMCAwMC0xLjMyMSAxLjYgMjEuNzM3IDIxLjczNyAwIDAxLTEuMzgxIDEuNTQ2LjkuOSAwIDAxLTEuMzY5LTEuMTdsLjAwOC0uMDExYTI1LjY1MyAyNS42NTMgMCAwMTIuNzQxLTMuMTE5Yy45MTEtMS4wNDIgMS44MzEtMi4wNzYgMi44NDItMy4wM2EzMy40MzcgMzMuNDM3IDAgMDAyLjc5Mi0zLjA3NCAyMC4yMzEgMjAuMjMxIDAgMDAyLjctMy4xNTMuOS45IDAgMTExLjU1OS45MS45MTMuOTEzIDAgMDEtLjA2My4wOTR6bTE0Ljk4NyAzNS4xMTRhMzkuMjEyIDM5LjIxMiAwIDAxMi4yLTMuMzU5IDI2Ljg1NiAyNi44NTYgMCAwMDIuMzctMy4zIDE5LjE0MiAxOS4xNDIgMCAwMTIuNTA2LTMuMjM5Yy40NjctLjUuODcxLTEuMDYzIDEuMy0xLjYwOWExMy4yOCAxMy4yOCAwIDAxMS40NjktMS40NzYuOS45IDAgMDExLjI2MyAxLjI3OWwtLjAzNi4wNDFhOTQuODY4IDk0Ljg2OCAwIDAxLTIuNjQyIDIuODg0Yy0uODI1IDEuMDIyLTEuNjExIDIuMDgyLTIuNDc1IDMuMWEyNS42NDMgMjUuNjQzIDAgMDAtMi4yODUgMy4zIDIxLjA3MyAyMS4wNzMgMCAwMC0yLjE5MSAzLjQwNy45LjkgMCAxMS0xLjYxMS0uODA3eiIgZmlsbD0iI2ZmYzc1NyIvPjxwYXRoIGQ9Ik0zOC44MzQgNjcuNjkxYy40NC0yLjc3OSAxLjM4Ni01LjQwOSAxLjk0Mi04LjE3M2E0My44OSA0My44OSAwIDAxMy40MjQtNy42NzIgMzMuNSAzMy41IDAgMDEyLjIzNi0zLjU2M0EzMC45IDMwLjkgMCAwMTQ5LjA2MyA0NWMuOTMxLTEuMDQ4IDEuODQ0LTIuMSAyLjg2OS0zLjA1M2wzLjEyOS0yLjc2N2E0NC45NDkgNDQuOTQ5IDAgMDEzLjM2Mi0yLjQ2N2MxLjE4MS0uNzI4IDIuMi0xLjcyOCAzLjQxOS0yLjRsMS44LTEuMDYzIDEuODYyLS45NjFjMS4yNjQtLjU5IDIuNS0xLjI1OSAzLjgyMi0xLjczMS42NjktLjIxIDEuMzIzLS40NjEgMi0uNjI4czEuMzQ5LS4zNzEgMi4wMTMtLjU5M2EzMS45MjQgMzEuOTI0IDAgMDE0LjA4Ni0uOTYyYy42OTEtLjExOCAxLjM5My0uMTU4IDIuMDg5LS4yMjcuNjkyLS4xMDYgMS4zODQtLjIgMi4wODItLjI2MiAxLjM5Mi0uMTgxIDIuOC0uMjI5IDQuMi0uMjc3YS43ODcuNzg3IDAgMTEuMDUzIDEuNTcyaC0uMWMtMS4zNDkuMDItMi43LjAzNi00LjAzOS4xODVhMTkuMTM2IDE5LjEzNiAwIDAwLTMuOTguNzA1Yy0uNjUxLjE3Ny0xLjMyNi4yMzItMS45ODEuMzkzbC0xLjk3OC40MzNhNDAuMDMzIDQwLjAzMyAwIDAwLTMuODc1IDEuMiAyOC43NzkgMjguNzc5IDAgMDAtNy4zMjcgMy41IDEwLjYgMTAuNiAwIDAxLTEuNzcgMSA1IDUgMCAwMC0uOTIxLjQ1MWMtLjI3OC4yLS41NDQuNDA5LS44MTYuNjEyLTEuMDgzLjgyNi0yLjAyNCAxLjgyMi0zLjA4NyAyLjY0OC0uNTMxLjQxNS0xLjEwOS43OC0xLjYxOCAxLjIyNWwtMS40MjQgMS40MjdjLS41LjQ1NC0uOTI2Ljk3OS0xLjQyIDEuNDQxYTEwLjI1OCAxMC4yNTggMCAwMC0xLjM0NyAxLjUgMjUuMTIzIDI1LjEyMyAwIDAxLTIuNDM1IDMuMjI4IDExLjI0MyAxMS4yNDMgMCAwMC0xLjEyMiAxLjY5M2MtLjQuNTUyLS43NjUgMS4xMjYtMS4xNTMgMS42OWEzMi43MzYgMzIuNzM2IDAgMDAtMy4xMTIgNy41NDQgMTkuMjgzIDE5LjI4MyAwIDAwLTEuMjEgMy45IDcxLjMzMyA3MS4zMzMgMCAwMC0uNzQ5IDQgLjc4Ny43ODcgMCAwMS0xLjU1Ni0uMjM5em04Mi45MDUgMzQuMjZsLTEuODU0IDIuMzA5YTIxLjA5MSAyMS4wOTEgMCAwMS0xLjk0NiAyLjIxNWwtMS4wNTIgMS4wM2MtLjM0Ny4zNDctLjY2MS43MjctMSAxLjA4M3EtMSAxLjA4NC0yLjA3NyAyLjExNmEyOS4wODUgMjkuMDg1IDAgMDEtMTAuMzI0IDUuOTA3bC01LjU0MSAxLjcxNGE0Ni41IDQ2LjUgMCAwMS01LjY3OCAxLjUxNmMtLjk3MS4xNy0xLjk0Mi4zNzctMi45MjguNDg3YTI4LjUzMSAyOC41MzEgMCAwMS0yLjk0Ny4xNDljLS45OCAwLTEuOTU2LS4wMzItMi45My0uMDgzcy0xLjk0Mi0uMDQ1LTIuOTIzLS4xMTlhMzguODYyIDM4Ljg2MiAwIDAxLTUuOC0uODY3IDUxLjU0NyA1MS41NDcgMCAwMS01LjcwOS0xLjQgNDcgNDcgMCAwMS0xMC42LTUuMTE4Yy0xLjYxMy0xLjE0LTMuMS0yLjQzNi00LjYtMy43YTM2LjI1IDM2LjI1IDAgMDEtNC4xNzQtNC4xNzEgNTEuMjA1IDUxLjIwNSAwIDAxLTEuNzc3LTIuMzU5Yy0uNi0uNzgtMS4xNjEtMS41ODYtMS43MTktMi40YTQzLjMxOCA0My4zMTggMCAwMS0yLjk5LTUuMS43ODcuNzg3IDAgMTExLjQwNy0uNzA2di4wMDZsLjAxNi4wMzJhNDEuNTQ2IDQxLjU0NiAwIDAwMi44MTEgNC45NTMgMzguOSAzOC45IDAgMDAxLjY1MyAyLjMxNmMuNi43MzggMS4yNTIgMS40MjcgMS44ODkgMi4xMjYgMS4yODcgMS4zODUgMi41NjEgMi43ODcgMy45NTcgNC4wNzhhNDAuNDI3IDQwLjQyNyAwIDAwNC40NTQgMy41NDcgMzMuOCAzMy44IDAgMDAxMC4xNjIgNS4wODhjMS44NDEuNDUxIDMuNTM3IDEuNDY3IDUuNDU0IDEuNjcgMS44ODIuMzE5IDMuNzg4LjM5MSA1LjY2OS41MzUuOTMzLjExIDEuOS4yNDEgMi44NTYuMjY0czEuOTExLjAxIDIuODYtLjAyMWMuOTQ5LS4wMTEgMS44OS0uMDgyIDIuODIzLS4xNDdhMTIuMzI3IDEyLjMyNyAwIDAwMi43NjEtLjQ2N2MuOTA2LS4yNTkgMS43ODktLjYgMi43MTItLjgzNi45MTUtLjI2MyAxLjg1Ni0uNDczIDIuNzg3LS43MzguOTQ0LS4yMjYgMS44NDYtLjU4NiAyLjc3NS0uODg3LjkyNS0uMjczIDEuOTMxLS40NzQgMi44MjYtLjcyMiAzLjcwNi0uOTQ5IDYuODMzLTMuMzU3IDkuNy01LjgxNy43NDEtLjYgMS40NzMtMS4yMTMgMi4xOC0xLjg1OGExNS45NzYgMTUuOTc2IDAgMDAxLjk3OC0yLjA3NmMxLjI5Mi0xLjQyNSAyLjM3Ni0yLjk4NSAzLjU1OS00LjQ3MmwuMDUtLjA2M2EuNzg2Ljc4NiAwIDAxMS4yMzEuOTc5ek00MC4yMTggODcuNDE0YTQuNzEgNC43MSAwIDAxLS40NTQtMS41NTQgMy41NzMgMy41NzMgMCAwMC0uMjUxLTEuNiAzLjkyOCAzLjkyOCAwIDAxLS4yNzEtMS41OSAyLjQ4NiAyLjQ4NiAwIDAwLS4yMTktLjc4IDMuMTgyIDMuMTgyIDAgMDEtLjEzLS44LjkuOSAwIDAxMS43MzQtLjM4NGwuMDQ3LjExYTMuNzc5IDMuNzc5IDAgMDEuMjk1IDEuNTM5IDYuOTM3IDYuOTM3IDAgMDEuMiAxLjU1NiA0LjAyNSA0LjAyNSAwIDAwLjMxMiAxLjUzNiA0LjI1MSA0LjI1MSAwIDAxLjExNi43NzggMS42ODUgMS42ODUgMCAwMC4zNTYuNzE2LjkxLjkxIDAgMTEtMS41MS45ODF6IiBmaWxsPSIjMDgxMTQwIi8+PHBhdGggZD0iTTI1LjMgMTIzLjYyN2MtMS43MjMgMy41NTMtNS4xMTQgNC4yMzMtOC41OTIgNC42MTZhNzEuNjM3IDcxLjYzNyAwIDAwLTcuNTIxIDEuNiAzOS45MzEgMzkuOTMxIDAgMDEtNC44OTMtNy4xNDNjMS44NTUtLjUgMy44MjktMS4wODIgNC4zNjYtMS4zMDcgNC45NTMtMi4xIDcuNzM2LTYuODM3IDEyLjQ5Mi05LjExOCAxLjM3NS0uNjYzIDQuNDM3LTEuMTUgNS43NTUtLjA3NSAyLjA4MSAxLjctMS4zIDEwLjc4My0xLjYwNyAxMS40Mjd6IiBmaWxsPSIjYWZiYWRkIi8+PHBhdGggZD0iTTgwLjQ3NSA1OC45OTVjLS40LS44MzgtLjgzOC0xLjY2LTEuMjU4LTIuNWExNC42MzEgMTQuNjMxIDAgMDAtMS40MDctMi40MzZjLS41NTQtLjc2LTEuMDY3LTEuNTQ1LTEuNTktMi4zMjdhMTEuMDc5IDExLjA3OSAwIDAwLS44ODctMS4wOTVjLS4zMDctLjM1NS0uNTg4LS43My0uODkxLTEuMDg3YS40NS40NSAwIDAxLjY2Ny0uNmwuMDE4LjAxOWExNS44NjIgMTUuODYyIDAgMDExLjggMi4yNDUgMjIuMDIzIDIyLjAyMyAwIDAxMS42IDIuMzg4Yy40NzEuODM0Ljk3OSAxLjY0NCAxLjQ2OCAyLjQ3LjI0NC40MTQuNDI5Ljg1OS42MzkgMS4yOTFzLjQzLjg2LjY3NiAxLjI4MmEuNDUxLjQ1MSAwIDAxLS43NzkuNDU1bC0uMDE3LS4wMzJ6bS0zLjAwNyA0LjA2YTE5LjU0NyAxOS41NDcgMCAwMS03LjcyNS01LjU2NiAxMC4xMzMgMTAuMTMzIDAgMDEtMS4zMDctMi4wNzggMy41NSAzLjU1IDAgMDEtLjI5LTIuNTk0IDIuNjY1IDIuNjY1IDAgMDEuODExLTEuMTE3IDMuNDE2IDMuNDE2IDAgMDExLjItLjU3NyAzLjYzOSAzLjYzOSAwIDAxMi41ODEuMjQxIDEuOSAxLjkgMCAwMS41NzguNDU1IDIuNTY2IDIuNTY2IDAgMDEuMzc3LjU4IDIgMiAwIDAxLjE1MyAxLjQ0NSAzLjA0OSAzLjA0OSAwIDAxLTEuOTU1IDEuOCA4LjMxNyA4LjMxNyAwIDAxLTQuODg1LjA5NSA5LjY5MyA5LjY5MyAwIDAxLTQuMjMyLTIuMzg4IDkuOTIyIDkuOTIyIDAgMDEtMi40Ni00LjE4NS40NTEuNDUxIDAgMTEuODYtLjI3IDguODM1IDguODM1IDAgMDA2LjA1MiA1Ljk4OSA3LjQ0MyA3LjQ0MyAwIDAwNC4zMzMtLjExQTIuMjQ1IDIuMjQ1IDAgMDA3MyA1My41OTVhMS4xMjkgMS4xMjkgMCAwMC0uMDc4LS44MzMgMS43NCAxLjc0IDAgMDAtLjI1LS40MDYgMS4wOCAxLjA4IDAgMDAtLjMzNS0uMjdjLTEuMTIxLS42MTgtMy4wNDItLjI3LTMuNDQxIDFhMi43NTggMi43NTggMCAwMC4zIDEuOTY5IDkuMjc2IDkuMjc2IDAgMDAxLjIzNCAxLjg2NyAxOC4zMSAxOC4zMSAwIDAwMy4zMzcgMy4xMzEgMTguNTA5IDE4LjUwOSAwIDAwNC4wMzMgMi4xNjYuNDUxLjQ1MSAwIDAxLS4zMjQuODQxem0tLjg2OCAzLjUyNmMtMS4yMTItLjM0NS0yLjQ2OC0uNTk1LTMuNzIyLS45NTRhNDcuNzQgNDcuNzQgMCAwMS0xLjg2My0uNjEzIDE4LjUxNiAxOC41MTYgMCAwMC0xLjg0Ni0uNSAzMS41NTEgMzEuNTUxIDAgMDEtMy43NDYtMS4wNDZjLS42MTgtLjIxNS0xLjI0OC0uNC0xLjg3LS42MzhhOS44NDcgOS44NDcgMCAwMS0xLjc4NS0uOTM0LjQ1LjQ1IDAgMDEuNDcxLS43NjdsLjAyNy4wMTZhMjAuODY2IDIwLjg2NiAwIDAwMy40MjEgMS40ODZjMS4yMS4zODIgMi40Ni42NzQgMy43IDEuMDYzIDEuMjU0LjM2IDIuNDgyLjgwNiAzLjcxMyAxLjA4LjYyMy4xNDYgMS4yMzkuMzM2IDEuODY3LjVzMS4yNjMuMzA5IDEuOTEuNDUzYS40NTEuNDUxIDAgMDEtLjIuODhsLS4wMjUtLjAwNnoiIGZpbGw9IiMyMjI2NmQiLz48cGF0aCBkPSJNODAuNTI3IDU4Ljk3M2MtLjIxNC0uNDEyLS4yNzItLjktLjY1OC0xLjIzNC0uMjUyLS4zOTQtLjM4OC0uODQ5LS42MDgtMS4yNjRzLS40LS44NTEtLjU3OC0xLjI5M2MtLjEtLjIxNS0uMjUtLjQtLjM0OS0uNjE1YTIuNjk0IDIuNjk0IDAgMDAtLjM2NC0uNjA3Yy0uMTM2LS4xOTMtLjIzOC0uNDA4LS4zNy0uNi0uMDk0LS4yMjItLjM2Ny0uMzIxLS40ODEtLjUyOC0uMy0uMzY2LS41OTEtLjczNS0uOS0xLjA5MmE2Ljg5MyA2Ljg5MyAwIDAwLS44MTktMS4xNSAzLjg5MiAzLjg5MiAwIDAwLS45MTMtMS4wNzIuMzkyLjM5MiAwIDAxLjU2My0uNTQ2bC4wMzYuMDM2YTguNzI4IDguNzI4IDAgMDAxIDEuMDQ0Yy4zLjM3Mi41Mi44MS44MDUgMS4xOTRhMy45ODggMy45ODggMCAwMC44NTMgMS4xNTRjLjIwOC4xNDguMTI2LjQ5My4zNDIuNjM1YTMuNTA4IDMuNTA4IDAgMDEuNTA1LjUyNyAxNC44MjIgMTQuODIyIDAgMDExLjMgMi41NzEgNS45MjkgNS45MjkgMCAwMC43MyAxLjI0IDcuOTggNy45OCAwIDAwLjY0IDEuMy4zOTMuMzkzIDAgMDEtLjcxMy4zMjl6IiBmaWxsPSIjZmZjNjU3Ii8+PHBhdGggZD0iTTgwLjEyIDU5LjE2NGEyMy4zODEgMjMuMzgxIDAgMDAtMS41MDktMi44MzNBMjUuOTE4IDI1LjkxOCAwIDAwNzcgNTMuNjM4Yy0uMy0uNDQ2LS41ODctLjktLjg2Ny0xLjM2NC0uMjc0LS40NzYtLjYtLjg1LS44OTItMS4zLS4zMTEtLjQyNy0uNjgzLS44MjQtMS0xLjI1OGEuNjkxLjY5MSAwIDAxLjIyMy0xLjA0OC43Mi43MiAwIDAxLjU4LS4wMjcuNy43IDAgMDEuMjQuMTY0bC4xNDQuMTQzYTE1LjE4IDE1LjE4IDAgMDExLjAzNiAxLjI1NmMuMy40NjEuNzI2LjgwOSAxLjAwNiAxLjI3NC42MDUuODkgMS4zIDEuNzU2IDEuODQ0IDIuNjY3LjQ2NC45NjUgMS4wODYgMS44MzQgMS41MjggMi44NDRhOS4yNTQgOS4yNTQgMCAwMC43MDkgMS40MjIuODYxLjg2MSAwIDAxLjEzNS42MTUuOC44IDAgMDEtLjQuNTYxLjgyNC44MjQgMCAwMS0xLjAwNi0uMTcgMS4xNjcgMS4xNjcgMCAwMS0uMTYtLjI1M3ptLjcxMS0uMzM5Yy4wMzkuMDgxLjA0NS4wODIuMDQ1LjA4MmEuMDQzLjA0MyAwIDAwLjAyLjAxLjA0My4wNDMgMCAwMC4wNC0uMDA3LjAzNy4wMzcgMCAwMC4wMTctLjAzMi4wNTUuMDU1IDAgMDAwLS4wMTZsLS4wNDEtLjA3NC0uMzkzLS43MThjLS4xNC0uMjMxLS4zMDctLjQ2NS0uNDMtLjY4OS0uMjcyLS40NTItLjQxOS0uOTQ4LS43LTEuNDE4LS4yNDYtLjQ3OS0uNTI2LS45MzctLjc4Ny0xLjQwNkExNC44MjkgMTQuODI5IDAgMDA3Ni44NiA1MS45Yy0uMzc1LS4zODEtLjQ1My0uOTkxLS44NS0xLjMzOC0uMzU0LS4zODgtLjc1Mi0uNzMyLTEuMTEzLTEuMTA2LS4wNDYtLjA0Ny0uMDgxLS4xLS4xMjItLjE1NC0uMDIyLS4wMzEuMDA4LS4wMTMuMDA1LS4wMjRzMC0uMDMxIDAtLjAyMi4wMS4wMTUuMDExIDBjLjM1NC40LjYyNi44NTYgMSAxLjI1NWE0LjI1MSA0LjI1MSAwIDAxLjk4IDEuMzI2IDUuMDgzIDUuMDgzIDAgMDAuNDI3LjY3N2wuMzgzLjcwOWExMC42ODQgMTAuNjg0IDAgMDAuOSAxLjM1MSAxMiAxMiAwIDAxLjg3MiAxLjM5IDI3Ljc1OCAyNy43NTggMCAwMDEuNDc3IDIuODYxek03Ny40ODkgNjNhMzQuNDY2IDM0LjQ2NiAwIDAxLTQuMjA4LTIuMjcgMTcuMjYgMTcuMjYgMCAwMS0zLjQ5LTMuMjgxIDkuMzczIDkuMzczIDAgMDEtMS4yODQtMi4wNzIgMy4zOSAzLjM5IDAgMDEtLjIyNi0yLjUxNiAyLjY4OCAyLjY4OCAwIDAxLjc1OC0xLjA2MSAyLjk1OCAyLjk1OCAwIDAxMS4xNTQtLjU0MSAzLjgyNyAzLjgyNyAwIDAxMi40NTguMjYgMS45MTEgMS45MTEgMCAwMS44NTguOTY0IDEuNzc0IDEuNzc0IDAgMDEuMTE1IDEuMjkzIDIuOTY5IDIuOTY5IDAgMDEtMS43ODggMS43MjggOC4zMjkgOC4zMjkgMCAwMS00LjgyOC4yMjcgOS43ODUgOS43ODUgMCAwMS00LjE3Mi0yLjQ0IDEwLjIxNiAxMC4yMTYgMCAwMS0uNzU4LS45NTEgOS40OTUgOS40OTUgMCAwMS0uNjgyLTEgMTIuMjY1IDEyLjI2NSAwIDAxLTEuMDI3LTIuMTkuMzkzLjM5MyAwIDAxLjczNi0uMjc4di4wMDZsLjAxMy4wMzZhOC41NDMgOC41NDMgMCAwMDIuMzI1IDMuNzc0IDExLjM1NCAxMS4zNTQgMCAwMDEuNzI1IDEuMzc1IDcuNzI5IDcuNzI5IDAgMDAyLjA0NC44NjcgNi4zOTQgNi4zOTQgMCAwMDQuMzU2LS4xMjJjLjMzMS0uMTM5LjYxOC0uMzI1LjkyNi0uNDcxYTEuMDQxIDEuMDQxIDAgMDAuNTYxLS43MjkgMS40NjMgMS40NjMgMCAwMC0uNzU5LTEuNDUzIDIuMzkxIDIuMzkxIDAgMDAtMS45MjktLjIwNyAxLjgzIDEuODMgMCAwMC0xLjQxMSAxLjE1NSA0LjAyOSA0LjAyOSAwIDAwLjI0OCAxLjk0NyA0LjMyMyA0LjMyMyAwIDAwLjUzLjk3OWMuMTczLjMzNC40LjY0NS42MDUuOTY2YTEzLjcxMSAxMy43MTEgMCAwMDMuNDI1IDMuMDYxIDE0Ljc5MyAxNC43OTMgMCAwMDQuMDE2IDIuMjEyLjM5NC4zOTQgMCAwMS0uMjk0LjczeiIgZmlsbD0iI2ZmYzY1NyIvPjxwYXRoIGQ9Ik03Ny4zMjEgNjMuNDIxYTIxLjk4NyAyMS45ODcgMCAwMS04LjAyMS01LjczMyAxMC4xMzUgMTAuMTM1IDAgMDEtMS4zNDItMi4xNzIgMy45NDQgMy45NDQgMCAwMS0uMy0yLjY4NCAzLjEgMy4xIDAgMDExLjkxNS0xLjk3NyA0LjI2MyA0LjI2MyAwIDAxMi42NjYtLjE0MSAyLjk2OCAyLjk2OCAwIDAxMS4yNDIuNjY0IDIuODYgMi44NiAwIDAxLjQyMS41NjkgMi4xNTUgMi4xNTUgMCAwMS4zMTcuNjM2IDIuMzE2IDIuMzE2IDAgMDEtLjAxNyAxLjQ0NyAyLjgxNyAyLjgxNyAwIDAxLS43ODkgMS4xNDkgNC45ODIgNC45ODIgMCAwMS0yLjM3IDEuMDU0IDguMTgzIDguMTgzIDAgMDEtMi41MTcuMDY3IDEwLjAxIDEwLjAxIDAgMDEtNC42NDMtMS43MTggMTAuMTM0IDEwLjEzNCAwIDAxLTMuNjQ3LTQuOTI4IDIgMiAwIDAxLS4xNjUtLjY4NS42OC42OCAwIDAxMS4zMTgtLjE2M2wuMi41N2ExMC4xNjIgMTAuMTYyIDAgMDAuNDkzIDEuMDgyIDguNTIgOC41MiAwIDAwMy4yNzYgMy4zMjQgNy44NTkgNy44NTkgMCAwMDQuNDg4IDEgNS4xNzggNS4xNzggMCAwMDIuMTU4LS42MjMgMS4zODUgMS4zODUgMCAwMC42My0uNjcuODY1Ljg2NSAwIDAwLS4yMDgtLjc3OGMtLjY2Ny0uOTE5LTMuMTE1LS42NjUtMy4yMzMuN2EzLjU0IDMuNTQgMCAwMC42NTQgMi4wNTEgMTUuMzU0IDE1LjM1NCAwIDAwMS40MzMgMS44NzMgMTQuNjc2IDE0LjY3NiAwIDAwMy42MiAzLjA3MSAxNy4wMTkgMTcuMDE5IDAgMDAyLjEyIDEuMWwuNTUxLjIyOC4yNzguMTA3YS45NTIuOTUyIDAgMDEuNC4yNDcuODM0LjgzNCAwIDAxLjA2OCAxLjAzNi44NDQuODQ0IDAgMDEtLjk5Ni4yOTd6bS4yOTMtLjczMWEuMDU0LjA1NCAwIDAwLjA2NC0uMDg0Yy4wNi4wMTQtLjIyLS4wODctLjQtLjE2MWwtLjU3My0uMjQzYTE4Ljk2NSAxOC45NjUgMCAwMS0yLjItMS4xNTggMTYuNTY4IDE2LjU2OCAwIDAxLTIuMDI1LTEuNDUzIDE4LjE2NCAxOC4xNjQgMCAwMS0xLjg0Ny0xLjY3OEExMC43ODYgMTAuNzg2IDAgMDE2OS4xIDU1LjlhNC4yNjcgNC4yNjcgMCAwMS0uNzItMi42MDcgMi4xMTYgMi4xMTYgMCAwMS43NjEtMS4zMDkgMi44ODYgMi44ODYgMCAwMTEuMy0uNTcyIDMuMzQ3IDMuMzQ3IDAgMDExLjM4My4wMzEgMi43NDEgMi43NDEgMCAwMS42NjguMjQ2IDEuMzUgMS4zNSAwIDAxLjU4OS41MzIgMS42NSAxLjY1IDAgMDEuMjgxIDEuNTA5IDIuMTMzIDIuMTMzIDAgMDEtLjk5NCAxLjA2NCA2LjU5MiA2LjU5MiAwIDAxLTIuNDgzLjcgOC41NDcgOC41NDcgMCAwMS00LjkxOS0xLjA3NiA5LjYwNSA5LjYwNSAwIDAxLTMuNDIxLTMuNjg0IDEwLjc2NyAxMC43NjcgMCAwMS0uNTU1LTEuMTM0bC0uMjIyLS41NzZjLS4wMDgtLjAwOS0uMDI3LS4wMDctLjAyMyAwLS4xLS4zMTMuMzM3Ljg0Mi42MTUgMS40NjFhOC41MzEgOC41MzEgMCAwMDEuMTkxIDEuOTc3IDguNyA4LjcgMCAwMDEuNzI3IDEuNTI2IDkuMSA5LjEgMCAwMDQuMzExIDEuNTg5IDkuMyA5LjMgMCAwMDIuMjgxLS4xNSA0LjM3NCA0LjM3NCAwIDAwMi4wMTYtLjgyNCAxLjgxNyAxLjgxNyAwIDAwLjU4OS0uODI0IDEuNTQ3IDEuNTQ3IDAgMDAtLjAwNy0uOTYzIDEuNiAxLjYgMCAwMC0uMjItLjQ2MyAyLjI0MSAyLjI0MSAwIDAwLS4yODktLjQzOCAyLjE3MiAyLjE3MiAwIDAwLS45MTktLjUyYy0xLjM5Mi0uNDYyLTMuMzA1LjE3MS0zLjY3OCAxLjYzM2EzLjMxIDMuMzEgMCAwMC4zMjggMi4xNzEgOS4zOCA5LjM4IDAgMDAxLjI2IDEuOTczIDE3LjkyMyAxNy45MjMgMCAwMDcuNjY0IDUuNTE4em0tLjk5NyAzLjgzN2E2LjEyMyA2LjEyMyAwIDAwLTEuODU4LS40MzVjLS42MzMtLjEwNy0xLjIzOS0uMzQ4LTEuODY4LS41MTRhMTIuNDA5IDEyLjQwOSAwIDAxLTEuODM3LS42ODVjLS4yOTQtLjEyNC0uNjEyLS4xNzktLjkxLS4zYTQuNzE2IDQuNzE2IDAgMDAtLjkyNS0uMjY5Yy0uMzEzLS4wNzUtLjYxNy0uMTg2LS45My0uMjY1LS4zLS4xMjgtLjY1Ni0uMDQyLS45NjItLjE1Mi0uNjMxLS4xNDUtMS4yNy0uMjc1LTEuOS0uNDQ1LS41OTMtLjI4OS0xLjIzNS0uNDM3LTEuODM2LS43MTgtLjU1Ni0uMzcyLTEuMi0uNTQ4LTEuNzg4LS45YS4zOTMuMzkzIDAgMDEuMzk1LS42NzlsLjA0MS4wMjNhNi4xNzQgNi4xNzQgMCAwMDEuNjg4Ljc2N2MuNTc5LjIyNiAxLjE0MS41MyAxLjc0OS43MThhNi40NzUgNi40NzUgMCAwMDEuODQ1LjUxNWMuMzM1LS4wMTQuNTc5LjMyNi45MTYuMzA5YTYuMDkyIDYuMDkyIDAgMDEuOTcxLjExNSAzLjUgMy41IDAgMDAuOTMxLjI5M2MuMzIuMDczLjYxMy4yMzEuOTM2LjNhMS44MTEgMS44MTEgMCAwMS45LjMxMyAxLjcgMS43IDAgMDAuNDUyLjE1N2wuNDQxLjIwN2E5LjE5IDkuMTkgMCAwMDEuODkzLjQgMTguMjU4IDE4LjI1OCAwIDAwMS45LjQ5LjM5My4zOTMgMCAwMS0uMjIxLjc1NXoiIGZpbGw9IiNmZmM2NTciLz48cGF0aCBkPSJNNzYuNDkyIDY2Ljk2Yy0xLjM3NS0uMzM5LTIuNzA5LS43NzUtNC4xMjYtMS0xLjQtLjQ0LTIuNjQ3LS44NzItNC4wMjgtMS4yYTI3LjgxNCAyNy44MTQgMCAwMS00LjA0Ni0xLjM4M2MtLjMyOC0uMTQzLS42NjUtLjIyNy0xLjAwNS0uMzYyYTcuNjg0IDcuNjg0IDAgMDEtLjk3Mi0uNDlsLS40NTgtLjI4OS0uMjI3LS4xNTVhLjY3Ni42NzYgMCAwMS0uMjQtLjMxLjcuNyAwIDAxLjE0OC0uNzMxLjY4My42ODMgMCAwMS43MzktLjE1NCAxNi40OSAxNi40OSAwIDAwMS44OTMuOTQyIDE1Ljk3NiAxNS45NzYgMCAwMDIuMDA3LjYyMmw0LjA4OCAxLjA4MmMuNjczLjIyNCAxLjMyMi41IDIgLjY2OHMxLjM2LjMgMi4wMzguNTIyYy4zMzguMS42NzQuMjI5IDEuMDE0LjMxNWwxLjAzLjIyMi41MTUuMTExYS45NS45NSAwIDAxLjM3Mi4xMzcuODEyLjgxMiAwIDAxLjExOCAxLjI1Ljg2Mi44NjIgMCAwMS0uODYuMjAzem0uMjE2LS43NTdjLjE0Mi4wNDMuMTExLS4wMzEuMTExLS4wNTVhLjA1LjA1IDAgMDAtLjAxOC0uMDE4LjYuNiAwIDAwLS4xLS4wMjRsLS41MTktLjExN2MtLjY4OS0uMTY5LTEuMzkxLS4zLTIuMDc3LS40MzUtMS4zNDUtLjMzLTIuNzY3LS43OTQtNC4wOC0xLjIzM2EzNC42MzYgMzQuNjM2IDAgMDAtNC4wOC0xLjE2N2MtLjcyNS0uMS0xLjI4OS0uNjI2LTEuOTktLjc5MS0uMzM4LS4xMi0uNjg2LS4yMjUtMS4wMjItLjM2NWwtLjUwNi0uMjE0LS4yNTEtLjExNy0uMTItLjA2OGMtLjA0OC0uMDI5LS4wNzktLjA0Ni0uMDU5LS4wMzYuMDYyLS4wMS4wMDYtLjA2OS4wMS0uMDQxaC4wMDVsLjIxLjEyOS40NDQuMjQ3YTguMiA4LjIgMCAwMDEuODc5LjggOS44NDIgOS44NDIgMCAwMTEuOTcyLjcgNi43MDggNi43MDggMCAwMDEgLjMxOWwuOTk1LjM0YzEuMzQxLjQyNSAyLjguNjczIDQuMTA2IDEuMWEzOS4xNjQgMzkuMTY0IDAgMDA0LjA5IDEuMDQzeiIgZmlsbD0iI2ZmYzY1NyIvPjxwYXRoIGQ9Ik02OC4xIDQ0LjkwNmMuMDM2LS4yOTMtLjIzMy0uNTc2LS40NTEtLjQ3M2EuNTE1LjUxNSAwIDAwLS4wOS43MjdjLjE4Mi4xOTEuNS4wMzkuNTQxLS4yNTQiIGZpbGw9IiNmZmM3NTciLz48cGF0aCBkPSJNNjcuNzA3IDQ0Ljg1N2MtLjAzOC0uMDMyLS4xNTkuMDIzLS4wMjItLjAxNWEuMzEuMzEgMCAwMC4wNS0uMDE0Yy4wMjEtLjAyNy4wMy0uMDc2LjA0NS0uMDY4LjAyNy0uMDEzLjAzOC0uMDMyLjAzNS0uMDM4cy0uMTQ0LS4wMDgtLjE1NC4wNjVjMCAuMTU0LjIuMjE5LjEyLjA4Mi0uMDUtLjA3Ny0uMDc3LjAxOC0uMDI5LjAzOS4wMS0uMDA3IDAtLjA0MS0uMDQ1LS4wNTFhLjY1Ni42NTYgMCAxMS44MDktLjYyNWwtLjAxNS43MjRhLjc3Mi43NzIgMCAwMS0uMjI5LjU1MWMtLjE2Ni4xNjEtLjQyOS4xMjEtLjY1Ni4xMTNhLjcuNyAwIDAxLS41LS40MTUgMS4wODUgMS4wODUgMCAwMS0uMDgyLS41YzAtLjE1NS0uMDU0LS4zOTIuMTcyLS41NDdhLjc2Ni43NjYgMCAwMS40LS4wOTFjLjA2OS4wMjUuMTI0LS4wMjMuMTktLjAzMWEuNDUuNDUgMCAwMS4xNTkuMDc4IDIuNDEyIDIuNDEyIDAgMDEuMTkzLjJjLjA2My4wNDMuMTkxLjA1Mi4yMjMuMTM3YS43LjcgMCAwMS4xMzMuNTA2LjI5NC4yOTQgMCAwMS0uNDc3LjE3em00LjEgMS4zNDNjLjA2Ny0uNTUzLS41MDctMS4xLS45NjItLjkyMWEuOS45IDAgMDAtLjE2NyAxLjM3Mi42ODcuNjg3IDAgMDAxLjEyOS0uNDUxIiBmaWxsPSIjZmZjNzU3Ii8+PHBhdGggZD0iTTcxLjQxIDQ2LjE1NGMtLjAyMi0uMTg4LS4yNDItLjMyNC0uMzI1LS40NTVsLS4wMzgtLjAzNWMtLjAwOC0uMDI5LS4wMjctLjA3OC0uMDQxLS4wNjJhLjE3Mi4xNzIgMCAwMC0uMDkzLjAyNWMtLjA1NS4wNDItLjI0MS4xMjQtLjI2My4yOS0uMDEyLjMzLjI0NS41ODkuNC41MjMuMDcyLS4wNS4xNTMuMDA1LjI3My0uMDIyYS4yMzIuMjMyIDAgMDAuMDg2LS4yNjMuNDE2LjQxNiAwIDExLjgwNi0uMTI3bC0uMDExLjIyNGExLjEgMS4xIDAgMDEtLjQxNS44MDkgMS4yNTggMS4yNTggMCAwMS0uOS4xMyAxLjAzOSAxLjAzOSAwIDAxLS43MTItLjU1MiAxLjQ4IDEuNDggMCAwMS0uMTQ5LS44LjkxMi45MTIgMCAwMS4zMzgtLjgyOS45ODYuOTg2IDAgMDEuNTI4LS4xMTFjLjA4Ni4wMjYuMTYyLS4wMTYuMjQ1LS4wMjFhLjc2Mi43NjIgMCAwMS4yMTEuMDk0IDIuODg2IDIuODg2IDAgMDEuMzA5LjI1N2MuMS4wNjguMjU5LjEwNi4zMjMuMjI4YTEuMDkyIDEuMDkyIDAgMDEuMjI1LjguNC40IDAgMDEtLjc4NS0uMDE1eiIgZmlsbD0iI2ZmYzc1NyIvPjwvc3ZnPgo=';
10059
10060var styles$O = {
10061 "Image": "Polaris-EmptySearchResult__Image"
10062};
10063
10064function EmptySearchResult(_ref) {
10065 var title = _ref.title,
10066 description = _ref.description,
10067 withIllustration = _ref.withIllustration;
10068 var i18n = useI18n();
10069 var altText = i18n.translate('Polaris.EmptySearchResult.altText');
10070 var descriptionMarkup = description ? React__default.createElement("p", null, description) : null;
10071 var illustrationMarkup = withIllustration ? React__default.createElement(Image, {
10072 alt: altText,
10073 source: emptySearch,
10074 className: styles$O.Image,
10075 draggable: false
10076 }) : null;
10077 return React__default.createElement(Stack, {
10078 alignment: "center",
10079 vertical: true
10080 }, illustrationMarkup, React__default.createElement(DisplayText, {
10081 size: "small"
10082 }, title), React__default.createElement(TextStyle, {
10083 variation: "subdued"
10084 }, descriptionMarkup));
10085}
10086
10087var styles$P = {
10088 "EmptyState": "Polaris-EmptyState",
10089 "Section": "Polaris-EmptyState__Section",
10090 "ImageContainer": "Polaris-EmptyState__ImageContainer",
10091 "DetailsContainer": "Polaris-EmptyState__DetailsContainer",
10092 "withinContentContainer": "Polaris-EmptyState--withinContentContainer",
10093 "Details": "Polaris-EmptyState__Details",
10094 "Image": "Polaris-EmptyState__Image",
10095 "Content": "Polaris-EmptyState__Content",
10096 "withinPage": "Polaris-EmptyState--withinPage",
10097 "imageContained": "Polaris-EmptyState--imageContained",
10098 "Actions": "Polaris-EmptyState__Actions",
10099 "FooterContent": "Polaris-EmptyState__FooterContent"
10100};
10101
10102function EmptyState(_ref) {
10103 var children = _ref.children,
10104 heading = _ref.heading,
10105 image = _ref.image,
10106 largeImage = _ref.largeImage,
10107 imageContained = _ref.imageContained,
10108 action = _ref.action,
10109 secondaryAction = _ref.secondaryAction,
10110 footerContent = _ref.footerContent;
10111 var withinContentContainer = useContext(WithinContentContext);
10112 var className = classNames(styles$P.EmptyState, imageContained && styles$P.imageContained, withinContentContainer ? styles$P.withinContentContainer : styles$P.withinPage);
10113 var imageMarkup = largeImage ? React__default.createElement(Image, {
10114 alt: "",
10115 role: "presentation",
10116 className: styles$P.Image,
10117 source: largeImage,
10118 sourceSet: [{
10119 source: image,
10120 descriptor: '568w'
10121 }, {
10122 source: largeImage,
10123 descriptor: '1136w'
10124 }],
10125 sizes: "(max-width: 568px) 60vw"
10126 }) : React__default.createElement(Image, {
10127 role: "presentation",
10128 alt: "",
10129 className: styles$P.Image,
10130 source: image
10131 });
10132 var secondaryActionMarkup = secondaryAction ? buttonFrom(secondaryAction, {
10133 plain: true
10134 }) : null;
10135 var footerContentMarkup = footerContent ? React__default.createElement("div", {
10136 className: styles$P.FooterContent
10137 }, React__default.createElement(TextContainer, null, footerContent)) : null;
10138 var headingSize = withinContentContainer ? 'small' : 'medium';
10139 var primaryActionSize = withinContentContainer ? 'medium' : 'large';
10140 var primaryActionMarkup = action ? buttonFrom(action, {
10141 primary: true,
10142 size: primaryActionSize
10143 }) : null;
10144 var headingMarkup = heading ? React__default.createElement(DisplayText, {
10145 size: headingSize
10146 }, heading) : null;
10147 var childrenMarkup = children ? React__default.createElement("div", {
10148 className: styles$P.Content
10149 }, children) : null;
10150 var textContentMarkup = headingMarkup || children ? React__default.createElement(TextContainer, null, headingMarkup, childrenMarkup) : null;
10151 var actionsMarkup = primaryActionMarkup || secondaryActionMarkup ? React__default.createElement("div", {
10152 className: styles$P.Actions
10153 }, React__default.createElement(Stack, {
10154 alignment: "center"
10155 }, primaryActionMarkup, secondaryActionMarkup)) : null;
10156 var detailsMarkup = textContentMarkup || actionsMarkup || footerContentMarkup ? React__default.createElement("div", {
10157 className: styles$P.DetailsContainer
10158 }, React__default.createElement("div", {
10159 className: styles$P.Details
10160 }, textContentMarkup, actionsMarkup, footerContentMarkup)) : React__default.createElement("div", {
10161 className: styles$P.DetailsContainer
10162 });
10163 return React__default.createElement("div", {
10164 className: className
10165 }, React__default.createElement("div", {
10166 className: styles$P.Section
10167 }, detailsMarkup, React__default.createElement("div", {
10168 className: styles$P.ImageContainer
10169 }, imageMarkup)));
10170}
10171
10172var styles$Q = {
10173 "Truncate": "Polaris-Truncate"
10174};
10175
10176function Truncate(_ref) {
10177 var children = _ref.children;
10178 return React__default.createElement("span", {
10179 className: styles$Q.Truncate
10180 }, children);
10181}
10182
10183var styles$R = {
10184 "ExceptionList": "Polaris-ExceptionList",
10185 "Item": "Polaris-ExceptionList__Item",
10186 "Icon": "Polaris-ExceptionList__Icon",
10187 "statusWarning": "Polaris-ExceptionList--statusWarning",
10188 "statusCritical": "Polaris-ExceptionList--statusCritical",
10189 "Bullet": "Polaris-ExceptionList__Bullet",
10190 "Title": "Polaris-ExceptionList__Title",
10191 "Description": "Polaris-ExceptionList__Description"
10192};
10193
10194function ExceptionList(_ref) {
10195 var itemsList = _ref.items;
10196 var items = itemsList.map(function (item, index) {
10197 var status = item.status,
10198 icon = item.icon,
10199 title = item.title,
10200 description = item.description,
10201 _item$truncate = item.truncate,
10202 truncate = _item$truncate === void 0 ? false : _item$truncate;
10203 var itemClasses = classNames(styles$R.Item, status && styles$R[variationName('status', status)]);
10204 var iconMarkup = icon ? React__default.createElement(Icon, {
10205 source: icon
10206 }) : React__default.createElement("span", {
10207 className: styles$R.Bullet
10208 });
10209 var titleMarkup = title && React__default.createElement("span", {
10210 className: styles$R.Title
10211 }, title);
10212 var descriptionMarkup = description && React__default.createElement("span", {
10213 className: styles$R.Description
10214 }, description);
10215 var Element = truncate ? Truncate : React__default.Fragment;
10216 return React__default.createElement("li", {
10217 className: itemClasses,
10218 key: index
10219 }, React__default.createElement("span", {
10220 className: styles$R.Icon
10221 }, iconMarkup), React__default.createElement(Element, null, titleMarkup, descriptionMarkup));
10222 });
10223 return React__default.createElement("ul", {
10224 className: styles$R.ExceptionList
10225 }, items);
10226}
10227
10228var ResourceListContext = React__default.createContext({});
10229
10230var SELECT_ALL_ITEMS = 'All';
10231
10232var styles$S = {
10233 "Tag": "Polaris-Tag",
10234 "disabled": "Polaris-Tag--disabled",
10235 "TagText": "Polaris-Tag__TagText",
10236 "Button": "Polaris-Tag__Button"
10237};
10238
10239function Tag(_ref) {
10240 var children = _ref.children,
10241 _ref$disabled = _ref.disabled,
10242 disabled = _ref$disabled === void 0 ? false : _ref$disabled,
10243 onRemove = _ref.onRemove;
10244 var i18n = useI18n();
10245 var className = classNames(disabled && styles$S.disabled, styles$S.Tag);
10246 var ariaLabel = i18n.translate('Polaris.Tag.ariaLabel', {
10247 children
10248 });
10249 return React__default.createElement("span", {
10250 className: className
10251 }, React__default.createElement("span", {
10252 title: children,
10253 className: styles$S.TagText
10254 }, children), React__default.createElement("button", {
10255 type: "button",
10256 "aria-label": ariaLabel,
10257 className: styles$S.Button,
10258 onClick: onRemove,
10259 onMouseUp: handleMouseUpByBlurring,
10260 disabled: disabled
10261 }, React__default.createElement(Icon, {
10262 source: CancelSmallMinor
10263 })));
10264}
10265
10266var Focus =
10267/*#__PURE__*/
10268function (_React$PureComponent) {
10269 _inherits(Focus, _React$PureComponent);
10270
10271 function Focus() {
10272 _classCallCheck(this, Focus);
10273
10274 return _possibleConstructorReturn(this, _getPrototypeOf(Focus).apply(this, arguments));
10275 }
10276
10277 _createClass(Focus, [{
10278 key: "componentDidMount",
10279 value: function componentDidMount() {
10280 this.handleSelfFocus();
10281 }
10282 }, {
10283 key: "componentDidUpdate",
10284 value: function componentDidUpdate(_a) {
10285 var prevChildren = _a.children,
10286 restPrevProps = __rest(_a, ["children"]);
10287
10288 var _b = this.props,
10289 children = _b.children,
10290 restProps = __rest(_b, ["children"]);
10291
10292 if (isEqual(restProps, restPrevProps)) {
10293 return;
10294 }
10295
10296 this.handleSelfFocus();
10297 }
10298 }, {
10299 key: "handleSelfFocus",
10300 value: function handleSelfFocus() {
10301 var _this$props = this.props,
10302 disabled = _this$props.disabled,
10303 root = _this$props.root;
10304
10305 if (disabled) {
10306 return;
10307 }
10308
10309 if (root) {
10310 if (!root.querySelector('[autofocus]')) {
10311 focusFirstFocusableNode(root, false);
10312 }
10313 }
10314 }
10315 }, {
10316 key: "render",
10317 value: function render() {
10318 var children = this.props.children;
10319 return React__default.createElement(React__default.Fragment, null, children);
10320 }
10321 }]);
10322
10323 return Focus;
10324}(React__default.PureComponent);
10325
10326var TrapFocus =
10327/*#__PURE__*/
10328function (_React$PureComponent) {
10329 _inherits(TrapFocus, _React$PureComponent);
10330
10331 function TrapFocus() {
10332 var _this;
10333
10334 _classCallCheck(this, TrapFocus);
10335
10336 _this = _possibleConstructorReturn(this, _getPrototypeOf(TrapFocus).apply(this, arguments));
10337 _this.state = {
10338 shouldFocusSelf: undefined
10339 };
10340
10341 _this.setFocusTrapWrapper = function (node) {
10342 _this.focusTrapWrapper = node;
10343 };
10344
10345 _this.handleBlur = function (event) {
10346 var relatedTarget = event.relatedTarget;
10347
10348 var _assertThisInitialize = _assertThisInitialized(_this),
10349 focusTrapWrapper = _assertThisInitialize.focusTrapWrapper;
10350
10351 var _this$props$trapping = _this.props.trapping,
10352 trapping = _this$props$trapping === void 0 ? true : _this$props$trapping;
10353
10354 if (relatedTarget == null || trapping === false) {
10355 return;
10356 }
10357
10358 if (focusTrapWrapper && !focusTrapWrapper.contains(relatedTarget) && (!relatedTarget || !closest(relatedTarget, '[data-polaris-overlay]'))) {
10359 event.preventDefault();
10360
10361 if (event.srcElement === findFirstFocusableNode(focusTrapWrapper)) {
10362 return write(function () {
10363 return focusLastFocusableNode(focusTrapWrapper);
10364 });
10365 }
10366
10367 var firstNode = findFirstFocusableNode(focusTrapWrapper);
10368 write(function () {
10369 return focusFirstFocusableNode(firstNode);
10370 });
10371 }
10372 };
10373
10374 return _this;
10375 }
10376
10377 _createClass(TrapFocus, [{
10378 key: "componentDidMount",
10379 value: function componentDidMount() {
10380 this.setState(this.handleTrappingChange());
10381 }
10382 }, {
10383 key: "handleTrappingChange",
10384 value: function handleTrappingChange() {
10385 var _this$props$trapping2 = this.props.trapping,
10386 trapping = _this$props$trapping2 === void 0 ? true : _this$props$trapping2;
10387
10388 if (this.focusTrapWrapper.contains(document.activeElement)) {
10389 return {
10390 shouldFocusSelf: false
10391 };
10392 }
10393
10394 return {
10395 shouldFocusSelf: trapping
10396 };
10397 }
10398 }, {
10399 key: "render",
10400 value: function render() {
10401 var children = this.props.children;
10402 return React__default.createElement(Focus, {
10403 disabled: this.shouldDisable,
10404 root: this.focusTrapWrapper
10405 }, React__default.createElement("div", {
10406 ref: this.setFocusTrapWrapper
10407 }, React__default.createElement(EventListener, {
10408 event: "focusout",
10409 handler: this.handleBlur
10410 }), children));
10411 }
10412 }, {
10413 key: "shouldDisable",
10414 get: function get() {
10415 var _this$props$trapping3 = this.props.trapping,
10416 trapping = _this$props$trapping3 === void 0 ? true : _this$props$trapping3;
10417 var shouldFocusSelf = this.state.shouldFocusSelf;
10418
10419 if (shouldFocusSelf === undefined) {
10420 return true;
10421 }
10422
10423 return shouldFocusSelf ? !trapping : !shouldFocusSelf;
10424 }
10425 }]);
10426
10427 return TrapFocus;
10428}(React__default.PureComponent);
10429
10430var styles$T = {
10431 "Sheet": "Polaris-Sheet",
10432 "Container": "Polaris-Sheet__Container",
10433 "Bottom": "Polaris-Sheet__Bottom",
10434 "enterBottom": "Polaris-Sheet--enterBottom",
10435 "enterBottomActive": "Polaris-Sheet--enterBottomActive",
10436 "exitBottom": "Polaris-Sheet--exitBottom",
10437 "exitBottomActive": "Polaris-Sheet--exitBottomActive",
10438 "Right": "Polaris-Sheet__Right",
10439 "enterRight": "Polaris-Sheet--enterRight",
10440 "enterRightActive": "Polaris-Sheet--enterRightActive",
10441 "exitRight": "Polaris-Sheet--exitRight",
10442 "exitRightActive": "Polaris-Sheet--exitRightActive"
10443};
10444
10445var BOTTOM_CLASS_NAMES = {
10446 enter: classNames(styles$T.Bottom, styles$T.enterBottom),
10447 enterActive: classNames(styles$T.Bottom, styles$T.enterBottomActive),
10448 exit: classNames(styles$T.Bottom, styles$T.exitBottom),
10449 exitActive: classNames(styles$T.Bottom, styles$T.exitBottomActive)
10450};
10451var RIGHT_CLASS_NAMES = {
10452 enter: classNames(styles$T.Right, styles$T.enterRight),
10453 enterActive: classNames(styles$T.Right, styles$T.enterRightActive),
10454 exit: classNames(styles$T.Right, styles$T.exitRight),
10455 exitActive: classNames(styles$T.Right, styles$T.exitRightActive)
10456};
10457function Sheet(_ref) {
10458 var children = _ref.children,
10459 open = _ref.open,
10460 onClose = _ref.onClose,
10461 onEntered = _ref.onEntered,
10462 onExit = _ref.onExit;
10463
10464 var _useMediaQuery = useMediaQuery(),
10465 isNavigationCollapsed = _useMediaQuery.isNavigationCollapsed;
10466
10467 var container = useRef(null);
10468 var findDOMNode = useCallback(function () {
10469 return container.current;
10470 }, []);
10471 return React__default.createElement(Portal, {
10472 idPrefix: "sheet"
10473 }, React__default.createElement(CSSTransition, {
10474 findDOMNode: findDOMNode,
10475 classNames: isNavigationCollapsed ? BOTTOM_CLASS_NAMES : RIGHT_CLASS_NAMES,
10476 timeout: Duration.Slow,
10477 in: open,
10478 mountOnEnter: true,
10479 unmountOnExit: true,
10480 onEntered: onEntered,
10481 onExit: onExit
10482 }, React__default.createElement("div", Object.assign({
10483 className: styles$T.Container
10484 }, layer.props, overlay.props, {
10485 ref: container
10486 }), React__default.createElement(TrapFocus, {
10487 trapping: open
10488 }, React__default.createElement("div", {
10489 role: "dialog",
10490 tabIndex: -1,
10491 className: styles$T.Sheet
10492 }, children)))), React__default.createElement(KeypressListener, {
10493 keyCode: Key.Escape,
10494 handler: onClose
10495 }), open && React__default.createElement(Backdrop, {
10496 transparent: true,
10497 onClick: onClose
10498 }));
10499}
10500
10501var styles$U = {
10502 "Item": "Polaris-Filters-ConnectedFilterControl__Item",
10503 "Item-focused": "Polaris-Filters-ConnectedFilterControl__Item--focused",
10504 "ProxyButtonContainer": "Polaris-Filters-ConnectedFilterControl__ProxyButtonContainer",
10505 "ConnectedFilterControl": "Polaris-Filters-ConnectedFilterControl",
10506 "CenterContainer": "Polaris-Filters-ConnectedFilterControl__CenterContainer",
10507 "right": "Polaris-Filters-ConnectedFilterControl--right",
10508 "RightContainer": "Polaris-Filters-ConnectedFilterControl__RightContainer",
10509 "MoreFiltersButtonContainer": "Polaris-Filters-ConnectedFilterControl__MoreFiltersButtonContainer",
10510 "Wrapper": "Polaris-Filters-ConnectedFilterControl__Wrapper",
10511 "AuxiliaryContainer": "Polaris-Filters-ConnectedFilterControl__AuxiliaryContainer"
10512};
10513
10514var Item$4 =
10515/*#__PURE__*/
10516function (_React$PureComponent) {
10517 _inherits(Item, _React$PureComponent);
10518
10519 function Item() {
10520 var _this;
10521
10522 _classCallCheck(this, Item);
10523
10524 _this = _possibleConstructorReturn(this, _getPrototypeOf(Item).apply(this, arguments));
10525 _this.state = {
10526 focused: false
10527 };
10528
10529 _this.handleBlur = function () {
10530 _this.setState({
10531 focused: false
10532 });
10533 };
10534
10535 _this.handleFocus = function () {
10536 _this.setState({
10537 focused: true
10538 });
10539 };
10540
10541 return _this;
10542 }
10543
10544 _createClass(Item, [{
10545 key: "render",
10546 value: function render() {
10547 var focused = this.state.focused;
10548 var children = this.props.children;
10549 var className = classNames(styles$U.Item, focused && styles$U['Item-focused']);
10550 return React__default.createElement("div", {
10551 onBlur: this.handleBlur,
10552 onFocus: this.handleFocus,
10553 className: className
10554 }, children);
10555 }
10556 }]);
10557
10558 return Item;
10559}(React__default.PureComponent);
10560
10561var FILTER_FIELD_MIN_WIDTH = 150;
10562var ConnectedFilterControl =
10563/*#__PURE__*/
10564function (_React$Component) {
10565 _inherits(ConnectedFilterControl, _React$Component);
10566
10567 function ConnectedFilterControl() {
10568 var _this;
10569
10570 _classCallCheck(this, ConnectedFilterControl);
10571
10572 _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectedFilterControl).apply(this, arguments));
10573 _this.state = {
10574 availableWidth: 0,
10575 proxyButtonsWidth: {}
10576 };
10577 _this.container = React__default.createRef();
10578 _this.proxyButtonContainer = React__default.createRef();
10579 _this.moreFiltersButtonContainer = React__default.createRef();
10580 _this.handleResize = debounce(function () {
10581 _this.measureProxyButtons();
10582
10583 _this.measureAvailableWidth();
10584 }, 40, {
10585 leading: true,
10586 trailing: true,
10587 maxWait: 40
10588 });
10589 return _this;
10590 }
10591
10592 _createClass(ConnectedFilterControl, [{
10593 key: "componentDidMount",
10594 value: function componentDidMount() {
10595 this.handleResize();
10596 }
10597 }, {
10598 key: "render",
10599 value: function render() {
10600 var _this2 = this;
10601
10602 var _this$props = this.props,
10603 children = _this$props.children,
10604 rightPopoverableActions = _this$props.rightPopoverableActions,
10605 rightAction = _this$props.rightAction,
10606 auxiliary = _this$props.auxiliary;
10607 var className = classNames(styles$U.ConnectedFilterControl, rightPopoverableActions && styles$U.right);
10608 var rightMarkup = rightPopoverableActions ? React__default.createElement("div", {
10609 className: styles$U.RightContainer
10610 }, this.popoverFrom(this.getActionsToRender(rightPopoverableActions))) : null;
10611 var rightActionMarkup = rightAction ? React__default.createElement("div", {
10612 ref: this.moreFiltersButtonContainer,
10613 className: styles$U.MoreFiltersButtonContainer
10614 }, React__default.createElement(Item$4, null, rightAction)) : null;
10615 var proxyButtonMarkup = rightPopoverableActions ? React__default.createElement("div", {
10616 className: styles$U.ProxyButtonContainer,
10617 ref: this.proxyButtonContainer,
10618 "aria-hidden": true
10619 }, rightPopoverableActions.map(function (action) {
10620 return React__default.createElement("div", {
10621 key: action.key,
10622 "data-key": action.key
10623 }, _this2.activatorButtonFrom(action));
10624 })) : null;
10625 var auxMarkup = auxiliary ? React__default.createElement("div", {
10626 className: styles$U.AuxiliaryContainer
10627 }, auxiliary) : null;
10628 return React__default.createElement(React__default.Fragment, null, proxyButtonMarkup, React__default.createElement("div", {
10629 className: styles$U.Wrapper
10630 }, React__default.createElement("div", {
10631 className: className,
10632 ref: this.container
10633 }, React__default.createElement("div", {
10634 className: styles$U.CenterContainer
10635 }, React__default.createElement(Item$4, null, children)), rightMarkup, rightActionMarkup, React__default.createElement(EventListener, {
10636 event: "resize",
10637 handler: this.handleResize
10638 })), auxMarkup));
10639 }
10640 }, {
10641 key: "measureProxyButtons",
10642 value: function measureProxyButtons() {
10643 if (this.proxyButtonContainer.current) {
10644 var proxyButtonsWidth = {}; // this number is magical, but tweaking it solved the problem of items overlapping
10645
10646 var tolerance = 52;
10647
10648 if (this.proxyButtonContainer.current) {
10649 Array.from(this.proxyButtonContainer.current.children).forEach(function (element) {
10650 var buttonWidth = element.getBoundingClientRect().width + tolerance;
10651 var buttonKey = element.dataset.key;
10652
10653 if (buttonKey) {
10654 proxyButtonsWidth[buttonKey] = buttonWidth;
10655 }
10656 });
10657 }
10658
10659 this.setState({
10660 proxyButtonsWidth
10661 });
10662 }
10663 }
10664 }, {
10665 key: "measureAvailableWidth",
10666 value: function measureAvailableWidth() {
10667 if (this.container.current && this.moreFiltersButtonContainer.current) {
10668 var containerWidth = this.container.current.getBoundingClientRect().width;
10669 var moreFiltersButtonWidth = this.moreFiltersButtonContainer.current.getBoundingClientRect().width;
10670 var filtersActionWidth = 0;
10671 var availableWidth = containerWidth - FILTER_FIELD_MIN_WIDTH - moreFiltersButtonWidth - filtersActionWidth;
10672 this.setState({
10673 availableWidth
10674 });
10675 }
10676 }
10677 }, {
10678 key: "getActionsToRender",
10679 value: function getActionsToRender(actions) {
10680 var remainingWidth = this.state.availableWidth;
10681 var actionsToReturn = [];
10682
10683 for (var i = 0; remainingWidth > 0 && i < actions.length; i++) {
10684 var action = actions[i];
10685 var actionWidth = this.state.proxyButtonsWidth[action.key];
10686
10687 if (actionWidth <= remainingWidth) {
10688 actionsToReturn.push(action);
10689 remainingWidth -= actionWidth;
10690 }
10691 }
10692
10693 return actionsToReturn;
10694 }
10695 }, {
10696 key: "activatorButtonFrom",
10697 value: function activatorButtonFrom(action) {
10698 return React__default.createElement(Button, {
10699 onClick: action.onAction,
10700 disclosure: true,
10701 disabled: this.props.disabled || action.disabled,
10702 id: "Activator-".concat(action.key)
10703 }, action.content);
10704 }
10705 }, {
10706 key: "popoverFrom",
10707 value: function popoverFrom(actions) {
10708 var _this3 = this;
10709
10710 return actions.map(function (action) {
10711 return React__default.createElement(Item$4, {
10712 key: action.key
10713 }, React__default.createElement(Popover, {
10714 active: action.popoverOpen,
10715 activator: _this3.activatorButtonFrom(action),
10716 onClose: action.onAction,
10717 preferredAlignment: "left",
10718 sectioned: true
10719 }, action.popoverContent));
10720 });
10721 }
10722 }]);
10723
10724 return ConnectedFilterControl;
10725}(React__default.Component);
10726
10727var styles$V = {
10728 "Filters": "Polaris-Filters",
10729 "FiltersContainer": "Polaris-Filters__FiltersContainer",
10730 "FiltersContainerHeader": "Polaris-Filters__FiltersContainerHeader",
10731 "FiltersDesktopContainerContent": "Polaris-Filters__FiltersDesktopContainerContent",
10732 "FiltersMobileContainerContent": "Polaris-Filters__FiltersMobileContainerContent",
10733 "FiltersContainerFooter": "Polaris-Filters__FiltersContainerFooter",
10734 "FiltersMobileContainerFooter": "Polaris-Filters__FiltersMobileContainerFooter",
10735 "EmptyFooterState": "Polaris-Filters__EmptyFooterState",
10736 "FilterTriggerContainer": "Polaris-Filters__FilterTriggerContainer",
10737 "FilterTrigger": "Polaris-Filters__FilterTrigger",
10738 "FilterTriggerTitle": "Polaris-Filters__FilterTriggerTitle",
10739 "AppliedFilterBadgeContainer": "Polaris-Filters__AppliedFilterBadgeContainer",
10740 "open": "Polaris-Filters--open",
10741 "FilterTriggerLabelContainer": "Polaris-Filters__FilterTriggerLabelContainer",
10742 "first": "Polaris-Filters--first",
10743 "last": "Polaris-Filters--last",
10744 "FilterNodeContainer": "Polaris-Filters__FilterNodeContainer",
10745 "SearchIcon": "Polaris-Filters__SearchIcon",
10746 "Backdrop": "Polaris-Filters__Backdrop",
10747 "HelpText": "Polaris-Filters__HelpText",
10748 "TagsContainer": "Polaris-Filters__TagsContainer"
10749};
10750
10751var Suffix;
10752
10753(function (Suffix) {
10754 Suffix["Filter"] = "Filter";
10755 Suffix["Shortcut"] = "Shortcut";
10756})(Suffix || (Suffix = {}));
10757
10758var Filters =
10759/*#__PURE__*/
10760function (_React$Component) {
10761 _inherits(Filters, _React$Component);
10762
10763 function Filters() {
10764 var _this;
10765
10766 _classCallCheck(this, Filters);
10767
10768 _this = _possibleConstructorReturn(this, _getPrototypeOf(Filters).apply(this, arguments));
10769 _this.state = {
10770 open: false,
10771 readyForFocus: false
10772 };
10773 _this.moreFiltersButtonContainer = createRef();
10774 _this.focusNode = createRef();
10775
10776 _this.closeFilters = function () {
10777 _this.setState({
10778 open: false
10779 }, function () {
10780 if (_this.moreFiltersButtonContainer.current) {
10781 focusFirstFocusableNode(_this.moreFiltersButtonContainer.current, false);
10782 }
10783 });
10784 };
10785
10786 _this.toggleFilters = function () {
10787 if (_this.state.open === true) {
10788 _this.closeFilters();
10789 } else {
10790 _this.openFilters();
10791 }
10792 };
10793
10794 _this.setReadyForFocus = function (newState) {
10795 return function () {
10796 _this.setState({
10797 readyForFocus: newState
10798 });
10799 };
10800 };
10801
10802 return _this;
10803 }
10804
10805 _createClass(Filters, [{
10806 key: "render",
10807 value: function render() {
10808 var _this2 = this;
10809
10810 var _this$props = this.props,
10811 filters = _this$props.filters,
10812 queryValue = _this$props.queryValue,
10813 onQueryBlur = _this$props.onQueryBlur,
10814 onQueryChange = _this$props.onQueryChange,
10815 onQueryFocus = _this$props.onQueryFocus,
10816 focused = _this$props.focused,
10817 onClearAll = _this$props.onClearAll,
10818 appliedFilters = _this$props.appliedFilters,
10819 _this$props$polaris = _this$props.polaris,
10820 intl = _this$props$polaris.intl,
10821 isNavigationCollapsed = _this$props$polaris.mediaQuery.isNavigationCollapsed,
10822 onQueryClear = _this$props.onQueryClear,
10823 queryPlaceholder = _this$props.queryPlaceholder,
10824 children = _this$props.children,
10825 _this$props$disabled = _this$props.disabled,
10826 disabled = _this$props$disabled === void 0 ? false : _this$props$disabled,
10827 helpText = _this$props.helpText;
10828 var resourceName = this.context.resourceName;
10829 var _this$state = this.state,
10830 open = _this$state.open,
10831 readyForFocus = _this$state.readyForFocus;
10832 var backdropMarkup = open ? React__default.createElement(React__default.Fragment, null, React__default.createElement(ScrollLock, null), React__default.createElement("div", {
10833 className: styles$V.Backdrop,
10834 onClick: this.closeFilters
10835 })) : null;
10836 var filtersContentMarkup = filters.map(function (filter, index) {
10837 var filterIsOpen = _this2.state["".concat(filter.key).concat(Suffix.Filter)] === true;
10838 var icon = filterIsOpen ? ChevronUpMinor : ChevronDownMinor;
10839 var className = classNames(styles$V.FilterTriggerContainer, filterIsOpen && styles$V.open, index === 0 && styles$V.first, filters.length !== 1 && index === filters.length - 1 && styles$V.last);
10840
10841 var appliedFilterContent = _this2.getAppliedFilterContent(filter.key);
10842
10843 var appliedFilterBadgeMarkup = appliedFilterContent ? React__default.createElement("div", {
10844 className: styles$V.AppliedFilterBadgeContainer
10845 }, React__default.createElement(Badge, {
10846 size: "small",
10847 status: "new"
10848 }, appliedFilterContent)) : null;
10849 var collapsibleID = "".concat(filter.key, "Collapsible");
10850 return React__default.createElement("div", {
10851 key: filter.key,
10852 className: className
10853 }, React__default.createElement("button", {
10854 onClick: function onClick() {
10855 return _this2.toggleFilter(filter.key);
10856 },
10857 className: styles$V.FilterTrigger,
10858 id: "".concat(filter.key, "ToggleButton"),
10859 type: "button",
10860 "aria-controls": collapsibleID,
10861 "aria-expanded": filterIsOpen
10862 }, React__default.createElement("div", {
10863 className: styles$V.FilterTriggerLabelContainer
10864 }, React__default.createElement("h2", {
10865 className: styles$V.FilterTriggerTitle
10866 }, React__default.createElement(TextStyle, {
10867 variation: _this2.props.disabled || filter.disabled ? VariationValue.Subdued : undefined
10868 }, filter.label)), React__default.createElement("span", {
10869 className: styles$V.FilterTriggerIcon
10870 }, React__default.createElement(Icon, {
10871 source: icon,
10872 color: "inkLightest"
10873 }))), appliedFilterBadgeMarkup), React__default.createElement(Collapsible, {
10874 id: collapsibleID,
10875 open: filterIsOpen
10876 }, React__default.createElement("div", {
10877 className: styles$V.FilterNodeContainer
10878 }, React__default.createElement(Focus, {
10879 disabled: !filterIsOpen || !readyForFocus || !open,
10880 root: _this2.focusNode.current
10881 }, _this2.generateFilterMarkup(filter)))));
10882 });
10883 var rightActionMarkup = React__default.createElement("div", {
10884 ref: this.moreFiltersButtonContainer
10885 }, React__default.createElement(Button, {
10886 onClick: this.toggleFilters,
10887 disabled: disabled
10888 }, intl.translate('Polaris.Filters.moreFilters')));
10889 var filterResourceName = resourceName || {
10890 singular: intl.translate('Polaris.ResourceList.defaultItemSingular'),
10891 plural: intl.translate('Polaris.ResourceList.defaultItemPlural')
10892 };
10893 var filtersControlMarkup = React__default.createElement(ConnectedFilterControl, {
10894 rightPopoverableActions: this.transformFilters(filters),
10895 rightAction: rightActionMarkup,
10896 auxiliary: children,
10897 disabled: disabled
10898 }, React__default.createElement(TextField, {
10899 placeholder: queryPlaceholder || intl.translate('Polaris.Filters.filter', {
10900 resourceName: filterResourceName.plural
10901 }),
10902 onChange: onQueryChange,
10903 onBlur: onQueryBlur,
10904 onFocus: onQueryFocus,
10905 value: queryValue,
10906 focused: focused,
10907 label: queryPlaceholder || intl.translate('Polaris.Filters.filter', {
10908 resourceName: filterResourceName.plural
10909 }),
10910 labelHidden: true,
10911 prefix: React__default.createElement("span", {
10912 className: styles$V.SearchIcon
10913 }, React__default.createElement(Icon, {
10914 source: SearchMinor
10915 })),
10916 clearButton: true,
10917 onClearButtonClick: onQueryClear,
10918 disabled: disabled
10919 }));
10920 var filtersDesktopHeaderMarkup = React__default.createElement("div", {
10921 className: styles$V.FiltersContainerHeader
10922 }, React__default.createElement(DisplayText, {
10923 size: "small"
10924 }, intl.translate('Polaris.Filters.moreFilters')), React__default.createElement(Button, {
10925 icon: CancelSmallMinor,
10926 plain: true,
10927 accessibilityLabel: intl.translate('Polaris.Filters.cancel'),
10928 onClick: this.closeFilters
10929 }));
10930 var filtersMobileHeaderMarkup = React__default.createElement("div", {
10931 className: styles$V.FiltersContainerHeader
10932 }, React__default.createElement(Button, {
10933 icon: CancelSmallMinor,
10934 plain: true,
10935 accessibilityLabel: intl.translate('Polaris.Filters.cancel'),
10936 onClick: this.closeFilters
10937 }), React__default.createElement(DisplayText, {
10938 size: "small"
10939 }, intl.translate('Polaris.Filters.moreFilters')), React__default.createElement(Button, {
10940 onClick: this.closeFilters,
10941 primary: true
10942 }, intl.translate('Polaris.Filters.done')));
10943 var filtersDesktopFooterMarkup = React__default.createElement("div", {
10944 className: styles$V.FiltersContainerFooter
10945 }, React__default.createElement(Button, {
10946 onClick: onClearAll,
10947 disabled: !this.hasAppliedFilters
10948 }, intl.translate('Polaris.Filters.clearAllFilters')), React__default.createElement(Button, {
10949 onClick: this.closeFilters,
10950 primary: true
10951 }, intl.translate('Polaris.Filters.done')));
10952 var filtersMobileFooterMarkup = React__default.createElement("div", {
10953 className: styles$V.FiltersMobileContainerFooter
10954 }, this.hasAppliedFilters ? React__default.createElement(Button, {
10955 onClick: onClearAll,
10956 fullWidth: true
10957 }, intl.translate('Polaris.Filters.clearAllFilters')) : React__default.createElement("div", {
10958 className: styles$V.EmptyFooterState
10959 }, React__default.createElement(TextStyle, {
10960 variation: "subdued"
10961 }, React__default.createElement("p", null, intl.translate('Polaris.Filters.noFiltersApplied')))));
10962 var tagsMarkup = appliedFilters && appliedFilters.length ? React__default.createElement("div", {
10963 className: styles$V.TagsContainer
10964 }, appliedFilters.map(function (filter) {
10965 return React__default.createElement(Tag, {
10966 key: filter.key,
10967 onRemove: function onRemove() {
10968 filter.onRemove(filter.key);
10969 },
10970 disabled: disabled
10971 }, filter.label);
10972 })) : null;
10973 var filtersContainerMarkup = isNavigationCollapsed ? React__default.createElement(Sheet, {
10974 open: open,
10975 onClose: this.closeFilters,
10976 onEntered: this.setReadyForFocus(true),
10977 onExit: this.setReadyForFocus(false)
10978 }, filtersMobileHeaderMarkup, React__default.createElement(Scrollable, {
10979 className: styles$V.FiltersMobileContainerContent,
10980 shadow: true
10981 }, filtersContentMarkup, filtersMobileFooterMarkup)) : React__default.createElement(Sheet, {
10982 open: open,
10983 onClose: this.closeFilters,
10984 onEntered: this.setReadyForFocus(true),
10985 onExit: this.setReadyForFocus(false)
10986 }, React__default.createElement("div", {
10987 className: styles$V.FiltersContainer
10988 }, filtersDesktopHeaderMarkup, React__default.createElement(Scrollable, {
10989 className: styles$V.FiltersDesktopContainerContent,
10990 shadow: true
10991 }, filtersContentMarkup), filtersDesktopFooterMarkup));
10992 var helpTextMarkup = helpText ? React__default.createElement("div", {
10993 id: "FiltersHelpText",
10994 className: styles$V.HelpText
10995 }, React__default.createElement(TextStyle, {
10996 variation: "subdued"
10997 }, helpText)) : null;
10998 return React__default.createElement("div", {
10999 className: styles$V.Filters
11000 }, filtersControlMarkup, filtersContainerMarkup, tagsMarkup, helpTextMarkup, backdropMarkup, React__default.createElement(KeypressListener, {
11001 keyCode: Key.Escape,
11002 handler: this.closeFilters
11003 }));
11004 }
11005 }, {
11006 key: "getAppliedFilterContent",
11007 value: function getAppliedFilterContent(key) {
11008 var appliedFilters = this.props.appliedFilters;
11009
11010 if (!appliedFilters) {
11011 return undefined;
11012 }
11013
11014 var filter = appliedFilters.find(function (filter) {
11015 return filter.key === key;
11016 });
11017 return filter == null ? undefined : filter.label;
11018 }
11019 }, {
11020 key: "getAppliedFilterRemoveHandler",
11021 value: function getAppliedFilterRemoveHandler(key) {
11022 var appliedFilters = this.props.appliedFilters;
11023
11024 if (!appliedFilters) {
11025 return undefined;
11026 }
11027
11028 var filter = appliedFilters.find(function (filter) {
11029 return filter.key === key;
11030 });
11031 return filter == null ? undefined : filter.onRemove;
11032 }
11033 }, {
11034 key: "openFilters",
11035 value: function openFilters() {
11036 this.setState({
11037 open: true
11038 });
11039 }
11040 }, {
11041 key: "openFilter",
11042 value: function openFilter(key) {
11043 this.setState({
11044 ["".concat(key).concat(Suffix.Filter)]: true
11045 });
11046 }
11047 }, {
11048 key: "closeFilter",
11049 value: function closeFilter(key) {
11050 this.setState({
11051 ["".concat(key).concat(Suffix.Filter)]: false
11052 });
11053 }
11054 }, {
11055 key: "toggleFilter",
11056 value: function toggleFilter(key) {
11057 if (this.state["".concat(key).concat(Suffix.Filter)] === true) {
11058 this.closeFilter(key);
11059 } else {
11060 this.openFilter(key);
11061 }
11062 }
11063 }, {
11064 key: "openFilterShortcut",
11065 value: function openFilterShortcut(key) {
11066 this.setState({
11067 ["".concat(key).concat(Suffix.Shortcut)]: true
11068 });
11069 }
11070 }, {
11071 key: "closeFilterShortcut",
11072 value: function closeFilterShortcut(key) {
11073 this.setState({
11074 ["".concat(key).concat(Suffix.Shortcut)]: false
11075 });
11076 }
11077 }, {
11078 key: "toggleFilterShortcut",
11079 value: function toggleFilterShortcut(key) {
11080 if (this.state["".concat(key).concat(Suffix.Shortcut)] === true) {
11081 this.closeFilterShortcut(key);
11082 } else {
11083 this.openFilterShortcut(key);
11084 }
11085 }
11086 }, {
11087 key: "transformFilters",
11088 value: function transformFilters(filters) {
11089 var _this3 = this;
11090
11091 var transformedActions = [];
11092 getShortcutFilters(filters).forEach(function (filter) {
11093 var key = filter.key,
11094 label = filter.label,
11095 disabled = filter.disabled;
11096 transformedActions.push({
11097 popoverContent: _this3.generateFilterMarkup(filter),
11098 popoverOpen: _this3.state["".concat(key).concat(Suffix.Shortcut)],
11099 key,
11100 content: label,
11101 disabled,
11102 onAction: function onAction() {
11103 return _this3.toggleFilterShortcut(key);
11104 }
11105 });
11106 });
11107 return transformedActions;
11108 }
11109 }, {
11110 key: "generateFilterMarkup",
11111 value: function generateFilterMarkup(filter) {
11112 var intl = this.props.polaris.intl;
11113 var removeCallback = this.getAppliedFilterRemoveHandler(filter.key);
11114 var removeHandler = removeCallback == null ? undefined : function () {
11115 removeCallback(filter.key);
11116 };
11117 return React__default.createElement("div", {
11118 ref: this.focusNode
11119 }, React__default.createElement(Stack, {
11120 vertical: true,
11121 spacing: "tight"
11122 }, filter.filter, React__default.createElement(Button, {
11123 plain: true,
11124 disabled: removeHandler == null,
11125 onClick: removeHandler,
11126 accessibilityLabel: intl.translate('Polaris.Filters.clearLabel', {
11127 filterName: filter.label
11128 })
11129 }, intl.translate('Polaris.Filters.clear'))));
11130 }
11131 }, {
11132 key: "hasAppliedFilters",
11133 get: function get() {
11134 var _this$props2 = this.props,
11135 appliedFilters = _this$props2.appliedFilters,
11136 queryValue = _this$props2.queryValue;
11137 var filtersApplied = Boolean(appliedFilters && appliedFilters.length > 0);
11138 var queryApplied = Boolean(queryValue && queryValue !== '');
11139 return filtersApplied || queryApplied;
11140 }
11141 }]);
11142
11143 return Filters;
11144}(React__default.Component);
11145
11146Filters.contextType = ResourceListContext;
11147
11148function getShortcutFilters(filters) {
11149 return filters.filter(function (filter) {
11150 return filter.shortcut === true;
11151 });
11152} // Use named export once withAppProvider is refactored away
11153// eslint-disable-next-line import/no-default-export
11154
11155
11156var Filters$1 = withAppProvider()(Filters);
11157
11158var styles$W = {
11159 "FooterHelp": "Polaris-FooterHelp",
11160 "Content": "Polaris-FooterHelp__Content",
11161 "Icon": "Polaris-FooterHelp__Icon",
11162 "Text": "Polaris-FooterHelp__Text"
11163};
11164
11165function FooterHelp(_ref) {
11166 var children = _ref.children;
11167 return React__default.createElement("div", {
11168 className: styles$W.FooterHelp
11169 }, React__default.createElement("div", {
11170 className: styles$W.Content
11171 }, React__default.createElement("div", {
11172 className: styles$W.Icon
11173 }, React__default.createElement(Icon, {
11174 source: QuestionMarkMajorTwotone,
11175 color: "teal",
11176 backdrop: true
11177 })), React__default.createElement("div", {
11178 className: styles$W.Text
11179 }, children)));
11180}
11181
11182function Form(_ref) {
11183 var acceptCharset = _ref.acceptCharset,
11184 action = _ref.action,
11185 autoComplete = _ref.autoComplete,
11186 children = _ref.children,
11187 encType = _ref.encType,
11188 _ref$implicitSubmit = _ref.implicitSubmit,
11189 implicitSubmit = _ref$implicitSubmit === void 0 ? true : _ref$implicitSubmit,
11190 _ref$method = _ref.method,
11191 method = _ref$method === void 0 ? 'post' : _ref$method,
11192 name = _ref.name,
11193 noValidate = _ref.noValidate,
11194 _ref$preventDefault = _ref.preventDefault,
11195 preventDefault = _ref$preventDefault === void 0 ? true : _ref$preventDefault,
11196 target = _ref.target,
11197 onSubmit = _ref.onSubmit;
11198 var i18n = useI18n();
11199 var handleSubmit = useCallback(function (event) {
11200 if (!preventDefault) {
11201 return;
11202 }
11203
11204 event.preventDefault();
11205 onSubmit(event);
11206 }, [onSubmit, preventDefault]);
11207 var autoCompleteInputs = normalizeAutoComplete$1(autoComplete);
11208 var submitMarkup = implicitSubmit ? React__default.createElement(VisuallyHidden, null, React__default.createElement("button", {
11209 type: "submit",
11210 "aria-hidden": "true",
11211 tabIndex: -1
11212 }, i18n.translate('Polaris.Common.submit'))) : null;
11213 return React__default.createElement("form", {
11214 acceptCharset: acceptCharset,
11215 action: action,
11216 autoComplete: autoCompleteInputs,
11217 encType: encType,
11218 method: method,
11219 name: name,
11220 noValidate: noValidate,
11221 target: target,
11222 onSubmit: handleSubmit
11223 }, children, submitMarkup);
11224}
11225
11226function normalizeAutoComplete$1(autoComplete) {
11227 if (autoComplete == null) {
11228 return autoComplete;
11229 }
11230
11231 return autoComplete ? 'on' : 'off';
11232}
11233
11234var styles$X = {
11235 "FormLayout": "Polaris-FormLayout",
11236 "Title": "Polaris-FormLayout__Title",
11237 "Items": "Polaris-FormLayout__Items",
11238 "HelpText": "Polaris-FormLayout__HelpText",
11239 "Item": "Polaris-FormLayout__Item",
11240 "grouped": "Polaris-FormLayout--grouped",
11241 "condensed": "Polaris-FormLayout--condensed"
11242};
11243
11244function Item$5(props) {
11245 return React__default.createElement("div", {
11246 className: styles$X.Item
11247 }, props.children);
11248}
11249
11250function Group(_ref) {
11251 var children = _ref.children,
11252 condensed = _ref.condensed,
11253 title = _ref.title,
11254 helpText = _ref.helpText;
11255 var className = classNames(condensed ? styles$X.condensed : styles$X.grouped);
11256 var id = useUniqueId('FormLayoutGroup');
11257 var helpTextElement = null;
11258 var helpTextID;
11259 var titleElement = null;
11260 var titleID;
11261
11262 if (helpText) {
11263 helpTextID = "".concat(id, "HelpText");
11264 helpTextElement = React__default.createElement("div", {
11265 id: helpTextID,
11266 className: styles$X.HelpText
11267 }, helpText);
11268 }
11269
11270 if (title) {
11271 titleID = "".concat(id, "Title");
11272 titleElement = React__default.createElement("div", {
11273 id: titleID,
11274 className: styles$X.Title
11275 }, title);
11276 }
11277
11278 var itemsMarkup = React__default.Children.map(children, function (child) {
11279 return wrapWithComponent(child, Item$5, {});
11280 });
11281 return React__default.createElement("div", {
11282 role: "group",
11283 className: className,
11284 "aria-labelledby": titleID,
11285 "aria-describedby": helpTextID
11286 }, titleElement, React__default.createElement("div", {
11287 className: styles$X.Items
11288 }, itemsMarkup), helpTextElement);
11289}
11290
11291var FormLayout =
11292/*#__PURE__*/
11293function (_React$PureComponent) {
11294 _inherits(FormLayout, _React$PureComponent);
11295
11296 function FormLayout() {
11297 _classCallCheck(this, FormLayout);
11298
11299 return _possibleConstructorReturn(this, _getPrototypeOf(FormLayout).apply(this, arguments));
11300 }
11301
11302 _createClass(FormLayout, [{
11303 key: "render",
11304 value: function render() {
11305 var children = this.props.children;
11306 return React__default.createElement("div", {
11307 className: styles$X.FormLayout
11308 }, React__default.Children.map(children, wrapChildren));
11309 }
11310 }]);
11311
11312 return FormLayout;
11313}(React__default.PureComponent);
11314FormLayout.Group = Group;
11315
11316function wrapChildren(child, index) {
11317 if (isElementOfType(child, Group)) {
11318 return child;
11319 }
11320
11321 var props = {
11322 key: index
11323 };
11324 return wrapWithComponent(child, Item$5, props);
11325}
11326
11327function setRootProperty(name, value, node) {
11328 if (document == null) {
11329 return;
11330 }
11331
11332 var styleNode = node && node instanceof HTMLElement ? node : document.documentElement;
11333 styleNode && styleNode.style.setProperty(name, value);
11334}
11335
11336var styles$Y = {
11337 "Toast": "Polaris-Frame-Toast",
11338 "Action": "Polaris-Frame-Toast__Action",
11339 "error": "Polaris-Frame-Toast--error",
11340 "CloseButton": "Polaris-Frame-Toast__CloseButton"
11341};
11342
11343var DEFAULT_TOAST_DURATION = 5000;
11344var DEFAULT_TOAST_DURATION_WITH_ACTION = 10000;
11345function Toast(_ref) {
11346 var content = _ref.content,
11347 onDismiss = _ref.onDismiss,
11348 duration = _ref.duration,
11349 error = _ref.error,
11350 action = _ref.action;
11351 useEffect(function () {
11352 var timeoutDuration = duration || DEFAULT_TOAST_DURATION;
11353
11354 if (action && !duration) {
11355 timeoutDuration = DEFAULT_TOAST_DURATION_WITH_ACTION;
11356 } else if (action && duration && duration < DEFAULT_TOAST_DURATION_WITH_ACTION) {
11357 // eslint-disable-next-line no-console
11358 console.log('Toast with action should persist for at least 10,000 milliseconds to give the merchant enough time to act on it.');
11359 }
11360
11361 var timer = setTimeout(onDismiss, timeoutDuration);
11362 return function () {
11363 clearTimeout(timer);
11364 };
11365 }, [action, duration, onDismiss]);
11366 var dismissMarkup = React__default.createElement("button", {
11367 type: "button",
11368 className: styles$Y.CloseButton,
11369 onClick: onDismiss
11370 }, React__default.createElement(Icon, {
11371 source: MobileCancelMajorMonotone
11372 }));
11373 var actionMarkup = action ? React__default.createElement("div", {
11374 className: styles$Y.Action
11375 }, React__default.createElement(Button, {
11376 plain: true,
11377 monochrome: true,
11378 onClick: action.onAction
11379 }, action.content)) : null;
11380 var className = classNames(styles$Y.Toast, error && styles$Y.error);
11381 return React__default.createElement("div", {
11382 className: className
11383 }, React__default.createElement(KeypressListener, {
11384 keyCode: Key.Escape,
11385 handler: onDismiss
11386 }), content, actionMarkup, dismissMarkup);
11387}
11388
11389/**
11390 * A replacement for React.useCallback that'll allow for custom and deep compares.
11391 * @see {@link https://reactjs.org/docs/hooks-reference.html#usecallback}
11392 * @param callback Accepts a callback that's forwarded to React.useCallback
11393 * @param dependencies A dependency array similar to React.useCallback however it utilizes a deep compare
11394 * @param customCompare Opportunity to provide a custom compare function
11395 * @returns A memoized callback
11396 * @example
11397 * const Child = memo(function Child({onClick}) {
11398 * console.log('Child has rendered.');
11399 * return <button onClick={onClick}>Click me</button>;
11400 * });
11401 *
11402 * function ComponentExample() {
11403 * const [timesClicked, setTimesClicked] = useState(0);
11404 *
11405 * const handleClick = useDeepCallback(() => {
11406 * setTimesClicked((timesClicked) => timesClicked + 1);
11407 * // New reference every render
11408 * }, [{}]);
11409 *
11410 * return (
11411 * <Fragment>
11412 * <div>Times clicked: {timesClicked}</div>
11413 * <Child onClick={handleClick} />
11414 * </Fragment>
11415 * );
11416 * }
11417 */
11418
11419function useDeepCallback(callback, dependencies, customCompare) {
11420 return useCallback(callback, useDeepCompareRef(dependencies, customCompare));
11421}
11422
11423var styles$Z = {
11424 "ToastManager": "Polaris-Frame-ToastManager",
11425 "ToastWrapper": "Polaris-Frame-ToastManager__ToastWrapper",
11426 "ToastWrapper-enter": "Polaris-Frame-ToastManager__ToastWrapper--enter",
11427 "ToastWrapper-exit": "Polaris-Frame-ToastManager__ToastWrapper--exit",
11428 "ToastWrapper-enter-done": "Polaris-Frame-ToastManager--toastWrapperEnterDone"
11429};
11430
11431var ToastManager = memo(function ToastManager(_ref) {
11432 var toastMessages = _ref.toastMessages;
11433 var toastNodes = [];
11434 var updateToasts = useDeepCallback(function () {
11435 var targetInPos = 0;
11436 toastMessages.forEach(function (_, index) {
11437 var currentToast = toastNodes[index];
11438 if (!currentToast.current) return;
11439 targetInPos += currentToast.current.clientHeight;
11440 currentToast.current.style.setProperty('--toast-translate-y-in', "-".concat(targetInPos, "px"));
11441 currentToast.current.style.setProperty('--toast-translate-y-out', "".concat(-targetInPos + 150, "px"));
11442 });
11443 }, [toastMessages, toastNodes]);
11444 useDeepEffect(function () {
11445 updateToasts();
11446 }, [toastMessages]);
11447 var toastsMarkup = toastMessages.map(function (toast, index) {
11448 var toastNode = createRef();
11449 toastNodes[index] = toastNode;
11450 return React__default.createElement(CSSTransition, {
11451 findDOMNode: findDOMNode(index),
11452 key: toast.id,
11453 timeout: {
11454 enter: 0,
11455 exit: 400
11456 },
11457 classNames: toastClasses
11458 }, React__default.createElement("div", {
11459 ref: toastNode
11460 }, React__default.createElement(Toast, toast)));
11461 });
11462 return React__default.createElement(Portal, {
11463 idPrefix: "toast-manager"
11464 }, React__default.createElement(EventListener, {
11465 event: "resize",
11466 handler: updateToasts
11467 }), React__default.createElement("div", {
11468 className: styles$Z.ToastManager,
11469 "aria-live": "polite"
11470 }, React__default.createElement(TransitionGroup, {
11471 component: null
11472 }, toastsMarkup)));
11473
11474 function findDOMNode(index) {
11475 return function () {
11476 return toastNodes[index].current;
11477 };
11478 }
11479});
11480var toastClasses = {
11481 enter: classNames(styles$Z.ToastWrapper, styles$Z['ToastWrapper-enter']),
11482 enterDone: classNames(styles$Z.ToastWrapper, styles$Z['ToastWrapper-enter-done']),
11483 exit: classNames(styles$Z.ToastWrapper, styles$Z['ToastWrapper-exit'])
11484};
11485
11486var styles$_ = {
11487 "Loading": "Polaris-Frame-Loading",
11488 "Level": "Polaris-Frame-Loading__Level"
11489};
11490
11491var INITIAL_STEP = 10;
11492var STUCK_THRESHOLD = 99;
11493var Loading =
11494/*#__PURE__*/
11495function (_React$Component) {
11496 _inherits(Loading, _React$Component);
11497
11498 function Loading() {
11499 var _this;
11500
11501 _classCallCheck(this, Loading);
11502
11503 _this = _possibleConstructorReturn(this, _getPrototypeOf(Loading).apply(this, arguments));
11504 _this.state = {
11505 progress: 0,
11506 step: INITIAL_STEP,
11507 animation: null
11508 };
11509 _this.ariaValuenow = debounce(function () {
11510 var progress = _this.state.progress;
11511 return Math.floor(progress / 10) * 10;
11512 }, 15);
11513 return _this;
11514 }
11515
11516 _createClass(Loading, [{
11517 key: "componentDidMount",
11518 value: function componentDidMount() {
11519 this.increment();
11520 }
11521 }, {
11522 key: "componentWillUnmount",
11523 value: function componentWillUnmount() {
11524 var animation = this.state.animation;
11525
11526 if (animation != null) {
11527 cancelAnimationFrame(animation);
11528 }
11529 }
11530 }, {
11531 key: "render",
11532 value: function render() {
11533 var progress = this.state.progress;
11534 var customStyles = {
11535 transform: "scaleX(".concat(Math.floor(progress) / 100, ")")
11536 };
11537 var ariaValuenow = this.ariaValuenow();
11538 return React__default.createElement("div", {
11539 className: styles$_.Loading
11540 }, React__default.createElement("div", {
11541 className: styles$_.Level,
11542 style: customStyles,
11543 "aria-valuenow": ariaValuenow,
11544 "aria-valuemin": 0,
11545 "aria-valuemax": 100,
11546 role: "progressbar"
11547 }));
11548 }
11549 }, {
11550 key: "increment",
11551 value: function increment() {
11552 var _this2 = this;
11553
11554 var _this$state = this.state,
11555 progress = _this$state.progress,
11556 step = _this$state.step;
11557
11558 if (progress >= STUCK_THRESHOLD) {
11559 return;
11560 }
11561
11562 var animation = requestAnimationFrame(function () {
11563 return _this2.increment();
11564 });
11565 this.setState({
11566 progress: Math.min(progress + step, 100),
11567 step: Math.pow(INITIAL_STEP, -(progress / 25)),
11568 animation
11569 });
11570 }
11571 }]);
11572
11573 return Loading;
11574}(React__default.Component);
11575
11576function isObject(value) {
11577 var type = typeof value;
11578 return value != null && (type === TypeOf.Object || type === TypeOf.Function);
11579}
11580
11581function pluckDeep(obj, key) {
11582 if (!obj) {
11583 return null;
11584 }
11585
11586 var keys = Object.keys(obj);
11587
11588 for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
11589 var currKey = _keys[_i];
11590
11591 if (currKey === key) {
11592 return obj[key];
11593 }
11594
11595 if (isObject(obj[currKey])) {
11596 var plucked = pluckDeep(obj[currKey], key);
11597
11598 if (plucked) {
11599 return plucked;
11600 }
11601 }
11602 }
11603
11604 return null;
11605}
11606
11607function getWidth() {
11608 var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
11609 var defaultWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
11610 var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'width';
11611 var width = typeof value === 'number' ? value : pluckDeep(value, key);
11612 return width ? "".concat(width, "px") : "".concat(defaultWidth, "px");
11613}
11614
11615function generateRedirect(appBridge, url) {
11616 var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'APP';
11617 var external = arguments.length > 3 ? arguments[3] : undefined;
11618
11619 if (url == null) {
11620 return undefined;
11621 }
11622
11623 var redirect = Redirect.create(appBridge);
11624 var payload = external === true ? {
11625 url,
11626 newContext: true
11627 } : url;
11628 return function () {
11629 redirect.dispatch(redirectAction(target, external), payload);
11630 };
11631}
11632
11633function redirectAction(target, external) {
11634 if (external === true) {
11635 return Redirect.Action.REMOTE;
11636 }
11637
11638 return Redirect.Action[target];
11639}
11640
11641function transformActions(appBridge, _ref) {
11642 var primaryAction = _ref.primaryAction,
11643 secondaryActions = _ref.secondaryActions,
11644 actionGroups = _ref.actionGroups;
11645 var primary = transformPrimaryAction(appBridge, primaryAction);
11646 var secondary = [].concat(_toConsumableArray(transformSecondaryActions(appBridge, secondaryActions)), _toConsumableArray(transformActionGroups(appBridge, actionGroups)));
11647 return {
11648 primary,
11649 secondary
11650 };
11651}
11652
11653function transformAction(appBridge, action) {
11654 var style = action.destructive === true ? Button$1.Style.Danger : undefined;
11655 var button = Button$1.create(appBridge, {
11656 label: action.content || '',
11657 disabled: action.disabled,
11658 style
11659 });
11660
11661 if (action.onAction) {
11662 button.subscribe(Button$1.Action.CLICK, action.onAction);
11663 }
11664
11665 var redirect = generateRedirect(appBridge, action.url, action.target, action.external);
11666
11667 if (redirect != null) {
11668 button.subscribe(Button$1.Action.CLICK, redirect);
11669 }
11670
11671 return button;
11672}
11673
11674function transformPrimaryAction(appBridge, primaryAction) {
11675 if (primaryAction == null) {
11676 return undefined;
11677 }
11678
11679 var primary = transformAction(appBridge, primaryAction);
11680 return primary;
11681}
11682
11683function transformSecondaryActions(appBridge) {
11684 var secondaryActions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
11685
11686 var secondary = _toConsumableArray(secondaryActions.map(function (secondaryAction) {
11687 return transformAction(appBridge, secondaryAction);
11688 }));
11689
11690 return secondary;
11691}
11692
11693function transformActionGroups(appBridge) {
11694 var actionGroups = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
11695
11696 var buttonGroups = _toConsumableArray(actionGroups.map(function (group) {
11697 var buttons = group.actions.map(function (groupAction) {
11698 return transformAction(appBridge, groupAction);
11699 });
11700 return ButtonGroup$1.create(appBridge, {
11701 label: group.title,
11702 buttons
11703 });
11704 }));
11705
11706 return buttonGroups;
11707}
11708
11709function pickValueAndLength(obj, key) {
11710 var keyPaths = key.split('.');
11711 var value = obj;
11712 var _iteratorNormalCompletion = true;
11713 var _didIteratorError = false;
11714 var _iteratorError = undefined;
11715
11716 try {
11717 for (var _iterator = keyPaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
11718 var _key = _step.value;
11719
11720 if (!Object.prototype.hasOwnProperty.call(value, _key)) {
11721 return null;
11722 }
11723
11724 value = value[_key];
11725 }
11726 } catch (err) {
11727 _didIteratorError = true;
11728 _iteratorError = err;
11729 } finally {
11730 try {
11731 if (!_iteratorNormalCompletion && _iterator.return != null) {
11732 _iterator.return();
11733 }
11734 } finally {
11735 if (_didIteratorError) {
11736 throw _iteratorError;
11737 }
11738 }
11739 }
11740
11741 return {
11742 keyPaths,
11743 value
11744 };
11745}
11746
11747function pick(obj) {
11748 var _ref;
11749
11750 for (var _len = arguments.length, keyPaths = new Array(_len > 1 ? _len - 1 : 0), _key2 = 1; _key2 < _len; _key2++) {
11751 keyPaths[_key2 - 1] = arguments[_key2];
11752 }
11753
11754 var flattenedKeypaths = (_ref = []).concat.apply(_ref, keyPaths);
11755
11756 if (obj == null || flattenedKeypaths.length === 0) return {};
11757 return flattenedKeypaths.reduce(function (acc, key) {
11758 if (typeof key !== TypeOf.String || Object.prototype.hasOwnProperty.call(obj, key)) {
11759 return Object.assign({}, acc, {
11760 [key]: obj[key]
11761 });
11762 }
11763
11764 var pickedValues = pickValueAndLength(obj, key);
11765
11766 if (pickedValues === null) {
11767 return acc;
11768 }
11769
11770 var keyPaths = pickedValues.keyPaths,
11771 value = pickedValues.value;
11772 var len = keyPaths.length;
11773 var innerObject = {
11774 [keyPaths[--len]]: value
11775 };
11776
11777 while (len--) {
11778 innerObject = {
11779 [keyPaths[len]]: innerObject
11780 };
11781 }
11782
11783 return Object.assign({}, acc, innerObject);
11784 }, {});
11785}
11786
11787var styles$$ = {
11788 "Container": "Polaris-Modal-Dialog__Container",
11789 "Modal": "Polaris-Modal-Dialog__Modal",
11790 "limitHeight": "Polaris-Modal-Dialog--limitHeight",
11791 "sizeLarge": "Polaris-Modal-Dialog--sizeLarge",
11792 "animateFadeUp": "Polaris-Modal-Dialog--animateFadeUp",
11793 "entering": "Polaris-Modal-Dialog--entering",
11794 "exiting": "Polaris-Modal-Dialog--exiting",
11795 "exited": "Polaris-Modal-Dialog--exited",
11796 "entered": "Polaris-Modal-Dialog--entered"
11797};
11798
11799function Dialog(_a) {
11800 var instant = _a.instant,
11801 labelledBy = _a.labelledBy,
11802 children = _a.children,
11803 onClose = _a.onClose,
11804 onExited = _a.onExited,
11805 onEntered = _a.onEntered,
11806 large = _a.large,
11807 limitHeight = _a.limitHeight,
11808 props = __rest(_a, ["instant", "labelledBy", "children", "onClose", "onExited", "onEntered", "large", "limitHeight"]);
11809
11810 var containerNode = useRef(null);
11811 var findDOMNode = useCallback(function () {
11812 return containerNode.current;
11813 }, []);
11814 var classes = classNames(styles$$.Modal, large && styles$$.sizeLarge, limitHeight && styles$$.limitHeight);
11815 var TransitionChild = instant ? Transition : FadeUp;
11816 return React__default.createElement(TransitionChild, Object.assign({}, props, {
11817 findDOMNode: findDOMNode,
11818 mountOnEnter: true,
11819 unmountOnExit: true,
11820 timeout: durationBase,
11821 onEntered: onEntered,
11822 onExited: onExited
11823 }), React__default.createElement("div", {
11824 className: styles$$.Container,
11825 "data-polaris-layer": true,
11826 "data-polaris-overlay": true,
11827 ref: containerNode
11828 }, React__default.createElement(TrapFocus, null, React__default.createElement("div", {
11829 className: classes,
11830 role: "dialog",
11831 "aria-labelledby": labelledBy,
11832 tabIndex: -1
11833 }, React__default.createElement(KeypressListener, {
11834 keyCode: Key.Escape,
11835 handler: onClose
11836 }), children))));
11837}
11838var fadeUpClasses = {
11839 appear: classNames(styles$$.animateFadeUp, styles$$.entering),
11840 appearActive: classNames(styles$$.animateFadeUp, styles$$.entered),
11841 enter: classNames(styles$$.animateFadeUp, styles$$.entering),
11842 enterActive: classNames(styles$$.animateFadeUp, styles$$.entered),
11843 exit: classNames(styles$$.animateFadeUp, styles$$.exiting),
11844 exitActive: classNames(styles$$.animateFadeUp, styles$$.exited)
11845};
11846
11847function FadeUp(_a) {
11848 var children = _a.children,
11849 props = __rest(_a, ["children"]);
11850
11851 return React__default.createElement(CSSTransition, Object.assign({}, props, {
11852 classNames: fadeUpClasses
11853 }), children);
11854}
11855
11856var styles$10 = {
11857 "Footer": "Polaris-Modal-Footer",
11858 "FooterContent": "Polaris-Modal-Footer__FooterContent"
11859};
11860
11861function Footer(_ref) {
11862 var primaryAction = _ref.primaryAction,
11863 secondaryActions = _ref.secondaryActions,
11864 children = _ref.children;
11865 var primaryActionButton = primaryAction && buttonsFrom(primaryAction, {
11866 primary: true
11867 }) || null;
11868 var secondaryActionButtons = secondaryActions && buttonsFrom(secondaryActions) || null;
11869 var actions = primaryActionButton || secondaryActionButtons ? React__default.createElement(ButtonGroup, null, secondaryActionButtons, primaryActionButton) : null;
11870 return React__default.createElement("div", {
11871 className: styles$10.Footer
11872 }, React__default.createElement("div", {
11873 className: styles$10.FooterContent
11874 }, React__default.createElement(Stack, {
11875 alignment: "center"
11876 }, React__default.createElement(Stack.Item, {
11877 fill: true
11878 }, children), actions)));
11879}
11880
11881var styles$11 = {
11882 "CloseButton": "Polaris-Modal-CloseButton",
11883 "withoutTitle": "Polaris-Modal-CloseButton--withoutTitle"
11884};
11885
11886function CloseButton(_ref) {
11887 var _ref$title = _ref.title,
11888 title = _ref$title === void 0 ? true : _ref$title,
11889 onClick = _ref.onClick;
11890 var i18n = useI18n();
11891 var className = classNames(styles$11.CloseButton, !title && styles$11.withoutTitle);
11892 return React__default.createElement("button", {
11893 onClick: onClick,
11894 className: className,
11895 "aria-label": i18n.translate('Polaris.Common.close')
11896 }, React__default.createElement(Icon, {
11897 source: MobileCancelMajorMonotone,
11898 color: "inkLighter"
11899 }));
11900}
11901
11902var styles$12 = {
11903 "Header": "Polaris-Modal-Header",
11904 "Title": "Polaris-Modal-Header__Title"
11905};
11906
11907function Header$1(_ref) {
11908 var id = _ref.id,
11909 children = _ref.children,
11910 onClose = _ref.onClose;
11911 return React__default.createElement("div", {
11912 className: styles$12.Header
11913 }, React__default.createElement("div", {
11914 id: id,
11915 className: styles$12.Title
11916 }, React__default.createElement(DisplayText, {
11917 element: "h2",
11918 size: "small"
11919 }, children)), React__default.createElement(CloseButton, {
11920 onClick: onClose
11921 }));
11922}
11923
11924var styles$13 = {
11925 "Section": "Polaris-Modal-Section",
11926 "subdued": "Polaris-Modal-Section--subdued",
11927 "flush": "Polaris-Modal-Section--flush"
11928};
11929
11930function Section$3(_ref) {
11931 var children = _ref.children,
11932 _ref$flush = _ref.flush,
11933 flush = _ref$flush === void 0 ? false : _ref$flush,
11934 _ref$subdued = _ref.subdued,
11935 subdued = _ref$subdued === void 0 ? false : _ref$subdued;
11936 var className = classNames(styles$13.Section, flush && styles$13.flush, subdued && styles$13.subdued);
11937 return React__default.createElement("section", {
11938 className: className
11939 }, children);
11940}
11941
11942var styles$14 = {
11943 "BodyWrapper": "Polaris-Modal__BodyWrapper",
11944 "Body": "Polaris-Modal__Body",
11945 "IFrame": "Polaris-Modal__IFrame",
11946 "Spinner": "Polaris-Modal__Spinner"
11947};
11948
11949var IFRAME_LOADING_HEIGHT = 200;
11950var DEFAULT_IFRAME_CONTENT_HEIGHT = 400;
11951var getUniqueID$1 = createUniqueIDFactory('modal-header');
11952var APP_BRIDGE_PROPS = ['title', 'size', 'message', 'src', 'primaryAction', 'secondaryActions'];
11953
11954var Modal =
11955/*#__PURE__*/
11956function (_React$Component) {
11957 _inherits(Modal, _React$Component);
11958
11959 function Modal() {
11960 var _this;
11961
11962 _classCallCheck(this, Modal);
11963
11964 _this = _possibleConstructorReturn(this, _getPrototypeOf(Modal).apply(this, arguments));
11965 _this.state = {
11966 iframeHeight: IFRAME_LOADING_HEIGHT
11967 };
11968 _this.headerId = getUniqueID$1();
11969
11970 _this.handleEntered = function () {
11971 var onTransitionEnd = _this.props.onTransitionEnd;
11972
11973 if (onTransitionEnd) {
11974 onTransitionEnd();
11975 }
11976 };
11977
11978 _this.handleExited = function () {
11979 _this.setState({
11980 iframeHeight: IFRAME_LOADING_HEIGHT
11981 });
11982
11983 if (_this.focusReturnPointNode) {
11984 write(function () {
11985 return focusFirstFocusableNode(_this.focusReturnPointNode, false);
11986 });
11987 }
11988 };
11989
11990 _this.handleIFrameLoad = function (evt) {
11991 var iframe = evt.target;
11992
11993 if (iframe && iframe.contentWindow) {
11994 try {
11995 _this.setState({
11996 iframeHeight: iframe.contentWindow.document.body.scrollHeight
11997 });
11998 } catch (_a) {
11999 _this.setState({
12000 iframeHeight: DEFAULT_IFRAME_CONTENT_HEIGHT
12001 });
12002 }
12003 }
12004
12005 var onIFrameLoad = _this.props.onIFrameLoad;
12006
12007 if (onIFrameLoad != null) {
12008 onIFrameLoad(evt);
12009 }
12010 };
12011
12012 return _this;
12013 }
12014
12015 _createClass(Modal, [{
12016 key: "componentDidMount",
12017 value: function componentDidMount() {
12018 if (this.props.polaris.appBridge == null) {
12019 return;
12020 } // eslint-disable-next-line no-console
12021
12022
12023 console.warn('Deprecation: Using `Modal` in an embedded app is deprecated and will be removed in v5.0. Use `Modal` from `@shopify/app-bridge-react` instead: https://help.shopify.com/en/api/embedded-apps/app-bridge/react-components/modal');
12024 var transformProps = this.transformProps();
12025
12026 if (transformProps) {
12027 this.appBridgeModal = Modal$2.create(this.props.polaris.appBridge, transformProps);
12028 }
12029
12030 if (this.appBridgeModal) {
12031 this.appBridgeModal.subscribe(Modal$2.Action.CLOSE, this.props.onClose);
12032 }
12033
12034 var open = this.props.open;
12035
12036 if (open) {
12037 this.focusReturnPointNode = document.activeElement;
12038 this.appBridgeModal && this.appBridgeModal.dispatch(Modal$2.Action.OPEN);
12039 }
12040 }
12041 }, {
12042 key: "componentDidUpdate",
12043 value: function componentDidUpdate(prevProps) {
12044 if (this.props.polaris.appBridge == null || this.appBridgeModal == null) {
12045 return;
12046 }
12047
12048 var open = this.props.open;
12049 var wasOpen = prevProps.open;
12050 var transformedProps = this.transformProps();
12051 var prevAppBridgeProps = pick(prevProps, APP_BRIDGE_PROPS);
12052 var currentAppBridgeProps = pick(this.props, APP_BRIDGE_PROPS);
12053
12054 if (!isEqual(prevAppBridgeProps, currentAppBridgeProps) && transformedProps) {
12055 if (isIframeModal(transformedProps)) {
12056 this.appBridgeModal.set(transformedProps);
12057 } else {
12058 this.appBridgeModal.set(transformedProps);
12059 }
12060 }
12061
12062 if (wasOpen !== open) {
12063 if (open) {
12064 this.appBridgeModal.dispatch(Modal$2.Action.OPEN);
12065 } else {
12066 this.appBridgeModal.dispatch(Modal$2.Action.CLOSE);
12067 }
12068 }
12069
12070 if (!wasOpen && open) {
12071 this.focusReturnPointNode = document.activeElement;
12072 } else if (wasOpen && !open && this.focusReturnPointNode != null && document.contains(this.focusReturnPointNode)) {
12073 this.focusReturnPointNode.focus();
12074 this.focusReturnPointNode = null;
12075 }
12076 }
12077 }, {
12078 key: "componentWillUnmount",
12079 value: function componentWillUnmount() {
12080 if (this.props.polaris.appBridge == null || this.appBridgeModal == null) {
12081 return;
12082 }
12083
12084 this.appBridgeModal.unsubscribe();
12085 }
12086 }, {
12087 key: "render",
12088 value: function render() {
12089 if (this.props.polaris.appBridge != null) {
12090 return null;
12091 }
12092
12093 var _this$props = this.props,
12094 children = _this$props.children,
12095 title = _this$props.title,
12096 src = _this$props.src,
12097 iFrameName = _this$props.iFrameName,
12098 open = _this$props.open,
12099 instant = _this$props.instant,
12100 sectioned = _this$props.sectioned,
12101 loading = _this$props.loading,
12102 large = _this$props.large,
12103 limitHeight = _this$props.limitHeight,
12104 onClose = _this$props.onClose,
12105 footer = _this$props.footer,
12106 primaryAction = _this$props.primaryAction,
12107 secondaryActions = _this$props.secondaryActions,
12108 intl = _this$props.polaris.intl,
12109 onScrolledToBottom = _this$props.onScrolledToBottom;
12110 var iframeHeight = this.state.iframeHeight;
12111 var iframeTitle = intl.translate('Polaris.Modal.iFrameTitle');
12112 var dialog;
12113 var backdrop;
12114
12115 if (open) {
12116 var footerMarkup = !footer && !primaryAction && !secondaryActions ? null : React__default.createElement(Footer, {
12117 primaryAction: primaryAction,
12118 secondaryActions: secondaryActions
12119 }, footer);
12120 var content = sectioned ? wrapWithComponent(children, Section$3, {}) : children;
12121 var body = loading ? React__default.createElement("div", {
12122 className: styles$14.Spinner
12123 }, React__default.createElement(Spinner, null)) : content;
12124 var bodyMarkup = src ? React__default.createElement("iframe", {
12125 name: iFrameName,
12126 title: iframeTitle,
12127 src: src,
12128 className: styles$14.IFrame,
12129 onLoad: this.handleIFrameLoad,
12130 style: {
12131 height: "".concat(iframeHeight, "px")
12132 }
12133 }) : React__default.createElement(Scrollable, {
12134 shadow: true,
12135 className: styles$14.Body,
12136 onScrolledToBottom: onScrolledToBottom
12137 }, body);
12138 var headerMarkup = title ? React__default.createElement(Header$1, {
12139 id: this.headerId,
12140 onClose: onClose
12141 }, title) : React__default.createElement(CloseButton, {
12142 onClick: onClose,
12143 title: false
12144 });
12145 var labelledBy = title ? this.headerId : undefined;
12146 dialog = React__default.createElement(Dialog, {
12147 instant: instant,
12148 labelledBy: labelledBy,
12149 onClose: onClose,
12150 onEntered: this.handleEntered,
12151 onExited: this.handleExited,
12152 large: large,
12153 limitHeight: limitHeight
12154 }, headerMarkup, React__default.createElement("div", {
12155 className: styles$14.BodyWrapper
12156 }, bodyMarkup), footerMarkup);
12157 backdrop = React__default.createElement(Backdrop, null);
12158 }
12159
12160 var animated = !instant;
12161 return React__default.createElement(WithinContentContext.Provider, {
12162 value: true
12163 }, React__default.createElement(Portal, {
12164 idPrefix: "modal"
12165 }, React__default.createElement(TransitionGroup, {
12166 appear: animated,
12167 enter: animated,
12168 exit: animated
12169 }, dialog), backdrop));
12170 }
12171 }, {
12172 key: "transformProps",
12173 value: function transformProps() {
12174 var _this$props2 = this.props,
12175 title = _this$props2.title,
12176 size = _this$props2.size,
12177 message = _this$props2.message,
12178 src = _this$props2.src,
12179 primaryAction = _this$props2.primaryAction,
12180 secondaryActions = _this$props2.secondaryActions,
12181 polaris = _this$props2.polaris;
12182 var appBridge = polaris.appBridge;
12183 if (!appBridge) return;
12184 var safeTitle = typeof title === 'string' ? title : undefined;
12185 var safeSize = size != null ? Modal$2.Size[size] : undefined;
12186 var srcPayload = {};
12187
12188 if (src != null) {
12189 if (/^https?:\/\//.test(src)) {
12190 srcPayload.url = src;
12191 } else {
12192 srcPayload.path = src;
12193 }
12194 }
12195
12196 return Object.assign({
12197 title: safeTitle,
12198 message,
12199 size: safeSize
12200 }, srcPayload, {
12201 footer: {
12202 buttons: transformActions(appBridge, {
12203 primaryAction,
12204 secondaryActions
12205 })
12206 }
12207 });
12208 }
12209 }]);
12210
12211 return Modal;
12212}(React__default.Component);
12213
12214Modal.Section = Section$3;
12215
12216function isIframeModal(options) {
12217 return typeof options.url === 'string' || typeof options.path === 'string';
12218} // Use named export once withAppProvider is refactored away
12219// eslint-disable-next-line import/no-default-export
12220
12221
12222var Modal$1 = withAppProvider()(Modal);
12223
12224function DiscardConfirmationModal(_ref) {
12225 var open = _ref.open,
12226 onDiscard = _ref.onDiscard,
12227 onCancel = _ref.onCancel;
12228 var i18n = useI18n();
12229 return React__default.createElement(Modal$1, {
12230 title: i18n.translate('Polaris.DiscardConfirmationModal.title'),
12231 open: open,
12232 onClose: onCancel,
12233 primaryAction: {
12234 content: i18n.translate('Polaris.DiscardConfirmationModal.primaryAction'),
12235 destructive: true,
12236 onAction: onDiscard
12237 },
12238 secondaryActions: [{
12239 content: i18n.translate('Polaris.DiscardConfirmationModal.secondaryAction'),
12240 onAction: onCancel
12241 }],
12242 sectioned: true
12243 }, i18n.translate('Polaris.DiscardConfirmationModal.message'));
12244}
12245
12246var styles$15 = {
12247 "ContextualSaveBar": "Polaris-Frame-ContextualSaveBar",
12248 "LogoContainer": "Polaris-Frame-ContextualSaveBar__LogoContainer",
12249 "Contents": "Polaris-Frame-ContextualSaveBar__Contents",
12250 "Message": "Polaris-Frame-ContextualSaveBar__Message",
12251 "ActionContainer": "Polaris-Frame-ContextualSaveBar__ActionContainer",
12252 "Action": "Polaris-Frame-ContextualSaveBar__Action"
12253};
12254
12255function ContextualSaveBar$1(_ref) {
12256 var alignContentFlush = _ref.alignContentFlush,
12257 message = _ref.message,
12258 saveAction = _ref.saveAction,
12259 discardAction = _ref.discardAction;
12260 var i18n = useI18n();
12261
12262 var _useTheme = useTheme(),
12263 logo = _useTheme.logo;
12264
12265 var _useForcibleToggle = useForcibleToggle(false),
12266 _useForcibleToggle2 = _slicedToArray(_useForcibleToggle, 2),
12267 discardConfirmationModalVisible = _useForcibleToggle2[0],
12268 _useForcibleToggle2$ = _useForcibleToggle2[1],
12269 toggleDiscardConfirmationModal = _useForcibleToggle2$.toggle,
12270 closeDiscardConfirmationModal = _useForcibleToggle2$.forceFalse;
12271
12272 var handleDiscardAction = useCallback(function () {
12273 if (discardAction && discardAction.onAction) {
12274 discardAction.onAction();
12275 }
12276
12277 closeDiscardConfirmationModal();
12278 }, [closeDiscardConfirmationModal, discardAction]);
12279 var discardActionContent = discardAction && discardAction.content ? discardAction.content : i18n.translate('Polaris.ContextualSaveBar.discard');
12280 var discardActionHandler;
12281
12282 if (discardAction && discardAction.discardConfirmationModal) {
12283 discardActionHandler = toggleDiscardConfirmationModal;
12284 } else if (discardAction) {
12285 discardActionHandler = discardAction.onAction;
12286 }
12287
12288 var discardConfirmationModalMarkup = discardAction && discardAction.onAction && discardAction.discardConfirmationModal && React__default.createElement(DiscardConfirmationModal, {
12289 open: discardConfirmationModalVisible,
12290 onCancel: toggleDiscardConfirmationModal,
12291 onDiscard: handleDiscardAction
12292 });
12293 var discardActionMarkup = discardAction && React__default.createElement(Button, {
12294 url: discardAction.url,
12295 onClick: discardActionHandler,
12296 loading: discardAction.loading,
12297 disabled: discardAction.disabled,
12298 accessibilityLabel: discardAction.content
12299 }, discardActionContent);
12300 var saveActionContent = saveAction && saveAction.content ? saveAction.content : i18n.translate('Polaris.ContextualSaveBar.save');
12301 var saveActionMarkup = saveAction && React__default.createElement(Button, {
12302 primary: true,
12303 url: saveAction.url,
12304 onClick: saveAction.onAction,
12305 loading: saveAction.loading,
12306 disabled: saveAction.disabled,
12307 accessibilityLabel: saveAction.content
12308 }, saveActionContent);
12309 var width = getWidth(logo, 104);
12310 var imageMarkup = logo && React__default.createElement(Image, {
12311 style: {
12312 width
12313 },
12314 source: logo.contextualSaveBarSource || '',
12315 alt: ""
12316 });
12317 var logoMarkup = alignContentFlush ? null : React__default.createElement("div", {
12318 className: styles$15.LogoContainer,
12319 style: {
12320 width
12321 }
12322 }, imageMarkup);
12323 return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
12324 className: styles$15.ContextualSaveBar
12325 }, logoMarkup, React__default.createElement("div", {
12326 className: styles$15.Contents
12327 }, React__default.createElement("h2", {
12328 className: styles$15.Message
12329 }, message), React__default.createElement("div", {
12330 className: styles$15.ActionContainer
12331 }, React__default.createElement(Stack, {
12332 spacing: "tight",
12333 wrap: false
12334 }, discardActionMarkup, saveActionMarkup)))), discardConfirmationModalMarkup);
12335}
12336
12337var styles$16 = {
12338 "startFade": "Polaris-Frame-CSSAnimation--startFade",
12339 "endFade": "Polaris-Frame-CSSAnimation--endFade"
12340};
12341
12342var AnimationType;
12343
12344(function (AnimationType) {
12345 AnimationType["Fade"] = "fade";
12346})(AnimationType || (AnimationType = {}));
12347
12348var TransitionStatus$1;
12349
12350(function (TransitionStatus) {
12351 TransitionStatus["Entering"] = "entering";
12352 TransitionStatus["Entered"] = "entered";
12353 TransitionStatus["Exiting"] = "exiting";
12354 TransitionStatus["Exited"] = "exited";
12355})(TransitionStatus$1 || (TransitionStatus$1 = {}));
12356
12357function CSSAnimation(_ref) {
12358 var inProp = _ref.in,
12359 className = _ref.className,
12360 type = _ref.type,
12361 children = _ref.children;
12362
12363 var _useState = useState(inProp ? TransitionStatus$1.Entering : TransitionStatus$1.Exited),
12364 _useState2 = _slicedToArray(_useState, 2),
12365 transitionStatus = _useState2[0],
12366 setTransitionStatus = _useState2[1];
12367
12368 var isMounted = useRef(false);
12369 var node = useRef(null);
12370 useEffect(function () {
12371 if (!isMounted.current) return;
12372 transitionStatus === TransitionStatus$1.Entering && changeTransitionStatus(TransitionStatus$1.Entered);
12373 }, [transitionStatus]);
12374 useEffect(function () {
12375 if (!isMounted.current) return;
12376 inProp && changeTransitionStatus(TransitionStatus$1.Entering);
12377 !inProp && changeTransitionStatus(TransitionStatus$1.Exiting);
12378 }, [inProp]);
12379 useEffect(function () {
12380 isMounted.current = true;
12381 }, []);
12382 var wrapperClassName = classNames(className, styles$16[variationName('start', type)], inProp && styles$16[variationName('end', type)]);
12383 var content = transitionStatus === TransitionStatus$1.Exited && !inProp ? null : children;
12384 return React__default.createElement("div", {
12385 className: wrapperClassName,
12386 ref: node,
12387 onTransitionEnd: handleTransitionEnd
12388 }, content);
12389
12390 function handleTransitionEnd() {
12391 transitionStatus === TransitionStatus$1.Exiting && changeTransitionStatus(TransitionStatus$1.Exited);
12392 }
12393
12394 function changeTransitionStatus(transitionStatus) {
12395 setTransitionStatus(transitionStatus); // Forcing a reflow to enable the animation
12396
12397 if (transitionStatus === TransitionStatus$1.Entering) node.current && node.current.getBoundingClientRect();
12398 }
12399}
12400
12401var styles$17 = {
12402 "Frame": "Polaris-Frame",
12403 "Navigation": "Polaris-Frame__Navigation",
12404 "Navigation-enter": "Polaris-Frame__Navigation--enter",
12405 "Navigation-enterActive": "Polaris-Frame__Navigation--enterActive",
12406 "Navigation-exit": "Polaris-Frame__Navigation--exit",
12407 "Navigation-exitActive": "Polaris-Frame__Navigation--exitActive",
12408 "NavigationDismiss": "Polaris-Frame__NavigationDismiss",
12409 "Navigation-visible": "Polaris-Frame__Navigation--visible",
12410 "TopBar": "Polaris-Frame__TopBar",
12411 "ContextualSaveBar": "Polaris-Frame__ContextualSaveBar",
12412 "Main": "Polaris-Frame__Main",
12413 "hasNav": "Polaris-Frame--hasNav",
12414 "hasTopBar": "Polaris-Frame--hasTopBar",
12415 "Content": "Polaris-Frame__Content",
12416 "GlobalRibbonContainer": "Polaris-Frame__GlobalRibbonContainer",
12417 "LoadingBar": "Polaris-Frame__LoadingBar",
12418 "Skip": "Polaris-Frame__Skip",
12419 "focused": "Polaris-Frame--focused",
12420 "SkipAnchor": "Polaris-Frame__SkipAnchor",
12421 "globalTheming": "Polaris-Frame--globalTheming"
12422};
12423
12424var GLOBAL_RIBBON_CUSTOM_PROPERTY = '--global-ribbon-height';
12425var APP_FRAME_MAIN = 'AppFrameMain';
12426var APP_FRAME_MAIN_ANCHOR_TARGET = 'AppFrameMainContent';
12427var APP_FRAME_NAV = 'AppFrameNav';
12428var APP_FRAME_TOP_BAR = 'AppFrameTopBar';
12429var APP_FRAME_LOADING_BAR = 'AppFrameLoadingBar';
12430
12431var Frame =
12432/*#__PURE__*/
12433function (_React$PureComponent) {
12434 _inherits(Frame, _React$PureComponent);
12435
12436 function Frame() {
12437 var _this;
12438
12439 _classCallCheck(this, Frame);
12440
12441 _this = _possibleConstructorReturn(this, _getPrototypeOf(Frame).apply(this, arguments));
12442 _this.state = {
12443 skipFocused: false,
12444 globalRibbonHeight: 0,
12445 loadingStack: 0,
12446 toastMessages: [],
12447 showContextualSaveBar: false
12448 };
12449 _this.globalRibbonContainer = null;
12450 _this.navigationNode = createRef();
12451 _this.skipToMainContentTargetNode = _this.props.skipToContentTarget || React__default.createRef();
12452
12453 _this.setGlobalRibbonHeight = function () {
12454 var _assertThisInitialize = _assertThisInitialized(_this),
12455 globalRibbonContainer = _assertThisInitialize.globalRibbonContainer;
12456
12457 if (globalRibbonContainer) {
12458 _this.setState({
12459 globalRibbonHeight: globalRibbonContainer.offsetHeight
12460 }, _this.setGlobalRibbonRootProperty);
12461 }
12462 };
12463
12464 _this.setGlobalRibbonRootProperty = function () {
12465 var globalRibbonHeight = _this.state.globalRibbonHeight;
12466 setRootProperty(GLOBAL_RIBBON_CUSTOM_PROPERTY, "".concat(globalRibbonHeight, "px"), null);
12467 };
12468
12469 _this.showToast = function (toast) {
12470 _this.setState(function (_ref) {
12471 var toastMessages = _ref.toastMessages;
12472 var hasToastById = toastMessages.find(function (_ref2) {
12473 var id = _ref2.id;
12474 return id === toast.id;
12475 }) != null;
12476 return {
12477 toastMessages: hasToastById ? toastMessages : [].concat(_toConsumableArray(toastMessages), [toast])
12478 };
12479 });
12480 };
12481
12482 _this.hideToast = function (_ref3) {
12483 var id = _ref3.id;
12484
12485 _this.setState(function (_ref4) {
12486 var toastMessages = _ref4.toastMessages;
12487 return {
12488 toastMessages: toastMessages.filter(function (_ref5) {
12489 var toastId = _ref5.id;
12490 return id !== toastId;
12491 })
12492 };
12493 });
12494 };
12495
12496 _this.setContextualSaveBar = function (props) {
12497 var showContextualSaveBar = _this.state.showContextualSaveBar;
12498 _this.contextualSaveBar = Object.assign({}, props);
12499
12500 if (showContextualSaveBar === true) {
12501 _this.forceUpdate();
12502 } else {
12503 _this.setState({
12504 showContextualSaveBar: true
12505 });
12506 }
12507 };
12508
12509 _this.removeContextualSaveBar = function () {
12510 _this.contextualSaveBar = null;
12511
12512 _this.setState({
12513 showContextualSaveBar: false
12514 });
12515 };
12516
12517 _this.startLoading = function () {
12518 _this.setState(function (_ref6) {
12519 var loadingStack = _ref6.loadingStack;
12520 return {
12521 loadingStack: loadingStack + 1
12522 };
12523 });
12524 };
12525
12526 _this.stopLoading = function () {
12527 _this.setState(function (_ref7) {
12528 var loadingStack = _ref7.loadingStack;
12529 return {
12530 loadingStack: Math.max(0, loadingStack - 1)
12531 };
12532 });
12533 };
12534
12535 _this.handleResize = function () {
12536 if (_this.props.globalRibbon) {
12537 _this.setGlobalRibbonHeight();
12538 }
12539 };
12540
12541 _this.handleFocus = function () {
12542 _this.setState({
12543 skipFocused: true
12544 });
12545 };
12546
12547 _this.handleBlur = function () {
12548 _this.setState({
12549 skipFocused: false
12550 });
12551 };
12552
12553 _this.handleClick = function () {
12554 _this.skipToMainContentTargetNode.current && _this.skipToMainContentTargetNode.current.focus();
12555 };
12556
12557 _this.handleNavigationDismiss = function () {
12558 var onNavigationDismiss = _this.props.onNavigationDismiss;
12559
12560 if (onNavigationDismiss != null) {
12561 onNavigationDismiss();
12562 }
12563 };
12564
12565 _this.setGlobalRibbonContainer = function (node) {
12566 _this.globalRibbonContainer = node;
12567 };
12568
12569 _this.handleNavKeydown = function (event) {
12570 var key = event.key;
12571
12572 if (key === 'Escape') {
12573 _this.handleNavigationDismiss();
12574 }
12575 };
12576
12577 _this.findNavigationNode = function () {
12578 return _this.navigationNode.current;
12579 };
12580
12581 return _this;
12582 }
12583
12584 _createClass(Frame, [{
12585 key: "componentDidMount",
12586 value: function componentDidMount() {
12587 this.handleResize();
12588
12589 if (this.props.globalRibbon) {
12590 return;
12591 }
12592
12593 this.setGlobalRibbonRootProperty();
12594 }
12595 }, {
12596 key: "componentDidUpdate",
12597 value: function componentDidUpdate(prevProps) {
12598 if (this.props.globalRibbon !== prevProps.globalRibbon) {
12599 this.setGlobalRibbonHeight();
12600 }
12601 }
12602 }, {
12603 key: "render",
12604 value: function render() {
12605 var _this$state = this.state,
12606 skipFocused = _this$state.skipFocused,
12607 loadingStack = _this$state.loadingStack,
12608 toastMessages = _this$state.toastMessages,
12609 showContextualSaveBar = _this$state.showContextualSaveBar;
12610 var _this$props = this.props,
12611 children = _this$props.children,
12612 navigation = _this$props.navigation,
12613 topBar = _this$props.topBar,
12614 globalRibbon = _this$props.globalRibbon,
12615 _this$props$showMobil = _this$props.showMobileNavigation,
12616 showMobileNavigation = _this$props$showMobil === void 0 ? false : _this$props$showMobil,
12617 skipToContentTarget = _this$props.skipToContentTarget,
12618 _this$props$polaris = _this$props.polaris,
12619 intl = _this$props$polaris.intl,
12620 isNavigationCollapsed = _this$props$polaris.mediaQuery.isNavigationCollapsed;
12621 var navClassName = classNames(styles$17.Navigation, showMobileNavigation && styles$17['Navigation-visible']);
12622 var mobileNavHidden = isNavigationCollapsed && !showMobileNavigation;
12623 var mobileNavShowing = isNavigationCollapsed && showMobileNavigation;
12624 var tabIndex = mobileNavShowing ? 0 : -1;
12625 var navigationMarkup = navigation ? React__default.createElement(TrapFocus, {
12626 trapping: mobileNavShowing
12627 }, React__default.createElement(CSSTransition, {
12628 findDOMNode: this.findNavigationNode,
12629 appear: isNavigationCollapsed,
12630 exit: isNavigationCollapsed,
12631 in: showMobileNavigation,
12632 timeout: durationSlow,
12633 classNames: navTransitionClasses
12634 }, React__default.createElement("div", {
12635 ref: this.navigationNode,
12636 className: navClassName,
12637 onKeyDown: this.handleNavKeydown,
12638 id: APP_FRAME_NAV,
12639 key: "NavContent",
12640 hidden: mobileNavHidden
12641 }, navigation, React__default.createElement("button", {
12642 type: "button",
12643 className: styles$17.NavigationDismiss,
12644 onClick: this.handleNavigationDismiss,
12645 "aria-hidden": mobileNavHidden || !isNavigationCollapsed && !showMobileNavigation,
12646 "aria-label": intl.translate('Polaris.Frame.Navigation.closeMobileNavigationLabel'),
12647 tabIndex: tabIndex
12648 }, React__default.createElement(Icon, {
12649 source: MobileCancelMajorMonotone,
12650 color: "white"
12651 }))))) : null;
12652 var loadingMarkup = loadingStack > 0 ? React__default.createElement("div", {
12653 className: styles$17.LoadingBar,
12654 id: APP_FRAME_LOADING_BAR
12655 }, React__default.createElement(Loading, null)) : null;
12656 var contextualSaveBarMarkup = React__default.createElement(CSSAnimation, {
12657 in: showContextualSaveBar,
12658 className: styles$17.ContextualSaveBar,
12659 type: AnimationType.Fade
12660 }, React__default.createElement(ContextualSaveBar$1, this.contextualSaveBar));
12661 var topBarMarkup = topBar ? React__default.createElement("div", Object.assign({
12662 className: styles$17.TopBar
12663 }, layer.props, dataPolarisTopBar.props, {
12664 id: APP_FRAME_TOP_BAR
12665 }), topBar) : null;
12666 var globalRibbonMarkup = globalRibbon ? React__default.createElement("div", {
12667 className: styles$17.GlobalRibbonContainer,
12668 ref: this.setGlobalRibbonContainer
12669 }, globalRibbon) : null;
12670 var skipClassName = classNames(styles$17.Skip, skipFocused && styles$17.focused);
12671 var skipTarget = skipToContentTarget ? skipToContentTarget.current && skipToContentTarget.current.id || '' : APP_FRAME_MAIN_ANCHOR_TARGET;
12672 var skipMarkup = React__default.createElement("div", {
12673 className: skipClassName
12674 }, React__default.createElement("a", {
12675 href: "#".concat(skipTarget),
12676 onFocus: this.handleFocus,
12677 onBlur: this.handleBlur,
12678 onClick: this.handleClick,
12679 className: styles$17.SkipAnchor
12680 }, intl.translate('Polaris.Frame.skipToContent')));
12681 var navigationAttributes = navigation ? {
12682 'data-has-navigation': true
12683 } : {};
12684 var frameClassName = classNames(styles$17.Frame, navigation && styles$17.hasNav, topBar && styles$17.hasTopBar);
12685 var navigationOverlayMarkup = showMobileNavigation && isNavigationCollapsed ? React__default.createElement(Backdrop, {
12686 belowNavigation: true,
12687 onClick: this.handleNavigationDismiss,
12688 onTouchStart: this.handleNavigationDismiss
12689 }) : null;
12690 var skipToMainContentTarget = skipToContentTarget ? null : // eslint-disable-next-line jsx-a11y/anchor-is-valid
12691 React__default.createElement("a", {
12692 id: APP_FRAME_MAIN_ANCHOR_TARGET,
12693 ref: this.skipToMainContentTargetNode,
12694 tabIndex: -1
12695 });
12696 var context = {
12697 showToast: this.showToast,
12698 hideToast: this.hideToast,
12699 startLoading: this.startLoading,
12700 stopLoading: this.stopLoading,
12701 setContextualSaveBar: this.setContextualSaveBar,
12702 removeContextualSaveBar: this.removeContextualSaveBar
12703 };
12704 return React__default.createElement(FrameContext.Provider, {
12705 value: context
12706 }, React__default.createElement("div", Object.assign({
12707 className: frameClassName
12708 }, layer.props, navigationAttributes), skipMarkup, topBarMarkup, navigationMarkup, contextualSaveBarMarkup, loadingMarkup, navigationOverlayMarkup, React__default.createElement("main", {
12709 className: styles$17.Main,
12710 id: APP_FRAME_MAIN,
12711 "data-has-global-ribbon": Boolean(globalRibbon)
12712 }, skipToMainContentTarget, React__default.createElement("div", {
12713 className: styles$17.Content
12714 }, children)), React__default.createElement(ToastManager, {
12715 toastMessages: toastMessages
12716 }), globalRibbonMarkup, React__default.createElement(EventListener, {
12717 event: "resize",
12718 handler: this.handleResize
12719 })));
12720 }
12721 }]);
12722
12723 return Frame;
12724}(React__default.PureComponent);
12725
12726var navTransitionClasses = {
12727 enter: classNames(styles$17['Navigation-enter']),
12728 enterActive: classNames(styles$17['Navigation-enterActive']),
12729 enterDone: classNames(styles$17['Navigation-enterActive']),
12730 exit: classNames(styles$17['Navigation-exit']),
12731 exitActive: classNames(styles$17['Navigation-exitActive'])
12732}; // Use named export once withAppProvider is refactored away
12733// eslint-disable-next-line import/no-default-export
12734
12735var Frame$1 = withAppProvider()(Frame);
12736
12737var styles$18 = {
12738 "Indicator": "Polaris-Indicator",
12739 "pulseIndicator": "Polaris-Indicator--pulseIndicator",
12740 "bounce": "Polaris-Indicator--bounce",
12741 "pulse": "Polaris-Indicator--pulse"
12742};
12743
12744function Indicator(_ref) {
12745 var _ref$pulse = _ref.pulse,
12746 pulse = _ref$pulse === void 0 ? true : _ref$pulse;
12747 var className = classNames(styles$18.Indicator, pulse && styles$18.pulseIndicator);
12748 return React__default.createElement("span", {
12749 className: className
12750 });
12751}
12752
12753var styles$19 = {
12754 "KeyboardKey": "Polaris-KeyboardKey"
12755};
12756
12757function KeyboardKey(_ref) {
12758 var children = _ref.children;
12759 var key = children || '';
12760 key = key.length > 1 ? key.toLowerCase() : key.toUpperCase();
12761 return React__default.createElement("kbd", {
12762 className: styles$19.KeyboardKey
12763 }, key);
12764}
12765
12766var styles$1a = {
12767 "Layout": "Polaris-Layout",
12768 "Section": "Polaris-Layout__Section",
12769 "Section-secondary": "Polaris-Layout__Section--secondary",
12770 "Section-fullWidth": "Polaris-Layout__Section--fullWidth",
12771 "Section-oneHalf": "Polaris-Layout__Section--oneHalf",
12772 "Section-oneThird": "Polaris-Layout__Section--oneThird",
12773 "AnnotatedSection": "Polaris-Layout__AnnotatedSection",
12774 "AnnotationWrapper": "Polaris-Layout__AnnotationWrapper",
12775 "AnnotationContent": "Polaris-Layout__AnnotationContent",
12776 "Annotation": "Polaris-Layout__Annotation",
12777 "AnnotationDescription": "Polaris-Layout__AnnotationDescription"
12778};
12779
12780function AnnotatedSection(props) {
12781 var children = props.children,
12782 title = props.title,
12783 description = props.description;
12784 var descriptionMarkup = typeof description === 'string' ? React__default.createElement("p", null, description) : description;
12785 return React__default.createElement("div", {
12786 className: styles$1a.AnnotatedSection
12787 }, React__default.createElement("div", {
12788 className: styles$1a.AnnotationWrapper
12789 }, React__default.createElement("div", {
12790 className: styles$1a.Annotation
12791 }, React__default.createElement(TextContainer, null, React__default.createElement(Heading, null, title), descriptionMarkup && React__default.createElement("div", {
12792 className: styles$1a.AnnotationDescription
12793 }, descriptionMarkup))), React__default.createElement("div", {
12794 className: styles$1a.AnnotationContent
12795 }, children)));
12796}
12797
12798function Section$4(_ref) {
12799 var children = _ref.children,
12800 secondary = _ref.secondary,
12801 fullWidth = _ref.fullWidth,
12802 oneHalf = _ref.oneHalf,
12803 oneThird = _ref.oneThird;
12804 var className = classNames(styles$1a.Section, secondary && styles$1a['Section-secondary'], fullWidth && styles$1a['Section-fullWidth'], oneHalf && styles$1a['Section-oneHalf'], oneThird && styles$1a['Section-oneThird']);
12805 return React__default.createElement("div", {
12806 className: className
12807 }, children);
12808}
12809
12810var Layout =
12811/*#__PURE__*/
12812function (_React$Component) {
12813 _inherits(Layout, _React$Component);
12814
12815 function Layout() {
12816 _classCallCheck(this, Layout);
12817
12818 return _possibleConstructorReturn(this, _getPrototypeOf(Layout).apply(this, arguments));
12819 }
12820
12821 _createClass(Layout, [{
12822 key: "render",
12823 value: function render() {
12824 var _this$props = this.props,
12825 children = _this$props.children,
12826 sectioned = _this$props.sectioned;
12827 var content = sectioned ? React__default.createElement(Section$4, null, children) : children;
12828 return React__default.createElement("div", {
12829 className: styles$1a.Layout
12830 }, content);
12831 }
12832 }]);
12833
12834 return Layout;
12835}(React__default.Component);
12836Layout.AnnotatedSection = AnnotatedSection;
12837Layout.Section = Section$4;
12838
12839var styles$1b = {
12840 "Link": "Polaris-Link",
12841 "IconLockup": "Polaris-Link__IconLockup",
12842 "IconLayout": "Polaris-Link__IconLayout",
12843 "monochrome": "Polaris-Link--monochrome"
12844};
12845
12846function Link(_ref) {
12847 var url = _ref.url,
12848 children = _ref.children,
12849 onClick = _ref.onClick,
12850 external = _ref.external,
12851 id = _ref.id,
12852 monochrome = _ref.monochrome;
12853 var i18n = useI18n();
12854 var childrenMarkup = children;
12855
12856 if (external && typeof children === 'string') {
12857 var iconLabel = i18n.translate('Polaris.Common.newWindowAccessibilityHint');
12858 childrenMarkup = React__default.createElement(React__default.Fragment, null, children, React__default.createElement("span", {
12859 className: styles$1b.IconLockup
12860 }, React__default.createElement("span", {
12861 className: styles$1b.IconLayout
12862 }, React__default.createElement(Icon, {
12863 accessibilityLabel: iconLabel,
12864 source: ExternalSmallMinor
12865 }))));
12866 }
12867
12868 return React__default.createElement(BannerContext.Consumer, null, function (BannerContext) {
12869 var shouldBeMonochrome = monochrome || BannerContext;
12870 var className = classNames(styles$1b.Link, shouldBeMonochrome && styles$1b.monochrome);
12871 return url ? React__default.createElement(UnstyledLink, {
12872 onClick: onClick,
12873 className: className,
12874 url: url,
12875 external: external,
12876 id: id
12877 }, childrenMarkup) : React__default.createElement("button", {
12878 type: "button",
12879 onClick: onClick,
12880 className: className,
12881 id: id
12882 }, childrenMarkup);
12883 });
12884}
12885
12886var styles$1c = {
12887 "List": "Polaris-List",
12888 "typeNumber": "Polaris-List--typeNumber",
12889 "Item": "Polaris-List__Item"
12890};
12891
12892function Item$6(_ref) {
12893 var children = _ref.children;
12894 return React__default.createElement("li", {
12895 className: styles$1c.Item
12896 }, children);
12897}
12898
12899var List =
12900/*#__PURE__*/
12901function (_React$PureComponent) {
12902 _inherits(List, _React$PureComponent);
12903
12904 function List() {
12905 _classCallCheck(this, List);
12906
12907 return _possibleConstructorReturn(this, _getPrototypeOf(List).apply(this, arguments));
12908 }
12909
12910 _createClass(List, [{
12911 key: "render",
12912 value: function render() {
12913 var _this$props = this.props,
12914 children = _this$props.children,
12915 _this$props$type = _this$props.type,
12916 type = _this$props$type === void 0 ? 'bullet' : _this$props$type;
12917 var className = classNames(styles$1c.List, type && styles$1c[variationName('type', type)]);
12918 var ListElement = type === 'bullet' ? 'ul' : 'ol';
12919 return React__default.createElement(ListElement, {
12920 className: className
12921 }, children);
12922 }
12923 }]);
12924
12925 return List;
12926}(React__default.PureComponent);
12927List.Item = Item$6;
12928
12929var Loading$1 = React__default.memo(function Loading() {
12930 var appBridgeLoading = useRef();
12931 var appBridge = useAppBridge();
12932
12933 var _useFrame = useFrame(),
12934 startLoading = _useFrame.startLoading,
12935 stopLoading = _useFrame.stopLoading;
12936
12937 useEffect(function () {
12938 if (appBridge == null) {
12939 startLoading();
12940 } else {
12941 // eslint-disable-next-line no-console
12942 console.warn('Deprecation: Using `Loading` in an embedded app is deprecated and will be removed in v5.0. Use `Loading` from `@shopify/app-bridge-react` instead: https://help.shopify.com/en/api/embedded-apps/app-bridge/react-components/loading');
12943 appBridgeLoading.current = Loading$2.create(appBridge);
12944 appBridgeLoading.current.dispatch(Loading$2.Action.START);
12945 }
12946
12947 return function () {
12948 if (appBridge == null) {
12949 stopLoading();
12950 } else {
12951 appBridgeLoading.current && appBridgeLoading.current.dispatch(Loading$2.Action.STOP);
12952 }
12953 };
12954 }, [appBridge, startLoading, stopLoading]);
12955 return null;
12956});
12957
12958var NavigationContext = React__default.createContext({
12959 location: ''
12960});
12961
12962var styles$1d = {
12963 "Navigation": "Polaris-Navigation",
12964 "UserMenu": "Polaris-Navigation__UserMenu",
12965 "ContextControl": "Polaris-Navigation__ContextControl",
12966 "PrimaryNavigation": "Polaris-Navigation__PrimaryNavigation",
12967 "Item": "Polaris-Navigation__Item",
12968 "Icon": "Polaris-Navigation__Icon",
12969 "Item-selected": "Polaris-Navigation__Item--selected",
12970 "Item-disabled": "Polaris-Navigation__Item--disabled",
12971 "Badge": "Polaris-Navigation__Badge",
12972 "subNavigationActive": "Polaris-Navigation--subNavigationActive",
12973 "ListItem": "Polaris-Navigation__ListItem",
12974 "RollupSection": "Polaris-Navigation__RollupSection",
12975 "SecondaryNavigation": "Polaris-Navigation__SecondaryNavigation",
12976 "fade-in": "Polaris-Navigation__fade--in",
12977 "ListItem-hasAction": "Polaris-Navigation__ListItem--hasAction",
12978 "ItemWrapper": "Polaris-Navigation__ItemWrapper",
12979 "Text": "Polaris-Navigation__Text",
12980 "SecondaryAction": "Polaris-Navigation__SecondaryAction",
12981 "List": "Polaris-Navigation__List",
12982 "Section": "Polaris-Navigation__Section",
12983 "Section-fill": "Polaris-Navigation__Section--fill",
12984 "Section-withSeparator": "Polaris-Navigation__Section--withSeparator",
12985 "SectionHeading": "Polaris-Navigation__SectionHeading",
12986 "Action": "Polaris-Navigation__Action",
12987 "RollupToggle": "Polaris-Navigation__RollupToggle",
12988 "Indicator": "Polaris-Navigation__Indicator"
12989};
12990
12991function Secondary(_ref) {
12992 var children = _ref.children,
12993 expanded = _ref.expanded;
12994 var id = useUniqueId('SecondaryNavigation');
12995 return React__default.createElement(Collapsible, {
12996 id: id,
12997 open: expanded
12998 }, React__default.createElement("ul", {
12999 className: styles$1d.List
13000 }, children));
13001}
13002
13003var MatchState;
13004
13005(function (MatchState) {
13006 MatchState[MatchState["MatchForced"] = 0] = "MatchForced";
13007 MatchState[MatchState["MatchUrl"] = 1] = "MatchUrl";
13008 MatchState[MatchState["MatchPaths"] = 2] = "MatchPaths";
13009 MatchState[MatchState["Excluded"] = 3] = "Excluded";
13010 MatchState[MatchState["NoMatch"] = 4] = "NoMatch";
13011})(MatchState || (MatchState = {}));
13012
13013function Item$7(_ref) {
13014 var url = _ref.url,
13015 icon = _ref.icon,
13016 label = _ref.label,
13017 _ref$subNavigationIte = _ref.subNavigationItems,
13018 subNavigationItems = _ref$subNavigationIte === void 0 ? [] : _ref$subNavigationIte,
13019 secondaryAction = _ref.secondaryAction,
13020 disabled = _ref.disabled,
13021 onClick = _ref.onClick,
13022 accessibilityLabel = _ref.accessibilityLabel,
13023 selectedOverride = _ref.selected,
13024 badge = _ref.badge,
13025 isNew = _ref.new,
13026 matches = _ref.matches,
13027 exactMatch = _ref.exactMatch,
13028 matchPaths = _ref.matchPaths,
13029 excludePaths = _ref.excludePaths;
13030 var i18n = useI18n();
13031
13032 var _useMediaQuery = useMediaQuery(),
13033 isNavigationCollapsed = _useMediaQuery.isNavigationCollapsed;
13034
13035 var _useContext = useContext(NavigationContext),
13036 location = _useContext.location,
13037 onNavigationDismiss = _useContext.onNavigationDismiss;
13038
13039 var _useState = useState(false),
13040 _useState2 = _slicedToArray(_useState, 2),
13041 expanded = _useState2[0],
13042 setExpanded = _useState2[1];
13043
13044 useEffect(function () {
13045 if (!isNavigationCollapsed && expanded) {
13046 setExpanded(false);
13047 }
13048 }, [expanded, isNavigationCollapsed]);
13049 var tabIndex = disabled ? -1 : 0;
13050 var hasNewChild = subNavigationItems.filter(function (subNavigationItem) {
13051 return subNavigationItem.new;
13052 }).length > 0;
13053 var indicatorMarkup = hasNewChild ? React__default.createElement("span", {
13054 className: styles$1d.Indicator
13055 }, React__default.createElement(Indicator, {
13056 pulse: true
13057 })) : null;
13058 var iconMarkup = icon ? React__default.createElement("div", {
13059 className: styles$1d.Icon
13060 }, React__default.createElement(Icon, {
13061 source: icon
13062 })) : null;
13063 var badgeMarkup = null;
13064
13065 if (isNew) {
13066 badgeMarkup = React__default.createElement(Badge, {
13067 status: "new",
13068 size: "small"
13069 }, i18n.translate('Polaris.Badge.STATUS_LABELS.new'));
13070 } else if (typeof badge === 'string') {
13071 badgeMarkup = React__default.createElement(Badge, {
13072 status: "new",
13073 size: "small"
13074 }, badge);
13075 } else {
13076 badgeMarkup = badge;
13077 }
13078
13079 var wrappedBadgeMarkup = badgeMarkup == null ? null : React__default.createElement("div", {
13080 className: styles$1d.Badge
13081 }, badgeMarkup);
13082 var itemContentMarkup = React__default.createElement(Fragment, null, iconMarkup, React__default.createElement("span", {
13083 className: styles$1d.Text
13084 }, label, indicatorMarkup), wrappedBadgeMarkup);
13085
13086 if (url == null) {
13087 var _className = classNames(styles$1d.Item, disabled && styles$1d['Item-disabled']);
13088
13089 return React__default.createElement("li", {
13090 className: styles$1d.ListItem
13091 }, React__default.createElement("button", {
13092 type: "button",
13093 className: _className,
13094 disabled: disabled,
13095 "aria-disabled": disabled,
13096 "aria-label": accessibilityLabel,
13097 onClick: getClickHandler(onClick)
13098 }, itemContentMarkup));
13099 }
13100
13101 var secondaryActionMarkup = secondaryAction && React__default.createElement(UnstyledLink, {
13102 external: true,
13103 url: secondaryAction.url,
13104 className: styles$1d.SecondaryAction,
13105 tabIndex: tabIndex,
13106 "aria-disabled": disabled,
13107 "aria-label": secondaryAction.accessibilityLabel
13108 }, React__default.createElement(Icon, {
13109 source: secondaryAction.icon
13110 }));
13111 var matchState = matchStateForItem({
13112 url,
13113 matches,
13114 exactMatch,
13115 matchPaths,
13116 excludePaths
13117 }, location);
13118 var matchingSubNavigationItems = subNavigationItems.filter(function (item) {
13119 var subMatchState = matchStateForItem(item, location);
13120 return subMatchState === MatchState.MatchForced || subMatchState === MatchState.MatchUrl || subMatchState === MatchState.MatchPaths;
13121 });
13122 var childIsActive = matchingSubNavigationItems.length > 0;
13123 var selected = selectedOverride == null ? matchState === MatchState.MatchForced || matchState === MatchState.MatchUrl || matchState === MatchState.MatchPaths : selectedOverride;
13124 var showExpanded = selected || expanded || childIsActive;
13125 var itemClassName = classNames(styles$1d.Item, disabled && styles$1d['Item-disabled'], selected && subNavigationItems.length === 0 && styles$1d['Item-selected'], showExpanded && styles$1d.subNavigationActive);
13126 var secondaryNavigationMarkup = null;
13127
13128 if (subNavigationItems.length > 0 && showExpanded) {
13129 var longestMatch = matchingSubNavigationItems.sort(function (_ref2, _ref3) {
13130 var firstUrl = _ref2.url;
13131 var secondUrl = _ref3.url;
13132 return secondUrl.length - firstUrl.length;
13133 })[0];
13134 secondaryNavigationMarkup = React__default.createElement("div", {
13135 className: styles$1d.SecondaryNavigation
13136 }, React__default.createElement(Secondary, {
13137 expanded: showExpanded
13138 }, subNavigationItems.map(function (item) {
13139 var label = item.label,
13140 rest = __rest(item, ["label"]);
13141
13142 return React__default.createElement(Item$7, Object.assign({}, rest, {
13143 key: label,
13144 label: label,
13145 matches: item === longestMatch,
13146 onClick: onNavigationDismiss
13147 }));
13148 })));
13149 }
13150
13151 var className = classNames(styles$1d.ListItem, secondaryAction && styles$1d['ListItem-hasAction']);
13152 return React__default.createElement("li", {
13153 className: className
13154 }, React__default.createElement("div", {
13155 className: styles$1d.ItemWrapper
13156 }, React__default.createElement(UnstyledLink, {
13157 url: url,
13158 className: itemClassName,
13159 tabIndex: tabIndex,
13160 "aria-disabled": disabled,
13161 "aria-label": accessibilityLabel,
13162 onClick: getClickHandler(onClick)
13163 }, itemContentMarkup), secondaryActionMarkup), secondaryNavigationMarkup);
13164
13165 function getClickHandler(onClick) {
13166 return function (event) {
13167 var currentTarget = event.currentTarget;
13168
13169 if (currentTarget.getAttribute('href') === location) {
13170 event.preventDefault();
13171 }
13172
13173 if (subNavigationItems && subNavigationItems.length > 0 && isNavigationCollapsed) {
13174 event.preventDefault();
13175 setExpanded(!expanded);
13176 } else if (onNavigationDismiss) {
13177 onNavigationDismiss();
13178
13179 if (onClick && onClick !== onNavigationDismiss) {
13180 onClick();
13181 }
13182
13183 return;
13184 }
13185
13186 if (onClick) {
13187 onClick();
13188 }
13189 };
13190 }
13191}
13192function isNavigationItemActive(navigationItem, currentPath) {
13193 var matchState = matchStateForItem(navigationItem, currentPath);
13194 var matchingSubNavigationItems = navigationItem.subNavigationItems && navigationItem.subNavigationItems.filter(function (item) {
13195 var subMatchState = matchStateForItem(item, currentPath);
13196 return subMatchState === MatchState.MatchForced || subMatchState === MatchState.MatchUrl || subMatchState === MatchState.MatchPaths;
13197 });
13198 var childIsActive = matchingSubNavigationItems && matchingSubNavigationItems.length > 0;
13199 var selected = matchState === MatchState.MatchForced || matchState === MatchState.MatchUrl || matchState === MatchState.MatchPaths;
13200 return selected || childIsActive;
13201}
13202
13203function normalizePathname(pathname) {
13204 var barePathname = pathname.split('?')[0].split('#')[0];
13205 return barePathname.endsWith('/') ? barePathname : "".concat(barePathname, "/");
13206}
13207
13208function safeEqual(location, path) {
13209 return normalizePathname(location) === normalizePathname(path);
13210}
13211
13212function safeStartsWith(location, path) {
13213 return normalizePathname(location).startsWith(normalizePathname(path));
13214}
13215
13216function matchStateForItem(_ref4, location) {
13217 var url = _ref4.url,
13218 matches = _ref4.matches,
13219 exactMatch = _ref4.exactMatch,
13220 matchPaths = _ref4.matchPaths,
13221 excludePaths = _ref4.excludePaths;
13222
13223 if (url == null) {
13224 return MatchState.NoMatch;
13225 }
13226
13227 if (matches) {
13228 return MatchState.MatchForced;
13229 }
13230
13231 if (matches === false || excludePaths && excludePaths.some(function (path) {
13232 return safeStartsWith(location, path);
13233 })) {
13234 return MatchState.Excluded;
13235 }
13236
13237 if (matchPaths && matchPaths.some(function (path) {
13238 return safeStartsWith(location, path);
13239 })) {
13240 return MatchState.MatchPaths;
13241 }
13242
13243 var matchesUrl = exactMatch ? safeEqual(location, url) : safeStartsWith(location, url);
13244 return matchesUrl ? MatchState.MatchUrl : MatchState.NoMatch;
13245}
13246
13247var createAdditionalItemsId = createUniqueIDFactory('AdditionalItems');
13248var Section$5 =
13249/*#__PURE__*/
13250function (_React$Component) {
13251 _inherits(Section, _React$Component);
13252
13253 function Section() {
13254 var _this;
13255
13256 _classCallCheck(this, Section);
13257
13258 _this = _possibleConstructorReturn(this, _getPrototypeOf(Section).apply(this, arguments));
13259 _this.state = {
13260 expanded: false
13261 };
13262 _this.animationFrame = null;
13263
13264 _this.toggleViewAll = function () {
13265 _this.setState(function (_ref) {
13266 var expanded = _ref.expanded;
13267 return {
13268 expanded: !expanded
13269 };
13270 });
13271 };
13272
13273 return _this;
13274 }
13275
13276 _createClass(Section, [{
13277 key: "componentWillUnmount",
13278 value: function componentWillUnmount() {
13279 if (this.animationFrame) {
13280 cancelAnimationFrame(this.animationFrame);
13281 }
13282 }
13283 }, {
13284 key: "render",
13285 value: function render() {
13286 var _this2 = this;
13287
13288 var _this$props = this.props,
13289 title = _this$props.title,
13290 fill = _this$props.fill,
13291 action = _this$props.action,
13292 items = _this$props.items,
13293 rollup = _this$props.rollup,
13294 separator = _this$props.separator;
13295 var expanded = this.state.expanded;
13296 var className = classNames(styles$1d.Section, separator && styles$1d['Section-withSeparator'], fill && styles$1d['Section-fill']);
13297 var actionMarkup = action && React__default.createElement("button", {
13298 type: "button",
13299 className: styles$1d.Action,
13300 "aria-label": action.accessibilityLabel,
13301 onClick: action.onClick
13302 }, React__default.createElement(Icon, {
13303 source: action.icon
13304 }));
13305 var sectionHeadingMarkup = title && React__default.createElement("li", {
13306 className: styles$1d.SectionHeading
13307 }, React__default.createElement("span", {
13308 className: styles$1d.Text
13309 }, title), actionMarkup);
13310 var itemsMarkup = items.map(function (item) {
13311 var onClick = item.onClick,
13312 label = item.label,
13313 subNavigationItems = item.subNavigationItems,
13314 rest = __rest(item, ["onClick", "label", "subNavigationItems"]);
13315
13316 var hasSubNavItems = subNavigationItems != null && subNavigationItems.length > 0;
13317 return React__default.createElement(Item$7, Object.assign({}, rest, {
13318 key: label,
13319 label: label,
13320 subNavigationItems: subNavigationItems,
13321 onClick: _this2.handleClick(onClick, hasSubNavItems)
13322 }));
13323 });
13324 var toggleClassName = classNames(styles$1d.Item, styles$1d.RollupToggle);
13325 var ariaLabel = rollup && (expanded ? rollup.hide : rollup.view);
13326 var toggleRollup = rollup && items.length > rollup.after && React__default.createElement("div", {
13327 className: styles$1d.ListItem,
13328 key: "List Item"
13329 }, React__default.createElement("button", {
13330 type: "button",
13331 className: toggleClassName,
13332 onClick: this.toggleViewAll,
13333 "aria-label": ariaLabel
13334 }, React__default.createElement("span", {
13335 className: styles$1d.Icon
13336 }, React__default.createElement(Icon, {
13337 source: HorizontalDotsMinor
13338 }))));
13339 var activeItemIndex = items.findIndex(function (item) {
13340 if (!rollup) {
13341 return false;
13342 }
13343
13344 return rollup.activePath === item.url || item.url && rollup.activePath.startsWith(item.url) || (item.subNavigationItems ? item.subNavigationItems.some(function (_ref2) {
13345 var itemUrl = _ref2.url;
13346 return rollup.activePath.startsWith(itemUrl);
13347 }) : false);
13348 });
13349 var sectionItems = rollup ? itemsMarkup.slice(0, rollup.after) : itemsMarkup;
13350 var additionalItems = rollup ? itemsMarkup.slice(rollup.after) : [];
13351
13352 if (rollup && activeItemIndex !== -1 && activeItemIndex > rollup.after - 1) {
13353 sectionItems.push.apply(sectionItems, _toConsumableArray(additionalItems.splice(activeItemIndex - rollup.after, 1)));
13354 }
13355
13356 var additionalItemsId = createAdditionalItemsId();
13357 var activeItemsMarkup = rollup && additionalItems.length > 0 && React__default.createElement("li", {
13358 className: styles$1d.RollupSection
13359 }, React__default.createElement(Collapsible, {
13360 id: additionalItemsId,
13361 open: expanded
13362 }, React__default.createElement("ul", {
13363 className: styles$1d.List
13364 }, additionalItems)), toggleRollup);
13365 return React__default.createElement("ul", {
13366 className: className
13367 }, sectionHeadingMarkup, sectionItems, activeItemsMarkup);
13368 }
13369 }, {
13370 key: "handleClick",
13371 value: function handleClick(onClick, hasSubNavItems) {
13372 var _this3 = this;
13373
13374 return function () {
13375 if (onClick) {
13376 onClick();
13377 }
13378
13379 if (_this3.animationFrame) {
13380 cancelAnimationFrame(_this3.animationFrame);
13381 }
13382
13383 if (!hasSubNavItems || !navigationBarCollapsed().matches) {
13384 _this3.animationFrame = requestAnimationFrame(function () {
13385 return _this3.setState({
13386 expanded: false
13387 });
13388 });
13389 }
13390 };
13391 }
13392 }]);
13393
13394 return Section;
13395}(React__default.Component);
13396
13397var Navigation$1 =
13398/*#__PURE__*/
13399function (_React$Component) {
13400 _inherits(Navigation, _React$Component);
13401
13402 function Navigation() {
13403 _classCallCheck(this, Navigation);
13404
13405 return _possibleConstructorReturn(this, _getPrototypeOf(Navigation).apply(this, arguments));
13406 }
13407
13408 _createClass(Navigation, [{
13409 key: "render",
13410 value: function render() {
13411 var _this$props = this.props,
13412 children = _this$props.children,
13413 contextControl = _this$props.contextControl,
13414 location = _this$props.location,
13415 onDismiss = _this$props.onDismiss;
13416 var contextControlMarkup = contextControl && React__default.createElement("div", {
13417 className: styles$1d.ContextControl
13418 }, contextControl);
13419 var context = {
13420 location,
13421 onNavigationDismiss: onDismiss
13422 };
13423 return React__default.createElement(NavigationContext.Provider, {
13424 value: context
13425 }, React__default.createElement(WithinContentContext.Provider, {
13426 value: true
13427 }, React__default.createElement("nav", {
13428 className: styles$1d.Navigation
13429 }, contextControlMarkup, React__default.createElement(Scrollable, {
13430 className: styles$1d.PrimaryNavigation
13431 }, children))));
13432 }
13433 }]);
13434
13435 return Navigation;
13436}(React__default.Component);
13437Navigation$1.Item = Item$7;
13438Navigation$1.Section = Section$5;
13439
13440var EditableTarget;
13441
13442(function (EditableTarget) {
13443 EditableTarget["Input"] = "INPUT";
13444 EditableTarget["Textarea"] = "TEXTAREA";
13445 EditableTarget["Select"] = "SELECT";
13446 EditableTarget["ContentEditable"] = "contenteditable";
13447})(EditableTarget || (EditableTarget = {}));
13448
13449function isInputFocused() {
13450 if (document == null || document.activeElement == null) {
13451 return false;
13452 }
13453
13454 var tagName = document.activeElement.tagName;
13455 return tagName === EditableTarget.Input || tagName === EditableTarget.Textarea || tagName === EditableTarget.Select || document.activeElement.hasAttribute(EditableTarget.ContentEditable);
13456}
13457
13458var styles$1e = {
13459 "Tooltip": "Polaris-Tooltip",
13460 "measuring": "Polaris-Tooltip--measuring",
13461 "positionedAbove": "Polaris-Tooltip--positionedAbove",
13462 "light": "Polaris-Tooltip--light",
13463 "Wrapper": "Polaris-Tooltip__Wrapper",
13464 "Content": "Polaris-Tooltip__Content",
13465 "Label": "Polaris-Tooltip__Label"
13466};
13467
13468var TooltipOverlay =
13469/*#__PURE__*/
13470function (_React$PureComponent) {
13471 _inherits(TooltipOverlay, _React$PureComponent);
13472
13473 function TooltipOverlay() {
13474 var _this;
13475
13476 _classCallCheck(this, TooltipOverlay);
13477
13478 _this = _possibleConstructorReturn(this, _getPrototypeOf(TooltipOverlay).apply(this, arguments));
13479
13480 _this.renderOverlay = function () {
13481 var _this$props = _this.props,
13482 active = _this$props.active,
13483 activator = _this$props.activator,
13484 _this$props$preferred = _this$props.preferredPosition,
13485 preferredPosition = _this$props$preferred === void 0 ? 'below' : _this$props$preferred;
13486 return React__default.createElement(PositionedOverlay, {
13487 active: active,
13488 activator: activator,
13489 preferredPosition: preferredPosition,
13490 render: _this.renderTooltip
13491 });
13492 };
13493
13494 _this.renderTooltip = function (overlayDetails) {
13495 var measuring = overlayDetails.measuring,
13496 desiredHeight = overlayDetails.desiredHeight,
13497 positioning = overlayDetails.positioning;
13498 var _this$props2 = _this.props,
13499 id = _this$props2.id,
13500 children = _this$props2.children,
13501 light = _this$props2.light;
13502 var containerClassName = classNames(styles$1e.Tooltip, light && styles$1e.light, measuring && styles$1e.measuring, positioning === 'above' && styles$1e.positionedAbove);
13503 var contentStyles = measuring ? undefined : {
13504 minHeight: desiredHeight
13505 };
13506 return React__default.createElement("div", Object.assign({
13507 className: containerClassName
13508 }, layer.props), React__default.createElement("div", {
13509 className: styles$1e.Wrapper
13510 }, React__default.createElement("div", {
13511 id: id,
13512 role: "tooltip",
13513 className: styles$1e.Content,
13514 style: contentStyles
13515 }, children)));
13516 };
13517
13518 return _this;
13519 }
13520
13521 _createClass(TooltipOverlay, [{
13522 key: "render",
13523 value: function render() {
13524 var markup = this.props.active ? this.renderOverlay() : null;
13525 return markup;
13526 }
13527 }]);
13528
13529 return TooltipOverlay;
13530}(React__default.PureComponent);
13531
13532var getUniqueID$2 = createUniqueIDFactory('TooltipContent');
13533var Tooltip =
13534/*#__PURE__*/
13535function (_React$PureComponent) {
13536 _inherits(Tooltip, _React$PureComponent);
13537
13538 function Tooltip() {
13539 var _this;
13540
13541 _classCallCheck(this, Tooltip);
13542
13543 _this = _possibleConstructorReturn(this, _getPrototypeOf(Tooltip).apply(this, arguments));
13544 _this.state = {
13545 active: Boolean(_this.props.active),
13546 activatorNode: null
13547 };
13548 _this.id = getUniqueID$2();
13549 _this.mouseEntered = false;
13550
13551 _this.setActivator = function (node) {
13552 if (node == null) {
13553 _this.activatorContainer = null;
13554
13555 _this.setState({
13556 activatorNode: null
13557 });
13558
13559 return;
13560 }
13561
13562 _this.setState({
13563 activatorNode: node.firstElementChild
13564 });
13565
13566 _this.activatorContainer = node;
13567 };
13568
13569 _this.handleFocus = function () {
13570 _this.setState({
13571 active: true
13572 });
13573 };
13574
13575 _this.handleBlur = function () {
13576 _this.setState({
13577 active: false
13578 });
13579 };
13580
13581 _this.handleMouseEnter = function () {
13582 _this.mouseEntered = true;
13583
13584 _this.setState({
13585 active: true
13586 });
13587 };
13588
13589 _this.handleMouseLeave = function () {
13590 _this.mouseEntered = false;
13591
13592 _this.setState({
13593 active: false
13594 });
13595 }; // https://github.com/facebook/react/issues/10109
13596 // Mouseenter event not triggered when cursor moves from disabled button
13597
13598
13599 _this.handleMouseEnterFix = function () {
13600 !_this.mouseEntered && _this.handleMouseEnter();
13601 };
13602
13603 return _this;
13604 }
13605
13606 _createClass(Tooltip, [{
13607 key: "componentDidMount",
13608 value: function componentDidMount() {
13609 this.setAccessibilityAttributes();
13610 }
13611 }, {
13612 key: "componentDidUpdate",
13613 value: function componentDidUpdate() {
13614 this.setAccessibilityAttributes();
13615 }
13616 }, {
13617 key: "render",
13618 value: function render() {
13619 var id = this.id;
13620 var _this$props = this.props,
13621 children = _this$props.children,
13622 content = _this$props.content,
13623 light = _this$props.light,
13624 _this$props$preferred = _this$props.preferredPosition,
13625 preferredPosition = _this$props$preferred === void 0 ? 'below' : _this$props$preferred,
13626 _this$props$activator = _this$props.activatorWrapper,
13627 WrapperComponent = _this$props$activator === void 0 ? 'span' : _this$props$activator;
13628 var _this$state = this.state,
13629 active = _this$state.active,
13630 activatorNode = _this$state.activatorNode;
13631 var portal = activatorNode ? React__default.createElement(Portal, {
13632 idPrefix: "tooltip"
13633 }, React__default.createElement(TooltipOverlay, {
13634 id: id,
13635 preferredPosition: preferredPosition,
13636 activator: activatorNode,
13637 active: active,
13638 onClose: noop$9,
13639 light: light
13640 }, React__default.createElement("div", {
13641 className: styles$1e.Label
13642 }, content))) : null;
13643 return React__default.createElement(WrapperComponent, {
13644 onFocus: this.handleFocus,
13645 onBlur: this.handleBlur,
13646 onMouseLeave: this.handleMouseLeave,
13647 onMouseOver: this.handleMouseEnterFix,
13648 ref: this.setActivator
13649 }, children, portal);
13650 }
13651 }, {
13652 key: "setAccessibilityAttributes",
13653 value: function setAccessibilityAttributes() {
13654 var activatorContainer = this.activatorContainer,
13655 id = this.id;
13656
13657 if (activatorContainer == null) {
13658 return;
13659 }
13660
13661 var firstFocusable = findFirstFocusableNode(activatorContainer);
13662 var accessibilityNode = firstFocusable || activatorContainer;
13663 accessibilityNode.tabIndex = 0;
13664 accessibilityNode.setAttribute('aria-describedby', id);
13665 }
13666 }]);
13667
13668 return Tooltip;
13669}(React__default.PureComponent);
13670
13671function noop$9() {}
13672
13673var styles$1f = {
13674 "Pagination": "Polaris-Pagination",
13675 "plain": "Polaris-Pagination--plain",
13676 "Button": "Polaris-Pagination__Button",
13677 "PreviousButton": "Polaris-Pagination__PreviousButton",
13678 "NextButton": "Polaris-Pagination__NextButton",
13679 "Label": "Polaris-Pagination__Label"
13680};
13681
13682function Pagination(_ref) {
13683 var hasNext = _ref.hasNext,
13684 hasPrevious = _ref.hasPrevious,
13685 nextURL = _ref.nextURL,
13686 previousURL = _ref.previousURL,
13687 onNext = _ref.onNext,
13688 onPrevious = _ref.onPrevious,
13689 nextTooltip = _ref.nextTooltip,
13690 previousTooltip = _ref.previousTooltip,
13691 nextKeys = _ref.nextKeys,
13692 previousKeys = _ref.previousKeys,
13693 plain = _ref.plain,
13694 accessibilityLabel = _ref.accessibilityLabel,
13695 label = _ref.label;
13696 var i18n = useI18n();
13697 var node = React__default.createRef();
13698 var navLabel = accessibilityLabel || i18n.translate('Polaris.Pagination.pagination');
13699 var className = classNames(styles$1f.Pagination, plain && styles$1f.plain);
13700 var previousClassName = classNames(styles$1f.Button, !label && styles$1f.PreviousButton);
13701 var nextClassName = classNames(styles$1f.Button, !label && styles$1f.NextButton);
13702 var previousButton = previousURL ? React__default.createElement(UnstyledLink, {
13703 className: previousClassName,
13704 url: previousURL,
13705 onMouseUp: handleMouseUpByBlurring,
13706 "aria-label": i18n.translate('Polaris.Pagination.previous'),
13707 id: "previousURL"
13708 }, React__default.createElement(Icon, {
13709 source: ArrowLeftMinor
13710 })) : React__default.createElement("button", {
13711 onClick: onPrevious,
13712 type: "button",
13713 onMouseUp: handleMouseUpByBlurring,
13714 className: previousClassName,
13715 "aria-label": i18n.translate('Polaris.Pagination.previous'),
13716 disabled: !hasPrevious
13717 }, React__default.createElement(Icon, {
13718 source: ArrowLeftMinor
13719 }));
13720 var nextButton = nextURL ? React__default.createElement(UnstyledLink, {
13721 className: nextClassName,
13722 url: nextURL,
13723 onMouseUp: handleMouseUpByBlurring,
13724 "aria-label": i18n.translate('Polaris.Pagination.next'),
13725 id: "nextURL"
13726 }, React__default.createElement(Icon, {
13727 source: ArrowRightMinor
13728 })) : React__default.createElement("button", {
13729 onClick: onNext,
13730 type: "button",
13731 onMouseUp: handleMouseUpByBlurring,
13732 className: nextClassName,
13733 "aria-label": i18n.translate('Polaris.Pagination.next'),
13734 disabled: !hasNext
13735 }, React__default.createElement(Icon, {
13736 source: ArrowRightMinor
13737 }));
13738 var constructedPrevious = previousTooltip && hasPrevious ? React__default.createElement(Tooltip, {
13739 content: previousTooltip
13740 }, previousButton) : previousButton;
13741 var constructedNext = nextTooltip && hasNext ? React__default.createElement(Tooltip, {
13742 content: nextTooltip
13743 }, nextButton) : nextButton;
13744 var previousButtonEvents = previousKeys && (previousURL || onPrevious) && hasPrevious && previousKeys.map(function (key) {
13745 return React__default.createElement(KeypressListener, {
13746 key: key,
13747 keyCode: key,
13748 handler: previousURL ? handleCallback(clickPaginationLink('previousURL', node)) : handleCallback(onPrevious)
13749 });
13750 });
13751 var nextButtonEvents = nextKeys && (nextURL || onNext) && hasNext && nextKeys.map(function (key) {
13752 return React__default.createElement(KeypressListener, {
13753 key: key,
13754 keyCode: key,
13755 handler: nextURL ? handleCallback(clickPaginationLink('nextURL', node)) : handleCallback(onNext)
13756 });
13757 });
13758 var labelTextMarkup = hasNext && hasPrevious ? React__default.createElement(TextStyle, null, label) : React__default.createElement(TextStyle, {
13759 variation: "subdued"
13760 }, label);
13761 var labelMarkup = label ? React__default.createElement("div", {
13762 className: styles$1f.Label,
13763 "aria-live": "polite"
13764 }, labelTextMarkup) : null;
13765 return React__default.createElement("nav", {
13766 className: className,
13767 "aria-label": navLabel,
13768 ref: node
13769 }, previousButtonEvents, constructedPrevious, labelMarkup, nextButtonEvents, constructedNext);
13770}
13771
13772function clickPaginationLink(id, node) {
13773 return function () {
13774 if (node.current == null) {
13775 return;
13776 }
13777
13778 var link = node.current.querySelector("#".concat(id));
13779
13780 if (link) {
13781 link.click();
13782 }
13783 };
13784}
13785
13786function handleCallback(fn) {
13787 return function () {
13788 if (isInputFocused()) {
13789 return;
13790 }
13791
13792 fn();
13793 };
13794}
13795
13796var styles$1g = {
13797 "Title": "Polaris-Header-Title",
13798 "SubTitle": "Polaris-Header-Title__SubTitle",
13799 "hasThumbnail": "Polaris-Header-Title--hasThumbnail",
13800 "TitleAndSubtitleWrapper": "Polaris-Header-Title__TitleAndSubtitleWrapper",
13801 "TitleWithMetadataWrapper": "Polaris-Header-Title__TitleWithMetadataWrapper",
13802 "TitleMetadata": "Polaris-Header-Title__TitleMetadata"
13803};
13804
13805function Title(_ref) {
13806 var title = _ref.title,
13807 subtitle = _ref.subtitle,
13808 titleMetadata = _ref.titleMetadata,
13809 thumbnail = _ref.thumbnail;
13810 var titleMarkup = title ? createElement("div", {
13811 className: styles$1g.Title
13812 }, createElement(DisplayText, {
13813 size: "large",
13814 element: "h1"
13815 }, title)) : null;
13816 var titleMetadataMarkup = titleMetadata ? createElement("div", {
13817 className: styles$1g.TitleMetadata
13818 }, titleMetadata) : null;
13819 var wrappedTitleMarkup = titleMetadata ? createElement("div", {
13820 className: styles$1g.TitleWithMetadataWrapper
13821 }, titleMarkup, titleMetadataMarkup) : titleMarkup;
13822 var subtitleMarkup = subtitle ? createElement("div", {
13823 className: styles$1g.SubTitle
13824 }, createElement("p", null, subtitle)) : null;
13825 var thumbnailMarkup = thumbnail ? createElement("div", null, thumbnail) : null;
13826 var pageTitleClassName = thumbnail ? classNames(styles$1g.hasThumbnail) : undefined;
13827 return createElement("div", {
13828 className: pageTitleClassName
13829 }, thumbnailMarkup, createElement("div", {
13830 className: styles$1g.TitleAndSubtitleWrapper
13831 }, wrappedTitleMarkup, subtitleMarkup));
13832}
13833
13834var styles$1h = {
13835 "Header": "Polaris-Page-Header",
13836 "separator": "Polaris-Page-Header--separator",
13837 "titleHidden": "Polaris-Page-Header--titleHidden",
13838 "Navigation": "Polaris-Page-Header__Navigation",
13839 "hasActionMenu": "Polaris-Page-Header--hasActionMenu",
13840 "mobileView": "Polaris-Page-Header--mobileView",
13841 "BreadcrumbWrapper": "Polaris-Page-Header__BreadcrumbWrapper",
13842 "PaginationWrapper": "Polaris-Page-Header__PaginationWrapper",
13843 "MainContent": "Polaris-Page-Header__MainContent",
13844 "TitleActionMenuWrapper": "Polaris-Page-Header__TitleActionMenuWrapper",
13845 "hasNavigation": "Polaris-Page-Header--hasNavigation",
13846 "PrimaryActionWrapper": "Polaris-Page-Header__PrimaryActionWrapper",
13847 "ActionMenuWrapper": "Polaris-Page-Header__ActionMenuWrapper"
13848};
13849
13850function Header$2(_ref) {
13851 var title = _ref.title,
13852 subtitle = _ref.subtitle,
13853 titleMetadata = _ref.titleMetadata,
13854 thumbnail = _ref.thumbnail,
13855 _ref$titleHidden = _ref.titleHidden,
13856 titleHidden = _ref$titleHidden === void 0 ? false : _ref$titleHidden,
13857 separator = _ref.separator,
13858 primaryAction = _ref.primaryAction,
13859 pagination = _ref.pagination,
13860 _ref$breadcrumbs = _ref.breadcrumbs,
13861 breadcrumbs = _ref$breadcrumbs === void 0 ? [] : _ref$breadcrumbs,
13862 _ref$secondaryActions = _ref.secondaryActions,
13863 secondaryActions = _ref$secondaryActions === void 0 ? [] : _ref$secondaryActions,
13864 _ref$actionGroups = _ref.actionGroups,
13865 actionGroups = _ref$actionGroups === void 0 ? [] : _ref$actionGroups;
13866
13867 var _useMediaQuery = useMediaQuery(),
13868 isNavigationCollapsed = _useMediaQuery.isNavigationCollapsed;
13869
13870 var breadcrumbMarkup = breadcrumbs.length > 0 ? React__default.createElement("div", {
13871 className: styles$1h.BreadcrumbWrapper
13872 }, React__default.createElement(Breadcrumbs, {
13873 breadcrumbs: breadcrumbs
13874 })) : null;
13875 var paginationMarkup = pagination && !isNavigationCollapsed ? React__default.createElement("div", {
13876 className: styles$1h.PaginationWrapper
13877 }, React__default.createElement(Pagination, Object.assign({}, pagination, {
13878 plain: true
13879 }))) : null;
13880 var navigationMarkup = breadcrumbMarkup || paginationMarkup ? React__default.createElement("div", {
13881 className: styles$1h.Navigation
13882 }, breadcrumbMarkup, paginationMarkup) : null;
13883 var pageTitleMarkup = React__default.createElement(Title, {
13884 title: title,
13885 subtitle: subtitle,
13886 titleMetadata: titleMetadata,
13887 thumbnail: thumbnail
13888 });
13889 var primary = primaryAction && (primaryAction.primary === undefined ? true : primaryAction.primary);
13890 var primaryActionMarkup = primaryAction ? React__default.createElement("div", {
13891 className: styles$1h.PrimaryActionWrapper
13892 }, buttonsFrom(primaryAction, {
13893 primary
13894 })) : null;
13895 var actionMenuMarkup = secondaryActions.length > 0 || hasGroupsWithActions(actionGroups) ? React__default.createElement("div", {
13896 className: styles$1h.ActionMenuWrapper
13897 }, React__default.createElement(ActionMenu, {
13898 actions: secondaryActions,
13899 groups: actionGroups,
13900 rollup: isNavigationCollapsed
13901 })) : null;
13902 var headerClassNames = classNames(styles$1h.Header, titleHidden && styles$1h.titleHidden, separator && styles$1h.separator, navigationMarkup && styles$1h.hasNavigation, actionMenuMarkup && styles$1h.hasActionMenu, isNavigationCollapsed && styles$1h.mobileView);
13903 return React__default.createElement("div", {
13904 className: headerClassNames
13905 }, navigationMarkup, React__default.createElement("div", {
13906 className: styles$1h.MainContent
13907 }, React__default.createElement("div", {
13908 className: styles$1h.TitleActionMenuWrapper
13909 }, pageTitleMarkup, actionMenuMarkup), primaryActionMarkup));
13910}
13911
13912var styles$1i = {
13913 "Page": "Polaris-Page",
13914 "fullWidth": "Polaris-Page--fullWidth",
13915 "narrowWidth": "Polaris-Page--narrowWidth",
13916 "Content": "Polaris-Page__Content"
13917};
13918
13919var APP_BRIDGE_PROPS$1 = ['title', 'breadcrumbs', 'secondaryActions', 'actionGroups', 'primaryAction'];
13920
13921var Page =
13922/*#__PURE__*/
13923function (_React$PureComponent) {
13924 _inherits(Page, _React$PureComponent);
13925
13926 function Page() {
13927 _classCallCheck(this, Page);
13928
13929 return _possibleConstructorReturn(this, _getPrototypeOf(Page).apply(this, arguments));
13930 }
13931
13932 _createClass(Page, [{
13933 key: "componentDidMount",
13934 value: function componentDidMount() {
13935 if (this.delegateToAppbridge === false || !this.props.polaris.appBridge) {
13936 return;
13937 }
13938
13939 var transformedProps = this.transformProps();
13940 if (!transformedProps) return; // eslint-disable-next-line no-console
13941
13942 console.warn('Deprecation: Using `Page` to render an embedded app title bar is deprecated and will be removed in v5.0. Use `TitleBar` from `@shopify/app-bridge-react` instead: https://help.shopify.com/en/api/embedded-apps/app-bridge/react-components/titlebar');
13943 this.titlebar = TitleBar.create(this.props.polaris.appBridge, transformedProps);
13944 }
13945 }, {
13946 key: "componentDidUpdate",
13947 value: function componentDidUpdate(prevProps) {
13948 if (this.titlebar == null || this.delegateToAppbridge === false) {
13949 return;
13950 }
13951
13952 var prevAppBridgeProps = pick(prevProps, APP_BRIDGE_PROPS$1);
13953 var currentAppBridgeProps = pick(this.props, APP_BRIDGE_PROPS$1);
13954
13955 if (!isEqual(prevAppBridgeProps, currentAppBridgeProps)) {
13956 var transformedProps = this.transformProps();
13957 if (!transformedProps) return;
13958 this.titlebar.unsubscribe();
13959 this.titlebar.set(transformedProps);
13960 }
13961 }
13962 }, {
13963 key: "componentWillUnmount",
13964 value: function componentWillUnmount() {
13965 if (this.titlebar == null || this.delegateToAppbridge === false) {
13966 return;
13967 }
13968
13969 this.titlebar.unsubscribe();
13970 }
13971 }, {
13972 key: "render",
13973 value: function render() {
13974 var _a = this.props,
13975 children = _a.children,
13976 fullWidth = _a.fullWidth,
13977 narrowWidth = _a.narrowWidth,
13978 singleColumn = _a.singleColumn,
13979 rest = __rest(_a, ["children", "fullWidth", "narrowWidth", "singleColumn"]);
13980
13981 if (singleColumn) {
13982 // eslint-disable-next-line no-console
13983 console.warn('Deprecation: The singleColumn prop has been renamed to narrowWidth to better represents its use and will be removed in v5.0.');
13984 }
13985
13986 var className = classNames(styles$1i.Page, fullWidth && styles$1i.fullWidth, (narrowWidth || singleColumn) && styles$1i.narrowWidth);
13987 var headerMarkup = this.delegateToAppbridge || this.hasHeaderContent() === false ? null : React__default.createElement(Header$2, rest);
13988 return React__default.createElement("div", {
13989 className: className
13990 }, headerMarkup, React__default.createElement("div", {
13991 className: styles$1i.Content
13992 }, children));
13993 }
13994 }, {
13995 key: "hasHeaderContent",
13996 value: function hasHeaderContent() {
13997 var _this$props = this.props,
13998 title = _this$props.title,
13999 primaryAction = _this$props.primaryAction,
14000 secondaryActions = _this$props.secondaryActions,
14001 actionGroups = _this$props.actionGroups,
14002 breadcrumbs = _this$props.breadcrumbs;
14003 return title != null && title !== '' || primaryAction != null || secondaryActions != null && secondaryActions.length > 0 || actionGroups != null && actionGroups.length > 0 || breadcrumbs != null && breadcrumbs.length > 0;
14004 }
14005 }, {
14006 key: "transformProps",
14007 value: function transformProps() {
14008 var appBridge = this.props.polaris.appBridge;
14009 if (!appBridge) return;
14010 var _this$props2 = this.props,
14011 title = _this$props2.title,
14012 primaryAction = _this$props2.primaryAction,
14013 secondaryActions = _this$props2.secondaryActions,
14014 actionGroups = _this$props2.actionGroups;
14015 return {
14016 title,
14017 buttons: transformActions(appBridge, {
14018 primaryAction,
14019 secondaryActions,
14020 actionGroups
14021 }),
14022 breadcrumbs: this.transformBreadcrumbs()
14023 };
14024 }
14025 }, {
14026 key: "transformBreadcrumbs",
14027 value: function transformBreadcrumbs() {
14028 var appBridge = this.props.polaris.appBridge;
14029 if (!appBridge) return;
14030 var breadcrumbs = this.props.breadcrumbs;
14031
14032 if (breadcrumbs != null && breadcrumbs.length > 0) {
14033 var breadcrumb = breadcrumbs[breadcrumbs.length - 1];
14034 var button = Button$1.create(appBridge, {
14035 label: breadcrumb.content || ''
14036 });
14037 var callback = !('url' in breadcrumb) ? breadcrumb.onAction : generateRedirect(appBridge, breadcrumb.url, breadcrumb.target);
14038
14039 if (callback != null) {
14040 button.subscribe(Button$1.Action.CLICK, callback);
14041 }
14042
14043 return button;
14044 } else {
14045 return undefined;
14046 }
14047 }
14048 }, {
14049 key: "delegateToAppbridge",
14050 get: function get() {
14051 var _this$props3 = this.props,
14052 appBridge = _this$props3.polaris.appBridge,
14053 _this$props3$forceRen = _this$props3.forceRender,
14054 forceRender = _this$props3$forceRen === void 0 ? false : _this$props3$forceRen;
14055 return appBridge != null && forceRender === false;
14056 }
14057 }]);
14058
14059 return Page;
14060}(React__default.PureComponent); // Use named export once withAppProvider is refactored away
14061// eslint-disable-next-line import/no-default-export
14062
14063
14064var Page$1 = withAppProvider()(Page);
14065
14066var styles$1j = {
14067 "PageActions": "Polaris-PageActions"
14068};
14069
14070function PageActions(_ref) {
14071 var primaryAction = _ref.primaryAction,
14072 secondaryActions = _ref.secondaryActions;
14073 var primaryActionMarkup = primaryAction ? buttonsFrom(primaryAction, {
14074 primary: true
14075 }) : null;
14076 var secondaryActionsMarkup = secondaryActions ? React__default.createElement(ButtonGroup, null, buttonsFrom(secondaryActions)) : null;
14077 var distribution = secondaryActionsMarkup ? 'equalSpacing' : 'trailing';
14078 return React__default.createElement("div", {
14079 className: styles$1j.PageActions
14080 }, React__default.createElement(Stack, {
14081 distribution: distribution,
14082 spacing: "tight"
14083 }, secondaryActionsMarkup, primaryActionMarkup));
14084}
14085
14086var defaultMediaQuery = {
14087 isNavigationCollapsed: false
14088};
14089function PolarisTestProvider(_ref) {
14090 var strict = _ref.strict,
14091 children = _ref.children,
14092 i18n = _ref.i18n,
14093 appBridge = _ref.appBridge,
14094 link = _ref.link,
14095 _ref$theme = _ref.theme,
14096 theme = _ref$theme === void 0 ? {} : _ref$theme,
14097 mediaQuery = _ref.mediaQuery,
14098 _ref$features = _ref.features,
14099 features = _ref$features === void 0 ? {} : _ref$features,
14100 frame = _ref.frame;
14101 var Wrapper = strict ? React__default.StrictMode : React__default.Fragment;
14102 var intl = new I18n(i18n || {});
14103 var scrollLockManager = new ScrollLockManager();
14104 var stickyManager = new StickyManager();
14105 var uniqueIdFactory = new UniqueIdFactory(globalIdGeneratorFactory); // This typing is odd, but as appBridge is deprecated and going away in v5
14106 // I'm not that worried about it
14107
14108 var appBridgeApp = appBridge;
14109 var _features$unstableGlo = features.unstableGlobalTheming,
14110 unstableGlobalTheming = _features$unstableGlo === void 0 ? false : _features$unstableGlo;
14111 var customProperties = unstableGlobalTheming ? buildCustomProperties(theme, unstableGlobalTheming) : undefined;
14112 var mergedTheme = buildThemeContext(theme, customProperties);
14113 var mergedFrame = createFrameContext(frame);
14114 var mergedMediaQuery = merge(defaultMediaQuery, mediaQuery);
14115 return React__default.createElement(Wrapper, null, React__default.createElement(FeaturesContext.Provider, {
14116 value: features
14117 }, React__default.createElement(I18nContext.Provider, {
14118 value: intl
14119 }, React__default.createElement(ScrollLockManagerContext.Provider, {
14120 value: scrollLockManager
14121 }, React__default.createElement(StickyManagerContext.Provider, {
14122 value: stickyManager
14123 }, React__default.createElement(UniqueIdFactoryContext.Provider, {
14124 value: uniqueIdFactory
14125 }, React__default.createElement(AppBridgeContext.Provider, {
14126 value: appBridgeApp
14127 }, React__default.createElement(LinkContext.Provider, {
14128 value: link
14129 }, React__default.createElement(ThemeContext.Provider, {
14130 value: mergedTheme
14131 }, React__default.createElement(MediaQueryContext.Provider, {
14132 value: mergedMediaQuery
14133 }, React__default.createElement(FrameContext.Provider, {
14134 value: mergedFrame
14135 }, children)))))))))));
14136}
14137
14138function noop$a() {}
14139
14140function createFrameContext() {
14141 var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
14142 _ref2$showToast = _ref2.showToast,
14143 showToast = _ref2$showToast === void 0 ? noop$a : _ref2$showToast,
14144 _ref2$hideToast = _ref2.hideToast,
14145 hideToast = _ref2$hideToast === void 0 ? noop$a : _ref2$hideToast,
14146 _ref2$setContextualSa = _ref2.setContextualSaveBar,
14147 setContextualSaveBar = _ref2$setContextualSa === void 0 ? noop$a : _ref2$setContextualSa,
14148 _ref2$removeContextua = _ref2.removeContextualSaveBar,
14149 removeContextualSaveBar = _ref2$removeContextua === void 0 ? noop$a : _ref2$removeContextua,
14150 _ref2$startLoading = _ref2.startLoading,
14151 startLoading = _ref2$startLoading === void 0 ? noop$a : _ref2$startLoading,
14152 _ref2$stopLoading = _ref2.stopLoading,
14153 stopLoading = _ref2$stopLoading === void 0 ? noop$a : _ref2$stopLoading;
14154
14155 return {
14156 showToast,
14157 hideToast,
14158 setContextualSaveBar,
14159 removeContextualSaveBar,
14160 startLoading,
14161 stopLoading
14162 };
14163}
14164
14165var styles$1k = {
14166 "ProgressBar": "Polaris-ProgressBar",
14167 "sizeSmall": "Polaris-ProgressBar--sizeSmall",
14168 "sizeMedium": "Polaris-ProgressBar--sizeMedium",
14169 "sizeLarge": "Polaris-ProgressBar--sizeLarge",
14170 "Indicator": "Polaris-ProgressBar__Indicator",
14171 "fillup": "Polaris-ProgressBar--fillup",
14172 "Progress": "Polaris-ProgressBar__Progress",
14173 "Label": "Polaris-ProgressBar__Label"
14174};
14175
14176function ProgressBar(_ref) {
14177 var _ref$progress = _ref.progress,
14178 progress = _ref$progress === void 0 ? 0 : _ref$progress,
14179 _ref$size = _ref.size,
14180 size = _ref$size === void 0 ? 'medium' : _ref$size;
14181 var i18n = useI18n();
14182 var className = classNames(styles$1k.ProgressBar, size && styles$1k[variationName('size', size)]);
14183 var warningMessage = i18n.translate(progress < 0 ? 'Polaris.ProgressBar.negativeWarningMessage' : 'Polaris.ProgressBar.exceedWarningMessage', {
14184 progress
14185 });
14186 var parsedProgress = parseProgress(progress, warningMessage);
14187 return React__default.createElement("div", {
14188 className: className
14189 }, React__default.createElement("progress", {
14190 className: styles$1k.Progress,
14191 value: parsedProgress,
14192 max: "100"
14193 }), React__default.createElement("div", {
14194 className: styles$1k.Indicator,
14195 style: {
14196 width: "".concat(parsedProgress, "%")
14197 }
14198 }, React__default.createElement("span", {
14199 className: styles$1k.Label
14200 }, parsedProgress, "%")));
14201}
14202
14203function parseProgress(progress, warningMessage) {
14204 var progressWidth;
14205
14206 if (progress < 0) {
14207 if (process.env.NODE_ENV === 'development') {
14208 // eslint-disable-next-line no-console
14209 console.warn(warningMessage);
14210 }
14211
14212 progressWidth = 0;
14213 } else if (progress > 100) {
14214 if (process.env.NODE_ENV === 'development') {
14215 // eslint-disable-next-line no-console
14216 console.warn(warningMessage);
14217 }
14218
14219 progressWidth = 100;
14220 } else {
14221 progressWidth = progress;
14222 }
14223
14224 return progressWidth;
14225}
14226
14227function invertNumber(number) {
14228 if (Math.sign(number) === 1) {
14229 return -Math.abs(number);
14230 } else if (Math.sign(number) === -1) {
14231 return Math.abs(number);
14232 } else {
14233 return 0;
14234 }
14235}
14236
14237var CSS_VAR_PREFIX = '--Polaris-RangeSlider-';
14238var RangeSliderDefault;
14239
14240(function (RangeSliderDefault) {
14241 RangeSliderDefault[RangeSliderDefault["Min"] = 0] = "Min";
14242 RangeSliderDefault[RangeSliderDefault["Max"] = 100] = "Max";
14243 RangeSliderDefault[RangeSliderDefault["Step"] = 1] = "Step";
14244})(RangeSliderDefault || (RangeSliderDefault = {}));
14245
14246var styles$1l = {
14247 "Wrapper": "Polaris-RangeSlider-DualThumb__Wrapper",
14248 "TrackWrapper": "Polaris-RangeSlider-DualThumb__TrackWrapper",
14249 "disabled": "Polaris-RangeSlider-DualThumb--disabled",
14250 "Track": "Polaris-RangeSlider-DualThumb__Track",
14251 "error": "Polaris-RangeSlider-DualThumb--error",
14252 "Thumbs": "Polaris-RangeSlider-DualThumb__Thumbs",
14253 "Prefix": "Polaris-RangeSlider-DualThumb__Prefix",
14254 "Suffix": "Polaris-RangeSlider-DualThumb__Suffix",
14255 "Output": "Polaris-RangeSlider-DualThumb__Output",
14256 "OutputBubble": "Polaris-RangeSlider-DualThumb__OutputBubble",
14257 "OutputText": "Polaris-RangeSlider-DualThumb__OutputText"
14258};
14259
14260var Control;
14261
14262(function (Control) {
14263 Control[Control["Lower"] = 0] = "Lower";
14264 Control[Control["Upper"] = 1] = "Upper";
14265})(Control || (Control = {}));
14266
14267var THUMB_SIZE = 24;
14268var DualThumb =
14269/*#__PURE__*/
14270function (_React$Component) {
14271 _inherits(DualThumb, _React$Component);
14272
14273 function DualThumb() {
14274 var _this;
14275
14276 _classCallCheck(this, DualThumb);
14277
14278 _this = _possibleConstructorReturn(this, _getPrototypeOf(DualThumb).apply(this, arguments));
14279 _this.state = {
14280 value: sanitizeValue(_this.props.value, _this.props.min, _this.props.max, _this.props.step),
14281 trackWidth: 0,
14282 trackLeft: 0
14283 };
14284 _this.track = React__default.createRef();
14285 _this.trackWrapper = React__default.createRef();
14286 _this.thumbLower = React__default.createRef();
14287 _this.thumbUpper = React__default.createRef();
14288 _this.setTrackPosition = debounce(function () {
14289 if (_this.track.current) {
14290 var _this$track$current$g = _this.track.current.getBoundingClientRect(),
14291 width = _this$track$current$g.width,
14292 left = _this$track$current$g.left;
14293
14294 var adjustedTrackWidth = width - THUMB_SIZE;
14295 var adjustedTrackLeft = left + THUMB_SIZE / 2;
14296
14297 _this.setState({
14298 trackWidth: adjustedTrackWidth,
14299 trackLeft: adjustedTrackLeft
14300 });
14301 }
14302 }, 40, {
14303 leading: true,
14304 trailing: true,
14305 maxWait: 40
14306 });
14307
14308 _this.handleMouseDownThumbLower = function (event) {
14309 if (event.button !== 0 || _this.props.disabled) return;
14310 registerMouseMoveHandler(_this.handleMouseMoveThumbLower);
14311 event.stopPropagation();
14312 };
14313
14314 _this.handleMouseMoveThumbLower = function (event) {
14315 var valueUpper = _this.state.value[1];
14316
14317 _this.setValue([_this.actualXPosition(event.clientX), valueUpper], Control.Upper);
14318 };
14319
14320 _this.handleTouchStartThumbLower = function (event) {
14321 if (_this.props.disabled) return;
14322 registerTouchMoveHandler(_this.handleTouchMoveThumbLower);
14323 event.stopPropagation();
14324 };
14325
14326 _this.handleTouchMoveThumbLower = function (event) {
14327 event.preventDefault();
14328 var valueUpper = _this.state.value[1];
14329
14330 _this.setValue([_this.actualXPosition(event.touches[0].clientX), valueUpper], Control.Upper);
14331 };
14332
14333 _this.handleMouseDownThumbUpper = function (event) {
14334 if (event.button !== 0 || _this.props.disabled) return;
14335 registerMouseMoveHandler(_this.handleMouseMoveThumbUpper);
14336 event.stopPropagation();
14337 };
14338
14339 _this.handleMouseMoveThumbUpper = function (event) {
14340 var valueLower = _this.state.value[0];
14341
14342 _this.setValue([valueLower, _this.actualXPosition(event.clientX)], Control.Lower);
14343 };
14344
14345 _this.handleTouchStartThumbUpper = function (event) {
14346 if (_this.props.disabled) return;
14347 registerTouchMoveHandler(_this.handleTouchMoveThumbUpper);
14348 event.stopPropagation();
14349 };
14350
14351 _this.handleTouchMoveThumbUpper = function (event) {
14352 event.preventDefault();
14353 var valueLower = _this.state.value[0];
14354
14355 _this.setValue([valueLower, _this.actualXPosition(event.touches[0].clientX)], Control.Lower);
14356 };
14357
14358 _this.handleKeypressLower = function (event) {
14359 if (_this.props.disabled) return;
14360
14361 var _assertThisInitialize = _assertThisInitialized(_this),
14362 incrementValueLower = _assertThisInitialize.incrementValueLower,
14363 decrementValueLower = _assertThisInitialize.decrementValueLower;
14364
14365 var handlerMap = {
14366 [Key.UpArrow]: incrementValueLower,
14367 [Key.RightArrow]: incrementValueLower,
14368 [Key.DownArrow]: decrementValueLower,
14369 [Key.LeftArrow]: decrementValueLower
14370 };
14371 var handler = handlerMap[event.keyCode];
14372
14373 if (handler != null) {
14374 event.preventDefault();
14375 event.stopPropagation();
14376 handler();
14377 }
14378 };
14379
14380 _this.handleKeypressUpper = function (event) {
14381 if (_this.props.disabled) return;
14382
14383 var _assertThisInitialize2 = _assertThisInitialized(_this),
14384 incrementValueUpper = _assertThisInitialize2.incrementValueUpper,
14385 decrementValueUpper = _assertThisInitialize2.decrementValueUpper;
14386
14387 var handlerMap = {
14388 [Key.UpArrow]: incrementValueUpper,
14389 [Key.RightArrow]: incrementValueUpper,
14390 [Key.DownArrow]: decrementValueUpper,
14391 [Key.LeftArrow]: decrementValueUpper
14392 };
14393 var handler = handlerMap[event.keyCode];
14394
14395 if (handler != null) {
14396 event.preventDefault();
14397 event.stopPropagation();
14398 handler();
14399 }
14400 };
14401
14402 _this.incrementValueLower = function () {
14403 _this.setValue([_this.state.value[0] + _this.props.step, _this.state.value[1]], Control.Upper);
14404 };
14405
14406 _this.decrementValueLower = function () {
14407 _this.setValue([_this.state.value[0] - _this.props.step, _this.state.value[1]], Control.Upper);
14408 };
14409
14410 _this.incrementValueUpper = function () {
14411 _this.setValue([_this.state.value[0], _this.state.value[1] + _this.props.step], Control.Lower);
14412 };
14413
14414 _this.decrementValueUpper = function () {
14415 _this.setValue([_this.state.value[0], _this.state.value[1] - _this.props.step], Control.Lower);
14416 };
14417
14418 _this.dispatchValue = function () {
14419 var _this$props = _this.props,
14420 onChange = _this$props.onChange,
14421 id = _this$props.id;
14422 var value = _this.state.value;
14423 onChange(value, id);
14424 };
14425
14426 _this.setValue = function (dirtyValue, control) {
14427 var _assertThisInitialize3 = _assertThisInitialized(_this),
14428 _assertThisInitialize4 = _assertThisInitialize3.props,
14429 min = _assertThisInitialize4.min,
14430 max = _assertThisInitialize4.max,
14431 step = _assertThisInitialize4.step,
14432 value = _assertThisInitialize3.state.value;
14433
14434 var sanitizedValue = sanitizeValue(dirtyValue, min, max, step, control);
14435
14436 if (isEqual(sanitizedValue, value) === false) {
14437 _this.setState({
14438 value: sanitizedValue
14439 }, _this.dispatchValue);
14440 }
14441 };
14442
14443 _this.handleMouseDownTrack = function (event) {
14444 if (event.button !== 0 || _this.props.disabled) return;
14445 event.preventDefault();
14446
14447 var clickXPosition = _this.actualXPosition(event.clientX);
14448
14449 var value = _this.state.value;
14450 var distanceFromLowerThumb = Math.abs(value[0] - clickXPosition);
14451 var distanceFromUpperThumb = Math.abs(value[1] - clickXPosition);
14452
14453 if (distanceFromLowerThumb <= distanceFromUpperThumb) {
14454 _this.setValue([clickXPosition, value[1]], Control.Upper);
14455
14456 registerMouseMoveHandler(_this.handleMouseMoveThumbLower);
14457
14458 if (_this.thumbLower.current != null) {
14459 _this.thumbLower.current.focus();
14460 }
14461 } else {
14462 _this.setValue([value[0], clickXPosition], Control.Lower);
14463
14464 registerMouseMoveHandler(_this.handleMouseMoveThumbUpper);
14465
14466 if (_this.thumbUpper.current != null) {
14467 _this.thumbUpper.current.focus();
14468 }
14469 }
14470 };
14471
14472 _this.handleTouchStartTrack = function (event) {
14473 if (_this.props.disabled) return;
14474 event.preventDefault();
14475
14476 var clickXPosition = _this.actualXPosition(event.touches[0].clientX);
14477
14478 var value = _this.state.value;
14479 var distanceFromLowerThumb = Math.abs(value[0] - clickXPosition);
14480 var distanceFromUpperThumb = Math.abs(value[1] - clickXPosition);
14481
14482 if (distanceFromLowerThumb <= distanceFromUpperThumb) {
14483 _this.setValue([clickXPosition, value[1]], Control.Upper);
14484
14485 registerTouchMoveHandler(_this.handleTouchMoveThumbLower);
14486
14487 if (_this.thumbLower.current != null) {
14488 _this.thumbLower.current.focus();
14489 }
14490 } else {
14491 _this.setValue([value[0], clickXPosition], Control.Lower);
14492
14493 registerTouchMoveHandler(_this.handleTouchMoveThumbUpper);
14494
14495 if (_this.thumbUpper.current != null) {
14496 _this.thumbUpper.current.focus();
14497 }
14498 }
14499 };
14500
14501 _this.actualXPosition = function (dirtyXPosition) {
14502 if (_this.track.current) {
14503 var _this$props2 = _this.props,
14504 min = _this$props2.min,
14505 max = _this$props2.max;
14506 var _this$state = _this.state,
14507 trackLeft = _this$state.trackLeft,
14508 trackWidth = _this$state.trackWidth;
14509 var relativeX = dirtyXPosition - trackLeft;
14510 var percentageOfTrack = relativeX / trackWidth;
14511 return percentageOfTrack * (max - min);
14512 } else {
14513 return 0;
14514 }
14515 };
14516
14517 return _this;
14518 }
14519
14520 _createClass(DualThumb, [{
14521 key: "componentDidMount",
14522 value: function componentDidMount() {
14523 this.setTrackPosition();
14524
14525 if (this.trackWrapper.current != null) {
14526 addEventListener(this.trackWrapper.current, 'touchstart', this.handleTouchStartTrack, {
14527 passive: false
14528 });
14529 }
14530 }
14531 }, {
14532 key: "componentWillUnmount",
14533 value: function componentWillUnmount() {
14534 if (this.trackWrapper.current != null) {
14535 removeEventListener(this.trackWrapper.current, 'touchstart', this.handleTouchStartTrack);
14536 }
14537 }
14538 }, {
14539 key: "render",
14540 value: function render() {
14541 var _this$props3 = this.props,
14542 id = _this$props3.id,
14543 min = _this$props3.min,
14544 max = _this$props3.max,
14545 prefix = _this$props3.prefix,
14546 suffix = _this$props3.suffix,
14547 disabled = _this$props3.disabled,
14548 output = _this$props3.output,
14549 error = _this$props3.error,
14550 onFocus = _this$props3.onFocus,
14551 onBlur = _this$props3.onBlur,
14552 label = _this$props3.label,
14553 labelAction = _this$props3.labelAction,
14554 labelHidden = _this$props3.labelHidden,
14555 helpText = _this$props3.helpText;
14556 var value = this.state.value;
14557 var idLower = id;
14558 var idUpper = "".concat(id, "Upper");
14559 var describedBy = [];
14560
14561 if (error) {
14562 describedBy.push("".concat(id, "Error"));
14563 }
14564
14565 var ariaDescribedBy = describedBy.length ? describedBy.join(' ') : undefined;
14566 var trackWrapperClassName = classNames(styles$1l.TrackWrapper, error && styles$1l.error, disabled && styles$1l.disabled);
14567 var thumbLowerClassName = classNames(styles$1l.Thumbs, styles$1l.ThumbLower, disabled && styles$1l.disabled);
14568 var thumbUpperClassName = classNames(styles$1l.Thumbs, styles$1l.ThumbUpper, disabled && styles$1l.disabled);
14569 var trackWidth = this.state.trackWidth;
14570 var range = max - min;
14571 var leftPositionThumbLower = value[0] / range * trackWidth;
14572 var leftPositionThumbUpper = value[1] / range * trackWidth;
14573 var outputLowerClassName = classNames(styles$1l.Output, styles$1l.OutputLower);
14574 var outputMarkupLower = !disabled && output ? React__default.createElement("output", {
14575 htmlFor: idLower,
14576 className: outputLowerClassName,
14577 style: {
14578 left: "".concat(leftPositionThumbLower, "px")
14579 }
14580 }, React__default.createElement("div", {
14581 className: styles$1l.OutputBubble
14582 }, React__default.createElement("span", {
14583 className: styles$1l.OutputText
14584 }, value[0]))) : null;
14585 var outputUpperClassName = classNames(styles$1l.Output, styles$1l.OutputUpper);
14586 var outputMarkupUpper = !disabled && output ? React__default.createElement("output", {
14587 htmlFor: idUpper,
14588 className: outputUpperClassName,
14589 style: {
14590 left: "".concat(leftPositionThumbUpper, "px")
14591 }
14592 }, React__default.createElement("div", {
14593 className: styles$1l.OutputBubble
14594 }, React__default.createElement("span", {
14595 className: styles$1l.OutputText
14596 }, value[1]))) : null;
14597 var cssVars = {
14598 ["".concat(CSS_VAR_PREFIX, "progress-lower")]: "".concat(leftPositionThumbLower, "px"),
14599 ["".concat(CSS_VAR_PREFIX, "progress-upper")]: "".concat(leftPositionThumbUpper, "px")
14600 };
14601 var prefixMarkup = prefix && React__default.createElement("div", {
14602 className: styles$1l.Prefix
14603 }, prefix);
14604 var suffixMarkup = suffix && React__default.createElement("div", {
14605 className: styles$1l.Suffix
14606 }, suffix);
14607 return React__default.createElement(React__default.Fragment, null, React__default.createElement(Labelled, {
14608 id: id,
14609 label: label,
14610 error: error,
14611 action: labelAction,
14612 labelHidden: labelHidden,
14613 helpText: helpText
14614 }, React__default.createElement("div", {
14615 className: styles$1l.Wrapper
14616 }, prefixMarkup, React__default.createElement("div", {
14617 className: trackWrapperClassName,
14618 onMouseDown: this.handleMouseDownTrack,
14619 ref: this.trackWrapper
14620 }, React__default.createElement("div", {
14621 className: styles$1l.Track,
14622 style: cssVars,
14623 ref: this.track
14624 }), React__default.createElement("button", {
14625 id: idLower,
14626 className: thumbLowerClassName,
14627 style: {
14628 left: "".concat(leftPositionThumbLower, "px")
14629 },
14630 role: "slider",
14631 "aria-disabled": disabled,
14632 "aria-valuemin": min,
14633 "aria-valuemax": max,
14634 "aria-valuenow": value[0],
14635 "aria-invalid": Boolean(error),
14636 "aria-describedby": ariaDescribedBy,
14637 "aria-labelledby": labelID(id),
14638 onFocus: onFocus,
14639 onBlur: onBlur,
14640 onKeyDown: this.handleKeypressLower,
14641 onMouseDown: this.handleMouseDownThumbLower,
14642 onTouchStart: this.handleTouchStartThumbLower,
14643 ref: this.thumbLower
14644 }), outputMarkupLower, React__default.createElement("button", {
14645 id: idUpper,
14646 className: thumbUpperClassName,
14647 style: {
14648 left: "".concat(leftPositionThumbUpper, "px")
14649 },
14650 role: "slider",
14651 "aria-disabled": disabled,
14652 "aria-valuemin": min,
14653 "aria-valuemax": max,
14654 "aria-valuenow": value[1],
14655 "aria-invalid": Boolean(error),
14656 "aria-describedby": ariaDescribedBy,
14657 "aria-labelledby": labelID(id),
14658 onFocus: onFocus,
14659 onBlur: onBlur,
14660 onKeyDown: this.handleKeypressUpper,
14661 onMouseDown: this.handleMouseDownThumbUpper,
14662 onTouchStart: this.handleTouchStartThumbUpper,
14663 ref: this.thumbUpper
14664 }), outputMarkupUpper), suffixMarkup)), React__default.createElement(EventListener, {
14665 event: "resize",
14666 handler: this.setTrackPosition
14667 }));
14668 }
14669 }], [{
14670 key: "getDerivedStateFromProps",
14671 value: function getDerivedStateFromProps(props, state) {
14672 var min = props.min,
14673 step = props.step,
14674 max = props.max,
14675 value = props.value,
14676 onChange = props.onChange,
14677 id = props.id;
14678 var prevValue = state.prevValue;
14679
14680 if (isEqual(prevValue, value)) {
14681 return null;
14682 }
14683
14684 var sanitizedValue = sanitizeValue(value, min, max, step);
14685
14686 if (!isEqual(value, sanitizedValue)) {
14687 onChange(sanitizedValue, id);
14688 }
14689
14690 return {
14691 prevValue: value,
14692 value: sanitizedValue
14693 };
14694 }
14695 }]);
14696
14697 return DualThumb;
14698}(React__default.Component);
14699
14700function registerMouseMoveHandler(handler) {
14701 addEventListener(document, 'mousemove', handler);
14702 addEventListener(document, 'mouseup', function () {
14703 removeEventListener(document, 'mousemove', handler);
14704 }, {
14705 once: true
14706 });
14707}
14708
14709function registerTouchMoveHandler(handler) {
14710 var removeHandler = function removeHandler() {
14711 removeEventListener(document, 'touchmove', handler);
14712 removeEventListener(document, 'touchend', removeHandler);
14713 removeEventListener(document, 'touchcancel', removeHandler);
14714 };
14715
14716 addEventListener(document, 'touchmove', handler, {
14717 passive: false
14718 });
14719 addEventListener(document, 'touchend', removeHandler, {
14720 once: true
14721 });
14722 addEventListener(document, 'touchcancel', removeHandler, {
14723 once: true
14724 });
14725}
14726
14727function sanitizeValue(value, min, max, step) {
14728 var control = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : Control.Upper;
14729 var upperValue = inBoundsUpper(roundedToStep(value[1]));
14730 var lowerValue = inBoundsLower(roundedToStep(value[0]));
14731 var maxLowerValue = upperValue - step;
14732 var minUpperValue = lowerValue + step;
14733
14734 if (control === Control.Upper && lowerValue > maxLowerValue) {
14735 lowerValue = maxLowerValue;
14736 } else if (control === Control.Lower && upperValue < minUpperValue) {
14737 upperValue = minUpperValue;
14738 }
14739
14740 return [lowerValue, upperValue];
14741
14742 function inBoundsUpper(value) {
14743 var lowerMin = min + step;
14744
14745 if (value < lowerMin) {
14746 return lowerMin;
14747 } else if (value > max) {
14748 return max;
14749 } else {
14750 return value;
14751 }
14752 }
14753
14754 function inBoundsLower(value) {
14755 var upperMax = max - step;
14756
14757 if (value < min) {
14758 return min;
14759 } else if (value > upperMax) {
14760 return upperMax;
14761 } else {
14762 return value;
14763 }
14764 }
14765
14766 function roundedToStep(value) {
14767 return Math.round(value / step) * step;
14768 }
14769}
14770
14771function clamp(number, min, max) {
14772 if (number < min) return min;
14773 if (number > max) return max;
14774 return number;
14775}
14776
14777var styles$1m = {
14778 "SingleThumb": "Polaris-RangeSlider-SingleThumb",
14779 "disabled": "Polaris-RangeSlider-SingleThumb--disabled",
14780 "InputWrapper": "Polaris-RangeSlider-SingleThumb__InputWrapper",
14781 "Prefix": "Polaris-RangeSlider-SingleThumb__Prefix",
14782 "Suffix": "Polaris-RangeSlider-SingleThumb__Suffix",
14783 "Input": "Polaris-RangeSlider-SingleThumb__Input",
14784 "error": "Polaris-RangeSlider-SingleThumb--error",
14785 "RangeSlider": "Polaris-RangeSlider-SingleThumb__RangeSlider",
14786 "Output": "Polaris-RangeSlider-SingleThumb__Output",
14787 "OutputBubble": "Polaris-RangeSlider-SingleThumb__OutputBubble",
14788 "OutputText": "Polaris-RangeSlider-SingleThumb__OutputText"
14789};
14790
14791function SingleThumb(props) {
14792 var id = props.id,
14793 error = props.error,
14794 helpText = props.helpText,
14795 value = props.value,
14796 min = props.min,
14797 max = props.max,
14798 disabled = props.disabled,
14799 output = props.output,
14800 prefix = props.prefix,
14801 suffix = props.suffix,
14802 label = props.label,
14803 labelAction = props.labelAction,
14804 labelHidden = props.labelHidden,
14805 step = props.step,
14806 onBlur = props.onBlur,
14807 onFocus = props.onFocus;
14808 var clampedValue = clamp(value, min, max);
14809 var describedBy = [];
14810
14811 if (error) {
14812 describedBy.push("".concat(id, "Error"));
14813 }
14814
14815 if (helpText) {
14816 describedBy.push(helpTextID(id));
14817 }
14818
14819 var ariaDescribedBy = describedBy.length ? describedBy.join(' ') : undefined;
14820 var sliderProgress = (clampedValue - min) * 100 / (max - min);
14821 var outputFactor = invertNumber((sliderProgress - 50) / 100);
14822 var cssVars = {
14823 ["".concat(CSS_VAR_PREFIX, "min")]: min,
14824 ["".concat(CSS_VAR_PREFIX, "max")]: max,
14825 ["".concat(CSS_VAR_PREFIX, "current")]: clampedValue,
14826 ["".concat(CSS_VAR_PREFIX, "progress")]: "".concat(sliderProgress, "%"),
14827 ["".concat(CSS_VAR_PREFIX, "output-factor")]: "".concat(outputFactor)
14828 };
14829 var outputMarkup = !disabled && output && React__default.createElement("output", {
14830 htmlFor: id,
14831 className: styles$1m.Output
14832 }, React__default.createElement("div", {
14833 className: styles$1m.OutputBubble
14834 }, React__default.createElement("span", {
14835 className: styles$1m.OutputText
14836 }, clampedValue)));
14837 var prefixMarkup = prefix && React__default.createElement("div", {
14838 className: styles$1m.Prefix
14839 }, prefix);
14840 var suffixMarkup = suffix && React__default.createElement("div", {
14841 className: styles$1m.Suffix
14842 }, suffix);
14843 var className = classNames(styles$1m.SingleThumb, error && styles$1m.error, disabled && styles$1m.disabled);
14844 return React__default.createElement(Labelled, {
14845 id: id,
14846 label: label,
14847 error: error,
14848 action: labelAction,
14849 labelHidden: labelHidden,
14850 helpText: helpText
14851 }, React__default.createElement("div", {
14852 className: className,
14853 style: cssVars
14854 }, prefixMarkup, React__default.createElement("div", {
14855 className: styles$1m.InputWrapper
14856 }, React__default.createElement("input", {
14857 type: "range",
14858 className: styles$1m.Input,
14859 id: id,
14860 name: id,
14861 min: min,
14862 max: max,
14863 step: step,
14864 value: clampedValue,
14865 disabled: disabled,
14866 onChange: handleChange,
14867 onFocus: onFocus,
14868 onBlur: onBlur,
14869 "aria-valuemin": min,
14870 "aria-valuemax": max,
14871 "aria-valuenow": clampedValue,
14872 "aria-invalid": Boolean(error),
14873 "aria-describedby": ariaDescribedBy
14874 }), outputMarkup), suffixMarkup));
14875
14876 function handleChange(event) {
14877 var onChange = props.onChange;
14878 onChange && onChange(parseFloat(event.currentTarget.value), id);
14879 }
14880}
14881
14882function RangeSlider(_a) {
14883 var _a$min = _a.min,
14884 min = _a$min === void 0 ? RangeSliderDefault.Min : _a$min,
14885 _a$max = _a.max,
14886 max = _a$max === void 0 ? RangeSliderDefault.Max : _a$max,
14887 _a$step = _a.step,
14888 step = _a$step === void 0 ? RangeSliderDefault.Step : _a$step,
14889 value = _a.value,
14890 rest = __rest(_a, ["min", "max", "step", "value"]);
14891
14892 var id = useUniqueId('RangeSlider');
14893 var sharedProps = Object.assign({
14894 id,
14895 min,
14896 max,
14897 step
14898 }, rest);
14899 return isDualThumb(value) ? React__default.createElement(DualThumb, Object.assign({
14900 value: value
14901 }, sharedProps)) : React__default.createElement(SingleThumb, Object.assign({
14902 value: value
14903 }, sharedProps));
14904}
14905
14906function isDualThumb(value) {
14907 return Array.isArray(value);
14908}
14909
14910var styles$1n = {
14911 "CheckboxWrapper": "Polaris-ResourceItem__CheckboxWrapper",
14912 "ResourceItem": "Polaris-ResourceItem",
14913 "persistActions": "Polaris-ResourceItem--persistActions",
14914 "Actions": "Polaris-ResourceItem__Actions",
14915 "selected": "Polaris-ResourceItem--selected",
14916 "focused": "Polaris-ResourceItem--focused",
14917 "focusedInner": "Polaris-ResourceItem--focusedInner",
14918 "Link": "Polaris-ResourceItem__Link",
14919 "Button": "Polaris-ResourceItem__Button",
14920 "Container": "Polaris-ResourceItem__Container",
14921 "Owned": "Polaris-ResourceItem__Owned",
14922 "Handle": "Polaris-ResourceItem__Handle",
14923 "selectMode": "Polaris-ResourceItem--selectMode",
14924 "selectable": "Polaris-ResourceItem--selectable",
14925 "Media": "Polaris-ResourceItem__Media",
14926 "Content": "Polaris-ResourceItem__Content",
14927 "Disclosure": "Polaris-ResourceItem__Disclosure"
14928};
14929
14930var getUniqueCheckboxID = createUniqueIDFactory('ResourceListItemCheckbox');
14931var getUniqueOverlayID = createUniqueIDFactory('ResourceListItemOverlay');
14932
14933var BaseResourceItem =
14934/*#__PURE__*/
14935function (_React$Component) {
14936 _inherits(BaseResourceItem, _React$Component);
14937
14938 function BaseResourceItem() {
14939 var _this;
14940
14941 _classCallCheck(this, BaseResourceItem);
14942
14943 _this = _possibleConstructorReturn(this, _getPrototypeOf(BaseResourceItem).apply(this, arguments));
14944 _this.state = {
14945 actionsMenuVisible: false,
14946 focused: false,
14947 focusedInner: false,
14948 selected: isSelected(_this.props.id, _this.props.context.selectedItems)
14949 };
14950 _this.node = null;
14951 _this.checkboxId = getUniqueCheckboxID();
14952 _this.overlayId = getUniqueOverlayID();
14953 _this.buttonOverlay = React__default.createRef();
14954
14955 _this.setNode = function (node) {
14956 _this.node = node;
14957 };
14958
14959 _this.handleFocus = function (event) {
14960 if (event.target === _this.buttonOverlay.current || _this.node && event.target === _this.node.querySelector("#".concat(_this.overlayId))) {
14961 _this.setState({
14962 focused: true,
14963 focusedInner: false
14964 });
14965 } else if (_this.node && _this.node.contains(event.target)) {
14966 _this.setState({
14967 focused: true,
14968 focusedInner: true
14969 });
14970 }
14971 };
14972
14973 _this.handleBlur = function (_ref) {
14974 var relatedTarget = _ref.relatedTarget;
14975
14976 if (_this.node && relatedTarget instanceof Element && _this.node.contains(relatedTarget)) {
14977 return;
14978 }
14979
14980 _this.setState({
14981 focused: false,
14982 focusedInner: false
14983 });
14984 };
14985
14986 _this.handleLargerSelectionArea = function (event) {
14987 stopPropagation$1(event);
14988
14989 _this.handleSelection(!_this.state.selected, event.nativeEvent.shiftKey);
14990 };
14991
14992 _this.handleSelection = function (value, shiftKey) {
14993 var _this$props = _this.props,
14994 id = _this$props.id,
14995 sortOrder = _this$props.sortOrder,
14996 onSelectionChange = _this$props.context.onSelectionChange;
14997
14998 if (id == null || onSelectionChange == null) {
14999 return;
15000 }
15001
15002 _this.setState({
15003 focused: value,
15004 focusedInner: value
15005 });
15006
15007 onSelectionChange(value, id, sortOrder, shiftKey);
15008 };
15009
15010 _this.handleClick = function (event) {
15011 stopPropagation$1(event);
15012 var _this$props2 = _this.props,
15013 id = _this$props2.id,
15014 onClick = _this$props2.onClick,
15015 url = _this$props2.url,
15016 selectMode = _this$props2.context.selectMode;
15017 var _event$nativeEvent = event.nativeEvent,
15018 ctrlKey = _event$nativeEvent.ctrlKey,
15019 metaKey = _event$nativeEvent.metaKey;
15020
15021 var anchor = _this.node && _this.node.querySelector('a');
15022
15023 if (selectMode) {
15024 _this.handleLargerSelectionArea(event);
15025
15026 return;
15027 }
15028
15029 if (anchor === event.target) {
15030 return;
15031 }
15032
15033 if (onClick) {
15034 onClick(id);
15035 }
15036
15037 if (url && (ctrlKey || metaKey)) {
15038 window.open(url, '_blank');
15039 return;
15040 }
15041
15042 if (url && anchor) {
15043 anchor.click();
15044 }
15045 }; // This fires onClick when there is a URL on the item
15046
15047
15048 _this.handleKeyUp = function (event) {
15049 var _this$props3 = _this.props,
15050 _this$props3$onClick = _this$props3.onClick,
15051 onClick = _this$props3$onClick === void 0 ? noop$b : _this$props3$onClick,
15052 selectMode = _this$props3.context.selectMode;
15053 var key = event.key;
15054
15055 if (key === 'Enter' && _this.props.url && !selectMode) {
15056 onClick();
15057 }
15058 };
15059
15060 _this.handleActionsClick = function () {
15061 _this.setState(function (_ref2) {
15062 var actionsMenuVisible = _ref2.actionsMenuVisible;
15063 return {
15064 actionsMenuVisible: !actionsMenuVisible
15065 };
15066 });
15067 };
15068
15069 _this.handleCloseRequest = function () {
15070 _this.setState({
15071 actionsMenuVisible: false
15072 });
15073 };
15074
15075 return _this;
15076 }
15077
15078 _createClass(BaseResourceItem, [{
15079 key: "shouldComponentUpdate",
15080 value: function shouldComponentUpdate(nextProps, nextState) {
15081 var _a = nextProps.context,
15082 nextSelectedItems = _a.selectedItems,
15083 restNextContext = __rest(_a, ["selectedItems"]),
15084 restNextProps = __rest(nextProps, ["context"]);
15085
15086 var _b = this.props,
15087 _c = _b.context,
15088 selectedItems = _c.selectedItems,
15089 restContext = __rest(_c, ["selectedItems"]),
15090 restProps = __rest(_b, ["context"]);
15091
15092 var nextSelectMode = nextProps.context.selectMode;
15093 return !isEqual(this.state, nextState) || this.props.context.selectMode !== nextSelectMode || !nextProps.context.selectMode && (!isEqual(restProps, restNextProps) || !isEqual(restContext, restNextContext));
15094 }
15095 }, {
15096 key: "render",
15097 value: function render() {
15098 var _this$props4 = this.props,
15099 children = _this$props4.children,
15100 url = _this$props4.url,
15101 external = _this$props4.external,
15102 media = _this$props4.media,
15103 shortcutActions = _this$props4.shortcutActions,
15104 ariaControls = _this$props4.ariaControls,
15105 ariaExpanded = _this$props4.ariaExpanded,
15106 _this$props4$persistA = _this$props4.persistActions,
15107 persistActions = _this$props4$persistA === void 0 ? false : _this$props4$persistA,
15108 accessibilityLabel = _this$props4.accessibilityLabel,
15109 name = _this$props4.name,
15110 _this$props4$context = _this$props4.context,
15111 selectable = _this$props4$context.selectable,
15112 selectMode = _this$props4$context.selectMode,
15113 loading = _this$props4$context.loading,
15114 resourceName = _this$props4$context.resourceName,
15115 i18n = _this$props4.i18n;
15116 var _this$state = this.state,
15117 actionsMenuVisible = _this$state.actionsMenuVisible,
15118 focused = _this$state.focused,
15119 focusedInner = _this$state.focusedInner,
15120 selected = _this$state.selected;
15121 var ownedMarkup = null;
15122 var handleMarkup = null;
15123 var mediaMarkup = media ? React__default.createElement("div", {
15124 className: styles$1n.Media
15125 }, media) : null;
15126
15127 if (selectable) {
15128 var checkboxAccessibilityLabel = name || accessibilityLabel || i18n.translate('Polaris.Common.checkbox');
15129 handleMarkup = React__default.createElement("div", {
15130 className: styles$1n.Handle,
15131 onClick: this.handleLargerSelectionArea
15132 }, React__default.createElement("div", {
15133 onClick: stopPropagation$1,
15134 className: styles$1n.CheckboxWrapper
15135 }, React__default.createElement("div", {
15136 onChange: this.handleLargerSelectionArea
15137 }, React__default.createElement(Checkbox$1, {
15138 id: this.checkboxId,
15139 label: checkboxAccessibilityLabel,
15140 labelHidden: true,
15141 checked: selected,
15142 disabled: loading
15143 }))));
15144 }
15145
15146 if (media || selectable) {
15147 ownedMarkup = React__default.createElement("div", {
15148 className: styles$1n.Owned
15149 }, handleMarkup, mediaMarkup);
15150 }
15151
15152 var className = classNames(styles$1n.ResourceItem, focused && styles$1n.focused, selectable && styles$1n.selectable, selected && styles$1n.selected, selectMode && styles$1n.selectMode, persistActions && styles$1n.persistActions, focusedInner && styles$1n.focusedInner);
15153 var actionsMarkup = null;
15154 var disclosureMarkup = null;
15155
15156 if (shortcutActions && !loading) {
15157 if (persistActions) {
15158 actionsMarkup = React__default.createElement("div", {
15159 className: styles$1n.Actions,
15160 onClick: stopPropagation$1
15161 }, React__default.createElement(ButtonGroup, null, buttonsFrom(shortcutActions, {
15162 plain: true
15163 })));
15164 var disclosureAccessibilityLabel = name ? i18n.translate('Polaris.ResourceList.Item.actionsDropdownLabel', {
15165 accessibilityLabel: name
15166 }) : i18n.translate('Polaris.ResourceList.Item.actionsDropdown');
15167 disclosureMarkup = React__default.createElement("div", {
15168 className: styles$1n.Disclosure,
15169 onClick: stopPropagation$1
15170 }, React__default.createElement(Popover, {
15171 activator: React__default.createElement(Button, {
15172 accessibilityLabel: disclosureAccessibilityLabel,
15173 onClick: this.handleActionsClick,
15174 plain: true,
15175 icon: HorizontalDotsMinor
15176 }),
15177 onClose: this.handleCloseRequest,
15178 active: actionsMenuVisible
15179 }, React__default.createElement(ActionList, {
15180 items: shortcutActions
15181 })));
15182 } else {
15183 actionsMarkup = React__default.createElement("div", {
15184 className: styles$1n.Actions,
15185 onClick: stopPropagation$1
15186 }, React__default.createElement(ButtonGroup, {
15187 segmented: true
15188 }, buttonsFrom(shortcutActions, {
15189 size: 'slim'
15190 })));
15191 }
15192 }
15193
15194 var content = children ? React__default.createElement("div", {
15195 className: styles$1n.Content
15196 }, children) : null;
15197 var containerMarkup = React__default.createElement("div", {
15198 className: styles$1n.Container,
15199 id: this.props.id
15200 }, ownedMarkup, content, actionsMarkup, disclosureMarkup);
15201 var tabIndex = loading ? -1 : 0;
15202 var ariaLabel = accessibilityLabel || i18n.translate('Polaris.ResourceList.Item.viewItem', {
15203 itemName: name || resourceName && resourceName.singular || ''
15204 });
15205 var accessibleMarkup = url ? React__default.createElement(UnstyledLink, {
15206 "aria-describedby": this.props.id,
15207 "aria-label": ariaLabel,
15208 className: styles$1n.Link,
15209 url: url,
15210 external: external,
15211 tabIndex: tabIndex,
15212 id: this.overlayId
15213 }) : React__default.createElement("button", {
15214 className: styles$1n.Button,
15215 "aria-label": ariaLabel,
15216 "aria-controls": ariaControls,
15217 "aria-expanded": ariaExpanded,
15218 onClick: this.handleClick,
15219 tabIndex: tabIndex,
15220 ref: this.buttonOverlay
15221 });
15222 return React__default.createElement("div", {
15223 ref: this.setNode,
15224 className: className,
15225 onClick: this.handleClick,
15226 onFocus: this.handleFocus,
15227 onBlur: this.handleBlur,
15228 onKeyUp: this.handleKeyUp,
15229 "data-href": url
15230 }, accessibleMarkup, containerMarkup);
15231 }
15232 }], [{
15233 key: "getDerivedStateFromProps",
15234 value: function getDerivedStateFromProps(nextProps, prevState) {
15235 var selected = isSelected(nextProps.id, nextProps.context.selectedItems);
15236
15237 if (prevState.selected === selected) {
15238 return null;
15239 }
15240
15241 return {
15242 selected
15243 };
15244 }
15245 }]);
15246
15247 return BaseResourceItem;
15248}(React__default.Component);
15249
15250function noop$b() {}
15251
15252function stopPropagation$1(event) {
15253 event.stopPropagation();
15254}
15255
15256function isSelected(id, selectedItems) {
15257 return Boolean(selectedItems && (Array.isArray(selectedItems) && selectedItems.includes(id) || selectedItems === SELECT_ALL_ITEMS));
15258}
15259
15260function ResourceItem(props) {
15261 return React__default.createElement(BaseResourceItem, Object.assign({}, props, {
15262 context: useContext(ResourceListContext),
15263 i18n: useI18n()
15264 }));
15265}
15266
15267var Sticky =
15268/*#__PURE__*/
15269function (_React$Component) {
15270 _inherits(Sticky, _React$Component);
15271
15272 function Sticky() {
15273 var _this;
15274
15275 _classCallCheck(this, Sticky);
15276
15277 _this = _possibleConstructorReturn(this, _getPrototypeOf(Sticky).apply(this, arguments));
15278 _this.state = {
15279 isSticky: false,
15280 style: {}
15281 };
15282 _this.placeHolderNode = null;
15283 _this.stickyNode = null;
15284
15285 _this.setPlaceHolderNode = function (node) {
15286 _this.placeHolderNode = node;
15287 };
15288
15289 _this.setStickyNode = function (node) {
15290 _this.stickyNode = node;
15291 };
15292
15293 _this.handlePositioning = function (stick) {
15294 var top = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
15295 var left = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
15296 var width = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
15297 var isSticky = _this.state.isSticky;
15298
15299 if (stick && !isSticky || !stick && isSticky) {
15300 _this.adjustPlaceHolderNode(stick);
15301
15302 _this.setState({
15303 isSticky: !isSticky
15304 });
15305 }
15306
15307 var style = stick ? {
15308 position: 'fixed',
15309 top,
15310 left,
15311 width
15312 } : {};
15313
15314 _this.setState({
15315 style
15316 });
15317 };
15318
15319 _this.adjustPlaceHolderNode = function (add) {
15320 if (_this.placeHolderNode && _this.stickyNode) {
15321 _this.placeHolderNode.style.paddingBottom = add ? "".concat(getRectForNode(_this.stickyNode).height, "px") : '0px';
15322 }
15323 };
15324
15325 return _this;
15326 }
15327
15328 _createClass(Sticky, [{
15329 key: "componentDidMount",
15330 value: function componentDidMount() {
15331 var _this$props = this.props,
15332 boundingElement = _this$props.boundingElement,
15333 _this$props$offset = _this$props.offset,
15334 offset = _this$props$offset === void 0 ? false : _this$props$offset,
15335 _this$props$disableWh = _this$props.disableWhenStacked,
15336 disableWhenStacked = _this$props$disableWh === void 0 ? false : _this$props$disableWh,
15337 stickyManager = _this$props.polaris.stickyManager;
15338 if (!this.stickyNode || !this.placeHolderNode) return;
15339 stickyManager.registerStickyItem({
15340 stickyNode: this.stickyNode,
15341 placeHolderNode: this.placeHolderNode,
15342 handlePositioning: this.handlePositioning,
15343 offset,
15344 boundingElement,
15345 disableWhenStacked
15346 });
15347 }
15348 }, {
15349 key: "componentWillUnmount",
15350 value: function componentWillUnmount() {
15351 var stickyManager = this.props.polaris.stickyManager;
15352 if (!this.stickyNode) return;
15353 stickyManager.unregisterStickyItem(this.stickyNode);
15354 }
15355 }, {
15356 key: "render",
15357 value: function render() {
15358 var _this$state = this.state,
15359 style = _this$state.style,
15360 isSticky = _this$state.isSticky;
15361 var children = this.props.children;
15362 var childrenContent = isFunction(children) ? children(isSticky) : children;
15363 return React__default.createElement("div", null, React__default.createElement("div", {
15364 ref: this.setPlaceHolderNode
15365 }), React__default.createElement("div", {
15366 ref: this.setStickyNode,
15367 style: style
15368 }, childrenContent));
15369 }
15370 }]);
15371
15372 return Sticky;
15373}(React__default.Component);
15374
15375function isFunction(arg) {
15376 return typeof arg === 'function';
15377} // Use named export once withAppProvider is refactored away
15378// eslint-disable-next-line import/no-default-export
15379
15380
15381var Sticky$1 = withAppProvider()(Sticky);
15382
15383var styles$1o = {
15384 "Select": "Polaris-Select",
15385 "disabled": "Polaris-Select--disabled",
15386 "Content": "Polaris-Select__Content",
15387 "InlineLabel": "Polaris-Select__InlineLabel",
15388 "Icon": "Polaris-Select__Icon",
15389 "Backdrop": "Polaris-Select__Backdrop",
15390 "error": "Polaris-Select--error",
15391 "Input": "Polaris-Select__Input",
15392 "placeholder": "Polaris-Select--placeholder",
15393 "SelectedOption": "Polaris-Select__SelectedOption"
15394};
15395
15396var PLACEHOLDER_VALUE = '';
15397function Select(_ref) {
15398 var optionsProp = _ref.options,
15399 label = _ref.label,
15400 labelAction = _ref.labelAction,
15401 labelHiddenProp = _ref.labelHidden,
15402 labelInline = _ref.labelInline,
15403 disabled = _ref.disabled,
15404 helpText = _ref.helpText,
15405 placeholder = _ref.placeholder,
15406 idProp = _ref.id,
15407 name = _ref.name,
15408 _ref$value = _ref.value,
15409 value = _ref$value === void 0 ? PLACEHOLDER_VALUE : _ref$value,
15410 error = _ref.error,
15411 onChange = _ref.onChange,
15412 onFocus = _ref.onFocus,
15413 onBlur = _ref.onBlur;
15414 var id = useUniqueId('Select', idProp);
15415 var labelHidden = labelInline ? true : labelHiddenProp;
15416 var className = classNames(styles$1o.Select, error && styles$1o.error, disabled && styles$1o.disabled);
15417 var handleChange = onChange ? function (event) {
15418 return onChange(event.currentTarget.value, id);
15419 } : undefined;
15420 var describedBy = [];
15421
15422 if (helpText) {
15423 describedBy.push(helpTextID(id));
15424 }
15425
15426 if (error) {
15427 describedBy.push("".concat(id, "Error"));
15428 }
15429
15430 var options = optionsProp || [];
15431 var normalizedOptions = options.map(normalizeOption);
15432
15433 if (placeholder) {
15434 normalizedOptions = [{
15435 label: placeholder,
15436 value: PLACEHOLDER_VALUE,
15437 disabled: true
15438 }].concat(_toConsumableArray(normalizedOptions));
15439 }
15440
15441 var inlineLabelMarkup = labelInline && React__default.createElement("span", {
15442 className: styles$1o.InlineLabel
15443 }, label);
15444 var selectedOption = getSelectedOption(normalizedOptions, value);
15445 var contentMarkup = React__default.createElement("div", {
15446 className: styles$1o.Content,
15447 "aria-hidden": true,
15448 "aria-disabled": disabled
15449 }, inlineLabelMarkup, React__default.createElement("span", {
15450 className: styles$1o.SelectedOption
15451 }, selectedOption), React__default.createElement("span", {
15452 className: styles$1o.Icon
15453 }, React__default.createElement(Icon, {
15454 source: ArrowUpDownMinor
15455 })));
15456 var optionsMarkup = normalizedOptions.map(renderOption);
15457 return React__default.createElement(Labelled, {
15458 id: id,
15459 label: label,
15460 error: error,
15461 action: labelAction,
15462 labelHidden: labelHidden,
15463 helpText: helpText
15464 }, React__default.createElement("div", {
15465 className: className
15466 }, React__default.createElement("select", {
15467 id: id,
15468 name: name,
15469 value: value,
15470 className: styles$1o.Input,
15471 disabled: disabled,
15472 onFocus: onFocus,
15473 onBlur: onBlur,
15474 onChange: handleChange,
15475 "aria-invalid": Boolean(error),
15476 "aria-describedby": describedBy.length ? describedBy.join(' ') : undefined
15477 }, optionsMarkup), contentMarkup, React__default.createElement("div", {
15478 className: styles$1o.Backdrop
15479 })));
15480}
15481
15482function isString(option) {
15483 return typeof option === 'string';
15484}
15485
15486function isGroup(option) {
15487 return option.options != null;
15488}
15489
15490function normalizeStringOption(option) {
15491 return {
15492 label: option,
15493 value: option
15494 };
15495}
15496/**
15497 * Converts a string option (and each string option in a Group) into
15498 * an Option object.
15499 */
15500
15501
15502function normalizeOption(option) {
15503 if (isString(option)) {
15504 return normalizeStringOption(option);
15505 } else if (isGroup(option)) {
15506 var title = option.title,
15507 options = option.options;
15508 return {
15509 title,
15510 options: options.map(function (option) {
15511 return isString(option) ? normalizeStringOption(option) : option;
15512 })
15513 };
15514 }
15515
15516 return option;
15517}
15518/**
15519 * Gets the text to display in the UI, for the currently selected option
15520 */
15521
15522
15523function getSelectedOption(options, value) {
15524 var flatOptions = flattenOptions(options);
15525 var selectedOption = flatOptions.find(function (option) {
15526 return value === option.value;
15527 });
15528
15529 if (selectedOption === undefined) {
15530 // Get the first visible option (not the hidden placeholder)
15531 selectedOption = flatOptions.find(function (option) {
15532 return !option.hidden;
15533 });
15534 }
15535
15536 return selectedOption ? selectedOption.label : '';
15537}
15538/**
15539 * Ungroups an options array
15540 */
15541
15542
15543function flattenOptions(options) {
15544 var flatOptions = [];
15545 options.forEach(function (optionOrGroup) {
15546 if (isGroup(optionOrGroup)) {
15547 flatOptions = flatOptions.concat(optionOrGroup.options);
15548 } else {
15549 flatOptions.push(optionOrGroup);
15550 }
15551 });
15552 return flatOptions;
15553}
15554
15555function renderSingleOption(option) {
15556 var value = option.value,
15557 label = option.label,
15558 rest = __rest(option, ["value", "label"]);
15559
15560 return React__default.createElement("option", Object.assign({
15561 key: value,
15562 value: value
15563 }, rest), label);
15564}
15565
15566function renderOption(optionOrGroup) {
15567 if (isGroup(optionOrGroup)) {
15568 var title = optionOrGroup.title,
15569 options = optionOrGroup.options;
15570 return React__default.createElement("optgroup", {
15571 label: title,
15572 key: title
15573 }, options.map(renderSingleOption));
15574 }
15575
15576 return renderSingleOption(optionOrGroup);
15577}
15578
15579var styles$1p = {
15580 "CheckableButton": "Polaris-ResourceList-CheckableButton",
15581 "globalTheming": "Polaris-ResourceList-CheckableButton--globalTheming",
15582 "CheckableButton-selectMode": "Polaris-ResourceList-CheckableButton__CheckableButton--selectMode",
15583 "CheckableButton-measuring": "Polaris-ResourceList-CheckableButton__CheckableButton--measuring",
15584 "CheckableButton-plain": "Polaris-ResourceList-CheckableButton__CheckableButton--plain",
15585 "CheckableButton-selected": "Polaris-ResourceList-CheckableButton__CheckableButton--selected",
15586 "Checkbox": "Polaris-ResourceList-CheckableButton__Checkbox",
15587 "Label": "Polaris-ResourceList-CheckableButton__Label"
15588};
15589
15590function CheckableButton(_ref) {
15591 var accessibilityLabel = _ref.accessibilityLabel,
15592 _ref$label = _ref.label,
15593 label = _ref$label === void 0 ? '' : _ref$label,
15594 onToggleAll = _ref.onToggleAll,
15595 selected = _ref.selected,
15596 selectMode = _ref.selectMode,
15597 plain = _ref.plain,
15598 measuring = _ref.measuring,
15599 disabled = _ref.disabled,
15600 smallScreen = _ref.smallScreen;
15601 var checkBoxRef = useRef(null);
15602
15603 var _useFeatures = useFeatures(),
15604 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
15605 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
15606
15607 var _React$useContext = React__default.useContext(ResourceListContext),
15608 registerCheckableButtons = _React$useContext.registerCheckableButtons;
15609
15610 var currentKey = 'bulkLg';
15611
15612 if (plain) {
15613 currentKey = 'plain';
15614 } else if (smallScreen) {
15615 currentKey = 'bulkSm';
15616 }
15617
15618 useEffect(function () {
15619 if (checkBoxRef.current && registerCheckableButtons) {
15620 registerCheckableButtons(currentKey, checkBoxRef.current);
15621 }
15622 }, [currentKey, registerCheckableButtons]);
15623 var className = plain ? classNames(styles$1p.CheckableButton, styles$1p['CheckableButton-plain'], unstableGlobalTheming && styles$1p.globalTheming) : classNames(styles$1p.CheckableButton, unstableGlobalTheming && styles$1p.globalTheming, selectMode && styles$1p['CheckableButton-selectMode'], selected && styles$1p['CheckableButton-selected'], measuring && styles$1p['CheckableButton-measuring']);
15624 return React__default.createElement("div", {
15625 className: className,
15626 onClick: onToggleAll
15627 }, React__default.createElement("div", {
15628 className: styles$1p.Checkbox
15629 }, React__default.createElement(Checkbox$1, {
15630 label: accessibilityLabel,
15631 labelHidden: true,
15632 checked: selected,
15633 disabled: disabled,
15634 onChange: onToggleAll,
15635 ref: checkBoxRef
15636 })), React__default.createElement("span", {
15637 className: styles$1p.Label
15638 }, label));
15639}
15640
15641var styles$1q = {
15642 "Group": "Polaris-ResourceList-BulkActions__Group",
15643 "Group-measuring": "Polaris-ResourceList-BulkActions__Group--measuring",
15644 "Group-entering": "Polaris-ResourceList-BulkActions__Group--entering",
15645 "Group-exiting": "Polaris-ResourceList-BulkActions__Group--exiting",
15646 "Group-entered": "Polaris-ResourceList-BulkActions__Group--entered",
15647 "Group-exited": "Polaris-ResourceList-BulkActions__Group--exited",
15648 "Group-smallScreen": "Polaris-ResourceList-BulkActions__Group--smallScreen",
15649 "Group-largeScreen": "Polaris-ResourceList-BulkActions__Group--largeScreen",
15650 "ButtonGroupWrapper": "Polaris-ResourceList-BulkActions__ButtonGroupWrapper",
15651 "BulkActionButton": "Polaris-ResourceList-BulkActions__BulkActionButton",
15652 "CheckableContainer": "Polaris-ResourceList-BulkActions__CheckableContainer",
15653 "disabled": "Polaris-ResourceList-BulkActions--disabled",
15654 "globalTheming": "Polaris-ResourceList-BulkActions--globalTheming",
15655 "PaginatedSelectAll": "Polaris-ResourceList-BulkActions__PaginatedSelectAll",
15656 "Slide": "Polaris-ResourceList-BulkActions__Slide",
15657 "Slide-appear": "Polaris-ResourceList-BulkActions__Slide--appear",
15658 "Slide-enter": "Polaris-ResourceList-BulkActions__Slide--enter",
15659 "Slide-exit": "Polaris-ResourceList-BulkActions__Slide--exit",
15660 "Slide-appearing": "Polaris-ResourceList-BulkActions__Slide--appearing",
15661 "Slide-entering": "Polaris-ResourceList-BulkActions__Slide--entering"
15662};
15663
15664var BulkActionButton =
15665/*#__PURE__*/
15666function (_React$PureComponent) {
15667 _inherits(BulkActionButton, _React$PureComponent);
15668
15669 function BulkActionButton() {
15670 var _this;
15671
15672 _classCallCheck(this, BulkActionButton);
15673
15674 _this = _possibleConstructorReturn(this, _getPrototypeOf(BulkActionButton).apply(this, arguments));
15675 _this.bulkActionButton = createRef();
15676 return _this;
15677 }
15678
15679 _createClass(BulkActionButton, [{
15680 key: "componentDidMount",
15681 value: function componentDidMount() {
15682 var handleMeasurement = this.props.handleMeasurement;
15683
15684 if (handleMeasurement && this.bulkActionButton.current) {
15685 var width = this.bulkActionButton.current.getBoundingClientRect().width;
15686 handleMeasurement(width);
15687 }
15688 }
15689 }, {
15690 key: "render",
15691 value: function render() {
15692 var _this$props = this.props,
15693 url = _this$props.url,
15694 external = _this$props.external,
15695 onAction = _this$props.onAction,
15696 content = _this$props.content,
15697 disclosure = _this$props.disclosure,
15698 accessibilityLabel = _this$props.accessibilityLabel,
15699 disabled = _this$props.disabled;
15700 return React__default.createElement("div", {
15701 className: styles$1q.BulkActionButton,
15702 ref: this.bulkActionButton
15703 }, React__default.createElement(Button, {
15704 external: external,
15705 url: url,
15706 "aria-label": accessibilityLabel,
15707 onClick: onAction,
15708 disabled: disabled,
15709 disclosure: disclosure
15710 }, content));
15711 }
15712 }]);
15713
15714 return BulkActionButton;
15715}(React__default.PureComponent);
15716
15717var MAX_PROMOTED_ACTIONS = 2;
15718var slideClasses = {
15719 appear: classNames(styles$1q.Slide, styles$1q['Slide-appear']),
15720 appearActive: classNames(styles$1q.Slide, styles$1q['Slide-appearing']),
15721 enter: classNames(styles$1q.Slide, styles$1q['Slide-enter']),
15722 enterActive: classNames(styles$1q.Slide, styles$1q['Slide-entering']),
15723 exit: classNames(styles$1q.Slide, styles$1q['Slide-exit'])
15724};
15725
15726var BulkActions =
15727/*#__PURE__*/
15728function (_React$PureComponent) {
15729 _inherits(BulkActions, _React$PureComponent);
15730
15731 function BulkActions() {
15732 var _this;
15733
15734 _classCallCheck(this, BulkActions);
15735
15736 _this = _possibleConstructorReturn(this, _getPrototypeOf(BulkActions).apply(this, arguments));
15737 _this.state = {
15738 smallScreenPopoverVisible: false,
15739 largeScreenPopoverVisible: false,
15740 containerWidth: 0,
15741 measuring: true
15742 };
15743 _this.checkableWrapperNode = createRef();
15744 _this.largeScreenGroupNode = createRef();
15745 _this.smallScreenGroupNode = createRef();
15746 _this.promotedActionsWidths = [];
15747 _this.bulkActionsWidth = 0;
15748 _this.addedMoreActionsWidthForMeasuring = 0;
15749 _this.handleResize = debounce(function () {
15750 var _this$state = _this.state,
15751 smallScreenPopoverVisible = _this$state.smallScreenPopoverVisible,
15752 largeScreenPopoverVisible = _this$state.largeScreenPopoverVisible;
15753
15754 if (_this.containerNode) {
15755 var containerWidth = _this.containerNode.getBoundingClientRect().width;
15756
15757 if (containerWidth > 0) {
15758 _this.setState({
15759 containerWidth
15760 });
15761 }
15762 }
15763
15764 if (smallScreenPopoverVisible || largeScreenPopoverVisible) {
15765 _this.setState({
15766 smallScreenPopoverVisible: false,
15767 largeScreenPopoverVisible: false
15768 });
15769 }
15770 }, 50, {
15771 trailing: true
15772 });
15773
15774 _this.setLargeScreenButtonsNode = function (node) {
15775 _this.largeScreenButtonsNode = node;
15776 };
15777
15778 _this.setContainerNode = function (node) {
15779 _this.containerNode = node;
15780 };
15781
15782 _this.setMoreActionsNode = function (node) {
15783 _this.moreActionsNode = node;
15784 };
15785
15786 _this.setSelectMode = function (val) {
15787 var onSelectModeToggle = _this.props.onSelectModeToggle;
15788
15789 if (onSelectModeToggle) {
15790 onSelectModeToggle(val);
15791 }
15792 };
15793
15794 _this.toggleSmallScreenPopover = function () {
15795 _this.setState(function (_ref) {
15796 var smallScreenPopoverVisible = _ref.smallScreenPopoverVisible;
15797 return {
15798 smallScreenPopoverVisible: !smallScreenPopoverVisible
15799 };
15800 });
15801 };
15802
15803 _this.toggleLargeScreenPopover = function () {
15804 _this.setState(function (_ref2) {
15805 var largeScreenPopoverVisible = _ref2.largeScreenPopoverVisible;
15806 return {
15807 largeScreenPopoverVisible: !largeScreenPopoverVisible
15808 };
15809 });
15810 };
15811
15812 _this.handleMeasurement = function (width) {
15813 var measuring = _this.state.measuring;
15814
15815 if (measuring) {
15816 _this.promotedActionsWidths.push(width);
15817 }
15818 };
15819
15820 _this.findLargeScreenGroupNode = function () {
15821 return _this.largeScreenGroupNode.current;
15822 };
15823
15824 _this.findCheckableWrapperNode = function () {
15825 return _this.checkableWrapperNode.current;
15826 };
15827
15828 _this.findSmallScreenGroupNode = function () {
15829 return _this.smallScreenGroupNode.current;
15830 };
15831
15832 return _this;
15833 }
15834
15835 _createClass(BulkActions, [{
15836 key: "componentDidMount",
15837 value: function componentDidMount() {
15838 var _this$props = this.props,
15839 actions = _this$props.actions,
15840 promotedActions = _this$props.promotedActions;
15841
15842 if (promotedActions && !actions && this.moreActionsNode) {
15843 this.addedMoreActionsWidthForMeasuring = this.moreActionsNode.getBoundingClientRect().width;
15844 }
15845
15846 this.bulkActionsWidth = this.largeScreenButtonsNode ? this.largeScreenButtonsNode.getBoundingClientRect().width - this.addedMoreActionsWidthForMeasuring : 0;
15847
15848 if (this.containerNode) {
15849 this.setState({
15850 containerWidth: this.containerNode.getBoundingClientRect().width,
15851 measuring: false
15852 });
15853 }
15854 }
15855 }, {
15856 key: "render",
15857 value: function render() {
15858 var _this2 = this;
15859
15860 var _this$props2 = this.props,
15861 selectMode = _this$props2.selectMode,
15862 accessibilityLabel = _this$props2.accessibilityLabel,
15863 _this$props2$label = _this$props2.label,
15864 label = _this$props2$label === void 0 ? '' : _this$props2$label,
15865 onToggleAll = _this$props2.onToggleAll,
15866 selected = _this$props2.selected,
15867 smallScreen = _this$props2.smallScreen,
15868 disabled = _this$props2.disabled,
15869 promotedActions = _this$props2.promotedActions,
15870 _this$props2$paginate = _this$props2.paginatedSelectAllText,
15871 paginatedSelectAllText = _this$props2$paginate === void 0 ? null : _this$props2$paginate,
15872 paginatedSelectAllAction = _this$props2.paginatedSelectAllAction,
15873 intl = _this$props2.polaris.intl;
15874
15875 if (promotedActions && promotedActions.length > MAX_PROMOTED_ACTIONS) {
15876 // eslint-disable-next-line no-console
15877 console.warn(intl.translate('Polaris.ResourceList.BulkActions.warningMessage', {
15878 maxPromotedActions: MAX_PROMOTED_ACTIONS
15879 }));
15880 }
15881
15882 var _this$state2 = this.state,
15883 smallScreenPopoverVisible = _this$state2.smallScreenPopoverVisible,
15884 largeScreenPopoverVisible = _this$state2.largeScreenPopoverVisible,
15885 measuring = _this$state2.measuring;
15886 var paginatedSelectAllActionMarkup = paginatedSelectAllAction ? React__default.createElement(Button, {
15887 onClick: paginatedSelectAllAction.onAction,
15888 plain: true,
15889 disabled: disabled
15890 }, paginatedSelectAllAction.content) : null;
15891 var paginatedSelectAllTextMarkup = paginatedSelectAllText && paginatedSelectAllAction ? React__default.createElement("span", {
15892 "aria-live": "polite"
15893 }, paginatedSelectAllText) : paginatedSelectAllText;
15894 var paginatedSelectAllMarkup = paginatedSelectAllActionMarkup || paginatedSelectAllTextMarkup ? React__default.createElement("div", {
15895 className: styles$1q.PaginatedSelectAll
15896 }, paginatedSelectAllTextMarkup, " ", paginatedSelectAllActionMarkup) : null;
15897 var cancelButton = React__default.createElement(Button, {
15898 onClick: this.setSelectMode.bind(this, false),
15899 disabled: disabled
15900 }, intl.translate('Polaris.Common.cancel'));
15901 var numberOfPromotedActionsToRender = this.numberOfPromotedActionsToRender;
15902 var allActionsPopover = this.hasActions ? React__default.createElement("div", {
15903 className: styles$1q.Popover,
15904 ref: this.setMoreActionsNode
15905 }, React__default.createElement(Popover, {
15906 active: smallScreenPopoverVisible,
15907 activator: React__default.createElement(BulkActionButton, {
15908 disclosure: true,
15909 onAction: this.toggleSmallScreenPopover,
15910 content: intl.translate('Polaris.ResourceList.BulkActions.actionsActivatorLabel'),
15911 disabled: disabled
15912 }),
15913 onClose: this.toggleSmallScreenPopover
15914 }, React__default.createElement(ActionList, {
15915 items: promotedActions,
15916 sections: this.actionSections,
15917 onActionAnyItem: this.toggleSmallScreenPopover
15918 }))) : null;
15919 var promotedActionsMarkup = promotedActions && numberOfPromotedActionsToRender > 0 ? _toConsumableArray(promotedActions).slice(0, numberOfPromotedActionsToRender).map(function (action, index) {
15920 return React__default.createElement(BulkActionButton, Object.assign({
15921 disabled: disabled
15922 }, action, {
15923 key: index,
15924 handleMeasurement: _this2.handleMeasurement
15925 }));
15926 }) : null;
15927 var rolledInPromotedActions = promotedActions && numberOfPromotedActionsToRender < promotedActions.length ? _toConsumableArray(promotedActions).slice(numberOfPromotedActionsToRender) : [];
15928 var activatorLabel = !promotedActions || promotedActions && numberOfPromotedActionsToRender === 0 && !measuring ? intl.translate('Polaris.ResourceList.BulkActions.actionsActivatorLabel') : intl.translate('Polaris.ResourceList.BulkActions.moreActionsActivatorLabel');
15929 var combinedActions = [];
15930
15931 if (this.actionSections && rolledInPromotedActions.length > 0) {
15932 combinedActions = [{
15933 items: rolledInPromotedActions
15934 }].concat(_toConsumableArray(this.actionSections));
15935 } else if (this.actionSections) {
15936 combinedActions = this.actionSections;
15937 } else if (rolledInPromotedActions.length > 0) {
15938 combinedActions = [{
15939 items: rolledInPromotedActions
15940 }];
15941 }
15942
15943 var actionsPopover = this.actionSections || rolledInPromotedActions.length > 0 || measuring ? React__default.createElement("div", {
15944 className: styles$1q.Popover,
15945 ref: this.setMoreActionsNode
15946 }, React__default.createElement(Popover, {
15947 active: largeScreenPopoverVisible,
15948 activator: React__default.createElement(BulkActionButton, {
15949 disclosure: true,
15950 onAction: this.toggleLargeScreenPopover,
15951 content: activatorLabel,
15952 disabled: disabled
15953 }),
15954 onClose: this.toggleLargeScreenPopover
15955 }, React__default.createElement(ActionList, {
15956 sections: combinedActions,
15957 onActionAnyItem: this.toggleLargeScreenPopover
15958 }))) : null;
15959 var checkableButtonProps = {
15960 accessibilityLabel,
15961 label,
15962 selected,
15963 selectMode,
15964 onToggleAll,
15965 measuring,
15966 disabled
15967 };
15968 var smallScreenGroup = smallScreen ? React__default.createElement(Transition, {
15969 timeout: 0,
15970 in: selectMode,
15971 key: "smallGroup",
15972 findDOMNode: this.findSmallScreenGroupNode
15973 }, function (status) {
15974 var smallScreenGroupClassName = classNames(styles$1q.Group, styles$1q['Group-smallScreen'], styles$1q["Group-".concat(status)]);
15975 return React__default.createElement("div", {
15976 className: smallScreenGroupClassName,
15977 ref: _this2.smallScreenGroupNode
15978 }, React__default.createElement("div", {
15979 className: styles$1q.ButtonGroupWrapper
15980 }, React__default.createElement(ButtonGroup, {
15981 segmented: true
15982 }, React__default.createElement(CSSTransition, {
15983 findDOMNode: _this2.findCheckableWrapperNode,
15984 in: selectMode,
15985 timeout: durationBase,
15986 classNames: slideClasses,
15987 appear: !selectMode
15988 }, React__default.createElement("div", {
15989 className: styles$1q.CheckableContainer,
15990 ref: _this2.checkableWrapperNode
15991 }, React__default.createElement(CheckableButton, Object.assign({}, checkableButtonProps, {
15992 smallScreen: true
15993 })))), allActionsPopover, cancelButton)), paginatedSelectAllMarkup);
15994 }) : null;
15995 var largeGroupContent = promotedActionsMarkup || actionsPopover ? React__default.createElement(ButtonGroup, {
15996 segmented: true
15997 }, React__default.createElement(CheckableButton, checkableButtonProps), promotedActionsMarkup, actionsPopover) : React__default.createElement(CheckableButton, checkableButtonProps);
15998 var largeScreenGroup = smallScreen ? null : React__default.createElement(Transition, {
15999 timeout: 0,
16000 in: selectMode,
16001 key: "largeGroup",
16002 findDOMNode: this.findLargeScreenGroupNode
16003 }, function (status) {
16004 var largeScreenGroupClassName = classNames(styles$1q.Group, styles$1q['Group-largeScreen'], !measuring && styles$1q["Group-".concat(status)], measuring && styles$1q['Group-measuring']);
16005 return React__default.createElement("div", {
16006 className: largeScreenGroupClassName,
16007 ref: _this2.largeScreenGroupNode
16008 }, React__default.createElement(EventListener, {
16009 event: "resize",
16010 handler: _this2.handleResize
16011 }), React__default.createElement("div", {
16012 className: styles$1q.ButtonGroupWrapper,
16013 ref: _this2.setLargeScreenButtonsNode
16014 }, largeGroupContent), paginatedSelectAllMarkup);
16015 });
16016 return React__default.createElement("div", {
16017 ref: this.setContainerNode
16018 }, smallScreenGroup, largeScreenGroup);
16019 }
16020 }, {
16021 key: "numberOfPromotedActionsToRender",
16022 get: function get() {
16023 var promotedActions = this.props.promotedActions;
16024 var _this$state3 = this.state,
16025 containerWidth = _this$state3.containerWidth,
16026 measuring = _this$state3.measuring;
16027
16028 if (!promotedActions) {
16029 return 0;
16030 }
16031
16032 if (containerWidth >= this.bulkActionsWidth || measuring) {
16033 return promotedActions.length;
16034 }
16035
16036 var sufficientSpace = false;
16037 var counter = promotedActions.length - 1;
16038 var totalWidth = 0;
16039
16040 while (!sufficientSpace && counter >= 0) {
16041 totalWidth += this.promotedActionsWidths[counter];
16042 var widthWithRemovedAction = this.bulkActionsWidth - totalWidth + this.addedMoreActionsWidthForMeasuring;
16043
16044 if (containerWidth >= widthWithRemovedAction) {
16045 sufficientSpace = true;
16046 } else {
16047 counter--;
16048 }
16049 }
16050
16051 return counter;
16052 }
16053 }, {
16054 key: "hasActions",
16055 get: function get() {
16056 var _this$props3 = this.props,
16057 promotedActions = _this$props3.promotedActions,
16058 actions = _this$props3.actions;
16059 return Boolean(promotedActions && promotedActions.length > 0 || actions && actions.length > 0);
16060 }
16061 }, {
16062 key: "actionSections",
16063 get: function get() {
16064 var actions = this.props.actions;
16065
16066 if (!actions || actions.length === 0) {
16067 return;
16068 }
16069
16070 if (instanceOfBulkActionListSectionArray(actions)) {
16071 return actions;
16072 }
16073
16074 if (instanceOfBulkActionArray(actions)) {
16075 return [{
16076 items: actions
16077 }];
16078 }
16079 }
16080 }]);
16081
16082 return BulkActions;
16083}(React__default.PureComponent);
16084
16085function instanceOfBulkActionListSectionArray(actions) {
16086 var validList = actions.filter(function (action) {
16087 return action.items;
16088 });
16089 return actions.length === validList.length;
16090}
16091
16092function instanceOfBulkActionArray(actions) {
16093 var validList = actions.filter(function (action) {
16094 return !action.items;
16095 });
16096 return actions.length === validList.length;
16097} // Use named export once withAppProvider is refactored away
16098// eslint-disable-next-line import/no-default-export
16099
16100
16101var BulkActions$1 = withAppProvider()(BulkActions);
16102
16103var styles$1r = {
16104 "DateTextField": "Polaris-FilterControl-DateSelector__DateTextField",
16105 "DatePicker": "Polaris-FilterControl-DateSelector__DatePicker"
16106};
16107
16108var VALID_DATE_REGEX = /^\d{4}-\d{1,2}-\d{1,2}$/;
16109var DateFilterOption;
16110
16111(function (DateFilterOption) {
16112 DateFilterOption["PastWeek"] = "past_week";
16113 DateFilterOption["PastMonth"] = "past_month";
16114 DateFilterOption["PastQuarter"] = "past_quarter";
16115 DateFilterOption["PastYear"] = "past_year";
16116 DateFilterOption["ComingWeek"] = "coming_week";
16117 DateFilterOption["ComingMonth"] = "coming_month";
16118 DateFilterOption["ComingQuarter"] = "coming_quarter";
16119 DateFilterOption["ComingYear"] = "coming_year";
16120 DateFilterOption["OnOrBefore"] = "on_or_before";
16121 DateFilterOption["OnOrAfter"] = "on_or_after";
16122})(DateFilterOption || (DateFilterOption = {}));
16123
16124var DateSelector = memo(function DateSelector(_ref) {
16125 var filterValue = _ref.filterValue,
16126 filterKey = _ref.filterKey,
16127 filterMinKey = _ref.filterMinKey,
16128 filterMaxKey = _ref.filterMaxKey,
16129 dateOptionType = _ref.dateOptionType,
16130 onFilterValueChange = _ref.onFilterValueChange,
16131 onFilterKeyChange = _ref.onFilterKeyChange;
16132 var now = new Date();
16133 var i18n = useI18n();
16134 var initialConsumerFilterKey = useRef(filterKey);
16135
16136 var _useState = useState(now.getMonth()),
16137 _useState2 = _slicedToArray(_useState, 2),
16138 datePickerMonth = _useState2[0],
16139 setDatePickerMonth = _useState2[1];
16140
16141 var _useState3 = useState(now.getFullYear()),
16142 _useState4 = _slicedToArray(_useState3, 2),
16143 datePickerYear = _useState4[0],
16144 setDatePickerYear = _useState4[1];
16145
16146 var _useState5 = useState(),
16147 _useState6 = _slicedToArray(_useState5, 2),
16148 selectedDate = _useState6[0],
16149 setSelectedDate = _useState6[1];
16150
16151 var _useState7 = useState(),
16152 _useState8 = _slicedToArray(_useState7, 2),
16153 userInputDate = _useState8[0],
16154 setUserInputDate = _useState8[1];
16155
16156 var _useState9 = useState(),
16157 _useState10 = _slicedToArray(_useState9, 2),
16158 userInputDateError = _useState10[0],
16159 setUserInputDateError = _useState10[1];
16160
16161 var dateTextFieldValue = getDateTextFieldValue();
16162 var handleDateFieldChange = useCallback(function (value) {
16163 if (value.length === 0) {
16164 setSelectedDate(undefined);
16165 onFilterValueChange(undefined);
16166 }
16167
16168 if (userInputDateError && isValidDate(value)) {
16169 setUserInputDateError(undefined);
16170 }
16171
16172 setUserInputDate(value);
16173 }, [onFilterValueChange, userInputDateError]);
16174 var handleDateChanged = useCallback(function (date) {
16175 if (!date) {
16176 return;
16177 }
16178
16179 onFilterValueChange(stripTimeFromISOString(formatDateForLocalTimezone(date)));
16180 }, [onFilterValueChange]);
16181 var handleDateBlur = useCallback(function () {
16182 if (!dateTextFieldValue || !isValidDate(dateTextFieldValue)) {
16183 setSelectedDate(undefined);
16184 setUserInputDateError(i18n.translate('Polaris.ResourceList.DateSelector.dateValueError'));
16185 onFilterValueChange(undefined);
16186 return;
16187 }
16188
16189 if (!userInputDate) {
16190 return;
16191 }
16192
16193 var formattedDateForTimezone = new Date(formatDateForLocalTimezone(new Date(userInputDate)));
16194 setSelectedDate(formattedDateForTimezone);
16195 setDatePickerMonth(formattedDateForTimezone.getMonth());
16196 setDatePickerYear(formattedDateForTimezone.getFullYear());
16197 setUserInputDate(undefined);
16198 setUserInputDateError(undefined);
16199 handleDateChanged(formattedDateForTimezone);
16200 }, [dateTextFieldValue, handleDateChanged, i18n, onFilterValueChange, userInputDate]);
16201 var handleDateFilterOptionsChange = useCallback(function (newOption) {
16202 if (!initialConsumerFilterKey.current) {
16203 return;
16204 }
16205
16206 if (newOption === DateFilterOption.OnOrBefore) {
16207 onFilterKeyChange(filterMaxKey);
16208 onFilterValueChange(selectedDate ? stripTimeFromISOString(formatDateForLocalTimezone(selectedDate)) : undefined);
16209 return;
16210 }
16211
16212 if (newOption === DateFilterOption.OnOrAfter) {
16213 onFilterKeyChange(filterMinKey);
16214 onFilterValueChange(selectedDate ? stripTimeFromISOString(formatDateForLocalTimezone(selectedDate)) : undefined);
16215 return;
16216 }
16217
16218 onFilterKeyChange(initialConsumerFilterKey.current);
16219 onFilterValueChange(newOption);
16220 }, [filterMaxKey, filterMinKey, initialConsumerFilterKey, onFilterKeyChange, onFilterValueChange, selectedDate]);
16221 var handleDatePickerChange = useCallback(function (_ref2) {
16222 var nextDate = _ref2.end;
16223 var date = new Date(nextDate);
16224 setSelectedDate(date);
16225 setUserInputDate(undefined);
16226 setUserInputDateError(undefined);
16227 handleDateChanged(date);
16228 }, [handleDateChanged]);
16229 var handleDatePickerMonthChange = useCallback(function (month, year) {
16230 setDatePickerMonth(month);
16231 setDatePickerYear(year);
16232 }, []);
16233 var dateFilterOption = getDateFilterOption(filterValue, filterKey, filterMinKey, filterMaxKey);
16234 var showDatePredicate = dateFilterOption === DateFilterOption.OnOrBefore || dateFilterOption === DateFilterOption.OnOrAfter;
16235 var datePredicateMarkup = showDatePredicate && React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
16236 className: styles$1r.DateTextField
16237 }, React__default.createElement(TextField, {
16238 label: i18n.translate('Polaris.ResourceList.DateSelector.dateValueLabel'),
16239 placeholder: i18n.translate('Polaris.ResourceList.DateSelector.dateValuePlaceholder'),
16240 value: dateTextFieldValue,
16241 error: userInputDateError,
16242 prefix: React__default.createElement(Icon, {
16243 source: CalendarMinor,
16244 color: "skyDark"
16245 }),
16246 autoComplete: false,
16247 onChange: handleDateFieldChange,
16248 onBlur: handleDateBlur
16249 })), React__default.createElement("div", {
16250 className: styles$1r.DatePicker
16251 }, React__default.createElement(DatePicker, {
16252 selected: selectedDate,
16253 month: datePickerMonth,
16254 year: datePickerYear,
16255 onChange: handleDatePickerChange,
16256 onMonthChange: handleDatePickerMonthChange
16257 })));
16258 var dateOptionTypes = {
16259 past: [].concat(_toConsumableArray(getDatePastOptions()), _toConsumableArray(getDateComparatorOptions())),
16260 future: [].concat(_toConsumableArray(getDateFutureOptions()), _toConsumableArray(getDateComparatorOptions())),
16261 full: [].concat(_toConsumableArray(getDatePastOptions()), _toConsumableArray(getDateFutureOptions()), _toConsumableArray(getDateComparatorOptions()))
16262 };
16263 return React__default.createElement(React__default.Fragment, null, React__default.createElement(Select, {
16264 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.dateFilterLabel'),
16265 labelHidden: true,
16266 options: dateOptionType ? dateOptionTypes[dateOptionType] : dateOptionTypes.full,
16267 placeholder: i18n.translate('Polaris.ResourceList.FilterValueSelector.selectFilterValuePlaceholder'),
16268 value: dateFilterOption,
16269 onChange: handleDateFilterOptionsChange
16270 }), datePredicateMarkup);
16271
16272 function getDateComparatorOptions() {
16273 return [{
16274 value: DateFilterOption.OnOrBefore,
16275 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.OnOrBefore')
16276 }, {
16277 value: DateFilterOption.OnOrAfter,
16278 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.OnOrAfter')
16279 }];
16280 }
16281
16282 function getDatePastOptions() {
16283 return [{
16284 value: DateFilterOption.PastWeek,
16285 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.PastWeek')
16286 }, {
16287 value: DateFilterOption.PastMonth,
16288 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.PastMonth')
16289 }, {
16290 value: DateFilterOption.PastQuarter,
16291 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.PastQuarter')
16292 }, {
16293 value: DateFilterOption.PastYear,
16294 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.PastYear')
16295 }];
16296 }
16297
16298 function getDateFutureOptions() {
16299 return [{
16300 value: DateFilterOption.ComingWeek,
16301 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.ComingWeek')
16302 }, {
16303 value: DateFilterOption.ComingMonth,
16304 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.ComingMonth')
16305 }, {
16306 value: DateFilterOption.ComingQuarter,
16307 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.ComingQuarter')
16308 }, {
16309 value: DateFilterOption.ComingYear,
16310 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.ComingYear')
16311 }];
16312 }
16313
16314 function getDateTextFieldValue() {
16315 if (!userInputDate && !selectedDate) {
16316 return undefined;
16317 }
16318
16319 if (userInputDate !== undefined) {
16320 return userInputDate;
16321 }
16322
16323 if (selectedDate) {
16324 return stripTimeFromISOString(formatDateForLocalTimezone(selectedDate));
16325 }
16326 }
16327});
16328
16329function isValidDate(date) {
16330 if (!date) {
16331 return false;
16332 }
16333
16334 return VALID_DATE_REGEX.test(date) && !isNaN(new Date(date).getTime());
16335}
16336
16337function getDateFilterOption(filterValue, filterKey, filterMinKey, filterMaxKey) {
16338 if (filterKey === filterMaxKey) {
16339 return DateFilterOption.OnOrBefore;
16340 }
16341
16342 if (filterKey === filterMinKey) {
16343 return DateFilterOption.OnOrAfter;
16344 }
16345
16346 return filterValue;
16347}
16348
16349function stripTimeFromISOString(ISOString) {
16350 return ISOString.slice(0, 10);
16351}
16352
16353function formatDateForLocalTimezone(date) {
16354 var timezoneOffset = date.getTimezoneOffset();
16355 var timezoneOffsetMs = timezoneOffset * 60 * 1000;
16356 var isFringeTimezone = timezoneOffset === -720 || timezoneOffset === 720;
16357 var formattedDate = new Date();
16358
16359 if (isFringeTimezone && date.getHours() !== 0) {
16360 return date.toISOString();
16361 }
16362
16363 var newTime = timezoneOffset > -1 ? date.getTime() + timezoneOffsetMs : date.getTime() - timezoneOffsetMs;
16364 formattedDate.setTime(newTime);
16365 return formattedDate.toISOString();
16366}
16367
16368var FilterType;
16369
16370(function (FilterType) {
16371 FilterType[FilterType["Select"] = 0] = "Select";
16372 FilterType[FilterType["TextField"] = 1] = "TextField";
16373 FilterType[FilterType["DateSelector"] = 2] = "DateSelector";
16374})(FilterType || (FilterType = {}));
16375
16376/**
16377 * Returns a MutatableRefObject containing a boolean value that
16378 * represents a components mounted status.
16379 * @returns MutableRefObject<boolean> The mounted status
16380 */
16381
16382function useIsMountedRef() {
16383 var isMounted = useRef(false);
16384 useEffect(function () {
16385 isMounted.current = true;
16386 return function () {
16387 isMounted.current = false;
16388 };
16389 }, []);
16390 return isMounted;
16391}
16392
16393function FilterValueSelector(_ref) {
16394 var filter = _ref.filter,
16395 filterKey = _ref.filterKey,
16396 value = _ref.value,
16397 onChange = _ref.onChange,
16398 onFilterKeyChange = _ref.onFilterKeyChange;
16399
16400 var _useI18n = useI18n(),
16401 translate = _useI18n.translate;
16402
16403 var isMounted = useIsMountedRef();
16404 var operatorText = filter.operatorText,
16405 type = filter.type,
16406 label = filter.label;
16407 var showOperatorOptions = type !== FilterType.DateSelector && operatorText && typeof operatorText !== 'string';
16408 var handleOperatorOptionChange = useCallback(function (operatorKey) {
16409 onFilterKeyChange(operatorKey);
16410
16411 if (!value) {
16412 return;
16413 }
16414
16415 onChange(value);
16416 }, [onChange, onFilterKeyChange, value]);
16417
16418 if (showOperatorOptions && operatorText.length !== 0 && !isMounted.current) {
16419 handleOperatorOptionChange(operatorText[0].key);
16420 }
16421
16422 var operatorOptionsMarkup = showOperatorOptions ? React__default.createElement(Select, {
16423 label: label,
16424 labelHidden: true,
16425 options: buildOperatorOptions(operatorText),
16426 value: filterKey,
16427 onChange: handleOperatorOptionChange
16428 }) : null;
16429 var selectedFilterLabel = typeof operatorText === 'string' ? operatorText : '';
16430
16431 switch (filter.type) {
16432 case FilterType.Select:
16433 return React__default.createElement(Stack, {
16434 vertical: true
16435 }, operatorOptionsMarkup, React__default.createElement(Select, {
16436 label: selectedFilterLabel,
16437 options: filter.options,
16438 placeholder: translate('Polaris.ResourceList.FilterValueSelector.selectFilterValuePlaceholder'),
16439 value: value,
16440 onChange: onChange
16441 }));
16442
16443 case FilterType.TextField:
16444 return React__default.createElement(Stack, {
16445 vertical: true
16446 }, operatorOptionsMarkup, React__default.createElement(TextField, {
16447 label: selectedFilterLabel,
16448 value: value,
16449 type: filter.textFieldType,
16450 onChange: onChange
16451 }));
16452
16453 case FilterType.DateSelector:
16454 return React__default.createElement(DateSelector, {
16455 dateOptionType: filter.dateOptionType,
16456 filterValue: value,
16457 filterKey: filterKey,
16458 filterMinKey: filter.minKey,
16459 filterMaxKey: filter.maxKey,
16460 onFilterValueChange: onChange,
16461 onFilterKeyChange: onFilterKeyChange
16462 });
16463
16464 default:
16465 return null;
16466 }
16467}
16468
16469function buildOperatorOptions(operatorText) {
16470 if (!operatorText || typeof operatorText === 'string') {
16471 return [];
16472 }
16473
16474 return operatorText.map(function (_ref2) {
16475 var key = _ref2.key,
16476 optionLabel = _ref2.optionLabel;
16477 return {
16478 value: key,
16479 label: optionLabel
16480 };
16481 });
16482}
16483
16484function FilterCreator(_ref) {
16485 var filters = _ref.filters,
16486 resourceName = _ref.resourceName,
16487 disabled = _ref.disabled,
16488 onAddFilter = _ref.onAddFilter;
16489
16490 var _useForcibleToggle = useForcibleToggle(false),
16491 _useForcibleToggle2 = _slicedToArray(_useForcibleToggle, 2),
16492 popoverActive = _useForcibleToggle2[0],
16493 _useForcibleToggle2$ = _useForcibleToggle2[1],
16494 togglePopoverActive = _useForcibleToggle2$.toggle,
16495 setPopoverActiveFalse = _useForcibleToggle2$.forceFalse;
16496
16497 var _useState = useState(),
16498 _useState2 = _slicedToArray(_useState, 2),
16499 selectedFilter = _useState2[0],
16500 setSelectedFilter = _useState2[1];
16501
16502 var _useState3 = useState(),
16503 _useState4 = _slicedToArray(_useState3, 2),
16504 selectedFilterKey = _useState4[0],
16505 setSelectedFilterKey = _useState4[1];
16506
16507 var _useState5 = useState(),
16508 _useState6 = _slicedToArray(_useState5, 2),
16509 selectedFilterValue = _useState6[0],
16510 setSelectedFilterValue = _useState6[1];
16511
16512 var i18n = useI18n();
16513 var node = useRef(null);
16514 var canAddFilter = Boolean(selectedFilter && selectedFilterKey && selectedFilterValue);
16515 var handleButtonFocus = useCallback(function () {
16516 var event = arguments.length <= 0 ? undefined : arguments[0];
16517
16518 if (!node.current && event) {
16519 // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065
16520 node.current = event.target;
16521 }
16522 }, []);
16523 var handleFilterKeyChange = useCallback(function (filterKey) {
16524 var foundFilter = filters.find(function (filter) {
16525 var minKey = filter.minKey,
16526 maxKey = filter.maxKey,
16527 operatorText = filter.operatorText;
16528
16529 if (minKey || maxKey) {
16530 return filter.key === filterKey || minKey === filterKey || maxKey === filterKey;
16531 }
16532
16533 if (operatorText && typeof operatorText !== 'string') {
16534 return filter.key === filterKey || operatorText.filter(function (_ref2) {
16535 var key = _ref2.key;
16536 return key === filterKey;
16537 }).length === 1;
16538 }
16539
16540 return filter.key === filterKey;
16541 });
16542
16543 if (!foundFilter) {
16544 return;
16545 }
16546
16547 setSelectedFilter(foundFilter);
16548 setSelectedFilterKey(filterKey);
16549 setSelectedFilterValue(undefined);
16550 }, [filters]);
16551 var handleFilterValueChange = useCallback(function (value) {
16552 setSelectedFilterValue(value);
16553 }, []);
16554 var handleAddFilter = useCallback(function () {
16555 if (!onAddFilter || !canAddFilter || !selectedFilterKey) {
16556 return;
16557 }
16558
16559 onAddFilter({
16560 key: selectedFilterKey,
16561 value: selectedFilterValue || ''
16562 });
16563 setPopoverActiveFalse();
16564 setSelectedFilter(undefined);
16565 setSelectedFilterValue(undefined);
16566
16567 if (node.current != null) {
16568 node.current.focus();
16569 }
16570 }, [canAddFilter, onAddFilter, selectedFilterKey, selectedFilterValue, setPopoverActiveFalse]);
16571 var activator = React__default.createElement(Button, {
16572 onClick: togglePopoverActive,
16573 disclosure: true,
16574 disabled: disabled,
16575 onFocus: handleButtonFocus
16576 }, i18n.translate('Polaris.ResourceList.FilterCreator.filterButtonLabel'));
16577 var filterOptions = filters.map(function (_ref3) {
16578 var key = _ref3.key,
16579 label = _ref3.label;
16580 return {
16581 value: key,
16582 label
16583 };
16584 });
16585 var filterValueSelectionMarkup = selectedFilter ? React__default.createElement(FilterValueSelector, {
16586 filter: selectedFilter,
16587 filterKey: selectedFilterKey,
16588 value: selectedFilterValue,
16589 onFilterKeyChange: handleFilterKeyChange,
16590 onChange: handleFilterValueChange
16591 }) : null;
16592 var addFilterButtonMarkup = selectedFilter ? React__default.createElement(Button, {
16593 onClick: handleAddFilter,
16594 disabled: !canAddFilter
16595 }, i18n.translate('Polaris.ResourceList.FilterCreator.addFilterButtonLabel')) : null;
16596 return React__default.createElement(Popover, {
16597 active: popoverActive,
16598 activator: activator,
16599 onClose: togglePopoverActive,
16600 sectioned: true,
16601 fullHeight: true
16602 }, React__default.createElement(Form, {
16603 onSubmit: handleAddFilter
16604 }, React__default.createElement(FormLayout, null, React__default.createElement(Select, {
16605 label: i18n.translate('Polaris.ResourceList.FilterCreator.showAllWhere', {
16606 resourceNamePlural: resourceName.plural.toLocaleLowerCase()
16607 }),
16608 placeholder: i18n.translate('Polaris.ResourceList.FilterCreator.selectFilterKeyPlaceholder'),
16609 options: filterOptions,
16610 onChange: handleFilterKeyChange,
16611 value: selectedFilter && selectedFilter.key
16612 }), filterValueSelectionMarkup, addFilterButtonMarkup)));
16613}
16614
16615var styles$1s = {
16616 "AppliedFilters": "Polaris-ResourceList-FilterControl__AppliedFilters",
16617 "AppliedFilter": "Polaris-ResourceList-FilterControl__AppliedFilter"
16618};
16619
16620/** @deprecated Use <Filters /> instead. */
16621
16622function FilterControl(_ref) {
16623 var searchValue = _ref.searchValue,
16624 _ref$appliedFilters = _ref.appliedFilters,
16625 appliedFilters = _ref$appliedFilters === void 0 ? [] : _ref$appliedFilters,
16626 additionalAction = _ref.additionalAction,
16627 _ref$focused = _ref.focused,
16628 focused = _ref$focused === void 0 ? false : _ref$focused,
16629 _ref$filters = _ref.filters,
16630 filters = _ref$filters === void 0 ? [] : _ref$filters,
16631 placeholder = _ref.placeholder,
16632 onSearchBlur = _ref.onSearchBlur,
16633 onSearchChange = _ref.onSearchChange,
16634 onFiltersChange = _ref.onFiltersChange;
16635 // eslint-disable-next-line no-console
16636 console.warn('Deprecation: <FilterControl /> is deprecated. Use <Filters /> instead.');
16637 var i18n = useI18n();
16638
16639 var _React$useContext = React__default.useContext(ResourceListContext),
16640 selectMode = _React$useContext.selectMode,
16641 resourceName = _React$useContext.resourceName;
16642
16643 var filterResourceName = resourceName || {
16644 singular: i18n.translate('Polaris.ResourceList.defaultItemSingular'),
16645 plural: i18n.translate('Polaris.ResourceList.defaultItemPlural')
16646 };
16647 var handleAddFilter = React__default.useCallback(function (newFilter) {
16648 if (!onFiltersChange) {
16649 return;
16650 }
16651
16652 var foundFilter = appliedFilters.find(function (appliedFilter) {
16653 return idFromFilter(appliedFilter) === idFromFilter(newFilter);
16654 });
16655
16656 if (foundFilter) {
16657 return;
16658 }
16659
16660 var newAppliedFilters = [].concat(_toConsumableArray(appliedFilters), [newFilter]);
16661 onFiltersChange(newAppliedFilters);
16662 }, [onFiltersChange, appliedFilters]);
16663 var handleRemoveFilter = React__default.useCallback(function (filterId) {
16664 if (!onFiltersChange) {
16665 return;
16666 }
16667
16668 var foundIndex = appliedFilters.findIndex(function (appliedFilter) {
16669 return idFromFilter(appliedFilter) === filterId;
16670 });
16671 var newAppliedFilters = foundIndex >= 0 ? [].concat(_toConsumableArray(appliedFilters.slice(0, foundIndex)), _toConsumableArray(appliedFilters.slice(foundIndex + 1, appliedFilters.length))) : _toConsumableArray(appliedFilters);
16672 onFiltersChange(newAppliedFilters);
16673 }, [appliedFilters, onFiltersChange]);
16674 var getRemoveFilterCallback = React__default.useCallback(function (filterId) {
16675 return function () {
16676 handleRemoveFilter(filterId);
16677 };
16678 }, [handleRemoveFilter]);
16679 var textFieldLabel = placeholder ? placeholder : i18n.translate('Polaris.ResourceList.FilterControl.textFieldLabel', {
16680 resourceNamePlural: filterResourceName.plural.toLocaleLowerCase()
16681 });
16682
16683 if (additionalAction) {
16684 additionalAction.disabled = selectMode;
16685 }
16686
16687 var additionalActionButton = additionalAction && buttonsFrom(additionalAction) || null;
16688 var filterCreatorMarkup = filters.length > 0 ? React__default.createElement(FilterCreator, {
16689 resourceName: filterResourceName,
16690 filters: filters,
16691 onAddFilter: handleAddFilter,
16692 disabled: selectMode
16693 }) : null;
16694 var appliedFiltersMarkup = appliedFilters.map(function (appliedFilter) {
16695 var activeFilterLabel = getFilterLabel(appliedFilter);
16696 var filterId = idFromFilter(appliedFilter);
16697 return React__default.createElement("li", {
16698 className: styles$1s.AppliedFilter,
16699 key: filterId
16700 }, React__default.createElement(Tag, {
16701 onRemove: getRemoveFilterCallback(filterId),
16702 disabled: selectMode
16703 }, activeFilterLabel));
16704 });
16705 var appliedFiltersWrapper = appliedFilters.length > 0 ? React__default.createElement("ul", {
16706 className: styles$1s.AppliedFilters
16707 }, appliedFiltersMarkup) : null;
16708 return React__default.createElement(FormLayout, null, React__default.createElement(TextField, {
16709 connectedLeft: filterCreatorMarkup,
16710 connectedRight: additionalActionButton,
16711 label: textFieldLabel,
16712 labelHidden: true,
16713 placeholder: textFieldLabel,
16714 prefix: React__default.createElement(Icon, {
16715 source: SearchMinor,
16716 color: "skyDark"
16717 }),
16718 value: searchValue,
16719 onChange: onSearchChange,
16720 onBlur: onSearchBlur,
16721 focused: focused,
16722 disabled: selectMode
16723 }), appliedFiltersWrapper);
16724
16725 function getFilterLabel(appliedFilter) {
16726 var key = appliedFilter.key,
16727 value = appliedFilter.value,
16728 label = appliedFilter.label;
16729
16730 if (label) {
16731 return label;
16732 }
16733
16734 var filter = filters.find(function (filter) {
16735 var minKey = filter.minKey,
16736 maxKey = filter.maxKey,
16737 operatorText = filter.operatorText;
16738
16739 if (minKey || maxKey) {
16740 return filter.key === key || minKey === key || maxKey === key;
16741 }
16742
16743 if (operatorText && typeof operatorText !== 'string') {
16744 return filter.key === key || operatorText.filter(function (_ref2) {
16745 var operatorKey = _ref2.key;
16746 return operatorKey === key;
16747 }).length === 1;
16748 }
16749
16750 return filter.key === key;
16751 });
16752
16753 if (!filter) {
16754 return value;
16755 }
16756
16757 var filterOperatorLabel = findOperatorLabel(filter, appliedFilter);
16758 var filterLabelByType = findFilterLabelByType(filter, appliedFilter);
16759
16760 if (!filterOperatorLabel) {
16761 return "".concat(filter.label, " ").concat(filterLabelByType);
16762 }
16763
16764 return "".concat(filter.label, " ").concat(filterOperatorLabel, " ").concat(filterLabelByType);
16765 }
16766
16767 function findFilterLabelByType(filter, appliedFilter) {
16768 var appliedFilterValue = appliedFilter.value;
16769
16770 if (filter.type === FilterType.Select) {
16771 var foundFilterOption = filter.options.find(function (option) {
16772 return typeof option === 'string' ? option === appliedFilterValue : option.value === appliedFilterValue;
16773 });
16774
16775 if (foundFilterOption) {
16776 return typeof foundFilterOption === 'string' ? foundFilterOption : foundFilterOption.label;
16777 }
16778 }
16779
16780 if (filter.type === FilterType.DateSelector) {
16781 if (filter.key === appliedFilter.key) {
16782 var filterLabelKey = "Polaris.ResourceList.DateSelector.FilterLabelForValue.".concat(appliedFilter.value);
16783 return i18n.translationKeyExists(filterLabelKey) ? i18n.translate(filterLabelKey) : appliedFilter.value;
16784 }
16785
16786 if (appliedFilter.key === filter.maxKey) {
16787 return i18n.translate('Polaris.ResourceList.DateSelector.FilterLabelForValue.on_or_before', {
16788 date: formatDateForLabelDisplay(appliedFilter.value)
16789 });
16790 }
16791
16792 if (appliedFilter.key === filter.minKey) {
16793 return i18n.translate('Polaris.ResourceList.DateSelector.FilterLabelForValue.on_or_after', {
16794 date: formatDateForLabelDisplay(appliedFilter.value)
16795 });
16796 }
16797 }
16798
16799 return appliedFilterValue;
16800 }
16801}
16802
16803function idFromFilter(appliedFilter) {
16804 return "".concat(appliedFilter.key, "-").concat(appliedFilter.value);
16805}
16806
16807function formatDateForLabelDisplay(date) {
16808 if (isNaN(new Date(date).getTime())) {
16809 return date;
16810 }
16811
16812 return new Date(date.replace(/-/g, '/')).toLocaleDateString();
16813}
16814
16815function findOperatorLabel(filter, appliedFilter) {
16816 var operatorText = filter.operatorText;
16817
16818 if (filter.type === FilterType.DateSelector && (appliedFilter.key === filter.minKey || appliedFilter.key === filter.maxKey)) {
16819 return '';
16820 }
16821
16822 if (!operatorText || typeof operatorText === 'string') {
16823 return operatorText;
16824 }
16825
16826 var appliedOperator = operatorText.find(function (operator) {
16827 return operator.key === appliedFilter.key;
16828 });
16829
16830 if (appliedOperator) {
16831 return appliedOperator.filterLabel || appliedOperator.optionLabel;
16832 }
16833}
16834
16835var styles$1t = {
16836 "FiltersWrapper": "Polaris-ResourceList__FiltersWrapper",
16837 "ResourceList": "Polaris-ResourceList",
16838 "HeaderOuterWrapper": "Polaris-ResourceList__HeaderOuterWrapper",
16839 "HeaderWrapper-disabled": "Polaris-ResourceList__HeaderWrapper--disabled",
16840 "HeaderWrapper-overlay": "Polaris-ResourceList__HeaderWrapper--overlay",
16841 "HeaderWrapper": "Polaris-ResourceList__HeaderWrapper",
16842 "HeaderWrapper-isSticky": "Polaris-ResourceList__HeaderWrapper--isSticky",
16843 "HeaderContentWrapper": "Polaris-ResourceList__HeaderContentWrapper",
16844 "HeaderWrapper-inSelectMode": "Polaris-ResourceList__HeaderWrapper--inSelectMode",
16845 "SortWrapper": "Polaris-ResourceList__SortWrapper",
16846 "AlternateToolWrapper": "Polaris-ResourceList__AlternateToolWrapper",
16847 "HeaderWrapper-hasSelect": "Polaris-ResourceList__HeaderWrapper--hasSelect",
16848 "HeaderWrapper-hasAlternateTool": "Polaris-ResourceList__HeaderWrapper--hasAlternateTool",
16849 "HeaderWrapper-hasSort": "Polaris-ResourceList__HeaderWrapper--hasSort",
16850 "HeaderTitleWrapper": "Polaris-ResourceList__HeaderTitleWrapper",
16851 "BulkActionsWrapper": "Polaris-ResourceList__BulkActionsWrapper",
16852 "CheckableButtonWrapper": "Polaris-ResourceList__CheckableButtonWrapper",
16853 "SelectButtonWrapper": "Polaris-ResourceList__SelectButtonWrapper",
16854 "EmptySearchResultWrapper": "Polaris-ResourceList__EmptySearchResultWrapper",
16855 "ResourceListWrapper": "Polaris-ResourceList__ResourceListWrapper",
16856 "ItemWrapper": "Polaris-ResourceList__ItemWrapper",
16857 "ItemWrapper-isLoading": "Polaris-ResourceList__ItemWrapper--isLoading",
16858 "SpinnerContainer": "Polaris-ResourceList__SpinnerContainer",
16859 "LoadingOverlay": "Polaris-ResourceList__LoadingOverlay",
16860 "DisabledPointerEvents": "Polaris-ResourceList__DisabledPointerEvents",
16861 "disableTextSelection": "Polaris-ResourceList--disableTextSelection"
16862};
16863
16864var SMALL_SCREEN_WIDTH = 458;
16865var SMALL_SPINNER_HEIGHT = 28;
16866var LARGE_SPINNER_HEIGHT = 45;
16867
16868var ResourceList =
16869/*#__PURE__*/
16870function (_React$Component) {
16871 _inherits(ResourceList, _React$Component);
16872
16873 function ResourceList(props) {
16874 var _this;
16875
16876 _classCallCheck(this, ResourceList);
16877
16878 _this = _possibleConstructorReturn(this, _getPrototypeOf(ResourceList).call(this, props));
16879 _this.listRef = React__default.createRef();
16880 _this.handleResize = debounce(function () {
16881 var selectedItems = _this.props.selectedItems;
16882 var _this$state = _this.state,
16883 selectMode = _this$state.selectMode,
16884 smallScreen = _this$state.smallScreen;
16885 var newSmallScreen = isSmallScreen();
16886
16887 if (selectedItems && selectedItems.length === 0 && selectMode && !newSmallScreen) {
16888 _this.handleSelectMode(false);
16889 }
16890
16891 if (smallScreen !== newSmallScreen) {
16892 _this.setState({
16893 smallScreen: newSmallScreen
16894 });
16895 }
16896 }, 50, {
16897 leading: true,
16898 trailing: true,
16899 maxWait: 50
16900 });
16901
16902 _this.setLoadingPosition = function () {
16903 if (_this.listRef.current != null) {
16904 if (typeof window === 'undefined') {
16905 return;
16906 }
16907
16908 var overlay = _this.listRef.current.getBoundingClientRect();
16909
16910 var viewportHeight = Math.max(document.documentElement ? document.documentElement.clientHeight : 0, window.innerHeight || 0);
16911 var overflow = viewportHeight - overlay.height;
16912 var spinnerHeight = _this.props.items.length === 1 ? SMALL_SPINNER_HEIGHT : LARGE_SPINNER_HEIGHT;
16913 var spinnerPosition = overflow > 0 ? (overlay.height - spinnerHeight) / 2 : (viewportHeight - overlay.top - spinnerHeight) / 2;
16914
16915 _this.setState({
16916 loadingPosition: spinnerPosition
16917 });
16918 }
16919 };
16920
16921 _this.handleSelectAllItemsInStore = function () {
16922 var _this$props = _this.props,
16923 onSelectionChange = _this$props.onSelectionChange,
16924 selectedItems = _this$props.selectedItems,
16925 items = _this$props.items,
16926 _this$props$idForItem = _this$props.idForItem,
16927 idForItem = _this$props$idForItem === void 0 ? defaultIdForItem : _this$props$idForItem;
16928 var newlySelectedItems = selectedItems === SELECT_ALL_ITEMS ? getAllItemsOnPage(items, idForItem) : SELECT_ALL_ITEMS;
16929
16930 if (onSelectionChange) {
16931 onSelectionChange(newlySelectedItems);
16932 }
16933 };
16934
16935 _this.renderItem = function (item, index) {
16936 var _this$props2 = _this.props,
16937 renderItem = _this$props2.renderItem,
16938 _this$props2$idForIte = _this$props2.idForItem,
16939 idForItem = _this$props2$idForIte === void 0 ? defaultIdForItem : _this$props2$idForIte;
16940 var id = idForItem(item, index);
16941 return React__default.createElement("li", {
16942 key: id,
16943 className: styles$1t.ItemWrapper
16944 }, renderItem(item, id, index));
16945 };
16946
16947 _this.handleMultiSelectionChange = function (lastSelected, currentSelected, resolveItemId) {
16948 var min = Math.min(lastSelected, currentSelected);
16949 var max = Math.max(lastSelected, currentSelected);
16950 return _this.props.items.slice(min, max + 1).map(resolveItemId);
16951 };
16952
16953 _this.handleCheckableButtonRegistration = function (key, button) {
16954 _this.setState(function (_ref) {
16955 var checkableButtons = _ref.checkableButtons;
16956 return {
16957 checkableButtons: new Map(checkableButtons).set(key, button)
16958 };
16959 });
16960 };
16961
16962 _this.handleSelectionChange = function (selected, id, sortOrder, shiftKey) {
16963 var _this$props3 = _this.props,
16964 onSelectionChange = _this$props3.onSelectionChange,
16965 selectedItems = _this$props3.selectedItems,
16966 items = _this$props3.items,
16967 _this$props3$idForIte = _this$props3.idForItem,
16968 idForItem = _this$props3$idForIte === void 0 ? defaultIdForItem : _this$props3$idForIte,
16969 resolveItemId = _this$props3.resolveItemId;
16970 var lastSelected = _this.state.lastSelected;
16971
16972 if (selectedItems == null || onSelectionChange == null) {
16973 return;
16974 }
16975
16976 var newlySelectedItems = selectedItems === SELECT_ALL_ITEMS ? getAllItemsOnPage(items, idForItem) : _toConsumableArray(selectedItems);
16977
16978 if (sortOrder !== undefined) {
16979 _this.setState({
16980 lastSelected: sortOrder
16981 });
16982 }
16983
16984 var selectedIds = [id];
16985
16986 if (shiftKey && lastSelected != null && sortOrder !== undefined && resolveItemId) {
16987 selectedIds = _this.handleMultiSelectionChange(lastSelected, sortOrder, resolveItemId);
16988 }
16989
16990 newlySelectedItems = _toConsumableArray(new Set([].concat(_toConsumableArray(newlySelectedItems), _toConsumableArray(selectedIds))));
16991
16992 if (!selected) {
16993 var _iteratorNormalCompletion = true;
16994 var _didIteratorError = false;
16995 var _iteratorError = undefined;
16996
16997 try {
16998 for (var _iterator = selectedIds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
16999 var selectedId = _step.value;
17000 newlySelectedItems.splice(newlySelectedItems.indexOf(selectedId), 1);
17001 }
17002 } catch (err) {
17003 _didIteratorError = true;
17004 _iteratorError = err;
17005 } finally {
17006 try {
17007 if (!_iteratorNormalCompletion && _iterator.return != null) {
17008 _iterator.return();
17009 }
17010 } finally {
17011 if (_didIteratorError) {
17012 throw _iteratorError;
17013 }
17014 }
17015 }
17016 }
17017
17018 if (newlySelectedItems.length === 0 && !isSmallScreen()) {
17019 _this.handleSelectMode(false);
17020 } else if (newlySelectedItems.length > 0) {
17021 _this.handleSelectMode(true);
17022 }
17023
17024 if (onSelectionChange) {
17025 onSelectionChange(newlySelectedItems);
17026 }
17027 };
17028
17029 _this.handleSelectMode = function (selectMode) {
17030 var onSelectionChange = _this.props.onSelectionChange;
17031
17032 _this.setState({
17033 selectMode
17034 });
17035
17036 if (!selectMode && onSelectionChange) {
17037 onSelectionChange([]);
17038 }
17039 };
17040
17041 _this.handleToggleAll = function () {
17042 var _this$props4 = _this.props,
17043 onSelectionChange = _this$props4.onSelectionChange,
17044 selectedItems = _this$props4.selectedItems,
17045 items = _this$props4.items,
17046 _this$props4$idForIte = _this$props4.idForItem,
17047 idForItem = _this$props4$idForIte === void 0 ? defaultIdForItem : _this$props4$idForIte;
17048 var checkableButtons = _this.state.checkableButtons;
17049 var newlySelectedItems = [];
17050
17051 if (Array.isArray(selectedItems) && selectedItems.length === items.length || selectedItems === SELECT_ALL_ITEMS) {
17052 newlySelectedItems = [];
17053 } else {
17054 newlySelectedItems = items.map(function (item, index) {
17055 var id = idForItem(item, index);
17056 return id;
17057 });
17058 }
17059
17060 if (newlySelectedItems.length === 0 && !isSmallScreen()) {
17061 _this.handleSelectMode(false);
17062 } else if (newlySelectedItems.length > 0) {
17063 _this.handleSelectMode(true);
17064 }
17065
17066 var checkbox;
17067
17068 if (isSmallScreen()) {
17069 checkbox = checkableButtons.get('bulkSm');
17070 } else if (newlySelectedItems.length === 0) {
17071 checkbox = checkableButtons.get('plain');
17072 } else {
17073 checkbox = checkableButtons.get('bulkLg');
17074 }
17075
17076 if (onSelectionChange) {
17077 onSelectionChange(newlySelectedItems);
17078 } // setTimeout ensures execution after the Transition on BulkActions
17079
17080
17081 setTimeout(function () {
17082 checkbox && checkbox.focus();
17083 }, 0);
17084 };
17085
17086 var selectedItems = props.selectedItems,
17087 intl = props.polaris.intl;
17088 _this.defaultResourceName = {
17089 singular: intl.translate('Polaris.ResourceList.defaultItemSingular'),
17090 plural: intl.translate('Polaris.ResourceList.defaultItemPlural')
17091 }; // eslint-disable-next-line react/state-in-constructor
17092
17093 _this.state = {
17094 selectMode: Boolean(selectedItems && selectedItems.length > 0),
17095 loadingPosition: 0,
17096 lastSelected: null,
17097 smallScreen: isSmallScreen(),
17098 checkableButtons: new Map()
17099 };
17100 return _this;
17101 }
17102
17103 _createClass(ResourceList, [{
17104 key: "componentDidMount",
17105 value: function componentDidMount() {
17106 this.forceUpdate();
17107
17108 if (this.props.loading) {
17109 this.setLoadingPosition();
17110 }
17111 }
17112 }, {
17113 key: "componentDidUpdate",
17114 value: function componentDidUpdate(_ref2) {
17115 var prevLoading = _ref2.loading,
17116 prevItems = _ref2.items,
17117 prevSelectedItems = _ref2.selectedItems;
17118 var _this$props5 = this.props,
17119 selectedItems = _this$props5.selectedItems,
17120 loading = _this$props5.loading;
17121
17122 if (this.listRef.current && this.itemsExist() && !this.itemsExist(prevItems)) {
17123 this.forceUpdate();
17124 }
17125
17126 if (loading && !prevLoading) {
17127 this.setLoadingPosition();
17128 }
17129
17130 if (selectedItems && selectedItems.length > 0 && !this.state.selectMode) {
17131 // eslint-disable-next-line react/no-did-update-set-state
17132 this.setState({
17133 selectMode: true
17134 });
17135 return;
17136 }
17137
17138 if (prevSelectedItems && prevSelectedItems.length > 0 && (!selectedItems || selectedItems.length === 0) && !isSmallScreen()) {
17139 // eslint-disable-next-line react/no-did-update-set-state
17140 this.setState({
17141 selectMode: false
17142 });
17143 }
17144 }
17145 }, {
17146 key: "render",
17147 value: function render() {
17148 var _this2 = this;
17149
17150 var _this$props6 = this.props,
17151 items = _this$props6.items,
17152 promotedBulkActions = _this$props6.promotedBulkActions,
17153 bulkActions = _this$props6.bulkActions,
17154 filterControl = _this$props6.filterControl,
17155 loading = _this$props6.loading,
17156 _this$props6$showHead = _this$props6.showHeader,
17157 showHeader = _this$props6$showHead === void 0 ? false : _this$props6$showHead,
17158 sortOptions = _this$props6.sortOptions,
17159 sortValue = _this$props6.sortValue,
17160 alternateTool = _this$props6.alternateTool,
17161 selectedItems = _this$props6.selectedItems,
17162 _this$props6$resource = _this$props6.resourceName,
17163 resourceName = _this$props6$resource === void 0 ? this.defaultResourceName : _this$props6$resource,
17164 onSortChange = _this$props6.onSortChange,
17165 intl = _this$props6.polaris.intl;
17166 var _this$state2 = this.state,
17167 selectMode = _this$state2.selectMode,
17168 loadingPosition = _this$state2.loadingPosition,
17169 smallScreen = _this$state2.smallScreen;
17170 var filterControlMarkup = filterControl ? React__default.createElement("div", {
17171 className: styles$1t.FiltersWrapper
17172 }, filterControl) : null;
17173 var bulkActionsMarkup = this.selectable ? React__default.createElement("div", {
17174 className: styles$1t.BulkActionsWrapper
17175 }, React__default.createElement(BulkActions$1, {
17176 label: this.bulkActionsLabel,
17177 accessibilityLabel: this.bulkActionsAccessibilityLabel,
17178 selected: this.bulkSelectState,
17179 onToggleAll: this.handleToggleAll,
17180 selectMode: selectMode,
17181 onSelectModeToggle: this.handleSelectMode,
17182 promotedActions: promotedBulkActions,
17183 paginatedSelectAllAction: this.paginatedSelectAllAction,
17184 paginatedSelectAllText: this.paginatedSelectAllText,
17185 actions: bulkActions,
17186 disabled: loading,
17187 smallScreen: smallScreen
17188 })) : null;
17189 var sortingSelectMarkup = sortOptions && sortOptions.length > 0 && !alternateTool ? React__default.createElement("div", {
17190 className: styles$1t.SortWrapper
17191 }, React__default.createElement(Select, {
17192 label: intl.translate('Polaris.ResourceList.sortingLabel'),
17193 labelInline: !smallScreen,
17194 labelHidden: smallScreen,
17195 options: sortOptions,
17196 onChange: onSortChange,
17197 value: sortValue,
17198 disabled: selectMode
17199 })) : null;
17200 var alternateToolMarkup = alternateTool && !sortingSelectMarkup ? React__default.createElement("div", {
17201 className: styles$1t.AlternateToolWrapper
17202 }, alternateTool) : null;
17203 var headerTitleMarkup = React__default.createElement("div", {
17204 className: styles$1t.HeaderTitleWrapper
17205 }, this.headerTitle);
17206 var selectButtonMarkup = this.selectable ? React__default.createElement("div", {
17207 className: styles$1t.SelectButtonWrapper
17208 }, React__default.createElement(Button, {
17209 disabled: selectMode,
17210 icon: EnableSelectionMinor,
17211 onClick: this.handleSelectMode.bind(this, true)
17212 }, intl.translate('Polaris.ResourceList.selectButtonText'))) : null;
17213 var checkableButtonMarkup = this.selectable ? React__default.createElement("div", {
17214 className: styles$1t.CheckableButtonWrapper
17215 }, React__default.createElement(CheckableButton, {
17216 accessibilityLabel: this.bulkActionsAccessibilityLabel,
17217 label: this.headerTitle,
17218 onToggleAll: this.handleToggleAll,
17219 plain: true,
17220 disabled: loading
17221 })) : null;
17222 var needsHeader = this.selectable || sortOptions && sortOptions.length > 0 || alternateTool;
17223 var headerWrapperOverlay = loading ? React__default.createElement("div", {
17224 className: styles$1t['HeaderWrapper-overlay']
17225 }) : null;
17226 var showEmptyState = filterControl && !this.itemsExist() && !loading;
17227 var headerMarkup = !showEmptyState && (showHeader || needsHeader) && this.listRef.current && React__default.createElement("div", {
17228 className: styles$1t.HeaderOuterWrapper
17229 }, React__default.createElement(Sticky$1, {
17230 boundingElement: this.listRef.current
17231 }, function (isSticky) {
17232 var headerClassName = classNames(styles$1t.HeaderWrapper, sortOptions && sortOptions.length > 0 && !alternateTool && styles$1t['HeaderWrapper-hasSort'], alternateTool && styles$1t['HeaderWrapper-hasAlternateTool'], _this2.selectable && styles$1t['HeaderWrapper-hasSelect'], loading && styles$1t['HeaderWrapper-disabled'], _this2.selectable && selectMode && styles$1t['HeaderWrapper-inSelectMode'], isSticky && styles$1t['HeaderWrapper-isSticky']);
17233 return React__default.createElement("div", {
17234 className: headerClassName
17235 }, React__default.createElement(EventListener, {
17236 event: "resize",
17237 handler: _this2.handleResize
17238 }), headerWrapperOverlay, React__default.createElement("div", {
17239 className: styles$1t.HeaderContentWrapper
17240 }, headerTitleMarkup, checkableButtonMarkup, alternateToolMarkup, sortingSelectMarkup, selectButtonMarkup), bulkActionsMarkup);
17241 }));
17242 var emptyStateMarkup = showEmptyState ? React__default.createElement("div", {
17243 className: styles$1t.EmptySearchResultWrapper
17244 }, React__default.createElement(EmptySearchResult, Object.assign({}, this.emptySearchResultText, {
17245 withIllustration: true
17246 }))) : null;
17247 var defaultTopPadding = 8;
17248 var topPadding = loadingPosition > 0 ? loadingPosition : defaultTopPadding;
17249 var spinnerStyle = {
17250 paddingTop: "".concat(topPadding, "px")
17251 };
17252 var spinnerSize = items.length < 2 ? 'small' : 'large';
17253 var loadingOverlay = loading ? React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
17254 className: styles$1t.SpinnerContainer,
17255 style: spinnerStyle
17256 }, React__default.createElement(Spinner, {
17257 size: spinnerSize,
17258 accessibilityLabel: "Items are loading"
17259 })), React__default.createElement("div", {
17260 className: styles$1t.LoadingOverlay
17261 })) : null;
17262 var className = classNames(styles$1t.ItemWrapper, loading && styles$1t['ItemWrapper-isLoading']);
17263 var loadingWithoutItemsMarkup = loading && !this.itemsExist() ? React__default.createElement("div", {
17264 className: className,
17265 tabIndex: -1
17266 }, loadingOverlay) : null;
17267 var resourceListClassName = classNames(styles$1t.ResourceList, loading && styles$1t.disabledPointerEvents, selectMode && styles$1t.disableTextSelection);
17268 var listMarkup = this.itemsExist() ? React__default.createElement("ul", {
17269 className: resourceListClassName,
17270 ref: this.listRef,
17271 "aria-live": "polite",
17272 "aria-busy": loading
17273 }, loadingOverlay, items.map(this.renderItem)) : emptyStateMarkup;
17274 var context = {
17275 selectable: this.selectable,
17276 selectedItems,
17277 selectMode,
17278 resourceName,
17279 loading,
17280 onSelectionChange: this.handleSelectionChange,
17281 registerCheckableButtons: this.handleCheckableButtonRegistration
17282 };
17283 return React__default.createElement(ResourceListContext.Provider, {
17284 value: context
17285 }, React__default.createElement("div", {
17286 className: styles$1t.ResourceListWrapper
17287 }, filterControlMarkup, headerMarkup, listMarkup, loadingWithoutItemsMarkup));
17288 }
17289 }, {
17290 key: "itemsExist",
17291 value: function itemsExist(items) {
17292 return (items || this.props.items).length > 0;
17293 }
17294 }, {
17295 key: "selectable",
17296 get: function get() {
17297 var _this$props7 = this.props,
17298 promotedBulkActions = _this$props7.promotedBulkActions,
17299 bulkActions = _this$props7.bulkActions,
17300 selectable = _this$props7.selectable;
17301 return Boolean(promotedBulkActions && promotedBulkActions.length > 0 || bulkActions && bulkActions.length > 0 || selectable);
17302 }
17303 }, {
17304 key: "bulkSelectState",
17305 get: function get() {
17306 var _this$props8 = this.props,
17307 selectedItems = _this$props8.selectedItems,
17308 items = _this$props8.items;
17309 var selectState = 'indeterminate';
17310
17311 if (!selectedItems || Array.isArray(selectedItems) && selectedItems.length === 0) {
17312 selectState = false;
17313 } else if (selectedItems === SELECT_ALL_ITEMS || Array.isArray(selectedItems) && selectedItems.length === items.length) {
17314 selectState = true;
17315 }
17316
17317 return selectState;
17318 }
17319 }, {
17320 key: "headerTitle",
17321 get: function get() {
17322 var _this$props9 = this.props,
17323 _this$props9$resource = _this$props9.resourceName,
17324 resourceName = _this$props9$resource === void 0 ? this.defaultResourceName : _this$props9$resource,
17325 items = _this$props9.items,
17326 intl = _this$props9.polaris.intl,
17327 loading = _this$props9.loading,
17328 totalItemsCount = _this$props9.totalItemsCount;
17329 var itemsCount = items.length;
17330 var resource = !loading && (!totalItemsCount && itemsCount === 1 || totalItemsCount === 1) ? resourceName.singular : resourceName.plural;
17331
17332 if (loading) {
17333 return intl.translate('Polaris.ResourceList.loading', {
17334 resource
17335 });
17336 } else if (totalItemsCount) {
17337 return intl.translate('Polaris.ResourceList.showingTotalCount', {
17338 itemsCount,
17339 totalItemsCount,
17340 resource
17341 });
17342 } else {
17343 return intl.translate('Polaris.ResourceList.showing', {
17344 itemsCount,
17345 resource
17346 });
17347 }
17348 }
17349 }, {
17350 key: "bulkActionsLabel",
17351 get: function get() {
17352 var _this$props10 = this.props,
17353 _this$props10$selecte = _this$props10.selectedItems,
17354 selectedItems = _this$props10$selecte === void 0 ? [] : _this$props10$selecte,
17355 items = _this$props10.items,
17356 intl = _this$props10.polaris.intl;
17357 var selectedItemsCount = selectedItems === SELECT_ALL_ITEMS ? "".concat(items.length, "+") : selectedItems.length;
17358 return intl.translate('Polaris.ResourceList.selected', {
17359 selectedItemsCount
17360 });
17361 }
17362 }, {
17363 key: "bulkActionsAccessibilityLabel",
17364 get: function get() {
17365 var _this$props11 = this.props,
17366 _this$props11$resourc = _this$props11.resourceName,
17367 resourceName = _this$props11$resourc === void 0 ? this.defaultResourceName : _this$props11$resourc,
17368 _this$props11$selecte = _this$props11.selectedItems,
17369 selectedItems = _this$props11$selecte === void 0 ? [] : _this$props11$selecte,
17370 items = _this$props11.items,
17371 intl = _this$props11.polaris.intl;
17372 var selectedItemsCount = selectedItems.length;
17373 var totalItemsCount = items.length;
17374 var allSelected = selectedItemsCount === totalItemsCount;
17375
17376 if (totalItemsCount === 1 && allSelected) {
17377 return intl.translate('Polaris.ResourceList.a11yCheckboxDeselectAllSingle', {
17378 resourceNameSingular: resourceName.singular
17379 });
17380 } else if (totalItemsCount === 1) {
17381 return intl.translate('Polaris.ResourceList.a11yCheckboxSelectAllSingle', {
17382 resourceNameSingular: resourceName.singular
17383 });
17384 } else if (allSelected) {
17385 return intl.translate('Polaris.ResourceList.a11yCheckboxDeselectAllMultiple', {
17386 itemsLength: items.length,
17387 resourceNamePlural: resourceName.plural
17388 });
17389 } else {
17390 return intl.translate('Polaris.ResourceList.a11yCheckboxSelectAllMultiple', {
17391 itemsLength: items.length,
17392 resourceNamePlural: resourceName.plural
17393 });
17394 }
17395 }
17396 }, {
17397 key: "paginatedSelectAllText",
17398 get: function get() {
17399 var _this$props12 = this.props,
17400 hasMoreItems = _this$props12.hasMoreItems,
17401 selectedItems = _this$props12.selectedItems,
17402 items = _this$props12.items,
17403 _this$props12$resourc = _this$props12.resourceName,
17404 resourceName = _this$props12$resourc === void 0 ? this.defaultResourceName : _this$props12$resourc,
17405 intl = _this$props12.polaris.intl;
17406
17407 if (!this.selectable || !hasMoreItems) {
17408 return;
17409 }
17410
17411 if (selectedItems === SELECT_ALL_ITEMS) {
17412 return intl.translate('Polaris.ResourceList.allItemsSelected', {
17413 itemsLength: items.length,
17414 resourceNamePlural: resourceName.plural
17415 });
17416 }
17417 }
17418 }, {
17419 key: "paginatedSelectAllAction",
17420 get: function get() {
17421 var _this$props13 = this.props,
17422 hasMoreItems = _this$props13.hasMoreItems,
17423 selectedItems = _this$props13.selectedItems,
17424 items = _this$props13.items,
17425 _this$props13$resourc = _this$props13.resourceName,
17426 resourceName = _this$props13$resourc === void 0 ? this.defaultResourceName : _this$props13$resourc,
17427 intl = _this$props13.polaris.intl;
17428
17429 if (!this.selectable || !hasMoreItems) {
17430 return;
17431 }
17432
17433 var actionText = selectedItems === SELECT_ALL_ITEMS ? intl.translate('Polaris.Common.undo') : intl.translate('Polaris.ResourceList.selectAllItems', {
17434 itemsLength: items.length,
17435 resourceNamePlural: resourceName.plural
17436 });
17437 return {
17438 content: actionText,
17439 onAction: this.handleSelectAllItemsInStore
17440 };
17441 }
17442 }, {
17443 key: "emptySearchResultText",
17444 get: function get() {
17445 var _this$props14 = this.props,
17446 intl = _this$props14.polaris.intl,
17447 _this$props14$resourc = _this$props14.resourceName,
17448 resourceName = _this$props14$resourc === void 0 ? this.defaultResourceName : _this$props14$resourc;
17449 return {
17450 title: intl.translate('Polaris.ResourceList.emptySearchResultTitle', {
17451 resourceNamePlural: resourceName.plural
17452 }),
17453 description: intl.translate('Polaris.ResourceList.emptySearchResultDescription')
17454 };
17455 }
17456 }]);
17457
17458 return ResourceList;
17459}(React__default.Component);
17460
17461ResourceList.Item = ResourceItem; // eslint-disable-next-line import/no-deprecated
17462
17463ResourceList.FilterControl = FilterControl;
17464
17465function getAllItemsOnPage(items, idForItem) {
17466 return items.map(function (item, index) {
17467 return idForItem(item, index);
17468 });
17469}
17470
17471function defaultIdForItem(item, index) {
17472 return Object.prototype.hasOwnProperty.call(item, 'id') ? item.id : index.toString();
17473}
17474
17475function isSmallScreen() {
17476 return typeof window === 'undefined' ? false : window.innerWidth < SMALL_SCREEN_WIDTH;
17477} // Use named export once withAppProvider is refactored away
17478// eslint-disable-next-line import/no-default-export
17479
17480
17481var ResourceList$1 = withAppProvider()(ResourceList);
17482
17483/** @deprecated Use `ResourcePicker` from `@shopify/app-bridge-react` instead. */
17484
17485var ResourcePicker =
17486/*#__PURE__*/
17487function (_React$PureComponent) {
17488 _inherits(ResourcePicker, _React$PureComponent);
17489
17490 function ResourcePicker() {
17491 var _this;
17492
17493 _classCallCheck(this, ResourcePicker);
17494
17495 _this = _possibleConstructorReturn(this, _getPrototypeOf(ResourcePicker).apply(this, arguments));
17496 _this.focusReturnPoint = null;
17497 return _this;
17498 }
17499
17500 _createClass(ResourcePicker, [{
17501 key: "componentDidMount",
17502 value: function componentDidMount() {
17503 // eslint-disable-next-line no-console
17504 console.warn('Deprecation: `ResourcePicker` is deprecated and will be removed in v5.0. Use `ResourcePicker` from `@shopify/app-bridge-react` instead: https://help.shopify.com/en/api/embedded-apps/app-bridge/react-components/resourcepicker');
17505
17506 if (this.props.polaris.appBridge == null) {
17507 return;
17508 }
17509
17510 var _this$props = this.props,
17511 open = _this$props.open,
17512 resourceType = _this$props.resourceType,
17513 initialQuery = _this$props.initialQuery,
17514 _this$props$showHidde = _this$props.showHidden,
17515 showHidden = _this$props$showHidde === void 0 ? true : _this$props$showHidde,
17516 _this$props$allowMult = _this$props.allowMultiple,
17517 allowMultiple = _this$props$allowMult === void 0 ? true : _this$props$allowMult,
17518 _this$props$showVaria = _this$props.showVariants,
17519 showVariants = _this$props$showVaria === void 0 ? true : _this$props$showVaria,
17520 onSelection = _this$props.onSelection,
17521 onCancel = _this$props.onCancel;
17522 var appBridge = this.props.polaris.appBridge;
17523 this.appBridgeResourcePicker = ResourcePicker$2.create(appBridge, {
17524 resourceType: ResourcePicker$2.ResourceType[resourceType],
17525 options: {
17526 initialQuery,
17527 showHidden,
17528 selectMultiple: allowMultiple,
17529 showVariants
17530 }
17531 });
17532
17533 if (onSelection != null) {
17534 this.appBridgeResourcePicker.subscribe(ResourcePicker$2.Action.SELECT, function (_ref) {
17535 var selection = _ref.selection;
17536 onSelection({
17537 selection
17538 });
17539 });
17540 }
17541
17542 if (onCancel != null) {
17543 this.appBridgeResourcePicker.subscribe(ResourcePicker$2.Action.CANCEL, onCancel);
17544 }
17545
17546 if (open) {
17547 this.focusReturnPoint = document.activeElement;
17548 this.appBridgeResourcePicker.dispatch(ResourcePicker$2.Action.OPEN);
17549 }
17550 }
17551 }, {
17552 key: "componentDidUpdate",
17553 value: function componentDidUpdate(prevProps) {
17554 if (this.appBridgeResourcePicker == null) {
17555 return;
17556 }
17557
17558 var _this$props2 = this.props,
17559 open = _this$props2.open,
17560 initialQuery = _this$props2.initialQuery,
17561 _this$props2$showHidd = _this$props2.showHidden,
17562 showHidden = _this$props2$showHidd === void 0 ? false : _this$props2$showHidd,
17563 _this$props2$allowMul = _this$props2.allowMultiple,
17564 allowMultiple = _this$props2$allowMul === void 0 ? true : _this$props2$allowMul,
17565 _this$props2$showVari = _this$props2.showVariants,
17566 showVariants = _this$props2$showVari === void 0 ? true : _this$props2$showVari,
17567 onSelection = _this$props2.onSelection,
17568 onCancel = _this$props2.onCancel;
17569 var wasOpen = prevProps.open;
17570
17571 var prevAppBridge = prevProps.polaris.appBridge,
17572 prevResourcePickerProps = __rest(prevProps, ["polaris"]);
17573
17574 var _a = this.props,
17575 appBridge = _a.polaris.appBridge,
17576 resourcePickerProps = __rest(_a, ["polaris"]);
17577
17578 if (!isEqual(prevResourcePickerProps, resourcePickerProps) || !isEqual(prevAppBridge, appBridge)) {
17579 this.appBridgeResourcePicker.set({
17580 initialQuery,
17581 showHidden,
17582 selectMultiple: allowMultiple,
17583 showVariants
17584 });
17585 }
17586
17587 this.appBridgeResourcePicker.unsubscribe();
17588
17589 if (onSelection != null) {
17590 this.appBridgeResourcePicker.subscribe(ResourcePicker$2.Action.SELECT, function (_ref2) {
17591 var selection = _ref2.selection;
17592 onSelection({
17593 selection
17594 });
17595 });
17596 }
17597
17598 if (onCancel != null) {
17599 this.appBridgeResourcePicker.subscribe(ResourcePicker$2.Action.CANCEL, onCancel);
17600 }
17601
17602 if (wasOpen !== open) {
17603 if (open) {
17604 this.appBridgeResourcePicker.dispatch(ResourcePicker$2.Action.OPEN);
17605 } else {
17606 this.appBridgeResourcePicker.dispatch(ResourcePicker$2.Action.CLOSE);
17607 }
17608 }
17609
17610 if (!wasOpen && open) {
17611 this.focusReturnPoint = document.activeElement;
17612 } else if (wasOpen && !open && this.focusReturnPoint != null && document.contains(this.focusReturnPoint)) {
17613 this.focusReturnPoint.focus();
17614 this.focusReturnPoint = null;
17615 }
17616 }
17617 }, {
17618 key: "componentWillUnmount",
17619 value: function componentWillUnmount() {
17620 if (this.appBridgeResourcePicker == null) {
17621 return;
17622 }
17623
17624 this.appBridgeResourcePicker.unsubscribe();
17625 }
17626 }, {
17627 key: "render",
17628 value: function render() {
17629 return null;
17630 }
17631 }]);
17632
17633 return ResourcePicker;
17634}(React__default.PureComponent); // Use named export once withAppProvider is refactored away
17635// eslint-disable-next-line import/no-default-export
17636
17637
17638var ResourcePicker$1 = withAppProvider()(ResourcePicker);
17639
17640function SettingToggle(_ref) {
17641 var enabled = _ref.enabled,
17642 action = _ref.action,
17643 children = _ref.children;
17644 var actionMarkup = action ? buttonFrom(action, {
17645 primary: !enabled
17646 }) : null;
17647 return React__default.createElement(Card, {
17648 sectioned: true
17649 }, React__default.createElement(SettingAction, {
17650 action: actionMarkup
17651 }, children));
17652}
17653
17654var styles$1u = {
17655 "SkeletonBodyTextContainer": "Polaris-SkeletonBodyText__SkeletonBodyTextContainer",
17656 "SkeletonBodyText": "Polaris-SkeletonBodyText"
17657};
17658
17659function SkeletonBodyText(_ref) {
17660 var _ref$lines = _ref.lines,
17661 lines = _ref$lines === void 0 ? 3 : _ref$lines;
17662 var bodyTextLines = [];
17663
17664 for (var i = 0; i < lines; i++) {
17665 bodyTextLines.push(React__default.createElement("div", {
17666 className: styles$1u.SkeletonBodyText,
17667 key: i
17668 }));
17669 }
17670
17671 return React__default.createElement("div", {
17672 className: styles$1u.SkeletonBodyTextContainer
17673 }, bodyTextLines);
17674}
17675
17676var styles$1v = {
17677 "DisplayText": "Polaris-SkeletonDisplayText__DisplayText",
17678 "sizeSmall": "Polaris-SkeletonDisplayText--sizeSmall",
17679 "sizeMedium": "Polaris-SkeletonDisplayText--sizeMedium",
17680 "sizeLarge": "Polaris-SkeletonDisplayText--sizeLarge",
17681 "sizeExtraLarge": "Polaris-SkeletonDisplayText--sizeExtraLarge"
17682};
17683
17684function SkeletonDisplayText(_ref) {
17685 var _ref$size = _ref.size,
17686 size = _ref$size === void 0 ? 'medium' : _ref$size;
17687 var className = classNames(styles$1v.DisplayText, size && styles$1v[variationName('size', size)]);
17688 return React__default.createElement("div", {
17689 className: className
17690 });
17691}
17692
17693var styles$1w = {
17694 "Page": "Polaris-SkeletonPage__Page",
17695 "fullWidth": "Polaris-SkeletonPage--fullWidth",
17696 "narrowWidth": "Polaris-SkeletonPage--narrowWidth",
17697 "Content": "Polaris-SkeletonPage__Content",
17698 "Header": "Polaris-SkeletonPage__Header",
17699 "Header-hasSecondaryActions": "Polaris-SkeletonPage__Header--hasSecondaryActions",
17700 "BreadcrumbAction": "Polaris-SkeletonPage__BreadcrumbAction",
17701 "TitleAndPrimaryAction": "Polaris-SkeletonPage__TitleAndPrimaryAction",
17702 "Title": "Polaris-SkeletonPage__Title",
17703 "PrimaryAction": "Polaris-SkeletonPage__PrimaryAction",
17704 "Actions": "Polaris-SkeletonPage__Actions",
17705 "Action": "Polaris-SkeletonPage__Action"
17706};
17707
17708function SkeletonPage(_ref) {
17709 var children = _ref.children,
17710 fullWidth = _ref.fullWidth,
17711 narrowWidth = _ref.narrowWidth,
17712 singleColumn = _ref.singleColumn,
17713 primaryAction = _ref.primaryAction,
17714 secondaryActions = _ref.secondaryActions,
17715 _ref$title = _ref.title,
17716 title = _ref$title === void 0 ? '' : _ref$title,
17717 breadcrumbs = _ref.breadcrumbs;
17718
17719 if (singleColumn) {
17720 // eslint-disable-next-line no-console
17721 console.warn('Deprecation: The singleColumn prop has been renamed to narrowWidth to better represents its use and will be removed in v5.0.');
17722 }
17723
17724 var i18n = useI18n();
17725 var appBridge = useAppBridge();
17726 var className = classNames(styles$1w.Page, fullWidth && styles$1w.fullWidth, (narrowWidth || singleColumn) && styles$1w.narrowWidth);
17727 var headerClassName = classNames(styles$1w.Header, breadcrumbs && styles$1w['Header-hasBreadcrumbs'], secondaryActions && styles$1w['Header-hasSecondaryActions']);
17728 var titleMarkup = title !== null ? renderTitle(title) : null;
17729 var primaryActionMarkup = primaryAction ? React__default.createElement("div", {
17730 className: styles$1w.PrimaryAction
17731 }, React__default.createElement(SkeletonDisplayText, {
17732 size: "large"
17733 })) : null;
17734 var secondaryActionsMarkup = secondaryActions ? renderSecondaryActions(secondaryActions) : null;
17735 var breadcrumbMarkup = breadcrumbs ? React__default.createElement("div", {
17736 className: styles$1w.BreadcrumbAction,
17737 style: {
17738 width: 60
17739 }
17740 }, React__default.createElement(SkeletonBodyText, {
17741 lines: 1
17742 })) : null;
17743 var headerMarkup = !appBridge ? React__default.createElement("div", {
17744 className: headerClassName
17745 }, breadcrumbMarkup, React__default.createElement("div", {
17746 className: styles$1w.TitleAndPrimaryAction
17747 }, titleMarkup, primaryActionMarkup), secondaryActionsMarkup) : null;
17748 return React__default.createElement("div", {
17749 className: className,
17750 role: "status",
17751 "aria-label": i18n.translate('Polaris.SkeletonPage.loadingLabel')
17752 }, headerMarkup, React__default.createElement("div", {
17753 className: styles$1w.Content
17754 }, children));
17755}
17756
17757function renderSecondaryActions(actionCount) {
17758 var actions = [];
17759
17760 for (var i = 0; i < actionCount; i++) {
17761 var width = Math.round(Math.random() * 40 + 60);
17762 actions.push(React__default.createElement("div", {
17763 className: styles$1w.Action,
17764 style: {
17765 width
17766 },
17767 key: i
17768 }, React__default.createElement(SkeletonBodyText, {
17769 lines: 1
17770 })));
17771 }
17772
17773 return React__default.createElement("div", {
17774 className: styles$1w.Actions
17775 }, actions);
17776}
17777
17778function renderTitle(title) {
17779 var titleContent = title === '' ? React__default.createElement(SkeletonDisplayText, {
17780 size: "large"
17781 }) : React__default.createElement(DisplayText, {
17782 size: "large",
17783 element: "h1"
17784 }, title);
17785 return React__default.createElement("div", {
17786 className: styles$1w.Title
17787 }, titleContent);
17788}
17789
17790var styles$1x = {
17791 "SkeletonThumbnail": "Polaris-SkeletonThumbnail",
17792 "sizeSmall": "Polaris-SkeletonThumbnail--sizeSmall",
17793 "sizeMedium": "Polaris-SkeletonThumbnail--sizeMedium",
17794 "sizeLarge": "Polaris-SkeletonThumbnail--sizeLarge"
17795};
17796
17797function SkeletonThumbnail(_ref) {
17798 var _ref$size = _ref.size,
17799 size = _ref$size === void 0 ? 'medium' : _ref$size;
17800 var className = classNames(styles$1x.SkeletonThumbnail, size && styles$1x[variationName('size', size)]);
17801 return React__default.createElement("div", {
17802 className: className
17803 });
17804}
17805
17806function getVisibleAndHiddenTabIndices(tabs, selected, disclosureWidth, tabWidths, containerWidth) {
17807 var sumTabWidths = tabWidths.reduce(function (sum, width) {
17808 return sum + width;
17809 }, 0);
17810 var arrayOfTabIndices = tabs.map(function (_, index) {
17811 return index;
17812 });
17813 var visibleTabs = [];
17814 var hiddenTabs = [];
17815
17816 if (containerWidth > sumTabWidths) {
17817 visibleTabs.push.apply(visibleTabs, _toConsumableArray(arrayOfTabIndices));
17818 } else {
17819 visibleTabs.push(selected);
17820 var tabListWidth = tabWidths[selected];
17821 arrayOfTabIndices.forEach(function (currentTabIndex) {
17822 if (currentTabIndex !== selected) {
17823 var currentTabWidth = tabWidths[currentTabIndex];
17824
17825 if (tabListWidth + currentTabWidth > containerWidth - disclosureWidth) {
17826 hiddenTabs.push(currentTabIndex);
17827 return;
17828 }
17829
17830 visibleTabs.push(currentTabIndex);
17831 tabListWidth += currentTabWidth;
17832 }
17833 });
17834 }
17835
17836 return {
17837 visibleTabs,
17838 hiddenTabs
17839 };
17840}
17841
17842var styles$1y = {
17843 "Tabs": "Polaris-Tabs",
17844 "fitted": "Polaris-Tabs--fitted",
17845 "TabContainer": "Polaris-Tabs__TabContainer",
17846 "Tab": "Polaris-Tabs__Tab",
17847 "Title": "Polaris-Tabs__Title",
17848 "fillSpace": "Polaris-Tabs--fillSpace",
17849 "Tab-selected": "Polaris-Tabs__Tab--selected",
17850 "Panel": "Polaris-Tabs__Panel",
17851 "Panel-hidden": "Polaris-Tabs__Panel--hidden",
17852 "List": "Polaris-Tabs__List",
17853 "Item": "Polaris-Tabs__Item",
17854 "DisclosureTab": "Polaris-Tabs__DisclosureTab",
17855 "DisclosureTab-visible": "Polaris-Tabs__DisclosureTab--visible",
17856 "DisclosureActivator": "Polaris-Tabs__DisclosureActivator",
17857 "TabMeasurer": "Polaris-Tabs__TabMeasurer"
17858};
17859
17860var Item$8 =
17861/*#__PURE__*/
17862function (_React$PureComponent) {
17863 _inherits(Item, _React$PureComponent);
17864
17865 function Item() {
17866 var _this;
17867
17868 _classCallCheck(this, Item);
17869
17870 _this = _possibleConstructorReturn(this, _getPrototypeOf(Item).apply(this, arguments));
17871 _this.focusedNode = null;
17872
17873 _this.setFocusedNode = function (node) {
17874 _this.focusedNode = node;
17875 };
17876
17877 return _this;
17878 }
17879
17880 _createClass(Item, [{
17881 key: "componentDidMount",
17882 value: function componentDidMount() {
17883 var focusedNode = this.focusedNode;
17884 var focused = this.props.focused;
17885
17886 if (focusedNode && focusedNode instanceof HTMLElement && focused) {
17887 focusedNode.focus();
17888 }
17889 }
17890 }, {
17891 key: "componentDidUpdate",
17892 value: function componentDidUpdate() {
17893 var focusedNode = this.focusedNode;
17894 var focused = this.props.focused;
17895
17896 if (focusedNode && focusedNode instanceof HTMLElement && focused) {
17897 focusedNode.focus();
17898 }
17899 }
17900 }, {
17901 key: "render",
17902 value: function render() {
17903 var _this$props = this.props,
17904 id = _this$props.id,
17905 panelID = _this$props.panelID,
17906 children = _this$props.children,
17907 url = _this$props.url,
17908 accessibilityLabel = _this$props.accessibilityLabel,
17909 _this$props$onClick = _this$props.onClick,
17910 onClick = _this$props$onClick === void 0 ? noop$c : _this$props$onClick;
17911 var sharedProps = {
17912 id,
17913 ref: this.setFocusedNode,
17914 onClick,
17915 className: styles$1y.Item,
17916 'aria-controls': panelID,
17917 'aria-selected': false,
17918 'aria-label': accessibilityLabel
17919 };
17920 var markup = url ? React__default.createElement(UnstyledLink, Object.assign({}, sharedProps, {
17921 url: url
17922 }), children) : React__default.createElement("button", Object.assign({}, sharedProps, {
17923 type: "button"
17924 }), children);
17925 return React__default.createElement("li", null, markup);
17926 }
17927 }]);
17928
17929 return Item;
17930}(React__default.PureComponent);
17931
17932function noop$c() {}
17933
17934var List$1 =
17935/*#__PURE__*/
17936function (_React$PureComponent) {
17937 _inherits(List, _React$PureComponent);
17938
17939 function List() {
17940 var _this;
17941
17942 _classCallCheck(this, List);
17943
17944 _this = _possibleConstructorReturn(this, _getPrototypeOf(List).apply(this, arguments));
17945
17946 _this.handleKeypress = function (event) {
17947 var _this$props$onKeyPres = _this.props.onKeyPress,
17948 onKeyPress = _this$props$onKeyPres === void 0 ? noop$d : _this$props$onKeyPres;
17949 onKeyPress(event);
17950 };
17951
17952 return _this;
17953 }
17954
17955 _createClass(List, [{
17956 key: "render",
17957 value: function render() {
17958 var _this$props = this.props,
17959 focusIndex = _this$props.focusIndex,
17960 disclosureTabs = _this$props.disclosureTabs,
17961 _this$props$onClick = _this$props.onClick,
17962 onClick = _this$props$onClick === void 0 ? noop$d : _this$props$onClick;
17963 var tabs = disclosureTabs.map(function (_a, index) {
17964 var id = _a.id,
17965 content = _a.content,
17966 tabProps = __rest(_a, ["id", "content"]);
17967
17968 return React__default.createElement(Item$8, Object.assign({}, tabProps, {
17969 key: id,
17970 id: id,
17971 focused: index === focusIndex,
17972 onClick: onClick.bind(null, id)
17973 }), content);
17974 });
17975 return React__default.createElement("ul", {
17976 className: styles$1y.List,
17977 onKeyDown: handleKeyDown$1,
17978 onKeyUp: this.handleKeypress
17979 }, tabs);
17980 }
17981 }]);
17982
17983 return List;
17984}(React__default.PureComponent);
17985
17986function noop$d() {}
17987
17988function handleKeyDown$1(event) {
17989 var key = event.key;
17990
17991 if (key === 'ArrowUp' || key === 'ArrowDown' || key === 'ArrowLeft' || key === 'ArrowRight') {
17992 event.preventDefault();
17993 event.stopPropagation();
17994 }
17995}
17996
17997function Panel(_ref) {
17998 var hidden = _ref.hidden,
17999 id = _ref.id,
18000 tabID = _ref.tabID,
18001 children = _ref.children;
18002 var className = classNames(styles$1y.Panel, hidden && styles$1y['Panel-hidden']);
18003 return React__default.createElement("div", {
18004 className: className,
18005 id: id,
18006 role: "tabpanel",
18007 "aria-labelledby": tabID,
18008 tabIndex: -1
18009 }, children);
18010}
18011
18012function Tab(_ref) {
18013 var id = _ref.id,
18014 focused = _ref.focused,
18015 siblingTabHasFocus = _ref.siblingTabHasFocus,
18016 children = _ref.children,
18017 onClick = _ref.onClick,
18018 selected = _ref.selected,
18019 url = _ref.url,
18020 panelID = _ref.panelID,
18021 measuring = _ref.measuring,
18022 accessibilityLabel = _ref.accessibilityLabel;
18023 var wasSelected = useRef(selected);
18024 var panelFocused = useRef(false);
18025 var node = useRef(null); // A tab can start selected when it is moved from the disclosure dropdown
18026 // into the main list, so we need to send focus from the tab to the panel
18027 // on mount and update
18028
18029 useEffect(function () {
18030 if (measuring) {
18031 return;
18032 } // Because of timing issues with the render, we may still have the old,
18033 // in-disclosure version of the tab that has focus. Check for this
18034 // as a second indicator of focus
18035
18036
18037 var itemHadFocus = focused || document.activeElement && document.activeElement.id === id; // If we just check for selected, the panel for the active tab will
18038 // be focused on page load, which we don’t want
18039
18040 if (itemHadFocus && selected && panelID != null && !panelFocused.current) {
18041 focusPanelID(panelID);
18042 panelFocused.current = true;
18043 }
18044
18045 if (selected && !wasSelected.current && panelID != null) {
18046 focusPanelID(panelID);
18047 } else if (focused && node.current != null) {
18048 focusFirstFocusableNode(node.current);
18049 }
18050
18051 wasSelected.current = selected;
18052 }, [focused, id, measuring, panelID, selected]);
18053 var handleClick = onClick && onClick.bind(null, id);
18054 var className = classNames(styles$1y.Tab, selected && styles$1y['Tab-selected']);
18055 var tabIndex;
18056
18057 if (selected && !siblingTabHasFocus && !measuring) {
18058 tabIndex = 0;
18059 } else if (focused && !measuring) {
18060 tabIndex = 0;
18061 } else {
18062 tabIndex = -1;
18063 }
18064
18065 var markup = url ? React__default.createElement(UnstyledLink, {
18066 id: id,
18067 url: url,
18068 role: "tab",
18069 tabIndex: tabIndex,
18070 onClick: handleClick,
18071 className: className,
18072 "aria-selected": selected,
18073 "aria-controls": panelID,
18074 "aria-label": accessibilityLabel,
18075 onMouseUp: handleMouseUpByBlurring
18076 }, React__default.createElement("span", {
18077 className: styles$1y.Title
18078 }, children)) : React__default.createElement("button", {
18079 id: id,
18080 role: "tab",
18081 type: "button",
18082 tabIndex: tabIndex,
18083 className: className,
18084 onClick: handleClick,
18085 "aria-selected": selected,
18086 "aria-controls": panelID,
18087 "aria-label": accessibilityLabel,
18088 onMouseUp: handleMouseUpByBlurring
18089 }, React__default.createElement("span", {
18090 className: styles$1y.Title
18091 }, children));
18092 return React__default.createElement("li", {
18093 className: styles$1y.TabContainer,
18094 ref: node
18095 }, markup);
18096}
18097
18098function focusPanelID(panelID) {
18099 var panel = document.getElementById(panelID);
18100
18101 if (panel) {
18102 panel.focus({
18103 preventScroll: true
18104 });
18105 }
18106}
18107
18108var TabMeasurer =
18109/*#__PURE__*/
18110function (_React$PureComponent) {
18111 _inherits(TabMeasurer, _React$PureComponent);
18112
18113 function TabMeasurer() {
18114 var _this;
18115
18116 _classCallCheck(this, TabMeasurer);
18117
18118 _this = _possibleConstructorReturn(this, _getPrototypeOf(TabMeasurer).apply(this, arguments));
18119 _this.containerNode = React__default.createRef();
18120 _this.animationFrame = null;
18121
18122 _this.handleMeasurement = function () {
18123 if (_this.animationFrame) {
18124 cancelAnimationFrame(_this.animationFrame);
18125 }
18126
18127 _this.animationFrame = requestAnimationFrame(function () {
18128 if (!_this.containerNode.current) {
18129 return;
18130 }
18131
18132 var handleMeasurement = _this.props.handleMeasurement;
18133 var containerWidth = _this.containerNode.current.offsetWidth;
18134 var hiddenTabNodes = _this.containerNode.current.children;
18135 var hiddenTabNodesArray = Array.from(hiddenTabNodes);
18136 var hiddenTabWidths = hiddenTabNodesArray.map(function (node) {
18137 return node.getBoundingClientRect().width;
18138 });
18139 var disclosureWidth = hiddenTabWidths.pop();
18140 handleMeasurement({
18141 containerWidth,
18142 disclosureWidth,
18143 hiddenTabWidths
18144 });
18145 });
18146 };
18147
18148 return _this;
18149 }
18150
18151 _createClass(TabMeasurer, [{
18152 key: "componentDidMount",
18153 value: function componentDidMount() {
18154 this.handleMeasurement();
18155
18156 if (process.env.NODE_ENV === 'development') {
18157 // We need to defer the calculation in development so the
18158 // styles have time to be injected.
18159 setTimeout(this.handleMeasurement, 0);
18160 }
18161 }
18162 }, {
18163 key: "componentDidUpdate",
18164 value: function componentDidUpdate(prevProps) {
18165 if (prevProps.tabs !== this.props.tabs) {
18166 this.handleMeasurement();
18167 }
18168 }
18169 }, {
18170 key: "render",
18171 value: function render() {
18172 var _this$props = this.props,
18173 selected = _this$props.selected,
18174 tabs = _this$props.tabs,
18175 activator = _this$props.activator,
18176 tabToFocus = _this$props.tabToFocus,
18177 siblingTabHasFocus = _this$props.siblingTabHasFocus;
18178 var tabsMarkup = tabs.map(function (tab, index) {
18179 return React__default.createElement(Tab, {
18180 measuring: true,
18181 key: "".concat(index).concat(tab.id, "Hidden"),
18182 id: "".concat(tab.id, "Measurer"),
18183 siblingTabHasFocus: siblingTabHasFocus,
18184 focused: index === tabToFocus,
18185 selected: index === selected,
18186 onClick: noop$e,
18187 url: tab.url
18188 }, tab.content);
18189 });
18190 var classname = classNames(styles$1y.Tabs, styles$1y.TabMeasurer);
18191 return React__default.createElement("div", {
18192 className: classname,
18193 ref: this.containerNode
18194 }, React__default.createElement(EventListener, {
18195 event: "resize",
18196 handler: this.handleMeasurement
18197 }), tabsMarkup, activator);
18198 }
18199 }]);
18200
18201 return TabMeasurer;
18202}(React__default.PureComponent);
18203
18204function noop$e() {}
18205
18206var Tabs =
18207/*#__PURE__*/
18208function (_React$PureComponent) {
18209 _inherits(Tabs, _React$PureComponent);
18210
18211 function Tabs() {
18212 var _this;
18213
18214 _classCallCheck(this, Tabs);
18215
18216 _this = _possibleConstructorReturn(this, _getPrototypeOf(Tabs).apply(this, arguments));
18217 _this.state = {
18218 disclosureWidth: 0,
18219 containerWidth: Infinity,
18220 tabWidths: [],
18221 visibleTabs: [],
18222 hiddenTabs: [],
18223 showDisclosure: false,
18224 tabToFocus: -1
18225 };
18226
18227 _this.handleKeyPress = function (event) {
18228 var _this$state = _this.state,
18229 tabToFocus = _this$state.tabToFocus,
18230 visibleTabs = _this$state.visibleTabs,
18231 hiddenTabs = _this$state.hiddenTabs,
18232 showDisclosure = _this$state.showDisclosure;
18233 var key = event.key;
18234 var tabsArrayInOrder = showDisclosure ? visibleTabs.concat(hiddenTabs) : _toConsumableArray(visibleTabs);
18235 var newFocus = tabsArrayInOrder.indexOf(tabToFocus);
18236
18237 if (key === 'ArrowRight' || key === 'ArrowDown') {
18238 newFocus += 1;
18239
18240 if (newFocus === tabsArrayInOrder.length) {
18241 newFocus = 0;
18242 }
18243 }
18244
18245 if (key === 'ArrowLeft' || key === 'ArrowUp') {
18246 if (newFocus === -1 || newFocus === 0) {
18247 newFocus = tabsArrayInOrder.length - 1;
18248 } else {
18249 newFocus -= 1;
18250 }
18251 }
18252
18253 _this.setState({
18254 tabToFocus: tabsArrayInOrder[newFocus]
18255 });
18256 };
18257
18258 _this.renderTabMarkup = function (tab, index) {
18259 var selected = _this.props.selected;
18260 var tabToFocus = _this.state.tabToFocus;
18261 return React__default.createElement(Tab, {
18262 key: "".concat(index, "-").concat(tab.id),
18263 id: tab.id,
18264 siblingTabHasFocus: tabToFocus > -1,
18265 focused: index === tabToFocus,
18266 selected: index === selected,
18267 onClick: _this.handleTabClick,
18268 panelID: tab.panelID || "".concat(tab.id, "-panel"),
18269 accessibilityLabel: tab.accessibilityLabel,
18270 url: tab.url
18271 }, tab.content);
18272 };
18273
18274 _this.handleFocus = function (event) {
18275 var _this$props = _this.props,
18276 selected = _this$props.selected,
18277 tabs = _this$props.tabs; // If we are explicitly focusing a non-selected tab, this focuses it
18278
18279 var target = event.target;
18280
18281 if (target.classList.contains(styles$1y.Tab) || target.classList.contains(styles$1y.Item)) {
18282 var tabToFocus = -1;
18283 tabs.every(function (tab, index) {
18284 if (tab.id === target.id) {
18285 tabToFocus = index;
18286 return false;
18287 }
18288
18289 return true;
18290 });
18291
18292 _this.setState({
18293 tabToFocus
18294 });
18295
18296 return;
18297 }
18298
18299 if (target.classList.contains(styles$1y.DisclosureActivator)) {
18300 return;
18301 } // If we are coming in from somewhere other than another tab, focus the
18302 // selected tab, and the focus (click) is not on the disclosure activator,
18303 // focus the selected tab
18304
18305
18306 if (!event.relatedTarget) {
18307 _this.setState({
18308 tabToFocus: selected
18309 });
18310
18311 return;
18312 }
18313
18314 var relatedTarget = event.relatedTarget;
18315
18316 if (!relatedTarget.classList.contains(styles$1y.Tab) && !relatedTarget.classList.contains(styles$1y.Item) && !relatedTarget.classList.contains(styles$1y.DisclosureActivator)) {
18317 _this.setState({
18318 tabToFocus: selected
18319 });
18320 }
18321 };
18322
18323 _this.handleBlur = function (event) {
18324 // If we blur and the target is not another tab, forget the focus position
18325 if (event.relatedTarget == null) {
18326 _this.setState({
18327 tabToFocus: -1
18328 });
18329
18330 return;
18331 }
18332
18333 var target = event.relatedTarget; // If we are going to anywhere other than another tab, lose the last focused tab
18334
18335 if (!target.classList.contains(styles$1y.Tab) && !target.classList.contains(styles$1y.Item)) {
18336 _this.setState({
18337 tabToFocus: -1
18338 });
18339 }
18340 };
18341
18342 _this.handleDisclosureActivatorClick = function () {
18343 _this.setState(function (_ref) {
18344 var showDisclosure = _ref.showDisclosure;
18345 return {
18346 showDisclosure: !showDisclosure
18347 };
18348 });
18349 };
18350
18351 _this.handleClose = function () {
18352 _this.setState({
18353 showDisclosure: false
18354 });
18355 };
18356
18357 _this.handleMeasurement = function (measurements) {
18358 var _this$props2 = _this.props,
18359 tabs = _this$props2.tabs,
18360 selected = _this$props2.selected;
18361 var tabToFocus = _this.state.tabToFocus;
18362 var tabWidths = measurements.hiddenTabWidths,
18363 containerWidth = measurements.containerWidth,
18364 disclosureWidth = measurements.disclosureWidth;
18365
18366 var _getVisibleAndHiddenT = getVisibleAndHiddenTabIndices(tabs, selected, disclosureWidth, tabWidths, containerWidth),
18367 visibleTabs = _getVisibleAndHiddenT.visibleTabs,
18368 hiddenTabs = _getVisibleAndHiddenT.hiddenTabs;
18369
18370 _this.setState({
18371 tabToFocus: tabToFocus === -1 ? -1 : selected,
18372 visibleTabs,
18373 hiddenTabs,
18374 disclosureWidth,
18375 containerWidth,
18376 tabWidths
18377 });
18378 };
18379
18380 _this.handleTabClick = function (id) {
18381 var _this$props3 = _this.props,
18382 tabs = _this$props3.tabs,
18383 _this$props3$onSelect = _this$props3.onSelect,
18384 onSelect = _this$props3$onSelect === void 0 ? noop$f : _this$props3$onSelect;
18385 var tab = tabs.find(function (aTab) {
18386 return aTab.id === id;
18387 });
18388
18389 if (tab == null) {
18390 return;
18391 }
18392
18393 var selectedIndex = tabs.indexOf(tab);
18394 onSelect(selectedIndex);
18395 };
18396
18397 return _this;
18398 }
18399
18400 _createClass(Tabs, [{
18401 key: "render",
18402 value: function render() {
18403 var _this2 = this;
18404
18405 var _this$props4 = this.props,
18406 tabs = _this$props4.tabs,
18407 selected = _this$props4.selected,
18408 fitted = _this$props4.fitted,
18409 children = _this$props4.children,
18410 intl = _this$props4.polaris.intl;
18411 var _this$state2 = this.state,
18412 tabToFocus = _this$state2.tabToFocus,
18413 visibleTabs = _this$state2.visibleTabs,
18414 hiddenTabs = _this$state2.hiddenTabs,
18415 showDisclosure = _this$state2.showDisclosure;
18416 var disclosureTabs = hiddenTabs.map(function (tabIndex) {
18417 return tabs[tabIndex];
18418 });
18419 var panelMarkup = children ? tabs.map(function (_tab, index) {
18420 return selected === index ? React__default.createElement(Panel, {
18421 id: tabs[index].panelID || "".concat(tabs[index].id, "-panel"),
18422 tabID: tabs[index].id,
18423 key: tabs[index].id
18424 }, children) : React__default.createElement(Panel, {
18425 id: tabs[index].panelID || "".concat(tabs[index].id, "-panel"),
18426 tabID: tabs[index].id,
18427 key: tabs[index].id,
18428 hidden: true
18429 });
18430 }) : null;
18431 var tabsMarkup = visibleTabs.sort(function (tabA, tabB) {
18432 return tabA - tabB;
18433 }).map(function (tabIndex) {
18434 return _this2.renderTabMarkup(tabs[tabIndex], tabIndex);
18435 });
18436 var disclosureActivatorVisible = visibleTabs.length < tabs.length;
18437 var classname = classNames(styles$1y.Tabs, fitted && styles$1y.fitted, disclosureActivatorVisible && styles$1y.fillSpace);
18438 var disclosureTabClassName = classNames(styles$1y.DisclosureTab, disclosureActivatorVisible && styles$1y['DisclosureTab-visible']);
18439 var activator = React__default.createElement("button", {
18440 type: "button",
18441 className: styles$1y.DisclosureActivator,
18442 onClick: this.handleDisclosureActivatorClick,
18443 "aria-label": intl.translate('Polaris.Tabs.toggleTabsLabel')
18444 }, React__default.createElement("span", {
18445 className: styles$1y.Title
18446 }, React__default.createElement(Icon, {
18447 source: HorizontalDotsMinor
18448 })));
18449 return React__default.createElement("div", null, React__default.createElement("ul", {
18450 role: "tablist",
18451 className: classname,
18452 onFocus: this.handleFocus,
18453 onBlur: this.handleBlur,
18454 onKeyDown: handleKeyDown$2,
18455 onKeyUp: this.handleKeyPress
18456 }, tabsMarkup, React__default.createElement("li", {
18457 className: disclosureTabClassName
18458 }, React__default.createElement(Popover, {
18459 preferredPosition: "below",
18460 activator: activator,
18461 active: disclosureActivatorVisible && showDisclosure,
18462 onClose: this.handleClose
18463 }, React__default.createElement(List$1, {
18464 focusIndex: hiddenTabs.indexOf(tabToFocus),
18465 disclosureTabs: disclosureTabs,
18466 onClick: this.handleTabClick,
18467 onKeyPress: this.handleKeyPress
18468 })))), React__default.createElement(TabMeasurer, {
18469 tabToFocus: tabToFocus,
18470 activator: activator,
18471 selected: selected,
18472 tabs: tabs,
18473 siblingTabHasFocus: tabToFocus > -1,
18474 handleMeasurement: this.handleMeasurement
18475 }), panelMarkup);
18476 }
18477 }], [{
18478 key: "getDerivedStateFromProps",
18479 value: function getDerivedStateFromProps(nextProps, prevState) {
18480 var disclosureWidth = prevState.disclosureWidth,
18481 tabWidths = prevState.tabWidths,
18482 containerWidth = prevState.containerWidth;
18483
18484 var _getVisibleAndHiddenT2 = getVisibleAndHiddenTabIndices(nextProps.tabs, nextProps.selected, disclosureWidth, tabWidths, containerWidth),
18485 visibleTabs = _getVisibleAndHiddenT2.visibleTabs,
18486 hiddenTabs = _getVisibleAndHiddenT2.hiddenTabs;
18487
18488 return {
18489 visibleTabs,
18490 hiddenTabs,
18491 selected: nextProps.selected
18492 };
18493 }
18494 }]);
18495
18496 return Tabs;
18497}(React__default.PureComponent);
18498
18499function noop$f() {}
18500
18501function handleKeyDown$2(event) {
18502 var key = event.key;
18503
18504 if (key === 'ArrowUp' || key === 'ArrowDown' || key === 'ArrowLeft' || key === 'ArrowRight') {
18505 event.preventDefault();
18506 event.stopPropagation();
18507 }
18508} // Use named export once withAppProvider is refactored away
18509// eslint-disable-next-line import/no-default-export
18510
18511
18512var Tabs$1 = withAppProvider()(Tabs);
18513
18514var styles$1z = {
18515 "Thumbnail": "Polaris-Thumbnail",
18516 "sizeSmall": "Polaris-Thumbnail--sizeSmall",
18517 "sizeMedium": "Polaris-Thumbnail--sizeMedium",
18518 "sizeLarge": "Polaris-Thumbnail--sizeLarge",
18519 "Image": "Polaris-Thumbnail__Image"
18520};
18521
18522function Thumbnail(_ref) {
18523 var source = _ref.source,
18524 alt = _ref.alt,
18525 _ref$size = _ref.size,
18526 size = _ref$size === void 0 ? 'medium' : _ref$size;
18527 var className = classNames(styles$1z.Thumbnail, size && styles$1z[variationName('size', size)]);
18528 return React__default.createElement("span", {
18529 className: className
18530 }, React__default.createElement(Image, {
18531 alt: alt,
18532 source: source,
18533 className: styles$1z.Image
18534 }));
18535}
18536
18537var Toast$1 = React__default.memo(function Toast(props) {
18538 var id = useUniqueId('Toast');
18539 var appBridgeToast = useRef();
18540
18541 var _useFrame = useFrame(),
18542 showToast = _useFrame.showToast,
18543 hideToast = _useFrame.hideToast;
18544
18545 var appBridge = useAppBridge();
18546 useDeepEffect(function () {
18547 var error = props.error,
18548 content = props.content,
18549 _props$duration = props.duration,
18550 duration = _props$duration === void 0 ? DEFAULT_TOAST_DURATION : _props$duration,
18551 onDismiss = props.onDismiss;
18552
18553 if (appBridge == null) {
18554 showToast(Object.assign({
18555 id
18556 }, props));
18557 } else {
18558 // eslint-disable-next-line no-console
18559 console.warn('Deprecation: Using `Toast` in an embedded app is deprecated and will be removed in v5.0. Use `Toast` from `@shopify/app-bridge-react` instead: https://help.shopify.com/en/api/embedded-apps/app-bridge/react-components/toast');
18560 appBridgeToast.current = Toast$2.create(appBridge, {
18561 message: content,
18562 duration,
18563 isError: error
18564 });
18565 appBridgeToast.current.subscribe(Toast$2.Action.CLEAR, onDismiss);
18566 appBridgeToast.current.dispatch(Toast$2.Action.SHOW);
18567 }
18568
18569 return function () {
18570 if (appBridge == null) {
18571 hideToast({
18572 id
18573 });
18574 } else if (appBridgeToast.current != null) {
18575 appBridgeToast.current.unsubscribe();
18576 }
18577 };
18578 }, [appBridge, props]);
18579 return null;
18580});
18581
18582var styles$1A = {
18583 "Search": "Polaris-TopBar-Search",
18584 "visible": "Polaris-TopBar-Search--visible",
18585 "Overlay": "Polaris-TopBar-Search__Overlay"
18586};
18587
18588var Search =
18589/*#__PURE__*/
18590function (_React$PureComponent) {
18591 _inherits(Search, _React$PureComponent);
18592
18593 function Search() {
18594 var _this;
18595
18596 _classCallCheck(this, Search);
18597
18598 _this = _possibleConstructorReturn(this, _getPrototypeOf(Search).apply(this, arguments));
18599 _this.node = React__default.createRef();
18600
18601 _this.handleDismiss = function (_ref) {
18602 var target = _ref.target;
18603 var onDismiss = _this.props.onDismiss;
18604
18605 if (onDismiss != null && target === _this.node.current) {
18606 onDismiss();
18607 }
18608 };
18609
18610 return _this;
18611 }
18612
18613 _createClass(Search, [{
18614 key: "render",
18615 value: function render() {
18616 var _this$props = this.props,
18617 visible = _this$props.visible,
18618 children = _this$props.children;
18619 var searchClassName = classNames(styles$1A.Search, visible && styles$1A.visible);
18620 return React__default.createElement("div", {
18621 ref: this.node,
18622 className: searchClassName,
18623 onClick: this.handleDismiss
18624 }, React__default.createElement("div", {
18625 className: styles$1A.Overlay
18626 }, children));
18627 }
18628 }]);
18629
18630 return Search;
18631}(React__default.PureComponent);
18632
18633var styles$1B = {
18634 "SearchField": "Polaris-TopBar-SearchField",
18635 "focused": "Polaris-TopBar-SearchField--focused",
18636 "Input": "Polaris-TopBar-SearchField__Input",
18637 "Backdrop": "Polaris-TopBar-SearchField__Backdrop",
18638 "Icon": "Polaris-TopBar-SearchField__Icon",
18639 "Clear": "Polaris-TopBar-SearchField__Clear",
18640 "toLightBackground": "Polaris-TopBar-SearchField--toLightBackground"
18641};
18642
18643function SearchField(_ref) {
18644 var value = _ref.value,
18645 focused = _ref.focused,
18646 active = _ref.active,
18647 placeholder = _ref.placeholder,
18648 onChange = _ref.onChange,
18649 onFocus = _ref.onFocus,
18650 onBlur = _ref.onBlur,
18651 onCancel = _ref.onCancel;
18652 var i18n = useI18n();
18653 var input = useRef(null);
18654 var searchId = useUniqueId('SearchField');
18655 var handleChange = useCallback(function (_ref2) {
18656 var currentTarget = _ref2.currentTarget;
18657 onChange(currentTarget.value);
18658 }, [onChange]);
18659 var handleFocus = useCallback(function () {
18660 return onFocus && onFocus();
18661 }, [onFocus]);
18662 var handleBlur = useCallback(function () {
18663 return onBlur && onBlur();
18664 }, [onBlur]);
18665 var handleClear = useCallback(function () {
18666 onCancel && onCancel();
18667
18668 if (!input.current) {
18669 return;
18670 }
18671
18672 input.current.value = '';
18673 onChange('');
18674 input.current.focus();
18675 }, [onCancel, onChange]);
18676 useEffect(function () {
18677 if (!input.current) {
18678 return;
18679 }
18680
18681 if (focused) {
18682 input.current.focus();
18683 } else {
18684 input.current.blur();
18685 }
18686 }, [focused]);
18687 var clearMarkup = value !== '' && React__default.createElement("button", {
18688 type: "button",
18689 "aria-label": i18n.translate('Polaris.TopBar.SearchField.clearButtonLabel'),
18690 className: styles$1B.Clear,
18691 onClick: handleClear
18692 }, React__default.createElement(Icon, {
18693 source: CircleCancelMinor
18694 }));
18695 var className = classNames(styles$1B.SearchField, (focused || active) && styles$1B.focused);
18696 return React__default.createElement("div", {
18697 className: className,
18698 onFocus: handleFocus,
18699 onBlur: handleBlur
18700 }, React__default.createElement(VisuallyHidden, null, React__default.createElement("label", {
18701 htmlFor: searchId
18702 }, i18n.translate('Polaris.TopBar.SearchField.search'))), React__default.createElement("input", {
18703 id: searchId,
18704 className: styles$1B.Input,
18705 placeholder: placeholder,
18706 type: "search",
18707 autoCapitalize: "off",
18708 autoComplete: "off",
18709 autoCorrect: "off",
18710 ref: input,
18711 value: value,
18712 onChange: handleChange,
18713 onKeyDown: preventDefault
18714 }), React__default.createElement("span", {
18715 className: styles$1B.Icon
18716 }, React__default.createElement(Icon, {
18717 source: SearchMinor
18718 })), clearMarkup, React__default.createElement("div", {
18719 className: styles$1B.Backdrop
18720 }));
18721}
18722
18723function preventDefault(event) {
18724 if (event.key === 'Enter') {
18725 event.preventDefault();
18726 }
18727}
18728
18729var styles$1C = {
18730 "MessageIndicatorWrapper": "Polaris-MessageIndicator__MessageIndicatorWrapper",
18731 "MessageIndicator": "Polaris-MessageIndicator"
18732};
18733
18734function MessageIndicator(_ref) {
18735 var children = _ref.children,
18736 active = _ref.active;
18737 var indicatorMarkup = active && React__default.createElement("div", {
18738 className: styles$1C.MessageIndicator
18739 });
18740 return React__default.createElement("div", {
18741 className: styles$1C.MessageIndicatorWrapper
18742 }, indicatorMarkup, children);
18743}
18744
18745var styles$1D = {
18746 "Section": "Polaris-Menu-Message__Section"
18747};
18748
18749function Message(_ref) {
18750 var title = _ref.title,
18751 description = _ref.description,
18752 action = _ref.action,
18753 link = _ref.link,
18754 badge = _ref.badge;
18755 var badgeMarkup = badge && React__default.createElement(Badge, {
18756 status: badge.status
18757 }, badge.content);
18758 var to = link.to,
18759 linkContent = link.content;
18760 var onClick = action.onClick,
18761 actionContent = action.content;
18762 return React__default.createElement("div", {
18763 className: styles$1D.Section
18764 }, React__default.createElement(Popover.Section, null, React__default.createElement(Stack, {
18765 vertical: true,
18766 spacing: "tight"
18767 }, React__default.createElement(TextContainer, null, React__default.createElement(Heading, null, title, badgeMarkup), React__default.createElement("p", null, description)), React__default.createElement(Link, {
18768 url: to
18769 }, linkContent), React__default.createElement(Button, {
18770 plain: true,
18771 onClick: onClick
18772 }, actionContent))));
18773}
18774
18775var styles$1E = {
18776 "ActivatorWrapper": "Polaris-TopBar-Menu__ActivatorWrapper",
18777 "Activator": "Polaris-TopBar-Menu__Activator",
18778 "Section": "Polaris-TopBar-Menu__Section"
18779};
18780
18781function Menu(props) {
18782 var actions = props.actions,
18783 onOpen = props.onOpen,
18784 onClose = props.onClose,
18785 open = props.open,
18786 activatorContent = props.activatorContent,
18787 message = props.message;
18788 var badgeProps = message && message.badge && {
18789 content: message.badge.content,
18790 status: message.badge.status
18791 };
18792 var messageMarkup = message && React__default.createElement(Message, {
18793 title: message.title,
18794 description: message.description,
18795 action: {
18796 onClick: message.action.onClick,
18797 content: message.action.content
18798 },
18799 link: {
18800 to: message.link.to,
18801 content: message.link.content
18802 },
18803 badge: badgeProps
18804 });
18805 var isFullHeight = Boolean(message);
18806 return React__default.createElement(Popover, {
18807 activator: React__default.createElement("div", {
18808 className: styles$1E.ActivatorWrapper
18809 }, React__default.createElement("button", {
18810 type: "button",
18811 className: styles$1E.Activator,
18812 onClick: onOpen
18813 }, activatorContent)),
18814 active: open,
18815 onClose: onClose,
18816 fixed: true,
18817 fullHeight: isFullHeight
18818 }, React__default.createElement(ActionList, {
18819 onActionAnyItem: onClose,
18820 sections: actions
18821 }), messageMarkup);
18822}
18823
18824var styles$1F = {
18825 "Details": "Polaris-TopBar-UserMenu__Details",
18826 "Name": "Polaris-TopBar-UserMenu__Name",
18827 "Detail": "Polaris-TopBar-UserMenu__Detail"
18828};
18829
18830function UserMenu(_ref) {
18831 var name = _ref.name,
18832 detail = _ref.detail,
18833 avatar = _ref.avatar,
18834 initials = _ref.initials,
18835 actions = _ref.actions,
18836 message = _ref.message,
18837 onToggle = _ref.onToggle,
18838 open = _ref.open;
18839 var showIndicator = Boolean(message);
18840 var activatorContentMarkup = React__default.createElement(React__default.Fragment, null, React__default.createElement(MessageIndicator, {
18841 active: showIndicator
18842 }, React__default.createElement(Avatar, {
18843 size: "small",
18844 source: avatar,
18845 initials: initials && initials.replace(' ', '')
18846 })), React__default.createElement("span", {
18847 className: styles$1F.Details
18848 }, React__default.createElement("p", {
18849 className: styles$1F.Name
18850 }, name), React__default.createElement("p", {
18851 className: styles$1F.Detail
18852 }, detail)));
18853 return React__default.createElement(Menu, {
18854 activatorContent: activatorContentMarkup,
18855 open: open,
18856 onOpen: onToggle,
18857 onClose: onToggle,
18858 actions: actions,
18859 message: message
18860 });
18861}
18862
18863var styles$1G = {
18864 "TopBar": "Polaris-TopBar",
18865 "LogoContainer": "Polaris-TopBar__LogoContainer",
18866 "ContextControl": "Polaris-TopBar__ContextControl",
18867 "Logo": "Polaris-TopBar__Logo",
18868 "LogoLink": "Polaris-TopBar__LogoLink",
18869 "NavigationIcon": "Polaris-TopBar__NavigationIcon",
18870 "focused": "Polaris-TopBar--focused",
18871 "Contents": "Polaris-TopBar__Contents",
18872 "SearchField": "Polaris-TopBar__SearchField",
18873 "SecondaryMenu": "Polaris-TopBar__SecondaryMenu"
18874};
18875
18876// subcomponents so explicitly state the subcomponents in the type definition.
18877// Letting this be implicit works in this project but fails in projects that use
18878// generated *.d.ts files.
18879
18880var TopBar = function TopBar(_ref) {
18881 var showNavigationToggle = _ref.showNavigationToggle,
18882 userMenu = _ref.userMenu,
18883 searchResults = _ref.searchResults,
18884 searchField = _ref.searchField,
18885 secondaryMenu = _ref.secondaryMenu,
18886 searchResultsVisible = _ref.searchResultsVisible,
18887 onNavigationToggle = _ref.onNavigationToggle,
18888 onSearchResultsDismiss = _ref.onSearchResultsDismiss,
18889 contextControl = _ref.contextControl;
18890 var i18n = useI18n();
18891
18892 var _useTheme = useTheme(),
18893 logo = _useTheme.logo;
18894
18895 var _useForcibleToggle = useForcibleToggle(false),
18896 _useForcibleToggle2 = _slicedToArray(_useForcibleToggle, 2),
18897 focused = _useForcibleToggle2[0],
18898 _useForcibleToggle2$ = _useForcibleToggle2[1],
18899 forceTrueFocused = _useForcibleToggle2$.forceTrue,
18900 forceFalseFocused = _useForcibleToggle2$.forceFalse;
18901
18902 var className = classNames(styles$1G.NavigationIcon, focused && styles$1G.focused);
18903 var navigationButtonMarkup = showNavigationToggle ? React__default.createElement("button", {
18904 type: "button",
18905 className: className,
18906 onClick: onNavigationToggle,
18907 onFocus: forceTrueFocused,
18908 onBlur: forceFalseFocused,
18909 "aria-label": i18n.translate('Polaris.TopBar.toggleMenuLabel')
18910 }, React__default.createElement(Icon, {
18911 source: MobileHamburgerMajorMonotone,
18912 color: "white"
18913 })) : null;
18914 var width = getWidth(logo, 104);
18915 var contextMarkup;
18916
18917 if (contextControl) {
18918 contextMarkup = React__default.createElement("div", {
18919 className: styles$1G.ContextControl
18920 }, contextControl);
18921 } else if (logo) {
18922 contextMarkup = React__default.createElement("div", {
18923 className: styles$1G.LogoContainer
18924 }, React__default.createElement(UnstyledLink, {
18925 url: logo.url || '',
18926 className: styles$1G.LogoLink,
18927 style: {
18928 width
18929 }
18930 }, React__default.createElement(Image, {
18931 source: logo.topBarSource || '',
18932 alt: logo.accessibilityLabel || '',
18933 className: styles$1G.Logo,
18934 style: {
18935 width
18936 }
18937 })));
18938 }
18939
18940 var searchResultsMarkup = searchResults && searchResultsVisible ? React__default.createElement(Search, {
18941 visible: searchResultsVisible,
18942 onDismiss: onSearchResultsDismiss
18943 }, searchResults) : null;
18944 var searchMarkup = searchField ? React__default.createElement(React__default.Fragment, null, searchField, searchResultsMarkup) : null;
18945 return React__default.createElement("div", {
18946 className: styles$1G.TopBar
18947 }, navigationButtonMarkup, contextMarkup, React__default.createElement("div", {
18948 className: styles$1G.Contents
18949 }, React__default.createElement("div", {
18950 className: styles$1G.SearchField
18951 }, searchMarkup), React__default.createElement("div", {
18952 className: styles$1G.SecondaryMenu
18953 }, secondaryMenu), userMenu));
18954};
18955TopBar.Menu = Menu;
18956TopBar.SearchField = SearchField;
18957TopBar.UserMenu = UserMenu;
18958
18959/* eslint-enable @typescript-eslint/camelcase */
18960
18961export { AccountConnection, ActionList, ActionMenu, AppBridgeContext, AppProvider, Autocomplete, Avatar, Backdrop, Badge, Banner, Breadcrumbs, Button, ButtonGroup, CalloutCard, Caption, Card, Checkbox$1 as Checkbox, ChoiceList, Collapsible, ColorPicker, Connected, ContextualSaveBar, DATA_ATTRIBUTE, DEFAULT_TOAST_DURATION, DEFAULT_TOAST_DURATION_WITH_ACTION, DataTable$1 as DataTable, DatePicker, DescriptionList, DisplayText, DropZone, EmptySearchResult, EmptyState, EventListener, ExceptionList, FilterType, Filters$1 as Filters, Focus, FooterHelp, Form, FormLayout, Frame$1 as Frame, Heading, Icon, Image, Indicator, InlineError, Key, KeyboardKey, KeypressListener, Label, Labelled, Layout, Link, List, Loading$1 as Loading, Modal$1 as Modal, Navigation$1 as Navigation, OptionList, Page$1 as Page, PageActions, Pagination, PolarisTestProvider, Popover, CloseSource as PopoverCloseSource, Portal, ProgressBar, RadioButton, RangeSlider, ResourceItem, ResourceList$1 as ResourceList, ResourcePicker$1 as ResourcePicker, ScrollLock, Scrollable, Select, SettingToggle, Sheet, SkeletonBodyText, SkeletonDisplayText, SkeletonPage, SkeletonThumbnail, Spinner, Stack, Sticky$1 as Sticky, Subheading, Tabs$1 as Tabs, Tag, TextContainer, TextField, TextStyle, ThemeProvider, Thumbnail, Toast$1 as Toast, Tooltip, TopBar, TrapFocus, Truncate, TypeOf, UNSTABLE_Color, Tokens as UNSTABLE_Tokens, buildColors as UNSTABLE_buildColors, roleVariants as UNSTABLE_roleVariants, toCssCustomPropertySyntax as UNSTABLE_toCssCustomPropertySyntax, UnstyledLink, VisuallyHidden, ScrollLockManagerContext as _SECRET_INTERNAL_SCROLL_LOCK_MANAGER_CONTEXT, WithinContentContext as _SECRET_INTERNAL_WITHIN_CONTENT_CONTEXT, buttonFrom, buttonsFrom, errorTextID, hsbToHex, hsbToRgb, hslToRgb, isNavigationItemActive, rgbString, rgbToHex, rgbToHsb, rgbToHsl, rgbaString };