@lmvz-ds/components 0.23.0 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/cjs/{index-lW-SEvL7.js → index-BCFBLj0e.js} +1 -1
  3. package/cjs/lmvz-action.cjs.entry.js +1 -1
  4. package/cjs/lmvz-button_3.cjs.entry.js +5 -5
  5. package/cjs/lmvz-card.cjs.entry.js +2 -2
  6. package/cjs/lmvz-checkbox.cjs.entry.js +5 -5
  7. package/cjs/lmvz-chip.cjs.entry.js +3 -3
  8. package/cjs/lmvz-components.cjs.js +3 -3
  9. package/cjs/lmvz-header_2.cjs.entry.js +2 -2
  10. package/cjs/lmvz-input.cjs.entry.js +3 -3
  11. package/cjs/lmvz-menuitem.cjs.entry.js +3 -3
  12. package/cjs/lmvz-modal.cjs.entry.js +5 -5
  13. package/cjs/lmvz-radio.cjs.entry.js +334 -0
  14. package/cjs/lmvz-select.cjs.entry.js +4 -4
  15. package/cjs/lmvz-toggle.cjs.entry.js +7 -5
  16. package/cjs/loader.cjs.js +2 -2
  17. package/cjs/{reactive-controller-host-BOFg4vL-.js → reactive-controller-host-DrtMkMd7.js} +1 -1
  18. package/collection/collection-manifest.json +2 -1
  19. package/collection/components/lmvz-button/lmvz-button.css +35 -27
  20. package/collection/components/lmvz-button/lmvz-button.js +1 -1
  21. package/collection/components/lmvz-button-group/lmvz-button-group.css +1 -1
  22. package/collection/components/lmvz-card/lmvz-card.css +35 -27
  23. package/collection/components/lmvz-checkbox/lmvz-checkbox.css +20 -19
  24. package/collection/components/lmvz-checkbox/lmvz-checkbox.js +2 -2
  25. package/collection/components/lmvz-chip/lmvz-chip.css +3 -3
  26. package/collection/components/lmvz-input/lmvz-input.css +17 -17
  27. package/collection/components/lmvz-menuitem/lmvz-menuitem.css +14 -10
  28. package/collection/components/lmvz-modal/lmvz-modal.css +40 -18
  29. package/collection/components/lmvz-modal/lmvz-modal.js +2 -2
  30. package/collection/components/lmvz-radio/lmvz-radio.css +182 -0
  31. package/collection/components/lmvz-radio/lmvz-radio.js +487 -0
  32. package/collection/components/lmvz-select/lmvz-select.css +15 -11
  33. package/collection/components/lmvz-select/lmvz-select.js +1 -1
  34. package/collection/components/lmvz-toggle/lmvz-toggle.css +16 -17
  35. package/collection/components/lmvz-toggle/lmvz-toggle.js +3 -3
  36. package/collection/integration/header-integration/header-integration.js +1 -1
  37. package/collection/styles/fragments/_focus-within.css +13 -0
  38. package/collection/utils/radio/radio-group-controller.js +160 -0
  39. package/components/index.d.ts +2 -0
  40. package/components/index.d.ts.bak +2 -0
  41. package/components/index.js +1 -1
  42. package/components/lmvz-action.js +1 -1
  43. package/components/lmvz-button-group.js +1 -1
  44. package/components/lmvz-button.js +1 -1
  45. package/components/lmvz-card.js +1 -1
  46. package/components/lmvz-checkbox.js +1 -1
  47. package/components/lmvz-chip.js +1 -1
  48. package/components/lmvz-header.js +1 -1
  49. package/components/lmvz-icon.js +1 -1
  50. package/components/lmvz-input.js +1 -1
  51. package/components/lmvz-menuitem.js +1 -1
  52. package/components/lmvz-modal.js +1 -1
  53. package/components/lmvz-radio.d.ts +11 -0
  54. package/components/lmvz-radio.d.ts.bak +11 -0
  55. package/components/lmvz-radio.js +1 -0
  56. package/components/lmvz-select.js +1 -1
  57. package/components/lmvz-toggle.js +1 -1
  58. package/components/p-Bb-kEOmU.js +1 -0
  59. package/components/{p-Cg2XX_J-.js → p-CCcoDnH-.js} +1 -1
  60. package/components/{p-slgmfnHm.js → p-CNmHnJ1D.js} +1 -1
  61. package/components/p-vUYpZZoR.js +1 -0
  62. package/esm/{index-Aa_425iY.js → index-CKYszC64.js} +1 -1
  63. package/esm/lmvz-action.entry.js +1 -1
  64. package/esm/lmvz-button_3.entry.js +5 -5
  65. package/esm/lmvz-card.entry.js +2 -2
  66. package/esm/lmvz-checkbox.entry.js +5 -5
  67. package/esm/lmvz-chip.entry.js +3 -3
  68. package/esm/lmvz-components.js +4 -4
  69. package/esm/lmvz-header_2.entry.js +2 -2
  70. package/esm/lmvz-input.entry.js +3 -3
  71. package/esm/lmvz-menuitem.entry.js +3 -3
  72. package/esm/lmvz-modal.entry.js +5 -5
  73. package/esm/lmvz-radio.entry.js +332 -0
  74. package/esm/lmvz-select.entry.js +4 -4
  75. package/esm/lmvz-toggle.entry.js +7 -5
  76. package/esm/loader.js +3 -3
  77. package/esm/{reactive-controller-host-CroMsXdS.js → reactive-controller-host-ZrGf1F2-.js} +1 -1
  78. package/hydrate/index.js +372 -20
  79. package/hydrate/index.mjs +372 -20
  80. package/lmvz-components/lmvz-components.esm.js +1 -1
  81. package/lmvz-components/{p-d1dacf7e.entry.js → p-01aeca60.entry.js} +1 -1
  82. package/lmvz-components/p-0dced359.entry.js +1 -0
  83. package/lmvz-components/{p-f6d1d9df.entry.js → p-2044a9ac.entry.js} +1 -1
  84. package/lmvz-components/p-3c2adbb4.entry.js +1 -0
  85. package/lmvz-components/p-3df070b0.entry.js +1 -0
  86. package/lmvz-components/p-758078db.entry.js +1 -0
  87. package/lmvz-components/p-90f5a19d.entry.js +1 -0
  88. package/lmvz-components/{p-BRl6zKXT.js → p-CwX1wKkM.js} +1 -1
  89. package/lmvz-components/p-acfeae08.entry.js +1 -0
  90. package/lmvz-components/p-c01a6c70.entry.js +1 -0
  91. package/lmvz-components/p-e1eaa7a2.entry.js +1 -0
  92. package/lmvz-components/p-e23d0054.entry.js +1 -0
  93. package/lmvz-components/p-fe607f10.entry.js +1 -0
  94. package/manifest.json +416 -3
  95. package/package.json +5 -1
  96. package/types/components/lmvz-radio/lmvz-radio.d.ts +42 -0
  97. package/types/components.d.ts +176 -0
  98. package/types/stencil-public-runtime.d.ts +1 -0
  99. package/types/utils/radio/radio-group-controller.d.ts +26 -0
  100. package/assets/icons/checkmark.svg +0 -4
  101. package/assets/icons/close-sm.svg +0 -3
  102. package/collection/assets/icons/checkmark.svg +0 -4
  103. package/collection/assets/icons/close-sm.svg +0 -3
  104. package/components/p-DSvYtVoD.js +0 -1
  105. package/components/p-K_EPq-vy.js +0 -1
  106. package/lmvz-components/p-05896617.entry.js +0 -1
  107. package/lmvz-components/p-267344a7.entry.js +0 -1
  108. package/lmvz-components/p-2b09b8bc.entry.js +0 -1
  109. package/lmvz-components/p-3846ba08.entry.js +0 -1
  110. package/lmvz-components/p-3df92762.entry.js +0 -1
  111. package/lmvz-components/p-5f550b9f.entry.js +0 -1
  112. package/lmvz-components/p-8e43fabb.entry.js +0 -1
  113. package/lmvz-components/p-f7f32879.entry.js +0 -1
  114. package/lmvz-components/p-fa4e00cf.entry.js +0 -1
  115. /package/components/{p-CK8cAKcB.js → p-DYr7Jc0V.js} +0 -0
  116. /package/lmvz-components/{p-Aa_425iY.js → p-CKYszC64.js} +0 -0
