@schukai/monster 4.143.10 → 4.145.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1 +1 @@
1
- {"author":"Volker Schukai","dependencies":{"@floating-ui/dom":"^1.7.6"},"description":"Monster is a simple library for creating fast, robust and lightweight websites.","homepage":"https://monsterjs.org/","keywords":["framework","web","dom","css","sass","mobile-first","app","front-end","templates","schukai","core","shopcloud","alvine","monster","buildmap","stack","observer","observable","uuid","node","nodelist","css-in-js","logger","log","theme"],"license":"AGPL 3.0","main":"source/monster.mjs","module":"source/monster.mjs","name":"@schukai/monster","repository":{"type":"git","url":"https://gitlab.schukai.com/oss/libraries/javascript/monster.git"},"type":"module","version":"4.143.10"}
1
+ {"author":"Volker Schukai","dependencies":{"@floating-ui/dom":"^1.7.6"},"description":"Monster is a simple library for creating fast, robust and lightweight websites.","homepage":"https://monsterjs.org/","keywords":["framework","web","dom","css","sass","mobile-first","app","front-end","templates","schukai","core","shopcloud","alvine","monster","buildmap","stack","observer","observable","uuid","node","nodelist","css-in-js","logger","log","theme"],"license":"AGPL 3.0","main":"source/monster.mjs","module":"source/monster.mjs","name":"@schukai/monster","repository":{"type":"git","url":"https://gitlab.schukai.com/oss/libraries/javascript/monster.git"},"type":"module","version":"4.145.0"}
@@ -193,6 +193,19 @@ const ATTRIBUTE_OPTION_LAYOUT_STACKED_BREAKPOINT =
193
193
  const ATTRIBUTE_OPTION_LAYOUT_STACKED_BREAKPOINT_CONTAINER =
194
194
  "data-monster-option-layout-stacked-breakpoint-container";
195
195
 
196
+ /**
197
+ * @private
198
+ * @type {string}
199
+ */
200
+ const ATTRIBUTE_OPTION_LAYOUT_HIDE_WHEN_EMPTY =
201
+ "data-monster-option-layout-hide-when-empty";
202
+
203
+ /**
204
+ * @private
205
+ * @type {string}
206
+ */
207
+ const ATTRIBUTE_AUTO_HIDDEN_EMPTY = "data-monster-empty-hidden";
208
+
196
209
  /**
197
210
  * @private
198
211
  * @type {string}
@@ -250,6 +263,7 @@ class ControlBar extends CustomElement {
250
263
  stackedAlignment: undefined,
251
264
  stackedBreakpoint: undefined,
252
265
  stackedBreakpointContainer: undefined,
266
+ hideWhenEmpty: false,
253
267
  },
254
268
  popper: {
255
269
  placement: "left",
@@ -309,7 +323,8 @@ class ControlBar extends CustomElement {
309
323
  path === "layout.alignment" ||
310
324
  path === "layout.stackedAlignment" ||
311
325
  path === "layout.stackedBreakpoint" ||
312
- path === "layout.stackedBreakpointContainer"
326
+ path === "layout.stackedBreakpointContainer" ||
327
+ path === "layout.hideWhenEmpty"
313
328
  ) {
314
329
  syncLayoutState.call(this, {
315
330
  observe: path === "layout.stackedBreakpointContainer",
@@ -366,6 +381,7 @@ class ControlBar extends CustomElement {
366
381
  attributes.push(ATTRIBUTE_OPTION_LAYOUT_STACKED_ALIGNMENT);
367
382
  attributes.push(ATTRIBUTE_OPTION_LAYOUT_STACKED_BREAKPOINT);
368
383
  attributes.push(ATTRIBUTE_OPTION_LAYOUT_STACKED_BREAKPOINT_CONTAINER);
384
+ attributes.push(ATTRIBUTE_OPTION_LAYOUT_HIDE_WHEN_EMPTY);
369
385
  return attributes;
370
386
  }
371
387
 
@@ -572,6 +588,11 @@ function initEventHandler() {
572
588
  syncLayoutState.call(self, { observe: true });
573
589
  };
574
590
 
591
+ self[attributeObserverSymbol][ATTRIBUTE_OPTION_LAYOUT_HIDE_WHEN_EMPTY] =
592
+ () => {
593
+ syncLayoutState.call(self);
594
+ };
595
+
575
596
  self[resizeObserverSymbol] = new ResizeObserver((entries) => {
576
597
  if (self[layoutStateSymbol]?.suppressResize) {
577
598
  return;
@@ -655,6 +676,8 @@ function runLayout() {
655
676
  state.running = true;
656
677
 
657
678
  new Processing(() => {
679
+ syncEmptyVisibility.call(this);
680
+
658
681
  if (needsObserve) {
659
682
  updateResizeObserverObservation.call(this);
660
683
  }
@@ -845,6 +868,97 @@ function rearrangeItems() {
845
868
  if (!shouldShowSwitch) {
846
869
  hide.call(this);
847
870
  }
871
+ syncEmptyVisibility.call(this);
872
+ }
873
+
874
+ /**
875
+ * @private
876
+ * @return {void}
877
+ */
878
+ function syncEmptyVisibility() {
879
+ if (this.getOption("layout.hideWhenEmpty", false) !== true) {
880
+ clearEmptyVisibilityState.call(this);
881
+ return;
882
+ }
883
+
884
+ if (hasVisibleControlItem.call(this)) {
885
+ clearEmptyVisibilityState.call(this);
886
+ return;
887
+ }
888
+
889
+ if (this.hasAttribute(ATTRIBUTE_AUTO_HIDDEN_EMPTY)) {
890
+ return;
891
+ }
892
+
893
+ if (this.hasAttribute("hidden")) {
894
+ return;
895
+ }
896
+
897
+ this.setAttribute("hidden", "");
898
+ this.setAttribute(ATTRIBUTE_AUTO_HIDDEN_EMPTY, "");
899
+ }
900
+
901
+ /**
902
+ * @private
903
+ * @return {void}
904
+ */
905
+ function clearEmptyVisibilityState() {
906
+ if (this.hasAttribute(ATTRIBUTE_AUTO_HIDDEN_EMPTY)) {
907
+ this.removeAttribute(ATTRIBUTE_AUTO_HIDDEN_EMPTY);
908
+ if (this.hasAttribute("hidden")) {
909
+ this.removeAttribute("hidden");
910
+ }
911
+ }
912
+ }
913
+
914
+ /**
915
+ * @private
916
+ * @return {boolean}
917
+ */
918
+ function hasVisibleControlItem() {
919
+ return getControlItems.call(this).some((item) => {
920
+ return isControlItemVisible.call(this, item);
921
+ });
922
+ }
923
+
924
+ /**
925
+ * @private
926
+ * @return {HTMLElement[]}
927
+ */
928
+ function getControlItems() {
929
+ return Array.from(this.children).filter((item) => {
930
+ if (!(item instanceof HTMLElement)) {
931
+ return false;
932
+ }
933
+ return item.slot === "" || item.slot === "popper";
934
+ });
935
+ }
936
+
937
+ /**
938
+ * @private
939
+ * @param {HTMLElement} item
940
+ * @return {boolean}
941
+ */
942
+ function isControlItemVisible(item) {
943
+ if (isControlBarSpacerElement(item) || isElementSelfHidden(item)) {
944
+ return false;
945
+ }
946
+
947
+ const computedStyle = getComputedStyle(item);
948
+ if (computedStyle.opacity === "0") {
949
+ return false;
950
+ }
951
+
952
+ const containedControls = getContainedControlElements(item);
953
+ if (containedControls.length === 0) {
954
+ return true;
955
+ }
956
+
957
+ return containedControls.some((control) => {
958
+ return (
959
+ !isElementSelfHidden(control) && getComputedStyle(control).opacity !== "0"
960
+ );
961
+ });
848
962
  }
