@schukai/monster 3.63.3 → 3.64.0

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,15 @@
1
1
 
2
+ ## [3.64.0] - 2024-04-04
3
+
4
+ ### Add Features
5
+
6
+ - add new panel and rename switch-screen to switch-panel [#184](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/184)
7
+ ### Changes
8
+
9
+ - fix tests
10
+ - new command for create-issue, first step for theme generator
11
+ - test runners are now empowered to run selected files [#166](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/166)
12
+
2
13
  ## [3.63.3] - 2024-04-01
3
14
 
4
15
  ### Bug Fixes
@@ -6,6 +17,7 @@
6
17
  - include state-button [#183](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/183)
7
18
  ### Changes
8
19
 
20
+ - release and publish to npm new version 3.63.3
9
21
  - update devenv
10
22
  - update issue templates
11
23
  - update template and create showroom section
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schukai/monster",
3
- "version": "3.63.3",
3
+ "version": "3.64.0",
4
4
  "description": "Monster is a simple library for creating fast, robust and lightweight websites.",
5
5
  "keywords": [
6
6
  "framework",
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Copyright 2023 schukai GmbH
3
+ * SPDX-License-Identifier: AGPL-3.0
4
+ */
5
+
6
+ import {
7
+ assembleMethodSymbol,
8
+ CustomElement,
9
+ registerCustomElement,
10
+ } from "../../dom/customelement.mjs";
11
+ import {DeadMansSwitch} from "../../util/deadmansswitch.mjs";
12
+
13
+ import {PanelStyleSheet} from "./stylesheet/panel.mjs";
14
+ import {instanceSymbol} from "../../constants.mjs";
15
+
16
+ export {Panel};
17
+
18
+ /**
19
+ * @private
20
+ * @type {symbol}
21
+ */
22
+ const PanelElementSymbol = Symbol("PanelElement");
23
+
24
+ /**
25
+ * local symbol
26
+ * @private
27
+ * @type {symbol}
28
+ */
29
+ const resizeObserverSymbol = Symbol("resizeObserver");
30
+
31
+ /**
32
+ * @private
33
+ * @type {symbol}
34
+ */
35
+ const timerCallbackSymbol = Symbol("timerCallback");
36
+
37
+ /**
38
+ * The Panel component is used to display a panel, isn't that cool?
39
+ *
40
+ * <img src="./images/panel.png">
41
+ *
42
+ * You can create this control either by specifying the HTML tag <monster-panel />` directly in the HTML or using
43
+ * Javascript via the `document.createElement('monster-panel');` method.
44
+ *
45
+ * ```html
46
+ * <monster-panel></monster-panel>
47
+ * ```
48
+ *
49
+ * Or you can create this CustomControl directly in Javascript:
50
+ *
51
+ * ```js
52
+ * import '@schukai/monster/components/layout/panel.mjs';
53
+ * document.createElement('monster-panel');
54
+ * ```
55
+ *
56
+ * @startuml panel.png
57
+ * skinparam monochrome true
58
+ * skinparam shadowing false
59
+ * HTMLElement <|-- CustomElement
60
+ * CustomElement <|-- CustomControl
61
+ * CustomControl <|-- Panel
62
+ * @enduml
63
+ *
64
+ * @copyright schukai GmbH
65
+ * @memberOf Monster.Components.Layout
66
+ * @summary A simple panel component
67
+ */
68
+ class Panel extends CustomElement {
69
+
70
+ /**
71
+ * This method is called by the `instanceof` operator.
72
+ * @returns {symbol}
73
+ */
74
+ static get [instanceSymbol]() {
75
+ return Symbol.for("@schukai/monster/components/layout/panel");
76
+ }
77
+
78
+ /**
79
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
80
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
81
+ *
82
+ * The individual configuration values can be found in the table.
83
+ *
84
+ * @property {Object} templates Template definitions
85
+ * @property {string} templates.main Main template
86
+ * @property {string} heightAdjustment Height adjustment
87
+ */
88
+ get defaults() {
89
+ return Object.assign({}, super.defaults, {
90
+ templates: {
91
+ main: getTemplate(),
92
+ },
93
+ heightAdjustment: 4,
94
+ });
95
+ }
96
+
97
+ /**
98
+ *
99
+ * @returns {Monster.Components.Host.Viewer}
100
+ */
101
+ [assembleMethodSymbol]() {
102
+ super[assembleMethodSymbol]();
103
+
104
+ initControlReferences.call(this);
105
+ initEventHandler.call(this);
106
+
107
+ calcHeight.call(this);
108
+
109
+ }
110
+
111
+ /**
112
+ * This method is called by the dom and should not be called directly.
113
+ *
114
+ * @return {void}
115
+ */
116
+ connectedCallback() {
117
+ super.connectedCallback();
118
+ attachResizeObserver.call(this);
119
+ }
120
+
121
+ /**
122
+ * This method is called by the dom and should not be called directly.
123
+ *
124
+ * @return {void}
125
+ */
126
+ disconnectedCallback() {
127
+ super.disconnectedCallback();
128
+ disconnectResizeObserver.call(this);
129
+ }
130
+
131
+ /**
132
+ * @return {string}
133
+ */
134
+ static getTag() {
135
+ return "monster-panel";
136
+ }
137
+
138
+ /**
139
+ * @return {CSSStyleSheet[]}
140
+ */
141
+ static getCSSStyleSheet() {
142
+ return [PanelStyleSheet];
143
+ }
144
+ }
145
+
146
+ /**
147
+ * @private
148
+ */
149
+ function calcHeight() {
150
+
151
+ this.style.boxSizing = "border-box";
152
+
153
+ const height = calculateMaximumHeight.call(this, this);
154
+ if (height < 0) {
155
+ return;
156
+ }
157
+
158
+ this.style.height = `${height}px`;
159
+
160
+ }
161
+
162
+ function calculateMaximumHeight(element) {
163
+ let totalBottomBorder = 0;
164
+ let totalBottomPadding = 0;
165
+ let totalBottomMargin = 0;
166
+ let totalOutlineHeight = 0;
167
+ let totalBoxShadowHeight = 0;
168
+ let currentElement = element;
169
+
170
+ // Get the distance from the top of the element to the top of the viewport
171
+ const distanceFromTop = element.getBoundingClientRect().top;
172
+
173
+ // Loop through the elements up to the body to sum up the bottom borders, padding, and margin
174
+ while (currentElement && currentElement !== document.body) {
175
+ const style = window.getComputedStyle(currentElement);
176
+
177
+ // Box sizing
178
+ const boxSizing = style.boxSizing;
179
+
180
+ // Borders, padding, and margin
181
+ const borderBottomWidth = parseFloat(style.borderBottomWidth);
182
+ const paddingBottom = parseFloat(style.paddingBottom);
183
+ const marginBottom = parseFloat(style.marginBottom);
184
+
185
+ // Outline and box-shadow
186
+ const outlineHeight = parseFloat(style.outlineWidth);
187
+ // This is a simplification; box-shadow is more complex to parse
188
+ const boxShadowVertical = parseFloat(style.boxShadow.split(' ')[3] || 0);
189
+
190
+ // Accumulate values
191
+ totalBottomBorder += isNaN(borderBottomWidth) ? 0 : borderBottomWidth;
192
+ totalBottomPadding += (isNaN(paddingBottom) || boxSizing === 'border-box') ? 0 : paddingBottom;
193
+ totalBottomMargin += isNaN(marginBottom) ? 0 : marginBottom;
194
+ totalOutlineHeight += isNaN(outlineHeight) ? 0 : outlineHeight;
195
+ totalBoxShadowHeight += isNaN(boxShadowVertical) ? 0 : boxShadowVertical;
196
+
197
+ currentElement = currentElement.parentNode || currentElement.host;
198
+ }
199
+
200
+ // Calculate the maximum height by subtracting the distance, borders, padding, margin, outline, and box-shadow from the window's inner height
201
+ const maximumHeight = window.innerHeight - distanceFromTop - totalBottomBorder - totalBottomPadding - totalBottomMargin - totalOutlineHeight - totalBoxShadowHeight;
202
+ return maximumHeight + this.getOption("heightAdjustment");
203
+ }
204
+
205
+
206
+ /**
207
+ * @private
208
+ */
209
+ function attachResizeObserver() {
210
+ // against flickering
211
+ this[resizeObserverSymbol] = new ResizeObserver(() => {
212
+ if (this[timerCallbackSymbol] instanceof DeadMansSwitch) {
213
+ try {
214
+ this[timerCallbackSymbol].touch();
215
+ return;
216
+ } catch (e) {
217
+ delete this[timerCallbackSymbol];
218
+ }
219
+ }
220
+
221
+ this[timerCallbackSymbol] = new DeadMansSwitch(200, () => {
222
+ calcHeight.call(this);
223
+ });
224
+ });
225
+
226
+ this[resizeObserverSymbol].observe(this.ownerDocument.body);
227
+ this[resizeObserverSymbol].observe(document.scrollingElement);
228
+
229
+ }
230
+
231
+ function disconnectResizeObserver() {
232
+ if (this[resizeObserverSymbol] instanceof ResizeObserver) {
233
+ this[resizeObserverSymbol].disconnect();
234
+ }
235
+ }
236
+
237
+ /**
238
+ * @private
239
+ * @return {Select}
240
+ * @throws {Error} no shadow-root is defined
241
+ */
242
+ function initControlReferences() {
243
+ if (!this.shadowRoot) {
244
+ throw new Error("no shadow-root is defined");
245
+ }
246
+
247
+ this[PanelElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=control]");
248
+
249
+
250
+ }
251
+
252
+ /**
253
+ * @private
254
+ */
255
+ function initEventHandler() {
256
+ return this;
257
+ }
258
+
259
+ /**
260
+ * @private
261
+ * @return {string}
262
+ */
263
+ function getTemplate() {
264
+ // language=HTML
265
+ return `
266
+ <div data-monster-role="control" part="control">
267
+ <slot></slot>
268
+ </div>`;
269
+ }
270
+
271
+ registerCustomElement(Panel);
@@ -11,11 +11,11 @@ import {
11
11
  import "../notify/notify.mjs";
12
12
  import {fireCustomEvent} from "../../dom/events.mjs";
13
13
  import {Observer} from "../../types/observer.mjs";
14
- import {SplitScreenStyleSheet} from "./stylesheet/split-screen.mjs";
14
+ import {SplitPanelStyleSheet} from "./stylesheet/split-panel.mjs";
15
15
  import {instanceSymbol} from "../../constants.mjs";
16
16
  import {internalSymbol} from "../../constants.mjs";
17
17
 
18
- export {SplitScreen, TYPE_VERTICAL, TYPE_HORIZONTAL};
18
+ export {SplitPanel, TYPE_VERTICAL, TYPE_HORIZONTAL};
19
19
 
20
20
  /**
21
21
  * @private
@@ -57,32 +57,43 @@ const TYPE_HORIZONTAL = "horizontal";
57
57
 
58
58
 
59
59
  /**
60
- * The SplitScreen control is a simple layout control that allows you to split the screen into two parts. The split can be
61
- * either vertical or horizontal. The control provides a draggable handle that allows you to adjust the size of the two
62
- * panels.
60
+ * The SplitPanel control is a simple layout control that allows you to split the screen
61
+ * into two parts. The split can be either vertical or horizontal. The control provides a
62
+ * draggable handle that allows you to adjust the size of the two panels.
63
63
  *
64
- * <img src="./images/splitscreen.png">
64
+ * <img src="./images/split-panel.png">
65
65
  *
66
- * You can create this control either by specifying the HTML tag <monster-splitscreen />` directly in the HTML or using
67
- * Javascript via the `document.createElement('monster-split-screen');` method.
66
+ * You can create this control either by specifying the HTML tag <monster-split-panel />`
67
+ * directly in the HTML or using Javascript via the `document.createElement('monster-split-panel');`
68
+ * method.
68
69
  *
69
70
  * ```html
70
- * <monster-split-screen></monster-split-screen>
71
+ * <monster-split-panel></monster-split-panel>
71
72
  * ```
72
73
  *
73
74
  * Or you can create this CustomControl directly in Javascript:
74
75
  *
75
76
  * ```js
76
- * import '@schukai/monster/components/layout/split-screen.mjs';
77
- * document.createElement('monster-split-screen');
77
+ * import '@schukai/monster/components/layout/split-panel.mjs';
78
+ * document.createElement('monster-split-panel');
79
+ * ```
80
+ *
81
+ * It is best to hide unregistered elements with the css property `visibility: hidden;`
82
+ *
83
+ * ```css
84
+ * <style>
85
+ * *:not(:defined) {
86
+ * visibility: hidden;
87
+ * }
88
+ * </style>
78
89
  * ```
79
90
  *
80
- * @startuml splitscreen.png
91
+ * @startuml split-panel.png
81
92
  * skinparam monochrome true
82
93
  * skinparam shadowing false
83
94
  * HTMLElement <|-- CustomElement
84
95
  * CustomElement <|-- CustomControl
85
- * CustomControl <|-- SplitScreen
96
+ * CustomControl <|-- SplitPanel
86
97
  * @enduml
87
98
  *
88
99
  * @copyright schukai GmbH
@@ -90,14 +101,14 @@ const TYPE_HORIZONTAL = "horizontal";
90
101
  * @summary A simple split screen layout
91
102
  * @fires Monster.Components.Layout.event:monster-dimension-changed
92
103
  */
93
- class SplitScreen extends CustomElement {
104
+ class SplitPanel extends CustomElement {
94
105
 
95
106
  /**
96
107
  * This method is called by the `instanceof` operator.
97
108
  * @returns {symbol}
98
109
  */
99
110
  static get [instanceSymbol]() {
100
- return Symbol.for("@schukai/monster/components/layout/splitscreen");
111
+ return Symbol.for("@schukai/monster/components/layout/split-panel");
101
112
  }
102
113
 
103
114
  /**
@@ -127,23 +138,22 @@ class SplitScreen extends CustomElement {
127
138
  },
128
139
  });
129
140
  }
130
-
141
+
131
142
  fullStartScreen() {
132
143
  this.setDimension("100%");
133
144
  return this;
134
145
  }
135
-
146
+
136
147
  fullEndScreen() {
137
148
  this.setDimension("0%");
138
149
  return this;
139
150
  }
140
-
151
+
141
152
  resetScreen() {
142
153
  this.setDimension(this.getOption("dimension").initial);
143
154
  return this;
144
155
  }
145
-
146
-
156
+
147
157
 
148
158
  setContent(html) {
149
159
  this.setOption("content", html);
@@ -189,14 +199,14 @@ class SplitScreen extends CustomElement {
189
199
  * @return {string}
190
200
  */
191
201
  static getTag() {
192
- return "monster-split-screen";
202
+ return "monster-split-panel";
193
203
  }
194
204
 
195
205
  /**
196
206
  * @return {CSSStyleSheet[]}
197
207
  */
198
208
  static getCSSStyleSheet() {
199
- return [SplitScreenStyleSheet];
209
+ return [SplitPanelStyleSheet];
200
210
  }
201
211
  }
202
212
 
@@ -230,7 +240,7 @@ function applyPanelDimensions() {
230
240
  controller: this,
231
241
  dimension: dimension
232
242
  });
233
-
243
+
234
244
  }
235
245
 
236
246
 
@@ -244,7 +254,7 @@ function initControlReferences() {
244
254
  throw new Error("no shadow-root is defined");
245
255
  }
246
256
 
247
- this[splitScreenElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=split-screen]");
257
+ this[splitScreenElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=split-panel]");
248
258
  this[draggerElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=dragger]");
249
259
  this[handleElementSymbol] = this.shadowRoot.querySelector("[data-monster-role=handle]");
250
260
 
@@ -264,31 +274,38 @@ function initEventHandler() {
264
274
 
265
275
  this[internalSymbol].getSubject().isDragging = false;
266
276
 
267
- this[draggerElementSymbol].addEventListener('dblclick', () => {
268
- self[internalSymbol].getSubject().isDragging = false;
269
- lastDimension = undefined;
270
-
271
- let currentDimension;
272
- if (self.getOption("splitType") === TYPE_VERTICAL) {
273
- const topPanel = self[startPanelElementSymbol];
274
- currentDimension = topPanel.style.width;
275
- } else {
276
- const topPanel = self[startPanelElementSymbol];
277
- currentDimension = topPanel.style.height;
278
- }
277
+ // @todo: add better touch support
278
+ const eventTypes = ["dblclick", "touchstart"];
279
+ for (const eventType of eventTypes) {
279
280
 
280
- if (currentDimension === self.getOption("dimension").initial) {
281
- self.setDimension(self.getOption("dimension").max);
282
- } else if (currentDimension === self.getOption("dimension").max) {
283
- self.setDimension(self.getOption("dimension").min);
284
- } else if (currentDimension === self.getOption("dimension").min) {
285
- self.setDimension(self.getOption("dimension").initial);
286
- } else {
287
- self.setDimension(self.getOption("dimension").initial);
288
- }
289
- });
290
281
 
291
- this[draggerElementSymbol].addEventListener('mousedown', () => {
282
+ this[draggerElementSymbol].addEventListener(eventType, () => {
283
+ self[internalSymbol].getSubject().isDragging = false;
284
+ lastDimension = undefined;
285
+
286
+ let currentDimension;
287
+ if (self.getOption("splitType") === TYPE_VERTICAL) {
288
+ const topPanel = self[startPanelElementSymbol];
289
+ currentDimension = topPanel.style.width;
290
+ } else {
291
+ const topPanel = self[startPanelElementSymbol];
292
+ currentDimension = topPanel.style.height;
293
+ }
294
+
295
+ if (currentDimension === self.getOption("dimension").initial) {
296
+ self.setDimension(self.getOption("dimension").max);
297
+ } else if (currentDimension === self.getOption("dimension").max) {
298
+ self.setDimension(self.getOption("dimension").min);
299
+ } else if (currentDimension === self.getOption("dimension").min) {
300
+ self.setDimension(self.getOption("dimension").initial);
301
+ } else {
302
+ self.setDimension(self.getOption("dimension").initial);
303
+ }
304
+ });
305
+
306
+ }
307
+
308
+ this[draggerElementSymbol].addEventListener("mousedown", () => {
292
309
  self[internalSymbol].getSubject().isDragging = true;
293
310
 
294
311
  const eventListener = (e) => {
@@ -311,25 +328,24 @@ function initEventHandler() {
311
328
  const bottomPanel = self[endPanelElementSymbol];
312
329
  let newTopHeight = e.clientY - containerOffsetTop;
313
330
 
314
- const min = this.getOption("dimension").min;
315
- const max = this.getOption("dimension").max;
331
+ const min = this.getOption("dimension").min;
332
+ const max = this.getOption("dimension").max;
316
333
 
317
334
  const topAsPercent = (newTopHeight / this[splitScreenElementSymbol].offsetHeight) * 100;
318
- if (parseInt(min) > topAsPercent) {
319
- newTopHeight = min;
320
- } else if (parseInt(max) < topAsPercent) {
321
- newTopHeight = max;
322
- } else {
323
- newTopHeight = topAsPercent + "%";
324
- }
325
-
326
- // calc new top height to pixel
335
+ if (parseInt(min) > topAsPercent) {
336
+ newTopHeight = min;
337
+ } else if (parseInt(max) < topAsPercent) {
338
+ newTopHeight = max;
339
+ } else {
340
+ newTopHeight = topAsPercent + "%";
341
+ }
342
+
343
+ // calc new top height to pixel
327
344
  const newTopHeightPx = (parseInt(newTopHeight) / 100) * this[splitScreenElementSymbol].offsetHeight;
328
345
 
329
346
  topPanel.style.height = `${newTopHeightPx}px`;
330
347
  bottomPanel.style.height = `calc(100% - ${newTopHeightPx}px - ${draggerWidth})`; // 5px is dragger height
331
348
 
332
-
333
349
  } else {
334
350
 
335
351
  const containerOffsetLeft = self[splitScreenElementSymbol].offsetLeft;
@@ -367,7 +383,6 @@ function initEventHandler() {
367
383
 
368
384
  });
369
385
 
370
-
371
386
  this[internalSymbol].attachObserver(
372
387
  new Observer(() => {
373
388
 
@@ -401,7 +416,7 @@ function initEventHandler() {
401
416
  function getTemplate() {
402
417
  // language=HTML
403
418
  return `
404
- <div data-monster-role="split-screen" part="control">
419
+ <div data-monster-role="split-panel" part="control">
405
420
  <div data-monster-role="startPanel" class="panel" part="startPanel">
406
421
  <slot name="start"></slot>
407
422
  </div>
@@ -411,9 +426,7 @@ function getTemplate() {
411
426
  <div data-monster-role="endPanel" class="panel" part="endPanel">
412
427
  <slot name="end"></slot>
413
428
  </div>
414
-
415
-
416
429
  </div>`;
417
430
  }
418
431
 
419
- registerCustomElement(SplitScreen);
432
+ registerCustomElement(SplitPanel);
@@ -0,0 +1,38 @@
1
+ @import "../../style/property.pcss";
2
+ @import "../../style/display.pcss";
3
+ @import "../../style/border.pcss";
4
+ @import "../../style/theme.pcss";
5
+ @import "../../style/popper.pcss";
6
+ @import "../../style/control.pcss";
7
+ @import "../../style/badge.pcss";
8
+ @import '../../style/mixin/button.pcss';
9
+ @import '../../style/mixin/typography.pcss';
10
+ @import '../../style/mixin/hover.pcss';
11
+
12
+ :host {
13
+ display: block;
14
+ width: 100%;
15
+ box-sizing: border-box;
16
+ overflow: auto;
17
+
18
+ }
19
+
20
+ [data-monster-role="control"] {
21
+ margin: 0;
22
+ padding: 0;
23
+ border: 0;
24
+ box-sizing: border-box;
25
+ outline: none;
26
+ overflow: auto;
27
+ scrollbar-width: thin;
28
+ scrollbar-color: var(--monster-color-primary-1) var(--monster-bg-color-primary-1);
29
+
30
+
31
+ //position: fixed;
32
+ //top: 0;
33
+ //left: 0;
34
+ //right: 0;
35
+ //bottom: 0;
36
+ //overflow: auto;
37
+ //box-sizing: border-box;
38
+ }
@@ -1,6 +1,6 @@
1
1
 
2
2
 
3
- [data-monster-role="split-screen"] {
3
+ [data-monster-role="split-panel"] {
4
4
 
5
5
  box-sizing: border-box;
6
6
  display: flex;
@@ -0,0 +1,27 @@
1
+
2
+ /**
3
+ * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
4
+ * Node module: @schukai/monster
5
+ * This file is licensed under the AGPLv3 License.
6
+ * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
7
+ */
8
+
9
+ import {addAttributeToken} from "../../../dom/attributes.mjs";
10
+ import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
11
+
12
+ export {PanelStyleSheet}
13
+
14
+ /**
15
+ * @private
16
+ * @type {CSSStyleSheet}
17
+ */
18
+ const PanelStyleSheet = new CSSStyleSheet();
19
+
20
+ try {
21
+ PanelStyleSheet.insertRule(`
22
+ @layer panel {
23
+ :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-color-primary-1:var(--monster-color-cinnamon-6);--monster-color-primary-2:var(--monster-color-cinnamon-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-cinnamon-1);--monster-bg-color-primary-2:var(--monster-color-cinnamon-2);--monster-bg-color-primary-3:var(--monster-color-cinnamon-3);--monster-bg-color-primary-4:var(--monster-color-cinnamon-6);--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);--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);--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);--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);--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);--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);--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);--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;--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-gradient-tangerine-1);--monster-theme-control-color:var(--monster-gradient-tangerine-6);--monster-theme-control-border-color:var(--monster-gradient-tangerine-2);--monster-theme-control-hover-color:var(--monster-gradient-tangerine-6);--monster-theme-control-hover-bg-color:var(--monster-gradient-tangerine-2);--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);--monster-border-style:solid;--monster-border-width:2px;--monster-border-radius:0;--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:1px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}@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);--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);--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);--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);--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);--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);--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);--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);--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-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);--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)}}.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-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.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-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.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-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.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-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-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-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-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-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-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-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-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{background-color:var(--monster-theme-on-bg-color);color:var(--monster-theme-on-color)}.monster-theme-off{background-color:var(--monster-theme-off-bg-color);color:var(--monster-theme-off-color)}div[data-monster-role=popper]{background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;padding:1.1em;z-index:var(--monster-z-index-modal)}[data-popper-arrow],[data-popper-arrow]:before{background:inherit;height:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2)}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{box-sizing:border-box;content:\"\";transform:rotate(45deg);visibility:visible}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-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:transparent;border-right: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-bottom:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}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-bottom:transparent;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)}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-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:transparent}[data-monster-role=control]{width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}:host{box-sizing:border-box;display:block;overflow:auto;width:100%}[data-monster-role=control]{border:0;box-sizing:border-box;margin:0;outline:none;overflow:auto;padding:0;scrollbar-color:var(--monster-color-primary-1) var(--monster-bg-color-primary-1);scrollbar-width:thin;//position:fixed;//top:0;//left:0;//right:0;//bottom:0;//overflow:auto;//box-sizing:border-box}
24
+ }`, 0);
25
+ } catch (e) {
26
+ addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
27
+ }
@@ -0,0 +1,27 @@
1
+
2
+ /**
3
+ * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
4
+ * Node module: @schukai/monster
5
+ * This file is licensed under the AGPLv3 License.
6
+ * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
7
+ */
8
+
9
+ import {addAttributeToken} from "../../../dom/attributes.mjs";
10
+ import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
11
+
12
+ export {SplitPanelStyleSheet}
13
+
14
+ /**
15
+ * @private
16
+ * @type {CSSStyleSheet}
17
+ */
18
+ const SplitPanelStyleSheet = new CSSStyleSheet();
19
+
20
+ try {
21
+ SplitPanelStyleSheet.insertRule(`
22
+ @layer splitpanel {
23
+ [data-monster-role=split-panel]{box-sizing:border-box;display:flex;flex-direction:row;height:auto;margin:0;padding:0;width:100%}[data-monster-role=split-panel] .panel{flex-grow:1;overflow:auto}[data-monster-role=split-panel] [data-monster-role=dragger]{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4);height:auto;position:relative;width:var(--monster-dragger-width)}[data-monster-role=split-panel] [data-monster-role=dragger] [data-monster-role=handle]{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3);cursor:pointer;height:var(--monster-dragger-handle-height);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--monster-dragger-handle-width);z-index:var(--monster-z-index-outline)}.horizontal[data-monster-role=split-panel]{flex-direction:column}.horizontal[data-monster-role=split-panel] [data-monster-role=dragger]{height:var(--monster-dragger-width);width:100%}.horizontal[data-monster-role=split-panel] [data-monster-role=dragger] [data-monster-role=handle]{height:var(--monster-dragger-handle-width);width:var(--monster-dragger-handle-height)}
24
+ }`, 0);
25
+ } catch (e) {
26
+ addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
27
+ }
@@ -17,7 +17,7 @@
17
17
  */
18
18
 
19
19
  export * from "./components/layout/tabs.mjs";
20
- export * from "./components/layout/split-screen.mjs";
20
+ export * from "./components/layout/split-panel.mjs";
21
21
  export * from "./components/layout/stylesheet/tabs.mjs";
22
22
  export * from "./components/layout/stylesheet/split-screen.mjs";
23
23
  export * from "./components/form/message-state-button.mjs";
@@ -152,7 +152,7 @@ function getMonsterVersion() {
152
152
  }
153
153
 
154
154
  /** don't touch, replaced by make with package.json version */
155
- monsterVersion = new Version("3.63.3");
155
+ monsterVersion = new Version("3.64.0");
156
156
 
157
157
  return monsterVersion;
158
158
  }
@@ -11,9 +11,9 @@ const global = getGlobal();
11
11
 
12
12
  // language=html
13
13
  let html1 = `
14
- <monster-split-screen id="my-split-screen">
14
+ <monster-panel id="my-panel">
15
15
 
16
- </monster-split-screen>
16
+ </monster-panel>
17
17
  `;
18
18
 
19
19
  let SplitScreen;
@@ -34,8 +34,8 @@ describe('SplitScreen', function () {
34
34
  }));
35
35
  }
36
36
 
37
- promises.push(import("../../../../source/components/layout/split-screen.mjs").then((m) => {
38
- SplitScreen = m['SplitScreen'];
37
+ promises.push(import("../../../../source/components/layout/panel.mjs").then((m) => {
38
+ SplitScreen = m['Panel'];
39
39
  }))
40
40
 
41
41
  Promise.all(promises).then(()=>{
@@ -59,7 +59,7 @@ describe('SplitScreen', function () {
59
59
 
60
60
  setTimeout(() => {
61
61
  try {
62
- const SplitScreen = document.getElementById('my-split-screen')
62
+ const SplitScreen = document.getElementById('my-panel')
63
63
  expect(SplitScreen).is.instanceof(HTMLElement);
64
64
 
65
65
  setTimeout(() => {
@@ -0,0 +1,83 @@
1
+ import {getGlobal} from "../../../../source/types/global.mjs";
2
+ import chai from "chai"
3
+ import {chaiDom} from "../../../util/chai-dom.mjs";
4
+ import {initJSDOM} from "../../../util/jsdom.mjs";
5
+
6
+ let expect = chai.expect;
7
+ chai.use(chaiDom);
8
+
9
+ const global = getGlobal();
10
+
11
+
12
+ // language=html
13
+ let html1 = `
14
+ <monster-split-panel id="my-split-panel">
15
+
16
+ </monster-split-panel>
17
+ `;
18
+
19
+ let SplitScreen;
20
+
21
+ describe('SplitScreen', function () {
22
+
23
+ before(function (done) {
24
+ initJSDOM().then(() => {
25
+
26
+ import("element-internals-polyfill").catch(e => done(e));
27
+
28
+ let promises = []
29
+
30
+ if (!global['crypto']) {
31
+ promises.push(import("@peculiar/webcrypto").then((m) => {
32
+ const Crypto = m['Crypto'];
33
+ global['crypto'] = new Crypto();
34
+ }));
35
+ }
36
+
37
+ promises.push(import("../../../../source/components/layout/split-panel.mjs").then((m) => {
38
+ SplitScreen = m['SplitPanel'];
39
+ }))
40
+
41
+ Promise.all(promises).then(()=>{
42
+ done();
43
+ }).catch(e => done(e))
44
+
45
+ });
46
+ })
47
+
48
+ describe('document.createElement()', function () {
49
+
50
+ afterEach(() => {
51
+ let mocks = document.getElementById('mocks');
52
+ mocks.innerHTML = "";
53
+ })
54
+
55
+ it('should have buttons and SplitScreen', function (done) {
56
+
57
+ let mocks = document.getElementById('mocks');
58
+ mocks.innerHTML = html1;
59
+
60
+ setTimeout(() => {
61
+ try {
62
+ const SplitScreen = document.getElementById('my-split-panel')
63
+ expect(SplitScreen).is.instanceof(HTMLElement);
64
+
65
+ setTimeout(() => {
66
+ let div = SplitScreen.shadowRoot.querySelector('div');
67
+ expect(div.hasChildNodes()).to.be.true;
68
+ done();
69
+ }, 100)
70
+
71
+ } catch (e) {
72
+ return done(e);
73
+ }
74
+
75
+ }, 0)
76
+
77
+
78
+ });
79
+
80
+ });
81
+
82
+
83
+ });
@@ -7,7 +7,7 @@ describe('Monster', function () {
7
7
  let monsterVersion
8
8
 
9
9
  /** don´t touch, replaced by make with package.json version */
10
- monsterVersion = new Version("3.63.3")
10
+ monsterVersion = new Version("3.64.0")
11
11
 
12
12
  let m = getMonsterVersion();
13
13
 
package/test/web/tests.js CHANGED
@@ -35855,7 +35855,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
35855
35855
  }));
35856
35856
  }
35857
35857
  promises.push(Promise.resolve().then(() => (init_split_screen2(), split_screen_exports)).then((m) => {
35858
- SplitScreen2 = m["SplitScreen"];
35858
+ SplitScreen2 = m["SplitPanel"];
35859
35859
  }));
35860
35860
  Promise.all(promises).then(() => {
35861
35861
  done();
@@ -1,27 +0,0 @@
1
-
2
- /**
3
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
4
- * Node module: @schukai/monster
5
- * This file is licensed under the AGPLv3 License.
6
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
7
- */
8
-
9
- import {addAttributeToken} from "../../../dom/attributes.mjs";
10
- import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
11
-
12
- export {SplitScreenStyleSheet}
13
-
14
- /**
15
- * @private
16
- * @type {CSSStyleSheet}
17
- */
18
- const SplitScreenStyleSheet = new CSSStyleSheet();
19
-
20
- try {
21
- SplitScreenStyleSheet.insertRule(`
22
- @layer splitscreen {
23
- [data-monster-role=split-screen]{box-sizing:border-box;display:flex;flex-direction:row;height:auto;margin:0;padding:0;width:100%}[data-monster-role=split-screen] .panel{flex-grow:1;overflow:auto}[data-monster-role=split-screen] [data-monster-role=dragger]{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4);height:auto;position:relative;width:var(--monster-dragger-width)}[data-monster-role=split-screen] [data-monster-role=dragger] [data-monster-role=handle]{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3);cursor:pointer;height:var(--monster-dragger-handle-height);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--monster-dragger-handle-width);z-index:var(--monster-z-index-outline)}.horizontal[data-monster-role=split-screen]{flex-direction:column}.horizontal[data-monster-role=split-screen] [data-monster-role=dragger]{height:var(--monster-dragger-width);width:100%}.horizontal[data-monster-role=split-screen] [data-monster-role=dragger] [data-monster-role=handle]{height:var(--monster-dragger-handle-width);width:var(--monster-dragger-handle-height)}
24
- }`, 0);
25
- } catch (e) {
26
- addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
27
- }