@schukai/monster 3.54.0 → 3.55.1

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 (124) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/package.json +1 -1
  3. package/source/components/datatable/datasource/rest.mjs +93 -57
  4. package/source/components/datatable/datatable/header.mjs +8 -0
  5. package/source/components/datatable/datatable.mjs +88 -44
  6. package/source/components/datatable/embedded-pagination.mjs +24 -43
  7. package/source/components/datatable/filter/util.mjs +138 -0
  8. package/source/components/datatable/filter.mjs +418 -174
  9. package/source/components/datatable/pagination.mjs +26 -2
  10. package/source/components/datatable/status.mjs +226 -0
  11. package/source/components/datatable/style/datatable.pcss +1 -0
  12. package/source/components/datatable/style/embedded-pagination.pcss +59 -2
  13. package/source/components/datatable/style/filter.pcss +4 -0
  14. package/source/components/datatable/style/pagination.pcss +28 -4
  15. package/source/components/datatable/style/status.pcss +42 -0
  16. package/source/components/datatable/stylesheet/column-bar.mjs +15 -9
  17. package/source/components/datatable/stylesheet/dataset.mjs +14 -8
  18. package/source/components/datatable/stylesheet/datasource.mjs +14 -8
  19. package/source/components/datatable/stylesheet/datatable.mjs +15 -9
  20. package/source/components/datatable/stylesheet/embedded-pagination.mjs +14 -8
  21. package/source/components/datatable/stylesheet/filter-button.mjs +15 -9
  22. package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +14 -8
  23. package/source/components/datatable/stylesheet/filter-date-range.mjs +14 -8
  24. package/source/components/datatable/stylesheet/filter-range.mjs +14 -8
  25. package/source/components/datatable/stylesheet/filter.mjs +15 -9
  26. package/source/components/datatable/stylesheet/pagination.mjs +15 -9
  27. package/source/components/datatable/stylesheet/select-filter.mjs +14 -8
  28. package/source/components/datatable/stylesheet/status.mjs +33 -0
  29. package/source/components/form/action-button.mjs +3 -1
  30. package/source/components/form/api-button.mjs +1 -1
  31. package/source/components/form/button-bar.mjs +1 -1
  32. package/source/components/form/button.mjs +1 -1
  33. package/source/components/form/confirm-button.mjs +3 -1
  34. package/source/components/form/context-error.mjs +272 -0
  35. package/source/components/form/context-help.mjs +7 -5
  36. package/source/components/form/form.mjs +4 -2
  37. package/source/components/form/message-state-button.mjs +4 -2
  38. package/source/components/form/popper-button.mjs +9 -4
  39. package/source/components/form/popper.mjs +11 -3
  40. package/source/components/form/reload.mjs +1 -1
  41. package/source/components/form/select.mjs +3 -3
  42. package/source/components/form/shadow-reload.mjs +1 -1
  43. package/source/components/form/state-button.mjs +4 -1
  44. package/source/components/form/style/context-error.pcss +32 -0
  45. package/source/components/form/style/context-help.pcss +22 -5
  46. package/source/components/form/stylesheet/action-button.mjs +14 -8
  47. package/source/components/form/stylesheet/api-button.mjs +14 -8
  48. package/source/components/form/stylesheet/button-bar.mjs +14 -8
  49. package/source/components/form/stylesheet/button.mjs +14 -8
  50. package/source/components/form/stylesheet/confirm-button.mjs +14 -8
  51. package/source/components/form/stylesheet/context-error.mjs +33 -0
  52. package/source/components/form/stylesheet/context-help.mjs +15 -9
  53. package/source/components/form/stylesheet/form.mjs +14 -8
  54. package/source/components/form/stylesheet/message-state-button.mjs +14 -8
  55. package/source/components/form/stylesheet/popper-button.mjs +14 -8
  56. package/source/components/form/stylesheet/popper.mjs +14 -8
  57. package/source/components/form/stylesheet/select.mjs +15 -9
  58. package/source/components/form/stylesheet/state-button.mjs +14 -8
  59. package/source/components/form/stylesheet/tabs.mjs +15 -9
  60. package/source/components/form/stylesheet/tree-select.mjs +14 -8
  61. package/source/components/form/tabs.mjs +53 -7
  62. package/source/components/form/template.mjs +1 -1
  63. package/source/components/form/tree-select.mjs +1 -1
  64. package/source/components/host/collapse.mjs +20 -5
  65. package/source/components/host/config-manager.mjs +41 -2
  66. package/source/components/host/host.mjs +14 -0
  67. package/source/components/host/stylesheet/call-button.mjs +15 -9
  68. package/source/components/host/stylesheet/collapse.mjs +14 -8
  69. package/source/components/host/stylesheet/config-manager.mjs +14 -8
  70. package/source/components/host/stylesheet/details.mjs +14 -8
  71. package/source/components/host/stylesheet/host.mjs +14 -8
  72. package/source/components/host/stylesheet/overlay.mjs +15 -9
  73. package/source/components/host/stylesheet/toggle-button.mjs +15 -9
  74. package/source/components/host/stylesheet/viewer.mjs +14 -8
  75. package/source/components/host/util.mjs +6 -1
  76. package/source/components/notify/stylesheet/message.mjs +15 -9
  77. package/source/components/notify/stylesheet/notify.mjs +14 -8
  78. package/source/components/state/stylesheet/log.mjs +14 -8
  79. package/source/components/state/stylesheet/state.mjs +14 -8
  80. package/source/components/stylesheet/badge.mjs +14 -8
  81. package/source/components/stylesheet/border.mjs +14 -8
  82. package/source/components/stylesheet/button.mjs +14 -8
  83. package/source/components/stylesheet/card.mjs +14 -8
  84. package/source/components/stylesheet/color.mjs +14 -8
  85. package/source/components/stylesheet/common.mjs +14 -8
  86. package/source/components/stylesheet/control.mjs +14 -8
  87. package/source/components/stylesheet/data-grid.mjs +14 -8
  88. package/source/components/stylesheet/display.mjs +14 -8
  89. package/source/components/stylesheet/floating-ui.mjs +14 -8
  90. package/source/components/stylesheet/form.mjs +14 -8
  91. package/source/components/stylesheet/host.mjs +14 -8
  92. package/source/components/stylesheet/icons.mjs +15 -9
  93. package/source/components/stylesheet/link.mjs +14 -8
  94. package/source/components/stylesheet/normalize.mjs +14 -8
  95. package/source/components/stylesheet/popper.mjs +14 -8
  96. package/source/components/stylesheet/property.mjs +14 -8
  97. package/source/components/stylesheet/ripple.mjs +14 -8
  98. package/source/components/stylesheet/skeleton.mjs +14 -8
  99. package/source/components/stylesheet/space.mjs +14 -8
  100. package/source/components/stylesheet/spinner.mjs +14 -8
  101. package/source/components/stylesheet/table.mjs +14 -8
  102. package/source/components/stylesheet/theme.mjs +14 -8
  103. package/source/components/stylesheet/typography.mjs +14 -8
  104. package/source/components/tree-menu/stylesheet/tree-menu.mjs +14 -8
  105. package/source/data/transformer.mjs +38 -43
  106. package/source/dom/attributes.mjs +5 -5
  107. package/source/dom/customelement.mjs +1 -1
  108. package/source/dom/updater.mjs +14 -5
  109. package/source/dom/util.mjs +42 -0
  110. package/source/i18n/providers/embed.mjs +3 -3
  111. package/source/monster.mjs +5 -0
  112. package/source/text/formatter.mjs +2 -2
  113. package/source/types/noderecursiveiterator.mjs +9 -7
  114. package/source/types/observer.mjs +1 -1
  115. package/source/types/version.mjs +1 -1
  116. package/source/util/sleep.mjs +17 -0
  117. package/test/cases/components/form/button.mjs +2 -1
  118. package/test/cases/components/form/select.mjs +1 -1
  119. package/test/cases/components/form/tree-select.mjs +1 -1
  120. package/test/cases/data/transformer.mjs +2 -2
  121. package/test/cases/dom/updater.mjs +67 -46
  122. package/test/cases/monster.mjs +1 -1
  123. package/test/web/test.html +2 -2
  124. package/test/web/tests.js +18 -13
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
3
+ * Node module: @schukai/monster
4
+ * This file is licensed under the AGPLv3 License.
5
+ * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
+ */
7
+
8
+ import { addAttributeToken } from "../../../dom/attributes.mjs";
9
+ import { ATTRIBUTE_ERRORMESSAGE } from "../../../dom/constants.mjs";
10
+
11
+ export { StatusStyleSheet };
12
+
13
+ /**
14
+ * @private
15
+ * @type {CSSStyleSheet}
16
+ */
17
+ const StatusStyleSheet = new CSSStyleSheet();
18
+
19
+ try {
20
+ StatusStyleSheet.insertRule(
21
+ `
22
+ @layer status {
23
+ :where(html){line-height:1.15}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(pre){font-family:monospace,monospace;font-size:1em}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%;min-height:100%}body{box-sizing:border-box;margin:0;min-height:99%;padding:0;word-break:break-word}.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-button-primary,button{align-items:center;background-position:50%;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);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-color-primary-4);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);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-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);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}[data-monster-role=control]{outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}: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-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-gray-1);--monster-color-primary-4:var(--monster-color-gray-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-3);--monster-bg-color-primary-4:var(--monster-color-gray-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-3);--monster-color-primary-disabled-2:var(--monster-color-gray-1);--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-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}@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)}}span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}[data-monster-role=control]{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;width:-moz-fit-content;width:fit-content}[data-monster-role=control] .monster-spinner{height:1.5rem!important;visibility:hidden;width:1.5rem!important}[data-monster-role=control] [data-monster-state-loader=show]{visibility:visible}:host{align-items:center;align-self:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;width:-moz-fit-content;width:fit-content}
24
+ }`,
25
+ 0,
26
+ );
27
+ } catch (e) {
28
+ addAttributeToken(
29
+ document.getRootNode().querySelector("html"),
30
+ ATTRIBUTE_ERRORMESSAGE,
31
+ e + "",
32
+ );
33
+ }
@@ -72,7 +72,9 @@ class ActionButton extends PopperButton {
72
72
  * @returns {symbol}
73
73
  */
74
74
  static get [instanceSymbol]() {
75
- return Symbol.for("@schukai/component-form/action-button@@instance");
75
+ return Symbol.for(
76
+ "@schukai/monster/components/form/action-button@@instance",
77
+ );
76
78
  }
77
79
 
78
80
  /**
@@ -81,7 +81,7 @@ class ApiButton extends ActionButton {
81
81
  * @returns {symbol}
82
82
  */
83
83
  static get [instanceSymbol]() {
84
- return Symbol.for("@schukai/component-form/api-button@@instance");
84
+ return Symbol.for("@schukai/monster/components/form/api-button@@instance");
85
85
  }
86
86
 
87
87
  /**
@@ -153,7 +153,7 @@ class ButtonBar extends CustomElement {
153
153
  * @returns {symbol}
154
154
  */
155
155
  static get [instanceSymbol]() {
156
- return Symbol.for("@schukai/component-form/button-bar@@instance");
156
+ return Symbol.for("@schukai/monster/components/form/button-bar@@instance");
157
157
  }
158
158
 
159
159
  /**
@@ -76,7 +76,7 @@ class Button extends CustomControl {
76
76
  * @since 2.1.0
77
77
  */
78
78
  static get [instanceSymbol]() {
79
- return Symbol.for("@schukai/component-form/button@@instance");
79
+ return Symbol.for("@schukai/monster/components/form/button@@instance");
80
80
  }
81
81
 
82
82
  /**
@@ -89,7 +89,9 @@ class ConfirmButton extends PopperButton {
89
89
  * @since 2.1.0
90
90
  */
91
91
  static get [instanceSymbol]() {
92
- return Symbol.for("@schukai/component-form/confirm-button@@instance");
92
+ return Symbol.for(
93
+ "@schukai/monster/components/form/confirm-button@@instance",
94
+ );
93
95
  }
94
96
 
95
97
  /**
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Copyright schukai GmbH and contributors 2023. All Rights Reserved.
3
+ * Node module: @schukai/monster
4
+ * This file is licensed under the AGPLv3 License.
5
+ * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
6
+ */
7
+ import { instanceSymbol } from "../../constants.mjs";
8
+ import {
9
+ assembleMethodSymbol,
10
+ registerCustomElement,
11
+ } from "../../dom/customelement.mjs";
12
+ import { CustomControl } from "../../dom/customcontrol.mjs";
13
+ import { ContextErrorStyleSheet } from "./stylesheet/context-error.mjs";
14
+ import { ThemeStyleSheet } from "../stylesheet/theme.mjs";
15
+ import { Popper } from "./popper.mjs";
16
+ import {
17
+ ATTRIBUTE_ERRORMESSAGE,
18
+ ATTRIBUTE_ROLE,
19
+ } from "../../dom/constants.mjs";
20
+
21
+ export { ContextError };
22
+
23
+ /**
24
+ * @private
25
+ * @type {symbol}
26
+ */
27
+ const controlElementSymbol = Symbol("controlElement");
28
+
29
+ /**
30
+ * @private
31
+ * @type {symbol}
32
+ */
33
+ const buttonElementSymbol = Symbol("buttonElement");
34
+
35
+ /**
36
+ * local symbol
37
+ * @private
38
+ * @type {symbol}
39
+ */
40
+ const popperElementSymbol = Symbol("popperElement");
41
+
42
+ /**
43
+ * local symbol
44
+ * @private
45
+ * @type {symbol}
46
+ */
47
+ const iconElementSymbol = Symbol("iconElement");
48
+
49
+ /**
50
+ * The ContextError control creates an element with a variety of options.
51
+ *
52
+ * <img src="./images/context-error.png">
53
+ *
54
+ * Dependencies: the system uses functions of the [monsterjs](https://monsterjs.org/) library
55
+ * as well as [pooperjs](https://popper.js.org/docs/v2/).
56
+ *
57
+ * You can create this control either by specifying the HTML tag <monster-context-help-button />` directly in the HTML or using
58
+ * Javascript via the `document.createElement('monster-context-help');` method.
59
+ *
60
+ * ```html
61
+ * <monster-context-help></monster-context-help>
62
+ * ```
63
+ *
64
+ * Or you can create this CustomControl directly in Javascript:
65
+ *
66
+ * ```js
67
+ * import {Popper} from '@schukai/component-form/source/popper.js';
68
+ * document.createElement('monster-context-help');
69
+ * ```
70
+ *
71
+ * @startuml context-error.png
72
+ * skinparam monochrome true
73
+ * skinparam shadowing false
74
+ * HTMLElement <|-- CustomElement
75
+ * CustomElement <|-- CustomControl
76
+ * CustomControl <|-- Popper
77
+ * Popper <|-- ContextError
78
+ * @enduml
79
+ *
80
+ * @since 3.55.0
81
+ * @copyright schukai GmbH
82
+ * @memberOf Monster.Components.Form
83
+ * @summary A control that can be used to display a tooltip or a popover with an error message.
84
+ */
85
+ class ContextError extends Popper {
86
+ /**
87
+ * This method is called by the `instanceof` operator.
88
+ * @returns {symbol}
89
+ * @since 2.1.0
90
+ */
91
+ static get [instanceSymbol]() {
92
+ return Symbol.for(
93
+ "@schukai/monster/components/form/context-error@@instance",
94
+ );
95
+ }
96
+
97
+ /**
98
+ *
99
+ * @return {Monster.Components.Form.PopperButton}
100
+ */
101
+ [assembleMethodSymbol]() {
102
+ super[assembleMethodSymbol]();
103
+ initControlReferences.call(this);
104
+
105
+ if (this.hasErrorMessage()) {
106
+ this[iconElementSymbol].classList.remove("hidden");
107
+ }
108
+ }
109
+
110
+ /**
111
+ * To set the options via the html tag the attribute `data-monster-options` must be used.
112
+ * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
113
+ *
114
+ * The individual configuration values can be found in the table.
115
+ *
116
+ * @property {Object} templates - The templates for the control.
117
+ * @property {string} templates.main - The main template.
118
+ * @property {string} mode - The mode of the popper. Possible values are `click`, `enter` and `hover`.
119
+ * @property {string} content - The content of the popper.
120
+ * @property {object} popper - The popper options.
121
+ * @property {string} popper.placement - The placement of the popper. Possible values are `top`, `bottom`, `left`, `right`, `auto`, `auto-start`, `auto-end`, `top-start`, `top-end`, `bottom-start`, `bottom-end`, `right-start`, `right-end`, `left-start`, `left-end`.
122
+ * @extends {CustomControl}
123
+ */
124
+ get defaults() {
125
+ return Object.assign({}, super.defaults, {
126
+ templates: {
127
+ main: getTemplate(),
128
+ },
129
+ mode: "auto",
130
+
131
+ content: "",
132
+
133
+ classes: {
134
+ button: "monster-theme-error-2",
135
+ },
136
+ });
137
+ }
138
+
139
+ /**
140
+ *
141
+ * @return {Monster.Components.Form.Popper}
142
+ */
143
+ showDialog() {
144
+ if (!this.hasErrorMessage()) {
145
+ return this;
146
+ }
147
+
148
+ super.showDialog();
149
+ return this;
150
+ }
151
+
152
+ /**
153
+ *
154
+ * @return {Monster.Components.Form.Popper}
155
+ */
156
+ hideDialog() {
157
+ super.hideDialog();
158
+ return this;
159
+ }
160
+
161
+ /**
162
+ *
163
+ * @param message
164
+ * @param show {boolean|number} - If true the dialog is shown immediately. If false the dialog is hidden by default. If a number is specified the dialog is shown for the specified time in milliseconds.
165
+ * @returns {Monster.Components.Form.ContextError}
166
+ */
167
+ setErrorMessage(message, show = false) {
168
+ message = message.trim();
169
+
170
+ if (message === "") {
171
+ return this.resetErrorMessage();
172
+ }
173
+
174
+ this.setOption("content", message);
175
+ this[iconElementSymbol].classList.remove("hidden");
176
+
177
+ if (show === true || show === 1 || show === "true") {
178
+ this.showDialog();
179
+ return this;
180
+ }
181
+
182
+ if (show === false || show === 0 || show === "false") {
183
+ return this;
184
+ }
185
+
186
+ try {
187
+ const interval = parseInt(show);
188
+ this.showDialog();
189
+ setTimeout(() => {
190
+ this.hideDialog();
191
+ }, interval);
192
+ } catch (e) {}
193
+
194
+ return this;
195
+ }
196
+
197
+ resetErrorMessage() {
198
+ this.hideDialog();
199
+ this.setOption("content", "");
200
+ this[iconElementSymbol].classList.add("hidden");
201
+ return this;
202
+ }
203
+
204
+ hasErrorMessage() {
205
+ return this.getOption("content", "") !== "";
206
+ }
207
+
208
+ /**
209
+ * @return {string}
210
+ */
211
+ static getTag() {
212
+ return "monster-context-error";
213
+ }
214
+
215
+ /**
216
+ * @return {Array<CSSStyleSheet>}
217
+ */
218
+ static getCSSStyleSheet() {
219
+ return [ContextErrorStyleSheet, ThemeStyleSheet];
220
+ }
221
+ }
222
+
223
+ /**
224
+ * @private
225
+ * @return {Select}
226
+ */
227
+ function initControlReferences() {
228
+ this[controlElementSymbol] = this.shadowRoot.querySelector(
229
+ `[${ATTRIBUTE_ROLE}=control]`,
230
+ );
231
+ this[buttonElementSymbol] = this.shadowRoot.querySelector(
232
+ `[${ATTRIBUTE_ROLE}=button]`,
233
+ );
234
+ this[popperElementSymbol] = this.shadowRoot.querySelector(
235
+ `[${ATTRIBUTE_ROLE}=popper]`,
236
+ );
237
+ this[iconElementSymbol] = this.shadowRoot.querySelector(
238
+ "[data-monster-role=button] svg",
239
+ );
240
+ }
241
+
242
+ /**
243
+ * @private
244
+ * @return {string}
245
+ */
246
+ function getTemplate() {
247
+ // language=HTML
248
+ return `
249
+ <div data-monster-role="control" part="control">
250
+
251
+ <div data-monster-role="button"
252
+ data-monster-attributes="class path:classes.button"
253
+ part="button">
254
+ <svg xmlns="http://www.w3.org/2000/svg" width="1.2em" height="1.2em" fill="currentColor" class="hidden"
255
+ viewBox="0 0 16 16">
256
+ <path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16"/>
257
+ <path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z"/>
258
+ </svg>
259
+ </div>
260
+
261
+ <div data-monster-role="popper" part="popper" tabindex="-1" class="monster-color-primary-1">
262
+ <div data-monster-role="arrow"></div>
263
+ <div part="content" class="flex">
264
+ <div data-monster-replace="path:content | i18n::value"></div>
265
+ </div>
266
+ </div>
267
+
268
+ </div>
269
+ `;
270
+ }
271
+
272
+ registerCustomElement(ContextError);
@@ -30,11 +30,11 @@ export { ContextHelp };
30
30
  * Or you can create this CustomControl directly in Javascript:
31
31
  *
32
32
  * ```js
33
- * import {Popper} from '@schukai/component-form/source/popper.js';
33
+ * import {Popper} from '@schukai/monster/components/form/context-help.mjs';
34
34
  * document.createElement('monster-context-help');
35
35
  * ```
36
36
  *
37
- * @startuml context-button.png
37
+ * @startuml context-help.png
38
38
  * skinparam monochrome true
39
39
  * skinparam shadowing false
40
40
  * HTMLElement <|-- CustomElement
@@ -55,7 +55,9 @@ class ContextHelp extends Popper {
55
55
  * @since 2.1.0
56
56
  */
57
57
  static get [instanceSymbol]() {
58
- return Symbol.for("@schukai/component-form/popper@@instance");
58
+ return Symbol.for(
59
+ "@schukai/monster/components/form/context-help@@instance",
60
+ );
59
61
  }
60
62
 
61
63
  /**
@@ -77,7 +79,7 @@ class ContextHelp extends Popper {
77
79
  templates: {
78
80
  main: getTemplate(),
79
81
  },
80
- mode: "hover",
82
+ mode: "auto",
81
83
  });
82
84
  }
83
85
 
@@ -105,7 +107,7 @@ function getTemplate() {
105
107
  return `
106
108
  <div data-monster-role="control" part="control">
107
109
 
108
- <div data-monster-role="button" part="button"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-question-circle-fill" viewBox="0 0 16 16">
110
+ <div data-monster-role="button" part="button"><svg xmlns="http://www.w3.org/2000/svg" width="1.2em" height="1.2em" fill="currentColor" class="bi bi-question-circle-fill" viewBox="0 0 16 16">
109
111
  <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.496 6.033h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286a.237.237 0 0 0 .241.247zm2.325 6.443c.61 0 1.029-.394 1.029-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94 0 .533.425.927 1.01.927z"/>
110
112
  </svg></div>
111
113
 
@@ -56,7 +56,9 @@ const ATTRIBUTE_FORM_DATASOURCE_ACTION = `${ATTRIBUTE_PREFIX}datasource-action`;
56
56
  * @type {symbol}
57
57
  * @since 1.7.0
58
58
  */
59
- const formDataSymbol = Symbol.for("@schukai/component-form/form@@formdata");
59
+ const formDataSymbol = Symbol.for(
60
+ "@schukai/monster/components/form/form@@formdata",
61
+ );
60
62
 
61
63
  /**
62
64
  * @private
@@ -141,7 +143,7 @@ class Form extends CustomElement {
141
143
  * @since 2.1.0
142
144
  */
143
145
  static get [instanceSymbol]() {
144
- return Symbol.for("@schukai/component-form/form");
146
+ return Symbol.for("@schukai/monster/components/form/form");
145
147
  }
146
148
 
147
149
  /**
@@ -43,7 +43,7 @@ const buttonElementSymbol = Symbol("buttonElement");
43
43
  * Or you can create this CustomControl directly in Javascript:
44
44
  *
45
45
  * ```js
46
- * import {class MessageStateButton extends PopperButton {} from '@schukai/component-form/source/message-state-button.js';
46
+ * import from '@schukai/monster/source/components/form/message-state-button.mjs';
47
47
  * document.createElement('monster-state-button');
48
48
  * ```
49
49
  *
@@ -68,7 +68,9 @@ class MessageStateButton extends Popper {
68
68
  * @since 2.1.0
69
69
  */
70
70
  static get [instanceSymbol]() {
71
- return Symbol.for("@schukai/component-form/message-state-button@@instance");
71
+ return Symbol.for(
72
+ "@schukai/monster/components/form/message-state-button@@instance",
73
+ );
72
74
  }
73
75
 
74
76
  /**
@@ -125,7 +125,9 @@ class PopperButton extends Popper {
125
125
  * @since 2.1.0
126
126
  */
127
127
  static get [instanceSymbol]() {
128
- return Symbol.for("@schukai/component-form/popper-button@@instance");
128
+ return Symbol.for(
129
+ "@schukai/monster/components/form/popper-button@@instance",
130
+ );
129
131
  }
130
132
 
131
133
  /**
@@ -170,7 +172,7 @@ class PopperButton extends Popper {
170
172
  [assembleMethodSymbol]() {
171
173
  super[assembleMethodSymbol]();
172
174
  initControlReferences.call(this);
173
- initEventhandler.call(this);
175
+ initEventHandler.call(this);
174
176
 
175
177
  return this;
176
178
  }
@@ -321,9 +323,9 @@ class PopperButton extends Popper {
321
323
 
322
324
  /**
323
325
  * @private
324
- * @return {initEventhandler}
326
+ * @return {initEventHandler}
325
327
  */
326
- function initEventhandler() {
328
+ function initEventHandler() {
327
329
  this[closeEventHandler] = (event) => {
328
330
  const path = event.composedPath();
329
331
 
@@ -395,12 +397,15 @@ function initControlReferences() {
395
397
  this[controlElementSymbol] = this.shadowRoot.querySelector(
396
398
  `[${ATTRIBUTE_ROLE}=control]`,
397
399
  );
400
+
398
401
  this[buttonElementSymbol] = this.shadowRoot.querySelector(
399
402
  `[${ATTRIBUTE_ROLE}=button]`,
400
403
  );
404
+
401
405
  this[popperElementSymbol] = this.shadowRoot.querySelector(
402
406
  `[${ATTRIBUTE_ROLE}=popper]`,
403
407
  );
408
+
404
409
  this[arrowElementSymbol] = this.shadowRoot.querySelector(
405
410
  `[${ATTRIBUTE_ROLE}=arrow]`,
406
411
  );
@@ -121,7 +121,7 @@ class Popper extends CustomControl {
121
121
  * @returns {symbol}
122
122
  */
123
123
  static get [instanceSymbol]() {
124
- return Symbol.for("@schukai/component-form/popper@@instance");
124
+ return Symbol.for("@schukai/monster/components/form/popper@@instance");
125
125
  }
126
126
 
127
127
  /**
@@ -166,7 +166,7 @@ class Popper extends CustomControl {
166
166
  [assembleMethodSymbol]() {
167
167
  super[assembleMethodSymbol]();
168
168
  initControlReferences.call(this);
169
- initEventhandler.call(this);
169
+ initEventHandler.call(this);
170
170
 
171
171
  return this;
172
172
  }
@@ -252,7 +252,7 @@ class Popper extends CustomControl {
252
252
  * @private
253
253
  * @return {Monster.Components.Form.Popper}
254
254
  */
255
- function initEventhandler() {
255
+ function initEventHandler() {
256
256
  this[closeEventHandler] = (event) => {
257
257
  const path = event.composedPath();
258
258
 
@@ -286,6 +286,12 @@ function initEventhandler() {
286
286
  return this;
287
287
  }
288
288
 
289
+ /**
290
+ * @private
291
+ * @param mode
292
+ * @return {Monster.Components.Form.Popper}
293
+ * @throws Error
294
+ */
289
295
  function initEventHandlerByMode(mode) {
290
296
  switch (mode) {
291
297
  case "manual":
@@ -337,6 +343,8 @@ function initEventHandlerByMode(mode) {
337
343
  this.hideDialog();
338
344
  });
339
345
  break;
346
+ default:
347
+ throw new Error(`Unknown mode ${mode}`);
340
348
  }
341
349
  }
342
350
 
@@ -104,7 +104,7 @@ class Reload extends CustomElement {
104
104
  * @since 2.1.0
105
105
  */
106
106
  static get [instanceSymbol]() {
107
- return Symbol.for("@schukai/component-form/reload");
107
+ return Symbol.for("@schukai/monster/components/form/reload");
108
108
  }
109
109
 
110
110
  /**
@@ -310,7 +310,7 @@ class Select extends CustomControl {
310
310
  * @since 2.1.0
311
311
  */
312
312
  static get [instanceSymbol]() {
313
- return Symbol.for("@schukai/component-form/select@@instance");
313
+ return Symbol.for("@schukai/monster/components/form/select@@instance");
314
314
  }
315
315
 
316
316
  /**
@@ -721,7 +721,7 @@ class Select extends CustomControl {
721
721
  fireCustomEvent(this, "monster-options-set", {
722
722
  options,
723
723
  });
724
-
724
+
725
725
  return this;
726
726
  }
727
727
 
@@ -1534,7 +1534,7 @@ function gatherState() {
1534
1534
  .catch((e) => {
1535
1535
  addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, `${e}`);
1536
1536
  });
1537
-
1537
+
1538
1538
  if (this.getOption("features.closeOnSelect") === true) {
1539
1539
  toggle.call(this);
1540
1540
  }
@@ -85,7 +85,7 @@ class ShadowReload extends Reload {
85
85
  * @returns {symbol}
86
86
  */
87
87
  static get [instanceSymbol]() {
88
- return Symbol.for("@schukai/component-form/shadow-reload");
88
+ return Symbol.for("@schukai/monster/components/form/shadow-reload");
89
89
  }
90
90
 
91
91
  /**
@@ -58,7 +58,9 @@ class StateButton extends Button {
58
58
  * @since 2.1.0
59
59
  */
60
60
  static get [instanceSymbol]() {
61
- return Symbol.for("@schukai/component-form/state-button@@instance");
61
+ return Symbol.for(
62
+ "@schukai/monster/components/form/state-button@@instance",
63
+ );
62
64
  }
63
65
 
64
66
  /**
@@ -169,6 +171,7 @@ class StateButton extends Button {
169
171
  * @return {string}
170
172
  */
171
173
  function getTemplate() {
174
+ // language=HTML
172
175
  return `<div data-monster-role="control" part="control">
173
176
  <button data-monster-attributes="disabled path:disabled | if:true, class path:classes.button"
174
177
  data-monster-role="button"
@@ -0,0 +1,32 @@
1
+ @import "../../style/control.pcss";
2
+ @import "../../style/floating-ui.pcss";
3
+
4
+ [data-monster-role=control] {
5
+ position: relative;
6
+ margin: 0;
7
+ padding: 0;
8
+ line-height: 1em;
9
+
10
+ & [data-monster-role="button"] {
11
+ display: inline-block;
12
+ position: relative;
13
+
14
+ & svg {
15
+ cursor: pointer;
16
+ }
17
+
18
+ & svg.hidden {
19
+ visibility: hidden;
20
+ cursor: default;
21
+ }
22
+ }
23
+ }
24
+
25
+ :host {
26
+ display: inline-block;
27
+ position: relative;
28
+ margin: 0 0.2em;
29
+ padding: 0;
30
+ vertical-align: bottom;
31
+ transform: translateY(0.15em);
32
+ }