@@ -5,31 +5,35 @@
5
5
  * Important: Always import this file _before_ layering your own styles!
6
6
  */
7
7
  @layer lmvz-ds.theme {
8
+ /**
9
+ * !CAUTION: Changes to this file have to be manually synced into `/packages/styles/src/no-transform/router-font.css`
10
+ */
11
+
8
12
  @font-face {
9
13
  font-family: Router;
10
14
  src:
15
+ local('RouterBook-Regular'),
11
16
  local('Router-Book'),
12
- url('/assets/fonts/Router-Book.woff') format('woff'),
13
- local('Router');
14
- font-weight: 400 normal;
17
+ url('/assets/fonts/Router-Book.woff') format('woff');
18
+ font-weight: 400;
15
19
  }
16
20
 
17
21
  @font-face {
18
22
  font-family: Router;
19
23
  src:
24
+ local('RouterMedium-Regular'),
20
25
  local('Router-Medium'),
21
- url('/assets/fonts/Router-Medium.woff') format('woff'),
22
- local('Router');
26
+ url('/assets/fonts/Router-Medium.woff') format('woff');
23
27
  font-weight: 500;
24
28
  }
25
29
 
26
30
  @font-face {
27
31
  font-family: Router;
28
32
  src:
33
+ local('RouterBold-Regular'),
29
34
  local('Router-Bold'),
30
- url('/assets/fonts/Router-Bold.woff') format('woff'),
31
- local('Router');
32
- font-weight: 700 bold;
35
+ url('/assets/fonts/Router-Bold.woff') format('woff');
36
+ font-weight: 700;
33
37
  }
34
38
 
35
39
  }
