@lmvz-ds/components 0.40.0 → 0.42.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 (170) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/cjs/{aria-validation-controller-DKNXjnQr.js → aria-validation-controller-BR7cnyq5.js} +1 -1
  3. package/cjs/{ds.constants-C6eKRAEu.js → ds.constants-pI-qkOYv.js} +2 -0
  4. package/cjs/{index-DWy4nuyZ.js → index-BUrb__KL.js} +52 -11
  5. package/cjs/index.cjs.js +2 -1
  6. package/cjs/lmvz-action-list.cjs.entry.js +2 -2
  7. package/cjs/lmvz-action.cjs.entry.js +1 -1
  8. package/cjs/lmvz-button-group.cjs.entry.js +2 -2
  9. package/cjs/lmvz-button_2.cjs.entry.js +4 -4
  10. package/cjs/lmvz-card.cjs.entry.js +59 -15
  11. package/cjs/lmvz-checkbox.cjs.entry.js +3 -3
  12. package/cjs/lmvz-chip.cjs.entry.js +4 -4
  13. package/cjs/lmvz-components.cjs.js +3 -3
  14. package/cjs/lmvz-datepicker.cjs.entry.js +3 -3
  15. package/cjs/lmvz-header_2.cjs.entry.js +3 -3
  16. package/cjs/lmvz-input.cjs.entry.js +6 -7
  17. package/cjs/lmvz-link.cjs.entry.js +3 -3
  18. package/cjs/lmvz-menuitem.cjs.entry.js +3 -3
  19. package/cjs/lmvz-message.cjs.entry.js +2 -2
  20. package/cjs/lmvz-modal.cjs.entry.js +3 -3
  21. package/cjs/lmvz-popover.cjs.entry.js +2 -2
  22. package/cjs/lmvz-radio.cjs.entry.js +3 -3
  23. package/cjs/lmvz-select.cjs.entry.js +3 -3
  24. package/cjs/lmvz-snackbar.cjs.entry.js +2 -2
  25. package/cjs/lmvz-spinner.cjs.entry.js +3 -3
  26. package/cjs/lmvz-tab.cjs.entry.js +2 -2
  27. package/cjs/lmvz-tabs.cjs.entry.js +2 -2
  28. package/cjs/lmvz-toggle.cjs.entry.js +3 -3
  29. package/cjs/loader.cjs.js +2 -2
  30. package/collection/api/ds.constants.js +1 -0
  31. package/collection/api/public-utils.js +3 -0
  32. package/collection/collection-manifest.json +2 -3
  33. package/collection/components/lmvz-card/lmvz-card.css +82 -194
  34. package/collection/components/lmvz-card/lmvz-card.js +131 -38
  35. package/collection/components/lmvz-checkbox/lmvz-checkbox.js +1 -1
  36. package/collection/components/lmvz-chip/lmvz-chip.js +1 -1
  37. package/collection/components/lmvz-datepicker/lmvz-datepicker.js +2 -2
  38. package/collection/components/lmvz-header/lmvz-header.js +1 -1
  39. package/collection/components/lmvz-icon/lmvz-icon.js +7 -6
  40. package/collection/components/lmvz-input/lmvz-input.js +14 -35
  41. package/collection/components/lmvz-link/lmvz-link.js +1 -1
  42. package/collection/components/lmvz-menuitem/lmvz-menuitem.js +1 -1
  43. package/collection/components/lmvz-message/lmvz-message.js +1 -1
  44. package/collection/components/lmvz-modal/lmvz-modal.js +1 -1
  45. package/collection/components/lmvz-popover/lmvz-popover.js +1 -1
  46. package/collection/components/lmvz-radio/lmvz-radio.js +1 -1
  47. package/collection/components/lmvz-select/lmvz-select.js +1 -1
  48. package/collection/components/lmvz-snackbar/lmvz-snackbar.js +1 -1
  49. package/collection/components/lmvz-spinner/lmvz-spinner.js +7 -6
  50. package/collection/components/lmvz-tab/lmvz-tab.js +1 -1
  51. package/collection/components/lmvz-tabs/lmvz-tabs.js +1 -1
  52. package/collection/components/lmvz-toggle/lmvz-toggle.js +1 -1
  53. package/collection/index.js +1 -3
  54. package/components/index.js +1 -1
  55. package/components/lmvz-action-list.js +1 -1
  56. package/components/lmvz-action.js +1 -1
  57. package/components/lmvz-button-group.js +1 -1
  58. package/components/lmvz-button.js +1 -1
  59. package/components/lmvz-card.js +1 -1
  60. package/components/lmvz-checkbox.js +1 -1
  61. package/components/lmvz-chip.js +1 -1
  62. package/components/lmvz-datepicker.js +1 -1
  63. package/components/lmvz-header.js +1 -1
  64. package/components/lmvz-icon.js +1 -1
  65. package/components/lmvz-input.js +1 -1
  66. package/components/lmvz-link.js +1 -1
  67. package/components/lmvz-menuitem.js +1 -1
  68. package/components/lmvz-message.js +1 -1
  69. package/components/lmvz-modal.js +1 -1
  70. package/components/lmvz-popover.js +1 -1
  71. package/components/lmvz-radio.js +1 -1
  72. package/components/lmvz-select.js +1 -1
  73. package/components/lmvz-snackbar.js +1 -1
  74. package/components/lmvz-spinner.js +1 -1
  75. package/components/lmvz-tab.js +1 -1
  76. package/components/lmvz-tabs.js +1 -1
  77. package/components/lmvz-toggle.js +1 -1
  78. package/components/p-Buw_s-9k.js +1 -0
  79. package/components/p-CME20cTM.js +1 -0
  80. package/components/{p-DsTgD0_a.js → p-CPsPpCPH.js} +1 -1
  81. package/components/{p--mU29mrX.js → p-CUSmZDCK.js} +1 -1
  82. package/components/p-CbxNLroR.js +1 -0
  83. package/components/{p-DXFoXTse.js → p-CeGgx3Rl.js} +1 -1
  84. package/components/{p-DyQ1GbaN.js → p-D0S1O-Op.js} +1 -1
  85. package/components/{p-sACbyedu.js → p-DCFz070C.js} +1 -1
  86. package/components/p-DCYK_qaZ.js +1 -0
  87. package/components/{p-niXjuPxe.js → p-Wp9d5O3R.js} +1 -1
  88. package/components/{p-D_mff3n7.js → p-ctF-ydws.js} +1 -1
  89. package/components/{p-Bc5MM0zh.js → p-g_Ehzzvy.js} +1 -1
  90. package/esm/{aria-validation-controller-Dwv7n0rk.js → aria-validation-controller-uMqDgutI.js} +1 -1
  91. package/esm/{ds.constants-0ctLESas.js → ds.constants-Buw_s-9k.js} +2 -1
  92. package/esm/{index-DVab4vzV.js → index-wQ10Syko.js} +52 -11
  93. package/esm/index.js +1 -1
  94. package/esm/lmvz-action-list.entry.js +2 -2
  95. package/esm/lmvz-action.entry.js +1 -1
  96. package/esm/lmvz-button-group.entry.js +2 -2
  97. package/esm/lmvz-button_2.entry.js +4 -4
  98. package/esm/lmvz-card.entry.js +59 -15
  99. package/esm/lmvz-checkbox.entry.js +3 -3
  100. package/esm/lmvz-chip.entry.js +4 -4
  101. package/esm/lmvz-components.js +4 -4
  102. package/esm/lmvz-datepicker.entry.js +3 -3
  103. package/esm/lmvz-header_2.entry.js +3 -3
  104. package/esm/lmvz-input.entry.js +6 -7
  105. package/esm/lmvz-link.entry.js +3 -3
  106. package/esm/lmvz-menuitem.entry.js +3 -3
  107. package/esm/lmvz-message.entry.js +2 -2
  108. package/esm/lmvz-modal.entry.js +3 -3
  109. package/esm/lmvz-popover.entry.js +2 -2
  110. package/esm/lmvz-radio.entry.js +3 -3
  111. package/esm/lmvz-select.entry.js +3 -3
  112. package/esm/lmvz-snackbar.entry.js +2 -2
  113. package/esm/lmvz-spinner.entry.js +3 -3
  114. package/esm/lmvz-tab.entry.js +2 -2
  115. package/esm/lmvz-tabs.entry.js +2 -2
  116. package/esm/lmvz-toggle.entry.js +3 -3
  117. package/esm/loader.js +3 -3
  118. package/hydrate/index.js +115 -53
  119. package/hydrate/index.mjs +115 -53
  120. package/lmvz-components/index.esm.js +1 -1
  121. package/lmvz-components/lmvz-components.esm.js +1 -1
  122. package/lmvz-components/p-01ac17f8.entry.js +1 -0
  123. package/lmvz-components/{p-e35f49a1.entry.js → p-11ccd914.entry.js} +1 -1
  124. package/lmvz-components/{p-143e9621.entry.js → p-1595cad0.entry.js} +1 -1
  125. package/lmvz-components/{p-7cbfbc88.entry.js → p-253e56c9.entry.js} +1 -1
  126. package/lmvz-components/{p-773e9d95.entry.js → p-2ae64b73.entry.js} +1 -1
  127. package/lmvz-components/{p-93b781ca.entry.js → p-3606c1db.entry.js} +1 -1
  128. package/lmvz-components/{p-f911691c.entry.js → p-3de59694.entry.js} +1 -1
  129. package/lmvz-components/p-457b10e1.entry.js +1 -0
  130. package/lmvz-components/{p-d73bb7fd.entry.js → p-5e8f0b43.entry.js} +1 -1
  131. package/lmvz-components/{p-8ba6ec19.entry.js → p-7a018765.entry.js} +1 -1
  132. package/lmvz-components/{p-335b3867.entry.js → p-7d80a49d.entry.js} +1 -1
  133. package/lmvz-components/{p-ebad823c.entry.js → p-84d2b2e5.entry.js} +1 -1
  134. package/lmvz-components/{p-Wi9d2-w9.js → p-BbeaVKMa.js} +1 -1
  135. package/lmvz-components/p-Buw_s-9k.js +1 -0
  136. package/lmvz-components/{p-41286514.entry.js → p-a2f03112.entry.js} +1 -1
  137. package/lmvz-components/p-adb37d60.entry.js +1 -0
  138. package/lmvz-components/{p-edec4d09.entry.js → p-b050450d.entry.js} +1 -1
  139. package/lmvz-components/{p-efd9d50e.entry.js → p-b0f3758f.entry.js} +1 -1
  140. package/lmvz-components/{p-f24f5207.entry.js → p-b123e33d.entry.js} +1 -1
  141. package/lmvz-components/{p-304c7554.entry.js → p-ddf5d866.entry.js} +1 -1
  142. package/lmvz-components/p-e40f174d.entry.js +1 -0
  143. package/lmvz-components/{p-220e455e.entry.js → p-edb35b52.entry.js} +1 -1
  144. package/lmvz-components/{p-87f21ac9.entry.js → p-ef6e12ee.entry.js} +1 -1
  145. package/lmvz-components/{p-316dd61a.entry.js → p-f6ac0f0d.entry.js} +1 -1
  146. package/lmvz-components/p-wQ10Syko.js +3 -0
  147. package/loader/index.d.ts +1 -1
  148. package/manifest.json +243 -158
  149. package/package.json +5 -1
  150. package/types/api/ds.constants.d.ts +1 -0
  151. package/types/api/ds.types.d.ts +4 -0
  152. package/types/api/public-utils.d.ts +8 -0
  153. package/types/components/lmvz-card/lmvz-card.d.ts +17 -6
  154. package/types/components/lmvz-icon/lmvz-icon.d.ts +1 -1
  155. package/types/components/lmvz-input/lmvz-input.d.ts +2 -3
  156. package/types/components/lmvz-spinner/lmvz-spinner.d.ts +1 -1
  157. package/types/components.d.ts +68 -43
  158. package/types/index.d.ts +1 -8
  159. package/types/stencil-public-runtime.d.ts +12 -0
  160. package/collection/integration/header-integration/header-integration.js +0 -51
  161. package/components/p-0ctLESas.js +0 -1
  162. package/components/p-DSDBThqb.js +0 -1
  163. package/components/p-DXhP6UeF.js +0 -1
  164. package/components/p-DbBJxuBm.js +0 -1
  165. package/lmvz-components/p-0ctLESas.js +0 -1
  166. package/lmvz-components/p-27e8b4fa.entry.js +0 -1
  167. package/lmvz-components/p-6aae1df9.entry.js +0 -1
  168. package/lmvz-components/p-743616c0.entry.js +0 -1
  169. package/lmvz-components/p-DVab4vzV.js +0 -2
  170. package/lmvz-components/p-c884c76e.entry.js +0 -1
