@schukai/monster 3.100.5 → 3.100.7

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.
Files changed (30) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/package.json +1 -1
  3. package/source/components/datatable/dataset.mjs +10 -5
  4. package/source/components/datatable/datasource.mjs +0 -1
  5. package/source/components/datatable/datatable.mjs +2 -0
  6. package/source/components/datatable/filter.mjs +4 -5
  7. package/source/components/datatable/style/datatable.pcss +1 -1
  8. package/source/components/datatable/util.mjs +2 -2
  9. package/source/components/form/api-bar.mjs +1 -1
  10. package/source/components/form/api-button.mjs +1 -1
  11. package/source/components/form/button.mjs +21 -1
  12. package/source/components/form/confirm-button.mjs +0 -45
  13. package/source/components/form/context-help.mjs +1 -1
  14. package/source/components/form/form.mjs +165 -164
  15. package/source/components/form/message-state-button.mjs +21 -7
  16. package/source/components/form/popper-button.mjs +25 -57
  17. package/source/components/form/select.mjs +2142 -2164
  18. package/source/components/form/state-button.mjs +24 -14
  19. package/source/components/form/style/button.pcss +2 -0
  20. package/source/components/form/style/message-state-button.pcss +1 -2
  21. package/source/components/form/style/state-button.pcss +1 -0
  22. package/source/components/form/stylesheet/button.mjs +1 -1
  23. package/source/components/form/stylesheet/field-set.mjs +14 -7
  24. package/source/components/form/stylesheet/message-state-button.mjs +7 -14
  25. package/source/components/form/stylesheet/state-button.mjs +7 -14
  26. package/source/components/layout/collapse.mjs +1 -1
  27. package/source/components/layout/details.mjs +1 -1
  28. package/source/components/style/accessibility.css +27 -0
  29. package/source/components/style/accessibility.pcss +31 -0
  30. package/source/components/stylesheet/accessibility.mjs +38 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
 
4
4
 
