@lmvz-ds/components 0.25.0 → 0.27.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 (158) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/cjs/{reactive-controller-host-DrtMkMd7.js → aria-validation-controller-BMV2tv9-.js} +0 -41
  3. package/cjs/{ds.constants-DSnxZ3ia.js → ds.constants-8fh6ItAF.js} +1 -1
  4. package/cjs/index.cjs.js +196 -2
  5. package/cjs/list-keyboard-controller-CzZdPBeH.js +173 -0
  6. package/cjs/lmvz-button-group.cjs.entry.js +183 -0
  7. package/cjs/lmvz-button_2.cjs.entry.js +199 -0
  8. package/cjs/lmvz-card.cjs.entry.js +1 -1
  9. package/cjs/lmvz-checkbox.cjs.entry.js +8 -4
  10. package/cjs/lmvz-chip.cjs.entry.js +5 -4
  11. package/cjs/lmvz-components.cjs.js +1 -1
  12. package/cjs/lmvz-header_2.cjs.entry.js +7 -51
  13. package/cjs/lmvz-input.cjs.entry.js +3 -2
  14. package/cjs/lmvz-menuitem.cjs.entry.js +4 -3
  15. package/cjs/lmvz-modal.cjs.entry.js +4 -3
  16. package/cjs/lmvz-radio.cjs.entry.js +4 -3
  17. package/cjs/lmvz-select.cjs.entry.js +3 -2
  18. package/cjs/lmvz-snackbar.cjs.entry.js +83 -0
  19. package/cjs/lmvz-tab.cjs.entry.js +31 -0
  20. package/cjs/lmvz-tabs.cjs.entry.js +256 -0
  21. package/cjs/lmvz-toggle.cjs.entry.js +5 -4
  22. package/cjs/loader.cjs.js +1 -1
  23. package/cjs/reactive-controller-host-B_lZtcA6.js +43 -0
  24. package/collection/api/ds.constants.js +4 -1
  25. package/collection/collection-manifest.json +3 -0
  26. package/collection/components/lmvz-button/lmvz-button.css +6 -6
  27. package/collection/components/lmvz-button-group/lmvz-button-group.css +2 -2
  28. package/collection/components/lmvz-card/lmvz-card.css +9 -9
  29. package/collection/components/lmvz-checkbox/lmvz-checkbox.css +14 -12
  30. package/collection/components/lmvz-checkbox/lmvz-checkbox.js +4 -1
  31. package/collection/components/lmvz-chip/lmvz-chip.css +2 -2
  32. package/collection/components/lmvz-header/lmvz-header.js +3 -3
  33. package/collection/components/lmvz-icon/lmvz-icon.js +1 -1
  34. package/collection/components/lmvz-menuitem/lmvz-menuitem.css +1 -1
  35. package/collection/components/lmvz-modal/lmvz-modal.css +4 -16
  36. package/collection/components/lmvz-radio/lmvz-radio.css +4 -4
  37. package/collection/components/lmvz-snackbar/lmvz-snackbar.css +101 -0
  38. package/collection/components/lmvz-snackbar/lmvz-snackbar.js +266 -0
  39. package/collection/components/lmvz-snackbar/public.js +1 -0
  40. package/collection/components/lmvz-snackbar/snackbar-controller.js +194 -0
  41. package/collection/components/lmvz-tab/lmvz-tab.css +148 -0
  42. package/collection/components/lmvz-tab/lmvz-tab.js +125 -0
  43. package/collection/components/lmvz-tabs/lmvz-tabs.css +58 -0
  44. package/collection/components/lmvz-tabs/lmvz-tabs.js +399 -0
  45. package/collection/components/lmvz-toggle/lmvz-toggle.css +2 -2
  46. package/collection/components/lmvz-toggle/lmvz-toggle.js +1 -1
  47. package/collection/index.js +1 -0
  48. package/collection/integration/header-integration/header-integration.js +1 -1
  49. package/collection/utils/aria/list-keyboard-controller.js +151 -28
  50. package/components/index.d.ts +6 -0
  51. package/components/index.d.ts.bak +6 -0
  52. package/components/index.js +1 -1
  53. package/components/lmvz-action.js +1 -1
  54. package/components/lmvz-button-group.js +1 -1
  55. package/components/lmvz-button.js +1 -1
  56. package/components/lmvz-card.js +1 -1
  57. package/components/lmvz-checkbox.js +1 -1
  58. package/components/lmvz-chip.js +1 -1
  59. package/components/lmvz-header.js +1 -1
  60. package/components/lmvz-icon.js +1 -1
  61. package/components/lmvz-input.js +1 -1
  62. package/components/lmvz-menuitem.js +1 -1
  63. package/components/lmvz-modal.js +1 -1
  64. package/components/lmvz-radio.js +1 -1
  65. package/components/lmvz-select.js +1 -1
  66. package/components/lmvz-snackbar.d.ts +11 -0
  67. package/components/lmvz-snackbar.d.ts.bak +11 -0
  68. package/components/lmvz-snackbar.js +1 -0
  69. package/components/lmvz-tab.d.ts +11 -0
  70. package/components/lmvz-tab.d.ts.bak +11 -0
  71. package/components/lmvz-tab.js +1 -0
  72. package/components/lmvz-tabs.d.ts +11 -0
  73. package/components/lmvz-tabs.d.ts.bak +11 -0
  74. package/components/lmvz-tabs.js +1 -0
  75. package/components/lmvz-toggle.js +1 -1
  76. package/components/p-0P2Wb3pE.js +1 -0
  77. package/components/p-2VdcUIrr.js +1 -0
  78. package/components/p-BJEQw1Sz.js +1 -0
  79. package/components/{p-Bb-kEOmU.js → p-Cs7RCOHZ.js} +1 -1
  80. package/components/p-CtaMrBNE.js +1 -0
  81. package/components/p-DjvbwRyl.js +1 -0
  82. package/components/{p-DYr7Jc0V.js → p-c7OzBK8f.js} +1 -1
  83. package/esm/{reactive-controller-host-ZrGf1F2-.js → aria-validation-controller-D-KO0Asb.js} +1 -41
  84. package/esm/{ds.constants-Bmi89ll1.js → ds.constants-BOOwq5dE.js} +1 -1
  85. package/esm/index.js +198 -1
  86. package/esm/list-keyboard-controller-Coi8XfUH.js +171 -0
  87. package/esm/lmvz-button-group.entry.js +181 -0
  88. package/esm/lmvz-button_2.entry.js +196 -0
  89. package/esm/lmvz-card.entry.js +1 -1
  90. package/esm/lmvz-checkbox.entry.js +7 -3
  91. package/esm/lmvz-chip.entry.js +4 -3
  92. package/esm/lmvz-components.js +1 -1
  93. package/esm/lmvz-header_2.entry.js +6 -50
  94. package/esm/lmvz-input.entry.js +2 -1
  95. package/esm/lmvz-menuitem.entry.js +3 -2
  96. package/esm/lmvz-modal.entry.js +3 -2
  97. package/esm/lmvz-radio.entry.js +3 -2
  98. package/esm/lmvz-select.entry.js +2 -1
  99. package/esm/lmvz-snackbar.entry.js +81 -0
  100. package/esm/lmvz-tab.entry.js +29 -0
  101. package/esm/lmvz-tabs.entry.js +254 -0
  102. package/esm/lmvz-toggle.entry.js +4 -3
  103. package/esm/loader.js +1 -1
  104. package/esm/reactive-controller-host-FBuCCcFC.js +41 -0
  105. package/hydrate/index.js +565 -40
  106. package/hydrate/index.mjs +565 -40
  107. package/lmvz-components/index.esm.js +1 -1
  108. package/lmvz-components/lmvz-components.esm.js +1 -1
  109. package/lmvz-components/p-0a37e0f2.entry.js +1 -0
  110. package/lmvz-components/p-25f045b2.entry.js +1 -0
  111. package/lmvz-components/p-43b463bf.entry.js +1 -0
  112. package/lmvz-components/p-4bd71a3c.entry.js +1 -0
  113. package/lmvz-components/p-6484fbc6.entry.js +1 -0
  114. package/lmvz-components/p-6988c3ea.entry.js +1 -0
  115. package/lmvz-components/p-6de9981f.entry.js +1 -0
  116. package/lmvz-components/p-758dbb82.entry.js +1 -0
  117. package/lmvz-components/p-7b15cdce.entry.js +1 -0
  118. package/lmvz-components/p-8874ff19.entry.js +1 -0
  119. package/lmvz-components/p-BOOwq5dE.js +1 -0
  120. package/lmvz-components/p-CtaMrBNE.js +1 -0
  121. package/lmvz-components/p-FBuCCcFC.js +1 -0
  122. package/lmvz-components/p-a5c921dc.entry.js +1 -0
  123. package/lmvz-components/p-bb46a884.entry.js +1 -0
  124. package/lmvz-components/p-bd23eab3.entry.js +1 -0
  125. package/lmvz-components/p-c6228cee.entry.js +1 -0
  126. package/lmvz-components/p-da16ff58.entry.js +1 -0
  127. package/lmvz-components/p-hRb38wX6.js +1 -0
  128. package/manifest.json +858 -186
  129. package/package.json +13 -1
  130. package/types/api/ds.constants.d.ts +9 -1
  131. package/types/components/lmvz-checkbox/lmvz-checkbox.d.ts +1 -0
  132. package/types/components/lmvz-header/lmvz-header.d.ts +2 -2
  133. package/types/components/lmvz-snackbar/lmvz-snackbar.d.ts +21 -0
  134. package/types/components/lmvz-snackbar/public.d.ts +2 -0
  135. package/types/components/lmvz-snackbar/snackbar-controller.d.ts +32 -0
  136. package/types/components/lmvz-tab/lmvz-tab.d.ts +11 -0
  137. package/types/components/lmvz-tabs/lmvz-tabs.d.ts +43 -0
  138. package/types/components.d.ts +212 -1
  139. package/types/index.d.ts +1 -0
  140. package/types/utils/aria/list-keyboard-controller.d.ts +28 -5
  141. package/cjs/lmvz-button_3.cjs.entry.js +0 -375
  142. package/components/p-CCcoDnH-.js +0 -1
  143. package/components/p-CNmHnJ1D.js +0 -1
  144. package/components/p-vUYpZZoR.js +0 -1
  145. package/esm/lmvz-button_3.entry.js +0 -371
  146. package/lmvz-components/p-01aeca60.entry.js +0 -1
  147. package/lmvz-components/p-0dced359.entry.js +0 -1
  148. package/lmvz-components/p-2044a9ac.entry.js +0 -1
  149. package/lmvz-components/p-3c2adbb4.entry.js +0 -1
  150. package/lmvz-components/p-3df070b0.entry.js +0 -1
  151. package/lmvz-components/p-758078db.entry.js +0 -1
  152. package/lmvz-components/p-90f5a19d.entry.js +0 -1
  153. package/lmvz-components/p-Bmi89ll1.js +0 -1
  154. package/lmvz-components/p-CwX1wKkM.js +0 -1
  155. package/lmvz-components/p-acfeae08.entry.js +0 -1
  156. package/lmvz-components/p-c01a6c70.entry.js +0 -1
  157. package/lmvz-components/p-e1eaa7a2.entry.js +0 -1
  158. package/lmvz-components/p-e23d0054.entry.js +0 -1