@@ -75,234 +75,122 @@ legend {
75
75
 
76
76
  }
77
77
  :host {
78
- /** component dependencies */
79
- /* * the (invalid nested) import will be handled by postcss */
80
- /* stylelint-disable no-invalid-position-at-import-rule */
81
- /* stylelint-disable nesting-selector-no-missing-scoping-root */
82
-
83
- /**
84
- * This fragment is meant to be reusable in multiple component types.
85
- * CAUTION: always wrap the import in a tag selector (ususally button)!
86
- */
87
- & {
88
- /* the (invalid nested) import will be handled by postcss */
89
- /* stylelint-disable-next-line no-invalid-position-at-import-rule */
90
- /* stylelint-disable nesting-selector-no-missing-scoping-root */
91
- & {
92
- /* variables are declared on :host
93
- so that outer ::slotted(lmvz-button) overrides are inherited correctly via shadow inheritance.
94
- They are also declared here so that non-shadow consumers have the default values in scope. */
95
-
96
- /* secondary styling is default, primary is explicit */
97
-
98
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-secondary, #f0f0f0));
99
- --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-int-on-secondary, #000000));
100
- --lmvz-button-radius: var(--lmvz-button-radius-override, var(--lmvz-component-input-radius-default, 999px));
101
- --lmvz-button-padding-inline: var(--lmvz-button-padding-inline-override, var(--lmvz-button-padding, var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem))));
102
- --lmvz-button-padding-block: var(--lmvz-button-padding-block-override, var(--lmvz-button-padding, var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem))));
103
- --lmvz-button-gap: var(--lmvz-button-gap-override, var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)));
104
- --lmvz-button-min-height: var(--lmvz-button-min-height-override, var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem)));
105
- --lmvz-button-font: var(--lmvz-button-font-override, var(--lmvz-typography-label-md-strong, normal 700 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5
106
- Router));
107
- --lmvz-button-border-width: var(--lmvz-button-border-width-override, 0);
108
- --lmvz-button-border-color: var(--lmvz-button-border-color-override, transparent);
109
-
110
- display: inline-flex;
111
- align-items: center;
112
- justify-content: var(--lmvz-button-content-justification, center);
113
- gap: var(--lmvz-button-gap, var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)));
114
-
115
- box-sizing: border-box; /* to inlclude paddings & border in min-height */
116
- padding-block: var(--lmvz-button-padding-block, var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)));
117
- padding-inline: var(--lmvz-button-padding-inline, var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)));
118
- min-height: var(--lmvz-button-min-height, var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem)));
119
- border: var(--lmvz-button-border-width, 0) solid var(--lmvz-button-border-color, transparent);
120
- border-radius: var(--lmvz-button-radius, var(--lmvz-component-input-radius-default, 999px));
121
-
122
- background-color: var(--lmvz-button-background);
123
- color: var(--lmvz-button-color);
124
- cursor: pointer;
125
- font: var(--lmvz-button-font);
126
- text-decoration: none;
127
- white-space: nowrap;
128
- transition:
129
- background-color 0.15s ease,
130
- color 0.15s ease,
131
- border-color 0.15s ease,
132
- box-shadow 0.15s ease;
133
- }
134
-
135
-
136
- & > * {
137
- font: inherit;
138
- color: inherit;
139
- }
140
- &:focus-visible {
141
- outline: var(--lmvz-ds-outline, 1px solid #0e7ab4);
142
- outline-offset: var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem));
143
- position: relative;
144
- z-index: 1;
145
- }
146
- &:is([disabled], .disabled) {
147
- cursor: not-allowed;
148
- pointer-events: none;
149
- /* } */
150
-
151
- /* button:is(:is([disabled], .disabled):not(.secondary):not(.tertiary), .primary:is([disabled], .disabled)) { */
152
- /* button:is([disabled], .disabled) { */
153
- /* --lmvz-button-background: var(--lmvz-global-color-neutral-500); */
154
- /* --lmvz-button-color: var(--lmvz-global-color-neutral-white); */
155
- opacity: var(--lmvz-component-input-disabled-opacity, 40%);
156
- }
157
- &:not([disabled]):hover {
158
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-secondary-hover, #e0e0e0));
159
- }
160
- &:not([disabled]):active {
161
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-secondary-active, #d4d4d4));
162
- }
163
-
164
- /* secondary styling is default, primary is explicit */
165
-
166
- &.primary {
167
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-primary, #000000));
168
- --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-int-on-primary, #ffffff));
169
- --lmvz-button-border-width: var(--lmvz-button-border-width-override, 0);
170
- --lmvz-button-border-color: var(--lmvz-button-border-color-override, transparent);
171
- }
172
- &.primary:not([disabled], .disabled):hover {
173
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-primary-hover, #2e2e2e));
174
- }
175
- &.primary:not([disabled], .disabled):active {
176
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-primary-active, #545454));
177
- }
178
- &.danger {
179
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-tertiary, #ffffff));
180
- --lmvz-button-border-color: var(--lmvz-button-border-color-override, transparent);
181
- --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-status-on-danger, #a31419));
182
- }
183
- &.danger:not([disabled], .disabled):hover {
184
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-status-danger, #fbdfe0));
185
- --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-status-on-danger, #a31419));
186
- }
187
- &.danger:not([disabled], .disabled):active {
188
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-status-on-danger-subtle, #e8454b));
189
- --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-status-on-danger, #a31419));
190
- }
191
- &.tertiary {
192
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-tertiary, #ffffff));
193
- --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-int-on-tertiary, #000000));
194
- }
195
- &.tertiary:not([disabled], .disabled):hover {
196
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0));
197
- --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-int-on-tertiary-hover, #000000));
198
- }
199
- &.tertiary:not([disabled], .disabled):active {
200
- --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0));
201
- --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-int-on-tertiary-active, #000000));
202
- }
203
-
204
- &.small {
205
- --lmvz-button-padding-inline: var(--lmvz-button-padding-inline-override, var(--lmvz-component-input-padding-sm, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)));
206
- --lmvz-button-padding-block: var(--lmvz-button-padding-block-override, var(--lmvz-component-input-padding-sm, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem)));
207
- --lmvz-button-gap: var(--lmvz-button-gap-override, var(--lmvz-component-input-gap-sm, clamp(0.38rem, 0.31rem + 0.26vw, 0.63rem)));
208
- --lmvz-button-min-height: var(--lmvz-button-min-height-override, var(--lmvz-component-input-size-sm, clamp(2rem, 1.94rem + 0.26vw, 2.25rem)));
209
- --lmvz-button-font: var(--lmvz-button-font-override, var(--lmvz-typography-label-sm-strong, normal 700 clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem) / 1.5
210
- Router));
211
- }
212
- &.large {
213
- --lmvz-button-padding-inline: var(--lmvz-button-padding-inline-override, var(--lmvz-component-input-padding-lg, clamp(1rem, 0.94rem + 0.26vw, 1.25rem)));
214
- --lmvz-button-padding-block: var(--lmvz-button-padding-block-override, var(--lmvz-component-input-padding-lg, clamp(1rem, 0.94rem + 0.26vw, 1.25rem)));
215
- --lmvz-button-gap: var(--lmvz-button-gap-override, var(--lmvz-component-input-gap-lg, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)));
216
- --lmvz-button-min-height: var(--lmvz-button-min-height-override, var(--lmvz-component-input-size-lg, clamp(2.75rem, 2.69rem + 0.26vw, 3rem)));
217
- --lmvz-button-font: var(--lmvz-button-font-override, var(--lmvz-typography-label-lg-strong, normal 700 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.5
218
- Router));
219
- }
220
- }
221
-
78
+ /* Card-local width custom properties. */
79
+ /* TODO(token-gap): 320px/360px awaiting Supernova correction of --lmvz-card-component-card-minwidth/-maxwidth, see checklist T10 */
80
+ --lmvz-card-local-min-width: 320px;
81
+ --lmvz-card-local-max-width: 360px;
82
+ /* TODO(token-gap): 232px awaiting promotion of figma-only/card/card-sm-max-width to a real token, see checklist T10 */
83
+ --lmvz-card-local-sm-width: 232px;
222
84
 