@@ -62,6 +66,9 @@ dialog {
62
66
  border: none;
63
67
  padding: 0;
64
68
  background: transparent;
69
+ height: 100vh;
70
+ width: 100vw;
71
+ contain: layout size;
65
72
  }
66
73
  dialog::backdrop {
67
74
  /* TODO(LDHCID-135): Missing token for the modal backdrop color */
@@ -70,18 +77,23 @@ dialog::backdrop {
70
77
  background: rgb(from var(--lmvz-semantic-color-int-primary, #000000) r g b / 0.29);
71
78
  }
72
79
  .modal-shell {
73
- position: relative;
80
+ margin-inline: auto;
81
+ top: 50%;
82
+ transform: translateY(-50%);
83
+
84
+ box-sizing: border-box;
85
+ width: fit-content;
86
+ max-height: 100%;
87
+ max-width: clamp(20rem, 100%, 90vw);
88
+
74
89
  display: flex;
75
90
  flex-direction: column;
76
- inline-size: fit-content;
77
- max-inline-size: clamp(40rem, 100%, 80vw);
78
91
  gap: var(--lmvz-modal-shell-gap);
79
- padding-block: var(--lmvz-component-modal-padding-y, clamp(2.25rem, 2.19rem + 0.26vw, 2.5rem));
80
- padding-inline: var(--lmvz-component-modal-padding-x, clamp(1.5rem, 1.14rem + 1.55vw, 3rem));
81
- border-radius: var(--lmvz-component-modal-border-radius, 18px);
92
+ padding: var(--lmvz-component-card-lg-padding-y, clamp(2.25rem, 2.19rem + 0.26vw, 2.5rem)) var(--lmvz-component-card-lg-padding-x, clamp(1.5rem, 1.14rem + 1.55vw, 3rem));
93
+ border-radius: var(--lmvz-component-card-lg-border-radius, 18px);
82
94
  background: var(--lmvz-semantic-color-surface-primary, #ffffff);
83
- /* TODO(LDHCID-135): clarify overflow behaviour */
84
- overflow: auto;
95
+
96
+ position: relative;
85
97
 
86
98
  .close-button {
87
99
  position: absolute;
@@ -89,9 +101,16 @@ dialog::backdrop {
89
101
  right: var(--lmvz-dimension-10-12, clamp(0.63rem, 0.59rem + 0.13vw, 0.75rem));
90
102
  }
91
103
  }
92
- @media (min-width: 768px) {
104
+ @media (max-width: 402px) {
105
+ dialog {
106
+ margin: 0;
107
+ max-width: unset;
108
+ max-height: unset;
109
+ }
93
110
  .modal-shell {
94
- max-inline-size: 100vw;
111
+ max-width: 100vw;
112
+ border-radius: 0;
113
+ height: 100%;
95
114
  }
96
115
  }
97
116
  .header {
@@ -111,4 +130,7 @@ dialog::backdrop {
111
130
  .body {
112
131
  font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
113
132
  Router);
133
+ flex: 1;
134
+ overflow: scroll;
135
+ /* min-block-size: clamp(8rem, 40vw, 60vh); */
114
136
  }
@@ -1,6 +1,6 @@
1
+ import closeIcon from "@lmvz-ds/icons/assets/close-sm.svg";
1
2
  import { toValidSvgStringWithFallback } from "@lmvz-ds/lib-ts/validation/svg.js";
2
3
  import { Host, h } from "@stencil/core";
3
- import closeIcon from "../../assets/icons/close-sm.svg";
4
4
  import { AriaValidationController } from "../../utils/aria/aria-validation-controller";
5
5
  import { getDeepActiveElement, inheritAriaAttributes } from "../../utils/component";
6
6
  import { ReactiveControllerHost } from "../../utils/reactive-controller-host";
@@ -223,7 +223,7 @@ export class LmvzModal extends ReactiveControllerHost {
223
223
  this.hasHeader = this.hasAssignedContent(this.headerSlot);
224
224
  };
225
225
  render() {
226
- return (h(Host, { key: 'f014c692b82fae6dd96dffdbda4043aa9174004f' }, h("dialog", { key: '8939eda4aba44f1b6c9e8983cacddba83f668692', ref: (element) => (this.dialogEl = element), onCancel: this.handleDialogCancel, onClose: this.handleDialogClose, ...this.dialogAccessibilityAttributes }, h("div", { key: '93f43c5f7c258494c86f9604b7eeac0046f912d6', class: "modal-shell" }, h("header", { key: '2e8177a5e0812007fede430533e6a0aa9b7bc0ea', class: { header: true, 'has-title': this.hasHeader } }, h("div", { key: 'fb4b537386077b837758f4b61c45433ad6c747cc', class: "title", id: this.dialogTitleId, hidden: !this.hasHeader }, h("slot", { key: '2507b2b7af3b18e859e87b7d682bdf189c4df53d', name: "header", ref: (element) => (this.headerSlot = element), onSlotchange: this.handleHeaderSlotChange })), h("lmvz-button", { key: '5e4bcd8771babae9a9dc34fc908eb9210639a497', ref: (element) => (this.closeButtonEl = element), type: "button", class: "close-button", "aria-label": this.closeLabel, onClick: this.handleCloseButtonClick, variant: "tertiary" }, h("lmvz-icon", { key: '32aada0eea679fd1610eb704ac02cca1f27168ff', icon: closeIconSvg }))), h("div", { key: '1dc811f3edcd9ab1611483c90345483fee94b318', class: "body" }, h("slot", { key: 'cf870234c54d659cdd85d1a736626707f65cca4a' })), h("footer", { key: 'c2ed7badb41a09d1187af2221f33fc2a87bcb606', class: "actions", hidden: !this.buttonGroupEl?.hasActions }, h("lmvz-button-group", { key: 'c4846b44ff94b0411d79d88b3bb8447dd2a5967a', ref: (element) => (this.buttonGroupEl = element) }, h("slot", { key: '3aa5aa7b3a5d68c5c3c2da1739bee57316db07ff', name: "actions" })))))));
226
+ return (h(Host, { key: '1fbdbb1ab2d3ad423075465108d4ff807d07404e' }, h("dialog", { key: '622dd60366ad594e16471cc8921c97d23af14ccb', ref: (element) => (this.dialogEl = element), onCancel: this.handleDialogCancel, onClose: this.handleDialogClose, ...this.dialogAccessibilityAttributes }, h("div", { key: 'bcdfbefbd5f380e2bf946aed479d542a33927af1', class: "modal-shell" }, h("header", { key: 'dcd23467473d58b51bddaf613b3ac8c922eecdc6', class: { header: true, 'has-title': this.hasHeader } }, h("div", { key: 'b2aa21fda4a80d2ea003e6ec876c2b74df5d29fd', class: "title", id: this.dialogTitleId, hidden: !this.hasHeader }, h("slot", { key: 'b7238e5b24c0822a94087d4ff0567e6406542c73', name: "header", ref: (element) => (this.headerSlot = element), onSlotchange: this.handleHeaderSlotChange })), h("lmvz-button", { key: '5059671fb4d81c685becd3adb0be52dd92ec4dec', ref: (element) => (this.closeButtonEl = element), type: "button", class: "close-button", "aria-label": this.closeLabel, onClick: this.handleCloseButtonClick, variant: "tertiary" }, h("lmvz-icon", { key: '498447e60e0e33fc165f39cea35434080e869d3c', icon: closeIconSvg }))), h("div", { key: '39ecefb52d5990cb689b0e4f18a8b6fc501c840d', class: "body" }, h("slot", { key: 'b014d0633c28fb6b399f11f2323e102949548776' })), h("footer", { key: '201dae98bcf810f369d77b7e9f36d7cc71ed5db4', class: "actions", hidden: !this.buttonGroupEl?.hasActions }, h("lmvz-button-group", { key: 'e4559d383992e059f915670a0874cc3b9ef655a3', ref: (element) => (this.buttonGroupEl = element) }, h("slot", { key: '88b007e139d4a166a2ee886dcd0256293d5d33c9', name: "actions" })))))));
227
227
  }
228
228
  static get is() { return "lmvz-modal"; }
229
229
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,182 @@
1
+
2
+ @layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides;
3
+ /**
4
+ * This defines the order of our lmvz-ds' CSS layers. See readme.md for details.
5
+ * Important: Always import this file _before_ layering your own styles!
6
+ */
7
+ @layer lmvz-ds.theme {
8
+ /**
9
+ * !CAUTION: Changes to this file have to be manually synced into `/packages/styles/src/no-transform/router-font.css`
10
+ */
11
+
12
+ @font-face {
13
+ font-family: Router;
14
+ src:
15
+ local('RouterBook-Regular'),
16
+ local('Router-Book'),
17
+ url('/assets/fonts/Router-Book.woff') format('woff');
18
+ font-weight: 400;
19
+ }
20
+
21
+ @font-face {
22
+ font-family: Router;
23
+ src:
24
+ local('RouterMedium-Regular'),
25
+ local('Router-Medium'),
26
+ url('/assets/fonts/Router-Medium.woff') format('woff');
27
+ font-weight: 500;
28
+ }
29
+
30
+ @font-face {
31
+ font-family: Router;
32
+ src:
33
+ local('RouterBold-Regular'),
34
+ local('Router-Bold'),
35
+ url('/assets/fonts/Router-Bold.woff') format('woff');
36
+ font-weight: 700;
37
+ }
38
+
39
+ }
40
+ :host {
41
+ display: inline-block;
42
+
43
+ --radio-circle-size: var(--lmvz-global-s18, 18px);
44
+ --radio-dot-size: 0.5rem;
45
+
46
+ --radio-bg: var(--lmvz-semantic-color-surface-input-primary, #ffffff);
47
+ --radio-border-color: var(--lmvz-semantic-color-border-default, #e0e0e0);
48
+ --radio-border-color-hover: var(--lmvz-semantic-color-border-hover, #c7c7c7);
49
+ --radio-border-color-checked: var(--lmvz-semantic-color-border-active, #0f8acc);
50
+ --radio-border-color-error: var(--lmvz-semantic-color-status-on-danger, #e52a31);
51
+ --radio-dot-color: var(--lmvz-semantic-color-border-active, #0f8acc);
52
+
53
+ --radio-wrapper-bg-hover: var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0);
54
+ --radio-wrapper-bg-active: var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0);
55
+
56
+ --radio-label-color: var(--lmvz-semantic-color-on-surface-primary, #000000);
57
+ --radio-label-color-checked: var(--lmvz-semantic-color-status-on-active, #0e7ab4);
58
+ --radio-helper-color: var(--lmvz-semantic-color-on-surface-secondary, #545454);
59
+
60
+ --radio-easing: var(--lmvz-global-easing-default, ease);
61
+ --radio-duration: 0.2s;
62
+
63
+ display: flex;
64
+ align-items: center;
65
+ gap: var(--lmvz-component-input-gap-md, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
66
+ padding-block: var(--lmvz-dimension-2-8, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem));
67
+ padding-inline: var(--lmvz-dimension-8-12, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem));
68
+ border-radius: var(--lmvz-semantic-border-radius-round, 999px);
69
+ overflow: clip;
70
+ cursor: pointer;
71
+ background-color: transparent;
72
+ position: relative;
73
+ transition: background-color var(--radio-duration) var(--radio-easing);
74
+ }
75
+ input {
76
+ position: absolute;
77
+ inset-block-start: var(--lmvz-dimension-2-8, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem));
78
+ inset-inline-start: var(--lmvz-dimension-4-10, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem));
79
+ opacity: 0;
80
+ width: var(--radio-circle-size);
81
+ height: var(--radio-circle-size);
82
+ margin: 0;
83
+ cursor: pointer;
84
+ z-index: 1;
85
+ }
86
+ .circle {
87
+ width: var(--radio-circle-size);
88
+ height: var(--radio-circle-size);
89
+ border-radius: 50%;
90
+ border: var(--lmvz-semantic-border-width-default, 1px) solid var(--radio-border-color);
91
+ background-color: var(--radio-bg);
92
+ pointer-events: none;
93
+ flex-shrink: 0;
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: center;
97
+ box-sizing: border-box;
98
+ transition: border-color var(--radio-duration) var(--radio-easing);
99
+ }
100
+ .dot {
101
+ width: var(--radio-dot-size);
102
+ height: var(--radio-dot-size);
103
+ border-radius: 50%;
104
+ background-color: var(--radio-dot-color);
105
+ }
106
+ .content {
107
+ display: flex;
108
+ flex-direction: column;
109
+ overflow-wrap: break-word;
110
+ min-width: 0;
111
+ }
112
+ label {
113
+ font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
114
+ Router);
115
+ color: var(--radio-label-color);
116
+ cursor: pointer;
117
+ transition: color var(--radio-duration) var(--radio-easing);
118
+ }
119
+ .helper-text {
120
+ display: block;
121
+ font: var(--lmvz-typography-body-sm, 400 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.4
122
+ Router);
123
+ color: var(--radio-helper-color);
124
+ margin-block-start: 2px;
125
+ }
126
+ .helper-text:empty {
127
+ display: none;
128
+ }
129
+ /* Hover state, guarded to prevent sticky hover on touch devices */
130
+ @media (hover: hover) {
131
+ :host(:hover) .circle {
132
+ border-color: var(--radio-border-color-hover);
133
+ }
134
+
135
+ :host(:hover) {
136
+ background-color: var(--radio-wrapper-bg-hover);
137
+ }
138
+ }
139
+ /* Active state */
140
+ :host(:active) {
141
+ background-color: var(--radio-wrapper-bg-active);
142
+ }
143
+ /* Checked state */
144
+ :host([checked]) .circle {
145
+ border-color: var(--radio-border-color-checked);
146
+ }
147
+ :host([checked]) label {
148
+ color: var(--radio-label-color-checked);
149
+ }
150
+ /* Error state. MUST appear AFTER checked state rules (error takes visual precedence) */
151
+ :host([error]) .circle {
152
+ border-color: var(--radio-border-color-error);
153
+ }
154
+ :host([error]) .helper-text {
155
+ color: var(--lmvz-semantic-color-status-on-danger, #e52a31);
156
+ }
157
+ /* Disabled state */
158
+ :host([disabled]) {
159
+ opacity: var(--lmvz-component-input-disabled-opacity, 40%);
160
+ pointer-events: none;
161
+ cursor: not-allowed;
162
+ }
163
+ /* Forced Colors / Windows High Contrast */
164
+ @media (forced-colors: active) {
165
+ .circle {
166
+ forced-color-adjust: auto;
167
+ border-color: ButtonText;
168
+ background-color: Field;
169
+ }
170
+
171
+ :host([checked]) .circle {
172
+ border-color: Highlight;
173
+ }
174
+
175
+ .dot {
176
+ background-color: ButtonText;
177
+ }
178
+
179
+ :host([checked]) .dot {
180
+ background-color: HighlightText;
181
+ }
182
+ }