UNPKG

706 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
7var React = require('react');
8var React__default = _interopDefault(React);
9var tokens = require('@shopify/polaris-tokens');
10var tokens__default = _interopDefault(tokens);
11var hsluv = require('hsluv');
12var isEqual = _interopDefault(require('lodash/isEqual'));
13var math = require('@shopify/javascript-utilities/math');
14var tslib_1 = require('tslib');
15var polarisIcons = require('@shopify/polaris-icons');
16var focus = require('@shopify/javascript-utilities/focus');
17var debounce = _interopDefault(require('lodash/debounce'));
18var events = require('@shopify/javascript-utilities/events');
19var dom = require('@shopify/javascript-utilities/dom');
20var geometry = require('@shopify/javascript-utilities/geometry');
21var reactDom = require('react-dom');
22var other = require('@shopify/javascript-utilities/other');
23var fastdom = require('@shopify/javascript-utilities/fastdom');
24var createApp = require('@shopify/app-bridge');
25var createApp__default = _interopDefault(createApp);
26var hoistStatics = _interopDefault(require('hoist-non-react-statics'));
27var dates = require('@shopify/javascript-utilities/dates');
28var reactTransitionGroup = require('@material-ui/react-transition-group');
29var actions = require('@shopify/app-bridge/actions');
30
31if (typeof window !== 'undefined') {
32 window.Polaris = window.Polaris || {};
33 window.Polaris.VERSION = '4.9.1';
34}
35
36var polarisVersion = '4.9.1';
37
38var ThemeContext = React__default.createContext(undefined);
39
40function _classCallCheck(instance, Constructor) {
41 if (!(instance instanceof Constructor)) {
42 throw new TypeError("Cannot call a class as a function");
43 }
44}
45
46function _defineProperties(target, props) {
47 for (var i = 0; i < props.length; i++) {
48 var descriptor = props[i];
49 descriptor.enumerable = descriptor.enumerable || false;
50 descriptor.configurable = true;
51 if ("value" in descriptor) descriptor.writable = true;
52 Object.defineProperty(target, descriptor.key, descriptor);
53 }
54}
55
56function _createClass(Constructor, protoProps, staticProps) {
57 if (protoProps) _defineProperties(Constructor.prototype, protoProps);
58 if (staticProps) _defineProperties(Constructor, staticProps);
59 return Constructor;
60}
61
62function _inherits(subClass, superClass) {
63 if (typeof superClass !== "function" && superClass !== null) {
64 throw new TypeError("Super expression must either be null or a function");
65 }
66
67 subClass.prototype = Object.create(superClass && superClass.prototype, {
68 constructor: {
69 value: subClass,
70 writable: true,
71 configurable: true
72 }
73 });
74 if (superClass) _setPrototypeOf(subClass, superClass);
75}
76
77function _getPrototypeOf(o) {
78 _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
79 return o.__proto__ || Object.getPrototypeOf(o);
80 };
81 return _getPrototypeOf(o);
82}
83
84function _setPrototypeOf(o, p) {
85 _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
86 o.__proto__ = p;
87 return o;
88 };
89
90 return _setPrototypeOf(o, p);
91}
92
93function isNativeReflectConstruct() {
94 if (typeof Reflect === "undefined" || !Reflect.construct) return false;
95 if (Reflect.construct.sham) return false;
96 if (typeof Proxy === "function") return true;
97
98 try {
99 Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
100 return true;
101 } catch (e) {
102 return false;
103 }
104}
105
106function _construct(Parent, args, Class) {
107 if (isNativeReflectConstruct()) {
108 _construct = Reflect.construct;
109 } else {
110 _construct = function _construct(Parent, args, Class) {
111 var a = [null];
112 a.push.apply(a, args);
113 var Constructor = Function.bind.apply(Parent, a);
114 var instance = new Constructor();
115 if (Class) _setPrototypeOf(instance, Class.prototype);
116 return instance;
117 };
118 }
119
120 return _construct.apply(null, arguments);
121}
122
123function _isNativeFunction(fn) {
124 return Function.toString.call(fn).indexOf("[native code]") !== -1;
125}
126
127function _wrapNativeSuper(Class) {
128 var _cache = typeof Map === "function" ? new Map() : undefined;
129
130 _wrapNativeSuper = function _wrapNativeSuper(Class) {
131 if (Class === null || !_isNativeFunction(Class)) return Class;
132
133 if (typeof Class !== "function") {
134 throw new TypeError("Super expression must either be null or a function");
135 }
136
137 if (typeof _cache !== "undefined") {
138 if (_cache.has(Class)) return _cache.get(Class);
139
140 _cache.set(Class, Wrapper);
141 }
142
143 function Wrapper() {
144 return _construct(Class, arguments, _getPrototypeOf(this).constructor);
145 }
146
147 Wrapper.prototype = Object.create(Class.prototype, {
148 constructor: {
149 value: Wrapper,
150 enumerable: false,
151 writable: true,
152 configurable: true
153 }
154 });
155 return _setPrototypeOf(Wrapper, Class);
156 };
157
158 return _wrapNativeSuper(Class);
159}
160
161function _assertThisInitialized(self) {
162 if (self === void 0) {
163 throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
164 }
165
166 return self;
167}
168
169function _possibleConstructorReturn(self, call) {
170 if (call && (typeof call === "object" || typeof call === "function")) {
171 return call;
172 }
173
174 return _assertThisInitialized(self);
175}
176
177function _slicedToArray(arr, i) {
178 return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();
179}
180
181function _toConsumableArray(arr) {
182 return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
183}
184
185function _arrayWithoutHoles(arr) {
186 if (Array.isArray(arr)) {
187 for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
188
189 return arr2;
190 }
191}
192
193function _arrayWithHoles(arr) {
194 if (Array.isArray(arr)) return arr;
195}
196
197function _iterableToArray(iter) {
198 if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
199}
200
201function _iterableToArrayLimit(arr, i) {
202 if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) {
203 return;
204 }
205
206 var _arr = [];
207 var _n = true;
208 var _d = false;
209 var _e = undefined;
210
211 try {
212 for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
213 _arr.push(_s.value);
214
215 if (i && _arr.length === i) break;
216 }
217 } catch (err) {
218 _d = true;
219 _e = err;
220 } finally {
221 try {
222 if (!_n && _i["return"] != null) _i["return"]();
223 } finally {
224 if (_d) throw _e;
225 }
226 }
227
228 return _arr;
229}
230
231function _nonIterableSpread() {
232 throw new TypeError("Invalid attempt to spread non-iterable instance");
233}
234
235function _nonIterableRest() {
236 throw new TypeError("Invalid attempt to destructure non-iterable instance");
237}
238
239var MissingAppProviderError =
240/*#__PURE__*/
241function (_Error) {
242 _inherits(MissingAppProviderError, _Error);
243
244 function MissingAppProviderError() {
245 var _this;
246
247 var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
248
249 _classCallCheck(this, MissingAppProviderError);
250
251 _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.")));
252 _this.name = 'MissingAppProviderError';
253 return _this;
254 }
255
256 return MissingAppProviderError;
257}(_wrapNativeSuper(Error));
258
259function useTheme() {
260 var theme = React.useContext(ThemeContext);
261
262 if (!theme) {
263 throw new MissingAppProviderError('No Theme was provided.');
264 }
265
266 return theme;
267}
268
269// eslint-disable-next-line shopify/typescript/prefer-pascal-case-enums
270
271(function (UNSTABLE_Color) {
272 UNSTABLE_Color["Surface"] = "#FAFAFA";
273 UNSTABLE_Color["DarkSurface"] = "#111213";
274 UNSTABLE_Color["OnSurface"] = "#111213";
275 UNSTABLE_Color["Interactive"] = "#2E72D2";
276 UNSTABLE_Color["Neutral"] = "#111213";
277 UNSTABLE_Color["Primary"] = "#008060";
278 UNSTABLE_Color["Critical"] = "#D82C0D";
279 UNSTABLE_Color["Warning"] = "#FFC453";
280 UNSTABLE_Color["Highlight"] = "#5BCDDA";
281 UNSTABLE_Color["Success"] = "#008060";
282 UNSTABLE_Color["Decorative"] = "#FDC7CE";
283})(exports.UNSTABLE_Color || (exports.UNSTABLE_Color = {}));
284
285var roleVariants = {
286 surface: [{
287 name: 'surface',
288 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
289 light: {},
290 dark: {}
291 }, {
292 name: 'surfaceBackground',
293 description: 'For use in the background of our UIs as a background color, in components such as Page and Frame backgrounds.',
294 light: {
295 lightness: 98.3
296 },
297 dark: {
298 lightness: 3.3
299 }
300 }, {
301 name: 'surfaceForeground',
302 description: 'For use in the foreground of our UIs as a background color, in components such as Card, Modal, and Popover.',
303 light: {
304 lightness: 100
305 },
306 dark: {
307 lightness: 12.7
308 }
309 }, {
310 name: 'surfaceForegroundSubdued',
311 description: 'For use in the foreground of our UIs as a subdued background color, in components such as Card, Modal, and Popover.',
312 light: {
313 lightness: 98.3
314 },
315 dark: {
316 lightness: 10
317 }
318 }, {
319 name: 'surfaceHovered',
320 description: 'For use as a surface color on interactive elements such as resource list items and action list items when in a hovered state.',
321 light: {
322 lightness: 96
323 },
324 dark: {
325 lightness: 20
326 }
327 }, {
328 name: 'surfacePressed',
329 description: 'For use as a surface color on interactive elements such as resource list items and action list items when in a pressed state.',
330 light: {
331 lightness: 90
332 },
333 dark: {
334 lightness: 27
335 }
336 }, {
337 name: 'backdrop',
338 description: 'For use as the background color of the backdrop component for navigation and modal. This color has an alpha of `0.5`.',
339 light: {
340 hue: 0,
341 saturation: 0,
342 lightness: 0,
343 alpha: 0.5
344 },
345 dark: {
346 hue: 0,
347 saturation: 0,
348 lightness: 0,
349 alpha: 0.5
350 }
351 }, {
352 name: 'shadowFromAmbientLight',
353 description: 'For use in building shadows for popovers, cards, and modals. This color has an alpha of `0.05`.',
354 light: {
355 hue: 180,
356 saturation: 5,
357 lightness: 8,
358 alpha: 0.05
359 },
360 dark: {
361 hue: 180,
362 saturation: 5,
363 lightness: 8,
364 alpha: 0.05
365 }
366 }, {
367 name: 'shadowFromDirectLight',
368 description: 'For use in building shadows for popovers, cards, and modals. This color has an alpha of `0.15`.',
369 light: {
370 hue: 0,
371 saturation: 0,
372 lightness: 0,
373 alpha: 0.15
374 },
375 dark: {
376 hue: 0,
377 saturation: 0,
378 lightness: 0,
379 alpha: 0.15
380 }
381 }],
382 onSurface: [{
383 name: 'onSurface',
384 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
385 light: {},
386 dark: {}
387 }, {
388 name: 'borderOnSurface',
389 description: 'For use as a border (border or interactive outline).',
390 light: {
391 lightness: 75
392 },
393 dark: {
394 lightness: 35
395 }
396 }, {
397 name: 'borderDisabledOnSurface',
398 description: 'For use as a an interactive outline on disabled elements.',
399 light: {
400 lightness: 95
401 },
402 dark: {
403 lightness: 70
404 }
405 }, {
406 name: 'borderSubduedOnSurface',
407 description: 'For use as a subdued border (border or interactive outline).',
408 light: {
409 lightness: 85
410 },
411 dark: {
412 lightness: 32
413 }
414 }, {
415 name: 'iconOnSurface',
416 description: 'For use as the fill color of neutral icons.',
417 light: {
418 lightness: 40.1
419 },
420 dark: {
421 lightness: 70.1
422 }
423 }, {
424 name: 'iconDisabledOnSurface',
425 description: 'For use as the fill color of disabled neutral icons.',
426 light: {
427 lightness: 76.9
428 },
429 dark: {
430 lightness: 36.8
431 }
432 }, {
433 name: 'iconSubduedOnSurface',
434 description: 'For use as the fill color of subdued neutral icons.',
435 light: {
436 lightness: 59.8
437 },
438 dark: {
439 lightness: 52.1
440 }
441 }, {
442 name: 'textOnSurface',
443 description: 'For use as a neutral text color.',
444 light: {
445 lightness: 13.1
446 },
447 dark: {
448 lightness: 90.8
449 }
450 }, {
451 name: 'textDisabledOnSurface',
452 description: 'For use as a disabled neutral text color.',
453 light: {
454 lightness: 61.3
455 },
456 dark: {
457 lightness: 48.2
458 }
459 }, {
460 name: 'textSubduedOnSurface',
461 description: 'For use as a subdued neutral text color.',
462 light: {
463 lightness: 47.4
464 },
465 dark: {
466 lightness: 65.1
467 }
468 }],
469 interactive: [{
470 name: 'interactive',
471 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
472 light: {},
473 dark: {}
474 }, {
475 name: 'interactiveAction',
476 description: 'Used for links and plain buttons.',
477 light: {
478 lightness: 48.6
479 },
480 dark: {
481 lightness: 65,
482 saturation: 100,
483 hue: 247.6
484 }
485 }, {
486 name: 'interactiveActionDisabled',
487 description: 'Used for disabled links and plain buttons.',
488 light: {
489 lightness: 58
490 },
491 dark: {
492 lightness: 42
493 }
494 }, {
495 name: 'interactiveActionHovered',
496 description: 'Used for hovered links and plain buttons.',
497 light: {
498 lightness: 37
499 },
500 dark: {
501 lightness: 70,
502 saturation: 100,
503 hue: 247.6
504 }
505 }, {
506 name: 'interactiveActionSubdued',
507 description: 'Used for subdued links and plain buttons.',
508 light: {
509 lightness: 51
510 },
511 dark: {
512 lightness: 49
513 }
514 }, {
515 name: 'interactiveActionPressed',
516 description: 'Used for pressed links and plain buttons.',
517 light: {
518 lightness: 31
519 },
520 dark: {
521 lightness: 75,
522 saturation: 100,
523 hue: 247.6
524 }
525 }, {
526 name: 'interactiveFocus',
527 description: 'For use in the focus ring on interactive elements.',
528 light: {
529 lightness: 58
530 },
531 dark: {
532 lightness: 42
533 }
534 }, {
535 name: 'interactiveSelected',
536 description: 'For use as a surface color in selected interactive elements, in components such as option list and resource list.',
537 light: {
538 lightness: 96
539 },
540 dark: {
541 lightness: 4
542 }
543 }, {
544 name: 'interactiveSelectedHovered',
545 description: 'For use as a surface color in selected interactive elements that are hovered, in components such as option list and resource list.',
546 light: {
547 lightness: 89
548 },
549 dark: {
550 lightness: 11
551 }
552 }, {
553 name: 'interactiveSelectedPressed',
554 description: 'For use as a surface color in selected interactive elements that are pressed, in components such as option list and resource list.',
555 light: {
556 lightness: 82
557 },
558 dark: {
559 lightness: 18
560 }
561 }],
562 neutral: [{
563 name: 'neutral',
564 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
565 light: {},
566 dark: {}
567 }, {
568 name: 'neutralAction',
569 description: 'Used for secondary buttons and tertiary buttons, as well as in form elements as a background color and pontentially other neutral surfaces.',
570 light: {
571 lightness: 93
572 },
573 dark: {
574 lightness: 22
575 }
576 }, {
577 name: 'neutralActionDisabled',
578 description: 'Used as a disabled state for secondary buttons',
579 light: {
580 lightness: 94
581 },
582 dark: {
583 lightness: 13
584 }
585 }, {
586 name: 'neutralActionHovered',
587 description: 'Used as a hovered state for secondary buttons',
588 light: {
589 lightness: 90
590 },
591 dark: {
592 lightness: 37
593 }
594 }, {
595 name: 'neutralActionPressed',
596 description: 'Used as a pressed state for secondary buttons',
597 light: {
598 lightness: 87
599 },
600 dark: {
601 lightness: 42
602 }
603 }],
604 primary: [{
605 name: 'primary',
606 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
607 light: {},
608 dark: {}
609 }, {
610 name: 'primaryAction',
611 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.',
612 light: {
613 lightness: 47.3
614 },
615 dark: {
616 lightness: 47.3
617 }
618 }, {
619 name: 'primaryActionDisabled',
620 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.',
621 light: {
622 lightness: 32
623 },
624 dark: {
625 lightness: 32
626 }
627 }, {
628 name: 'primaryActionHovered',
629 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.',
630 light: {
631 lightness: 42.3
632 },
633 dark: {
634 lightness: 55
635 }
636 }, {
637 name: 'primaryActionPressed',
638 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.',
639 light: {
640 lightness: 37.3
641 },
642 dark: {
643 lightness: 60
644 }
645 }, {
646 name: 'iconOnPrimary',
647 description: 'For use as a fill color for icons on primary actions. Not for use in icons on navigation and tabs.',
648 light: {
649 lightness: 98
650 },
651 dark: {
652 lightness: 98
653 }
654 }, {
655 name: 'textOnPrimary',
656 description: 'For use as a text color on primary actions. Not for use in text on navigation and tabs.',
657 light: {
658 lightness: 100
659 },
660 dark: {
661 lightness: 100
662 }
663 }, {
664 name: 'primarySelected',
665 description: 'Used as a surface color to indicate selected interactive states in navigation and tabs.',
666 light: {
667 lightness: 95,
668 saturation: 30
669 },
670 dark: {
671 lightness: 5,
672 saturation: 30
673 }
674 }, {
675 name: 'primarySelectedHovered',
676 description: 'Used as a surface color to indicate selected interactive states that are hovered in navigation and tabs.',
677 light: {
678 lightness: 81,
679 saturation: 22
680 },
681 dark: {
682 lightness: 19,
683 saturation: 22
684 }
685 }, {
686 name: 'primarySelectedPressed',
687 description: 'Used as a surface color to indicate selected interactive states that are pressed in navigation and tabs.',
688 light: {
689 lightness: 74,
690 saturation: 22
691 },
692 dark: {
693 lightness: 26,
694 saturation: 22
695 }
696 }],
697 critical: [{
698 name: 'critical',
699 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
700 light: {},
701 dark: {}
702 }, {
703 name: 'criticalBorder',
704 description: 'For use as a border on critical components such as banners, and as an outline on interactive elements in an error state.',
705 light: {
706 lightness: 50
707 },
708 dark: {
709 lightness: 50
710 }
711 }, {
712 name: 'criticalBorderDisabled',
713 description: 'For use as a disabled border on critical components such as banners, and as an outline on interactive elements in an error state.',
714 light: {
715 lightness: 82
716 },
717 dark: {
718 lightness: 28
719 }
720 }, {
721 name: 'criticalIcon',
722 description: 'For use as an icon fill color on top of critical elements.',
723 light: {
724 lightness: 52
725 },
726 dark: {
727 lightness: 48
728 }
729 }, {
730 name: 'criticalSurface',
731 description: 'For use as a surface color on critical elements including badges.',
732 light: {
733 lightness: 98.6
734 },
735 dark: {
736 lightness: 12
737 }
738 }, {
739 name: 'criticalSurfaceSubdued',
740 description: 'For use as a subdued surface color on critical elements including banners.',
741 light: {
742 lightness: 98
743 },
744 dark: {
745 lightness: 12
746 }
747 }, {
748 name: 'criticalSurfaceSubduedHovered',
749 description: 'For use as a surface color on critical interactive elements including action list items in a hovered state.',
750 light: {
751 lightness: 96
752 },
753 dark: {
754 lightness: 15,
755 saturation: 60
756 }
757 }, {
758 name: 'criticalSurfaceSubduedPressed',
759 description: 'For use as a surface color on critical interactive elements including action list items in a pressed state.',
760 light: {
761 lightness: 88
762 },
763 dark: {
764 lightness: 22
765 }
766 }, {
767 name: 'criticalText',
768 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.',
769 light: {
770 lightness: 47.3
771 },
772 dark: {
773 lightness: 65,
774 saturation: 70
775 }
776 }, {
777 name: 'criticalAction',
778 description: 'For use as the background color for destructive buttons, and as the background color for error toast messages.',
779 light: {
780 lightness: 47.5
781 },
782 dark: {
783 lightness: 45
784 }
785 }, {
786 name: 'criticalActionDisabled',
787 description: 'For use as the background color for disabled destructive buttons, and as the background color for error toast messages.',
788 light: {
789 lightness: 59
790 },
791 dark: {
792 lightness: 41
793 }
794 }, {
795 name: 'criticalActionHovered',
796 description: 'For use as the background color for hovered destructive buttons, and as the background color for error toast messages.',
797 light: {
798 lightness: 42.5
799 },
800 dark: {
801 lightness: 50
802 }
803 }, {
804 name: 'criticalActionPressed',
805 description: 'For use as the background color for pressed destructive buttons, and as the background color for error toast messages.',
806 light: {
807 lightness: 37.5
808 },
809 dark: {
810 lightness: 55
811 }
812 }, {
813 name: 'iconOnCritical',
814 description: 'For use as a fill color for icons on critical actions.',
815 light: {
816 lightness: 98
817 },
818 dark: {
819 lightness: 98
820 }
821 }, {
822 name: 'textOnCritical',
823 description: 'For use as a text color on critical actions.',
824 light: {
825 lightness: 100
826 },
827 dark: {
828 lightness: 100
829 }
830 }, {
831 name: 'criticalLink',
832 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.',
833 light: {
834 lightness: 48.5
835 },
836 dark: {
837 lightness: 65
838 }
839 }, {
840 name: 'criticalLinkDisabled',
841 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.',
842 light: {
843 lightness: 72
844 },
845 dark: {
846 lightness: 78
847 }
848 }, {
849 name: 'criticalLinkHovered',
850 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.',
851 light: {
852 lightness: 45
853 },
854 dark: {
855 lightness: 70
856 }
857 }, {
858 name: 'criticalLinkPressed',
859 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.',
860 light: {
861 lightness: 21
862 },
863 dark: {
864 lightness: 75
865 }
866 }],
867 warning: [{
868 name: 'warning',
869 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
870 light: {},
871 dark: {}
872 }, {
873 name: 'warningBorder',
874 description: 'For use as a border on warning components such as banners.',
875 light: {
876 lightness: 76.6
877 },
878 dark: {
879 lightness: 50
880 }
881 }, {
882 name: 'warningIcon',
883 description: 'For use as an icon fill color on top of warning elements.',
884 light: {
885 lightness: 66
886 },
887 dark: {
888 lightness: 34
889 }
890 }, {
891 name: 'warningSurface',
892 description: 'For use as a surface color on warning elements including badges.',
893 light: {
894 lightness: 84.5
895 },
896 dark: {
897 lightness: 50
898 }
899 }, {
900 name: 'warningSurfaceSubdued',
901 description: 'For use as a subdued surface color on warning elements including banners.',
902 light: {
903 lightness: 96
904 },
905 dark: {
906 lightness: 26,
907 saturation: 71
908 }
909 }, {
910 name: 'warningText',
911 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.',
912 light: {
913 lightness: 47.4
914 },
915 dark: {
916 lightness: 64.9
917 }
918 }],
919 highlight: [{
920 name: 'highlight',
921 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
922 light: {},
923 dark: {}
924 }, {
925 name: 'highlightBorder',
926 description: 'For use as a border on informational components such as banners.',
927 light: {
928 lightness: 60
929 },
930 dark: {
931 lightness: 60
932 }
933 }, {
934 name: 'highlightIcon',
935 description: 'For use as an icon fill color on top of informational elements.',
936 light: {
937 lightness: 58
938 },
939 dark: {
940 lightness: 42
941 }
942 }, {
943 name: 'highlightSurface',
944 description: 'For use as a surface color on information elements including badges.',
945 light: {
946 lightness: 84.5,
947 saturation: 60
948 },
949 dark: {
950 lightness: 40,
951 saturation: 100
952 }
953 }, {
954 name: 'highlightSurfaceSubdued',
955 description: 'For use as a surface color on information elements including banners.',
956 light: {
957 lightness: 98.6
958 },
959 dark: {
960 lightness: 20
961 }
962 }, {
963 name: 'highlightext',
964 description: 'For use as a text color in inert informational elements. Not for use as a text color on banners and badges.',
965 light: {
966 lightness: 10
967 },
968 dark: {
969 lightness: 90
970 }
971 }],
972 success: [{
973 name: 'success',
974 description: 'While use directly in our components is discouraged, the base variant is unmodified from the original role input color.',
975 light: {},
976 dark: {}
977 }, {
978 name: 'successBorder',
979 description: 'For use as a border on success components such as banners.',
980 light: {
981 lightness: 50
982 },
983 dark: {
984 lightness: 50
985 }
986 }, {
987 name: 'successIcon',
988 description: 'For use as an icon fill color on top of success elements.',
989 light: {
990 lightness: 25
991 },
992 dark: {
993 lightness: 35
994 }
995 }, {
996 name: 'successSurface',
997 description: 'For use as a surface color on success elements including badges.',
998 light: {
999 lightness: 84.5,
1000 saturation: 60
1001 },
1002 dark: {
1003 lightness: 35
1004 }
1005 }, {
1006 name: 'successSurfaceSubdued',
1007 description: 'For use as a surface color on information elements including banners.',
1008 light: {
1009 lightness: 99,
1010 saturation: 60
1011 },
1012 dark: {
1013 lightness: 20,
1014 saturation: 60
1015 }
1016 }, {
1017 name: 'successText',
1018 description: 'For use as a text color in inert success elements. Not for use as a text color on banners and badges.',
1019 light: {
1020 lightness: 47.3
1021 },
1022 dark: {
1023 lightness: 65,
1024 saturation: 70
1025 }
1026 }],
1027 decorative: [{
1028 name: 'decorativeOneSurface',
1029 description: 'For use as a decorative surface color.',
1030 light: {
1031 hue: 56,
1032 saturation: 100,
1033 lightness: 84
1034 },
1035 dark: {
1036 hue: 54,
1037 saturation: 98,
1038 lightness: 46
1039 }
1040 }, {
1041 name: 'decorativeOneText',
1042 description: 'For use as a decorative text color that is applied on a decorative surface.',
1043 light: {
1044 hue: 52,
1045 saturation: 100,
1046 lightness: 18
1047 },
1048 dark: {
1049 lightness: 100
1050 }
1051 }, {
1052 name: 'decorativeTwoSurface',
1053 description: 'For use as a decorative surface color.',
1054 light: {
1055 hue: 30,
1056 saturation: 100,
1057 lightness: 84
1058 },
1059 dark: {
1060 hue: 24,
1061 saturation: 96,
1062 lightness: 52
1063 }
1064 }, {
1065 name: 'decorativeTwoText',
1066 description: 'For use as a decorative text color that is applied on a decorative surface.',
1067 light: {
1068 hue: 362,
1069 saturation: 80,
1070 lightness: 14
1071 },
1072 dark: {
1073 lightness: 100
1074 }
1075 }, {
1076 name: 'decorativeThreeSurface',
1077 description: 'For use as a decorative surface color.',
1078 light: {
1079 hue: 144,
1080 saturation: 54,
1081 lightness: 84
1082 },
1083 dark: {
1084 hue: 154,
1085 saturation: 100,
1086 lightness: 46
1087 }
1088 }, {
1089 name: 'decorativeThreeText',
1090 description: 'For use as a decorative text color that is applied on a decorative surface.',
1091 light: {
1092 hue: 144,
1093 saturation: 100,
1094 lightness: 16
1095 },
1096 dark: {
1097 lightness: 100
1098 }
1099 }, {
1100 name: 'decorativeFourSurface',
1101 description: 'For use as a decorative surface color.',
1102 light: {
1103 hue: 180,
1104 saturation: 56,
1105 lightness: 84
1106 },
1107 dark: {
1108 hue: 188,
1109 saturation: 95,
1110 lightness: 47
1111 }
1112 }, {
1113 name: 'decorativeFourText',
1114 description: 'For use as a decorative text color that is applied on a decorative surface.',
1115 light: {
1116 hue: 190,
1117 saturation: 100,
1118 lightness: 16
1119 },
1120 dark: {
1121 lightness: 100
1122 }
1123 }, {
1124 name: 'decorativeFiveSurface',
1125 description: 'For use as a decorative surface color.',
1126 light: {},
1127 dark: {
1128 hue: 363,
1129 saturation: 77,
1130 lightness: 45
1131 }
1132 }, {
1133 name: 'decorativeFiveText',
1134 description: 'For use as a decorative text color that is applied on a decorative surface.',
1135 light: {
1136 hue: 363,
1137 saturation: 78,
1138 lightness: 16
1139 },
1140 dark: {
1141 lightness: 100
1142 }
1143 }]
1144};
1145
1146function compose() {
1147 for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {
1148 fns[_key] = arguments[_key];
1149 }
1150
1151 return fns.reduce(function (func, group) {
1152 return function () {
1153 return func(group.apply(void 0, arguments));
1154 };
1155 });
1156}
1157
1158function rgbString(color) {
1159 var red = color.red,
1160 green = color.green,
1161 blue = color.blue;
1162
1163 if (Object.prototype.hasOwnProperty.call(color, 'alpha')) {
1164 return "rgba(".concat(red, ", ").concat(green, ", ").concat(blue, ", ").concat(color.alpha, ")");
1165 } else {
1166 return "rgb(".concat(red, ", ").concat(green, ", ").concat(blue, ")");
1167 }
1168}
1169var rgbaString = rgbString;
1170function rgbToHex(_ref) {
1171 var red = _ref.red,
1172 green = _ref.green,
1173 blue = _ref.blue;
1174 return "#".concat(componentToHex(red)).concat(componentToHex(green)).concat(componentToHex(blue));
1175}
1176
1177function componentToHex(component) {
1178 var hex = component.toString(16);
1179 return hex.length === 1 ? "0".concat(hex) : hex;
1180}
1181
1182function hsbToHex(color) {
1183 return rgbToHex(hsbToRgb(color));
1184}
1185
1186function rgbFromHueAndChroma(hue, chroma) {
1187 var huePrime = hue / 60;
1188 var hueDelta = 1 - Math.abs(huePrime % 2 - 1);
1189 var intermediateValue = chroma * hueDelta;
1190 var red = 0;
1191 var green = 0;
1192 var blue = 0;
1193
1194 if (huePrime >= 0 && huePrime <= 1) {
1195 red = chroma;
1196 green = intermediateValue;
1197 blue = 0;
1198 }
1199
1200 if (huePrime >= 1 && huePrime <= 2) {
1201 red = intermediateValue;
1202 green = chroma;
1203 blue = 0;
1204 }
1205
1206 if (huePrime >= 2 && huePrime <= 3) {
1207 red = 0;
1208 green = chroma;
1209 blue = intermediateValue;
1210 }
1211
1212 if (huePrime >= 3 && huePrime <= 4) {
1213 red = 0;
1214 green = intermediateValue;
1215 blue = chroma;
1216 }
1217
1218 if (huePrime >= 4 && huePrime <= 5) {
1219 red = intermediateValue;
1220 green = 0;
1221 blue = chroma;
1222 }
1223
1224 if (huePrime >= 5 && huePrime <= 6) {
1225 red = chroma;
1226 green = 0;
1227 blue = intermediateValue;
1228 }
1229
1230 return {
1231 red,
1232 green,
1233 blue
1234 };
1235}
1236
1237function hsbToRgb(color) {
1238 var hue = color.hue,
1239 saturation = color.saturation,
1240 brightness = color.brightness,
1241 _color$alpha = color.alpha,
1242 alpha = _color$alpha === void 0 ? 1 : _color$alpha;
1243 var chroma = brightness * saturation;
1244
1245 var _rgbFromHueAndChroma = rgbFromHueAndChroma(hue, chroma),
1246 red = _rgbFromHueAndChroma.red,
1247 green = _rgbFromHueAndChroma.green,
1248 blue = _rgbFromHueAndChroma.blue;
1249
1250 var chromaBrightnessDelta = brightness - chroma;
1251 red += chromaBrightnessDelta;
1252 green += chromaBrightnessDelta;
1253 blue += chromaBrightnessDelta;
1254 return {
1255 red: Math.round(red * 255),
1256 green: Math.round(green * 255),
1257 blue: Math.round(blue * 255),
1258 alpha
1259 };
1260}
1261function hslToRgb(color) {
1262 var hue = color.hue,
1263 saturation = color.saturation,
1264 lightness = color.lightness,
1265 _color$alpha2 = color.alpha,
1266 alpha = _color$alpha2 === void 0 ? 1 : _color$alpha2;
1267 var chroma = (1 - Math.abs(2 * (lightness / 100) - 1)) * (saturation / 100);
1268
1269 var _rgbFromHueAndChroma2 = rgbFromHueAndChroma(hue, chroma),
1270 red = _rgbFromHueAndChroma2.red,
1271 green = _rgbFromHueAndChroma2.green,
1272 blue = _rgbFromHueAndChroma2.blue;
1273
1274 var lightnessVal = lightness / 100 - chroma / 2;
1275 red += lightnessVal;
1276 green += lightnessVal;
1277 blue += lightnessVal;
1278 return {
1279 red: Math.round(red * 255),
1280 green: Math.round(green * 255),
1281 blue: Math.round(blue * 255),
1282 alpha
1283 };
1284} // ref https://en.wikipedia.org/wiki/HSL_and_HSV
1285
1286function rgbToHsbl(color) {
1287 var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'b';
1288 var r = color.red,
1289 g = color.green,
1290 b = color.blue,
1291 _color$alpha3 = color.alpha,
1292 alpha = _color$alpha3 === void 0 ? 1 : _color$alpha3;
1293 var red = r / 255;
1294 var green = g / 255;
1295 var blue = b / 255;
1296 var largestComponent = Math.max(red, green, blue);
1297 var smallestComponent = Math.min(red, green, blue);
1298 var delta = largestComponent - smallestComponent;
1299 var lightness = (largestComponent + smallestComponent) / 2;
1300 var saturation = 0;
1301
1302 if (largestComponent === 0) {
1303 saturation = 0;
1304 } else if (type === 'b') {
1305 saturation = delta / largestComponent;
1306 } else if (type === 'l') {
1307 var baseSaturation = lightness > 0.5 ? delta / (2 - largestComponent - smallestComponent) : delta / (largestComponent + smallestComponent);
1308 saturation = isNaN(baseSaturation) ? 0 : baseSaturation;
1309 }
1310
1311 var huePercentage = 0;
1312
1313 switch (largestComponent) {
1314 case red:
1315 huePercentage = (green - blue) / delta + (green < blue ? 6 : 0);
1316 break;
1317
1318 case green:
1319 huePercentage = (blue - red) / delta + 2;
1320 break;
1321
1322 case blue:
1323 huePercentage = (red - green) / delta + 4;
1324 }
1325
1326 var hue = Math.round(huePercentage / 6 * 360);
1327 return {
1328 hue: math.clamp(hue, 0, 360) || 0,
1329 saturation: parseFloat(math.clamp(saturation, 0, 1).toFixed(2)),
1330 brightness: parseFloat(math.clamp(largestComponent, 0, 1).toFixed(2)),
1331 lightness: parseFloat(lightness.toFixed(2)),
1332 alpha: parseFloat(alpha.toFixed(2))
1333 };
1334}
1335
1336function rgbToHsb(color) {
1337 var _rgbToHsbl = rgbToHsbl(color, 'b'),
1338 hue = _rgbToHsbl.hue,
1339 saturation = _rgbToHsbl.saturation,
1340 brightness = _rgbToHsbl.brightness,
1341 _rgbToHsbl$alpha = _rgbToHsbl.alpha,
1342 alpha = _rgbToHsbl$alpha === void 0 ? 1 : _rgbToHsbl$alpha;
1343
1344 return {
1345 hue,
1346 saturation,
1347 brightness,
1348 alpha
1349 };
1350}
1351function rgbToHsl(color) {
1352 var _rgbToHsbl2 = rgbToHsbl(color, 'l'),
1353 hue = _rgbToHsbl2.hue,
1354 rawSaturation = _rgbToHsbl2.saturation,
1355 rawLightness = _rgbToHsbl2.lightness,
1356 _rgbToHsbl2$alpha = _rgbToHsbl2.alpha,
1357 alpha = _rgbToHsbl2$alpha === void 0 ? 1 : _rgbToHsbl2$alpha;
1358
1359 var saturation = rawSaturation * 100;
1360 var lightness = rawLightness * 100;
1361 return {
1362 hue,
1363 saturation,
1364 lightness,
1365 alpha
1366 };
1367}
1368function hexToRgb(color) {
1369 if (color.length === 4) {
1370 var repeatHex = function repeatHex(hex1, hex2) {
1371 return color.slice(hex1, hex2).repeat(2);
1372 };
1373
1374 var _red = parseInt(repeatHex(1, 2), 16);
1375
1376 var _green = parseInt(repeatHex(2, 3), 16);
1377
1378 var _blue = parseInt(repeatHex(3, 4), 16);
1379
1380 return {
1381 red: _red,
1382 green: _green,
1383 blue: _blue
1384 };
1385 }
1386
1387 var red = parseInt(color.slice(1, 3), 16);
1388 var green = parseInt(color.slice(3, 5), 16);
1389 var blue = parseInt(color.slice(5, 7), 16);
1390 return {
1391 red,
1392 green,
1393 blue
1394 };
1395}
1396var ColorType;
1397
1398(function (ColorType) {
1399 ColorType["Hex"] = "hex";
1400 ColorType["Rgb"] = "rgb";
1401 ColorType["Rgba"] = "rgba";
1402 ColorType["Hsl"] = "hsl";
1403 ColorType["Hsla"] = "hsla";
1404 ColorType["Default"] = "default";
1405})(ColorType || (ColorType = {}));
1406
1407function getColorType(color) {
1408 if (color.includes('#')) {
1409 return ColorType.Hex;
1410 } else if (color.includes('rgb')) {
1411 return ColorType.Rgb;
1412 } else if (color.includes('rgba')) {
1413 return ColorType.Rgba;
1414 } else if (color.includes('hsl')) {
1415 return ColorType.Hsl;
1416 } else if (color.includes('hsla')) {
1417 return ColorType.Hsla;
1418 } else {
1419 if (process.env.NODE_ENV === 'development') {
1420 /* eslint-disable-next-line no-console */
1421 console.warn('Accepted colors formats are: hex, rgb, rgba, hsl and hsla');
1422 }
1423
1424 return ColorType.Default;
1425 }
1426}
1427
1428function hslToString(hslColor) {
1429 if (typeof hslColor === 'string') {
1430 return hslColor;
1431 }
1432
1433 var _hslColor$alpha = hslColor.alpha,
1434 alpha = _hslColor$alpha === void 0 ? 1 : _hslColor$alpha,
1435 hue = hslColor.hue,
1436 lightness = hslColor.lightness,
1437 saturation = hslColor.saturation;
1438 return "hsla(".concat(hue, ", ").concat(saturation, "%, ").concat(lightness, "%, ").concat(alpha, ")");
1439}
1440
1441function rgbToObject(color) {
1442 // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec
1443 var colorMatch = color.match(/\(([^)]+)\)/);
1444
1445 if (!colorMatch) {
1446 return {
1447 red: 0,
1448 green: 0,
1449 blue: 0,
1450 alpha: 0
1451 };
1452 }
1453
1454 var _colorMatch$1$split = colorMatch[1].split(','),
1455 _colorMatch$1$split2 = _slicedToArray(_colorMatch$1$split, 4),
1456 red = _colorMatch$1$split2[0],
1457 green = _colorMatch$1$split2[1],
1458 blue = _colorMatch$1$split2[2],
1459 alpha = _colorMatch$1$split2[3];
1460
1461 var objColor = {
1462 red: parseInt(red, 10),
1463 green: parseInt(green, 10),
1464 blue: parseInt(blue, 10),
1465 alpha: parseInt(alpha, 10) || 1
1466 };
1467 return objColor;
1468}
1469
1470var hexToHsla = compose(rgbToHsl, hexToRgb);
1471var rbgStringToHsla = compose(rgbToHsl, rgbToObject);
1472
1473function hslToObject(color) {
1474 // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec
1475 var colorMatch = color.match(/\(([^)]+)\)/);
1476
1477 if (!colorMatch) {
1478 return {
1479 hue: 0,
1480 saturation: 0,
1481 lightness: 0,
1482 alpha: 0
1483 };
1484 }
1485
1486 var _colorMatch$1$split3 = colorMatch[1].split(','),
1487 _colorMatch$1$split4 = _slicedToArray(_colorMatch$1$split3, 4),
1488 hue = _colorMatch$1$split4[0],
1489 saturation = _colorMatch$1$split4[1],
1490 lightness = _colorMatch$1$split4[2],
1491 alpha = _colorMatch$1$split4[3];
1492
1493 var objColor = {
1494 hue: parseInt(hue, 10),
1495 saturation: parseInt(saturation, 10),
1496 lightness: parseInt(lightness, 10),
1497 alpha: parseFloat(alpha) || 1
1498 };
1499 return objColor;
1500}
1501
1502function colorToHsla(color) {
1503 var type = getColorType(color);
1504
1505 switch (type) {
1506 case ColorType.Hex:
1507 return hexToHsla(color);
1508
1509 case ColorType.Rgb:
1510 case ColorType.Rgba:
1511 return rbgStringToHsla(color);
1512
1513 case ColorType.Hsla:
1514 case ColorType.Hsl:
1515 return hslToObject(color);
1516
1517 case ColorType.Default:
1518 default:
1519 throw new Error('Accepted color formats are: hex, rgb, rgba, hsl and hsla');
1520 }
1521}
1522
1523// implements: https://www.w3.org/WAI/ER/WD-AERT/#color-contrast
1524function isLight(_ref) {
1525 var red = _ref.red,
1526 green = _ref.green,
1527 blue = _ref.blue;
1528 var contrast = (red * 299 + green * 587 + blue * 114) / 1000;
1529 return contrast > 125;
1530}
1531
1532function normalizeName(name) {
1533 return name.split(/(?=[A-Z])/).join('-').toLowerCase();
1534}
1535function constructColorName(baseName, property, suffix) {
1536 var name = normalizeName(baseName);
1537 var propertyName = property ? "-".concat(normalizeName(property)) : '';
1538 var constructedSuffix = suffix ? "-".concat(suffix) : '';
1539 return "--".concat(name).concat(propertyName).concat(constructedSuffix);
1540}
1541
1542function lightenColor(color) {
1543 var lighten = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
1544
1545 if (typeof color === 'string') {
1546 return color;
1547 }
1548
1549 var lightness = color.lightness;
1550 var nextLightness = lightness + lighten;
1551 return Object.assign({}, color, {
1552 lightness: math.clamp(nextLightness, 0, 100)
1553 });
1554}
1555function saturateColor(color) {
1556 var saturate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
1557
1558 if (typeof color === 'string') {
1559 return color;
1560 }
1561
1562 var saturation = color.saturation;
1563 var nextSaturation = saturation + saturate;
1564 return Object.assign({}, color, {
1565 saturation: nextSaturation
1566 });
1567}
1568function createLightColor(color, lightness, saturation) {
1569 var lightenedColor = lightenColor(color, lightness);
1570 var saturatedColor = saturateColor(lightenedColor, -saturation);
1571 return saturatedColor;
1572}
1573
1574var needsVariantList = ['topBar'];
1575
1576var BorderRadius = {
1577 borderRadiusBase: rem('4px'),
1578 borderRadiusWide: rem('8px')
1579};
1580var Shadow = {
1581 cardShadow: '0px 0px 5px var(--p-shadow-from-ambient-light), 0px 1px 2px var(--p-shadow-from-direct-light)',
1582 popoverShadow: '-1px 0px 20px var(--p-shadow-from-ambient-light), 0px 1px 5px var(--p-shadow-from-direct-light)',
1583 modalShadow: '0px 6px 32px var(--p-shadow-from-ambient-light), 0px 1px 6px var(--p-shadow-from-direct-light)'
1584};
1585var Overrides = {
1586 overrideNone: 'none',
1587 overrideTransparent: 'transparent',
1588 overrideOne: '1',
1589 overrideVisible: 'visible',
1590 overrideZero: '0',
1591 overrideLoadingZIndex: '514',
1592 buttonFontWeight: '500',
1593 nonNullContent: "''",
1594 bannerDefaultBorder: buildBannerBorder('--p-border-on-surface'),
1595 bannerSuccessBorder: buildBannerBorder('--p-success-border'),
1596 bannerHighlightBorder: buildBannerBorder('--p-highlight-border'),
1597 bannerWarningBorder: buildBannerBorder('--p-warning-border'),
1598 bannerCriticalBorder: buildBannerBorder('--p-critical-border'),
1599 badgeMixBlendMode: 'luminosity',
1600 borderSubdued: "".concat(rem('1px'), " solid var(--p-border-subdued-on-surface)"),
1601 textFieldSpinnerOffset: rem('2px'),
1602 textFieldFocusRingOffset: rem('-4px'),
1603 textFieldFocusRingBorderRadius: rem('7px'),
1604 buttonGroupItemSpacing: rem('2px')
1605};
1606var Tokens = Object.assign({}, BorderRadius, Shadow, Overrides);
1607
1608function rem(px) {
1609 var baseFontSize = 10;
1610 return "".concat(parseInt(px, 10) / baseFontSize, "rem");
1611}
1612
1613function buildBannerBorder(cssVar) {
1614 return "inset 0 ".concat(rem('2px'), " 0 0 var(").concat(cssVar, "), inset 0 0 0 ").concat(rem('2px'), " var(").concat(cssVar, ")");
1615}
1616
1617function buildCustomProperties(themeConfig, globalTheming) {
1618 return globalTheming ? customPropertyTransformer(Object.assign({}, buildColors(themeConfig, roleVariants), Tokens)) : buildLegacyColors(themeConfig);
1619}
1620function buildThemeContext(themeConfig, cssCustomProperties) {
1621 var logo = themeConfig.logo;
1622 return {
1623 logo,
1624 UNSTABLE_cssCustomProperties: toString(cssCustomProperties)
1625 };
1626}
1627
1628function toString(obj) {
1629 if (obj) {
1630 return Object.entries(obj).map(function (pair) {
1631 return pair.join(':');
1632 }).join(';');
1633 } else {
1634 return undefined;
1635 }
1636}
1637
1638function hexToHsluvObj(hex) {
1639 var _hexToHsluv = hsluv.hexToHsluv(hex),
1640 _hexToHsluv2 = _slicedToArray(_hexToHsluv, 3),
1641 hue = _hexToHsluv2[0],
1642 saturation = _hexToHsluv2[1],
1643 lightness = _hexToHsluv2[2];
1644
1645 return {
1646 hue,
1647 saturation,
1648 lightness
1649 };
1650}
1651
1652function buildColors(theme, roleVariants) {
1653 var colors = Object.assign({
1654 surface: exports.UNSTABLE_Color.Surface,
1655 onSurface: exports.UNSTABLE_Color.OnSurface,
1656 interactive: exports.UNSTABLE_Color.Interactive,
1657 neutral: exports.UNSTABLE_Color.Neutral,
1658 primary: exports.UNSTABLE_Color.Primary,
1659 critical: exports.UNSTABLE_Color.Critical,
1660 warning: exports.UNSTABLE_Color.Warning,
1661 highlight: exports.UNSTABLE_Color.Highlight,
1662 success: exports.UNSTABLE_Color.Success,
1663 decorative: exports.UNSTABLE_Color.Decorative
1664 }, theme.UNSTABLE_colors);
1665 var lightSurface = isLight(hexToRgb(colors.surface));
1666 return Object.entries(roleVariants).reduce(function (acc1, _ref) {
1667 var _ref2 = _slicedToArray(_ref, 2),
1668 role = _ref2[0],
1669 variants = _ref2[1];
1670
1671 var base = hexToHsluvObj(colors[role]);
1672 return Object.assign({}, acc1, variants.reduce(function (acc2, _ref3) {
1673 var name = _ref3.name,
1674 light = _ref3.light,
1675 dark = _ref3.dark;
1676 var configs = {
1677 default: lightSurface ? light : dark
1678 };
1679
1680 if (!isEqual(light, dark)) {
1681 configs.Inverse = lightSurface ? dark : light;
1682 configs.Light = light;
1683 configs.Dark = dark;
1684 }
1685
1686 return Object.assign({}, acc2, Object.entries(configs).reduce(function (acc3, _ref4) {
1687 var _ref5 = _slicedToArray(_ref4, 2),
1688 variant = _ref5[0],
1689 config = _ref5[1];
1690
1691 var _config$hue = config.hue,
1692 hue = _config$hue === void 0 ? base.hue : _config$hue,
1693 _config$saturation = config.saturation,
1694 saturation = _config$saturation === void 0 ? base.saturation : _config$saturation,
1695 _config$lightness = config.lightness,
1696 lightness = _config$lightness === void 0 ? base.lightness : _config$lightness,
1697 _config$alpha = config.alpha,
1698 alpha = _config$alpha === void 0 ? 1 : _config$alpha;
1699 var displayName = variant === 'default' ? name : "".concat(name).concat(variant);
1700 return Object.assign({}, acc3, {
1701 [displayName]: hslToString(Object.assign({}, colorToHsla(hsluv.hsluvToHex([hue, saturation, lightness])), {
1702 alpha
1703 }))
1704 });
1705 }, {}));
1706 }, {}));
1707 }, {});
1708}
1709
1710function customPropertyTransformer(properties) {
1711 return Object.entries(properties).reduce(function (transformed, _ref6) {
1712 var _ref7 = _slicedToArray(_ref6, 2),
1713 key = _ref7[0],
1714 value = _ref7[1];
1715
1716 return Object.assign({}, transformed, {
1717 [toCssCustomPropertySyntax(key)]: value
1718 });
1719 }, {});
1720}
1721
1722function toCssCustomPropertySyntax(camelCase) {
1723 return "--p-".concat(camelCase.replace(/([A-Z0-9])/g, '-$1').toLowerCase());
1724}
1725
1726function buildLegacyColors(theme) {
1727 var colorPairs;
1728 var colors = theme && theme.colors && theme.colors.topBar ? theme.colors.topBar : {
1729 background: '#00848e',
1730 backgroundLighter: '#1d9ba4',
1731 color: '#f9fafb'
1732 };
1733 var colorKey = 'topBar';
1734 var colorKeys = Object.keys(colors);
1735
1736 if (colorKeys.length > 1) {
1737 colorPairs = colorKeys.map(function (key) {
1738 return [constructColorName(colorKey, key), colors[key]];
1739 });
1740 } else {
1741 colorPairs = parseColors([colorKey, colors]);
1742 }
1743
1744 return colorPairs.reduce(function (state, _ref8) {
1745 var _ref9 = _slicedToArray(_ref8, 2),
1746 key = _ref9[0],
1747 value = _ref9[1];
1748
1749 return Object.assign({}, state, {
1750 [key]: value
1751 });
1752 }, {});
1753}
1754
1755function needsVariant(name) {
1756 return needsVariantList.includes(name);
1757}
1758var lightenToString = compose(hslToString, createLightColor);
1759function setTextColor(name) {
1760 var variant = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'dark';
1761
1762 if (variant === 'light') {
1763 return [name, tokens__default.colorInk];
1764 }
1765
1766 return [name, tokens__default.colorWhite];
1767}
1768function setTheme(color, baseName, key, variant) {
1769 var colorPairs = [];
1770
1771 switch (variant) {
1772 case 'light':
1773 colorPairs.push(setTextColor(constructColorName(baseName, null, 'color'), 'light'));
1774 colorPairs.push([constructColorName(baseName, key, 'lighter'), lightenToString(color, 7, -10)]);
1775 break;
1776
1777 case 'dark':
1778 colorPairs.push(setTextColor(constructColorName(baseName, null, 'color'), 'dark'));
1779 colorPairs.push([constructColorName(baseName, key, 'lighter'), lightenToString(color, 15, 15)]);
1780 break;
1781
1782 default:
1783 }
1784
1785 return colorPairs;
1786}
1787
1788function parseColors(_ref10) {
1789 var _ref11 = _slicedToArray(_ref10, 2),
1790 baseName = _ref11[0],
1791 colors = _ref11[1];
1792
1793 var keys = Object.keys(colors);
1794 var colorPairs = [];
1795
1796 for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
1797 var key = _keys[_i];
1798 colorPairs.push([constructColorName(baseName, key), colors[key]]);
1799
1800 if (needsVariant(baseName)) {
1801 var hslColor = colorToHsla(colors[key]);
1802
1803 if (typeof hslColor === 'string') {
1804 return colorPairs;
1805 }
1806
1807 var rgbColor = hslToRgb(hslColor);
1808
1809 if (isLight(rgbColor)) {
1810 colorPairs.push.apply(colorPairs, _toConsumableArray(setTheme(hslColor, baseName, key, 'light')));
1811 } else {
1812 colorPairs.push.apply(colorPairs, _toConsumableArray(setTheme(hslColor, baseName, key, 'dark')));
1813 }
1814 }
1815 }
1816
1817 return colorPairs;
1818}
1819
1820(function (Key) {
1821 Key[Key["Backspace"] = 8] = "Backspace";
1822 Key[Key["Tab"] = 9] = "Tab";
1823 Key[Key["Enter"] = 13] = "Enter";
1824 Key[Key["Shift"] = 16] = "Shift";
1825 Key[Key["Ctrl"] = 17] = "Ctrl";
1826 Key[Key["Alt"] = 18] = "Alt";
1827 Key[Key["Pause"] = 19] = "Pause";
1828 Key[Key["CapsLock"] = 20] = "CapsLock";
1829 Key[Key["Escape"] = 27] = "Escape";
1830 Key[Key["Space"] = 32] = "Space";
1831 Key[Key["PageUp"] = 33] = "PageUp";
1832 Key[Key["PageDown"] = 34] = "PageDown";
1833 Key[Key["End"] = 35] = "End";
1834 Key[Key["Home"] = 36] = "Home";
1835 Key[Key["LeftArrow"] = 37] = "LeftArrow";
1836 Key[Key["UpArrow"] = 38] = "UpArrow";
1837 Key[Key["RightArrow"] = 39] = "RightArrow";
1838 Key[Key["DownArrow"] = 40] = "DownArrow";
1839 Key[Key["Insert"] = 45] = "Insert";
1840 Key[Key["Delete"] = 46] = "Delete";
1841 Key[Key["Key0"] = 48] = "Key0";
1842 Key[Key["Key1"] = 49] = "Key1";
1843 Key[Key["Key2"] = 50] = "Key2";
1844 Key[Key["Key3"] = 51] = "Key3";
1845 Key[Key["Key4"] = 52] = "Key4";
1846 Key[Key["Key5"] = 53] = "Key5";
1847 Key[Key["Key6"] = 54] = "Key6";
1848 Key[Key["Key7"] = 55] = "Key7";
1849 Key[Key["Key8"] = 56] = "Key8";
1850 Key[Key["Key9"] = 57] = "Key9";
1851 Key[Key["KeyA"] = 65] = "KeyA";
1852 Key[Key["KeyB"] = 66] = "KeyB";
1853 Key[Key["KeyC"] = 67] = "KeyC";
1854 Key[Key["KeyD"] = 68] = "KeyD";
1855 Key[Key["KeyE"] = 69] = "KeyE";
1856 Key[Key["KeyF"] = 70] = "KeyF";
1857 Key[Key["KeyG"] = 71] = "KeyG";
1858 Key[Key["KeyH"] = 72] = "KeyH";
1859 Key[Key["KeyI"] = 73] = "KeyI";
1860 Key[Key["KeyJ"] = 74] = "KeyJ";
1861 Key[Key["KeyK"] = 75] = "KeyK";
1862 Key[Key["KeyL"] = 76] = "KeyL";
1863 Key[Key["KeyM"] = 77] = "KeyM";
1864 Key[Key["KeyN"] = 78] = "KeyN";
1865 Key[Key["KeyO"] = 79] = "KeyO";
1866 Key[Key["KeyP"] = 80] = "KeyP";
1867 Key[Key["KeyQ"] = 81] = "KeyQ";
1868 Key[Key["KeyR"] = 82] = "KeyR";
1869 Key[Key["KeyS"] = 83] = "KeyS";
1870 Key[Key["KeyT"] = 84] = "KeyT";
1871 Key[Key["KeyU"] = 85] = "KeyU";
1872 Key[Key["KeyV"] = 86] = "KeyV";
1873 Key[Key["KeyW"] = 87] = "KeyW";
1874 Key[Key["KeyX"] = 88] = "KeyX";
1875 Key[Key["KeyY"] = 89] = "KeyY";
1876 Key[Key["KeyZ"] = 90] = "KeyZ";
1877 Key[Key["LeftMeta"] = 91] = "LeftMeta";
1878 Key[Key["RightMeta"] = 92] = "RightMeta";
1879 Key[Key["Select"] = 93] = "Select";
1880 Key[Key["Numpad0"] = 96] = "Numpad0";
1881 Key[Key["Numpad1"] = 97] = "Numpad1";
1882 Key[Key["Numpad2"] = 98] = "Numpad2";
1883 Key[Key["Numpad3"] = 99] = "Numpad3";
1884 Key[Key["Numpad4"] = 100] = "Numpad4";
1885 Key[Key["Numpad5"] = 101] = "Numpad5";
1886 Key[Key["Numpad6"] = 102] = "Numpad6";
1887 Key[Key["Numpad7"] = 103] = "Numpad7";
1888 Key[Key["Numpad8"] = 104] = "Numpad8";
1889 Key[Key["Numpad9"] = 105] = "Numpad9";
1890 Key[Key["Multiply"] = 106] = "Multiply";
1891 Key[Key["Add"] = 107] = "Add";
1892 Key[Key["Subtract"] = 109] = "Subtract";
1893 Key[Key["Decimal"] = 110] = "Decimal";
1894 Key[Key["Divide"] = 111] = "Divide";
1895 Key[Key["F1"] = 112] = "F1";
1896 Key[Key["F2"] = 113] = "F2";
1897 Key[Key["F3"] = 114] = "F3";
1898 Key[Key["F4"] = 115] = "F4";
1899 Key[Key["F5"] = 116] = "F5";
1900 Key[Key["F6"] = 117] = "F6";
1901 Key[Key["F7"] = 118] = "F7";
1902 Key[Key["F8"] = 119] = "F8";
1903 Key[Key["F9"] = 120] = "F9";
1904 Key[Key["F10"] = 121] = "F10";
1905 Key[Key["F11"] = 122] = "F11";
1906 Key[Key["F12"] = 123] = "F12";
1907 Key[Key["NumLock"] = 144] = "NumLock";
1908 Key[Key["ScrollLock"] = 145] = "ScrollLock";
1909 Key[Key["Semicolon"] = 186] = "Semicolon";
1910 Key[Key["Equals"] = 187] = "Equals";
1911 Key[Key["Comma"] = 188] = "Comma";
1912 Key[Key["Dash"] = 189] = "Dash";
1913 Key[Key["Period"] = 190] = "Period";
1914 Key[Key["ForwardSlash"] = 191] = "ForwardSlash";
1915 Key[Key["GraveAccent"] = 192] = "GraveAccent";
1916 Key[Key["OpenBracket"] = 219] = "OpenBracket";
1917 Key[Key["BackSlash"] = 220] = "BackSlash";
1918 Key[Key["CloseBracket"] = 221] = "CloseBracket";
1919 Key[Key["SingleQuote"] = 222] = "SingleQuote";
1920})(exports.Key || (exports.Key = {}));
1921
1922(function (TypeOf) {
1923 TypeOf["Undefined"] = "undefined";
1924 TypeOf["Object"] = "object";
1925 TypeOf["Boolean"] = "boolean";
1926 TypeOf["Number"] = "number";
1927 TypeOf["String"] = "string";
1928 TypeOf["Symbol"] = "symbol";
1929 TypeOf["Function"] = "function";
1930})(exports.TypeOf || (exports.TypeOf = {}));
1931
1932function classNames() {
1933 for (var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++) {
1934 classes[_key] = arguments[_key];
1935 }
1936
1937 return classes.filter(Boolean).join(' ');
1938}
1939function variationName(name, value) {
1940 return "".concat(name).concat(value.charAt(0).toUpperCase()).concat(value.slice(1));
1941}
1942
1943var FeaturesContext = React__default.createContext(undefined);
1944
1945function useFeatures() {
1946 var features = React.useContext(FeaturesContext);
1947
1948 if (!features) {
1949 throw new Error('No Features were provided.');
1950 }
1951
1952 return features;
1953}
1954
1955var I18nContext = React__default.createContext(undefined);
1956
1957function useI18n() {
1958 var i18n = React.useContext(I18nContext);
1959
1960 if (!i18n) {
1961 throw new MissingAppProviderError('No i18n was provided.');
1962 }
1963
1964 return i18n;
1965}
1966
1967var OBJECT_NOTATION_MATCHER = /\[(.*?)\]|(\w+)/g;
1968function get(obj, keypath, defaultValue) {
1969 if (obj == null) return undefined;
1970 var keys = Array.isArray(keypath) ? keypath : getKeypath(keypath);
1971 var acc = obj; // eslint-disable-next-line @typescript-eslint/prefer-for-of
1972
1973 for (var i = 0; i < keys.length; i++) {
1974 var val = acc[keys[i]];
1975 if (val === undefined) return defaultValue;
1976 acc = val;
1977 }
1978
1979 return acc;
1980}
1981
1982function getKeypath(str) {
1983 var path = [];
1984 var result;
1985
1986 while (result = OBJECT_NOTATION_MATCHER.exec(str)) {
1987 var _result = result,
1988 _result2 = _slicedToArray(_result, 3),
1989 first = _result2[1],
1990 second = _result2[2];
1991
1992 path.push(first || second);
1993 }
1994
1995 return path;
1996}
1997
1998function merge() {
1999 var final = {};
2000
2001 for (var _len = arguments.length, objs = new Array(_len), _key = 0; _key < _len; _key++) {
2002 objs[_key] = arguments[_key];
2003 }
2004
2005 for (var _i = 0, _objs = objs; _i < _objs.length; _i++) {
2006 var obj = _objs[_i];
2007 final = mergeRecursively(final, obj);
2008 }
2009
2010 return final;
2011}
2012
2013function mergeRecursively(inputObjA, objB) {
2014 var objA = Array.isArray(inputObjA) ? _toConsumableArray(inputObjA) : Object.assign({}, inputObjA);
2015
2016 for (var key in objB) {
2017 if (!Object.prototype.hasOwnProperty.call(objB, key)) {
2018 continue;
2019 } else if (isMergeableValue(objB[key]) && isMergeableValue(objA[key])) {
2020 objA[key] = mergeRecursively(objA[key], objB[key]);
2021 } else {
2022 objA[key] = objB[key];
2023 }
2024 }
2025
2026 return objA;
2027}
2028
2029function isMergeableValue(value) {
2030 return value !== null && typeof value === 'object';
2031}
2032
2033var REPLACE_REGEX = /{([^}]*)}/g;
2034var I18n =
2035/*#__PURE__*/
2036function () {
2037 function I18n(translation) {
2038 var _this = this;
2039
2040 _classCallCheck(this, I18n);
2041
2042 this.translation = translation;
2043
2044 this.translate = function (id, replacements) {
2045 return translate(id, _this.translation, replacements);
2046 };
2047
2048 this.setTranslation(translation);
2049 }
2050
2051 _createClass(I18n, [{
2052 key: "setTranslation",
2053 value: function setTranslation(translation) {
2054 this.translation = Array.isArray(translation) ? merge.apply(void 0, _toConsumableArray(translation)) : translation;
2055 }
2056 }, {
2057 key: "translationKeyExists",
2058 value: function translationKeyExists(path) {
2059 return Boolean(get(this.translation, path));
2060 }
2061 }]);
2062
2063 return I18n;
2064}();
2065function translate(id, translations, replacements) {
2066 var text = get(translations, id);
2067
2068 if (!text) {
2069 return '';
2070 }
2071
2072 if (replacements) {
2073 return text.replace(REPLACE_REGEX, function (match) {
2074 var replacement = match.substring(1, match.length - 1);
2075
2076 if (!Object.prototype.hasOwnProperty.call(replacements, replacement)) {
2077 throw new Error("No replacement found for key '".concat(replacement, "'. The following replacements were passed: ").concat(Object.keys(replacements).map(function (key) {
2078 return "'".concat(key, "'");
2079 }).join(', ')));
2080 }
2081
2082 return replacements[replacement];
2083 });
2084 }
2085
2086 return text;
2087}
2088
2089var isServer = typeof window === 'undefined' || typeof document === 'undefined';
2090
2091function Image(_a) {
2092 var sourceSet = _a.sourceSet,
2093 source = _a.source,
2094 crossOrigin = _a.crossOrigin,
2095 rest = tslib_1.__rest(_a, ["sourceSet", "source", "crossOrigin"]);
2096
2097 var finalSourceSet = sourceSet ? sourceSet.map(function (_ref) {
2098 var subSource = _ref.source,
2099 descriptor = _ref.descriptor;
2100 return "".concat(subSource, " ").concat(descriptor);
2101 }).join(',') : null;
2102 return finalSourceSet ? // eslint-disable-next-line jsx-a11y/alt-text
2103 React__default.createElement("img", Object.assign({
2104 src: source,
2105 srcSet: finalSourceSet,
2106 crossOrigin: crossOrigin
2107 }, rest)) : // eslint-disable-next-line jsx-a11y/alt-text
2108 React__default.createElement("img", Object.assign({
2109 src: source
2110 }, rest, {
2111 crossOrigin: crossOrigin
2112 }));
2113}
2114
2115var styles = {
2116 "Avatar": "Polaris-Avatar",
2117 "hidden": "Polaris-Avatar--hidden",
2118 "sizeSmall": "Polaris-Avatar--sizeSmall",
2119 "sizeMedium": "Polaris-Avatar--sizeMedium",
2120 "sizeLarge": "Polaris-Avatar--sizeLarge",
2121 "styleOne": "Polaris-Avatar--styleOne",
2122 "styleTwo": "Polaris-Avatar--styleTwo",
2123 "styleThree": "Polaris-Avatar--styleThree",
2124 "styleFour": "Polaris-Avatar--styleFour",
2125 "styleFive": "Polaris-Avatar--styleFive",
2126 "styleSix": "Polaris-Avatar--styleSix",
2127 "hasImage": "Polaris-Avatar--hasImage",
2128 "Image": "Polaris-Avatar__Image",
2129 "Initials": "Polaris-Avatar__Initials",
2130 "Svg": "Polaris-Avatar__Svg"
2131};
2132
2133var avatar1 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjMjQ1YjQ4IiBkPSJNMCAwaDEwMHYxMDBIMHoiLz48cGF0aCBmaWxsPSIjMmRiMTY3IiBkPSJNNjkgMHY2NS42NWwtMi0uMDF2MTkuODVsMiAuMDJWMTAwSDBWMGg2OXoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNjcgNjUuNjR2MTkuODVsLTI1LjU3LS4xOUMzMiA4NS4yMiAyNS42IDgxLjQ2IDI1LjY4IDcyLjA2cy4yNS02Ljc0LjI1LTYuNzR6Ii8+PHBhdGggZmlsbD0iIzhkYzk1OCIgZD0iTTg2Ljk5IDU4SDY5VjBoMTAuOTNsNy4wNiA1OHoiLz48cGF0aCBmaWxsPSIjZWJlZGYxIiBkPSJNMjQuNTMgNDAuMjlhMTIuMjMgMTIuMjMgMCAwMTI0LjQ2IDAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZmlsbD0iIzhkYzk1OCIgZD0iTTU5LjYyIDU4QTEwLjY5IDEwLjY5IDAgMDE4MSA1OHoiLz48L3N2Zz4K';
2134
2135var avatar2 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjMWUyNjVjIiBkPSJNLS4wMSAwaDEwMHYxMDBoLTEwMHoiLz48cGF0aCBmaWxsPSIjNWQ2Y2MxIiBkPSJNLS4wMSAwaDY5LjAydjEwMEgtLjAxeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik02OC45MyA2NS44OGwtMjQuNDQtLjE5LS4wNSA2LjA5YzAgNS4yMiAzLjQ4IDkuNDcgOC42OSA5LjUybDE1LjguMTJ6Ii8+PHBhdGggZmlsbD0iI2ZmYzA0ZCIgZD0iTTY4LjkxIDExLjNsMTkuMTcgNDYuMjktMTkuMTctLjE2VjExLjN6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik0yMy4yNSAzNi40M2EzLjIyIDMuMjIgMCAxMDAgNi40NG0yMS4wMS02LjQ0YTMuMjIgMy4yMiAwIDAwMCA2LjQ0bS0xMy41NSAzLjc0YTMuMjIgMy4yMiAwIDEwMCA2LjQ0bTMuMjItMjUuNTFhMy4yMiAzLjIyIDAgMDAwIDYuNDQiLz48L3N2Zz4K';
2136
2137var avatar3 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjNWQ2Y2MxIiBkPSJNLS4wMiAwaDEwMHYxMDBoLTEwMHoiLz48cGF0aCBmaWxsPSIjNmRjYWNlIiBkPSJNLjM5IDBoNjkuMDJ2MTAwSC4zOXoiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjUiIGQ9Ik0yNC4xOCAzMS4yMXYzLjQ3QTEwLjQzIDEwLjQzIDAgMDAzNC40IDQ1LjIxYTEwLjQzIDEwLjQzIDAgMDAxMC4yMi0xMC41M3YtMy40NyIvPjxwYXRoIGZpbGw9IiNlYmVkZjEiIGQ9Ik0yMC4xMSA0OS4wN2ExNi4yMiAxNi4yMiAwIDExMCAzMi40NCIgb3BhY2l0eT0iLjIiLz48cGF0aCBkPSJNNjkuNDQgMTguODNMOTAgNzFINjkuNDRWMTguODN6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTU3LjU5IDcxYTYgNiAwIDAxMTIgMHoiIGZpbGw9IiNmZmYiLz48L3N2Zz4K';
2138
2139var avatar4 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjZmZlMGMzIiBkPSJNMC0uMDFoMTAwdjEwMEgweiIvPjxwYXRoIGZpbGw9IiM1ZDZjYzEiIGQ9Ik0wIDBoNjkuMDJ2MTAwSDB6Ii8+PHBhdGggZD0iTTY5LjAyIDBsMjQuMDMgNjEuNjlINjkuMDJWMHoiIGZpbGw9IiNmZjk2N2QiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjUiIGQ9Ik0zMC42OSAzMS45MXYtM2MwLTQuNzggMy40Ni04LjY1IDgtOC42NXM4IDMuODcgOCA4LjY1djMiLz48cGF0aCBmaWxsPSIjZWJlZGYxIiBkPSJNMTIuNzYgNTYuMDZhMTMuMzYgMTMuMzYgMCAxMTI2LjcyIDAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTgwIDYxLjQ2bC0yOS4zNC4yM3YtNy4zM2MwLTYuMjggNC4wNy0xMS4zNiAxMC4zNC0xMS40NGwxOS0uMTR6IiBmaWxsPSIjZmY5NjdkIi8+PC9zdmc+Cg==';
2140
2141var avatar5 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjOGRjOTU4IiBkPSJNMCAwaDcwLjAydjEwMEgweiIvPjxwYXRoIGQ9Ik02OS45MiAwdjU2LjMyTDQ5IDY3bC0uMyAyNS4wN1YxMDBIMTAwVjB6IiBmaWxsPSIjMmRiMTY3Ii8+PHBhdGggZmlsbD0iIzI0NWI0OCIgZD0iTTU5LjI3IDU4LjI5YTUuMjIgNS4yMiAwIDAwLTkuNDMgNC40OCIvPjxwYXRoIGQ9Ik0yNy4xMiA5LjMzaDQ0LjUzdjIuMTlIMjcuMTJ6bS0xMi40MSA5LjQ5aDU2Ljk0djIuMTlIMTQuNzF6IiBmaWxsPSIjMmRiMTY3Ii8+PGNpcmNsZSBjeD0iMTkuNjYiIGN5PSI0NC44IiByPSIxMS4yMiIgZmlsbD0iI2ViZWRmMSIgb3BhY2l0eT0iLjIiLz48L3N2Zz4K';
2142
2143var avatar6 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBkPSJNLS4wMi0uMDFoMTAwdjEwMGgtMTAweiIgZmlsbD0iI2ZmZTBjMyIvPjxwYXRoIGZpbGw9IiNmZjk2N2QiIGQ9Ik0wIDBoNjkuNDF2MTAwSDB6Ii8+PHBhdGggZD0iTTY5LjkyIDB2NDQuMzJMNTEuMzQgNTV2NDVIMTAwVjB6IiBmaWxsPSIjZmZlMGMzIi8+PHBhdGggZmlsbD0iIzMyY2FjNiIgZD0iTTM5LjMyIDc2YTExLjg1IDExLjg1IDAgMDAxMiAxMS42MlY3NiIvPjxwYXRoIGZpbGw9IiMwMDk3OTYiIGQ9Ik0zOS4zMiA3NmExMiAxMiAwIDAxMTItMTEuODJWNzYiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjUiIGQ9Ik00My43NCAxOS44M2ExMi44MiAxMi44MiAwIDExLTI1LjY0IDAiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjQiIGQ9Ik0yNy4zOSAzMS42bC0xLjU4IDUuOTZtOS4zNy01LjcybDIuNTUgNS40N200LjI2LTkuODVsMy41MyA0LjVtLTI1LjQzLTQuNWwtMy41MyA0LjUiLz48L3N2Zz4K';
2144
2145var avatar7 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBkPSJNMCAwaDEwMHYxMDAuNDhIMHoiIGZpbGw9IiM4ZGM5NTgiLz48cGF0aCBmaWxsPSIjMmRiMTY3IiBkPSJNODMgNjh2MzJsLTE0LS4xNnYuMTZIMFYwaDY5djY4aDE0eiIvPjxwYXRoIGQ9Ik02OS4yOSA0MS42OUgyMC42NnMtLjA5LTMtLjE3IDcuMTUgNyAxOC41MSAxNy4zNSAxOC41OWwzMS40NS41N3oiIGZpbGw9IiM4ZGM5NTgiLz48cGF0aCBkPSJNNjguNyAxMi40bDExLjU0IDI5LjI5SDY4LjdWMTIuNHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNNjIuMjIgNDEuNjlhMy4zNCAzLjM0IDAgMTE2LjY5IDB6IiBmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iIzI0NWI0OCIgZD0iTTQxLjQ1IDE4LjA2YTIuNTcgMi41NyAwIDAwLTUuMTQgME0zMy4zMyAyNGEyLjU3IDIuNTcgMCAxMC01LjE0IDBtMjAuMzYgMi41OGEyLjU3IDIuNTcgMCAxMC01LjE0IDAiLz48L3N2Zz4K';
2146
2147var avatar8 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSIjZmZlZGI5IiBkPSJNMCAwaDEwMHYxMDBIMHoiLz48cGF0aCBkPSJNNjQuNjMgMTcuMzNhMTcgMTcgMCAwMTUgMjkuNzIgMTYuNzUgMTYuNzUgMCAwMS01IDIuNjIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjUiLz48cGF0aCBmaWxsPSIjZmZjMDRkIiBkPSJNMCAwaDY5LjAydjEwMEgweiIvPjxjaXJjbGUgY3g9IjQ1LjExIiBjeT0iMzMuNDkiIHI9IjE2Ljk4IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtMzcuMDIgNDUuMTI0IDMzLjQ5MykiLz48cGF0aCBmaWxsPSIjNWQ2Y2MxIiBkPSJNNjkuMDIgMzQuNDhsMTkuNDcgMzguNzQtMTkuNDcgMS41M1YzNC40OHoiLz48cGF0aCBkPSJNNjEuNiAzMy42N2ExMC4xNyAxMC4xNyAwIDAxMTUuNC4wOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iNSIvPjwvc3ZnPgo=';
2148
2149var avatar9 = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBkPSJNMCAwaDEwMHYxMDBIMHoiIGZpbGw9IiNmZmMwNGQiLz48cGF0aCBkPSJNMCAwaDY5LjQxdjEwMEgweiIgZmlsbD0iIzVkNmNjMSIvPjxwYXRoIGQ9Ik03MC4yMSA4MC44OGgtMTUuMWMtNC44MSAwLTUuNjgtNS44NC01LjY4LTUuODRoMjAuNzgiIGZpbGw9IiNmZmMwNGQiLz48cGF0aCBkPSJNODIgNjAuNDhsLTE0IC4yNVYwaDEwLjE3QzgwLjU5IDIwLjE0IDgyIDYwLjQ4IDgyIDYwLjQ4eiIgZmlsbD0iIzVkNmNjMSIvPjxwYXRoIGZpbGw9IiM0MTIzNmUiIGQ9Ik01Ny43MSA2MC40OGE1LjQ0IDUuNDQgMCAxMTEwLjg3IDAiLz48Y2lyY2xlIGN4PSIyNC43NyIgY3k9IjQwLjE5IiByPSIxMS4yMiIgZmlsbD0iI2ViZWRmMSIgb3BhY2l0eT0iLjIiLz48L3N2Zz4K';
2150
2151
2152
2153var avatars = /*#__PURE__*/Object.freeze({
2154 avatarOne: avatar1,
2155 avatarTwo: avatar2,
2156 avatarThree: avatar3,
2157 avatarFour: avatar4,
2158 avatarFive: avatar5,
2159 avatarSix: avatar6,
2160 avatarSeven: avatar7,
2161 avatarEight: avatar8,
2162 avatarNine: avatar9
2163});
2164
2165var Status;
2166
2167(function (Status) {
2168 Status["Pending"] = "PENDING";
2169 Status["Loaded"] = "LOADED";
2170 Status["Errored"] = "ERRORED";
2171})(Status || (Status = {}));
2172
2173var STYLE_CLASSES = ['one', 'two', 'three', 'four', 'five'];
2174var AVATAR_IMAGES = Object.keys(avatars).map( // import/namespace does not allow computed values by default
2175// eslint-disable-next-line import/namespace
2176function (key) {
2177 return avatars[key];
2178});
2179function Avatar(_ref) {
2180 var name = _ref.name,
2181 source = _ref.source,
2182 initials = _ref.initials,
2183 customer = _ref.customer,
2184 _ref$size = _ref.size,
2185 size = _ref$size === void 0 ? 'medium' : _ref$size,
2186 accessibilityLabel = _ref.accessibilityLabel;
2187 var i18n = useI18n();
2188
2189 var _useFeatures = useFeatures(),
2190 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
2191 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
2192
2193 function styleClass(name) {
2194 var finalStyleClasses = unstableGlobalTheming ? STYLE_CLASSES : [].concat(STYLE_CLASSES, ['six']);
2195 return name ? finalStyleClasses[name.charCodeAt(0) % finalStyleClasses.length] : finalStyleClasses[0];
2196 }
2197
2198 var _useState = React.useState(Status.Pending),
2199 _useState2 = _slicedToArray(_useState, 2),
2200 status = _useState2[0],
2201 setStatus = _useState2[1]; // If the source changes, set the status back to pending
2202
2203
2204 React.useEffect(function () {
2205 setStatus(Status.Pending);
2206 }, [source]);
2207 var handleError = React.useCallback(function () {
2208 setStatus(Status.Errored);
2209 }, []);
2210 var handleLoad = React.useCallback(function () {
2211 setStatus(Status.Loaded);
2212 }, []);
2213 var hasImage = (source || customer) && status !== Status.Errored;
2214 var nameString = name || initials;
2215 var finalSource;
2216 var label;
2217
2218 if (accessibilityLabel) {
2219 label = accessibilityLabel;
2220 } else if (name) {
2221 label = name;
2222 } else if (initials) {
2223 var splitInitials = initials.split('').join(' ');
2224 label = i18n.translate('Polaris.Avatar.labelWithInitials', {
2225 initials: splitInitials
2226 });
2227 } else {
2228 label = i18n.translate('Polaris.Avatar.label');
2229 }
2230
2231 if (source) {
2232 finalSource = source;
2233 } else if (customer) {
2234 finalSource = customerPlaceholder(nameString);
2235 }
2236
2237 var className = classNames(styles.Avatar, styles[variationName('style', styleClass(nameString))], size && styles[variationName('size', size)], hasImage && status !== Status.Loaded && styles.hidden, hasImage && styles.hasImage);
2238 var imageMarkUp = finalSource && !isServer && status !== Status.Errored ? React__default.createElement(Image, {
2239 className: styles.Image,
2240 source: finalSource,
2241 alt: "",
2242 role: "presentation",
2243 onLoad: handleLoad,
2244 onError: handleError
2245 }) : null; // Use `dominant-baseline: central` instead of `dy` when Edge supports it.
2246
2247 var verticalOffset = '0.35em';
2248 var initialsMarkup = initials && !hasImage ? React__default.createElement("span", {
2249 className: styles.Initials
2250 }, React__default.createElement("svg", {
2251 className: styles.Svg,
2252 viewBox: "0 0 48 48"
2253 }, React__default.createElement("text", {
2254 x: "50%",
2255 y: "50%",
2256 dy: verticalOffset,
2257 fill: "currentColor",
2258 fontSize: "26",
2259 textAnchor: "middle"
2260 }, initials))) : null;
2261 return React__default.createElement("span", {
2262 "aria-label": label,
2263 role: "img",
2264 className: className
2265 }, initialsMarkup, imageMarkUp);
2266}
2267
2268function customerPlaceholder(name) {
2269 return name ? AVATAR_IMAGES[name.charCodeAt(0) % AVATAR_IMAGES.length] : AVATAR_IMAGES[0];
2270}
2271
2272function isElementInViewport(element) {
2273 var _element$getBoundingC = element.getBoundingClientRect(),
2274 top = _element$getBoundingC.top,
2275 left = _element$getBoundingC.left,
2276 bottom = _element$getBoundingC.bottom,
2277 right = _element$getBoundingC.right;
2278
2279 return top >= 0 && right <= window.innerWidth && bottom <= window.innerHeight && left >= 0;
2280}
2281
2282function handleMouseUpByBlurring(_ref) {
2283 var currentTarget = _ref.currentTarget;
2284 currentTarget.blur();
2285}
2286function nextFocusableNode(node, filter) {
2287 var allFocusableElements = _toConsumableArray(document.querySelectorAll(focus.FOCUSABLE_SELECTOR));
2288
2289 var sliceLocation = allFocusableElements.indexOf(node) + 1;
2290 var focusableElementsAfterNode = allFocusableElements.slice(sliceLocation);
2291 var _iteratorNormalCompletion = true;
2292 var _didIteratorError = false;
2293 var _iteratorError = undefined;
2294
2295 try {
2296 for (var _iterator = focusableElementsAfterNode[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
2297 var focusableElement = _step.value;
2298
2299 if (isElementInViewport(focusableElement) && (!filter || filter && filter(focusableElement))) {
2300 return focusableElement;
2301 }
2302 }
2303 } catch (err) {
2304 _didIteratorError = true;
2305 _iteratorError = err;
2306 } finally {
2307 try {
2308 if (!_iteratorNormalCompletion && _iterator.return != null) {
2309 _iterator.return();
2310 }
2311 } finally {
2312 if (_didIteratorError) {
2313 throw _iteratorError;
2314 }
2315 }
2316 }
2317
2318 return null;
2319}
2320function focusNextFocusableNode(node, filter) {
2321 var nextFocusable = nextFocusableNode(node, filter);
2322
2323 if (nextFocusable && nextFocusable instanceof HTMLElement) {
2324 nextFocusable.focus();
2325 return true;
2326 }
2327
2328 return false;
2329}
2330
2331var scrollable = {
2332 props: {
2333 'data-polaris-scrollable': true
2334 },
2335 selector: '[data-polaris-scrollable]'
2336};
2337var overlay = {
2338 props: {
2339 'data-polaris-overlay': true
2340 },
2341 selector: '[data-polaris-overlay]'
2342};
2343var layer = {
2344 props: {
2345 'data-polaris-layer': true
2346 },
2347 selector: '[data-polaris-layer]'
2348};
2349var unstyled = {
2350 props: {
2351 'data-polaris-unstyled': true
2352 },
2353 selector: '[data-polaris-unstyled]'
2354};
2355var dataPolarisTopBar = {
2356 props: {
2357 'data-polaris-top-bar': true
2358 },
2359 selector: '[data-polaris-top-bar]'
2360};
2361var headerCell = {
2362 props: {
2363 'data-polaris-header-cell': true
2364 },
2365 selector: '[data-polaris-header-cell]'
2366};
2367var portal = {
2368 props: ['data-portal-id'],
2369 selector: '[data-portal-id]'
2370};
2371var DATA_ATTRIBUTE = {
2372 overlay,
2373 layer
2374}; // these match our values in duration.scss
2375
2376var Duration;
2377
2378(function (Duration) {
2379 Duration[Duration["Instant"] = 0] = "Instant";
2380 Duration[Duration["Fast"] = 100] = "Fast";
2381 Duration[Duration["Base"] = 200] = "Base";
2382 Duration[Duration["Slow"] = 300] = "Slow";
2383 Duration[Duration["Slower"] = 400] = "Slower";
2384 Duration[Duration["Slowest"] = 500] = "Slowest";
2385})(Duration || (Duration = {}));
2386
2387var LinkContext = React__default.createContext(undefined);
2388
2389function useLink() {
2390 return React__default.useContext(LinkContext);
2391}
2392
2393// https://github.com/facebook/react/issues/16722
2394// but eslint-plugin-react doesn't know that just yet
2395// eslint-disable-next-line react/display-name
2396
2397var UnstyledLink = React__default.memo(React__default.forwardRef(function UnstyledLink(props, _ref) {
2398 var LinkComponent = useLink();
2399
2400 if (LinkComponent) {
2401 return React__default.createElement(LinkComponent, Object.assign({}, unstyled.props, props));
2402 }
2403
2404 var external = props.external,
2405 url = props.url,
2406 rest = tslib_1.__rest(props, ["external", "url"]);
2407
2408 var target = external ? '_blank' : undefined;
2409 var rel = external ? 'noopener noreferrer' : undefined;
2410 return React__default.createElement("a", Object.assign({
2411 target: target
2412 }, rest, {
2413 href: url,
2414 rel: rel
2415 }, unstyled.props));
2416}));
2417
2418var TelemetryContext = React__default.createContext(undefined);
2419
2420function noop() {}
2421
2422var defaultTelemetry = {
2423 produce: noop
2424};
2425function useTelemetry() {
2426 return React__default.useContext(TelemetryContext) || defaultTelemetry;
2427}
2428
2429var styles$1 = {
2430 "Icon": "Polaris-Icon",
2431 "hasBackdrop": "Polaris-Icon--hasBackdrop",
2432 "isColored": "Polaris-Icon--isColored",
2433 "colorWhite": "Polaris-Icon--colorWhite",
2434 "colorBlack": "Polaris-Icon--colorBlack",
2435 "colorSkyLighter": "Polaris-Icon--colorSkyLighter",
2436 "colorSkyLight": "Polaris-Icon--colorSkyLight",
2437 "colorSky": "Polaris-Icon--colorSky",
2438 "colorSkyDark": "Polaris-Icon--colorSkyDark",
2439 "colorInkLightest": "Polaris-Icon--colorInkLightest",
2440 "colorInkLighter": "Polaris-Icon--colorInkLighter",
2441 "colorInkLight": "Polaris-Icon--colorInkLight",
2442 "colorInk": "Polaris-Icon--colorInk",
2443 "colorBlueLighter": "Polaris-Icon--colorBlueLighter",
2444 "colorBlueLight": "Polaris-Icon--colorBlueLight",
2445 "colorBlue": "Polaris-Icon--colorBlue",
2446 "colorBlueDark": "Polaris-Icon--colorBlueDark",
2447 "colorBlueDarker": "Polaris-Icon--colorBlueDarker",
2448 "colorIndigoLighter": "Polaris-Icon--colorIndigoLighter",
2449 "colorIndigoLight": "Polaris-Icon--colorIndigoLight",
2450 "colorIndigo": "Polaris-Icon--colorIndigo",
2451 "colorIndigoDark": "Polaris-Icon--colorIndigoDark",
2452 "colorIndigoDarker": "Polaris-Icon--colorIndigoDarker",
2453 "colorTealLighter": "Polaris-Icon--colorTealLighter",
2454 "colorTealLight": "Polaris-Icon--colorTealLight",
2455 "colorTeal": "Polaris-Icon--colorTeal",
2456 "colorTealDark": "Polaris-Icon--colorTealDark",
2457 "colorTealDarker": "Polaris-Icon--colorTealDarker",
2458 "colorGreenLighter": "Polaris-Icon--colorGreenLighter",
2459 "colorGreen": "Polaris-Icon--colorGreen",
2460 "colorGreenDark": "Polaris-Icon--colorGreenDark",
2461 "colorYellowLighter": "Polaris-Icon--colorYellowLighter",
2462 "colorYellow": "Polaris-Icon--colorYellow",
2463 "colorYellowDark": "Polaris-Icon--colorYellowDark",
2464 "colorOrange": "Polaris-Icon--colorOrange",
2465 "colorOrangeDark": "Polaris-Icon--colorOrangeDark",
2466 "colorRedLighter": "Polaris-Icon--colorRedLighter",
2467 "colorRed": "Polaris-Icon--colorRed",
2468 "colorRedDark": "Polaris-Icon--colorRedDark",
2469 "colorPurple": "Polaris-Icon--colorPurple",
2470 "Svg": "Polaris-Icon__Svg",
2471 "Img": "Polaris-Icon__Img",
2472 "Placeholder": "Polaris-Icon__Placeholder"
2473};
2474
2475var COLORS_WITH_BACKDROPS = ['teal', 'tealDark', 'greenDark', 'redDark', 'yellowDark', 'ink', 'inkLighter'];
2476function Icon(_ref) {
2477 var source = _ref.source,
2478 color = _ref.color,
2479 backdrop = _ref.backdrop,
2480 accessibilityLabel = _ref.accessibilityLabel;
2481 var i18n = useI18n();
2482 var telemetry = useTelemetry();
2483 React.useEffect(function () {
2484 telemetry.produce('polaris_icons_usage/1.0', {
2485 // eslint-disable-next-line @typescript-eslint/camelcase
2486 icon_source: parseSource(source)
2487 });
2488 }, [source, telemetry]);
2489
2490 if (color && backdrop && !COLORS_WITH_BACKDROPS.includes(color)) {
2491 // eslint-disable-next-line no-console
2492 console.warn(i18n.translate('Polaris.Icon.backdropWarning', {
2493 color,
2494 colorsWithBackDrops: COLORS_WITH_BACKDROPS.join(', ')
2495 }));
2496 }
2497
2498 var className = classNames(styles$1.Icon, color && styles$1[variationName('color', color)], color && color !== 'white' && styles$1.isColored, backdrop && styles$1.hasBackdrop);
2499 var contentMarkup;
2500
2501 if (typeof source === 'function') {
2502 var SourceComponent = source;
2503 contentMarkup = React__default.createElement(SourceComponent, {
2504 className: styles$1.Svg,
2505 focusable: "false",
2506 "aria-hidden": "true"
2507 });
2508 } else if (source === 'placeholder') {
2509 contentMarkup = React__default.createElement("div", {
2510 className: styles$1.Placeholder
2511 });
2512 } else {
2513 contentMarkup = React__default.createElement("img", {
2514 className: styles$1.Img,
2515 src: "data:image/svg+xml;utf8,".concat(source),
2516 alt: "",
2517 "aria-hidden": "true"
2518 });
2519 }
2520
2521 return React__default.createElement("span", {
2522 className: className,
2523 "aria-label": accessibilityLabel
2524 }, contentMarkup);
2525}
2526
2527function parseSource(source) {
2528 if (typeof source === 'function') {
2529 return source.name;
2530 } else if (source === 'placeholder') {
2531 return source;
2532 }
2533
2534 return 'custom icon string';
2535}
2536
2537var styles$2 = {
2538 "VisuallyHidden": "Polaris-VisuallyHidden"
2539};
2540
2541function VisuallyHidden(_ref) {
2542 var children = _ref.children;
2543 return React__default.createElement("span", {
2544 className: styles$2.VisuallyHidden
2545 }, children);
2546}
2547
2548/**
2549 * useIsAfterInitialMount will trigger a re-render to provide
2550 * you with an updated value. Using this you enhance server-side
2551 * code that can only run on the client.
2552 * @returns MutableRefObject<T> - Returns a ref object with the
2553 * results from invoking initial value
2554 * @example
2555 * function ComponentExample({children}) {
2556 * const isMounted = useIsAfterInitialMount();
2557 * const content = isMounted ? children : null;
2558 *
2559 * return <React.Fragment>{content}</React.Fragment>;
2560 * }
2561 */
2562
2563function useIsAfterInitialMount() {
2564 var _useState = React.useState(false),
2565 _useState2 = _slicedToArray(_useState, 2),
2566 isAfterInitialMount = _useState2[0],
2567 setIsAfterInitialMount = _useState2[1];
2568
2569 React.useEffect(function () {
2570 setIsAfterInitialMount(true);
2571 }, []);
2572 return isAfterInitialMount;
2573}
2574
2575var styles$3 = {
2576 "Spinner": "Polaris-Spinner",
2577 "loading": "Polaris-Spinner--loading",
2578 "sizeSmall": "Polaris-Spinner--sizeSmall",
2579 "sizeLarge": "Polaris-Spinner--sizeLarge",
2580 "colorWhite": "Polaris-Spinner--colorWhite",
2581 "colorTeal": "Polaris-Spinner--colorTeal",
2582 "colorInkLightest": "Polaris-Spinner--colorInkLightest"
2583};
2584
2585var spinnerLarge = 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNDQgNDQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjU0MiAxLjQ4N0EyMS41MDcgMjEuNTA3IDAgMDAuNSAyMmMwIDExLjg3NCA5LjYyNiAyMS41IDIxLjUgMjEuNSA5Ljg0NyAwIDE4LjM2NC02LjY3NSAyMC44MDktMTYuMDcyYTEuNSAxLjUgMCAwMC0yLjkwNC0uNzU2QzM3LjgwMyAzNC43NTUgMzAuNDczIDQwLjUgMjIgNDAuNSAxMS43ODMgNDAuNSAzLjUgMzIuMjE3IDMuNSAyMmMwLTguMTM3IDUuMy0xNS4yNDcgMTIuOTQyLTE3LjY1YTEuNSAxLjUgMCAxMC0uOS0yLjg2M3oiIGZpbGw9IiM5MTlFQUIiLz48L3N2Zz4K';
2586
2587var spinnerSmall = 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjI5IDEuMTczYTkuMjUgOS4yNSAwIDEwMTEuNjU1IDExLjQxMiAxLjI1IDEuMjUgMCAxMC0yLjQtLjY5OCA2Ljc1IDYuNzUgMCAxMS04LjUwNi04LjMyOSAxLjI1IDEuMjUgMCAxMC0uNzUtMi4zODV6IiBmaWxsPSIjOTE5RUFCIi8+PC9zdmc+Cg==';
2588
2589var COLORS_FOR_LARGE_SPINNER = ['teal', 'inkLightest'];
2590function Spinner(_ref) {
2591 var _ref$size = _ref.size,
2592 size = _ref$size === void 0 ? 'large' : _ref$size,
2593 _ref$color = _ref.color,
2594 color = _ref$color === void 0 ? 'teal' : _ref$color,
2595 accessibilityLabel = _ref.accessibilityLabel,
2596 hasFocusableParent = _ref.hasFocusableParent;
2597 var i18n = useI18n();
2598 var isAfterInitialMount = useIsAfterInitialMount();
2599
2600 if (size === 'large' && !COLORS_FOR_LARGE_SPINNER.includes(color)) {
2601 if (process.env.NODE_ENV === 'development') {
2602 // eslint-disable-next-line no-console
2603 console.warn(i18n.translate('Polaris.Spinner.warningMessage', {
2604 color,
2605 size,
2606 colors: COLORS_FOR_LARGE_SPINNER.join(', ')
2607 }));
2608 } // eslint-disable-next-line no-param-reassign
2609
2610
2611 size = 'small';
2612 }
2613
2614 var className = classNames(styles$3.Spinner, color && styles$3[variationName('color', color)], size && styles$3[variationName('size', size)]);
2615 var spinnerSVG = size === 'large' ? spinnerLarge : spinnerSmall;
2616 var spanAttributes = Object.assign({}, !hasFocusableParent && {
2617 role: 'status'
2618 });
2619 var accessibilityLabelMarkup = (isAfterInitialMount || !hasFocusableParent) && React__default.createElement(VisuallyHidden, null, accessibilityLabel);
2620 return React__default.createElement(React__default.Fragment, null, React__default.createElement(Image, {
2621 alt: "",
2622 source: spinnerSVG,
2623 className: className,
2624 draggable: false
2625 }), React__default.createElement("span", spanAttributes, accessibilityLabelMarkup));
2626}
2627
2628var styles$4 = {
2629 "Button": "Polaris-Button",
2630 "globalTheming": "Polaris-Button--globalTheming",
2631 "disabled": "Polaris-Button--disabled",
2632 "Content": "Polaris-Button__Content",
2633 "textAlignLeft": "Polaris-Button--textAlignLeft",
2634 "textAlignCenter": "Polaris-Button--textAlignCenter",
2635 "textAlignRight": "Polaris-Button--textAlignRight",
2636 "Icon": "Polaris-Button__Icon",
2637 "Spinner": "Polaris-Button__Spinner",
2638 "primary": "Polaris-Button--primary",
2639 "pressed": "Polaris-Button--pressed",
2640 "destructive": "Polaris-Button--destructive",
2641 "outline": "Polaris-Button--outline",
2642 "loading": "Polaris-Button--loading",
2643 "plain": "Polaris-Button--plain",
2644 "iconOnly": "Polaris-Button--iconOnly",
2645 "fullWidth": "Polaris-Button--fullWidth",
2646 "sizeSlim": "Polaris-Button--sizeSlim",
2647 "sizeLarge": "Polaris-Button--sizeLarge",
2648 "monochrome": "Polaris-Button--monochrome",
2649 "Text": "Polaris-Button__Text",
2650 "DisclosureIcon": "Polaris-Button__DisclosureIcon",
2651 "DisclosureIconFacingUp": "Polaris-Button__DisclosureIconFacingUp"
2652};
2653
2654var DEFAULT_SIZE = 'medium';
2655function Button(_ref) {
2656 var id = _ref.id,
2657 url = _ref.url,
2658 disabled = _ref.disabled,
2659 loading = _ref.loading,
2660 children = _ref.children,
2661 accessibilityLabel = _ref.accessibilityLabel,
2662 ariaControls = _ref.ariaControls,
2663 ariaExpanded = _ref.ariaExpanded,
2664 ariaPressed = _ref.ariaPressed,
2665 onClick = _ref.onClick,
2666 onFocus = _ref.onFocus,
2667 onBlur = _ref.onBlur,
2668 onKeyDown = _ref.onKeyDown,
2669 onKeyPress = _ref.onKeyPress,
2670 onKeyUp = _ref.onKeyUp,
2671 onMouseEnter = _ref.onMouseEnter,
2672 onTouchStart = _ref.onTouchStart,
2673 external = _ref.external,
2674 download = _ref.download,
2675 icon = _ref.icon,
2676 primary = _ref.primary,
2677 outline = _ref.outline,
2678 destructive = _ref.destructive,
2679 disclosure = _ref.disclosure,
2680 plain = _ref.plain,
2681 monochrome = _ref.monochrome,
2682 submit = _ref.submit,
2683 _ref$size = _ref.size,
2684 size = _ref$size === void 0 ? DEFAULT_SIZE : _ref$size,
2685 textAlign = _ref.textAlign,
2686 fullWidth = _ref.fullWidth,
2687 pressed = _ref.pressed;
2688
2689 var _useFeatures = useFeatures(),
2690 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
2691 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
2692
2693 var hasGivenDeprecationWarning = React.useRef(false);
2694
2695 if (ariaPressed && !hasGivenDeprecationWarning.current) {
2696 // eslint-disable-next-line no-console
2697 console.warn('Deprecation: The ariaPressed prop has been replaced with pressed');
2698 hasGivenDeprecationWarning.current = true;
2699 }
2700
2701 var i18n = useI18n();
2702 var isDisabled = disabled || loading;
2703 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);
2704 var disclosureIcon = React__default.createElement(Icon, {
2705 source: loading ? 'placeholder' : polarisIcons.CaretDownMinor
2706 });
2707 var disclosureIconMarkup = disclosure ? React__default.createElement(IconWrapper, null, React__default.createElement("div", {
2708 className: classNames(styles$4.DisclosureIcon, disclosure === 'up' && styles$4.DisclosureIconFacingUp)
2709 }, disclosureIcon)) : null;
2710 var iconMarkup;
2711
2712 if (icon) {
2713 var iconInner = isIconSource(icon) ? React__default.createElement(Icon, {
2714 source: loading ? 'placeholder' : icon
2715 }) : icon;
2716 iconMarkup = React__default.createElement(IconWrapper, null, iconInner);
2717 }
2718
2719 var childMarkup = children ? React__default.createElement("span", {
2720 className: styles$4.Text
2721 }, children) : null;
2722 var spinnerColor = primary || destructive ? 'white' : 'inkLightest';
2723 var spinnerSVGMarkup = loading ? React__default.createElement("span", {
2724 className: styles$4.Spinner
2725 }, React__default.createElement(Spinner, {
2726 size: "small",
2727 color: spinnerColor,
2728 accessibilityLabel: i18n.translate('Polaris.Button.spinnerAccessibilityLabel')
2729 })) : null;
2730 var content = iconMarkup || disclosureIconMarkup ? React__default.createElement("span", {
2731 className: styles$4.Content
2732 }, spinnerSVGMarkup, iconMarkup, childMarkup, disclosureIconMarkup) : React__default.createElement("span", {
2733 className: styles$4.Content
2734 }, spinnerSVGMarkup, childMarkup);
2735 var type = submit ? 'submit' : 'button';
2736
2737 if (url) {
2738 return isDisabled ? // Render an `<a>` so toggling disabled/enabled state changes only the
2739 // `href` attribute instead of replacing the whole element.
2740 // eslint-disable-next-line jsx-a11y/anchor-is-valid
2741 React__default.createElement("a", {
2742 id: id,
2743 className: className,
2744 "aria-label": accessibilityLabel
2745 }, content) : React__default.createElement(UnstyledLink, {
2746 id: id,
2747 url: url,
2748 external: external,
2749 download: download,
2750 onClick: onClick,
2751 onFocus: onFocus,
2752 onBlur: onBlur,
2753 onMouseUp: handleMouseUpByBlurring,
2754 onMouseEnter: onMouseEnter,
2755 onTouchStart: onTouchStart,
2756 className: className,
2757 "aria-label": accessibilityLabel
2758 }, content);
2759 }
2760
2761 var ariaPressedStatus = pressed !== undefined ? pressed : ariaPressed;
2762 return React__default.createElement("button", {
2763 id: id,
2764 type: type,
2765 onClick: onClick,
2766 onFocus: onFocus,
2767 onBlur: onBlur,
2768 onKeyDown: onKeyDown,
2769 onKeyUp: onKeyUp,
2770 onKeyPress: onKeyPress,
2771 onMouseUp: handleMouseUpByBlurring,
2772 onMouseEnter: onMouseEnter,
2773 onTouchStart: onTouchStart,
2774 className: className,
2775 disabled: isDisabled,
2776 "aria-label": accessibilityLabel,
2777 "aria-controls": ariaControls,
2778 "aria-expanded": ariaExpanded,
2779 "aria-pressed": ariaPressedStatus,
2780 role: loading ? 'alert' : undefined,
2781 "aria-busy": loading ? true : undefined
2782 }, content);
2783}
2784function IconWrapper(_ref2) {
2785 var children = _ref2.children;
2786 return React__default.createElement("span", {
2787 className: styles$4.Icon
2788 }, children);
2789}
2790
2791function isIconSource(x) {
2792 return typeof x === 'string' || typeof x === 'object' && x.body || typeof x === 'function';
2793}
2794
2795function buttonsFrom(actions) {
2796 var overrides = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2797
2798 if (Array.isArray(actions)) {
2799 return actions.map(function (action, index) {
2800 return buttonFrom(action, overrides, index);
2801 });
2802 } else {
2803 var action = actions;
2804 return buttonFrom(action, overrides);
2805 }
2806}
2807function buttonFrom(_a, overrides, key) {
2808 var content = _a.content,
2809 onAction = _a.onAction,
2810 action = tslib_1.__rest(_a, ["content", "onAction"]);
2811
2812 return React__default.createElement(Button, Object.assign({
2813 key: key,
2814 onClick: onAction
2815 }, action, overrides), content);
2816}
2817
2818function useToggle(initialState) {
2819 var _useState = React.useState(initialState),
2820 _useState2 = _slicedToArray(_useState, 2),
2821 state = _useState2[0],
2822 setState = _useState2[1];
2823
2824 var toggle = React.useCallback(function () {
2825 return setState(function (state) {
2826 return !state;
2827 });
2828 }, []); // cast needed to say this returns a two item array with the items in
2829 // their specific positions instead of `(typeof state | typeof toggle)[]`
2830
2831 return [state, toggle];
2832}
2833function useForcibleToggle(initialState) {
2834 var _useState3 = React.useState(initialState),
2835 _useState4 = _slicedToArray(_useState3, 2),
2836 state = _useState4[0],
2837 setState = _useState4[1];
2838
2839 var toggles = {
2840 toggle: React.useCallback(function () {
2841 return setState(function (state) {
2842 return !state;
2843 });
2844 }, []),
2845 forceTrue: React.useCallback(function () {
2846 return setState(true);
2847 }, []),
2848 forceFalse: React.useCallback(function () {
2849 return setState(false);
2850 }, [])
2851 }; // cast needed to say this returns a two item array with the items in
2852 // their specific positions instead of `(typeof state | typeof toggles)[]`
2853
2854 return [state, toggles];
2855}
2856
2857var WithinContentContext = React__default.createContext(false);
2858
2859// `Component`. If `props` is passed, those will be added as props on the
2860// wrapped component. If `element` is null, the component is not wrapped.
2861
2862function wrapWithComponent(element, Component, props) {
2863 if (element == null) {
2864 return null;
2865 }
2866
2867 return isElementOfType(element, Component) ? element : React__default.createElement(Component, props, element);
2868} // In development, we compare based on the name of the function because
2869// React Hot Loader proxies React components in order to make updates. In
2870// production we can simply compare the components for equality.
2871
2872var isComponent = process.env.NODE_ENV === 'development' ? hotReloadComponentCheck : function (AComponent, AnotherComponent) {
2873 return AComponent === AnotherComponent;
2874}; // Checks whether `element` is a React element of type `Component` (or one of
2875// the passed components, if `Component` is an array of React components).
2876
2877function isElementOfType(element, Component) {
2878 if (element == null || !React__default.isValidElement(element) || typeof element.type === 'string') {
2879 return false;
2880 }
2881
2882 var type = element.type;
2883 var Components = Array.isArray(Component) ? Component : [Component];
2884 return Components.some(function (AComponent) {
2885 return typeof type !== 'string' && isComponent(AComponent, type);
2886 });
2887} // Returns all children that are valid elements as an array. Can optionally be
2888// filtered by passing `predicate`.
2889
2890function elementChildren(children) {
2891 var predicate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
2892 return true;
2893 };
2894 return React__default.Children.toArray(children).filter(function (child) {
2895 return React__default.isValidElement(child) && predicate(child);
2896 });
2897}
2898
2899function hotReloadComponentCheck(AComponent, AnotherComponent) {
2900 var componentName = AComponent.name;
2901 var anotherComponentName = AnotherComponent.displayName;
2902 return AComponent === AnotherComponent || Boolean(componentName) && componentName === anotherComponentName;
2903}
2904
2905var styles$5 = {
2906 "ButtonGroup": "Polaris-ButtonGroup",
2907 "Item": "Polaris-ButtonGroup__Item",
2908 "Item-plain": "Polaris-ButtonGroup__Item--plain",
2909 "segmented": "Polaris-ButtonGroup--segmented",
2910 "Item-focused": "Polaris-ButtonGroup__Item--focused",
2911 "fullWidth": "Polaris-ButtonGroup--fullWidth"
2912};
2913
2914function Item(_ref) {
2915 var button = _ref.button;
2916
2917 var _useForcibleToggle = useForcibleToggle(false),
2918 _useForcibleToggle2 = _slicedToArray(_useForcibleToggle, 2),
2919 focused = _useForcibleToggle2[0],
2920 _useForcibleToggle2$ = _useForcibleToggle2[1],
2921 forceTrueFocused = _useForcibleToggle2$.forceTrue,
2922 forceFalseFocused = _useForcibleToggle2$.forceFalse;
2923
2924 var className = classNames(styles$5.Item, focused && styles$5['Item-focused'], button.props.plain && styles$5['Item-plain']);
2925 return React__default.createElement("div", {
2926 className: className,
2927 onFocus: forceTrueFocused,
2928 onBlur: forceFalseFocused
2929 }, button);
2930}
2931
2932function ButtonGroup(_ref) {
2933 var children = _ref.children,
2934 segmented = _ref.segmented,
2935 fullWidth = _ref.fullWidth,
2936 connectedTop = _ref.connectedTop;
2937 var className = classNames(styles$5.ButtonGroup, segmented && styles$5.segmented, fullWidth && styles$5.fullWidth);
2938 var contents = elementChildren(children).map(function (child, index) {
2939 return React__default.createElement(Item, {
2940 button: child,
2941 key: index
2942 });
2943 });
2944 return React__default.createElement("div", {
2945 className: className,
2946 "data-buttongroup-segmented": segmented,
2947 "data-buttongroup-connected-top": connectedTop,
2948 "data-buttongroup-full-width": fullWidth
2949 }, contents);
2950}
2951
2952var StickyManagerContext = React__default.createContext(undefined);
2953
2954function useStickyManager() {
2955 var stickyManager = React.useContext(StickyManagerContext);
2956
2957 if (!stickyManager) {
2958 throw new MissingAppProviderError('No StickyManager was provided.');
2959 }
2960
2961 return stickyManager;
2962}
2963
2964var Breakpoints = {
2965 navigationBarCollapsed: '768px',
2966 stackedContent: '1043px'
2967};
2968var noWindowMatches = {
2969 media: '',
2970 addListener: noop$1,
2971 removeListener: noop$1,
2972 matches: false,
2973 onchange: noop$1,
2974 addEventListener: noop$1,
2975 removeEventListener: noop$1,
2976 dispatchEvent: function dispatchEvent(_) {
2977 return true;
2978 }
2979};
2980
2981function noop$1() {}
2982
2983function navigationBarCollapsed() {
2984 return typeof window === 'undefined' ? noWindowMatches : window.matchMedia("(max-width: ".concat(Breakpoints.navigationBarCollapsed, ")"));
2985}
2986function stackedContent() {
2987 return typeof window === 'undefined' ? noWindowMatches : window.matchMedia("(max-width: ".concat(Breakpoints.stackedContent, ")"));
2988}
2989
2990var StickyManager =
2991/*#__PURE__*/
2992function () {
2993 function StickyManager(container) {
2994 var _this = this;
2995
2996 _classCallCheck(this, StickyManager);
2997
2998 this.stickyItems = [];
2999 this.stuckItems = [];
3000 this.topBarOffset = 0;
3001 this.handleResize = debounce(function () {
3002 _this.manageStickyItems();
3003 }, 40, {
3004 leading: true,
3005 trailing: true,
3006 maxWait: 40
3007 });
3008 this.handleScroll = debounce(function () {
3009 _this.manageStickyItems();
3010 }, 40, {
3011 leading: true,
3012 trailing: true,
3013 maxWait: 40
3014 });
3015
3016 if (container) {
3017 this.setContainer(container);
3018 }
3019 }
3020
3021 _createClass(StickyManager, [{
3022 key: "registerStickyItem",
3023 value: function registerStickyItem(stickyItem) {
3024 this.stickyItems.push(stickyItem);
3025 }
3026 }, {
3027 key: "unregisterStickyItem",
3028 value: function unregisterStickyItem(nodeToRemove) {
3029 var nodeIndex = this.stickyItems.findIndex(function (_ref) {
3030 var stickyNode = _ref.stickyNode;
3031 return nodeToRemove === stickyNode;
3032 });
3033 this.stickyItems.splice(nodeIndex, 1);
3034 }
3035 }, {
3036 key: "setContainer",
3037 value: function setContainer(el) {
3038 this.container = el;
3039
3040 if (isDocument(el)) {
3041 this.setTopBarOffset();
3042 }
3043
3044 events.addEventListener(this.container, 'scroll', this.handleScroll);
3045 events.addEventListener(window, 'resize', this.handleResize);
3046 this.manageStickyItems();
3047 }
3048 }, {
3049 key: "removeScrollListener",
3050 value: function removeScrollListener() {
3051 if (this.container) {
3052 events.removeEventListener(this.container, 'scroll', this.handleScroll);
3053 events.removeEventListener(window, 'resize', this.handleResize);
3054 }
3055 }
3056 }, {
3057 key: "manageStickyItems",
3058 value: function manageStickyItems() {
3059 var _this2 = this;
3060
3061 if (this.stickyItems.length <= 0) {
3062 return;
3063 }
3064
3065 var scrollTop = scrollTopFor(this.container);
3066 var containerTop = geometry.getRectForNode(this.container).top + this.topBarOffset;
3067 this.stickyItems.forEach(function (stickyItem) {
3068 var handlePositioning = stickyItem.handlePositioning;
3069
3070 var _this2$evaluateSticky = _this2.evaluateStickyItem(stickyItem, scrollTop, containerTop),
3071 sticky = _this2$evaluateSticky.sticky,
3072 top = _this2$evaluateSticky.top,
3073 left = _this2$evaluateSticky.left,
3074 width = _this2$evaluateSticky.width;
3075
3076 _this2.updateStuckItems(stickyItem, sticky);
3077
3078 handlePositioning(sticky, top, left, width);
3079 });
3080 }
3081 }, {
3082 key: "evaluateStickyItem",
3083 value: function evaluateStickyItem(stickyItem, scrollTop, containerTop) {
3084 var stickyNode = stickyItem.stickyNode,
3085 placeHolderNode = stickyItem.placeHolderNode,
3086 boundingElement = stickyItem.boundingElement,
3087 offset = stickyItem.offset,
3088 disableWhenStacked = stickyItem.disableWhenStacked;
3089
3090 if (disableWhenStacked && stackedContent().matches) {
3091 return {
3092 sticky: false,
3093 top: 0,
3094 left: 0,
3095 width: 'auto'
3096 };
3097 }
3098
3099 var stickyOffset = offset ? this.getOffset(stickyNode) + parseInt(tokens__default.spacingLoose, 10) : this.getOffset(stickyNode);
3100 var scrollPosition = scrollTop + stickyOffset;
3101 var placeHolderNodeCurrentTop = placeHolderNode.getBoundingClientRect().top - containerTop + scrollTop;
3102 var top = containerTop + stickyOffset;
3103 var width = placeHolderNode.getBoundingClientRect().width;
3104 var left = placeHolderNode.getBoundingClientRect().left;
3105 var sticky;
3106
3107 if (boundingElement == null) {
3108 sticky = scrollPosition >= placeHolderNodeCurrentTop;
3109 } else {
3110 var stickyItemHeight = stickyNode.getBoundingClientRect().height;
3111 var stickyItemBottomPosition = boundingElement.getBoundingClientRect().bottom - stickyItemHeight + scrollTop - containerTop;
3112 sticky = scrollPosition >= placeHolderNodeCurrentTop && scrollPosition < stickyItemBottomPosition;
3113 }
3114
3115 return {
3116 sticky,
3117 top,
3118 left,
3119 width
3120 };
3121 }
3122 }, {
3123 key: "updateStuckItems",
3124 value: function updateStuckItems(item, sticky) {
3125 var stickyNode = item.stickyNode;
3126
3127 if (sticky && !this.isNodeStuck(stickyNode)) {
3128 this.addStuckItem(item);
3129 } else if (!sticky && this.isNodeStuck(stickyNode)) {
3130 this.removeStuckItem(item);
3131 }
3132 }
3133 }, {
3134 key: "addStuckItem",
3135 value: function addStuckItem(stickyItem) {
3136 this.stuckItems.push(stickyItem);
3137 }
3138 }, {
3139 key: "removeStuckItem",
3140 value: function removeStuckItem(stickyItem) {
3141 var nodeToRemove = stickyItem.stickyNode;
3142 var nodeIndex = this.stuckItems.findIndex(function (_ref2) {
3143 var stickyNode = _ref2.stickyNode;
3144 return nodeToRemove === stickyNode;
3145 });
3146 this.stuckItems.splice(nodeIndex, 1);
3147 }
3148 }, {
3149 key: "getOffset",
3150 value: function getOffset(node) {
3151 if (this.stuckItems.length === 0) {
3152 return 0;
3153 }
3154
3155 var offset = 0;
3156 var count = 0;
3157 var stuckNodesLength = this.stuckItems.length;
3158 var nodeRect = geometry.getRectForNode(node);
3159
3160 while (count < stuckNodesLength) {
3161 var stuckNode = this.stuckItems[count].stickyNode;
3162
3163 if (stuckNode !== node) {
3164 var stuckNodeRect = geometry.getRectForNode(stuckNode);
3165
3166 if (!horizontallyOverlaps(nodeRect, stuckNodeRect)) {
3167 offset += geometry.getRectForNode(stuckNode).height;
3168 }
3169 } else {
3170 break;
3171 }
3172
3173 count++;
3174 }
3175
3176 return offset;
3177 }
3178 }, {
3179 key: "isNodeStuck",
3180 value: function isNodeStuck(node) {
3181 var nodeFound = this.stuckItems.findIndex(function (_ref3) {
3182 var stickyNode = _ref3.stickyNode;
3183 return node === stickyNode;
3184 });
3185 return nodeFound >= 0;
3186 }
3187 }, {
3188 key: "setTopBarOffset",
3189 value: function setTopBarOffset() {
3190 var topbarElement = this.container.querySelector(":not(".concat(scrollable.selector, ") ").concat(dataPolarisTopBar.selector));
3191 this.topBarOffset = topbarElement ? topbarElement.clientHeight : 0;
3192 }
3193 }]);
3194
3195 return StickyManager;
3196}();
3197
3198function isDocument(node) {
3199 return node === document;
3200}
3201
3202function scrollTopFor(container) {
3203 return isDocument(container) ? document.body.scrollTop || document.documentElement.scrollTop : container.scrollTop;
3204}
3205
3206function horizontallyOverlaps(rect1, rect2) {
3207 var rect1Left = rect1.left;
3208 var rect1Right = rect1.left + rect1.width;
3209 var rect2Left = rect2.left;
3210 var rect2Right = rect2.left + rect2.width;
3211 return rect2Right < rect1Left || rect1Right < rect2Left;
3212}
3213
3214var UniqueIdFactoryContext = React__default.createContext(undefined);
3215
3216/**
3217 * Returns a unique id that remains consistent across multiple re-renders of the
3218 * same hook
3219 * @param prefix Defines a prefix for the ID. You probably want to set this to
3220 * the name of the component you're calling `useUniqueId` in.
3221 * @param overrideId Defines a fixed value to use instead of generating a unique
3222 * ID. Useful for components that allow consumers to specify their own ID.
3223 */
3224
3225function useUniqueId() {
3226 var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
3227 var overrideId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
3228 var idFactory = React.useContext(UniqueIdFactoryContext); // By using a ref to store the uniqueId for each invocation of the hook and
3229 // checking that it is not already populated we ensure that we don’t generate
3230 // a new ID on every re-render of a component.
3231
3232 var uniqueIdRef = React.useRef(null);
3233
3234 if (!idFactory) {
3235 throw new MissingAppProviderError('No UniqueIdFactory was provided.');
3236 } // If an override was specified, then use that instead of using a unique ID
3237 // Hooks can’t be called conditionally so this has to go after all use* calls
3238
3239
3240 if (overrideId) {
3241 return overrideId;
3242 } // If a unique id has not yet been generated, then get a new one
3243
3244
3245 if (!uniqueIdRef.current) {
3246 uniqueIdRef.current = idFactory.nextId(prefix);
3247 }
3248
3249 return uniqueIdRef.current;
3250}
3251
3252var UniqueIdFactory =
3253/*#__PURE__*/
3254function () {
3255 function UniqueIdFactory(idGeneratorFactory) {
3256 _classCallCheck(this, UniqueIdFactory);
3257
3258 this.idGenerators = {};
3259 this.idGeneratorFactory = idGeneratorFactory;
3260 }
3261
3262 _createClass(UniqueIdFactory, [{
3263 key: "nextId",
3264 value: function nextId(prefix) {
3265 if (!this.idGenerators[prefix]) {
3266 this.idGenerators[prefix] = this.idGeneratorFactory(prefix);
3267 }
3268
3269 return this.idGenerators[prefix]();
3270 }
3271 }]);
3272
3273 return UniqueIdFactory;
3274}();
3275function globalIdGeneratorFactory() {
3276 var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
3277 var index = 1;
3278 return function () {
3279 return "Polaris".concat(prefix).concat(index++);
3280 };
3281}
3282
3283var ScrollableContext = React__default.createContext(undefined);
3284
3285function ScrollTo() {
3286 var anchorNode = React.useRef(null);
3287 var scrollToPosition = React.useContext(ScrollableContext);
3288 React.useEffect(function () {
3289 if (!scrollToPosition || !anchorNode.current) {
3290 return;
3291 }
3292
3293 scrollToPosition(anchorNode.current.offsetTop);
3294 }, [scrollToPosition]);
3295 var id = useUniqueId("ScrollTo"); // eslint-disable-next-line jsx-a11y/anchor-is-valid
3296
3297 return React__default.createElement("a", {
3298 id: id,
3299 ref: anchorNode
3300 });
3301}
3302
3303var styles$6 = {
3304 "Scrollable": "Polaris-Scrollable",
3305 "horizontal": "Polaris-Scrollable--horizontal",
3306 "vertical": "Polaris-Scrollable--vertical",
3307 "hasTopShadow": "Polaris-Scrollable--hasTopShadow",
3308 "hasBottomShadow": "Polaris-Scrollable--hasBottomShadow"
3309};
3310
3311var MAX_SCROLL_DISTANCE = 100;
3312var DELTA_THRESHOLD = 0.2;
3313var DELTA_PERCENTAGE = 0.2;
3314var EVENTS_TO_LOCK = ['scroll', 'touchmove', 'wheel'];
3315var PREFERS_REDUCED_MOTION = prefersReducedMotion();
3316var Scrollable =
3317/*#__PURE__*/
3318function (_React$Component) {
3319 _inherits(Scrollable, _React$Component);
3320
3321 function Scrollable() {
3322 var _this;
3323
3324 _classCallCheck(this, Scrollable);
3325
3326 _this = _possibleConstructorReturn(this, _getPrototypeOf(Scrollable).apply(this, arguments));
3327 _this.state = {
3328 topShadow: false,
3329 bottomShadow: false,
3330 scrollPosition: 0
3331 };
3332 _this.stickyManager = new StickyManager();
3333 _this.handleResize = debounce(function () {
3334 _this.handleScroll();
3335 }, 50, {
3336 trailing: true
3337 });
3338
3339 _this.setScrollArea = function (scrollArea) {
3340 _this.scrollArea = scrollArea;
3341 };
3342
3343 _this.handleScroll = function () {
3344 var _assertThisInitialize = _assertThisInitialized(_this),
3345 scrollArea = _assertThisInitialize.scrollArea;
3346
3347 var _this$props = _this.props,
3348 shadow = _this$props.shadow,
3349 onScrolledToBottom = _this$props.onScrolledToBottom;
3350
3351 if (scrollArea == null) {
3352 return;
3353 }
3354
3355 var scrollTop = scrollArea.scrollTop,
3356 clientHeight = scrollArea.clientHeight,
3357 scrollHeight = scrollArea.scrollHeight;
3358 var shouldBottomShadow = Boolean(shadow && !(scrollTop + clientHeight >= scrollHeight));
3359 var shouldTopShadow = Boolean(shadow && scrollTop > 0);
3360 var canScroll = scrollHeight > clientHeight;
3361 var hasScrolledToBottom = scrollHeight - scrollTop === clientHeight;
3362
3363 if (canScroll && hasScrolledToBottom && onScrolledToBottom) {
3364 onScrolledToBottom();
3365 }
3366
3367 _this.setState({
3368 topShadow: shouldTopShadow,
3369 bottomShadow: shouldBottomShadow,
3370 scrollPosition: scrollTop
3371 });
3372 };
3373
3374 _this.scrollHint = function () {
3375 var _assertThisInitialize2 = _assertThisInitialized(_this),
3376 scrollArea = _assertThisInitialize2.scrollArea;
3377
3378 if (scrollArea == null) {
3379 return;
3380 }
3381
3382 var clientHeight = scrollArea.clientHeight,
3383 scrollHeight = scrollArea.scrollHeight;
3384
3385 if (PREFERS_REDUCED_MOTION || _this.state.scrollPosition > 0 || scrollHeight <= clientHeight) {
3386 return;
3387 }
3388
3389 var scrollDistance = scrollHeight - clientHeight;
3390
3391 _this.toggleLock();
3392
3393 _this.setState({
3394 scrollPosition: scrollDistance > MAX_SCROLL_DISTANCE ? MAX_SCROLL_DISTANCE : scrollDistance
3395 }, function () {
3396 window.requestAnimationFrame(_this.scrollStep);
3397 });
3398 };
3399
3400 _this.scrollStep = function () {
3401 _this.setState(function (_ref) {
3402 var scrollPosition = _ref.scrollPosition;
3403 var delta = scrollPosition * DELTA_PERCENTAGE;
3404 return {
3405 scrollPosition: delta < DELTA_THRESHOLD ? 0 : scrollPosition - delta
3406 };
3407 }, function () {
3408 if (_this.state.scrollPosition > 0) {
3409 window.requestAnimationFrame(_this.scrollStep);
3410 } else {
3411 _this.toggleLock(false);
3412 }
3413 });
3414 };
3415
3416 _this.scrollToPosition = function (scrollY) {
3417 _this.setState({
3418 scrollPosition: scrollY
3419 });
3420 };
3421
3422 return _this;
3423 }
3424
3425 _createClass(Scrollable, [{
3426 key: "componentDidMount",
3427 value: function componentDidMount() {
3428 var _this2 = this;
3429
3430 if (this.scrollArea == null) {
3431 return;
3432 }
3433
3434 this.stickyManager.setContainer(this.scrollArea);
3435 events.addEventListener(this.scrollArea, 'scroll', function () {
3436 window.requestAnimationFrame(_this2.handleScroll);
3437 });
3438 events.addEventListener(window, 'resize', this.handleResize);
3439 window.requestAnimationFrame(function () {
3440 _this2.handleScroll();
3441
3442 if (_this2.props.hint) {
3443 _this2.scrollHint();
3444 }
3445 });
3446 }
3447 }, {
3448 key: "componentWillUnmount",
3449 value: function componentWillUnmount() {
3450 if (this.scrollArea == null) {
3451 return;
3452 }
3453
3454 events.removeEventListener(this.scrollArea, 'scroll', this.handleScroll);
3455 events.removeEventListener(window, 'resize', this.handleResize);
3456 this.stickyManager.removeScrollListener();
3457 }
3458 }, {
3459 key: "componentDidUpdate",
3460 value: function componentDidUpdate() {
3461 var scrollPosition = this.state.scrollPosition;
3462
3463 if (scrollPosition && this.scrollArea && scrollPosition > 0) {
3464 this.scrollArea.scrollTop = scrollPosition;
3465 }
3466 }
3467 }, {
3468 key: "render",
3469 value: function render() {
3470 var _this$state = this.state,
3471 topShadow = _this$state.topShadow,
3472 bottomShadow = _this$state.bottomShadow;
3473
3474 var _a = this.props,
3475 children = _a.children,
3476 className = _a.className,
3477 horizontal = _a.horizontal,
3478 _a$vertical = _a.vertical,
3479 vertical = _a$vertical === void 0 ? true : _a$vertical,
3480 shadow = _a.shadow,
3481 hint = _a.hint,
3482 onScrolledToBottom = _a.onScrolledToBottom,
3483 rest = tslib_1.__rest(_a, ["children", "className", "horizontal", "vertical", "shadow", "hint", "onScrolledToBottom"]);
3484
3485 var finalClassName = classNames(className, styles$6.Scrollable, vertical && styles$6.vertical, horizontal && styles$6.horizontal, topShadow && styles$6.hasTopShadow, bottomShadow && styles$6.hasBottomShadow);
3486 return React__default.createElement(ScrollableContext.Provider, {
3487 value: this.scrollToPosition
3488 }, React__default.createElement(StickyManagerContext.Provider, {
3489 value: this.stickyManager
3490 }, React__default.createElement("div", Object.assign({
3491 className: finalClassName
3492 }, scrollable.props, rest, {
3493 ref: this.setScrollArea
3494 }), children)));
3495 }
3496 }, {
3497 key: "toggleLock",
3498 value: function toggleLock() {
3499 var shouldLock = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
3500 var scrollArea = this.scrollArea;
3501
3502 if (scrollArea == null) {
3503 return;
3504 }
3505
3506 EVENTS_TO_LOCK.forEach(function (eventName) {
3507 if (shouldLock) {
3508 events.addEventListener(scrollArea, eventName, prevent);
3509 } else {
3510 events.removeEventListener(scrollArea, eventName, prevent);
3511 }
3512 });
3513 }
3514 }], [{
3515 key: "forNode",
3516 value: function forNode(node) {
3517 return dom.closest(node, scrollable.selector) || document;
3518 }
3519 }]);
3520
3521 return Scrollable;
3522}(React__default.Component);
3523Scrollable.ScrollTo = ScrollTo;
3524
3525function prevent(evt) {
3526 evt.preventDefault();
3527}
3528
3529function prefersReducedMotion() {
3530 try {
3531 return window.matchMedia('(prefers-reduced-motion: reduce)').matches;
3532 } catch (err) {
3533 return false;
3534 }
3535}
3536
3537var styles$7 = {
3538 "Badge": "Polaris-Badge",
3539 "Pip": "Polaris-Badge__Pip",
3540 "sizeSmall": "Polaris-Badge--sizeSmall",
3541 "statusSuccess": "Polaris-Badge--statusSuccess",
3542 "Content": "Polaris-Badge__Content",
3543 "statusInfo": "Polaris-Badge--statusInfo",
3544 "statusAttention": "Polaris-Badge--statusAttention",
3545 "statusWarning": "Polaris-Badge--statusWarning",
3546 "statusNew": "Polaris-Badge--statusNew",
3547 "progressIncomplete": "Polaris-Badge--progressIncomplete",
3548 "progressPartiallyComplete": "Polaris-Badge--progressPartiallyComplete",
3549 "progressComplete": "Polaris-Badge--progressComplete"
3550};
3551
3552var PROGRESS_LABELS = {
3553 incomplete: 'incomplete',
3554 partiallyComplete: 'partiallyComplete',
3555 complete: 'complete'
3556};
3557var STATUS_LABELS = {
3558 info: 'info',
3559 success: 'success',
3560 warning: 'warning',
3561 attention: 'attention',
3562 new: 'new'
3563};
3564var DEFAULT_SIZE$1 = 'medium';
3565function Badge(_ref) {
3566 var children = _ref.children,
3567 status = _ref.status,
3568 progress = _ref.progress,
3569 _ref$size = _ref.size,
3570 size = _ref$size === void 0 ? DEFAULT_SIZE$1 : _ref$size;
3571 var i18n = useI18n();
3572 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)]);
3573 var progressMarkup;
3574
3575 switch (progress) {
3576 case PROGRESS_LABELS.incomplete:
3577 progressMarkup = i18n.translate('Polaris.Badge.PROGRESS_LABELS.incomplete');
3578 break;
3579
3580 case PROGRESS_LABELS.partiallyComplete:
3581 progressMarkup = i18n.translate('Polaris.Badge.PROGRESS_LABELS.partiallyComplete');
3582 break;
3583
3584 case PROGRESS_LABELS.complete:
3585 progressMarkup = i18n.translate('Polaris.Badge.PROGRESS_LABELS.complete');
3586 break;
3587 }
3588
3589 var pipMarkup = progress ? React__default.createElement("span", {
3590 className: styles$7.Pip
3591 }, React__default.createElement(VisuallyHidden, null, progressMarkup)) : null;
3592 var statusMarkup;
3593
3594 switch (status) {
3595 case STATUS_LABELS.info:
3596 statusMarkup = i18n.translate('Polaris.Badge.STATUS_LABELS.info');
3597 break;
3598
3599 case STATUS_LABELS.success:
3600 statusMarkup = i18n.translate('Polaris.Badge.STATUS_LABELS.success');
3601 break;
3602
3603 case STATUS_LABELS.warning:
3604 statusMarkup = i18n.translate('Polaris.Badge.STATUS_LABELS.warning');
3605 break;
3606
3607 case STATUS_LABELS.attention:
3608 statusMarkup = i18n.translate('Polaris.Badge.STATUS_LABELS.attention');
3609 break;
3610
3611 case STATUS_LABELS.new:
3612 statusMarkup = i18n.translate('Polaris.Badge.STATUS_LABELS.new');
3613 break;
3614 }
3615
3616 var statusLabelMarkup = status ? React__default.createElement(VisuallyHidden, null, statusMarkup) : null;
3617 return React__default.createElement("span", {
3618 className: className
3619 }, statusLabelMarkup, pipMarkup, React__default.createElement("span", {
3620 className: styles$7.Content
3621 }, children));
3622}
3623
3624var styles$8 = {
3625 "variationPositive": "Polaris-TextStyle--variationPositive",
3626 "variationNegative": "Polaris-TextStyle--variationNegative",
3627 "variationCode": "Polaris-TextStyle--variationCode",
3628 "variationStrong": "Polaris-TextStyle--variationStrong",
3629 "variationSubdued": "Polaris-TextStyle--variationSubdued"
3630};
3631
3632var VariationValue;
3633
3634(function (VariationValue) {
3635 VariationValue["Positive"] = "positive";
3636 VariationValue["Negative"] = "negative";
3637 VariationValue["Strong"] = "strong";
3638 VariationValue["Subdued"] = "subdued";
3639 VariationValue["Code"] = "code";
3640})(VariationValue || (VariationValue = {}));
3641
3642function TextStyle(_ref) {
3643 var variation = _ref.variation,
3644 children = _ref.children;
3645 var className = classNames(variation && styles$8[variationName('variation', variation)], variation === VariationValue.Code && styles$8.code);
3646 var Element = variationElement(variation);
3647 return React__default.createElement(Element, {
3648 className: className
3649 }, children);
3650}
3651
3652function variationElement(variation) {
3653 return variation === VariationValue.Code ? 'code' : 'span';
3654}
3655
3656var styles$9 = {
3657 "ActionList": "Polaris-ActionList",
3658 "globalTheming": "Polaris-ActionList--globalTheming",
3659 "Section-withoutTitle": "Polaris-ActionList__Section--withoutTitle",
3660 "Actions": "Polaris-ActionList__Actions",
3661 "Section": "Polaris-ActionList__Section",
3662 "Title": "Polaris-ActionList__Title",
3663 "Item": "Polaris-ActionList__Item",
3664 "active": "Polaris-ActionList--active",
3665 "destructive": "Polaris-ActionList--destructive",
3666 "disabled": "Polaris-ActionList--disabled",
3667 "Image": "Polaris-ActionList__Image",
3668 "Content": "Polaris-ActionList__Content",
3669 "Text": "Polaris-ActionList__Text",
3670 "BadgeWrapper": "Polaris-ActionList__BadgeWrapper"
3671};
3672
3673function Item$1(_ref) {
3674 var id = _ref.id,
3675 badge = _ref.badge,
3676 content = _ref.content,
3677 accessibilityLabel = _ref.accessibilityLabel,
3678 helpText = _ref.helpText,
3679 url = _ref.url,
3680 onAction = _ref.onAction,
3681 icon = _ref.icon,
3682 image = _ref.image,
3683 disabled = _ref.disabled,
3684 external = _ref.external,
3685 destructive = _ref.destructive,
3686 ellipsis = _ref.ellipsis,
3687 active = _ref.active,
3688 role = _ref.role;
3689
3690 var _useFeatures = useFeatures(),
3691 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
3692 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
3693
3694 var className = classNames(styles$9.Item, disabled && styles$9.disabled, destructive && styles$9.destructive, active && styles$9.active, unstableGlobalTheming && styles$9.globalTheming);
3695 var imageElement = null;
3696
3697 if (icon) {
3698 imageElement = React__default.createElement("div", {
3699 className: styles$9.Image
3700 }, React__default.createElement(Icon, {
3701 source: icon
3702 }));
3703 } else if (image) {
3704 imageElement = React__default.createElement("div", {
3705 role: "presentation",
3706 className: styles$9.Image,
3707 style: {
3708 backgroundImage: "url(".concat(image)
3709 }
3710 });
3711 }
3712
3713 var contentText = ellipsis && content ? "".concat(content, "\u2026") : content;
3714 var contentMarkup = helpText ? React__default.createElement("div", null, React__default.createElement("div", null, contentText), React__default.createElement(TextStyle, {
3715 variation: "subdued"
3716 }, helpText)) : contentText;
3717 var badgeMarkup = badge && React__default.createElement("span", {
3718 className: styles$9.BadgeWrapper
3719 }, React__default.createElement(Badge, {
3720 status: badge.status
3721 }, badge.content));
3722 var textMarkup = imageElement ? React__default.createElement("div", {
3723 className: styles$9.Text
3724 }, contentMarkup) : contentMarkup;
3725 var contentElement = React__default.createElement("div", {
3726 className: styles$9.Content
3727 }, imageElement, textMarkup, badgeMarkup);
3728 var scrollMarkup = active ? React__default.createElement(Scrollable.ScrollTo, null) : null;
3729 var control = url ? React__default.createElement(UnstyledLink, {
3730 id: id,
3731 url: url,
3732 className: className,
3733 external: external,
3734 "aria-label": accessibilityLabel,
3735 onClick: onAction
3736 }, contentElement) : React__default.createElement("button", {
3737 id: id,
3738 type: "button",
3739 className: className,
3740 disabled: disabled,
3741 "aria-label": accessibilityLabel,
3742 onClick: onAction
3743 }, contentElement);
3744 return React__default.createElement("li", {
3745 role: role,
3746 "aria-selected": active
3747 }, scrollMarkup, control);
3748}
3749
3750function Section(_ref) {
3751 var section = _ref.section,
3752 hasMultipleSections = _ref.hasMultipleSections,
3753 actionRole = _ref.actionRole,
3754 onActionAnyItem = _ref.onActionAnyItem;
3755
3756 var handleAction = function handleAction(itemOnAction) {
3757 return function () {
3758 if (itemOnAction) {
3759 itemOnAction();
3760 }
3761
3762 if (onActionAnyItem) {
3763 onActionAnyItem();
3764 }
3765 };
3766 };
3767
3768 var actionMarkup = section.items.map(function (_a, index) {
3769 var content = _a.content,
3770 helpText = _a.helpText,
3771 onAction = _a.onAction,
3772 item = tslib_1.__rest(_a, ["content", "helpText", "onAction"]);
3773
3774 return React__default.createElement(Item$1, Object.assign({
3775 key: "".concat(content, "-").concat(index),
3776 content: content,
3777 helpText: helpText,
3778 role: actionRole,
3779 onAction: handleAction(onAction)
3780 }, item));
3781 });
3782 var className = section.title ? undefined : styles$9['Section-withoutTitle'];
3783 var titleMarkup = section.title ? React__default.createElement("p", {
3784 className: styles$9.Title
3785 }, section.title) : null;
3786 var sectionRole = actionRole === 'option' ? 'presentation' : undefined;
3787 var sectionMarkup = React__default.createElement("div", {
3788 className: className
3789 }, titleMarkup, React__default.createElement("ul", {
3790 className: styles$9.Actions,
3791 role: sectionRole
3792 }, actionMarkup));
3793 return hasMultipleSections ? React__default.createElement("li", {
3794 className: styles$9.Section
3795 }, sectionMarkup) : sectionMarkup;
3796}
3797
3798function ActionList(_ref) {
3799 var items = _ref.items,
3800 _ref$sections = _ref.sections,
3801 sections = _ref$sections === void 0 ? [] : _ref$sections,
3802 actionRole = _ref.actionRole,
3803 onActionAnyItem = _ref.onActionAnyItem;
3804 var finalSections = [];
3805
3806 if (items) {
3807 finalSections = [{
3808 items
3809 }].concat(_toConsumableArray(sections));
3810 } else if (sections) {
3811 finalSections = sections;
3812 }
3813
3814 var _useFeatures = useFeatures(),
3815 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
3816 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
3817
3818 var className = classNames(styles$9.ActionList, unstableGlobalTheming && styles$9.globalTheming);
3819 var hasMultipleSections = finalSections.length > 1; // Type asserting to any is required for TS3.2 but can be removed when we update to 3.3
3820 // see https://github.com/Microsoft/TypeScript/issues/28768
3821
3822 var Element = hasMultipleSections ? 'ul' : 'div';
3823 var sectionMarkup = finalSections.map(function (section, index) {
3824 return section.items.length > 0 ? React__default.createElement(Section, {
3825 key: section.title || index,
3826 section: section,
3827 hasMultipleSections: hasMultipleSections,
3828 actionRole: actionRole,
3829 onActionAnyItem: onActionAnyItem
3830 }) : null;
3831 });
3832 return React__default.createElement(Element, {
3833 className: className
3834 }, sectionMarkup);
3835}
3836
3837var getUniqueID = other.createUniqueIDFactory('portal-');
3838var Portal =
3839/*#__PURE__*/
3840function (_React$PureComponent) {
3841 _inherits(Portal, _React$PureComponent);
3842
3843 function Portal() {
3844 var _this;
3845
3846 _classCallCheck(this, Portal);
3847
3848 _this = _possibleConstructorReturn(this, _getPrototypeOf(Portal).apply(this, arguments));
3849 _this.state = {
3850 isMounted: false
3851 };
3852 _this.portalId = _this.props.idPrefix !== '' ? "".concat(_this.props.idPrefix, "-").concat(getUniqueID()) : getUniqueID();
3853 return _this;
3854 }
3855
3856 _createClass(Portal, [{
3857 key: "componentDidMount",
3858 value: function componentDidMount() {
3859 this.portalNode = document.createElement('div');
3860 this.portalNode.setAttribute(portal.props[0], this.portalId);
3861
3862 if (this.context != null) {
3863 var UNSTABLE_cssCustomProperties = this.context.UNSTABLE_cssCustomProperties;
3864
3865 if (UNSTABLE_cssCustomProperties != null) {
3866 this.portalNode.setAttribute('style', UNSTABLE_cssCustomProperties);
3867 } else {
3868 this.portalNode.removeAttribute('style');
3869 }
3870 }
3871
3872 document.body.appendChild(this.portalNode);
3873 this.setState({
3874 isMounted: true
3875 });
3876 }
3877 }, {
3878 key: "componentDidUpdate",
3879 value: function componentDidUpdate(_, prevState) {
3880 var _this$props$onPortalC = this.props.onPortalCreated,
3881 onPortalCreated = _this$props$onPortalC === void 0 ? noop$2 : _this$props$onPortalC;
3882
3883 if (this.context != null) {
3884 var UNSTABLE_cssCustomProperties = this.context.UNSTABLE_cssCustomProperties;
3885
3886 if (UNSTABLE_cssCustomProperties != null) {
3887 this.portalNode.setAttribute('style', UNSTABLE_cssCustomProperties);
3888 } else {
3889 this.portalNode.removeAttribute('style');
3890 }
3891 }
3892
3893 if (!prevState.isMounted && this.state.isMounted) {
3894 onPortalCreated();
3895 }
3896 }
3897 }, {
3898 key: "componentWillUnmount",
3899 value: function componentWillUnmount() {
3900 document.body.removeChild(this.portalNode);
3901 }
3902 }, {
3903 key: "render",
3904 value: function render() {
3905 return this.state.isMounted ? reactDom.createPortal(this.props.children, this.portalNode) : null;
3906 }
3907 }]);
3908
3909 return Portal;
3910}(React__default.PureComponent);
3911Portal.defaultProps = {
3912 idPrefix: ''
3913};
3914Portal.contextType = ThemeContext;
3915
3916function noop$2() {}
3917
3918var styles$a = {
3919 "Popover": "Polaris-Popover",
3920 "PopoverOverlay": "Polaris-Popover__PopoverOverlay",
3921 "PopoverOverlay-entering": "Polaris-Popover__PopoverOverlay--entering",
3922 "PopoverOverlay-open": "Polaris-Popover__PopoverOverlay--open",
3923 "PopoverOverlay-exiting": "Polaris-Popover__PopoverOverlay--exiting",
3924 "measuring": "Polaris-Popover--measuring",
3925 "fullWidth": "Polaris-Popover--fullWidth",
3926 "Content": "Polaris-Popover__Content",
3927 "positionedAbove": "Polaris-Popover--positionedAbove",
3928 "Wrapper": "Polaris-Popover__Wrapper",
3929 "Content-fullHeight": "Polaris-Popover__Content--fullHeight",
3930 "Content-fluidContent": "Polaris-Popover__Content--fluidContent",
3931 "Pane": "Polaris-Popover__Pane",
3932 "Pane-fixed": "Polaris-Popover__Pane--fixed",
3933 "Section": "Polaris-Popover__Section",
3934 "FocusTracker": "Polaris-Popover__FocusTracker"
3935};
3936
3937function Section$1(_ref) {
3938 var children = _ref.children;
3939 return React__default.createElement("div", {
3940 className: styles$a.Section
3941 }, children);
3942}
3943
3944function Pane(_ref) {
3945 var fixed = _ref.fixed,
3946 sectioned = _ref.sectioned,
3947 children = _ref.children,
3948 onScrolledToBottom = _ref.onScrolledToBottom;
3949 var className = classNames(styles$a.Pane, fixed && styles$a['Pane-fixed']);
3950 var content = sectioned ? wrapWithComponent(children, Section$1, {}) : children;
3951 return fixed ? React__default.createElement("div", {
3952 className: className
3953 }, content) : React__default.createElement(Scrollable, {
3954 hint: true,
3955 shadow: true,
3956 className: className,
3957 onScrolledToBottom: onScrolledToBottom
3958 }, content);
3959}
3960
3961var EventListener =
3962/*#__PURE__*/
3963function (_React$PureComponent) {
3964 _inherits(EventListener, _React$PureComponent);
3965
3966 function EventListener() {
3967 _classCallCheck(this, EventListener);
3968
3969 return _possibleConstructorReturn(this, _getPrototypeOf(EventListener).apply(this, arguments));
3970 }
3971
3972 _createClass(EventListener, [{
3973 key: "componentDidMount",
3974 value: function componentDidMount() {
3975 this.attachListener();
3976 }
3977 }, {
3978 key: "componentDidUpdate",
3979 value: function componentDidUpdate(_a) {
3980 var passive = _a.passive,
3981 detachProps = tslib_1.__rest(_a, ["passive"]);
3982
3983 this.detachListener(detachProps);
3984 this.attachListener();
3985 }
3986 }, {
3987 key: "componentWillUnmount",
3988 value: function componentWillUnmount() {
3989 this.detachListener();
3990 }
3991 }, {
3992 key: "render",
3993 value: function render() {
3994 return null;
3995 }
3996 }, {
3997 key: "attachListener",
3998 value: function attachListener() {
3999 var _this$props = this.props,
4000 event = _this$props.event,
4001 handler = _this$props.handler,
4002 capture = _this$props.capture,
4003 passive = _this$props.passive;
4004 events.addEventListener(window, event, handler, {
4005 capture,
4006 passive
4007 });
4008 }
4009 }, {
4010 key: "detachListener",
4011 value: function detachListener(prevProps) {
4012 var _ref = prevProps || this.props,
4013 event = _ref.event,
4014 handler = _ref.handler,
4015 capture = _ref.capture;
4016
4017 events.removeEventListener(window, event, handler, capture);
4018 }
4019 }]);
4020
4021 return EventListener;
4022}(React__default.PureComponent);
4023
4024var KeypressListener =
4025/*#__PURE__*/
4026function (_React$Component) {
4027 _inherits(KeypressListener, _React$Component);
4028
4029 function KeypressListener() {
4030 var _this;
4031
4032 _classCallCheck(this, KeypressListener);
4033
4034 _this = _possibleConstructorReturn(this, _getPrototypeOf(KeypressListener).apply(this, arguments));
4035
4036 _this.handleKeyEvent = function (event) {
4037 var _this$props = _this.props,
4038 keyCode = _this$props.keyCode,
4039 handler = _this$props.handler;
4040
4041 if (event.keyCode === keyCode) {
4042 handler(event);
4043 }
4044 };
4045
4046 return _this;
4047 }
4048
4049 _createClass(KeypressListener, [{
4050 key: "componentDidMount",
4051 value: function componentDidMount() {
4052 events.addEventListener(document, 'keyup', this.handleKeyEvent);
4053 }
4054 }, {
4055 key: "componentWillUnmount",
4056 value: function componentWillUnmount() {
4057 events.removeEventListener(document, 'keyup', this.handleKeyEvent);
4058 }
4059 }, {
4060 key: "render",
4061 value: function render() {
4062 return null;
4063 }
4064 }]);
4065
4066 return KeypressListener;
4067}(React__default.Component);
4068
4069function calculateVerticalPosition(activatorRect, overlayRect, overlayMargins, scrollableContainerRect, containerRect, preferredPosition, fixed) {
4070 var activatorTop = activatorRect.top;
4071 var activatorBottom = activatorTop + activatorRect.height;
4072 var spaceAbove = activatorRect.top;
4073 var spaceBelow = containerRect.height - activatorRect.top - activatorRect.height;
4074 var desiredHeight = overlayRect.height;
4075 var verticalMargins = overlayMargins.activator + overlayMargins.container;
4076 var minimumSpaceToScroll = overlayMargins.container;
4077 var distanceToTopScroll = activatorRect.top - Math.max(scrollableContainerRect.top, 0);
4078 var distanceToBottomScroll = containerRect.top + Math.min(containerRect.height, scrollableContainerRect.top + scrollableContainerRect.height) - (activatorRect.top + activatorRect.height);
4079 var enoughSpaceFromTopScroll = distanceToTopScroll >= minimumSpaceToScroll;
4080 var enoughSpaceFromBottomScroll = distanceToBottomScroll >= minimumSpaceToScroll;
4081 var heightIfBelow = Math.min(spaceBelow, desiredHeight);
4082 var heightIfAbove = Math.min(spaceAbove, desiredHeight);
4083 var containerRectTop = fixed ? 0 : containerRect.top;
4084 var positionIfAbove = {
4085 height: heightIfAbove - verticalMargins,
4086 top: activatorTop + containerRectTop - heightIfAbove,
4087 positioning: 'above'
4088 };
4089 var positionIfBelow = {
4090 height: heightIfBelow - verticalMargins,
4091 top: activatorBottom + containerRectTop,
4092 positioning: 'below'
4093 };
4094
4095 if (preferredPosition === 'above') {
4096 return (enoughSpaceFromTopScroll || distanceToTopScroll >= distanceToBottomScroll && !enoughSpaceFromBottomScroll) && (spaceAbove > desiredHeight || spaceAbove > spaceBelow) ? positionIfAbove : positionIfBelow;
4097 }
4098
4099 if (preferredPosition === 'below') {
4100 return (enoughSpaceFromBottomScroll || distanceToBottomScroll >= distanceToTopScroll && !enoughSpaceFromTopScroll) && (spaceBelow > desiredHeight || spaceBelow > spaceAbove) ? positionIfBelow : positionIfAbove;
4101 }
4102
4103 if (enoughSpaceFromTopScroll && enoughSpaceFromBottomScroll) {
4104 return spaceAbove > spaceBelow ? positionIfAbove : positionIfBelow;
4105 }
4106
4107 return distanceToTopScroll > minimumSpaceToScroll ? positionIfAbove : positionIfBelow;
4108}
4109function calculateHorizontalPosition(activatorRect, overlayRect, containerRect, overlayMargins, preferredAlignment) {
4110 var maximum = containerRect.width - overlayRect.width;
4111
4112 if (preferredAlignment === 'left') {
4113 return Math.min(maximum, Math.max(0, activatorRect.left - overlayMargins.horizontal));
4114 } else if (preferredAlignment === 'right') {
4115 var activatorRight = activatorRect.left + activatorRect.width;
4116 return Math.min(maximum, Math.max(0, activatorRight - overlayRect.width + overlayMargins.horizontal));
4117 }
4118
4119 return Math.min(maximum, Math.max(0, activatorRect.center.x - overlayRect.width / 2));
4120}
4121function rectIsOutsideOfRect(inner, outer) {
4122 var center = inner.center;
4123 return center.y < outer.top || center.y > outer.top + outer.height;
4124}
4125
4126var styles$b = {
4127 "PositionedOverlay": "Polaris-PositionedOverlay",
4128 "fixed": "Polaris-PositionedOverlay--fixed",
4129 "calculating": "Polaris-PositionedOverlay--calculating"
4130};
4131
4132var OBSERVER_CONFIG = {
4133 childList: true,
4134 subtree: true
4135};
4136var PositionedOverlay =
4137/*#__PURE__*/
4138function (_React$PureComponent) {
4139 _inherits(PositionedOverlay, _React$PureComponent);
4140
4141 function PositionedOverlay(props) {
4142 var _this;
4143
4144 _classCallCheck(this, PositionedOverlay);
4145
4146 _this = _possibleConstructorReturn(this, _getPrototypeOf(PositionedOverlay).call(this, props));
4147 _this.state = {
4148 measuring: true,
4149 activatorRect: geometry.getRectForNode(_this.props.activator),
4150 left: 0,
4151 top: 0,
4152 height: 0,
4153 width: null,
4154 positioning: 'below',
4155 zIndex: null,
4156 outsideScrollableContainer: false,
4157 lockPosition: false
4158 };
4159 _this.overlay = null;
4160 _this.scrollableContainer = null;
4161
4162 _this.overlayDetails = function () {
4163 var _this$state = _this.state,
4164 measuring = _this$state.measuring,
4165 left = _this$state.left,
4166 positioning = _this$state.positioning,
4167 height = _this$state.height,
4168 activatorRect = _this$state.activatorRect;
4169 return {
4170 measuring,
4171 left,
4172 desiredHeight: height,
4173 positioning,
4174 activatorRect
4175 };
4176 };
4177
4178 _this.setOverlay = function (node) {
4179 _this.overlay = node;
4180 };
4181
4182 _this.handleMeasurement = function () {
4183 var _this$state2 = _this.state,
4184 lockPosition = _this$state2.lockPosition,
4185 top = _this$state2.top;
4186
4187 _this.observer.disconnect();
4188
4189 _this.setState(function (_ref) {
4190 var left = _ref.left,
4191 top = _ref.top;
4192 return {
4193 left,
4194 top,
4195 height: 0,
4196 positioning: 'below',
4197 measuring: true
4198 };
4199 }, function () {
4200 if (_this.overlay == null || _this.scrollableContainer == null) {
4201 return;
4202 }
4203
4204 var _this$props = _this.props,
4205 activator = _this$props.activator,
4206 _this$props$preferred = _this$props.preferredPosition,
4207 preferredPosition = _this$props$preferred === void 0 ? 'below' : _this$props$preferred,
4208 _this$props$preferred2 = _this$props.preferredAlignment,
4209 preferredAlignment = _this$props$preferred2 === void 0 ? 'center' : _this$props$preferred2,
4210 onScrollOut = _this$props.onScrollOut,
4211 fullWidth = _this$props.fullWidth,
4212 fixed = _this$props.fixed;
4213 var textFieldActivator = activator.querySelector('input');
4214 var activatorRect = textFieldActivator != null ? geometry.getRectForNode(textFieldActivator) : geometry.getRectForNode(activator);
4215 var currentOverlayRect = geometry.getRectForNode(_this.overlay);
4216 var scrollableElement = isDocument$1(_this.scrollableContainer) ? document.body : _this.scrollableContainer;
4217 var scrollableContainerRect = geometry.getRectForNode(scrollableElement);
4218 var overlayRect = fullWidth ? Object.assign({}, currentOverlayRect, {
4219 width: activatorRect.width
4220 }) : currentOverlayRect; // If `body` is 100% height, it still acts as though it were not constrained to that size. This adjusts for that.
4221
4222 if (scrollableElement === document.body) {
4223 scrollableContainerRect.height = document.body.scrollHeight;
4224 }
4225
4226 var overlayMargins = _this.overlay.firstElementChild ? getMarginsForNode(_this.overlay.firstElementChild) : {
4227 activator: 0,
4228 container: 0,
4229 horizontal: 0
4230 };
4231 var containerRect = windowRect();
4232 var zIndexForLayer = getZIndexForLayerFromNode(activator);
4233 var zIndex = zIndexForLayer == null ? zIndexForLayer : zIndexForLayer + 1;
4234 var verticalPosition = calculateVerticalPosition(activatorRect, overlayRect, overlayMargins, scrollableContainerRect, containerRect, preferredPosition, fixed);
4235 var horizontalPosition = calculateHorizontalPosition(activatorRect, overlayRect, containerRect, overlayMargins, preferredAlignment);
4236
4237 _this.setState({
4238 measuring: false,
4239 activatorRect: geometry.getRectForNode(activator),
4240 left: horizontalPosition,
4241 top: lockPosition ? top : verticalPosition.top,
4242 lockPosition: Boolean(fixed),
4243 height: verticalPosition.height || 0,
4244 width: fullWidth ? overlayRect.width : null,
4245 positioning: verticalPosition.positioning,
4246 outsideScrollableContainer: onScrollOut != null && rectIsOutsideOfRect(activatorRect, intersectionWithViewport(scrollableContainerRect)),
4247 zIndex
4248 }, function () {
4249 if (!_this.overlay) return;
4250
4251 _this.observer.observe(_this.overlay, OBSERVER_CONFIG);
4252 });
4253 });
4254 };
4255
4256 _this.observer = new MutationObserver(_this.handleMeasurement);
4257 return _this;
4258 }
4259
4260 _createClass(PositionedOverlay, [{
4261 key: "componentDidMount",
4262 value: function componentDidMount() {
4263 this.scrollableContainer = Scrollable.forNode(this.props.activator);
4264
4265 if (this.scrollableContainer && !this.props.fixed) {
4266 this.scrollableContainer.addEventListener('scroll', this.handleMeasurement);
4267 }
4268
4269 this.handleMeasurement();
4270 }
4271 }, {
4272 key: "componentWillUnmount",
4273 value: function componentWillUnmount() {
4274 if (this.scrollableContainer && !this.props.fixed) {
4275 this.scrollableContainer.removeEventListener('scroll', this.handleMeasurement);
4276 }
4277 }
4278 }, {
4279 key: "componentDidUpdate",
4280 value: function componentDidUpdate() {
4281 var _this$state3 = this.state,
4282 outsideScrollableContainer = _this$state3.outsideScrollableContainer,
4283 top = _this$state3.top;
4284 var _this$props2 = this.props,
4285 onScrollOut = _this$props2.onScrollOut,
4286 active = _this$props2.active;
4287
4288 if (active && onScrollOut != null && top !== 0 && outsideScrollableContainer) {
4289 onScrollOut();
4290 }
4291 }
4292 }, {
4293 key: "render",
4294 value: function render() {
4295 var _this$state4 = this.state,
4296 left = _this$state4.left,
4297 top = _this$state4.top,
4298 zIndex = _this$state4.zIndex,
4299 width = _this$state4.width;
4300 var _this$props3 = this.props,
4301 render = _this$props3.render,
4302 fixed = _this$props3.fixed,
4303 propClassNames = _this$props3.classNames;
4304 var style = {
4305 top: top == null || isNaN(top) ? undefined : top,
4306 left: left == null || isNaN(left) ? undefined : left,
4307 width: width == null || isNaN(width) ? undefined : width,
4308 zIndex: zIndex == null || isNaN(zIndex) ? undefined : zIndex
4309 };
4310 var className = classNames(styles$b.PositionedOverlay, fixed && styles$b.fixed, propClassNames);
4311 return React__default.createElement("div", {
4312 className: className,
4313 style: style,
4314 ref: this.setOverlay
4315 }, React__default.createElement(EventListener, {
4316 event: "resize",
4317 handler: this.handleMeasurement
4318 }), render(this.overlayDetails()));
4319 }
4320 }]);
4321
4322 return PositionedOverlay;
4323}(React__default.PureComponent);
4324function intersectionWithViewport(rect) {
4325 var viewport = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : windowRect();
4326 var top = Math.max(rect.top, 0);
4327 var left = Math.max(rect.left, 0);
4328 var bottom = Math.min(rect.top + rect.height, viewport.height);
4329 var right = Math.min(rect.left + rect.width, viewport.width);
4330 return new geometry.Rect({
4331 top,
4332 left,
4333 height: bottom - top,
4334 width: right - left
4335 });
4336}
4337
4338function getMarginsForNode(node) {
4339 var nodeStyles = window.getComputedStyle(node);
4340 return {
4341 activator: parseFloat(nodeStyles.marginTop || ''),
4342 container: parseFloat(nodeStyles.marginBottom || ''),
4343 horizontal: parseFloat(nodeStyles.marginLeft || '')
4344 };
4345}
4346
4347function getZIndexForLayerFromNode(node) {
4348 var layerNode = dom.closest(node, layer.selector) || document.body;
4349 var zIndex = layerNode === document.body ? 'auto' : parseInt(window.getComputedStyle(layerNode).zIndex || '0', 10);
4350 return zIndex === 'auto' || isNaN(zIndex) ? null : zIndex;
4351}
4352
4353function windowRect() {
4354 return new geometry.Rect({
4355 top: window.scrollY,
4356 left: window.scrollX,
4357 height: window.innerHeight,
4358 width: window.innerWidth
4359 });
4360}
4361
4362function isDocument$1(node) {
4363 return node === document;
4364}
4365
4366(function (CloseSource) {
4367 CloseSource[CloseSource["Click"] = 0] = "Click";
4368 CloseSource[CloseSource["EscapeKeypress"] = 1] = "EscapeKeypress";
4369 CloseSource[CloseSource["FocusOut"] = 2] = "FocusOut";
4370 CloseSource[CloseSource["ScrollOut"] = 3] = "ScrollOut";
4371})(exports.PopoverCloseSource || (exports.PopoverCloseSource = {}));
4372
4373var TransitionStatus;
4374
4375(function (TransitionStatus) {
4376 TransitionStatus["Entering"] = "entering";
4377 TransitionStatus["Entered"] = "entered";
4378 TransitionStatus["Exiting"] = "exiting";
4379 TransitionStatus["Exited"] = "exited";
4380})(TransitionStatus || (TransitionStatus = {}));
4381
4382var PopoverOverlay =
4383/*#__PURE__*/
4384function (_React$PureComponent) {
4385 _inherits(PopoverOverlay, _React$PureComponent);
4386
4387 function PopoverOverlay() {
4388 var _this;
4389
4390 _classCallCheck(this, PopoverOverlay);
4391
4392 _this = _possibleConstructorReturn(this, _getPrototypeOf(PopoverOverlay).apply(this, arguments));
4393 _this.state = {
4394 transitionStatus: _this.props.active ? TransitionStatus.Entering : TransitionStatus.Exited
4395 };
4396 _this.contentNode = React.createRef();
4397
4398 _this.renderPopover = function (overlayDetails) {
4399 var measuring = overlayDetails.measuring,
4400 desiredHeight = overlayDetails.desiredHeight,
4401 positioning = overlayDetails.positioning;
4402 var _this$props = _this.props,
4403 id = _this$props.id,
4404 children = _this$props.children,
4405 sectioned = _this$props.sectioned,
4406 fullWidth = _this$props.fullWidth,
4407 fullHeight = _this$props.fullHeight,
4408 fluidContent = _this$props.fluidContent;
4409 var className = classNames(styles$a.Popover, positioning === 'above' && styles$a.positionedAbove, fullWidth && styles$a.fullWidth, measuring && styles$a.measuring);
4410 var contentStyles = measuring ? undefined : {
4411 height: desiredHeight
4412 };
4413 var contentClassNames = classNames(styles$a.Content, fullHeight && styles$a['Content-fullHeight'], fluidContent && styles$a['Content-fluidContent']);
4414 var content = React__default.createElement("div", {
4415 id: id,
4416 tabIndex: -1,
4417 className: contentClassNames,
4418 style: contentStyles,
4419 ref: _this.contentNode
4420 }, renderPopoverContent(children, {
4421 sectioned
4422 }));
4423 return React__default.createElement("div", Object.assign({
4424 className: className
4425 }, overlay.props), React__default.createElement(EventListener, {
4426 event: "click",
4427 handler: _this.handleClick
4428 }), React__default.createElement(EventListener, {
4429 event: "touchstart",
4430 handler: _this.handleClick
4431 }), React__default.createElement(KeypressListener, {
4432 keyCode: exports.Key.Escape,
4433 handler: _this.handleEscape
4434 }), React__default.createElement("div", {
4435 className: styles$a.FocusTracker // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
4436 ,
4437 tabIndex: 0,
4438 onFocus: _this.handleFocusFirstItem
4439 }), React__default.createElement("div", {
4440 className: styles$a.Wrapper
4441 }, content), React__default.createElement("div", {
4442 className: styles$a.FocusTracker // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
4443 ,
4444 tabIndex: 0,
4445 onFocus: _this.handleFocusLastItem
4446 }));
4447 };
4448
4449 _this.handleClick = function (event) {
4450 var target = event.target;
4451
4452 var _assertThisInitialize = _assertThisInitialized(_this),
4453 contentNode = _assertThisInitialize.contentNode,
4454 _assertThisInitialize2 = _assertThisInitialize.props,
4455 activator = _assertThisInitialize2.activator,
4456 onClose = _assertThisInitialize2.onClose;
4457
4458 var isDescendant = contentNode.current != null && dom.nodeContainsDescendant(contentNode.current, target);
4459 var isActivatorDescendant = dom.nodeContainsDescendant(activator, target);
4460
4461 if (isDescendant || isActivatorDescendant || _this.state.transitionStatus !== TransitionStatus.Entered) {
4462 return;
4463 }
4464
4465 onClose(exports.PopoverCloseSource.Click);
4466 };
4467
4468 _this.handleScrollOut = function () {
4469 _this.props.onClose(exports.PopoverCloseSource.ScrollOut);
4470 };
4471
4472 _this.handleEscape = function () {
4473 _this.props.onClose(exports.PopoverCloseSource.EscapeKeypress);
4474 };
4475
4476 _this.handleFocusFirstItem = function () {
4477 _this.props.onClose(exports.PopoverCloseSource.FocusOut);
4478 };
4479
4480 _this.handleFocusLastItem = function () {
4481 _this.props.onClose(exports.PopoverCloseSource.FocusOut);
4482 };
4483
4484 return _this;
4485 }
4486
4487 _createClass(PopoverOverlay, [{
4488 key: "changeTransitionStatus",
4489 value: function changeTransitionStatus(transitionStatus, cb) {
4490 this.setState({
4491 transitionStatus
4492 }, cb); // Forcing a reflow to enable the animation
4493
4494 this.contentNode.current && this.contentNode.current.getBoundingClientRect();
4495 }
4496 }, {
4497 key: "componentDidMount",
4498 value: function componentDidMount() {
4499 if (this.props.active) {
4500 this.focusContent();
4501 this.changeTransitionStatus(TransitionStatus.Entered);
4502 }
4503 }
4504 }, {
4505 key: "componentDidUpdate",
4506 value: function componentDidUpdate(oldProps) {
4507 var _this2 = this;
4508
4509 if (this.props.active && !oldProps.active) {
4510 this.focusContent();
4511 this.changeTransitionStatus(TransitionStatus.Entering, function () {
4512 _this2.clearTransitionTimeout();
4513
4514 _this2.enteringTimer = window.setTimeout(function () {
4515 _this2.setState({
4516 transitionStatus: TransitionStatus.Entered
4517 });
4518 }, tokens.durationBase);
4519 });
4520 }
4521
4522 if (!this.props.active && oldProps.active) {
4523 this.changeTransitionStatus(TransitionStatus.Exiting, function () {
4524 _this2.clearTransitionTimeout();
4525
4526 _this2.exitingTimer = window.setTimeout(function () {
4527 _this2.setState({
4528 transitionStatus: TransitionStatus.Exited
4529 });
4530 }, tokens.durationBase);
4531 });
4532 }
4533 }
4534 }, {
4535 key: "componentWillUnmount",
4536 value: function componentWillUnmount() {
4537 this.clearTransitionTimeout();
4538 }
4539 }, {
4540 key: "render",
4541 value: function render() {
4542 var _this$props2 = this.props,
4543 active = _this$props2.active,
4544 activator = _this$props2.activator,
4545 fullWidth = _this$props2.fullWidth,
4546 _this$props2$preferre = _this$props2.preferredPosition,
4547 preferredPosition = _this$props2$preferre === void 0 ? 'below' : _this$props2$preferre,
4548 _this$props2$preferre2 = _this$props2.preferredAlignment,
4549 preferredAlignment = _this$props2$preferre2 === void 0 ? 'center' : _this$props2$preferre2,
4550 fixed = _this$props2.fixed;
4551 var transitionStatus = this.state.transitionStatus;
4552 if (transitionStatus === TransitionStatus.Exited && !active) return null;
4553 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']);
4554 return React__default.createElement(PositionedOverlay, {
4555 fullWidth: fullWidth,
4556 active: active,
4557 activator: activator,
4558 preferredPosition: preferredPosition,
4559 preferredAlignment: preferredAlignment,
4560 render: this.renderPopover.bind(this),
4561 fixed: fixed,
4562 onScrollOut: this.handleScrollOut,
4563 classNames: className
4564 });
4565 }
4566 }, {
4567 key: "clearTransitionTimeout",
4568 value: function clearTransitionTimeout() {
4569 if (this.enteringTimer) {
4570 window.clearTimeout(this.enteringTimer);
4571 }
4572
4573 if (this.exitingTimer) {
4574 window.clearTimeout(this.exitingTimer);
4575 }
4576 }
4577 }, {
4578 key: "focusContent",
4579 value: function focusContent() {
4580 var _this3 = this;
4581
4582 if (this.props.preventAutofocus) {
4583 return;
4584 }
4585
4586 if (this.contentNode == null) {
4587 return;
4588 }
4589
4590 fastdom.write(function () {
4591 if (_this3.contentNode.current == null) {
4592 return;
4593 }
4594
4595 _this3.contentNode.current.focus({
4596 preventScroll: process.env.NODE_ENV === 'development'
4597 });
4598 });
4599 }
4600 }]);
4601
4602 return PopoverOverlay;
4603}(React__default.PureComponent);
4604
4605function renderPopoverContent(children, props) {
4606 var childrenArray = React__default.Children.toArray(children);
4607
4608 if (isElementOfType(childrenArray[0], Pane)) {
4609 return childrenArray;
4610 }
4611
4612 return wrapWithComponent(childrenArray, Pane, props);
4613}
4614
4615function setActivatorAttributes(activator, _ref) {
4616 var id = _ref.id,
4617 active = _ref.active,
4618 ariaHaspopup = _ref.ariaHaspopup;
4619 activator.tabIndex = activator.tabIndex || 0;
4620 activator.setAttribute('aria-controls', id);
4621 activator.setAttribute('aria-owns', id);
4622 activator.setAttribute('aria-expanded', String(active));
4623
4624 if (ariaHaspopup != null) {
4625 activator.setAttribute('aria-haspopup', String(ariaHaspopup));
4626 }
4627}
4628
4629// subcomponents so explicitly state the subcomponents in the type definition.
4630// Letting this be implicit works in this project but fails in projects that use
4631// generated *.d.ts files.
4632
4633var Popover = function Popover(_a) {
4634 var _a$activatorWrapper = _a.activatorWrapper,
4635 activatorWrapper = _a$activatorWrapper === void 0 ? 'div' : _a$activatorWrapper,
4636 children = _a.children,
4637 onClose = _a.onClose,
4638 activator = _a.activator,
4639 active = _a.active,
4640 fixed = _a.fixed,
4641 ariaHaspopup = _a.ariaHaspopup,
4642 rest = tslib_1.__rest(_a, ["activatorWrapper", "children", "onClose", "activator", "active", "fixed", "ariaHaspopup"]);
4643
4644 var _useState = React.useState(),
4645 _useState2 = _slicedToArray(_useState, 2),
4646 activatorNode = _useState2[0],
4647 setActivatorNode = _useState2[1];
4648
4649 var activatorContainer = React.useRef(null);
4650 var WrapperComponent = activatorWrapper;
4651 var id = useUniqueId('popover');
4652 var setAccessibilityAttributes = React.useCallback(function () {
4653 if (activatorContainer.current == null) {
4654 return;
4655 }
4656
4657 var firstFocusable = focus.findFirstFocusableNode(activatorContainer.current);
4658 var focusableActivator = firstFocusable || activatorContainer.current;
4659 setActivatorAttributes(focusableActivator, {
4660 id,
4661 active,
4662 ariaHaspopup
4663 });
4664 }, [active, ariaHaspopup, id]);
4665
4666 var handleClose = function handleClose(source) {
4667 onClose(source);
4668
4669 if (activatorContainer.current == null) {
4670 return;
4671 }
4672
4673 if ((source === exports.PopoverCloseSource.FocusOut || source === exports.PopoverCloseSource.EscapeKeypress) && activatorNode) {
4674 var focusableActivator = focus.findFirstFocusableNode(activatorNode) || focus.findFirstFocusableNode(activatorContainer.current) || activatorContainer.current;
4675
4676 if (!focusNextFocusableNode(focusableActivator, isInPortal)) {
4677 focusableActivator.focus();
4678 }
4679 }
4680 };
4681
4682 React.useEffect(function () {
4683 if (!activatorNode && activatorContainer.current) {
4684 setActivatorNode(activatorContainer.current.firstElementChild);
4685 } else if (activatorNode && activatorContainer.current && !activatorContainer.current.contains(activatorNode)) {
4686 setActivatorNode(activatorContainer.current.firstElementChild);
4687 }
4688
4689 setAccessibilityAttributes();
4690 }, [activatorNode, setAccessibilityAttributes]);
4691 React.useEffect(function () {
4692 if (activatorNode && activatorContainer.current) {
4693 setActivatorNode(activatorContainer.current.firstElementChild);
4694 }
4695
4696 setAccessibilityAttributes();
4697 }, [activatorNode, setAccessibilityAttributes]);
4698 var portal = activatorNode ? React__default.createElement(Portal, {
4699 idPrefix: "popover"
4700 }, React__default.createElement(PopoverOverlay, Object.assign({
4701 id: id,
4702 activator: activatorNode,
4703 onClose: handleClose,
4704 active: active,
4705 fixed: fixed
4706 }, rest), children)) : null;
4707 return React__default.createElement(WrapperComponent, {
4708 ref: activatorContainer
4709 }, React__default.Children.only(activator), portal);
4710};
4711
4712function isInPortal(element) {
4713 var parentElement = element.parentElement;
4714
4715 while (parentElement) {
4716 if (parentElement.matches(portal.selector)) return false;
4717 parentElement = parentElement.parentElement;
4718 }
4719
4720 return true;
4721}
4722
4723Popover.Pane = Pane;
4724Popover.Section = Section$1;
4725
4726var styles$c = {
4727 "Stack": "Polaris-Stack",
4728 "Item": "Polaris-Stack__Item",
4729 "noWrap": "Polaris-Stack--noWrap",
4730 "spacingNone": "Polaris-Stack--spacingNone",
4731 "spacingExtraTight": "Polaris-Stack--spacingExtraTight",
4732 "spacingTight": "Polaris-Stack--spacingTight",
4733 "spacingLoose": "Polaris-Stack--spacingLoose",
4734 "spacingExtraLoose": "Polaris-Stack--spacingExtraLoose",
4735 "distributionLeading": "Polaris-Stack--distributionLeading",
4736 "distributionTrailing": "Polaris-Stack--distributionTrailing",
4737 "distributionCenter": "Polaris-Stack--distributionCenter",
4738 "distributionEqualSpacing": "Polaris-Stack--distributionEqualSpacing",
4739 "distributionFill": "Polaris-Stack--distributionFill",
4740 "distributionFillEvenly": "Polaris-Stack--distributionFillEvenly",
4741 "alignmentLeading": "Polaris-Stack--alignmentLeading",
4742 "alignmentTrailing": "Polaris-Stack--alignmentTrailing",
4743 "alignmentCenter": "Polaris-Stack--alignmentCenter",
4744 "alignmentFill": "Polaris-Stack--alignmentFill",
4745 "alignmentBaseline": "Polaris-Stack--alignmentBaseline",
4746 "vertical": "Polaris-Stack--vertical",
4747 "Item-fill": "Polaris-Stack__Item--fill"
4748};
4749
4750function Item$2(_ref) {
4751 var children = _ref.children,
4752 fill = _ref.fill;
4753 var className = classNames(styles$c.Item, fill && styles$c['Item-fill']);
4754 return React__default.createElement("div", {
4755 className: className
4756 }, children);
4757}
4758
4759var Stack =
4760/*#__PURE__*/
4761function (_React$PureComponent) {
4762 _inherits(Stack, _React$PureComponent);
4763
4764 function Stack() {
4765 _classCallCheck(this, Stack);
4766
4767 return _possibleConstructorReturn(this, _getPrototypeOf(Stack).apply(this, arguments));
4768 }
4769
4770 _createClass(Stack, [{
4771 key: "render",
4772 value: function render() {
4773 var _this$props = this.props,
4774 children = _this$props.children,
4775 vertical = _this$props.vertical,
4776 spacing = _this$props.spacing,
4777 distribution = _this$props.distribution,
4778 alignment = _this$props.alignment,
4779 wrap = _this$props.wrap;
4780 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);
4781 var itemMarkup = elementChildren(children).map(function (child, index) {
4782 var props = {
4783 key: index
4784 };
4785 return wrapWithComponent(child, Item$2, props);
4786 });
4787 return React__default.createElement("div", {
4788 className: className
4789 }, itemMarkup);
4790 }
4791 }]);
4792
4793 return Stack;
4794}(React__default.PureComponent);
4795Stack.Item = Item$2;
4796
4797var styles$d = {
4798 "Heading": "Polaris-Heading"
4799};
4800
4801function Heading(_ref) {
4802 var _ref$element = _ref.element,
4803 Element = _ref$element === void 0 ? 'h2' : _ref$element,
4804 children = _ref.children;
4805 return React__default.createElement(Element, {
4806 className: styles$d.Heading
4807 }, children);
4808}
4809
4810var styles$e = {
4811 "Card": "Polaris-Card",
4812 "subdued": "Polaris-Card--subdued",
4813 "Header": "Polaris-Card__Header",
4814 "Section": "Polaris-Card__Section",
4815 "Section-fullWidth": "Polaris-Card__Section--fullWidth",
4816 "Section-subdued": "Polaris-Card__Section--subdued",
4817 "SectionHeader": "Polaris-Card__SectionHeader",
4818 "Subsection": "Polaris-Card__Subsection",
4819 "Footer": "Polaris-Card__Footer",
4820 "LeftJustified": "Polaris-Card__LeftJustified"
4821};
4822
4823function Header(_ref) {
4824 var children = _ref.children,
4825 title = _ref.title,
4826 actions = _ref.actions;
4827 var actionMarkup = actions ? React__default.createElement(ButtonGroup, null, buttonsFrom(actions, {
4828 plain: true
4829 })) : null;
4830 var titleMarkup = React__default.isValidElement(title) ? title : React__default.createElement(Heading, null, title);
4831 var headingMarkup = actionMarkup || children ? React__default.createElement(Stack, {
4832 alignment: "baseline"
4833 }, React__default.createElement(Stack.Item, {
4834 fill: true
4835 }, titleMarkup), actionMarkup, children) : titleMarkup;
4836 return React__default.createElement("div", {
4837 className: styles$e.Header
4838 }, headingMarkup);
4839}
4840
4841var styles$f = {
4842 "Subheading": "Polaris-Subheading"
4843};
4844
4845function Subheading(_ref) {
4846 var _ref$element = _ref.element,
4847 Element = _ref$element === void 0 ? 'h3' : _ref$element,
4848 children = _ref.children;
4849 var ariaLabel = typeof children === 'string' ? children : undefined;
4850 return React__default.createElement(Element, {
4851 "aria-label": ariaLabel,
4852 className: styles$f.Subheading
4853 }, children);
4854}
4855
4856function Section$2(_ref) {
4857 var children = _ref.children,
4858 title = _ref.title,
4859 subdued = _ref.subdued,
4860 fullWidth = _ref.fullWidth,
4861 actions = _ref.actions;
4862 var className = classNames(styles$e.Section, subdued && styles$e['Section-subdued'], fullWidth && styles$e['Section-fullWidth']);
4863 var actionMarkup = actions ? React__default.createElement(ButtonGroup, null, buttonsFrom(actions, {
4864 plain: true
4865 })) : null;
4866 var titleMarkup = typeof title === 'string' ? React__default.createElement(Subheading, null, title) : title;
4867 var titleAreaMarkup = titleMarkup || actionMarkup ? React__default.createElement("div", {
4868 className: styles$e.SectionHeader
4869 }, actionMarkup ? React__default.createElement(Stack, {
4870 alignment: "baseline"
4871 }, React__default.createElement(Stack.Item, {
4872 fill: true
4873 }, titleMarkup), actionMarkup) : titleMarkup) : null;
4874 return React__default.createElement("div", {
4875 className: className
4876 }, titleAreaMarkup, children);
4877}
4878
4879function Subsection(_ref) {
4880 var children = _ref.children;
4881 return React__default.createElement("div", {
4882 className: styles$e.Subsection
4883 }, children);
4884}
4885
4886// subcomponents so explicitly state the subcomponents in the type definition.
4887// Letting this be implicit works in this project but fails in projects that use
4888// generated *.d.ts files.
4889
4890var Card = function Card(_ref) {
4891 var children = _ref.children,
4892 title = _ref.title,
4893 subdued = _ref.subdued,
4894 sectioned = _ref.sectioned,
4895 actions = _ref.actions,
4896 primaryFooterAction = _ref.primaryFooterAction,
4897 secondaryFooterActions = _ref.secondaryFooterActions,
4898 secondaryFooterActionsDisclosureText = _ref.secondaryFooterActionsDisclosureText,
4899 _ref$footerActionAlig = _ref.footerActionAlignment,
4900 footerActionAlignment = _ref$footerActionAlig === void 0 ? 'right' : _ref$footerActionAlig;
4901 var i18n = useI18n();
4902
4903 var _useToggle = useToggle(false),
4904 _useToggle2 = _slicedToArray(_useToggle, 2),
4905 secondaryActionsPopoverOpen = _useToggle2[0],
4906 toggleSecondaryActionsPopoverOpen = _useToggle2[1];
4907
4908 var className = classNames(styles$e.Card, subdued && styles$e.subdued);
4909 var headerMarkup = title || actions ? React__default.createElement(Header, {
4910 actions: actions,
4911 title: title
4912 }) : null;
4913 var content = sectioned ? React__default.createElement(Section$2, null, children) : children;
4914 var primaryFooterActionMarkup = primaryFooterAction ? buttonFrom(primaryFooterAction, {
4915 primary: true
4916 }) : null;
4917 var secondaryFooterActionsMarkup = null;
4918
4919 if (secondaryFooterActions && secondaryFooterActions.length) {
4920 if (secondaryFooterActions.length === 1) {
4921 secondaryFooterActionsMarkup = buttonFrom(secondaryFooterActions[0]);
4922 } else {
4923 secondaryFooterActionsMarkup = React__default.createElement(React__default.Fragment, null, React__default.createElement(Popover, {
4924 active: secondaryActionsPopoverOpen,
4925 activator: React__default.createElement(Button, {
4926 disclosure: true,
4927 onClick: toggleSecondaryActionsPopoverOpen
4928 }, secondaryFooterActionsDisclosureText || i18n.translate('Polaris.Common.more')),
4929 onClose: toggleSecondaryActionsPopoverOpen
4930 }, React__default.createElement(ActionList, {
4931 items: secondaryFooterActions
4932 })));
4933 }
4934 }
4935
4936 var footerMarkup = primaryFooterActionMarkup || secondaryFooterActionsMarkup ? React__default.createElement("div", {
4937 className: classNames(styles$e.Footer, footerActionAlignment === 'left' && styles$e.LeftJustified)
4938 }, footerActionAlignment === 'right' ? React__default.createElement(ButtonGroup, null, secondaryFooterActionsMarkup, primaryFooterActionMarkup) : React__default.createElement(ButtonGroup, null, primaryFooterActionMarkup, secondaryFooterActionsMarkup)) : null;
4939 return React__default.createElement(WithinContentContext.Provider, {
4940 value: true
4941 }, React__default.createElement("div", {
4942 className: className
4943 }, headerMarkup, content, footerMarkup));
4944};
4945Card.Header = Header;
4946Card.Section = Section$2;
4947Card.Subsection = Subsection;
4948
4949var styles$g = {
4950 "SettingAction": "Polaris-SettingAction",
4951 "Setting": "Polaris-SettingAction__Setting",
4952 "Action": "Polaris-SettingAction__Action"
4953};
4954
4955function SettingAction(_ref) {
4956 var action = _ref.action,
4957 children = _ref.children;
4958 return React__default.createElement("div", {
4959 className: styles$g.SettingAction
4960 }, React__default.createElement("div", {
4961 className: styles$g.Setting
4962 }, children), React__default.createElement("div", {
4963 className: styles$g.Action
4964 }, action));
4965}
4966
4967var styles$h = {
4968 "TermsOfService": "Polaris-AccountConnection__TermsOfService",
4969 "Content": "Polaris-AccountConnection__Content"
4970};
4971
4972function AccountConnection(_ref) {
4973 var _ref$connected = _ref.connected,
4974 connected = _ref$connected === void 0 ? false : _ref$connected,
4975 action = _ref.action,
4976 avatarUrl = _ref.avatarUrl,
4977 _ref$accountName = _ref.accountName,
4978 accountName = _ref$accountName === void 0 ? '' : _ref$accountName,
4979 title = _ref.title,
4980 details = _ref.details,
4981 termsOfService = _ref.termsOfService;
4982 var initials = accountName ? accountName.split(/\s+/).map(function (name) {
4983 return name[0];
4984 }).join('') : undefined;
4985 var avatarMarkup = connected ? React__default.createElement(Avatar, {
4986 accessibilityLabel: "",
4987 name: accountName,
4988 initials: initials,
4989 source: avatarUrl
4990 }) : null;
4991 var titleMarkup = null;
4992
4993 if (title) {
4994 titleMarkup = React__default.createElement("div", null, title);
4995 } else if (accountName) {
4996 titleMarkup = React__default.createElement("div", null, accountName);
4997 }
4998
4999 var detailsMarkup = details ? React__default.createElement("div", null, React__default.createElement(TextStyle, {
5000 variation: "subdued"
5001 }, details)) : null;
5002 var termsOfServiceMarkup = termsOfService ? React__default.createElement("div", {
5003 className: styles$h.TermsOfService
5004 }, termsOfService) : null;
5005 var actionElement = action ? buttonFrom(action, {
5006 primary: !connected
5007 }) : null;
5008 return React__default.createElement(Card, {
5009 sectioned: true
5010 }, React__default.createElement(SettingAction, {
5011 action: actionElement
5012 }, React__default.createElement(Stack, null, avatarMarkup, React__default.createElement(Stack.Item, {
5013 fill: true
5014 }, React__default.createElement("div", {
5015 className: styles$h.Content
5016 }, titleMarkup, detailsMarkup)))), termsOfServiceMarkup);
5017}
5018
5019var styles$i = {
5020 "MenuAction": "Polaris-ActionMenu-MenuAction",
5021 "IconWrapper": "Polaris-ActionMenu-MenuAction__IconWrapper",
5022 "disabled": "Polaris-ActionMenu-MenuAction--disabled",
5023 "ContentWrapper": "Polaris-ActionMenu-MenuAction__ContentWrapper"
5024};
5025
5026function MenuAction(_ref) {
5027 var content = _ref.content,
5028 accessibilityLabel = _ref.accessibilityLabel,
5029 url = _ref.url,
5030 external = _ref.external,
5031 icon = _ref.icon,
5032 disclosure = _ref.disclosure,
5033 disabled = _ref.disabled,
5034 onAction = _ref.onAction;
5035 var iconMarkup = icon && React__default.createElement("span", {
5036 className: styles$i.IconWrapper
5037 }, React__default.createElement(Icon, {
5038 source: icon
5039 }));
5040 var disclosureIconMarkup = disclosure && React__default.createElement("span", {
5041 className: styles$i.IconWrapper
5042 }, React__default.createElement(Icon, {
5043 source: polarisIcons.CaretDownMinor
5044 }));
5045 var contentMarkup = iconMarkup || disclosureIconMarkup ? React__default.createElement("span", {
5046 className: styles$i.ContentWrapper
5047 }, iconMarkup, React__default.createElement("span", {
5048 className: styles$i.Content
5049 }, content), disclosureIconMarkup) : content;
5050 var menuActionClassNames = classNames(styles$i.MenuAction, disabled && styles$i.disabled);
5051
5052 if (url) {
5053 return React__default.createElement(UnstyledLink, {
5054 className: menuActionClassNames,
5055 url: url,
5056 external: external,
5057 "aria-label": accessibilityLabel,
5058 onMouseUp: handleMouseUpByBlurring
5059 }, contentMarkup);
5060 }
5061
5062 return React__default.createElement("button", {
5063 type: "button",
5064 className: menuActionClassNames,
5065 disabled: disabled,
5066 "aria-label": accessibilityLabel,
5067 onClick: onAction,
5068 onMouseUp: handleMouseUpByBlurring
5069 }, contentMarkup);
5070}
5071
5072var styles$j = {
5073 "Details": "Polaris-ActionMenu-MenuGroup__Details"
5074};
5075
5076var MenuGroup =
5077/*#__PURE__*/
5078function (_React$Component) {
5079 _inherits(MenuGroup, _React$Component);
5080
5081 function MenuGroup() {
5082 var _this;
5083
5084 _classCallCheck(this, MenuGroup);
5085
5086 _this = _possibleConstructorReturn(this, _getPrototypeOf(MenuGroup).apply(this, arguments));
5087
5088 _this.handleClose = function () {
5089 var _this$props = _this.props,
5090 title = _this$props.title,
5091 onClose = _this$props.onClose;
5092 onClose(title);
5093 };
5094
5095 _this.handleOpen = function () {
5096 var _this$props2 = _this.props,
5097 title = _this$props2.title,
5098 onOpen = _this$props2.onOpen;
5099 onOpen(title);
5100 };
5101
5102 return _this;
5103 }
5104
5105 _createClass(MenuGroup, [{
5106 key: "render",
5107 value: function render() {
5108 var _this$props3 = this.props,
5109 accessibilityLabel = _this$props3.accessibilityLabel,
5110 active = _this$props3.active,
5111 actions = _this$props3.actions,
5112 details = _this$props3.details,
5113 title = _this$props3.title,
5114 icon = _this$props3.icon;
5115
5116 if (!actions.length) {
5117 return null;
5118 }
5119
5120 var popoverActivator = React__default.createElement(MenuAction, {
5121 disclosure: true,
5122 content: title,
5123 icon: icon,
5124 accessibilityLabel: accessibilityLabel,
5125 onAction: this.handleOpen
5126 });
5127 return React__default.createElement(Popover, {
5128 active: Boolean(active),
5129 activator: popoverActivator,
5130 preferredAlignment: "left",
5131 onClose: this.handleClose
5132 }, React__default.createElement(ActionList, {
5133 items: actions,
5134 onActionAnyItem: this.handleClose
5135 }), details && React__default.createElement("div", {
5136 className: styles$j.Details
5137 }, details));
5138 }
5139 }]);
5140
5141 return MenuGroup;
5142}(React__default.Component);
5143
5144var styles$k = {
5145 "RollupActivator": "Polaris-ActionMenu-RollupActions__RollupActivator"
5146};
5147
5148function RollupActions(_ref) {
5149 var _ref$items = _ref.items,
5150 items = _ref$items === void 0 ? [] : _ref$items,
5151 _ref$sections = _ref.sections,
5152 sections = _ref$sections === void 0 ? [] : _ref$sections;
5153 var i18n = useI18n();
5154
5155 var _useToggle = useToggle(false),
5156 _useToggle2 = _slicedToArray(_useToggle, 2),
5157 rollupOpen = _useToggle2[0],
5158 toggleRollupOpen = _useToggle2[1];
5159
5160 if (items.length === 0 && sections.length === 0) {
5161 return null;
5162 }
5163
5164 var activatorMarkup = React__default.createElement("div", {
5165 className: styles$k.RollupActivator
5166 }, React__default.createElement(Button, {
5167 plain: true,
5168 icon: polarisIcons.HorizontalDotsMinor,
5169 accessibilityLabel: i18n.translate('Polaris.ActionMenu.RollupActions.rollupButton'),
5170 onClick: toggleRollupOpen
5171 }));
5172 return React__default.createElement(Popover, {
5173 active: rollupOpen,
5174 activator: activatorMarkup,
5175 preferredAlignment: "right",
5176 onClose: toggleRollupOpen
5177 }, React__default.createElement(ActionList, {
5178 items: items,
5179 sections: sections,
5180 onActionAnyItem: toggleRollupOpen
5181 }));
5182}
5183
5184var styles$l = {
5185 "ActionMenu": "Polaris-ActionMenu",
5186 "rollup": "Polaris-ActionMenu--rollup",
5187 "ActionsLayout": "Polaris-ActionMenu__ActionsLayout"
5188};
5189
5190var ActionMenu =
5191/*#__PURE__*/
5192function (_React$PureComponent) {
5193 _inherits(ActionMenu, _React$PureComponent);
5194
5195 function ActionMenu() {
5196 var _this;
5197
5198 _classCallCheck(this, ActionMenu);
5199
5200 _this = _possibleConstructorReturn(this, _getPrototypeOf(ActionMenu).apply(this, arguments));
5201 _this.state = {
5202 activeMenuGroup: undefined
5203 };
5204
5205 _this.renderActions = function () {
5206 var _this$props = _this.props,
5207 _this$props$actions = _this$props.actions,
5208 actions = _this$props$actions === void 0 ? [] : _this$props$actions,
5209 _this$props$groups = _this$props.groups,
5210 groups = _this$props$groups === void 0 ? [] : _this$props$groups;
5211 var activeMenuGroup = _this.state.activeMenuGroup;
5212 var actionsMarkup = actions.length > 0 ? actions.map(function (_a, index) {
5213 var content = _a.content,
5214 action = tslib_1.__rest(_a, ["content"]);
5215
5216 return React__default.createElement(MenuAction, Object.assign({
5217 key: "MenuAction-".concat(content || index),
5218 content: content
5219 }, action));
5220 }) : null;
5221 var groupsMarkup = hasGroupsWithActions(groups) ? groups.map(function (_a, index) {
5222 var title = _a.title,
5223 rest = tslib_1.__rest(_a, ["title"]);
5224
5225 return React__default.createElement(MenuGroup, Object.assign({
5226 key: "MenuGroup-".concat(title || index),
5227 title: title,
5228 active: title === activeMenuGroup
5229 }, rest, {
5230 onOpen: _this.handleMenuGroupToggle,
5231 onClose: _this.handleMenuGroupClose
5232 }));
5233 }) : null;
5234 return actionsMarkup || groupsMarkup ? React__default.createElement("div", {
5235 className: styles$l.ActionsLayout
5236 }, actionsMarkup, groupsMarkup) : null;
5237 };
5238
5239 _this.handleMenuGroupToggle = function (group) {
5240 _this.setState(function (_ref) {
5241 var activeMenuGroup = _ref.activeMenuGroup;
5242 return {
5243 activeMenuGroup: activeMenuGroup ? undefined : group
5244 };
5245 });
5246 };
5247
5248 _this.handleMenuGroupClose = function () {
5249 _this.setState({
5250 activeMenuGroup: undefined
5251 });
5252 };
5253
5254 return _this;
5255 }
5256
5257 _createClass(ActionMenu, [{
5258 key: "render",
5259 value: function render() {
5260 var _this$props2 = this.props,
5261 _this$props2$actions = _this$props2.actions,
5262 actions = _this$props2$actions === void 0 ? [] : _this$props2$actions,
5263 _this$props2$groups = _this$props2.groups,
5264 groups = _this$props2$groups === void 0 ? [] : _this$props2$groups,
5265 rollup = _this$props2.rollup;
5266
5267 if (actions.length === 0 && groups.length === 0) {
5268 return null;
5269 }
5270
5271 var actionMenuClassNames = classNames(styles$l.ActionMenu, rollup && styles$l.rollup);
5272 var rollupSections = groups.map(function (group) {
5273 return convertGroupToSection(group);
5274 });
5275 return React__default.createElement("div", {
5276 className: actionMenuClassNames
5277 }, rollup ? React__default.createElement(RollupActions, {
5278 items: actions,
5279 sections: rollupSections
5280 }) : this.renderActions());
5281 }
5282 }]);
5283
5284 return ActionMenu;
5285}(React__default.PureComponent);
5286function hasGroupsWithActions() {
5287 var groups = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
5288 return groups.length === 0 ? false : groups.some(function (group) {
5289 return group.actions.length > 0;
5290 });
5291}
5292function convertGroupToSection(_ref2) {
5293 var title = _ref2.title,
5294 actions = _ref2.actions;
5295 return {
5296 title,
5297 items: actions
5298 };
5299}
5300
5301function ThemeProvider(_ref) {
5302 var themeConfig = _ref.theme,
5303 children = _ref.children;
5304
5305 var _useFeatures = useFeatures(),
5306 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
5307 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
5308
5309 var customProperties = React.useMemo(function () {
5310 return buildCustomProperties(themeConfig, unstableGlobalTheming);
5311 }, [unstableGlobalTheming, themeConfig]);
5312 var theme = React.useMemo(function () {
5313 return buildThemeContext(themeConfig, unstableGlobalTheming ? customProperties : undefined);
5314 }, [customProperties, themeConfig, unstableGlobalTheming]); // We want these values to be `null` instead of `undefined` when not set.
5315 // Otherwise, setting a style property to `undefined` does not remove it from the DOM.
5316
5317 var backgroundColor = customProperties['--p-surface-background'] || null;
5318 var color = customProperties['--p-text-on-surface'] || null;
5319 React.useEffect(function () {
5320 document.body.style.backgroundColor = backgroundColor;
5321 document.body.style.color = color;
5322 }, [backgroundColor, color]);
5323 return React__default.createElement(ThemeContext.Provider, {
5324 value: theme
5325 }, React__default.createElement("div", {
5326 style: customProperties
5327 }, children));
5328}
5329
5330var MediaQueryContext = React__default.createContext(undefined);
5331
5332function useMediaQuery() {
5333 var mediaQuery = React.useContext(MediaQueryContext);
5334
5335 if (!mediaQuery) {
5336 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.');
5337 }
5338
5339 return mediaQuery;
5340}
5341
5342var MediaQueryProvider = function MediaQueryProvider(_ref) {
5343 var children = _ref.children;
5344
5345 var _useState = React.useState(navigationBarCollapsed().matches),
5346 _useState2 = _slicedToArray(_useState, 2),
5347 isNavigationCollapsed = _useState2[0],
5348 setIsNavigationCollapsed = _useState2[1];
5349
5350 var handleResize = React.useCallback(debounce(function () {
5351 if (isNavigationCollapsed !== navigationBarCollapsed().matches) {
5352 setIsNavigationCollapsed(!isNavigationCollapsed);
5353 }
5354 }, 40, {
5355 trailing: true,
5356 leading: true,
5357 maxWait: 40
5358 }), [isNavigationCollapsed]);
5359 React.useEffect(function () {
5360 setIsNavigationCollapsed(navigationBarCollapsed().matches);
5361 }, []);
5362 return React__default.createElement(MediaQueryContext.Provider, {
5363 value: {
5364 isNavigationCollapsed
5365 }
5366 }, React__default.createElement(EventListener, {
5367 event: "resize",
5368 handler: handleResize
5369 }), children);
5370};
5371
5372var ScrollLockManagerContext = React__default.createContext(undefined);
5373
5374function useScrollLockManager() {
5375 var scrollLockManager = React.useContext(ScrollLockManagerContext);
5376
5377 if (!scrollLockManager) {
5378 throw new MissingAppProviderError('No ScrollLockManager was provided.');
5379 }
5380
5381 return scrollLockManager;
5382}
5383
5384var SCROLL_LOCKING_ATTRIBUTE = 'data-lock-scrolling';
5385var SCROLL_LOCKING_WRAPPER_ATTRIBUTE = 'data-lock-scrolling-wrapper';
5386var scrollPosition = 0;
5387var ScrollLockManager =
5388/*#__PURE__*/
5389function () {
5390 function ScrollLockManager() {
5391 _classCallCheck(this, ScrollLockManager);
5392
5393 this.scrollLocks = 0;
5394 this.locked = false;
5395 }
5396
5397 _createClass(ScrollLockManager, [{
5398 key: "registerScrollLock",
5399 value: function registerScrollLock() {
5400 this.scrollLocks += 1;
5401 this.handleScrollLocking();
5402 }
5403 }, {
5404 key: "unregisterScrollLock",
5405 value: function unregisterScrollLock() {
5406 this.scrollLocks -= 1;
5407 this.handleScrollLocking();
5408 }
5409 }, {
5410 key: "handleScrollLocking",
5411 value: function handleScrollLocking() {
5412 if (isServer) return;
5413 var scrollLocks = this.scrollLocks;
5414 var _document = document,
5415 body = _document.body;
5416 var wrapper = body.firstElementChild;
5417
5418 if (scrollLocks === 0) {
5419 body.removeAttribute(SCROLL_LOCKING_ATTRIBUTE);
5420
5421 if (wrapper) {
5422 wrapper.removeAttribute(SCROLL_LOCKING_WRAPPER_ATTRIBUTE);
5423 }
5424
5425 window.scroll(0, scrollPosition);
5426 this.locked = false;
5427 } else if (scrollLocks > 0 && !this.locked) {
5428 scrollPosition = window.pageYOffset;
5429 body.setAttribute(SCROLL_LOCKING_ATTRIBUTE, '');
5430
5431 if (wrapper) {
5432 wrapper.setAttribute(SCROLL_LOCKING_WRAPPER_ATTRIBUTE, '');
5433 wrapper.scrollTop = scrollPosition;
5434 }
5435
5436 this.locked = true;
5437 }
5438 }
5439 }, {
5440 key: "resetScrollPosition",
5441 value: function resetScrollPosition() {
5442 scrollPosition = 0;
5443 }
5444 }]);
5445
5446 return ScrollLockManager;
5447}();
5448
5449var AppBridgeContext = React__default.createContext(undefined);
5450
5451function useAppBridge() {
5452 return React.useContext(AppBridgeContext);
5453}
5454
5455function createAppBridge(_ref) {
5456 var apiKey = _ref.apiKey,
5457 shopOrigin = _ref.shopOrigin,
5458 forceRedirect = _ref.forceRedirect;
5459 var appBridge = apiKey ? createApp__default({
5460 apiKey,
5461 shopOrigin: shopOrigin || createApp.getShopOrigin(),
5462 forceRedirect
5463 }) : undefined;
5464
5465 if (appBridge !== undefined) {
5466 // eslint-disable-next-line no-console
5467 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');
5468 }
5469
5470 if (appBridge && appBridge.hooks) {
5471 appBridge.hooks.set(createApp.LifecycleHook.DispatchAction, setClientInterfaceHook);
5472 }
5473
5474 return appBridge;
5475}
5476var setClientInterfaceHook = function setClientInterfaceHook(next) {
5477 return function (action) {
5478 action.clientInterface = {
5479 name: '@shopify/polaris',
5480 version: polarisVersion
5481 };
5482 return next(action);
5483 };
5484};
5485
5486var AppProvider =
5487/*#__PURE__*/
5488function (_React$Component) {
5489 _inherits(AppProvider, _React$Component);
5490
5491 function AppProvider(props) {
5492 var _this;
5493
5494 _classCallCheck(this, AppProvider);
5495
5496 _this = _possibleConstructorReturn(this, _getPrototypeOf(AppProvider).call(this, props));
5497 _this.stickyManager = new StickyManager();
5498 _this.scrollLockManager = new ScrollLockManager();
5499 _this.uniqueIdFactory = new UniqueIdFactory(globalIdGeneratorFactory);
5500 var _this$props = _this.props,
5501 i18n = _this$props.i18n,
5502 apiKey = _this$props.apiKey,
5503 shopOrigin = _this$props.shopOrigin,
5504 forceRedirect = _this$props.forceRedirect,
5505 linkComponent = _this$props.linkComponent; // eslint-disable-next-line react/state-in-constructor
5506
5507 _this.state = {
5508 link: linkComponent,
5509 intl: new I18n(i18n),
5510 appBridge: createAppBridge({
5511 shopOrigin,
5512 apiKey,
5513 forceRedirect
5514 })
5515 };
5516 return _this;
5517 }
5518
5519 _createClass(AppProvider, [{
5520 key: "componentDidMount",
5521 value: function componentDidMount() {
5522 if (document != null) {
5523 this.stickyManager.setContainer(document);
5524 }
5525 }
5526 }, {
5527 key: "componentDidUpdate",
5528 value: function componentDidUpdate(_ref) {
5529 var prevI18n = _ref.i18n,
5530 prevLinkComponent = _ref.linkComponent,
5531 prevApiKey = _ref.apiKey,
5532 prevShopOrigin = _ref.shopOrigin,
5533 prevForceRedirect = _ref.forceRedirect;
5534 var _this$props2 = this.props,
5535 i18n = _this$props2.i18n,
5536 linkComponent = _this$props2.linkComponent,
5537 apiKey = _this$props2.apiKey,
5538 shopOrigin = _this$props2.shopOrigin,
5539 forceRedirect = _this$props2.forceRedirect;
5540
5541 if (i18n === prevI18n && linkComponent === prevLinkComponent && apiKey === prevApiKey && shopOrigin === prevShopOrigin && forceRedirect === prevForceRedirect) {
5542 return;
5543 } // eslint-disable-next-line react/no-did-update-set-state
5544
5545
5546 this.setState({
5547 link: linkComponent,
5548 intl: new I18n(i18n),
5549 appBridge: createAppBridge({
5550 shopOrigin,
5551 apiKey,
5552 forceRedirect
5553 })
5554 });
5555 }
5556 }, {
5557 key: "render",
5558 value: function render() {
5559 var _this$props3 = this.props,
5560 _this$props3$theme = _this$props3.theme,
5561 theme = _this$props3$theme === void 0 ? {} : _this$props3$theme,
5562 _this$props3$features = _this$props3.features,
5563 features = _this$props3$features === void 0 ? {} : _this$props3$features,
5564 UNSTABLE_telemetry = _this$props3.UNSTABLE_telemetry,
5565 children = _this$props3.children;
5566 var _this$state = this.state,
5567 intl = _this$state.intl,
5568 appBridge = _this$state.appBridge,
5569 link = _this$state.link;
5570 return React__default.createElement(FeaturesContext.Provider, {
5571 value: features
5572 }, React__default.createElement(I18nContext.Provider, {
5573 value: intl
5574 }, React__default.createElement(ScrollLockManagerContext.Provider, {
5575 value: this.scrollLockManager
5576 }, React__default.createElement(StickyManagerContext.Provider, {
5577 value: this.stickyManager
5578 }, React__default.createElement(UniqueIdFactoryContext.Provider, {
5579 value: this.uniqueIdFactory
5580 }, React__default.createElement(AppBridgeContext.Provider, {
5581 value: appBridge
5582 }, React__default.createElement(LinkContext.Provider, {
5583 value: link
5584 }, React__default.createElement(ThemeProvider, {
5585 theme: theme
5586 }, React__default.createElement(TelemetryContext.Provider, {
5587 value: UNSTABLE_telemetry
5588 }, React__default.createElement(MediaQueryProvider, null, children))))))))));
5589 }
5590 }]);
5591
5592 return AppProvider;
5593}(React__default.Component);
5594
5595function arraysAreEqual(firstArray, secondArray, comparator) {
5596 if (firstArray.length !== secondArray.length) {
5597 return false;
5598 }
5599
5600 return firstArray.every(function (firstItem, index) {
5601 var secondItem = secondArray[index];
5602
5603 if (comparator != null) {
5604 return comparator(firstItem, secondItem);
5605 }
5606
5607 return firstItem === secondItem;
5608 });
5609}
5610
5611/**
5612 * Allows for custom or deep comparison of a dependency list. Useful to keep a consistent dependency
5613 * list across reference changes.
5614 * @param dependencies A dependency array similar to React.useEffect/React.useCallback/React.useMemo
5615 * @param comparator An optional function to compare dependencies that'll default to a deep comparison
5616 * @returns A dependency list
5617 * @see {@link https://github.com/Shopify/polaris-react/blob/master/src/utilities/use-deep-effect.tsx}
5618 * @see {@link https://github.com/Shopify/polaris-react/blob/master/src/utilities/use-deep-callback.tsx}
5619 * @example
5620 * function useDeepEffectExample(callback, dependencies, customCompare) {
5621 * useEffect(callback, useDeepCompareRef(dependencies, customCompare));
5622 * }
5623 */
5624
5625function useDeepCompareRef(dependencies) {
5626 var comparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : isEqual;
5627 var dependencyList = React.useRef(dependencies);
5628
5629 if (!comparator(dependencyList.current, dependencies)) {
5630 dependencyList.current = dependencies;
5631 }
5632
5633 return dependencyList.current;
5634}
5635
5636/**
5637 * A replacement for React.useEffect that'll allow for custom and deep
5638 * compares of the dependency list.
5639 * @see {@link https://reactjs.org/docs/hooks-reference.html#useeffect}
5640 * @param callback Accepts a callback that's forwarded to React.useEffect
5641 * @param dependencies A dependency array similar to React.useEffect however it utilizes a deep compare
5642 * @param customCompare Opportunity to provide a custom compare function
5643 * @example
5644 * function ComponentExample() {
5645 * const [, forceUpdate] = useState();
5646 * const obj = {a: 1};
5647 *
5648 * useDeepEffect(() => {
5649 * console.log('useDeepEffect invocation');
5650 * forceUpdate(obj);
5651 * }, [obj]);
5652 *
5653 * return null;
5654 * }
5655 */
5656
5657function useDeepEffect(callback, dependencies, customCompare) {
5658 React.useEffect(callback, useDeepCompareRef(dependencies, customCompare));
5659}
5660
5661var styles$m = {
5662 "Checkbox": "Polaris-OptionList-Checkbox",
5663 "Input": "Polaris-OptionList-Checkbox__Input",
5664 "Backdrop": "Polaris-OptionList-Checkbox__Backdrop",
5665 "Icon": "Polaris-OptionList-Checkbox__Icon",
5666 "active": "Polaris-OptionList-Checkbox--active"
5667};
5668
5669function Checkbox(_ref) {
5670 var idProp = _ref.id,
5671 _ref$checked = _ref.checked,
5672 checked = _ref$checked === void 0 ? false : _ref$checked,
5673 disabled = _ref.disabled,
5674 active = _ref.active,
5675 onChange = _ref.onChange,
5676 name = _ref.name,
5677 value = _ref.value,
5678 role = _ref.role;
5679 var id = useUniqueId('Checkbox', idProp);
5680 var className = classNames(styles$m.Checkbox, active && styles$m.active);
5681 return React__default.createElement("div", {
5682 className: className
5683 }, React__default.createElement("input", {
5684 id: id,
5685 name: name,
5686 value: value,
5687 type: "checkbox",
5688 checked: checked,
5689 disabled: disabled,
5690 className: styles$m.Input,
5691 "aria-checked": checked,
5692 onChange: onChange,
5693 role: role
5694 }), React__default.createElement("div", {
5695 className: styles$m.Backdrop
5696 }), React__default.createElement("div", {
5697 className: styles$m.Icon
5698 }, React__default.createElement(Icon, {
5699 source: polarisIcons.TickSmallMinor
5700 })));
5701}
5702
5703var styles$n = {
5704 "Option": "Polaris-OptionList-Option",
5705 "SingleSelectOption": "Polaris-OptionList-Option__SingleSelectOption",
5706 "disabled": "Polaris-OptionList-Option--disabled",
5707 "Media": "Polaris-OptionList-Option__Media",
5708 "Label": "Polaris-OptionList-Option__Label",
5709 "Checkbox": "Polaris-OptionList-Option__Checkbox",
5710 "focused": "Polaris-OptionList-Option--focused",
5711 "select": "Polaris-OptionList-Option--select",
5712 "active": "Polaris-OptionList-Option--active"
5713};
5714
5715var Option =
5716/*#__PURE__*/
5717function (_React$Component) {
5718 _inherits(Option, _React$Component);
5719
5720 function Option() {
5721 var _this;
5722
5723 _classCallCheck(this, Option);
5724
5725 _this = _possibleConstructorReturn(this, _getPrototypeOf(Option).apply(this, arguments));
5726 _this.state = {
5727 focused: false
5728 };
5729
5730 _this.handleClick = function () {
5731 var _this$props = _this.props,
5732 onClick = _this$props.onClick,
5733 section = _this$props.section,
5734 index = _this$props.index,
5735 disabled = _this$props.disabled;
5736
5737 if (disabled) {
5738 return;
5739 }
5740
5741 onClick(section, index);
5742 };
5743
5744 _this.toggleFocus = function () {
5745 _this.setState(function (prevState) {
5746 return {
5747 focused: !prevState.focused
5748 };
5749 });
5750 };
5751
5752 return _this;
5753 }
5754
5755 _createClass(Option, [{
5756 key: "render",
5757 value: function render() {
5758 var _this$props2 = this.props,
5759 label = _this$props2.label,
5760 value = _this$props2.value,
5761 id = _this$props2.id,
5762 select = _this$props2.select,
5763 active = _this$props2.active,
5764 allowMultiple = _this$props2.allowMultiple,
5765 disabled = _this$props2.disabled,
5766 role = _this$props2.role,
5767 media = _this$props2.media;
5768 var focused = this.state.focused;
5769 var mediaMarkup = media ? React__default.createElement("div", {
5770 className: styles$n.Media
5771 }, media) : null;
5772 var singleSelectClassName = classNames(styles$n.SingleSelectOption, focused && styles$n.focused, disabled && styles$n.disabled, select && styles$n.select, active && styles$n.active);
5773 var multiSelectClassName = classNames(styles$n.Label, active && styles$n.active);
5774 var checkBoxRole = role === 'option' ? 'presentation' : undefined;
5775 var optionMarkup = allowMultiple ? React__default.createElement("label", {
5776 htmlFor: id,
5777 className: multiSelectClassName
5778 }, React__default.createElement("div", {
5779 className: styles$n.Checkbox
5780 }, React__default.createElement(Checkbox, {
5781 id: id,
5782 value: value,
5783 checked: select,
5784 active: active,
5785 disabled: disabled,
5786 onChange: this.handleClick,
5787 role: checkBoxRole
5788 })), mediaMarkup, label) : React__default.createElement("button", {
5789 id: id,
5790 type: "button",
5791 className: singleSelectClassName,
5792 onClick: this.handleClick,
5793 disabled: disabled,
5794 onFocus: this.toggleFocus,
5795 onBlur: this.toggleFocus
5796 }, mediaMarkup, label);
5797 var scrollMarkup = active ? React__default.createElement(Scrollable.ScrollTo, null) : null;
5798 return React__default.createElement("li", {
5799 key: id,
5800 className: styles$n.Option,
5801 tabIndex: -1,
5802 "aria-selected": active,
5803 role: role
5804 }, scrollMarkup, optionMarkup);
5805 }
5806 }]);
5807
5808 return Option;
5809}(React__default.Component);
5810
5811var styles$o = {
5812 "OptionList": "Polaris-OptionList",
5813 "Options": "Polaris-OptionList__Options",
5814 "Title": "Polaris-OptionList__Title"
5815};
5816
5817function OptionList(_ref) {
5818 var options = _ref.options,
5819 sections = _ref.sections,
5820 title = _ref.title,
5821 selected = _ref.selected,
5822 allowMultiple = _ref.allowMultiple,
5823 role = _ref.role,
5824 optionRole = _ref.optionRole,
5825 onChange = _ref.onChange,
5826 idProp = _ref.id;
5827
5828 var _useState = React.useState(createNormalizedOptions(options, sections, title)),
5829 _useState2 = _slicedToArray(_useState, 2),
5830 normalizedOptions = _useState2[0],
5831 setNormalizedOptions = _useState2[1];
5832
5833 var id = useUniqueId('OptionList', idProp);
5834 useDeepEffect(function () {
5835 setNormalizedOptions(createNormalizedOptions(options || [], sections || [], title));
5836 }, [options, sections, title], optionArraysAreEqual);
5837 var handleClick = React.useCallback(function (sectionIndex, optionIndex) {
5838 var selectedValue = normalizedOptions[sectionIndex].options[optionIndex].value;
5839 var foundIndex = selected.indexOf(selectedValue);
5840
5841 if (allowMultiple) {
5842 var newSelection = foundIndex === -1 ? [selectedValue].concat(_toConsumableArray(selected)) : [].concat(_toConsumableArray(selected.slice(0, foundIndex)), _toConsumableArray(selected.slice(foundIndex + 1, selected.length)));
5843 onChange(newSelection);
5844 return;
5845 }
5846
5847 onChange([selectedValue]);
5848 }, [normalizedOptions, selected, allowMultiple, onChange]);
5849 var optionsExist = normalizedOptions.length > 0;
5850 var optionsMarkup = optionsExist ? normalizedOptions.map(function (_ref2, sectionIndex) {
5851 var title = _ref2.title,
5852 options = _ref2.options;
5853 var titleMarkup = title ? React__default.createElement("p", {
5854 className: styles$o.Title,
5855 role: role
5856 }, title) : null;
5857 var optionsMarkup = options && options.map(function (option, optionIndex) {
5858 var isSelected = selected.includes(option.value);
5859 var optionId = option.id || "".concat(id, "-").concat(sectionIndex, "-").concat(optionIndex);
5860 return React__default.createElement(Option, Object.assign({}, option, {
5861 key: optionId,
5862 id: optionId,
5863 section: sectionIndex,
5864 index: optionIndex,
5865 onClick: handleClick,
5866 select: isSelected,
5867 allowMultiple: allowMultiple,
5868 role: optionRole
5869 }));
5870 });
5871 return React__default.createElement("li", {
5872 key: title || "noTitle-".concat(sectionIndex)
5873 }, titleMarkup, React__default.createElement("ul", {
5874 className: styles$o.Options,
5875 id: "".concat(id, "-").concat(sectionIndex),
5876 role: role,
5877 "aria-multiselectable": allowMultiple
5878 }, optionsMarkup));
5879 }) : null;
5880 return React__default.createElement("ul", {
5881 className: styles$o.OptionList,
5882 role: role
5883 }, optionsMarkup);
5884}
5885
5886function createNormalizedOptions(options, sections, title) {
5887 if (options == null) {
5888 var section = {
5889 options: [],
5890 title
5891 };
5892 return sections == null ? [] : [section].concat(_toConsumableArray(sections));
5893 }
5894
5895 if (sections == null) {
5896 return [{
5897 title,
5898 options
5899 }];
5900 }
5901
5902 return [{
5903 title,
5904 options
5905 }].concat(_toConsumableArray(sections));
5906}
5907
5908function isSection(arr) {
5909 return typeof arr[0] === 'object' && Object.prototype.hasOwnProperty.call(arr[0], 'options');
5910}
5911
5912function optionArraysAreEqual(firstArray, secondArray) {
5913 if (isSection(firstArray) && isSection(secondArray)) {
5914 return arraysAreEqual(firstArray, secondArray, testSectionsPropEquality);
5915 }
5916
5917 return arraysAreEqual(firstArray, secondArray);
5918}
5919
5920function testSectionsPropEquality(previousSection, currentSection) {
5921 var previousOptions = previousSection.options;
5922 var currentOptions = currentSection.options;
5923 var optionsAreEqual = arraysAreEqual(previousOptions, currentOptions);
5924 var titlesAreEqual = previousSection.title === currentSection.title;
5925 return optionsAreEqual && titlesAreEqual;
5926}
5927
5928var ComboBoxContext = React__default.createContext({});
5929
5930var styles$p = {
5931 "EmptyState": "Polaris-Autocomplete-ComboBox__EmptyState"
5932};
5933
5934var getUniqueId = other.createUniqueIDFactory('ComboBox');
5935var ComboBox =
5936/*#__PURE__*/
5937function (_React$PureComponent) {
5938 _inherits(ComboBox, _React$PureComponent);
5939
5940 function ComboBox() {
5941 var _this;
5942
5943 _classCallCheck(this, ComboBox);
5944
5945 _this = _possibleConstructorReturn(this, _getPrototypeOf(ComboBox).apply(this, arguments));
5946 _this.state = {
5947 comboBoxId: _this.getComboBoxId(),
5948 selectedOption: undefined,
5949 selectedIndex: -1,
5950 selectedOptions: _this.props.selected,
5951 navigableOptions: [],
5952 popoverActive: false,
5953 popoverWasActive: false
5954 };
5955
5956 _this.handleDownArrow = function () {
5957 _this.selectNextOption();
5958
5959 _this.handlePopoverOpen;
5960 };
5961
5962 _this.handleUpArrow = function () {
5963 _this.selectPreviousOption();
5964
5965 _this.handlePopoverOpen;
5966 };
5967
5968 _this.handleEnter = function (event) {
5969 if (event.keyCode !== exports.Key.Enter) {
5970 return;
5971 }
5972
5973 var selectedOption = _this.state.selectedOption;
5974
5975 if (_this.state.popoverActive && selectedOption) {
5976 if (isOption(selectedOption)) {
5977 event.preventDefault();
5978
5979 _this.handleSelection(selectedOption.value);
5980 } else {
5981 selectedOption.onAction && selectedOption.onAction();
5982 }
5983 }
5984
5985 _this.handlePopoverOpen;
5986 };
5987
5988 _this.handleFocus = function () {
5989 _this.setState({
5990 popoverActive: true,
5991 popoverWasActive: true
5992 });
5993 };
5994
5995 _this.handleBlur = function () {
5996 _this.setState({
5997 popoverActive: false,
5998 popoverWasActive: false
5999 }, function () {
6000 _this.resetVisuallySelectedOptions();
6001 });
6002 };
6003
6004 _this.handleClick = function () {
6005 !_this.state.popoverActive && _this.setState({
6006 popoverActive: true
6007 });
6008 };
6009
6010 _this.handleSelection = function (newSelected) {
6011 var _this$props = _this.props,
6012 selected = _this$props.selected,
6013 allowMultiple = _this$props.allowMultiple;
6014 var newlySelectedOptions = selected;
6015
6016 if (selected.includes(newSelected)) {
6017 newlySelectedOptions.splice(newlySelectedOptions.indexOf(newSelected), 1);
6018 } else if (allowMultiple) {
6019 newlySelectedOptions.push(newSelected);
6020 } else {
6021 newlySelectedOptions = [newSelected];
6022 }
6023
6024 _this.selectOptions(newlySelectedOptions);
6025 };
6026
6027 _this.selectOptions = function (selected) {
6028 var _this$props2 = _this.props,
6029 onSelect = _this$props2.onSelect,
6030 allowMultiple = _this$props2.allowMultiple;
6031 selected && onSelect(selected);
6032
6033 if (!allowMultiple) {
6034 _this.resetVisuallySelectedOptions();
6035
6036 _this.setState({
6037 popoverActive: false,
6038 popoverWasActive: false
6039 });
6040 }
6041 };
6042
6043 _this.updateIndexOfSelectedOption = function (newOptions) {
6044 var _this$state = _this.state,
6045 selectedIndex = _this$state.selectedIndex,
6046 selectedOption = _this$state.selectedOption;
6047
6048 if (selectedOption && newOptions.includes(selectedOption)) {
6049 _this.selectOptionAtIndex(newOptions.indexOf(selectedOption));
6050 } else if (selectedIndex > newOptions.length - 1) {
6051 _this.resetVisuallySelectedOptions();
6052 } else {
6053 _this.selectOptionAtIndex(selectedIndex);
6054 }
6055 };
6056
6057 _this.resetVisuallySelectedOptions = function () {
6058 var navigableOptions = _this.state.navigableOptions;
6059
6060 _this.setState({
6061 selectedOption: undefined,
6062 selectedIndex: -1
6063 });
6064
6065 navigableOptions && navigableOptions.forEach(function (option) {
6066 option.active = false;
6067 });
6068 };
6069
6070 _this.handlePopoverClose = function () {
6071 _this.setState({
6072 popoverActive: false,
6073 popoverWasActive: false
6074 });
6075 };
6076
6077 _this.handlePopoverOpen = function () {
6078 var _this$state2 = _this.state,
6079 popoverActive = _this$state2.popoverActive,
6080 navigableOptions = _this$state2.navigableOptions;
6081 !popoverActive && navigableOptions && navigableOptions.length > 0 && _this.setState({
6082 popoverActive: true,
6083 popoverWasActive: true
6084 });
6085 };
6086
6087 _this.selectNextOption = function () {
6088 var _this$state3 = _this.state,
6089 selectedIndex = _this$state3.selectedIndex,
6090 navigableOptions = _this$state3.navigableOptions;
6091
6092 if (!navigableOptions || navigableOptions.length === 0) {
6093 return;
6094 }
6095
6096 var newIndex = selectedIndex;
6097
6098 if (selectedIndex + 1 >= navigableOptions.length) {
6099 newIndex = 0;
6100 } else {
6101 newIndex++;
6102 }
6103
6104 _this.selectOptionAtIndex(newIndex);
6105 };
6106
6107 _this.selectPreviousOption = function () {
6108 var _this$state4 = _this.state,
6109 selectedIndex = _this$state4.selectedIndex,
6110 navigableOptions = _this$state4.navigableOptions;
6111
6112 if (!navigableOptions || navigableOptions.length === 0) {
6113 return;
6114 }
6115
6116 var newIndex = selectedIndex;
6117
6118 if (selectedIndex <= 0) {
6119 newIndex = navigableOptions.length - 1;
6120 } else {
6121 newIndex--;
6122 }
6123
6124 _this.selectOptionAtIndex(newIndex);
6125 };
6126
6127 _this.selectOptionAtIndex = function (newOptionIndex) {
6128 _this.setState(function (prevState) {
6129 if (!prevState.navigableOptions || prevState.navigableOptions.length === 0) {
6130 return prevState;
6131 }
6132
6133 var newSelectedOption = prevState.navigableOptions[newOptionIndex];
6134
6135 _this.visuallyUpdateSelectedOption(newSelectedOption, prevState.selectedOption);
6136
6137 return Object.assign({}, prevState, {
6138 selectedOption: newSelectedOption,
6139 selectedIndex: newOptionIndex
6140 });
6141 });
6142 };
6143
6144 _this.visuallyUpdateSelectedOption = function (newOption, oldOption) {
6145 if (oldOption) {
6146 oldOption.active = false;
6147 }
6148
6149 if (newOption) {
6150 newOption.active = true;
6151 }
6152 };
6153
6154 return _this;
6155 }
6156
6157 _createClass(ComboBox, [{
6158 key: "componentDidMount",
6159 value: function componentDidMount() {
6160 var _this$props3 = this.props,
6161 options = _this$props3.options,
6162 actionsBefore = _this$props3.actionsBefore,
6163 actionsAfter = _this$props3.actionsAfter;
6164 var comboBoxId = this.getComboBoxId();
6165 var navigableOptions = [];
6166
6167 if (actionsBefore) {
6168 navigableOptions = navigableOptions.concat(actionsBefore);
6169 }
6170
6171 if (options) {
6172 navigableOptions = navigableOptions.concat(options);
6173 }
6174
6175 if (actionsAfter) {
6176 navigableOptions = navigableOptions.concat(actionsAfter);
6177 }
6178
6179 navigableOptions = assignOptionIds(navigableOptions, comboBoxId);
6180 this.setState({
6181 navigableOptions
6182 });
6183 }
6184 }, {
6185 key: "componentDidUpdate",
6186 value: function componentDidUpdate(_, prevState) {
6187 var _this$props4 = this.props,
6188 contentBefore = _this$props4.contentBefore,
6189 contentAfter = _this$props4.contentAfter,
6190 emptyState = _this$props4.emptyState;
6191 var _this$state5 = this.state,
6192 navigableOptions = _this$state5.navigableOptions,
6193 popoverWasActive = _this$state5.popoverWasActive;
6194 var optionsChanged = navigableOptions && prevState.navigableOptions && !optionsAreEqual(navigableOptions, prevState.navigableOptions);
6195
6196 if (optionsChanged) {
6197 this.updateIndexOfSelectedOption(navigableOptions);
6198 }
6199
6200 if (navigableOptions && navigableOptions.length === 0 && !contentBefore && !contentAfter && !emptyState) {
6201 // eslint-disable-next-line react/no-did-update-set-state
6202 this.setState({
6203 popoverActive: false
6204 });
6205 } else if (popoverWasActive && navigableOptions && navigableOptions.length !== 0) {
6206 // eslint-disable-next-line react/no-did-update-set-state
6207 this.setState({
6208 popoverActive: true
6209 });
6210 }
6211 }
6212 }, {
6213 key: "getComboBoxId",
6214 value: function getComboBoxId() {
6215 if (this.state && this.state.comboBoxId) {
6216 return this.state.comboBoxId;
6217 }
6218
6219 return this.props.id || getUniqueId();
6220 }
6221 }, {
6222 key: "render",
6223 value: function render() {
6224 var _this$props5 = this.props,
6225 options = _this$props5.options,
6226 textField = _this$props5.textField,
6227 listTitle = _this$props5.listTitle,
6228 allowMultiple = _this$props5.allowMultiple,
6229 preferredPosition = _this$props5.preferredPosition,
6230 actionsBefore = _this$props5.actionsBefore,
6231 actionsAfter = _this$props5.actionsAfter,
6232 contentBefore = _this$props5.contentBefore,
6233 contentAfter = _this$props5.contentAfter,
6234 onEndReached = _this$props5.onEndReached,
6235 emptyState = _this$props5.emptyState;
6236 var _this$state6 = this.state,
6237 comboBoxId = _this$state6.comboBoxId,
6238 navigableOptions = _this$state6.navigableOptions,
6239 selectedOptions = _this$state6.selectedOptions;
6240 var actionsBeforeMarkup = actionsBefore && actionsBefore.length > 0 && React__default.createElement(ActionList, {
6241 actionRole: "option",
6242 items: actionsBefore
6243 });
6244 var actionsAfterMarkup = actionsAfter && actionsAfter.length > 0 && React__default.createElement(ActionList, {
6245 actionRole: "option",
6246 items: actionsAfter
6247 });
6248 var optionsMarkup = options.length > 0 && React__default.createElement(OptionList, {
6249 role: "presentation",
6250 optionRole: "option",
6251 options: filterForOptions(navigableOptions),
6252 onChange: this.selectOptions,
6253 selected: selectedOptions,
6254 title: listTitle,
6255 allowMultiple: allowMultiple
6256 });
6257 var emptyStateMarkup = !actionsAfter && !actionsBefore && !contentAfter && !contentBefore && options.length === 0 && emptyState && React__default.createElement("div", {
6258 className: styles$p.EmptyState
6259 }, emptyState);
6260 var context = {
6261 comboBoxId,
6262 selectedOptionId: this.selectedOptionId
6263 };
6264 return React__default.createElement(ComboBoxContext.Provider, {
6265 value: context
6266 }, React__default.createElement("div", {
6267 onClick: this.handleClick,
6268 role: "combobox",
6269 "aria-expanded": this.state.popoverActive,
6270 "aria-owns": this.state.comboBoxId,
6271 "aria-controls": this.state.comboBoxId,
6272 "aria-haspopup": true,
6273 onFocus: this.handleFocus,
6274 onBlur: this.handleBlur,
6275 tabIndex: 0
6276 }, React__default.createElement(KeypressListener, {
6277 keyCode: exports.Key.DownArrow,
6278 handler: this.handleDownArrow
6279 }), React__default.createElement(KeypressListener, {
6280 keyCode: exports.Key.UpArrow,
6281 handler: this.handleUpArrow
6282 }), React__default.createElement(EventListener, {
6283 event: "keydown",
6284 handler: this.handleEnter
6285 }), React__default.createElement(KeypressListener, {
6286 keyCode: exports.Key.Escape,
6287 handler: this.handlePopoverClose
6288 }), React__default.createElement(Popover, {
6289 activator: textField,
6290 active: this.state.popoverActive,
6291 onClose: this.handlePopoverClose,
6292 preferredPosition: preferredPosition,
6293 fullWidth: true,
6294 preventAutofocus: true
6295 }, React__default.createElement(Popover.Pane, {
6296 onScrolledToBottom: onEndReached
6297 }, React__default.createElement("div", {
6298 id: this.state.comboBoxId,
6299 role: "listbox",
6300 "aria-multiselectable": allowMultiple
6301 }, contentBefore, actionsBeforeMarkup, optionsMarkup, actionsAfterMarkup, contentAfter, emptyStateMarkup)))));
6302 }
6303 }, {
6304 key: "selectedOptionId",
6305 get: function get() {
6306 var _this$state7 = this.state,
6307 selectedOption = _this$state7.selectedOption,
6308 selectedIndex = _this$state7.selectedIndex,
6309 comboBoxId = _this$state7.comboBoxId;
6310 return selectedOption ? "".concat(comboBoxId, "-").concat(selectedIndex) : undefined;
6311 }
6312 }], [{
6313 key: "getDerivedStateFromProps",
6314 value: function getDerivedStateFromProps(_ref, _ref2) {
6315 var nextOptions = _ref.options,
6316 nextSelected = _ref.selected,
6317 nextActionsBefore = _ref.actionsBefore,
6318 nextActionsAfter = _ref.actionsAfter;
6319 var navigableOptions = _ref2.navigableOptions,
6320 selectedOptions = _ref2.selectedOptions,
6321 comboBoxId = _ref2.comboBoxId;
6322 var optionsChanged = filterForOptions(navigableOptions) && nextOptions && !optionsAreEqual(navigableOptions, nextOptions);
6323 var newNavigableOptions = [];
6324
6325 if (nextActionsBefore) {
6326 newNavigableOptions = newNavigableOptions.concat(nextActionsBefore);
6327 }
6328
6329 if (optionsChanged || nextActionsBefore) {
6330 newNavigableOptions = newNavigableOptions.concat(nextOptions);
6331 }
6332
6333 if (nextActionsAfter) {
6334 newNavigableOptions = newNavigableOptions.concat(nextActionsAfter);
6335 }
6336
6337 newNavigableOptions = assignOptionIds(newNavigableOptions, comboBoxId);
6338
6339 if (optionsChanged && selectedOptions !== nextSelected) {
6340 return {
6341 navigableOptions: newNavigableOptions,
6342 selectedOptions: nextSelected
6343 };
6344 } else if (optionsChanged) {
6345 return {
6346 navigableOptions: newNavigableOptions
6347 };
6348 } else if (selectedOptions !== nextSelected) {
6349 return {
6350 selectedOptions: nextSelected
6351 };
6352 }
6353
6354 return null;
6355 }
6356 }]);
6357
6358 return ComboBox;
6359}(React__default.PureComponent);
6360
6361function assignOptionIds(options, comboBoxId) {
6362 options.map(function (option, optionIndex) {
6363 option.id = "".concat(comboBoxId, "-").concat(optionIndex);
6364 });
6365 return options;
6366}
6367
6368function optionsAreEqual(firstOptions, secondOptions) {
6369 if (firstOptions.length !== secondOptions.length) {
6370 return false;
6371 }
6372
6373 return firstOptions.every(function (firstItem, index) {
6374 var secondItem = secondOptions[index];
6375
6376 if (isOption(firstItem)) {
6377 if (isOption(secondItem)) {
6378 return firstItem.value === secondItem.value;
6379 }
6380
6381 return false;
6382 } else {
6383 if (!isOption(secondItem)) {
6384 return firstItem.content === secondItem.content;
6385 }
6386
6387 return false;
6388 }
6389 });
6390}
6391
6392function isOption(navigableOption) {
6393 return navigableOption.value !== undefined;
6394}
6395
6396function filterForOptions(mixedArray) {
6397 return mixedArray.filter(function (item) {
6398 return isOption(item);
6399 });
6400}
6401
6402var styles$q = {
6403 "Label": "Polaris-Label",
6404 "hidden": "Polaris-Label--hidden",
6405 "Text": "Polaris-Label__Text"
6406};
6407
6408function labelID(id) {
6409 return "".concat(id, "Label");
6410}
6411function Label(_ref) {
6412 var children = _ref.children,
6413 id = _ref.id,
6414 hidden = _ref.hidden;
6415 var className = classNames(styles$q.Label, hidden && styles$q.hidden);
6416 return React__default.createElement("div", {
6417 className: className
6418 }, React__default.createElement("label", {
6419 id: labelID(id),
6420 htmlFor: id,
6421 className: styles$q.Text
6422 }, children));
6423}
6424
6425var styles$r = {
6426 "InlineError": "Polaris-InlineError",
6427 "Icon": "Polaris-InlineError__Icon"
6428};
6429
6430function InlineError(_ref) {
6431 var message = _ref.message,
6432 fieldID = _ref.fieldID;
6433
6434 if (!message) {
6435 return null;
6436 }
6437
6438 return React__default.createElement("div", {
6439 id: errorTextID(fieldID),
6440 className: styles$r.InlineError
6441 }, React__default.createElement("div", {
6442 className: styles$r.Icon
6443 }, React__default.createElement(Icon, {
6444 source: polarisIcons.AlertMinor
6445 })), message);
6446}
6447function errorTextID(id) {
6448 return "".concat(id, "Error");
6449}
6450
6451var styles$s = {
6452 "hidden": "Polaris-Labelled--hidden",
6453 "LabelWrapper": "Polaris-Labelled__LabelWrapper",
6454 "HelpText": "Polaris-Labelled__HelpText",
6455 "Error": "Polaris-Labelled__Error",
6456 "Action": "Polaris-Labelled__Action"
6457};
6458
6459function Labelled(_a) {
6460 var id = _a.id,
6461 label = _a.label,
6462 error = _a.error,
6463 action = _a.action,
6464 helpText = _a.helpText,
6465 children = _a.children,
6466 labelHidden = _a.labelHidden,
6467 rest = tslib_1.__rest(_a, ["id", "label", "error", "action", "helpText", "children", "labelHidden"]);
6468
6469 var className = classNames(labelHidden && styles$s.hidden);
6470 var actionMarkup = action ? React__default.createElement("div", {
6471 className: styles$s.Action
6472 }, buttonFrom(action, {
6473 plain: true
6474 })) : null;
6475 var helpTextMarkup = helpText ? React__default.createElement("div", {
6476 className: styles$s.HelpText,
6477 id: helpTextID(id)
6478 }, helpText) : null;
6479 var errorMarkup = error && typeof error !== 'boolean' && React__default.createElement("div", {
6480 className: styles$s.Error
6481 }, React__default.createElement(InlineError, {
6482 message: error,
6483 fieldID: id
6484 }));
6485 var labelMarkup = label ? React__default.createElement("div", {
6486 className: styles$s.LabelWrapper
6487 }, React__default.createElement(Label, Object.assign({
6488 id: id
6489 }, rest, {
6490 hidden: false
6491 }), label), actionMarkup) : null;
6492 return React__default.createElement("div", {
6493 className: className
6494 }, labelMarkup, children, errorMarkup, helpTextMarkup);
6495}
6496function helpTextID(id) {
6497 return "".concat(id, "HelpText");
6498}
6499
6500var styles$t = {
6501 "Connected": "Polaris-Connected",
6502 "Item": "Polaris-Connected__Item",
6503 "Item-primary": "Polaris-Connected__Item--primary",
6504 "Item-connection": "Polaris-Connected__Item--connection",
6505 "Item-focused": "Polaris-Connected__Item--focused"
6506};
6507
6508var ItemPosition;
6509
6510(function (ItemPosition) {
6511 ItemPosition[ItemPosition["Left"] = 0] = "Left";
6512 ItemPosition[ItemPosition["Primary"] = 1] = "Primary";
6513 ItemPosition[ItemPosition["Right"] = 2] = "Right";
6514})(ItemPosition || (ItemPosition = {}));
6515
6516var Item$3 =
6517/*#__PURE__*/
6518function (_React$PureComponent) {
6519 _inherits(Item, _React$PureComponent);
6520
6521 function Item() {
6522 var _this;
6523
6524 _classCallCheck(this, Item);
6525
6526 _this = _possibleConstructorReturn(this, _getPrototypeOf(Item).apply(this, arguments));
6527 _this.state = {
6528 focused: false
6529 };
6530
6531 _this.handleBlur = function () {
6532 _this.setState({
6533 focused: false
6534 });
6535 };
6536
6537 _this.handleFocus = function () {
6538 _this.setState({
6539 focused: true
6540 });
6541 };
6542
6543 return _this;
6544 }
6545
6546 _createClass(Item, [{
6547 key: "render",
6548 value: function render() {
6549 var focused = this.state.focused;
6550 var _this$props = this.props,
6551 children = _this$props.children,
6552 position = _this$props.position;
6553 var className = classNames(styles$t.Item, focused && styles$t['Item-focused'], position === ItemPosition.Primary ? styles$t['Item-primary'] : styles$t['Item-connection']);
6554 return React__default.createElement("div", {
6555 onBlur: this.handleBlur,
6556 onFocus: this.handleFocus,
6557 className: className
6558 }, children);
6559 }
6560 }]);
6561
6562 return Item;
6563}(React__default.PureComponent);
6564
6565function Connected(_ref) {
6566 var children = _ref.children,
6567 left = _ref.left,
6568 right = _ref.right;
6569 var leftConnectionMarkup = left ? React__default.createElement(Item$3, {
6570 position: ItemPosition.Left
6571 }, left) : null;
6572 var rightConnectionMarkup = right ? React__default.createElement(Item$3, {
6573 position: ItemPosition.Right
6574 }, right) : null;
6575 return React__default.createElement("div", {
6576 className: styles$t.Connected
6577 }, leftConnectionMarkup, React__default.createElement(Item$3, {
6578 position: ItemPosition.Primary
6579 }, children), rightConnectionMarkup);
6580}
6581
6582var styles$u = {
6583 "TextField": "Polaris-TextField",
6584 "multiline": "Polaris-TextField--multiline",
6585 "Input": "Polaris-TextField__Input",
6586 "hasValue": "Polaris-TextField--hasValue",
6587 "focus": "Polaris-TextField--focus",
6588 "Backdrop": "Polaris-TextField__Backdrop",
6589 "error": "Polaris-TextField--error",
6590 "readOnly": "Polaris-TextField--readOnly",
6591 "disabled": "Polaris-TextField--disabled",
6592 "Prefix": "Polaris-TextField__Prefix",
6593 "Input-hasClearButton": "Polaris-TextField__Input--hasClearButton",
6594 "Input-suffixed": "Polaris-TextField__Input--suffixed",
6595 "Input-alignRight": "Polaris-TextField__Input--alignRight",
6596 "Input-alignLeft": "Polaris-TextField__Input--alignLeft",
6597 "Input-alignCenter": "Polaris-TextField__Input--alignCenter",
6598 "Suffix": "Polaris-TextField__Suffix",
6599 "CharacterCount": "Polaris-TextField__CharacterCount",
6600 "AlignFieldBottom": "Polaris-TextField__AlignFieldBottom",
6601 "ClearButton": "Polaris-TextField__ClearButton",
6602 "Spinner": "Polaris-TextField__Spinner",
6603 "SpinnerIcon": "Polaris-TextField__SpinnerIcon",
6604 "Resizer": "Polaris-TextField__Resizer",
6605 "DummyInput": "Polaris-TextField__DummyInput",
6606 "Segment": "Polaris-TextField__Segment",
6607 "globalTheming": "Polaris-TextField--globalTheming"
6608};
6609
6610function Resizer(_ref) {
6611 var contents = _ref.contents,
6612 _ref$currentHeight = _ref.currentHeight,
6613 currentHeightProp = _ref$currentHeight === void 0 ? null : _ref$currentHeight,
6614 minimumLines = _ref.minimumLines,
6615 onHeightChange = _ref.onHeightChange;
6616 var contentNode = React.useRef(null);
6617 var minimumLinesNode = React.useRef(null);
6618 var animationFrame = React.useRef();
6619 var currentHeight = React.useRef(currentHeightProp);
6620
6621 if (currentHeightProp !== currentHeight.current) {
6622 currentHeight.current = currentHeightProp;
6623 }
6624
6625 React.useEffect(function () {
6626 return function () {
6627 if (animationFrame.current) {
6628 cancelAnimationFrame(animationFrame.current);
6629 }
6630 };
6631 }, []);
6632 var minimumLinesMarkup = minimumLines ? React__default.createElement("div", {
6633 ref: minimumLinesNode,
6634 className: styles$u.DummyInput,
6635 dangerouslySetInnerHTML: {
6636 __html: getContentsForMinimumLines(minimumLines)
6637 }
6638 }) : null;
6639 var handleHeightCheck = React.useCallback(function () {
6640 if (animationFrame.current) {
6641 cancelAnimationFrame(animationFrame.current);
6642 }
6643
6644 animationFrame.current = requestAnimationFrame(function () {
6645 if (!contentNode.current || !minimumLinesNode.current) {
6646 return;
6647 }
6648
6649 var newHeight = Math.max(contentNode.current.offsetHeight, minimumLinesNode.current.offsetHeight);
6650
6651 if (newHeight !== currentHeight.current) {
6652 onHeightChange(newHeight);
6653 }
6654 });
6655 }, [onHeightChange]);
6656 React.useLayoutEffect(function () {
6657 handleHeightCheck();
6658 });
6659 return React__default.createElement("div", {
6660 "aria-hidden": true,
6661 className: styles$u.Resizer
6662 }, React__default.createElement(EventListener, {
6663 event: "resize",
6664 handler: handleHeightCheck
6665 }), React__default.createElement("div", {
6666 ref: contentNode,
6667 className: styles$u.DummyInput,
6668 dangerouslySetInnerHTML: {
6669 __html: getFinalContents(contents)
6670 }
6671 }), minimumLinesMarkup);
6672}
6673var ENTITIES_TO_REPLACE = {
6674 '&': '&amp;',
6675 '<': '&lt;',
6676 '>': '&gt;',
6677 '\n': '<br>',
6678 '\r': ''
6679};
6680var REPLACE_REGEX$1 = new RegExp("[".concat(Object.keys(ENTITIES_TO_REPLACE).join(), "]"), 'g');
6681
6682function replaceEntity(entity) {
6683 return ENTITIES_TO_REPLACE[entity];
6684}
6685
6686function getContentsForMinimumLines(minimumLines) {
6687 var content = '';
6688
6689 for (var line = 0; line < minimumLines; line++) {
6690 content += '<br>';
6691 }
6692
6693 return content;
6694}
6695
6696function getFinalContents(contents) {
6697 return contents ? "".concat(contents.replace(REPLACE_REGEX$1, replaceEntity), "<br>") : '<br>';
6698}
6699
6700function Spinner$1(_ref) {
6701 var onChange = _ref.onChange,
6702 onClick = _ref.onClick,
6703 onMouseDown = _ref.onMouseDown,
6704 onMouseUp = _ref.onMouseUp;
6705
6706 function handleStep(step) {
6707 return function () {
6708 return onChange(step);
6709 };
6710 }
6711
6712 function handleMouseDown(onChange) {
6713 return function (event) {
6714 if (event.button !== 0) return;
6715 onMouseDown(onChange);
6716 };
6717 }
6718
6719 return React__default.createElement("div", {
6720 className: styles$u.Spinner,
6721 onClick: onClick,
6722 "aria-hidden": true
6723 }, React__default.createElement("div", {
6724 role: "button",
6725 className: styles$u.Segment,
6726 tabIndex: -1,
6727 onClick: handleStep(1),
6728 onMouseDown: handleMouseDown(handleStep(1)),
6729 onMouseUp: onMouseUp
6730 }, React__default.createElement("div", {
6731 className: styles$u.SpinnerIcon
6732 }, React__default.createElement(Icon, {
6733 source: polarisIcons.CaretUpMinor
6734 }))), React__default.createElement("div", {
6735 role: "button",
6736 className: styles$u.Segment,
6737 tabIndex: -1,
6738 onClick: handleStep(-1),
6739 onMouseDown: handleMouseDown(handleStep(-1)),
6740 onMouseUp: onMouseUp
6741 }, React__default.createElement("div", {
6742 className: styles$u.SpinnerIcon
6743 }, React__default.createElement(Icon, {
6744 source: polarisIcons.CaretDownMinor
6745 }))));
6746}
6747
6748function TextField(_ref) {
6749 var prefix = _ref.prefix,
6750 suffix = _ref.suffix,
6751 placeholder = _ref.placeholder,
6752 value = _ref.value,
6753 helpText = _ref.helpText,
6754 label = _ref.label,
6755 labelAction = _ref.labelAction,
6756 labelHidden = _ref.labelHidden,
6757 disabled = _ref.disabled,
6758 clearButton = _ref.clearButton,
6759 readOnly = _ref.readOnly,
6760 autoFocus = _ref.autoFocus,
6761 focused = _ref.focused,
6762 multiline = _ref.multiline,
6763 error = _ref.error,
6764 connectedRight = _ref.connectedRight,
6765 connectedLeft = _ref.connectedLeft,
6766 type = _ref.type,
6767 name = _ref.name,
6768 idProp = _ref.id,
6769 role = _ref.role,
6770 _ref$step = _ref.step,
6771 step = _ref$step === void 0 ? 1 : _ref$step,
6772 autoComplete = _ref.autoComplete,
6773 _ref$max = _ref.max,
6774 max = _ref$max === void 0 ? Infinity : _ref$max,
6775 maxLength = _ref.maxLength,
6776 _ref$min = _ref.min,
6777 min = _ref$min === void 0 ? -Infinity : _ref$min,
6778 minLength = _ref.minLength,
6779 pattern = _ref.pattern,
6780 spellCheck = _ref.spellCheck,
6781 ariaOwns = _ref.ariaOwns,
6782 ariaControls = _ref.ariaControls,
6783 ariaActiveDescendant = _ref.ariaActiveDescendant,
6784 ariaAutocomplete = _ref.ariaAutocomplete,
6785 showCharacterCount = _ref.showCharacterCount,
6786 align = _ref.align,
6787 onClearButtonClick = _ref.onClearButtonClick,
6788 onChange = _ref.onChange,
6789 onFocus = _ref.onFocus,
6790 onBlur = _ref.onBlur;
6791 var i18n = useI18n();
6792
6793 var _useState = React.useState(null),
6794 _useState2 = _slicedToArray(_useState, 2),
6795 height = _useState2[0],
6796 setHeight = _useState2[1];
6797
6798 var _useState3 = React.useState(Boolean(focused)),
6799 _useState4 = _slicedToArray(_useState3, 2),
6800 focus = _useState4[0],
6801 setFocus = _useState4[1];
6802
6803 var isAfterInitial = useIsAfterInitialMount();
6804 var id = useUniqueId('TextField', idProp);
6805 var inputRef = React.useRef(null);
6806 var prefixRef = React.useRef(null);
6807 var suffixRef = React.useRef(null);
6808 var buttonPressTimer = React.useRef();
6809 React.useEffect(function () {
6810 var input = inputRef.current;
6811 if (!input || focused === undefined) return;
6812 focused ? input.focus() : input.blur();
6813 }, [focused]);
6814 var normalizedValue = value != null ? value : '';
6815
6816 var _useFeatures = useFeatures(),
6817 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
6818 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
6819
6820 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);
6821 var inputType = type === 'currency' ? 'text' : type;
6822 var prefixMarkup = prefix ? React__default.createElement("div", {
6823 className: styles$u.Prefix,
6824 id: "".concat(id, "Prefix"),
6825 ref: prefixRef
6826 }, prefix) : null;
6827 var suffixMarkup = suffix ? React__default.createElement("div", {
6828 className: styles$u.Suffix,
6829 id: "".concat(id, "Suffix"),
6830 ref: suffixRef
6831 }, suffix) : null;
6832 var characterCount = normalizedValue.length;
6833 var characterCountLabel = i18n.translate(maxLength ? 'Polaris.TextField.characterCountWithMaxLength' : 'Polaris.TextField.characterCount', {
6834 count: characterCount,
6835 limit: maxLength
6836 });
6837 var characterCountClassName = classNames(styles$u.CharacterCount, multiline && styles$u.AlignFieldBottom);
6838 var characterCountText = !maxLength ? characterCount : "".concat(characterCount, "/").concat(maxLength);
6839 var characterCountMarkup = showCharacterCount ? React__default.createElement("div", {
6840 id: "".concat(id, "CharacterCounter"),
6841 className: characterCountClassName,
6842 "aria-label": characterCountLabel,
6843 "aria-live": focus ? 'polite' : 'off',
6844 "aria-atomic": "true"
6845 }, characterCountText) : null;
6846 var clearButtonMarkup = clearButton && normalizedValue !== '' ? React__default.createElement("button", {
6847 type: "button",
6848 className: styles$u.ClearButton,
6849 onClick: handleClearButtonPress,
6850 disabled: disabled
6851 }, React__default.createElement(VisuallyHidden, null, i18n.translate('Polaris.Common.clear')), React__default.createElement(Icon, {
6852 source: polarisIcons.CircleCancelMinor,
6853 color: "inkLightest"
6854 })) : null;
6855 var handleNumberChange = React.useCallback(function (steps) {
6856 if (onChange == null) {
6857 return;
6858 } // Returns the length of decimal places in a number
6859
6860
6861 var dpl = function dpl(num) {
6862 return (num.toString().split('.')[1] || []).length;
6863 };
6864
6865 var numericValue = value ? parseFloat(value) : 0;
6866
6867 if (isNaN(numericValue)) {
6868 return;
6869 } // Making sure the new value has the same length of decimal places as the
6870 // step / value has.
6871
6872
6873 var decimalPlaces = Math.max(dpl(numericValue), dpl(step));
6874 var newValue = Math.min(Number(max), Math.max(numericValue + steps * step, Number(min)));
6875 onChange(String(newValue.toFixed(decimalPlaces)), id);
6876 }, [id, max, min, onChange, step, value]);
6877 var handleButtonRelease = React.useCallback(function () {
6878 clearTimeout(buttonPressTimer.current);
6879 }, []);
6880 var handleButtonPress = React.useCallback(function (onChange) {
6881 var minInterval = 50;
6882 var decrementBy = 10;
6883 var interval = 200;
6884
6885 var onChangeInterval = function onChangeInterval() {
6886 if (interval > minInterval) interval -= decrementBy;
6887 onChange();
6888 buttonPressTimer.current = window.setTimeout(onChangeInterval, interval);
6889 };
6890
6891 buttonPressTimer.current = window.setTimeout(onChangeInterval, interval);
6892 events.addEventListener(document, 'mouseup', handleButtonRelease, {
6893 once: true
6894 });
6895 }, [handleButtonRelease]);
6896 var spinnerMarkup = type === 'number' && !disabled && !readOnly ? React__default.createElement(Spinner$1, {
6897 onChange: handleNumberChange,
6898 onMouseDown: handleButtonPress,
6899 onMouseUp: handleButtonRelease
6900 }) : null;
6901 var style = multiline && height ? {
6902 height
6903 } : null;
6904 var handleExpandingResize = React.useCallback(function (height) {
6905 setHeight(height);
6906 }, []);
6907 var resizer = multiline && isAfterInitial ? React__default.createElement(Resizer, {
6908 contents: normalizedValue || placeholder,
6909 currentHeight: height,
6910 minimumLines: typeof multiline === 'number' ? multiline : 1,
6911 onHeightChange: handleExpandingResize
6912 }) : null;
6913 var describedBy = [];
6914
6915 if (error) {
6916 describedBy.push("".concat(id, "Error"));
6917 }
6918
6919 if (helpText) {
6920 describedBy.push(helpTextID(id));
6921 }
6922
6923 if (showCharacterCount) {
6924 describedBy.push("".concat(id, "CharacterCounter"));
6925 }
6926
6927 var labelledBy = [];
6928
6929 if (prefix) {
6930 labelledBy.push("".concat(id, "Prefix"));
6931 }
6932
6933 if (suffix) {
6934 labelledBy.push("".concat(id, "Suffix"));
6935 }
6936
6937 labelledBy.unshift(labelID(id));
6938 var inputClassName = classNames(styles$u.Input, align && styles$u[variationName('Input-align', align)], suffix && styles$u['Input-suffixed'], clearButton && styles$u['Input-hasClearButton']);
6939 var input = React__default.createElement(multiline ? 'textarea' : 'input', {
6940 name,
6941 id,
6942 disabled,
6943 readOnly,
6944 role,
6945 autoFocus,
6946 value: normalizedValue,
6947 placeholder,
6948 onFocus,
6949 onBlur,
6950 onKeyPress: handleKeyPress,
6951 style,
6952 autoComplete: normalizeAutoComplete(autoComplete),
6953 className: inputClassName,
6954 onChange: handleChange,
6955 ref: inputRef,
6956 min,
6957 max,
6958 step,
6959 minLength,
6960 maxLength,
6961 spellCheck,
6962 pattern,
6963 type: inputType,
6964 'aria-describedby': describedBy.length ? describedBy.join(' ') : undefined,
6965 'aria-labelledby': labelledBy.join(' '),
6966 'aria-invalid': Boolean(error),
6967 'aria-owns': ariaOwns,
6968 'aria-activedescendant': ariaActiveDescendant,
6969 'aria-autocomplete': ariaAutocomplete,
6970 'aria-controls': ariaControls,
6971 'aria-multiline': normalizeAriaMultiline(multiline)
6972 });
6973 return React__default.createElement(Labelled, {
6974 label: label,
6975 id: id,
6976 error: error,
6977 action: labelAction,
6978 labelHidden: labelHidden,
6979 helpText: helpText
6980 }, React__default.createElement(Connected, {
6981 left: connectedLeft,
6982 right: connectedRight
6983 }, React__default.createElement("div", {
6984 className: className,
6985 onFocus: handleFocus,
6986 onBlur: handleBlur,
6987 onClick: handleClick
6988 }, prefixMarkup, input, suffixMarkup, characterCountMarkup, clearButtonMarkup, spinnerMarkup, React__default.createElement("div", {
6989 className: styles$u.Backdrop
6990 }), resizer)));
6991
6992 function handleClearButtonPress() {
6993 onClearButtonClick && onClearButtonClick(id);
6994 }
6995
6996 function handleKeyPress(event) {
6997 var key = event.key,
6998 which = event.which;
6999 var numbersSpec = /[\d.eE+-]$/;
7000
7001 if (type !== 'number' || which === exports.Key.Enter || numbersSpec.test(key)) {
7002 return;
7003 }
7004
7005 event.preventDefault();
7006 }
7007
7008 function containsAffix(target) {
7009 return target instanceof HTMLElement && (prefixRef.current && prefixRef.current.contains(target) || suffixRef.current && suffixRef.current.contains(target));
7010 }
7011
7012 function handleChange(event) {
7013 onChange && onChange(event.currentTarget.value, id);
7014 }
7015
7016 function handleFocus(_ref2) {
7017 var target = _ref2.target;
7018
7019 if (containsAffix(target)) {
7020 return;
7021 }
7022
7023 setFocus(true);
7024 }
7025
7026 function handleBlur() {
7027 setFocus(false);
7028 }
7029
7030 function handleClick(_ref3) {
7031 var target = _ref3.target;
7032
7033 if (containsAffix(target)) {
7034 return;
7035 }
7036
7037 inputRef.current && inputRef.current.focus();
7038 }
7039}
7040
7041function normalizeAutoComplete(autoComplete) {
7042 if (autoComplete == null) {
7043 return autoComplete;
7044 } else if (autoComplete === true) {
7045 return 'on';
7046 } else if (autoComplete === false) {
7047 return 'off';
7048 } else {
7049 return autoComplete;
7050 }
7051}
7052
7053function normalizeAriaMultiline(multiline) {
7054 switch (typeof multiline) {
7055 case 'undefined':
7056 return false;
7057
7058 case 'boolean':
7059 return multiline;
7060
7061 case 'number':
7062 return Boolean(multiline > 0);
7063 }
7064}
7065
7066function TextField$1(props) {
7067 return React__default.createElement(ComboBoxContext.Consumer, null, function (_ref) {
7068 var selectedOptionId = _ref.selectedOptionId,
7069 comboBoxId = _ref.comboBoxId;
7070 return React__default.createElement(TextField, Object.assign({}, props, {
7071 autoComplete: false,
7072 ariaAutocomplete: "list",
7073 ariaActiveDescendant: selectedOptionId,
7074 ariaControls: comboBoxId
7075 }));
7076 });
7077}
7078
7079var styles$v = {
7080 "Loading": "Polaris-Autocomplete__Loading"
7081};
7082
7083// subcomponents so explicitly state the subcomponents in the type definition.
7084// Letting this be implicit works in this project but fails in projects that use
7085// generated *.d.ts files.
7086
7087var Autocomplete = function Autocomplete(_ref) {
7088 var id = _ref.id,
7089 options = _ref.options,
7090 selected = _ref.selected,
7091 textField = _ref.textField,
7092 preferredPosition = _ref.preferredPosition,
7093 listTitle = _ref.listTitle,
7094 allowMultiple = _ref.allowMultiple,
7095 loading = _ref.loading,
7096 actionBefore = _ref.actionBefore,
7097 willLoadMoreResults = _ref.willLoadMoreResults,
7098 emptyState = _ref.emptyState,
7099 onSelect = _ref.onSelect,
7100 onLoadMoreResults = _ref.onLoadMoreResults;
7101 var i18n = useI18n();
7102 var spinnerMarkup = loading ? React__default.createElement("div", {
7103 className: styles$v.Loading
7104 }, React__default.createElement(Spinner, {
7105 size: "small",
7106 accessibilityLabel: i18n.translate('Polaris.Autocomplete.spinnerAccessibilityLabel')
7107 })) : null;
7108 var conditionalOptions = loading && !willLoadMoreResults ? [] : options;
7109 var conditionalAction = actionBefore && actionBefore !== [] ? [actionBefore] : undefined;
7110 return React__default.createElement(ComboBox, {
7111 id: id,
7112 options: conditionalOptions,
7113 selected: selected,
7114 textField: textField,
7115 preferredPosition: preferredPosition,
7116 listTitle: listTitle,
7117 allowMultiple: allowMultiple,
7118 contentAfter: spinnerMarkup,
7119 actionsBefore: conditionalAction,
7120 onSelect: onSelect,
7121 onEndReached: onLoadMoreResults,
7122 emptyState: emptyState
7123 });
7124};
7125Autocomplete.ComboBox = ComboBox;
7126Autocomplete.TextField = TextField$1;
7127
7128// in the styleguide works without warnings about unfound props
7129
7130function ScrollLock(_) {
7131 var scrollLockManager = useScrollLockManager();
7132 React.useEffect(function () {
7133 scrollLockManager.registerScrollLock();
7134 return function () {
7135 scrollLockManager.unregisterScrollLock();
7136 };
7137 }, [scrollLockManager]);
7138 return null;
7139}
7140
7141var styles$w = {
7142 "Backdrop": "Polaris-Backdrop",
7143 "fade-in": "Polaris-Backdrop__fade--in",
7144 "transparent": "Polaris-Backdrop--transparent",
7145 "belowNavigation": "Polaris-Backdrop--belowNavigation"
7146};
7147
7148function Backdrop(props) {
7149 var onClick = props.onClick,
7150 onTouchStart = props.onTouchStart,
7151 belowNavigation = props.belowNavigation,
7152 transparent = props.transparent;
7153 var className = classNames(styles$w.Backdrop, belowNavigation && styles$w.belowNavigation, transparent && styles$w.transparent);
7154 return React__default.createElement(React__default.Fragment, null, React__default.createElement(ScrollLock, null), React__default.createElement("div", {
7155 className: className,
7156 onClick: onClick,
7157 onTouchStart: onTouchStart
7158 }));
7159}
7160
7161var BannerContext = React__default.createContext(false);
7162
7163var styles$x = {
7164 "Banner": "Polaris-Banner",
7165 "withinContentContainer": "Polaris-Banner--withinContentContainer",
7166 "statusSuccess": "Polaris-Banner--statusSuccess",
7167 "statusInfo": "Polaris-Banner--statusInfo",
7168 "statusWarning": "Polaris-Banner--statusWarning",
7169 "statusCritical": "Polaris-Banner--statusCritical",
7170 "Ribbon": "Polaris-Banner__Ribbon",
7171 "Actions": "Polaris-Banner__Actions",
7172 "Dismiss": "Polaris-Banner__Dismiss",
7173 "withinPage": "Polaris-Banner--withinPage",
7174 "hasDismiss": "Polaris-Banner--hasDismiss",
7175 "Heading": "Polaris-Banner__Heading",
7176 "Content": "Polaris-Banner__Content",
7177 "PrimaryAction": "Polaris-Banner__PrimaryAction",
7178 "SecondaryAction": "Polaris-Banner__SecondaryAction",
7179 "Text": "Polaris-Banner__Text"
7180};
7181
7182var Banner =
7183/*#__PURE__*/
7184function (_React$PureComponent) {
7185 _inherits(Banner, _React$PureComponent);
7186
7187 function Banner() {
7188 var _this;
7189
7190 _classCallCheck(this, Banner);
7191
7192 _this = _possibleConstructorReturn(this, _getPrototypeOf(Banner).apply(this, arguments));
7193 _this.wrapper = React__default.createRef();
7194 return _this;
7195 }
7196
7197 _createClass(Banner, [{
7198 key: "focus",
7199 value: function focus() {
7200 this.wrapper.current && this.wrapper.current.focus();
7201 }
7202 }, {
7203 key: "render",
7204 value: function render() {
7205 var _this2 = this;
7206
7207 return React__default.createElement(BannerContext.Provider, {
7208 value: true
7209 }, React__default.createElement(WithinContentContext.Consumer, null, function (withinContentContainer) {
7210 var _this2$props = _this2.props,
7211 icon = _this2$props.icon,
7212 action = _this2$props.action,
7213 secondaryAction = _this2$props.secondaryAction,
7214 title = _this2$props.title,
7215 children = _this2$props.children,
7216 status = _this2$props.status,
7217 onDismiss = _this2$props.onDismiss,
7218 stopAnnouncements = _this2$props.stopAnnouncements;
7219 var color;
7220 var defaultIcon;
7221 var ariaRoleType = 'status';
7222
7223 switch (status) {
7224 case 'success':
7225 color = 'greenDark';
7226 defaultIcon = polarisIcons.CircleTickMajorTwotone;
7227 break;
7228
7229 case 'info':
7230 color = 'tealDark';
7231 defaultIcon = polarisIcons.CircleInformationMajorTwotone;
7232 break;
7233
7234 case 'warning':
7235 color = 'yellowDark';
7236 defaultIcon = polarisIcons.CircleAlertMajorTwotone;
7237 ariaRoleType = 'alert';
7238 break;
7239
7240 case 'critical':
7241 color = 'redDark';
7242 defaultIcon = polarisIcons.CircleDisabledMajorTwotone;
7243 ariaRoleType = 'alert';
7244 break;
7245
7246 default:
7247 color = 'inkLighter';
7248 defaultIcon = polarisIcons.FlagMajorTwotone;
7249 }
7250
7251 var className = classNames(styles$x.Banner, status && styles$x[variationName('status', status)], onDismiss && styles$x.hasDismiss, withinContentContainer ? styles$x.withinContentContainer : styles$x.withinPage);
7252 var id = uniqueID();
7253 var iconName = icon || defaultIcon;
7254 var headingMarkup = null;
7255 var headingID;
7256
7257 if (title) {
7258 headingID = "".concat(id, "Heading");
7259 headingMarkup = React__default.createElement("div", {
7260 className: styles$x.Heading,
7261 id: headingID
7262 }, React__default.createElement(Heading, {
7263 element: "p"
7264 }, title));
7265 }
7266
7267 var buttonSizeValue = withinContentContainer ? 'slim' : undefined;
7268 var secondaryActionMarkup = secondaryAction ? secondaryActionFrom(secondaryAction) : null;
7269 var actionMarkup = action ? React__default.createElement("div", {
7270 className: styles$x.Actions
7271 }, React__default.createElement(ButtonGroup, null, React__default.createElement("div", {
7272 className: styles$x.PrimaryAction
7273 }, buttonFrom(action, {
7274 outline: true,
7275 size: buttonSizeValue
7276 })), secondaryActionMarkup)) : null;
7277 var contentMarkup = null;
7278 var contentID;
7279
7280 if (children || actionMarkup) {
7281 contentID = "".concat(id, "Content");
7282 contentMarkup = React__default.createElement("div", {
7283 className: styles$x.Content,
7284 id: contentID
7285 }, children, actionMarkup);
7286 }
7287
7288 var dismissButton = onDismiss ? React__default.createElement("div", {
7289 className: styles$x.Dismiss
7290 }, React__default.createElement(Button, {
7291 plain: true,
7292 icon: polarisIcons.CancelSmallMinor,
7293 onClick: onDismiss,
7294 accessibilityLabel: "Dismiss notification"
7295 })) : null;
7296 return React__default.createElement("div", {
7297 className: className // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
7298 ,
7299 tabIndex: 0,
7300 ref: _this2.wrapper,
7301 role: ariaRoleType,
7302 "aria-live": stopAnnouncements ? 'off' : 'polite',
7303 onMouseUp: handleMouseUp,
7304 "aria-labelledby": headingID,
7305 "aria-describedby": contentID
7306 }, dismissButton, React__default.createElement("div", {
7307 className: styles$x.Ribbon
7308 }, React__default.createElement(Icon, {
7309 source: iconName,
7310 color: color,
7311 backdrop: true
7312 })), React__default.createElement("div", null, headingMarkup, contentMarkup));
7313 }));
7314 }
7315 }]);
7316
7317 return Banner;
7318}(React__default.PureComponent);
7319var index = 1;
7320
7321function uniqueID() {
7322 return "Banner".concat(index++);
7323}
7324
7325function handleMouseUp(_ref) {
7326 var currentTarget = _ref.currentTarget;
7327 currentTarget.blur();
7328}
7329
7330function secondaryActionFrom(action) {
7331 if (action.url) {
7332 return React__default.createElement(UnstyledLink, {
7333 className: styles$x.SecondaryAction,
7334 url: action.url,
7335 external: action.external
7336 }, React__default.createElement("span", {
7337 className: styles$x.Text
7338 }, action.content));
7339 }
7340
7341 return React__default.createElement("button", {
7342 className: styles$x.SecondaryAction,
7343 onClick: action.onAction
7344 }, React__default.createElement("span", {
7345 className: styles$x.Text
7346 }, action.content));
7347}
7348
7349var styles$y = {
7350 "Breadcrumb": "Polaris-Breadcrumbs__Breadcrumb",
7351 "Icon": "Polaris-Breadcrumbs__Icon",
7352 "ContentWrapper": "Polaris-Breadcrumbs__ContentWrapper",
7353 "Content": "Polaris-Breadcrumbs__Content"
7354};
7355
7356var Breadcrumbs =
7357/*#__PURE__*/
7358function (_React$PureComponent) {
7359 _inherits(Breadcrumbs, _React$PureComponent);
7360
7361 function Breadcrumbs() {
7362 _classCallCheck(this, Breadcrumbs);
7363
7364 return _possibleConstructorReturn(this, _getPrototypeOf(Breadcrumbs).apply(this, arguments));
7365 }
7366
7367 _createClass(Breadcrumbs, [{
7368 key: "render",
7369 value: function render() {
7370 var breadcrumbs = this.props.breadcrumbs;
7371 var breadcrumb = breadcrumbs[breadcrumbs.length - 1];
7372
7373 if (breadcrumb == null) {
7374 return null;
7375 }
7376
7377 var content = breadcrumb.content;
7378 var contentMarkup = React__default.createElement("span", {
7379 className: styles$y.ContentWrapper
7380 }, React__default.createElement("span", {
7381 className: styles$y.Icon
7382 }, React__default.createElement(Icon, {
7383 source: polarisIcons.ChevronLeftMinor
7384 })), React__default.createElement("span", {
7385 className: styles$y.Content
7386 }, content));
7387 var breadcrumbMarkup = 'url' in breadcrumb ? React__default.createElement(UnstyledLink, {
7388 key: content,
7389 url: breadcrumb.url,
7390 className: styles$y.Breadcrumb,
7391 onMouseUp: handleMouseUpByBlurring,
7392 "aria-label": breadcrumb.accessibilityLabel
7393 }, contentMarkup) : React__default.createElement("button", {
7394 key: content,
7395 className: styles$y.Breadcrumb,
7396 onClick: breadcrumb.onAction,
7397 onMouseUp: handleMouseUpByBlurring,
7398 type: "button",
7399 "aria-label": breadcrumb.accessibilityLabel
7400 }, contentMarkup);
7401 return React__default.createElement("nav", {
7402 role: "navigation"
7403 }, breadcrumbMarkup);
7404 }
7405 }]);
7406
7407 return Breadcrumbs;
7408}(React__default.PureComponent);
7409
7410var styles$z = {
7411 "TextContainer": "Polaris-TextContainer",
7412 "spacingTight": "Polaris-TextContainer--spacingTight",
7413 "spacingLoose": "Polaris-TextContainer--spacingLoose"
7414};
7415
7416function TextContainer(_ref) {
7417 var spacing = _ref.spacing,
7418 children = _ref.children;
7419 var className = classNames(styles$z.TextContainer, spacing && styles$z[variationName('spacing', spacing)]);
7420 return React__default.createElement("div", {
7421 className: className
7422 }, children);
7423}
7424
7425var styles$A = {
7426 "CalloutCard": "Polaris-CalloutCard",
7427 "Image": "Polaris-CalloutCard__Image",
7428 "DismissImage": "Polaris-CalloutCard__DismissImage",
7429 "Content": "Polaris-CalloutCard__Content",
7430 "Title": "Polaris-CalloutCard__Title",
7431 "Buttons": "Polaris-CalloutCard__Buttons",
7432 "Container": "Polaris-CalloutCard__Container",
7433 "Dismiss": "Polaris-CalloutCard__Dismiss"
7434};
7435
7436function CalloutCard(_ref) {
7437 var title = _ref.title,
7438 children = _ref.children,
7439 illustration = _ref.illustration,
7440 primaryAction = _ref.primaryAction,
7441 secondaryAction = _ref.secondaryAction,
7442 onDismiss = _ref.onDismiss;
7443 var primaryActionMarkup = buttonFrom(primaryAction);
7444 var secondaryActionMarkup = secondaryAction ? buttonFrom(secondaryAction, {
7445 plain: true
7446 }) : null;
7447 var buttonMarkup = secondaryActionMarkup ? React__default.createElement(ButtonGroup, null, primaryActionMarkup, secondaryActionMarkup) : primaryActionMarkup;
7448 var dismissButton = onDismiss ? React__default.createElement("div", {
7449 className: styles$A.Dismiss
7450 }, React__default.createElement(Button, {
7451 plain: true,
7452 icon: polarisIcons.CancelSmallMinor,
7453 onClick: onDismiss,
7454 accessibilityLabel: "Dismiss card"
7455 })) : null;
7456 var imageClassName = classNames(styles$A.Image, onDismiss && styles$A.DismissImage);
7457 return React__default.createElement(Card, null, React__default.createElement("div", {
7458 className: styles$A.Container
7459 }, dismissButton, React__default.createElement(Card.Section, null, React__default.createElement("div", {
7460 className: styles$A.CalloutCard
7461 }, React__default.createElement("div", {
7462 className: styles$A.Content
7463 }, React__default.createElement("div", {
7464 className: styles$A.Title
7465 }, React__default.createElement(Heading, null, title)), React__default.createElement(TextContainer, null, children), React__default.createElement("div", {
7466 className: styles$A.Buttons
7467 }, buttonMarkup)), React__default.createElement(Image, {
7468 alt: "",
7469 className: imageClassName,
7470 source: illustration
7471 })))));
7472}
7473
7474var styles$B = {
7475 "Caption": "Polaris-Caption"
7476};
7477
7478function Caption(_ref) {
7479 var children = _ref.children;
7480 return React__default.createElement("p", {
7481 className: styles$B.Caption
7482 }, children);
7483}
7484
7485var styles$C = {
7486 "Choice": "Polaris-Choice",
7487 "labelHidden": "Polaris-Choice--labelHidden",
7488 "Label": "Polaris-Choice__Label",
7489 "Control": "Polaris-Choice__Control",
7490 "disabled": "Polaris-Choice--disabled",
7491 "Descriptions": "Polaris-Choice__Descriptions",
7492 "HelpText": "Polaris-Choice__HelpText"
7493};
7494
7495function Choice(_ref) {
7496 var id = _ref.id,
7497 label = _ref.label,
7498 disabled = _ref.disabled,
7499 error = _ref.error,
7500 children = _ref.children,
7501 labelHidden = _ref.labelHidden,
7502 helpText = _ref.helpText,
7503 onClick = _ref.onClick;
7504 var className = classNames(styles$C.Choice, labelHidden && styles$C.labelHidden, disabled && styles$C.disabled);
7505 var labelMarkup = React__default.createElement("label", {
7506 className: className,
7507 htmlFor: id,
7508 onClick: onClick
7509 }, React__default.createElement("span", {
7510 className: styles$C.Control
7511 }, children), React__default.createElement("span", {
7512 className: styles$C.Label
7513 }, label));
7514 var helpTextMarkup = helpText ? React__default.createElement("div", {
7515 className: styles$C.HelpText,
7516 id: helpTextID$1(id)
7517 }, helpText) : null;
7518 var errorMarkup = error && typeof error !== 'boolean' && React__default.createElement("div", {
7519 className: styles$C.Error
7520 }, React__default.createElement(InlineError, {
7521 message: error,
7522 fieldID: id
7523 }));
7524 var descriptionMarkup = helpTextMarkup || errorMarkup ? React__default.createElement("div", {
7525 className: styles$C.Descriptions
7526 }, errorMarkup, helpTextMarkup) : null;
7527 return descriptionMarkup ? React__default.createElement("div", null, labelMarkup, descriptionMarkup) : labelMarkup;
7528}
7529function helpTextID$1(id) {
7530 return "".concat(id, "HelpText");
7531}
7532
7533var styles$D = {
7534 "Checkbox": "Polaris-Checkbox",
7535 "error": "Polaris-Checkbox--error",
7536 "Input": "Polaris-Checkbox__Input",
7537 "Backdrop": "Polaris-Checkbox__Backdrop",
7538 "Input-indeterminate": "Polaris-Checkbox__Input--indeterminate",
7539 "Icon": "Polaris-Checkbox__Icon"
7540};
7541
7542var Checkbox$1 = React__default.forwardRef(function Checkbox(_ref, ref) {
7543 var ariaDescribedByProp = _ref.ariaDescribedBy,
7544 label = _ref.label,
7545 labelHidden = _ref.labelHidden,
7546 _ref$checked = _ref.checked,
7547 checked = _ref$checked === void 0 ? false : _ref$checked,
7548 helpText = _ref.helpText,
7549 disabled = _ref.disabled,
7550 idProp = _ref.id,
7551 name = _ref.name,
7552 value = _ref.value,
7553 error = _ref.error,
7554 onChange = _ref.onChange,
7555 onFocus = _ref.onFocus,
7556 onBlur = _ref.onBlur;
7557 var inputNode = React.useRef(null);
7558 var id = useUniqueId('Checkbox', idProp);
7559 React.useImperativeHandle(ref, function () {
7560 return {
7561 focus: function focus() {
7562 if (inputNode.current) {
7563 inputNode.current.focus();
7564 }
7565 }
7566 };
7567 });
7568
7569 var handleInput = function handleInput() {
7570 if (onChange == null || inputNode.current == null || disabled) {
7571 return;
7572 }
7573
7574 onChange(!inputNode.current.checked, id);
7575 inputNode.current.focus();
7576 };
7577
7578 var handleKeyUp = function handleKeyUp(event) {
7579 var keyCode = event.keyCode;
7580 if (keyCode !== exports.Key.Space) return;
7581 handleInput();
7582 };
7583
7584 var describedBy = [];
7585
7586 if (error && typeof error !== 'boolean') {
7587 describedBy.push(errorTextID(id));
7588 }
7589
7590 if (helpText) {
7591 describedBy.push(helpTextID$1(id));
7592 }
7593
7594 if (ariaDescribedByProp) {
7595 describedBy.push(ariaDescribedByProp);
7596 }
7597
7598 var ariaDescribedBy = describedBy.length ? describedBy.join(' ') : undefined;
7599 var wrapperClassName = classNames(styles$D.Checkbox, error && styles$D.error);
7600 var isIndeterminate = checked === 'indeterminate';
7601 var isChecked = !isIndeterminate && Boolean(checked);
7602 var indeterminateAttributes = isIndeterminate ? {
7603 indeterminate: 'true',
7604 'aria-checked': 'mixed'
7605 } : {
7606 'aria-checked': isChecked
7607 };
7608 var iconSource = isIndeterminate ? polarisIcons.MinusMinor : polarisIcons.TickSmallMinor;
7609 var inputClassName = classNames(styles$D.Input, isIndeterminate && styles$D['Input-indeterminate']);
7610 return (
7611 /* eslint-disable jsx-a11y/no-redundant-roles */
7612 React__default.createElement(Choice, {
7613 id: id,
7614 label: label,
7615 labelHidden: labelHidden,
7616 helpText: helpText,
7617 error: error,
7618 disabled: disabled,
7619 onClick: handleInput
7620 }, React__default.createElement("span", {
7621 className: wrapperClassName
7622 }, React__default.createElement("input", Object.assign({
7623 onKeyUp: handleKeyUp,
7624 ref: inputNode,
7625 id: id,
7626 name: name,
7627 value: value,
7628 type: "checkbox",
7629 checked: isChecked,
7630 disabled: disabled,
7631 className: inputClassName,
7632 onFocus: onFocus,
7633 onBlur: onBlur,
7634 onClick: stopPropagation,
7635 onChange: noop$3,
7636 "aria-invalid": error != null,
7637 "aria-describedby": ariaDescribedBy,
7638 role: "checkbox"
7639 }, indeterminateAttributes)), React__default.createElement("span", {
7640 className: styles$D.Backdrop
7641 }), React__default.createElement("span", {
7642 className: styles$D.Icon
7643 }, React__default.createElement(Icon, {
7644 source: iconSource
7645 }))))
7646 /* eslint-enable jsx-a11y/no-redundant-roles */
7647
7648 );
7649});
7650
7651function noop$3() {}
7652
7653function stopPropagation(event) {
7654 event.stopPropagation();
7655}
7656
7657var styles$E = {
7658 "RadioButton": "Polaris-RadioButton",
7659 "Input": "Polaris-RadioButton__Input",
7660 "Backdrop": "Polaris-RadioButton__Backdrop",
7661 "Icon": "Polaris-RadioButton__Icon"
7662};
7663
7664function RadioButton(_ref) {
7665 var ariaDescribedByProp = _ref.ariaDescribedBy,
7666 label = _ref.label,
7667 labelHidden = _ref.labelHidden,
7668 helpText = _ref.helpText,
7669 checked = _ref.checked,
7670 disabled = _ref.disabled,
7671 onChange = _ref.onChange,
7672 onFocus = _ref.onFocus,
7673 onBlur = _ref.onBlur,
7674 idProp = _ref.id,
7675 nameProp = _ref.name,
7676 value = _ref.value;
7677 var id = useUniqueId('RadioButton', idProp);
7678 var name = nameProp || id;
7679
7680 function handleChange(_ref2) {
7681 var currentTarget = _ref2.currentTarget;
7682 onChange && onChange(currentTarget.checked, id);
7683 }
7684
7685 var describedBy = [];
7686
7687 if (helpText) {
7688 describedBy.push(helpTextID$1(id));
7689 }
7690
7691 if (ariaDescribedByProp) {
7692 describedBy.push(ariaDescribedByProp);
7693 }
7694
7695 var ariaDescribedBy = describedBy.length ? describedBy.join(' ') : undefined;
7696 return React__default.createElement(Choice, {
7697 label: label,
7698 labelHidden: labelHidden,
7699 disabled: disabled,
7700 id: id,
7701 helpText: helpText
7702 }, React__default.createElement("span", {
7703 className: styles$E.RadioButton
7704 }, React__default.createElement("input", {
7705 id: id,
7706 name: name,
7707 value: value,
7708 type: "radio",
7709 checked: checked,
7710 disabled: disabled,
7711 className: styles$E.Input,
7712 onChange: handleChange,
7713 onFocus: onFocus,
7714 onBlur: onBlur,
7715 "aria-describedby": ariaDescribedBy
7716 }), React__default.createElement("span", {
7717 className: styles$E.Backdrop
7718 }), React__default.createElement("span", {
7719 className: styles$E.Icon
7720 })));
7721}
7722
7723var styles$F = {
7724 "ChoiceList": "Polaris-ChoiceList",
7725 "titleHidden": "Polaris-ChoiceList--titleHidden",
7726 "Title": "Polaris-ChoiceList__Title",
7727 "Choices": "Polaris-ChoiceList__Choices",
7728 "ChoiceChildren": "Polaris-ChoiceList__ChoiceChildren",
7729 "ChoiceError": "Polaris-ChoiceList__ChoiceError"
7730};
7731
7732function ChoiceList(_ref) {
7733 var title = _ref.title,
7734 titleHidden = _ref.titleHidden,
7735 allowMultiple = _ref.allowMultiple,
7736 choices = _ref.choices,
7737 selected = _ref.selected,
7738 _ref$onChange = _ref.onChange,
7739 onChange = _ref$onChange === void 0 ? noop$4 : _ref$onChange,
7740 error = _ref.error,
7741 _ref$disabled = _ref.disabled,
7742 disabled = _ref$disabled === void 0 ? false : _ref$disabled,
7743 nameProp = _ref.name;
7744 // Type asserting to any is required for TS3.2 but can be removed when we update to 3.3
7745 // see https://github.com/Microsoft/TypeScript/issues/28768
7746 var ControlComponent = allowMultiple ? Checkbox$1 : RadioButton;
7747 var name = useUniqueId('ChoiceList', nameProp);
7748 var finalName = allowMultiple ? "".concat(name, "[]") : name;
7749 var className = classNames(styles$F.ChoiceList, titleHidden && styles$F.titleHidden);
7750 var titleMarkup = title ? React__default.createElement("legend", {
7751 className: styles$F.Title
7752 }, title) : null;
7753 var choicesMarkup = choices.map(function (choice) {
7754 var value = choice.value,
7755 label = choice.label,
7756 helpText = choice.helpText,
7757 choiceDisabled = choice.disabled,
7758 describedByError = choice.describedByError;
7759
7760 function handleChange(checked) {
7761 onChange(updateSelectedChoices(choice, checked, selected, allowMultiple), name);
7762 }
7763
7764 var isSelected = choiceIsSelected(choice, selected);
7765 var renderedChildren = choice.renderChildren ? choice.renderChildren(isSelected) : null;
7766 var children = renderedChildren ? React__default.createElement("div", {
7767 className: styles$F.ChoiceChildren
7768 }, renderedChildren) : null;
7769 return React__default.createElement("li", {
7770 key: value
7771 }, React__default.createElement(ControlComponent, {
7772 name: finalName,
7773 value: value,
7774 label: label,
7775 disabled: choiceDisabled || disabled,
7776 checked: choiceIsSelected(choice, selected),
7777 helpText: helpText,
7778 onChange: handleChange,
7779 ariaDescribedBy: error && describedByError ? errorTextID(finalName) : null
7780 }), children);
7781 });
7782 var errorMarkup = error && React__default.createElement("div", {
7783 className: styles$F.ChoiceError
7784 }, React__default.createElement(InlineError, {
7785 message: error,
7786 fieldID: finalName
7787 }));
7788 return React__default.createElement("fieldset", {
7789 className: className,
7790 id: finalName,
7791 "aria-invalid": error != null
7792 }, titleMarkup, React__default.createElement("ul", {
7793 className: styles$F.Choices
7794 }, choicesMarkup), errorMarkup);
7795}
7796
7797function noop$4() {}
7798
7799function choiceIsSelected(_ref2, selected) {
7800 var value = _ref2.value;
7801 return selected.includes(value);
7802}
7803
7804function updateSelectedChoices(_ref3, checked, selected) {
7805 var value = _ref3.value;
7806 var allowMultiple = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
7807
7808 if (checked) {
7809 return allowMultiple ? [].concat(_toConsumableArray(selected), [value]) : [value];
7810 }
7811
7812 return selected.filter(function (selectedChoice) {
7813 return selectedChoice !== value;
7814 });
7815}
7816
7817var styles$G = {
7818 "Collapsible": "Polaris-Collapsible",
7819 "animating": "Polaris-Collapsible--animating",
7820 "open": "Polaris-Collapsible--open",
7821 "fullyOpen": "Polaris-Collapsible--fullyOpen"
7822};
7823
7824var ParentCollapsibleExpandingContext = React.createContext(false);
7825
7826var Collapsible =
7827/*#__PURE__*/
7828function (_React$Component) {
7829 _inherits(Collapsible, _React$Component);
7830
7831 function Collapsible() {
7832 var _this;
7833
7834 _classCallCheck(this, Collapsible);
7835
7836 _this = _possibleConstructorReturn(this, _getPrototypeOf(Collapsible).apply(this, arguments));
7837 _this.state = {
7838 height: null,
7839 animationState: 'idle',
7840 // eslint-disable-next-line react/no-unused-state
7841 open: _this.props.open
7842 };
7843 _this.node = React.createRef();
7844 _this.heightNode = React.createRef();
7845
7846 _this.handleTransitionEnd = function (event) {
7847 var target = event.target;
7848
7849 if (target === _this.node.current) {
7850 _this.setState({
7851 animationState: 'idle',
7852 height: null
7853 });
7854 }
7855 };
7856
7857 return _this;
7858 }
7859
7860 _createClass(Collapsible, [{
7861 key: "componentDidUpdate",
7862 value: function componentDidUpdate(_ref) {
7863 var _this2 = this;
7864
7865 var wasOpen = _ref.open;
7866 var animationState = this.state.animationState;
7867 var parentCollapsibleExpanding = this.context;
7868
7869 if (parentCollapsibleExpanding && animationState !== 'idle') {
7870 // eslint-disable-next-line react/no-did-update-set-state
7871 this.setState({
7872 animationState: 'idle'
7873 });
7874 return;
7875 }
7876
7877 fastdom.read(function () {
7878 var heightNode = _this2.heightNode.current;
7879
7880 switch (animationState) {
7881 case 'idle':
7882 break;
7883
7884 case 'measuring':
7885 _this2.setState({
7886 animationState: wasOpen ? 'closingStart' : 'openingStart',
7887 height: wasOpen && heightNode ? heightNode.scrollHeight : 0
7888 });
7889
7890 break;
7891
7892 case 'closingStart':
7893 _this2.setState({
7894 animationState: 'closing',
7895 height: 0
7896 });
7897
7898 break;
7899
7900 case 'openingStart':
7901 _this2.setState({
7902 animationState: 'opening',
7903 height: heightNode ? heightNode.scrollHeight : 0
7904 });
7905
7906 }
7907 });
7908 }
7909 }, {
7910 key: "render",
7911 value: function render() {
7912 var _this$props = this.props,
7913 id = _this$props.id,
7914 open = _this$props.open,
7915 children = _this$props.children;
7916 var _this$state = this.state,
7917 animationState = _this$state.animationState,
7918 height = _this$state.height;
7919 var parentCollapsibleExpanding = this.context;
7920 var animating = animationState !== 'idle';
7921 var wrapperClassName = classNames(styles$G.Collapsible, open && styles$G.open, animating && styles$G.animating, !animating && open && styles$G.fullyOpen);
7922 var displayHeight = collapsibleHeight(open, animationState, height);
7923 var content = animating || open ? children : null;
7924 return React__default.createElement(ParentCollapsibleExpandingContext.Provider, {
7925 value: parentCollapsibleExpanding || open && animationState !== 'idle'
7926 }, React__default.createElement("div", {
7927 id: id,
7928 "aria-hidden": !open,
7929 style: {
7930 maxHeight: displayHeight
7931 },
7932 className: wrapperClassName,
7933 ref: this.node,
7934 onTransitionEnd: this.handleTransitionEnd
7935 }, React__default.createElement("div", {
7936 ref: this.heightNode
7937 }, content)));
7938 }
7939 }], [{
7940 key: "getDerivedStateFromProps",
7941 value: function getDerivedStateFromProps(_ref2, _ref3) {
7942 var willOpen = _ref2.open;
7943 var open = _ref3.open,
7944 prevAnimationState = _ref3.animationState;
7945 var nextAnimationState = prevAnimationState;
7946
7947 if (open !== willOpen) {
7948 nextAnimationState = 'measuring';
7949 }
7950
7951 return {
7952 animationState: nextAnimationState,
7953 open: willOpen
7954 };
7955 }
7956 }]);
7957
7958 return Collapsible;
7959}(React__default.Component);
7960
7961Collapsible.contextType = ParentCollapsibleExpandingContext;
7962
7963function collapsibleHeight(open, animationState, height) {
7964 if (animationState === 'idle' && open) {
7965 return open ? 'none' : undefined;
7966 }
7967
7968 if (animationState === 'measuring') {
7969 return open ? undefined : 'none';
7970 }
7971
7972 return "".concat(height || 0, "px");
7973} // Use named export once we work out why not casting this breaks web
7974
7975var styles$H = {
7976 "ColorPicker": "Polaris-ColorPicker",
7977 "MainColor": "Polaris-ColorPicker__MainColor",
7978 "Dragger": "Polaris-ColorPicker__Dragger",
7979 "ColorLayer": "Polaris-ColorPicker__ColorLayer",
7980 "HuePicker": "Polaris-ColorPicker__HuePicker",
7981 "AlphaPicker": "Polaris-ColorPicker__AlphaPicker",
7982 "Slidable": "Polaris-ColorPicker__Slidable"
7983};
7984
7985var isDragging = false; // Required to solve a bug causing the underlying page/container to scroll
7986// while trying to drag the ColorPicker controls.
7987// This must be called as soon as possible to properly prevent the event.
7988// `passive: false` must also be set, as it seems webkit has changed the "default" behaviour
7989// https://bugs.webkit.org/show_bug.cgi?id=182521
7990
7991if (!isServer) {
7992 window.addEventListener('touchmove', function (event) {
7993 if (!isDragging) {
7994 return;
7995 }
7996
7997 event.preventDefault();
7998 }, {
7999 passive: false
8000 });
8001}
8002
8003var Slidable =
8004/*#__PURE__*/
8005function (_React$PureComponent) {
8006 _inherits(Slidable, _React$PureComponent);
8007
8008 function Slidable() {
8009 var _this;
8010
8011 _classCallCheck(this, Slidable);
8012
8013 _this = _possibleConstructorReturn(this, _getPrototypeOf(Slidable).apply(this, arguments));
8014 _this.state = {
8015 dragging: false
8016 };
8017 _this.node = null;
8018 _this.draggerNode = null;
8019
8020 _this.setDraggerNode = function (node) {
8021 _this.draggerNode = node;
8022 };
8023
8024 _this.setNode = function (node) {
8025 _this.node = node;
8026 };
8027
8028 _this.startDrag = function (event) {
8029 if (event.type === 'mousedown') {
8030 var mouseEvent = event;
8031
8032 _this.handleDraggerMove(mouseEvent.clientX, mouseEvent.clientY);
8033 }
8034
8035 isDragging = true;
8036
8037 _this.setState({
8038 dragging: true
8039 });
8040 };
8041
8042 _this.handleDragEnd = function () {
8043 isDragging = false;
8044
8045 _this.setState({
8046 dragging: false
8047 });
8048 };
8049
8050 _this.handleMove = function (event) {
8051 event.stopImmediatePropagation();
8052 event.stopPropagation();
8053
8054 if (event.cancelable) {
8055 event.preventDefault();
8056 }
8057
8058 if (event.type === 'mousemove') {
8059 var mouseEvent = event;
8060
8061 _this.handleDraggerMove(mouseEvent.clientX, mouseEvent.clientY);
8062
8063 return;
8064 }
8065
8066 var touchEvent = event;
8067
8068 _this.handleDraggerMove(touchEvent.touches[0].clientX, touchEvent.touches[0].clientY);
8069 };
8070
8071 _this.handleDraggerMove = function (x, y) {
8072 if (_this.node == null) {
8073 return;
8074 }
8075
8076 var onChange = _this.props.onChange;
8077
8078 var rect = _this.node.getBoundingClientRect();
8079
8080 var offsetX = x - rect.left;
8081 var offsetY = y - rect.top;
8082 onChange({
8083 x: offsetX,
8084 y: offsetY
8085 });
8086 };
8087
8088 return _this;
8089 }
8090
8091 _createClass(Slidable, [{
8092 key: "componentDidMount",
8093 value: function componentDidMount() {
8094 var onDraggerHeight = this.props.onDraggerHeight;
8095
8096 if (onDraggerHeight == null) {
8097 return;
8098 }
8099
8100 var draggerNode = this.draggerNode;
8101
8102 if (draggerNode == null) {
8103 return;
8104 }
8105
8106 onDraggerHeight(draggerNode.clientWidth);
8107
8108 if (process.env.NODE_ENV === 'development') {
8109 setTimeout(function () {
8110 onDraggerHeight(draggerNode.clientWidth);
8111 }, 0);
8112 }
8113 }
8114 }, {
8115 key: "render",
8116 value: function render() {
8117 var dragging = this.state.dragging;
8118 var _this$props = this.props,
8119 _this$props$draggerX = _this$props.draggerX,
8120 draggerX = _this$props$draggerX === void 0 ? 0 : _this$props$draggerX,
8121 _this$props$draggerY = _this$props.draggerY,
8122 draggerY = _this$props$draggerY === void 0 ? 0 : _this$props$draggerY;
8123 var draggerPositioning = {
8124 transform: "translate3d(".concat(draggerX, "px, ").concat(draggerY, "px, 0)")
8125 };
8126 var moveListener = dragging ? React__default.createElement(EventListener, {
8127 event: "mousemove",
8128 handler: this.handleMove,
8129 passive: false
8130 }) : null;
8131 var touchMoveListener = dragging ? React__default.createElement(EventListener, {
8132 event: "touchmove",
8133 handler: this.handleMove,
8134 passive: false
8135 }) : null;
8136 var endDragListener = dragging ? React__default.createElement(EventListener, {
8137 event: "mouseup",
8138 handler: this.handleDragEnd
8139 }) : null;
8140 var touchEndListener = dragging ? React__default.createElement(EventListener, {
8141 event: "touchend",
8142 handler: this.handleDragEnd
8143 }) : null;
8144 var touchCancelListener = dragging ? React__default.createElement(EventListener, {
8145 event: "touchcancel",
8146 handler: this.handleDragEnd
8147 }) : null;
8148 return React__default.createElement("div", {
8149 ref: this.setNode,
8150 className: styles$H.Slidable,
8151 onMouseDown: this.startDrag,
8152 onTouchStart: this.startDrag
8153 }, endDragListener, moveListener, touchMoveListener, touchEndListener, touchCancelListener, React__default.createElement("div", {
8154 style: draggerPositioning,
8155 className: styles$H.Dragger,
8156 ref: this.setDraggerNode
8157 }));
8158 }
8159 }]);
8160
8161 return Slidable;
8162}(React__default.PureComponent);
8163
8164var VERTICAL_PADDING = 13;
8165function calculateDraggerY(alpha, sliderHeight, draggerHeight) {
8166 var offset = offsetForAlpha(alpha, sliderHeight, draggerHeight);
8167 return math.clamp(offset, 0, sliderHeight);
8168}
8169function alphaForDraggerY(y, sliderHeight) {
8170 var offsetY = math.clamp(y, 0, sliderHeight);
8171 return alphaForOffset(offsetY, sliderHeight);
8172}
8173function alphaForOffset(offset, sliderHeight) {
8174 var selectionHeight = offset - VERTICAL_PADDING;
8175 var slidableArea = sliderHeight - VERTICAL_PADDING * 2;
8176 return math.clamp(1 - selectionHeight / slidableArea, 0, 1);
8177}
8178
8179function offsetForAlpha(alpha, sliderHeight, draggerHeight) {
8180 var slidableArea = sliderHeight - (draggerHeight + VERTICAL_PADDING);
8181 return math.clamp((1 - alpha) * slidableArea + VERTICAL_PADDING, 0, sliderHeight - draggerHeight);
8182}
8183
8184var AlphaPicker =
8185/*#__PURE__*/
8186function (_React$PureComponent) {
8187 _inherits(AlphaPicker, _React$PureComponent);
8188
8189 function AlphaPicker() {
8190 var _this;
8191
8192 _classCallCheck(this, AlphaPicker);
8193
8194 _this = _possibleConstructorReturn(this, _getPrototypeOf(AlphaPicker).apply(this, arguments));
8195 _this.state = {
8196 sliderHeight: 0,
8197 draggerHeight: 0
8198 };
8199
8200 _this.setSliderHeight = function (node) {
8201 if (node == null) {
8202 return;
8203 }
8204
8205 _this.setState({
8206 sliderHeight: node.clientHeight
8207 });
8208
8209 if (process.env.NODE_ENV === 'development') {
8210 setTimeout(function () {
8211 _this.setState({
8212 sliderHeight: node.clientHeight
8213 });
8214 }, 0);
8215 }
8216 };
8217
8218 _this.setDraggerHeight = function (height) {
8219 _this.setState({
8220 draggerHeight: height
8221 });
8222 };
8223
8224 _this.handleChange = function (_ref) {
8225 var y = _ref.y;
8226 var onChange = _this.props.onChange;
8227 var sliderHeight = _this.state.sliderHeight;
8228 var alpha = alphaForDraggerY(y, sliderHeight);
8229 onChange(alpha);
8230 };
8231
8232 return _this;
8233 }
8234
8235 _createClass(AlphaPicker, [{
8236 key: "render",
8237 value: function render() {
8238 var _this$props = this.props,
8239 color = _this$props.color,
8240 alpha = _this$props.alpha;
8241 var _this$state = this.state,
8242 sliderHeight = _this$state.sliderHeight,
8243 draggerHeight = _this$state.draggerHeight;
8244 var draggerY = calculateDraggerY(alpha, sliderHeight, draggerHeight);
8245 var background = alphaGradientForColor(color);
8246 return React__default.createElement("div", {
8247 className: styles$H.AlphaPicker,
8248 ref: this.setSliderHeight
8249 }, React__default.createElement("div", {
8250 className: styles$H.ColorLayer,
8251 style: {
8252 background
8253 }
8254 }), React__default.createElement(Slidable, {
8255 draggerY: draggerY,
8256 draggerX: 0,
8257 onChange: this.handleChange,
8258 onDraggerHeight: this.setDraggerHeight
8259 }));
8260 }
8261 }]);
8262
8263 return AlphaPicker;
8264}(React__default.PureComponent);
8265
8266function alphaGradientForColor(color) {
8267 var _hsbToRgb = hsbToRgb(color),
8268 red = _hsbToRgb.red,
8269 green = _hsbToRgb.green,
8270 blue = _hsbToRgb.blue;
8271
8272 var rgb = "".concat(red, ", ").concat(green, ", ").concat(blue);
8273 return "linear-gradient(to top, rgba(".concat(rgb, ", 0) 18px, rgba(").concat(rgb, ", 1) calc(100% - 18px))");
8274}
8275
8276var VERTICAL_PADDING$1 = 13;
8277function calculateDraggerY$1(hue, sliderHeight, draggerHeight) {
8278 var offset = offsetForHue(hue, sliderHeight, draggerHeight);
8279 return math.clamp(offset, 0, sliderHeight);
8280}
8281function hueForDraggerY(y, sliderHeight) {
8282 var offsetY = math.clamp(y, 0, sliderHeight);
8283 return hueForOffset(offsetY, sliderHeight);
8284}
8285
8286function hueForOffset(offset, sliderHeight) {
8287 var selectionHeight = offset - VERTICAL_PADDING$1;
8288 var slidableArea = sliderHeight - VERTICAL_PADDING$1 * 2;
8289 return math.clamp(selectionHeight / slidableArea * 360, 0, 360);
8290}
8291
8292function offsetForHue(hue, sliderHeight, draggerHeight) {
8293 var slidableArea = sliderHeight - (draggerHeight + VERTICAL_PADDING$1);
8294 return math.clamp(hue / 360 * slidableArea + VERTICAL_PADDING$1, 0, sliderHeight - draggerHeight);
8295}
8296
8297var HuePicker =
8298/*#__PURE__*/
8299function (_React$PureComponent) {
8300 _inherits(HuePicker, _React$PureComponent);
8301
8302 function HuePicker() {
8303 var _this;
8304
8305 _classCallCheck(this, HuePicker);
8306
8307 _this = _possibleConstructorReturn(this, _getPrototypeOf(HuePicker).apply(this, arguments));
8308 _this.state = {
8309 sliderHeight: 0,
8310 draggerHeight: 0
8311 };
8312
8313 _this.setSliderHeight = function (node) {
8314 if (node == null) {
8315 return;
8316 }
8317
8318 _this.setState({
8319 sliderHeight: node.clientHeight
8320 });
8321
8322 if (process.env.NODE_ENV === 'development') {
8323 setTimeout(function () {
8324 _this.setState({
8325 sliderHeight: node.clientHeight
8326 });
8327 }, 0);
8328 }
8329 };
8330
8331 _this.setDraggerHeight = function (height) {
8332 _this.setState({
8333 draggerHeight: height
8334 });
8335 };
8336
8337 _this.handleChange = function (_ref) {
8338 var y = _ref.y;
8339 var onChange = _this.props.onChange;
8340 var sliderHeight = _this.state.sliderHeight;
8341 var hue = hueForDraggerY(y, sliderHeight);
8342 onChange(hue);
8343 };
8344
8345 return _this;
8346 }
8347
8348 _createClass(HuePicker, [{
8349 key: "render",
8350 value: function render() {
8351 var hue = this.props.hue;
8352 var _this$state = this.state,
8353 sliderHeight = _this$state.sliderHeight,
8354 draggerHeight = _this$state.draggerHeight;
8355 var draggerY = calculateDraggerY$1(hue, sliderHeight, draggerHeight);
8356 return React__default.createElement("div", {
8357 className: styles$H.HuePicker,
8358 ref: this.setSliderHeight
8359 }, React__default.createElement(Slidable, {
8360 draggerY: draggerY,
8361 draggerX: 0,
8362 onChange: this.handleChange,
8363 onDraggerHeight: this.setDraggerHeight
8364 }));
8365 }
8366 }]);
8367
8368 return HuePicker;
8369}(React__default.PureComponent);
8370
8371var ColorPicker =
8372/*#__PURE__*/
8373function (_React$PureComponent) {
8374 _inherits(ColorPicker, _React$PureComponent);
8375
8376 function ColorPicker() {
8377 var _this;
8378
8379 _classCallCheck(this, ColorPicker);
8380
8381 _this = _possibleConstructorReturn(this, _getPrototypeOf(ColorPicker).apply(this, arguments));
8382 _this.state = {
8383 pickerSize: 0
8384 };
8385 _this.colorNode = null;
8386
8387 _this.setColorNode = function (node) {
8388 _this.colorNode = node;
8389 };
8390
8391 _this.handleHueChange = function (hue) {
8392 var _this$props = _this.props,
8393 _this$props$color = _this$props.color,
8394 brightness = _this$props$color.brightness,
8395 saturation = _this$props$color.saturation,
8396 _this$props$color$alp = _this$props$color.alpha,
8397 alpha = _this$props$color$alp === void 0 ? 1 : _this$props$color$alp,
8398 onChange = _this$props.onChange;
8399 onChange({
8400 hue,
8401 brightness,
8402 saturation,
8403 alpha
8404 });
8405 };
8406
8407 _this.handleAlphaChange = function (alpha) {
8408 var _this$props2 = _this.props,
8409 _this$props2$color = _this$props2.color,
8410 hue = _this$props2$color.hue,
8411 brightness = _this$props2$color.brightness,
8412 saturation = _this$props2$color.saturation,
8413 onChange = _this$props2.onChange;
8414 onChange({
8415 hue,
8416 brightness,
8417 saturation,
8418 alpha
8419 });
8420 };
8421
8422 _this.handleDraggerMove = function (_ref) {
8423 var x = _ref.x,
8424 y = _ref.y;
8425 var pickerSize = _this.state.pickerSize;
8426 var _this$props3 = _this.props,
8427 _this$props3$color = _this$props3.color,
8428 hue = _this$props3$color.hue,
8429 _this$props3$color$al = _this$props3$color.alpha,
8430 alpha = _this$props3$color$al === void 0 ? 1 : _this$props3$color$al,
8431 onChange = _this$props3.onChange;
8432 var saturation = math.clamp(x / pickerSize, 0, 1);
8433 var brightness = math.clamp(1 - y / pickerSize, 0, 1);
8434 onChange({
8435 hue,
8436 saturation,
8437 brightness,
8438 alpha
8439 });
8440 };
8441
8442 _this.handlePickerDrag = function (event) {
8443 // prevents external elements from being selected
8444 event.preventDefault();
8445 };
8446
8447 return _this;
8448 }
8449
8450 _createClass(ColorPicker, [{
8451 key: "componentDidMount",
8452 value: function componentDidMount() {
8453 var _this2 = this;
8454
8455 var colorNode = this.colorNode;
8456
8457 if (colorNode == null) {
8458 return;
8459 }
8460
8461 this.setState({
8462 pickerSize: colorNode.clientWidth
8463 });
8464
8465 if (process.env.NODE_ENV === 'development') {
8466 setTimeout(function () {
8467 _this2.setState({
8468 pickerSize: colorNode.clientWidth
8469 });
8470 }, 0);
8471 }
8472 }
8473 }, {
8474 key: "render",
8475 value: function render() {
8476 var _this$props4 = this.props,
8477 id = _this$props4.id,
8478 color = _this$props4.color,
8479 allowAlpha = _this$props4.allowAlpha;
8480 var hue = color.hue,
8481 saturation = color.saturation,
8482 brightness = color.brightness,
8483 providedAlpha = color.alpha;
8484 var pickerSize = this.state.pickerSize;
8485 var alpha = providedAlpha != null && allowAlpha ? providedAlpha : 1;
8486
8487 var _hsbToRgb = hsbToRgb({
8488 hue,
8489 saturation: 1,
8490 brightness: 1
8491 }),
8492 red = _hsbToRgb.red,
8493 green = _hsbToRgb.green,
8494 blue = _hsbToRgb.blue;
8495
8496 var colorString = "rgba(".concat(red, ", ").concat(green, ", ").concat(blue, ", ").concat(alpha, ")");
8497 var draggerX = math.clamp(saturation * pickerSize, 0, pickerSize);
8498 var draggerY = math.clamp(pickerSize - brightness * pickerSize, 0, pickerSize);
8499 var alphaSliderMarkup = allowAlpha ? React__default.createElement(AlphaPicker, {
8500 alpha: alpha,
8501 color: color,
8502 onChange: this.handleAlphaChange
8503 }) : null;
8504 return React__default.createElement("div", {
8505 className: styles$H.ColorPicker,
8506 id: id,
8507 onMouseDown: this.handlePickerDrag
8508 }, React__default.createElement("div", {
8509 ref: this.setColorNode,
8510 className: styles$H.MainColor
8511 }, React__default.createElement("div", {
8512 className: styles$H.ColorLayer,
8513 style: {
8514 backgroundColor: colorString
8515 }
8516 }), React__default.createElement(Slidable, {
8517 onChange: this.handleDraggerMove,
8518 draggerX: draggerX,
8519 draggerY: draggerY
8520 })), React__default.createElement(HuePicker, {
8521 hue: hue,
8522 onChange: this.handleHueChange
8523 }), alphaSliderMarkup);
8524 }
8525 }]);
8526
8527 return ColorPicker;
8528}(React__default.PureComponent);
8529
8530var FrameContext = React__default.createContext(undefined);
8531
8532var defaultFrame = {
8533 showToast: noop$5,
8534 hideToast: noop$5,
8535 setContextualSaveBar: noop$5,
8536 removeContextualSaveBar: noop$5,
8537 startLoading: noop$5,
8538 stopLoading: noop$5
8539};
8540function useFrame() {
8541 var frame = React.useContext(FrameContext);
8542 var appBridge = useAppBridge();
8543
8544 if (!frame && !appBridge) {
8545 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.');
8546 } // This makes sure the useFrame hook always returns a FrameContext object, never undefined
8547
8548
8549 if (appBridge || !frame) {
8550 return defaultFrame;
8551 }
8552
8553 return frame;
8554}
8555
8556function noop$5() {}
8557
8558var ContextualSaveBar = React__default.memo(function ContextualSaveBar(_ref) {
8559 var message = _ref.message,
8560 saveAction = _ref.saveAction,
8561 discardAction = _ref.discardAction,
8562 alignContentFlush = _ref.alignContentFlush;
8563
8564 var _useFrame = useFrame(),
8565 setContextualSaveBar = _useFrame.setContextualSaveBar,
8566 removeContextualSaveBar = _useFrame.removeContextualSaveBar;
8567
8568 React__default.useEffect(function () {
8569 setContextualSaveBar({
8570 message,
8571 saveAction,
8572 discardAction,
8573 alignContentFlush
8574 });
8575 }, [message, saveAction, discardAction, alignContentFlush, setContextualSaveBar]);
8576 React__default.useEffect(function () {
8577 return removeContextualSaveBar;
8578 }, [removeContextualSaveBar]);
8579 return null;
8580});
8581
8582function withAppProvider() {
8583 return function addProvider(WrappedComponent) {
8584 var WithAppProvider = function WithAppProvider(props) {
8585 var polaris = {
8586 intl: useI18n(),
8587 stickyManager: useStickyManager(),
8588 appBridge: useAppBridge(),
8589 mediaQuery: useMediaQuery()
8590 };
8591 return React__default.createElement(WrappedComponent, Object.assign({}, props, {
8592 polaris: polaris
8593 }));
8594 };
8595
8596 WithAppProvider.displayName = "WithAppProvider(".concat(getDisplayName(WrappedComponent), ")");
8597 var FinalComponent = hoistStatics(WithAppProvider, WrappedComponent);
8598 return FinalComponent;
8599 };
8600}
8601
8602function getDisplayName(WrappedComponent) {
8603 return WrappedComponent.displayName || WrappedComponent.name || 'Component';
8604}
8605
8606var styles$I = {
8607 "DataTable": "Polaris-DataTable",
8608 "condensed": "Polaris-DataTable--condensed",
8609 "Navigation": "Polaris-DataTable__Navigation",
8610 "Pip": "Polaris-DataTable__Pip",
8611 "Pip-visible": "Polaris-DataTable__Pip--visible",
8612 "ScrollContainer": "Polaris-DataTable__ScrollContainer",
8613 "Table": "Polaris-DataTable__Table",
8614 "TableRow": "Polaris-DataTable__TableRow",
8615 "Cell": "Polaris-DataTable__Cell",
8616 "Cell-firstColumn": "Polaris-DataTable__Cell--firstColumn",
8617 "Cell-numeric": "Polaris-DataTable__Cell--numeric",
8618 "Cell-truncated": "Polaris-DataTable__Cell--truncated",
8619 "Cell-header": "Polaris-DataTable__Cell--header",
8620 "Cell-sortable": "Polaris-DataTable__Cell--sortable",
8621 "Cell-verticalAlignTop": "Polaris-DataTable__Cell--verticalAlignTop",
8622 "Cell-verticalAlignBottom": "Polaris-DataTable__Cell--verticalAlignBottom",
8623 "Cell-verticalAlignMiddle": "Polaris-DataTable__Cell--verticalAlignMiddle",
8624 "Cell-verticalAlignBaseline": "Polaris-DataTable__Cell--verticalAlignBaseline",
8625 "Icon": "Polaris-DataTable__Icon",
8626 "Heading": "Polaris-DataTable__Heading",
8627 "Heading-left": "Polaris-DataTable__Heading--left",
8628 "Cell-sorted": "Polaris-DataTable__Cell--sorted",
8629 "Cell-total": "Polaris-DataTable__Cell--total",
8630 "Cell-total-footer": "Polaris-DataTable--cellTotalFooter",
8631 "Footer": "Polaris-DataTable__Footer"
8632};
8633
8634function Cell(_ref) {
8635 var content = _ref.content,
8636 contentType = _ref.contentType,
8637 firstColumn = _ref.firstColumn,
8638 truncate = _ref.truncate,
8639 header = _ref.header,
8640 total = _ref.total,
8641 totalInFooter = _ref.totalInFooter,
8642 sorted = _ref.sorted,
8643 sortable = _ref.sortable,
8644 sortDirection = _ref.sortDirection,
8645 _ref$verticalAlign = _ref.verticalAlign,
8646 verticalAlign = _ref$verticalAlign === void 0 ? 'top' : _ref$verticalAlign,
8647 _ref$defaultSortDirec = _ref.defaultSortDirection,
8648 defaultSortDirection = _ref$defaultSortDirec === void 0 ? 'ascending' : _ref$defaultSortDirec,
8649 onSort = _ref.onSort;
8650 var i18n = useI18n();
8651 var numeric = contentType === 'numeric';
8652 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']);
8653 var headerClassName = classNames(header && styles$I.Heading, header && contentType === 'text' && styles$I['Heading-left']);
8654 var iconClassName = classNames(sortable && styles$I.Icon);
8655 var direction = sorted ? sortDirection : defaultSortDirection;
8656 var source = direction === 'descending' ? polarisIcons.CaretDownMinor : polarisIcons.CaretUpMinor;
8657 var oppositeDirection = sortDirection === 'ascending' ? 'descending' : 'ascending';
8658 var sortAccessibilityLabel = i18n.translate('Polaris.DataTable.sortAccessibilityLabel', {
8659 direction: sorted ? oppositeDirection : direction
8660 });
8661 var iconMarkup = React__default.createElement("span", {
8662 className: iconClassName
8663 }, React__default.createElement(Icon, {
8664 source: source,
8665 accessibilityLabel: sortAccessibilityLabel
8666 }));
8667 var sortableHeadingContent = React__default.createElement("button", {
8668 className: headerClassName,
8669 onClick: onSort
8670 }, iconMarkup, content);
8671 var columnHeadingContent = sortable ? sortableHeadingContent : content;
8672 var headingMarkup = header ? React__default.createElement("th", Object.assign({}, headerCell.props, {
8673 className: className,
8674 scope: "col",
8675 "aria-sort": sortDirection
8676 }), columnHeadingContent) : React__default.createElement("th", {
8677 className: className,
8678 scope: "row"
8679 }, content);
8680 var cellMarkup = header || firstColumn ? headingMarkup : React__default.createElement("td", {
8681 className: className
8682 }, content);
8683 return cellMarkup;
8684}
8685
8686function Navigation(_ref) {
8687 var columnVisibilityData = _ref.columnVisibilityData,
8688 isScrolledFarthestLeft = _ref.isScrolledFarthestLeft,
8689 isScrolledFarthestRight = _ref.isScrolledFarthestRight,
8690 navigateTableLeft = _ref.navigateTableLeft,
8691 navigateTableRight = _ref.navigateTableRight;
8692 var i18n = useI18n();
8693 var pipMarkup = columnVisibilityData.map(function (column, index) {
8694 var className = classNames(styles$I.Pip, column.isVisible && styles$I['Pip-visible']);
8695 return React__default.createElement("div", {
8696 className: className,
8697 key: "pip-".concat(index)
8698 });
8699 });
8700 var leftA11yLabel = i18n.translate('Polaris.DataTable.navAccessibilityLabel', {
8701 direction: 'left'
8702 });
8703 var rightA11yLabel = i18n.translate('Polaris.DataTable.navAccessibilityLabel', {
8704 direction: 'right'
8705 });
8706 return React__default.createElement("div", {
8707 className: styles$I.Navigation
8708 }, React__default.createElement(Button, {
8709 plain: true,
8710 icon: polarisIcons.ChevronLeftMinor,
8711 disabled: isScrolledFarthestLeft,
8712 accessibilityLabel: leftA11yLabel,
8713 onClick: navigateTableLeft
8714 }), pipMarkup, React__default.createElement(Button, {
8715 plain: true,
8716 icon: polarisIcons.ChevronRightMinor,
8717 disabled: isScrolledFarthestRight,
8718 accessibilityLabel: rightA11yLabel,
8719 onClick: navigateTableRight
8720 }));
8721}
8722
8723function measureColumn(tableData) {
8724 return function (column, index) {
8725 var firstVisibleColumnIndex = tableData.firstVisibleColumnIndex,
8726 tableStart = tableData.tableLeftVisibleEdge,
8727 tableEnd = tableData.tableRightVisibleEdge;
8728 var leftEdge = column.offsetLeft;
8729 var rightEdge = leftEdge + column.offsetWidth;
8730 var isVisibleLeft = isEdgeVisible(leftEdge, tableStart, tableEnd);
8731 var isVisibleRight = isEdgeVisible(rightEdge, tableStart, tableEnd);
8732 var isVisible = isVisibleLeft || isVisibleRight;
8733
8734 if (isVisible) {
8735 tableData.firstVisibleColumnIndex = Math.min(firstVisibleColumnIndex, index);
8736 }
8737
8738 return {
8739 leftEdge,
8740 rightEdge,
8741 isVisible
8742 };
8743 };
8744}
8745function isEdgeVisible(position, start, end) {
8746 var minVisiblePixels = 30;
8747 return position >= start + minVisiblePixels && position <= end - minVisiblePixels;
8748}
8749function getPrevAndCurrentColumns(tableData, columnData) {
8750 var firstVisibleColumnIndex = tableData.firstVisibleColumnIndex;
8751 var previousColumnIndex = Math.max(firstVisibleColumnIndex - 1, 0);
8752 var previousColumn = columnData[previousColumnIndex];
8753 var currentColumn = columnData[firstVisibleColumnIndex];
8754 return {
8755 previousColumn,
8756 currentColumn
8757 };
8758}
8759
8760var DataTable =
8761/*#__PURE__*/
8762function (_React$PureComponent) {
8763 _inherits(DataTable, _React$PureComponent);
8764
8765 function DataTable(props) {
8766 var _this;
8767
8768 _classCallCheck(this, DataTable);
8769
8770 _this = _possibleConstructorReturn(this, _getPrototypeOf(DataTable).call(this, props));
8771 _this.state = {
8772 condensed: false,
8773 columnVisibilityData: [],
8774 isScrolledFarthestLeft: true,
8775 isScrolledFarthestRight: false
8776 };
8777 _this.dataTable = React__default.createRef();
8778 _this.scrollContainer = React__default.createRef();
8779 _this.table = React__default.createRef();
8780 _this.handleResize = debounce(function () {
8781 var _assertThisInitialize = _assertThisInitialized(_this),
8782 table = _assertThisInitialize.table.current,
8783 scrollContainer = _assertThisInitialize.scrollContainer.current;
8784
8785 var condensed = false;
8786
8787 if (table && scrollContainer) {
8788 condensed = table.scrollWidth > scrollContainer.clientWidth;
8789 }
8790
8791 _this.setState(Object.assign({
8792 condensed
8793 }, _this.calculateColumnVisibilityData(condensed)));
8794 });
8795
8796 _this.calculateColumnVisibilityData = function (condensed) {
8797 var _assertThisInitialize2 = _assertThisInitialized(_this),
8798 table = _assertThisInitialize2.table.current,
8799 scrollContainer = _assertThisInitialize2.scrollContainer.current,
8800 dataTable = _assertThisInitialize2.dataTable.current;
8801
8802 if (condensed && table && scrollContainer && dataTable) {
8803 var headerCells = table.querySelectorAll(headerCell.selector);
8804 var firstVisibleColumnIndex = headerCells.length - 1;
8805 var tableLeftVisibleEdge = scrollContainer.scrollLeft;
8806 var tableRightVisibleEdge = scrollContainer.scrollLeft + dataTable.offsetWidth;
8807 var tableData = {
8808 firstVisibleColumnIndex,
8809 tableLeftVisibleEdge,
8810 tableRightVisibleEdge
8811 };
8812
8813 var columnVisibilityData = _toConsumableArray(headerCells).map(measureColumn(tableData));
8814
8815 var lastColumn = columnVisibilityData[columnVisibilityData.length - 1];
8816 return Object.assign({
8817 columnVisibilityData
8818 }, getPrevAndCurrentColumns(tableData, columnVisibilityData), {
8819 isScrolledFarthestLeft: tableLeftVisibleEdge === 0,
8820 isScrolledFarthestRight: lastColumn.rightEdge <= tableRightVisibleEdge
8821 });
8822 }
8823
8824 return {
8825 columnVisibilityData: [],
8826 previousColumn: undefined,
8827 currentColumn: undefined
8828 };
8829 };
8830
8831 _this.scrollListener = function () {
8832 _this.setState(function (prevState) {
8833 return Object.assign({}, _this.calculateColumnVisibilityData(prevState.condensed));
8834 });
8835 };
8836
8837 _this.navigateTable = function (direction) {
8838 var _this$state = _this.state,
8839 currentColumn = _this$state.currentColumn,
8840 previousColumn = _this$state.previousColumn;
8841 var scrollContainer = _this.scrollContainer.current;
8842
8843 var handleScroll = function handleScroll() {
8844 if (!currentColumn || !previousColumn) {
8845 return;
8846 }
8847
8848 if (scrollContainer) {
8849 scrollContainer.scrollLeft = direction === 'right' ? currentColumn.rightEdge : previousColumn.leftEdge;
8850 requestAnimationFrame(function () {
8851 _this.setState(function (prevState) {
8852 return Object.assign({}, _this.calculateColumnVisibilityData(prevState.condensed));
8853 });
8854 });
8855 }
8856 };
8857
8858 return handleScroll;
8859 };
8860
8861 _this.renderHeadings = function (heading, headingIndex) {
8862 var _this$props = _this.props,
8863 sortable = _this$props.sortable,
8864 _this$props$truncate = _this$props.truncate,
8865 truncate = _this$props$truncate === void 0 ? false : _this$props$truncate,
8866 columnContentTypes = _this$props.columnContentTypes,
8867 defaultSortDirection = _this$props.defaultSortDirection,
8868 _this$props$initialSo = _this$props.initialSortColumnIndex,
8869 initialSortColumnIndex = _this$props$initialSo === void 0 ? 0 : _this$props$initialSo,
8870 verticalAlign = _this$props.verticalAlign;
8871 var _this$state2 = _this.state,
8872 _this$state2$sortDire = _this$state2.sortDirection,
8873 sortDirection = _this$state2$sortDire === void 0 ? defaultSortDirection : _this$state2$sortDire,
8874 _this$state2$sortedCo = _this$state2.sortedColumnIndex,
8875 sortedColumnIndex = _this$state2$sortedCo === void 0 ? initialSortColumnIndex : _this$state2$sortedCo;
8876 var sortableHeadingProps;
8877 var id = "heading-cell-".concat(headingIndex);
8878
8879 if (sortable) {
8880 var isSortable = sortable[headingIndex];
8881 var isSorted = isSortable && sortedColumnIndex === headingIndex;
8882 var direction = isSorted ? sortDirection : 'none';
8883 sortableHeadingProps = {
8884 defaultSortDirection,
8885 sorted: isSorted,
8886 sortable: isSortable,
8887 sortDirection: direction,
8888 onSort: _this.defaultOnSort(headingIndex)
8889 };
8890 }
8891
8892 return React__default.createElement(Cell, Object.assign({
8893 header: true,
8894 key: id,
8895 content: heading,
8896 contentType: columnContentTypes[headingIndex],
8897 firstColumn: headingIndex === 0,
8898 truncate: truncate
8899 }, sortableHeadingProps, {
8900 verticalAlign: verticalAlign
8901 }));
8902 };
8903
8904 _this.renderTotals = function (total, index) {
8905 var id = "totals-cell-".concat(index);
8906 var _this$props2 = _this.props,
8907 _this$props2$truncate = _this$props2.truncate,
8908 truncate = _this$props2$truncate === void 0 ? false : _this$props2$truncate,
8909 verticalAlign = _this$props2.verticalAlign;
8910 var content;
8911 var contentType;
8912
8913 if (index === 0) {
8914 content = _this.totalsRowHeading;
8915 }
8916
8917 if (total !== '' && index > 0) {
8918 contentType = 'numeric';
8919 content = total;
8920 }
8921
8922 var totalInFooter = _this.props.showTotalsInFooter;
8923 return React__default.createElement(Cell, {
8924 total: true,
8925 totalInFooter: totalInFooter,
8926 firstColumn: index === 0,
8927 key: id,
8928 content: content,
8929 contentType: contentType,
8930 truncate: truncate,
8931 verticalAlign: verticalAlign
8932 });
8933 };
8934
8935 _this.defaultRenderRow = function (row, index) {
8936 var className = classNames(styles$I.TableRow);
8937 var _this$props3 = _this.props,
8938 columnContentTypes = _this$props3.columnContentTypes,
8939 _this$props3$truncate = _this$props3.truncate,
8940 truncate = _this$props3$truncate === void 0 ? false : _this$props3$truncate,
8941 verticalAlign = _this$props3.verticalAlign;
8942 return React__default.createElement("tr", {
8943 key: "row-".concat(index),
8944 className: className
8945 }, row.map(function (content, cellIndex) {
8946 var id = "cell-".concat(cellIndex, "-row-").concat(index);
8947 return React__default.createElement(Cell, {
8948 key: id,
8949 content: content,
8950 contentType: columnContentTypes[cellIndex],
8951 firstColumn: cellIndex === 0,
8952 truncate: truncate,
8953 verticalAlign: verticalAlign
8954 });
8955 }));
8956 };
8957
8958 _this.defaultOnSort = function (headingIndex) {
8959 var _this$props4 = _this.props,
8960 onSort = _this$props4.onSort,
8961 _this$props4$defaultS = _this$props4.defaultSortDirection,
8962 defaultSortDirection = _this$props4$defaultS === void 0 ? 'ascending' : _this$props4$defaultS,
8963 initialSortColumnIndex = _this$props4.initialSortColumnIndex;
8964 var _this$state3 = _this.state,
8965 _this$state3$sortDire = _this$state3.sortDirection,
8966 sortDirection = _this$state3$sortDire === void 0 ? defaultSortDirection : _this$state3$sortDire,
8967 _this$state3$sortedCo = _this$state3.sortedColumnIndex,
8968 sortedColumnIndex = _this$state3$sortedCo === void 0 ? initialSortColumnIndex : _this$state3$sortedCo;
8969 var newSortDirection = defaultSortDirection;
8970
8971 if (sortedColumnIndex === headingIndex) {
8972 newSortDirection = sortDirection === 'ascending' ? 'descending' : 'ascending';
8973 }
8974
8975 var handleSort = function handleSort() {
8976 _this.setState({
8977 sortDirection: newSortDirection,
8978 sortedColumnIndex: headingIndex
8979 }, function () {
8980 if (onSort) {
8981 onSort(headingIndex, newSortDirection);
8982 }
8983 });
8984 };
8985
8986 return handleSort;
8987 };
8988
8989 var intl = props.polaris.intl;
8990 _this.totalsRowHeading = intl.translate('Polaris.DataTable.totalsRowHeading');
8991 return _this;
8992 }
8993
8994 _createClass(DataTable, [{
8995 key: "componentDidMount",
8996 value: function componentDidMount() {
8997 var _this2 = this;
8998
8999 // We need to defer the calculation in development so the styles have time to be injected.
9000 if (process.env.NODE_ENV === 'development') {
9001 setTimeout(function () {
9002 _this2.handleResize();
9003 }, 10);
9004 } else {
9005 this.handleResize();
9006 }
9007 }
9008 }, {
9009 key: "componentDidUpdate",
9010 value: function componentDidUpdate(prevProps) {
9011 if (isEqual(prevProps, this.props)) {
9012 return;
9013 }
9014
9015 this.handleResize();
9016 }
9017 }, {
9018 key: "render",
9019 value: function render() {
9020 var _this$props5 = this.props,
9021 headings = _this$props5.headings,
9022 totals = _this$props5.totals,
9023 showTotalsInFooter = _this$props5.showTotalsInFooter,
9024 rows = _this$props5.rows,
9025 footerContent = _this$props5.footerContent;
9026 var _this$state4 = this.state,
9027 condensed = _this$state4.condensed,
9028 columnVisibilityData = _this$state4.columnVisibilityData,
9029 isScrolledFarthestLeft = _this$state4.isScrolledFarthestLeft,
9030 isScrolledFarthestRight = _this$state4.isScrolledFarthestRight;
9031 var className = classNames(styles$I.DataTable, condensed && styles$I.condensed);
9032 var wrapperClassName = classNames(styles$I.TableWrapper, condensed && styles$I.condensed);
9033 var headingMarkup = React__default.createElement("tr", null, headings.map(this.renderHeadings));
9034 var totalsMarkup = totals ? React__default.createElement("tr", null, totals.map(this.renderTotals)) : null;
9035 var bodyMarkup = rows.map(this.defaultRenderRow);
9036 var footerMarkup = footerContent ? React__default.createElement("div", {
9037 className: styles$I.Footer
9038 }, footerContent) : null;
9039 var headerTotalsMarkup = !showTotalsInFooter ? totalsMarkup : null;
9040 var footerTotalsMarkup = showTotalsInFooter ? React__default.createElement("tfoot", null, totalsMarkup) : null;
9041 return React__default.createElement("div", {
9042 className: wrapperClassName
9043 }, React__default.createElement(Navigation, {
9044 columnVisibilityData: columnVisibilityData,
9045 isScrolledFarthestLeft: isScrolledFarthestLeft,
9046 isScrolledFarthestRight: isScrolledFarthestRight,
9047 navigateTableLeft: this.navigateTable('left'),
9048 navigateTableRight: this.navigateTable('right')
9049 }), React__default.createElement("div", {
9050 className: className,
9051 ref: this.dataTable
9052 }, React__default.createElement("div", {
9053 className: styles$I.ScrollContainer,
9054 ref: this.scrollContainer
9055 }, React__default.createElement(EventListener, {
9056 event: "resize",
9057 handler: this.handleResize
9058 }), React__default.createElement(EventListener, {
9059 capture: true,
9060 event: "scroll",
9061 handler: this.scrollListener
9062 }), React__default.createElement("table", {
9063 className: styles$I.Table,
9064 ref: this.table
9065 }, React__default.createElement("thead", null, headingMarkup, headerTotalsMarkup), React__default.createElement("tbody", null, bodyMarkup), footerTotalsMarkup)), footerMarkup));
9066 }
9067 }]);
9068
9069 return DataTable;
9070}(React__default.PureComponent); // Use named export once withAppProvider is refactored away
9071// eslint-disable-next-line import/no-default-export
9072
9073
9074var DataTable$1 = withAppProvider()(DataTable);
9075
9076function monthName(month) {
9077 switch (month) {
9078 case 0:
9079 return 'january';
9080
9081 case 1:
9082 return 'february';
9083
9084 case 2:
9085 return 'march';
9086
9087 case 3:
9088 return 'april';
9089
9090 case 4:
9091 return 'may';
9092
9093 case 5:
9094 return 'june';
9095
9096 case 6:
9097 return 'july';
9098
9099 case 7:
9100 return 'august';
9101
9102 case 8:
9103 return 'september';
9104
9105 case 9:
9106 return 'october';
9107
9108 case 10:
9109 return 'november';
9110
9111 case 11:
9112 return 'december';
9113 }
9114}
9115function weekdayName(weekday) {
9116 switch (weekday) {
9117 case 0:
9118 return 'sunday';
9119
9120 case 1:
9121 return 'monday';
9122
9123 case 2:
9124 return 'tuesday';
9125
9126 case 3:
9127 return 'wednesday';
9128
9129 case 4:
9130 return 'thursday';
9131
9132 case 5:
9133 return 'friday';
9134
9135 case 6:
9136 return 'saturday';
9137 }
9138}
9139
9140var styles$J = {
9141 "DatePicker": "Polaris-DatePicker",
9142 "MonthContainer": "Polaris-DatePicker__MonthContainer",
9143 "Month": "Polaris-DatePicker__Month",
9144 "Month-current": "Polaris-DatePicker__Month--current",
9145 "Week": "Polaris-DatePicker__Week",
9146 "WeekHeadings": "Polaris-DatePicker__WeekHeadings",
9147 "Day": "Polaris-DatePicker__Day",
9148 "EmptyDay": "Polaris-DatePicker__EmptyDay",
9149 "Day-today": "Polaris-DatePicker__Day--today",
9150 "Day-inRange": "Polaris-DatePicker__Day--inRange",
9151 "Day-selected": "Polaris-DatePicker__Day--selected",
9152 "Day-disabled": "Polaris-DatePicker__Day--disabled",
9153 "Weekday": "Polaris-DatePicker__Weekday",
9154 "Weekday-current": "Polaris-DatePicker__Weekday--current",
9155 "Header": "Polaris-DatePicker__Header",
9156 "Title": "Polaris-DatePicker__Title"
9157};
9158
9159function Day(_ref) {
9160 var day = _ref.day,
9161 focused = _ref.focused,
9162 onClick = _ref.onClick,
9163 _ref$onHover = _ref.onHover,
9164 onHover = _ref$onHover === void 0 ? noop$6 : _ref$onHover,
9165 _ref$onFocus = _ref.onFocus,
9166 _onFocus = _ref$onFocus === void 0 ? noop$6 : _ref$onFocus,
9167 selected = _ref.selected,
9168 inRange = _ref.inRange,
9169 inHoveringRange = _ref.inHoveringRange,
9170 disabled = _ref.disabled;
9171
9172 var i18n = useI18n();
9173 var dayNode = React.useRef(null);
9174 React.useEffect(function () {
9175 if (focused && dayNode.current) {
9176 dayNode.current.focus();
9177 }
9178 }, [focused]);
9179
9180 if (!day) {
9181 return React__default.createElement("div", {
9182 className: styles$J.EmptyDay,
9183 onMouseOver: function onMouseOver() {
9184 return onHover(day);
9185 }
9186 });
9187 }
9188
9189 var handleClick = onClick && !disabled ? onClick.bind(null, day) : noop$6;
9190 var today = dates.isSameDay(new Date(), day);
9191 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']);
9192 var date = day.getDate();
9193 var tabIndex = (focused || selected || today || date === 1) && !disabled ? 0 : -1;
9194 var ariaLabel = ["".concat(today ? i18n.translate('Polaris.DatePicker.today') : ''), "".concat(dates.Months[day.getMonth()], " "), "".concat(date, " "), "".concat(day.getFullYear())].join('');
9195 return React__default.createElement("button", {
9196 onFocus: function onFocus() {
9197 return _onFocus(day);
9198 },
9199 type: "button",
9200 ref: dayNode,
9201 tabIndex: tabIndex,
9202 className: className,
9203 onMouseOver: function onMouseOver() {
9204 return onHover(day);
9205 },
9206 onClick: handleClick,
9207 "aria-label": ariaLabel,
9208 "aria-selected": selected,
9209 "aria-disabled": disabled,
9210 role: "gridcell"
9211 }, date);
9212}
9213
9214function noop$6() {}
9215
9216function Weekday(_ref) {
9217 var label = _ref.label,
9218 title = _ref.title,
9219 current = _ref.current;
9220 var className = classNames(styles$J.Weekday, current && styles$J['Weekday-current']);
9221 return React__default.createElement("div", {
9222 "aria-label": dates.Weekdays[label],
9223 className: className
9224 }, title);
9225}
9226
9227var WEEKDAYS = [dates.Weekdays.Sunday, dates.Weekdays.Monday, dates.Weekdays.Tuesday, dates.Weekdays.Wednesday, dates.Weekdays.Thursday, dates.Weekdays.Friday, dates.Weekdays.Saturday];
9228function Month(_ref) {
9229 var focusedDate = _ref.focusedDate,
9230 selected = _ref.selected,
9231 hoverDate = _ref.hoverDate,
9232 disableDatesBefore = _ref.disableDatesBefore,
9233 disableDatesAfter = _ref.disableDatesAfter,
9234 allowRange = _ref.allowRange,
9235 _ref$onChange = _ref.onChange,
9236 onChange = _ref$onChange === void 0 ? noop$7 : _ref$onChange,
9237 _ref$onHover = _ref.onHover,
9238 onHover = _ref$onHover === void 0 ? noop$7 : _ref$onHover,
9239 _ref$onFocus = _ref.onFocus,
9240 onFocus = _ref$onFocus === void 0 ? noop$7 : _ref$onFocus,
9241 month = _ref.month,
9242 year = _ref.year,
9243 weekStartsOn = _ref.weekStartsOn;
9244 var i18n = useI18n();
9245 var isInHoveringRange = allowRange ? hoveringDateIsInRange : function () {
9246 return false;
9247 };
9248 var now = new Date();
9249 var current = now.getMonth() === month && now.getFullYear() === year;
9250 var className = classNames(styles$J.Title, current && styles$J['Month-current']);
9251 var weeks = dates.getWeeksForMonth(month, year, weekStartsOn);
9252 var weekdays = getWeekdaysOrdered(weekStartsOn).map(function (weekday) {
9253 return React__default.createElement(Weekday, {
9254 key: weekday,
9255 title: i18n.translate("Polaris.DatePicker.daysAbbreviated.".concat(weekdayName(weekday))),
9256 current: current && new Date().getDay() === weekday,
9257 label: weekday
9258 });
9259 });
9260
9261 function handleDateClick(selectedDate) {
9262 onChange(dates.getNewRange(allowRange ? selected : undefined, selectedDate));
9263 }
9264
9265 function renderWeek(day, dayIndex) {
9266 if (day == null) {
9267 var lastDayOfMonth = new Date(year, month + 1, 0);
9268 return React__default.createElement(Day, {
9269 key: dayIndex,
9270 onHover: onHover.bind(null, lastDayOfMonth)
9271 });
9272 }
9273
9274 var disabled = disableDatesBefore && dates.isDateBefore(day, disableDatesBefore) || disableDatesAfter && dates.isDateAfter(day, disableDatesAfter);
9275 return React__default.createElement(Day, {
9276 focused: focusedDate != null && dates.isSameDay(day, focusedDate),
9277 day: day,
9278 key: dayIndex,
9279 onFocus: onFocus,
9280 onClick: handleDateClick,
9281 onHover: onHover,
9282 selected: selected != null && dates.dateIsSelected(day, selected),
9283 inRange: selected != null && dates.dateIsInRange(day, selected),
9284 disabled: disabled,
9285 inHoveringRange: selected != null && hoverDate != null && isInHoveringRange(day, selected, hoverDate)
9286 });
9287 }
9288
9289 var weeksMarkup = weeks.map(function (week, index) {
9290 return React__default.createElement("div", {
9291 role: "row",
9292 className: styles$J.Week,
9293 key: index
9294 }, week.map(renderWeek));
9295 });
9296 return React__default.createElement("div", {
9297 role: "grid",
9298 className: styles$J.Month
9299 }, React__default.createElement("div", {
9300 className: className
9301 }, i18n.translate("Polaris.DatePicker.months.".concat(monthName(month))), " ", year), React__default.createElement("div", {
9302 role: "rowheader",
9303 className: styles$J.WeekHeadings
9304 }, weekdays), weeksMarkup);
9305}
9306
9307function noop$7() {}
9308
9309function hoveringDateIsInRange(day, range, hoverEndDate) {
9310 if (day == null) {
9311 return false;
9312 }
9313
9314 var start = range.start,
9315 end = range.end;
9316 return Boolean(dates.isSameDay(start, end) && day > start && day <= hoverEndDate);
9317}
9318
9319function getWeekdaysOrdered(weekStartsOn) {
9320 var weekDays = [].concat(WEEKDAYS);
9321 var restOfDays = weekDays.splice(weekStartsOn);
9322 return [].concat(_toConsumableArray(restOfDays), _toConsumableArray(weekDays));
9323}
9324
9325function DatePicker(_ref) {
9326 var id = _ref.id,
9327 selected = _ref.selected,
9328 month = _ref.month,
9329 year = _ref.year,
9330 allowRange = _ref.allowRange,
9331 multiMonth = _ref.multiMonth,
9332 disableDatesBefore = _ref.disableDatesBefore,
9333 disableDatesAfter = _ref.disableDatesAfter,
9334 _ref$weekStartsOn = _ref.weekStartsOn,
9335 weekStartsOn = _ref$weekStartsOn === void 0 ? dates.Weekdays.Sunday : _ref$weekStartsOn,
9336 onMonthChange = _ref.onMonthChange,
9337 _ref$onChange = _ref.onChange,
9338 onChange = _ref$onChange === void 0 ? noop$8 : _ref$onChange;
9339 var i18n = useI18n();
9340
9341 var _useState = React.useState(undefined),
9342 _useState2 = _slicedToArray(_useState, 2),
9343 hoverDate = _useState2[0],
9344 setHoverDate = _useState2[1];
9345
9346 var _useState3 = React.useState(undefined),
9347 _useState4 = _slicedToArray(_useState3, 2),
9348 focusDate = _useState4[0],
9349 setFocusDate = _useState4[1];
9350
9351 React.useEffect(function () {
9352 setFocusDate(undefined);
9353 }, [selected]);
9354 var handleFocus = React.useCallback(function (date) {
9355 setFocusDate(date);
9356 }, []);
9357 var setFocusDateAndHandleMonthChange = React.useCallback(function (date) {
9358 if (onMonthChange) {
9359 onMonthChange(date.getMonth(), date.getFullYear());
9360 }
9361
9362 setHoverDate(date);
9363 setFocusDate(date);
9364 }, [onMonthChange]);
9365 var handleDateSelection = React.useCallback(function (range) {
9366 var end = range.end;
9367 setHoverDate(end);
9368 setFocusDate(new Date(end));
9369 onChange(range);
9370 }, [onChange]);
9371 var handleMonthChangeClick = React.useCallback(function (month, year) {
9372 if (!onMonthChange) {
9373 return;
9374 }
9375
9376 setFocusDate(undefined);
9377 onMonthChange(month, year);
9378 }, [onMonthChange]);
9379 var handleHover = React.useCallback(function (date) {
9380 setHoverDate(date);
9381 }, []);
9382 var handleKeyUp = React.useCallback(function (event) {
9383 var key = event.key;
9384 var range = deriveRange(selected);
9385 var focusedDate = focusDate || range && range.start;
9386
9387 if (focusedDate == null) {
9388 return;
9389 }
9390
9391 if (key === 'ArrowUp') {
9392 var previousWeek = new Date(focusedDate);
9393 previousWeek.setDate(focusedDate.getDate() - 7);
9394
9395 if (!(disableDatesBefore && dates.isDateBefore(previousWeek, disableDatesBefore))) {
9396 setFocusDateAndHandleMonthChange(previousWeek);
9397 }
9398 }
9399
9400 if (key === 'ArrowDown') {
9401 var nextWeek = new Date(focusedDate);
9402 nextWeek.setDate(focusedDate.getDate() + 7);
9403
9404 if (!(disableDatesAfter && dates.isDateAfter(nextWeek, disableDatesAfter))) {
9405 setFocusDateAndHandleMonthChange(nextWeek);
9406 }
9407 }
9408
9409 if (key === 'ArrowRight') {
9410 var tomorrow = new Date(focusedDate);
9411 tomorrow.setDate(focusedDate.getDate() + 1);
9412
9413 if (!(disableDatesAfter && dates.isDateAfter(tomorrow, disableDatesAfter))) {
9414 setFocusDateAndHandleMonthChange(tomorrow);
9415 }
9416 }
9417
9418 if (key === 'ArrowLeft') {
9419 var yesterday = new Date(focusedDate);
9420 yesterday.setDate(focusedDate.getDate() - 1);
9421
9422 if (!(disableDatesBefore && dates.isDateBefore(yesterday, disableDatesBefore))) {
9423 setFocusDateAndHandleMonthChange(yesterday);
9424 }
9425 }
9426 }, [disableDatesAfter, disableDatesBefore, focusDate, selected, setFocusDateAndHandleMonthChange]);
9427 var showNextYear = dates.getNextDisplayYear(month, year);
9428 var showNextMonth = dates.getNextDisplayMonth(month);
9429 var showNextToNextYear = dates.getNextDisplayYear(showNextMonth, showNextYear);
9430 var showNextToNextMonth = dates.getNextDisplayMonth(showNextMonth);
9431 var showPreviousYear = dates.getPreviousDisplayYear(month, year);
9432 var showPreviousMonth = dates.getPreviousDisplayMonth(month);
9433 var previousMonthName = i18n.translate("Polaris.DatePicker.months.".concat(monthName(showPreviousMonth)));
9434 var nextMonth = multiMonth ? i18n.translate("Polaris.DatePicker.months.".concat(monthName(showNextToNextMonth))) : i18n.translate("Polaris.DatePicker.months.".concat(monthName(showNextMonth)));
9435 var nextYear = multiMonth ? showNextToNextYear : showNextYear;
9436 var secondDatePicker = multiMonth ? React__default.createElement(Month, {
9437 onFocus: handleFocus,
9438 focusedDate: focusDate,
9439 month: showNextMonth,
9440 year: showNextYear,
9441 selected: deriveRange(selected),
9442 hoverDate: hoverDate,
9443 onChange: handleDateSelection,
9444 onHover: handleHover,
9445 disableDatesBefore: disableDatesBefore,
9446 disableDatesAfter: disableDatesAfter,
9447 allowRange: allowRange,
9448 weekStartsOn: weekStartsOn
9449 }) : null;
9450 return React__default.createElement("div", {
9451 id: id,
9452 className: styles$J.DatePicker,
9453 onKeyDown: handleKeyDown,
9454 onKeyUp: handleKeyUp
9455 }, React__default.createElement("div", {
9456 className: styles$J.Header
9457 }, React__default.createElement(Button, {
9458 plain: true,
9459 icon: polarisIcons.ArrowLeftMinor,
9460 accessibilityLabel: i18n.translate('Polaris.DatePicker.previousMonth', {
9461 previousMonthName,
9462 showPreviousYear
9463 }),
9464 onClick: function onClick() {
9465 return handleMonthChangeClick(showPreviousMonth, showPreviousYear);
9466 }
9467 }), React__default.createElement(Button, {
9468 plain: true,
9469 icon: polarisIcons.ArrowRightMinor,
9470 accessibilityLabel: i18n.translate('Polaris.DatePicker.nextMonth', {
9471 nextMonth,
9472 nextYear
9473 }),
9474 onClick: function onClick() {
9475 return handleMonthChangeClick(showNextMonth, showNextYear);
9476 }
9477 })), React__default.createElement("div", {
9478 className: styles$J.MonthContainer
9479 }, React__default.createElement(Month, {
9480 onFocus: handleFocus,
9481 focusedDate: focusDate,
9482 month: month,
9483 year: year,
9484 selected: deriveRange(selected),
9485 hoverDate: hoverDate,
9486 onChange: handleDateSelection,
9487 onHover: handleHover,
9488 disableDatesBefore: disableDatesBefore,
9489 disableDatesAfter: disableDatesAfter,
9490 allowRange: allowRange,
9491 weekStartsOn: weekStartsOn
9492 }), secondDatePicker));
9493}
9494
9495function noop$8() {}
9496
9497function handleKeyDown(event) {
9498 var key = event.key;
9499
9500 if (key === 'ArrowUp' || key === 'ArrowDown' || key === 'ArrowLeft' || key === 'ArrowRight') {
9501 event.preventDefault();
9502 event.stopPropagation();
9503 }
9504}
9505
9506function deriveRange(selected) {
9507 return selected instanceof Date ? {
9508 start: selected,
9509 end: selected
9510 } : selected;
9511}
9512
9513var styles$K = {
9514 "DescriptionList": "Polaris-DescriptionList",
9515 "Term": "Polaris-DescriptionList__Term",
9516 "Description": "Polaris-DescriptionList__Description"
9517};
9518
9519var getUniqueTermKey = other.createUniqueIDFactory("Term");
9520var getUniqueDescriptionKey = other.createUniqueIDFactory("Description");
9521function DescriptionList(_ref) {
9522 var items = _ref.items;
9523 var terms = items.reduce(function (allTerms, _ref2) {
9524 var term = _ref2.term,
9525 description = _ref2.description;
9526 return [].concat(_toConsumableArray(allTerms), [React__default.createElement("dt", {
9527 key: getUniqueTermKey(),
9528 className: styles$K.Term
9529 }, term), React__default.createElement("dd", {
9530 key: getUniqueDescriptionKey(),
9531 className: styles$K.Description
9532 }, description)]);
9533 }, []);
9534 return React__default.createElement("dl", {
9535 className: styles$K.DescriptionList
9536 }, terms);
9537}
9538
9539var styles$L = {
9540 "DisplayText": "Polaris-DisplayText",
9541 "sizeSmall": "Polaris-DisplayText--sizeSmall",
9542 "sizeMedium": "Polaris-DisplayText--sizeMedium",
9543 "sizeLarge": "Polaris-DisplayText--sizeLarge",
9544 "sizeExtraLarge": "Polaris-DisplayText--sizeExtraLarge"
9545};
9546
9547function DisplayText(_ref) {
9548 var _ref$element = _ref.element,
9549 Element = _ref$element === void 0 ? 'p' : _ref$element,
9550 children = _ref.children,
9551 _ref$size = _ref.size,
9552 size = _ref$size === void 0 ? 'medium' : _ref$size;
9553 var className = classNames(styles$L.DisplayText, size && styles$L[variationName('size', size)]);
9554 return React__default.createElement(Element, {
9555 className: className
9556 }, children);
9557}
9558
9559function capitalize() {
9560 var word = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
9561 var wordLower = word.toLowerCase();
9562 return wordLower.charAt(0).toUpperCase() + wordLower.slice(1);
9563}
9564
9565/**
9566 * Attaches and removes event listeners from the target
9567 * @param target Defines a target for the listener to be placed on. Defaults to window.
9568 * @param type Defines the type of event, i.e blur or focus
9569 * @param handler Defines a callback to be invoked when the event type occurs
9570 * @param listenerOptions Object that specifies event properties
9571 * @param options Object that defines properties used in the hook
9572 * interface Options {
9573 * // Uses window as a back up event target when the current
9574 * // target is falsy
9575 * defaultToWindow: boolean;
9576 * }
9577 * @example
9578 * function Playground() {
9579 * useEventListener(window, 'resize', () => console.log('resize'));
9580 *
9581 * return null;
9582 * }
9583 */
9584
9585function useEventListener(target, type, handler, listenerOptions, options) {
9586 React.useEffect(function () {
9587 var eventTarget = target && 'current' in target ? target.current : target;
9588
9589 if (!eventTarget && options && options.defaultToWindow) {
9590 eventTarget = window;
9591 }
9592
9593 if (!eventTarget) return;
9594 eventTarget.addEventListener(type, handler, listenerOptions);
9595 return function () {
9596 eventTarget && eventTarget.removeEventListener(type, handler, listenerOptions);
9597 };
9598 }, [handler, listenerOptions, options, target, type]);
9599}
9600
9601/**
9602 * Similarly to the life-cycle method componentDidMount, useComponentDidMount
9603 * will be invoked after the component has mounted, and only the initial mount.
9604 * @param callback Defines a callback to invoke once the component has
9605 * initially mounted.
9606 * @example
9607 * function Playground({active}) {
9608 * useComponentDidMount(() => {
9609 * if (active) {
9610 * console.warning(`Component has mounted.`);
9611 * }
9612 * });
9613 *
9614 * return null;
9615 * }
9616 */
9617
9618function useComponentDidMount(callback) {
9619 var isAfterInitialMount = useIsAfterInitialMount();
9620 var hasInvokedLifeCycle = React.useRef(false);
9621
9622 if (isAfterInitialMount && !hasInvokedLifeCycle.current) {
9623 hasInvokedLifeCycle.current = true;
9624 return callback();
9625 }
9626}
9627
9628var fileUpload = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJNNjkuODEgMTI0LjQzYTEuMzkgMS4zOSAwIDAxLS41Ny0uMTIgMS40MyAxLjQzIDAgMDEtLjQ5LS4zMiAxLjUyIDEuNTIgMCAwMS0uNDQtMS4wNiAxLjUgMS41IDAgMDEuNDQtMS4wNiAxLjUzIDEuNTMgMCAwMTEuMzUtLjQyIDEuMzEgMS4zMSAwIDAxLjI4LjA5IDEuMDggMS4wOCAwIDAxLjI2LjE0IDEuMDYgMS4wNiAwIDAxLjIzLjE5IDEuMzcgMS4zNyAwIDAxLjE5LjIyIDEuMjYgMS4yNiAwIDAxLjEzLjI2IDEuNDkgMS40OSAwIDAxLS4zMiAxLjY0IDEuMzQgMS4zNCAwIDAxLS40OS4zMiAxLjM5IDEuMzkgMCAwMS0uNTcuMTJ6bS05LjcxLTEuNWExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41MSAxLjUxIDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptLTguMjIgMGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bS04LjIyIDBhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUxIDEuNTEgMCAwMTEuNTEgMS41IDEuNTEgMS41MSAwIDAxLTEuNTEgMS41IDEuNTEgMS41MSAwIDAxLTEuNS0xLjV6bS04LjIxIDBhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS41em0tOC4yMiAwYTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41MSAxLjUxIDAgMDExLjUxIDEuNSAxLjUxIDEuNTEgMCAwMS0xLjUxIDEuNSAxLjUxIDEuNTEgMCAwMS0xLjUtMS41em0tOC4yMSAwYTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41IDEuNSAwIDAxMS41IDEuNSAxLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41Mi0xLjV6bS04LjIyIDBhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUxIDEuNTEgMCAwMTEuNTEgMS41IDEuNTEgMS41MSAwIDAxLTEuNTEgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS41em0tNi43MSAxLjVBMS41IDEuNSAwIDAxMyAxMjRhMS40NyAxLjQ3IDAgMDEtLjQ0LTEuMDYgMS41MyAxLjUzIDAgMDEwLS4zYzAtLjA5IDAtLjE5LjA4LS4yOGEyLjE1IDIuMTUgMCAwMS4xNC0uMjYgMS4zNyAxLjM3IDAgMDEuMTktLjIyIDEuMDYgMS4wNiAwIDAxLjIzLS4xOSAxLjA4IDEuMDggMCAwMS4yNi0uMTQgMS4zMSAxLjMxIDAgMDEuMjgtLjA5IDEuODggMS44OCAwIDAxLjU4IDAgMS4zMSAxLjMxIDAgMDEuMjguMDkgMS4zIDEuMyAwIDAxLjI2LjE0IDEuMzcgMS4zNyAwIDAxLjIzLjE5IDEuMzcgMS4zNyAwIDAxLjE5LjIyIDEuMjYgMS4yNiAwIDAxLjEzLjI2IDEuNDEgMS40MSAwIDAxLjEyLjU4IDEuNTYgMS41NiAwIDAxLS4xMS41NyAxLjYzIDEuNjMgMCAwMS0uMzMuNDkgMS41IDEuNSAwIDAxLTEgLjQzem0tMS41LTkuNWExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjQ5em0wLThhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS40OXptMC04YTEuNSAxLjUgMCAwMTEuNS0xLjVBMS41IDEuNSAwIDAxNS41OSA4M2ExLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptMC04YTEuNSAxLjUgMCAwMTEuNS0xLjVBMS41IDEuNSAwIDAxNS41OSA3NWExLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptMC04YTEuNSAxLjUgMCAwMTEuNS0xLjVBMS41IDEuNSAwIDAxNS41OSA2N2ExLjUxIDEuNTEgMCAwMS0xLjUgMS41MUExLjUxIDEuNTEgMCAwMTIuNTkgNjd6bTAtOGExLjUgMS41IDAgMDExLjUtMS41QTEuNSAxLjUgMCAwMTUuNTkgNTlhMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bTAtOGExLjUxIDEuNTEgMCAwMTEuNS0xLjUxQTEuNTEgMS41MSAwIDAxNS41OSA1MWExLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptMS41LTYuNDZBMS41IDEuNSAwIDAxMi41OSA0M2ExLjM2IDEuMzYgMCAwMTAtLjI5IDIuMjkgMi4yOSAwIDAxLjA4LS4yOCAyLjE1IDIuMTUgMCAwMS4xNC0uMjYgMS41NyAxLjU3IDAgMDEuNDItLjQyIDIgMiAwIDAxLjI1LS4xNGwuMjktLjA4YTEuNSAxLjUgMCAwMTEuMzUuNDEgMS40NSAxLjQ1IDAgMDEuMTkuMjMgMS4yNiAxLjI2IDAgMDEuMTMuMjYgMS4zMSAxLjMxIDAgMDEuMDkuMjggMS4zNiAxLjM2IDAgMDEwIC4yOSAxLjUyIDEuNTIgMCAwMS0uMzggMSAyLjExIDIuMTEgMCAwMS0uMjMuMTkgMS4yNiAxLjI2IDAgMDEtLjI2LjEzIDEuMzEgMS4zMSAwIDAxLS4yOC4wOSAxLjQzIDEuNDMgMCAwMS0uMjkuMDZ6TTYwLjEgNDNhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS41em0tOC4yMiAwYTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41IDEuNSAwIDAxMS41IDEuNSAxLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptLTguMjIgMGExLjUgMS41IDAgMDExLjUtMS41IDEuNTEgMS41MSAwIDAxMS41MSAxLjUgMS41MSAxLjUxIDAgMDEtMS41MSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bS04LjIxIDBhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS41em0tOC4yMiAwYTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41IDEuNSAwIDAxMS41IDEuNSAxLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXpNMTkgNDNhMS41IDEuNSAwIDAxMS41LTEuNUExLjUgMS41IDAgMDEyMiA0M2ExLjUgMS41IDAgMDEtMS41IDEuNUExLjUgMS41IDAgMDExOSA0M3ptLTguMiAwYTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41IDEuNSAwIDAxMS41IDEuNSAxLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNXptNTkuMDEgMS40N2ExLjUgMS41IDAgMDEtMS4wNi0uNDcgMS41MiAxLjUyIDAgMDEtLjQ0LTEgMS41IDEuNSAwIDAxMS43OS0xLjVsLjI4LjA4LjI2LjE0YTIuMTEgMi4xMSAwIDAxLjIzLjE5IDEuNSAxLjUgMCAwMS40NCAxLjA5IDEuNTIgMS41MiAwIDAxLS40NCAxIDIuMTEgMi4xMSAwIDAxLS4yMy4xOSAxLjI2IDEuMjYgMCAwMS0uMjYuMTMgMS4zMSAxLjMxIDAgMDEtLjI4LjA5IDEuMzYgMS4zNiAwIDAxLS4yOS4wNnptLTEuNSA3MC40NmExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjV6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjQ5em0wLThhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS40OXptMC04YTEuNSAxLjUgMCAwMTEuNS0xLjUgMS41IDEuNSAwIDAxMS41IDEuNSAxLjUgMS41IDAgMDEtMS41IDEuNSAxLjUgMS41IDAgMDEtMS41LTEuNDN6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjQzem0wLThhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS40OSAxLjUgMS41IDAgMDEtMS41LTEuNDJ6bTAtOGExLjUgMS41IDAgMDExLjUtMS41IDEuNSAxLjUgMCAwMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNS0xLjQzem0wLThhMS41IDEuNSAwIDAxMS41LTEuNSAxLjUgMS41IDAgMDExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUtMS40M3oiIGZpbGw9IiNkZWU0ZjUiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjYuNjcgMy41N2g3OS40MXY5Ni42MUgyNi42N3oiLz48cGF0aCBkPSJNMTA2LjkyIDEwMUg5MS43OGMtMS42NCAwLTMuMjQuMTUtNC45LjE4cy0zLjM5LS4wNS01LjExLS4xM2MtLjg1IDAtMS43LS4wNi0yLjU0IDBzLTEuNjcgMC0yLjQ5IDBsLTkuOTEuMjljLTMuMzIuMDgtNi42Mi4yNC0xMCAuMjZzLTYuNzgtLjI3LTEwLjExLS4xOWMtNi42My40Mi0xMy40LjE2LTIwLjA3IDBoLS4wOGExLjEgMS4xIDAgMDEtMS4wNy0xLjEzYy4wOC0yIC4wNi00IC4wOC02czAtNCAwLTYtLjE5LTQtLjIzLTYgLjE1LTQgLjI4LTZhMjEuNiAyMS42IDAgMDAwLTMgMjcuODYgMjcuODYgMCAwMS0uMTQtM3YtNmwuMTMtMTIuMDh2LTEybC4zMy02YTUzIDUzIDAgMDAtLjEzLTZjLS4yMy00IC4xMi04IC4yNi0xMi4wOGwuMDYtM3YtM2wtLjA4LTZBLjU1LjU1IDAgMDEyNi42NCAzYzMuMy0uMSA2LjYxIDAgOS45MiAwczYuNjIgMCA5LjkzLjA2YzEuNjUgMCAzLjMxLjA2IDUgLjA3SDU0bDIuNDgtLjA4IDkuOTMtLjMzQzczIDIuNTQgNzkuNiAyLjQgODYuMjIgMi40M2MzLjMxLjA3IDYuNjIuMyA5LjkzLjI0bDkuOTItLjI2YTEuMTMgMS4xMyAwIDAxMS4xNiAxLjF2LjA2bC4xOCA2LjFjMCAyLS4xMSA0LjA2LS4xNiA2LjA4IDAgNC4wNi4yMiA4LjE2LjEzIDEyLjIyIDAgMi0uMjYgNC0uMzMgNi0uMDYgMSAwIDIgMCAzdjYuMDZsLS4xMiAzYTQ2Ljc1IDQ2Ljc1IDAgMDAuMDkgNi4xM2MuMjEgNC4xNi0uMjEgOC0uMiAxMi4wOC0uMTcgNCAuMTMgOC4yIDAgMTIuMjEgMCAyLS4xNSA0LS4xNiA2cy4wNyA0LjExLjEzIDYuMTlsLjA4IDMuMTJ2My4wNmMuMDYgMi4xOC4xMyA0LjE4LjA1IDYuMTh6bS0xLjctMS42OVY4Ny4zN2MwLTIgLjA4LTMuOTMuMDYtNS45M3MtLjItNC4xMy0uMjYtNi4xNWMtLjE1LTQuMDguMjItNy44MyAwLTExLjkzLS4wNi0yLS4xNi00LjA2LS4yNy02LjFhNDMuODkgNDMuODkgMCAwMTAtNiAzMS4xNCAzMS4xNCAwIDAwLjE2LTUuOSA0NC43NSA0NC43NSAwIDAxLS4wOS02IDU4LjQ1IDU4LjQ1IDAgMDAuMTgtNS44NmMwLTItLjI3LTQuMDUtLjI4LTZzMC00IC4xMS01Ljk1LjE1LTQgLjE0LTYtLjE5LTQtLjE2LTZsLjE0LTYgMS4xMSAxLjExYy0zLjMxLS4wNy02LjYxLS4xOS05LjkyLS4xOHMtNi42Mi4zLTkuOTMuNDNDNzkuNiA1LjA2IDczIDUgNjYuMzcgNC44M2MtMS42NiAwLTMuMzEtLjEtNS0uMTdsLTUtLjI5Yy0zLjMxLS4xOC02LjYxIDAtOS45Mi4xMy02LjYyLjIyLTEzLjI0LjM5LTE5Ljg1LjI3bDEuMi0xLjItLjI4IDZ2M2wuMSAzYy4yMiA0IC44MyA4LjA2LjM3IDEyLjA4LS4xMSAxLS4yNyAyLS4zNCAzczAgMiAwIDNjLjExIDIgLjQxIDQgLjUgNnYzbC0uMDcgMy0uMTQgNkwyOCA2NGwtLjA2IDZhMjIgMjIgMCAwMS0uMiAzIDIwLjE4IDIwLjE4IDAgMDAtLjA4IDNjLjA5IDIgLjI4IDQgLjE5IDZsLS4yNyA2Yy0uMDYgNC0uMTQgOC4wNS0uMTMgMTIuMDhsLS43NC0uNzVoOS44NWMzLjI4IDAgNi41OC4wOCA5Ljg2LjA2czYuNTEtLjI1IDkuNzYtLjI5IDYuNTcuMSA5Ljg3LjE0bDkuOTEuMTloNC44OWMxLjU5IDAgMy4xOC0uMTQgNC44Mi0uMTRzMy4zNC4xMSA1IC4xNGw0Ljg2LS4wNmMzLjE3LS4wNSA2LjQ3LS4wMiA5LjY5LS4wNHoiIGZpbGw9IiNmZmYiLz48ZyBvcGFjaXR5PSIuNSIgZmlsbD0iI2RlZTRmNSI+PHBhdGggZD0iTTI2LjY3IDMuNTdoNzkuNDF2OTYuNjFIMjYuNjd6Ii8+PHBhdGggZD0iTTEwNi45MiAxMDFIOTEuNzhjLTEuNjQgMC0zLjI0LjE1LTQuOS4xOHMtMy4zOS0uMDUtNS4xMS0uMTNjLS44NSAwLTEuNy0uMDYtMi41NCAwcy0xLjY3IDAtMi40OSAwbC05LjkxLjI5Yy0zLjMyLjA4LTYuNjIuMjQtMTAgLjI2cy02Ljc4LS4yNy0xMC4xMS0uMTljLTYuNjMuNDItMTMuNC4xNi0yMC4wNyAwaC0uMDhhMS4xIDEuMSAwIDAxLTEuMDctMS4xM2MuMDgtMiAuMDYtNCAuMDgtNnMwLTQgMC02LS4xOS00LS4yMy02IC4xNS00IC4yOC02YTIxLjYgMjEuNiAwIDAwMC0zIDI3Ljg2IDI3Ljg2IDAgMDEtLjE0LTN2LTZsLjEzLTEyLjA4di0xMmwuMzMtNmE1MyA1MyAwIDAwLS4xMy02Yy0uMjMtNCAuMTItOCAuMjYtMTIuMDhsLjA2LTN2LTNsLS4wOC02QS41NS41NSAwIDAxMjYuNjQgM2MzLjMtLjEgNi42MSAwIDkuOTIgMHM2LjYyIDAgOS45My4wNmMxLjY1IDAgMy4zMS4wNiA1IC4wN0g1NGwyLjQ4LS4wOCA5LjkzLS4zM0M3MyAyLjU0IDc5LjYgMi40IDg2LjIyIDIuNDNjMy4zMS4wNyA2LjYyLjMgOS45My4yNGw5LjkyLS4yNmExLjEzIDEuMTMgMCAwMTEuMTYgMS4xdi4wNmwuMTggNi4xYzAgMi0uMTEgNC4wNi0uMTYgNi4wOCAwIDQuMDYuMjIgOC4xNi4xMyAxMi4yMiAwIDItLjI2IDQtLjMzIDYtLjA2IDEgMCAyIDAgM3Y2LjA2bC0uMTIgM2E0Ni43NSA0Ni43NSAwIDAwLjA5IDYuMTNjLjIxIDQuMTYtLjIxIDgtLjIgMTIuMDgtLjE3IDQgLjEzIDguMiAwIDEyLjIxIDAgMi0uMTUgNC0uMTYgNnMuMDcgNC4xMS4xMyA2LjE5bC4wOCAzLjEydjMuMDZjLjA2IDIuMTguMTMgNC4xOC4wNSA2LjE4em0tMS43LTEuNjlWODcuMzdjMC0yIC4wOC0zLjkzLjA2LTUuOTNzLS4yLTQuMTMtLjI2LTYuMTVjLS4xNS00LjA4LjIyLTcuODMgMC0xMS45My0uMDYtMi0uMTYtNC4wNi0uMjctNi4xYTQzLjg5IDQzLjg5IDAgMDEwLTYgMzEuMTQgMzEuMTQgMCAwMC4xNi01LjkgNDQuNzUgNDQuNzUgMCAwMS0uMDktNiA1OC40NSA1OC40NSAwIDAwLjE4LTUuODZjMC0yLS4yNy00LjA1LS4yOC02czAtNCAuMTEtNS45NS4xNS00IC4xNC02LS4xOS00LS4xNi02bC4xNC02IDEuMTEgMS4xMWMtMy4zMS0uMDctNi42MS0uMTktOS45Mi0uMThzLTYuNjIuMy05LjkzLjQzQzc5LjYgNS4wNiA3MyA1IDY2LjM3IDQuODNjLTEuNjYgMC0zLjMxLS4xLTUtLjE3bC01LS4yOWMtMy4zMS0uMTgtNi42MSAwLTkuOTIuMTMtNi42Mi4yMi0xMy4yNC4zOS0xOS44NS4yN2wxLjItMS4yLS4yOCA2djNsLjEgM2MuMjIgNCAuODMgOC4wNi4zNyAxMi4wOC0uMTEgMS0uMjcgMi0uMzQgM3MwIDIgMCAzYy4xMSAyIC40MSA0IC41IDZ2M2wtLjA3IDMtLjE0IDZMMjggNjRsLS4wNiA2YTIyIDIyIDAgMDEtLjIgMyAyMC4xOCAyMC4xOCAwIDAwLS4wOCAzYy4wOSAyIC4yOCA0IC4xOSA2bC0uMjcgNmMtLjA2IDQtLjE0IDguMDUtLjEzIDEyLjA4bC0uNzQtLjc1aDkuODVjMy4yOCAwIDYuNTguMDggOS44Ni4wNnM2LjUxLS4yNSA5Ljc2LS4yOSA2LjU3LjEgOS44Ny4xNGw5LjkxLjE5aDQuODljMS41OSAwIDMuMTgtLjE0IDQuODItLjE0czMuMzQuMTEgNSAuMTRsNC44Ni0uMDZjMy4xNy0uMDUgNi40Ny0uMDIgOS42OS0uMDR6Ii8+PC9nPjxyZWN0IHg9IjM4LjgiIHk9IjE2LjE3IiB3aWR0aD0iMjEuOTYiIGhlaWdodD0iMjMuMzMiIHJ4PSIxMC43MSIgcnk9IjEwLjcxIiBmaWxsPSIjZGVlNGY1Ii8+PHBhdGggZD0iTTUwLjA1IDQwLjI5YTExLjc4IDExLjc4IDAgMDEtNC43LS44MmMtLjcyLS4zNS0xLjQzLS43Mi0yLjE1LTEuMDktLjM1LS4xOS0uNjgtLjQzLTEtLjY0cy0uNjUtLjUtMS0uNzZhMTEuNDUgMTEuNDUgMCAwMS0zLjI3LTguODdMMzggMjdjMC0uMzkgMC0uOC4wNy0xLjJzLjE0LS44LjIyLTEuMmwuMzQtMS4xNmExMC42OCAxMC42OCAwIDAxMi41MS00IDE1LjUxIDE1LjUxIDAgMDExLjc2LTEuNTggMTAuMTggMTAuMTggMCAwMTIuMDYtMS4xNiAxMy42MyAxMy42MyAwIDAxNC41OC0uOTUgMTEuODUgMTEuODUgMCAwMTQuNTguODEgMTIuMjkgMTIuMjkgMCAwMTQgMi40MSAxMS43NSAxMS43NSAwIDAxMy40NiA4LjY1IDEyLjYxIDEyLjYxIDAgMDEtMyA4LjgyIDcuNTcgNy41NyAwIDAxLS44OS44MSA4LjQ2IDguNDYgMCAwMS0xIC43MiAxMi40MiAxMi40MiAwIDAxLTIgMS4yMyAxMS4xNCAxMS4xNCAwIDAxLTQuNjQgMS4wOXptMC0xLjU4YTkuNjkgOS42OSAwIDAwNC0uOTIgOS4zMiA5LjMyIDAgMDAxLjc3LTEuMDYgNS4xMiA1LjEyIDAgMDAuNzYtLjcxIDcuMDcgNy4wNyAwIDAwLjY3LS43OCAxMS4xNSAxMS4xNSAwIDAwMi4wOS0zLjQ5bC4zLTEgLjE2LTEgLjA3LTF2LTEuMThjMC0uMzguMDUtLjc2IDAtMS4xYTYuMTUgNi4xNSAwIDAwMC0xIDYgNiAwIDAwLS41My0yQTEwLjE5IDEwLjE5IDAgMDA1Ny4wNSAyMGMtLjUxLS40Ny0xLjA3LS44Ni0xLjU3LTEuMzZhNC40NCA0LjQ0IDAgMDAtMS44Mi0xIDYuMDcgNi4wNyAwIDAwLTEtLjI1IDYuMTQgNi4xNCAwIDAwLTEtLjEyYy0uNzEtLjA4LTEuMzMgMC0yLjExIDBoLTFhOC42MSA4LjYxIDAgMDAtMSAuMTIgOS4zOCA5LjM4IDAgMDAtMiAuNjggMTEuMzIgMTEuMzIgMCAwMC0xLjc5IDEgNSA1IDAgMDAtLjgzLjYybC0uMzkuMzUtLjMyLjRhMjUuMzUgMjUuMzUgMCAwMC0yLjExIDMuNTUgNi40OCA2LjQ4IDAgMDAtLjMyIDFjLS4wNS4zNC0uMTEuNjktLjE1IDFMMzkuNDYgMjdsLS4xIDEuMTNhOS4zOCA5LjM4IDAgMDAzIDcuNzFjLjI0LjI1LjUuNDkuNzUuNzRzLjU0LjQ1LjgzLjY2YTUuNTkgNS41OSAwIDAwMS45LjkyIDExLjIzIDExLjIzIDAgMDA0LjIxLjU1eiIgZmlsbD0iI2RlZTRmNSIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik00OS43NyAyNy44NGgyOC42OHYzMC40N0g0OS43N3oiLz48cGF0aCBkPSJNNzkgNTguODdjLTIuNDMuMDUtNS0uMTMtNy4zMS4wN2E0MS40MiA0MS40MiAwIDAwLTcuMjYuMTggMjQuODcgMjQuODcgMCAwMS0zLjY3IDAgMTYgMTYgMCAwMC0zLjY3LjA1Yy0yLjQzLjE2LTQuOTItLjItNy4zNC0uMjFhLjY3LjY3IDAgMDEtLjY3LS42OHYtMS45MWMwLS42NC0uMS0xLjI3LS4xNS0xLjktLjE1LTEuMjcuNDQtMi41NC4wOC0zLjgxIDAtMi41NC4xLTUuMDguMS03LjYyYTMyLjMxIDMyLjMxIDAgMDEuMDktMy44MSAxNS4yNiAxNS4yNiAwIDAwLjE4LTEuOWMwLS42NC0uMTMtMS4yNy0uMTYtMS45MSAwLTEuMjYuMTUtMi41My4yMy0zLjhzMC0yLjU0LS4wNS0zLjgxYS4zNi4zNiAwIDAxLjM0LS4zN2MxLjItLjA2IDIuMzkgMCAzLjU5IDBzMi4zOSAwIDMuNTguMDZjMi4zOS4xNiA0Ljc4LS4yMyA3LjE3LS4yOWE4Ni4xIDg2LjEgMCAwMTMuNTktLjEzIDI1LjE5IDI1LjE5IDAgMDEzLjU4LjA5IDYzLjYyIDYzLjYyIDAgMDA3LjItLjE3Ljg3Ljg3IDAgMDEuODkuODN2LjA2YTE4IDE4IDAgMDEtLjEgMS45NCAxOCAxOCAwIDAwMCAxLjk0IDE1LjYxIDE1LjYxIDAgMDEtLjEyIDMuODcgMzguMyAzOC4zIDAgMDAtLjA2IDMuODcgMTMuMiAxMy4yIDAgMDAtLjExIDEuOSAxOS42NCAxOS42NCAwIDAxLjE1IDJjLS4wNiAxLjI3LS4yMiAyLjQ5LS4yMiAzLjc3cy4xNiAyLjY5IDAgMy45MWEyMS4wOCAyMS4wOCAwIDAwMCAzLjg5djJjMCAuNjYuMTIgMS4yNi4xMiAxLjg5em0tMS4xMy0xLjEzdi0zLjcxYTE4LjY0IDE4LjY0IDAgMDAtLjA4LTMuNzggMzUuNSAzNS41IDAgMDEwLTMuNzJjMC0xLjI1LS4yMy0yLjU5LS4yOC0zLjg0YTguNjcgOC42NyAwIDAxLjIxLTEuNzggMTEuMjggMTEuMjggMCAwMC0uMTItMS45IDguNTQgOC41NCAwIDAxLjEtMS44MyA3LjgyIDcuODIgMCAwMDAtMS44NyAxNC4yMSAxNC4yMSAwIDAxMC0zLjc0IDE0LjM5IDE0LjM5IDAgMDAuMDYtMS44NmMwLS42My0uMTEtMS4yNS0uMDktMS44N2wuODMuODNjLTIuMzkgMC00Ljc4LS40LTcuMTctLjA4YTIxLjQ5IDIxLjQ5IDAgMDEtMy41OC4xOUg2NS45bC0xLjc5LS4wN2MtMi4zOSAwLTQuNzgtLjY0LTcuMTctLjI5YTY4LjY5IDY4LjY5IDAgMDEtNy4xNy4yMmwuOC0uOGEyMi4wOSAyMi4wOSAwIDAwLS4xNiAzLjgxIDIyLjMzIDIyLjMzIDAgMDEuMzcgMy44IDE2IDE2IDAgMDAtLjM1IDEuOTEgOC44NiA4Ljg2IDAgMDAuMjYgMS45IDE2LjE5IDE2LjE5IDAgMDEwIDMuODFjLS4xMSAyLjU0IDAgNS4wOC0uMTcgNy42Mi0uNDIgMS4yNy4xMyAyLjU0IDAgMy44MWwtLjE4IDEuOS0uMDUgMS45MS0uNTMtLjUzYzIuMzcuMDkgNC43MSAwIDcuMDggMGEyMi41NyAyMi41NyAwIDAwMy41LS4xIDI1LjQ4IDI1LjQ4IDAgMDEzLjUgMCA0NSA0NSAwIDAwNy4wNS4wNmMyLjQ3LjE3IDQuNjYtLjAzIDcgMHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNODMuNzEgNDEuMTlMNzQgNTkuMjhsMjEuNDYtLjY3LTExLjE1LTE3LjQ1YS4zNC4zNCAwIDAwLS42LjAzeiIgZmlsbD0iI2RlZTRmNSIvPjxwYXRoIGQ9Ik04NC40IDQxLjU2Yy0uODIgMS41LTEuNTkgMy0yLjQ5IDQuNDhsLTEgMi4zN2MtLjM1Ljc4LS43NSAxLjUzLTEuMTcgMi4yOGwtMi41MiA0LjQ3Yy0uODEgMS41LTEuNjcgMy0yLjU0IDQuNDVsLS42NS0xYzEuNzkgMCAzLjU4LjE0IDUuMzcgMHMzLjU4IDAgNS4zNy0uMDkgMy41NyAwIDUuMzYtLjEyYTUzLjUxIDUzLjUxIDAgMDE1LjM2LS40M2wtLjU1IDEtMS40OS0yLjIzYy0uNTItLjc0LTEtMS40Ny0xLjUyLTIuMjJDOTEgNTMgOTAuMTMgNTEuNDMgODkuMSA1MGMtLjQ4LS43Ni0xLTEuNDgtMS40NS0yLjI2cy0uODUtMS41OC0xLjM2LTIuMzEtMS0xLjQ5LTEuNTEtMi4yMkw4NCA0Mi4wOGwtLjMxLS40NmEuNDQuNDQgMCAwMC43MS0uMDZ6bS0xLjQtLjc0YTEuMTMgMS4xMyAwIDAxLjg1LS42IDEuMTUgMS4xNSAwIDAxMSAuMzYgMiAyIDAgMDEuMTcuMjRsLjA5LjE0LjE5LjI4LjczIDEuMTIgMS40OCAyLjI0Yy40Ny43NiAxLjA2IDEuNDQgMS41OCAyLjE3cy45NCAxLjUyIDEuNDEgMi4yOGMuODkgMS41NiAxLjg2IDMuMDYgMi43OCA0LjYuNDQuNzguODUgMS41OCAxLjM0IDIuMzNsMS41MyAyLjJhLjc4Ljc4IDAgMDEtLjIgMS4wOC43NS43NSAwIDAxLS4zOC4xM2gtLjA2YTI0LjcyIDI0LjcyIDAgMDEtNS4zNy4wN2MtMS43OS4wNy0zLjU3LjUyLTUuMzYuNDRhMTcuMjYgMTcuMjYgMCAwMC0yLjY5IDBjLS44OS4wNi0xLjc4LjA3LTIuNjguMDgtMS43OS0uMTUtMy41Ny40MS01LjM2LjE0aC0uMjVhLjguOCAwIDAxLS42Ny0uOTIuNjkuNjkgMCAwMS4xMi0uMzJsLjc1LTEuMDkuNi0xLjEzYy40NS0uNzMuOTMtMS40NCAxLjQtMi4xNS44OS0xLjQ3IDEuNi0zIDIuMzQtNC41Ny4zNi0uNzguNzItMS41NSAxLjE0LTIuM2wxLjMtMi4yMWMuNjYtMS41OCAxLjQ4LTMuMDggMi4yMi00LjYxem0xNC43NiAzNi42OUg4NmExIDEgMCAwMTAtMmgxMS43NmExIDEgMCAwMTAgMnptLTIwLjE2IDBIMzVhMSAxIDAgMDEwLTJoNDIuNmExIDEgMCAwMTAgMnpNOTggODguMTRINjkuMzFhMSAxIDAgMDEwLTJIOThhMSAxIDAgMDEwIDJ6bS0zNy4yNSAwSDM1YTEgMSAwIDAxMC0yaDI1Ljc1YTEgMSAwIDAxMCAyeiIgZmlsbD0iI2RlZTRmNSIvPjxjaXJjbGUgY3g9IjEwNy40MSIgY3k9IjEwNi40MyIgcj0iMTgiIGZpbGw9IiNkZWU0ZjUiIHN0cm9rZT0iI2RlZTRmNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjMiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzIiBkPSJNMTA3LjQxIDk2Ljg0djE5LjE4bTcuMTgtOS41OWwtNy4xOC05LjU5LTcuMTggOS41OSIvPjwvc3ZnPgo=';
9629
9630var imageUpload = 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTI5IDEwOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik02OC43OCAxMDYuMjVhMS41MiAxLjUyIDAgMDEtMS4wNi0uNDQgMS41NCAxLjU0IDAgMDEtLjMyLS40OSAxLjM5IDEuMzkgMCAwMS0uMTItLjU3IDEuNDEgMS40MSAwIDAxLjEyLS41OC45NC45NCAwIDAxLjE0LS4yNiAxIDEgMCAwMS4xOC0uMjIgMS41NCAxLjU0IDAgMDEyLjEyIDAgMS41IDEuNSAwIDAxLTEuMDYgMi41NnptLTkuNzgtMS41YTEuNSAxLjUgMCAxMTMgMCAxLjUgMS41IDAgMDEtMyAwem0tOC4zMSAwYTEuNSAxLjUgMCAwMTMgMCAxLjUxIDEuNTEgMCAwMS0xLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUzLTEuNWguMDN6bS04LjMyIDBhMS41IDEuNSAwIDExMS41IDEuNSAxLjUgMS41IDAgMDEtMS41My0xLjVoLjAzem0tOC4zMSAwYTEuNSAxLjUgMCAxMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNTYtMS41aC4wNnptLTguMzEgMGExLjUgMS41IDAgMTExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUzLTEuNWguMDN6bS04LjMyIDBhMS41IDEuNSAwIDExMS41IDEuNSAxLjUxIDEuNTEgMCAwMS0xLjUzLTEuNWguMDN6bS04LjMxIDBhMS41IDEuNSAwIDExMS41IDEuNSAxLjUgMS41IDAgMDEtMS41My0xLjVoLjAzem0tNi44NCAxLjVhMS41IDEuNSAwIDAxLTEuMDYtLjQ0IDEuNSAxLjUgMCAwMTAtMi4xMiAxLjA2IDEuMDYgMCAwMS4yMy0uMTkgMS4wOCAxLjA4IDAgMDEuMjYtLjE0IDEuMzEgMS4zMSAwIDAxLjI4LS4wOSAxLjg4IDEuODggMCAwMS41OCAwIDEuMzEgMS4zMSAwIDAxLjI4LjA5IDEuMyAxLjMgMCAwMS4yNi4xNCAxLjM3IDEuMzcgMCAwMS4yMy4xOSAxLjUgMS41IDAgMDEuNDQgMS4wNiAxLjUgMS41IDAgMDEtMS41IDEuNXptLTEuNS05LjQzYTEuNSAxLjUgMCAxMTMgMCAxLjUgMS41IDAgMDEtMyAwem0wLTcuOTJhMS41IDEuNSAwIDExMyAwIDEuNSAxLjUgMCAwMS0zIDB6bTAtNy45MmExLjUgMS41IDAgMTEzIC4wMiAxLjUgMS41IDAgMDEtMyAwdi0uMDJ6bTAtNy45M2ExLjUgMS41IDAgMTEzIDAgMS41IDEuNSAwIDAxLTMgMHptMC03LjkyYTEuNSAxLjUgMCAxMTMgMCAxLjUgMS41IDAgMDEtMyAwem0wLTcuOTNhMS41IDEuNSAwIDExMyAwIDEuNSAxLjUgMCAwMS0zIDB6bTAtNy45MmExLjUgMS41IDAgMTEzIDAgMS41IDEuNSAwIDAxLTMgMHptMS41LTYuNDJhMS41IDEuNSAwIDAxLTEuMDYtMi41NiAxLjA2IDEuMDYgMCAwMS4yMy0uMTkgMS41OSAxLjU5IDAgMDEuMjYtLjExbC4yOS0uMTFhMS40MiAxLjQyIDAgMDEuNTggMGwuMjguMDguMjYuMTRhMS4zNyAxLjM3IDAgMDEuMjMuMTkgMS41IDEuNSAwIDAxLTEuMDYgMi41NmgtLjAxek01OSA0MS4zNmExLjUgMS41IDAgMTEzIDAgMS41IDEuNSAwIDAxLTMgMHptLTguMzEgMGExLjUgMS41IDAgMTExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUzLTEuNWguMDN6bS04LjMyIDBhMS41IDEuNSAwIDExMS41IDEuNSAxLjUgMS41IDAgMDEtMS41My0xLjVoLjAzem0tOC4zMSAwYTEuNSAxLjUgMCAxMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNTYtMS41aC4wNnptLTguMzEgMGExLjUgMS41IDAgMTExLjUgMS41IDEuNSAxLjUgMCAwMS0xLjUzLTEuNWguMDN6bS04LjMyIDBhMS41IDEuNSAwIDExMS41IDEuNSAxLjUgMS41IDAgMDEtMS41My0xLjVoLjAzem0tOC4zMSAwYTEuNSAxLjUgMCAxMTEuNSAxLjUgMS41IDEuNSAwIDAxLTEuNTMtMS41aC4wM3ptNTkuNjYgMS41YTEuNDkgMS40OSAwIDAxLTEuMzgtMi4wOCAxLjEgMS4xIDAgMDEuMTQtLjI2IDEuMjQgMS4yNCAwIDAxLjE4LS4yMiAxLjUyIDEuNTIgMCAwMTEuMzYtLjQxbC4yOC4wOGEyIDIgMCAwMS4yNS4xNCAxLjA2IDEuMDYgMCAwMS4yMy4xOSAxLjMgMS4zIDAgMDEuMTkuMjJjMCAuMDkuMS4xNy4xNC4yNmExLjQ3IDEuNDcgMCAwMS4wOC4yOCAxLjUgMS41IDAgMDEtLjQxIDEuMzYgMSAxIDAgMDEtLjIzLjE4IDEuMjMgMS4yMyAwIDAxLS4yNS4xNCAxLjQxIDEuNDEgMCAwMS0uNTguMTJ6bS0xLjUgNTMuOTZhMS41IDEuNSAwIDExMyAwIDEuNSAxLjUgMCAwMS0zIDB6bTAtNy45MmExLjUgMS41IDAgMTEzIDAgMS41IDEuNSAwIDAxLTMgMHptMC03LjkyYzAtLjgzLjY3LTEuNTA1IDEuNS0xLjUxYTEuNTEgMS41MSAwIDAxMS41IDEuNTMgMS41IDEuNSAwIDAxLTMgMHYtLjAyem0wLTcuOTNhMS41IDEuNSAwIDExMyAwIDEuNSAxLjUgMCAwMS0zIDB6bTAtNy45MmExLjUgMS41IDAgMTEzIDAgMS41IDEuNSAwIDAxLTMgMHptMC03LjkzYTEuNSAxLjUgMCAxMTMgMCAxLjUgMS41IDAgMDEtMyAwem0wLTcuOTJhMS41IDEuNSAwIDExMyAwIDEuNSAxLjUgMCAwMS0zIDB6IiBmaWxsPSIjREVFNEY1IiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xNy42NCAxLjk4aDkxLjI2djg3LjU1SDE3LjY0eiIvPjxwYXRoIGQ9Ik0xMDkuNzUgOTAuMzhIOTguMTZjLTEuOTIgMC0zLjg4LS4wNi01LjczIDAtLjk0IDAtMS44NS4xLTIuODEuMWgtMi45MWMtMi0uMDctMy45NS0uMTctNS44Ni0uMTZsLTUuNjguMTUtMTEuMzguMzNjLTEuOTEgMC0zLjgxLjEzLTUuNzUuMXMtMy44OS0uMTMtNS44My0uMTdjLTEuOTQtLjA0LTMuODUgMC01Ljc1LjA2cy0zLjgxLjE3LTUuNzMuMTljLTMuODctLjA3LTcuNzItLjE0LTExLjU4LS4yNmwtMi44OC0uMDhoLTguNjNhMSAxIDAgMDEtMS0xYzAtMy42NS0uMzktNy4yOS0uMTctMTAuOTRhNDUuNSA0NS41IDAgMDAuMjMtNS40N2MtLjA2LS45MS0uMTctMS44My0uMTgtMi43NC0uMDEtLjkxIDAtMS44MiAwLTIuNzMgMC03LjMuMjEtMTQuNi4xNi0yMS44OVY0MC40YzAtMS44Mi4xNy0zLjY1LjI1LTUuNDguMDgtMS44My4xOS0zLjY0LjEzLTUuNDctLjA2LTEuODMtLjI0LTMuNjQtLjIzLTUuNDcgMC0zLjY1LjMtNy4yOS4zNy0xMC45NC4wNy0zLjY1IDAtNy4zLS4wOC0xMC45NSAwLS4zLjI0LS41NDUuNTQtLjU1IDMuOC0uMDkgNy42MSAwIDExLjQxIDBzNy42IDAgMTEuNDEuMTFjMS45IDAgMy44LjA1IDUuNyAwbDUuNy0uMThjMy44MS0uMTYgNy42MS0uMjQgMTEuNDEtLjMzIDMuOC0uMDkgNy42LS4xMiAxMS40MS0uMTggMy44MS0uMDYgNy42LjIxIDExLjQuMjYgMy44LjA1IDcuNjEtLjE2IDExLjQxLS4yNCAzLjgtLjA4IDcuNjEtLjMzIDExLjQxLS4xaC4wOEExLjE5IDEuMTkgMCAwMTExMC4xMyAyYzAgLjkzLS4wNiAxLjg1LS4wNyAyLjc3bC4wNiAyLjc2LjExIDUuNTRjMCAxLjg1IDAgMy42OS0uMTIgNS41Mi0uMTIgMS44My0uMjYgMy42NC0uMjcgNS40OCAwIDMuNjguMTYgNy40MS0uMDkgMTFhNDUuMjEgNDUuMjEgMCAwMC4xMSA1LjU2IDUzLjcyIDUzLjcyIDAgMDEwIDUuNTNjLS4xNiAzLjYyLS4yNSA3LjI1LS4yNiAxMC45My0uMDEgMy42OC4xNyA3LjQ3IDAgMTEtLjE3IDMuNTMgMCA3LjM0LjA4IDExLjExLjA2IDEuOSAwIDMuNzMuMDYgNS41OS4wNiAxLjg2LjAzIDMuNzcuMDEgNS41OXptLTEuNy0xLjdWNzcuODdjLjA2LTMuNTUuMTgtNy4wOC0uMDYtMTAuODUtLjEtMS44Ny0uMTktMy43Mi0uMTctNS41MWwuMTEtNS4zNGMwLTMuNi0uMTgtNy4zLS4zNy0xMWEzNi44OSAzNi44OSAwIDAxMC01LjM3IDMwLjUyIDMwLjUyIDAgMDAuMTgtNS4zNSA1MCA1MCAwIDAxLS4xNi01LjQ1YzAtMS43OC4yMy0zLjU1LjIzLTUuMzZ2LTIuNzJsLS4xNi0yLjczYy0uMTItMS44Mi0uMTItMy42Mi0uMDktNS40MmwuMTctNS40LjA4LTIuN1YxLjk1bDEuMTQgMS4xNWMtNy42MS4zMi0xNS4yMS0uMzktMjIuODItLjE4LTEuOSAwLTMuOC4xOS01LjcuMjktLjk1LjA3LTEuOS4xLTIuODUuMTMtLjk1LjAzLTEuOS4wNS0yLjg1IDAtMy44MSAwLTcuNjEuMDUtMTEuNDEtLjA3LTMuOC0uMTItNy42LS4wOS0xMS40MS0uMzNhOTQuMyA5NC4zIDAgMDAtMTEuNC0uMmMtNy42MS4zMi0xNS4yMS40OC0yMi44Mi4zOEwxOC44NCAyYy0uMTQgMy42NS0uNDEgNy4zLS4yNSAxMSAuMTYgMy43LjU4IDcuMjkuNTkgMTAuOTQgMCAxLjgzLS4zNCAzLjY1LS41IDUuNDdhMjAuODkgMjAuODkgMCAwMDAgMi43NGMwIC45MS4xIDEuODIuMTggMi43M2E1MC40MSA1MC40MSAwIDAxLjM2IDUuNDhjLjA1IDEuODItLjA1IDMuNjQtLjA4IDUuNDdsLS4xNCA1LjR2NS40N2wtLjA4IDExdjIuNzNjMCAuOTEtLjE2IDEuODMtLjI0IDIuNzRhNDMuNDUgNDMuNDUgMCAwMC4xNCA1LjQ3Yy4xNyAzLjY1LS4yNCA3LjI5LS4yOCAxMC45NGwtLjg0LS44NGM3LjU2LjE1IDE1LjEyLjA4IDIyLjY3LjA2bDUuNjcuMDZjMS44OSAwIDMuNzkgMCA1LjY1LS4wN2w1LjU5LS4xOWg1LjY2bDExLjQuMiA1LjcuMDljMS44OSAwIDMuNzItLjEgNS41NS0uMTcgMS44My0uMDcgMy43MyAwIDUuNjcgMGg1LjY2YzMuNjMtLjAzIDcuNC0uMDIgMTEuMTMtLjA0eiIgZmlsbD0iI0RFRTRGNSIgZmlsbC1ydWxlPSJub256ZXJvIi8+PGcgb3BhY2l0eT0iLjUiIGZpbGw9IiNERUU0RjUiIGZpbGwtcnVsZT0ibm9uemVybyI+PHBhdGggZD0iTTI1LjkgOS45aDc0Ljc1djcxLjcxSDI1Ljl6Ii8+PHBhdGggZD0iTTEwMS4yMSA4Mi4xOEg4Ny4wNmMtMS41MiAwLTMuMDguMS00LjY5IDAtMS42MS0uMS0zLjIxLS4wOS00Ljc3LS4wOGwtNC42NS4xLTkuMzQuMjJjLTMuMDkuMTItNi4yOSAwLTkuNDUgMC0xLjU4LS4wNi0zLjE0IDAtNC43IDBsLTQuNy4xMWMtNi4zMS0uMDctMTIuNi0uMjktMTguODYtLjI1YS43LjcgMCAwMS0uNzEtLjY5YzAtMy0uMjQtNi0uMTEtOWE0NC43MSA0NC43MSAwIDAwLjE2LTQuNDhjMC0uNzUtLjEyLTEuNS0uMTItMi4yNHYtMi4xOGMwLTYgLjE0LTEyIC4xMS0xNy45My0uMDMtNS45My41Ny0xMS45NS4xLTE3LjkzbC4yNC05Yy4wNi0zIDAtNi0uMDUtOSAwLS4yLjE2LS4zNjUuMzYtLjM3IDMuMTEtLjA2IDYuMjIgMCA5LjM0IDBzNi4yMyAwIDkuMzQuMDdoNC42N2w0LjY4LS4xMmMzLjExLS4xIDYuMjMtLjE2IDkuMzQtLjIyIDMuMTEtLjA2IDYuMjMtLjA3IDkuMzQtLjExIDMuMTEtLjA0IDYuMjMuMTEgOS4zNS4xNSAzLjEyLjA0IDYuMjMtLjA5IDkuMzQtLjE0IDMuMTEtLjA1IDYuMjMtLjE5IDkuMzQtLjA3aC4wNmEuODEuODEgMCAwMS43Ny44MnY0LjUybC4wNiA0LjUzYzAgMS41MSAwIDMtLjA4IDQuNTEtLjA4IDEuNTEtLjE0IDMtLjE3IDQuNDkgMCAzIC4xIDYgMCA5LS4wNyAxLjQ4IDAgMyAuMDYgNC41My4wNiAxLjUzIDAgMyAwIDQuNTMtLjEgMy0uMTYgNS45NC0uMTcgOC45NS0uMDEgMy4wMS4xMSA2LjA5IDAgOXMwIDYgLjA1IDkuMDggMCA2LjE3LjAxIDkuMnptLTEuMTMtMS4xM3YtOC44OGMwLTIuODguMS01Ljg1IDAtOC45LS4xLTMuMDUtLjA5LTYgMC04LjkuMDktMi45LS4xMS02LS4yNC05YTQwLjYzIDQwLjYzIDAgMDEwLTQuNDIgMzIgMzIgMCAwMC4xMi00LjRjLS4yNS0zIDAtNS45MSAwLTguODcgMC0yLjk2LS4zMy02LS4xOC04LjkxbC4xLTQuNDRWOS44OGwuNzcuNzdjLTMuMTEuMTItNi4yMiAwLTkuMzQgMHMtNi4yMy0uMTItOS4zNC0uMDhjLTMuMTEuMDQtNi4yMy4zMy05LjM1LjMtMy4xMi0uMDMtNi4yMyAwLTkuMzQgMC0zLjExIDAtNi4yMy0uMDgtOS4zNC0uMjNsLTQuNjgtLjE3Yy0xLjU1LS4wNS0zLjExIDAtNC42NyAwLTYuMjMuMjItMTIuNDYuMzItMTguNjguMjVsLjgtLjhjLS4xIDMtLjI4IDYtLjE3IDkgLjExIDMgLjM5IDYgLjM5IDkgMCAxLjUtLjIyIDMtLjMyIDQuNDhhMzEuODkgMzEuODkgMCAwMC4xIDQuNDggNzAuNjkgNzAuNjkgMCAwMS4xOCA5Yy0uMTUgNi0uMDcgMTEuOTUtLjE1IDE3LjkzdjIuMjRjMCAuNzQtLjExIDEuNDktLjE2IDIuMjRhNDEuODcgNDEuODcgMCAwMC4wOSA0LjQ4Yy4xIDMtLjE1IDYtLjE4IDlsLS41Ni0uNTZjNi4xOS4xIDEyLjM5IDAgMTguNTggMCAzLjEgMCA2LjIzLjExIDkuMjkgMCAzLjA2LS4xMSA2LjEyLS4yIDkuMjQtLjExbDkuMzQuMTQgNC42Ny4wNiA0LjU3LS4xYzEuNTEtLjA2IDMuMDcgMCA0LjY1IDBoNC42NGMzLjAxLS4xNSA2LjA5LS4xNCA5LjE3LS4xNXoiLz48L2c+PHJlY3QgZmlsbD0iI0RFRTRGNSIgZmlsbC1ydWxlPSJub256ZXJvIiB4PSIzNC42NyIgeT0iMjMuMTEiIHdpZHRoPSIyMi4xNSIgaGVpZ2h0PSIyNC41MiIgcng9IjExLjAyIi8+PHBhdGggZD0iTTQ1Ljc5IDQ4YTEyLjA3IDEyLjA3IDAgMDEtOC42MS0zLjcgMTEuMTEgMTEuMTEgMCAwMS0yLjQyLTQuMTZjLS4xMi0uMzktLjItLjc5LS4zLTEuMTgtLjEtLjM5LS4xMi0uNzktLjE4LTEuMTlsLS4wNS0xLjIxdi0xLjE0YzAtLjc3IDAtMS41NS4wNy0yLjM2IDAtLjQuMTMtLjguMTktMS4xOWwuMzItMS4xNmExMS4wNiAxMS4wNiAwIDAxMi40My00LjA4IDExLjM5IDExLjM5IDAgMDEzLjgyLTIuNzggMTIuMjcgMTIuMjcgMCAwMTQuNjItMSAxMS4yNSAxMS4yNSAwIDAxNC42MSAxIDEyIDEyIDAgMDEzLjg4IDIuNjkgMTEuNDEgMTEuNDEgMCAwMTIuNDMgNC4wOWMuMTMuMzcuMjIuNzcuMzIgMS4xNS4xLjM4LjE0Ljc5LjIxIDEuMTlsLjA3IDEuMTl2MS4xN2MwIC43NyAwIDEuNTUtLjA5IDIuMzUtLjA1LjQtLjEzLjgtLjE5IDEuMTlMNTYuNjQgNDBhMTAuODcgMTAuODcgMCAwMS0yLjM1IDQuMTQgNy40OCA3LjQ4IDAgMDEtLjg2LjgzIDguMjYgOC4yNiAwIDAxLS45NC43NEExMC45MiAxMC45MiAwIDAxNTAuNDQgNDdhMTEuNjIgMTEuNjIgMCAwMS00LjY1IDF6bTAtLjc5YTEwLjI5IDEwLjI5IDAgMDA3Ljg2LTMuNjQgMTEuMjMgMTEuMjMgMCAwMDIuMjItMy44MSAxMyAxMyAwIDAwLjUzLTQuNDZ2LTIuMjljLS4wNi0uMzctLjA5LS43NC0uMTYtMS4xMS0uMDctLjM3LS4xOS0uNzMtLjMxLTEuMDhhMTAuNjkgMTAuNjkgMCAwMC0yLjMtMy44MiAxMC40OCAxMC40OCAwIDAwLTMuNTctMi42NSAxMS4yNyAxMS4yNyAwIDAwLTQuMzctLjc4aC0xLjExYTEwLjYgMTAuNiAwIDAwLTEuMTEuMTYgMTEgMTEgMCAwMC0yLjEuNzEgMTAuMjggMTAuMjggMCAwMC0zLjU4IDIuNjEgMTQuMTIgMTQuMTIgMCAwMC0yLjIzIDMuODMgMTAuMjIgMTAuMjIgMCAwMC0uMzEgMS4xMmMwIC4zNy0uMTIuNzQtLjE2IDEuMTEtLjA4Ljc0LS4xMiAxLjUxLS4xNCAyLjI5YTEwLjU3IDEwLjU3IDAgMDAyLjg0IDguMzQgMTAuMjMgMTAuMjMgMCAwMDggMy40OXYtLjAyeiIgZmlsbD0iI0RFRTRGNSIgZmlsbC1ydWxlPSJub256ZXJvIi8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNDUuNzQgMzUuMzdoMjguOTN2MzIuMDJINDUuNzR6Ii8+PHBhdGggZD0iTTc1IDY3LjY3Yy0yLjQzIDAtNC45NC0uMDYtNy4zIDAtMi41MS0uMTEtNC44NyAwLTcuMjkuMDctMS4yMSAwLTIuNDEuMDktMy42NSAwLTEuMjQtLjA5LTIuNDYtLjA3LTMuNjYgMC0yLjQzLjEyLTQuODktLjA3LTcuMzItLjA3YS4zNi4zNiAwIDAxLS4zNi0uMzZ2LTRjMC0xLjMzLjEyLTIuNjcgMC00LS4wOC0yLjY2IDAtNS4zMyAwLTh2LTRsLjA5LTJjMC0uNjcgMC0xLjM0LS4wNi0yIDAtMS4zMy4wNi0yLjY2LjA5LTQgLjAzLTEuMzQgMC0yLjY3IDAtNGEuMi4yIDAgMDEuMTktLjE5aDcuMjNjMi40MS4wOCA0LjgzLS4xIDcuMjQtLjEyaDcuMjRjMi40MS4xMSA0LjgyIDAgNy4yMy0uMDhhLjQyLjQyIDAgMDEuNDMuNGMuMDcgMS4zNS0uMDkgMi42OSAwIDRzLjA3IDIuNzEgMCA0LS4wNyAyLjY3IDAgNGwtLjA3IDItLjAzIDIuMmMwIDEuMzQtLjEgMi42NS0uMTEgNC0uMDEgMS4zNS4wOCAyLjc0IDAgNGwtLjA1IDIgLjA1IDIuMDZDNzUgNjUgNzUgNjYuMzEgNzUgNjcuNjd6bS0uNTctLjU2di02bC0uMDctMmMtLjA5LTEuMzcgMC0yLjYxIDAtNGwtLjE0LTRjMC0uNjYuMTMtMS4yNy4xMi0xLjk0LS4wMS0uNjctLjA2LTEuMzQtLjA4LTJhMzcuMTIgMzcuMTIgMCAwMDAtNGMtLjA5LTEuMzQgMC0yLjY0IDAtNCAwLTEuMzYtLjA3LTIuNjUgMC00bC40LjRjLTIuNDEgMC00LjgyLS4xNi03LjIzIDBsLTEuODEuMDdINjAuMmMtMi40MSAwLTQuODMtLjI5LTcuMjQtLjEzLTIuNDEuMTYtNC44Mi4xNi03LjIzLjFsLjM5LS4zOWMwIDEuMzMtLjE0IDIuNjctLjA2IDQgLjA4IDEuMzMuMjMgMi42Ny4xNiA0YTE5LjQzIDE5LjQzIDAgMDAtLjE2IDJjMCAuNjYuMDkgMS4zMy4xNCAyIC4xMiAxLjMzIDAgMi42NiAwIDQtLjA2IDIuNjcgMCA1LjM0LS4xMiA4LS4wOSAxLjM0LjEyIDIuNjcgMCA0cy0uMDcgMi42Ny0uMDkgNGwtLjI2LS4yNWg3LjE5YzEuMiAwIDIuMzkgMCAzLjU3LS4wNyAxLjE4LS4wNyAyLjM4IDAgMy41OCAwIDIuNCAwIDQuODUuMTMgNy4xNyAwIDIuNDUuMjkgNC43Ni4xOSA3LjE1LjIxaC4wNHoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxwYXRoIGQ9Ik04MCA0OS40bC05Ljc2IDE5IDIxLjY1LS43LTExLjMxLTE4LjMzYS4zMy4zMyAwIDAwLS41OC4wM3oiIGZpbGw9IiNERUU0RjUiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxwYXRoIGQ9Ik04MC4zMyA0OS41OGMtLjgyIDEuNTgtMS42MiAzLjE3LTIuNDggNC43M2wtMS4xMiAyLjQzLTEuMiAyLjM4Yy0xLjY4IDMuMTUtMy4yOSA2LjMyLTUgOS40NWwtLjMzLS41MmMxLjggMCAzLjYxIDAgNS40Mi0uMDlzMy42MSAwIDUuNDEtLjEzYzEuOC0uMTMgMy42MS0uMDkgNS40MS0uMTYgMS44LS4wNyAzLjYxLS4yMyA1LjQxLS4zbC0uMjcuNTEtMy00LjcxYy0xLTEuNTgtMS44Ny0zLjItMi44OC00Ljc2LS40OS0uNzktMS0xLjU3LTEuNDctMi4zN3MtLjkxLTEuNjItMS40Mi0yLjRsLTEuNDgtMi4zNS0uNzUtMS4xOC0uMzUtLjU0LjEuMDF6bS0uNy0uMzZhLjc0Ljc0IDAgMDEuNTctLjQxLjcxLjcxIDAgMDEuNjYuMjdjLjE5LjI3LjI3LjQxLjQuNjNsLjc0IDEuMTggMS40OCAyLjM2Yy40OC44IDEgMS41NSAxLjUyIDIuMzQuNTIuNzkgMSAxLjU5IDEuNDQgMi4zOGwyLjg2IDQuNzhhNjUuMzUgNjUuMzUgMCAwMDEuNDEgMi40bDEuNSAyLjM1YS4zOC4zOCAwIDAxLS4xMi41NC4zMy4zMyAwIDAxLS4xOS4wNmwtMi43MS4xM2MtLjkuMDgtMS44MSAwLTIuNzEgMC0xLjguMDktMy42LjI5LTUuNDEuMzEtMS44MS4wMi0zLjYxLjEzLTUuNDEuMTQtMS44LjAxLTMuNjEuMjYtNS40Mi4xN2EuNDMuNDMgMCAwMS0uNDEtLjQ1LjQ2LjQ2IDAgMDEwLS4yYy40NS0uNzcuOS0xLjU0IDEuMjktMi4zNC4zOS0uOC44OC0xLjU1IDEuMy0yLjMzLjg4LTEuNTMgMS41OC0zLjE3IDIuNDEtNC43N0w3NiA1Ni4zNyA3Ny4yNyA1NGMuNzMtMS42IDEuNTctMy4xOSAyLjM2LTQuNzh6IiBmaWxsPSIjREVFNEY1IiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48Y2lyY2xlIGZpbGw9IiNERUU0RjUiIGZpbGwtcnVsZT0ibm9uemVybyIgY3g9IjEwOC42NCIgY3k9Ijg4LjI1IiByPSIxOS41Ii8+PHBhdGggZD0iTTEwOC42NCA3OC42NnYxOS4xOG03LjE4LTkuNTlsLTcuMTgtOS41OS03LjE4IDkuNTkiIHN0cm9rZT0iI0ZGRiIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L2c+PC9zdmc+Cg==';
9631
9632var DropZoneContext = React__default.createContext({
9633 disabled: false,
9634 focused: false,
9635 size: 'extraLarge',
9636 type: 'file',
9637 measuring: false
9638});
9639
9640var styles$M = {
9641 "FileUpload": "Polaris-DropZone-FileUpload",
9642 "measuring": "Polaris-DropZone-FileUpload--measuring",
9643 "Button": "Polaris-DropZone-FileUpload__Button",
9644 "globalTheming": "Polaris-DropZone-FileUpload--globalTheming",
9645 "disabled": "Polaris-DropZone-FileUpload--disabled",
9646 "focused": "Polaris-DropZone-FileUpload--focused",
9647 "sizeSlim": "Polaris-DropZone-FileUpload--sizeSlim",
9648 "ActionTitle": "Polaris-DropZone-FileUpload__ActionTitle",
9649 "ActionTitle-disabled": "Polaris-DropZone-FileUpload__ActionTitle--disabled",
9650 "ActionTitle-focused": "Polaris-DropZone-FileUpload__ActionTitle--focused",
9651 "Image": "Polaris-DropZone-FileUpload__Image",
9652 "sizeExtraLarge": "Polaris-DropZone-FileUpload--sizeExtraLarge",
9653 "sizeLarge": "Polaris-DropZone-FileUpload--sizeLarge"
9654};
9655
9656function FileUpload(props) {
9657 var i18n = useI18n();
9658
9659 var _useContext = React.useContext(DropZoneContext),
9660 size = _useContext.size,
9661 measuring = _useContext.measuring,
9662 type = _useContext.type,
9663 focused = _useContext.focused,
9664 disabled = _useContext.disabled;
9665
9666 var suffix = capitalize(type);
9667 var _props$actionTitle = props.actionTitle,
9668 actionTitle = _props$actionTitle === void 0 ? i18n.translate("Polaris.DropZone.FileUpload.actionTitle".concat(suffix)) : _props$actionTitle,
9669 _props$actionHint = props.actionHint,
9670 actionHint = _props$actionHint === void 0 ? i18n.translate("Polaris.DropZone.FileUpload.actionHint".concat(suffix)) : _props$actionHint;
9671 var imageClasses = classNames(styles$M.Image, size && size === 'extraLarge' && styles$M.sizeExtraLarge, size && size === 'large' && styles$M.sizeLarge);
9672 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;
9673 var buttonMarkup = (size === 'extraLarge' || size === 'large') && buttonStyles ? React__default.createElement("div", {
9674 className: buttonStyles
9675 }, actionTitle) : null;
9676 var extraLargeView = size === 'extraLarge' ? React__default.createElement(Stack, {
9677 vertical: true
9678 }, type === 'file' && React__default.createElement("img", {
9679 className: imageClasses,
9680 src: fileUpload,
9681 alt: ""
9682 }), type === 'image' && React__default.createElement("img", {
9683 className: imageClasses,
9684 src: imageUpload,
9685 alt: ""
9686 }), buttonMarkup, React__default.createElement(TextStyle, {
9687 variation: "subdued"
9688 }, actionHint)) : null;
9689 var largeView = size === 'large' ? React__default.createElement(Stack, {
9690 vertical: true,
9691 spacing: "tight"
9692 }, type === 'file' && React__default.createElement("img", {
9693 className: imageClasses,
9694 src: fileUpload,
9695 alt: ""
9696 }), type === 'image' && React__default.createElement("img", {
9697 className: imageClasses,
9698 src: imageUpload,
9699 alt: ""
9700 }), buttonMarkup, React__default.createElement(Caption, null, React__default.createElement(TextStyle, {
9701 variation: "subdued"
9702 }, actionHint))) : null;
9703 var actionTitleClassName = classNames(styles$M.ActionTitle, focused && !disabled && styles$M['ActionTitle-focused'], disabled && styles$M['ActionTitle-disabled']);
9704 var actionTitleMarkup = React__default.createElement("div", {
9705 className: actionTitleClassName
9706 }, actionTitle);
9707 var mediumView = size === 'medium' ? React__default.createElement(Stack, {
9708 vertical: true,
9709 spacing: "tight"
9710 }, actionTitleMarkup, React__default.createElement(Caption, null, React__default.createElement(TextStyle, {
9711 variation: "subdued"
9712 }, actionHint))) : null;
9713 var smallView = size === 'small' ? React__default.createElement(Stack, {
9714 vertical: true,
9715 spacing: "tight"
9716 }, React__default.createElement(Icon, {
9717 source: polarisIcons.DragDropMajorMonotone,
9718 color: "inkLightest"
9719 })) : null;
9720 var fileUploadClassName = classNames(styles$M.FileUpload, measuring && styles$M.measuring);
9721 return React__default.createElement("div", {
9722 className: fileUploadClassName
9723 }, smallView, mediumView, largeView, extraLargeView);
9724}
9725
9726var dragEvents = ['dragover', 'dragenter', 'drop'];
9727function fileAccepted(file, accept) {
9728 return file.type === 'application/x-moz-file' || accepts(file, accept);
9729}
9730function getDataTransferFiles(event) {
9731 if (isDragEvent(event) && event.dataTransfer) {
9732 var dt = event.dataTransfer;
9733
9734 if (dt.files && dt.files.length) {
9735 return Array.from(dt.files);
9736 } else if (dt.items && dt.items.length) {
9737 // Chrome is the only browser that allows to read the file list on drag
9738 // events and uses `items` instead of `files` in this case.
9739 return Array.from(dt.items);
9740 }
9741 } else if (isChangeEvent(event) && event.target.files) {
9742 // Return files from even when a file was selected from an upload dialog
9743 return Array.from(event.target.files);
9744 }
9745
9746 return [];
9747}
9748
9749function accepts(file, acceptedFiles) {
9750 if (file && acceptedFiles) {
9751 var fileName = file.name || '';
9752 var mimeType = file.type || '';
9753 var baseMimeType = mimeType.replace(/\/.*$/, '');
9754 var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');
9755 return acceptedFilesArray.some(function (type) {
9756 var validType = type.trim();
9757
9758 if (validType.startsWith('.')) {
9759 return fileName.toLowerCase().endsWith(validType.toLowerCase());
9760 } else if (validType.endsWith('/*')) {
9761 // This is something like a image/* mime type
9762 return baseMimeType === validType.replace(/\/.*$/, '');
9763 }
9764
9765 return mimeType === validType;
9766 });
9767 }
9768
9769 return true;
9770}
9771
9772function isDragEvent(event) {
9773 return dragEvents.indexOf(event.type) > 0;
9774}
9775
9776function isChangeEvent(event) {
9777 return Object.prototype.hasOwnProperty.call(event, 'target');
9778}
9779
9780var styles$N = {
9781 "DropZone": "Polaris-DropZone",
9782 "hasOutline": "Polaris-DropZone--hasOutline",
9783 "isDisabled": "Polaris-DropZone--isDisabled",
9784 "focused": "Polaris-DropZone--focused",
9785 "isDragging": "Polaris-DropZone--isDragging",
9786 "sizeExtraLarge": "Polaris-DropZone--sizeExtraLarge",
9787 "sizeLarge": "Polaris-DropZone--sizeLarge",
9788 "sizeMedium": "Polaris-DropZone--sizeMedium",
9789 "sizeSmall": "Polaris-DropZone--sizeSmall",
9790 "measuring": "Polaris-DropZone--measuring",
9791 "Container": "Polaris-DropZone__Container",
9792 "Overlay": "Polaris-DropZone__Overlay",
9793 "hasError": "Polaris-DropZone--hasError"
9794};
9795
9796// subcomponents so explicitly state the subcomponents in the type definition.
9797// Letting this be implicit works in this project but fails in projects that use
9798// generated *.d.ts files.
9799
9800var DropZone = function DropZone(_ref) {
9801 var dropOnPage = _ref.dropOnPage,
9802 label = _ref.label,
9803 labelAction = _ref.labelAction,
9804 labelHidden = _ref.labelHidden,
9805 children = _ref.children,
9806 _ref$disabled = _ref.disabled,
9807 disabled = _ref$disabled === void 0 ? false : _ref$disabled,
9808 _ref$outline = _ref.outline,
9809 outline = _ref$outline === void 0 ? true : _ref$outline,
9810 accept = _ref.accept,
9811 active = _ref.active,
9812 _ref$overlay = _ref.overlay,
9813 overlay = _ref$overlay === void 0 ? true : _ref$overlay,
9814 _ref$allowMultiple = _ref.allowMultiple,
9815 allowMultiple = _ref$allowMultiple === void 0 ? true : _ref$allowMultiple,
9816 overlayText = _ref.overlayText,
9817 errorOverlayText = _ref.errorOverlayText,
9818 idProp = _ref.id,
9819 _ref$type = _ref.type,
9820 type = _ref$type === void 0 ? 'file' : _ref$type,
9821 onClick = _ref.onClick,
9822 error = _ref.error,
9823 openFileDialog = _ref.openFileDialog,
9824 onFileDialogClose = _ref.onFileDialogClose,
9825 customValidator = _ref.customValidator,
9826 onDrop = _ref.onDrop,
9827 onDropAccepted = _ref.onDropAccepted,
9828 onDropRejected = _ref.onDropRejected,
9829 onDragEnter = _ref.onDragEnter,
9830 onDragOver = _ref.onDragOver,
9831 onDragLeave = _ref.onDragLeave;
9832 var node = React.useRef(null);
9833 var fileInputNode = React.useRef(null);
9834 var dragTargets = React.useRef([]);
9835 var adjustSize = React.useCallback(debounce(function () {
9836 if (!node.current) {
9837 return;
9838 }
9839
9840 var size = 'extraLarge';
9841 var width = node.current.getBoundingClientRect().width;
9842
9843 if (width < 100) {
9844 size = 'small';
9845 } else if (width < 160) {
9846 size = 'medium';
9847 } else if (width < 300) {
9848 size = 'large';
9849 }
9850
9851 setSize(size);
9852 measuring && setMeasuring(false);
9853 }, 50, {
9854 trailing: true
9855 }), []);
9856
9857 var _useState = React.useState(false),
9858 _useState2 = _slicedToArray(_useState, 2),
9859 dragging = _useState2[0],
9860 setDragging = _useState2[1];
9861
9862 var _useState3 = React.useState(false),
9863 _useState4 = _slicedToArray(_useState3, 2),
9864 internalError = _useState4[0],
9865 setInternalError = _useState4[1];
9866
9867 var _useForcibleToggle = useForcibleToggle(false),
9868 _useForcibleToggle2 = _slicedToArray(_useForcibleToggle, 2),
9869 focused = _useForcibleToggle2[0],
9870 _useForcibleToggle2$ = _useForcibleToggle2[1],
9871 handleFocus = _useForcibleToggle2$.forceTrue,
9872 handleBlur = _useForcibleToggle2$.forceFalse;
9873
9874 var _useState5 = React.useState(0),
9875 _useState6 = _slicedToArray(_useState5, 2),
9876 numFiles = _useState6[0],
9877 setNumFiles = _useState6[1];
9878
9879 var _useState7 = React.useState('extraLarge'),
9880 _useState8 = _slicedToArray(_useState7, 2),
9881 size = _useState8[0],
9882 setSize = _useState8[1];
9883
9884 var _useState9 = React.useState(true),
9885 _useState10 = _slicedToArray(_useState9, 2),
9886 measuring = _useState10[0],
9887 setMeasuring = _useState10[1];
9888
9889 var i18n = useI18n();
9890 var dropNode = dropOnPage ? document : node;
9891 var getValidatedFiles = React.useCallback(function (files) {
9892 var acceptedFiles = [];
9893 var rejectedFiles = [];
9894 Array.from(files).forEach(function (file) {
9895 !fileAccepted(file, accept) || customValidator && !customValidator(file) ? rejectedFiles.push(file) : acceptedFiles.push(file);
9896 });
9897
9898 if (!allowMultiple) {
9899 acceptedFiles.splice(1, acceptedFiles.length);
9900 rejectedFiles.push.apply(rejectedFiles, _toConsumableArray(acceptedFiles.slice(1)));
9901 }
9902
9903 return {
9904 files,
9905 acceptedFiles,
9906 rejectedFiles
9907 };
9908 }, [accept, allowMultiple, customValidator]);
9909 var handleDrop = React.useCallback(function (event) {
9910 stopEvent(event);
9911 if (disabled || !allowMultiple && numFiles > 0) return;
9912 var fileList = getDataTransferFiles(event);
9913
9914 var _getValidatedFiles = getValidatedFiles(fileList),
9915 files = _getValidatedFiles.files,
9916 acceptedFiles = _getValidatedFiles.acceptedFiles,
9917 rejectedFiles = _getValidatedFiles.rejectedFiles;
9918
9919 dragTargets.current = [];
9920 setDragging(false);
9921 setInternalError(rejectedFiles.length > 0);
9922 setNumFiles(function (numFiles) {
9923 return numFiles + acceptedFiles.length;
9924 });
9925 onDrop && onDrop(files, acceptedFiles, rejectedFiles);
9926 onDropAccepted && acceptedFiles.length && onDropAccepted(acceptedFiles);
9927 onDropRejected && rejectedFiles.length && onDropRejected(rejectedFiles);
9928 event.target.value = '';
9929 }, [allowMultiple, disabled, getValidatedFiles, numFiles, onDrop, onDropAccepted, onDropRejected]);
9930 var handleDragEnter = React.useCallback(function (event) {
9931 stopEvent(event);
9932 if (disabled || !allowMultiple && numFiles > 0) return;
9933 var fileList = getDataTransferFiles(event);
9934
9935 if (event.target && !dragTargets.current.includes(event.target)) {
9936 dragTargets.current.push(event.target);
9937 }
9938
9939 if (dragging) return;
9940
9941 var _getValidatedFiles2 = getValidatedFiles(fileList),
9942 rejectedFiles = _getValidatedFiles2.rejectedFiles;
9943
9944 setDragging(true);
9945 setInternalError(rejectedFiles.length > 0);
9946 onDragEnter && onDragEnter();
9947 }, [allowMultiple, disabled, dragging, getValidatedFiles, numFiles, onDragEnter]);
9948 var handleDragOver = React.useCallback(function (event) {
9949 stopEvent(event);
9950 if (disabled || !allowMultiple && numFiles > 0) return;
9951 onDragOver && onDragOver();
9952 }, [allowMultiple, disabled, numFiles, onDragOver]);
9953 var handleDragLeave = React.useCallback(function (event) {
9954 event.preventDefault();
9955 if (disabled || !allowMultiple && numFiles > 0) return;
9956 dragTargets.current = dragTargets.current.filter(function (el) {
9957 var compareNode = dropNode && 'current' in dropNode ? dropNode.current : document;
9958 return el !== event.target && compareNode && compareNode.contains(el);
9959 });
9960 if (dragTargets.current.length > 0) return;
9961 setDragging(false);
9962 setInternalError(false);
9963 onDragLeave && onDragLeave();
9964 }, [allowMultiple, disabled, dropNode, numFiles, onDragLeave]);
9965 useEventListener(dropNode, 'drop', handleDrop);
9966 useEventListener(dropNode, 'dragover', handleDragOver);
9967 useEventListener(dropNode, 'dragenter', handleDragEnter);
9968 useEventListener(dropNode, 'dragleave', handleDragLeave);
9969 useEventListener(null, 'resize', adjustSize, {}, {
9970 defaultToWindow: true
9971 });
9972 useComponentDidMount(function () {
9973 adjustSize();
9974 });
9975 React.useEffect(function () {
9976 if (!openFileDialog) return;
9977 open();
9978 onFileDialogClose && onFileDialogClose();
9979 }, [onFileDialogClose, openFileDialog]);
9980 var id = useUniqueId('DropZone', idProp);
9981 var suffix = capitalize(type);
9982 var overlayTextWithDefault = overlayText === undefined ? i18n.translate("Polaris.DropZone.overlayText".concat(suffix)) : overlayText;
9983 var errorOverlayTextWithDefault = errorOverlayText === undefined ? i18n.translate("Polaris.DropZone.errorOverlayText".concat(suffix)) : errorOverlayText;
9984 var inputAttributes = {
9985 id,
9986 accept,
9987 disabled,
9988 type: 'file',
9989 multiple: allowMultiple,
9990 ref: fileInputNode,
9991 onChange: handleDrop,
9992 autoComplete: 'off',
9993 onFocus: handleFocus,
9994 onBlur: handleBlur
9995 };
9996 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);
9997 var dragOverlay = (active || dragging) && (!internalError || !error) && overlay && overlayMarkup(polarisIcons.DragDropMajorMonotone, 'indigo', overlayTextWithDefault);
9998 var dragErrorOverlay = dragging && (internalError || error) && overlayMarkup(polarisIcons.CircleAlertMajorMonotone, 'red', errorOverlayTextWithDefault);
9999 var labelValue = label || i18n.translate('Polaris.DropZone.FileUpload.label');
10000 var labelHiddenValue = label ? labelHidden : true;
10001 var context = React.useMemo(function () {
10002 return {
10003 disabled,
10004 focused,
10005 size,
10006 type: type || 'file',
10007 measuring
10008 };
10009 }, [disabled, focused, measuring, size, type]);
10010 return React__default.createElement(DropZoneContext.Provider, {
10011 value: context
10012 }, React__default.createElement(Labelled, {
10013 id: id,
10014 label: labelValue,
10015 action: labelAction,
10016 labelHidden: labelHiddenValue
10017 }, React__default.createElement("div", {
10018 ref: node,
10019 className: classes,
10020 "aria-disabled": disabled,
10021 onClick: handleClick,
10022 onDragStart: stopEvent
10023 }, dragOverlay, dragErrorOverlay, React__default.createElement("div", {
10024 className: styles$N.Container
10025 }, children), React__default.createElement(VisuallyHidden, null, React__default.createElement("input", inputAttributes)))));
10026
10027 function overlayMarkup(icon, color, text) {
10028 return React__default.createElement("div", {
10029 className: styles$N.Overlay
10030 }, React__default.createElement(Stack, {
10031 vertical: true,
10032 spacing: "tight"
10033 }, React__default.createElement(Icon, {
10034 source: icon,
10035 color: color
10036 }), size === 'extraLarge' && React__default.createElement(DisplayText, {
10037 size: "small",
10038 element: "p"
10039 }, text), (size === 'medium' || size === 'large') && React__default.createElement(Caption, null, text)));
10040 }
10041
10042 function open() {
10043 fileInputNode.current && fileInputNode.current.click();
10044 }
10045
10046 function handleClick(event) {
10047 if (disabled || !allowMultiple && numFiles > 0) return;
10048 return onClick ? onClick(event) : open();
10049 }
10050};
10051
10052function stopEvent(event) {
10053 event.preventDefault();
10054 event.stopPropagation();
10055}
10056
10057DropZone.FileUpload = FileUpload;
10058
10059var emptySearch = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNzggMTU4Ij48cGF0aCBkPSJNOS4xOSAxMjkuODRhNDAuMDI5IDQwLjAyOSAwIDAxLTQuOS03LjE0Qy0xMy45MSA4OC41OSA1OC4wOC00MS44OCAxMzUuODUgMTguNDNhMTA1Ljk0NiAxMDUuOTQ2IDAgMDE4LjM0IDcuMThjLjMyLjMuNjMuNi45NS45MSA4Ny40OSA4NS04Mi4zIDE2Ni4yOC0xMzUuOTUgMTAzLjMyeiIgZmlsbD0iI2Y0ZjZmOCIvPjxwYXRoIGQ9Ik0xMjIuNiAxMDAuODg1Yy0zLjM2NyA1LjQtNy44MzQgMTAuNzY1LTEzLjY0NiAxMy42MDUtNC4yODcgMi4xLTE0LjQ1MyA5Ljc1LTMxLjcwOSA3LjAzMy03LjU2LTE0LjUyMyA0MC40MzEtMTEuMzIzIDIzLjE0OS0zMi44Ny04LjA3Mi0xMC4wODEgMTMuMzI3LTE0LjEyIDEwLjc0Ny0yMy42MDctMS43NTYtNi40NTItMTIuNTktNy40MS02LjA5My0xOS4yMTYgNC4xNzQtNy41ODktNC45Ny04LjE5NC05LjgzOS0xMC45MTRhOC40MzkgOC40MzkgMCAwMS0yLjk2LTIuNzE0IDI1LjU0IDI1LjU0IDAgMDEyLjYyNC40NzJjNC42MDkgMS4xIDkuMzE3IDMuNjI0IDEzLjMyNSA2LjExOSAxMC44ODEgNi43ODcgMTQuODM2IDEzLjQxNCAxNy4yMjEgMTkuNDggNS43NzUgMTQuNzQ5IDUuNzA1IDI4Ljk1MS0yLjgxOSA0Mi42MTJ6IiBmaWxsPSIjZmZmIiBvcGFjaXR5PSIuNCIvPjxwYXRoIGQ9Ik0xMTMuNyAyOC4yMDZjLS4xNTUuMTM2LS4zMTQuMjcyLS40NjkuNDEyLS40NDIuMzktLjg4NS43OS0xLjMzMSAxLjE4NGEyNC4xIDI0LjEgMCAwMS0zLjY0MiAyLjgxIDE5LjMzNSAxOS4zMzUgMCAwMS00LjU2OS45MzhjLTIuNDA1LTEuNTMyLTcuNzIzLTEuNC03LjQ2Ni00Ljg3OS4xNy0yLjI4OCAyLjMtNC44NTYgNC4xMzgtNi4zNDMuMTYzLS4xMzIuMzI1LS4yNTMuNDgtLjM2NyAzLjUzMi0yLjU0OSA4LjI2LTIuNDIxIDEyLjM0NS0xLjY2IDQuNTU5Ljg0NyAzLjYxNCA1LjIzOC41MTQgNy45MDV6IiBmaWxsPSIjYWZiYWRkIi8+PHBhdGggZD0iTTExMy45NjQgMjguNTA4Yy0uODIzLjcyMS0xLjcyIDEuMzc1LTIuNDg4IDIuMTc5LS45NTUuNTkxLTEuNyAxLjQ0LTIuNjQ3IDIuMDc3bC0uMzU4LjI0OGEzLjEgMy4xIDAgMDEtLjQ2NS4yMTIgNC4xNTcgNC4xNTcgMCAwMS0uODM5LjE3OCA5Ljg4MSA5Ljg4MSAwIDAwLTEuNjI5LjQgOS4yMzggOS4yMzggMCAwMS0xLjcyNS4xNjIuODEzLjgxMyAwIDAxLS4yMjItLjAzNi40MDcuNDA3IDAgMDEtLjEzLS4wNjZsLS4wMzktLjAyNy0uMTU2LS4xMDlhNC40NzIgNC40NzIgMCAwMC0uMzQ0LS4xNzkgOC41NTIgOC41NTIgMCAwMC0uNzMzLS4zMDcgNy4wNTEgNy4wNTEgMCAwMS0xLjU2MS0uNDc4IDEuODcgMS44NyAwIDAwLS44LS4yMjFjLS4yNzEtLjA2OS0uNTMyLS4xNzItLjgtLjI2OGE3LjgyNSA3LjgyNSAwIDAxLTEuNTUyLS43NTIgMy40NDkgMy40NDkgMCAwMS0xLjI3Ni0xLjI4OCAzLjk2NyAzLjk2NyAwIDAxLS4xNjktMS43ODlBMy4yMzEgMy4yMzEgMCAwMTk2LjUgMjYuOGExNy45IDE3LjkgMCAwMTEuODU2LTIuOCAxMi44MjMgMTIuODIzIDAgMDEyLjQ5NC0yLjIyMSA5Ljg5MSA5Ljg5MSAwIDAxMi45NC0xLjY1OSAxMC4wNSAxMC4wNSAwIDAxMS42NDQtLjQyOGMuNTYxLS4wODMgMS4xMy0uMDYgMS42ODYtLjEyNXMxLjExOS0uMTEzIDEuNjgtLjEzNmE1LjgzNSA1LjgzNSAwIDAxMS42NzkuMDg5Yy41NTYuMDY3IDEuMTE3LjA3OCAxLjY3MS4xNThhMTUuNDM0IDE1LjQzNCAwIDAxMS42NDMuNDMyIDUuNyA1LjcgMCAwMS44MzcuMjc2IDMuMTggMy4xOCAwIDAxLjczOS41MDdjLjIxNS4yMS40NzIuMzc0LjY5MS42YTIuMTIyIDIuMTIyIDAgMDEuNDIyLjgyOSA0LjY3NCA0LjY3NCAwIDAxLjA1MSAxLjc4OCAzLjc4OCAzLjc4OCAwIDAxLS41MyAxLjY0OWMtLjMuNDg5LS41NjYuOTkyLS44ODQgMS40NzRhNy43MTQgNy43MTQgMCAwMS0xLjE1NSAxLjI3NXptLS41MjUtLjZhMTEuMjc3IDExLjI3NyAwIDAwMS4xMTYtMS4xMjEgMy42MDkgMy42MDkgMCAwMC44NjItMS4zMTNjLjEzOS0uNTA4LjM2Ni0uOTY0LjQ3Ni0xLjQ2YTIuMiAyLjIgMCAwMC0uMTg4LTEuNDJjLS4xLS4yMDktLjIyMi0uMzg5LS4zMTctLjZhMS4xMTQgMS4xMTQgMCAwMC0uNDIyLS41NzFjLS4yMTUtLjEyMy0uNDQ3LS4yLS42NjctLjMxNWE1LjQxMSA1LjQxMSAwIDAwLS42ODctLjMzMmMtLjQ4NC0uMTczLTEuMDcxLS4wODMtMS42LS4yMWExMy43NDcgMTMuNzQ3IDAgMDAtMS42MDgtLjI3MWMtMS4wODcuMDMxLTIuMTYxLS4yMDktMy4yNDctLjExMmE3LjggNy44IDAgMDAtMS41ODIuMzRjLS41MTkuMTIxLTEuMDQuMjI1LTEuNTQ1LjM4OWExMi4zNzEgMTIuMzcxIDAgMDAtMS41LjUxOSA4IDggMCAwMC0xLjQ2LjY3IDE2LjA2NCAxNi4wNjQgMCAwMC0yLjI2IDIuM2MtLjYzNC44MzktMS41NTMgMS41Ni0xLjc0MiAyLjY1YTUuMzE3IDUuMzE3IDAgMDEtLjQ0MiAxLjQ2OC44NzguODc4IDAgMDAtLjAxMS43MjVjLjEuMjI3LjI0My40LjMzMS41OTNhMi43MyAyLjczIDAgMDAuOTMzIDEuMDEgOC4yMiA4LjIyIDAgMDAxLjQxMS42NjRjLjI0OC4xLjUwOS4xNzQuNzYuMjhhMS42ODYgMS42ODYgMCAwMC43Ny4yOTIgNS40MzEgNS40MzEgMCAwMTEuNTc1LjU1OWMuMjYyLjEuNTIzLjIxNC43NzguMzQ0bC4zOC4yLjE4OS4xMDljLjExOS4wNi0uMDM1IDAgLjA2NC4wMTlhMTUuODQ4IDE1Ljg0OCAwIDAwMS41ODUtLjI0MyA3LjYyNiA3LjYyNiAwIDAwMS41OTQtLjM4MmMuMjU2LS4xLjUxMy0uMTkxLjc2Mi0uMjY2YTIuNzI2IDIuNzI2IDAgMDAuMzIzLS4xbC4zNDUtLjJBMTAuNTIzIDEwLjUyMyAwIDAwMTExIDMwLjE0Yy44NzgtLjY2NiAxLjYxMi0xLjQ5NiAyLjQzOS0yLjI0eiIgZmlsbD0iI2FmYmFkZCIvPjxnIG9wYWNpdHk9Ii40IiBmaWxsPSIjN2I4ZWQwIj48cGF0aCBkPSJNMTEzLjIzMyAyOC42MThjLS40NDIuMzktLjg4NS43OS0xLjMzMSAxLjE4NGEyNC4xIDI0LjEgMCAwMS0zLjY0MiAyLjgxIDE5LjMzNSAxOS4zMzUgMCAwMS00LjU2OS45MzhjLTIuNDA1LTEuNTMyLTcuNzIzLTEuNC03LjQ2Ni00Ljg3OS4xNy0yLjI4OCAyLjMtNC44NTYgNC4xMzgtNi4zNDNhMjIuNjY4IDIyLjY2OCAwIDAxMTIuODcgNi4yOXoiLz48cGF0aCBkPSJNMTEzLjYzMiAyOC42MzFhMTMuNjMxIDEzLjYzMSAwIDAxLTEuNSAxLjQxOGMtLjI0LjE3Ny0uMzkyLjQ1NC0uNjM3LjYyOC0uMjMuMTkxLS41MTUuMzE2LS43MzkuNTE1bC0xLjM1OCAxLjJhOC4zMTMgOC4zMTMgMCAwMS0uNzM4LjU0MiAxLjUxOCAxLjUxOCAwIDAxLS41LjIxNGwtLjQ2Ni4wOTFhNC42NzMgNC42NzMgMCAwMC0uODY3LjI3NCA0LjI1OSA0LjI1OSAwIDAxLS44ODMuMTc1Yy0uNi4wNzItMS4xOS4xMjMtMS44LjIwOGwtLjI0My4wMThoLS4xNDNjLS4wNDItLjAwNi0uMDU5IDAtLjEyMy0uMDEyYS41NDYuNTQ2IDAgMDEtLjEzNC0uMDUybC0uMDI0LS4wMWEzLjg3OCAzLjg3OCAwIDAwLS4zODMtLjE1NCAzIDMgMCAwMS0uNzQ1LS40MDhjLS41NjYtLjEyMy0xLjExMi0uMzI2LTEuNjc3LS41MDdsLTEuNy0uNTdjLS42LS4xNDQtMS4wMzMtLjY2Ni0xLjYxOC0uODgxYTIuMjY3IDIuMjY3IDAgMDEtMS4xMjUtMS40ODcgMy4xMzcgMy4xMzcgMCAwMS0uMDkzLTEuODQzIDYuMzczIDYuMzczIDAgMDEuNjY0LTEuNjljLjMxNy0uNTE0LjYyNS0xLjAyNS45MzMtMS41NDZhOS43IDkuNyAwIDAxMi40MDctMi43bC4wNTYtLjA0MWEuMjQyLjI0MiAwIDAxLjIxLS4wMzdjMS4xOTMuMzUyIDIuNDgzLjIyNyAzLjY0LjcyNi41NzUuMjI4IDEuMi4zMDYgMS43Ni41OWE5LjA0NiA5LjA0NiAwIDAwLjgwOC40NjZjLjI3OC4xMzEuNTc0LjIyNi44NDYuMzcxYTMuNzM3IDMuNzM3IDAgMDAuOC40NiAyLjQxNSAyLjQxNSAwIDAxLjgyNy40MTQgMTEuMyAxMS4zIDAgMDAxLjUyOSAxLjAzOGMuNTU3LjI4NC45MTguODI1IDEuNDY0IDEuMTI2LjI1MS4xNzkuNTE4LjM0NC43NTIuNTQ3YTQuMTQzIDQuMTQzIDAgMDEuOC45MTd6bS0uOC0uMDI2YTEuMjI3IDEuMjI3IDAgMDEtLjUyNi0uMzIzYy0uMjI4LS4xOTEtLjQxOS0uNDI1LS42MzUtLjYzNC0uNC0uNDU3LTEuMDM3LS42MTItMS40NjgtMS4wMjlhNC45NDEgNC45NDEgMCAwMC0xLjU0My0uOTA2IDEuODkxIDEuODkxIDAgMDEtLjc0LS41MDggMi40MDggMi40MDggMCAwMC0uODEzLS4zNzZjLS4yNzctLjExMS0uNTA1LS4zMjYtLjc3NC0uNDU4YTUuMTUzIDUuMTUzIDAgMDAtLjg1OS0uMjY3Yy0uNTctLjE3NC0xLjA4LS41MTgtMS42NjItLjY2Ni0xLjE2Ni0uMjE0LTIuMjctLjg0Ny0zLjUtLjY5bC4zMTItLjA5MWMtLjgyMS44LTEuNjUgMS41ODgtMi40NTIgMi40MjdhMy4yMzYgMy4yMzYgMCAwMC0uOTUyIDEuNDM0IDkuNDA3IDkuNDA3IDAgMDAtLjUgMS42IDMuNjc0IDMuNjc0IDAgMDAtLjA4NCAxLjU2M2MuMjExLjUyMS43OTMuNjA3IDEuMDc2IDEuMDg5YS44NTEuODUxIDAgMDAuNzE3LjQgMi4yODggMi4yODggMCAwMS44Mi4yMzIgMTEuMzQgMTEuMzQgMCAwMDEuNjQ0LjYgNy40NDQgNy40NDQgMCAwMTEuNjc3LjY3IDIuMDg1IDIuMDg1IDAgMDEuODY3LjMyN2MuMTMuMDkuMjU4LjE4Ny4zODIuMjg3LS4xLS4wMTctLjAyMy4wMDcuMDQzIDBsLjItLjAwOWExMS4yODEgMTEuMjgxIDAgMDAxLjcyOS0uMjc4IDE1LjI0OCAxNS4yNDggMCAwMDEuNzA5LS40MDhjLjEzNC0uMDU2LjI2OS0uMTEuMzkxLS4xNzRhMi41MzcgMi41MzcgMCAwMC4zMTctLjJjLjI0OS0uMTQ2LjUtLjI4OS43NDUtLjQ0Ny40ODktLjMxNC45NzMtLjY0NSAxLjQzNS0xLjAwNy4yMjktLjE4NS40LS40MzkuNjEzLS42MzlzLjQ4LS4zNDYuNjg1LS41NTlhNi45MTMgNi45MTMgMCAwMTEuMTQ3LS45NjV6Ii8+PC9nPjxwYXRoIGQ9Ik0xMTQuOCA2Mi43OTFjLjA2OSAyMS40NzgtMTIuMTgxIDE4Ljg0Mi0zMS41IDM1LjE4Ny0xMi44NzYgMTAuODkzLTIyLjcgNi40NzctMjQuMjQ2LS43MzhhOS42NDggOS42NDggMCAwMS0uMi0yLjUyNEM1OS4xMTQgODkuNDEgNjMuNiA4My40NDQgNzQgODAuOTI1IDg0LjgzNyA3OC4zIDgwLjggNTkuNyA5OS42NDUgNTEuNGMuNDQ2LS4yLjktLjM4NiAxLjM3NC0uNTcxLjIwNi0uMDgyLjQwOC0uMTU1LjYwNS0uMjI3IDkuMzM1LTMuMzcgMTMuMTQ2IDEuODM2IDEzLjE3NiAxMi4xODl6IiBmaWxsPSIjZmZiZjRkIi8+PHBhdGggZD0iTTExNSA2Mi43OWEzMy44NTMgMzMuODUzIDAgMDEtMS40NTQgMTAuNSAxNi45NTQgMTYuOTU0IDAgMDEtMi40NzkgNC43MWwtLjgyMSAxLjA1OWMtLjI4MS4zNDYtLjYyMS42MzgtLjkyOS45NnMtLjYyNy42MzQtLjk1Mi45MzlsLTEuMDM1Ljg0YTg2LjEzMiA4Ni4xMzIgMCAwMS04Ljg2MSA1LjgxN2MtMy4wMjUgMS44MDktNS45OSAzLjcwNi04Ljg1OCA1Ljc0NS0yLjg5MSAyLjAyMS01LjUzOSA0LjMxLTguMzcyIDYuNDU2YTI0LjY4NCAyNC42ODQgMCAwMS05LjU0IDQuNTQ0bC0xLjMxNS4yMzYtMS4zMzYuMDcyYTcuMjcgNy4yNyAwIDAxLTEuMzM2LS4wNDcgNi41IDYuNSAwIDAxLTEuMzI0LS4xODUgOS4zMjIgOS4zMjIgMCAwMS03LjItMTIuMjIxIDE0LjggMTQuOCAwIDAxNi41ODEtOC4wODYgMjYuMzE1IDI2LjMxNSAwIDAxNC43NzctMi4zMDhjMS42NDUtLjY1MSAzLjQ0MS0uOTIgNS4wMjItMS42YTkuNTc4IDkuNTc4IDAgMDAzLjg2MS0zLjQgMjguMzE1IDI4LjMxNSAwIDAwMi40ODQtNC42MjEgODIuMTI5IDgyLjEyOSAwIDAxNC41ODctOS41NDggMjcuNyAyNy43IDAgMDE3LjAyOS03LjkxNUEzMC43MDkgMzAuNzA5IDAgMDExMDMgNDkuOTkzYTEyLjA0MiAxMi4wNDIgMCAwMTUuMy0uNDA3IDYuNiA2LjYgMCAwMTQuMzg4IDIuOTE4IDEzLjUyNSAxMy41MjUgMCAwMTEuODcyIDQuOTg4IDM0LjAzNCAzNC4wMzQgMCAwMS40NCA1LjI5OHptLS40IDBhMzMuNjUxIDMzLjY1MSAwIDAwLS40MzYtNS4yMjggMTMuMTQxIDEzLjE0MSAwIDAwLTEuODA4LTQuODM4IDYuMiA2LjIgMCAwMC00LjEzNS0yLjc1MyAxMS41NDYgMTEuNTQ2IDAgMDAtNS4xMTUuNCAzMC43ODcgMzAuNzg3IDAgMDAtOS4zMzQgNC42ODEgMjcuMzcgMjcuMzcgMCAwMC02Ljk0MiA3Ljc5NSA4MS44NzUgODEuODc1IDAgMDAtNC41ODcgOS41IDI4LjY0NCAyOC42NDQgMCAwMS0yLjUyNiA0LjY4IDkuOTMxIDkuOTMxIDAgMDEtNC4wMDggMy41MDljLTEuNjgyLjcxNy0zLjQxNC45NTktNS4wNTEgMS42YTI1Ljk4NyAyNS45ODcgMCAwMC00LjcxNyAyLjI2OCAxNC40MDYgMTQuNDA2IDAgMDAtNi40NTEgNy45IDkuMjQyIDkuMjQyIDAgMDAyLjQxIDkuNDk2IDkuMTM1IDkuMTM1IDAgMDA0LjU2NyAyLjIzOCA2LjE3IDYuMTcgMCAwMDEuMjc4LjE3MSA3LjQ0MyA3LjQ0MyAwIDAwMS4yOTIuMDQ3bDEuMy0uMDY0IDEuMjgyLS4yMjVhMjQuMzEgMjQuMzEgMCAwMDkuNDA5LTQuNDM0YzIuNzg5LTIuMTE0IDUuNDQzLTQuNDkzIDguMzU2LTYuNDg1IDIuODgtMi4wNDQgNS44NjQtMy45MzggOC44ODgtNS43NTFhOTAuMDA3IDkwLjAwNyAwIDAwOC43OTUtNS44MjFsMS4wMjEtLjgyNy45MzMtLjkyYy4zLS4zMTUuNjM3LS42LjkxMi0uOTM5bC44LTEuMDM0YTE2LjU0MSAxNi41NDEgMCAwMDIuNDI5LTQuNiAzMy40NzEgMzMuNDcxIDAgMDAxLjQzOC0xMC4zNjV6TTU5LjMxMyA4Ny41YTMuMjE2IDMuMjE2IDAgMDEuNzY4LTEuMDgybC4xMjUtLjExMWMuMDU2LS4wMjUuMTMtLjAzNC4xNTYtLjA4NGwuMjMzLS4yMzRjLjE0OC0uMTYzLjM5MS0uMjM0LjU0NC0uMzg4bC44MzctMS4wMjNhMS4yNjIgMS4yNjIgMCAwMS41MzMtLjM4OCAzLjkzMiAzLjkzMiAwIDAwLjQ3OC0uNDU2bC40OC42NGMtLjE1Ni4xNDItLjMuMy0uNDYuNDMzcy0uNC4xNzYtLjUyNi4zNTFjLS4zMDkuMjg0LS42MTMuNTczLS44OTIuODg1LS4xMjguMTY4LS4xOS4zOTQtLjM3OS41LS4wOTMuMDU2LS4yMTcuMDg1LS4zMDcuMTQ2LS4wNjUuMDEzLS4wNjguMDgtLjA5LjEyOWwtLjEzMy4wOTNhLjkyOC45MjggMCAwMC0uMjQ5LjJjLS4wNTcuMDg5LS4wNDQuMjMyLS4xMTcuMzA4LS4xMTcuMTc0LS4yMDguMzY1LS4zMzguNTI4eiIgZmlsbD0iI2ZmYmY0ZCIvPjxwYXRoIGQ9Ik02Ni40IDgxLjY1NWEyOS43NjggMjkuNzY4IDAgMDE1LjcyMy0yLjE1NSA5LjA1NSA5LjA1NSAwIDAwNC45MTItMi44MDggMTIuNTY2IDEyLjU2NiAwIDAwLjkxNi0xLjEzNSA5LjQ1NyA5LjQ1NyAwIDAwLjg0Ni0xLjIxMSAzMy42NyAzMy42NyAwIDAwMS4zNzYtMi42NDlsMi41NzItNS40NTlhMzUuMTI0IDM1LjEyNCAwIDAxNi41Mi0xMC4yMDggMjIuMjg0IDIyLjI4NCAwIDAxNC43ODItMy43OSAzNS4zMzUgMzUuMzM1IDAgMDE1LjQwOS0yLjgxM2wuMjk0Ljc0NGEzMi41MTQgMzIuNTE0IDAgMDAtNS4yNzUgMi43NDIgMjQuNzMyIDI0LjczMiAwIDAwLTQuNjY0IDMuNjU3IDMzLjM1OSAzMy4zNTkgMCAwMC02LjQ5IDkuOTM0Yy0uODE1IDEuODI4LTEuNDkgMy43MjMtMi40MDggNS41MzZhMjkuNTc3IDI5LjU3NyAwIDAxLTEuNSAyLjY2NWMtLjMuNDItLjUyNy44NzctLjgxOCAxLjNhMTEuNzExIDExLjcxMSAwIDAxLS45ODUgMS4yIDEwLjAyMyAxMC4wMjMgMCAwMS0yLjQyNiAxLjkzIDEwLjcgMTAuNyAwIDAxLTEuMzg3LjcxNSAxMy40OTEgMTMuNDkxIDAgMDEtMS40NzEuNDYxIDI4Ljk0MyAyOC45NDMgMCAwMC01LjU3NyAyLjA2MnoiIGZpbGw9IiNmZmJmNGQiLz48cGF0aCBkPSJNMTE0LjggNjIuNzkxYy4wNjkgMjEuNDc4LTEyLjE4MSAxOC44NDItMzEuNSAzNS4xODctMTIuODc2IDEwLjg5My0yMi43IDYuNDc3LTI0LjI0Ni0uNzM4YTkuNjQ4IDkuNjQ4IDAgMDEtLjItMi41MjQgMTkuNTEzIDE5LjUxMyAwIDAxOC40NjQtMy45ODNjNC4zODItLjYgOC45NzUtLjI1OCAxMy4zNzgtMS4xNDIgOC4zODctMS42ODIgMTkuMDg3LTEwLjM2NSAxNy4zMTQtMTkuOTM3LS44NzEtNC43LTIuNDEyLTguNjc0LS43LTEzLjQ1MWEyMy4wMDkgMjMuMDA5IDAgMDEyLjMzNS00LjhjLjQ0Ni0uMi45LS4zODYgMS4zNzQtLjU3MS4yMDYtLjA4Mi40MDgtLjE1NS42MDUtLjIyNyA5LjMzNS0zLjM3MyAxMy4xNDYgMS44MzMgMTMuMTc2IDEyLjE4NnoiIGZpbGw9IiNmZmFhMTAiIHN0cm9rZT0iI2ZmYWExMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIuNSIvPjxwYXRoIGQ9Ik0zOC4xMTMgODQuNjU5YTE3LjI2NSAxNy4yNjUgMCAwMS0zLjIwNyAzLjYxNiAyOS4zIDI5LjMgMCAwMS0zLjY3MiAyLjcwOCAxMi4xNzIgMTIuMTcyIDAgMDEtMS41MTMuODEzYy0zLjU4OSAxLjY0NS03LjczOCAxLjc4NS0xMS4wOTMgMy45OS0yLjY1MSAxLjc0NC00LjU3MyA1LjE3OC04LjE4MSA0Ljg5LTMuNTU1LS4yODQtNS4yNzYtMy40MjMtNC4yNTUtNi42NTMgMS4zOTItNC40MjUgNy40NzctMy45MTUgMTAuNjItNi41MjhhNDEuODIxIDQxLjgyMSAwIDAwNC41LTQuODcxYy4zMTgtLjM3NC42NTEtLjc0NS45OC0xLjFhMTMuNjczIDEzLjY3MyAwIDAxNC41MjctMy40OCA4LjAzNiA4LjAzNiAwIDAxMS42OTQtLjUzYzQuMTU0LS44MTQgMTMuNTY0Ljk3NiA5LjYgNy4xNDV6IiBmaWxsPSIjYWZiYWRkIi8+PHBhdGggZD0iTTM4LjQ0OSA4NC44NzVhMjEuMjE4IDIxLjIxOCAwIDAxLTMuNzEgNC4wMjkgNDIuNDg5IDQyLjQ4OSAwIDAxLTQuNSAzLjExMiA5Ljk3NSA5Ljk3NSAwIDAxLTIuNTYgMS4wMDhjLS44ODguMjEtMS43MzYuNTI2LTIuNi43NzdhMjUuMzkxIDI1LjM5MSAwIDAwLTUuMDUgMS41ODcgOS4zMTYgOS4zMTYgMCAwMC0yLjEyOSAxLjQ3N3EtLjUzLjM4OC0xLjA1NS44MDhjLS4zNDcuMjgzLS41OTEuNjc5LS45NDkuOTYyYTEyLjU0MiAxMi41NDIgMCAwMS0yLjIyOCAxLjY0MiA1Ljc2OCA1Ljc2OCAwIDAxLTIuNzMuNzQyIDQuOSA0LjkgMCAwMS0yLjcxOS0uNzA5IDYuNTYyIDYuNTYyIDAgMDEtMS4xLS44NzcgNC41NzkgNC41NzkgMCAwMS0uODk1LTEuMDk1IDQuOTkxIDQuOTkxIDAgMDEtLjQ3OS0yLjczOCA2Ljg2MSA2Ljg2MSAwIDAxLjcyNS0yLjY1QTUuMDUzIDUuMDUzIDAgMDE4LjQwOCA5MWExMS43IDExLjcgMCAwMTIuNDktMS4xIDIyLjk3MiAyMi45NzIgMCAwMDQuOS0yLjA2NyAxMC40IDEwLjQgMCAwMDEuOTU4LTEuNzExYy41ODUtLjY1OSAxLjIzOS0xLjI2NSAxLjgyOC0xLjkzOSAxLjItMS4zMjEgMi4xODUtMi44NTkgMy41NDItNC4xMDdhMjUuNjQ5IDI1LjY0OSAwIDAxMi4xNzQtMS43MjIgNi44OCA2Ljg4IDAgMDEyLjU5My0xLjA0MyA5LjIwOCA5LjIwOCAwIDAxMi43NTEtLjMgMjIuNiAyMi42IDAgMDEyLjczOC4xOSAxNi41NTUgMTYuNTU1IDAgMDEyLjYyOC44MjEgNS41MTggNS41MTggMCAwMTIuMzYyIDEuNDg5IDMuOTg2IDMuOTg2IDAgMDExLjAyMSAyLjY3NyA1LjU4NyA1LjU4NyAwIDAxLS45NDQgMi42ODd6bS0uNjczLS40MzNhNS41ODUgNS41ODUgMCAwMC45MDUtMi4zIDIuNzA5IDIuNzA5IDAgMDAtLjExLTEuMTgyIDIuNjU0IDIuNjU0IDAgMDAtLjY5LS45ODIgOC43NjkgOC43NjkgMCAwMC0yLjEwOC0xLjM2MyAxMC41NDkgMTAuNTQ5IDAgMDAtMi41MzQtLjU3MyAxMi4yNTggMTIuMjU4IDAgMDAtNS4xNjYtLjA1MSAxNS42MSAxNS42MSAwIDAwLTIuMzE5IDEuMSA4LjQ4MyA4LjQ4MyAwIDAwLTIuMDYzIDEuNTg4IDQzLjg1NiA0My44NTYgMCAwMC0zLjYxMyAzLjkyMSAxNC45NTggMTQuOTU4IDAgMDEtMS43MjIgMi4xMTEgOS44MTMgOS44MTMgMCAwMS0yLjE3MyAxLjc2MWMtMS42MzYgMS4wMDctMy41MTYgMS4wODktNS4xMzggMS44MzZDOS40MjYgOTEgNy44MTEgOTEuOCA2Ljk3IDkzLjIzOGE0LjQwOSA0LjQwOSAwIDAwLS43MzkgMi4zODUgNS4yMjMgNS4yMjMgMCAwMC42ODYgMi4zNDcgNC45MzYgNC45MzYgMCAwMC41ODMgMS4wNzcgMi40MTEgMi40MTEgMCAwMDEuMDQxLjY1NiA4LjkgOC45IDAgMDAyLjM4NS40OTRjMS42NjYuMDg4IDMuMTI0LTEuMDA1IDQuNDMtMi4xNTguMzEtLjMxNS43MzMtLjUxOSAxLjA1MS0uODM4cy42MzctLjY0NS45NzEtLjk2YTEyLjI4NSAxMi4yODUgMCAwMTIuMzc0LTEuNDE1YzMuMzA5LTEuNTkgNy4wMjYtMS44NTggMTAuMTQ1LTMuNTFsMS4xNjktLjU5NXEuNTcyLS4zNDUgMS4xMzEtLjcwOWExMi42NTIgMTIuNjUyIDAgMDAyLjA5MS0xLjY0NSAxOSAxOSAwIDAwMS45MjItMS44MiAxNy42ODQgMTcuNjg0IDAgMDAxLjU2Ni0yLjEwNXoiIGZpbGw9IiNhZmJhZGQiLz48ZyBvcGFjaXR5PSIuNCIgZmlsbD0iIzdiOGVkMCI+PHBhdGggZD0iTTM4LjExMyA4NC42NTlhMTcuMjY1IDE3LjI2NSAwIDAxLTMuMjA3IDMuNjE2IDI5LjMgMjkuMyAwIDAxLTMuNjcyIDIuNzA4IDEyLjE3MiAxMi4xNzIgMCAwMS0xLjUxMy44MTNjLS4yMTktMy4yODMuMzYzLTYuMzg4LS45MTUtOS43NjZhMjcuMDE4IDI3LjAxOCAwIDAwLTEuOTgyLTMuOTkgOC4wMzYgOC4wMzYgMCAwMTEuNjk0LS41M2M0LjE0OS0uODEgMTMuNTU5Ljk4IDkuNTk1IDcuMTQ5eiIvPjxwYXRoIGQ9Ik0zOC40NDkgODQuODc1QTkuNzU0IDkuNzU0IDAgMDEzNy41NzUgODZjLS4zNDkuMzI0LS41MjYuOC0uOTE1IDEuMDg4LS43NjguNTY5LTEuMjkyIDEuMzc3LTIuMDA1IDIuMDA1YTUuODI2IDUuODI2IDAgMDEtMS4xNTMuODIyYy0uNC4yNTItLjcuNjQ0LTEuMTExLjg3My0uNzkxLjUtMS43Ljg0Ni0yLjUyNCAxLjMyNWEuMzI5LjMyOSAwIDAxLS40OTItLjI0MWwtLjAwNy0uMDU3YTYuODYxIDYuODYxIDAgMDEtLjExNy0uOTA1IDQuOSA0LjkgMCAwMC4wNzgtLjkwNiAzLjAxIDMuMDEgMCAwMS0uMDQ0LS45bC4wMjctLjg5NGExNi44MzIgMTYuODMyIDAgMDAtLjAwNy0xLjc3NGMtLjA5MS0uNTc5LjE0Ni0xLjE5NC0uMDU2LTEuNzY0YTExLjExNCAxMS4xMTQgMCAwMS0uMzEyLTEuNzM2IDkuMDY3IDkuMDY3IDAgMDAtLjY0OC0xLjY0NSAyNi45OTIgMjYuOTkyIDAgMDAtLjc1NC0xLjYwOCA3LjUyOCA3LjUyOCAwIDAwLS44OTMtMS41NDMuMTg3LjE4NyAwIDAxLjAzNy0uMjYybC4wMi0uMDEzLjA0LS4wMjJhNi44NjcgNi44NjcgMCAwMTQuMzQtLjgwOCAxNi4zNDEgMTYuMzQxIDAgMDEyLjIyMS4wNjVjLjcuMjY0IDEuNDc3LjIzMiAyLjE3Mi41NDdhOC41MjYgOC41MjYgMCAwMDEuMDA3LjUxN2MuMTc0LjA3My4zNDUuMTUyLjUxNi4yMzVhNC4zMDggNC4zMDggMCAwMS40NTMuMzQ5Yy4yNzUuMjU3LjcuMzQ5LjkzNC42ODFhMy44MTYgMy44MTYgMCAwMS42MDYgMS4wMTIgNC41NTggNC41NTggMCAwMS4zNzQgMS4xMjUgMy4yNzQgMy4yNzQgMCAwMS0uMTMyIDEuMTY0IDYuNjYgNi42NiAwIDAxLS4yNjYgMS4xMjQgOC45OTIgOC45OTIgMCAwMS0uNTE1IDEuMDIxem0tLjY3My0uNDMzYTguMjIzIDguMjIzIDAgMDAuNS0uOSAzLjMgMy4zIDAgMDAuMzkxLS45MzEgNS4wMjQgNS4wMjQgMCAwMC0uMDM4LS45NzEgMS44MTIgMS44MTIgMCAwMC0uMjE3LS45MTIgMi43MTggMi43MTggMCAwMC0uNjUtLjdjLS4yNDctLjE4OS0uMzU5LS41ODItLjY4My0uNzIyYTIuOTU1IDIuOTU1IDAgMDEtLjg5NC0uNSAyLjQzMiAyLjQzMiAwIDAwLS45OTEtLjMyMiA3LjQ2NCA3LjQ2NCAwIDAwLTIuMDMxLS41MzEgMTMuMzUzIDEzLjM1MyAwIDAwLTIuMS0uMzA3IDUuNSA1LjUgMCAwMC0xLjA1NS4xNDljLS4zNDcuMDU5LS42OTMuMDY2LTEuMDMzLjExOWExNi40NzQgMTYuNDc0IDAgMDAtMi4wMTcuNDMxbC4xNTMtLjQ3YTUuNzE3IDUuNzE3IDAgMDAuODc1IDEuNTc5IDEyLjIxOSAxMi4yMTkgMCAwMS44NyAxLjZjLjI3LjU0OS4yOTQgMS4xOTQuNTQxIDEuNzU2LjIyNC41NjQuNjUyIDEuMTI0LjQ2OCAxLjc3OS0uMTI2LjYyOS4zODYgMS4xOTIuMjkyIDEuODE2LS4wMTcuNjEyLS4wNDUgMS4yMTUtLjA0MiAxLjgxNWwtLjAyMy45QTIuOTUyIDIuOTUyIDAgMDEzMCA5MGEzLjM0NSAzLjM0NSAwIDAwLjA3Ljg4NWMwIC4yOTUtLjAzOS41OS0uMDU2Ljg4N2wtLjQxMy0uMjQ3YTEzLjI0NyAxMy4yNDcgMCAwMDIuMzc4LTEuMzQ5IDExLjM1OSAxMS4zNTkgMCAwMDEuMTI5LS43OTMgOS4zMjQgOS4zMjQgMCAwMTEuMDMyLS45MTRjLjM2NC0uMjc2LjcyNS0uNTYzIDEuMDc0LS44NThhMy45ODMgMy45ODMgMCAwMC45NDUtLjk5M2MuMjQ1LS4zOTEuNjYxLS42MzIuODg2LTEuMDM3LjI0Ni0uMzgxLjUwNC0uNzUuNzMxLTEuMTM5eiIvPjwvZz48cGF0aCBkPSJNMTQ0LjE5IDI1LjYxYS4yNDkuMjQ5IDAgMDEtLjA3LjA0IDQwLjUyMSA0MC41MjEgMCAwMC01LjQ5IDMuMDdjLTMuMSAyLjMyLTMuOTggOC4wNS04LjM2IDguMzYtMy4yMS4yMi01LjcyLTIuMDYtNS4yLTUuNC41My0zLjM5IDQuMTItNC40IDYuMzItNi40NiAyLjAyLTEuOSAzLjEyLTQuNDIgNC40Ni02Ljc5YTEwNS45NDYgMTA1Ljk0NiAwIDAxOC4zNCA3LjE4eiIgZmlsbD0iI2FmYmFkZCIvPjxwYXRoIGQ9Ik0xMTcuODU1IDM3LjAzM2E1MC45MzYgNTAuOTM2IDAgMTA0LjI2NSA3MS45MDggNTAuNjcxIDUwLjY3MSAwIDAwLTQuMjY1LTcxLjkwOHptOS43IDQ5LjYzOGMtMi4xNzYgNi44OTItNS4xNzUgMTMuMjk1LTEwLjAxMiAxOC43NDItNC4yMjUgNC43NTMtOS41MzMgOS4zLTE1LjczOSAxMS4xMTktMy45NzggMS4xNy04LjAyIDIuOTY2LTEyLjEzNCAzLjYwN2E0NS4zMjggNDUuMzI4IDAgMDEtOC43OTMuMjEyIDQ0LjUxNiA0NC41MTYgMCAwMS0yNi45NjctMTEuMTY0Yy04LjctNy43MjktMTIuOTQzLTE3LjM3OS0xNC40NDYtMjguNjE2YTM3LjIgMzcuMiAwIDAxLS4xNzUtMTAuNTY0YzEuMjI1LTguNDkgNS4xNDYtMTguMDM2IDEwLjg0Ny0yNC40NTMgOS45LTExLjE1MiAyNy44MTctMTguNzM1IDQyLjY4Ni0xNC42MzlhNzAuNjc0IDcwLjY3NCAwIDAxOC44NCAyLjU5NGM0LjM2IDEuODYzIDguNTc3IDUuMTM4IDEyLjEwNyA4LjI3MWE0Ny45NDMgNDcuOTQzIDAgMDE5LjE4NyAxMC42MzYgMjguMTU1IDI4LjE1NSAwIDAxMi4wNjUgMy42MDggMzguNSAzOC41IDAgMDEyLjQ1MSA3Ljg1M2MxLjQ3MiA3LjA3NyAyLjI5NCAxNS43OTkuMDg3IDIyLjc5NHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIzLjMgMTA5Ljk4NmE1MS41NTQgNTEuNTU0IDAgMDEtMTYuMzY2IDEyLjMwNmMtMS41NjYuNy0zLjIgMS4yMzEtNC43NjkgMS45MjJsLTQuODY1IDEuNjc4Yy0xLjY1Ny40NDEtMy4zMzcuODE0LTUuMDEzIDEuMjI4bC01LjEyNi43NDFhNDkuNTUzIDQ5LjU1MyAwIDAxLTIwLjQxNC0yLjg0MyA1My44IDUzLjggMCAwMS0xNy42NjctMTAuNTQ2bC0zLjY2My0zLjYzOWMtMS4xMjUtMS4zLTIuMi0yLjY0OS0zLjI5LTMuOTc3LS45OTUtMS40LTEuOS0yLjg3MS0yLjg0NC00LjMtLjg1NS0xLjQ4OC0xLjYtMy4wMzgtMi40MDYtNC41NTItLjctMS41NjMtMS4zLTMuMTc2LTEuOTQ2LTQuNzU5LS41MzYtMS42MjUtLjk3OC0zLjI4Mi0xLjQ2OC00LjkyLS4zNjgtMS42Ny0uNjM0LTMuMzYyLS45NDUtNS4wMzhsLS40NDMtNS4xYy4wMjktMS43LjAxMy0zLjQwNiAwLTUuMTA2LjE1My0xLjY5NC4yNTYtMy4zOTQuNDMzLTUuMDg1LjMtMS42NzUuNTg2LTMuMzU2Ljk2NC01LjAxMi40OTQtMS42MjguOTI0LTMuMjc3IDEuNDc0LTQuODg0LjY1Ni0xLjU2OSAxLjI1OS0zLjE2IDEuOTc2LTQuNy44MTUtMS40OSAxLjU1NS0zLjAyIDIuNDA5LTQuNDgyLjk1Ny0xLjQgMS44MjEtMi44NjEgMi43NzMtNC4yNjNsMy4xNDYtNGE1MS4zODQgNTEuMzg0IDAgMDExNi4xNzMtMTIuMTMzIDUzLjA0IDUzLjA0IDAgMDE0LjY4LTEuOTc3IDgxLjE5IDgxLjE5IDAgMDE0LjgtMS42ODkgNDYuNjA4IDQ2LjYwOCAwIDAxNC45NjEtMS4yMiA1Mi41MTIgNTIuNTEyIDAgMDE1LjA4Mi0uNiA1Mi40NjcgNTIuNDY3IDAgMDEzNy45ODUgMTIuNzcybDMuNjIxIDMuNjY5YzEuMTEzIDEuMzA3IDIuMTY1IDIuNjY2IDMuMjQ1IDQgLjk5MyAxLjQgMS44ODkgMi44NjIgMi44MzMgNC4yODkuODY1IDEuNDc1IDEuNjU2IDMgMi40ODUgNC41LjczNiAxLjU0NCAxLjM2IDMuMTQzIDIuMDQzIDQuNzE1LjU3MiAxLjYxMyAxLjA0NSAzLjI2MyAxLjU3IDQuOS40IDEuNjY2LjcyMyAzLjM1MSAxLjA4NCA1LjAyOC4yMzUgMS43LjM2MiAzLjQxMy41MDcgNS4xMThsLS4wNjEgNS4xMzYtLjU0OSA1LjFjLS4zMTEgMS42NzctLjU3MSAzLjM2OC0uOTI5IDUuMDM1LS40ODEgMS42MzgtLjg4IDMuMy0xLjM5MyA0LjkzMWE1Mi4zMjYgNTIuMzI2IDAgMDEtMTAuMDg3IDE3Ljc1N3ptLTIuMzU1LTIuMDkxYTQ5LjU4MSA0OS41ODEgMCAwMDkuNjM0LTE2LjY1NWMuNS0xLjUzMS44ODEtMy4xIDEuMzMxLTQuNjQ1LjMzNC0xLjU3NC41NzMtMy4xNy44NjktNC43NTEuMTUtMS42LjE4Ny0zLjIxNi4yOS00LjgxNmwtLjE2OS00LjgxYy0uMjItMS41OS0uNDE2LTMuMTc2LS41NjgtNC43Ny0uMzE4LTEuNTY3LS41OTUtMy4xNDYtLjkzOS00LjcxLS40NjgtMS41MzEtLjg5NC0zLjA3Ny0xLjM4Ny00LjYtLjYwOS0xLjQ4MS0xLjE1Ni0yLjk5NC0xLjgxMS00LjQ1OWE0OC4yNzIgNDguMjcyIDAgMDAtMTEuNDU1LTE1LjM5NCA0My45MiA0My45MiAwIDAwLTE2LjUwNy05LjkyMSA0OS45NTMgNDkuOTUzIDAgMDAtMTkuMTA2LTIuMzU1IDQ5LjE3IDQ5LjE3IDAgMDAtNC43ODkuNTg2Yy0xLjU5LjI0NS0zLjE3Mi41MjMtNC43NjguOGEzMC45MjggMzAuOTI4IDAgMDAtOS4xMzQgMy4yMTIgNTMuNDM0IDUzLjQzNCAwIDAwLTE0Ljk4NyAxMi4wMDZjLTEuMDE4IDEuMjM1LTIuMDgzIDIuNDM2LTMuMTIzIDMuNjY1YTc1LjMyOCA3NS4zMjggMCAwMC0yLjcxOSAzLjk4M2MtLjc4MyAxLjQtMS40NzggMi44NTctMi4yMDkgNC4yODgtLjY0MiAxLjQ3Mi0xLjE1NSAzLTEuNzU2IDQuNDg4LS41MDggMS41MjItLjkgMy4wODMtMS4zNjIgNC42MjEtLjM1IDEuNTY3LS41ODQgMy4xNTktLjkzNCA0LjczMS0uMjExIDEuNTkzLS4zNDcgMy4yLS41IDQuOC0uMDIuOCAwIDEuNjExIDAgMi40MTZsLjA4MyAyLjQxNC43MjIgNC43N2MuMzY4IDEuNTYzLjY4OSAzLjEzMSAxIDQuN2wuNjU5IDIuMzEzYy4yMTYuNzcyLjM4MSAxLjU2NS42MzggMi4zMjYuNTczIDEuNSAxLjA5MyAzLjAzIDEuNzE2IDQuNTIuNzI0IDEuNDM4IDEuMzcyIDIuOTMzIDIuMjIyIDQuMzA3LjkxOCAxLjMzMiAxLjc4NSAyLjcgMi43NCA0IDEuMDE0IDEuMjU4IDEuOTY2IDIuNTc0IDIuOTkzIDMuODM0bDMuMzU0IDMuNTUxYTQ0LjAyMyA0NC4wMjMgMCAwMDE2Ljc0OCA5Ljg3NSA1MS4xNTggNTEuMTU4IDAgMDAxOS4yNTEgMi4zMjZsNC44NDUtLjQ0NmMxLjU5Mi0uMzEgMy4yLS41ODEgNC43ODYtLjkxOCAxLjU1MS0uNDc5IDMuMTQ0LS44NDggNC42NjktMS40MTMgMS40ODEtLjY3OSAyLjk4Ny0xLjMgNC40MjktMi4wMzlhNTAuOTI5IDUwLjkyOSAwIDAwMTUuMjQyLTExLjgzem02Ljg4OSAzLjcwNWMyLjkgMi4zNDcgNS43NjQgNC43NCA4LjQ0IDcuMzQzIDEuMzQ2IDEuMjkyIDIuNiAyLjY4NCAzLjk3NSAzLjk0NyAxLjM1IDEuMjg4IDIuNzk1IDIuNDY5IDQuMjUxIDMuNjM3czIuOSAyLjM0NSA0LjI2NyAzLjYxOSAyLjcgMi41NzcgNC4wNDkgMy44NjRjLjY2Ny42NTMgMS40IDEuMjM3IDIuMDkzIDEuODU1bDIuMiAxLjczN2MuNzQyLjU2OCAxLjQxNyAxLjIxMyAyLjEyMSAxLjgyNHMxLjQgMS4yMzUgMi4wNjUgMS44ODdhMS44IDEuOCAwIDAxLTIuMzQ0IDIuNzMybC0uMDQ5LS4wMzdjLS43NDgtLjU2Mi0xLjQ3LTEuMTUyLTIuMTg3LTEuNzQ5cy0xLjQ1NC0xLjE3MS0yLjE0Mi0xLjhjLS43MDYtLjYwOS0xLjM4LTEuMjU0LTIuMDYyLTEuODlzLTEuMzE2LTEuMzI2LTIuMDIzLTEuOTM0Yy0yLjgwOS0yLjQ1Mi01LjYtNC45MjEtOC4yMzYtNy41NzItMS4zMjYtMS4zMTUtMi42NTUtMi42MjYtNC4wNjEtMy44NXMtMi44NTItMi40LTQuMjY0LTMuNjIyYy0xLjQ1MS0xLjE3My0yLjctMi41NzItNC4wODUtMy44MjRhNDEuMjQyIDQxLjI0MiAwIDAwLTQuNC0zLjQ3IDEuOCAxLjggMCAwMTItM3EuMDY4LjA0Ni4xMzEuMXoiIGZpbGw9IiMwODExNDAiLz48cGF0aCBkPSJNMTcwIDE0MS44MThhNi45NDMgNi45NDMgMCAwMS0xLjY3IDQuMzg1Yy0xLjEgMS40Ni0zLjI2OCA1LjA4My01LjA2IDUuNjIyLTIuNjkzLjgwOC02LjUtMi43NDYtOC4zMTctNC4xLTQuNjc1LTMuNDg0LTQuNDA2LTMuMDI0LTguNjc2LTYuOTgyLTQuMzEtNC04LjUyOS04LjA4OS0xMi43NzgtMTIuMTUtMi4zLTIuMTkzLTkuMjUzLTUuODgzLTcuMzE4LTEwLjEzNC45NzYtMi4xMSA0Ljg3My01LjEyOSA2LjctNi40OTMgNS44MzItNC4zNjEgMTcuMTQ1IDEwLjE4MyAyMC45ODYgMTMuNTkzIDQuNTU1IDQuMDQ0IDQuNTI4IDMuNjQ4IDkuMDgyIDcuNjkyIDIuODMxIDIuNTE4IDYuOTI5IDQuOTc1IDcuMDUxIDguNTY3eiIgZmlsbD0iIzA4MTE0MCIvPjxwYXRoIGQ9Ik0xNzAuMTk0IDE0MS44MTFhNi42MzkgNi42MzkgMCAwMS0xLjE3NiAzLjczNSAyMTQuMjUgMjE0LjI1IDAgMDEtMi4yMzcgMy4xNiAxNC4yMTIgMTQuMjEyIDAgMDEtMi42MzEgMi44OSAyLjkyIDIuOTIgMCAwMS0xLjk0OC41NjUgNS41NzggNS41NzggMCAwMS0xLjkzNi0uNWMtMi40MjktMS4wODItNC4yOTItMi45NDUtNi4zNjUtNC40MjVhNjQuNjM3IDY0LjYzNyAwIDAxLTYuMDc1LTQuNzg1Yy0zLjc3Ny0zLjUtNy40NDktNy4xLTExLjE2Ny0xMC42NjRhNTYuNTMzIDU2LjUzMyAwIDAwLTUuNzU5LTUuMTA2IDI5LjA5MSAyOS4wOTEgMCAwMS0yLjk0Mi0yLjUxNyA3LjYyNyA3LjYyNyAwIDAxLTIuMTA1LTMuMjUyIDMuNiAzLjYgMCAwMS4wMjQtMS45NjcgNS4wNTQgNS4wNTQgMCAwMS45NTQtMS43MTMgMjEuMzg0IDIxLjM4NCAwIDAxMi43MjktMi43NTFjLjk3My0uODQ4IDEuOTkzLTEuNjM2IDMuMDEyLTIuNDIzYTQuNDQgNC40NCAwIDAxMy43MTItLjk2OCAxMC44NDEgMTAuODQxIDAgMDEzLjYyMSAxLjQzMyAyNi4zNDggMjYuMzQ4IDAgMDEzLjE3MyAyLjIzNCA2Ny42MTEgNjcuNjExIDAgMDE1LjY2MiA1LjI2OWwyLjY3MyAyLjc4NmMuODg1LjkzMiAxLjc1MyAxLjg4MiAyLjcgMi43MyAxLjg5NCAxLjc0MyAzLjkxMSAzLjMyMiA1LjkxMSA0Ljk1MSAxIC44MTcgMS45NTggMS42NzYgMi45MTUgMi41MzdzMS45NjYgMS42NDUgMi45NiAyLjQ2N2ExOS4zNjQgMTkuMzY0IDAgMDEyLjc5IDIuNzA3IDYuMTg2IDYuMTg2IDAgMDExLjUwNSAzLjYwN3ptLS4zOTMuMDEzYTUuOCA1LjggMCAwMC0xLjQwNy0zLjM4NyAxOC43ODMgMTguNzgzIDAgMDAtMi43My0yLjY1NmMtLjk4NS0uODE5LTIuMDA3LTEuNjA2LTIuOTg1LTIuNDU3bC0yLjkzLTIuNWMtMS45OC0xLjYyNS0zLjk5LTMuMjYxLTUuOS00Ljk4Ny0xLjkxOC0xLjc2LTMuNTg4LTMuNzA5LTUuMzgzLTUuNTUxYTU5LjY2OCA1OS42NjggMCAwMC01LjYxOC01LjI1MyAyNS45ODUgMjUuOTg1IDAgMDAtMy4xMzEtMi4yIDEwLjQ4NCAxMC40ODQgMCAwMC0zLjQ5NC0xLjM4MSA0LjE0IDQuMTQgMCAwMC0zLjQ3Ni44MzMgNDQuMDAyIDQ0LjAwMiAwIDAwLTIuOTg2IDIuNDIxIDIxLjA3NSAyMS4wNzUgMCAwMC0yLjY1OSAyLjczMSAzLjc3OCAzLjc3OCAwIDAwLS45IDMuMzc4IDcuMTMzIDcuMTMzIDAgMDAxLjk5MiAzLjEwOCAyOC43NzkgMjguNzc5IDAgMDAyLjkyMyAyLjQ2OCAyOC40MjYgMjguNDI2IDAgMDEyLjk5NSAyLjQ2N2wyLjc4NSAyLjY3MWMzLjggMy40NjcgNy40IDcuMTU3IDExLjE4NCAxMC42MzIuOTQzLjg3MyAxLjkgMS43MiAyLjkyMyAyLjVzMi4wOCAxLjUxMSAzLjExNCAyLjI3N2MyLjEwNiAxLjQ4MSAzLjk4IDMuMzE2IDYuMzE0IDQuMzQxIDEuMTI2LjQ4OCAyLjUuNzg3IDMuNTE0LjAxNWExMS43NTIgMTEuNzUyIDAgMDAyLjU1Ni0yLjhsMi4yLTMuMTU3YTYuMjU5IDYuMjU5IDAgMDAxLjA5OC0zLjUxM3oiIGZpbGw9IiMwODExNDAiLz48cGF0aCBkPSJNMTQxLjc1MiAxMTQuMDYyYTM1LjU0IDM1LjU0IDAgMDEtMi43MjYgMy4xMjMgMjMuNzE0IDIzLjcxNCAwIDAwLTIuODQgMy4wMjMgMzAuMDY2IDMwLjA2NiAwIDAxLTIuNzkyIDMuMDY1IDE1LjU2NiAxNS41NjYgMCAwMC0xLjMyMSAxLjYgMjEuNzM3IDIxLjczNyAwIDAxLTEuMzgxIDEuNTQ2LjkuOSAwIDAxLTEuMzY5LTEuMTdsLjAwOC0uMDExYTI1LjY1MyAyNS42NTMgMCAwMTIuNzQxLTMuMTE5Yy45MTEtMS4wNDIgMS44MzEtMi4wNzYgMi44NDItMy4wM2EzMy40MzcgMzMuNDM3IDAgMDAyLjc5Mi0zLjA3NCAyMC4yMzEgMjAuMjMxIDAgMDAyLjctMy4xNTMuOS45IDAgMTExLjU1OS45MS45MTMuOTEzIDAgMDEtLjA2My4wOTR6bTE0Ljk4NyAzNS4xMTRhMzkuMjEyIDM5LjIxMiAwIDAxMi4yLTMuMzU5IDI2Ljg1NiAyNi44NTYgMCAwMDIuMzctMy4zIDE5LjE0MiAxOS4xNDIgMCAwMTIuNTA2LTMuMjM5Yy40NjctLjUuODcxLTEuMDYzIDEuMy0xLjYwOWExMy4yOCAxMy4yOCAwIDAxMS40NjktMS40NzYuOS45IDAgMDExLjI2MyAxLjI3OWwtLjAzNi4wNDFhOTQuODY4IDk0Ljg2OCAwIDAxLTIuNjQyIDIuODg0Yy0uODI1IDEuMDIyLTEuNjExIDIuMDgyLTIuNDc1IDMuMWEyNS42NDMgMjUuNjQzIDAgMDAtMi4yODUgMy4zIDIxLjA3MyAyMS4wNzMgMCAwMC0yLjE5MSAzLjQwNy45LjkgMCAxMS0xLjYxMS0uODA3eiIgZmlsbD0iI2ZmYzc1NyIvPjxwYXRoIGQ9Ik0zOC44MzQgNjcuNjkxYy40NC0yLjc3OSAxLjM4Ni01LjQwOSAxLjk0Mi04LjE3M2E0My44OSA0My44OSAwIDAxMy40MjQtNy42NzIgMzMuNSAzMy41IDAgMDEyLjIzNi0zLjU2M0EzMC45IDMwLjkgMCAwMTQ5LjA2MyA0NWMuOTMxLTEuMDQ4IDEuODQ0LTIuMSAyLjg2OS0zLjA1M2wzLjEyOS0yLjc2N2E0NC45NDkgNDQuOTQ5IDAgMDEzLjM2Mi0yLjQ2N2MxLjE4MS0uNzI4IDIuMi0xLjcyOCAzLjQxOS0yLjRsMS44LTEuMDYzIDEuODYyLS45NjFjMS4yNjQtLjU5IDIuNS0xLjI1OSAzLjgyMi0xLjczMS42NjktLjIxIDEuMzIzLS40NjEgMi0uNjI4czEuMzQ5LS4zNzEgMi4wMTMtLjU5M2EzMS45MjQgMzEuOTI0IDAgMDE0LjA4Ni0uOTYyYy42OTEtLjExOCAxLjM5My0uMTU4IDIuMDg5LS4yMjcuNjkyLS4xMDYgMS4zODQtLjIgMi4wODItLjI2MiAxLjM5Mi0uMTgxIDIuOC0uMjI5IDQuMi0uMjc3YS43ODcuNzg3IDAgMTEuMDUzIDEuNTcyaC0uMWMtMS4zNDkuMDItMi43LjAzNi00LjAzOS4xODVhMTkuMTM2IDE5LjEzNiAwIDAwLTMuOTguNzA1Yy0uNjUxLjE3Ny0xLjMyNi4yMzItMS45ODEuMzkzbC0xLjk3OC40MzNhNDAuMDMzIDQwLjAzMyAwIDAwLTMuODc1IDEuMiAyOC43NzkgMjguNzc5IDAgMDAtNy4zMjcgMy41IDEwLjYgMTAuNiAwIDAxLTEuNzcgMSA1IDUgMCAwMC0uOTIxLjQ1MWMtLjI3OC4yLS41NDQuNDA5LS44MTYuNjEyLTEuMDgzLjgyNi0yLjAyNCAxLjgyMi0zLjA4NyAyLjY0OC0uNTMxLjQxNS0xLjEwOS43OC0xLjYxOCAxLjIyNWwtMS40MjQgMS40MjdjLS41LjQ1NC0uOTI2Ljk3OS0xLjQyIDEuNDQxYTEwLjI1OCAxMC4yNTggMCAwMC0xLjM0NyAxLjUgMjUuMTIzIDI1LjEyMyAwIDAxLTIuNDM1IDMuMjI4IDExLjI0MyAxMS4yNDMgMCAwMC0xLjEyMiAxLjY5M2MtLjQuNTUyLS43NjUgMS4xMjYtMS4xNTMgMS42OWEzMi43MzYgMzIuNzM2IDAgMDAtMy4xMTIgNy41NDQgMTkuMjgzIDE5LjI4MyAwIDAwLTEuMjEgMy45IDcxLjMzMyA3MS4zMzMgMCAwMC0uNzQ5IDQgLjc4Ny43ODcgMCAwMS0xLjU1Ni0uMjM5em04Mi45MDUgMzQuMjZsLTEuODU0IDIuMzA5YTIxLjA5MSAyMS4wOTEgMCAwMS0xLjk0NiAyLjIxNWwtMS4wNTIgMS4wM2MtLjM0Ny4zNDctLjY2MS43MjctMSAxLjA4M3EtMSAxLjA4NC0yLjA3NyAyLjExNmEyOS4wODUgMjkuMDg1IDAgMDEtMTAuMzI0IDUuOTA3bC01LjU0MSAxLjcxNGE0Ni41IDQ2LjUgMCAwMS01LjY3OCAxLjUxNmMtLjk3MS4xNy0xLjk0Mi4zNzctMi45MjguNDg3YTI4LjUzMSAyOC41MzEgMCAwMS0yLjk0Ny4xNDljLS45OCAwLTEuOTU2LS4wMzItMi45My0uMDgzcy0xLjk0Mi0uMDQ1LTIuOTIzLS4xMTlhMzguODYyIDM4Ljg2MiAwIDAxLTUuOC0uODY3IDUxLjU0NyA1MS41NDcgMCAwMS01LjcwOS0xLjQgNDcgNDcgMCAwMS0xMC42LTUuMTE4Yy0xLjYxMy0xLjE0LTMuMS0yLjQzNi00LjYtMy43YTM2LjI1IDM2LjI1IDAgMDEtNC4xNzQtNC4xNzEgNTEuMjA1IDUxLjIwNSAwIDAxLTEuNzc3LTIuMzU5Yy0uNi0uNzgtMS4xNjEtMS41ODYtMS43MTktMi40YTQzLjMxOCA0My4zMTggMCAwMS0yLjk5LTUuMS43ODcuNzg3IDAgMTExLjQwNy0uNzA2di4wMDZsLjAxNi4wMzJhNDEuNTQ2IDQxLjU0NiAwIDAwMi44MTEgNC45NTMgMzguOSAzOC45IDAgMDAxLjY1MyAyLjMxNmMuNi43MzggMS4yNTIgMS40MjcgMS44ODkgMi4xMjYgMS4yODcgMS4zODUgMi41NjEgMi43ODcgMy45NTcgNC4wNzhhNDAuNDI3IDQwLjQyNyAwIDAwNC40NTQgMy41NDcgMzMuOCAzMy44IDAgMDAxMC4xNjIgNS4wODhjMS44NDEuNDUxIDMuNTM3IDEuNDY3IDUuNDU0IDEuNjcgMS44ODIuMzE5IDMuNzg4LjM5MSA1LjY2OS41MzUuOTMzLjExIDEuOS4yNDEgMi44NTYuMjY0czEuOTExLjAxIDIuODYtLjAyMWMuOTQ5LS4wMTEgMS44OS0uMDgyIDIuODIzLS4xNDdhMTIuMzI3IDEyLjMyNyAwIDAwMi43NjEtLjQ2N2MuOTA2LS4yNTkgMS43ODktLjYgMi43MTItLjgzNi45MTUtLjI2MyAxLjg1Ni0uNDczIDIuNzg3LS43MzguOTQ0LS4yMjYgMS44NDYtLjU4NiAyLjc3NS0uODg3LjkyNS0uMjczIDEuOTMxLS40NzQgMi44MjYtLjcyMiAzLjcwNi0uOTQ5IDYuODMzLTMuMzU3IDkuNy01LjgxNy43NDEtLjYgMS40NzMtMS4yMTMgMi4xOC0xLjg1OGExNS45NzYgMTUuOTc2IDAgMDAxLjk3OC0yLjA3NmMxLjI5Mi0xLjQyNSAyLjM3Ni0yLjk4NSAzLjU1OS00LjQ3MmwuMDUtLjA2M2EuNzg2Ljc4NiAwIDAxMS4yMzEuOTc5ek00MC4yMTggODcuNDE0YTQuNzEgNC43MSAwIDAxLS40NTQtMS41NTQgMy41NzMgMy41NzMgMCAwMC0uMjUxLTEuNiAzLjkyOCAzLjkyOCAwIDAxLS4yNzEtMS41OSAyLjQ4NiAyLjQ4NiAwIDAwLS4yMTktLjc4IDMuMTgyIDMuMTgyIDAgMDEtLjEzLS44LjkuOSAwIDAxMS43MzQtLjM4NGwuMDQ3LjExYTMuNzc5IDMuNzc5IDAgMDEuMjk1IDEuNTM5IDYuOTM3IDYuOTM3IDAgMDEuMiAxLjU1NiA0LjAyNSA0LjAyNSAwIDAwLjMxMiAxLjUzNiA0LjI1MSA0LjI1MSAwIDAxLjExNi43NzggMS42ODUgMS42ODUgMCAwMC4zNTYuNzE2LjkxLjkxIDAgMTEtMS41MS45ODF6IiBmaWxsPSIjMDgxMTQwIi8+PHBhdGggZD0iTTI1LjMgMTIzLjYyN2MtMS43MjMgMy41NTMtNS4xMTQgNC4yMzMtOC41OTIgNC42MTZhNzEuNjM3IDcxLjYzNyAwIDAwLTcuNTIxIDEuNiAzOS45MzEgMzkuOTMxIDAgMDEtNC44OTMtNy4xNDNjMS44NTUtLjUgMy44MjktMS4wODIgNC4zNjYtMS4zMDcgNC45NTMtMi4xIDcuNzM2LTYuODM3IDEyLjQ5Mi05LjExOCAxLjM3NS0uNjYzIDQuNDM3LTEuMTUgNS43NTUtLjA3NSAyLjA4MSAxLjctMS4zIDEwLjc4My0xLjYwNyAxMS40Mjd6IiBmaWxsPSIjYWZiYWRkIi8+PHBhdGggZD0iTTgwLjQ3NSA1OC45OTVjLS40LS44MzgtLjgzOC0xLjY2LTEuMjU4LTIuNWExNC42MzEgMTQuNjMxIDAgMDAtMS40MDctMi40MzZjLS41NTQtLjc2LTEuMDY3LTEuNTQ1LTEuNTktMi4zMjdhMTEuMDc5IDExLjA3OSAwIDAwLS44ODctMS4wOTVjLS4zMDctLjM1NS0uNTg4LS43My0uODkxLTEuMDg3YS40NS40NSAwIDAxLjY2Ny0uNmwuMDE4LjAxOWExNS44NjIgMTUuODYyIDAgMDExLjggMi4yNDUgMjIuMDIzIDIyLjAyMyAwIDAxMS42IDIuMzg4Yy40NzEuODM0Ljk3OSAxLjY0NCAxLjQ2OCAyLjQ3LjI0NC40MTQuNDI5Ljg1OS42MzkgMS4yOTFzLjQzLjg2LjY3NiAxLjI4MmEuNDUxLjQ1MSAwIDAxLS43NzkuNDU1bC0uMDE3LS4wMzJ6bS0zLjAwNyA0LjA2YTE5LjU0NyAxOS41NDcgMCAwMS03LjcyNS01LjU2NiAxMC4xMzMgMTAuMTMzIDAgMDEtMS4zMDctMi4wNzggMy41NSAzLjU1IDAgMDEtLjI5LTIuNTk0IDIuNjY1IDIuNjY1IDAgMDEuODExLTEuMTE3IDMuNDE2IDMuNDE2IDAgMDExLjItLjU3NyAzLjYzOSAzLjYzOSAwIDAxMi41ODEuMjQxIDEuOSAxLjkgMCAwMS41NzguNDU1IDIuNTY2IDIuNTY2IDAgMDEuMzc3LjU4IDIgMiAwIDAxLjE1MyAxLjQ0NSAzLjA0OSAzLjA0OSAwIDAxLTEuOTU1IDEuOCA4LjMxNyA4LjMxNyAwIDAxLTQuODg1LjA5NSA5LjY5MyA5LjY5MyAwIDAxLTQuMjMyLTIuMzg4IDkuOTIyIDkuOTIyIDAgMDEtMi40Ni00LjE4NS40NTEuNDUxIDAgMTEuODYtLjI3IDguODM1IDguODM1IDAgMDA2LjA1MiA1Ljk4OSA3LjQ0MyA3LjQ0MyAwIDAwNC4zMzMtLjExQTIuMjQ1IDIuMjQ1IDAgMDA3MyA1My41OTVhMS4xMjkgMS4xMjkgMCAwMC0uMDc4LS44MzMgMS43NCAxLjc0IDAgMDAtLjI1LS40MDYgMS4wOCAxLjA4IDAgMDAtLjMzNS0uMjdjLTEuMTIxLS42MTgtMy4wNDItLjI3LTMuNDQxIDFhMi43NTggMi43NTggMCAwMC4zIDEuOTY5IDkuMjc2IDkuMjc2IDAgMDAxLjIzNCAxLjg2NyAxOC4zMSAxOC4zMSAwIDAwMy4zMzcgMy4xMzEgMTguNTA5IDE4LjUwOSAwIDAwNC4wMzMgMi4xNjYuNDUxLjQ1MSAwIDAxLS4zMjQuODQxem0tLjg2OCAzLjUyNmMtMS4yMTItLjM0NS0yLjQ2OC0uNTk1LTMuNzIyLS45NTRhNDcuNzQgNDcuNzQgMCAwMS0xLjg2My0uNjEzIDE4LjUxNiAxOC41MTYgMCAwMC0xLjg0Ni0uNSAzMS41NTEgMzEuNTUxIDAgMDEtMy43NDYtMS4wNDZjLS42MTgtLjIxNS0xLjI0OC0uNC0xLjg3LS42MzhhOS44NDcgOS44NDcgMCAwMS0xLjc4NS0uOTM0LjQ1LjQ1IDAgMDEuNDcxLS43NjdsLjAyNy4wMTZhMjAuODY2IDIwLjg2NiAwIDAwMy40MjEgMS40ODZjMS4yMS4zODIgMi40Ni42NzQgMy43IDEuMDYzIDEuMjU0LjM2IDIuNDgyLjgwNiAzLjcxMyAxLjA4LjYyMy4xNDYgMS4yMzkuMzM2IDEuODY3LjVzMS4yNjMuMzA5IDEuOTEuNDUzYS40NTEuNDUxIDAgMDEtLjIuODhsLS4wMjUtLjAwNnoiIGZpbGw9IiMyMjI2NmQiLz48cGF0aCBkPSJNODAuNTI3IDU4Ljk3M2MtLjIxNC0uNDEyLS4yNzItLjktLjY1OC0xLjIzNC0uMjUyLS4zOTQtLjM4OC0uODQ5LS42MDgtMS4yNjRzLS40LS44NTEtLjU3OC0xLjI5M2MtLjEtLjIxNS0uMjUtLjQtLjM0OS0uNjE1YTIuNjk0IDIuNjk0IDAgMDAtLjM2NC0uNjA3Yy0uMTM2LS4xOTMtLjIzOC0uNDA4LS4zNy0uNi0uMDk0LS4yMjItLjM2Ny0uMzIxLS40ODEtLjUyOC0uMy0uMzY2LS41OTEtLjczNS0uOS0xLjA5MmE2Ljg5MyA2Ljg5MyAwIDAwLS44MTktMS4xNSAzLjg5MiAzLjg5MiAwIDAwLS45MTMtMS4wNzIuMzkyLjM5MiAwIDAxLjU2My0uNTQ2bC4wMzYuMDM2YTguNzI4IDguNzI4IDAgMDAxIDEuMDQ0Yy4zLjM3Mi41Mi44MS44MDUgMS4xOTRhMy45ODggMy45ODggMCAwMC44NTMgMS4xNTRjLjIwOC4xNDguMTI2LjQ5My4zNDIuNjM1YTMuNTA4IDMuNTA4IDAgMDEuNTA1LjUyNyAxNC44MjIgMTQuODIyIDAgMDExLjMgMi41NzEgNS45MjkgNS45MjkgMCAwMC43MyAxLjI0IDcuOTggNy45OCAwIDAwLjY0IDEuMy4zOTMuMzkzIDAgMDEtLjcxMy4zMjl6IiBmaWxsPSIjZmZjNjU3Ii8+PHBhdGggZD0iTTgwLjEyIDU5LjE2NGEyMy4zODEgMjMuMzgxIDAgMDAtMS41MDktMi44MzNBMjUuOTE4IDI1LjkxOCAwIDAwNzcgNTMuNjM4Yy0uMy0uNDQ2LS41ODctLjktLjg2Ny0xLjM2NC0uMjc0LS40NzYtLjYtLjg1LS44OTItMS4zLS4zMTEtLjQyNy0uNjgzLS44MjQtMS0xLjI1OGEuNjkxLjY5MSAwIDAxLjIyMy0xLjA0OC43Mi43MiAwIDAxLjU4LS4wMjcuNy43IDAgMDEuMjQuMTY0bC4xNDQuMTQzYTE1LjE4IDE1LjE4IDAgMDExLjAzNiAxLjI1NmMuMy40NjEuNzI2LjgwOSAxLjAwNiAxLjI3NC42MDUuODkgMS4zIDEuNzU2IDEuODQ0IDIuNjY3LjQ2NC45NjUgMS4wODYgMS44MzQgMS41MjggMi44NDRhOS4yNTQgOS4yNTQgMCAwMC43MDkgMS40MjIuODYxLjg2MSAwIDAxLjEzNS42MTUuOC44IDAgMDEtLjQuNTYxLjgyNC44MjQgMCAwMS0xLjAwNi0uMTcgMS4xNjcgMS4xNjcgMCAwMS0uMTYtLjI1M3ptLjcxMS0uMzM5Yy4wMzkuMDgxLjA0NS4wODIuMDQ1LjA4MmEuMDQzLjA0MyAwIDAwLjAyLjAxLjA0My4wNDMgMCAwMC4wNC0uMDA3LjAzNy4wMzcgMCAwMC4wMTctLjAzMi4wNTUuMDU1IDAgMDAwLS4wMTZsLS4wNDEtLjA3NC0uMzkzLS43MThjLS4xNC0uMjMxLS4zMDctLjQ2NS0uNDMtLjY4OS0uMjcyLS40NTItLjQxOS0uOTQ4LS43LTEuNDE4LS4yNDYtLjQ3OS0uNTI2LS45MzctLjc4Ny0xLjQwNkExNC44MjkgMTQuODI5IDAgMDA3Ni44NiA1MS45Yy0uMzc1LS4zODEtLjQ1My0uOTkxLS44NS0xLjMzOC0uMzU0LS4zODgtLjc1Mi0uNzMyLTEuMTEzLTEuMTA2LS4wNDYtLjA0Ny0uMDgxLS4xLS4xMjItLjE1NC0uMDIyLS4wMzEuMDA4LS4wMTMuMDA1LS4wMjRzMC0uMDMxIDAtLjAyMi4wMS4wMTUuMDExIDBjLjM1NC40LjYyNi44NTYgMSAxLjI1NWE0LjI1MSA0LjI1MSAwIDAxLjk4IDEuMzI2IDUuMDgzIDUuMDgzIDAgMDAuNDI3LjY3N2wuMzgzLjcwOWExMC42ODQgMTAuNjg0IDAgMDAuOSAxLjM1MSAxMiAxMiAwIDAxLjg3MiAxLjM5IDI3Ljc1OCAyNy43NTggMCAwMDEuNDc3IDIuODYxek03Ny40ODkgNjNhMzQuNDY2IDM0LjQ2NiAwIDAxLTQuMjA4LTIuMjcgMTcuMjYgMTcuMjYgMCAwMS0zLjQ5LTMuMjgxIDkuMzczIDkuMzczIDAgMDEtMS4yODQtMi4wNzIgMy4zOSAzLjM5IDAgMDEtLjIyNi0yLjUxNiAyLjY4OCAyLjY4OCAwIDAxLjc1OC0xLjA2MSAyLjk1OCAyLjk1OCAwIDAxMS4xNTQtLjU0MSAzLjgyNyAzLjgyNyAwIDAxMi40NTguMjYgMS45MTEgMS45MTEgMCAwMS44NTguOTY0IDEuNzc0IDEuNzc0IDAgMDEuMTE1IDEuMjkzIDIuOTY5IDIuOTY5IDAgMDEtMS43ODggMS43MjggOC4zMjkgOC4zMjkgMCAwMS00LjgyOC4yMjcgOS43ODUgOS43ODUgMCAwMS00LjE3Mi0yLjQ0IDEwLjIxNiAxMC4yMTYgMCAwMS0uNzU4LS45NTEgOS40OTUgOS40OTUgMCAwMS0uNjgyLTEgMTIuMjY1IDEyLjI2NSAwIDAxLTEuMDI3LTIuMTkuMzkzLjM5MyAwIDAxLjczNi0uMjc4di4wMDZsLjAxMy4wMzZhOC41NDMgOC41NDMgMCAwMDIuMzI1IDMuNzc0IDExLjM1NCAxMS4zNTQgMCAwMDEuNzI1IDEuMzc1IDcuNzI5IDcuNzI5IDAgMDAyLjA0NC44NjcgNi4zOTQgNi4zOTQgMCAwMDQuMzU2LS4xMjJjLjMzMS0uMTM5LjYxOC0uMzI1LjkyNi0uNDcxYTEuMDQxIDEuMDQxIDAgMDAuNTYxLS43MjkgMS40NjMgMS40NjMgMCAwMC0uNzU5LTEuNDUzIDIuMzkxIDIuMzkxIDAgMDAtMS45MjktLjIwNyAxLjgzIDEuODMgMCAwMC0xLjQxMSAxLjE1NSA0LjAyOSA0LjAyOSAwIDAwLjI0OCAxLjk0NyA0LjMyMyA0LjMyMyAwIDAwLjUzLjk3OWMuMTczLjMzNC40LjY0NS42MDUuOTY2YTEzLjcxMSAxMy43MTEgMCAwMDMuNDI1IDMuMDYxIDE0Ljc5MyAxNC43OTMgMCAwMDQuMDE2IDIuMjEyLjM5NC4zOTQgMCAwMS0uMjk0LjczeiIgZmlsbD0iI2ZmYzY1NyIvPjxwYXRoIGQ9Ik03Ny4zMjEgNjMuNDIxYTIxLjk4NyAyMS45ODcgMCAwMS04LjAyMS01LjczMyAxMC4xMzUgMTAuMTM1IDAgMDEtMS4zNDItMi4xNzIgMy45NDQgMy45NDQgMCAwMS0uMy0yLjY4NCAzLjEgMy4xIDAgMDExLjkxNS0xLjk3NyA0LjI2MyA0LjI2MyAwIDAxMi42NjYtLjE0MSAyLjk2OCAyLjk2OCAwIDAxMS4yNDIuNjY0IDIuODYgMi44NiAwIDAxLjQyMS41NjkgMi4xNTUgMi4xNTUgMCAwMS4zMTcuNjM2IDIuMzE2IDIuMzE2IDAgMDEtLjAxNyAxLjQ0NyAyLjgxNyAyLjgxNyAwIDAxLS43ODkgMS4xNDkgNC45ODIgNC45ODIgMCAwMS0yLjM3IDEuMDU0IDguMTgzIDguMTgzIDAgMDEtMi41MTcuMDY3IDEwLjAxIDEwLjAxIDAgMDEtNC42NDMtMS43MTggMTAuMTM0IDEwLjEzNCAwIDAxLTMuNjQ3LTQuOTI4IDIgMiAwIDAxLS4xNjUtLjY4NS42OC42OCAwIDAxMS4zMTgtLjE2M2wuMi41N2ExMC4xNjIgMTAuMTYyIDAgMDAuNDkzIDEuMDgyIDguNTIgOC41MiAwIDAwMy4yNzYgMy4zMjQgNy44NTkgNy44NTkgMCAwMDQuNDg4IDEgNS4xNzggNS4xNzggMCAwMDIuMTU4LS42MjMgMS4zODUgMS4zODUgMCAwMC42My0uNjcuODY1Ljg2NSAwIDAwLS4yMDgtLjc3OGMtLjY2Ny0uOTE5LTMuMTE1LS42NjUtMy4yMzMuN2EzLjU0IDMuNTQgMCAwMC42NTQgMi4wNTEgMTUuMzU0IDE1LjM1NCAwIDAwMS40MzMgMS44NzMgMTQuNjc2IDE0LjY3NiAwIDAwMy42MiAzLjA3MSAxNy4wMTkgMTcuMDE5IDAgMDAyLjEyIDEuMWwuNTUxLjIyOC4yNzguMTA3YS45NTIuOTUyIDAgMDEuNC4yNDcuODM0LjgzNCAwIDAxLjA2OCAxLjAzNi44NDQuODQ0IDAgMDEtLjk5Ni4yOTd6bS4yOTMtLjczMWEuMDU0LjA1NCAwIDAwLjA2NC0uMDg0Yy4wNi4wMTQtLjIyLS4wODctLjQtLjE2MWwtLjU3My0uMjQzYTE4Ljk2NSAxOC45NjUgMCAwMS0yLjItMS4xNTggMTYuNTY4IDE2LjU2OCAwIDAxLTIuMDI1LTEuNDUzIDE4LjE2NCAxOC4xNjQgMCAwMS0xLjg0Ny0xLjY3OEExMC43ODYgMTAuNzg2IDAgMDE2OS4xIDU1LjlhNC4yNjcgNC4yNjcgMCAwMS0uNzItMi42MDcgMi4xMTYgMi4xMTYgMCAwMS43NjEtMS4zMDkgMi44ODYgMi44ODYgMCAwMTEuMy0uNTcyIDMuMzQ3IDMuMzQ3IDAgMDExLjM4My4wMzEgMi43NDEgMi43NDEgMCAwMS42NjguMjQ2IDEuMzUgMS4zNSAwIDAxLjU4OS41MzIgMS42NSAxLjY1IDAgMDEuMjgxIDEuNTA5IDIuMTMzIDIuMTMzIDAgMDEtLjk5NCAxLjA2NCA2LjU5MiA2LjU5MiAwIDAxLTIuNDgzLjcgOC41NDcgOC41NDcgMCAwMS00LjkxOS0xLjA3NiA5LjYwNSA5LjYwNSAwIDAxLTMuNDIxLTMuNjg0IDEwLjc2NyAxMC43NjcgMCAwMS0uNTU1LTEuMTM0bC0uMjIyLS41NzZjLS4wMDgtLjAwOS0uMDI3LS4wMDctLjAyMyAwLS4xLS4zMTMuMzM3Ljg0Mi42MTUgMS40NjFhOC41MzEgOC41MzEgMCAwMDEuMTkxIDEuOTc3IDguNyA4LjcgMCAwMDEuNzI3IDEuNTI2IDkuMSA5LjEgMCAwMDQuMzExIDEuNTg5IDkuMyA5LjMgMCAwMDIuMjgxLS4xNSA0LjM3NCA0LjM3NCAwIDAwMi4wMTYtLjgyNCAxLjgxNyAxLjgxNyAwIDAwLjU4OS0uODI0IDEuNTQ3IDEuNTQ3IDAgMDAtLjAwNy0uOTYzIDEuNiAxLjYgMCAwMC0uMjItLjQ2MyAyLjI0MSAyLjI0MSAwIDAwLS4yODktLjQzOCAyLjE3MiAyLjE3MiAwIDAwLS45MTktLjUyYy0xLjM5Mi0uNDYyLTMuMzA1LjE3MS0zLjY3OCAxLjYzM2EzLjMxIDMuMzEgMCAwMC4zMjggMi4xNzEgOS4zOCA5LjM4IDAgMDAxLjI2IDEuOTczIDE3LjkyMyAxNy45MjMgMCAwMDcuNjY0IDUuNTE4em0tLjk5NyAzLjgzN2E2LjEyMyA2LjEyMyAwIDAwLTEuODU4LS40MzVjLS42MzMtLjEwNy0xLjIzOS0uMzQ4LTEuODY4LS41MTRhMTIuNDA5IDEyLjQwOSAwIDAxLTEuODM3LS42ODVjLS4yOTQtLjEyNC0uNjEyLS4xNzktLjkxLS4zYTQuNzE2IDQuNzE2IDAgMDAtLjkyNS0uMjY5Yy0uMzEzLS4wNzUtLjYxNy0uMTg2LS45My0uMjY1LS4zLS4xMjgtLjY1Ni0uMDQyLS45NjItLjE1Mi0uNjMxLS4xNDUtMS4yNy0uMjc1LTEuOS0uNDQ1LS41OTMtLjI4OS0xLjIzNS0uNDM3LTEuODM2LS43MTgtLjU1Ni0uMzcyLTEuMi0uNTQ4LTEuNzg4LS45YS4zOTMuMzkzIDAgMDEuMzk1LS42NzlsLjA0MS4wMjNhNi4xNzQgNi4xNzQgMCAwMDEuNjg4Ljc2N2MuNTc5LjIyNiAxLjE0MS41MyAxLjc0OS43MThhNi40NzUgNi40NzUgMCAwMDEuODQ1LjUxNWMuMzM1LS4wMTQuNTc5LjMyNi45MTYuMzA5YTYuMDkyIDYuMDkyIDAgMDEuOTcxLjExNSAzLjUgMy41IDAgMDAuOTMxLjI5M2MuMzIuMDczLjYxMy4yMzEuOTM2LjNhMS44MTEgMS44MTEgMCAwMS45LjMxMyAxLjcgMS43IDAgMDAuNDUyLjE1N2wuNDQxLjIwN2E5LjE5IDkuMTkgMCAwMDEuODkzLjQgMTguMjU4IDE4LjI1OCAwIDAwMS45LjQ5LjM5My4zOTMgMCAwMS0uMjIxLjc1NXoiIGZpbGw9IiNmZmM2NTciLz48cGF0aCBkPSJNNzYuNDkyIDY2Ljk2Yy0xLjM3NS0uMzM5LTIuNzA5LS43NzUtNC4xMjYtMS0xLjQtLjQ0LTIuNjQ3LS44NzItNC4wMjgtMS4yYTI3LjgxNCAyNy44MTQgMCAwMS00LjA0Ni0xLjM4M2MtLjMyOC0uMTQzLS42NjUtLjIyNy0xLjAwNS0uMzYyYTcuNjg0IDcuNjg0IDAgMDEtLjk3Mi0uNDlsLS40NTgtLjI4OS0uMjI3LS4xNTVhLjY3Ni42NzYgMCAwMS0uMjQtLjMxLjcuNyAwIDAxLjE0OC0uNzMxLjY4My42ODMgMCAwMS43MzktLjE1NCAxNi40OSAxNi40OSAwIDAwMS44OTMuOTQyIDE1Ljk3NiAxNS45NzYgMCAwMDIuMDA3LjYyMmw0LjA4OCAxLjA4MmMuNjczLjIyNCAxLjMyMi41IDIgLjY2OHMxLjM2LjMgMi4wMzguNTIyYy4zMzguMS42NzQuMjI5IDEuMDE0LjMxNWwxLjAzLjIyMi41MTUuMTExYS45NS45NSAwIDAxLjM3Mi4xMzcuODEyLjgxMiAwIDAxLjExOCAxLjI1Ljg2Mi44NjIgMCAwMS0uODYuMjAzem0uMjE2LS43NTdjLjE0Mi4wNDMuMTExLS4wMzEuMTExLS4wNTVhLjA1LjA1IDAgMDAtLjAxOC0uMDE4LjYuNiAwIDAwLS4xLS4wMjRsLS41MTktLjExN2MtLjY4OS0uMTY5LTEuMzkxLS4zLTIuMDc3LS40MzUtMS4zNDUtLjMzLTIuNzY3LS43OTQtNC4wOC0xLjIzM2EzNC42MzYgMzQuNjM2IDAgMDAtNC4wOC0xLjE2N2MtLjcyNS0uMS0xLjI4OS0uNjI2LTEuOTktLjc5MS0uMzM4LS4xMi0uNjg2LS4yMjUtMS4wMjItLjM2NWwtLjUwNi0uMjE0LS4yNTEtLjExNy0uMTItLjA2OGMtLjA0OC0uMDI5LS4wNzktLjA0Ni0uMDU5LS4wMzYuMDYyLS4wMS4wMDYtLjA2OS4wMS0uMDQxaC4wMDVsLjIxLjEyOS40NDQuMjQ3YTguMiA4LjIgMCAwMDEuODc5LjggOS44NDIgOS44NDIgMCAwMTEuOTcyLjcgNi43MDggNi43MDggMCAwMDEgLjMxOWwuOTk1LjM0YzEuMzQxLjQyNSAyLjguNjczIDQuMTA2IDEuMWEzOS4xNjQgMzkuMTY0IDAgMDA0LjA5IDEuMDQzeiIgZmlsbD0iI2ZmYzY1NyIvPjxwYXRoIGQ9Ik02OC4xIDQ0LjkwNmMuMDM2LS4yOTMtLjIzMy0uNTc2LS40NTEtLjQ3M2EuNTE1LjUxNSAwIDAwLS4wOS43MjdjLjE4Mi4xOTEuNS4wMzkuNTQxLS4yNTQiIGZpbGw9IiNmZmM3NTciLz48cGF0aCBkPSJNNjcuNzA3IDQ0Ljg1N2MtLjAzOC0uMDMyLS4xNTkuMDIzLS4wMjItLjAxNWEuMzEuMzEgMCAwMC4wNS0uMDE0Yy4wMjEtLjAyNy4wMy0uMDc2LjA0NS0uMDY4LjAyNy0uMDEzLjAzOC0uMDMyLjAzNS0uMDM4cy0uMTQ0LS4wMDgtLjE1NC4wNjVjMCAuMTU0LjIuMjE5LjEyLjA4Mi0uMDUtLjA3Ny0uMDc3LjAxOC0uMDI5LjAzOS4wMS0uMDA3IDAtLjA0MS0uMDQ1LS4wNTFhLjY1Ni42NTYgMCAxMS44MDktLjYyNWwtLjAxNS43MjRhLjc3Mi43NzIgMCAwMS0uMjI5LjU1MWMtLjE2Ni4xNjEtLjQyOS4xMjEtLjY1Ni4xMTNhLjcuNyAwIDAxLS41LS40MTUgMS4wODUgMS4wODUgMCAwMS0uMDgyLS41YzAtLjE1NS0uMDU0LS4zOTIuMTcyLS41NDdhLjc2Ni43NjYgMCAwMS40LS4wOTFjLjA2OS4wMjUuMTI0LS4wMjMuMTktLjAzMWEuNDUuNDUgMCAwMS4xNTkuMDc4IDIuNDEyIDIuNDEyIDAgMDEuMTkzLjJjLjA2My4wNDMuMTkxLjA1Mi4yMjMuMTM3YS43LjcgMCAwMS4xMzMuNTA2LjI5NC4yOTQgMCAwMS0uNDc3LjE3em00LjEgMS4zNDNjLjA2Ny0uNTUzLS41MDctMS4xLS45NjItLjkyMWEuOS45IDAgMDAtLjE2NyAxLjM3Mi42ODcuNjg3IDAgMDAxLjEyOS0uNDUxIiBmaWxsPSIjZmZjNzU3Ii8+PHBhdGggZD0iTTcxLjQxIDQ2LjE1NGMtLjAyMi0uMTg4LS4yNDItLjMyNC0uMzI1LS40NTVsLS4wMzgtLjAzNWMtLjAwOC0uMDI5LS4wMjctLjA3OC0uMDQxLS4wNjJhLjE3Mi4xNzIgMCAwMC0uMDkzLjAyNWMtLjA1NS4wNDItLjI0MS4xMjQtLjI2My4yOS0uMDEyLjMzLjI0NS41ODkuNC41MjMuMDcyLS4wNS4xNTMuMDA1LjI3My0uMDIyYS4yMzIuMjMyIDAgMDAuMDg2LS4yNjMuNDE2LjQxNiAwIDExLjgwNi0uMTI3bC0uMDExLjIyNGExLjEgMS4xIDAgMDEtLjQxNS44MDkgMS4yNTggMS4yNTggMCAwMS0uOS4xMyAxLjAzOSAxLjAzOSAwIDAxLS43MTItLjU1MiAxLjQ4IDEuNDggMCAwMS0uMTQ5LS44LjkxMi45MTIgMCAwMS4zMzgtLjgyOS45ODYuOTg2IDAgMDEuNTI4LS4xMTFjLjA4Ni4wMjYuMTYyLS4wMTYuMjQ1LS4wMjFhLjc2Mi43NjIgMCAwMS4yMTEuMDk0IDIuODg2IDIuODg2IDAgMDEuMzA5LjI1N2MuMS4wNjguMjU5LjEwNi4zMjMuMjI4YTEuMDkyIDEuMDkyIDAgMDEuMjI1LjguNC40IDAgMDEtLjc4NS0uMDE1eiIgZmlsbD0iI2ZmYzc1NyIvPjwvc3ZnPgo=';
10060
10061var styles$O = {
10062 "Image": "Polaris-EmptySearchResult__Image"
10063};
10064
10065function EmptySearchResult(_ref) {
10066 var title = _ref.title,
10067 description = _ref.description,
10068 withIllustration = _ref.withIllustration;
10069 var i18n = useI18n();
10070 var altText = i18n.translate('Polaris.EmptySearchResult.altText');
10071 var descriptionMarkup = description ? React__default.createElement("p", null, description) : null;
10072 var illustrationMarkup = withIllustration ? React__default.createElement(Image, {
10073 alt: altText,
10074 source: emptySearch,
10075 className: styles$O.Image,
10076 draggable: false
10077 }) : null;
10078 return React__default.createElement(Stack, {
10079 alignment: "center",
10080 vertical: true
10081 }, illustrationMarkup, React__default.createElement(DisplayText, {
10082 size: "small"
10083 }, title), React__default.createElement(TextStyle, {
10084 variation: "subdued"
10085 }, descriptionMarkup));
10086}
10087
10088var styles$P = {
10089 "EmptyState": "Polaris-EmptyState",
10090 "Section": "Polaris-EmptyState__Section",
10091 "ImageContainer": "Polaris-EmptyState__ImageContainer",
10092 "DetailsContainer": "Polaris-EmptyState__DetailsContainer",
10093 "withinContentContainer": "Polaris-EmptyState--withinContentContainer",
10094 "Details": "Polaris-EmptyState__Details",
10095 "Image": "Polaris-EmptyState__Image",
10096 "Content": "Polaris-EmptyState__Content",
10097 "withinPage": "Polaris-EmptyState--withinPage",
10098 "imageContained": "Polaris-EmptyState--imageContained",
10099 "Actions": "Polaris-EmptyState__Actions",
10100 "FooterContent": "Polaris-EmptyState__FooterContent"
10101};
10102
10103function EmptyState(_ref) {
10104 var children = _ref.children,
10105 heading = _ref.heading,
10106 image = _ref.image,
10107 largeImage = _ref.largeImage,
10108 imageContained = _ref.imageContained,
10109 action = _ref.action,
10110 secondaryAction = _ref.secondaryAction,
10111 footerContent = _ref.footerContent;
10112 var withinContentContainer = React.useContext(WithinContentContext);
10113 var className = classNames(styles$P.EmptyState, imageContained && styles$P.imageContained, withinContentContainer ? styles$P.withinContentContainer : styles$P.withinPage);
10114 var imageMarkup = largeImage ? React__default.createElement(Image, {
10115 alt: "",
10116 role: "presentation",
10117 className: styles$P.Image,
10118 source: largeImage,
10119 sourceSet: [{
10120 source: image,
10121 descriptor: '568w'
10122 }, {
10123 source: largeImage,
10124 descriptor: '1136w'
10125 }],
10126 sizes: "(max-width: 568px) 60vw"
10127 }) : React__default.createElement(Image, {
10128 role: "presentation",
10129 alt: "",
10130 className: styles$P.Image,
10131 source: image
10132 });
10133 var secondaryActionMarkup = secondaryAction ? buttonFrom(secondaryAction, {
10134 plain: true
10135 }) : null;
10136 var footerContentMarkup = footerContent ? React__default.createElement("div", {
10137 className: styles$P.FooterContent
10138 }, React__default.createElement(TextContainer, null, footerContent)) : null;
10139 var headingSize = withinContentContainer ? 'small' : 'medium';
10140 var primaryActionSize = withinContentContainer ? 'medium' : 'large';
10141 var primaryActionMarkup = action ? buttonFrom(action, {
10142 primary: true,
10143 size: primaryActionSize
10144 }) : null;
10145 var headingMarkup = heading ? React__default.createElement(DisplayText, {
10146 size: headingSize
10147 }, heading) : null;
10148 var childrenMarkup = children ? React__default.createElement("div", {
10149 className: styles$P.Content
10150 }, children) : null;
10151 var textContentMarkup = headingMarkup || children ? React__default.createElement(TextContainer, null, headingMarkup, childrenMarkup) : null;
10152 var actionsMarkup = primaryActionMarkup || secondaryActionMarkup ? React__default.createElement("div", {
10153 className: styles$P.Actions
10154 }, React__default.createElement(Stack, {
10155 alignment: "center"
10156 }, primaryActionMarkup, secondaryActionMarkup)) : null;
10157 var detailsMarkup = textContentMarkup || actionsMarkup || footerContentMarkup ? React__default.createElement("div", {
10158 className: styles$P.DetailsContainer
10159 }, React__default.createElement("div", {
10160 className: styles$P.Details
10161 }, textContentMarkup, actionsMarkup, footerContentMarkup)) : React__default.createElement("div", {
10162 className: styles$P.DetailsContainer
10163 });
10164 return React__default.createElement("div", {
10165 className: className
10166 }, React__default.createElement("div", {
10167 className: styles$P.Section
10168 }, detailsMarkup, React__default.createElement("div", {
10169 className: styles$P.ImageContainer
10170 }, imageMarkup)));
10171}
10172
10173var styles$Q = {
10174 "Truncate": "Polaris-Truncate"
10175};
10176
10177function Truncate(_ref) {
10178 var children = _ref.children;
10179 return React__default.createElement("span", {
10180 className: styles$Q.Truncate
10181 }, children);
10182}
10183
10184var styles$R = {
10185 "ExceptionList": "Polaris-ExceptionList",
10186 "Item": "Polaris-ExceptionList__Item",
10187 "Icon": "Polaris-ExceptionList__Icon",
10188 "statusWarning": "Polaris-ExceptionList--statusWarning",
10189 "statusCritical": "Polaris-ExceptionList--statusCritical",
10190 "Bullet": "Polaris-ExceptionList__Bullet",
10191 "Title": "Polaris-ExceptionList__Title",
10192 "Description": "Polaris-ExceptionList__Description"
10193};
10194
10195function ExceptionList(_ref) {
10196 var itemsList = _ref.items;
10197 var items = itemsList.map(function (item, index) {
10198 var status = item.status,
10199 icon = item.icon,
10200 title = item.title,
10201 description = item.description,
10202 _item$truncate = item.truncate,
10203 truncate = _item$truncate === void 0 ? false : _item$truncate;
10204 var itemClasses = classNames(styles$R.Item, status && styles$R[variationName('status', status)]);
10205 var iconMarkup = icon ? React__default.createElement(Icon, {
10206 source: icon
10207 }) : React__default.createElement("span", {
10208 className: styles$R.Bullet
10209 });
10210 var titleMarkup = title && React__default.createElement("span", {
10211 className: styles$R.Title
10212 }, title);
10213 var descriptionMarkup = description && React__default.createElement("span", {
10214 className: styles$R.Description
10215 }, description);
10216 var Element = truncate ? Truncate : React__default.Fragment;
10217 return React__default.createElement("li", {
10218 className: itemClasses,
10219 key: index
10220 }, React__default.createElement("span", {
10221 className: styles$R.Icon
10222 }, iconMarkup), React__default.createElement(Element, null, titleMarkup, descriptionMarkup));
10223 });
10224 return React__default.createElement("ul", {
10225 className: styles$R.ExceptionList
10226 }, items);
10227}
10228
10229var ResourceListContext = React__default.createContext({});
10230
10231var SELECT_ALL_ITEMS = 'All';
10232
10233var styles$S = {
10234 "Tag": "Polaris-Tag",
10235 "disabled": "Polaris-Tag--disabled",
10236 "TagText": "Polaris-Tag__TagText",
10237 "Button": "Polaris-Tag__Button"
10238};
10239
10240function Tag(_ref) {
10241 var children = _ref.children,
10242 _ref$disabled = _ref.disabled,
10243 disabled = _ref$disabled === void 0 ? false : _ref$disabled,
10244 onRemove = _ref.onRemove;
10245 var i18n = useI18n();
10246 var className = classNames(disabled && styles$S.disabled, styles$S.Tag);
10247 var ariaLabel = i18n.translate('Polaris.Tag.ariaLabel', {
10248 children
10249 });
10250 return React__default.createElement("span", {
10251 className: className
10252 }, React__default.createElement("span", {
10253 title: children,
10254 className: styles$S.TagText
10255 }, children), React__default.createElement("button", {
10256 type: "button",
10257 "aria-label": ariaLabel,
10258 className: styles$S.Button,
10259 onClick: onRemove,
10260 onMouseUp: handleMouseUpByBlurring,
10261 disabled: disabled
10262 }, React__default.createElement(Icon, {
10263 source: polarisIcons.CancelSmallMinor
10264 })));
10265}
10266
10267var Focus =
10268/*#__PURE__*/
10269function (_React$PureComponent) {
10270 _inherits(Focus, _React$PureComponent);
10271
10272 function Focus() {
10273 _classCallCheck(this, Focus);
10274
10275 return _possibleConstructorReturn(this, _getPrototypeOf(Focus).apply(this, arguments));
10276 }
10277
10278 _createClass(Focus, [{
10279 key: "componentDidMount",
10280 value: function componentDidMount() {
10281 this.handleSelfFocus();
10282 }
10283 }, {
10284 key: "componentDidUpdate",
10285 value: function componentDidUpdate(_a) {
10286 var prevChildren = _a.children,
10287 restPrevProps = tslib_1.__rest(_a, ["children"]);
10288
10289 var _b = this.props,
10290 children = _b.children,
10291 restProps = tslib_1.__rest(_b, ["children"]);
10292
10293 if (isEqual(restProps, restPrevProps)) {
10294 return;
10295 }
10296
10297 this.handleSelfFocus();
10298 }
10299 }, {
10300 key: "handleSelfFocus",
10301 value: function handleSelfFocus() {
10302 var _this$props = this.props,
10303 disabled = _this$props.disabled,
10304 root = _this$props.root;
10305
10306 if (disabled) {
10307 return;
10308 }
10309
10310 if (root) {
10311 if (!root.querySelector('[autofocus]')) {
10312 focus.focusFirstFocusableNode(root, false);
10313 }
10314 }
10315 }
10316 }, {
10317 key: "render",
10318 value: function render() {
10319 var children = this.props.children;
10320 return React__default.createElement(React__default.Fragment, null, children);
10321 }
10322 }]);
10323
10324 return Focus;
10325}(React__default.PureComponent);
10326
10327var TrapFocus =
10328/*#__PURE__*/
10329function (_React$PureComponent) {
10330 _inherits(TrapFocus, _React$PureComponent);
10331
10332 function TrapFocus() {
10333 var _this;
10334
10335 _classCallCheck(this, TrapFocus);
10336
10337 _this = _possibleConstructorReturn(this, _getPrototypeOf(TrapFocus).apply(this, arguments));
10338 _this.state = {
10339 shouldFocusSelf: undefined
10340 };
10341
10342 _this.setFocusTrapWrapper = function (node) {
10343 _this.focusTrapWrapper = node;
10344 };
10345
10346 _this.handleBlur = function (event) {
10347 var relatedTarget = event.relatedTarget;
10348
10349 var _assertThisInitialize = _assertThisInitialized(_this),
10350 focusTrapWrapper = _assertThisInitialize.focusTrapWrapper;
10351
10352 var _this$props$trapping = _this.props.trapping,
10353 trapping = _this$props$trapping === void 0 ? true : _this$props$trapping;
10354
10355 if (relatedTarget == null || trapping === false) {
10356 return;
10357 }
10358
10359 if (focusTrapWrapper && !focusTrapWrapper.contains(relatedTarget) && (!relatedTarget || !dom.closest(relatedTarget, '[data-polaris-overlay]'))) {
10360 event.preventDefault();
10361
10362 if (event.srcElement === focus.findFirstFocusableNode(focusTrapWrapper)) {
10363 return fastdom.write(function () {
10364 return focus.focusLastFocusableNode(focusTrapWrapper);
10365 });
10366 }
10367
10368 var firstNode = focus.findFirstFocusableNode(focusTrapWrapper);
10369 fastdom.write(function () {
10370 return focus.focusFirstFocusableNode(firstNode);
10371 });
10372 }
10373 };
10374
10375 return _this;
10376 }
10377
10378 _createClass(TrapFocus, [{
10379 key: "componentDidMount",
10380 value: function componentDidMount() {
10381 this.setState(this.handleTrappingChange());
10382 }
10383 }, {
10384 key: "handleTrappingChange",
10385 value: function handleTrappingChange() {
10386 var _this$props$trapping2 = this.props.trapping,
10387 trapping = _this$props$trapping2 === void 0 ? true : _this$props$trapping2;
10388
10389 if (this.focusTrapWrapper.contains(document.activeElement)) {
10390 return {
10391 shouldFocusSelf: false
10392 };
10393 }
10394
10395 return {
10396 shouldFocusSelf: trapping
10397 };
10398 }
10399 }, {
10400 key: "render",
10401 value: function render() {
10402 var children = this.props.children;
10403 return React__default.createElement(Focus, {
10404 disabled: this.shouldDisable,
10405 root: this.focusTrapWrapper
10406 }, React__default.createElement("div", {
10407 ref: this.setFocusTrapWrapper
10408 }, React__default.createElement(EventListener, {
10409 event: "focusout",
10410 handler: this.handleBlur
10411 }), children));
10412 }
10413 }, {
10414 key: "shouldDisable",
10415 get: function get() {
10416 var _this$props$trapping3 = this.props.trapping,
10417 trapping = _this$props$trapping3 === void 0 ? true : _this$props$trapping3;
10418 var shouldFocusSelf = this.state.shouldFocusSelf;
10419
10420 if (shouldFocusSelf === undefined) {
10421 return true;
10422 }
10423
10424 return shouldFocusSelf ? !trapping : !shouldFocusSelf;
10425 }
10426 }]);
10427
10428 return TrapFocus;
10429}(React__default.PureComponent);
10430
10431var styles$T = {
10432 "Sheet": "Polaris-Sheet",
10433 "Container": "Polaris-Sheet__Container",
10434 "Bottom": "Polaris-Sheet__Bottom",
10435 "enterBottom": "Polaris-Sheet--enterBottom",
10436 "enterBottomActive": "Polaris-Sheet--enterBottomActive",
10437 "exitBottom": "Polaris-Sheet--exitBottom",
10438 "exitBottomActive": "Polaris-Sheet--exitBottomActive",
10439 "Right": "Polaris-Sheet__Right",
10440 "enterRight": "Polaris-Sheet--enterRight",
10441 "enterRightActive": "Polaris-Sheet--enterRightActive",
10442 "exitRight": "Polaris-Sheet--exitRight",
10443 "exitRightActive": "Polaris-Sheet--exitRightActive"
10444};
10445
10446var BOTTOM_CLASS_NAMES = {
10447 enter: classNames(styles$T.Bottom, styles$T.enterBottom),
10448 enterActive: classNames(styles$T.Bottom, styles$T.enterBottomActive),
10449 exit: classNames(styles$T.Bottom, styles$T.exitBottom),
10450 exitActive: classNames(styles$T.Bottom, styles$T.exitBottomActive)
10451};
10452var RIGHT_CLASS_NAMES = {
10453 enter: classNames(styles$T.Right, styles$T.enterRight),
10454 enterActive: classNames(styles$T.Right, styles$T.enterRightActive),
10455 exit: classNames(styles$T.Right, styles$T.exitRight),
10456 exitActive: classNames(styles$T.Right, styles$T.exitRightActive)
10457};
10458function Sheet(_ref) {
10459 var children = _ref.children,
10460 open = _ref.open,
10461 onClose = _ref.onClose,
10462 onEntered = _ref.onEntered,
10463 onExit = _ref.onExit;
10464
10465 var _useMediaQuery = useMediaQuery(),
10466 isNavigationCollapsed = _useMediaQuery.isNavigationCollapsed;
10467
10468 var container = React.useRef(null);
10469 var findDOMNode = React.useCallback(function () {
10470 return container.current;
10471 }, []);
10472 return React__default.createElement(Portal, {
10473 idPrefix: "sheet"
10474 }, React__default.createElement(reactTransitionGroup.CSSTransition, {
10475 findDOMNode: findDOMNode,
10476 classNames: isNavigationCollapsed ? BOTTOM_CLASS_NAMES : RIGHT_CLASS_NAMES,
10477 timeout: Duration.Slow,
10478 in: open,
10479 mountOnEnter: true,
10480 unmountOnExit: true,
10481 onEntered: onEntered,
10482 onExit: onExit
10483 }, React__default.createElement("div", Object.assign({
10484 className: styles$T.Container
10485 }, layer.props, overlay.props, {
10486 ref: container
10487 }), React__default.createElement(TrapFocus, {
10488 trapping: open
10489 }, React__default.createElement("div", {
10490 role: "dialog",
10491 tabIndex: -1,
10492 className: styles$T.Sheet
10493 }, children)))), React__default.createElement(KeypressListener, {
10494 keyCode: exports.Key.Escape,
10495 handler: onClose
10496 }), open && React__default.createElement(Backdrop, {
10497 transparent: true,
10498 onClick: onClose
10499 }));
10500}
10501
10502var styles$U = {
10503 "Item": "Polaris-Filters-ConnectedFilterControl__Item",
10504 "Item-focused": "Polaris-Filters-ConnectedFilterControl__Item--focused",
10505 "ProxyButtonContainer": "Polaris-Filters-ConnectedFilterControl__ProxyButtonContainer",
10506 "ConnectedFilterControl": "Polaris-Filters-ConnectedFilterControl",
10507 "CenterContainer": "Polaris-Filters-ConnectedFilterControl__CenterContainer",
10508 "right": "Polaris-Filters-ConnectedFilterControl--right",
10509 "RightContainer": "Polaris-Filters-ConnectedFilterControl__RightContainer",
10510 "MoreFiltersButtonContainer": "Polaris-Filters-ConnectedFilterControl__MoreFiltersButtonContainer",
10511 "Wrapper": "Polaris-Filters-ConnectedFilterControl__Wrapper",
10512 "AuxiliaryContainer": "Polaris-Filters-ConnectedFilterControl__AuxiliaryContainer"
10513};
10514
10515var Item$4 =
10516/*#__PURE__*/
10517function (_React$PureComponent) {
10518 _inherits(Item, _React$PureComponent);
10519
10520 function Item() {
10521 var _this;
10522
10523 _classCallCheck(this, Item);
10524
10525 _this = _possibleConstructorReturn(this, _getPrototypeOf(Item).apply(this, arguments));
10526 _this.state = {
10527 focused: false
10528 };
10529
10530 _this.handleBlur = function () {
10531 _this.setState({
10532 focused: false
10533 });
10534 };
10535
10536 _this.handleFocus = function () {
10537 _this.setState({
10538 focused: true
10539 });
10540 };
10541
10542 return _this;
10543 }
10544
10545 _createClass(Item, [{
10546 key: "render",
10547 value: function render() {
10548 var focused = this.state.focused;
10549 var children = this.props.children;
10550 var className = classNames(styles$U.Item, focused && styles$U['Item-focused']);
10551 return React__default.createElement("div", {
10552 onBlur: this.handleBlur,
10553 onFocus: this.handleFocus,
10554 className: className
10555 }, children);
10556 }
10557 }]);
10558
10559 return Item;
10560}(React__default.PureComponent);
10561
10562var FILTER_FIELD_MIN_WIDTH = 150;
10563var ConnectedFilterControl =
10564/*#__PURE__*/
10565function (_React$Component) {
10566 _inherits(ConnectedFilterControl, _React$Component);
10567
10568 function ConnectedFilterControl() {
10569 var _this;
10570
10571 _classCallCheck(this, ConnectedFilterControl);
10572
10573 _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectedFilterControl).apply(this, arguments));
10574 _this.state = {
10575 availableWidth: 0,
10576 proxyButtonsWidth: {}
10577 };
10578 _this.container = React__default.createRef();
10579 _this.proxyButtonContainer = React__default.createRef();
10580 _this.moreFiltersButtonContainer = React__default.createRef();
10581 _this.handleResize = debounce(function () {
10582 _this.measureProxyButtons();
10583
10584 _this.measureAvailableWidth();
10585 }, 40, {
10586 leading: true,
10587 trailing: true,
10588 maxWait: 40
10589 });
10590 return _this;
10591 }
10592
10593 _createClass(ConnectedFilterControl, [{
10594 key: "componentDidMount",
10595 value: function componentDidMount() {
10596 this.handleResize();
10597 }
10598 }, {
10599 key: "render",
10600 value: function render() {
10601 var _this2 = this;
10602
10603 var _this$props = this.props,
10604 children = _this$props.children,
10605 rightPopoverableActions = _this$props.rightPopoverableActions,
10606 rightAction = _this$props.rightAction,
10607 auxiliary = _this$props.auxiliary;
10608 var className = classNames(styles$U.ConnectedFilterControl, rightPopoverableActions && styles$U.right);
10609 var rightMarkup = rightPopoverableActions ? React__default.createElement("div", {
10610 className: styles$U.RightContainer
10611 }, this.popoverFrom(this.getActionsToRender(rightPopoverableActions))) : null;
10612 var rightActionMarkup = rightAction ? React__default.createElement("div", {
10613 ref: this.moreFiltersButtonContainer,
10614 className: styles$U.MoreFiltersButtonContainer
10615 }, React__default.createElement(Item$4, null, rightAction)) : null;
10616 var proxyButtonMarkup = rightPopoverableActions ? React__default.createElement("div", {
10617 className: styles$U.ProxyButtonContainer,
10618 ref: this.proxyButtonContainer,
10619 "aria-hidden": true
10620 }, rightPopoverableActions.map(function (action) {
10621 return React__default.createElement("div", {
10622 key: action.key,
10623 "data-key": action.key
10624 }, _this2.activatorButtonFrom(action));
10625 })) : null;
10626 var auxMarkup = auxiliary ? React__default.createElement("div", {
10627 className: styles$U.AuxiliaryContainer
10628 }, auxiliary) : null;
10629 return React__default.createElement(React__default.Fragment, null, proxyButtonMarkup, React__default.createElement("div", {
10630 className: styles$U.Wrapper
10631 }, React__default.createElement("div", {
10632 className: className,
10633 ref: this.container
10634 }, React__default.createElement("div", {
10635 className: styles$U.CenterContainer
10636 }, React__default.createElement(Item$4, null, children)), rightMarkup, rightActionMarkup, React__default.createElement(EventListener, {
10637 event: "resize",
10638 handler: this.handleResize
10639 })), auxMarkup));
10640 }
10641 }, {
10642 key: "measureProxyButtons",
10643 value: function measureProxyButtons() {
10644 if (this.proxyButtonContainer.current) {
10645 var proxyButtonsWidth = {}; // this number is magical, but tweaking it solved the problem of items overlapping
10646
10647 var tolerance = 52;
10648
10649 if (this.proxyButtonContainer.current) {
10650 Array.from(this.proxyButtonContainer.current.children).forEach(function (element) {
10651 var buttonWidth = element.getBoundingClientRect().width + tolerance;
10652 var buttonKey = element.dataset.key;
10653
10654 if (buttonKey) {
10655 proxyButtonsWidth[buttonKey] = buttonWidth;
10656 }
10657 });
10658 }
10659
10660 this.setState({
10661 proxyButtonsWidth
10662 });
10663 }
10664 }
10665 }, {
10666 key: "measureAvailableWidth",
10667 value: function measureAvailableWidth() {
10668 if (this.container.current && this.moreFiltersButtonContainer.current) {
10669 var containerWidth = this.container.current.getBoundingClientRect().width;
10670 var moreFiltersButtonWidth = this.moreFiltersButtonContainer.current.getBoundingClientRect().width;
10671 var filtersActionWidth = 0;
10672 var availableWidth = containerWidth - FILTER_FIELD_MIN_WIDTH - moreFiltersButtonWidth - filtersActionWidth;
10673 this.setState({
10674 availableWidth
10675 });
10676 }
10677 }
10678 }, {
10679 key: "getActionsToRender",
10680 value: function getActionsToRender(actions) {
10681 var remainingWidth = this.state.availableWidth;
10682 var actionsToReturn = [];
10683
10684 for (var i = 0; remainingWidth > 0 && i < actions.length; i++) {
10685 var action = actions[i];
10686 var actionWidth = this.state.proxyButtonsWidth[action.key];
10687
10688 if (actionWidth <= remainingWidth) {
10689 actionsToReturn.push(action);
10690 remainingWidth -= actionWidth;
10691 }
10692 }
10693
10694 return actionsToReturn;
10695 }
10696 }, {
10697 key: "activatorButtonFrom",
10698 value: function activatorButtonFrom(action) {
10699 return React__default.createElement(Button, {
10700 onClick: action.onAction,
10701 disclosure: true,
10702 disabled: this.props.disabled || action.disabled,
10703 id: "Activator-".concat(action.key)
10704 }, action.content);
10705 }
10706 }, {
10707 key: "popoverFrom",
10708 value: function popoverFrom(actions) {
10709 var _this3 = this;
10710
10711 return actions.map(function (action) {
10712 return React__default.createElement(Item$4, {
10713 key: action.key
10714 }, React__default.createElement(Popover, {
10715 active: action.popoverOpen,
10716 activator: _this3.activatorButtonFrom(action),
10717 onClose: action.onAction,
10718 preferredAlignment: "left",
10719 sectioned: true
10720 }, action.popoverContent));
10721 });
10722 }
10723 }]);
10724
10725 return ConnectedFilterControl;
10726}(React__default.Component);
10727
10728var styles$V = {
10729 "Filters": "Polaris-Filters",
10730 "FiltersContainer": "Polaris-Filters__FiltersContainer",
10731 "FiltersContainerHeader": "Polaris-Filters__FiltersContainerHeader",
10732 "FiltersDesktopContainerContent": "Polaris-Filters__FiltersDesktopContainerContent",
10733 "FiltersMobileContainerContent": "Polaris-Filters__FiltersMobileContainerContent",
10734 "FiltersContainerFooter": "Polaris-Filters__FiltersContainerFooter",
10735 "FiltersMobileContainerFooter": "Polaris-Filters__FiltersMobileContainerFooter",
10736 "EmptyFooterState": "Polaris-Filters__EmptyFooterState",
10737 "FilterTriggerContainer": "Polaris-Filters__FilterTriggerContainer",
10738 "FilterTrigger": "Polaris-Filters__FilterTrigger",
10739 "FilterTriggerTitle": "Polaris-Filters__FilterTriggerTitle",
10740 "AppliedFilterBadgeContainer": "Polaris-Filters__AppliedFilterBadgeContainer",
10741 "open": "Polaris-Filters--open",
10742 "FilterTriggerLabelContainer": "Polaris-Filters__FilterTriggerLabelContainer",
10743 "first": "Polaris-Filters--first",
10744 "last": "Polaris-Filters--last",
10745 "FilterNodeContainer": "Polaris-Filters__FilterNodeContainer",
10746 "SearchIcon": "Polaris-Filters__SearchIcon",
10747 "Backdrop": "Polaris-Filters__Backdrop",
10748 "HelpText": "Polaris-Filters__HelpText",
10749 "TagsContainer": "Polaris-Filters__TagsContainer"
10750};
10751
10752var Suffix;
10753
10754(function (Suffix) {
10755 Suffix["Filter"] = "Filter";
10756 Suffix["Shortcut"] = "Shortcut";
10757})(Suffix || (Suffix = {}));
10758
10759var Filters =
10760/*#__PURE__*/
10761function (_React$Component) {
10762 _inherits(Filters, _React$Component);
10763
10764 function Filters() {
10765 var _this;
10766
10767 _classCallCheck(this, Filters);
10768
10769 _this = _possibleConstructorReturn(this, _getPrototypeOf(Filters).apply(this, arguments));
10770 _this.state = {
10771 open: false,
10772 readyForFocus: false
10773 };
10774 _this.moreFiltersButtonContainer = React.createRef();
10775 _this.focusNode = React.createRef();
10776
10777 _this.closeFilters = function () {
10778 _this.setState({
10779 open: false
10780 }, function () {
10781 if (_this.moreFiltersButtonContainer.current) {
10782 focus.focusFirstFocusableNode(_this.moreFiltersButtonContainer.current, false);
10783 }
10784 });
10785 };
10786
10787 _this.toggleFilters = function () {
10788 if (_this.state.open === true) {
10789 _this.closeFilters();
10790 } else {
10791 _this.openFilters();
10792 }
10793 };
10794
10795 _this.setReadyForFocus = function (newState) {
10796 return function () {
10797 _this.setState({
10798 readyForFocus: newState
10799 });
10800 };
10801 };
10802
10803 return _this;
10804 }
10805
10806 _createClass(Filters, [{
10807 key: "render",
10808 value: function render() {
10809 var _this2 = this;
10810
10811 var _this$props = this.props,
10812 filters = _this$props.filters,
10813 queryValue = _this$props.queryValue,
10814 onQueryBlur = _this$props.onQueryBlur,
10815 onQueryChange = _this$props.onQueryChange,
10816 onQueryFocus = _this$props.onQueryFocus,
10817 focused = _this$props.focused,
10818 onClearAll = _this$props.onClearAll,
10819 appliedFilters = _this$props.appliedFilters,
10820 _this$props$polaris = _this$props.polaris,
10821 intl = _this$props$polaris.intl,
10822 isNavigationCollapsed = _this$props$polaris.mediaQuery.isNavigationCollapsed,
10823 onQueryClear = _this$props.onQueryClear,
10824 queryPlaceholder = _this$props.queryPlaceholder,
10825 children = _this$props.children,
10826 _this$props$disabled = _this$props.disabled,
10827 disabled = _this$props$disabled === void 0 ? false : _this$props$disabled,
10828 helpText = _this$props.helpText;
10829 var resourceName = this.context.resourceName;
10830 var _this$state = this.state,
10831 open = _this$state.open,
10832 readyForFocus = _this$state.readyForFocus;
10833 var backdropMarkup = open ? React__default.createElement(React__default.Fragment, null, React__default.createElement(ScrollLock, null), React__default.createElement("div", {
10834 className: styles$V.Backdrop,
10835 onClick: this.closeFilters
10836 })) : null;
10837 var filtersContentMarkup = filters.map(function (filter, index) {
10838 var filterIsOpen = _this2.state["".concat(filter.key).concat(Suffix.Filter)] === true;
10839 var icon = filterIsOpen ? polarisIcons.ChevronUpMinor : polarisIcons.ChevronDownMinor;
10840 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);
10841
10842 var appliedFilterContent = _this2.getAppliedFilterContent(filter.key);
10843
10844 var appliedFilterBadgeMarkup = appliedFilterContent ? React__default.createElement("div", {
10845 className: styles$V.AppliedFilterBadgeContainer
10846 }, React__default.createElement(Badge, {
10847 size: "small",
10848 status: "new"
10849 }, appliedFilterContent)) : null;
10850 var collapsibleID = "".concat(filter.key, "Collapsible");
10851 return React__default.createElement("div", {
10852 key: filter.key,
10853 className: className
10854 }, React__default.createElement("button", {
10855 onClick: function onClick() {
10856 return _this2.toggleFilter(filter.key);
10857 },
10858 className: styles$V.FilterTrigger,
10859 id: "".concat(filter.key, "ToggleButton"),
10860 type: "button",
10861 "aria-controls": collapsibleID,
10862 "aria-expanded": filterIsOpen
10863 }, React__default.createElement("div", {
10864 className: styles$V.FilterTriggerLabelContainer
10865 }, React__default.createElement("h2", {
10866 className: styles$V.FilterTriggerTitle
10867 }, React__default.createElement(TextStyle, {
10868 variation: _this2.props.disabled || filter.disabled ? VariationValue.Subdued : undefined
10869 }, filter.label)), React__default.createElement("span", {
10870 className: styles$V.FilterTriggerIcon
10871 }, React__default.createElement(Icon, {
10872 source: icon,
10873 color: "inkLightest"
10874 }))), appliedFilterBadgeMarkup), React__default.createElement(Collapsible, {
10875 id: collapsibleID,
10876 open: filterIsOpen
10877 }, React__default.createElement("div", {
10878 className: styles$V.FilterNodeContainer
10879 }, React__default.createElement(Focus, {
10880 disabled: !filterIsOpen || !readyForFocus || !open,
10881 root: _this2.focusNode.current
10882 }, _this2.generateFilterMarkup(filter)))));
10883 });
10884 var rightActionMarkup = React__default.createElement("div", {
10885 ref: this.moreFiltersButtonContainer
10886 }, React__default.createElement(Button, {
10887 onClick: this.toggleFilters,
10888 disabled: disabled
10889 }, intl.translate('Polaris.Filters.moreFilters')));
10890 var filterResourceName = resourceName || {
10891 singular: intl.translate('Polaris.ResourceList.defaultItemSingular'),
10892 plural: intl.translate('Polaris.ResourceList.defaultItemPlural')
10893 };
10894 var filtersControlMarkup = React__default.createElement(ConnectedFilterControl, {
10895 rightPopoverableActions: this.transformFilters(filters),
10896 rightAction: rightActionMarkup,
10897 auxiliary: children,
10898 disabled: disabled
10899 }, React__default.createElement(TextField, {
10900 placeholder: queryPlaceholder || intl.translate('Polaris.Filters.filter', {
10901 resourceName: filterResourceName.plural
10902 }),
10903 onChange: onQueryChange,
10904 onBlur: onQueryBlur,
10905 onFocus: onQueryFocus,
10906 value: queryValue,
10907 focused: focused,
10908 label: queryPlaceholder || intl.translate('Polaris.Filters.filter', {
10909 resourceName: filterResourceName.plural
10910 }),
10911 labelHidden: true,
10912 prefix: React__default.createElement("span", {
10913 className: styles$V.SearchIcon
10914 }, React__default.createElement(Icon, {
10915 source: polarisIcons.SearchMinor
10916 })),
10917 clearButton: true,
10918 onClearButtonClick: onQueryClear,
10919 disabled: disabled
10920 }));
10921 var filtersDesktopHeaderMarkup = React__default.createElement("div", {
10922 className: styles$V.FiltersContainerHeader
10923 }, React__default.createElement(DisplayText, {
10924 size: "small"
10925 }, intl.translate('Polaris.Filters.moreFilters')), React__default.createElement(Button, {
10926 icon: polarisIcons.CancelSmallMinor,
10927 plain: true,
10928 accessibilityLabel: intl.translate('Polaris.Filters.cancel'),
10929 onClick: this.closeFilters
10930 }));
10931 var filtersMobileHeaderMarkup = React__default.createElement("div", {
10932 className: styles$V.FiltersContainerHeader
10933 }, React__default.createElement(Button, {
10934 icon: polarisIcons.CancelSmallMinor,
10935 plain: true,
10936 accessibilityLabel: intl.translate('Polaris.Filters.cancel'),
10937 onClick: this.closeFilters
10938 }), React__default.createElement(DisplayText, {
10939 size: "small"
10940 }, intl.translate('Polaris.Filters.moreFilters')), React__default.createElement(Button, {
10941 onClick: this.closeFilters,
10942 primary: true
10943 }, intl.translate('Polaris.Filters.done')));
10944 var filtersDesktopFooterMarkup = React__default.createElement("div", {
10945 className: styles$V.FiltersContainerFooter
10946 }, React__default.createElement(Button, {
10947 onClick: onClearAll,
10948 disabled: !this.hasAppliedFilters
10949 }, intl.translate('Polaris.Filters.clearAllFilters')), React__default.createElement(Button, {
10950 onClick: this.closeFilters,
10951 primary: true
10952 }, intl.translate('Polaris.Filters.done')));
10953 var filtersMobileFooterMarkup = React__default.createElement("div", {
10954 className: styles$V.FiltersMobileContainerFooter
10955 }, this.hasAppliedFilters ? React__default.createElement(Button, {
10956 onClick: onClearAll,
10957 fullWidth: true
10958 }, intl.translate('Polaris.Filters.clearAllFilters')) : React__default.createElement("div", {
10959 className: styles$V.EmptyFooterState
10960 }, React__default.createElement(TextStyle, {
10961 variation: "subdued"
10962 }, React__default.createElement("p", null, intl.translate('Polaris.Filters.noFiltersApplied')))));
10963 var tagsMarkup = appliedFilters && appliedFilters.length ? React__default.createElement("div", {
10964 className: styles$V.TagsContainer
10965 }, appliedFilters.map(function (filter) {
10966 return React__default.createElement(Tag, {
10967 key: filter.key,
10968 onRemove: function onRemove() {
10969 filter.onRemove(filter.key);
10970 },
10971 disabled: disabled
10972 }, filter.label);
10973 })) : null;
10974 var filtersContainerMarkup = isNavigationCollapsed ? React__default.createElement(Sheet, {
10975 open: open,
10976 onClose: this.closeFilters,
10977 onEntered: this.setReadyForFocus(true),
10978 onExit: this.setReadyForFocus(false)
10979 }, filtersMobileHeaderMarkup, React__default.createElement(Scrollable, {
10980 className: styles$V.FiltersMobileContainerContent,
10981 shadow: true
10982 }, filtersContentMarkup, filtersMobileFooterMarkup)) : React__default.createElement(Sheet, {
10983 open: open,
10984 onClose: this.closeFilters,
10985 onEntered: this.setReadyForFocus(true),
10986 onExit: this.setReadyForFocus(false)
10987 }, React__default.createElement("div", {
10988 className: styles$V.FiltersContainer
10989 }, filtersDesktopHeaderMarkup, React__default.createElement(Scrollable, {
10990 className: styles$V.FiltersDesktopContainerContent,
10991 shadow: true
10992 }, filtersContentMarkup), filtersDesktopFooterMarkup));
10993 var helpTextMarkup = helpText ? React__default.createElement("div", {
10994 id: "FiltersHelpText",
10995 className: styles$V.HelpText
10996 }, React__default.createElement(TextStyle, {
10997 variation: "subdued"
10998 }, helpText)) : null;
10999 return React__default.createElement("div", {
11000 className: styles$V.Filters
11001 }, filtersControlMarkup, filtersContainerMarkup, tagsMarkup, helpTextMarkup, backdropMarkup, React__default.createElement(KeypressListener, {
11002 keyCode: exports.Key.Escape,
11003 handler: this.closeFilters
11004 }));
11005 }
11006 }, {
11007 key: "getAppliedFilterContent",
11008 value: function getAppliedFilterContent(key) {
11009 var appliedFilters = this.props.appliedFilters;
11010
11011 if (!appliedFilters) {
11012 return undefined;
11013 }
11014
11015 var filter = appliedFilters.find(function (filter) {
11016 return filter.key === key;
11017 });
11018 return filter == null ? undefined : filter.label;
11019 }
11020 }, {
11021 key: "getAppliedFilterRemoveHandler",
11022 value: function getAppliedFilterRemoveHandler(key) {
11023 var appliedFilters = this.props.appliedFilters;
11024
11025 if (!appliedFilters) {
11026 return undefined;
11027 }
11028
11029 var filter = appliedFilters.find(function (filter) {
11030 return filter.key === key;
11031 });
11032 return filter == null ? undefined : filter.onRemove;
11033 }
11034 }, {
11035 key: "openFilters",
11036 value: function openFilters() {
11037 this.setState({
11038 open: true
11039 });
11040 }
11041 }, {
11042 key: "openFilter",
11043 value: function openFilter(key) {
11044 this.setState({
11045 ["".concat(key).concat(Suffix.Filter)]: true
11046 });
11047 }
11048 }, {
11049 key: "closeFilter",
11050 value: function closeFilter(key) {
11051 this.setState({
11052 ["".concat(key).concat(Suffix.Filter)]: false
11053 });
11054 }
11055 }, {
11056 key: "toggleFilter",
11057 value: function toggleFilter(key) {
11058 if (this.state["".concat(key).concat(Suffix.Filter)] === true) {
11059 this.closeFilter(key);
11060 } else {
11061 this.openFilter(key);
11062 }
11063 }
11064 }, {
11065 key: "openFilterShortcut",
11066 value: function openFilterShortcut(key) {
11067 this.setState({
11068 ["".concat(key).concat(Suffix.Shortcut)]: true
11069 });
11070 }
11071 }, {
11072 key: "closeFilterShortcut",
11073 value: function closeFilterShortcut(key) {
11074 this.setState({
11075 ["".concat(key).concat(Suffix.Shortcut)]: false
11076 });
11077 }
11078 }, {
11079 key: "toggleFilterShortcut",
11080 value: function toggleFilterShortcut(key) {
11081 if (this.state["".concat(key).concat(Suffix.Shortcut)] === true) {
11082 this.closeFilterShortcut(key);
11083 } else {
11084 this.openFilterShortcut(key);
11085 }
11086 }
11087 }, {
11088 key: "transformFilters",
11089 value: function transformFilters(filters) {
11090 var _this3 = this;
11091
11092 var transformedActions = [];
11093 getShortcutFilters(filters).forEach(function (filter) {
11094 var key = filter.key,
11095 label = filter.label,
11096 disabled = filter.disabled;
11097 transformedActions.push({
11098 popoverContent: _this3.generateFilterMarkup(filter),
11099 popoverOpen: _this3.state["".concat(key).concat(Suffix.Shortcut)],
11100 key,
11101 content: label,
11102 disabled,
11103 onAction: function onAction() {
11104 return _this3.toggleFilterShortcut(key);
11105 }
11106 });
11107 });
11108 return transformedActions;
11109 }
11110 }, {
11111 key: "generateFilterMarkup",
11112 value: function generateFilterMarkup(filter) {
11113 var intl = this.props.polaris.intl;
11114 var removeCallback = this.getAppliedFilterRemoveHandler(filter.key);
11115 var removeHandler = removeCallback == null ? undefined : function () {
11116 removeCallback(filter.key);
11117 };
11118 return React__default.createElement("div", {
11119 ref: this.focusNode
11120 }, React__default.createElement(Stack, {
11121 vertical: true,
11122 spacing: "tight"
11123 }, filter.filter, React__default.createElement(Button, {
11124 plain: true,
11125 disabled: removeHandler == null,
11126 onClick: removeHandler,
11127 accessibilityLabel: intl.translate('Polaris.Filters.clearLabel', {
11128 filterName: filter.label
11129 })
11130 }, intl.translate('Polaris.Filters.clear'))));
11131 }
11132 }, {
11133 key: "hasAppliedFilters",
11134 get: function get() {
11135 var _this$props2 = this.props,
11136 appliedFilters = _this$props2.appliedFilters,
11137 queryValue = _this$props2.queryValue;
11138 var filtersApplied = Boolean(appliedFilters && appliedFilters.length > 0);
11139 var queryApplied = Boolean(queryValue && queryValue !== '');
11140 return filtersApplied || queryApplied;
11141 }
11142 }]);
11143
11144 return Filters;
11145}(React__default.Component);
11146
11147Filters.contextType = ResourceListContext;
11148
11149function getShortcutFilters(filters) {
11150 return filters.filter(function (filter) {
11151 return filter.shortcut === true;
11152 });
11153} // Use named export once withAppProvider is refactored away
11154// eslint-disable-next-line import/no-default-export
11155
11156
11157var Filters$1 = withAppProvider()(Filters);
11158
11159var styles$W = {
11160 "FooterHelp": "Polaris-FooterHelp",
11161 "Content": "Polaris-FooterHelp__Content",
11162 "Icon": "Polaris-FooterHelp__Icon",
11163 "Text": "Polaris-FooterHelp__Text"
11164};
11165
11166function FooterHelp(_ref) {
11167 var children = _ref.children;
11168 return React__default.createElement("div", {
11169 className: styles$W.FooterHelp
11170 }, React__default.createElement("div", {
11171 className: styles$W.Content
11172 }, React__default.createElement("div", {
11173 className: styles$W.Icon
11174 }, React__default.createElement(Icon, {
11175 source: polarisIcons.QuestionMarkMajorTwotone,
11176 color: "teal",
11177 backdrop: true
11178 })), React__default.createElement("div", {
11179 className: styles$W.Text
11180 }, children)));
11181}
11182
11183function Form(_ref) {
11184 var acceptCharset = _ref.acceptCharset,
11185 action = _ref.action,
11186 autoComplete = _ref.autoComplete,
11187 children = _ref.children,
11188 encType = _ref.encType,
11189 _ref$implicitSubmit = _ref.implicitSubmit,
11190 implicitSubmit = _ref$implicitSubmit === void 0 ? true : _ref$implicitSubmit,
11191 _ref$method = _ref.method,
11192 method = _ref$method === void 0 ? 'post' : _ref$method,
11193 name = _ref.name,
11194 noValidate = _ref.noValidate,
11195 _ref$preventDefault = _ref.preventDefault,
11196 preventDefault = _ref$preventDefault === void 0 ? true : _ref$preventDefault,
11197 target = _ref.target,
11198 onSubmit = _ref.onSubmit;
11199 var i18n = useI18n();
11200 var handleSubmit = React.useCallback(function (event) {
11201 if (!preventDefault) {
11202 return;
11203 }
11204
11205 event.preventDefault();
11206 onSubmit(event);
11207 }, [onSubmit, preventDefault]);
11208 var autoCompleteInputs = normalizeAutoComplete$1(autoComplete);
11209 var submitMarkup = implicitSubmit ? React__default.createElement(VisuallyHidden, null, React__default.createElement("button", {
11210 type: "submit",
11211 "aria-hidden": "true",
11212 tabIndex: -1
11213 }, i18n.translate('Polaris.Common.submit'))) : null;
11214 return React__default.createElement("form", {
11215 acceptCharset: acceptCharset,
11216 action: action,
11217 autoComplete: autoCompleteInputs,
11218 encType: encType,
11219 method: method,
11220 name: name,
11221 noValidate: noValidate,
11222 target: target,
11223 onSubmit: handleSubmit
11224 }, children, submitMarkup);
11225}
11226
11227function normalizeAutoComplete$1(autoComplete) {
11228 if (autoComplete == null) {
11229 return autoComplete;
11230 }
11231
11232 return autoComplete ? 'on' : 'off';
11233}
11234
11235var styles$X = {
11236 "FormLayout": "Polaris-FormLayout",
11237 "Title": "Polaris-FormLayout__Title",
11238 "Items": "Polaris-FormLayout__Items",
11239 "HelpText": "Polaris-FormLayout__HelpText",
11240 "Item": "Polaris-FormLayout__Item",
11241 "grouped": "Polaris-FormLayout--grouped",
11242 "condensed": "Polaris-FormLayout--condensed"
11243};
11244
11245function Item$5(props) {
11246 return React__default.createElement("div", {
11247 className: styles$X.Item
11248 }, props.children);
11249}
11250
11251function Group(_ref) {
11252 var children = _ref.children,
11253 condensed = _ref.condensed,
11254 title = _ref.title,
11255 helpText = _ref.helpText;
11256 var className = classNames(condensed ? styles$X.condensed : styles$X.grouped);
11257 var id = useUniqueId('FormLayoutGroup');
11258 var helpTextElement = null;
11259 var helpTextID;
11260 var titleElement = null;
11261 var titleID;
11262
11263 if (helpText) {
11264 helpTextID = "".concat(id, "HelpText");
11265 helpTextElement = React__default.createElement("div", {
11266 id: helpTextID,
11267 className: styles$X.HelpText
11268 }, helpText);
11269 }
11270
11271 if (title) {
11272 titleID = "".concat(id, "Title");
11273 titleElement = React__default.createElement("div", {
11274 id: titleID,
11275 className: styles$X.Title
11276 }, title);
11277 }
11278
11279 var itemsMarkup = React__default.Children.map(children, function (child) {
11280 return wrapWithComponent(child, Item$5, {});
11281 });
11282 return React__default.createElement("div", {
11283 role: "group",
11284 className: className,
11285 "aria-labelledby": titleID,
11286 "aria-describedby": helpTextID
11287 }, titleElement, React__default.createElement("div", {
11288 className: styles$X.Items
11289 }, itemsMarkup), helpTextElement);
11290}
11291
11292var FormLayout =
11293/*#__PURE__*/
11294function (_React$PureComponent) {
11295 _inherits(FormLayout, _React$PureComponent);
11296
11297 function FormLayout() {
11298 _classCallCheck(this, FormLayout);
11299
11300 return _possibleConstructorReturn(this, _getPrototypeOf(FormLayout).apply(this, arguments));
11301 }
11302
11303 _createClass(FormLayout, [{
11304 key: "render",
11305 value: function render() {
11306 var children = this.props.children;
11307 return React__default.createElement("div", {
11308 className: styles$X.FormLayout
11309 }, React__default.Children.map(children, wrapChildren));
11310 }
11311 }]);
11312
11313 return FormLayout;
11314}(React__default.PureComponent);
11315FormLayout.Group = Group;
11316
11317function wrapChildren(child, index) {
11318 if (isElementOfType(child, Group)) {
11319 return child;
11320 }
11321
11322 var props = {
11323 key: index
11324 };
11325 return wrapWithComponent(child, Item$5, props);
11326}
11327
11328function setRootProperty(name, value, node) {
11329 if (document == null) {
11330 return;
11331 }
11332
11333 var styleNode = node && node instanceof HTMLElement ? node : document.documentElement;
11334 styleNode && styleNode.style.setProperty(name, value);
11335}
11336
11337var styles$Y = {
11338 "Toast": "Polaris-Frame-Toast",
11339 "Action": "Polaris-Frame-Toast__Action",
11340 "error": "Polaris-Frame-Toast--error",
11341 "CloseButton": "Polaris-Frame-Toast__CloseButton"
11342};
11343
11344var DEFAULT_TOAST_DURATION = 5000;
11345var DEFAULT_TOAST_DURATION_WITH_ACTION = 10000;
11346function Toast(_ref) {
11347 var content = _ref.content,
11348 onDismiss = _ref.onDismiss,
11349 duration = _ref.duration,
11350 error = _ref.error,
11351 action = _ref.action;
11352 React.useEffect(function () {
11353 var timeoutDuration = duration || DEFAULT_TOAST_DURATION;
11354
11355 if (action && !duration) {
11356 timeoutDuration = DEFAULT_TOAST_DURATION_WITH_ACTION;
11357 } else if (action && duration && duration < DEFAULT_TOAST_DURATION_WITH_ACTION) {
11358 // eslint-disable-next-line no-console
11359 console.log('Toast with action should persist for at least 10,000 milliseconds to give the merchant enough time to act on it.');
11360 }
11361
11362 var timer = setTimeout(onDismiss, timeoutDuration);
11363 return function () {
11364 clearTimeout(timer);
11365 };
11366 }, [action, duration, onDismiss]);
11367 var dismissMarkup = React__default.createElement("button", {
11368 type: "button",
11369 className: styles$Y.CloseButton,
11370 onClick: onDismiss
11371 }, React__default.createElement(Icon, {
11372 source: polarisIcons.MobileCancelMajorMonotone
11373 }));
11374 var actionMarkup = action ? React__default.createElement("div", {
11375 className: styles$Y.Action
11376 }, React__default.createElement(Button, {
11377 plain: true,
11378 monochrome: true,
11379 onClick: action.onAction
11380 }, action.content)) : null;
11381 var className = classNames(styles$Y.Toast, error && styles$Y.error);
11382 return React__default.createElement("div", {
11383 className: className
11384 }, React__default.createElement(KeypressListener, {
11385 keyCode: exports.Key.Escape,
11386 handler: onDismiss
11387 }), content, actionMarkup, dismissMarkup);
11388}
11389
11390/**
11391 * A replacement for React.useCallback that'll allow for custom and deep compares.
11392 * @see {@link https://reactjs.org/docs/hooks-reference.html#usecallback}
11393 * @param callback Accepts a callback that's forwarded to React.useCallback
11394 * @param dependencies A dependency array similar to React.useCallback however it utilizes a deep compare
11395 * @param customCompare Opportunity to provide a custom compare function
11396 * @returns A memoized callback
11397 * @example
11398 * const Child = memo(function Child({onClick}) {
11399 * console.log('Child has rendered.');
11400 * return <button onClick={onClick}>Click me</button>;
11401 * });
11402 *
11403 * function ComponentExample() {
11404 * const [timesClicked, setTimesClicked] = useState(0);
11405 *
11406 * const handleClick = useDeepCallback(() => {
11407 * setTimesClicked((timesClicked) => timesClicked + 1);
11408 * // New reference every render
11409 * }, [{}]);
11410 *
11411 * return (
11412 * <Fragment>
11413 * <div>Times clicked: {timesClicked}</div>
11414 * <Child onClick={handleClick} />
11415 * </Fragment>
11416 * );
11417 * }
11418 */
11419
11420function useDeepCallback(callback, dependencies, customCompare) {
11421 return React.useCallback(callback, useDeepCompareRef(dependencies, customCompare));
11422}
11423
11424var styles$Z = {
11425 "ToastManager": "Polaris-Frame-ToastManager",
11426 "ToastWrapper": "Polaris-Frame-ToastManager__ToastWrapper",
11427 "ToastWrapper-enter": "Polaris-Frame-ToastManager__ToastWrapper--enter",
11428 "ToastWrapper-exit": "Polaris-Frame-ToastManager__ToastWrapper--exit",
11429 "ToastWrapper-enter-done": "Polaris-Frame-ToastManager--toastWrapperEnterDone"
11430};
11431
11432var ToastManager = React.memo(function ToastManager(_ref) {
11433 var toastMessages = _ref.toastMessages;
11434 var toastNodes = [];
11435 var updateToasts = useDeepCallback(function () {
11436 var targetInPos = 0;
11437 toastMessages.forEach(function (_, index) {
11438 var currentToast = toastNodes[index];
11439 if (!currentToast.current) return;
11440 targetInPos += currentToast.current.clientHeight;
11441 currentToast.current.style.setProperty('--toast-translate-y-in', "-".concat(targetInPos, "px"));
11442 currentToast.current.style.setProperty('--toast-translate-y-out', "".concat(-targetInPos + 150, "px"));
11443 });
11444 }, [toastMessages, toastNodes]);
11445 useDeepEffect(function () {
11446 updateToasts();
11447 }, [toastMessages]);
11448 var toastsMarkup = toastMessages.map(function (toast, index) {
11449 var toastNode = React.createRef();
11450 toastNodes[index] = toastNode;
11451 return React__default.createElement(reactTransitionGroup.CSSTransition, {
11452 findDOMNode: findDOMNode(index),
11453 key: toast.id,
11454 timeout: {
11455 enter: 0,
11456 exit: 400
11457 },
11458 classNames: toastClasses
11459 }, React__default.createElement("div", {
11460 ref: toastNode
11461 }, React__default.createElement(Toast, toast)));
11462 });
11463 return React__default.createElement(Portal, {
11464 idPrefix: "toast-manager"
11465 }, React__default.createElement(EventListener, {
11466 event: "resize",
11467 handler: updateToasts
11468 }), React__default.createElement("div", {
11469 className: styles$Z.ToastManager,
11470 "aria-live": "polite"
11471 }, React__default.createElement(reactTransitionGroup.TransitionGroup, {
11472 component: null
11473 }, toastsMarkup)));
11474
11475 function findDOMNode(index) {
11476 return function () {
11477 return toastNodes[index].current;
11478 };
11479 }
11480});
11481var toastClasses = {
11482 enter: classNames(styles$Z.ToastWrapper, styles$Z['ToastWrapper-enter']),
11483 enterDone: classNames(styles$Z.ToastWrapper, styles$Z['ToastWrapper-enter-done']),
11484 exit: classNames(styles$Z.ToastWrapper, styles$Z['ToastWrapper-exit'])
11485};
11486
11487var styles$_ = {
11488 "Loading": "Polaris-Frame-Loading",
11489 "Level": "Polaris-Frame-Loading__Level"
11490};
11491
11492var INITIAL_STEP = 10;
11493var STUCK_THRESHOLD = 99;
11494var Loading =
11495/*#__PURE__*/
11496function (_React$Component) {
11497 _inherits(Loading, _React$Component);
11498
11499 function Loading() {
11500 var _this;
11501
11502 _classCallCheck(this, Loading);
11503
11504 _this = _possibleConstructorReturn(this, _getPrototypeOf(Loading).apply(this, arguments));
11505 _this.state = {
11506 progress: 0,
11507 step: INITIAL_STEP,
11508 animation: null
11509 };
11510 _this.ariaValuenow = debounce(function () {
11511 var progress = _this.state.progress;
11512 return Math.floor(progress / 10) * 10;
11513 }, 15);
11514 return _this;
11515 }
11516
11517 _createClass(Loading, [{
11518 key: "componentDidMount",
11519 value: function componentDidMount() {
11520 this.increment();
11521 }
11522 }, {
11523 key: "componentWillUnmount",
11524 value: function componentWillUnmount() {
11525 var animation = this.state.animation;
11526
11527 if (animation != null) {
11528 cancelAnimationFrame(animation);
11529 }
11530 }
11531 }, {
11532 key: "render",
11533 value: function render() {
11534 var progress = this.state.progress;
11535 var customStyles = {
11536 transform: "scaleX(".concat(Math.floor(progress) / 100, ")")
11537 };
11538 var ariaValuenow = this.ariaValuenow();
11539 return React__default.createElement("div", {
11540 className: styles$_.Loading
11541 }, React__default.createElement("div", {
11542 className: styles$_.Level,
11543 style: customStyles,
11544 "aria-valuenow": ariaValuenow,
11545 "aria-valuemin": 0,
11546 "aria-valuemax": 100,
11547 role: "progressbar"
11548 }));
11549 }
11550 }, {
11551 key: "increment",
11552 value: function increment() {
11553 var _this2 = this;
11554
11555 var _this$state = this.state,
11556 progress = _this$state.progress,
11557 step = _this$state.step;
11558
11559 if (progress >= STUCK_THRESHOLD) {
11560 return;
11561 }
11562
11563 var animation = requestAnimationFrame(function () {
11564 return _this2.increment();
11565 });
11566 this.setState({
11567 progress: Math.min(progress + step, 100),
11568 step: Math.pow(INITIAL_STEP, -(progress / 25)),
11569 animation
11570 });
11571 }
11572 }]);
11573
11574 return Loading;
11575}(React__default.Component);
11576
11577function isObject(value) {
11578 var type = typeof value;
11579 return value != null && (type === exports.TypeOf.Object || type === exports.TypeOf.Function);
11580}
11581
11582function pluckDeep(obj, key) {
11583 if (!obj) {
11584 return null;
11585 }
11586
11587 var keys = Object.keys(obj);
11588
11589 for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {
11590 var currKey = _keys[_i];
11591
11592 if (currKey === key) {
11593 return obj[key];
11594 }
11595
11596 if (isObject(obj[currKey])) {
11597 var plucked = pluckDeep(obj[currKey], key);
11598
11599 if (plucked) {
11600 return plucked;
11601 }
11602 }
11603 }
11604
11605 return null;
11606}
11607
11608function getWidth() {
11609 var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
11610 var defaultWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
11611 var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'width';
11612 var width = typeof value === 'number' ? value : pluckDeep(value, key);
11613 return width ? "".concat(width, "px") : "".concat(defaultWidth, "px");
11614}
11615
11616function generateRedirect(appBridge, url) {
11617 var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'APP';
11618 var external = arguments.length > 3 ? arguments[3] : undefined;
11619
11620 if (url == null) {
11621 return undefined;
11622 }
11623
11624 var redirect = actions.Redirect.create(appBridge);
11625 var payload = external === true ? {
11626 url,
11627 newContext: true
11628 } : url;
11629 return function () {
11630 redirect.dispatch(redirectAction(target, external), payload);
11631 };
11632}
11633
11634function redirectAction(target, external) {
11635 if (external === true) {
11636 return actions.Redirect.Action.REMOTE;
11637 }
11638
11639 return actions.Redirect.Action[target];
11640}
11641
11642function transformActions(appBridge, _ref) {
11643 var primaryAction = _ref.primaryAction,
11644 secondaryActions = _ref.secondaryActions,
11645 actionGroups = _ref.actionGroups;
11646 var primary = transformPrimaryAction(appBridge, primaryAction);
11647 var secondary = [].concat(_toConsumableArray(transformSecondaryActions(appBridge, secondaryActions)), _toConsumableArray(transformActionGroups(appBridge, actionGroups)));
11648 return {
11649 primary,
11650 secondary
11651 };
11652}
11653
11654function transformAction(appBridge, action) {
11655 var style = action.destructive === true ? actions.Button.Style.Danger : undefined;
11656 var button = actions.Button.create(appBridge, {
11657 label: action.content || '',
11658 disabled: action.disabled,
11659 style
11660 });
11661
11662 if (action.onAction) {
11663 button.subscribe(actions.Button.Action.CLICK, action.onAction);
11664 }
11665
11666 var redirect = generateRedirect(appBridge, action.url, action.target, action.external);
11667
11668 if (redirect != null) {
11669 button.subscribe(actions.Button.Action.CLICK, redirect);
11670 }
11671
11672 return button;
11673}
11674
11675function transformPrimaryAction(appBridge, primaryAction) {
11676 if (primaryAction == null) {
11677 return undefined;
11678 }
11679
11680 var primary = transformAction(appBridge, primaryAction);
11681 return primary;
11682}
11683
11684function transformSecondaryActions(appBridge) {
11685 var secondaryActions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
11686
11687 var secondary = _toConsumableArray(secondaryActions.map(function (secondaryAction) {
11688 return transformAction(appBridge, secondaryAction);
11689 }));
11690
11691 return secondary;
11692}
11693
11694function transformActionGroups(appBridge) {
11695 var actionGroups = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
11696
11697 var buttonGroups = _toConsumableArray(actionGroups.map(function (group) {
11698 var buttons = group.actions.map(function (groupAction) {
11699 return transformAction(appBridge, groupAction);
11700 });
11701 return actions.ButtonGroup.create(appBridge, {
11702 label: group.title,
11703 buttons
11704 });
11705 }));
11706
11707 return buttonGroups;
11708}
11709
11710function pickValueAndLength(obj, key) {
11711 var keyPaths = key.split('.');
11712 var value = obj;
11713 var _iteratorNormalCompletion = true;
11714 var _didIteratorError = false;
11715 var _iteratorError = undefined;
11716
11717 try {
11718 for (var _iterator = keyPaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
11719 var _key = _step.value;
11720
11721 if (!Object.prototype.hasOwnProperty.call(value, _key)) {
11722 return null;
11723 }
11724
11725 value = value[_key];
11726 }
11727 } catch (err) {
11728 _didIteratorError = true;
11729 _iteratorError = err;
11730 } finally {
11731 try {
11732 if (!_iteratorNormalCompletion && _iterator.return != null) {
11733 _iterator.return();
11734 }
11735 } finally {
11736 if (_didIteratorError) {
11737 throw _iteratorError;
11738 }
11739 }
11740 }
11741
11742 return {
11743 keyPaths,
11744 value
11745 };
11746}
11747
11748function pick(obj) {
11749 var _ref;
11750
11751 for (var _len = arguments.length, keyPaths = new Array(_len > 1 ? _len - 1 : 0), _key2 = 1; _key2 < _len; _key2++) {
11752 keyPaths[_key2 - 1] = arguments[_key2];
11753 }
11754
11755 var flattenedKeypaths = (_ref = []).concat.apply(_ref, keyPaths);
11756
11757 if (obj == null || flattenedKeypaths.length === 0) return {};
11758 return flattenedKeypaths.reduce(function (acc, key) {
11759 if (typeof key !== exports.TypeOf.String || Object.prototype.hasOwnProperty.call(obj, key)) {
11760 return Object.assign({}, acc, {
11761 [key]: obj[key]
11762 });
11763 }
11764
11765 var pickedValues = pickValueAndLength(obj, key);
11766
11767 if (pickedValues === null) {
11768 return acc;
11769 }
11770
11771 var keyPaths = pickedValues.keyPaths,
11772 value = pickedValues.value;
11773 var len = keyPaths.length;
11774 var innerObject = {
11775 [keyPaths[--len]]: value
11776 };
11777
11778 while (len--) {
11779 innerObject = {
11780 [keyPaths[len]]: innerObject
11781 };
11782 }
11783
11784 return Object.assign({}, acc, innerObject);
11785 }, {});
11786}
11787
11788var styles$$ = {
11789 "Container": "Polaris-Modal-Dialog__Container",
11790 "Modal": "Polaris-Modal-Dialog__Modal",
11791 "limitHeight": "Polaris-Modal-Dialog--limitHeight",
11792 "sizeLarge": "Polaris-Modal-Dialog--sizeLarge",
11793 "animateFadeUp": "Polaris-Modal-Dialog--animateFadeUp",
11794 "entering": "Polaris-Modal-Dialog--entering",
11795 "exiting": "Polaris-Modal-Dialog--exiting",
11796 "exited": "Polaris-Modal-Dialog--exited",
11797 "entered": "Polaris-Modal-Dialog--entered"
11798};
11799
11800function Dialog(_a) {
11801 var instant = _a.instant,
11802 labelledBy = _a.labelledBy,
11803 children = _a.children,
11804 onClose = _a.onClose,
11805 onExited = _a.onExited,
11806 onEntered = _a.onEntered,
11807 large = _a.large,
11808 limitHeight = _a.limitHeight,
11809 props = tslib_1.__rest(_a, ["instant", "labelledBy", "children", "onClose", "onExited", "onEntered", "large", "limitHeight"]);
11810
11811 var containerNode = React.useRef(null);
11812 var findDOMNode = React.useCallback(function () {
11813 return containerNode.current;
11814 }, []);
11815 var classes = classNames(styles$$.Modal, large && styles$$.sizeLarge, limitHeight && styles$$.limitHeight);
11816 var TransitionChild = instant ? reactTransitionGroup.Transition : FadeUp;
11817 return React__default.createElement(TransitionChild, Object.assign({}, props, {
11818 findDOMNode: findDOMNode,
11819 mountOnEnter: true,
11820 unmountOnExit: true,
11821 timeout: tokens.durationBase,
11822 onEntered: onEntered,
11823 onExited: onExited
11824 }), React__default.createElement("div", {
11825 className: styles$$.Container,
11826 "data-polaris-layer": true,
11827 "data-polaris-overlay": true,
11828 ref: containerNode
11829 }, React__default.createElement(TrapFocus, null, React__default.createElement("div", {
11830 className: classes,
11831 role: "dialog",
11832 "aria-labelledby": labelledBy,
11833 tabIndex: -1
11834 }, React__default.createElement(KeypressListener, {
11835 keyCode: exports.Key.Escape,
11836 handler: onClose
11837 }), children))));
11838}
11839var fadeUpClasses = {
11840 appear: classNames(styles$$.animateFadeUp, styles$$.entering),
11841 appearActive: classNames(styles$$.animateFadeUp, styles$$.entered),
11842 enter: classNames(styles$$.animateFadeUp, styles$$.entering),
11843 enterActive: classNames(styles$$.animateFadeUp, styles$$.entered),
11844 exit: classNames(styles$$.animateFadeUp, styles$$.exiting),
11845 exitActive: classNames(styles$$.animateFadeUp, styles$$.exited)
11846};
11847
11848function FadeUp(_a) {
11849 var children = _a.children,
11850 props = tslib_1.__rest(_a, ["children"]);
11851
11852 return React__default.createElement(reactTransitionGroup.CSSTransition, Object.assign({}, props, {
11853 classNames: fadeUpClasses
11854 }), children);
11855}
11856
11857var styles$10 = {
11858 "Footer": "Polaris-Modal-Footer",
11859 "FooterContent": "Polaris-Modal-Footer__FooterContent"
11860};
11861
11862function Footer(_ref) {
11863 var primaryAction = _ref.primaryAction,
11864 secondaryActions = _ref.secondaryActions,
11865 children = _ref.children;
11866 var primaryActionButton = primaryAction && buttonsFrom(primaryAction, {
11867 primary: true
11868 }) || null;
11869 var secondaryActionButtons = secondaryActions && buttonsFrom(secondaryActions) || null;
11870 var actions = primaryActionButton || secondaryActionButtons ? React__default.createElement(ButtonGroup, null, secondaryActionButtons, primaryActionButton) : null;
11871 return React__default.createElement("div", {
11872 className: styles$10.Footer
11873 }, React__default.createElement("div", {
11874 className: styles$10.FooterContent
11875 }, React__default.createElement(Stack, {
11876 alignment: "center"
11877 }, React__default.createElement(Stack.Item, {
11878 fill: true
11879 }, children), actions)));
11880}
11881
11882var styles$11 = {
11883 "CloseButton": "Polaris-Modal-CloseButton",
11884 "withoutTitle": "Polaris-Modal-CloseButton--withoutTitle"
11885};
11886
11887function CloseButton(_ref) {
11888 var _ref$title = _ref.title,
11889 title = _ref$title === void 0 ? true : _ref$title,
11890 onClick = _ref.onClick;
11891 var i18n = useI18n();
11892 var className = classNames(styles$11.CloseButton, !title && styles$11.withoutTitle);
11893 return React__default.createElement("button", {
11894 onClick: onClick,
11895 className: className,
11896 "aria-label": i18n.translate('Polaris.Common.close')
11897 }, React__default.createElement(Icon, {
11898 source: polarisIcons.MobileCancelMajorMonotone,
11899 color: "inkLighter"
11900 }));
11901}
11902
11903var styles$12 = {
11904 "Header": "Polaris-Modal-Header",
11905 "Title": "Polaris-Modal-Header__Title"
11906};
11907
11908function Header$1(_ref) {
11909 var id = _ref.id,
11910 children = _ref.children,
11911 onClose = _ref.onClose;
11912 return React__default.createElement("div", {
11913 className: styles$12.Header
11914 }, React__default.createElement("div", {
11915 id: id,
11916 className: styles$12.Title
11917 }, React__default.createElement(DisplayText, {
11918 element: "h2",
11919 size: "small"
11920 }, children)), React__default.createElement(CloseButton, {
11921 onClick: onClose
11922 }));
11923}
11924
11925var styles$13 = {
11926 "Section": "Polaris-Modal-Section",
11927 "subdued": "Polaris-Modal-Section--subdued",
11928 "flush": "Polaris-Modal-Section--flush"
11929};
11930
11931function Section$3(_ref) {
11932 var children = _ref.children,
11933 _ref$flush = _ref.flush,
11934 flush = _ref$flush === void 0 ? false : _ref$flush,
11935 _ref$subdued = _ref.subdued,
11936 subdued = _ref$subdued === void 0 ? false : _ref$subdued;
11937 var className = classNames(styles$13.Section, flush && styles$13.flush, subdued && styles$13.subdued);
11938 return React__default.createElement("section", {
11939 className: className
11940 }, children);
11941}
11942
11943var styles$14 = {
11944 "BodyWrapper": "Polaris-Modal__BodyWrapper",
11945 "Body": "Polaris-Modal__Body",
11946 "IFrame": "Polaris-Modal__IFrame",
11947 "Spinner": "Polaris-Modal__Spinner"
11948};
11949
11950var IFRAME_LOADING_HEIGHT = 200;
11951var DEFAULT_IFRAME_CONTENT_HEIGHT = 400;
11952var getUniqueID$1 = other.createUniqueIDFactory('modal-header');
11953var APP_BRIDGE_PROPS = ['title', 'size', 'message', 'src', 'primaryAction', 'secondaryActions'];
11954
11955var Modal =
11956/*#__PURE__*/
11957function (_React$Component) {
11958 _inherits(Modal, _React$Component);
11959
11960 function Modal() {
11961 var _this;
11962
11963 _classCallCheck(this, Modal);
11964
11965 _this = _possibleConstructorReturn(this, _getPrototypeOf(Modal).apply(this, arguments));
11966 _this.state = {
11967 iframeHeight: IFRAME_LOADING_HEIGHT
11968 };
11969 _this.headerId = getUniqueID$1();
11970
11971 _this.handleEntered = function () {
11972 var onTransitionEnd = _this.props.onTransitionEnd;
11973
11974 if (onTransitionEnd) {
11975 onTransitionEnd();
11976 }
11977 };
11978
11979 _this.handleExited = function () {
11980 _this.setState({
11981 iframeHeight: IFRAME_LOADING_HEIGHT
11982 });
11983
11984 if (_this.focusReturnPointNode) {
11985 fastdom.write(function () {
11986 return focus.focusFirstFocusableNode(_this.focusReturnPointNode, false);
11987 });
11988 }
11989 };
11990
11991 _this.handleIFrameLoad = function (evt) {
11992 var iframe = evt.target;
11993
11994 if (iframe && iframe.contentWindow) {
11995 try {
11996 _this.setState({
11997 iframeHeight: iframe.contentWindow.document.body.scrollHeight
11998 });
11999 } catch (_a) {
12000 _this.setState({
12001 iframeHeight: DEFAULT_IFRAME_CONTENT_HEIGHT
12002 });
12003 }
12004 }
12005
12006 var onIFrameLoad = _this.props.onIFrameLoad;
12007
12008 if (onIFrameLoad != null) {
12009 onIFrameLoad(evt);
12010 }
12011 };
12012
12013 return _this;
12014 }
12015
12016 _createClass(Modal, [{
12017 key: "componentDidMount",
12018 value: function componentDidMount() {
12019 if (this.props.polaris.appBridge == null) {
12020 return;
12021 } // eslint-disable-next-line no-console
12022
12023
12024 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');
12025 var transformProps = this.transformProps();
12026
12027 if (transformProps) {
12028 this.appBridgeModal = actions.Modal.create(this.props.polaris.appBridge, transformProps);
12029 }
12030
12031 if (this.appBridgeModal) {
12032 this.appBridgeModal.subscribe(actions.Modal.Action.CLOSE, this.props.onClose);
12033 }
12034
12035 var open = this.props.open;
12036
12037 if (open) {
12038 this.focusReturnPointNode = document.activeElement;
12039 this.appBridgeModal && this.appBridgeModal.dispatch(actions.Modal.Action.OPEN);
12040 }
12041 }
12042 }, {
12043 key: "componentDidUpdate",
12044 value: function componentDidUpdate(prevProps) {
12045 if (this.props.polaris.appBridge == null || this.appBridgeModal == null) {
12046 return;
12047 }
12048
12049 var open = this.props.open;
12050 var wasOpen = prevProps.open;
12051 var transformedProps = this.transformProps();
12052 var prevAppBridgeProps = pick(prevProps, APP_BRIDGE_PROPS);
12053 var currentAppBridgeProps = pick(this.props, APP_BRIDGE_PROPS);
12054
12055 if (!isEqual(prevAppBridgeProps, currentAppBridgeProps) && transformedProps) {
12056 if (isIframeModal(transformedProps)) {
12057 this.appBridgeModal.set(transformedProps);
12058 } else {
12059 this.appBridgeModal.set(transformedProps);
12060 }
12061 }
12062
12063 if (wasOpen !== open) {
12064 if (open) {
12065 this.appBridgeModal.dispatch(actions.Modal.Action.OPEN);
12066 } else {
12067 this.appBridgeModal.dispatch(actions.Modal.Action.CLOSE);
12068 }
12069 }
12070
12071 if (!wasOpen && open) {
12072 this.focusReturnPointNode = document.activeElement;
12073 } else if (wasOpen && !open && this.focusReturnPointNode != null && document.contains(this.focusReturnPointNode)) {
12074 this.focusReturnPointNode.focus();
12075 this.focusReturnPointNode = null;
12076 }
12077 }
12078 }, {
12079 key: "componentWillUnmount",
12080 value: function componentWillUnmount() {
12081 if (this.props.polaris.appBridge == null || this.appBridgeModal == null) {
12082 return;
12083 }
12084
12085 this.appBridgeModal.unsubscribe();
12086 }
12087 }, {
12088 key: "render",
12089 value: function render() {
12090 if (this.props.polaris.appBridge != null) {
12091 return null;
12092 }
12093
12094 var _this$props = this.props,
12095 children = _this$props.children,
12096 title = _this$props.title,
12097 src = _this$props.src,
12098 iFrameName = _this$props.iFrameName,
12099 open = _this$props.open,
12100 instant = _this$props.instant,
12101 sectioned = _this$props.sectioned,
12102 loading = _this$props.loading,
12103 large = _this$props.large,
12104 limitHeight = _this$props.limitHeight,
12105 onClose = _this$props.onClose,
12106 footer = _this$props.footer,
12107 primaryAction = _this$props.primaryAction,
12108 secondaryActions = _this$props.secondaryActions,
12109 intl = _this$props.polaris.intl,
12110 onScrolledToBottom = _this$props.onScrolledToBottom;
12111 var iframeHeight = this.state.iframeHeight;
12112 var iframeTitle = intl.translate('Polaris.Modal.iFrameTitle');
12113 var dialog;
12114 var backdrop;
12115
12116 if (open) {
12117 var footerMarkup = !footer && !primaryAction && !secondaryActions ? null : React__default.createElement(Footer, {
12118 primaryAction: primaryAction,
12119 secondaryActions: secondaryActions
12120 }, footer);
12121 var content = sectioned ? wrapWithComponent(children, Section$3, {}) : children;
12122 var body = loading ? React__default.createElement("div", {
12123 className: styles$14.Spinner
12124 }, React__default.createElement(Spinner, null)) : content;
12125 var bodyMarkup = src ? React__default.createElement("iframe", {
12126 name: iFrameName,
12127 title: iframeTitle,
12128 src: src,
12129 className: styles$14.IFrame,
12130 onLoad: this.handleIFrameLoad,
12131 style: {
12132 height: "".concat(iframeHeight, "px")
12133 }
12134 }) : React__default.createElement(Scrollable, {
12135 shadow: true,
12136 className: styles$14.Body,
12137 onScrolledToBottom: onScrolledToBottom
12138 }, body);
12139 var headerMarkup = title ? React__default.createElement(Header$1, {
12140 id: this.headerId,
12141 onClose: onClose
12142 }, title) : React__default.createElement(CloseButton, {
12143 onClick: onClose,
12144 title: false
12145 });
12146 var labelledBy = title ? this.headerId : undefined;
12147 dialog = React__default.createElement(Dialog, {
12148 instant: instant,
12149 labelledBy: labelledBy,
12150 onClose: onClose,
12151 onEntered: this.handleEntered,
12152 onExited: this.handleExited,
12153 large: large,
12154 limitHeight: limitHeight
12155 }, headerMarkup, React__default.createElement("div", {
12156 className: styles$14.BodyWrapper
12157 }, bodyMarkup), footerMarkup);
12158 backdrop = React__default.createElement(Backdrop, null);
12159 }
12160
12161 var animated = !instant;
12162 return React__default.createElement(WithinContentContext.Provider, {
12163 value: true
12164 }, React__default.createElement(Portal, {
12165 idPrefix: "modal"
12166 }, React__default.createElement(reactTransitionGroup.TransitionGroup, {
12167 appear: animated,
12168 enter: animated,
12169 exit: animated
12170 }, dialog), backdrop));
12171 }
12172 }, {
12173 key: "transformProps",
12174 value: function transformProps() {
12175 var _this$props2 = this.props,
12176 title = _this$props2.title,
12177 size = _this$props2.size,
12178 message = _this$props2.message,
12179 src = _this$props2.src,
12180 primaryAction = _this$props2.primaryAction,
12181 secondaryActions = _this$props2.secondaryActions,
12182 polaris = _this$props2.polaris;
12183 var appBridge = polaris.appBridge;
12184 if (!appBridge) return;
12185 var safeTitle = typeof title === 'string' ? title : undefined;
12186 var safeSize = size != null ? actions.Modal.Size[size] : undefined;
12187 var srcPayload = {};
12188
12189 if (src != null) {
12190 if (/^https?:\/\//.test(src)) {
12191 srcPayload.url = src;
12192 } else {
12193 srcPayload.path = src;
12194 }
12195 }
12196
12197 return Object.assign({
12198 title: safeTitle,
12199 message,
12200 size: safeSize
12201 }, srcPayload, {
12202 footer: {
12203 buttons: transformActions(appBridge, {
12204 primaryAction,
12205 secondaryActions
12206 })
12207 }
12208 });
12209 }
12210 }]);
12211
12212 return Modal;
12213}(React__default.Component);
12214
12215Modal.Section = Section$3;
12216
12217function isIframeModal(options) {
12218 return typeof options.url === 'string' || typeof options.path === 'string';
12219} // Use named export once withAppProvider is refactored away
12220// eslint-disable-next-line import/no-default-export
12221
12222
12223var Modal$1 = withAppProvider()(Modal);
12224
12225function DiscardConfirmationModal(_ref) {
12226 var open = _ref.open,
12227 onDiscard = _ref.onDiscard,
12228 onCancel = _ref.onCancel;
12229 var i18n = useI18n();
12230 return React__default.createElement(Modal$1, {
12231 title: i18n.translate('Polaris.DiscardConfirmationModal.title'),
12232 open: open,
12233 onClose: onCancel,
12234 primaryAction: {
12235 content: i18n.translate('Polaris.DiscardConfirmationModal.primaryAction'),
12236 destructive: true,
12237 onAction: onDiscard
12238 },
12239 secondaryActions: [{
12240 content: i18n.translate('Polaris.DiscardConfirmationModal.secondaryAction'),
12241 onAction: onCancel
12242 }],
12243 sectioned: true
12244 }, i18n.translate('Polaris.DiscardConfirmationModal.message'));
12245}
12246
12247var styles$15 = {
12248 "ContextualSaveBar": "Polaris-Frame-ContextualSaveBar",
12249 "LogoContainer": "Polaris-Frame-ContextualSaveBar__LogoContainer",
12250 "Contents": "Polaris-Frame-ContextualSaveBar__Contents",
12251 "Message": "Polaris-Frame-ContextualSaveBar__Message",
12252 "ActionContainer": "Polaris-Frame-ContextualSaveBar__ActionContainer",
12253 "Action": "Polaris-Frame-ContextualSaveBar__Action"
12254};
12255
12256function ContextualSaveBar$1(_ref) {
12257 var alignContentFlush = _ref.alignContentFlush,
12258 message = _ref.message,
12259 saveAction = _ref.saveAction,
12260 discardAction = _ref.discardAction;
12261 var i18n = useI18n();
12262
12263 var _useTheme = useTheme(),
12264 logo = _useTheme.logo;
12265
12266 var _useForcibleToggle = useForcibleToggle(false),
12267 _useForcibleToggle2 = _slicedToArray(_useForcibleToggle, 2),
12268 discardConfirmationModalVisible = _useForcibleToggle2[0],
12269 _useForcibleToggle2$ = _useForcibleToggle2[1],
12270 toggleDiscardConfirmationModal = _useForcibleToggle2$.toggle,
12271 closeDiscardConfirmationModal = _useForcibleToggle2$.forceFalse;
12272
12273 var handleDiscardAction = React.useCallback(function () {
12274 if (discardAction && discardAction.onAction) {
12275 discardAction.onAction();
12276 }
12277
12278 closeDiscardConfirmationModal();
12279 }, [closeDiscardConfirmationModal, discardAction]);
12280 var discardActionContent = discardAction && discardAction.content ? discardAction.content : i18n.translate('Polaris.ContextualSaveBar.discard');
12281 var discardActionHandler;
12282
12283 if (discardAction && discardAction.discardConfirmationModal) {
12284 discardActionHandler = toggleDiscardConfirmationModal;
12285 } else if (discardAction) {
12286 discardActionHandler = discardAction.onAction;
12287 }
12288
12289 var discardConfirmationModalMarkup = discardAction && discardAction.onAction && discardAction.discardConfirmationModal && React__default.createElement(DiscardConfirmationModal, {
12290 open: discardConfirmationModalVisible,
12291 onCancel: toggleDiscardConfirmationModal,
12292 onDiscard: handleDiscardAction
12293 });
12294 var discardActionMarkup = discardAction && React__default.createElement(Button, {
12295 url: discardAction.url,
12296 onClick: discardActionHandler,
12297 loading: discardAction.loading,
12298 disabled: discardAction.disabled,
12299 accessibilityLabel: discardAction.content
12300 }, discardActionContent);
12301 var saveActionContent = saveAction && saveAction.content ? saveAction.content : i18n.translate('Polaris.ContextualSaveBar.save');
12302 var saveActionMarkup = saveAction && React__default.createElement(Button, {
12303 primary: true,
12304 url: saveAction.url,
12305 onClick: saveAction.onAction,
12306 loading: saveAction.loading,
12307 disabled: saveAction.disabled,
12308 accessibilityLabel: saveAction.content
12309 }, saveActionContent);
12310 var width = getWidth(logo, 104);
12311 var imageMarkup = logo && React__default.createElement(Image, {
12312 style: {
12313 width
12314 },
12315 source: logo.contextualSaveBarSource || '',
12316 alt: ""
12317 });
12318 var logoMarkup = alignContentFlush ? null : React__default.createElement("div", {
12319 className: styles$15.LogoContainer,
12320 style: {
12321 width
12322 }
12323 }, imageMarkup);
12324 return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
12325 className: styles$15.ContextualSaveBar
12326 }, logoMarkup, React__default.createElement("div", {
12327 className: styles$15.Contents
12328 }, React__default.createElement("h2", {
12329 className: styles$15.Message
12330 }, message), React__default.createElement("div", {
12331 className: styles$15.ActionContainer
12332 }, React__default.createElement(Stack, {
12333 spacing: "tight",
12334 wrap: false
12335 }, discardActionMarkup, saveActionMarkup)))), discardConfirmationModalMarkup);
12336}
12337
12338var styles$16 = {
12339 "startFade": "Polaris-Frame-CSSAnimation--startFade",
12340 "endFade": "Polaris-Frame-CSSAnimation--endFade"
12341};
12342
12343var AnimationType;
12344
12345(function (AnimationType) {
12346 AnimationType["Fade"] = "fade";
12347})(AnimationType || (AnimationType = {}));
12348
12349var TransitionStatus$1;
12350
12351(function (TransitionStatus) {
12352 TransitionStatus["Entering"] = "entering";
12353 TransitionStatus["Entered"] = "entered";
12354 TransitionStatus["Exiting"] = "exiting";
12355 TransitionStatus["Exited"] = "exited";
12356})(TransitionStatus$1 || (TransitionStatus$1 = {}));
12357
12358function CSSAnimation(_ref) {
12359 var inProp = _ref.in,
12360 className = _ref.className,
12361 type = _ref.type,
12362 children = _ref.children;
12363
12364 var _useState = React.useState(inProp ? TransitionStatus$1.Entering : TransitionStatus$1.Exited),
12365 _useState2 = _slicedToArray(_useState, 2),
12366 transitionStatus = _useState2[0],
12367 setTransitionStatus = _useState2[1];
12368
12369 var isMounted = React.useRef(false);
12370 var node = React.useRef(null);
12371 React.useEffect(function () {
12372 if (!isMounted.current) return;
12373 transitionStatus === TransitionStatus$1.Entering && changeTransitionStatus(TransitionStatus$1.Entered);
12374 }, [transitionStatus]);
12375 React.useEffect(function () {
12376 if (!isMounted.current) return;
12377 inProp && changeTransitionStatus(TransitionStatus$1.Entering);
12378 !inProp && changeTransitionStatus(TransitionStatus$1.Exiting);
12379 }, [inProp]);
12380 React.useEffect(function () {
12381 isMounted.current = true;
12382 }, []);
12383 var wrapperClassName = classNames(className, styles$16[variationName('start', type)], inProp && styles$16[variationName('end', type)]);
12384 var content = transitionStatus === TransitionStatus$1.Exited && !inProp ? null : children;
12385 return React__default.createElement("div", {
12386 className: wrapperClassName,
12387 ref: node,
12388 onTransitionEnd: handleTransitionEnd
12389 }, content);
12390
12391 function handleTransitionEnd() {
12392 transitionStatus === TransitionStatus$1.Exiting && changeTransitionStatus(TransitionStatus$1.Exited);
12393 }
12394
12395 function changeTransitionStatus(transitionStatus) {
12396 setTransitionStatus(transitionStatus); // Forcing a reflow to enable the animation
12397
12398 if (transitionStatus === TransitionStatus$1.Entering) node.current && node.current.getBoundingClientRect();
12399 }
12400}
12401
12402var styles$17 = {
12403 "Frame": "Polaris-Frame",
12404 "Navigation": "Polaris-Frame__Navigation",
12405 "Navigation-enter": "Polaris-Frame__Navigation--enter",
12406 "Navigation-enterActive": "Polaris-Frame__Navigation--enterActive",
12407 "Navigation-exit": "Polaris-Frame__Navigation--exit",
12408 "Navigation-exitActive": "Polaris-Frame__Navigation--exitActive",
12409 "NavigationDismiss": "Polaris-Frame__NavigationDismiss",
12410 "Navigation-visible": "Polaris-Frame__Navigation--visible",
12411 "TopBar": "Polaris-Frame__TopBar",
12412 "ContextualSaveBar": "Polaris-Frame__ContextualSaveBar",
12413 "Main": "Polaris-Frame__Main",
12414 "hasNav": "Polaris-Frame--hasNav",
12415 "hasTopBar": "Polaris-Frame--hasTopBar",
12416 "Content": "Polaris-Frame__Content",
12417 "GlobalRibbonContainer": "Polaris-Frame__GlobalRibbonContainer",
12418 "LoadingBar": "Polaris-Frame__LoadingBar",
12419 "Skip": "Polaris-Frame__Skip",
12420 "focused": "Polaris-Frame--focused",
12421 "SkipAnchor": "Polaris-Frame__SkipAnchor",
12422 "globalTheming": "Polaris-Frame--globalTheming"
12423};
12424
12425var GLOBAL_RIBBON_CUSTOM_PROPERTY = '--global-ribbon-height';
12426var APP_FRAME_MAIN = 'AppFrameMain';
12427var APP_FRAME_MAIN_ANCHOR_TARGET = 'AppFrameMainContent';
12428var APP_FRAME_NAV = 'AppFrameNav';
12429var APP_FRAME_TOP_BAR = 'AppFrameTopBar';
12430var APP_FRAME_LOADING_BAR = 'AppFrameLoadingBar';
12431
12432var Frame =
12433/*#__PURE__*/
12434function (_React$PureComponent) {
12435 _inherits(Frame, _React$PureComponent);
12436
12437 function Frame() {
12438 var _this;
12439
12440 _classCallCheck(this, Frame);
12441
12442 _this = _possibleConstructorReturn(this, _getPrototypeOf(Frame).apply(this, arguments));
12443 _this.state = {
12444 skipFocused: false,
12445 globalRibbonHeight: 0,
12446 loadingStack: 0,
12447 toastMessages: [],
12448 showContextualSaveBar: false
12449 };
12450 _this.globalRibbonContainer = null;
12451 _this.navigationNode = React.createRef();
12452 _this.skipToMainContentTargetNode = _this.props.skipToContentTarget || React__default.createRef();
12453
12454 _this.setGlobalRibbonHeight = function () {
12455 var _assertThisInitialize = _assertThisInitialized(_this),
12456 globalRibbonContainer = _assertThisInitialize.globalRibbonContainer;
12457
12458 if (globalRibbonContainer) {
12459 _this.setState({
12460 globalRibbonHeight: globalRibbonContainer.offsetHeight
12461 }, _this.setGlobalRibbonRootProperty);
12462 }
12463 };
12464
12465 _this.setGlobalRibbonRootProperty = function () {
12466 var globalRibbonHeight = _this.state.globalRibbonHeight;
12467 setRootProperty(GLOBAL_RIBBON_CUSTOM_PROPERTY, "".concat(globalRibbonHeight, "px"), null);
12468 };
12469
12470 _this.showToast = function (toast) {
12471 _this.setState(function (_ref) {
12472 var toastMessages = _ref.toastMessages;
12473 var hasToastById = toastMessages.find(function (_ref2) {
12474 var id = _ref2.id;
12475 return id === toast.id;
12476 }) != null;
12477 return {
12478 toastMessages: hasToastById ? toastMessages : [].concat(_toConsumableArray(toastMessages), [toast])
12479 };
12480 });
12481 };
12482
12483 _this.hideToast = function (_ref3) {
12484 var id = _ref3.id;
12485
12486 _this.setState(function (_ref4) {
12487 var toastMessages = _ref4.toastMessages;
12488 return {
12489 toastMessages: toastMessages.filter(function (_ref5) {
12490 var toastId = _ref5.id;
12491 return id !== toastId;
12492 })
12493 };
12494 });
12495 };
12496
12497 _this.setContextualSaveBar = function (props) {
12498 var showContextualSaveBar = _this.state.showContextualSaveBar;
12499 _this.contextualSaveBar = Object.assign({}, props);
12500
12501 if (showContextualSaveBar === true) {
12502 _this.forceUpdate();
12503 } else {
12504 _this.setState({
12505 showContextualSaveBar: true
12506 });
12507 }
12508 };
12509
12510 _this.removeContextualSaveBar = function () {
12511 _this.contextualSaveBar = null;
12512
12513 _this.setState({
12514 showContextualSaveBar: false
12515 });
12516 };
12517
12518 _this.startLoading = function () {
12519 _this.setState(function (_ref6) {
12520 var loadingStack = _ref6.loadingStack;
12521 return {
12522 loadingStack: loadingStack + 1
12523 };
12524 });
12525 };
12526
12527 _this.stopLoading = function () {
12528 _this.setState(function (_ref7) {
12529 var loadingStack = _ref7.loadingStack;
12530 return {
12531 loadingStack: Math.max(0, loadingStack - 1)
12532 };
12533 });
12534 };
12535
12536 _this.handleResize = function () {
12537 if (_this.props.globalRibbon) {
12538 _this.setGlobalRibbonHeight();
12539 }
12540 };
12541
12542 _this.handleFocus = function () {
12543 _this.setState({
12544 skipFocused: true
12545 });
12546 };
12547
12548 _this.handleBlur = function () {
12549 _this.setState({
12550 skipFocused: false
12551 });
12552 };
12553
12554 _this.handleClick = function () {
12555 _this.skipToMainContentTargetNode.current && _this.skipToMainContentTargetNode.current.focus();
12556 };
12557
12558 _this.handleNavigationDismiss = function () {
12559 var onNavigationDismiss = _this.props.onNavigationDismiss;
12560
12561 if (onNavigationDismiss != null) {
12562 onNavigationDismiss();
12563 }
12564 };
12565
12566 _this.setGlobalRibbonContainer = function (node) {
12567 _this.globalRibbonContainer = node;
12568 };
12569
12570 _this.handleNavKeydown = function (event) {
12571 var key = event.key;
12572
12573 if (key === 'Escape') {
12574 _this.handleNavigationDismiss();
12575 }
12576 };
12577
12578 _this.findNavigationNode = function () {
12579 return _this.navigationNode.current;
12580 };
12581
12582 return _this;
12583 }
12584
12585 _createClass(Frame, [{
12586 key: "componentDidMount",
12587 value: function componentDidMount() {
12588 this.handleResize();
12589
12590 if (this.props.globalRibbon) {
12591 return;
12592 }
12593
12594 this.setGlobalRibbonRootProperty();
12595 }
12596 }, {
12597 key: "componentDidUpdate",
12598 value: function componentDidUpdate(prevProps) {
12599 if (this.props.globalRibbon !== prevProps.globalRibbon) {
12600 this.setGlobalRibbonHeight();
12601 }
12602 }
12603 }, {
12604 key: "render",
12605 value: function render() {
12606 var _this$state = this.state,
12607 skipFocused = _this$state.skipFocused,
12608 loadingStack = _this$state.loadingStack,
12609 toastMessages = _this$state.toastMessages,
12610 showContextualSaveBar = _this$state.showContextualSaveBar;
12611 var _this$props = this.props,
12612 children = _this$props.children,
12613 navigation = _this$props.navigation,
12614 topBar = _this$props.topBar,
12615 globalRibbon = _this$props.globalRibbon,
12616 _this$props$showMobil = _this$props.showMobileNavigation,
12617 showMobileNavigation = _this$props$showMobil === void 0 ? false : _this$props$showMobil,
12618 skipToContentTarget = _this$props.skipToContentTarget,
12619 _this$props$polaris = _this$props.polaris,
12620 intl = _this$props$polaris.intl,
12621 isNavigationCollapsed = _this$props$polaris.mediaQuery.isNavigationCollapsed;
12622 var navClassName = classNames(styles$17.Navigation, showMobileNavigation && styles$17['Navigation-visible']);
12623 var mobileNavHidden = isNavigationCollapsed && !showMobileNavigation;
12624 var mobileNavShowing = isNavigationCollapsed && showMobileNavigation;
12625 var tabIndex = mobileNavShowing ? 0 : -1;
12626 var navigationMarkup = navigation ? React__default.createElement(TrapFocus, {
12627 trapping: mobileNavShowing
12628 }, React__default.createElement(reactTransitionGroup.CSSTransition, {
12629 findDOMNode: this.findNavigationNode,
12630 appear: isNavigationCollapsed,
12631 exit: isNavigationCollapsed,
12632 in: showMobileNavigation,
12633 timeout: tokens.durationSlow,
12634 classNames: navTransitionClasses
12635 }, React__default.createElement("div", {
12636 ref: this.navigationNode,
12637 className: navClassName,
12638 onKeyDown: this.handleNavKeydown,
12639 id: APP_FRAME_NAV,
12640 key: "NavContent",
12641 hidden: mobileNavHidden
12642 }, navigation, React__default.createElement("button", {
12643 type: "button",
12644 className: styles$17.NavigationDismiss,
12645 onClick: this.handleNavigationDismiss,
12646 "aria-hidden": mobileNavHidden || !isNavigationCollapsed && !showMobileNavigation,
12647 "aria-label": intl.translate('Polaris.Frame.Navigation.closeMobileNavigationLabel'),
12648 tabIndex: tabIndex
12649 }, React__default.createElement(Icon, {
12650 source: polarisIcons.MobileCancelMajorMonotone,
12651 color: "white"
12652 }))))) : null;
12653 var loadingMarkup = loadingStack > 0 ? React__default.createElement("div", {
12654 className: styles$17.LoadingBar,
12655 id: APP_FRAME_LOADING_BAR
12656 }, React__default.createElement(Loading, null)) : null;
12657 var contextualSaveBarMarkup = React__default.createElement(CSSAnimation, {
12658 in: showContextualSaveBar,
12659 className: styles$17.ContextualSaveBar,
12660 type: AnimationType.Fade
12661 }, React__default.createElement(ContextualSaveBar$1, this.contextualSaveBar));
12662 var topBarMarkup = topBar ? React__default.createElement("div", Object.assign({
12663 className: styles$17.TopBar
12664 }, layer.props, dataPolarisTopBar.props, {
12665 id: APP_FRAME_TOP_BAR
12666 }), topBar) : null;
12667 var globalRibbonMarkup = globalRibbon ? React__default.createElement("div", {
12668 className: styles$17.GlobalRibbonContainer,
12669 ref: this.setGlobalRibbonContainer
12670 }, globalRibbon) : null;
12671 var skipClassName = classNames(styles$17.Skip, skipFocused && styles$17.focused);
12672 var skipTarget = skipToContentTarget ? skipToContentTarget.current && skipToContentTarget.current.id || '' : APP_FRAME_MAIN_ANCHOR_TARGET;
12673 var skipMarkup = React__default.createElement("div", {
12674 className: skipClassName
12675 }, React__default.createElement("a", {
12676 href: "#".concat(skipTarget),
12677 onFocus: this.handleFocus,
12678 onBlur: this.handleBlur,
12679 onClick: this.handleClick,
12680 className: styles$17.SkipAnchor
12681 }, intl.translate('Polaris.Frame.skipToContent')));
12682 var navigationAttributes = navigation ? {
12683 'data-has-navigation': true
12684 } : {};
12685 var frameClassName = classNames(styles$17.Frame, navigation && styles$17.hasNav, topBar && styles$17.hasTopBar);
12686 var navigationOverlayMarkup = showMobileNavigation && isNavigationCollapsed ? React__default.createElement(Backdrop, {
12687 belowNavigation: true,
12688 onClick: this.handleNavigationDismiss,
12689 onTouchStart: this.handleNavigationDismiss
12690 }) : null;
12691 var skipToMainContentTarget = skipToContentTarget ? null : // eslint-disable-next-line jsx-a11y/anchor-is-valid
12692 React__default.createElement("a", {
12693 id: APP_FRAME_MAIN_ANCHOR_TARGET,
12694 ref: this.skipToMainContentTargetNode,
12695 tabIndex: -1
12696 });
12697 var context = {
12698 showToast: this.showToast,
12699 hideToast: this.hideToast,
12700 startLoading: this.startLoading,
12701 stopLoading: this.stopLoading,
12702 setContextualSaveBar: this.setContextualSaveBar,
12703 removeContextualSaveBar: this.removeContextualSaveBar
12704 };
12705 return React__default.createElement(FrameContext.Provider, {
12706 value: context
12707 }, React__default.createElement("div", Object.assign({
12708 className: frameClassName
12709 }, layer.props, navigationAttributes), skipMarkup, topBarMarkup, navigationMarkup, contextualSaveBarMarkup, loadingMarkup, navigationOverlayMarkup, React__default.createElement("main", {
12710 className: styles$17.Main,
12711 id: APP_FRAME_MAIN,
12712 "data-has-global-ribbon": Boolean(globalRibbon)
12713 }, skipToMainContentTarget, React__default.createElement("div", {
12714 className: styles$17.Content
12715 }, children)), React__default.createElement(ToastManager, {
12716 toastMessages: toastMessages
12717 }), globalRibbonMarkup, React__default.createElement(EventListener, {
12718 event: "resize",
12719 handler: this.handleResize
12720 })));
12721 }
12722 }]);
12723
12724 return Frame;
12725}(React__default.PureComponent);
12726
12727var navTransitionClasses = {
12728 enter: classNames(styles$17['Navigation-enter']),
12729 enterActive: classNames(styles$17['Navigation-enterActive']),
12730 enterDone: classNames(styles$17['Navigation-enterActive']),
12731 exit: classNames(styles$17['Navigation-exit']),
12732 exitActive: classNames(styles$17['Navigation-exitActive'])
12733}; // Use named export once withAppProvider is refactored away
12734// eslint-disable-next-line import/no-default-export
12735
12736var Frame$1 = withAppProvider()(Frame);
12737
12738var styles$18 = {
12739 "Indicator": "Polaris-Indicator",
12740 "pulseIndicator": "Polaris-Indicator--pulseIndicator",
12741 "bounce": "Polaris-Indicator--bounce",
12742 "pulse": "Polaris-Indicator--pulse"
12743};
12744
12745function Indicator(_ref) {
12746 var _ref$pulse = _ref.pulse,
12747 pulse = _ref$pulse === void 0 ? true : _ref$pulse;
12748 var className = classNames(styles$18.Indicator, pulse && styles$18.pulseIndicator);
12749 return React__default.createElement("span", {
12750 className: className
12751 });
12752}
12753
12754var styles$19 = {
12755 "KeyboardKey": "Polaris-KeyboardKey"
12756};
12757
12758function KeyboardKey(_ref) {
12759 var children = _ref.children;
12760 var key = children || '';
12761 key = key.length > 1 ? key.toLowerCase() : key.toUpperCase();
12762 return React__default.createElement("kbd", {
12763 className: styles$19.KeyboardKey
12764 }, key);
12765}
12766
12767var styles$1a = {
12768 "Layout": "Polaris-Layout",
12769 "Section": "Polaris-Layout__Section",
12770 "Section-secondary": "Polaris-Layout__Section--secondary",
12771 "Section-fullWidth": "Polaris-Layout__Section--fullWidth",
12772 "Section-oneHalf": "Polaris-Layout__Section--oneHalf",
12773 "Section-oneThird": "Polaris-Layout__Section--oneThird",
12774 "AnnotatedSection": "Polaris-Layout__AnnotatedSection",
12775 "AnnotationWrapper": "Polaris-Layout__AnnotationWrapper",
12776 "AnnotationContent": "Polaris-Layout__AnnotationContent",
12777 "Annotation": "Polaris-Layout__Annotation",
12778 "AnnotationDescription": "Polaris-Layout__AnnotationDescription"
12779};
12780
12781function AnnotatedSection(props) {
12782 var children = props.children,
12783 title = props.title,
12784 description = props.description;
12785 var descriptionMarkup = typeof description === 'string' ? React__default.createElement("p", null, description) : description;
12786 return React__default.createElement("div", {
12787 className: styles$1a.AnnotatedSection
12788 }, React__default.createElement("div", {
12789 className: styles$1a.AnnotationWrapper
12790 }, React__default.createElement("div", {
12791 className: styles$1a.Annotation
12792 }, React__default.createElement(TextContainer, null, React__default.createElement(Heading, null, title), descriptionMarkup && React__default.createElement("div", {
12793 className: styles$1a.AnnotationDescription
12794 }, descriptionMarkup))), React__default.createElement("div", {
12795 className: styles$1a.AnnotationContent
12796 }, children)));
12797}
12798
12799function Section$4(_ref) {
12800 var children = _ref.children,
12801 secondary = _ref.secondary,
12802 fullWidth = _ref.fullWidth,
12803 oneHalf = _ref.oneHalf,
12804 oneThird = _ref.oneThird;
12805 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']);
12806 return React__default.createElement("div", {
12807 className: className
12808 }, children);
12809}
12810
12811var Layout =
12812/*#__PURE__*/
12813function (_React$Component) {
12814 _inherits(Layout, _React$Component);
12815
12816 function Layout() {
12817 _classCallCheck(this, Layout);
12818
12819 return _possibleConstructorReturn(this, _getPrototypeOf(Layout).apply(this, arguments));
12820 }
12821
12822 _createClass(Layout, [{
12823 key: "render",
12824 value: function render() {
12825 var _this$props = this.props,
12826 children = _this$props.children,
12827 sectioned = _this$props.sectioned;
12828 var content = sectioned ? React__default.createElement(Section$4, null, children) : children;
12829 return React__default.createElement("div", {
12830 className: styles$1a.Layout
12831 }, content);
12832 }
12833 }]);
12834
12835 return Layout;
12836}(React__default.Component);
12837Layout.AnnotatedSection = AnnotatedSection;
12838Layout.Section = Section$4;
12839
12840var styles$1b = {
12841 "Link": "Polaris-Link",
12842 "IconLockup": "Polaris-Link__IconLockup",
12843 "IconLayout": "Polaris-Link__IconLayout",
12844 "monochrome": "Polaris-Link--monochrome"
12845};
12846
12847function Link(_ref) {
12848 var url = _ref.url,
12849 children = _ref.children,
12850 onClick = _ref.onClick,
12851 external = _ref.external,
12852 id = _ref.id,
12853 monochrome = _ref.monochrome;
12854 var i18n = useI18n();
12855 var childrenMarkup = children;
12856
12857 if (external && typeof children === 'string') {
12858 var iconLabel = i18n.translate('Polaris.Common.newWindowAccessibilityHint');
12859 childrenMarkup = React__default.createElement(React__default.Fragment, null, children, React__default.createElement("span", {
12860 className: styles$1b.IconLockup
12861 }, React__default.createElement("span", {
12862 className: styles$1b.IconLayout
12863 }, React__default.createElement(Icon, {
12864 accessibilityLabel: iconLabel,
12865 source: polarisIcons.ExternalSmallMinor
12866 }))));
12867 }
12868
12869 return React__default.createElement(BannerContext.Consumer, null, function (BannerContext) {
12870 var shouldBeMonochrome = monochrome || BannerContext;
12871 var className = classNames(styles$1b.Link, shouldBeMonochrome && styles$1b.monochrome);
12872 return url ? React__default.createElement(UnstyledLink, {
12873 onClick: onClick,
12874 className: className,
12875 url: url,
12876 external: external,
12877 id: id
12878 }, childrenMarkup) : React__default.createElement("button", {
12879 type: "button",
12880 onClick: onClick,
12881 className: className,
12882 id: id
12883 }, childrenMarkup);
12884 });
12885}
12886
12887var styles$1c = {
12888 "List": "Polaris-List",
12889 "typeNumber": "Polaris-List--typeNumber",
12890 "Item": "Polaris-List__Item"
12891};
12892
12893function Item$6(_ref) {
12894 var children = _ref.children;
12895 return React__default.createElement("li", {
12896 className: styles$1c.Item
12897 }, children);
12898}
12899
12900var List =
12901/*#__PURE__*/
12902function (_React$PureComponent) {
12903 _inherits(List, _React$PureComponent);
12904
12905 function List() {
12906 _classCallCheck(this, List);
12907
12908 return _possibleConstructorReturn(this, _getPrototypeOf(List).apply(this, arguments));
12909 }
12910
12911 _createClass(List, [{
12912 key: "render",
12913 value: function render() {
12914 var _this$props = this.props,
12915 children = _this$props.children,
12916 _this$props$type = _this$props.type,
12917 type = _this$props$type === void 0 ? 'bullet' : _this$props$type;
12918 var className = classNames(styles$1c.List, type && styles$1c[variationName('type', type)]);
12919 var ListElement = type === 'bullet' ? 'ul' : 'ol';
12920 return React__default.createElement(ListElement, {
12921 className: className
12922 }, children);
12923 }
12924 }]);
12925
12926 return List;
12927}(React__default.PureComponent);
12928List.Item = Item$6;
12929
12930var Loading$1 = React__default.memo(function Loading() {
12931 var appBridgeLoading = React.useRef();
12932 var appBridge = useAppBridge();
12933
12934 var _useFrame = useFrame(),
12935 startLoading = _useFrame.startLoading,
12936 stopLoading = _useFrame.stopLoading;
12937
12938 React.useEffect(function () {
12939 if (appBridge == null) {
12940 startLoading();
12941 } else {
12942 // eslint-disable-next-line no-console
12943 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');
12944 appBridgeLoading.current = actions.Loading.create(appBridge);
12945 appBridgeLoading.current.dispatch(actions.Loading.Action.START);
12946 }
12947
12948 return function () {
12949 if (appBridge == null) {
12950 stopLoading();
12951 } else {
12952 appBridgeLoading.current && appBridgeLoading.current.dispatch(actions.Loading.Action.STOP);
12953 }
12954 };
12955 }, [appBridge, startLoading, stopLoading]);
12956 return null;
12957});
12958
12959var NavigationContext = React__default.createContext({
12960 location: ''
12961});
12962
12963var styles$1d = {
12964 "Navigation": "Polaris-Navigation",
12965 "UserMenu": "Polaris-Navigation__UserMenu",
12966 "ContextControl": "Polaris-Navigation__ContextControl",
12967 "PrimaryNavigation": "Polaris-Navigation__PrimaryNavigation",
12968 "Item": "Polaris-Navigation__Item",
12969 "Icon": "Polaris-Navigation__Icon",
12970 "Item-selected": "Polaris-Navigation__Item--selected",
12971 "Item-disabled": "Polaris-Navigation__Item--disabled",
12972 "Badge": "Polaris-Navigation__Badge",
12973 "subNavigationActive": "Polaris-Navigation--subNavigationActive",
12974 "ListItem": "Polaris-Navigation__ListItem",
12975 "RollupSection": "Polaris-Navigation__RollupSection",
12976 "SecondaryNavigation": "Polaris-Navigation__SecondaryNavigation",
12977 "fade-in": "Polaris-Navigation__fade--in",
12978 "ListItem-hasAction": "Polaris-Navigation__ListItem--hasAction",
12979 "ItemWrapper": "Polaris-Navigation__ItemWrapper",
12980 "Text": "Polaris-Navigation__Text",
12981 "SecondaryAction": "Polaris-Navigation__SecondaryAction",
12982 "List": "Polaris-Navigation__List",
12983 "Section": "Polaris-Navigation__Section",
12984 "Section-fill": "Polaris-Navigation__Section--fill",
12985 "Section-withSeparator": "Polaris-Navigation__Section--withSeparator",
12986 "SectionHeading": "Polaris-Navigation__SectionHeading",
12987 "Action": "Polaris-Navigation__Action",
12988 "RollupToggle": "Polaris-Navigation__RollupToggle",
12989 "Indicator": "Polaris-Navigation__Indicator"
12990};
12991
12992function Secondary(_ref) {
12993 var children = _ref.children,
12994 expanded = _ref.expanded;
12995 var id = useUniqueId('SecondaryNavigation');
12996 return React__default.createElement(Collapsible, {
12997 id: id,
12998 open: expanded
12999 }, React__default.createElement("ul", {
13000 className: styles$1d.List
13001 }, children));
13002}
13003
13004var MatchState;
13005
13006(function (MatchState) {
13007 MatchState[MatchState["MatchForced"] = 0] = "MatchForced";
13008 MatchState[MatchState["MatchUrl"] = 1] = "MatchUrl";
13009 MatchState[MatchState["MatchPaths"] = 2] = "MatchPaths";
13010 MatchState[MatchState["Excluded"] = 3] = "Excluded";
13011 MatchState[MatchState["NoMatch"] = 4] = "NoMatch";
13012})(MatchState || (MatchState = {}));
13013
13014function Item$7(_ref) {
13015 var url = _ref.url,
13016 icon = _ref.icon,
13017 label = _ref.label,
13018 _ref$subNavigationIte = _ref.subNavigationItems,
13019 subNavigationItems = _ref$subNavigationIte === void 0 ? [] : _ref$subNavigationIte,
13020 secondaryAction = _ref.secondaryAction,
13021 disabled = _ref.disabled,
13022 onClick = _ref.onClick,
13023 accessibilityLabel = _ref.accessibilityLabel,
13024 selectedOverride = _ref.selected,
13025 badge = _ref.badge,
13026 isNew = _ref.new,
13027 matches = _ref.matches,
13028 exactMatch = _ref.exactMatch,
13029 matchPaths = _ref.matchPaths,
13030 excludePaths = _ref.excludePaths;
13031 var i18n = useI18n();
13032
13033 var _useMediaQuery = useMediaQuery(),
13034 isNavigationCollapsed = _useMediaQuery.isNavigationCollapsed;
13035
13036 var _useContext = React.useContext(NavigationContext),
13037 location = _useContext.location,
13038 onNavigationDismiss = _useContext.onNavigationDismiss;
13039
13040 var _useState = React.useState(false),
13041 _useState2 = _slicedToArray(_useState, 2),
13042 expanded = _useState2[0],
13043 setExpanded = _useState2[1];
13044
13045 React.useEffect(function () {
13046 if (!isNavigationCollapsed && expanded) {
13047 setExpanded(false);
13048 }
13049 }, [expanded, isNavigationCollapsed]);
13050 var tabIndex = disabled ? -1 : 0;
13051 var hasNewChild = subNavigationItems.filter(function (subNavigationItem) {
13052 return subNavigationItem.new;
13053 }).length > 0;
13054 var indicatorMarkup = hasNewChild ? React__default.createElement("span", {
13055 className: styles$1d.Indicator
13056 }, React__default.createElement(Indicator, {
13057 pulse: true
13058 })) : null;
13059 var iconMarkup = icon ? React__default.createElement("div", {
13060 className: styles$1d.Icon
13061 }, React__default.createElement(Icon, {
13062 source: icon
13063 })) : null;
13064 var badgeMarkup = null;
13065
13066 if (isNew) {
13067 badgeMarkup = React__default.createElement(Badge, {
13068 status: "new",
13069 size: "small"
13070 }, i18n.translate('Polaris.Badge.STATUS_LABELS.new'));
13071 } else if (typeof badge === 'string') {
13072 badgeMarkup = React__default.createElement(Badge, {
13073 status: "new",
13074 size: "small"
13075 }, badge);
13076 } else {
13077 badgeMarkup = badge;
13078 }
13079
13080 var wrappedBadgeMarkup = badgeMarkup == null ? null : React__default.createElement("div", {
13081 className: styles$1d.Badge
13082 }, badgeMarkup);
13083 var itemContentMarkup = React__default.createElement(React.Fragment, null, iconMarkup, React__default.createElement("span", {
13084 className: styles$1d.Text
13085 }, label, indicatorMarkup), wrappedBadgeMarkup);
13086
13087 if (url == null) {
13088 var _className = classNames(styles$1d.Item, disabled && styles$1d['Item-disabled']);
13089
13090 return React__default.createElement("li", {
13091 className: styles$1d.ListItem
13092 }, React__default.createElement("button", {
13093 type: "button",
13094 className: _className,
13095 disabled: disabled,
13096 "aria-disabled": disabled,
13097 "aria-label": accessibilityLabel,
13098 onClick: getClickHandler(onClick)
13099 }, itemContentMarkup));
13100 }
13101
13102 var secondaryActionMarkup = secondaryAction && React__default.createElement(UnstyledLink, {
13103 external: true,
13104 url: secondaryAction.url,
13105 className: styles$1d.SecondaryAction,
13106 tabIndex: tabIndex,
13107 "aria-disabled": disabled,
13108 "aria-label": secondaryAction.accessibilityLabel
13109 }, React__default.createElement(Icon, {
13110 source: secondaryAction.icon
13111 }));
13112 var matchState = matchStateForItem({
13113 url,
13114 matches,
13115 exactMatch,
13116 matchPaths,
13117 excludePaths
13118 }, location);
13119 var matchingSubNavigationItems = subNavigationItems.filter(function (item) {
13120 var subMatchState = matchStateForItem(item, location);
13121 return subMatchState === MatchState.MatchForced || subMatchState === MatchState.MatchUrl || subMatchState === MatchState.MatchPaths;
13122 });
13123 var childIsActive = matchingSubNavigationItems.length > 0;
13124 var selected = selectedOverride == null ? matchState === MatchState.MatchForced || matchState === MatchState.MatchUrl || matchState === MatchState.MatchPaths : selectedOverride;
13125 var showExpanded = selected || expanded || childIsActive;
13126 var itemClassName = classNames(styles$1d.Item, disabled && styles$1d['Item-disabled'], selected && subNavigationItems.length === 0 && styles$1d['Item-selected'], showExpanded && styles$1d.subNavigationActive);
13127 var secondaryNavigationMarkup = null;
13128
13129 if (subNavigationItems.length > 0 && showExpanded) {
13130 var longestMatch = matchingSubNavigationItems.sort(function (_ref2, _ref3) {
13131 var firstUrl = _ref2.url;
13132 var secondUrl = _ref3.url;
13133 return secondUrl.length - firstUrl.length;
13134 })[0];
13135 secondaryNavigationMarkup = React__default.createElement("div", {
13136 className: styles$1d.SecondaryNavigation
13137 }, React__default.createElement(Secondary, {
13138 expanded: showExpanded
13139 }, subNavigationItems.map(function (item) {
13140 var label = item.label,
13141 rest = tslib_1.__rest(item, ["label"]);
13142
13143 return React__default.createElement(Item$7, Object.assign({}, rest, {
13144 key: label,
13145 label: label,
13146 matches: item === longestMatch,
13147 onClick: onNavigationDismiss
13148 }));
13149 })));
13150 }
13151
13152 var className = classNames(styles$1d.ListItem, secondaryAction && styles$1d['ListItem-hasAction']);
13153 return React__default.createElement("li", {
13154 className: className
13155 }, React__default.createElement("div", {
13156 className: styles$1d.ItemWrapper
13157 }, React__default.createElement(UnstyledLink, {
13158 url: url,
13159 className: itemClassName,
13160 tabIndex: tabIndex,
13161 "aria-disabled": disabled,
13162 "aria-label": accessibilityLabel,
13163 onClick: getClickHandler(onClick)
13164 }, itemContentMarkup), secondaryActionMarkup), secondaryNavigationMarkup);
13165
13166 function getClickHandler(onClick) {
13167 return function (event) {
13168 var currentTarget = event.currentTarget;
13169
13170 if (currentTarget.getAttribute('href') === location) {
13171 event.preventDefault();
13172 }
13173
13174 if (subNavigationItems && subNavigationItems.length > 0 && isNavigationCollapsed) {
13175 event.preventDefault();
13176 setExpanded(!expanded);
13177 } else if (onNavigationDismiss) {
13178 onNavigationDismiss();
13179
13180 if (onClick && onClick !== onNavigationDismiss) {
13181 onClick();
13182 }
13183
13184 return;
13185 }
13186
13187 if (onClick) {
13188 onClick();
13189 }
13190 };
13191 }
13192}
13193function isNavigationItemActive(navigationItem, currentPath) {
13194 var matchState = matchStateForItem(navigationItem, currentPath);
13195 var matchingSubNavigationItems = navigationItem.subNavigationItems && navigationItem.subNavigationItems.filter(function (item) {
13196 var subMatchState = matchStateForItem(item, currentPath);
13197 return subMatchState === MatchState.MatchForced || subMatchState === MatchState.MatchUrl || subMatchState === MatchState.MatchPaths;
13198 });
13199 var childIsActive = matchingSubNavigationItems && matchingSubNavigationItems.length > 0;
13200 var selected = matchState === MatchState.MatchForced || matchState === MatchState.MatchUrl || matchState === MatchState.MatchPaths;
13201 return selected || childIsActive;
13202}
13203
13204function normalizePathname(pathname) {
13205 var barePathname = pathname.split('?')[0].split('#')[0];
13206 return barePathname.endsWith('/') ? barePathname : "".concat(barePathname, "/");
13207}
13208
13209function safeEqual(location, path) {
13210 return normalizePathname(location) === normalizePathname(path);
13211}
13212
13213function safeStartsWith(location, path) {
13214 return normalizePathname(location).startsWith(normalizePathname(path));
13215}
13216
13217function matchStateForItem(_ref4, location) {
13218 var url = _ref4.url,
13219 matches = _ref4.matches,
13220 exactMatch = _ref4.exactMatch,
13221 matchPaths = _ref4.matchPaths,
13222 excludePaths = _ref4.excludePaths;
13223
13224 if (url == null) {
13225 return MatchState.NoMatch;
13226 }
13227
13228 if (matches) {
13229 return MatchState.MatchForced;
13230 }
13231
13232 if (matches === false || excludePaths && excludePaths.some(function (path) {
13233 return safeStartsWith(location, path);
13234 })) {
13235 return MatchState.Excluded;
13236 }
13237
13238 if (matchPaths && matchPaths.some(function (path) {
13239 return safeStartsWith(location, path);
13240 })) {
13241 return MatchState.MatchPaths;
13242 }
13243
13244 var matchesUrl = exactMatch ? safeEqual(location, url) : safeStartsWith(location, url);
13245 return matchesUrl ? MatchState.MatchUrl : MatchState.NoMatch;
13246}
13247
13248var createAdditionalItemsId = other.createUniqueIDFactory('AdditionalItems');
13249var Section$5 =
13250/*#__PURE__*/
13251function (_React$Component) {
13252 _inherits(Section, _React$Component);
13253
13254 function Section() {
13255 var _this;
13256
13257 _classCallCheck(this, Section);
13258
13259 _this = _possibleConstructorReturn(this, _getPrototypeOf(Section).apply(this, arguments));
13260 _this.state = {
13261 expanded: false
13262 };
13263 _this.animationFrame = null;
13264
13265 _this.toggleViewAll = function () {
13266 _this.setState(function (_ref) {
13267 var expanded = _ref.expanded;
13268 return {
13269 expanded: !expanded
13270 };
13271 });
13272 };
13273
13274 return _this;
13275 }
13276
13277 _createClass(Section, [{
13278 key: "componentWillUnmount",
13279 value: function componentWillUnmount() {
13280 if (this.animationFrame) {
13281 cancelAnimationFrame(this.animationFrame);
13282 }
13283 }
13284 }, {
13285 key: "render",
13286 value: function render() {
13287 var _this2 = this;
13288
13289 var _this$props = this.props,
13290 title = _this$props.title,
13291 fill = _this$props.fill,
13292 action = _this$props.action,
13293 items = _this$props.items,
13294 rollup = _this$props.rollup,
13295 separator = _this$props.separator;
13296 var expanded = this.state.expanded;
13297 var className = classNames(styles$1d.Section, separator && styles$1d['Section-withSeparator'], fill && styles$1d['Section-fill']);
13298 var actionMarkup = action && React__default.createElement("button", {
13299 type: "button",
13300 className: styles$1d.Action,
13301 "aria-label": action.accessibilityLabel,
13302 onClick: action.onClick
13303 }, React__default.createElement(Icon, {
13304 source: action.icon
13305 }));
13306 var sectionHeadingMarkup = title && React__default.createElement("li", {
13307 className: styles$1d.SectionHeading
13308 }, React__default.createElement("span", {
13309 className: styles$1d.Text
13310 }, title), actionMarkup);
13311 var itemsMarkup = items.map(function (item) {
13312 var onClick = item.onClick,
13313 label = item.label,
13314 subNavigationItems = item.subNavigationItems,
13315 rest = tslib_1.__rest(item, ["onClick", "label", "subNavigationItems"]);
13316
13317 var hasSubNavItems = subNavigationItems != null && subNavigationItems.length > 0;
13318 return React__default.createElement(Item$7, Object.assign({}, rest, {
13319 key: label,
13320 label: label,
13321 subNavigationItems: subNavigationItems,
13322 onClick: _this2.handleClick(onClick, hasSubNavItems)
13323 }));
13324 });
13325 var toggleClassName = classNames(styles$1d.Item, styles$1d.RollupToggle);
13326 var ariaLabel = rollup && (expanded ? rollup.hide : rollup.view);
13327 var toggleRollup = rollup && items.length > rollup.after && React__default.createElement("div", {
13328 className: styles$1d.ListItem,
13329 key: "List Item"
13330 }, React__default.createElement("button", {
13331 type: "button",
13332 className: toggleClassName,
13333 onClick: this.toggleViewAll,
13334 "aria-label": ariaLabel
13335 }, React__default.createElement("span", {
13336 className: styles$1d.Icon
13337 }, React__default.createElement(Icon, {
13338 source: polarisIcons.HorizontalDotsMinor
13339 }))));
13340 var activeItemIndex = items.findIndex(function (item) {
13341 if (!rollup) {
13342 return false;
13343 }
13344
13345 return rollup.activePath === item.url || item.url && rollup.activePath.startsWith(item.url) || (item.subNavigationItems ? item.subNavigationItems.some(function (_ref2) {
13346 var itemUrl = _ref2.url;
13347 return rollup.activePath.startsWith(itemUrl);
13348 }) : false);
13349 });
13350 var sectionItems = rollup ? itemsMarkup.slice(0, rollup.after) : itemsMarkup;
13351 var additionalItems = rollup ? itemsMarkup.slice(rollup.after) : [];
13352
13353 if (rollup && activeItemIndex !== -1 && activeItemIndex > rollup.after - 1) {
13354 sectionItems.push.apply(sectionItems, _toConsumableArray(additionalItems.splice(activeItemIndex - rollup.after, 1)));
13355 }
13356
13357 var additionalItemsId = createAdditionalItemsId();
13358 var activeItemsMarkup = rollup && additionalItems.length > 0 && React__default.createElement("li", {
13359 className: styles$1d.RollupSection
13360 }, React__default.createElement(Collapsible, {
13361 id: additionalItemsId,
13362 open: expanded
13363 }, React__default.createElement("ul", {
13364 className: styles$1d.List
13365 }, additionalItems)), toggleRollup);
13366 return React__default.createElement("ul", {
13367 className: className
13368 }, sectionHeadingMarkup, sectionItems, activeItemsMarkup);
13369 }
13370 }, {
13371 key: "handleClick",
13372 value: function handleClick(onClick, hasSubNavItems) {
13373 var _this3 = this;
13374
13375 return function () {
13376 if (onClick) {
13377 onClick();
13378 }
13379
13380 if (_this3.animationFrame) {
13381 cancelAnimationFrame(_this3.animationFrame);
13382 }
13383
13384 if (!hasSubNavItems || !navigationBarCollapsed().matches) {
13385 _this3.animationFrame = requestAnimationFrame(function () {
13386 return _this3.setState({
13387 expanded: false
13388 });
13389 });
13390 }
13391 };
13392 }
13393 }]);
13394
13395 return Section;
13396}(React__default.Component);
13397
13398var Navigation$1 =
13399/*#__PURE__*/
13400function (_React$Component) {
13401 _inherits(Navigation, _React$Component);
13402
13403 function Navigation() {
13404 _classCallCheck(this, Navigation);
13405
13406 return _possibleConstructorReturn(this, _getPrototypeOf(Navigation).apply(this, arguments));
13407 }
13408
13409 _createClass(Navigation, [{
13410 key: "render",
13411 value: function render() {
13412 var _this$props = this.props,
13413 children = _this$props.children,
13414 contextControl = _this$props.contextControl,
13415 location = _this$props.location,
13416 onDismiss = _this$props.onDismiss;
13417 var contextControlMarkup = contextControl && React__default.createElement("div", {
13418 className: styles$1d.ContextControl
13419 }, contextControl);
13420 var context = {
13421 location,
13422 onNavigationDismiss: onDismiss
13423 };
13424 return React__default.createElement(NavigationContext.Provider, {
13425 value: context
13426 }, React__default.createElement(WithinContentContext.Provider, {
13427 value: true
13428 }, React__default.createElement("nav", {
13429 className: styles$1d.Navigation
13430 }, contextControlMarkup, React__default.createElement(Scrollable, {
13431 className: styles$1d.PrimaryNavigation
13432 }, children))));
13433 }
13434 }]);
13435
13436 return Navigation;
13437}(React__default.Component);
13438Navigation$1.Item = Item$7;
13439Navigation$1.Section = Section$5;
13440
13441var EditableTarget;
13442
13443(function (EditableTarget) {
13444 EditableTarget["Input"] = "INPUT";
13445 EditableTarget["Textarea"] = "TEXTAREA";
13446 EditableTarget["Select"] = "SELECT";
13447 EditableTarget["ContentEditable"] = "contenteditable";
13448})(EditableTarget || (EditableTarget = {}));
13449
13450function isInputFocused() {
13451 if (document == null || document.activeElement == null) {
13452 return false;
13453 }
13454
13455 var tagName = document.activeElement.tagName;
13456 return tagName === EditableTarget.Input || tagName === EditableTarget.Textarea || tagName === EditableTarget.Select || document.activeElement.hasAttribute(EditableTarget.ContentEditable);
13457}
13458
13459var styles$1e = {
13460 "Tooltip": "Polaris-Tooltip",
13461 "measuring": "Polaris-Tooltip--measuring",
13462 "positionedAbove": "Polaris-Tooltip--positionedAbove",
13463 "light": "Polaris-Tooltip--light",
13464 "Wrapper": "Polaris-Tooltip__Wrapper",
13465 "Content": "Polaris-Tooltip__Content",
13466 "Label": "Polaris-Tooltip__Label"
13467};
13468
13469var TooltipOverlay =
13470/*#__PURE__*/
13471function (_React$PureComponent) {
13472 _inherits(TooltipOverlay, _React$PureComponent);
13473
13474 function TooltipOverlay() {
13475 var _this;
13476
13477 _classCallCheck(this, TooltipOverlay);
13478
13479 _this = _possibleConstructorReturn(this, _getPrototypeOf(TooltipOverlay).apply(this, arguments));
13480
13481 _this.renderOverlay = function () {
13482 var _this$props = _this.props,
13483 active = _this$props.active,
13484 activator = _this$props.activator,
13485 _this$props$preferred = _this$props.preferredPosition,
13486 preferredPosition = _this$props$preferred === void 0 ? 'below' : _this$props$preferred;
13487 return React__default.createElement(PositionedOverlay, {
13488 active: active,
13489 activator: activator,
13490 preferredPosition: preferredPosition,
13491 render: _this.renderTooltip
13492 });
13493 };
13494
13495 _this.renderTooltip = function (overlayDetails) {
13496 var measuring = overlayDetails.measuring,
13497 desiredHeight = overlayDetails.desiredHeight,
13498 positioning = overlayDetails.positioning;
13499 var _this$props2 = _this.props,
13500 id = _this$props2.id,
13501 children = _this$props2.children,
13502 light = _this$props2.light;
13503 var containerClassName = classNames(styles$1e.Tooltip, light && styles$1e.light, measuring && styles$1e.measuring, positioning === 'above' && styles$1e.positionedAbove);
13504 var contentStyles = measuring ? undefined : {
13505 minHeight: desiredHeight
13506 };
13507 return React__default.createElement("div", Object.assign({
13508 className: containerClassName
13509 }, layer.props), React__default.createElement("div", {
13510 className: styles$1e.Wrapper
13511 }, React__default.createElement("div", {
13512 id: id,
13513 role: "tooltip",
13514 className: styles$1e.Content,
13515 style: contentStyles
13516 }, children)));
13517 };
13518
13519 return _this;
13520 }
13521
13522 _createClass(TooltipOverlay, [{
13523 key: "render",
13524 value: function render() {
13525 var markup = this.props.active ? this.renderOverlay() : null;
13526 return markup;
13527 }
13528 }]);
13529
13530 return TooltipOverlay;
13531}(React__default.PureComponent);
13532
13533var getUniqueID$2 = other.createUniqueIDFactory('TooltipContent');
13534var Tooltip =
13535/*#__PURE__*/
13536function (_React$PureComponent) {
13537 _inherits(Tooltip, _React$PureComponent);
13538
13539 function Tooltip() {
13540 var _this;
13541
13542 _classCallCheck(this, Tooltip);
13543
13544 _this = _possibleConstructorReturn(this, _getPrototypeOf(Tooltip).apply(this, arguments));
13545 _this.state = {
13546 active: Boolean(_this.props.active),
13547 activatorNode: null
13548 };
13549 _this.id = getUniqueID$2();
13550 _this.mouseEntered = false;
13551
13552 _this.setActivator = function (node) {
13553 if (node == null) {
13554 _this.activatorContainer = null;
13555
13556 _this.setState({
13557 activatorNode: null
13558 });
13559
13560 return;
13561 }
13562
13563 _this.setState({
13564 activatorNode: node.firstElementChild
13565 });
13566
13567 _this.activatorContainer = node;
13568 };
13569
13570 _this.handleFocus = function () {
13571 _this.setState({
13572 active: true
13573 });
13574 };
13575
13576 _this.handleBlur = function () {
13577 _this.setState({
13578 active: false
13579 });
13580 };
13581
13582 _this.handleMouseEnter = function () {
13583 _this.mouseEntered = true;
13584
13585 _this.setState({
13586 active: true
13587 });
13588 };
13589
13590 _this.handleMouseLeave = function () {
13591 _this.mouseEntered = false;
13592
13593 _this.setState({
13594 active: false
13595 });
13596 }; // https://github.com/facebook/react/issues/10109
13597 // Mouseenter event not triggered when cursor moves from disabled button
13598
13599
13600 _this.handleMouseEnterFix = function () {
13601 !_this.mouseEntered && _this.handleMouseEnter();
13602 };
13603
13604 return _this;
13605 }
13606
13607 _createClass(Tooltip, [{
13608 key: "componentDidMount",
13609 value: function componentDidMount() {
13610 this.setAccessibilityAttributes();
13611 }
13612 }, {
13613 key: "componentDidUpdate",
13614 value: function componentDidUpdate() {
13615 this.setAccessibilityAttributes();
13616 }
13617 }, {
13618 key: "render",
13619 value: function render() {
13620 var id = this.id;
13621 var _this$props = this.props,
13622 children = _this$props.children,
13623 content = _this$props.content,
13624 light = _this$props.light,
13625 _this$props$preferred = _this$props.preferredPosition,
13626 preferredPosition = _this$props$preferred === void 0 ? 'below' : _this$props$preferred,
13627 _this$props$activator = _this$props.activatorWrapper,
13628 WrapperComponent = _this$props$activator === void 0 ? 'span' : _this$props$activator;
13629 var _this$state = this.state,
13630 active = _this$state.active,
13631 activatorNode = _this$state.activatorNode;
13632 var portal = activatorNode ? React__default.createElement(Portal, {
13633 idPrefix: "tooltip"
13634 }, React__default.createElement(TooltipOverlay, {
13635 id: id,
13636 preferredPosition: preferredPosition,
13637 activator: activatorNode,
13638 active: active,
13639 onClose: noop$9,
13640 light: light
13641 }, React__default.createElement("div", {
13642 className: styles$1e.Label
13643 }, content))) : null;
13644 return React__default.createElement(WrapperComponent, {
13645 onFocus: this.handleFocus,
13646 onBlur: this.handleBlur,
13647 onMouseLeave: this.handleMouseLeave,
13648 onMouseOver: this.handleMouseEnterFix,
13649 ref: this.setActivator
13650 }, children, portal);
13651 }
13652 }, {
13653 key: "setAccessibilityAttributes",
13654 value: function setAccessibilityAttributes() {
13655 var activatorContainer = this.activatorContainer,
13656 id = this.id;
13657
13658 if (activatorContainer == null) {
13659 return;
13660 }
13661
13662 var firstFocusable = focus.findFirstFocusableNode(activatorContainer);
13663 var accessibilityNode = firstFocusable || activatorContainer;
13664 accessibilityNode.tabIndex = 0;
13665 accessibilityNode.setAttribute('aria-describedby', id);
13666 }
13667 }]);
13668
13669 return Tooltip;
13670}(React__default.PureComponent);
13671
13672function noop$9() {}
13673
13674var styles$1f = {
13675 "Pagination": "Polaris-Pagination",
13676 "plain": "Polaris-Pagination--plain",
13677 "Button": "Polaris-Pagination__Button",
13678 "PreviousButton": "Polaris-Pagination__PreviousButton",
13679 "NextButton": "Polaris-Pagination__NextButton",
13680 "Label": "Polaris-Pagination__Label"
13681};
13682
13683function Pagination(_ref) {
13684 var hasNext = _ref.hasNext,
13685 hasPrevious = _ref.hasPrevious,
13686 nextURL = _ref.nextURL,
13687 previousURL = _ref.previousURL,
13688 onNext = _ref.onNext,
13689 onPrevious = _ref.onPrevious,
13690 nextTooltip = _ref.nextTooltip,
13691 previousTooltip = _ref.previousTooltip,
13692 nextKeys = _ref.nextKeys,
13693 previousKeys = _ref.previousKeys,
13694 plain = _ref.plain,
13695 accessibilityLabel = _ref.accessibilityLabel,
13696 label = _ref.label;
13697 var i18n = useI18n();
13698 var node = React__default.createRef();
13699 var navLabel = accessibilityLabel || i18n.translate('Polaris.Pagination.pagination');
13700 var className = classNames(styles$1f.Pagination, plain && styles$1f.plain);
13701 var previousClassName = classNames(styles$1f.Button, !label && styles$1f.PreviousButton);
13702 var nextClassName = classNames(styles$1f.Button, !label && styles$1f.NextButton);
13703 var previousButton = previousURL ? React__default.createElement(UnstyledLink, {
13704 className: previousClassName,
13705 url: previousURL,
13706 onMouseUp: handleMouseUpByBlurring,
13707 "aria-label": i18n.translate('Polaris.Pagination.previous'),
13708 id: "previousURL"
13709 }, React__default.createElement(Icon, {
13710 source: polarisIcons.ArrowLeftMinor
13711 })) : React__default.createElement("button", {
13712 onClick: onPrevious,
13713 type: "button",
13714 onMouseUp: handleMouseUpByBlurring,
13715 className: previousClassName,
13716 "aria-label": i18n.translate('Polaris.Pagination.previous'),
13717 disabled: !hasPrevious
13718 }, React__default.createElement(Icon, {
13719 source: polarisIcons.ArrowLeftMinor
13720 }));
13721 var nextButton = nextURL ? React__default.createElement(UnstyledLink, {
13722 className: nextClassName,
13723 url: nextURL,
13724 onMouseUp: handleMouseUpByBlurring,
13725 "aria-label": i18n.translate('Polaris.Pagination.next'),
13726 id: "nextURL"
13727 }, React__default.createElement(Icon, {
13728 source: polarisIcons.ArrowRightMinor
13729 })) : React__default.createElement("button", {
13730 onClick: onNext,
13731 type: "button",
13732 onMouseUp: handleMouseUpByBlurring,
13733 className: nextClassName,
13734 "aria-label": i18n.translate('Polaris.Pagination.next'),
13735 disabled: !hasNext
13736 }, React__default.createElement(Icon, {
13737 source: polarisIcons.ArrowRightMinor
13738 }));
13739 var constructedPrevious = previousTooltip && hasPrevious ? React__default.createElement(Tooltip, {
13740 content: previousTooltip
13741 }, previousButton) : previousButton;
13742 var constructedNext = nextTooltip && hasNext ? React__default.createElement(Tooltip, {
13743 content: nextTooltip
13744 }, nextButton) : nextButton;
13745 var previousButtonEvents = previousKeys && (previousURL || onPrevious) && hasPrevious && previousKeys.map(function (key) {
13746 return React__default.createElement(KeypressListener, {
13747 key: key,
13748 keyCode: key,
13749 handler: previousURL ? handleCallback(clickPaginationLink('previousURL', node)) : handleCallback(onPrevious)
13750 });
13751 });
13752 var nextButtonEvents = nextKeys && (nextURL || onNext) && hasNext && nextKeys.map(function (key) {
13753 return React__default.createElement(KeypressListener, {
13754 key: key,
13755 keyCode: key,
13756 handler: nextURL ? handleCallback(clickPaginationLink('nextURL', node)) : handleCallback(onNext)
13757 });
13758 });
13759 var labelTextMarkup = hasNext && hasPrevious ? React__default.createElement(TextStyle, null, label) : React__default.createElement(TextStyle, {
13760 variation: "subdued"
13761 }, label);
13762 var labelMarkup = label ? React__default.createElement("div", {
13763 className: styles$1f.Label,
13764 "aria-live": "polite"
13765 }, labelTextMarkup) : null;
13766 return React__default.createElement("nav", {
13767 className: className,
13768 "aria-label": navLabel,
13769 ref: node
13770 }, previousButtonEvents, constructedPrevious, labelMarkup, nextButtonEvents, constructedNext);
13771}
13772
13773function clickPaginationLink(id, node) {
13774 return function () {
13775 if (node.current == null) {
13776 return;
13777 }
13778
13779 var link = node.current.querySelector("#".concat(id));
13780
13781 if (link) {
13782 link.click();
13783 }
13784 };
13785}
13786
13787function handleCallback(fn) {
13788 return function () {
13789 if (isInputFocused()) {
13790 return;
13791 }
13792
13793 fn();
13794 };
13795}
13796
13797var styles$1g = {
13798 "Title": "Polaris-Header-Title",
13799 "SubTitle": "Polaris-Header-Title__SubTitle",
13800 "hasThumbnail": "Polaris-Header-Title--hasThumbnail",
13801 "TitleAndSubtitleWrapper": "Polaris-Header-Title__TitleAndSubtitleWrapper",
13802 "TitleWithMetadataWrapper": "Polaris-Header-Title__TitleWithMetadataWrapper",
13803 "TitleMetadata": "Polaris-Header-Title__TitleMetadata"
13804};
13805
13806function Title(_ref) {
13807 var title = _ref.title,
13808 subtitle = _ref.subtitle,
13809 titleMetadata = _ref.titleMetadata,
13810 thumbnail = _ref.thumbnail;
13811 var titleMarkup = title ? React.createElement("div", {
13812 className: styles$1g.Title
13813 }, React.createElement(DisplayText, {
13814 size: "large",
13815 element: "h1"
13816 }, title)) : null;
13817 var titleMetadataMarkup = titleMetadata ? React.createElement("div", {
13818 className: styles$1g.TitleMetadata
13819 }, titleMetadata) : null;
13820 var wrappedTitleMarkup = titleMetadata ? React.createElement("div", {
13821 className: styles$1g.TitleWithMetadataWrapper
13822 }, titleMarkup, titleMetadataMarkup) : titleMarkup;
13823 var subtitleMarkup = subtitle ? React.createElement("div", {
13824 className: styles$1g.SubTitle
13825 }, React.createElement("p", null, subtitle)) : null;
13826 var thumbnailMarkup = thumbnail ? React.createElement("div", null, thumbnail) : null;
13827 var pageTitleClassName = thumbnail ? classNames(styles$1g.hasThumbnail) : undefined;
13828 return React.createElement("div", {
13829 className: pageTitleClassName
13830 }, thumbnailMarkup, React.createElement("div", {
13831 className: styles$1g.TitleAndSubtitleWrapper
13832 }, wrappedTitleMarkup, subtitleMarkup));
13833}
13834
13835var styles$1h = {
13836 "Header": "Polaris-Page-Header",
13837 "separator": "Polaris-Page-Header--separator",
13838 "titleHidden": "Polaris-Page-Header--titleHidden",
13839 "Navigation": "Polaris-Page-Header__Navigation",
13840 "hasActionMenu": "Polaris-Page-Header--hasActionMenu",
13841 "mobileView": "Polaris-Page-Header--mobileView",
13842 "BreadcrumbWrapper": "Polaris-Page-Header__BreadcrumbWrapper",
13843 "PaginationWrapper": "Polaris-Page-Header__PaginationWrapper",
13844 "MainContent": "Polaris-Page-Header__MainContent",
13845 "TitleActionMenuWrapper": "Polaris-Page-Header__TitleActionMenuWrapper",
13846 "hasNavigation": "Polaris-Page-Header--hasNavigation",
13847 "PrimaryActionWrapper": "Polaris-Page-Header__PrimaryActionWrapper",
13848 "ActionMenuWrapper": "Polaris-Page-Header__ActionMenuWrapper"
13849};
13850
13851function Header$2(_ref) {
13852 var title = _ref.title,
13853 subtitle = _ref.subtitle,
13854 titleMetadata = _ref.titleMetadata,
13855 thumbnail = _ref.thumbnail,
13856 _ref$titleHidden = _ref.titleHidden,
13857 titleHidden = _ref$titleHidden === void 0 ? false : _ref$titleHidden,
13858 separator = _ref.separator,
13859 primaryAction = _ref.primaryAction,
13860 pagination = _ref.pagination,
13861 _ref$breadcrumbs = _ref.breadcrumbs,
13862 breadcrumbs = _ref$breadcrumbs === void 0 ? [] : _ref$breadcrumbs,
13863 _ref$secondaryActions = _ref.secondaryActions,
13864 secondaryActions = _ref$secondaryActions === void 0 ? [] : _ref$secondaryActions,
13865 _ref$actionGroups = _ref.actionGroups,
13866 actionGroups = _ref$actionGroups === void 0 ? [] : _ref$actionGroups;
13867
13868 var _useMediaQuery = useMediaQuery(),
13869 isNavigationCollapsed = _useMediaQuery.isNavigationCollapsed;
13870
13871 var breadcrumbMarkup = breadcrumbs.length > 0 ? React__default.createElement("div", {
13872 className: styles$1h.BreadcrumbWrapper
13873 }, React__default.createElement(Breadcrumbs, {
13874 breadcrumbs: breadcrumbs
13875 })) : null;
13876 var paginationMarkup = pagination && !isNavigationCollapsed ? React__default.createElement("div", {
13877 className: styles$1h.PaginationWrapper
13878 }, React__default.createElement(Pagination, Object.assign({}, pagination, {
13879 plain: true
13880 }))) : null;
13881 var navigationMarkup = breadcrumbMarkup || paginationMarkup ? React__default.createElement("div", {
13882 className: styles$1h.Navigation
13883 }, breadcrumbMarkup, paginationMarkup) : null;
13884 var pageTitleMarkup = React__default.createElement(Title, {
13885 title: title,
13886 subtitle: subtitle,
13887 titleMetadata: titleMetadata,
13888 thumbnail: thumbnail
13889 });
13890 var primary = primaryAction && (primaryAction.primary === undefined ? true : primaryAction.primary);
13891 var primaryActionMarkup = primaryAction ? React__default.createElement("div", {
13892 className: styles$1h.PrimaryActionWrapper
13893 }, buttonsFrom(primaryAction, {
13894 primary
13895 })) : null;
13896 var actionMenuMarkup = secondaryActions.length > 0 || hasGroupsWithActions(actionGroups) ? React__default.createElement("div", {
13897 className: styles$1h.ActionMenuWrapper
13898 }, React__default.createElement(ActionMenu, {
13899 actions: secondaryActions,
13900 groups: actionGroups,
13901 rollup: isNavigationCollapsed
13902 })) : null;
13903 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);
13904 return React__default.createElement("div", {
13905 className: headerClassNames
13906 }, navigationMarkup, React__default.createElement("div", {
13907 className: styles$1h.MainContent
13908 }, React__default.createElement("div", {
13909 className: styles$1h.TitleActionMenuWrapper
13910 }, pageTitleMarkup, actionMenuMarkup), primaryActionMarkup));
13911}
13912
13913var styles$1i = {
13914 "Page": "Polaris-Page",
13915 "fullWidth": "Polaris-Page--fullWidth",
13916 "narrowWidth": "Polaris-Page--narrowWidth",
13917 "Content": "Polaris-Page__Content"
13918};
13919
13920var APP_BRIDGE_PROPS$1 = ['title', 'breadcrumbs', 'secondaryActions', 'actionGroups', 'primaryAction'];
13921
13922var Page =
13923/*#__PURE__*/
13924function (_React$PureComponent) {
13925 _inherits(Page, _React$PureComponent);
13926
13927 function Page() {
13928 _classCallCheck(this, Page);
13929
13930 return _possibleConstructorReturn(this, _getPrototypeOf(Page).apply(this, arguments));
13931 }
13932
13933 _createClass(Page, [{
13934 key: "componentDidMount",
13935 value: function componentDidMount() {
13936 if (this.delegateToAppbridge === false || !this.props.polaris.appBridge) {
13937 return;
13938 }
13939
13940 var transformedProps = this.transformProps();
13941 if (!transformedProps) return; // eslint-disable-next-line no-console
13942
13943 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');
13944 this.titlebar = actions.TitleBar.create(this.props.polaris.appBridge, transformedProps);
13945 }
13946 }, {
13947 key: "componentDidUpdate",
13948 value: function componentDidUpdate(prevProps) {
13949 if (this.titlebar == null || this.delegateToAppbridge === false) {
13950 return;
13951 }
13952
13953 var prevAppBridgeProps = pick(prevProps, APP_BRIDGE_PROPS$1);
13954 var currentAppBridgeProps = pick(this.props, APP_BRIDGE_PROPS$1);
13955
13956 if (!isEqual(prevAppBridgeProps, currentAppBridgeProps)) {
13957 var transformedProps = this.transformProps();
13958 if (!transformedProps) return;
13959 this.titlebar.unsubscribe();
13960 this.titlebar.set(transformedProps);
13961 }
13962 }
13963 }, {
13964 key: "componentWillUnmount",
13965 value: function componentWillUnmount() {
13966 if (this.titlebar == null || this.delegateToAppbridge === false) {
13967 return;
13968 }
13969
13970 this.titlebar.unsubscribe();
13971 }
13972 }, {
13973 key: "render",
13974 value: function render() {
13975 var _a = this.props,
13976 children = _a.children,
13977 fullWidth = _a.fullWidth,
13978 narrowWidth = _a.narrowWidth,
13979 singleColumn = _a.singleColumn,
13980 rest = tslib_1.__rest(_a, ["children", "fullWidth", "narrowWidth", "singleColumn"]);
13981
13982 if (singleColumn) {
13983 // eslint-disable-next-line no-console
13984 console.warn('Deprecation: The singleColumn prop has been renamed to narrowWidth to better represents its use and will be removed in v5.0.');
13985 }
13986
13987 var className = classNames(styles$1i.Page, fullWidth && styles$1i.fullWidth, (narrowWidth || singleColumn) && styles$1i.narrowWidth);
13988 var headerMarkup = this.delegateToAppbridge || this.hasHeaderContent() === false ? null : React__default.createElement(Header$2, rest);
13989 return React__default.createElement("div", {
13990 className: className
13991 }, headerMarkup, React__default.createElement("div", {
13992 className: styles$1i.Content
13993 }, children));
13994 }
13995 }, {
13996 key: "hasHeaderContent",
13997 value: function hasHeaderContent() {
13998 var _this$props = this.props,
13999 title = _this$props.title,
14000 primaryAction = _this$props.primaryAction,
14001 secondaryActions = _this$props.secondaryActions,
14002 actionGroups = _this$props.actionGroups,
14003 breadcrumbs = _this$props.breadcrumbs;
14004 return title != null && title !== '' || primaryAction != null || secondaryActions != null && secondaryActions.length > 0 || actionGroups != null && actionGroups.length > 0 || breadcrumbs != null && breadcrumbs.length > 0;
14005 }
14006 }, {
14007 key: "transformProps",
14008 value: function transformProps() {
14009 var appBridge = this.props.polaris.appBridge;
14010 if (!appBridge) return;
14011 var _this$props2 = this.props,
14012 title = _this$props2.title,
14013 primaryAction = _this$props2.primaryAction,
14014 secondaryActions = _this$props2.secondaryActions,
14015 actionGroups = _this$props2.actionGroups;
14016 return {
14017 title,
14018 buttons: transformActions(appBridge, {
14019 primaryAction,
14020 secondaryActions,
14021 actionGroups
14022 }),
14023 breadcrumbs: this.transformBreadcrumbs()
14024 };
14025 }
14026 }, {
14027 key: "transformBreadcrumbs",
14028 value: function transformBreadcrumbs() {
14029 var appBridge = this.props.polaris.appBridge;
14030 if (!appBridge) return;
14031 var breadcrumbs = this.props.breadcrumbs;
14032
14033 if (breadcrumbs != null && breadcrumbs.length > 0) {
14034 var breadcrumb = breadcrumbs[breadcrumbs.length - 1];
14035 var button = actions.Button.create(appBridge, {
14036 label: breadcrumb.content || ''
14037 });
14038 var callback = !('url' in breadcrumb) ? breadcrumb.onAction : generateRedirect(appBridge, breadcrumb.url, breadcrumb.target);
14039
14040 if (callback != null) {
14041 button.subscribe(actions.Button.Action.CLICK, callback);
14042 }
14043
14044 return button;
14045 } else {
14046 return undefined;
14047 }
14048 }
14049 }, {
14050 key: "delegateToAppbridge",
14051 get: function get() {
14052 var _this$props3 = this.props,
14053 appBridge = _this$props3.polaris.appBridge,
14054 _this$props3$forceRen = _this$props3.forceRender,
14055 forceRender = _this$props3$forceRen === void 0 ? false : _this$props3$forceRen;
14056 return appBridge != null && forceRender === false;
14057 }
14058 }]);
14059
14060 return Page;
14061}(React__default.PureComponent); // Use named export once withAppProvider is refactored away
14062// eslint-disable-next-line import/no-default-export
14063
14064
14065var Page$1 = withAppProvider()(Page);
14066
14067var styles$1j = {
14068 "PageActions": "Polaris-PageActions"
14069};
14070
14071function PageActions(_ref) {
14072 var primaryAction = _ref.primaryAction,
14073 secondaryActions = _ref.secondaryActions;
14074 var primaryActionMarkup = primaryAction ? buttonsFrom(primaryAction, {
14075 primary: true
14076 }) : null;
14077 var secondaryActionsMarkup = secondaryActions ? React__default.createElement(ButtonGroup, null, buttonsFrom(secondaryActions)) : null;
14078 var distribution = secondaryActionsMarkup ? 'equalSpacing' : 'trailing';
14079 return React__default.createElement("div", {
14080 className: styles$1j.PageActions
14081 }, React__default.createElement(Stack, {
14082 distribution: distribution,
14083 spacing: "tight"
14084 }, secondaryActionsMarkup, primaryActionMarkup));
14085}
14086
14087var defaultMediaQuery = {
14088 isNavigationCollapsed: false
14089};
14090function PolarisTestProvider(_ref) {
14091 var strict = _ref.strict,
14092 children = _ref.children,
14093 i18n = _ref.i18n,
14094 appBridge = _ref.appBridge,
14095 link = _ref.link,
14096 _ref$theme = _ref.theme,
14097 theme = _ref$theme === void 0 ? {} : _ref$theme,
14098 mediaQuery = _ref.mediaQuery,
14099 _ref$features = _ref.features,
14100 features = _ref$features === void 0 ? {} : _ref$features,
14101 frame = _ref.frame;
14102 var Wrapper = strict ? React__default.StrictMode : React__default.Fragment;
14103 var intl = new I18n(i18n || {});
14104 var scrollLockManager = new ScrollLockManager();
14105 var stickyManager = new StickyManager();
14106 var uniqueIdFactory = new UniqueIdFactory(globalIdGeneratorFactory); // This typing is odd, but as appBridge is deprecated and going away in v5
14107 // I'm not that worried about it
14108
14109 var appBridgeApp = appBridge;
14110 var _features$unstableGlo = features.unstableGlobalTheming,
14111 unstableGlobalTheming = _features$unstableGlo === void 0 ? false : _features$unstableGlo;
14112 var customProperties = unstableGlobalTheming ? buildCustomProperties(theme, unstableGlobalTheming) : undefined;
14113 var mergedTheme = buildThemeContext(theme, customProperties);
14114 var mergedFrame = createFrameContext(frame);
14115 var mergedMediaQuery = merge(defaultMediaQuery, mediaQuery);
14116 return React__default.createElement(Wrapper, null, React__default.createElement(FeaturesContext.Provider, {
14117 value: features
14118 }, React__default.createElement(I18nContext.Provider, {
14119 value: intl
14120 }, React__default.createElement(ScrollLockManagerContext.Provider, {
14121 value: scrollLockManager
14122 }, React__default.createElement(StickyManagerContext.Provider, {
14123 value: stickyManager
14124 }, React__default.createElement(UniqueIdFactoryContext.Provider, {
14125 value: uniqueIdFactory
14126 }, React__default.createElement(AppBridgeContext.Provider, {
14127 value: appBridgeApp
14128 }, React__default.createElement(LinkContext.Provider, {
14129 value: link
14130 }, React__default.createElement(ThemeContext.Provider, {
14131 value: mergedTheme
14132 }, React__default.createElement(MediaQueryContext.Provider, {
14133 value: mergedMediaQuery
14134 }, React__default.createElement(FrameContext.Provider, {
14135 value: mergedFrame
14136 }, children)))))))))));
14137}
14138
14139function noop$a() {}
14140
14141function createFrameContext() {
14142 var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
14143 _ref2$showToast = _ref2.showToast,
14144 showToast = _ref2$showToast === void 0 ? noop$a : _ref2$showToast,
14145 _ref2$hideToast = _ref2.hideToast,
14146 hideToast = _ref2$hideToast === void 0 ? noop$a : _ref2$hideToast,
14147 _ref2$setContextualSa = _ref2.setContextualSaveBar,
14148 setContextualSaveBar = _ref2$setContextualSa === void 0 ? noop$a : _ref2$setContextualSa,
14149 _ref2$removeContextua = _ref2.removeContextualSaveBar,
14150 removeContextualSaveBar = _ref2$removeContextua === void 0 ? noop$a : _ref2$removeContextua,
14151 _ref2$startLoading = _ref2.startLoading,
14152 startLoading = _ref2$startLoading === void 0 ? noop$a : _ref2$startLoading,
14153 _ref2$stopLoading = _ref2.stopLoading,
14154 stopLoading = _ref2$stopLoading === void 0 ? noop$a : _ref2$stopLoading;
14155
14156 return {
14157 showToast,
14158 hideToast,
14159 setContextualSaveBar,
14160 removeContextualSaveBar,
14161 startLoading,
14162 stopLoading
14163 };
14164}
14165
14166var styles$1k = {
14167 "ProgressBar": "Polaris-ProgressBar",
14168 "sizeSmall": "Polaris-ProgressBar--sizeSmall",
14169 "sizeMedium": "Polaris-ProgressBar--sizeMedium",
14170 "sizeLarge": "Polaris-ProgressBar--sizeLarge",
14171 "Indicator": "Polaris-ProgressBar__Indicator",
14172 "fillup": "Polaris-ProgressBar--fillup",
14173 "Progress": "Polaris-ProgressBar__Progress",
14174 "Label": "Polaris-ProgressBar__Label"
14175};
14176
14177function ProgressBar(_ref) {
14178 var _ref$progress = _ref.progress,
14179 progress = _ref$progress === void 0 ? 0 : _ref$progress,
14180 _ref$size = _ref.size,
14181 size = _ref$size === void 0 ? 'medium' : _ref$size;
14182 var i18n = useI18n();
14183 var className = classNames(styles$1k.ProgressBar, size && styles$1k[variationName('size', size)]);
14184 var warningMessage = i18n.translate(progress < 0 ? 'Polaris.ProgressBar.negativeWarningMessage' : 'Polaris.ProgressBar.exceedWarningMessage', {
14185 progress
14186 });
14187 var parsedProgress = parseProgress(progress, warningMessage);
14188 return React__default.createElement("div", {
14189 className: className
14190 }, React__default.createElement("progress", {
14191 className: styles$1k.Progress,
14192 value: parsedProgress,
14193 max: "100"
14194 }), React__default.createElement("div", {
14195 className: styles$1k.Indicator,
14196 style: {
14197 width: "".concat(parsedProgress, "%")
14198 }
14199 }, React__default.createElement("span", {
14200 className: styles$1k.Label
14201 }, parsedProgress, "%")));
14202}
14203
14204function parseProgress(progress, warningMessage) {
14205 var progressWidth;
14206
14207 if (progress < 0) {
14208 if (process.env.NODE_ENV === 'development') {
14209 // eslint-disable-next-line no-console
14210 console.warn(warningMessage);
14211 }
14212
14213 progressWidth = 0;
14214 } else if (progress > 100) {
14215 if (process.env.NODE_ENV === 'development') {
14216 // eslint-disable-next-line no-console
14217 console.warn(warningMessage);
14218 }
14219
14220 progressWidth = 100;
14221 } else {
14222 progressWidth = progress;
14223 }
14224
14225 return progressWidth;
14226}
14227
14228function invertNumber(number) {
14229 if (Math.sign(number) === 1) {
14230 return -Math.abs(number);
14231 } else if (Math.sign(number) === -1) {
14232 return Math.abs(number);
14233 } else {
14234 return 0;
14235 }
14236}
14237
14238var CSS_VAR_PREFIX = '--Polaris-RangeSlider-';
14239var RangeSliderDefault;
14240
14241(function (RangeSliderDefault) {
14242 RangeSliderDefault[RangeSliderDefault["Min"] = 0] = "Min";
14243 RangeSliderDefault[RangeSliderDefault["Max"] = 100] = "Max";
14244 RangeSliderDefault[RangeSliderDefault["Step"] = 1] = "Step";
14245})(RangeSliderDefault || (RangeSliderDefault = {}));
14246
14247var styles$1l = {
14248 "Wrapper": "Polaris-RangeSlider-DualThumb__Wrapper",
14249 "TrackWrapper": "Polaris-RangeSlider-DualThumb__TrackWrapper",
14250 "disabled": "Polaris-RangeSlider-DualThumb--disabled",
14251 "Track": "Polaris-RangeSlider-DualThumb__Track",
14252 "error": "Polaris-RangeSlider-DualThumb--error",
14253 "Thumbs": "Polaris-RangeSlider-DualThumb__Thumbs",
14254 "Prefix": "Polaris-RangeSlider-DualThumb__Prefix",
14255 "Suffix": "Polaris-RangeSlider-DualThumb__Suffix",
14256 "Output": "Polaris-RangeSlider-DualThumb__Output",
14257 "OutputBubble": "Polaris-RangeSlider-DualThumb__OutputBubble",
14258 "OutputText": "Polaris-RangeSlider-DualThumb__OutputText"
14259};
14260
14261var Control;
14262
14263(function (Control) {
14264 Control[Control["Lower"] = 0] = "Lower";
14265 Control[Control["Upper"] = 1] = "Upper";
14266})(Control || (Control = {}));
14267
14268var THUMB_SIZE = 24;
14269var DualThumb =
14270/*#__PURE__*/
14271function (_React$Component) {
14272 _inherits(DualThumb, _React$Component);
14273
14274 function DualThumb() {
14275 var _this;
14276
14277 _classCallCheck(this, DualThumb);
14278
14279 _this = _possibleConstructorReturn(this, _getPrototypeOf(DualThumb).apply(this, arguments));
14280 _this.state = {
14281 value: sanitizeValue(_this.props.value, _this.props.min, _this.props.max, _this.props.step),
14282 trackWidth: 0,
14283 trackLeft: 0
14284 };
14285 _this.track = React__default.createRef();
14286 _this.trackWrapper = React__default.createRef();
14287 _this.thumbLower = React__default.createRef();
14288 _this.thumbUpper = React__default.createRef();
14289 _this.setTrackPosition = debounce(function () {
14290 if (_this.track.current) {
14291 var _this$track$current$g = _this.track.current.getBoundingClientRect(),
14292 width = _this$track$current$g.width,
14293 left = _this$track$current$g.left;
14294
14295 var adjustedTrackWidth = width - THUMB_SIZE;
14296 var adjustedTrackLeft = left + THUMB_SIZE / 2;
14297
14298 _this.setState({
14299 trackWidth: adjustedTrackWidth,
14300 trackLeft: adjustedTrackLeft
14301 });
14302 }
14303 }, 40, {
14304 leading: true,
14305 trailing: true,
14306 maxWait: 40
14307 });
14308
14309 _this.handleMouseDownThumbLower = function (event) {
14310 if (event.button !== 0 || _this.props.disabled) return;
14311 registerMouseMoveHandler(_this.handleMouseMoveThumbLower);
14312 event.stopPropagation();
14313 };
14314
14315 _this.handleMouseMoveThumbLower = function (event) {
14316 var valueUpper = _this.state.value[1];
14317
14318 _this.setValue([_this.actualXPosition(event.clientX), valueUpper], Control.Upper);
14319 };
14320
14321 _this.handleTouchStartThumbLower = function (event) {
14322 if (_this.props.disabled) return;
14323 registerTouchMoveHandler(_this.handleTouchMoveThumbLower);
14324 event.stopPropagation();
14325 };
14326
14327 _this.handleTouchMoveThumbLower = function (event) {
14328 event.preventDefault();
14329 var valueUpper = _this.state.value[1];
14330
14331 _this.setValue([_this.actualXPosition(event.touches[0].clientX), valueUpper], Control.Upper);
14332 };
14333
14334 _this.handleMouseDownThumbUpper = function (event) {
14335 if (event.button !== 0 || _this.props.disabled) return;
14336 registerMouseMoveHandler(_this.handleMouseMoveThumbUpper);
14337 event.stopPropagation();
14338 };
14339
14340 _this.handleMouseMoveThumbUpper = function (event) {
14341 var valueLower = _this.state.value[0];
14342
14343 _this.setValue([valueLower, _this.actualXPosition(event.clientX)], Control.Lower);
14344 };
14345
14346 _this.handleTouchStartThumbUpper = function (event) {
14347 if (_this.props.disabled) return;
14348 registerTouchMoveHandler(_this.handleTouchMoveThumbUpper);
14349 event.stopPropagation();
14350 };
14351
14352 _this.handleTouchMoveThumbUpper = function (event) {
14353 event.preventDefault();
14354 var valueLower = _this.state.value[0];
14355
14356 _this.setValue([valueLower, _this.actualXPosition(event.touches[0].clientX)], Control.Lower);
14357 };
14358
14359 _this.handleKeypressLower = function (event) {
14360 if (_this.props.disabled) return;
14361
14362 var _assertThisInitialize = _assertThisInitialized(_this),
14363 incrementValueLower = _assertThisInitialize.incrementValueLower,
14364 decrementValueLower = _assertThisInitialize.decrementValueLower;
14365
14366 var handlerMap = {
14367 [exports.Key.UpArrow]: incrementValueLower,
14368 [exports.Key.RightArrow]: incrementValueLower,
14369 [exports.Key.DownArrow]: decrementValueLower,
14370 [exports.Key.LeftArrow]: decrementValueLower
14371 };
14372 var handler = handlerMap[event.keyCode];
14373
14374 if (handler != null) {
14375 event.preventDefault();
14376 event.stopPropagation();
14377 handler();
14378 }
14379 };
14380
14381 _this.handleKeypressUpper = function (event) {
14382 if (_this.props.disabled) return;
14383
14384 var _assertThisInitialize2 = _assertThisInitialized(_this),
14385 incrementValueUpper = _assertThisInitialize2.incrementValueUpper,
14386 decrementValueUpper = _assertThisInitialize2.decrementValueUpper;
14387
14388 var handlerMap = {
14389 [exports.Key.UpArrow]: incrementValueUpper,
14390 [exports.Key.RightArrow]: incrementValueUpper,
14391 [exports.Key.DownArrow]: decrementValueUpper,
14392 [exports.Key.LeftArrow]: decrementValueUpper
14393 };
14394 var handler = handlerMap[event.keyCode];
14395
14396 if (handler != null) {
14397 event.preventDefault();
14398 event.stopPropagation();
14399 handler();
14400 }
14401 };
14402
14403 _this.incrementValueLower = function () {
14404 _this.setValue([_this.state.value[0] + _this.props.step, _this.state.value[1]], Control.Upper);
14405 };
14406
14407 _this.decrementValueLower = function () {
14408 _this.setValue([_this.state.value[0] - _this.props.step, _this.state.value[1]], Control.Upper);
14409 };
14410
14411 _this.incrementValueUpper = function () {
14412 _this.setValue([_this.state.value[0], _this.state.value[1] + _this.props.step], Control.Lower);
14413 };
14414
14415 _this.decrementValueUpper = function () {
14416 _this.setValue([_this.state.value[0], _this.state.value[1] - _this.props.step], Control.Lower);
14417 };
14418
14419 _this.dispatchValue = function () {
14420 var _this$props = _this.props,
14421 onChange = _this$props.onChange,
14422 id = _this$props.id;
14423 var value = _this.state.value;
14424 onChange(value, id);
14425 };
14426
14427 _this.setValue = function (dirtyValue, control) {
14428 var _assertThisInitialize3 = _assertThisInitialized(_this),
14429 _assertThisInitialize4 = _assertThisInitialize3.props,
14430 min = _assertThisInitialize4.min,
14431 max = _assertThisInitialize4.max,
14432 step = _assertThisInitialize4.step,
14433 value = _assertThisInitialize3.state.value;
14434
14435 var sanitizedValue = sanitizeValue(dirtyValue, min, max, step, control);
14436
14437 if (isEqual(sanitizedValue, value) === false) {
14438 _this.setState({
14439 value: sanitizedValue
14440 }, _this.dispatchValue);
14441 }
14442 };
14443
14444 _this.handleMouseDownTrack = function (event) {
14445 if (event.button !== 0 || _this.props.disabled) return;
14446 event.preventDefault();
14447
14448 var clickXPosition = _this.actualXPosition(event.clientX);
14449
14450 var value = _this.state.value;
14451 var distanceFromLowerThumb = Math.abs(value[0] - clickXPosition);
14452 var distanceFromUpperThumb = Math.abs(value[1] - clickXPosition);
14453
14454 if (distanceFromLowerThumb <= distanceFromUpperThumb) {
14455 _this.setValue([clickXPosition, value[1]], Control.Upper);
14456
14457 registerMouseMoveHandler(_this.handleMouseMoveThumbLower);
14458
14459 if (_this.thumbLower.current != null) {
14460 _this.thumbLower.current.focus();
14461 }
14462 } else {
14463 _this.setValue([value[0], clickXPosition], Control.Lower);
14464
14465 registerMouseMoveHandler(_this.handleMouseMoveThumbUpper);
14466
14467 if (_this.thumbUpper.current != null) {
14468 _this.thumbUpper.current.focus();
14469 }
14470 }
14471 };
14472
14473 _this.handleTouchStartTrack = function (event) {
14474 if (_this.props.disabled) return;
14475 event.preventDefault();
14476
14477 var clickXPosition = _this.actualXPosition(event.touches[0].clientX);
14478
14479 var value = _this.state.value;
14480 var distanceFromLowerThumb = Math.abs(value[0] - clickXPosition);
14481 var distanceFromUpperThumb = Math.abs(value[1] - clickXPosition);
14482
14483 if (distanceFromLowerThumb <= distanceFromUpperThumb) {
14484 _this.setValue([clickXPosition, value[1]], Control.Upper);
14485
14486 registerTouchMoveHandler(_this.handleTouchMoveThumbLower);
14487
14488 if (_this.thumbLower.current != null) {
14489 _this.thumbLower.current.focus();
14490 }
14491 } else {
14492 _this.setValue([value[0], clickXPosition], Control.Lower);
14493
14494 registerTouchMoveHandler(_this.handleTouchMoveThumbUpper);
14495
14496 if (_this.thumbUpper.current != null) {
14497 _this.thumbUpper.current.focus();
14498 }
14499 }
14500 };
14501
14502 _this.actualXPosition = function (dirtyXPosition) {
14503 if (_this.track.current) {
14504 var _this$props2 = _this.props,
14505 min = _this$props2.min,
14506 max = _this$props2.max;
14507 var _this$state = _this.state,
14508 trackLeft = _this$state.trackLeft,
14509 trackWidth = _this$state.trackWidth;
14510 var relativeX = dirtyXPosition - trackLeft;
14511 var percentageOfTrack = relativeX / trackWidth;
14512 return percentageOfTrack * (max - min);
14513 } else {
14514 return 0;
14515 }
14516 };
14517
14518 return _this;
14519 }
14520
14521 _createClass(DualThumb, [{
14522 key: "componentDidMount",
14523 value: function componentDidMount() {
14524 this.setTrackPosition();
14525
14526 if (this.trackWrapper.current != null) {
14527 events.addEventListener(this.trackWrapper.current, 'touchstart', this.handleTouchStartTrack, {
14528 passive: false
14529 });
14530 }
14531 }
14532 }, {
14533 key: "componentWillUnmount",
14534 value: function componentWillUnmount() {
14535 if (this.trackWrapper.current != null) {
14536 events.removeEventListener(this.trackWrapper.current, 'touchstart', this.handleTouchStartTrack);
14537 }
14538 }
14539 }, {
14540 key: "render",
14541 value: function render() {
14542 var _this$props3 = this.props,
14543 id = _this$props3.id,
14544 min = _this$props3.min,
14545 max = _this$props3.max,
14546 prefix = _this$props3.prefix,
14547 suffix = _this$props3.suffix,
14548 disabled = _this$props3.disabled,
14549 output = _this$props3.output,
14550 error = _this$props3.error,
14551 onFocus = _this$props3.onFocus,
14552 onBlur = _this$props3.onBlur,
14553 label = _this$props3.label,
14554 labelAction = _this$props3.labelAction,
14555 labelHidden = _this$props3.labelHidden,
14556 helpText = _this$props3.helpText;
14557 var value = this.state.value;
14558 var idLower = id;
14559 var idUpper = "".concat(id, "Upper");
14560 var describedBy = [];
14561
14562 if (error) {
14563 describedBy.push("".concat(id, "Error"));
14564 }
14565
14566 var ariaDescribedBy = describedBy.length ? describedBy.join(' ') : undefined;
14567 var trackWrapperClassName = classNames(styles$1l.TrackWrapper, error && styles$1l.error, disabled && styles$1l.disabled);
14568 var thumbLowerClassName = classNames(styles$1l.Thumbs, styles$1l.ThumbLower, disabled && styles$1l.disabled);
14569 var thumbUpperClassName = classNames(styles$1l.Thumbs, styles$1l.ThumbUpper, disabled && styles$1l.disabled);
14570 var trackWidth = this.state.trackWidth;
14571 var range = max - min;
14572 var leftPositionThumbLower = value[0] / range * trackWidth;
14573 var leftPositionThumbUpper = value[1] / range * trackWidth;
14574 var outputLowerClassName = classNames(styles$1l.Output, styles$1l.OutputLower);
14575 var outputMarkupLower = !disabled && output ? React__default.createElement("output", {
14576 htmlFor: idLower,
14577 className: outputLowerClassName,
14578 style: {
14579 left: "".concat(leftPositionThumbLower, "px")
14580 }
14581 }, React__default.createElement("div", {
14582 className: styles$1l.OutputBubble
14583 }, React__default.createElement("span", {
14584 className: styles$1l.OutputText
14585 }, value[0]))) : null;
14586 var outputUpperClassName = classNames(styles$1l.Output, styles$1l.OutputUpper);
14587 var outputMarkupUpper = !disabled && output ? React__default.createElement("output", {
14588 htmlFor: idUpper,
14589 className: outputUpperClassName,
14590 style: {
14591 left: "".concat(leftPositionThumbUpper, "px")
14592 }
14593 }, React__default.createElement("div", {
14594 className: styles$1l.OutputBubble
14595 }, React__default.createElement("span", {
14596 className: styles$1l.OutputText
14597 }, value[1]))) : null;
14598 var cssVars = {
14599 ["".concat(CSS_VAR_PREFIX, "progress-lower")]: "".concat(leftPositionThumbLower, "px"),
14600 ["".concat(CSS_VAR_PREFIX, "progress-upper")]: "".concat(leftPositionThumbUpper, "px")
14601 };
14602 var prefixMarkup = prefix && React__default.createElement("div", {
14603 className: styles$1l.Prefix
14604 }, prefix);
14605 var suffixMarkup = suffix && React__default.createElement("div", {
14606 className: styles$1l.Suffix
14607 }, suffix);
14608 return React__default.createElement(React__default.Fragment, null, React__default.createElement(Labelled, {
14609 id: id,
14610 label: label,
14611 error: error,
14612 action: labelAction,
14613 labelHidden: labelHidden,
14614 helpText: helpText
14615 }, React__default.createElement("div", {
14616 className: styles$1l.Wrapper
14617 }, prefixMarkup, React__default.createElement("div", {
14618 className: trackWrapperClassName,
14619 onMouseDown: this.handleMouseDownTrack,
14620 ref: this.trackWrapper
14621 }, React__default.createElement("div", {
14622 className: styles$1l.Track,
14623 style: cssVars,
14624 ref: this.track
14625 }), React__default.createElement("button", {
14626 id: idLower,
14627 className: thumbLowerClassName,
14628 style: {
14629 left: "".concat(leftPositionThumbLower, "px")
14630 },
14631 role: "slider",
14632 "aria-disabled": disabled,
14633 "aria-valuemin": min,
14634 "aria-valuemax": max,
14635 "aria-valuenow": value[0],
14636 "aria-invalid": Boolean(error),
14637 "aria-describedby": ariaDescribedBy,
14638 "aria-labelledby": labelID(id),
14639 onFocus: onFocus,
14640 onBlur: onBlur,
14641 onKeyDown: this.handleKeypressLower,
14642 onMouseDown: this.handleMouseDownThumbLower,
14643 onTouchStart: this.handleTouchStartThumbLower,
14644 ref: this.thumbLower
14645 }), outputMarkupLower, React__default.createElement("button", {
14646 id: idUpper,
14647 className: thumbUpperClassName,
14648 style: {
14649 left: "".concat(leftPositionThumbUpper, "px")
14650 },
14651 role: "slider",
14652 "aria-disabled": disabled,
14653 "aria-valuemin": min,
14654 "aria-valuemax": max,
14655 "aria-valuenow": value[1],
14656 "aria-invalid": Boolean(error),
14657 "aria-describedby": ariaDescribedBy,
14658 "aria-labelledby": labelID(id),
14659 onFocus: onFocus,
14660 onBlur: onBlur,
14661 onKeyDown: this.handleKeypressUpper,
14662 onMouseDown: this.handleMouseDownThumbUpper,
14663 onTouchStart: this.handleTouchStartThumbUpper,
14664 ref: this.thumbUpper
14665 }), outputMarkupUpper), suffixMarkup)), React__default.createElement(EventListener, {
14666 event: "resize",
14667 handler: this.setTrackPosition
14668 }));
14669 }
14670 }], [{
14671 key: "getDerivedStateFromProps",
14672 value: function getDerivedStateFromProps(props, state) {
14673 var min = props.min,
14674 step = props.step,
14675 max = props.max,
14676 value = props.value,
14677 onChange = props.onChange,
14678 id = props.id;
14679 var prevValue = state.prevValue;
14680
14681 if (isEqual(prevValue, value)) {
14682 return null;
14683 }
14684
14685 var sanitizedValue = sanitizeValue(value, min, max, step);
14686
14687 if (!isEqual(value, sanitizedValue)) {
14688 onChange(sanitizedValue, id);
14689 }
14690
14691 return {
14692 prevValue: value,
14693 value: sanitizedValue
14694 };
14695 }
14696 }]);
14697
14698 return DualThumb;
14699}(React__default.Component);
14700
14701function registerMouseMoveHandler(handler) {
14702 events.addEventListener(document, 'mousemove', handler);
14703 events.addEventListener(document, 'mouseup', function () {
14704 events.removeEventListener(document, 'mousemove', handler);
14705 }, {
14706 once: true
14707 });
14708}
14709
14710function registerTouchMoveHandler(handler) {
14711 var removeHandler = function removeHandler() {
14712 events.removeEventListener(document, 'touchmove', handler);
14713 events.removeEventListener(document, 'touchend', removeHandler);
14714 events.removeEventListener(document, 'touchcancel', removeHandler);
14715 };
14716
14717 events.addEventListener(document, 'touchmove', handler, {
14718 passive: false
14719 });
14720 events.addEventListener(document, 'touchend', removeHandler, {
14721 once: true
14722 });
14723 events.addEventListener(document, 'touchcancel', removeHandler, {
14724 once: true
14725 });
14726}
14727
14728function sanitizeValue(value, min, max, step) {
14729 var control = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : Control.Upper;
14730 var upperValue = inBoundsUpper(roundedToStep(value[1]));
14731 var lowerValue = inBoundsLower(roundedToStep(value[0]));
14732 var maxLowerValue = upperValue - step;
14733 var minUpperValue = lowerValue + step;
14734
14735 if (control === Control.Upper && lowerValue > maxLowerValue) {
14736 lowerValue = maxLowerValue;
14737 } else if (control === Control.Lower && upperValue < minUpperValue) {
14738 upperValue = minUpperValue;
14739 }
14740
14741 return [lowerValue, upperValue];
14742
14743 function inBoundsUpper(value) {
14744 var lowerMin = min + step;
14745
14746 if (value < lowerMin) {
14747 return lowerMin;
14748 } else if (value > max) {
14749 return max;
14750 } else {
14751 return value;
14752 }
14753 }
14754
14755 function inBoundsLower(value) {
14756 var upperMax = max - step;
14757
14758 if (value < min) {
14759 return min;
14760 } else if (value > upperMax) {
14761 return upperMax;
14762 } else {
14763 return value;
14764 }
14765 }
14766
14767 function roundedToStep(value) {
14768 return Math.round(value / step) * step;
14769 }
14770}
14771
14772function clamp(number, min, max) {
14773 if (number < min) return min;
14774 if (number > max) return max;
14775 return number;
14776}
14777
14778var styles$1m = {
14779 "SingleThumb": "Polaris-RangeSlider-SingleThumb",
14780 "disabled": "Polaris-RangeSlider-SingleThumb--disabled",
14781 "InputWrapper": "Polaris-RangeSlider-SingleThumb__InputWrapper",
14782 "Prefix": "Polaris-RangeSlider-SingleThumb__Prefix",
14783 "Suffix": "Polaris-RangeSlider-SingleThumb__Suffix",
14784 "Input": "Polaris-RangeSlider-SingleThumb__Input",
14785 "error": "Polaris-RangeSlider-SingleThumb--error",
14786 "RangeSlider": "Polaris-RangeSlider-SingleThumb__RangeSlider",
14787 "Output": "Polaris-RangeSlider-SingleThumb__Output",
14788 "OutputBubble": "Polaris-RangeSlider-SingleThumb__OutputBubble",
14789 "OutputText": "Polaris-RangeSlider-SingleThumb__OutputText"
14790};
14791
14792function SingleThumb(props) {
14793 var id = props.id,
14794 error = props.error,
14795 helpText = props.helpText,
14796 value = props.value,
14797 min = props.min,
14798 max = props.max,
14799 disabled = props.disabled,
14800 output = props.output,
14801 prefix = props.prefix,
14802 suffix = props.suffix,
14803 label = props.label,
14804 labelAction = props.labelAction,
14805 labelHidden = props.labelHidden,
14806 step = props.step,
14807 onBlur = props.onBlur,
14808 onFocus = props.onFocus;
14809 var clampedValue = clamp(value, min, max);
14810 var describedBy = [];
14811
14812 if (error) {
14813 describedBy.push("".concat(id, "Error"));
14814 }
14815
14816 if (helpText) {
14817 describedBy.push(helpTextID(id));
14818 }
14819
14820 var ariaDescribedBy = describedBy.length ? describedBy.join(' ') : undefined;
14821 var sliderProgress = (clampedValue - min) * 100 / (max - min);
14822 var outputFactor = invertNumber((sliderProgress - 50) / 100);
14823 var cssVars = {
14824 ["".concat(CSS_VAR_PREFIX, "min")]: min,
14825 ["".concat(CSS_VAR_PREFIX, "max")]: max,
14826 ["".concat(CSS_VAR_PREFIX, "current")]: clampedValue,
14827 ["".concat(CSS_VAR_PREFIX, "progress")]: "".concat(sliderProgress, "%"),
14828 ["".concat(CSS_VAR_PREFIX, "output-factor")]: "".concat(outputFactor)
14829 };
14830 var outputMarkup = !disabled && output && React__default.createElement("output", {
14831 htmlFor: id,
14832 className: styles$1m.Output
14833 }, React__default.createElement("div", {
14834 className: styles$1m.OutputBubble
14835 }, React__default.createElement("span", {
14836 className: styles$1m.OutputText
14837 }, clampedValue)));
14838 var prefixMarkup = prefix && React__default.createElement("div", {
14839 className: styles$1m.Prefix
14840 }, prefix);
14841 var suffixMarkup = suffix && React__default.createElement("div", {
14842 className: styles$1m.Suffix
14843 }, suffix);
14844 var className = classNames(styles$1m.SingleThumb, error && styles$1m.error, disabled && styles$1m.disabled);
14845 return React__default.createElement(Labelled, {
14846 id: id,
14847 label: label,
14848 error: error,
14849 action: labelAction,
14850 labelHidden: labelHidden,
14851 helpText: helpText
14852 }, React__default.createElement("div", {
14853 className: className,
14854 style: cssVars
14855 }, prefixMarkup, React__default.createElement("div", {
14856 className: styles$1m.InputWrapper
14857 }, React__default.createElement("input", {
14858 type: "range",
14859 className: styles$1m.Input,
14860 id: id,
14861 name: id,
14862 min: min,
14863 max: max,
14864 step: step,
14865 value: clampedValue,
14866 disabled: disabled,
14867 onChange: handleChange,
14868 onFocus: onFocus,
14869 onBlur: onBlur,
14870 "aria-valuemin": min,
14871 "aria-valuemax": max,
14872 "aria-valuenow": clampedValue,
14873 "aria-invalid": Boolean(error),
14874 "aria-describedby": ariaDescribedBy
14875 }), outputMarkup), suffixMarkup));
14876
14877 function handleChange(event) {
14878 var onChange = props.onChange;
14879 onChange && onChange(parseFloat(event.currentTarget.value), id);
14880 }
14881}
14882
14883function RangeSlider(_a) {
14884 var _a$min = _a.min,
14885 min = _a$min === void 0 ? RangeSliderDefault.Min : _a$min,
14886 _a$max = _a.max,
14887 max = _a$max === void 0 ? RangeSliderDefault.Max : _a$max,
14888 _a$step = _a.step,
14889 step = _a$step === void 0 ? RangeSliderDefault.Step : _a$step,
14890 value = _a.value,
14891 rest = tslib_1.__rest(_a, ["min", "max", "step", "value"]);
14892
14893 var id = useUniqueId('RangeSlider');
14894 var sharedProps = Object.assign({
14895 id,
14896 min,
14897 max,
14898 step
14899 }, rest);
14900 return isDualThumb(value) ? React__default.createElement(DualThumb, Object.assign({
14901 value: value
14902 }, sharedProps)) : React__default.createElement(SingleThumb, Object.assign({
14903 value: value
14904 }, sharedProps));
14905}
14906
14907function isDualThumb(value) {
14908 return Array.isArray(value);
14909}
14910
14911var styles$1n = {
14912 "CheckboxWrapper": "Polaris-ResourceItem__CheckboxWrapper",
14913 "ResourceItem": "Polaris-ResourceItem",
14914 "persistActions": "Polaris-ResourceItem--persistActions",
14915 "Actions": "Polaris-ResourceItem__Actions",
14916 "selected": "Polaris-ResourceItem--selected",
14917 "focused": "Polaris-ResourceItem--focused",
14918 "focusedInner": "Polaris-ResourceItem--focusedInner",
14919 "Link": "Polaris-ResourceItem__Link",
14920 "Button": "Polaris-ResourceItem__Button",
14921 "Container": "Polaris-ResourceItem__Container",
14922 "Owned": "Polaris-ResourceItem__Owned",
14923 "Handle": "Polaris-ResourceItem__Handle",
14924 "selectMode": "Polaris-ResourceItem--selectMode",
14925 "selectable": "Polaris-ResourceItem--selectable",
14926 "Media": "Polaris-ResourceItem__Media",
14927 "Content": "Polaris-ResourceItem__Content",
14928 "Disclosure": "Polaris-ResourceItem__Disclosure"
14929};
14930
14931var getUniqueCheckboxID = other.createUniqueIDFactory('ResourceListItemCheckbox');
14932var getUniqueOverlayID = other.createUniqueIDFactory('ResourceListItemOverlay');
14933
14934var BaseResourceItem =
14935/*#__PURE__*/
14936function (_React$Component) {
14937 _inherits(BaseResourceItem, _React$Component);
14938
14939 function BaseResourceItem() {
14940 var _this;
14941
14942 _classCallCheck(this, BaseResourceItem);
14943
14944 _this = _possibleConstructorReturn(this, _getPrototypeOf(BaseResourceItem).apply(this, arguments));
14945 _this.state = {
14946 actionsMenuVisible: false,
14947 focused: false,
14948 focusedInner: false,
14949 selected: isSelected(_this.props.id, _this.props.context.selectedItems)
14950 };
14951 _this.node = null;
14952 _this.checkboxId = getUniqueCheckboxID();
14953 _this.overlayId = getUniqueOverlayID();
14954 _this.buttonOverlay = React__default.createRef();
14955
14956 _this.setNode = function (node) {
14957 _this.node = node;
14958 };
14959
14960 _this.handleFocus = function (event) {
14961 if (event.target === _this.buttonOverlay.current || _this.node && event.target === _this.node.querySelector("#".concat(_this.overlayId))) {
14962 _this.setState({
14963 focused: true,
14964 focusedInner: false
14965 });
14966 } else if (_this.node && _this.node.contains(event.target)) {
14967 _this.setState({
14968 focused: true,
14969 focusedInner: true
14970 });
14971 }
14972 };
14973
14974 _this.handleBlur = function (_ref) {
14975 var relatedTarget = _ref.relatedTarget;
14976
14977 if (_this.node && relatedTarget instanceof Element && _this.node.contains(relatedTarget)) {
14978 return;
14979 }
14980
14981 _this.setState({
14982 focused: false,
14983 focusedInner: false
14984 });
14985 };
14986
14987 _this.handleLargerSelectionArea = function (event) {
14988 stopPropagation$1(event);
14989
14990 _this.handleSelection(!_this.state.selected, event.nativeEvent.shiftKey);
14991 };
14992
14993 _this.handleSelection = function (value, shiftKey) {
14994 var _this$props = _this.props,
14995 id = _this$props.id,
14996 sortOrder = _this$props.sortOrder,
14997 onSelectionChange = _this$props.context.onSelectionChange;
14998
14999 if (id == null || onSelectionChange == null) {
15000 return;
15001 }
15002
15003 _this.setState({
15004 focused: value,
15005 focusedInner: value
15006 });
15007
15008 onSelectionChange(value, id, sortOrder, shiftKey);
15009 };
15010
15011 _this.handleClick = function (event) {
15012 stopPropagation$1(event);
15013 var _this$props2 = _this.props,
15014 id = _this$props2.id,
15015 onClick = _this$props2.onClick,
15016 url = _this$props2.url,
15017 selectMode = _this$props2.context.selectMode;
15018 var _event$nativeEvent = event.nativeEvent,
15019 ctrlKey = _event$nativeEvent.ctrlKey,
15020 metaKey = _event$nativeEvent.metaKey;
15021
15022 var anchor = _this.node && _this.node.querySelector('a');
15023
15024 if (selectMode) {
15025 _this.handleLargerSelectionArea(event);
15026
15027 return;
15028 }
15029
15030 if (anchor === event.target) {
15031 return;
15032 }
15033
15034 if (onClick) {
15035 onClick(id);
15036 }
15037
15038 if (url && (ctrlKey || metaKey)) {
15039 window.open(url, '_blank');
15040 return;
15041 }
15042
15043 if (url && anchor) {
15044 anchor.click();
15045 }
15046 }; // This fires onClick when there is a URL on the item
15047
15048
15049 _this.handleKeyUp = function (event) {
15050 var _this$props3 = _this.props,
15051 _this$props3$onClick = _this$props3.onClick,
15052 onClick = _this$props3$onClick === void 0 ? noop$b : _this$props3$onClick,
15053 selectMode = _this$props3.context.selectMode;
15054 var key = event.key;
15055
15056 if (key === 'Enter' && _this.props.url && !selectMode) {
15057 onClick();
15058 }
15059 };
15060
15061 _this.handleActionsClick = function () {
15062 _this.setState(function (_ref2) {
15063 var actionsMenuVisible = _ref2.actionsMenuVisible;
15064 return {
15065 actionsMenuVisible: !actionsMenuVisible
15066 };
15067 });
15068 };
15069
15070 _this.handleCloseRequest = function () {
15071 _this.setState({
15072 actionsMenuVisible: false
15073 });
15074 };
15075
15076 return _this;
15077 }
15078
15079 _createClass(BaseResourceItem, [{
15080 key: "shouldComponentUpdate",
15081 value: function shouldComponentUpdate(nextProps, nextState) {
15082 var _a = nextProps.context,
15083 nextSelectedItems = _a.selectedItems,
15084 restNextContext = tslib_1.__rest(_a, ["selectedItems"]),
15085 restNextProps = tslib_1.__rest(nextProps, ["context"]);
15086
15087 var _b = this.props,
15088 _c = _b.context,
15089 selectedItems = _c.selectedItems,
15090 restContext = tslib_1.__rest(_c, ["selectedItems"]),
15091 restProps = tslib_1.__rest(_b, ["context"]);
15092
15093 var nextSelectMode = nextProps.context.selectMode;
15094 return !isEqual(this.state, nextState) || this.props.context.selectMode !== nextSelectMode || !nextProps.context.selectMode && (!isEqual(restProps, restNextProps) || !isEqual(restContext, restNextContext));
15095 }
15096 }, {
15097 key: "render",
15098 value: function render() {
15099 var _this$props4 = this.props,
15100 children = _this$props4.children,
15101 url = _this$props4.url,
15102 external = _this$props4.external,
15103 media = _this$props4.media,
15104 shortcutActions = _this$props4.shortcutActions,
15105 ariaControls = _this$props4.ariaControls,
15106 ariaExpanded = _this$props4.ariaExpanded,
15107 _this$props4$persistA = _this$props4.persistActions,
15108 persistActions = _this$props4$persistA === void 0 ? false : _this$props4$persistA,
15109 accessibilityLabel = _this$props4.accessibilityLabel,
15110 name = _this$props4.name,
15111 _this$props4$context = _this$props4.context,
15112 selectable = _this$props4$context.selectable,
15113 selectMode = _this$props4$context.selectMode,
15114 loading = _this$props4$context.loading,
15115 resourceName = _this$props4$context.resourceName,
15116 i18n = _this$props4.i18n;
15117 var _this$state = this.state,
15118 actionsMenuVisible = _this$state.actionsMenuVisible,
15119 focused = _this$state.focused,
15120 focusedInner = _this$state.focusedInner,
15121 selected = _this$state.selected;
15122 var ownedMarkup = null;
15123 var handleMarkup = null;
15124 var mediaMarkup = media ? React__default.createElement("div", {
15125 className: styles$1n.Media
15126 }, media) : null;
15127
15128 if (selectable) {
15129 var checkboxAccessibilityLabel = name || accessibilityLabel || i18n.translate('Polaris.Common.checkbox');
15130 handleMarkup = React__default.createElement("div", {
15131 className: styles$1n.Handle,
15132 onClick: this.handleLargerSelectionArea
15133 }, React__default.createElement("div", {
15134 onClick: stopPropagation$1,
15135 className: styles$1n.CheckboxWrapper
15136 }, React__default.createElement("div", {
15137 onChange: this.handleLargerSelectionArea
15138 }, React__default.createElement(Checkbox$1, {
15139 id: this.checkboxId,
15140 label: checkboxAccessibilityLabel,
15141 labelHidden: true,
15142 checked: selected,
15143 disabled: loading
15144 }))));
15145 }
15146
15147 if (media || selectable) {
15148 ownedMarkup = React__default.createElement("div", {
15149 className: styles$1n.Owned
15150 }, handleMarkup, mediaMarkup);
15151 }
15152
15153 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);
15154 var actionsMarkup = null;
15155 var disclosureMarkup = null;
15156
15157 if (shortcutActions && !loading) {
15158 if (persistActions) {
15159 actionsMarkup = React__default.createElement("div", {
15160 className: styles$1n.Actions,
15161 onClick: stopPropagation$1
15162 }, React__default.createElement(ButtonGroup, null, buttonsFrom(shortcutActions, {
15163 plain: true
15164 })));
15165 var disclosureAccessibilityLabel = name ? i18n.translate('Polaris.ResourceList.Item.actionsDropdownLabel', {
15166 accessibilityLabel: name
15167 }) : i18n.translate('Polaris.ResourceList.Item.actionsDropdown');
15168 disclosureMarkup = React__default.createElement("div", {
15169 className: styles$1n.Disclosure,
15170 onClick: stopPropagation$1
15171 }, React__default.createElement(Popover, {
15172 activator: React__default.createElement(Button, {
15173 accessibilityLabel: disclosureAccessibilityLabel,
15174 onClick: this.handleActionsClick,
15175 plain: true,
15176 icon: polarisIcons.HorizontalDotsMinor
15177 }),
15178 onClose: this.handleCloseRequest,
15179 active: actionsMenuVisible
15180 }, React__default.createElement(ActionList, {
15181 items: shortcutActions
15182 })));
15183 } else {
15184 actionsMarkup = React__default.createElement("div", {
15185 className: styles$1n.Actions,
15186 onClick: stopPropagation$1
15187 }, React__default.createElement(ButtonGroup, {
15188 segmented: true
15189 }, buttonsFrom(shortcutActions, {
15190 size: 'slim'
15191 })));
15192 }
15193 }
15194
15195 var content = children ? React__default.createElement("div", {
15196 className: styles$1n.Content
15197 }, children) : null;
15198 var containerMarkup = React__default.createElement("div", {
15199 className: styles$1n.Container,
15200 id: this.props.id
15201 }, ownedMarkup, content, actionsMarkup, disclosureMarkup);
15202 var tabIndex = loading ? -1 : 0;
15203 var ariaLabel = accessibilityLabel || i18n.translate('Polaris.ResourceList.Item.viewItem', {
15204 itemName: name || resourceName && resourceName.singular || ''
15205 });
15206 var accessibleMarkup = url ? React__default.createElement(UnstyledLink, {
15207 "aria-describedby": this.props.id,
15208 "aria-label": ariaLabel,
15209 className: styles$1n.Link,
15210 url: url,
15211 external: external,
15212 tabIndex: tabIndex,
15213 id: this.overlayId
15214 }) : React__default.createElement("button", {
15215 className: styles$1n.Button,
15216 "aria-label": ariaLabel,
15217 "aria-controls": ariaControls,
15218 "aria-expanded": ariaExpanded,
15219 onClick: this.handleClick,
15220 tabIndex: tabIndex,
15221 ref: this.buttonOverlay
15222 });
15223 return React__default.createElement("div", {
15224 ref: this.setNode,
15225 className: className,
15226 onClick: this.handleClick,
15227 onFocus: this.handleFocus,
15228 onBlur: this.handleBlur,
15229 onKeyUp: this.handleKeyUp,
15230 "data-href": url
15231 }, accessibleMarkup, containerMarkup);
15232 }
15233 }], [{
15234 key: "getDerivedStateFromProps",
15235 value: function getDerivedStateFromProps(nextProps, prevState) {
15236 var selected = isSelected(nextProps.id, nextProps.context.selectedItems);
15237
15238 if (prevState.selected === selected) {
15239 return null;
15240 }
15241
15242 return {
15243 selected
15244 };
15245 }
15246 }]);
15247
15248 return BaseResourceItem;
15249}(React__default.Component);
15250
15251function noop$b() {}
15252
15253function stopPropagation$1(event) {
15254 event.stopPropagation();
15255}
15256
15257function isSelected(id, selectedItems) {
15258 return Boolean(selectedItems && (Array.isArray(selectedItems) && selectedItems.includes(id) || selectedItems === SELECT_ALL_ITEMS));
15259}
15260
15261function ResourceItem(props) {
15262 return React__default.createElement(BaseResourceItem, Object.assign({}, props, {
15263 context: React.useContext(ResourceListContext),
15264 i18n: useI18n()
15265 }));
15266}
15267
15268var Sticky =
15269/*#__PURE__*/
15270function (_React$Component) {
15271 _inherits(Sticky, _React$Component);
15272
15273 function Sticky() {
15274 var _this;
15275
15276 _classCallCheck(this, Sticky);
15277
15278 _this = _possibleConstructorReturn(this, _getPrototypeOf(Sticky).apply(this, arguments));
15279 _this.state = {
15280 isSticky: false,
15281 style: {}
15282 };
15283 _this.placeHolderNode = null;
15284 _this.stickyNode = null;
15285
15286 _this.setPlaceHolderNode = function (node) {
15287 _this.placeHolderNode = node;
15288 };
15289
15290 _this.setStickyNode = function (node) {
15291 _this.stickyNode = node;
15292 };
15293
15294 _this.handlePositioning = function (stick) {
15295 var top = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
15296 var left = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
15297 var width = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
15298 var isSticky = _this.state.isSticky;
15299
15300 if (stick && !isSticky || !stick && isSticky) {
15301 _this.adjustPlaceHolderNode(stick);
15302
15303 _this.setState({
15304 isSticky: !isSticky
15305 });
15306 }
15307
15308 var style = stick ? {
15309 position: 'fixed',
15310 top,
15311 left,
15312 width
15313 } : {};
15314
15315 _this.setState({
15316 style
15317 });
15318 };
15319
15320 _this.adjustPlaceHolderNode = function (add) {
15321 if (_this.placeHolderNode && _this.stickyNode) {
15322 _this.placeHolderNode.style.paddingBottom = add ? "".concat(geometry.getRectForNode(_this.stickyNode).height, "px") : '0px';
15323 }
15324 };
15325
15326 return _this;
15327 }
15328
15329 _createClass(Sticky, [{
15330 key: "componentDidMount",
15331 value: function componentDidMount() {
15332 var _this$props = this.props,
15333 boundingElement = _this$props.boundingElement,
15334 _this$props$offset = _this$props.offset,
15335 offset = _this$props$offset === void 0 ? false : _this$props$offset,
15336 _this$props$disableWh = _this$props.disableWhenStacked,
15337 disableWhenStacked = _this$props$disableWh === void 0 ? false : _this$props$disableWh,
15338 stickyManager = _this$props.polaris.stickyManager;
15339 if (!this.stickyNode || !this.placeHolderNode) return;
15340 stickyManager.registerStickyItem({
15341 stickyNode: this.stickyNode,
15342 placeHolderNode: this.placeHolderNode,
15343 handlePositioning: this.handlePositioning,
15344 offset,
15345 boundingElement,
15346 disableWhenStacked
15347 });
15348 }
15349 }, {
15350 key: "componentWillUnmount",
15351 value: function componentWillUnmount() {
15352 var stickyManager = this.props.polaris.stickyManager;
15353 if (!this.stickyNode) return;
15354 stickyManager.unregisterStickyItem(this.stickyNode);
15355 }
15356 }, {
15357 key: "render",
15358 value: function render() {
15359 var _this$state = this.state,
15360 style = _this$state.style,
15361 isSticky = _this$state.isSticky;
15362 var children = this.props.children;
15363 var childrenContent = isFunction(children) ? children(isSticky) : children;
15364 return React__default.createElement("div", null, React__default.createElement("div", {
15365 ref: this.setPlaceHolderNode
15366 }), React__default.createElement("div", {
15367 ref: this.setStickyNode,
15368 style: style
15369 }, childrenContent));
15370 }
15371 }]);
15372
15373 return Sticky;
15374}(React__default.Component);
15375
15376function isFunction(arg) {
15377 return typeof arg === 'function';
15378} // Use named export once withAppProvider is refactored away
15379// eslint-disable-next-line import/no-default-export
15380
15381
15382var Sticky$1 = withAppProvider()(Sticky);
15383
15384var styles$1o = {
15385 "Select": "Polaris-Select",
15386 "disabled": "Polaris-Select--disabled",
15387 "Content": "Polaris-Select__Content",
15388 "InlineLabel": "Polaris-Select__InlineLabel",
15389 "Icon": "Polaris-Select__Icon",
15390 "Backdrop": "Polaris-Select__Backdrop",
15391 "error": "Polaris-Select--error",
15392 "Input": "Polaris-Select__Input",
15393 "placeholder": "Polaris-Select--placeholder",
15394 "SelectedOption": "Polaris-Select__SelectedOption"
15395};
15396
15397var PLACEHOLDER_VALUE = '';
15398function Select(_ref) {
15399 var optionsProp = _ref.options,
15400 label = _ref.label,
15401 labelAction = _ref.labelAction,
15402 labelHiddenProp = _ref.labelHidden,
15403 labelInline = _ref.labelInline,
15404 disabled = _ref.disabled,
15405 helpText = _ref.helpText,
15406 placeholder = _ref.placeholder,
15407 idProp = _ref.id,
15408 name = _ref.name,
15409 _ref$value = _ref.value,
15410 value = _ref$value === void 0 ? PLACEHOLDER_VALUE : _ref$value,
15411 error = _ref.error,
15412 onChange = _ref.onChange,
15413 onFocus = _ref.onFocus,
15414 onBlur = _ref.onBlur;
15415 var id = useUniqueId('Select', idProp);
15416 var labelHidden = labelInline ? true : labelHiddenProp;
15417 var className = classNames(styles$1o.Select, error && styles$1o.error, disabled && styles$1o.disabled);
15418 var handleChange = onChange ? function (event) {
15419 return onChange(event.currentTarget.value, id);
15420 } : undefined;
15421 var describedBy = [];
15422
15423 if (helpText) {
15424 describedBy.push(helpTextID(id));
15425 }
15426
15427 if (error) {
15428 describedBy.push("".concat(id, "Error"));
15429 }
15430
15431 var options = optionsProp || [];
15432 var normalizedOptions = options.map(normalizeOption);
15433
15434 if (placeholder) {
15435 normalizedOptions = [{
15436 label: placeholder,
15437 value: PLACEHOLDER_VALUE,
15438 disabled: true
15439 }].concat(_toConsumableArray(normalizedOptions));
15440 }
15441
15442 var inlineLabelMarkup = labelInline && React__default.createElement("span", {
15443 className: styles$1o.InlineLabel
15444 }, label);
15445 var selectedOption = getSelectedOption(normalizedOptions, value);
15446 var contentMarkup = React__default.createElement("div", {
15447 className: styles$1o.Content,
15448 "aria-hidden": true,
15449 "aria-disabled": disabled
15450 }, inlineLabelMarkup, React__default.createElement("span", {
15451 className: styles$1o.SelectedOption
15452 }, selectedOption), React__default.createElement("span", {
15453 className: styles$1o.Icon
15454 }, React__default.createElement(Icon, {
15455 source: polarisIcons.ArrowUpDownMinor
15456 })));
15457 var optionsMarkup = normalizedOptions.map(renderOption);
15458 return React__default.createElement(Labelled, {
15459 id: id,
15460 label: label,
15461 error: error,
15462 action: labelAction,
15463 labelHidden: labelHidden,
15464 helpText: helpText
15465 }, React__default.createElement("div", {
15466 className: className
15467 }, React__default.createElement("select", {
15468 id: id,
15469 name: name,
15470 value: value,
15471 className: styles$1o.Input,
15472 disabled: disabled,
15473 onFocus: onFocus,
15474 onBlur: onBlur,
15475 onChange: handleChange,
15476 "aria-invalid": Boolean(error),
15477 "aria-describedby": describedBy.length ? describedBy.join(' ') : undefined
15478 }, optionsMarkup), contentMarkup, React__default.createElement("div", {
15479 className: styles$1o.Backdrop
15480 })));
15481}
15482
15483function isString(option) {
15484 return typeof option === 'string';
15485}
15486
15487function isGroup(option) {
15488 return option.options != null;
15489}
15490
15491function normalizeStringOption(option) {
15492 return {
15493 label: option,
15494 value: option
15495 };
15496}
15497/**
15498 * Converts a string option (and each string option in a Group) into
15499 * an Option object.
15500 */
15501
15502
15503function normalizeOption(option) {
15504 if (isString(option)) {
15505 return normalizeStringOption(option);
15506 } else if (isGroup(option)) {
15507 var title = option.title,
15508 options = option.options;
15509 return {
15510 title,
15511 options: options.map(function (option) {
15512 return isString(option) ? normalizeStringOption(option) : option;
15513 })
15514 };
15515 }
15516
15517 return option;
15518}
15519/**
15520 * Gets the text to display in the UI, for the currently selected option
15521 */
15522
15523
15524function getSelectedOption(options, value) {
15525 var flatOptions = flattenOptions(options);
15526 var selectedOption = flatOptions.find(function (option) {
15527 return value === option.value;
15528 });
15529
15530 if (selectedOption === undefined) {
15531 // Get the first visible option (not the hidden placeholder)
15532 selectedOption = flatOptions.find(function (option) {
15533 return !option.hidden;
15534 });
15535 }
15536
15537 return selectedOption ? selectedOption.label : '';
15538}
15539/**
15540 * Ungroups an options array
15541 */
15542
15543
15544function flattenOptions(options) {
15545 var flatOptions = [];
15546 options.forEach(function (optionOrGroup) {
15547 if (isGroup(optionOrGroup)) {
15548 flatOptions = flatOptions.concat(optionOrGroup.options);
15549 } else {
15550 flatOptions.push(optionOrGroup);
15551 }
15552 });
15553 return flatOptions;
15554}
15555
15556function renderSingleOption(option) {
15557 var value = option.value,
15558 label = option.label,
15559 rest = tslib_1.__rest(option, ["value", "label"]);
15560
15561 return React__default.createElement("option", Object.assign({
15562 key: value,
15563 value: value
15564 }, rest), label);
15565}
15566
15567function renderOption(optionOrGroup) {
15568 if (isGroup(optionOrGroup)) {
15569 var title = optionOrGroup.title,
15570 options = optionOrGroup.options;
15571 return React__default.createElement("optgroup", {
15572 label: title,
15573 key: title
15574 }, options.map(renderSingleOption));
15575 }
15576
15577 return renderSingleOption(optionOrGroup);
15578}
15579
15580var styles$1p = {
15581 "CheckableButton": "Polaris-ResourceList-CheckableButton",
15582 "globalTheming": "Polaris-ResourceList-CheckableButton--globalTheming",
15583 "CheckableButton-selectMode": "Polaris-ResourceList-CheckableButton__CheckableButton--selectMode",
15584 "CheckableButton-measuring": "Polaris-ResourceList-CheckableButton__CheckableButton--measuring",
15585 "CheckableButton-plain": "Polaris-ResourceList-CheckableButton__CheckableButton--plain",
15586 "CheckableButton-selected": "Polaris-ResourceList-CheckableButton__CheckableButton--selected",
15587 "Checkbox": "Polaris-ResourceList-CheckableButton__Checkbox",
15588 "Label": "Polaris-ResourceList-CheckableButton__Label"
15589};
15590
15591function CheckableButton(_ref) {
15592 var accessibilityLabel = _ref.accessibilityLabel,
15593 _ref$label = _ref.label,
15594 label = _ref$label === void 0 ? '' : _ref$label,
15595 onToggleAll = _ref.onToggleAll,
15596 selected = _ref.selected,
15597 selectMode = _ref.selectMode,
15598 plain = _ref.plain,
15599 measuring = _ref.measuring,
15600 disabled = _ref.disabled,
15601 smallScreen = _ref.smallScreen;
15602 var checkBoxRef = React.useRef(null);
15603
15604 var _useFeatures = useFeatures(),
15605 _useFeatures$unstable = _useFeatures.unstableGlobalTheming,
15606 unstableGlobalTheming = _useFeatures$unstable === void 0 ? false : _useFeatures$unstable;
15607
15608 var _React$useContext = React__default.useContext(ResourceListContext),
15609 registerCheckableButtons = _React$useContext.registerCheckableButtons;
15610
15611 var currentKey = 'bulkLg';
15612
15613 if (plain) {
15614 currentKey = 'plain';
15615 } else if (smallScreen) {
15616 currentKey = 'bulkSm';
15617 }
15618
15619 React.useEffect(function () {
15620 if (checkBoxRef.current && registerCheckableButtons) {
15621 registerCheckableButtons(currentKey, checkBoxRef.current);
15622 }
15623 }, [currentKey, registerCheckableButtons]);
15624 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']);
15625 return React__default.createElement("div", {
15626 className: className,
15627 onClick: onToggleAll
15628 }, React__default.createElement("div", {
15629 className: styles$1p.Checkbox
15630 }, React__default.createElement(Checkbox$1, {
15631 label: accessibilityLabel,
15632 labelHidden: true,
15633 checked: selected,
15634 disabled: disabled,
15635 onChange: onToggleAll,
15636 ref: checkBoxRef
15637 })), React__default.createElement("span", {
15638 className: styles$1p.Label
15639 }, label));
15640}
15641
15642var styles$1q = {
15643 "Group": "Polaris-ResourceList-BulkActions__Group",
15644 "Group-measuring": "Polaris-ResourceList-BulkActions__Group--measuring",
15645 "Group-entering": "Polaris-ResourceList-BulkActions__Group--entering",
15646 "Group-exiting": "Polaris-ResourceList-BulkActions__Group--exiting",
15647 "Group-entered": "Polaris-ResourceList-BulkActions__Group--entered",
15648 "Group-exited": "Polaris-ResourceList-BulkActions__Group--exited",
15649 "Group-smallScreen": "Polaris-ResourceList-BulkActions__Group--smallScreen",
15650 "Group-largeScreen": "Polaris-ResourceList-BulkActions__Group--largeScreen",
15651 "ButtonGroupWrapper": "Polaris-ResourceList-BulkActions__ButtonGroupWrapper",
15652 "BulkActionButton": "Polaris-ResourceList-BulkActions__BulkActionButton",
15653 "CheckableContainer": "Polaris-ResourceList-BulkActions__CheckableContainer",
15654 "disabled": "Polaris-ResourceList-BulkActions--disabled",
15655 "globalTheming": "Polaris-ResourceList-BulkActions--globalTheming",
15656 "PaginatedSelectAll": "Polaris-ResourceList-BulkActions__PaginatedSelectAll",
15657 "Slide": "Polaris-ResourceList-BulkActions__Slide",
15658 "Slide-appear": "Polaris-ResourceList-BulkActions__Slide--appear",
15659 "Slide-enter": "Polaris-ResourceList-BulkActions__Slide--enter",
15660 "Slide-exit": "Polaris-ResourceList-BulkActions__Slide--exit",
15661 "Slide-appearing": "Polaris-ResourceList-BulkActions__Slide--appearing",
15662 "Slide-entering": "Polaris-ResourceList-BulkActions__Slide--entering"
15663};
15664
15665var BulkActionButton =
15666/*#__PURE__*/
15667function (_React$PureComponent) {
15668 _inherits(BulkActionButton, _React$PureComponent);
15669
15670 function BulkActionButton() {
15671 var _this;
15672
15673 _classCallCheck(this, BulkActionButton);
15674
15675 _this = _possibleConstructorReturn(this, _getPrototypeOf(BulkActionButton).apply(this, arguments));
15676 _this.bulkActionButton = React.createRef();
15677 return _this;
15678 }
15679
15680 _createClass(BulkActionButton, [{
15681 key: "componentDidMount",
15682 value: function componentDidMount() {
15683 var handleMeasurement = this.props.handleMeasurement;
15684
15685 if (handleMeasurement && this.bulkActionButton.current) {
15686 var width = this.bulkActionButton.current.getBoundingClientRect().width;
15687 handleMeasurement(width);
15688 }
15689 }
15690 }, {
15691 key: "render",
15692 value: function render() {
15693 var _this$props = this.props,
15694 url = _this$props.url,
15695 external = _this$props.external,
15696 onAction = _this$props.onAction,
15697 content = _this$props.content,
15698 disclosure = _this$props.disclosure,
15699 accessibilityLabel = _this$props.accessibilityLabel,
15700 disabled = _this$props.disabled;
15701 return React__default.createElement("div", {
15702 className: styles$1q.BulkActionButton,
15703 ref: this.bulkActionButton
15704 }, React__default.createElement(Button, {
15705 external: external,
15706 url: url,
15707 "aria-label": accessibilityLabel,
15708 onClick: onAction,
15709 disabled: disabled,
15710 disclosure: disclosure
15711 }, content));
15712 }
15713 }]);
15714
15715 return BulkActionButton;
15716}(React__default.PureComponent);
15717
15718var MAX_PROMOTED_ACTIONS = 2;
15719var slideClasses = {
15720 appear: classNames(styles$1q.Slide, styles$1q['Slide-appear']),
15721 appearActive: classNames(styles$1q.Slide, styles$1q['Slide-appearing']),
15722 enter: classNames(styles$1q.Slide, styles$1q['Slide-enter']),
15723 enterActive: classNames(styles$1q.Slide, styles$1q['Slide-entering']),
15724 exit: classNames(styles$1q.Slide, styles$1q['Slide-exit'])
15725};
15726
15727var BulkActions =
15728/*#__PURE__*/
15729function (_React$PureComponent) {
15730 _inherits(BulkActions, _React$PureComponent);
15731
15732 function BulkActions() {
15733 var _this;
15734
15735 _classCallCheck(this, BulkActions);
15736
15737 _this = _possibleConstructorReturn(this, _getPrototypeOf(BulkActions).apply(this, arguments));
15738 _this.state = {
15739 smallScreenPopoverVisible: false,
15740 largeScreenPopoverVisible: false,
15741 containerWidth: 0,
15742 measuring: true
15743 };
15744 _this.checkableWrapperNode = React.createRef();
15745 _this.largeScreenGroupNode = React.createRef();
15746 _this.smallScreenGroupNode = React.createRef();
15747 _this.promotedActionsWidths = [];
15748 _this.bulkActionsWidth = 0;
15749 _this.addedMoreActionsWidthForMeasuring = 0;
15750 _this.handleResize = debounce(function () {
15751 var _this$state = _this.state,
15752 smallScreenPopoverVisible = _this$state.smallScreenPopoverVisible,
15753 largeScreenPopoverVisible = _this$state.largeScreenPopoverVisible;
15754
15755 if (_this.containerNode) {
15756 var containerWidth = _this.containerNode.getBoundingClientRect().width;
15757
15758 if (containerWidth > 0) {
15759 _this.setState({
15760 containerWidth
15761 });
15762 }
15763 }
15764
15765 if (smallScreenPopoverVisible || largeScreenPopoverVisible) {
15766 _this.setState({
15767 smallScreenPopoverVisible: false,
15768 largeScreenPopoverVisible: false
15769 });
15770 }
15771 }, 50, {
15772 trailing: true
15773 });
15774
15775 _this.setLargeScreenButtonsNode = function (node) {
15776 _this.largeScreenButtonsNode = node;
15777 };
15778
15779 _this.setContainerNode = function (node) {
15780 _this.containerNode = node;
15781 };
15782
15783 _this.setMoreActionsNode = function (node) {
15784 _this.moreActionsNode = node;
15785 };
15786
15787 _this.setSelectMode = function (val) {
15788 var onSelectModeToggle = _this.props.onSelectModeToggle;
15789
15790 if (onSelectModeToggle) {
15791 onSelectModeToggle(val);
15792 }
15793 };
15794
15795 _this.toggleSmallScreenPopover = function () {
15796 _this.setState(function (_ref) {
15797 var smallScreenPopoverVisible = _ref.smallScreenPopoverVisible;
15798 return {
15799 smallScreenPopoverVisible: !smallScreenPopoverVisible
15800 };
15801 });
15802 };
15803
15804 _this.toggleLargeScreenPopover = function () {
15805 _this.setState(function (_ref2) {
15806 var largeScreenPopoverVisible = _ref2.largeScreenPopoverVisible;
15807 return {
15808 largeScreenPopoverVisible: !largeScreenPopoverVisible
15809 };
15810 });
15811 };
15812
15813 _this.handleMeasurement = function (width) {
15814 var measuring = _this.state.measuring;
15815
15816 if (measuring) {
15817 _this.promotedActionsWidths.push(width);
15818 }
15819 };
15820
15821 _this.findLargeScreenGroupNode = function () {
15822 return _this.largeScreenGroupNode.current;
15823 };
15824
15825 _this.findCheckableWrapperNode = function () {
15826 return _this.checkableWrapperNode.current;
15827 };
15828
15829 _this.findSmallScreenGroupNode = function () {
15830 return _this.smallScreenGroupNode.current;
15831 };
15832
15833 return _this;
15834 }
15835
15836 _createClass(BulkActions, [{
15837 key: "componentDidMount",
15838 value: function componentDidMount() {
15839 var _this$props = this.props,
15840 actions = _this$props.actions,
15841 promotedActions = _this$props.promotedActions;
15842
15843 if (promotedActions && !actions && this.moreActionsNode) {
15844 this.addedMoreActionsWidthForMeasuring = this.moreActionsNode.getBoundingClientRect().width;
15845 }
15846
15847 this.bulkActionsWidth = this.largeScreenButtonsNode ? this.largeScreenButtonsNode.getBoundingClientRect().width - this.addedMoreActionsWidthForMeasuring : 0;
15848
15849 if (this.containerNode) {
15850 this.setState({
15851 containerWidth: this.containerNode.getBoundingClientRect().width,
15852 measuring: false
15853 });
15854 }
15855 }
15856 }, {
15857 key: "render",
15858 value: function render() {
15859 var _this2 = this;
15860
15861 var _this$props2 = this.props,
15862 selectMode = _this$props2.selectMode,
15863 accessibilityLabel = _this$props2.accessibilityLabel,
15864 _this$props2$label = _this$props2.label,
15865 label = _this$props2$label === void 0 ? '' : _this$props2$label,
15866 onToggleAll = _this$props2.onToggleAll,
15867 selected = _this$props2.selected,
15868 smallScreen = _this$props2.smallScreen,
15869 disabled = _this$props2.disabled,
15870 promotedActions = _this$props2.promotedActions,
15871 _this$props2$paginate = _this$props2.paginatedSelectAllText,
15872 paginatedSelectAllText = _this$props2$paginate === void 0 ? null : _this$props2$paginate,
15873 paginatedSelectAllAction = _this$props2.paginatedSelectAllAction,
15874 intl = _this$props2.polaris.intl;
15875
15876 if (promotedActions && promotedActions.length > MAX_PROMOTED_ACTIONS) {
15877 // eslint-disable-next-line no-console
15878 console.warn(intl.translate('Polaris.ResourceList.BulkActions.warningMessage', {
15879 maxPromotedActions: MAX_PROMOTED_ACTIONS
15880 }));
15881 }
15882
15883 var _this$state2 = this.state,
15884 smallScreenPopoverVisible = _this$state2.smallScreenPopoverVisible,
15885 largeScreenPopoverVisible = _this$state2.largeScreenPopoverVisible,
15886 measuring = _this$state2.measuring;
15887 var paginatedSelectAllActionMarkup = paginatedSelectAllAction ? React__default.createElement(Button, {
15888 onClick: paginatedSelectAllAction.onAction,
15889 plain: true,
15890 disabled: disabled
15891 }, paginatedSelectAllAction.content) : null;
15892 var paginatedSelectAllTextMarkup = paginatedSelectAllText && paginatedSelectAllAction ? React__default.createElement("span", {
15893 "aria-live": "polite"
15894 }, paginatedSelectAllText) : paginatedSelectAllText;
15895 var paginatedSelectAllMarkup = paginatedSelectAllActionMarkup || paginatedSelectAllTextMarkup ? React__default.createElement("div", {
15896 className: styles$1q.PaginatedSelectAll
15897 }, paginatedSelectAllTextMarkup, " ", paginatedSelectAllActionMarkup) : null;
15898 var cancelButton = React__default.createElement(Button, {
15899 onClick: this.setSelectMode.bind(this, false),
15900 disabled: disabled
15901 }, intl.translate('Polaris.Common.cancel'));
15902 var numberOfPromotedActionsToRender = this.numberOfPromotedActionsToRender;
15903 var allActionsPopover = this.hasActions ? React__default.createElement("div", {
15904 className: styles$1q.Popover,
15905 ref: this.setMoreActionsNode
15906 }, React__default.createElement(Popover, {
15907 active: smallScreenPopoverVisible,
15908 activator: React__default.createElement(BulkActionButton, {
15909 disclosure: true,
15910 onAction: this.toggleSmallScreenPopover,
15911 content: intl.translate('Polaris.ResourceList.BulkActions.actionsActivatorLabel'),
15912 disabled: disabled
15913 }),
15914 onClose: this.toggleSmallScreenPopover
15915 }, React__default.createElement(ActionList, {
15916 items: promotedActions,
15917 sections: this.actionSections,
15918 onActionAnyItem: this.toggleSmallScreenPopover
15919 }))) : null;
15920 var promotedActionsMarkup = promotedActions && numberOfPromotedActionsToRender > 0 ? _toConsumableArray(promotedActions).slice(0, numberOfPromotedActionsToRender).map(function (action, index) {
15921 return React__default.createElement(BulkActionButton, Object.assign({
15922 disabled: disabled
15923 }, action, {
15924 key: index,
15925 handleMeasurement: _this2.handleMeasurement
15926 }));
15927 }) : null;
15928 var rolledInPromotedActions = promotedActions && numberOfPromotedActionsToRender < promotedActions.length ? _toConsumableArray(promotedActions).slice(numberOfPromotedActionsToRender) : [];
15929 var activatorLabel = !promotedActions || promotedActions && numberOfPromotedActionsToRender === 0 && !measuring ? intl.translate('Polaris.ResourceList.BulkActions.actionsActivatorLabel') : intl.translate('Polaris.ResourceList.BulkActions.moreActionsActivatorLabel');
15930 var combinedActions = [];
15931
15932 if (this.actionSections && rolledInPromotedActions.length > 0) {
15933 combinedActions = [{
15934 items: rolledInPromotedActions
15935 }].concat(_toConsumableArray(this.actionSections));
15936 } else if (this.actionSections) {
15937 combinedActions = this.actionSections;
15938 } else if (rolledInPromotedActions.length > 0) {
15939 combinedActions = [{
15940 items: rolledInPromotedActions
15941 }];
15942 }
15943
15944 var actionsPopover = this.actionSections || rolledInPromotedActions.length > 0 || measuring ? React__default.createElement("div", {
15945 className: styles$1q.Popover,
15946 ref: this.setMoreActionsNode
15947 }, React__default.createElement(Popover, {
15948 active: largeScreenPopoverVisible,
15949 activator: React__default.createElement(BulkActionButton, {
15950 disclosure: true,
15951 onAction: this.toggleLargeScreenPopover,
15952 content: activatorLabel,
15953 disabled: disabled
15954 }),
15955 onClose: this.toggleLargeScreenPopover
15956 }, React__default.createElement(ActionList, {
15957 sections: combinedActions,
15958 onActionAnyItem: this.toggleLargeScreenPopover
15959 }))) : null;
15960 var checkableButtonProps = {
15961 accessibilityLabel,
15962 label,
15963 selected,
15964 selectMode,
15965 onToggleAll,
15966 measuring,
15967 disabled
15968 };
15969 var smallScreenGroup = smallScreen ? React__default.createElement(reactTransitionGroup.Transition, {
15970 timeout: 0,
15971 in: selectMode,
15972 key: "smallGroup",
15973 findDOMNode: this.findSmallScreenGroupNode
15974 }, function (status) {
15975 var smallScreenGroupClassName = classNames(styles$1q.Group, styles$1q['Group-smallScreen'], styles$1q["Group-".concat(status)]);
15976 return React__default.createElement("div", {
15977 className: smallScreenGroupClassName,
15978 ref: _this2.smallScreenGroupNode
15979 }, React__default.createElement("div", {
15980 className: styles$1q.ButtonGroupWrapper
15981 }, React__default.createElement(ButtonGroup, {
15982 segmented: true
15983 }, React__default.createElement(reactTransitionGroup.CSSTransition, {
15984 findDOMNode: _this2.findCheckableWrapperNode,
15985 in: selectMode,
15986 timeout: tokens.durationBase,
15987 classNames: slideClasses,
15988 appear: !selectMode
15989 }, React__default.createElement("div", {
15990 className: styles$1q.CheckableContainer,
15991 ref: _this2.checkableWrapperNode
15992 }, React__default.createElement(CheckableButton, Object.assign({}, checkableButtonProps, {
15993 smallScreen: true
15994 })))), allActionsPopover, cancelButton)), paginatedSelectAllMarkup);
15995 }) : null;
15996 var largeGroupContent = promotedActionsMarkup || actionsPopover ? React__default.createElement(ButtonGroup, {
15997 segmented: true
15998 }, React__default.createElement(CheckableButton, checkableButtonProps), promotedActionsMarkup, actionsPopover) : React__default.createElement(CheckableButton, checkableButtonProps);
15999 var largeScreenGroup = smallScreen ? null : React__default.createElement(reactTransitionGroup.Transition, {
16000 timeout: 0,
16001 in: selectMode,
16002 key: "largeGroup",
16003 findDOMNode: this.findLargeScreenGroupNode
16004 }, function (status) {
16005 var largeScreenGroupClassName = classNames(styles$1q.Group, styles$1q['Group-largeScreen'], !measuring && styles$1q["Group-".concat(status)], measuring && styles$1q['Group-measuring']);
16006 return React__default.createElement("div", {
16007 className: largeScreenGroupClassName,
16008 ref: _this2.largeScreenGroupNode
16009 }, React__default.createElement(EventListener, {
16010 event: "resize",
16011 handler: _this2.handleResize
16012 }), React__default.createElement("div", {
16013 className: styles$1q.ButtonGroupWrapper,
16014 ref: _this2.setLargeScreenButtonsNode
16015 }, largeGroupContent), paginatedSelectAllMarkup);
16016 });
16017 return React__default.createElement("div", {
16018 ref: this.setContainerNode
16019 }, smallScreenGroup, largeScreenGroup);
16020 }
16021 }, {
16022 key: "numberOfPromotedActionsToRender",
16023 get: function get() {
16024 var promotedActions = this.props.promotedActions;
16025 var _this$state3 = this.state,
16026 containerWidth = _this$state3.containerWidth,
16027 measuring = _this$state3.measuring;
16028
16029 if (!promotedActions) {
16030 return 0;
16031 }
16032
16033 if (containerWidth >= this.bulkActionsWidth || measuring) {
16034 return promotedActions.length;
16035 }
16036
16037 var sufficientSpace = false;
16038 var counter = promotedActions.length - 1;
16039 var totalWidth = 0;
16040
16041 while (!sufficientSpace && counter >= 0) {
16042 totalWidth += this.promotedActionsWidths[counter];
16043 var widthWithRemovedAction = this.bulkActionsWidth - totalWidth + this.addedMoreActionsWidthForMeasuring;
16044
16045 if (containerWidth >= widthWithRemovedAction) {
16046 sufficientSpace = true;
16047 } else {
16048 counter--;
16049 }
16050 }
16051
16052 return counter;
16053 }
16054 }, {
16055 key: "hasActions",
16056 get: function get() {
16057 var _this$props3 = this.props,
16058 promotedActions = _this$props3.promotedActions,
16059 actions = _this$props3.actions;
16060 return Boolean(promotedActions && promotedActions.length > 0 || actions && actions.length > 0);
16061 }
16062 }, {
16063 key: "actionSections",
16064 get: function get() {
16065 var actions = this.props.actions;
16066
16067 if (!actions || actions.length === 0) {
16068 return;
16069 }
16070
16071 if (instanceOfBulkActionListSectionArray(actions)) {
16072 return actions;
16073 }
16074
16075 if (instanceOfBulkActionArray(actions)) {
16076 return [{
16077 items: actions
16078 }];
16079 }
16080 }
16081 }]);
16082
16083 return BulkActions;
16084}(React__default.PureComponent);
16085
16086function instanceOfBulkActionListSectionArray(actions) {
16087 var validList = actions.filter(function (action) {
16088 return action.items;
16089 });
16090 return actions.length === validList.length;
16091}
16092
16093function instanceOfBulkActionArray(actions) {
16094 var validList = actions.filter(function (action) {
16095 return !action.items;
16096 });
16097 return actions.length === validList.length;
16098} // Use named export once withAppProvider is refactored away
16099// eslint-disable-next-line import/no-default-export
16100
16101
16102var BulkActions$1 = withAppProvider()(BulkActions);
16103
16104var styles$1r = {
16105 "DateTextField": "Polaris-FilterControl-DateSelector__DateTextField",
16106 "DatePicker": "Polaris-FilterControl-DateSelector__DatePicker"
16107};
16108
16109var VALID_DATE_REGEX = /^\d{4}-\d{1,2}-\d{1,2}$/;
16110var DateFilterOption;
16111
16112(function (DateFilterOption) {
16113 DateFilterOption["PastWeek"] = "past_week";
16114 DateFilterOption["PastMonth"] = "past_month";
16115 DateFilterOption["PastQuarter"] = "past_quarter";
16116 DateFilterOption["PastYear"] = "past_year";
16117 DateFilterOption["ComingWeek"] = "coming_week";
16118 DateFilterOption["ComingMonth"] = "coming_month";
16119 DateFilterOption["ComingQuarter"] = "coming_quarter";
16120 DateFilterOption["ComingYear"] = "coming_year";
16121 DateFilterOption["OnOrBefore"] = "on_or_before";
16122 DateFilterOption["OnOrAfter"] = "on_or_after";
16123})(DateFilterOption || (DateFilterOption = {}));
16124
16125var DateSelector = React.memo(function DateSelector(_ref) {
16126 var filterValue = _ref.filterValue,
16127 filterKey = _ref.filterKey,
16128 filterMinKey = _ref.filterMinKey,
16129 filterMaxKey = _ref.filterMaxKey,
16130 dateOptionType = _ref.dateOptionType,
16131 onFilterValueChange = _ref.onFilterValueChange,
16132 onFilterKeyChange = _ref.onFilterKeyChange;
16133 var now = new Date();
16134 var i18n = useI18n();
16135 var initialConsumerFilterKey = React.useRef(filterKey);
16136
16137 var _useState = React.useState(now.getMonth()),
16138 _useState2 = _slicedToArray(_useState, 2),
16139 datePickerMonth = _useState2[0],
16140 setDatePickerMonth = _useState2[1];
16141
16142 var _useState3 = React.useState(now.getFullYear()),
16143 _useState4 = _slicedToArray(_useState3, 2),
16144 datePickerYear = _useState4[0],
16145 setDatePickerYear = _useState4[1];
16146
16147 var _useState5 = React.useState(),
16148 _useState6 = _slicedToArray(_useState5, 2),
16149 selectedDate = _useState6[0],
16150 setSelectedDate = _useState6[1];
16151
16152 var _useState7 = React.useState(),
16153 _useState8 = _slicedToArray(_useState7, 2),
16154 userInputDate = _useState8[0],
16155 setUserInputDate = _useState8[1];
16156
16157 var _useState9 = React.useState(),
16158 _useState10 = _slicedToArray(_useState9, 2),
16159 userInputDateError = _useState10[0],
16160 setUserInputDateError = _useState10[1];
16161
16162 var dateTextFieldValue = getDateTextFieldValue();
16163 var handleDateFieldChange = React.useCallback(function (value) {
16164 if (value.length === 0) {
16165 setSelectedDate(undefined);
16166 onFilterValueChange(undefined);
16167 }
16168
16169 if (userInputDateError && isValidDate(value)) {
16170 setUserInputDateError(undefined);
16171 }
16172
16173 setUserInputDate(value);
16174 }, [onFilterValueChange, userInputDateError]);
16175 var handleDateChanged = React.useCallback(function (date) {
16176 if (!date) {
16177 return;
16178 }
16179
16180 onFilterValueChange(stripTimeFromISOString(formatDateForLocalTimezone(date)));
16181 }, [onFilterValueChange]);
16182 var handleDateBlur = React.useCallback(function () {
16183 if (!dateTextFieldValue || !isValidDate(dateTextFieldValue)) {
16184 setSelectedDate(undefined);
16185 setUserInputDateError(i18n.translate('Polaris.ResourceList.DateSelector.dateValueError'));
16186 onFilterValueChange(undefined);
16187 return;
16188 }
16189
16190 if (!userInputDate) {
16191 return;
16192 }
16193
16194 var formattedDateForTimezone = new Date(formatDateForLocalTimezone(new Date(userInputDate)));
16195 setSelectedDate(formattedDateForTimezone);
16196 setDatePickerMonth(formattedDateForTimezone.getMonth());
16197 setDatePickerYear(formattedDateForTimezone.getFullYear());
16198 setUserInputDate(undefined);
16199 setUserInputDateError(undefined);
16200 handleDateChanged(formattedDateForTimezone);
16201 }, [dateTextFieldValue, handleDateChanged, i18n, onFilterValueChange, userInputDate]);
16202 var handleDateFilterOptionsChange = React.useCallback(function (newOption) {
16203 if (!initialConsumerFilterKey.current) {
16204 return;
16205 }
16206
16207 if (newOption === DateFilterOption.OnOrBefore) {
16208 onFilterKeyChange(filterMaxKey);
16209 onFilterValueChange(selectedDate ? stripTimeFromISOString(formatDateForLocalTimezone(selectedDate)) : undefined);
16210 return;
16211 }
16212
16213 if (newOption === DateFilterOption.OnOrAfter) {
16214 onFilterKeyChange(filterMinKey);
16215 onFilterValueChange(selectedDate ? stripTimeFromISOString(formatDateForLocalTimezone(selectedDate)) : undefined);
16216 return;
16217 }
16218
16219 onFilterKeyChange(initialConsumerFilterKey.current);
16220 onFilterValueChange(newOption);
16221 }, [filterMaxKey, filterMinKey, initialConsumerFilterKey, onFilterKeyChange, onFilterValueChange, selectedDate]);
16222 var handleDatePickerChange = React.useCallback(function (_ref2) {
16223 var nextDate = _ref2.end;
16224 var date = new Date(nextDate);
16225 setSelectedDate(date);
16226 setUserInputDate(undefined);
16227 setUserInputDateError(undefined);
16228 handleDateChanged(date);
16229 }, [handleDateChanged]);
16230 var handleDatePickerMonthChange = React.useCallback(function (month, year) {
16231 setDatePickerMonth(month);
16232 setDatePickerYear(year);
16233 }, []);
16234 var dateFilterOption = getDateFilterOption(filterValue, filterKey, filterMinKey, filterMaxKey);
16235 var showDatePredicate = dateFilterOption === DateFilterOption.OnOrBefore || dateFilterOption === DateFilterOption.OnOrAfter;
16236 var datePredicateMarkup = showDatePredicate && React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
16237 className: styles$1r.DateTextField
16238 }, React__default.createElement(TextField, {
16239 label: i18n.translate('Polaris.ResourceList.DateSelector.dateValueLabel'),
16240 placeholder: i18n.translate('Polaris.ResourceList.DateSelector.dateValuePlaceholder'),
16241 value: dateTextFieldValue,
16242 error: userInputDateError,
16243 prefix: React__default.createElement(Icon, {
16244 source: polarisIcons.CalendarMinor,
16245 color: "skyDark"
16246 }),
16247 autoComplete: false,
16248 onChange: handleDateFieldChange,
16249 onBlur: handleDateBlur
16250 })), React__default.createElement("div", {
16251 className: styles$1r.DatePicker
16252 }, React__default.createElement(DatePicker, {
16253 selected: selectedDate,
16254 month: datePickerMonth,
16255 year: datePickerYear,
16256 onChange: handleDatePickerChange,
16257 onMonthChange: handleDatePickerMonthChange
16258 })));
16259 var dateOptionTypes = {
16260 past: [].concat(_toConsumableArray(getDatePastOptions()), _toConsumableArray(getDateComparatorOptions())),
16261 future: [].concat(_toConsumableArray(getDateFutureOptions()), _toConsumableArray(getDateComparatorOptions())),
16262 full: [].concat(_toConsumableArray(getDatePastOptions()), _toConsumableArray(getDateFutureOptions()), _toConsumableArray(getDateComparatorOptions()))
16263 };
16264 return React__default.createElement(React__default.Fragment, null, React__default.createElement(Select, {
16265 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.dateFilterLabel'),
16266 labelHidden: true,
16267 options: dateOptionType ? dateOptionTypes[dateOptionType] : dateOptionTypes.full,
16268 placeholder: i18n.translate('Polaris.ResourceList.FilterValueSelector.selectFilterValuePlaceholder'),
16269 value: dateFilterOption,
16270 onChange: handleDateFilterOptionsChange
16271 }), datePredicateMarkup);
16272
16273 function getDateComparatorOptions() {
16274 return [{
16275 value: DateFilterOption.OnOrBefore,
16276 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.OnOrBefore')
16277 }, {
16278 value: DateFilterOption.OnOrAfter,
16279 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.OnOrAfter')
16280 }];
16281 }
16282
16283 function getDatePastOptions() {
16284 return [{
16285 value: DateFilterOption.PastWeek,
16286 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.PastWeek')
16287 }, {
16288 value: DateFilterOption.PastMonth,
16289 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.PastMonth')
16290 }, {
16291 value: DateFilterOption.PastQuarter,
16292 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.PastQuarter')
16293 }, {
16294 value: DateFilterOption.PastYear,
16295 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.PastYear')
16296 }];
16297 }
16298
16299 function getDateFutureOptions() {
16300 return [{
16301 value: DateFilterOption.ComingWeek,
16302 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.ComingWeek')
16303 }, {
16304 value: DateFilterOption.ComingMonth,
16305 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.ComingMonth')
16306 }, {
16307 value: DateFilterOption.ComingQuarter,
16308 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.ComingQuarter')
16309 }, {
16310 value: DateFilterOption.ComingYear,
16311 label: i18n.translate('Polaris.ResourceList.DateSelector.SelectOptions.ComingYear')
16312 }];
16313 }
16314
16315 function getDateTextFieldValue() {
16316 if (!userInputDate && !selectedDate) {
16317 return undefined;
16318 }
16319
16320 if (userInputDate !== undefined) {
16321 return userInputDate;
16322 }
16323
16324 if (selectedDate) {
16325 return stripTimeFromISOString(formatDateForLocalTimezone(selectedDate));
16326 }
16327 }
16328});
16329
16330function isValidDate(date) {
16331 if (!date) {
16332 return false;
16333 }
16334
16335 return VALID_DATE_REGEX.test(date) && !isNaN(new Date(date).getTime());
16336}
16337
16338function getDateFilterOption(filterValue, filterKey, filterMinKey, filterMaxKey) {
16339 if (filterKey === filterMaxKey) {
16340 return DateFilterOption.OnOrBefore;
16341 }
16342
16343 if (filterKey === filterMinKey) {
16344 return DateFilterOption.OnOrAfter;
16345 }
16346
16347 return filterValue;
16348}
16349
16350function stripTimeFromISOString(ISOString) {
16351 return ISOString.slice(0, 10);
16352}
16353
16354function formatDateForLocalTimezone(date) {
16355 var timezoneOffset = date.getTimezoneOffset();
16356 var timezoneOffsetMs = timezoneOffset * 60 * 1000;
16357 var isFringeTimezone = timezoneOffset === -720 || timezoneOffset === 720;
16358 var formattedDate = new Date();
16359
16360 if (isFringeTimezone && date.getHours() !== 0) {
16361 return date.toISOString();
16362 }
16363
16364 var newTime = timezoneOffset > -1 ? date.getTime() + timezoneOffsetMs : date.getTime() - timezoneOffsetMs;
16365 formattedDate.setTime(newTime);
16366 return formattedDate.toISOString();
16367}
16368
16369(function (FilterType) {
16370 FilterType[FilterType["Select"] = 0] = "Select";
16371 FilterType[FilterType["TextField"] = 1] = "TextField";
16372 FilterType[FilterType["DateSelector"] = 2] = "DateSelector";
16373})(exports.FilterType || (exports.FilterType = {}));
16374
16375/**
16376 * Returns a MutatableRefObject containing a boolean value that
16377 * represents a components mounted status.
16378 * @returns MutableRefObject<boolean> The mounted status
16379 */
16380
16381function useIsMountedRef() {
16382 var isMounted = React.useRef(false);
16383 React.useEffect(function () {
16384 isMounted.current = true;
16385 return function () {
16386 isMounted.current = false;
16387 };
16388 }, []);
16389 return isMounted;
16390}
16391
16392function FilterValueSelector(_ref) {
16393 var filter = _ref.filter,
16394 filterKey = _ref.filterKey,
16395 value = _ref.value,
16396 onChange = _ref.onChange,
16397 onFilterKeyChange = _ref.onFilterKeyChange;
16398
16399 var _useI18n = useI18n(),
16400 translate = _useI18n.translate;
16401
16402 var isMounted = useIsMountedRef();
16403 var operatorText = filter.operatorText,
16404 type = filter.type,
16405 label = filter.label;
16406 var showOperatorOptions = type !== exports.FilterType.DateSelector && operatorText && typeof operatorText !== 'string';
16407 var handleOperatorOptionChange = React.useCallback(function (operatorKey) {
16408 onFilterKeyChange(operatorKey);
16409
16410 if (!value) {
16411 return;
16412 }
16413
16414 onChange(value);
16415 }, [onChange, onFilterKeyChange, value]);
16416
16417 if (showOperatorOptions && operatorText.length !== 0 && !isMounted.current) {
16418 handleOperatorOptionChange(operatorText[0].key);
16419 }
16420
16421 var operatorOptionsMarkup = showOperatorOptions ? React__default.createElement(Select, {
16422 label: label,
16423 labelHidden: true,
16424 options: buildOperatorOptions(operatorText),
16425 value: filterKey,
16426 onChange: handleOperatorOptionChange
16427 }) : null;
16428 var selectedFilterLabel = typeof operatorText === 'string' ? operatorText : '';
16429
16430 switch (filter.type) {
16431 case exports.FilterType.Select:
16432 return React__default.createElement(Stack, {
16433 vertical: true
16434 }, operatorOptionsMarkup, React__default.createElement(Select, {
16435 label: selectedFilterLabel,
16436 options: filter.options,
16437 placeholder: translate('Polaris.ResourceList.FilterValueSelector.selectFilterValuePlaceholder'),
16438 value: value,
16439 onChange: onChange
16440 }));
16441
16442 case exports.FilterType.TextField:
16443 return React__default.createElement(Stack, {
16444 vertical: true
16445 }, operatorOptionsMarkup, React__default.createElement(TextField, {
16446 label: selectedFilterLabel,
16447 value: value,
16448 type: filter.textFieldType,
16449 onChange: onChange
16450 }));
16451
16452 case exports.FilterType.DateSelector:
16453 return React__default.createElement(DateSelector, {
16454 dateOptionType: filter.dateOptionType,
16455 filterValue: value,
16456 filterKey: filterKey,
16457 filterMinKey: filter.minKey,
16458 filterMaxKey: filter.maxKey,
16459 onFilterValueChange: onChange,
16460 onFilterKeyChange: onFilterKeyChange
16461 });
16462
16463 default:
16464 return null;
16465 }
16466}
16467
16468function buildOperatorOptions(operatorText) {
16469 if (!operatorText || typeof operatorText === 'string') {
16470 return [];
16471 }
16472
16473 return operatorText.map(function (_ref2) {
16474 var key = _ref2.key,
16475 optionLabel = _ref2.optionLabel;
16476 return {
16477 value: key,
16478 label: optionLabel
16479 };
16480 });
16481}
16482
16483function FilterCreator(_ref) {
16484 var filters = _ref.filters,
16485 resourceName = _ref.resourceName,
16486 disabled = _ref.disabled,
16487 onAddFilter = _ref.onAddFilter;
16488
16489 var _useForcibleToggle = useForcibleToggle(false),
16490 _useForcibleToggle2 = _slicedToArray(_useForcibleToggle, 2),
16491 popoverActive = _useForcibleToggle2[0],
16492 _useForcibleToggle2$ = _useForcibleToggle2[1],
16493 togglePopoverActive = _useForcibleToggle2$.toggle,
16494 setPopoverActiveFalse = _useForcibleToggle2$.forceFalse;
16495
16496 var _useState = React.useState(),
16497 _useState2 = _slicedToArray(_useState, 2),
16498 selectedFilter = _useState2[0],
16499 setSelectedFilter = _useState2[1];
16500
16501 var _useState3 = React.useState(),
16502 _useState4 = _slicedToArray(_useState3, 2),
16503 selectedFilterKey = _useState4[0],
16504 setSelectedFilterKey = _useState4[1];
16505
16506 var _useState5 = React.useState(),
16507 _useState6 = _slicedToArray(_useState5, 2),
16508 selectedFilterValue = _useState6[0],
16509 setSelectedFilterValue = _useState6[1];
16510
16511 var i18n = useI18n();
16512 var node = React.useRef(null);
16513 var canAddFilter = Boolean(selectedFilter && selectedFilterKey && selectedFilterValue);
16514 var handleButtonFocus = React.useCallback(function () {
16515 var event = arguments.length <= 0 ? undefined : arguments[0];
16516
16517 if (!node.current && event) {
16518 // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065
16519 node.current = event.target;
16520 }
16521 }, []);
16522 var handleFilterKeyChange = React.useCallback(function (filterKey) {
16523 var foundFilter = filters.find(function (filter) {
16524 var minKey = filter.minKey,
16525 maxKey = filter.maxKey,
16526 operatorText = filter.operatorText;
16527
16528 if (minKey || maxKey) {
16529 return filter.key === filterKey || minKey === filterKey || maxKey === filterKey;
16530 }
16531
16532 if (operatorText && typeof operatorText !== 'string') {
16533 return filter.key === filterKey || operatorText.filter(function (_ref2) {
16534 var key = _ref2.key;
16535 return key === filterKey;
16536 }).length === 1;
16537 }
16538
16539 return filter.key === filterKey;
16540 });
16541
16542 if (!foundFilter) {
16543 return;
16544 }
16545
16546 setSelectedFilter(foundFilter);
16547 setSelectedFilterKey(filterKey);
16548 setSelectedFilterValue(undefined);
16549 }, [filters]);
16550 var handleFilterValueChange = React.useCallback(function (value) {
16551 setSelectedFilterValue(value);
16552 }, []);
16553 var handleAddFilter = React.useCallback(function () {
16554 if (!onAddFilter || !canAddFilter || !selectedFilterKey) {
16555 return;
16556 }
16557
16558 onAddFilter({
16559 key: selectedFilterKey,
16560 value: selectedFilterValue || ''
16561 });
16562 setPopoverActiveFalse();
16563 setSelectedFilter(undefined);
16564 setSelectedFilterValue(undefined);
16565
16566 if (node.current != null) {
16567 node.current.focus();
16568 }
16569 }, [canAddFilter, onAddFilter, selectedFilterKey, selectedFilterValue, setPopoverActiveFalse]);
16570 var activator = React__default.createElement(Button, {
16571 onClick: togglePopoverActive,
16572 disclosure: true,
16573 disabled: disabled,
16574 onFocus: handleButtonFocus
16575 }, i18n.translate('Polaris.ResourceList.FilterCreator.filterButtonLabel'));
16576 var filterOptions = filters.map(function (_ref3) {
16577 var key = _ref3.key,
16578 label = _ref3.label;
16579 return {
16580 value: key,
16581 label
16582 };
16583 });
16584 var filterValueSelectionMarkup = selectedFilter ? React__default.createElement(FilterValueSelector, {
16585 filter: selectedFilter,
16586 filterKey: selectedFilterKey,
16587 value: selectedFilterValue,
16588 onFilterKeyChange: handleFilterKeyChange,
16589 onChange: handleFilterValueChange
16590 }) : null;
16591 var addFilterButtonMarkup = selectedFilter ? React__default.createElement(Button, {
16592 onClick: handleAddFilter,
16593 disabled: !canAddFilter
16594 }, i18n.translate('Polaris.ResourceList.FilterCreator.addFilterButtonLabel')) : null;
16595 return React__default.createElement(Popover, {
16596 active: popoverActive,
16597 activator: activator,
16598 onClose: togglePopoverActive,
16599 sectioned: true,
16600 fullHeight: true
16601 }, React__default.createElement(Form, {
16602 onSubmit: handleAddFilter
16603 }, React__default.createElement(FormLayout, null, React__default.createElement(Select, {
16604 label: i18n.translate('Polaris.ResourceList.FilterCreator.showAllWhere', {
16605 resourceNamePlural: resourceName.plural.toLocaleLowerCase()
16606 }),
16607 placeholder: i18n.translate('Polaris.ResourceList.FilterCreator.selectFilterKeyPlaceholder'),
16608 options: filterOptions,
16609 onChange: handleFilterKeyChange,
16610 value: selectedFilter && selectedFilter.key
16611 }), filterValueSelectionMarkup, addFilterButtonMarkup)));
16612}
16613
16614var styles$1s = {
16615 "AppliedFilters": "Polaris-ResourceList-FilterControl__AppliedFilters",
16616 "AppliedFilter": "Polaris-ResourceList-FilterControl__AppliedFilter"
16617};
16618
16619/** @deprecated Use <Filters /> instead. */
16620
16621function FilterControl(_ref) {
16622 var searchValue = _ref.searchValue,
16623 _ref$appliedFilters = _ref.appliedFilters,
16624 appliedFilters = _ref$appliedFilters === void 0 ? [] : _ref$appliedFilters,
16625 additionalAction = _ref.additionalAction,
16626 _ref$focused = _ref.focused,
16627 focused = _ref$focused === void 0 ? false : _ref$focused,
16628 _ref$filters = _ref.filters,
16629 filters = _ref$filters === void 0 ? [] : _ref$filters,
16630 placeholder = _ref.placeholder,
16631 onSearchBlur = _ref.onSearchBlur,
16632 onSearchChange = _ref.onSearchChange,
16633 onFiltersChange = _ref.onFiltersChange;
16634 // eslint-disable-next-line no-console
16635 console.warn('Deprecation: <FilterControl /> is deprecated. Use <Filters /> instead.');
16636 var i18n = useI18n();
16637
16638 var _React$useContext = React__default.useContext(ResourceListContext),
16639 selectMode = _React$useContext.selectMode,
16640 resourceName = _React$useContext.resourceName;
16641
16642 var filterResourceName = resourceName || {
16643 singular: i18n.translate('Polaris.ResourceList.defaultItemSingular'),
16644 plural: i18n.translate('Polaris.ResourceList.defaultItemPlural')
16645 };
16646 var handleAddFilter = React__default.useCallback(function (newFilter) {
16647 if (!onFiltersChange) {
16648 return;
16649 }
16650
16651 var foundFilter = appliedFilters.find(function (appliedFilter) {
16652 return idFromFilter(appliedFilter) === idFromFilter(newFilter);
16653 });
16654
16655 if (foundFilter) {
16656 return;
16657 }
16658
16659 var newAppliedFilters = [].concat(_toConsumableArray(appliedFilters), [newFilter]);
16660 onFiltersChange(newAppliedFilters);
16661 }, [onFiltersChange, appliedFilters]);
16662 var handleRemoveFilter = React__default.useCallback(function (filterId) {
16663 if (!onFiltersChange) {
16664 return;
16665 }
16666
16667 var foundIndex = appliedFilters.findIndex(function (appliedFilter) {
16668 return idFromFilter(appliedFilter) === filterId;
16669 });
16670 var newAppliedFilters = foundIndex >= 0 ? [].concat(_toConsumableArray(appliedFilters.slice(0, foundIndex)), _toConsumableArray(appliedFilters.slice(foundIndex + 1, appliedFilters.length))) : _toConsumableArray(appliedFilters);
16671 onFiltersChange(newAppliedFilters);
16672 }, [appliedFilters, onFiltersChange]);
16673 var getRemoveFilterCallback = React__default.useCallback(function (filterId) {
16674 return function () {
16675 handleRemoveFilter(filterId);
16676 };
16677 }, [handleRemoveFilter]);
16678 var textFieldLabel = placeholder ? placeholder : i18n.translate('Polaris.ResourceList.FilterControl.textFieldLabel', {
16679 resourceNamePlural: filterResourceName.plural.toLocaleLowerCase()
16680 });
16681
16682 if (additionalAction) {
16683 additionalAction.disabled = selectMode;
16684 }
16685
16686 var additionalActionButton = additionalAction && buttonsFrom(additionalAction) || null;
16687 var filterCreatorMarkup = filters.length > 0 ? React__default.createElement(FilterCreator, {
16688 resourceName: filterResourceName,
16689 filters: filters,
16690 onAddFilter: handleAddFilter,
16691 disabled: selectMode
16692 }) : null;
16693 var appliedFiltersMarkup = appliedFilters.map(function (appliedFilter) {
16694 var activeFilterLabel = getFilterLabel(appliedFilter);
16695 var filterId = idFromFilter(appliedFilter);
16696 return React__default.createElement("li", {
16697 className: styles$1s.AppliedFilter,
16698 key: filterId
16699 }, React__default.createElement(Tag, {
16700 onRemove: getRemoveFilterCallback(filterId),
16701 disabled: selectMode
16702 }, activeFilterLabel));
16703 });
16704 var appliedFiltersWrapper = appliedFilters.length > 0 ? React__default.createElement("ul", {
16705 className: styles$1s.AppliedFilters
16706 }, appliedFiltersMarkup) : null;
16707 return React__default.createElement(FormLayout, null, React__default.createElement(TextField, {
16708 connectedLeft: filterCreatorMarkup,
16709 connectedRight: additionalActionButton,
16710 label: textFieldLabel,
16711 labelHidden: true,
16712 placeholder: textFieldLabel,
16713 prefix: React__default.createElement(Icon, {
16714 source: polarisIcons.SearchMinor,
16715 color: "skyDark"
16716 }),
16717 value: searchValue,
16718 onChange: onSearchChange,
16719 onBlur: onSearchBlur,
16720 focused: focused,
16721 disabled: selectMode
16722 }), appliedFiltersWrapper);
16723
16724 function getFilterLabel(appliedFilter) {
16725 var key = appliedFilter.key,
16726 value = appliedFilter.value,
16727 label = appliedFilter.label;
16728
16729 if (label) {
16730 return label;
16731 }
16732
16733 var filter = filters.find(function (filter) {
16734 var minKey = filter.minKey,
16735 maxKey = filter.maxKey,
16736 operatorText = filter.operatorText;
16737
16738 if (minKey || maxKey) {
16739 return filter.key === key || minKey === key || maxKey === key;
16740 }
16741
16742 if (operatorText && typeof operatorText !== 'string') {
16743 return filter.key === key || operatorText.filter(function (_ref2) {
16744 var operatorKey = _ref2.key;
16745 return operatorKey === key;
16746 }).length === 1;
16747 }
16748
16749 return filter.key === key;
16750 });
16751
16752 if (!filter) {
16753 return value;
16754 }
16755
16756 var filterOperatorLabel = findOperatorLabel(filter, appliedFilter);
16757 var filterLabelByType = findFilterLabelByType(filter, appliedFilter);
16758
16759 if (!filterOperatorLabel) {
16760 return "".concat(filter.label, " ").concat(filterLabelByType);
16761 }
16762
16763 return "".concat(filter.label, " ").concat(filterOperatorLabel, " ").concat(filterLabelByType);
16764 }
16765
16766 function findFilterLabelByType(filter, appliedFilter) {
16767 var appliedFilterValue = appliedFilter.value;
16768
16769 if (filter.type === exports.FilterType.Select) {
16770 var foundFilterOption = filter.options.find(function (option) {
16771 return typeof option === 'string' ? option === appliedFilterValue : option.value === appliedFilterValue;
16772 });
16773
16774 if (foundFilterOption) {
16775 return typeof foundFilterOption === 'string' ? foundFilterOption : foundFilterOption.label;
16776 }
16777 }
16778
16779 if (filter.type === exports.FilterType.DateSelector) {
16780 if (filter.key === appliedFilter.key) {
16781 var filterLabelKey = "Polaris.ResourceList.DateSelector.FilterLabelForValue.".concat(appliedFilter.value);
16782 return i18n.translationKeyExists(filterLabelKey) ? i18n.translate(filterLabelKey) : appliedFilter.value;
16783 }
16784
16785 if (appliedFilter.key === filter.maxKey) {
16786 return i18n.translate('Polaris.ResourceList.DateSelector.FilterLabelForValue.on_or_before', {
16787 date: formatDateForLabelDisplay(appliedFilter.value)
16788 });
16789 }
16790
16791 if (appliedFilter.key === filter.minKey) {
16792 return i18n.translate('Polaris.ResourceList.DateSelector.FilterLabelForValue.on_or_after', {
16793 date: formatDateForLabelDisplay(appliedFilter.value)
16794 });
16795 }
16796 }
16797
16798 return appliedFilterValue;
16799 }
16800}
16801
16802function idFromFilter(appliedFilter) {
16803 return "".concat(appliedFilter.key, "-").concat(appliedFilter.value);
16804}
16805
16806function formatDateForLabelDisplay(date) {
16807 if (isNaN(new Date(date).getTime())) {
16808 return date;
16809 }
16810
16811 return new Date(date.replace(/-/g, '/')).toLocaleDateString();
16812}
16813
16814function findOperatorLabel(filter, appliedFilter) {
16815 var operatorText = filter.operatorText;
16816
16817 if (filter.type === exports.FilterType.DateSelector && (appliedFilter.key === filter.minKey || appliedFilter.key === filter.maxKey)) {
16818 return '';
16819 }
16820
16821 if (!operatorText || typeof operatorText === 'string') {
16822 return operatorText;
16823 }
16824
16825 var appliedOperator = operatorText.find(function (operator) {
16826 return operator.key === appliedFilter.key;
16827 });
16828
16829 if (appliedOperator) {
16830 return appliedOperator.filterLabel || appliedOperator.optionLabel;
16831 }
16832}
16833
16834var styles$1t = {
16835 "FiltersWrapper": "Polaris-ResourceList__FiltersWrapper",
16836 "ResourceList": "Polaris-ResourceList",
16837 "HeaderOuterWrapper": "Polaris-ResourceList__HeaderOuterWrapper",
16838 "HeaderWrapper-disabled": "Polaris-ResourceList__HeaderWrapper--disabled",
16839 "HeaderWrapper-overlay": "Polaris-ResourceList__HeaderWrapper--overlay",
16840 "HeaderWrapper": "Polaris-ResourceList__HeaderWrapper",
16841 "HeaderWrapper-isSticky": "Polaris-ResourceList__HeaderWrapper--isSticky",
16842 "HeaderContentWrapper": "Polaris-ResourceList__HeaderContentWrapper",
16843 "HeaderWrapper-inSelectMode": "Polaris-ResourceList__HeaderWrapper--inSelectMode",
16844 "SortWrapper": "Polaris-ResourceList__SortWrapper",
16845 "AlternateToolWrapper": "Polaris-ResourceList__AlternateToolWrapper",
16846 "HeaderWrapper-hasSelect": "Polaris-ResourceList__HeaderWrapper--hasSelect",
16847 "HeaderWrapper-hasAlternateTool": "Polaris-ResourceList__HeaderWrapper--hasAlternateTool",
16848 "HeaderWrapper-hasSort": "Polaris-ResourceList__HeaderWrapper--hasSort",
16849 "HeaderTitleWrapper": "Polaris-ResourceList__HeaderTitleWrapper",
16850 "BulkActionsWrapper": "Polaris-ResourceList__BulkActionsWrapper",
16851 "CheckableButtonWrapper": "Polaris-ResourceList__CheckableButtonWrapper",
16852 "SelectButtonWrapper": "Polaris-ResourceList__SelectButtonWrapper",
16853 "EmptySearchResultWrapper": "Polaris-ResourceList__EmptySearchResultWrapper",
16854 "ResourceListWrapper": "Polaris-ResourceList__ResourceListWrapper",
16855 "ItemWrapper": "Polaris-ResourceList__ItemWrapper",
16856 "ItemWrapper-isLoading": "Polaris-ResourceList__ItemWrapper--isLoading",
16857 "SpinnerContainer": "Polaris-ResourceList__SpinnerContainer",
16858 "LoadingOverlay": "Polaris-ResourceList__LoadingOverlay",
16859 "DisabledPointerEvents": "Polaris-ResourceList__DisabledPointerEvents",
16860 "disableTextSelection": "Polaris-ResourceList--disableTextSelection"
16861};
16862
16863var SMALL_SCREEN_WIDTH = 458;
16864var SMALL_SPINNER_HEIGHT = 28;
16865var LARGE_SPINNER_HEIGHT = 45;
16866
16867var ResourceList =
16868/*#__PURE__*/
16869function (_React$Component) {
16870 _inherits(ResourceList, _React$Component);
16871
16872 function ResourceList(props) {
16873 var _this;
16874
16875 _classCallCheck(this, ResourceList);
16876
16877 _this = _possibleConstructorReturn(this, _getPrototypeOf(ResourceList).call(this, props));
16878 _this.listRef = React__default.createRef();
16879 _this.handleResize = debounce(function () {
16880 var selectedItems = _this.props.selectedItems;
16881 var _this$state = _this.state,
16882 selectMode = _this$state.selectMode,
16883 smallScreen = _this$state.smallScreen;
16884 var newSmallScreen = isSmallScreen();
16885
16886 if (selectedItems && selectedItems.length === 0 && selectMode && !newSmallScreen) {
16887 _this.handleSelectMode(false);
16888 }
16889
16890 if (smallScreen !== newSmallScreen) {
16891 _this.setState({
16892 smallScreen: newSmallScreen
16893 });
16894 }
16895 }, 50, {
16896 leading: true,
16897 trailing: true,
16898 maxWait: 50
16899 });
16900
16901 _this.setLoadingPosition = function () {
16902 if (_this.listRef.current != null) {
16903 if (typeof window === 'undefined') {
16904 return;
16905 }
16906
16907 var overlay = _this.listRef.current.getBoundingClientRect();
16908
16909 var viewportHeight = Math.max(document.documentElement ? document.documentElement.clientHeight : 0, window.innerHeight || 0);
16910 var overflow = viewportHeight - overlay.height;
16911 var spinnerHeight = _this.props.items.length === 1 ? SMALL_SPINNER_HEIGHT : LARGE_SPINNER_HEIGHT;
16912 var spinnerPosition = overflow > 0 ? (overlay.height - spinnerHeight) / 2 : (viewportHeight - overlay.top - spinnerHeight) / 2;
16913
16914 _this.setState({
16915 loadingPosition: spinnerPosition
16916 });
16917 }
16918 };
16919
16920 _this.handleSelectAllItemsInStore = function () {
16921 var _this$props = _this.props,
16922 onSelectionChange = _this$props.onSelectionChange,
16923 selectedItems = _this$props.selectedItems,
16924 items = _this$props.items,
16925 _this$props$idForItem = _this$props.idForItem,
16926 idForItem = _this$props$idForItem === void 0 ? defaultIdForItem : _this$props$idForItem;
16927 var newlySelectedItems = selectedItems === SELECT_ALL_ITEMS ? getAllItemsOnPage(items, idForItem) : SELECT_ALL_ITEMS;
16928
16929 if (onSelectionChange) {
16930 onSelectionChange(newlySelectedItems);
16931 }
16932 };
16933
16934 _this.renderItem = function (item, index) {
16935 var _this$props2 = _this.props,
16936 renderItem = _this$props2.renderItem,
16937 _this$props2$idForIte = _this$props2.idForItem,
16938 idForItem = _this$props2$idForIte === void 0 ? defaultIdForItem : _this$props2$idForIte;
16939 var id = idForItem(item, index);
16940 return React__default.createElement("li", {
16941 key: id,
16942 className: styles$1t.ItemWrapper
16943 }, renderItem(item, id, index));
16944 };
16945
16946 _this.handleMultiSelectionChange = function (lastSelected, currentSelected, resolveItemId) {
16947 var min = Math.min(lastSelected, currentSelected);
16948 var max = Math.max(lastSelected, currentSelected);
16949 return _this.props.items.slice(min, max + 1).map(resolveItemId);
16950 };
16951
16952 _this.handleCheckableButtonRegistration = function (key, button) {
16953 _this.setState(function (_ref) {
16954 var checkableButtons = _ref.checkableButtons;
16955 return {
16956 checkableButtons: new Map(checkableButtons).set(key, button)
16957 };
16958 });
16959 };
16960
16961 _this.handleSelectionChange = function (selected, id, sortOrder, shiftKey) {
16962 var _this$props3 = _this.props,
16963 onSelectionChange = _this$props3.onSelectionChange,
16964 selectedItems = _this$props3.selectedItems,
16965 items = _this$props3.items,
16966 _this$props3$idForIte = _this$props3.idForItem,
16967 idForItem = _this$props3$idForIte === void 0 ? defaultIdForItem : _this$props3$idForIte,
16968 resolveItemId = _this$props3.resolveItemId;
16969 var lastSelected = _this.state.lastSelected;
16970
16971 if (selectedItems == null || onSelectionChange == null) {
16972 return;
16973 }
16974
16975 var newlySelectedItems = selectedItems === SELECT_ALL_ITEMS ? getAllItemsOnPage(items, idForItem) : _toConsumableArray(selectedItems);
16976
16977 if (sortOrder !== undefined) {
16978 _this.setState({
16979 lastSelected: sortOrder
16980 });
16981 }
16982
16983 var selectedIds = [id];
16984
16985 if (shiftKey && lastSelected != null && sortOrder !== undefined && resolveItemId) {
16986 selectedIds = _this.handleMultiSelectionChange(lastSelected, sortOrder, resolveItemId);
16987 }
16988
16989 newlySelectedItems = _toConsumableArray(new Set([].concat(_toConsumableArray(newlySelectedItems), _toConsumableArray(selectedIds))));
16990
16991 if (!selected) {
16992 var _iteratorNormalCompletion = true;
16993 var _didIteratorError = false;
16994 var _iteratorError = undefined;
16995
16996 try {
16997 for (var _iterator = selectedIds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
16998 var selectedId = _step.value;
16999 newlySelectedItems.splice(newlySelectedItems.indexOf(selectedId), 1);
17000 }
17001 } catch (err) {
17002 _didIteratorError = true;
17003 _iteratorError = err;
17004 } finally {
17005 try {
17006 if (!_iteratorNormalCompletion && _iterator.return != null) {
17007 _iterator.return();
17008 }
17009 } finally {
17010 if (_didIteratorError) {
17011 throw _iteratorError;
17012 }
17013 }
17014 }
17015 }
17016
17017 if (newlySelectedItems.length === 0 && !isSmallScreen()) {
17018 _this.handleSelectMode(false);
17019 } else if (newlySelectedItems.length > 0) {
17020 _this.handleSelectMode(true);
17021 }
17022
17023 if (onSelectionChange) {
17024 onSelectionChange(newlySelectedItems);
17025 }
17026 };
17027
17028 _this.handleSelectMode = function (selectMode) {
17029 var onSelectionChange = _this.props.onSelectionChange;
17030
17031 _this.setState({
17032 selectMode
17033 });
17034
17035 if (!selectMode && onSelectionChange) {
17036 onSelectionChange([]);
17037 }
17038 };
17039
17040 _this.handleToggleAll = function () {
17041 var _this$props4 = _this.props,
17042 onSelectionChange = _this$props4.onSelectionChange,
17043 selectedItems = _this$props4.selectedItems,
17044 items = _this$props4.items,
17045 _this$props4$idForIte = _this$props4.idForItem,
17046 idForItem = _this$props4$idForIte === void 0 ? defaultIdForItem : _this$props4$idForIte;
17047 var checkableButtons = _this.state.checkableButtons;
17048 var newlySelectedItems = [];
17049
17050 if (Array.isArray(selectedItems) && selectedItems.length === items.length || selectedItems === SELECT_ALL_ITEMS) {
17051 newlySelectedItems = [];
17052 } else {
17053 newlySelectedItems = items.map(function (item, index) {
17054 var id = idForItem(item, index);
17055 return id;
17056 });
17057 }
17058
17059 if (newlySelectedItems.length === 0 && !isSmallScreen()) {
17060 _this.handleSelectMode(false);
17061 } else if (newlySelectedItems.length > 0) {
17062 _this.handleSelectMode(true);
17063 }
17064
17065 var checkbox;
17066
17067 if (isSmallScreen()) {
17068 checkbox = checkableButtons.get('bulkSm');
17069 } else if (newlySelectedItems.length === 0) {
17070 checkbox = checkableButtons.get('plain');
17071 } else {
17072 checkbox = checkableButtons.get('bulkLg');
17073 }
17074
17075 if (onSelectionChange) {
17076 onSelectionChange(newlySelectedItems);
17077 } // setTimeout ensures execution after the Transition on BulkActions
17078
17079
17080 setTimeout(function () {
17081 checkbox && checkbox.focus();
17082 }, 0);
17083 };
17084
17085 var selectedItems = props.selectedItems,
17086 intl = props.polaris.intl;
17087 _this.defaultResourceName = {
17088 singular: intl.translate('Polaris.ResourceList.defaultItemSingular'),
17089 plural: intl.translate('Polaris.ResourceList.defaultItemPlural')
17090 }; // eslint-disable-next-line react/state-in-constructor
17091
17092 _this.state = {
17093 selectMode: Boolean(selectedItems && selectedItems.length > 0),
17094 loadingPosition: 0,
17095 lastSelected: null,
17096 smallScreen: isSmallScreen(),
17097 checkableButtons: new Map()
17098 };
17099 return _this;
17100 }
17101
17102 _createClass(ResourceList, [{
17103 key: "componentDidMount",
17104 value: function componentDidMount() {
17105 this.forceUpdate();
17106
17107 if (this.props.loading) {
17108 this.setLoadingPosition();
17109 }
17110 }
17111 }, {
17112 key: "componentDidUpdate",
17113 value: function componentDidUpdate(_ref2) {
17114 var prevLoading = _ref2.loading,
17115 prevItems = _ref2.items,
17116 prevSelectedItems = _ref2.selectedItems;
17117 var _this$props5 = this.props,
17118 selectedItems = _this$props5.selectedItems,
17119 loading = _this$props5.loading;
17120
17121 if (this.listRef.current && this.itemsExist() && !this.itemsExist(prevItems)) {
17122 this.forceUpdate();
17123 }
17124
17125 if (loading && !prevLoading) {
17126 this.setLoadingPosition();
17127 }
17128
17129 if (selectedItems && selectedItems.length > 0 && !this.state.selectMode) {
17130 // eslint-disable-next-line react/no-did-update-set-state
17131 this.setState({
17132 selectMode: true
17133 });
17134 return;
17135 }
17136
17137 if (prevSelectedItems && prevSelectedItems.length > 0 && (!selectedItems || selectedItems.length === 0) && !isSmallScreen()) {
17138 // eslint-disable-next-line react/no-did-update-set-state
17139 this.setState({
17140 selectMode: false
17141 });
17142 }
17143 }
17144 }, {
17145 key: "render",
17146 value: function render() {
17147 var _this2 = this;
17148
17149 var _this$props6 = this.props,
17150 items = _this$props6.items,
17151 promotedBulkActions = _this$props6.promotedBulkActions,
17152 bulkActions = _this$props6.bulkActions,
17153 filterControl = _this$props6.filterControl,
17154 loading = _this$props6.loading,
17155 _this$props6$showHead = _this$props6.showHeader,
17156 showHeader = _this$props6$showHead === void 0 ? false : _this$props6$showHead,
17157 sortOptions = _this$props6.sortOptions,
17158 sortValue = _this$props6.sortValue,
17159 alternateTool = _this$props6.alternateTool,
17160 selectedItems = _this$props6.selectedItems,
17161 _this$props6$resource = _this$props6.resourceName,
17162 resourceName = _this$props6$resource === void 0 ? this.defaultResourceName : _this$props6$resource,
17163 onSortChange = _this$props6.onSortChange,
17164 intl = _this$props6.polaris.intl;
17165 var _this$state2 = this.state,
17166 selectMode = _this$state2.selectMode,
17167 loadingPosition = _this$state2.loadingPosition,
17168 smallScreen = _this$state2.smallScreen;
17169 var filterControlMarkup = filterControl ? React__default.createElement("div", {
17170 className: styles$1t.FiltersWrapper
17171 }, filterControl) : null;
17172 var bulkActionsMarkup = this.selectable ? React__default.createElement("div", {
17173 className: styles$1t.BulkActionsWrapper
17174 }, React__default.createElement(BulkActions$1, {
17175 label: this.bulkActionsLabel,
17176 accessibilityLabel: this.bulkActionsAccessibilityLabel,
17177 selected: this.bulkSelectState,
17178 onToggleAll: this.handleToggleAll,
17179 selectMode: selectMode,
17180 onSelectModeToggle: this.handleSelectMode,
17181 promotedActions: promotedBulkActions,
17182 paginatedSelectAllAction: this.paginatedSelectAllAction,
17183 paginatedSelectAllText: this.paginatedSelectAllText,
17184 actions: bulkActions,
17185 disabled: loading,
17186 smallScreen: smallScreen
17187 })) : null;
17188 var sortingSelectMarkup = sortOptions && sortOptions.length > 0 && !alternateTool ? React__default.createElement("div", {
17189 className: styles$1t.SortWrapper
17190 }, React__default.createElement(Select, {
17191 label: intl.translate('Polaris.ResourceList.sortingLabel'),
17192 labelInline: !smallScreen,
17193 labelHidden: smallScreen,
17194 options: sortOptions,
17195 onChange: onSortChange,
17196 value: sortValue,
17197 disabled: selectMode
17198 })) : null;
17199 var alternateToolMarkup = alternateTool && !sortingSelectMarkup ? React__default.createElement("div", {
17200 className: styles$1t.AlternateToolWrapper
17201 }, alternateTool) : null;
17202 var headerTitleMarkup = React__default.createElement("div", {
17203 className: styles$1t.HeaderTitleWrapper
17204 }, this.headerTitle);
17205 var selectButtonMarkup = this.selectable ? React__default.createElement("div", {
17206 className: styles$1t.SelectButtonWrapper
17207 }, React__default.createElement(Button, {
17208 disabled: selectMode,
17209 icon: polarisIcons.EnableSelectionMinor,
17210 onClick: this.handleSelectMode.bind(this, true)
17211 }, intl.translate('Polaris.ResourceList.selectButtonText'))) : null;
17212 var checkableButtonMarkup = this.selectable ? React__default.createElement("div", {
17213 className: styles$1t.CheckableButtonWrapper
17214 }, React__default.createElement(CheckableButton, {
17215 accessibilityLabel: this.bulkActionsAccessibilityLabel,
17216 label: this.headerTitle,
17217 onToggleAll: this.handleToggleAll,
17218 plain: true,
17219 disabled: loading
17220 })) : null;
17221 var needsHeader = this.selectable || sortOptions && sortOptions.length > 0 || alternateTool;
17222 var headerWrapperOverlay = loading ? React__default.createElement("div", {
17223 className: styles$1t['HeaderWrapper-overlay']
17224 }) : null;
17225 var showEmptyState = filterControl && !this.itemsExist() && !loading;
17226 var headerMarkup = !showEmptyState && (showHeader || needsHeader) && this.listRef.current && React__default.createElement("div", {
17227 className: styles$1t.HeaderOuterWrapper
17228 }, React__default.createElement(Sticky$1, {
17229 boundingElement: this.listRef.current
17230 }, function (isSticky) {
17231 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']);
17232 return React__default.createElement("div", {
17233 className: headerClassName
17234 }, React__default.createElement(EventListener, {
17235 event: "resize",
17236 handler: _this2.handleResize
17237 }), headerWrapperOverlay, React__default.createElement("div", {
17238 className: styles$1t.HeaderContentWrapper
17239 }, headerTitleMarkup, checkableButtonMarkup, alternateToolMarkup, sortingSelectMarkup, selectButtonMarkup), bulkActionsMarkup);
17240 }));
17241 var emptyStateMarkup = showEmptyState ? React__default.createElement("div", {
17242 className: styles$1t.EmptySearchResultWrapper
17243 }, React__default.createElement(EmptySearchResult, Object.assign({}, this.emptySearchResultText, {
17244 withIllustration: true
17245 }))) : null;
17246 var defaultTopPadding = 8;
17247 var topPadding = loadingPosition > 0 ? loadingPosition : defaultTopPadding;
17248 var spinnerStyle = {
17249 paddingTop: "".concat(topPadding, "px")
17250 };
17251 var spinnerSize = items.length < 2 ? 'small' : 'large';
17252 var loadingOverlay = loading ? React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
17253 className: styles$1t.SpinnerContainer,
17254 style: spinnerStyle
17255 }, React__default.createElement(Spinner, {
17256 size: spinnerSize,
17257 accessibilityLabel: "Items are loading"
17258 })), React__default.createElement("div", {
17259 className: styles$1t.LoadingOverlay
17260 })) : null;
17261 var className = classNames(styles$1t.ItemWrapper, loading && styles$1t['ItemWrapper-isLoading']);
17262 var loadingWithoutItemsMarkup = loading && !this.itemsExist() ? React__default.createElement("div", {
17263 className: className,
17264 tabIndex: -1
17265 }, loadingOverlay) : null;
17266 var resourceListClassName = classNames(styles$1t.ResourceList, loading && styles$1t.disabledPointerEvents, selectMode && styles$1t.disableTextSelection);
17267 var listMarkup = this.itemsExist() ? React__default.createElement("ul", {
17268 className: resourceListClassName,
17269 ref: this.listRef,
17270 "aria-live": "polite",
17271 "aria-busy": loading
17272 }, loadingOverlay, items.map(this.renderItem)) : emptyStateMarkup;
17273 var context = {
17274 selectable: this.selectable,
17275 selectedItems,
17276 selectMode,
17277 resourceName,
17278 loading,
17279 onSelectionChange: this.handleSelectionChange,
17280 registerCheckableButtons: this.handleCheckableButtonRegistration
17281 };
17282 return React__default.createElement(ResourceListContext.Provider, {
17283 value: context
17284 }, React__default.createElement("div", {
17285 className: styles$1t.ResourceListWrapper
17286 }, filterControlMarkup, headerMarkup, listMarkup, loadingWithoutItemsMarkup));
17287 }
17288 }, {
17289 key: "itemsExist",
17290 value: function itemsExist(items) {
17291 return (items || this.props.items).length > 0;
17292 }
17293 }, {
17294 key: "selectable",
17295 get: function get() {
17296 var _this$props7 = this.props,
17297 promotedBulkActions = _this$props7.promotedBulkActions,
17298 bulkActions = _this$props7.bulkActions,
17299 selectable = _this$props7.selectable;
17300 return Boolean(promotedBulkActions && promotedBulkActions.length > 0 || bulkActions && bulkActions.length > 0 || selectable);
17301 }
17302 }, {
17303 key: "bulkSelectState",
17304 get: function get() {
17305 var _this$props8 = this.props,
17306 selectedItems = _this$props8.selectedItems,
17307 items = _this$props8.items;
17308 var selectState = 'indeterminate';
17309
17310 if (!selectedItems || Array.isArray(selectedItems) && selectedItems.length === 0) {
17311 selectState = false;
17312 } else if (selectedItems === SELECT_ALL_ITEMS || Array.isArray(selectedItems) && selectedItems.length === items.length) {
17313 selectState = true;
17314 }
17315
17316 return selectState;
17317 }
17318 }, {
17319 key: "headerTitle",
17320 get: function get() {
17321 var _this$props9 = this.props,
17322 _this$props9$resource = _this$props9.resourceName,
17323 resourceName = _this$props9$resource === void 0 ? this.defaultResourceName : _this$props9$resource,
17324 items = _this$props9.items,
17325 intl = _this$props9.polaris.intl,
17326 loading = _this$props9.loading,
17327 totalItemsCount = _this$props9.totalItemsCount;
17328 var itemsCount = items.length;
17329 var resource = !loading && (!totalItemsCount && itemsCount === 1 || totalItemsCount === 1) ? resourceName.singular : resourceName.plural;
17330
17331 if (loading) {
17332 return intl.translate('Polaris.ResourceList.loading', {
17333 resource
17334 });
17335 } else if (totalItemsCount) {
17336 return intl.translate('Polaris.ResourceList.showingTotalCount', {
17337 itemsCount,
17338 totalItemsCount,
17339 resource
17340 });
17341 } else {
17342 return intl.translate('Polaris.ResourceList.showing', {
17343 itemsCount,
17344 resource
17345 });
17346 }
17347 }
17348 }, {
17349 key: "bulkActionsLabel",
17350 get: function get() {
17351 var _this$props10 = this.props,
17352 _this$props10$selecte = _this$props10.selectedItems,
17353 selectedItems = _this$props10$selecte === void 0 ? [] : _this$props10$selecte,
17354 items = _this$props10.items,
17355 intl = _this$props10.polaris.intl;
17356 var selectedItemsCount = selectedItems === SELECT_ALL_ITEMS ? "".concat(items.length, "+") : selectedItems.length;
17357 return intl.translate('Polaris.ResourceList.selected', {
17358 selectedItemsCount
17359 });
17360 }
17361 }, {
17362 key: "bulkActionsAccessibilityLabel",
17363 get: function get() {
17364 var _this$props11 = this.props,
17365 _this$props11$resourc = _this$props11.resourceName,
17366 resourceName = _this$props11$resourc === void 0 ? this.defaultResourceName : _this$props11$resourc,
17367 _this$props11$selecte = _this$props11.selectedItems,
17368 selectedItems = _this$props11$selecte === void 0 ? [] : _this$props11$selecte,
17369 items = _this$props11.items,
17370 intl = _this$props11.polaris.intl;
17371 var selectedItemsCount = selectedItems.length;
17372 var totalItemsCount = items.length;
17373 var allSelected = selectedItemsCount === totalItemsCount;
17374
17375 if (totalItemsCount === 1 && allSelected) {
17376 return intl.translate('Polaris.ResourceList.a11yCheckboxDeselectAllSingle', {
17377 resourceNameSingular: resourceName.singular
17378 });
17379 } else if (totalItemsCount === 1) {
17380 return intl.translate('Polaris.ResourceList.a11yCheckboxSelectAllSingle', {
17381 resourceNameSingular: resourceName.singular
17382 });
17383 } else if (allSelected) {
17384 return intl.translate('Polaris.ResourceList.a11yCheckboxDeselectAllMultiple', {
17385 itemsLength: items.length,
17386 resourceNamePlural: resourceName.plural
17387 });
17388 } else {
17389 return intl.translate('Polaris.ResourceList.a11yCheckboxSelectAllMultiple', {
17390 itemsLength: items.length,
17391 resourceNamePlural: resourceName.plural
17392 });
17393 }
17394 }
17395 }, {
17396 key: "paginatedSelectAllText",
17397 get: function get() {
17398 var _this$props12 = this.props,
17399 hasMoreItems = _this$props12.hasMoreItems,
17400 selectedItems = _this$props12.selectedItems,
17401 items = _this$props12.items,
17402 _this$props12$resourc = _this$props12.resourceName,
17403 resourceName = _this$props12$resourc === void 0 ? this.defaultResourceName : _this$props12$resourc,
17404 intl = _this$props12.polaris.intl;
17405
17406 if (!this.selectable || !hasMoreItems) {
17407 return;
17408 }
17409
17410 if (selectedItems === SELECT_ALL_ITEMS) {
17411 return intl.translate('Polaris.ResourceList.allItemsSelected', {
17412 itemsLength: items.length,
17413 resourceNamePlural: resourceName.plural
17414 });
17415 }
17416 }
17417 }, {
17418 key: "paginatedSelectAllAction",
17419 get: function get() {
17420 var _this$props13 = this.props,
17421 hasMoreItems = _this$props13.hasMoreItems,
17422 selectedItems = _this$props13.selectedItems,
17423 items = _this$props13.items,
17424 _this$props13$resourc = _this$props13.resourceName,
17425 resourceName = _this$props13$resourc === void 0 ? this.defaultResourceName : _this$props13$resourc,
17426 intl = _this$props13.polaris.intl;
17427
17428 if (!this.selectable || !hasMoreItems) {
17429 return;
17430 }
17431
17432 var actionText = selectedItems === SELECT_ALL_ITEMS ? intl.translate('Polaris.Common.undo') : intl.translate('Polaris.ResourceList.selectAllItems', {
17433 itemsLength: items.length,
17434 resourceNamePlural: resourceName.plural
17435 });
17436 return {
17437 content: actionText,
17438 onAction: this.handleSelectAllItemsInStore
17439 };
17440 }
17441 }, {
17442 key: "emptySearchResultText",
17443 get: function get() {
17444 var _this$props14 = this.props,
17445 intl = _this$props14.polaris.intl,
17446 _this$props14$resourc = _this$props14.resourceName,
17447 resourceName = _this$props14$resourc === void 0 ? this.defaultResourceName : _this$props14$resourc;
17448 return {
17449 title: intl.translate('Polaris.ResourceList.emptySearchResultTitle', {
17450 resourceNamePlural: resourceName.plural
17451 }),
17452 description: intl.translate('Polaris.ResourceList.emptySearchResultDescription')
17453 };
17454 }
17455 }]);
17456
17457 return ResourceList;
17458}(React__default.Component);
17459
17460ResourceList.Item = ResourceItem; // eslint-disable-next-line import/no-deprecated
17461
17462ResourceList.FilterControl = FilterControl;
17463
17464function getAllItemsOnPage(items, idForItem) {
17465 return items.map(function (item, index) {
17466 return idForItem(item, index);
17467 });
17468}
17469
17470function defaultIdForItem(item, index) {
17471 return Object.prototype.hasOwnProperty.call(item, 'id') ? item.id : index.toString();
17472}
17473
17474function isSmallScreen() {
17475 return typeof window === 'undefined' ? false : window.innerWidth < SMALL_SCREEN_WIDTH;
17476} // Use named export once withAppProvider is refactored away
17477// eslint-disable-next-line import/no-default-export
17478
17479
17480var ResourceList$1 = withAppProvider()(ResourceList);
17481
17482/** @deprecated Use `ResourcePicker` from `@shopify/app-bridge-react` instead. */
17483
17484var ResourcePicker =
17485/*#__PURE__*/
17486function (_React$PureComponent) {
17487 _inherits(ResourcePicker, _React$PureComponent);
17488
17489 function ResourcePicker() {
17490 var _this;
17491
17492 _classCallCheck(this, ResourcePicker);
17493
17494 _this = _possibleConstructorReturn(this, _getPrototypeOf(ResourcePicker).apply(this, arguments));
17495 _this.focusReturnPoint = null;
17496 return _this;
17497 }
17498
17499 _createClass(ResourcePicker, [{
17500 key: "componentDidMount",
17501 value: function componentDidMount() {
17502 // eslint-disable-next-line no-console
17503 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');
17504
17505 if (this.props.polaris.appBridge == null) {
17506 return;
17507 }
17508
17509 var _this$props = this.props,
17510 open = _this$props.open,
17511 resourceType = _this$props.resourceType,
17512 initialQuery = _this$props.initialQuery,
17513 _this$props$showHidde = _this$props.showHidden,
17514 showHidden = _this$props$showHidde === void 0 ? true : _this$props$showHidde,
17515 _this$props$allowMult = _this$props.allowMultiple,
17516 allowMultiple = _this$props$allowMult === void 0 ? true : _this$props$allowMult,
17517 _this$props$showVaria = _this$props.showVariants,
17518 showVariants = _this$props$showVaria === void 0 ? true : _this$props$showVaria,
17519 onSelection = _this$props.onSelection,
17520 onCancel = _this$props.onCancel;
17521 var appBridge = this.props.polaris.appBridge;
17522 this.appBridgeResourcePicker = actions.ResourcePicker.create(appBridge, {
17523 resourceType: actions.ResourcePicker.ResourceType[resourceType],
17524 options: {
17525 initialQuery,
17526 showHidden,
17527 selectMultiple: allowMultiple,
17528 showVariants
17529 }
17530 });
17531
17532 if (onSelection != null) {
17533 this.appBridgeResourcePicker.subscribe(actions.ResourcePicker.Action.SELECT, function (_ref) {
17534 var selection = _ref.selection;
17535 onSelection({
17536 selection
17537 });
17538 });
17539 }
17540
17541 if (onCancel != null) {
17542 this.appBridgeResourcePicker.subscribe(actions.ResourcePicker.Action.CANCEL, onCancel);
17543 }
17544
17545 if (open) {
17546 this.focusReturnPoint = document.activeElement;
17547 this.appBridgeResourcePicker.dispatch(actions.ResourcePicker.Action.OPEN);
17548 }
17549 }
17550 }, {
17551 key: "componentDidUpdate",
17552 value: function componentDidUpdate(prevProps) {
17553 if (this.appBridgeResourcePicker == null) {
17554 return;
17555 }
17556
17557 var _this$props2 = this.props,
17558 open = _this$props2.open,
17559 initialQuery = _this$props2.initialQuery,
17560 _this$props2$showHidd = _this$props2.showHidden,
17561 showHidden = _this$props2$showHidd === void 0 ? false : _this$props2$showHidd,
17562 _this$props2$allowMul = _this$props2.allowMultiple,
17563 allowMultiple = _this$props2$allowMul === void 0 ? true : _this$props2$allowMul,
17564 _this$props2$showVari = _this$props2.showVariants,
17565 showVariants = _this$props2$showVari === void 0 ? true : _this$props2$showVari,
17566 onSelection = _this$props2.onSelection,
17567 onCancel = _this$props2.onCancel;
17568 var wasOpen = prevProps.open;
17569
17570 var prevAppBridge = prevProps.polaris.appBridge,
17571 prevResourcePickerProps = tslib_1.__rest(prevProps, ["polaris"]);
17572
17573 var _a = this.props,
17574 appBridge = _a.polaris.appBridge,
17575 resourcePickerProps = tslib_1.__rest(_a, ["polaris"]);
17576
17577 if (!isEqual(prevResourcePickerProps, resourcePickerProps) || !isEqual(prevAppBridge, appBridge)) {
17578 this.appBridgeResourcePicker.set({
17579 initialQuery,
17580 showHidden,
17581 selectMultiple: allowMultiple,
17582 showVariants
17583 });
17584 }
17585
17586 this.appBridgeResourcePicker.unsubscribe();
17587
17588 if (onSelection != null) {
17589 this.appBridgeResourcePicker.subscribe(actions.ResourcePicker.Action.SELECT, function (_ref2) {
17590 var selection = _ref2.selection;
17591 onSelection({
17592 selection
17593 });
17594 });
17595 }
17596
17597 if (onCancel != null) {
17598 this.appBridgeResourcePicker.subscribe(actions.ResourcePicker.Action.CANCEL, onCancel);
17599 }
17600
17601 if (wasOpen !== open) {
17602 if (open) {
17603 this.appBridgeResourcePicker.dispatch(actions.ResourcePicker.Action.OPEN);
17604 } else {
17605 this.appBridgeResourcePicker.dispatch(actions.ResourcePicker.Action.CLOSE);
17606 }
17607 }
17608
17609 if (!wasOpen && open) {
17610 this.focusReturnPoint = document.activeElement;
17611 } else if (wasOpen && !open && this.focusReturnPoint != null && document.contains(this.focusReturnPoint)) {
17612 this.focusReturnPoint.focus();
17613 this.focusReturnPoint = null;
17614 }
17615 }
17616 }, {
17617 key: "componentWillUnmount",
17618 value: function componentWillUnmount() {
17619 if (this.appBridgeResourcePicker == null) {
17620 return;
17621 }
17622
17623 this.appBridgeResourcePicker.unsubscribe();
17624 }
17625 }, {
17626 key: "render",
17627 value: function render() {
17628 return null;
17629 }
17630 }]);
17631
17632 return ResourcePicker;
17633}(React__default.PureComponent); // Use named export once withAppProvider is refactored away
17634// eslint-disable-next-line import/no-default-export
17635
17636
17637var ResourcePicker$1 = withAppProvider()(ResourcePicker);
17638
17639function SettingToggle(_ref) {
17640 var enabled = _ref.enabled,
17641 action = _ref.action,
17642 children = _ref.children;
17643 var actionMarkup = action ? buttonFrom(action, {
17644 primary: !enabled
17645 }) : null;
17646 return React__default.createElement(Card, {
17647 sectioned: true
17648 }, React__default.createElement(SettingAction, {
17649 action: actionMarkup
17650 }, children));
17651}
17652
17653var styles$1u = {
17654 "SkeletonBodyTextContainer": "Polaris-SkeletonBodyText__SkeletonBodyTextContainer",
17655 "SkeletonBodyText": "Polaris-SkeletonBodyText"
17656};
17657
17658function SkeletonBodyText(_ref) {
17659 var _ref$lines = _ref.lines,
17660 lines = _ref$lines === void 0 ? 3 : _ref$lines;
17661 var bodyTextLines = [];
17662
17663 for (var i = 0; i < lines; i++) {
17664 bodyTextLines.push(React__default.createElement("div", {
17665 className: styles$1u.SkeletonBodyText,
17666 key: i
17667 }));
17668 }
17669
17670 return React__default.createElement("div", {
17671 className: styles$1u.SkeletonBodyTextContainer
17672 }, bodyTextLines);
17673}
17674
17675var styles$1v = {
17676 "DisplayText": "Polaris-SkeletonDisplayText__DisplayText",
17677 "sizeSmall": "Polaris-SkeletonDisplayText--sizeSmall",
17678 "sizeMedium": "Polaris-SkeletonDisplayText--sizeMedium",
17679 "sizeLarge": "Polaris-SkeletonDisplayText--sizeLarge",
17680 "sizeExtraLarge": "Polaris-SkeletonDisplayText--sizeExtraLarge"
17681};
17682
17683function SkeletonDisplayText(_ref) {
17684 var _ref$size = _ref.size,
17685 size = _ref$size === void 0 ? 'medium' : _ref$size;
17686 var className = classNames(styles$1v.DisplayText, size && styles$1v[variationName('size', size)]);
17687 return React__default.createElement("div", {
17688 className: className
17689 });
17690}
17691
17692var styles$1w = {
17693 "Page": "Polaris-SkeletonPage__Page",
17694 "fullWidth": "Polaris-SkeletonPage--fullWidth",
17695 "narrowWidth": "Polaris-SkeletonPage--narrowWidth",
17696 "Content": "Polaris-SkeletonPage__Content",
17697 "Header": "Polaris-SkeletonPage__Header",
17698 "Header-hasSecondaryActions": "Polaris-SkeletonPage__Header--hasSecondaryActions",
17699 "BreadcrumbAction": "Polaris-SkeletonPage__BreadcrumbAction",
17700 "TitleAndPrimaryAction": "Polaris-SkeletonPage__TitleAndPrimaryAction",
17701 "Title": "Polaris-SkeletonPage__Title",
17702 "PrimaryAction": "Polaris-SkeletonPage__PrimaryAction",
17703 "Actions": "Polaris-SkeletonPage__Actions",
17704 "Action": "Polaris-SkeletonPage__Action"
17705};
17706
17707function SkeletonPage(_ref) {
17708 var children = _ref.children,
17709 fullWidth = _ref.fullWidth,
17710 narrowWidth = _ref.narrowWidth,
17711 singleColumn = _ref.singleColumn,
17712 primaryAction = _ref.primaryAction,
17713 secondaryActions = _ref.secondaryActions,
17714 _ref$title = _ref.title,
17715 title = _ref$title === void 0 ? '' : _ref$title,
17716 breadcrumbs = _ref.breadcrumbs;
17717
17718 if (singleColumn) {
17719 // eslint-disable-next-line no-console
17720 console.warn('Deprecation: The singleColumn prop has been renamed to narrowWidth to better represents its use and will be removed in v5.0.');
17721 }
17722
17723 var i18n = useI18n();
17724 var appBridge = useAppBridge();
17725 var className = classNames(styles$1w.Page, fullWidth && styles$1w.fullWidth, (narrowWidth || singleColumn) && styles$1w.narrowWidth);
17726 var headerClassName = classNames(styles$1w.Header, breadcrumbs && styles$1w['Header-hasBreadcrumbs'], secondaryActions && styles$1w['Header-hasSecondaryActions']);
17727 var titleMarkup = title !== null ? renderTitle(title) : null;
17728 var primaryActionMarkup = primaryAction ? React__default.createElement("div", {
17729 className: styles$1w.PrimaryAction
17730 }, React__default.createElement(SkeletonDisplayText, {
17731 size: "large"
17732 })) : null;
17733 var secondaryActionsMarkup = secondaryActions ? renderSecondaryActions(secondaryActions) : null;
17734 var breadcrumbMarkup = breadcrumbs ? React__default.createElement("div", {
17735 className: styles$1w.BreadcrumbAction,
17736 style: {
17737 width: 60
17738 }
17739 }, React__default.createElement(SkeletonBodyText, {
17740 lines: 1
17741 })) : null;
17742 var headerMarkup = !appBridge ? React__default.createElement("div", {
17743 className: headerClassName
17744 }, breadcrumbMarkup, React__default.createElement("div", {
17745 className: styles$1w.TitleAndPrimaryAction
17746 }, titleMarkup, primaryActionMarkup), secondaryActionsMarkup) : null;
17747 return React__default.createElement("div", {
17748 className: className,
17749 role: "status",
17750 "aria-label": i18n.translate('Polaris.SkeletonPage.loadingLabel')
17751 }, headerMarkup, React__default.createElement("div", {
17752 className: styles$1w.Content
17753 }, children));
17754}
17755
17756function renderSecondaryActions(actionCount) {
17757 var actions = [];
17758
17759 for (var i = 0; i < actionCount; i++) {
17760 var width = Math.round(Math.random() * 40 + 60);
17761 actions.push(React__default.createElement("div", {
17762 className: styles$1w.Action,
17763 style: {
17764 width
17765 },
17766 key: i
17767 }, React__default.createElement(SkeletonBodyText, {
17768 lines: 1
17769 })));
17770 }
17771
17772 return React__default.createElement("div", {
17773 className: styles$1w.Actions
17774 }, actions);
17775}
17776
17777function renderTitle(title) {
17778 var titleContent = title === '' ? React__default.createElement(SkeletonDisplayText, {
17779 size: "large"
17780 }) : React__default.createElement(DisplayText, {
17781 size: "large",
17782 element: "h1"
17783 }, title);
17784 return React__default.createElement("div", {
17785 className: styles$1w.Title
17786 }, titleContent);
17787}
17788
17789var styles$1x = {
17790 "SkeletonThumbnail": "Polaris-SkeletonThumbnail",
17791 "sizeSmall": "Polaris-SkeletonThumbnail--sizeSmall",
17792 "sizeMedium": "Polaris-SkeletonThumbnail--sizeMedium",
17793 "sizeLarge": "Polaris-SkeletonThumbnail--sizeLarge"
17794};
17795
17796function SkeletonThumbnail(_ref) {
17797 var _ref$size = _ref.size,
17798 size = _ref$size === void 0 ? 'medium' : _ref$size;
17799 var className = classNames(styles$1x.SkeletonThumbnail, size && styles$1x[variationName('size', size)]);
17800 return React__default.createElement("div", {
17801 className: className
17802 });
17803}
17804
17805function getVisibleAndHiddenTabIndices(tabs, selected, disclosureWidth, tabWidths, containerWidth) {
17806 var sumTabWidths = tabWidths.reduce(function (sum, width) {
17807 return sum + width;
17808 }, 0);
17809 var arrayOfTabIndices = tabs.map(function (_, index) {
17810 return index;
17811 });
17812 var visibleTabs = [];
17813 var hiddenTabs = [];
17814
17815 if (containerWidth > sumTabWidths) {
17816 visibleTabs.push.apply(visibleTabs, _toConsumableArray(arrayOfTabIndices));
17817 } else {
17818 visibleTabs.push(selected);
17819 var tabListWidth = tabWidths[selected];
17820 arrayOfTabIndices.forEach(function (currentTabIndex) {
17821 if (currentTabIndex !== selected) {
17822 var currentTabWidth = tabWidths[currentTabIndex];
17823
17824 if (tabListWidth + currentTabWidth > containerWidth - disclosureWidth) {
17825 hiddenTabs.push(currentTabIndex);
17826 return;
17827 }
17828
17829 visibleTabs.push(currentTabIndex);
17830 tabListWidth += currentTabWidth;
17831 }
17832 });
17833 }
17834
17835 return {
17836 visibleTabs,
17837 hiddenTabs
17838 };
17839}
17840
17841var styles$1y = {
17842 "Tabs": "Polaris-Tabs",
17843 "fitted": "Polaris-Tabs--fitted",
17844 "TabContainer": "Polaris-Tabs__TabContainer",
17845 "Tab": "Polaris-Tabs__Tab",
17846 "Title": "Polaris-Tabs__Title",
17847 "fillSpace": "Polaris-Tabs--fillSpace",
17848 "Tab-selected": "Polaris-Tabs__Tab--selected",
17849 "Panel": "Polaris-Tabs__Panel",
17850 "Panel-hidden": "Polaris-Tabs__Panel--hidden",
17851 "List": "Polaris-Tabs__List",
17852 "Item": "Polaris-Tabs__Item",
17853 "DisclosureTab": "Polaris-Tabs__DisclosureTab",
17854 "DisclosureTab-visible": "Polaris-Tabs__DisclosureTab--visible",
17855 "DisclosureActivator": "Polaris-Tabs__DisclosureActivator",
17856 "TabMeasurer": "Polaris-Tabs__TabMeasurer"
17857};
17858
17859var Item$8 =
17860/*#__PURE__*/
17861function (_React$PureComponent) {
17862 _inherits(Item, _React$PureComponent);
17863
17864 function Item() {
17865 var _this;
17866
17867 _classCallCheck(this, Item);
17868
17869 _this = _possibleConstructorReturn(this, _getPrototypeOf(Item).apply(this, arguments));
17870 _this.focusedNode = null;
17871
17872 _this.setFocusedNode = function (node) {
17873 _this.focusedNode = node;
17874 };
17875
17876 return _this;
17877 }
17878
17879 _createClass(Item, [{
17880 key: "componentDidMount",
17881 value: function componentDidMount() {
17882 var focusedNode = this.focusedNode;
17883 var focused = this.props.focused;
17884
17885 if (focusedNode && focusedNode instanceof HTMLElement && focused) {
17886 focusedNode.focus();
17887 }
17888 }
17889 }, {
17890 key: "componentDidUpdate",
17891 value: function componentDidUpdate() {
17892 var focusedNode = this.focusedNode;
17893 var focused = this.props.focused;
17894
17895 if (focusedNode && focusedNode instanceof HTMLElement && focused) {
17896 focusedNode.focus();
17897 }
17898 }
17899 }, {
17900 key: "render",
17901 value: function render() {
17902 var _this$props = this.props,
17903 id = _this$props.id,
17904 panelID = _this$props.panelID,
17905 children = _this$props.children,
17906 url = _this$props.url,
17907 accessibilityLabel = _this$props.accessibilityLabel,
17908 _this$props$onClick = _this$props.onClick,
17909 onClick = _this$props$onClick === void 0 ? noop$c : _this$props$onClick;
17910 var sharedProps = {
17911 id,
17912 ref: this.setFocusedNode,
17913 onClick,
17914 className: styles$1y.Item,
17915 'aria-controls': panelID,
17916 'aria-selected': false,
17917 'aria-label': accessibilityLabel
17918 };
17919 var markup = url ? React__default.createElement(UnstyledLink, Object.assign({}, sharedProps, {
17920 url: url
17921 }), children) : React__default.createElement("button", Object.assign({}, sharedProps, {
17922 type: "button"
17923 }), children);
17924 return React__default.createElement("li", null, markup);
17925 }
17926 }]);
17927
17928 return Item;
17929}(React__default.PureComponent);
17930
17931function noop$c() {}
17932
17933var List$1 =
17934/*#__PURE__*/
17935function (_React$PureComponent) {
17936 _inherits(List, _React$PureComponent);
17937
17938 function List() {
17939 var _this;
17940
17941 _classCallCheck(this, List);
17942
17943 _this = _possibleConstructorReturn(this, _getPrototypeOf(List).apply(this, arguments));
17944
17945 _this.handleKeypress = function (event) {
17946 var _this$props$onKeyPres = _this.props.onKeyPress,
17947 onKeyPress = _this$props$onKeyPres === void 0 ? noop$d : _this$props$onKeyPres;
17948 onKeyPress(event);
17949 };
17950
17951 return _this;
17952 }
17953
17954 _createClass(List, [{
17955 key: "render",
17956 value: function render() {
17957 var _this$props = this.props,
17958 focusIndex = _this$props.focusIndex,
17959 disclosureTabs = _this$props.disclosureTabs,
17960 _this$props$onClick = _this$props.onClick,
17961 onClick = _this$props$onClick === void 0 ? noop$d : _this$props$onClick;
17962 var tabs = disclosureTabs.map(function (_a, index) {
17963 var id = _a.id,
17964 content = _a.content,
17965 tabProps = tslib_1.__rest(_a, ["id", "content"]);
17966
17967 return React__default.createElement(Item$8, Object.assign({}, tabProps, {
17968 key: id,
17969 id: id,
17970 focused: index === focusIndex,
17971 onClick: onClick.bind(null, id)
17972 }), content);
17973 });
17974 return React__default.createElement("ul", {
17975 className: styles$1y.List,
17976 onKeyDown: handleKeyDown$1,
17977 onKeyUp: this.handleKeypress
17978 }, tabs);
17979 }
17980 }]);
17981
17982 return List;
17983}(React__default.PureComponent);
17984
17985function noop$d() {}
17986
17987function handleKeyDown$1(event) {
17988 var key = event.key;
17989
17990 if (key === 'ArrowUp' || key === 'ArrowDown' || key === 'ArrowLeft' || key === 'ArrowRight') {
17991 event.preventDefault();
17992 event.stopPropagation();
17993 }
17994}
17995
17996function Panel(_ref) {
17997 var hidden = _ref.hidden,
17998 id = _ref.id,
17999 tabID = _ref.tabID,
18000 children = _ref.children;
18001 var className = classNames(styles$1y.Panel, hidden && styles$1y['Panel-hidden']);
18002 return React__default.createElement("div", {
18003 className: className,
18004 id: id,
18005 role: "tabpanel",
18006 "aria-labelledby": tabID,
18007 tabIndex: -1
18008 }, children);
18009}
18010
18011function Tab(_ref) {
18012 var id = _ref.id,
18013 focused = _ref.focused,
18014 siblingTabHasFocus = _ref.siblingTabHasFocus,
18015 children = _ref.children,
18016 onClick = _ref.onClick,
18017 selected = _ref.selected,
18018 url = _ref.url,
18019 panelID = _ref.panelID,
18020 measuring = _ref.measuring,
18021 accessibilityLabel = _ref.accessibilityLabel;
18022 var wasSelected = React.useRef(selected);
18023 var panelFocused = React.useRef(false);
18024 var node = React.useRef(null); // A tab can start selected when it is moved from the disclosure dropdown
18025 // into the main list, so we need to send focus from the tab to the panel
18026 // on mount and update
18027
18028 React.useEffect(function () {
18029 if (measuring) {
18030 return;
18031 } // Because of timing issues with the render, we may still have the old,
18032 // in-disclosure version of the tab that has focus. Check for this
18033 // as a second indicator of focus
18034
18035
18036 var itemHadFocus = focused || document.activeElement && document.activeElement.id === id; // If we just check for selected, the panel for the active tab will
18037 // be focused on page load, which we don’t want
18038
18039 if (itemHadFocus && selected && panelID != null && !panelFocused.current) {
18040 focusPanelID(panelID);
18041 panelFocused.current = true;
18042 }
18043
18044 if (selected && !wasSelected.current && panelID != null) {
18045 focusPanelID(panelID);
18046 } else if (focused && node.current != null) {
18047 focus.focusFirstFocusableNode(node.current);
18048 }
18049
18050 wasSelected.current = selected;
18051 }, [focused, id, measuring, panelID, selected]);
18052 var handleClick = onClick && onClick.bind(null, id);
18053 var className = classNames(styles$1y.Tab, selected && styles$1y['Tab-selected']);
18054 var tabIndex;
18055
18056 if (selected && !siblingTabHasFocus && !measuring) {
18057 tabIndex = 0;
18058 } else if (focused && !measuring) {
18059 tabIndex = 0;
18060 } else {
18061 tabIndex = -1;
18062 }
18063
18064 var markup = url ? React__default.createElement(UnstyledLink, {
18065 id: id,
18066 url: url,
18067 role: "tab",
18068 tabIndex: tabIndex,
18069 onClick: handleClick,
18070 className: className,
18071 "aria-selected": selected,
18072 "aria-controls": panelID,
18073 "aria-label": accessibilityLabel,
18074 onMouseUp: handleMouseUpByBlurring
18075 }, React__default.createElement("span", {
18076 className: styles$1y.Title
18077 }, children)) : React__default.createElement("button", {
18078 id: id,
18079 role: "tab",
18080 type: "button",
18081 tabIndex: tabIndex,
18082 className: className,
18083 onClick: handleClick,
18084 "aria-selected": selected,
18085 "aria-controls": panelID,
18086 "aria-label": accessibilityLabel,
18087 onMouseUp: handleMouseUpByBlurring
18088 }, React__default.createElement("span", {
18089 className: styles$1y.Title
18090 }, children));
18091 return React__default.createElement("li", {
18092 className: styles$1y.TabContainer,
18093 ref: node
18094 }, markup);
18095}
18096
18097function focusPanelID(panelID) {
18098 var panel = document.getElementById(panelID);
18099
18100 if (panel) {
18101 panel.focus({
18102 preventScroll: true
18103 });
18104 }
18105}
18106
18107var TabMeasurer =
18108/*#__PURE__*/
18109function (_React$PureComponent) {
18110 _inherits(TabMeasurer, _React$PureComponent);
18111
18112 function TabMeasurer() {
18113 var _this;
18114
18115 _classCallCheck(this, TabMeasurer);
18116
18117 _this = _possibleConstructorReturn(this, _getPrototypeOf(TabMeasurer).apply(this, arguments));
18118 _this.containerNode = React__default.createRef();
18119 _this.animationFrame = null;
18120
18121 _this.handleMeasurement = function () {
18122 if (_this.animationFrame) {
18123 cancelAnimationFrame(_this.animationFrame);
18124 }
18125
18126 _this.animationFrame = requestAnimationFrame(function () {
18127 if (!_this.containerNode.current) {
18128 return;
18129 }
18130
18131 var handleMeasurement = _this.props.handleMeasurement;
18132 var containerWidth = _this.containerNode.current.offsetWidth;
18133 var hiddenTabNodes = _this.containerNode.current.children;
18134 var hiddenTabNodesArray = Array.from(hiddenTabNodes);
18135 var hiddenTabWidths = hiddenTabNodesArray.map(function (node) {
18136 return node.getBoundingClientRect().width;
18137 });
18138 var disclosureWidth = hiddenTabWidths.pop();
18139 handleMeasurement({
18140 containerWidth,
18141 disclosureWidth,
18142 hiddenTabWidths
18143 });
18144 });
18145 };
18146
18147 return _this;
18148 }
18149
18150 _createClass(TabMeasurer, [{
18151 key: "componentDidMount",
18152 value: function componentDidMount() {
18153 this.handleMeasurement();
18154
18155 if (process.env.NODE_ENV === 'development') {
18156 // We need to defer the calculation in development so the
18157 // styles have time to be injected.
18158 setTimeout(this.handleMeasurement, 0);
18159 }
18160 }
18161 }, {
18162 key: "componentDidUpdate",
18163 value: function componentDidUpdate(prevProps) {
18164 if (prevProps.tabs !== this.props.tabs) {
18165 this.handleMeasurement();
18166 }
18167 }
18168 }, {
18169 key: "render",
18170 value: function render() {
18171 var _this$props = this.props,
18172 selected = _this$props.selected,
18173 tabs = _this$props.tabs,
18174 activator = _this$props.activator,
18175 tabToFocus = _this$props.tabToFocus,
18176 siblingTabHasFocus = _this$props.siblingTabHasFocus;
18177 var tabsMarkup = tabs.map(function (tab, index) {
18178 return React__default.createElement(Tab, {
18179 measuring: true,
18180 key: "".concat(index).concat(tab.id, "Hidden"),
18181 id: "".concat(tab.id, "Measurer"),
18182 siblingTabHasFocus: siblingTabHasFocus,
18183 focused: index === tabToFocus,
18184 selected: index === selected,
18185 onClick: noop$e,
18186 url: tab.url
18187 }, tab.content);
18188 });
18189 var classname = classNames(styles$1y.Tabs, styles$1y.TabMeasurer);
18190 return React__default.createElement("div", {
18191 className: classname,
18192 ref: this.containerNode
18193 }, React__default.createElement(EventListener, {
18194 event: "resize",
18195 handler: this.handleMeasurement
18196 }), tabsMarkup, activator);
18197 }
18198 }]);
18199
18200 return TabMeasurer;
18201}(React__default.PureComponent);
18202
18203function noop$e() {}
18204
18205var Tabs =
18206/*#__PURE__*/
18207function (_React$PureComponent) {
18208 _inherits(Tabs, _React$PureComponent);
18209
18210 function Tabs() {
18211 var _this;
18212
18213 _classCallCheck(this, Tabs);
18214
18215 _this = _possibleConstructorReturn(this, _getPrototypeOf(Tabs).apply(this, arguments));
18216 _this.state = {
18217 disclosureWidth: 0,
18218 containerWidth: Infinity,
18219 tabWidths: [],
18220 visibleTabs: [],
18221 hiddenTabs: [],
18222 showDisclosure: false,
18223 tabToFocus: -1
18224 };
18225
18226 _this.handleKeyPress = function (event) {
18227 var _this$state = _this.state,
18228 tabToFocus = _this$state.tabToFocus,
18229 visibleTabs = _this$state.visibleTabs,
18230 hiddenTabs = _this$state.hiddenTabs,
18231 showDisclosure = _this$state.showDisclosure;
18232 var key = event.key;
18233 var tabsArrayInOrder = showDisclosure ? visibleTabs.concat(hiddenTabs) : _toConsumableArray(visibleTabs);
18234 var newFocus = tabsArrayInOrder.indexOf(tabToFocus);
18235
18236 if (key === 'ArrowRight' || key === 'ArrowDown') {
18237 newFocus += 1;
18238
18239 if (newFocus === tabsArrayInOrder.length) {
18240 newFocus = 0;
18241 }
18242 }
18243
18244 if (key === 'ArrowLeft' || key === 'ArrowUp') {
18245 if (newFocus === -1 || newFocus === 0) {
18246 newFocus = tabsArrayInOrder.length - 1;
18247 } else {
18248 newFocus -= 1;
18249 }
18250 }
18251
18252 _this.setState({
18253 tabToFocus: tabsArrayInOrder[newFocus]
18254 });
18255 };
18256
18257 _this.renderTabMarkup = function (tab, index) {
18258 var selected = _this.props.selected;
18259 var tabToFocus = _this.state.tabToFocus;
18260 return React__default.createElement(Tab, {
18261 key: "".concat(index, "-").concat(tab.id),
18262 id: tab.id,
18263 siblingTabHasFocus: tabToFocus > -1,
18264 focused: index === tabToFocus,
18265 selected: index === selected,
18266 onClick: _this.handleTabClick,
18267 panelID: tab.panelID || "".concat(tab.id, "-panel"),
18268 accessibilityLabel: tab.accessibilityLabel,
18269 url: tab.url
18270 }, tab.content);
18271 };
18272
18273 _this.handleFocus = function (event) {
18274 var _this$props = _this.props,
18275 selected = _this$props.selected,
18276 tabs = _this$props.tabs; // If we are explicitly focusing a non-selected tab, this focuses it
18277
18278 var target = event.target;
18279
18280 if (target.classList.contains(styles$1y.Tab) || target.classList.contains(styles$1y.Item)) {
18281 var tabToFocus = -1;
18282 tabs.every(function (tab, index) {
18283 if (tab.id === target.id) {
18284 tabToFocus = index;
18285 return false;
18286 }
18287
18288 return true;
18289 });
18290
18291 _this.setState({
18292 tabToFocus
18293 });
18294
18295 return;
18296 }
18297
18298 if (target.classList.contains(styles$1y.DisclosureActivator)) {
18299 return;
18300 } // If we are coming in from somewhere other than another tab, focus the
18301 // selected tab, and the focus (click) is not on the disclosure activator,
18302 // focus the selected tab
18303
18304
18305 if (!event.relatedTarget) {
18306 _this.setState({
18307 tabToFocus: selected
18308 });
18309
18310 return;
18311 }
18312
18313 var relatedTarget = event.relatedTarget;
18314
18315 if (!relatedTarget.classList.contains(styles$1y.Tab) && !relatedTarget.classList.contains(styles$1y.Item) && !relatedTarget.classList.contains(styles$1y.DisclosureActivator)) {
18316 _this.setState({
18317 tabToFocus: selected
18318 });
18319 }
18320 };
18321
18322 _this.handleBlur = function (event) {
18323 // If we blur and the target is not another tab, forget the focus position
18324 if (event.relatedTarget == null) {
18325 _this.setState({
18326 tabToFocus: -1
18327 });
18328
18329 return;
18330 }
18331
18332 var target = event.relatedTarget; // If we are going to anywhere other than another tab, lose the last focused tab
18333
18334 if (!target.classList.contains(styles$1y.Tab) && !target.classList.contains(styles$1y.Item)) {
18335 _this.setState({
18336 tabToFocus: -1
18337 });
18338 }
18339 };
18340
18341 _this.handleDisclosureActivatorClick = function () {
18342 _this.setState(function (_ref) {
18343 var showDisclosure = _ref.showDisclosure;
18344 return {
18345 showDisclosure: !showDisclosure
18346 };
18347 });
18348 };
18349
18350 _this.handleClose = function () {
18351 _this.setState({
18352 showDisclosure: false
18353 });
18354 };
18355
18356 _this.handleMeasurement = function (measurements) {
18357 var _this$props2 = _this.props,
18358 tabs = _this$props2.tabs,
18359 selected = _this$props2.selected;
18360 var tabToFocus = _this.state.tabToFocus;
18361 var tabWidths = measurements.hiddenTabWidths,
18362 containerWidth = measurements.containerWidth,
18363 disclosureWidth = measurements.disclosureWidth;
18364
18365 var _getVisibleAndHiddenT = getVisibleAndHiddenTabIndices(tabs, selected, disclosureWidth, tabWidths, containerWidth),
18366 visibleTabs = _getVisibleAndHiddenT.visibleTabs,
18367 hiddenTabs = _getVisibleAndHiddenT.hiddenTabs;
18368
18369 _this.setState({
18370 tabToFocus: tabToFocus === -1 ? -1 : selected,
18371 visibleTabs,
18372 hiddenTabs,
18373 disclosureWidth,
18374 containerWidth,
18375 tabWidths
18376 });
18377 };
18378
18379 _this.handleTabClick = function (id) {
18380 var _this$props3 = _this.props,
18381 tabs = _this$props3.tabs,
18382 _this$props3$onSelect = _this$props3.onSelect,
18383 onSelect = _this$props3$onSelect === void 0 ? noop$f : _this$props3$onSelect;
18384 var tab = tabs.find(function (aTab) {
18385 return aTab.id === id;
18386 });
18387
18388 if (tab == null) {
18389 return;
18390 }
18391
18392 var selectedIndex = tabs.indexOf(tab);
18393 onSelect(selectedIndex);
18394 };
18395
18396 return _this;
18397 }
18398
18399 _createClass(Tabs, [{
18400 key: "render",
18401 value: function render() {
18402 var _this2 = this;
18403
18404 var _this$props4 = this.props,
18405 tabs = _this$props4.tabs,
18406 selected = _this$props4.selected,
18407 fitted = _this$props4.fitted,
18408 children = _this$props4.children,
18409 intl = _this$props4.polaris.intl;
18410 var _this$state2 = this.state,
18411 tabToFocus = _this$state2.tabToFocus,
18412 visibleTabs = _this$state2.visibleTabs,
18413 hiddenTabs = _this$state2.hiddenTabs,
18414 showDisclosure = _this$state2.showDisclosure;
18415 var disclosureTabs = hiddenTabs.map(function (tabIndex) {
18416 return tabs[tabIndex];
18417 });
18418 var panelMarkup = children ? tabs.map(function (_tab, index) {
18419 return selected === index ? React__default.createElement(Panel, {
18420 id: tabs[index].panelID || "".concat(tabs[index].id, "-panel"),
18421 tabID: tabs[index].id,
18422 key: tabs[index].id
18423 }, children) : React__default.createElement(Panel, {
18424 id: tabs[index].panelID || "".concat(tabs[index].id, "-panel"),
18425 tabID: tabs[index].id,
18426 key: tabs[index].id,
18427 hidden: true
18428 });
18429 }) : null;
18430 var tabsMarkup = visibleTabs.sort(function (tabA, tabB) {
18431 return tabA - tabB;
18432 }).map(function (tabIndex) {
18433 return _this2.renderTabMarkup(tabs[tabIndex], tabIndex);
18434 });
18435 var disclosureActivatorVisible = visibleTabs.length < tabs.length;
18436 var classname = classNames(styles$1y.Tabs, fitted && styles$1y.fitted, disclosureActivatorVisible && styles$1y.fillSpace);
18437 var disclosureTabClassName = classNames(styles$1y.DisclosureTab, disclosureActivatorVisible && styles$1y['DisclosureTab-visible']);
18438 var activator = React__default.createElement("button", {
18439 type: "button",
18440 className: styles$1y.DisclosureActivator,
18441 onClick: this.handleDisclosureActivatorClick,
18442 "aria-label": intl.translate('Polaris.Tabs.toggleTabsLabel')
18443 }, React__default.createElement("span", {
18444 className: styles$1y.Title
18445 }, React__default.createElement(Icon, {
18446 source: polarisIcons.HorizontalDotsMinor
18447 })));
18448 return React__default.createElement("div", null, React__default.createElement("ul", {
18449 role: "tablist",
18450 className: classname,
18451 onFocus: this.handleFocus,
18452 onBlur: this.handleBlur,
18453 onKeyDown: handleKeyDown$2,
18454 onKeyUp: this.handleKeyPress
18455 }, tabsMarkup, React__default.createElement("li", {
18456 className: disclosureTabClassName
18457 }, React__default.createElement(Popover, {
18458 preferredPosition: "below",
18459 activator: activator,
18460 active: disclosureActivatorVisible && showDisclosure,
18461 onClose: this.handleClose
18462 }, React__default.createElement(List$1, {
18463 focusIndex: hiddenTabs.indexOf(tabToFocus),
18464 disclosureTabs: disclosureTabs,
18465 onClick: this.handleTabClick,
18466 onKeyPress: this.handleKeyPress
18467 })))), React__default.createElement(TabMeasurer, {
18468 tabToFocus: tabToFocus,
18469 activator: activator,
18470 selected: selected,
18471 tabs: tabs,
18472 siblingTabHasFocus: tabToFocus > -1,
18473 handleMeasurement: this.handleMeasurement
18474 }), panelMarkup);
18475 }
18476 }], [{
18477 key: "getDerivedStateFromProps",
18478 value: function getDerivedStateFromProps(nextProps, prevState) {
18479 var disclosureWidth = prevState.disclosureWidth,
18480 tabWidths = prevState.tabWidths,
18481 containerWidth = prevState.containerWidth;
18482
18483 var _getVisibleAndHiddenT2 = getVisibleAndHiddenTabIndices(nextProps.tabs, nextProps.selected, disclosureWidth, tabWidths, containerWidth),
18484 visibleTabs = _getVisibleAndHiddenT2.visibleTabs,
18485 hiddenTabs = _getVisibleAndHiddenT2.hiddenTabs;
18486
18487 return {
18488 visibleTabs,
18489 hiddenTabs,
18490 selected: nextProps.selected
18491 };
18492 }
18493 }]);
18494
18495 return Tabs;
18496}(React__default.PureComponent);
18497
18498function noop$f() {}
18499
18500function handleKeyDown$2(event) {
18501 var key = event.key;
18502
18503 if (key === 'ArrowUp' || key === 'ArrowDown' || key === 'ArrowLeft' || key === 'ArrowRight') {
18504 event.preventDefault();
18505 event.stopPropagation();
18506 }
18507} // Use named export once withAppProvider is refactored away
18508// eslint-disable-next-line import/no-default-export
18509
18510
18511var Tabs$1 = withAppProvider()(Tabs);
18512
18513var styles$1z = {
18514 "Thumbnail": "Polaris-Thumbnail",
18515 "sizeSmall": "Polaris-Thumbnail--sizeSmall",
18516 "sizeMedium": "Polaris-Thumbnail--sizeMedium",
18517 "sizeLarge": "Polaris-Thumbnail--sizeLarge",
18518 "Image": "Polaris-Thumbnail__Image"
18519};
18520
18521function Thumbnail(_ref) {
18522 var source = _ref.source,
18523 alt = _ref.alt,
18524 _ref$size = _ref.size,
18525 size = _ref$size === void 0 ? 'medium' : _ref$size;
18526 var className = classNames(styles$1z.Thumbnail, size && styles$1z[variationName('size', size)]);
18527 return React__default.createElement("span", {
18528 className: className
18529 }, React__default.createElement(Image, {
18530 alt: alt,
18531 source: source,
18532 className: styles$1z.Image
18533 }));
18534}
18535
18536var Toast$1 = React__default.memo(function Toast(props) {
18537 var id = useUniqueId('Toast');
18538 var appBridgeToast = React.useRef();
18539
18540 var _useFrame = useFrame(),
18541 showToast = _useFrame.showToast,
18542 hideToast = _useFrame.hideToast;
18543
18544 var appBridge = useAppBridge();
18545 useDeepEffect(function () {
18546 var error = props.error,
18547 content = props.content,
18548 _props$duration = props.duration,
18549 duration = _props$duration === void 0 ? DEFAULT_TOAST_DURATION : _props$duration,
18550 onDismiss = props.onDismiss;
18551
18552 if (appBridge == null) {
18553 showToast(Object.assign({
18554 id
18555 }, props));
18556 } else {
18557 // eslint-disable-next-line no-console
18558 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');
18559 appBridgeToast.current = actions.Toast.create(appBridge, {
18560 message: content,
18561 duration,
18562 isError: error
18563 });
18564 appBridgeToast.current.subscribe(actions.Toast.Action.CLEAR, onDismiss);
18565 appBridgeToast.current.dispatch(actions.Toast.Action.SHOW);
18566 }
18567
18568 return function () {
18569 if (appBridge == null) {
18570 hideToast({
18571 id
18572 });
18573 } else if (appBridgeToast.current != null) {
18574 appBridgeToast.current.unsubscribe();
18575 }
18576 };
18577 }, [appBridge, props]);
18578 return null;
18579});
18580
18581var styles$1A = {
18582 "Search": "Polaris-TopBar-Search",
18583 "visible": "Polaris-TopBar-Search--visible",
18584 "Overlay": "Polaris-TopBar-Search__Overlay"
18585};
18586
18587var Search =
18588/*#__PURE__*/
18589function (_React$PureComponent) {
18590 _inherits(Search, _React$PureComponent);
18591
18592 function Search() {
18593 var _this;
18594
18595 _classCallCheck(this, Search);
18596
18597 _this = _possibleConstructorReturn(this, _getPrototypeOf(Search).apply(this, arguments));
18598 _this.node = React__default.createRef();
18599
18600 _this.handleDismiss = function (_ref) {
18601 var target = _ref.target;
18602 var onDismiss = _this.props.onDismiss;
18603
18604 if (onDismiss != null && target === _this.node.current) {
18605 onDismiss();
18606 }
18607 };
18608
18609 return _this;
18610 }
18611
18612 _createClass(Search, [{
18613 key: "render",
18614 value: function render() {
18615 var _this$props = this.props,
18616 visible = _this$props.visible,
18617 children = _this$props.children;
18618 var searchClassName = classNames(styles$1A.Search, visible && styles$1A.visible);
18619 return React__default.createElement("div", {
18620 ref: this.node,
18621 className: searchClassName,
18622 onClick: this.handleDismiss
18623 }, React__default.createElement("div", {
18624 className: styles$1A.Overlay
18625 }, children));
18626 }
18627 }]);
18628
18629 return Search;
18630}(React__default.PureComponent);
18631
18632var styles$1B = {
18633 "SearchField": "Polaris-TopBar-SearchField",
18634 "focused": "Polaris-TopBar-SearchField--focused",
18635 "Input": "Polaris-TopBar-SearchField__Input",
18636 "Backdrop": "Polaris-TopBar-SearchField__Backdrop",
18637 "Icon": "Polaris-TopBar-SearchField__Icon",
18638 "Clear": "Polaris-TopBar-SearchField__Clear",
18639 "toLightBackground": "Polaris-TopBar-SearchField--toLightBackground"
18640};
18641
18642function SearchField(_ref) {
18643 var value = _ref.value,
18644 focused = _ref.focused,
18645 active = _ref.active,
18646 placeholder = _ref.placeholder,
18647 onChange = _ref.onChange,
18648 onFocus = _ref.onFocus,
18649 onBlur = _ref.onBlur,
18650 onCancel = _ref.onCancel;
18651 var i18n = useI18n();
18652 var input = React.useRef(null);
18653 var searchId = useUniqueId('SearchField');
18654 var handleChange = React.useCallback(function (_ref2) {
18655 var currentTarget = _ref2.currentTarget;
18656 onChange(currentTarget.value);
18657 }, [onChange]);
18658 var handleFocus = React.useCallback(function () {
18659 return onFocus && onFocus();
18660 }, [onFocus]);
18661 var handleBlur = React.useCallback(function () {
18662 return onBlur && onBlur();
18663 }, [onBlur]);
18664 var handleClear = React.useCallback(function () {
18665 onCancel && onCancel();
18666
18667 if (!input.current) {
18668 return;
18669 }
18670
18671 input.current.value = '';
18672 onChange('');
18673 input.current.focus();
18674 }, [onCancel, onChange]);
18675 React.useEffect(function () {
18676 if (!input.current) {
18677 return;
18678 }
18679
18680 if (focused) {
18681 input.current.focus();
18682 } else {
18683 input.current.blur();
18684 }
18685 }, [focused]);
18686 var clearMarkup = value !== '' && React__default.createElement("button", {
18687 type: "button",
18688 "aria-label": i18n.translate('Polaris.TopBar.SearchField.clearButtonLabel'),
18689 className: styles$1B.Clear,
18690 onClick: handleClear
18691 }, React__default.createElement(Icon, {
18692 source: polarisIcons.CircleCancelMinor
18693 }));
18694 var className = classNames(styles$1B.SearchField, (focused || active) && styles$1B.focused);
18695 return React__default.createElement("div", {
18696 className: className,
18697 onFocus: handleFocus,
18698 onBlur: handleBlur
18699 }, React__default.createElement(VisuallyHidden, null, React__default.createElement("label", {
18700 htmlFor: searchId
18701 }, i18n.translate('Polaris.TopBar.SearchField.search'))), React__default.createElement("input", {
18702 id: searchId,
18703 className: styles$1B.Input,
18704 placeholder: placeholder,
18705 type: "search",
18706 autoCapitalize: "off",
18707 autoComplete: "off",
18708 autoCorrect: "off",
18709 ref: input,
18710 value: value,
18711 onChange: handleChange,
18712 onKeyDown: preventDefault
18713 }), React__default.createElement("span", {
18714 className: styles$1B.Icon
18715 }, React__default.createElement(Icon, {
18716 source: polarisIcons.SearchMinor
18717 })), clearMarkup, React__default.createElement("div", {
18718 className: styles$1B.Backdrop
18719 }));
18720}
18721
18722function preventDefault(event) {
18723 if (event.key === 'Enter') {
18724 event.preventDefault();
18725 }
18726}
18727
18728var styles$1C = {
18729 "MessageIndicatorWrapper": "Polaris-MessageIndicator__MessageIndicatorWrapper",
18730 "MessageIndicator": "Polaris-MessageIndicator"
18731};
18732
18733function MessageIndicator(_ref) {
18734 var children = _ref.children,
18735 active = _ref.active;
18736 var indicatorMarkup = active && React__default.createElement("div", {
18737 className: styles$1C.MessageIndicator
18738 });
18739 return React__default.createElement("div", {
18740 className: styles$1C.MessageIndicatorWrapper
18741 }, indicatorMarkup, children);
18742}
18743
18744var styles$1D = {
18745 "Section": "Polaris-Menu-Message__Section"
18746};
18747
18748function Message(_ref) {
18749 var title = _ref.title,
18750 description = _ref.description,
18751 action = _ref.action,
18752 link = _ref.link,
18753 badge = _ref.badge;
18754 var badgeMarkup = badge && React__default.createElement(Badge, {
18755 status: badge.status
18756 }, badge.content);
18757 var to = link.to,
18758 linkContent = link.content;
18759 var onClick = action.onClick,
18760 actionContent = action.content;
18761 return React__default.createElement("div", {
18762 className: styles$1D.Section
18763 }, React__default.createElement(Popover.Section, null, React__default.createElement(Stack, {
18764 vertical: true,
18765 spacing: "tight"
18766 }, React__default.createElement(TextContainer, null, React__default.createElement(Heading, null, title, badgeMarkup), React__default.createElement("p", null, description)), React__default.createElement(Link, {
18767 url: to
18768 }, linkContent), React__default.createElement(Button, {
18769 plain: true,
18770 onClick: onClick
18771 }, actionContent))));
18772}
18773
18774var styles$1E = {
18775 "ActivatorWrapper": "Polaris-TopBar-Menu__ActivatorWrapper",
18776 "Activator": "Polaris-TopBar-Menu__Activator",
18777 "Section": "Polaris-TopBar-Menu__Section"
18778};
18779
18780function Menu(props) {
18781 var actions = props.actions,
18782 onOpen = props.onOpen,
18783 onClose = props.onClose,
18784 open = props.open,
18785 activatorContent = props.activatorContent,
18786 message = props.message;
18787 var badgeProps = message && message.badge && {
18788 content: message.badge.content,
18789 status: message.badge.status
18790 };
18791 var messageMarkup = message && React__default.createElement(Message, {
18792 title: message.title,
18793 description: message.description,
18794 action: {
18795 onClick: message.action.onClick,
18796 content: message.action.content
18797 },
18798 link: {
18799 to: message.link.to,
18800 content: message.link.content
18801 },
18802 badge: badgeProps
18803 });
18804 var isFullHeight = Boolean(message);
18805 return React__default.createElement(Popover, {
18806 activator: React__default.createElement("div", {
18807 className: styles$1E.ActivatorWrapper
18808 }, React__default.createElement("button", {
18809 type: "button",
18810 className: styles$1E.Activator,
18811 onClick: onOpen
18812 }, activatorContent)),
18813 active: open,
18814 onClose: onClose,
18815 fixed: true,
18816 fullHeight: isFullHeight
18817 }, React__default.createElement(ActionList, {
18818 onActionAnyItem: onClose,
18819 sections: actions
18820 }), messageMarkup);
18821}
18822
18823var styles$1F = {
18824 "Details": "Polaris-TopBar-UserMenu__Details",
18825 "Name": "Polaris-TopBar-UserMenu__Name",
18826 "Detail": "Polaris-TopBar-UserMenu__Detail"
18827};
18828
18829function UserMenu(_ref) {
18830 var name = _ref.name,
18831 detail = _ref.detail,
18832 avatar = _ref.avatar,
18833 initials = _ref.initials,
18834 actions = _ref.actions,
18835 message = _ref.message,
18836 onToggle = _ref.onToggle,
18837 open = _ref.open;
18838 var showIndicator = Boolean(message);
18839 var activatorContentMarkup = React__default.createElement(React__default.Fragment, null, React__default.createElement(MessageIndicator, {
18840 active: showIndicator
18841 }, React__default.createElement(Avatar, {
18842 size: "small",
18843 source: avatar,
18844 initials: initials && initials.replace(' ', '')
18845 })), React__default.createElement("span", {
18846 className: styles$1F.Details
18847 }, React__default.createElement("p", {
18848 className: styles$1F.Name
18849 }, name), React__default.createElement("p", {
18850 className: styles$1F.Detail
18851 }, detail)));
18852 return React__default.createElement(Menu, {
18853 activatorContent: activatorContentMarkup,
18854 open: open,
18855 onOpen: onToggle,
18856 onClose: onToggle,
18857 actions: actions,
18858 message: message
18859 });
18860}
18861
18862var styles$1G = {
18863 "TopBar": "Polaris-TopBar",
18864 "LogoContainer": "Polaris-TopBar__LogoContainer",
18865 "ContextControl": "Polaris-TopBar__ContextControl",
18866 "Logo": "Polaris-TopBar__Logo",
18867 "LogoLink": "Polaris-TopBar__LogoLink",
18868 "NavigationIcon": "Polaris-TopBar__NavigationIcon",
18869 "focused": "Polaris-TopBar--focused",
18870 "Contents": "Polaris-TopBar__Contents",
18871 "SearchField": "Polaris-TopBar__SearchField",
18872 "SecondaryMenu": "Polaris-TopBar__SecondaryMenu"
18873};
18874
18875// subcomponents so explicitly state the subcomponents in the type definition.
18876// Letting this be implicit works in this project but fails in projects that use
18877// generated *.d.ts files.
18878
18879var TopBar = function TopBar(_ref) {
18880 var showNavigationToggle = _ref.showNavigationToggle,
18881 userMenu = _ref.userMenu,
18882 searchResults = _ref.searchResults,
18883 searchField = _ref.searchField,
18884 secondaryMenu = _ref.secondaryMenu,
18885 searchResultsVisible = _ref.searchResultsVisible,
18886 onNavigationToggle = _ref.onNavigationToggle,
18887 onSearchResultsDismiss = _ref.onSearchResultsDismiss,
18888 contextControl = _ref.contextControl;
18889 var i18n = useI18n();
18890
18891 var _useTheme = useTheme(),
18892 logo = _useTheme.logo;
18893
18894 var _useForcibleToggle = useForcibleToggle(false),
18895 _useForcibleToggle2 = _slicedToArray(_useForcibleToggle, 2),
18896 focused = _useForcibleToggle2[0],
18897 _useForcibleToggle2$ = _useForcibleToggle2[1],
18898 forceTrueFocused = _useForcibleToggle2$.forceTrue,
18899 forceFalseFocused = _useForcibleToggle2$.forceFalse;
18900
18901 var className = classNames(styles$1G.NavigationIcon, focused && styles$1G.focused);
18902 var navigationButtonMarkup = showNavigationToggle ? React__default.createElement("button", {
18903 type: "button",
18904 className: className,
18905 onClick: onNavigationToggle,
18906 onFocus: forceTrueFocused,
18907 onBlur: forceFalseFocused,
18908 "aria-label": i18n.translate('Polaris.TopBar.toggleMenuLabel')
18909 }, React__default.createElement(Icon, {
18910 source: polarisIcons.MobileHamburgerMajorMonotone,
18911 color: "white"
18912 })) : null;
18913 var width = getWidth(logo, 104);
18914 var contextMarkup;
18915
18916 if (contextControl) {
18917 contextMarkup = React__default.createElement("div", {
18918 className: styles$1G.ContextControl
18919 }, contextControl);
18920 } else if (logo) {
18921 contextMarkup = React__default.createElement("div", {
18922 className: styles$1G.LogoContainer
18923 }, React__default.createElement(UnstyledLink, {
18924 url: logo.url || '',
18925 className: styles$1G.LogoLink,
18926 style: {
18927 width
18928 }
18929 }, React__default.createElement(Image, {
18930 source: logo.topBarSource || '',
18931 alt: logo.accessibilityLabel || '',
18932 className: styles$1G.Logo,
18933 style: {
18934 width
18935 }
18936 })));
18937 }
18938
18939 var searchResultsMarkup = searchResults && searchResultsVisible ? React__default.createElement(Search, {
18940 visible: searchResultsVisible,
18941 onDismiss: onSearchResultsDismiss
18942 }, searchResults) : null;
18943 var searchMarkup = searchField ? React__default.createElement(React__default.Fragment, null, searchField, searchResultsMarkup) : null;
18944 return React__default.createElement("div", {
18945 className: styles$1G.TopBar
18946 }, navigationButtonMarkup, contextMarkup, React__default.createElement("div", {
18947 className: styles$1G.Contents
18948 }, React__default.createElement("div", {
18949 className: styles$1G.SearchField
18950 }, searchMarkup), React__default.createElement("div", {
18951 className: styles$1G.SecondaryMenu
18952 }, secondaryMenu), userMenu));
18953};
18954TopBar.Menu = Menu;
18955TopBar.SearchField = SearchField;
18956TopBar.UserMenu = UserMenu;
18957
18958/* eslint-enable @typescript-eslint/camelcase */
18959
18960Object.defineProperty(exports, 'Months', {
18961 enumerable: true,
18962 get: function () {
18963 return dates.Months;
18964 }
18965});
18966exports.AccountConnection = AccountConnection;
18967exports.ActionList = ActionList;
18968exports.ActionMenu = ActionMenu;
18969exports.AppBridgeContext = AppBridgeContext;
18970exports.AppProvider = AppProvider;
18971exports.Autocomplete = Autocomplete;
18972exports.Avatar = Avatar;
18973exports.Backdrop = Backdrop;
18974exports.Badge = Badge;
18975exports.Banner = Banner;
18976exports.Breadcrumbs = Breadcrumbs;
18977exports.Button = Button;
18978exports.ButtonGroup = ButtonGroup;
18979exports.CalloutCard = CalloutCard;
18980exports.Caption = Caption;
18981exports.Card = Card;
18982exports.Checkbox = Checkbox$1;
18983exports.ChoiceList = ChoiceList;
18984exports.Collapsible = Collapsible;
18985exports.ColorPicker = ColorPicker;
18986exports.Connected = Connected;
18987exports.ContextualSaveBar = ContextualSaveBar;
18988exports.DATA_ATTRIBUTE = DATA_ATTRIBUTE;
18989exports.DEFAULT_TOAST_DURATION = DEFAULT_TOAST_DURATION;
18990exports.DEFAULT_TOAST_DURATION_WITH_ACTION = DEFAULT_TOAST_DURATION_WITH_ACTION;
18991exports.DataTable = DataTable$1;
18992exports.DatePicker = DatePicker;
18993exports.DescriptionList = DescriptionList;
18994exports.DisplayText = DisplayText;
18995exports.DropZone = DropZone;
18996exports.EmptySearchResult = EmptySearchResult;
18997exports.EmptyState = EmptyState;
18998exports.EventListener = EventListener;
18999exports.ExceptionList = ExceptionList;
19000exports.Filters = Filters$1;
19001exports.Focus = Focus;
19002exports.FooterHelp = FooterHelp;
19003exports.Form = Form;
19004exports.FormLayout = FormLayout;
19005exports.Frame = Frame$1;
19006exports.Heading = Heading;
19007exports.Icon = Icon;
19008exports.Image = Image;
19009exports.Indicator = Indicator;
19010exports.InlineError = InlineError;
19011exports.KeyboardKey = KeyboardKey;
19012exports.KeypressListener = KeypressListener;
19013exports.Label = Label;
19014exports.Labelled = Labelled;
19015exports.Layout = Layout;
19016exports.Link = Link;
19017exports.List = List;
19018exports.Loading = Loading$1;
19019exports.Modal = Modal$1;
19020exports.Navigation = Navigation$1;
19021exports.OptionList = OptionList;
19022exports.Page = Page$1;
19023exports.PageActions = PageActions;
19024exports.Pagination = Pagination;
19025exports.PolarisTestProvider = PolarisTestProvider;
19026exports.Popover = Popover;
19027exports.Portal = Portal;
19028exports.ProgressBar = ProgressBar;
19029exports.RadioButton = RadioButton;
19030exports.RangeSlider = RangeSlider;
19031exports.ResourceItem = ResourceItem;
19032exports.ResourceList = ResourceList$1;
19033exports.ResourcePicker = ResourcePicker$1;
19034exports.ScrollLock = ScrollLock;
19035exports.Scrollable = Scrollable;
19036exports.Select = Select;
19037exports.SettingToggle = SettingToggle;
19038exports.Sheet = Sheet;
19039exports.SkeletonBodyText = SkeletonBodyText;
19040exports.SkeletonDisplayText = SkeletonDisplayText;
19041exports.SkeletonPage = SkeletonPage;
19042exports.SkeletonThumbnail = SkeletonThumbnail;
19043exports.Spinner = Spinner;
19044exports.Stack = Stack;
19045exports.Sticky = Sticky$1;
19046exports.Subheading = Subheading;
19047exports.Tabs = Tabs$1;
19048exports.Tag = Tag;
19049exports.TextContainer = TextContainer;
19050exports.TextField = TextField;
19051exports.TextStyle = TextStyle;
19052exports.ThemeProvider = ThemeProvider;
19053exports.Thumbnail = Thumbnail;
19054exports.Toast = Toast$1;
19055exports.Tooltip = Tooltip;
19056exports.TopBar = TopBar;
19057exports.TrapFocus = TrapFocus;
19058exports.Truncate = Truncate;
19059exports.UNSTABLE_Tokens = Tokens;
19060exports.UNSTABLE_buildColors = buildColors;
19061exports.UNSTABLE_roleVariants = roleVariants;
19062exports.UNSTABLE_toCssCustomPropertySyntax = toCssCustomPropertySyntax;
19063exports.UnstyledLink = UnstyledLink;
19064exports.VisuallyHidden = VisuallyHidden;
19065exports._SECRET_INTERNAL_SCROLL_LOCK_MANAGER_CONTEXT = ScrollLockManagerContext;
19066exports._SECRET_INTERNAL_WITHIN_CONTENT_CONTEXT = WithinContentContext;
19067exports.buttonFrom = buttonFrom;
19068exports.buttonsFrom = buttonsFrom;
19069exports.errorTextID = errorTextID;
19070exports.hsbToHex = hsbToHex;
19071exports.hsbToRgb = hsbToRgb;
19072exports.hslToRgb = hslToRgb;
19073exports.isNavigationItemActive = isNavigationItemActive;
19074exports.rgbString = rgbString;
19075exports.rgbToHex = rgbToHex;
19076exports.rgbToHsb = rgbToHsb;
19077exports.rgbToHsl = rgbToHsl;
19078exports.rgbaString = rgbaString;