223
85
  display: flex;
224
- min-width: var(--lmvz-card-component-card-minwidth, 20.4375rem);
225
- max-width: var(--lmvz-card-component-card-maxwidth, 21.6875rem);
226
86
  flex-direction: column;
227
87
  align-items: flex-start;
88
+ min-width: var(--lmvz-card-local-min-width);
89
+ max-width: var(--lmvz-card-local-max-width);
228
90
 
229
- border-radius: var(--lmvz-semantic-border-radius-lg, 14px);
230
- border: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-border-default, #e0e0e0);
91
+ border-radius: var(--lmvz-component-wrapper-md-border-radius, 18px);
92
+ border: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-border-subtle, #f0f0f0);
231
93
  background: var(--lmvz-semantic-color-surface-primary, #ffffff);
94
+ box-shadow: 0 var(--lmvz-semantic-shadow-l1-1-position-y, 2px) var(--lmvz-semantic-shadow-l1-1-blur, 4px) 0 var(--lmvz-semantic-color-shadow-l1-default, rgba(120, 120, 128, 0.08));
95
+ margin-bottom: var(--lmvz-component-card-lg-margin-bottom, clamp(1rem, 0.88rem + 0.52vw, 1.5rem));
96
+ }
97
+ :host([size='small']) {
98
+ width: var(--lmvz-card-local-sm-width);
99
+ min-width: 0;
100
+ max-width: none;
101
+ border-radius: var(--lmvz-component-wrapper-sm-border-radius, 14px);
102
+ margin-bottom: var(--lmvz-component-card-sm-margin-bottom, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
232
103
  }
233
104
  * {
234
105
  color: var(--lmvz-semantic-color-on-surface-primary, #000000);
235
106
  font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router);
236
107
  }
237
- .top {
108
+ .image {
109
+ width: 100%;
110
+ aspect-ratio: 4 / 3;
111
+ object-fit: cover;
112
+ align-self: stretch;
113
+ border-top-left-radius: var(--lmvz-component-wrapper-md-border-radius, 18px);
114
+ border-top-right-radius: var(--lmvz-component-wrapper-md-border-radius, 18px);
115
+ }
116
+ :host([size='small']) .image {
117
+ border-top-left-radius: var(--lmvz-component-wrapper-sm-border-radius, 14px);
118
+ border-top-right-radius: var(--lmvz-component-wrapper-sm-border-radius, 14px);
119
+ }
120
+ .content {
238
121
  display: flex;
239
- padding: var(--lmvz-dimension-12-8, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem));
240
122
  flex-direction: column;
241
- justify-content: center;
242
- align-items: center;
123
+ align-items: flex-start;
243
124
  align-self: stretch;
125
+ gap: var(--lmvz-component-spacing-xs, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem));
126
+
127
+ padding: var(--lmvz-component-wrapper-md-padding-y, clamp(1rem, 0.88rem + 0.52vw, 1.5rem)) var(--lmvz-component-wrapper-md-padding-x, clamp(1rem, 0.88rem + 0.52vw, 1.5rem));
128
+ }
129
+ :host([size='small']) .content {
130
+ gap: var(--lmvz-component-spacing-2xs, clamp(0.13rem, 0.09rem + 0.13vw, 0.25rem));
131
+ padding: var(--lmvz-component-wrapper-sm-padding-y, clamp(0.75rem, 0.69rem + 0.26vw, 1rem)) var(--lmvz-component-wrapper-sm-padding-x, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
244
132
  }
245
- .bottom {
133
+ .title-block {
246
134
  display: flex;
247
- min-width: 150px;
248
- padding: var(--lmvz-dimension-6-4, clamp(0.25rem, 0.22rem + 0.13vw, 0.38rem)) var(--lmvz-dimension-14-10, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)) var(--lmvz-dimension-14-10, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)) var(--lmvz-dimension-14-10, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem));
249
135
  flex-direction: column;