@@ -1,8 +1,8 @@
1
1
  :host {
2
2
  display: flex;
3
3
  justify-content: flex-end;
4
- gap: var(--lmvz-component-input-gap-md, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
5
- font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
4
+ gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem));
5
+ font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5
6
6
  Router);
7
7
 
8
8
  /* TODO(LDHCID-135): Action wrapping threshold remains an assumption and currently follows intrinsic content width */
@@ -65,9 +65,9 @@ h6 {
65
65
  --lmvz-button-color: var(--lmvz-component-color, var(--lmvz-semantic-color-int-on-secondary, #000000));
66
66
  --lmvz-button-padding-inline: var(--lmvz-button-padding, var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)));
67
67
  --lmvz-button-padding-block: var(--lmvz-button-padding, var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)));
68
- --lmvz-button-gap: var(--lmvz-component-input-gap-md, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
68
+ --lmvz-button-gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem));
69
69
  --lmvz-button-min-height: var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem));
70
- --lmvz-button-font: var(--lmvz-typography-body-md-strong, 500 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
70
+ --lmvz-button-font: var(--lmvz-typography-body-md-strong, 500 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5
71
71
  Router);
72
72
  --lmvz-button-radius: var(--lmvz-component-input-radius-default, 999px);
73
73
  --lmvz-button-border-width: 0;
@@ -177,18 +177,18 @@ button.tertiary:not([disabled], .disabled):active {
177
177
  button.small {
178
178
  --lmvz-button-padding-inline: var(--lmvz-component-input-padding-sm, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem));
179
179
  --lmvz-button-padding-block: var(--lmvz-component-input-padding-sm, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem));
180
- --lmvz-button-gap: var(--lmvz-component-input-gap-sm, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem));
180
+ --lmvz-button-gap: var(--lmvz-component-input-gap-sm, clamp(0.38rem, 0.31rem + 0.26vw, 0.63rem));
181
181
  --lmvz-button-min-height: var(--lmvz-component-input-size-sm, clamp(2rem, 1.94rem + 0.26vw, 2.25rem));