5
+ ## [3.100.7] - 2025-01-19
6
+
7
+ ### Bug Fixes
8
+
9
+ - **datatable:** pagination layout
10
+
11
+
12
+
13
+ ## [3.100.6] - 2025-01-18
14
+
15
+ ### Bug Fixes
16
+
17
+ - accessibility for buttons [#282](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/282)
18
+
19
+
20
+
5
21
  ## [3.100.5] - 2025-01-16
6
22
 
7
23
  ### Bug Fixes
package/package.json CHANGED
@@ -1 +1 @@
1
- {"author":"schukai GmbH","dependencies":{"@floating-ui/dom":"^1.6.13","@popperjs/core":"^2.11.8"},"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":"3.100.5"}
1
+ {"author":"schukai GmbH","dependencies":{"@floating-ui/dom":"^1.6.13","@popperjs/core":"^2.11.8"},"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":"3.100.7"}
@@ -38,7 +38,7 @@ import {
38
38
  datasourceLinkedElementSymbol,
39
39
  } from "./util.mjs";
40
40
  import { FormStyleSheet } from "../stylesheet/form.mjs";
41
- import {addErrorAttribute} from "../../dom/error.mjs";
41
+ import { addErrorAttribute } from "../../dom/error.mjs";
42
42
 
43
43
  export { DataSet };
44
44
 
@@ -237,14 +237,16 @@ class DataSet extends CustomElement {
237
237
  super[assembleMethodSymbol]();
238
238
 
239
239
  requestAnimationFrame(() => {
240
-
241
240
  if (!this[datasourceLinkedElementSymbol]) {
242
241
  const selector = this.getOption("datasource.selector");
243
242
 
244
243
  if (isString(selector)) {
245
244
  const element = findElementWithSelectorUpwards(this, selector);
246
245
  if (element === null) {
247
- addErrorAttribute(this, "the selector must match exactly one element");
246
+ addErrorAttribute(
247
+ this,
248
+ "the selector must match exactly one element",
249
+ );
248
250
  return;
249
251
  }
250
252
 
@@ -260,8 +262,11 @@ class DataSet extends CustomElement {
260
262
 
261
263
  handleDataSourceChanges.call(this);
262
264
  } else {
263
- addErrorAttribute(this, "the datasource selector is missing or invalid");
264
- return
265
+ addErrorAttribute(
266
+ this,
267
+ "the datasource selector is missing or invalid",
268
+ );
269
+ return;
265
270
  }
266
271
  }
267
272
 
@@ -116,4 +116,3 @@ class Datasource extends CustomElement {
116
116
  this[dataSourceSymbol].read();
117
117
  }
118
118
  }
119
-
@@ -139,6 +139,8 @@ const resizeObserverSymbol = Symbol("resizeObserver");
139
139
  * @example /examples/components/datatable/order-by Sort data
140
140
  * @example /examples/components/datatable/select-rows Select rows
141
141
  *
142
+ * @issue https://localhost.alvine.dev:8443/development/issues/closed/277.html
143
+ *
142
144
  * @copyright schukai GmbH
143
145
  * @summary A beautiful and highly customizable data table. It can be used to display data from a data source.
144
146
  * @fires monster-datatable-row-copied
@@ -348,14 +348,13 @@ class Filter extends CustomElement {
348
348
  initFilter.call(self);
349
349
  updateFilterTabs.call(self);
350
350
 
351
- if (self.getOption("features.autoFilter")===true) {
351
+ if (self.getOption("features.autoFilter") === true) {
352
352
  doSearch
353
- .call(self, {showEffect: false})
353
+ .call(self, { showEffect: false })
354
354
  .then(() => {
355
355
  fireCustomEvent(self, "monster-filter-initialized");
356
356
  })
357
- .catch(() => {
358
- });
357
+ .catch(() => {});
359
358
  }
360
359
  });
361
360
  }
@@ -384,7 +383,7 @@ class Filter extends CustomElement {
384
383
  }
385
384
 
386
385
  /**
387
- * @return {Array<CSSStyleSheet>}
386
+ * @return {CSSStyleSheet[]}
388
387
  */
389
388
  static getCSSStyleSheet() {
390
389
  return [FilterStyleSheet, FormStyleSheet, ThemeStyleSheet, SpaceStyleSheet];
@@ -66,7 +66,7 @@
66
66
  ::slotted(.monster-button-group) {
67
67
  display: flex;
68
68
  flex-direction: row !important;
69
- align-items: center;
69
+ align-items: flex-end;
70
70
  }
71
71
 
72
72
  [data-monster-role=datatable] {
@@ -14,7 +14,7 @@
14
14
 
15
15
  import { diff } from "../../data/diff.mjs";
16
16
  import { Pathfinder } from "../../data/pathfinder.mjs";
17
- import {isObject, isPrimitive} from "../../types/is.mjs";
17
+ import { isObject, isPrimitive } from "../../types/is.mjs";
18
18
  import { Observer } from "../../types/observer.mjs";
19
19
 
20
20
  export { handleDataSourceChanges, datasourceLinkedElementSymbol };
@@ -35,7 +35,7 @@ function handleDataSourceChanges() {
35
35
 
36
36
  let data = this[datasourceLinkedElementSymbol]?.data;
37
37
 
38
- if(isPrimitive(data)) {
38
+ if (isPrimitive(data)) {
39
39
  throw new Error("Data must be an object or an array");
40
40
  }
41
41
 
@@ -296,7 +296,7 @@ class ApiBar extends ButtonBar {
296
296
  }
297
297
 
298
298
  /**
299
- * @return {Array<CSSStyleSheet>}
299
+ * @return {CSSStyleSheet[]}
300
300
  */
301
301
  static getCSSStyleSheet() {
302
302
  const styles = super.getCSSStyleSheet();
@@ -274,7 +274,7 @@ class ApiButton extends ActionButton {
274
274
  }
275
275
 
276
276
  /**
277
- * @return {Array<CSSStyleSheet>}
277
+ * @return {CSSStyleSheet[]}
278
278
  */
279
279
  static getCSSStyleSheet() {
280
280
  const styles = super.getCSSStyleSheet();
@@ -48,6 +48,8 @@ export const buttonElementSymbol = Symbol("buttonElement");
48
48
  * @example /examples/components/form/button-simple Simple Button
49
49
  * @example /examples/components/form/button-with-click-event Button with event
50
50
  *
51
+ * @issue https://localhost.alvine.dev:8443/development/issues/closed/282.html
52
+ *
51
53
  * @copyright schukai GmbH
52
54
  * @summary A beautiful button that can make your life easier and also looks good.
53
55
  * @fires monster-button-clicked this event is triggered when the button is clicked. It contains the field {button} with the button instance.
@@ -196,6 +198,9 @@ class Button extends CustomControl {
196
198
  * @property {Object} effects Effects
197
199
  * @property {boolean} effects.ripple=true Ripple effect
198
200
  * @property {string} type="button" The default behavior of the button. Possible values are: submit, reset, button
201
+ * @property {Object} aria Aria attributes
202
+ * @property {string} aria.role The role of the button, should only be set if the button is not a button
203
+ * @property {string} aria.label="click me!" The label of the button
199
204
  */
200
205
  get defaults() {
201
206
  return Object.assign({}, super.defaults, {
@@ -217,6 +222,11 @@ class Button extends CustomControl {
217
222
  },
218
223
  value: null,
219
224
  type: "button",
225
+
226
+ aria: {
227
+ role: null,
228
+ label: null,
229
+ },
220
230
  });
221
231
  }
222
232
 
@@ -300,14 +310,24 @@ function getTemplate() {
300
310
  // language=HTML
301
311
  return `
302
312
  <div data-monster-role="control" part="control">
303
- <button data-monster-attributes="disabled path:disabled | if:true, class path:classes.button
313
+ <button data-monster-attributes="disabled path:disabled | if:true,
314
+ class path:classes.button,
315
+ aria-role path:aria.role,
316
+ path:aria.label | if:true,
304
317
  type path:type"
305
318
  data-monster-role="button"
306
319
  part="button"
320
+ aria-labelledby="monster-button-aria-label"
307
321
  data-monster-replace="path:labels.button"></button>
322
+ <div id="monster-button-aria-label"
323
+ class="visually-hidden" data-monster-replace="path:aria.label">click me</div>
308
324
  </div>`;
309
325
  }
310
326
 
327
+ /**
328
+ * @private
329
+ * @param event
330
+ */
311
331
  function createRipple(event) {
312
332
  const button = this[buttonElementSymbol];
313
333
 
@@ -43,51 +43,6 @@ const confirmButtonElementSymbol = Symbol("confirmButtonElement");
43
43
  */
44
44
  const cancelButtonElementSymbol = Symbol("cancelButtonElement");
45
45
 
46
- /**
47
- * This action callback executes the actions when a button is clicked.
48
- *
49
- * @callback Monster.Components.Form~exampleActionCallback
50
- * @param {Event} e Event
51
- * @this {CustomControl}
52
- */
53
-
54
- /**
55
- * This CustomControl creates a confirm button element with a variety of options.
56
- *
57
- * <img src="./images/confirm-button.png">
58
- *
59
- * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library
60
- * as well as [pooperjs](https://popper.js.org/docs/v2/).
61
- *
62
- * You can create this control either by specifying the HTML tag <monster-confirm-button />` directly in the HTML or using
63
- * Javascript via the `document.createElement('monster-confirm-button');` method.
64
- *
65
- * ```html
66
- * <monster-confirm-button></monster-confirm-button>
67
- * ```
68
- *
69
- * Or you can create this CustomControl directly in Javascript:
70
- *
71
- * ```js
72
- * import {ConfirmButton} from '@schukai/component-form/source/confirm-button.js';
73
- * document.createElement('monster-confirm-button');
74
- * ```
75
- * The `data-monster-button-class` attribute can be used to change the CSS class of the button.
76
- *
77
- * @startuml confirm-button.png
78
- * skinparam monochrome true
79
- * skinparam shadowing false
80
- * HTMLElement <|-- CustomElement
81
- * CustomElement <|-- CustomControl
82
- * CustomControl <|-- Button
83
- * Button <|-- PopperButton
84
- * PopperButton <|-- ConfirmButton
85
- * @enduml
86
- *
87
- * @copyright schukai GmbH
88
- * @summary A confirm button
89
- */
90
-
91
46
  /**
92
47
  * A confirm button control.
93
48
  *
@@ -73,7 +73,7 @@ class ContextHelp extends Popper {
73
73
  }
74
74
 
75
75
  /**
76
- * @return {Array<CSSStyleSheet>}
76
+ * @return {CSSStyleSheet[]}
77
77
  */
78
78
  static getCSSStyleSheet() {
79
79
  return [ContextHelpStyleSheet];
@@ -14,19 +14,19 @@
14
14
 
15
15
  import "../datatable/datasource/dom.mjs";
16
16
  import "../form/field-set.mjs";
17
- import {DeadMansSwitch} from "../../util/deadmansswitch.mjs";
18
- import {DataSet} from "../datatable/dataset.mjs";
17
+ import { DeadMansSwitch } from "../../util/deadmansswitch.mjs";
18
+ import { DataSet } from "../datatable/dataset.mjs";
19
19
  import {
20
- assembleMethodSymbol,
21
- registerCustomElement,
22
- getSlottedElements,
20
+ assembleMethodSymbol,
21
+ registerCustomElement,
22
+ getSlottedElements,
23
23
  } from "../../dom/customelement.mjs";
24
- import {datasourceLinkedElementSymbol} from "../datatable/util.mjs";
25
- import {FormStyleSheet} from "./stylesheet/form.mjs";
26
- import {addAttributeToken} from "../../dom/attributes.mjs";
27
- import {getDocument} from "../../dom/util.mjs";
24
+ import { datasourceLinkedElementSymbol } from "../datatable/util.mjs";
25
+ import { FormStyleSheet } from "./stylesheet/form.mjs";
26
+ import { addAttributeToken } from "../../dom/attributes.mjs";
27
+ import { getDocument } from "../../dom/util.mjs";
28
28
 
29
- export {Form};
29
+ export { Form };
30
30
 
31
31
  /**
32
32
  * @private
@@ -58,162 +58,163 @@ const debounceBindSymbol = Symbol("debounceBind");
58
58
  * @fires monster-changed
59
59
  */
60
60
  class Form extends DataSet {
61
- /**
62
- * @property {Object} templates Template definitions
63
- * @property {string} templates.main Main template
64
- * @property {Object} classes Class definitions
65
- * @property {string} classes.form Form class
66
- * @property {Object} writeBack Write back definitions
67
- * @property {string[]} writeBack.events Write back events
68
- * @property {Object} bind Bind definitions
69
- * @property {Object} reportValidity Report validity definitions
70
- * @property {string} reportValidity.selector Report validity selector
71
- * @property {boolean} features.mutationObserver Mutation observer feature
72
- * @property {boolean} features.writeBack Write back feature
73
- * @property {boolean} features.bind Bind feature
74
- */
75
- get defaults() {
76
- const obj = Object.assign({}, super.defaults, {
77
- templates: {
78
- main: getTemplate(),
79
- },
80
-
81
- classes: {
82
- form: "",
83
- },
84
-
85
- writeBack: {
86
- events: ["keyup", "click", "change", "drop", "touchend", "input"],
87
- },
88
-
89
- reportValidity: {
90
- selector: "input,select,textarea,monster-select,monster-toggle-switch",
91
- },
92
-
93
- eventProcessing: true,
94
- });
95
-
96
- obj["features"]["mutationObserver"] = false;
97
- obj["features"]["writeBack"] = true;
98
-
99
- return obj;
100
- }
101
-
102
- /**
103
- *
104
- * @return {string}
105
- */
106
- static getTag() {
107
- return "monster-form";
108
- }
109
-
110
- /**
111
- * @return {CSSStyleSheet[]}
112
- */
113
- static getCSSStyleSheet() {
114
- return [FormStyleSheet];
115
- }
116
-
117
- /**
118
- *
119
- */
120
- [assembleMethodSymbol]() {
121
- const selector = this.getOption("datasource.selector");
122
-
123
- if (!selector) {
124
- this[datasourceLinkedElementSymbol] = getDocument().createElement("monster-datasource-dom");
125
- }
126
-
127
- super[assembleMethodSymbol]();
128
-
129
- initControlReferences.call(this);
130
- initEventHandler.call(this);
131
- initDataSourceHandler.call(this);
132
- }
133
-
134
- /**
135
- * This method is called when the component is created.
136
- * @since 3.70.0
137
- * @return {Promise}
138
- */
139
- refresh() {
140
- return this.write().then(() => {
141
- super.refresh();
142
- return this;
143
- });
144
- }
145
-
146
- /**
147
- * Run reportValidation on all child html form controls.
148
- *
149
- * @since 2.10.0
150
- * @return {boolean}
151
- */
152
- reportValidity() {
153
- let valid = true;
154
-
155
- const selector = this.getOption("reportValidity.selector");
156
- const nodes = getSlottedElements.call(this, selector);
157
-
158
- nodes.forEach((node) => {
159
- if (typeof node.reportValidity === "function") {
160
- if (node.reportValidity() === false) {
161
- valid = false;
162
- }
163
- }
164
- });
165
-
166
- return valid;
167
- }
61
+ /**
62
+ * @property {Object} templates Template definitions
63
+ * @property {string} templates.main Main template
64
+ * @property {Object} classes Class definitions
65
+ * @property {string} classes.form Form class
66
+ * @property {Object} writeBack Write back definitions
67
+ * @property {string[]} writeBack.events Write back events
68
+ * @property {Object} bind Bind definitions
69
+ * @property {Object} reportValidity Report validity definitions
70
+ * @property {string} reportValidity.selector Report validity selector
71
+ * @property {boolean} features.mutationObserver Mutation observer feature
72
+ * @property {boolean} features.writeBack Write back feature
73
+ * @property {boolean} features.bind Bind feature
74
+ */
75
+ get defaults() {
76
+ const obj = Object.assign({}, super.defaults, {
77
+ templates: {
78
+ main: getTemplate(),
79
+ },
80
+
81
+ classes: {
82
+ form: "",
83
+ },
84
+
85
+ writeBack: {
86
+ events: ["keyup", "click", "change", "drop", "touchend", "input"],
87
+ },
88
+
89
+ reportValidity: {
90
+ selector: "input,select,textarea,monster-select,monster-toggle-switch",
91
+ },
92
+
93
+ eventProcessing: true,
94
+ });
95
+
96
+ obj["features"]["mutationObserver"] = false;
97
+ obj["features"]["writeBack"] = true;
98
+
99
+ return obj;
100
+ }
101
+
102
+ /**
103
+ *
104
+ * @return {string}
105
+ */
106
+ static getTag() {
107
+ return "monster-form";
108
+ }
109
+
110
+ /**
111
+ * @return {CSSStyleSheet[]}
112
+ */
113
+ static getCSSStyleSheet() {
114
+ return [FormStyleSheet];
115
+ }
116
+
117
+ /**
118
+ *
119
+ */
120
+ [assembleMethodSymbol]() {
121
+ const selector = this.getOption("datasource.selector");
122
+
123
+ if (!selector) {
124
+ this[datasourceLinkedElementSymbol] = getDocument().createElement(
125
+ "monster-datasource-dom",
126
+ );
127
+ }
128
+
129
+ super[assembleMethodSymbol]();
130
+
131
+ initControlReferences.call(this);
132
+ initEventHandler.call(this);
133
+ initDataSourceHandler.call(this);
134
+ }
135
+
136
+ /**
137
+ * This method is called when the component is created.
138
+ * @since 3.70.0
139
+ * @return {Promise}
140
+ */
141
+ refresh() {
142
+ return this.write().then(() => {
143
+ super.refresh();
144
+ return this;
145
+ });
146
+ }
147
+
148
+ /**
149
+ * Run reportValidation on all child html form controls.
150
+ *
151
+ * @since 2.10.0
152
+ * @return {boolean}
153
+ */
154
+ reportValidity() {
155
+ let valid = true;
156
+
157
+ const selector = this.getOption("reportValidity.selector");
158
+ const nodes = getSlottedElements.call(this, selector);
159
+
160
+ nodes.forEach((node) => {
161
+ if (typeof node.reportValidity === "function") {
162
+ if (node.reportValidity() === false) {
163
+ valid = false;
164
+ }
165
+ }
166
+ });
167
+
168
+ return valid;
169
+ }
168
170
  }
169
171
 
170
- function initDataSourceHandler() {
171
- }
172
+ function initDataSourceHandler() {}
172
173
 
173
174
  /**
174
175
  * @private
175
176
  * @return {initEventHandler}
176
177
  */
177
178
  function initEventHandler() {
178
- this[debounceBindSymbol] = {};
179
-
180
- if (this.getOption("features.writeBack") === true) {
181
- const events = this.getOption("writeBack.events");
182
- for (const event of events) {
183
- this.addEventListener(event, (e) => {
184
- if (!this.reportValidity()) {
185
- this.classList.add("invalid");
186
- setTimeout(() => {
187
- this.classList.remove("invalid");
188
- }, 1000);
189
-
190
- return;
191
- }
192
-
193
- if (this[debounceWriteBackSymbol] instanceof DeadMansSwitch) {
194
- try {
195
- this[debounceWriteBackSymbol].touch();
196
- return;
197
- } catch (e) {
198
- if (e.message !== "has already run") {
199
- throw e;
200
- }
201
- delete this[debounceWriteBackSymbol];
202
- }
203
- }
204
-
205
- this[debounceWriteBackSymbol] = new DeadMansSwitch(200, () => {
206
- setTimeout(() => {
207
- this.write().catch((e) => {
208
- addAttributeToken(this, "error", e.message || `${e}`);
209
- });
210
- }, 0);
211
- });
212
- });
213
- }
214
- }
215
-
216
- return this;
179
+ this[debounceBindSymbol] = {};
180
+
181
+ if (this.getOption("features.writeBack") === true) {
182
+ const events = this.getOption("writeBack.events");
183
+ for (const event of events) {
184
+ this.addEventListener(event, (e) => {
185
+ if (!this.reportValidity()) {
186
+ this.classList.add("invalid");
187
+ setTimeout(() => {
188
+ this.classList.remove("invalid");
189
+ }, 1000);
190
+
191
+ return;
192
+ }
193
+
194
+ if (this[debounceWriteBackSymbol] instanceof DeadMansSwitch) {
195
+ try {
196
+ this[debounceWriteBackSymbol].touch();
197
+ return;
198
+ } catch (e) {
199
+ if (e.message !== "has already run") {
200
+ throw e;
201
+ }
202
+ delete this[debounceWriteBackSymbol];
203
+ }
204
+ }
205
+
206
+ this[debounceWriteBackSymbol] = new DeadMansSwitch(200, () => {
207
+ setTimeout(() => {
208
+ this.write().catch((e) => {
209
+ addAttributeToken(this, "error", e.message || `${e}`);
210
+ });
211
+ }, 0);
212
+ });
213
+ });
214
+ }
215
+ }
216
+
217
+ return this;
217
218
  }
218
219
 
219
220
  /**
@@ -221,10 +222,10 @@ function initEventHandler() {
221
222
  * @return {FilterButton}
222
223
  */
223
224
  function initControlReferences() {
224
- if (!this.shadowRoot) {
225
- throw new Error("no shadow-root is defined");
226
- }
227
- return this;
225
+ if (!this.shadowRoot) {
226
+ throw new Error("no shadow-root is defined");
227
+ }
228
+ return this;
228
229
  }
229
230
 
230
231
  /**
@@ -232,8 +233,8 @@ function initControlReferences() {
232
233
  * @return {string}
233
234
  */
234
235
  function getTemplate() {
235
- // language=HTML
236
- return `
236
+ // language=HTML
237
+ return `
237
238
  <div data-monster-role="control" part="control">
238
239
  <form data-monster-attributes="disabled path:disabled | if:true, class path:classes.form"
239
240
  data-monster-role="form"