250
136
  align-items: flex-start;
251
137
  align-self: stretch;
138
+ gap: var(--lmvz-component-spacing-2xs, clamp(0.13rem, 0.09rem + 0.13vw, 0.25rem));
139
+ }
140
+ /*
141
+ * Title typography applies identically to the fallback <h3> and any slotted heading (h2-h5); the level is the
142
+ * consumer's choice, the styling is the card's.
143
+ *
144
+ * The fallback <h3> (.card-default-title) lives in the shadow root and is styled directly below.
145
+ * Slotted headings are consumer-supplied light-DOM children; `::slotted()` is the correct selector
146
+ * to reach them from within the shadow stylesheet.
147
+ */
148
+ .card-default-title {
149
+ margin: 0;
150
+ overflow-wrap: break-word;
151
+ font: var(--lmvz-typography-heading-lg, 500 clamp(1.13rem, 1.03rem + 0.39vw, 1.5rem) / 1.5
152
+ Router);
252
153
  }
253
- .title {
154
+ :host([size='small']) .card-default-title {
155
+ font: var(--lmvz-typography-body-lg-strong, 500 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.5
156
+ Router);
157
+ }
158
+ /* Slotted heading typography — large (default) */
159
+ ::slotted([slot='card-title']) {
254
160
  margin: 0;
255
- display: flex;
256
- justify-content: center;
257
- align-items: center;
258
- align-self: stretch;
259
-
260
- padding-bottom: var(--lmvz-global-s4, 4px);
261
161
  overflow-wrap: break-word;
262
- font: var(--lmvz-typography-heading-2xl, 500 clamp(2rem, 1.82rem + 0.78vw, 2.75rem) / 1.4
162
+ }
163
+ /* Slotted heading typography — small */
164
+ :host([size='small']) ::slotted([slot='card-title']) {
165
+ font: var(--lmvz-typography-body-lg-strong, 500 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.5
263
166
  Router);
264
167
  }
265
168
  .description {
266
- display: flex;
267
169
  margin: 0;
268
- padding-bottom: var(--lmvz-component-body-sm-padding-bottom, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem));
269
- align-items: flex-start;
270
170
  align-self: stretch;
271
171
  white-space: pre-line;
272
- font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router);
172
+ font: var(--lmvz-typography-body-lg, 400 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.5 Router);
273
173
  }