182
- --lmvz-button-font: var(--lmvz-typography-body-sm-strong, 500 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.4
182
+ --lmvz-button-font: var(--lmvz-typography-body-sm-strong, 500 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.5
183
183
  Router);
184
184
  }
185
185
 
186
186
  button.large {
187
187
  --lmvz-button-padding-inline: var(--lmvz-component-input-padding-lg, clamp(1rem, 0.94rem + 0.26vw, 1.25rem));
188
188
  --lmvz-button-padding-block: var(--lmvz-component-input-padding-lg, clamp(1rem, 0.94rem + 0.26vw, 1.25rem));
189
- --lmvz-button-gap: var(--lmvz-component-input-gap-lg, clamp(1rem, 0.94rem + 0.26vw, 1.25rem));
189
+ --lmvz-button-gap: var(--lmvz-component-input-gap-lg, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
190
190
  --lmvz-button-min-height: var(--lmvz-component-input-size-lg, clamp(2.75rem, 2.69rem + 0.26vw, 3rem));
191
- --lmvz-button-font: var(--lmvz-typography-body-lg-strong, 500 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.4
191
+ --lmvz-button-font: var(--lmvz-typography-body-lg-strong, 500 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.5
192
192
  Router);
193
193
  }
194
194
 
@@ -205,7 +205,7 @@ button.large {
205
205
  }
206
206
  * {
207
207
  color: var(--lmvz-semantic-color-on-surface-primary, #000000);
208
- font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
208
+ font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5
209
209
  Router);
210
210
  }
211
211
  .top {
@@ -233,7 +233,7 @@ button.large {
233
233
 
234
234
  padding-bottom: var(--lmvz-global-s4, 4px);
235
235
  overflow-wrap: break-word;
236
- font: var(--lmvz-typography-heading-2xl, 500 clamp(2.25rem, 2.13rem + 0.52vw, 2.75rem) / 1.2
236
+ font: var(--lmvz-typography-heading-2xl, 500 clamp(2.25rem, 2.13rem + 0.52vw, 2.75rem) / 1.4
237
237
  Router);
238
238
  }
239
239
  .description {
@@ -243,7 +243,7 @@ button.large {
243
243
  align-items: flex-start;
244
244
  align-self: stretch;
245
245
  white-space: pre-line;
246
- font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
246
+ font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5
247
247
  Router);
248
248
  }
249
249
  .image-wrapper {
@@ -58,7 +58,7 @@
58
58
 
59
59
  --checkbox-label-color: var(--lmvz-semantic-color-on-surface-primary, #000000);
60
60
  --checkbox-label-color-checked: var(--lmvz-semantic-color-status-on-active, #0e7ab4);
61
- --checkbox-helper-color: var(--lmvz-semantic-color-on-surface-secondary, #545454);
61
+ --checkbox-helper-color: var(--lmvz-semantic-color-on-surface-secondary, #7a7a7a);
62
62
  --checkbox-error-color: var(--lmvz-semantic-color-status-on-danger, #e52a31);
63
63
  --checkbox-focus-color: var(--lmvz-semantic-color-status-on-active, #0e7ab4);
64
64
 
@@ -72,7 +72,6 @@
72
72
  padding-block: var(--lmvz-dimension-2-8, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem));
73
73
  padding-inline: var(--lmvz-dimension-4-10, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem));
74
74
  border-radius: var(--lmvz-semantic-border-radius-round, 999px);
75
- cursor: pointer;
76
75
  /* WCAG 2.5.5 AAA: 44px minimum touch target */
77
76
  /* min-block-size: 44px; */
78
77
  text-decoration: none;
@@ -98,6 +97,7 @@ input {
98
97
  border: var(--lmvz-semantic-border-width-default, 1px) solid var(--checkbox-border-color);
99
98
  border-radius: var(--checkbox-border-radius);
100
99
  color: var(--checkbox-checkmark-color);
100
+ cursor: pointer;
101
101
  transition:
102
102
  border-color var(--checkbox-duration) var(--checkbox-easing),
103
103
  background-color var(--checkbox-duration) var(--checkbox-easing);
@@ -115,22 +115,24 @@ input {
115
115
  flex-direction: column;
116
116
  overflow-wrap: break-word;
117
117
  min-width: 0;
118
+ cursor: pointer;
118
119
  }
119
120
  label {
120
- font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
121
+ font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5
121
122
  Router);
122
123
  color: var(--checkbox-label-color);
123
124
  transition: color var(--checkbox-duration) var(--checkbox-easing);
125
+ cursor: pointer;
124
126
  }
125
127
  .helper-text {
126
- font: var(--lmvz-typography-body-sm, 400 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.4
128
+ font: var(--lmvz-typography-body-sm, 400 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.5
127
129
  Router);
128
130
  /* font-weight: 400 per DS token standard (body-sm). Note: lmvz-input.css [role='status'] incorrectly uses font-weight: 500 — DS inconsistency, see lmvz-input.css line ~153 */
129
131
  color: var(--checkbox-helper-color);
130
132
  margin-block-start: 2px;
131
133
  }
132
134
  .error-text {
133
- font: var(--lmvz-typography-body-sm, 400 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.4
135
+ font: var(--lmvz-typography-body-sm, 400 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.5
134
136
  Router);
135
137
  color: var(--checkbox-error-color);
136
138
  display: block;
@@ -165,16 +167,16 @@ label {
165
167
  :host([error]) .helper-text {
166
168
  color: var(--checkbox-error-color);
167
169
  }
168
- /* Disabled state */
169
170
  :host([disabled]) {
170
171
  opacity: var(--lmvz-component-input-disabled-opacity, 40%);
171
172
  pointer-events: none;
172
- }
173
- :host([disabled]) .pill {
174
- cursor: not-allowed;
175
- }
176
- :host([disabled]) input {
177
- cursor: not-allowed;
173
+
174
+ input,
175
+ label,
176
+ .box,
177
+ .content {
178
+ cursor: not-allowed;
179
+ }
178
180
  }
179
181
  :host(:focus-within) .pill {
180
182
  outline: var(--lmvz-ds-outline, 1px solid #0e7ab4);
@@ -82,8 +82,11 @@ export class LmvzCheckbox extends ReactiveControllerHost {
82
82
  this.checked = input.checked;
83
83
  this.lmvzChange.emit(this.checked);
84
84
  };
85
+ retargetInnerClicks() {
86
+ this.nativeInput?.click();
87
+ }
85
88
  render() {
86
- return (h(Host, { key: '158efacac5c28a18003149d4acb0d1cf5385cef4' }, h("div", { key: '5deaf853f9c465b70b7e5472579c5d5212105c34', class: "pill" }, h("input", { key: '7e8da452d41cd48293569ec60dad0585ff3290f1', type: "checkbox", id: this.checkboxId, checked: this.checkedState, disabled: this.disabled, required: this.required, "aria-required": this.required ? 'true' : 'false', "aria-invalid": this.error ? 'true' : 'false', "aria-describedby": this.ariaDescribedBy, "aria-errormessage": this.error && this.errorId ? this.errorId : undefined, ref: (el) => (this.nativeInput = el), onChange: this.handleChange, autoFocus: this.autofocus }), h("span", { key: 'd1ee72be8e3fc2b4e70ff64b70bfcec93f08f063', class: "box", "aria-hidden": "true" }, this.checkedState && h("span", { key: '73e123aa8c91e9098b4d8bbd48bbc7bae6c12383', class: "indicator", innerHTML: CHECKMARK_SVG })), h("span", { key: '2a161e6db9e792dca1fa24c1562bd0b79d62235b', class: "content" }, h("label", { key: 'fb38792095bf6da433867472d866d6700db45dac', htmlFor: this.checkboxId }, this.label), this.helperText && (h("span", { key: 'b8c16fc4782f67e1dca82329d081943a7d75a524', class: "helper-text", id: this.helperId, role: "status" }, this.helperText)))), this.errorMessage && (h("span", { key: '87d6940217d379777e26c578cff761dcfd96e79a', class: "error-text", id: this.errorId, role: "alert" }, this.errorMessage))));
89
+ return (h(Host, { key: 'cea4a962a76cab10c27adc6742fe0686b2ce6dbe' }, h("div", { key: '1addfd795587de85ecbc632fbeb45026a4e46050', class: "pill" }, h("input", { key: '8957359d0cc3f2c315badee7e20fcc81e85e0f00', type: "checkbox", id: this.checkboxId, checked: this.checkedState, disabled: this.disabled, required: this.required, "aria-required": this.required ? 'true' : 'false', "aria-invalid": this.error ? 'true' : 'false', "aria-describedby": this.ariaDescribedBy, "aria-errormessage": this.error && this.errorId ? this.errorId : undefined, ref: (el) => (this.nativeInput = el), onChange: this.handleChange, autoFocus: this.autofocus }), h("span", { key: '400dbe9379ceb4aceeb431fe6060c82b41009cda', class: "box", "aria-hidden": "true" }, this.checkedState && h("span", { key: '9612093e65346b419ec8e4469fea7f00fe4c3ff4', class: "indicator", innerHTML: CHECKMARK_SVG })), h("span", { key: 'fd1136ea0726941bc400b8970f7cae4bb3b59363', class: "content" }, h("label", { key: 'a06deb2d4bc76efb884701a17e4a28420a99965c', htmlFor: this.checkboxId }, this.label), this.helperText && (h("span", { key: '2bd33f14062bedbb0609dff3ac7fbcee6fa16f21', onClick: this.retargetInnerClicks.bind(this), class: "helper-text", id: this.helperId, role: "status" }, this.helperText)))), this.errorMessage && (h("span", { key: 'ac4fcb6f0a2de16a17f0287e42b70b6339a50acc', class: "error-text", id: this.errorId, role: "alert" }, this.errorMessage))));
87
90
  }
88
91
  static get is() { return "lmvz-checkbox"; }
89
92
  static get encapsulation() { return "scoped"; }
@@ -7,7 +7,7 @@
7
7
  padding-inline: var(--lmvz-dimension-8-10, clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem));
8
8
  border: 1px solid var(--lmvz-chip-border-color);
9
9
  border-radius: var(--lmvz-semantic-border-radius-round, 999px);
10
- font: var(--lmvz-typography-body-xs-strong, 500 clamp(0.63rem, 0.61rem + 0.06vw, 0.69rem) / 1.4
10
+ font: var(--lmvz-typography-body-xs-strong, 500 clamp(0.63rem, 0.61rem + 0.06vw, 0.69rem) / 1.5
11
11
  Router);
12
12
  background-color: var(--lmvz-chip-background-color);
13
13
  color: var(--lmvz-chip-foreground-color);
@@ -34,7 +34,7 @@
34
34
  :host([size='small']) {
35
35
  padding-block: var(--lmvz-dimension-2-4, clamp(0.13rem, 0.09rem + 0.13vw, 0.25rem));
36
36
  padding-inline: var(--lmvz-dimension-6-8, clamp(0.38rem, 0.34rem + 0.13vw, 0.5rem));
37
- font: var(--lmvz-typography-body-2xs-strong, 500 clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem) / 1.4
37
+ font: var(--lmvz-typography-body-2xs-strong, 500 clamp(0.5rem, 0.47rem + 0.13vw, 0.63rem) / 1.5
38
38
  Router);
39
39
  gap: var(--lmvz-dimension-2-4, clamp(0.13rem, 0.09rem + 0.13vw, 0.25rem));
40
40
  }
@@ -1,6 +1,6 @@
1
1
  import { h, Host } from "@stencil/core";
2
2
  import { AriaValidationController } from "../../utils/aria/aria-validation-controller";
3
- import { ListKeyboardNavigationController } from "../../utils/aria/list-keyboard-controller";
3
+ import { DirectionalFocusController } from "../../utils/aria/list-keyboard-controller";
4
4
  import { ReactiveControllerHost } from "../../utils/reactive-controller-host";
5
5
  import logo from "../../assets/icons/Logo.svg";
6
6
  export class LmvzHeader extends ReactiveControllerHost {
@@ -11,7 +11,7 @@ export class LmvzHeader extends ReactiveControllerHost {
11
11
  primarySlot;
12
12
  secondarySlot;
13
13
  secondaryNav;
14
- keyboardNavigationController = new ListKeyboardNavigationController(this);
14
+ keyboardNavigationController = new DirectionalFocusController(this, { orientation: 'both' });
15
15
  get primaryMenuitems() {
16
16
  return this.primarySlot?.assignedElements({ flatten: false }) || [];
17
17
  }
@@ -84,7 +84,7 @@ export class LmvzHeader extends ReactiveControllerHost {
84
84
  }
85
85
  }
86
86
  render() {
87
- return (h(Host, { key: '323b7b13ef147f48e5f06537c7f27ab6e8a649ca', onFocus: this.delegateFocus.bind(this) }, h("div", { key: '518434d55b7bfc5c1a8988f707984b8e2a41163c', class: "brand" }, h("slot", { key: '1829a1ba10ba3a4e1a0e32564c534e960dc652d1', name: "brand" }, h("img", { key: '485c217a7fc920646ec531cac9744a10f29dab4e', id: "fallback-logo-lmvz", src: logo, alt: "Lehrmittelverlag Z\u00FCrich" }))), h("nav", { key: 'df2cea9f42427c0bb51a498cc2627f0113a608a0', "aria-label": "Hauptnavigation" }, h("div", { key: '93d6e0edc45c0032c5d3c93ea5f22e204fb0617e', role: "menubar", class: "primary-menubar" }, h("slot", { key: '1b0238ca89023cc9a0ec4453e79a4597aaa92f2a', name: "nav-primary", ref: (el) => (this.primarySlot = el) }), h("div", { key: 'd7576b23a5f9268a106c98052a869825493e0485', role: "menu", id: "nav-secondary", class: "secondary-menubar", hidden: !this.lmvzActiveNav, ref: (el) => (this.secondaryNav = el) }, h("slot", { key: 'ada5f271c58350c44bb55c3bd976450214795f2b', name: this.secondarySlotName, ref: (el) => (this.secondarySlot = el) })))), h("div", { key: 'db47039ebf932942210fd3f0920f9f86f9d2b09b', class: "actions" }, h("slot", { key: '2d220a2946f26e69052d20dd4524e60fafbfe137', name: "actions" }))));
87
+ return (h(Host, { key: '0152283363802ea854334e0349e145e7d6219e09', onFocus: this.delegateFocus.bind(this) }, h("div", { key: 'cdc1d52dbfb658f99bffa2df2353b6a1ad232f97', class: "brand" }, h("slot", { key: '25a039ea2224058f97f8ec1cb1aa310b388f2b2e', name: "brand" }, h("img", { key: '9ca6f39b6e41382a438b3afd36348ee17b36d346', id: "fallback-logo-lmvz", src: logo, alt: "Lehrmittelverlag Z\u00FCrich" }))), h("nav", { key: 'a6b7c1e7baca1ef2075d38cfaf631a277d2bb7ac', "aria-label": "Hauptnavigation" }, h("div", { key: 'eb8c2db72d86cf3c4e2b0d94271bf73882c3bd96', role: "menubar", class: "primary-menubar" }, h("slot", { key: 'b8a2b3c031158ce73ada65995b0d4e6e0e4eac72', name: "nav-primary", ref: (el) => (this.primarySlot = el) }), h("div", { key: '87dabdc52e40163b35e8c7681d3e4aa3a17d6d82', role: "menu", id: "nav-secondary", class: "secondary-menubar", hidden: !this.lmvzActiveNav, ref: (el) => (this.secondaryNav = el) }, h("slot", { key: '6cb38c14357ef682f1c804ab77cd70514308b6d4', name: this.secondarySlotName, ref: (el) => (this.secondarySlot = el) })))), h("div", { key: '9e46e6e484556c5fbe0f2c573188e845fbca801b', class: "actions" }, h("slot", { key: '4c1ea348528ccc3722c2dbbe0795e9f61d67edee', name: "actions" }))));
88
88
  }
89
89
  static get is() { return "lmvz-header"; }
90
90
  static get encapsulation() { return "shadow"; }
@@ -124,7 +124,7 @@ export class LmvzIcon extends ReactiveControllerHost {
124
124
  "mutable": false,
125
125
  "complexType": {
126
126
  "original": "Icon.IconWeight",
127
- "resolved": "\"bold\" | \"filled\" | \"medium\" | \"thin\" | undefined",
127
+ "resolved": "\"bold\" | \"medium\" | \"thin\" | undefined",
128
128
  "references": {
129
129
  "Icon": {
130
130
  "location": "import",
@@ -44,7 +44,7 @@
44
44
  justify-content: center;
45
45
  gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem));
46
46
  border-radius: var(--lmvz-semantic-border-radius-lg, 14px);
47
- font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
47
+ font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5
48
48
  Router);
49
49
  padding: var(--lmvz-component-input-md-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)) var(--lmvz-component-input-md-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
50
50
  cursor: pointer;
@@ -89,8 +89,8 @@ dialog::backdrop {
89
89
  display: flex;
90
90
  flex-direction: column;
91
91
  gap: var(--lmvz-modal-shell-gap);
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);
92
+ padding: var(--lmvz-component-wrapper-lg-padding-y, clamp(2.25rem, 2.19rem + 0.26vw, 2.5rem)) var(--lmvz-component-wrapper-lg-padding-x, clamp(1.5rem, 1.14rem + 1.55vw, 3rem));
93
+ border-radius: var(--lmvz-component-wrapper-lg-border-radius, 18px);
94
94
  background: var(--lmvz-semantic-color-surface-primary, #ffffff);
95
95
 
96
96
  position: relative;
@@ -101,18 +101,6 @@ dialog::backdrop {
101
101
  right: var(--lmvz-dimension-10-12, clamp(0.63rem, 0.59rem + 0.13vw, 0.75rem));
102
102
  }
103
103
  }
104
- @media (max-width: 402px) {
105
- dialog {
106
- margin: 0;
107
- max-width: unset;
108
- max-height: unset;
109
- }
110
- .modal-shell {
111
- max-width: 100vw;
112
- border-radius: 0;
113
- height: 100%;
114
- }
115
- }
116
104
  .header {
117
105
  display: flex;
118
106
  align-items: flex-start;
@@ -121,14 +109,14 @@ dialog::backdrop {
121
109
  }
122
110
  .title {
123
111
  min-inline-size: 0;
124
- font: var(--lmvz-typography-heading-lg, 500 clamp(1.25rem, 1.19rem + 0.26vw, 1.5rem) / 1.4
112
+ font: var(--lmvz-typography-heading-lg, 500 clamp(1.25rem, 1.19rem + 0.26vw, 1.5rem) / 1.5
125
113
  Router);
126
114
  }
127
115
  .has-title .title {
128
116
  flex: 1 1 auto;
129
117
  }
130
118
  .body {
131
- font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
119
+ font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5
132
120
  Router);
133
121
  flex: 1;
134
122
  overflow: scroll;
@@ -55,14 +55,14 @@
55
55
 
56
56
  --radio-label-color: var(--lmvz-semantic-color-on-surface-primary, #000000);
57
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);
58
+ --radio-helper-color: var(--lmvz-semantic-color-on-surface-secondary, #7a7a7a);
59
59
 
60
60
  --radio-easing: var(--lmvz-global-easing-default, ease);
61
61
  --radio-duration: 0.2s;
62
62
 
63
63
  display: flex;
64
64
  align-items: center;
65
- gap: var(--lmvz-component-input-gap-md, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
65
+ gap: var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem));
66
66
  padding-block: var(--lmvz-dimension-2-8, clamp(0.13rem, 0.03rem + 0.39vw, 0.5rem));
67
67
  padding-inline: var(--lmvz-dimension-8-12, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem));
68
68
  border-radius: var(--lmvz-semantic-border-radius-round, 999px);
@@ -110,7 +110,7 @@ input {
110
110
  min-width: 0;
111
111
  }
112
112
  label {
113
- font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.4
113
+ font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5
114
114
  Router);
115
115
  color: var(--radio-label-color);
116
116
  cursor: pointer;
@@ -118,7 +118,7 @@ label {
118
118
  }
119
119
  .helper-text {
120
120
  display: block;
121
- font: var(--lmvz-typography-body-sm, 400 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.4
121
+ font: var(--lmvz-typography-body-sm, 400 clamp(0.69rem, 0.67rem + 0.06vw, 0.75rem) / 1.5
122
122
  Router);
123
123
  color: var(--radio-helper-color);
124
124
  margin-block-start: 2px;
@@ -0,0 +1,101 @@
1
+ :host {
2
+ position: fixed;
3
+ bottom: var(--lmvz-dimension-16-20, clamp(1rem, 0.94rem + 0.26vw, 1.25rem));
4
+ left: 50%;
5
+ transform: translateX(-50%);
6
+ z-index: 2147483000; /* TODO(tokens): promote to design-token */
7
+
8
+ width: max-content;
9
+ border: 1px solid transparent;
10
+ border-radius: var(--lmvz-semantic-border-radius-lg, 14px);
11
+ padding: var(--lmvz-dimension-10-12, clamp(0.63rem, 0.59rem + 0.13vw, 0.75rem)) var(--lmvz-dimension-12-14, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem));
12
+
13
+ display: flex;
14
+ flex-direction: row;
15
+ align-items: center;
16
+ justify-content: center;
17
+ gap: var(--lmvz-dimension-8-12, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem));
18
+
19
+ pointer-events: auto;
20
+ font: var(--lmvz-typography-body-md-strong, 500 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5
21
+ Router);
22
+
23
+ /* this will be picked up by lmvz-icon as well */
24
+ --lmvz-component-color: var(--lmvz-semantic-color-status-on-success, #37867c);
25
+
26
+ color: var(--lmvz-component-color);
27
+ }
28
+
29
+ :host([status='success']) {
30
+ background-color: var(--lmvz-semantic-color-status-success, #f1f9f8);
31
+ border-color: var(--lmvz-semantic-color-status-on-success-subtle, #a5dad3);
32
+ --lmvz-component-color: var(--lmvz-semantic-color-status-on-success, #37867c);
33
+ }
34
+
35
+ :host([status='warning']) {
36
+ background-color: var(--lmvz-semantic-color-status-warning, #fffbf0);
37
+ border-color: var(--lmvz-semantic-color-status-on-warning-subtle, #ffdf75);
38
+ --lmvz-component-color: var(--lmvz-semantic-color-status-on-warning, #7a5e00);
39
+ }
40
+
41
+ :host([status='error']) {
42
+ background-color: var(--lmvz-semantic-color-status-danger, #fdf1f2);
43
+ border-color: var(--lmvz-semantic-color-status-on-danger-subtle, #f7bfc2);
44
+ --lmvz-component-color: var(--lmvz-semantic-color-status-on-danger, #e52a31);
45
+ }
46
+
47
+ lmvz-icon {
48
+ flex-shrink: 0;
49
+ }
50
+
51
+ .message {
52
+ white-space: nowrap;
53
+ }
54
+
55
+ @keyframes snackbar-enter {
56
+ from {
57
+ transform: translateX(-50%) translateY(100%);
58
+ opacity: 0;
59
+ }
60
+ to {
61
+ transform: translateX(-50%) translateY(0);
62
+ opacity: 1;
63
+ }
64
+ }
65
+
66
+ @keyframes snackbar-leave {
67
+ from {
68
+ transform: translateX(-50%) translateY(0);
69
+ opacity: 1;
70
+ }
71
+ to {
72
+ transform: translateX(-50%) translateY(100%);
73
+ opacity: 0;
74
+ }
75
+ }
76
+
77
+ /* var(--lmvz-global-duration-fast, 200ms) — token is unitless integer; separate ticket filed against packages/design-tokens */
78
+
79
+ :host(.entering) {
80
+ animation: snackbar-enter 200ms cubic-bezier(0, 0, 0.2, 1) forwards;
81
+ }
82
+
83
+ :host(.leaving) {
84
+ pointer-events: none;
85
+ animation: snackbar-leave 200ms cubic-bezier(0.4, 0, 1, 1) forwards;
86
+ }
87
+
88
+ @media (prefers-reduced-motion: reduce) {
89
+ :host(.entering) {
90
+ animation: none;
91
+ transition: opacity 80ms ease;
92
+ opacity: 1;
93
+ }
94
+
95
+ :host(.leaving) {
96
+ pointer-events: none;
97
+ animation: none;
98
+ transition: opacity 80ms ease;
99
+ opacity: 0;
100
+ }
101
+ }