849
963
 
850
964
  /**
@@ -147,10 +147,20 @@ nav[data-monster-role=nav] {
147
147
  border-bottom-width: 0;
148
148
  }
149
149
 
150
- [data-monster-role=nav] button img {
150
+ [data-monster-role=nav] button [part=icon] {
151
151
  width: 1.3rem;
152
152
  height: 1.3rem;
153
153
  margin-left: 0.40rem;
154
+ flex: 0 0 auto;
155
+ }
156
+
157
+ [data-monster-role=nav] button [part=icon][data-monster-icon-mode=mask] {
158
+ display: inline-block;
159
+ background-color: currentColor;
160
+ mask-image: var(--monster-tab-icon-mask-image);
161
+ mask-position: center;
162
+ mask-repeat: no-repeat;
163
+ mask-size: contain;
154
164
  }
155
165
 
156
166
  ::slotted(:not([slot]):not(.active)) {
@@ -25,7 +25,7 @@ try {
25
25
  TabsStyleSheet.insertRule(
26
26
  `
27
27
  @layer tabs {
28
- :after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-font-family-monospace:\"Consolas\",\"Courier New\",\"Roboto Mono\",\"Source Code Pro\",\"Fira Mono\",monospace;--monster-font-size-min:15px;--monster-font-size-base:16px;--monster-font-size-max:16px;--monster-font-scale:1;--monster-font-scale-hi-dpi:1.25;--monster-font-scale-xhi-dpi:1.25;--monster-font-size-fluid:clamp(var(--monster-font-size-min),calc(var(--monster-font-size-min) + 0.1vw),var(--monster-font-size-max))}@media (min-resolution:1.5dppx){:after,:before,:root{--monster-font-scale:var(--monster-font-scale-hi-dpi,1.1)}}@media (min-resolution:3dppx){:after,:before,:root{--monster-font-scale:var(--monster-font-scale-xhi-dpi,1.18)}}:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-6);--monster-bg-color-primary-4:var(--monster-color-gray-4)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1)}}:after,:before,:root{--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1)}}:after,:before,:root{--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1)}}:after,:before,:root{--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4)}}:after,:before,:root{--monster-color-danger-1:var(--monster-color-raspberry-1);--monster-color-danger-2:var(--monster-color-raspberry-4);--monster-color-danger-3:var(--monster-color-raspberry-6);--monster-color-danger-4:var(--monster-color-raspberry-1);--monster-bg-color-danger-1:var(--monster-color-raspberry-4);--monster-bg-color-danger-2:var(--monster-color-gray-1);--monster-bg-color-danger-3:var(--monster-color-raspberry-2);--monster-bg-color-danger-4:var(--monster-color-raspberry-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-danger-1:var(--monster-color-raspberry-1);--monster-color-danger-2:var(--monster-color-raspberry-3);--monster-color-danger-3:var(--monster-color-raspberry-4);--monster-color-danger-4:var(--monster-color-raspberry-1);--monster-bg-color-danger-1:var(--monster-color-raspberry-5);--monster-bg-color-danger-2:var(--monster-color-gray-6);--monster-bg-color-danger-3:var(--monster-color-raspberry-1);--monster-bg-color-danger-4:var(--monster-color-raspberry-4)}}:after,:before,:root{--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3)}}:after,:before,:root{--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3)}}:after,:before,:root{--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4)}}:after,:before,:root{--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6)}}:after,:before,:root{--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-color-gradient-1:#ffe0b2;--monster-color-gradient-2:#ad8275;--monster-color-gradient-3:#771ba3}}:after,:before,:root{--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-theme-control-bg-color:var(--monster-color-seashell-1);--monster-theme-control-color:var(--monster-color-seashell-6);--monster-theme-control-hover-color:var(--monster-color-seashell-6);--monster-theme-control-hover-bg-color:var(--monster-color-seashell-2);--monster-theme-control-border-width:2px;--monster-theme-control-border-style:solid;--monster-theme-control-border-radius:0;--monster-theme-control-border-color:var(--monster-color-primary-1)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-theme-control-bg-color:var(--monster-color-gray-5);--monster-theme-control-color:var(--monster-color-gray-1);--monster-theme-control-border-color:var(--monster-color-gray-3);--monster-theme-control-hover-color:var(--monster-color-gray-1);--monster-theme-control-hover-bg-color:var(--monster-color-gray-6)}}:after,:before,:root{--monster-theme-on-color:var(--monster-color-green-1);--monster-theme-on-bg-color:var(--monster-color-green-5);--monster-theme-off-color:var(--monster-color-gray-1);--monster-theme-off-bg-color:var(--monster-color-gray-4)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-theme-on-color:var(--monster-color-gray-6);--monster-theme-on-bg-color:var(--monster-color-gray-1);--monster-theme-off-color:var(--monster-color-gray-1);--monster-theme-off-bg-color:var(--monster-color-gray-5)}}:after,:before,:root{--monster-border-style:solid;--monster-border-width:3px;--monster-border-radius:0;--monster-outline-width:1px;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:2px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-width:var(--monster-border-width);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style)}.monster-border-0{border-width:0;border-radius:0;border-style:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-width:var(--monster-border-width);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-width:var(--monster-border-width);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-danger-1{background-color:var(--monster-bg-color-danger-1);color:var(--monster-color-danger-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-danger-1{background-color:var(--monster-bg-color-danger-1);color:var(--monster-color-danger-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-danger-2{background-color:var(--monster-bg-color-danger-2);color:var(--monster-color-danger-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-danger-2{background-color:var(--monster-bg-color-danger-2);color:var(--monster-color-danger-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-danger-3{background-color:var(--monster-bg-color-danger-3);color:var(--monster-color-danger-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-danger-3{background-color:var(--monster-bg-color-danger-3);color:var(--monster-color-danger-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-danger-4{background-color:var(--monster-bg-color-danger-4);color:var(--monster-color-danger-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-danger-4{background-color:var(--monster-bg-color-danger-4);color:var(--monster-color-danger-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-control-container-1,.monster-theme-control-row-1{border:1px solid var(--monster-theme-control-border-color)}.monster-theme-control-container-1,.monster-theme-control-element,.monster-theme-control-row-1{background-color:var(--monster-theme-control-bg-color);color:var(--monster-theme-control-color)}.monster-theme-control-background{background-color:var(--monster-theme-control-bg-color)}.monster-theme-background-inherit{background-color:inherit!important}.monster-theme-on{color:var(--monster-theme-on-color);background-color:var(--monster-theme-on-bg-color)}.monster-theme-off{color:var(--monster-theme-off-color);background-color:var(--monster-theme-off-bg-color)}div[data-monster-role=popper]{box-sizing:border-box;display:none;padding:1.1em;z-index:var(--monster-z-index-modal);background:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);border-radius:var(--monster-border-radius);border-width:var(--monster-border-width);border-style:var(--monster-border-style);border-color:var(--monster-bg-color-primary-4);box-shadow:var(--monster-box-shadow-1)}[data-popper-arrow],[data-popper-arrow]:before{position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);height:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);background:inherit}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{visibility:visible;content:\"\";transform:rotate(45deg);box-sizing:border-box}div[data-popper-placement^=top]>[data-popper-arrow]{bottom:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=top]>[data-popper-arrow]:before{border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}div[data-popper-placement^=bottom]>[data-popper-arrow]{top:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=bottom]>[data-popper-arrow]:before{border-right:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-bottom:transparent}div[data-popper-placement^=left]>[data-popper-arrow]{right:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=left]>[data-popper-arrow]:before{border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-bottom:transparent}div[data-popper-placement^=right]>[data-popper-arrow]{left:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=right]>[data-popper-arrow]:before{border-right:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}[data-monster-role=control]{outline:none;width:100%;box-sizing:border-box}[data-monster-role=control].flex{display:flex;flex-direction:row;align-items:center}:host{display:block;box-sizing:border-box}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;color:var(--monster-color-primary-4);background-color:var(--monster-bg-color-primary-4)}.monster-badge-primary-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-badge-secondary-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-badge-tertiary-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-badge-destructive-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-badge-success-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-badge-warning-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-badge-error-pill{padding:.25em .6em;border-radius:10rem}[data-monster-role=nav] button.hidden{display:none}nav[data-monster-role=nav]{overflow:hidden;display:flex;align-items:flex-end;flex-direction:row;flex-wrap:nowrap;box-sizing:border-box;margin-bottom:.75rem;border-bottom-width:thin;border-radius:var(--monster-border-radius);border-bottom-style:var(--monster-border-style);box-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-2)}[data-monster-role=nav] button .remove-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-size:16px;background-position:100% 100%;background-repeat:no-repeat;width:16px;min-height:16px;order:2;height:16px;background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");flex-wrap:nowrap}[data-monster-role=nav] button span{display:flex;align-items:center;white-space:pre;font-family:var(--monster-font-family);font-size:1rem;line-height:1.4;font-weight:400}[data-monster-role=nav] button [part=error]{margin-left:.35rem}[data-monster-role=nav] button [part=error],[data-monster-role=nav] button [part=error] .monster-tab-error-icon{display:inline-flex;align-items:center;line-height:1}[data-monster-role=nav] button [part=error] .monster-tab-error-icon svg{width:1.1em;height:1.1em}[data-monster-role=nav] button [part=error]:empty{display:none}[data-monster-role=nav] button{outline:none;cursor:pointer;font-weight:400;line-height:1.5;text-align:center;text-decoration:none;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:.375rem 0;margin-right:.75rem;font-size:1rem;display:flex;justify-content:center;border-radius:var(--monster-border-radius);border:none;border-bottom:var(--monster-border-style);box-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-4);transition:color .8s;align-self:stretch;align-content:center;align-items:center}[data-monster-role=nav] button:not([disabled]):hover{border-radius:var(--monster-border-radius);border-bottom-style:var(--monster-border-style);box-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-secondary-3);color:var(--monster-bg-color-secondary-3)}[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{border-radius:var(--monster-border-radius);border-bottom-style:var(--monster-border-style);box-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-1)!important;background-color:inherit}@media (prefers-color-scheme:dark){[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{border-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)!important}}[data-monster-role=nav] button[disabled]{color:var(--monster-color-primary-disabled-1);background-color:var(--monster-bg-color-primary-disabled-1);cursor:not-allowed}[data-monster-role=nav] button[data-monster-role=switch]{align-self:center;touch-action:none;order:2;border:0}[data-monster-role=nav] button[data-monster-role=switch]:not([disabled]):hover{border-bottom-width:0}[data-monster-role=nav] button img{width:1.3rem;height:1.3rem;margin-left:.4rem}::slotted(:not([slot]):not(.active)){display:none}::slotted(*){align-self:center}::slotted([slot]){border-bottom-width:var(--monster-border-width);border-radius:var(--monster-border-radius);border-bottom-style:var(--monster-border-style);box-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-4)}::slotted([slot=start]){margin-right:.75rem;order:0}::slotted([slot=end]){margin-left:.75rem;order:3}[data-monster-role=nav] [data-monster-role=popper-nav] button:not([disabled]){width:100%;justify-content:left;padding-left:15px;padding-right:15px;border:0}[data-monster-role=nav] [data-monster-role=popper-nav] button:hover,[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{border:0}@media (prefers-color-scheme:dark){[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{color:var(--monster-color-secondary-4)!important}}
28
+ :after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-font-family-monospace:\"Consolas\",\"Courier New\",\"Roboto Mono\",\"Source Code Pro\",\"Fira Mono\",monospace;--monster-font-size-min:15px;--monster-font-size-base:16px;--monster-font-size-max:16px;--monster-font-scale:1;--monster-font-scale-hi-dpi:1.25;--monster-font-scale-xhi-dpi:1.25;--monster-font-size-fluid:clamp(var(--monster-font-size-min),calc(var(--monster-font-size-min) + 0.1vw),var(--monster-font-size-max))}@media (min-resolution:1.5dppx){:after,:before,:root{--monster-font-scale:var(--monster-font-scale-hi-dpi,1.1)}}@media (min-resolution:3dppx){:after,:before,:root{--monster-font-scale:var(--monster-font-scale-xhi-dpi,1.18)}}:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-6);--monster-bg-color-primary-4:var(--monster-color-gray-4)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1)}}:after,:before,:root{--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1)}}:after,:before,:root{--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1)}}:after,:before,:root{--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4)}}:after,:before,:root{--monster-color-danger-1:var(--monster-color-raspberry-1);--monster-color-danger-2:var(--monster-color-raspberry-4);--monster-color-danger-3:var(--monster-color-raspberry-6);--monster-color-danger-4:var(--monster-color-raspberry-1);--monster-bg-color-danger-1:var(--monster-color-raspberry-4);--monster-bg-color-danger-2:var(--monster-color-gray-1);--monster-bg-color-danger-3:var(--monster-color-raspberry-2);--monster-bg-color-danger-4:var(--monster-color-raspberry-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-danger-1:var(--monster-color-raspberry-1);--monster-color-danger-2:var(--monster-color-raspberry-3);--monster-color-danger-3:var(--monster-color-raspberry-4);--monster-color-danger-4:var(--monster-color-raspberry-1);--monster-bg-color-danger-1:var(--monster-color-raspberry-5);--monster-bg-color-danger-2:var(--monster-color-gray-6);--monster-bg-color-danger-3:var(--monster-color-raspberry-1);--monster-bg-color-danger-4:var(--monster-color-raspberry-4)}}:after,:before,:root{--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3)}}:after,:before,:root{--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3)}}:after,:before,:root{--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4)}}:after,:before,:root{--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6)}}:after,:before,:root{--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6);--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1);--monster-color-gradient-1:#ffe0b2;--monster-color-gradient-2:#ad8275;--monster-color-gradient-3:#771ba3}}:after,:before,:root{--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-theme-control-bg-color:var(--monster-color-seashell-1);--monster-theme-control-color:var(--monster-color-seashell-6);--monster-theme-control-hover-color:var(--monster-color-seashell-6);--monster-theme-control-hover-bg-color:var(--monster-color-seashell-2);--monster-theme-control-border-width:2px;--monster-theme-control-border-style:solid;--monster-theme-control-border-radius:0;--monster-theme-control-border-color:var(--monster-color-primary-1)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-theme-control-bg-color:var(--monster-color-gray-5);--monster-theme-control-color:var(--monster-color-gray-1);--monster-theme-control-border-color:var(--monster-color-gray-3);--monster-theme-control-hover-color:var(--monster-color-gray-1);--monster-theme-control-hover-bg-color:var(--monster-color-gray-6)}}:after,:before,:root{--monster-theme-on-color:var(--monster-color-green-1);--monster-theme-on-bg-color:var(--monster-color-green-5);--monster-theme-off-color:var(--monster-color-gray-1);--monster-theme-off-bg-color:var(--monster-color-gray-4)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-theme-on-color:var(--monster-color-gray-6);--monster-theme-on-bg-color:var(--monster-color-gray-1);--monster-theme-off-color:var(--monster-color-gray-1);--monster-theme-off-bg-color:var(--monster-color-gray-5)}}:after,:before,:root{--monster-border-style:solid;--monster-border-width:3px;--monster-border-radius:0;--monster-outline-width:1px;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:2px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-width:var(--monster-border-width);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style)}.monster-border-0{border-width:0;border-radius:0;border-style:none}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-width:var(--monster-border-width);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-width:var(--monster-border-width);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-danger-1{background-color:var(--monster-bg-color-danger-1);color:var(--monster-color-danger-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-danger-1{background-color:var(--monster-bg-color-danger-1);color:var(--monster-color-danger-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-danger-2{background-color:var(--monster-bg-color-danger-2);color:var(--monster-color-danger-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-danger-2{background-color:var(--monster-bg-color-danger-2);color:var(--monster-color-danger-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-danger-3{background-color:var(--monster-bg-color-danger-3);color:var(--monster-color-danger-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-danger-3{background-color:var(--monster-bg-color-danger-3);color:var(--monster-color-danger-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-danger-4{background-color:var(--monster-bg-color-danger-4);color:var(--monster-color-danger-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-danger-4{background-color:var(--monster-bg-color-danger-4);color:var(--monster-color-danger-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-control-container-1,.monster-theme-control-row-1{border:1px solid var(--monster-theme-control-border-color)}.monster-theme-control-container-1,.monster-theme-control-element,.monster-theme-control-row-1{background-color:var(--monster-theme-control-bg-color);color:var(--monster-theme-control-color)}.monster-theme-control-background{background-color:var(--monster-theme-control-bg-color)}.monster-theme-background-inherit{background-color:inherit!important}.monster-theme-on{color:var(--monster-theme-on-color);background-color:var(--monster-theme-on-bg-color)}.monster-theme-off{color:var(--monster-theme-off-color);background-color:var(--monster-theme-off-bg-color)}div[data-monster-role=popper]{box-sizing:border-box;display:none;padding:1.1em;z-index:var(--monster-z-index-modal);background:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1);border-radius:var(--monster-border-radius);border-width:var(--monster-border-width);border-style:var(--monster-border-style);border-color:var(--monster-bg-color-primary-4);box-shadow:var(--monster-box-shadow-1)}[data-popper-arrow],[data-popper-arrow]:before{position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);height:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);background:inherit}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{visibility:visible;content:\"\";transform:rotate(45deg);box-sizing:border-box}div[data-popper-placement^=top]>[data-popper-arrow]{bottom:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=top]>[data-popper-arrow]:before{border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}div[data-popper-placement^=bottom]>[data-popper-arrow]{top:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=bottom]>[data-popper-arrow]:before{border-right:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-bottom:transparent}div[data-popper-placement^=left]>[data-popper-arrow]{right:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=left]>[data-popper-arrow]:before{border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-bottom:transparent}div[data-popper-placement^=right]>[data-popper-arrow]{left:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=right]>[data-popper-arrow]:before{border-right:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}[data-monster-role=control]{outline:none;width:100%;box-sizing:border-box}[data-monster-role=control].flex{display:flex;flex-direction:row;align-items:center}:host{display:block;box-sizing:border-box}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;color:var(--monster-color-primary-4);background-color:var(--monster-bg-color-primary-4)}.monster-badge-primary-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-badge-secondary-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-badge-tertiary-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-badge-destructive-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-badge-success-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-badge-warning-pill{padding:.25em .6em;border-radius:10rem}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;text-decoration:none;background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-badge-error-pill{padding:.25em .6em;border-radius:10rem}[data-monster-role=nav] button.hidden{display:none}nav[data-monster-role=nav]{overflow:hidden;display:flex;align-items:flex-end;flex-direction:row;flex-wrap:nowrap;box-sizing:border-box;margin-bottom:.75rem;border-bottom-width:thin;border-radius:var(--monster-border-radius);border-bottom-style:var(--monster-border-style);box-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-2)}[data-monster-role=nav] button .remove-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-size:16px;background-position:100% 100%;background-repeat:no-repeat;width:16px;min-height:16px;order:2;height:16px;background-color:var(--monster-bg-color-primary-4);-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E\");flex-wrap:nowrap}[data-monster-role=nav] button span{display:flex;align-items:center;white-space:pre;font-family:var(--monster-font-family);font-size:1rem;line-height:1.4;font-weight:400}[data-monster-role=nav] button [part=error]{margin-left:.35rem}[data-monster-role=nav] button [part=error],[data-monster-role=nav] button [part=error] .monster-tab-error-icon{display:inline-flex;align-items:center;line-height:1}[data-monster-role=nav] button [part=error] .monster-tab-error-icon svg{width:1.1em;height:1.1em}[data-monster-role=nav] button [part=error]:empty{display:none}[data-monster-role=nav] button{outline:none;cursor:pointer;font-weight:400;line-height:1.5;text-align:center;text-decoration:none;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:.375rem 0;margin-right:.75rem;font-size:1rem;display:flex;justify-content:center;border-radius:var(--monster-border-radius);border:none;border-bottom:var(--monster-border-style);box-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-4);transition:color .8s;align-self:stretch;align-content:center;align-items:center}[data-monster-role=nav] button:not([disabled]):hover{border-radius:var(--monster-border-radius);border-bottom-style:var(--monster-border-style);box-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-secondary-3);color:var(--monster-bg-color-secondary-3)}[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{border-radius:var(--monster-border-radius);border-bottom-style:var(--monster-border-style);box-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-1)!important;background-color:inherit}@media (prefers-color-scheme:dark){[data-monster-role=nav] button[data-monster-state=active],[data-monster-role=nav] button[data-monster-state=active]:not([disabled]):hover{border-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)!important}}[data-monster-role=nav] button[disabled]{color:var(--monster-color-primary-disabled-1);background-color:var(--monster-bg-color-primary-disabled-1);cursor:not-allowed}[data-monster-role=nav] button[data-monster-role=switch]{align-self:center;touch-action:none;order:2;border:0}[data-monster-role=nav] button[data-monster-role=switch]:not([disabled]):hover{border-bottom-width:0}[data-monster-role=nav] button [part=icon]{width:1.3rem;height:1.3rem;margin-left:.4rem;flex:0 0 auto}[data-monster-role=nav] button [part=icon][data-monster-icon-mode=mask]{display:inline-block;background-color:currentColor;-webkit-mask-image:var(--monster-tab-icon-mask-image);mask-image:var(--monster-tab-icon-mask-image);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}::slotted(:not([slot]):not(.active)){display:none}::slotted(*){align-self:center}::slotted([slot]){border-bottom-width:var(--monster-border-width);border-radius:var(--monster-border-radius);border-bottom-style:var(--monster-border-style);box-shadow:var(--monster-box-shadow-1);border-color:var(--monster-bg-color-primary-4)}::slotted([slot=start]){margin-right:.75rem;order:0}::slotted([slot=end]){margin-left:.75rem;order:3}[data-monster-role=nav] [data-monster-role=popper-nav] button:not([disabled]){width:100%;justify-content:left;padding-left:15px;padding-right:15px;border:0}[data-monster-role=nav] [data-monster-role=popper-nav] button:hover,[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{border:0}@media (prefers-color-scheme:dark){[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active],[data-monster-role=nav] [data-monster-role=popper-nav] button[data-monster-state=active]:not([disabled]):hover{color:var(--monster-color-secondary-4)!important}}
29
29
  }`,
30
30
  0,
31
31
  );
@@ -1277,6 +1277,7 @@ function attachTabMutationObserver(observedNode) {
1277
1277
  "disabled",
1278
1278
  ATTRIBUTE_BUTTON_LABEL,
1279
1279
  `${ATTRIBUTE_PREFIX}button-icon`,
1280
+ `${ATTRIBUTE_PREFIX}button-icon-mode`,
1280
1281
  "data-monster-tab-error",
1281
1282
  "data-monster-tab-error-message",
1282
1283
  "data-monster-tab-available",
@@ -1367,9 +1368,7 @@ function initTabButtons() {
1367
1368
  }
1368
1369
 
1369
1370
  if (node.hasAttribute(`${ATTRIBUTE_PREFIX}button-icon`)) {
1370
- label = `<span part="label">${label}</span><img part="icon" alt="this is an icon" src="${node.getAttribute(
1371
- `${ATTRIBUTE_PREFIX}button-icon`,
1372
- )}">`;
1371
+ label = `<span part="label">${label}</span>${getButtonIconMarkup(node)}`;
1373
1372
  }
1374
1373
 
1375
1374
  const errorMarkup = getTabErrorMarkup(node);
@@ -1761,6 +1760,69 @@ function getButtonLabel(node) {
1761
1760
  return label;
1762
1761
  }
1763
1762
 
1763
+ /**
1764
+ * @private
1765
+ * @param {HTMLElement} node
1766
+ * @return {string}
1767
+ */
1768
+ function getButtonIconMarkup(node) {
1769
+ const icon = node.getAttribute(`${ATTRIBUTE_PREFIX}button-icon`);
1770
+ if (!isString(icon) || icon.trim() === "") {
1771
+ return "";
1772
+ }
1773
+
1774
+ const mode = getButtonIconMode(node, icon);
1775
+ if (mode === "mask") {
1776
+ const style = `--monster-tab-icon-mask-image: url("${escapeCssString(
1777
+ icon,
1778
+ )}")`;
1779
+ return `<span part="icon" data-monster-icon-mode="mask" aria-hidden="true" style="${escapeHtml(
1780
+ style,
1781
+ )}"></span>`;
1782
+ }
1783
+
1784
+ return `<img part="icon" data-monster-icon-mode="image" alt="this is an icon" src="${escapeHtml(
1785
+ icon,
1786
+ )}">`;
1787
+ }
1788
+
1789
+ /**
1790
+ * @private
1791
+ * @param {HTMLElement} node
1792
+ * @param {string} icon
1793
+ * @return {string}
1794
+ */
1795
+ function getButtonIconMode(node, icon) {
1796
+ const mode = node
1797
+ .getAttribute(`${ATTRIBUTE_PREFIX}button-icon-mode`)
1798
+ ?.trim()
1799
+ .toLowerCase();
1800
+
1801
+ switch (mode) {
1802
+ case "image":
1803
+ case "img":
1804
+ return "image";
1805
+ case "mask":
1806
+ return "mask";
1807
+ default:
1808
+ return isSvgIcon(icon) ? "mask" : "image";
1809
+ }
1810
+ }
1811
+
1812
+ /**
1813
+ * @private
1814
+ * @param {string} value
1815
+ * @return {boolean}
1816
+ */
1817
+ function isSvgIcon(value) {
1818
+ const icon = value.trim().toLowerCase();
1819
+ if (icon.startsWith("data:image/svg+xml")) {
1820
+ return true;
1821
+ }
1822
+
1823
+ return icon.split(/[?#]/, 1)[0].endsWith(".svg");
1824
+ }
1825
+
1764
1826
  /**
1765
1827
  * @private
1766
1828
  * @param {HTMLElement} node
@@ -1810,6 +1872,19 @@ function escapeHtml(value) {
1810
1872
  .replaceAll("'", "&#39;");
1811
1873
  }
1812
1874
 
1875
+ /**
1876
+ * @private
1877
+ * @param {string} value
1878
+ * @return {string}
1879
+ */
1880
+ function escapeCssString(value) {
1881
+ return value
1882
+ .replaceAll("\\", "\\\\")
1883
+ .replaceAll("\n", "\\a ")
1884
+ .replaceAll("\r", "")
1885
+ .replaceAll('"', '\\"');
1886
+ }
1887
+
1813
1888
  /**
1814
1889
  * @private
1815
1890
  * @return {string}
@@ -1003,6 +1003,7 @@ function attachTabMutationObserver(observedNode) {
1003
1003
  "disabled",
1004
1004
  ATTRIBUTE_BUTTON_LABEL,
1005
1005
  `${ATTRIBUTE_PREFIX}button-icon`,
1006
+ `${ATTRIBUTE_PREFIX}button-icon-mode`,
1006
1007
  "data-monster-tab-error",
1007
1008
  "data-monster-tab-error-message",
1008
1009
  ],
@@ -1076,9 +1077,7 @@ function initTabButtons() {
1076
1077
  }
1077
1078
 
1078
1079
  if (node.hasAttribute(`${ATTRIBUTE_PREFIX}button-icon`)) {
1079
- label = `<span part="label">${label}</span><img part="icon" alt="this is an icon" src="${node.getAttribute(
1080
- `${ATTRIBUTE_PREFIX}button-icon`,
1081
- )}">`;
1080
+ label = `<span part="label">${label}</span>${getButtonIconMarkup(node)}`;
1082
1081
  }
1083
1082
 
1084
1083
  const errorMarkup = getTabErrorMarkup(node);
@@ -1360,6 +1359,69 @@ function getButtonLabel(node) {
1360
1359
  return label;
1361
1360
  }
1362
1361
 
1362
+ /**
1363
+ * @private
1364
+ * @param {HTMLElement} node
1365
+ * @return {string}
1366
+ */
1367
+ function getButtonIconMarkup(node) {
1368
+ const icon = node.getAttribute(`${ATTRIBUTE_PREFIX}button-icon`);
1369
+ if (!isString(icon) || icon.trim() === "") {
1370
+ return "";
1371
+ }
1372
+
1373
+ const mode = getButtonIconMode(node, icon);
1374
+ if (mode === "mask") {
1375
+ const style = `--monster-tab-icon-mask-image: url("${escapeCssString(
1376
+ icon,
1377
+ )}")`;
1378
+ return `<span part="icon" data-monster-icon-mode="mask" aria-hidden="true" style="${escapeHtml(
1379
+ style,
1380
+ )}"></span>`;
1381
+ }
1382
+
1383
+ return `<img part="icon" data-monster-icon-mode="image" alt="this is an icon" src="${escapeHtml(
1384
+ icon,
1385
+ )}">`;
1386
+ }
1387
+
1388
+ /**
1389
+ * @private
1390
+ * @param {HTMLElement} node
1391
+ * @param {string} icon
1392
+ * @return {string}
1393
+ */
1394
+ function getButtonIconMode(node, icon) {
1395
+ const mode = node
1396
+ .getAttribute(`${ATTRIBUTE_PREFIX}button-icon-mode`)
1397
+ ?.trim()
1398
+ .toLowerCase();
1399
+
1400
+ switch (mode) {
1401
+ case "image":
1402
+ case "img":
1403
+ return "image";
1404
+ case "mask":
1405
+ return "mask";
1406
+ default:
1407
+ return isSvgIcon(icon) ? "mask" : "image";
1408
+ }
1409
+ }
1410
+
1411
+ /**
1412
+ * @private
1413
+ * @param {string} value
1414
+ * @return {boolean}
1415
+ */
1416
+ function isSvgIcon(value) {
1417
+ const icon = value.trim().toLowerCase();
1418
+ if (icon.startsWith("data:image/svg+xml")) {
1419
+ return true;
1420
+ }
1421
+
1422
+ return icon.split(/[?#]/, 1)[0].endsWith(".svg");
1423
+ }
1424
+
1363
1425
  /**
1364
1426
  * @private
1365
1427
  * @param {HTMLElement} node
@@ -1409,6 +1471,19 @@ function escapeHtml(value) {
1409
1471
  .replaceAll("'", "&#39;");
1410
1472
  }
1411
1473
 
1474
+ /**
1475
+ * @private
1476
+ * @param {string} value
1477
+ * @return {string}
1478
+ */
1479
+ function escapeCssString(value) {
1480
+ return value
1481
+ .replaceAll("\\", "\\\\")
1482
+ .replaceAll("\n", "\\a ")
1483
+ .replaceAll("\r", "")
1484
+ .replaceAll('"', '\\"');
1485
+ }
1486
+
1412
1487
  /**
1413
1488
  * @private
1414
1489
  * @return {string}
@@ -6,6 +6,8 @@ import { ResizeObserverMock } from "../../../util/resize-observer.mjs";
6
6
  let expect = chai.expect;
7
7
  chai.use(chaiDom);
8
8
 
9
+ const waitForLayout = () => new Promise((resolve) => setTimeout(resolve, 120));
10
+
9
11
  const html = `
10
12
  <div id="test1">
11
13
  <monster-button-bar id="bar"></monster-button-bar>
@@ -80,6 +82,112 @@ describe("ButtonBar", function () {
80
82
  }, 50);
81
83
  });
82
84
 
85
+ it("should hide an empty button bar when configured to hide empty bars", async function () {
86
+ const mocks = document.getElementById("mocks");
87
+ mocks.innerHTML = `
88
+ <monster-button-bar
89
+ id="empty-auto-hidden-button-bar"
90
+ data-monster-option-layout-hide-when-empty="true"
91
+ ></monster-button-bar>
92
+ `;
93
+ const bar = document.getElementById("empty-auto-hidden-button-bar");
94
+
95
+ await waitForLayout();
96
+
97
+ expect(bar.getOption("layout.hideWhenEmpty")).to.equal(true);
98
+ expect(bar.hasAttribute("hidden")).to.be.true;
99
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.true;
100
+ });
101
+
102
+ it("should reveal an auto-hidden button bar when a button becomes visible", async function () {
103
+ const mocks = document.getElementById("mocks");
104
+ mocks.innerHTML = `
105
+ <monster-button-bar
106
+ id="dynamic-auto-hidden-button-bar"
107
+ data-monster-option-layout-hide-when-empty="true"
108
+ >
109
+ <button id="dynamic-auto-hidden-button" hidden>Run</button>
110
+ </monster-button-bar>
111
+ `;
112
+ const bar = document.getElementById("dynamic-auto-hidden-button-bar");
113
+ const button = document.getElementById("dynamic-auto-hidden-button");
114
+
115
+ await waitForLayout();
116
+
117
+ expect(bar.hasAttribute("hidden")).to.be.true;
118
+
119
+ button.removeAttribute("hidden");
120
+ await waitForLayout();
121
+
122
+ expect(bar.hasAttribute("hidden")).to.be.false;
123
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.false;
124
+ });
125
+
126
+ it("should keep an auto-hidden button bar visible when buttons overflow into the popper", async function () {
127
+ const mocks = document.getElementById("mocks");
128
+ mocks.innerHTML = `
129
+ <div id="overflow-auto-hidden-wrapper">
130
+ <monster-button-bar
131
+ id="overflow-auto-hidden-button-bar"
132
+ data-monster-option-layout-hide-when-empty="true"
133
+ >
134
+ <button id="overflow-auto-hidden-a" type="button">One</button>
135
+ <button id="overflow-auto-hidden-b" type="button">Two</button>
136
+ </monster-button-bar>
137
+ </div>
138
+ `;
139
+ const wrapper = document.getElementById("overflow-auto-hidden-wrapper");
140
+ const bar = document.getElementById("overflow-auto-hidden-button-bar");
141
+ const buttons = [
142
+ document.getElementById("overflow-auto-hidden-a"),
143
+ document.getElementById("overflow-auto-hidden-b"),
144
+ ];
145
+ const switchButton = bar.shadowRoot.querySelector(
146
+ '[data-monster-role="switch"]',
147
+ );
148
+
149
+ wrapper.style.boxSizing = "border-box";
150
+ wrapper.style.width = "30px";
151
+ Object.defineProperty(wrapper, "clientWidth", {
152
+ configurable: true,
153
+ value: 30,
154
+ });
155
+ Object.defineProperty(switchButton, "offsetWidth", {
156
+ configurable: true,
157
+ value: 20,
158
+ });
159
+
160
+ for (const button of buttons) {
161
+ Object.defineProperty(button, "offsetWidth", {
162
+ configurable: true,
163
+ value: 48,
164
+ });
165
+ Object.defineProperty(button, "offsetHeight", {
166
+ configurable: true,
167
+ value: 30,
168
+ });
169
+ button.getBoundingClientRect = () => ({
170
+ width: 48,
171
+ height: 30,
172
+ top: 0,
173
+ right: 48,
174
+ bottom: 30,
175
+ left: 0,
176
+ x: 0,
177
+ y: 0,
178
+ toJSON: () => {},
179
+ });
180
+ }
181
+
182
+ await waitForLayout();
183
+
184
+ expect(buttons.every((button) => button.getAttribute("slot") === "popper"))
185
+ .to.be.true;
186
+ expect(switchButton.hasAttribute("hidden")).to.be.false;
187
+ expect(bar.hasAttribute("hidden")).to.be.false;
188
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.false;
189
+ });
190
+
83
191
  it("should default the button bar layout alignment to left", function () {
84
192
  const bar = document.getElementById("bar");
85
193
  const buttonBar = bar.shadowRoot.querySelector(
@@ -6,6 +6,8 @@ import { ResizeObserverMock } from "../../../util/resize-observer.mjs";
6
6
  const expect = chai.expect;
7
7
  chai.use(chaiDom);
8
8
 
9
+ const waitForLayout = () => new Promise((resolve) => setTimeout(resolve, 120));
10
+
9
11
  const html = `
10
12
  <div id="test1">
11
13
  <monster-control-bar id="bar">
@@ -97,6 +99,119 @@ describe("ControlBar", function () {
97
99
  expect(controlBar.style.opacity).to.not.equal("0");
98
100
  });
99
101
 
102
+ it("should keep an empty control bar visible by default", async function () {
103
+ const bar = document.getElementById("bar-right");
104
+
105
+ await waitForLayout();
106
+
107
+ expect(bar.hasAttribute("hidden")).to.be.false;
108
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.false;
109
+ });
110
+
111
+ it("should hide an empty control bar when the empty option is enabled at runtime", async function () {
112
+ const bar = document.getElementById("bar-right");
113
+
114
+ await waitForLayout();
115
+
116
+ bar.setOption("layout.hideWhenEmpty", true);
117
+ await waitForLayout();
118
+
119
+ expect(bar.hasAttribute("hidden")).to.be.true;
120
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.true;
121
+ });
122
+
123
+ it("should hide an empty control bar when configured to hide empty bars", async function () {
124
+ const mocks = document.getElementById("mocks");
125
+ mocks.innerHTML = `
126
+ <monster-control-bar
127
+ id="empty-auto-hidden-bar"
128
+ data-monster-option-layout-hide-when-empty="true"
129
+ ></monster-control-bar>
130
+ `;
131
+ const bar = document.getElementById("empty-auto-hidden-bar");
132
+
133
+ await waitForLayout();
134
+
135
+ expect(bar.getOption("layout.hideWhenEmpty")).to.equal(true);
136
+ expect(bar.hasAttribute("hidden")).to.be.true;
137
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.true;
138
+ });
139
+
140
+ it("should update empty control bar visibility when child controls become visible", async function () {
141
+ const mocks = document.getElementById("mocks");
142
+ mocks.innerHTML = `
143
+ <monster-control-bar
144
+ id="dynamic-auto-hidden-bar"
145
+ data-monster-option-layout-hide-when-empty="true"
146
+ >
147
+ <button id="dynamic-auto-hidden-button" hidden>Run</button>
148
+ </monster-control-bar>
149
+ `;
150
+ const bar = document.getElementById("dynamic-auto-hidden-bar");
151
+ const button = document.getElementById("dynamic-auto-hidden-button");
152
+
153
+ await waitForLayout();
154
+
155
+ expect(bar.hasAttribute("hidden")).to.be.true;
156
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.true;
157
+
158
+ button.removeAttribute("hidden");
159
+ await waitForLayout();
160
+
161
+ expect(bar.hasAttribute("hidden")).to.be.false;
162
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.false;
163
+
164
+ button.style.display = "none";
165
+ await waitForLayout();
166
+
167
+ expect(bar.hasAttribute("hidden")).to.be.true;
168
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.true;
169
+ });
170
+
171
+ it("should release empty auto-hidden state when the option is disabled", async function () {
172
+ const mocks = document.getElementById("mocks");
173
+ mocks.innerHTML = `
174
+ <monster-control-bar
175
+ id="option-auto-hidden-bar"
176
+ data-monster-option-layout-hide-when-empty="true"
177
+ ></monster-control-bar>
178
+ `;
179
+ const bar = document.getElementById("option-auto-hidden-bar");
180
+
181
+ await waitForLayout();
182
+
183
+ expect(bar.hasAttribute("hidden")).to.be.true;
184
+
185
+ bar.setOption("layout.hideWhenEmpty", false);
186
+ await waitForLayout();
187
+
188
+ expect(bar.hasAttribute("hidden")).to.be.false;
189
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.false;
190
+ });
191
+
192
+ it("should preserve a manual hidden attribute when empty hiding is disabled", async function () {
193
+ const mocks = document.getElementById("mocks");
194
+ mocks.innerHTML = `
195
+ <monster-control-bar
196
+ id="manual-hidden-bar"
197
+ hidden
198
+ data-monster-option-layout-hide-when-empty="true"
199
+ ></monster-control-bar>
200
+ `;
201
+ const bar = document.getElementById("manual-hidden-bar");
202
+
203
+ await waitForLayout();
204
+
205
+ expect(bar.hasAttribute("hidden")).to.be.true;
206
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.false;
207
+
208
+ bar.setOption("layout.hideWhenEmpty", false);
209
+ await waitForLayout();
210
+
211
+ expect(bar.hasAttribute("hidden")).to.be.true;
212
+ expect(bar.hasAttribute("data-monster-empty-hidden")).to.be.false;
213
+ });
214
+
100
215
  it("should allow configuring the control bar layout alignment to right", function (done) {
101
216
  const bar = document.getElementById("bar-right");
102
217
 
@@ -145,7 +145,38 @@ let htmlNoDerivedLabel = `
145
145
  </monster-tabs>
146
146
  `;
147
147
 
148
+ const svgTabIcon = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M8 1 15 15H1z'/%3E%3C/svg%3E";
149
+ const pngTabIcon = "data:image/png;base64,iVBORw0KGgo=";
150
+
151
+ // language=html
152
+ let htmlIconModes = `
153
+ <monster-tabs id="icon-mode-tabs">
154
+ <div id="auto-svg-panel" data-monster-button-label="Auto SVG" data-monster-button-icon="${svgTabIcon}">
155
+ Auto SVG content
156
+ </div>
157
+ <div id="image-svg-panel" data-monster-button-label="Image SVG" data-monster-button-icon="${svgTabIcon}" data-monster-button-icon-mode="image">
158
+ Image SVG content
159
+ </div>
160
+ <div id="auto-raster-panel" data-monster-button-label="Auto Raster" data-monster-button-icon="${pngTabIcon}">
161
+ Auto raster content
162
+ </div>
163
+ <div id="mask-raster-panel" data-monster-button-label="Mask Raster" data-monster-button-icon="${pngTabIcon}" data-monster-button-icon-mode="mask">
164
+ Mask raster content
165
+ </div>
166
+ </monster-tabs>
167
+ `;
168
+
169
+ // language=html
170
+ let htmlVerticalIconModes = `
171
+ <monster-vertical-tabs id="vertical-icon-mode-tabs">
172
+ <div id="vertical-auto-svg-panel" data-monster-button-label="Auto SVG" data-monster-button-icon="${svgTabIcon}">
173
+ Auto SVG content
174
+ </div>
175
+ </monster-vertical-tabs>
176
+ `;
177
+
148
178
  let Tabs;
179
+ let VerticalTabs;
149
180
  let restoreBoundingClientRect = null;
150
181
  let restoreResizeObserver = null;
151
182
 
@@ -195,6 +226,9 @@ describe('Tabs', function () {
195
226
  promises.push(import("../../../../source/components/layout/tabs.mjs").then((m) => {
196
227
  Tabs = m['Tabs'];
197
228
  }))
229
+ promises.push(import("../../../../source/components/layout/vertical-tabs.mjs").then((m) => {
230
+ VerticalTabs = m['VerticalTabs'];
231
+ }))
198
232
 
199
233
  Promise.all(promises).then(()=>{
200
234
  done();
@@ -697,6 +731,94 @@ describe('Tabs', function () {
697
731
  }).catch(done);
698
732
  });
699
733
 
734
+ it('should render SVG tab icons as theme-aware masks by default', function (done) {
735
+ let mocks = document.getElementById('mocks');
736
+ mocks.innerHTML = htmlIconModes;
737
+
738
+ waitForCondition(() => {
739
+ const tabs = document.getElementById('icon-mode-tabs');
740
+ return tabs instanceof Tabs && tabs.shadowRoot.querySelectorAll('button[part=button]').length === 4;
741
+ }).then(() => {
742
+ try {
743
+ const tabs = document.getElementById('icon-mode-tabs');
744
+ const getIcon = (reference) => tabs.shadowRoot.querySelector(
745
+ `button[part=button][data-monster-tab-reference="${reference}"] [part=icon]`,
746
+ );
747
+
748
+ const autoSvgIcon = getIcon('auto-svg-panel');
749
+ expect(autoSvgIcon.tagName).to.equal('SPAN');
750
+ expect(autoSvgIcon.getAttribute('data-monster-icon-mode')).to.equal('mask');
751
+ expect(autoSvgIcon.getAttribute('aria-hidden')).to.equal('true');
752
+ expect(autoSvgIcon.getAttribute('style')).to.contain('--monster-tab-icon-mask-image');
753
+
754
+ const imageSvgIcon = getIcon('image-svg-panel');
755
+ expect(imageSvgIcon.tagName).to.equal('IMG');
756
+ expect(imageSvgIcon.getAttribute('data-monster-icon-mode')).to.equal('image');
757
+ expect(imageSvgIcon.getAttribute('src')).to.equal(svgTabIcon);
758
+
759
+ const autoRasterIcon = getIcon('auto-raster-panel');
760
+ expect(autoRasterIcon.tagName).to.equal('IMG');
761
+ expect(autoRasterIcon.getAttribute('data-monster-icon-mode')).to.equal('image');
762
+ expect(autoRasterIcon.getAttribute('src')).to.equal(pngTabIcon);
763
+
764
+ const maskRasterIcon = getIcon('mask-raster-panel');
765
+ expect(maskRasterIcon.tagName).to.equal('SPAN');
766
+ expect(maskRasterIcon.getAttribute('data-monster-icon-mode')).to.equal('mask');
767
+ expect(maskRasterIcon.getAttribute('style')).to.contain('--monster-tab-icon-mask-image');
768
+
769
+ done();
770
+ } catch (e) {
771
+ done(e);
772
+ }
773
+ }).catch(done);
774
+ });
775
+
776
+ it('should update tab icon mode when the icon mode attribute changes', function (done) {
777
+ let mocks = document.getElementById('mocks');
778
+ mocks.innerHTML = htmlIconModes;
779
+
780
+ waitForCondition(() => {
781
+ const tabs = document.getElementById('icon-mode-tabs');
782
+ return tabs instanceof Tabs && tabs.shadowRoot.querySelectorAll('button[part=button]').length === 4;
783
+ }).then(() => {
784
+ const tabs = document.getElementById('icon-mode-tabs');
785
+ const panel = document.getElementById('image-svg-panel');
786
+ panel.setAttribute('data-monster-button-icon-mode', 'mask');
787
+
788
+ return waitForCondition(() => {
789
+ const icon = tabs.shadowRoot.querySelector(
790
+ 'button[part=button][data-monster-tab-reference="image-svg-panel"] [part=icon]',
791
+ );
792
+ return icon?.tagName === 'SPAN' && icon.getAttribute('data-monster-icon-mode') === 'mask';
793
+ });
794
+ }).then(() => {
795
+ done();
796
+ }).catch(done);
797
+ });
798
+
799
+ it('should render vertical tab SVG icons as theme-aware masks by default', function (done) {
800
+ let mocks = document.getElementById('mocks');
801
+ mocks.innerHTML = htmlVerticalIconModes;
802
+
803
+ waitForCondition(() => {
804
+ const tabs = document.getElementById('vertical-icon-mode-tabs');
805
+ return tabs instanceof VerticalTabs && tabs.shadowRoot.querySelector('button[part=button] [part=icon]') !== null;
806
+ }).then(() => {
807
+ try {
808
+ const tabs = document.getElementById('vertical-icon-mode-tabs');
809
+ const icon = tabs.shadowRoot.querySelector(
810
+ 'button[part=button][data-monster-tab-reference="vertical-auto-svg-panel"] [part=icon]',
811
+ );
812
+ expect(icon.tagName).to.equal('SPAN');
813
+ expect(icon.getAttribute('data-monster-icon-mode')).to.equal('mask');
814
+ expect(icon.getAttribute('style')).to.contain('--monster-tab-icon-mask-image');
815
+ done();
816
+ } catch (e) {
817
+ done(e);
818
+ }
819
+ }).catch(done);
820
+ });
821
+
700
822
  it('should include stable names and metadata in tab events and buttons', function (done) {
701
823
  let mocks = document.getElementById('mocks');
702
824
  mocks.innerHTML = htmlMetadata;