274
- .image-wrapper {
275
- aspect-ratio: 4 / 3;
276
- width: 100%;
277
- background-size: cover;
278
- background-position: center;
279
- flex: 1 0 0;
280
- align-self: stretch;
281
- border-radius: var(--lmvz-semantic-border-radius-md, 6px);
174
+ :host([size='small']) .description {
175
+ font: var(--lmvz-typography-body-sm, 400 clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem) / 1.5 Router);
176
+ }
177
+ /*
178
+ * Chip slot: under shadow: true, an empty <slot> is a real flex item in .content's flex column and
179
+ * would introduce a phantom gap even when nothing is slotted. `display: contents` collapses the
180
+ * slot element's own box so it contributes no spacing when empty, while still allowing slotted
181
+ * content to participate in the flex layout normally.
182
+ */
183
+ slot[name='chip'] {
184
+ display: contents;
282
185
  }
283
186
  .actions {
284
- margin-top: var(--lmvz-component-form-wrapper-gap-y, clamp(1.13rem, 0.97rem + 0.65vw, 1.75rem));
285
187
  display: flex;
286
188
  align-items: center;
287
- gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem));
288
189
  align-self: stretch;
190
+ /* Button-row top padding is a separate Figma-specified value (Visual primitives: Button-row top padding, both sizes) that intentionally stacks on .content's flex gap — not an accidental double-count. */
191
+ padding-top: var(--lmvz-component-spacing-md, clamp(0.75rem, 0.69rem + 0.26vw, 1rem));
289
192
  }
290
- button.primary,
291
- lmvz-button.primary {
292
- display: flex;
293
- justify-content: center;
294
- align-items: center;
295
- gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem));
193
+ /* Sizing (padding/gap/min-height/font) is fully driven by lmvz-button's own `scale` prop (default/small), set in the render method - no local overrides needed here. */
194
+ lmvz-button.action {
296
195
  flex: 1 0 0;
297
196
  }
298
- /* .overflow-button {
299
- anchor-name: --overflow-button;
300
- } */
301
- /* menu {
302
- position: fixed;
303
- position-anchor: --overflow-button;
304
-
305
- inset-block-start: anchor(end);
306
- inset-inline-end: anchor(self-end);
307
- margin: 5px 0 0 5px;
308
- } */
@@ -1,28 +1,67 @@
1
1
  import { h, Host } from "@stencil/core";
2
+ import { cardSizes } from "../../api/ds.constants";
3
+ import { isAriaValidationEnabled } from "../../utils/aria/aria-validation-controller";
2
4
  import { createAssetUrlSafely } from "../../utils/stencil/assets";
5
+ const HEADING_TAGS = new Set(['HEADER', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6']);
3
6
  export class LmvzCard {
7
+ el;
8
+ titleSlotElement;
9
+ warnedCases = new Set();
10
+ size = 'large';
4
11
  cardTitle;
5
- imageUrl;
6
12
  description;
7
- primaryActionLabel = '';
8
- primaryAction;
13
+ imageUrl;
14
+ imageAlt = '';
15
+ actionLabel;
16
+ lmvzCardAction;
17
+ normalizeSize(value) {
18
+ const normalizedSize = cardSizes.includes(value) ? value : 'large';
19
+ if (normalizedSize !== this.size) {
20
+ this.size = normalizedSize;
21
+ }
22
+ }
23
+ componentWillLoad() {
24
+ this.normalizeSize(this.size);
25
+ }
26
+ componentDidLoad() {
27
+ const titleSlot = this.el.shadowRoot?.querySelector('slot[name="card-title"]');
28
+ titleSlot?.addEventListener('slotchange', () => this.checkTitleContent());
29
+ this.checkTitleContent();
30
+ }
9
31
  get fallbackImage() {
10
- return createAssetUrlSafely('card-placeholder.svg');
32
+ return String(createAssetUrlSafely('card-placeholder.svg'));
33
+ }
34
+ handleActionClick = () => {
35
+ this.lmvzCardAction.emit();
36
+ };
37
+ get slottedTitleElement() {
38
+ return this.titleSlotElement?.assignedElements()?.at(0);
11
39
  }
12
- _onPrimaryClick() {
13
- this.primaryAction.emit();
40
+ checkTitleContent() {
41
+ if (!isAriaValidationEnabled())
42
+ return;
43
+ const slotted = this.slottedTitleElement;
44
+ if (slotted) {
45
+ const tag = slotted.tagName;
46
+ if (!HEADING_TAGS.has(tag)) {
47
+ this.warnOnce(`non-heading:${tag}`, `[lmvz-card] Element <${tag.toLowerCase()}> slotted into "card-title" is not a heading. Slot a heading element (h2-h5) instead.`);
48
+ }
49
+ }
50
+ else if (!this.cardTitle) {
51
+ this.warnOnce('missing-title', '[lmvz-card] Neither a "card-title" slotted heading nor a non-empty "cardTitle" prop was supplied.');
52
+ }
14
53
  }
15
- _onOverflowClick(event) {
16
- console.log(event);
54
+ warnOnce(key, message) {
55
+ if (this.warnedCases.has(key))
56
+ return;
57
+ this.warnedCases.add(key);
58
+ console.warn(message);
17
59
  }
18
60
  render() {
19
- const imgStyle = {
20
- backgroundImage: `url(${this.imageUrl ?? this.fallbackImage})`,
21
- };
22
- return (h(Host, { key: '1dd819fd7c752af8d15001c08f7f60c6ea7278b9', role: "article" }, h("div", { key: 'e0cc822e627b6bbe665e4faa705cc46a09bac7c6', class: "top" }, h("div", { key: 'db79cb5a67ebdd6097f985e4b4bd27665b6329ef', class: "image-wrapper", style: imgStyle }, h("div", { key: '90facc8595ddbbf31e3768faa8254a82ab8d3e65', class: "chip-slot" }, h("slot", { key: 'cb2e6a1053aae2b2ca90c52c175e3c4174c89d23', name: "chip" })))), h("div", { key: 'cb11069a329385178677e92d08044e0fe8e5b982', class: "bottom" }, h("header", { key: '1e6076352124ca03de2fb13c17a565b4f492567e' }, h("h2", { key: '73f11099fb751bd4f967dbe49b79763b6a8268f3', class: "title" }, this.cardTitle)), h("p", { key: '36cf87b4c2004bff1e65feedd13e137d67115de3', class: "description" }, this.description), h("div", { key: '6c1d82f4968ce8252307858e6ad0681274f06397', class: "actions" }, h("button", { key: '0366e0caaf9235a3eaf7bfcab116e6a828fb248d', class: "primary", onClick: this._onPrimaryClick.bind(this), "data-testid": "primary" }, this.primaryActionLabel), h("button", { key: '4f435e79d75a621d6fe065471a915b55308ad15d', class: "tertiary", "aria-label": "More actions", onClick: this._onOverflowClick }, h("span", { key: '7dec97e0b0ca58c40fc5308cc7863acafa8c5147', class: "icon-placeholder" }, "..."))))));
61
+ return (h(Host, { key: '21ac0a567bb88d05d247cc3150bf2e7ce26972c5', role: "article" }, h("img", { key: '6cea11ee015059d5537ab64c7cbb1655ac984cb1', class: "image", src: this.imageUrl ?? this.fallbackImage, alt: this.imageAlt, loading: "lazy", decoding: "async" }), h("div", { key: 'cd29132d8268fb5a025cde5c33a858982c8eaaed', class: "content" }, h("div", { key: '0d353a46cae60d81417e5280b39020b2234ad304', class: "title-block" }, h("slot", { key: '4f2734a257ef877d258a717e23855f521c5132a6', name: "card-title", ref: (el) => (this.titleSlotElement = el) }, this.cardTitle && (h("header", { key: '7d526caba45dde6b13bee023e60943711347258a', role: "heading", class: "card-default-title" }, this.cardTitle))), this.description && h("p", { key: '18c3eac26562a592baa29d75674737d11f57beac', class: "description" }, this.description)), h("slot", { key: 'd0d9c40ca8501b0fdfa9d589eeb05692892316a2', name: "chip" }), this.actionLabel && (h("div", { key: '4bd5d9233c0ba1dcda6bebdeff89adbbfe37e4b1', class: "actions" }, h("lmvz-button", { key: '6cefc7ad2859d457ad11b3f4edb1300ba664ef63', class: "action", variant: "secondary", scale: this.size === 'small' ? 'small' : 'default', onLmvzActivation: this.handleActionClick }, this.actionLabel))))));
23
62
  }
24
63
  static get is() { return "lmvz-card"; }
25
- static get encapsulation() { return "scoped"; }
64
+ static get encapsulation() { return "shadow"; }
26
65
  static get originalStyleUrls() {
27
66
  return {
28
67
  "$": ["lmvz-card.css"]
@@ -36,26 +75,56 @@ export class LmvzCard {
36
75
  static get assetsDirs() { return ["../../assets"]; }
37
76
  static get properties() {
38
77
  return {
78
+ "size": {
79
+ "type": "string",
80
+ "mutable": true,
81
+ "complexType": {
82
+ "original": "Card.Size",
83
+ "resolved": "\"large\" | \"small\"",
84
+ "references": {
85
+ "Card": {
86
+ "location": "import",
87
+ "path": "../../api/ds.types",
88
+ "id": "src/api/ds.types.d.ts::Card",
89
+ "referenceLocation": "Card"
90
+ }
91
+ }
92
+ },
93
+ "required": false,
94
+ "optional": false,
95
+ "docs": {
96
+ "tags": [{
97
+ "name": "default",
98
+ "text": "'large'"
99
+ }],
100
+ "text": "Size variant of the card.\nInvalid values are normalized to `large` at runtime."
101
+ },
102
+ "getter": false,
103
+ "setter": false,
104
+ "reflect": true,
105
+ "attribute": "size",
106
+ "defaultValue": "'large'"
107
+ },
39
108
  "cardTitle": {
40
109
  "type": "string",
41
110
  "mutable": false,
42
111
  "complexType": {
43
112
  "original": "string",
44
- "resolved": "string",
113
+ "resolved": "string | undefined",
45
114
  "references": {}
46
115
  },
47
- "required": true,
48
- "optional": false,
116
+ "required": false,
117
+ "optional": true,
49
118
  "docs": {
50
119
  "tags": [],
51
- "text": "Card title (required)"
120
+ "text": "Card title text, rendered as the fallback `<h3>` for the `card-title` slot.\nIgnored when a heading is slotted into `card-title`. One of `cardTitle` or a slotted heading should be supplied."
52
121
  },
53
122
  "getter": false,
54
123
  "setter": false,
55
124
  "reflect": false,
56
125
  "attribute": "card-title"
57
126
  },
58
- "imageUrl": {
127
+ "description": {
59
128
  "type": "string",
60
129
  "mutable": false,
61
130
  "complexType": {
@@ -67,14 +136,14 @@ export class LmvzCard {
67
136
  "optional": true,
68
137
  "docs": {
69
138
  "tags": [],
70
- "text": "Optional image URL; placeholder used if omitted"
139
+ "text": "Optional description text."
71
140
  },
72
141
  "getter": false,
73
142
  "setter": false,
74
143
  "reflect": false,
75
- "attribute": "image-url"
144
+ "attribute": "description"
76
145
  },
77
- "description": {
146
+ "imageUrl": {
78
147
  "type": "string",
79
148
  "mutable": false,
80
149
  "complexType": {
@@ -86,14 +155,14 @@ export class LmvzCard {
86
155
  "optional": true,
87
156
  "docs": {
88
157
  "tags": [],
89
- "text": "Optional description"
158
+ "text": "Optional image URL; falls back to a bundled placeholder graphic when unset."
90
159
  },
91
160
  "getter": false,
92
161
  "setter": false,
93
162
  "reflect": false,
94
- "attribute": "description"
163
+ "attribute": "image-url"
95
164
  },
96
- "primaryActionLabel": {
165
+ "imageAlt": {
97
166
  "type": "string",
98
167
  "mutable": false,
99
168
  "complexType": {
@@ -104,38 +173,62 @@ export class LmvzCard {
104
173
  "required": false,
105
174
  "optional": false,
106
175
  "docs": {
107
- "tags": [],
108
- "text": "Primary action button label"
176
+ "tags": [{
177
+ "name": "default",
178
+ "text": "''"
179
+ }],
180
+ "text": "Accessible alt text for the image."
109
181
  },
110
182
  "getter": false,
111
183
  "setter": false,
112
184
  "reflect": false,
113
- "attribute": "primary-action-label",
185
+ "attribute": "image-alt",
114
186
  "defaultValue": "''"
187
+ },
188
+ "actionLabel": {
189
+ "type": "string",
190
+ "mutable": false,
191
+ "complexType": {
192
+ "original": "string",
193
+ "resolved": "string | undefined",
194
+ "references": {}
195
+ },
196
+ "required": false,
197
+ "optional": true,
198
+ "docs": {
199
+ "tags": [],
200
+ "text": "Label for the card's single action button. The action row renders only when this is a non-empty string."
201
+ },
202
+ "getter": false,
203
+ "setter": false,
204
+ "reflect": false,
205
+ "attribute": "action-label"
115
206
  }
116
207
  };
117
208
  }
118
209
  static get events() {
119
210
  return [{
120
- "method": "primaryAction",
121
- "name": "primaryAction",
211
+ "method": "lmvzCardAction",
212
+ "name": "lmvzCardAction",
122
213
  "bubbles": true,
123
214
  "cancelable": true,
124
215
  "composed": true,
125
216
  "docs": {
126
217
  "tags": [],
127
- "text": "Event emitted when primary button is clicked"
218
+ "text": "Emitted once per activation of the action button."
128
219
  },
129
220
  "complexType": {
130
- "original": "PointerEvent",
131
- "resolved": "PointerEvent",
132
- "references": {
133
- "PointerEvent": {
134
- "location": "global",
135
- "id": "global::PointerEvent"
136
- }
137
- }
221
+ "original": "void",
222
+ "resolved": "void",
223
+ "references": {}
138
224
  }
139
225
  }];
140
226
  }
227
+ static get elementRef() { return "el"; }
228
+ static get watchers() {
229
+ return [{
230
+ "propName": "size",
231
+ "methodName": "normalizeSize"
232
+ }];
233
+ }
141
234
  }
@@ -117,7 +117,7 @@ export class LmvzCheckbox extends ReactiveControllerHost {
117
117
  this.nativeError = true;
118
118
  }
119
119
  render() {
120
- return (h(Host, { key: '089b23f8034fa089f358cc37923182c34f528cd2' }, h("div", { key: '0af011ebf062332c330b49fa3076828204433ac4', class: "pill" }, h("input", { key: 'a483a8c5bbe1d6da3cfab63ce32ad2e6392911ff', type: "checkbox", id: this.checkboxId, checked: this.checkedState, disabled: this.disabled, "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: 'f21d34ab625c7eef23bd2761b399e8770cd62275', class: "box", "aria-hidden": "true" }, this.checkedState && h("span", { key: 'de2680ea17f34ab0124c529d88d4191c97d0a4c5', class: "indicator", innerHTML: CHECKMARK_SVG })), h("span", { key: '1b2d24e43603033a5a77340164e002de326db11a', class: "content" }, h("label", { key: 'b18f17abb4459b3783dc41d0031f4b26795fdcf5', htmlFor: this.checkboxId }, this.label), this.helperText && (h("span", { key: 'f32591c55fcc88d130815780a9999fcb235afd88', onClick: this.retargetInnerClicks.bind(this), class: "helper-text", id: this.helperId, role: "status" }, this.helperText)))), this.errorMessage && (h("span", { key: '076489f5baadab07d95fc787e9ac71bae0a6ab68', onClick: this.retargetInnerClicks.bind(this), class: "error-text", id: this.errorId, role: "alert" }, this.errorMessage))));
120
+ return (h(Host, { key: 'df48e8af0b992d4f2c564aae67dbd42b6454f2c1' }, h("div", { key: 'fe1256e373ee98cc26ca9031654d4d01f10b96e7', class: "pill" }, h("input", { key: '580af189cb0069dd057464efd8c876c1a2dd3826', type: "checkbox", id: this.checkboxId, checked: this.checkedState, disabled: this.disabled, "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: '4a6b3522aa1a43f3c0a7ff203fb5791876555954', class: "box", "aria-hidden": "true" }, this.checkedState && h("span", { key: '3a857015118d911832cdaa1287cee4c63f84afb2', class: "indicator", innerHTML: CHECKMARK_SVG })), h("span", { key: 'aa543c4c37cf220084b3cce423e1d0e48b5c344f', class: "content" }, h("label", { key: '26c8551de719bdd99cce39b9129b59643f2aa44e', htmlFor: this.checkboxId }, this.label), this.helperText && (h("span", { key: '004ead4527953b10b4ab6d89366159d7727320b2', onClick: this.retargetInnerClicks.bind(this), class: "helper-text", id: this.helperId, role: "status" }, this.helperText)))), this.errorMessage && (h("span", { key: '0fa0dcfdf2fe61d510bfe9f0c4f8d16a341f97d7', onClick: this.retargetInnerClicks.bind(this), class: "error-text", id: this.errorId, role: "alert" }, this.errorMessage))));
121
121
  }
122
122
  static get is() { return "lmvz-checkbox"; }
123
123
  static get encapsulation() { return "scoped"; }
@@ -48,7 +48,7 @@ export class LmvzChip extends ReactiveControllerHost {
48
48
  }
49
49
  }, 500);
50
50
  render() {
51
- return (h(Host, { key: '63581b0c567d208b200464e9985ac32d97c1ad43', type: this.type, size: this.size }, h("slot", { key: '7aa740cc80b400893dcbe7021d5513d3f1ca476b', name: "before-text", ref: (el) => (this.beforeSlot = el), onSlotchange: () => this.checkContent() }), h("span", { key: 'da5b9e272becef812b4914bf25b451da16bb9012', class: "content-overflow-wrapper" }, h("slot", { key: 'a925dcd383c86dbea63790b5623d159472b6684c', ref: (el) => (this.defaultSlot = el), onSlotchange: () => this.checkContent() })), h("slot", { key: 'e018eafb75b85068c992e9f91c4fac89a4c95153', name: "after-text", ref: (el) => (this.afterSlot = el), onSlotchange: () => this.checkContent() })));
51
+ return (h(Host, { key: '2dcc9ccddd24f1db7ec65aeed24a1646cee80c76', type: this.type, size: this.size }, h("slot", { key: '756d785d9bdfdaba8c35641afee0743ff343a184', name: "before-text", ref: (el) => (this.beforeSlot = el), onSlotchange: () => this.checkContent() }), h("span", { key: '3df490bd3149acca605da7d7910be11b80585adf', class: "content-overflow-wrapper" }, h("slot", { key: '5c252427faffaea5a95618df4afced110ff15703', ref: (el) => (this.defaultSlot = el), onSlotchange: () => this.checkContent() })), h("slot", { key: '493c1ecd319d9afe0896339320cad67aa37289ab', name: "after-text", ref: (el) => (this.afterSlot = el), onSlotchange: () => this.checkContent() })));
52
52
  }
53
53
  static get is() { return "lmvz-chip"; }
54
54
  static get encapsulation() { return "shadow"; }
@@ -441,13 +441,13 @@ export class LmvzDatepicker {
441
441
  render() {
442
442
  const validationLabels = getValidationLabels(this.locale);
443
443
  const popoverLabel = this.label ? `${this.label} ${validationLabels.popoverSuffix}` : undefined;
444
- return (h(Host, { key: 'af9d7f075bf97d7eb58c6557f43cf8a245d5f712' }, h("lmvz-input", { key: 'eef4be58281b8356d443c65c5cf6451192e70f75', ref: (el) => {
444
+ return (h(Host, { key: '55c1293d79c3c9a1ca591e81c693797194498967' }, h("lmvz-input", { key: '054528d324a2fd99802659a41796da362412bcd9', ref: (el) => {
445
445
  const wasUnset = !this.inputEl;
446
446
  this.inputEl = el;
447
447
  if (wasUnset && this.inputEl) {
448
448
  forceUpdate(this);
449
449
  }
450
- }, label: this.label ?? '', placeholder: this.effectivePlaceholder, helperText: this.helperText, errorMessage: this.errorMessage, error: this.nativeError, disabled: this.disabled, readonly: this.readonly, required: this.required, value: this.inputText, autocomplete: "off", onLmvzInput: this.handleInputTextChange, onKeyDown: this.handleInputKeydown }, h("lmvz-icon", { key: 'fc39ef14720522a8089d33321b918e5577a36cc2', slot: "after-input", icon: CALENDAR_ICON, "aria-hidden": "true" })), h("lmvz-popover", { key: '0076c57da02c7c9d0fcb53584f9dc4127317d6a5', anchor: this.inputEl, open: this.open && !this.disabled, autoFocus: false, size: "md", label: popoverLabel, onLmvzOpen: this.handlePopoverOpen, onLmvzClose: this.handlePopoverClose }, h("div", { key: '4c1e716e52a5d9ed75155dded3c2c39649e1e844', part: "panel", class: "datepicker-panel" }, this.renderHeader(), this.renderGrid()))));
450
+ }, label: this.label ?? '', placeholder: this.effectivePlaceholder, helperText: this.helperText, errorMessage: this.errorMessage, error: this.nativeError, disabled: this.disabled, readonly: this.readonly, required: this.required, value: this.inputText, autocomplete: "off", onLmvzInput: this.handleInputTextChange, onKeyDown: this.handleInputKeydown }, h("lmvz-icon", { key: 'e109a59ba562ff0db88442119725cb38cc01ed6f', slot: "after-input", icon: CALENDAR_ICON, "aria-hidden": "true" })), h("lmvz-popover", { key: 'df9046ff443232be3036fbb9ad2646681e7be697', anchor: this.inputEl, open: this.open && !this.disabled, autoFocus: false, size: "md", label: popoverLabel, onLmvzOpen: this.handlePopoverOpen, onLmvzClose: this.handlePopoverClose }, h("div", { key: 'eea613edc10157650e2e11698afdcc85353bff49', part: "panel", class: "datepicker-panel" }, this.renderHeader(), this.renderGrid()))));
451
451
  }
452
452
  static get is() { return "lmvz-datepicker"; }
453
453
  static get encapsulation() { return "shadow"; }
@@ -87,7 +87,7 @@ export class LmvzHeader extends ReactiveControllerHost {
87
87
  }
88
88
  }
89
89
  render() {
90
- return (h(Host, { key: 'a72c860d7f67c9631c462c0abcc798bb142dfc55', onFocus: this.delegateFocus.bind(this) }, h("div", { key: '4ed87264d201c513bce284536793692424ed864b', class: "brand" }, h("slot", { key: '9291d81d7f8a630007b8ad827a16ebea7222b9d2', name: "brand" }, h("img", { key: '77da99409f40d93e4a2d190cbb2a8857f1e81c36', id: "fallback-logo-lmvz", src: logo, alt: "Lehrmittelverlag Z\u00FCrich" }))), h("nav", { key: '3c40c04bb23524ae58e391a54b044e225a25ad07', "aria-label": "Hauptnavigation" }, h("div", { key: '207b8032d3d11b4bfacb6e7fcffb683ad5da8ccc', role: "menubar", class: "primary-menubar" }, h("slot", { key: '8ae67a57ac7b6bb6083c469a857542e31b0c2294', name: "nav-primary", ref: (el) => (this.primarySlot = el) }), h("div", { key: '86b9696c95e9ae0e3843fa1607f268dcae8cb279', role: "menu", id: "nav-secondary", class: "secondary-menubar", hidden: !this.lmvzActiveNav, ref: (el) => (this.secondaryNav = el) }, h("slot", { key: '67966de33555dc26ac2dc51fc8a85d456a2e8e85', name: this.secondarySlotName, ref: (el) => (this.secondarySlot = el) })))), h("div", { key: 'bfb2831144cee723c3182d96d64f44be1cc5a78b', class: "actions" }, h("slot", { key: '6956b81fa8ed6c446edc5f7d9708462b39bc8cbb', name: "actions" }))));
90
+ return (h(Host, { key: '427f1fe61ea8809a17dc08518c3dca7218cd2c9b', onFocus: this.delegateFocus.bind(this) }, h("div", { key: 'b95c5d269c18001592b4ea853b9c945eeedfda07', class: "brand" }, h("slot", { key: 'd856c174220f6e17b1aa977745bd057f7ca12625', name: "brand" }, h("img", { key: '554896aadccb818f06d01ad88f9be96a1afa615a', id: "fallback-logo-lmvz", src: logo, alt: "Lehrmittelverlag Z\u00FCrich" }))), h("nav", { key: '414d208fe60eb4dd0c1400727b4198b81fc4a041', "aria-label": "Hauptnavigation" }, h("div", { key: '608ea0c8ddcfef024505505ae7f91f644bfc1298', role: "menubar", class: "primary-menubar" }, h("slot", { key: 'b5de644c07b4ef809c7afa377bed5e48356fc93a', name: "nav-primary", ref: (el) => (this.primarySlot = el) }), h("div", { key: 'a6e308da89df8b705a0d03218778bc36fb0cbaf2', role: "menu", id: "nav-secondary", class: "secondary-menubar", hidden: !this.lmvzActiveNav, ref: (el) => (this.secondaryNav = el) }, h("slot", { key: 'cf78a68329eadb96ad656ed81d8b3c72db582fc9', name: this.secondarySlotName, ref: (el) => (this.secondarySlot = el) })))), h("div", { key: 'f7a00431635969cd0f3b29e52d002ec67c8dae04', class: "actions" }, h("slot", { key: '6ed3b3d6ef85646742f0a2cf5267464f06e20a05', name: "actions" }))));
91
91
  }
92
92
  static get is() { return "lmvz-header"; }
93
93
  static get encapsulation() { return "shadow"; }