@lmvz-ds/components 0.21.0 → 0.22.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 (104) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/assets/icons/close-sm.svg +3 -0
  3. package/cjs/{component-Csg9MtNK.js → component-C7cavwmZ.js} +3 -0
  4. package/cjs/{index-C2yDXRqP.js → index-lW-SEvL7.js} +67 -3
  5. package/cjs/lmvz-action.cjs.entry.js +2 -2
  6. package/cjs/{lmvz-button.cjs.entry.js → lmvz-button_2.cjs.entry.js} +139 -14
  7. package/cjs/lmvz-card.cjs.entry.js +2 -2
  8. package/cjs/lmvz-checkbox.cjs.entry.js +3 -3
  9. package/cjs/lmvz-chip.cjs.entry.js +4 -4
  10. package/cjs/lmvz-components.cjs.js +2 -2
  11. package/cjs/lmvz-header_2.cjs.entry.js +3 -3
  12. package/cjs/lmvz-input.cjs.entry.js +4 -4
  13. package/cjs/lmvz-menuitem.cjs.entry.js +3 -3
  14. package/cjs/lmvz-modal.cjs.entry.js +349 -0
  15. package/cjs/lmvz-select.cjs.entry.js +4 -4
  16. package/cjs/lmvz-toggle.cjs.entry.js +5 -5
  17. package/cjs/loader.cjs.js +2 -2
  18. package/cjs/{reactive-controller-host-BA4ZhjKA.js → reactive-controller-host-DnSTWHCF.js} +1 -1
  19. package/collection/assets/icons/close-sm.svg +3 -0
  20. package/collection/collection-manifest.json +1 -0
  21. package/collection/components/lmvz-button/lmvz-button.js +98 -10
  22. package/collection/components/lmvz-chip/lmvz-chip.js +2 -2
  23. package/collection/components/lmvz-modal/lmvz-modal.css +120 -0
  24. package/collection/components/lmvz-modal/lmvz-modal.js +448 -0
  25. package/collection/components/lmvz-select/lmvz-select.js +1 -1
  26. package/collection/components/lmvz-toggle/lmvz-toggle.js +1 -1
  27. package/collection/integration/header-integration/header-integration.js +1 -1
  28. package/components/index.d.ts +2 -0
  29. package/components/index.d.ts.bak +2 -0
  30. package/components/index.js +1 -1
  31. package/components/lmvz-action.js +1 -1
  32. package/components/lmvz-button.js +1 -1
  33. package/components/lmvz-card.js +1 -1
  34. package/components/lmvz-checkbox.js +1 -1
  35. package/components/lmvz-chip.js +1 -1
  36. package/components/lmvz-header.js +1 -1
  37. package/components/lmvz-icon.js +1 -1
  38. package/components/lmvz-input.js +1 -1
  39. package/components/lmvz-menuitem.js +1 -1
  40. package/components/lmvz-modal.d.ts +11 -0
  41. package/components/lmvz-modal.d.ts.bak +11 -0
  42. package/components/lmvz-modal.js +1 -0
  43. package/components/lmvz-select.js +1 -1
  44. package/components/lmvz-toggle.js +1 -1
  45. package/components/p-Boj0PCdB.js +1 -0
  46. package/components/p-CK8cAKcB.js +1 -0
  47. package/components/p-Cc6dOWwS.js +1 -0
  48. package/components/{p-BuFx0tTm.js → p-DBc1BzQb.js} +1 -1
  49. package/components/p-DOTK1OW3.js +1 -0
  50. package/esm/{component-DIrAQ4IB.js → component-DOTK1OW3.js} +3 -0
  51. package/esm/{index-saW7O-EW.js → index-Aa_425iY.js} +67 -3
  52. package/esm/lmvz-action.entry.js +2 -2
  53. package/esm/{lmvz-button.entry.js → lmvz-button_2.entry.js} +139 -15
  54. package/esm/lmvz-card.entry.js +2 -2
  55. package/esm/lmvz-checkbox.entry.js +3 -3
  56. package/esm/lmvz-chip.entry.js +4 -4
  57. package/esm/lmvz-components.js +3 -3
  58. package/esm/lmvz-header_2.entry.js +3 -3
  59. package/esm/lmvz-input.entry.js +4 -4
  60. package/esm/lmvz-menuitem.entry.js +3 -3
  61. package/esm/lmvz-modal.entry.js +347 -0
  62. package/esm/lmvz-select.entry.js +4 -4
  63. package/esm/lmvz-toggle.entry.js +5 -5
  64. package/esm/loader.js +3 -3
  65. package/esm/{reactive-controller-host-DHcPpJW7.js → reactive-controller-host-lF2kXM1x.js} +1 -1
  66. package/hydrate/index.js +451 -26
  67. package/hydrate/index.mjs +451 -26
  68. package/lmvz-components/lmvz-components.esm.js +1 -1
  69. package/lmvz-components/p-08a08b63.entry.js +1 -0
  70. package/lmvz-components/p-1b181e90.entry.js +1 -0
  71. package/lmvz-components/p-23fb2476.entry.js +1 -0
  72. package/lmvz-components/p-3846ba08.entry.js +1 -0
  73. package/lmvz-components/p-6bb145e4.entry.js +1 -0
  74. package/lmvz-components/{p-2f83d7a2.entry.js → p-7a310b1e.entry.js} +1 -1
  75. package/lmvz-components/p-Aa_425iY.js +2 -0
  76. package/lmvz-components/{p-GdMr6Qlp.js → p-DCTzMRMQ.js} +1 -1
  77. package/lmvz-components/p-DOTK1OW3.js +1 -0
  78. package/lmvz-components/p-b7940687.entry.js +1 -0
  79. package/lmvz-components/p-d984e118.entry.js +1 -0
  80. package/lmvz-components/p-db8306a5.entry.js +1 -0
  81. package/lmvz-components/p-ea335543.entry.js +1 -0
  82. package/lmvz-components/p-f8ea0eb2.entry.js +1 -0
  83. package/manifest.json +252 -5
  84. package/package.json +5 -1
  85. package/types/api/index.d.ts +6 -0
  86. package/types/components/lmvz-button/lmvz-button.d.ts +4 -0
  87. package/types/components/lmvz-modal/lmvz-modal.d.ts +58 -0
  88. package/types/components.d.ts +77 -0
  89. package/cjs/lmvz-icon.cjs.entry.js +0 -100
  90. package/components/p-C_bScbrd.js +0 -1
  91. package/components/p-DIrAQ4IB.js +0 -1
  92. package/esm/lmvz-icon.entry.js +0 -98
  93. package/lmvz-components/p-0f7a4236.entry.js +0 -1
  94. package/lmvz-components/p-32171f4f.entry.js +0 -1
  95. package/lmvz-components/p-400b2318.entry.js +0 -1
  96. package/lmvz-components/p-43e295ba.entry.js +0 -1
  97. package/lmvz-components/p-851969bd.entry.js +0 -1
  98. package/lmvz-components/p-9f9d845d.entry.js +0 -1
  99. package/lmvz-components/p-DIrAQ4IB.js +0 -1
  100. package/lmvz-components/p-a12f95da.entry.js +0 -1
  101. package/lmvz-components/p-ab4437dc.entry.js +0 -1
  102. package/lmvz-components/p-c3b7890d.entry.js +0 -1
  103. package/lmvz-components/p-d0a0e206.entry.js +0 -1
  104. package/lmvz-components/p-saW7O-EW.js +0 -2
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-05-21T07:12:41",
2
+ "timestamp": "2026-05-22T15:20:34",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.43.4",
@@ -172,6 +172,67 @@
172
172
  "getter": false,
173
173
  "setter": false
174
174
  },
175
+ {
176
+ "name": "formMethod",
177
+ "type": "\"dialog\" | \"get\" | \"post\" | undefined",
178
+ "complexType": {
179
+ "original": "'dialog' | 'get' | 'post'",
180
+ "resolved": "\"dialog\" | \"get\" | \"post\" | undefined",
181
+ "references": {}
182
+ },
183
+ "mutable": false,
184
+ "attr": "form-method",
185
+ "reflectToAttr": false,
186
+ "docs": "Native formmethod value forwarded to the hidden native submit button.\nUse `dialog` to support native dialog close/confirm flows from `lmvz-button`.",
187
+ "docsTags": [],
188
+ "values": [
189
+ {
190
+ "value": "dialog",
191
+ "type": "string"
192
+ },
193
+ {
194
+ "value": "get",
195
+ "type": "string"
196
+ },
197
+ {
198
+ "value": "post",
199
+ "type": "string"
200
+ },
201
+ {
202
+ "type": "undefined"
203
+ }
204
+ ],
205
+ "optional": true,
206
+ "required": false,
207
+ "getter": false,
208
+ "setter": false
209
+ },
210
+ {
211
+ "name": "name",
212
+ "type": "string | undefined",
213
+ "complexType": {
214
+ "original": "string",
215
+ "resolved": "string | undefined",
216
+ "references": {}
217
+ },
218
+ "mutable": false,
219
+ "attr": "name",
220
+ "reflectToAttr": false,
221
+ "docs": "Native button name forwarded to the hidden native submit button.",
222
+ "docsTags": [],
223
+ "values": [
224
+ {
225
+ "type": "string"
226
+ },
227
+ {
228
+ "type": "undefined"
229
+ }
230
+ ],
231
+ "optional": true,
232
+ "required": false,
233
+ "getter": false,
234
+ "setter": false
235
+ },
175
236
  {
176
237
  "name": "scale",
177
238
  "type": "\"default\" | \"large\" | \"small\"",
@@ -284,6 +345,32 @@
284
345
  "getter": false,
285
346
  "setter": false
286
347
  },
348
+ {
349
+ "name": "value",
350
+ "type": "string | undefined",
351
+ "complexType": {
352
+ "original": "string",
353
+ "resolved": "string | undefined",
354
+ "references": {}
355
+ },
356
+ "mutable": false,
357
+ "attr": "value",
358
+ "reflectToAttr": false,
359
+ "docs": "Native button value forwarded to the hidden native submit button.\nFor `formmethod=\"dialog\"` flows this becomes the dialog `returnValue`.",
360
+ "docsTags": [],
361
+ "values": [
362
+ {
363
+ "type": "string"
364
+ },
365
+ {
366
+ "type": "undefined"
367
+ }
368
+ ],
369
+ "optional": true,
370
+ "required": false,
371
+ "getter": false,
372
+ "setter": false
373
+ },
287
374
  {
288
375
  "name": "variant",
289
376
  "type": "\"primary\" | \"secondary\" | \"tertiary\"",
@@ -357,9 +444,15 @@
357
444
  ],
358
445
  "parts": [],
359
446
  "states": [],
360
- "dependents": [],
447
+ "dependents": [
448
+ "lmvz-modal"
449
+ ],
361
450
  "dependencies": [],
362
- "dependencyGraph": {}
451
+ "dependencyGraph": {
452
+ "lmvz-modal": [
453
+ "lmvz-button"
454
+ ]
455
+ }
363
456
  },
364
457
  {
365
458
  "filePath": "src/components/lmvz-card/lmvz-card.tsx",
@@ -1391,9 +1484,15 @@
1391
1484
  "slots": [],
1392
1485
  "parts": [],
1393
1486
  "states": [],
1394
- "dependents": [],
1487
+ "dependents": [
1488
+ "lmvz-modal"
1489
+ ],
1395
1490
  "dependencies": [],
1396
- "dependencyGraph": {}
1491
+ "dependencyGraph": {
1492
+ "lmvz-modal": [
1493
+ "lmvz-icon"
1494
+ ]
1495
+ }
1397
1496
  },
1398
1497
  {
1399
1498
  "filePath": "src/components/lmvz-input/lmvz-input.tsx",
@@ -5532,6 +5631,154 @@
5532
5631
  "dependencies": [],
5533
5632
  "dependencyGraph": {}
5534
5633
  },
5634
+ {
5635
+ "filePath": "src/components/lmvz-modal/lmvz-modal.tsx",
5636
+ "encapsulation": "shadow",
5637
+ "tag": "lmvz-modal",
5638
+ "readme": "# lmvz-modal\n\n\n",
5639
+ "docs": "Native dialog-backed modal with inline `header`, body, and `actions` regions.\n\nThe implementation intentionally ignores Figma preview container sizes and instead sizes against the viewport plus LMVZ spacing tokens.",
5640
+ "docsTags": [
5641
+ {
5642
+ "name": "slot",
5643
+ "text": "header - Optional header content used as the dialog's accessible name when present."
5644
+ },
5645
+ {
5646
+ "name": "slot",
5647
+ "text": "default - Modal body content."
5648
+ },
5649
+ {
5650
+ "name": "slot",
5651
+ "text": "actions - Modal actions. Only direct `lmvz-button` children are allowed."
5652
+ }
5653
+ ],
5654
+ "usage": {},
5655
+ "props": [
5656
+ {
5657
+ "name": "closeLabel",
5658
+ "type": "string",
5659
+ "complexType": {
5660
+ "original": "string",
5661
+ "resolved": "string",
5662
+ "references": {}
5663
+ },
5664
+ "mutable": false,
5665
+ "attr": "close-label",
5666
+ "reflectToAttr": false,
5667
+ "docs": "Accessible label for the internal close button.",
5668
+ "docsTags": [
5669
+ {
5670
+ "name": "default",
5671
+ "text": "'Schliessen'"
5672
+ }
5673
+ ],
5674
+ "default": "'Schliessen'",
5675
+ "values": [
5676
+ {
5677
+ "type": "string"
5678
+ }
5679
+ ],
5680
+ "optional": false,
5681
+ "required": false,
5682
+ "getter": false,
5683
+ "setter": false
5684
+ },
5685
+ {
5686
+ "name": "open",
5687
+ "type": "boolean",
5688
+ "complexType": {
5689
+ "original": "boolean",
5690
+ "resolved": "boolean",
5691
+ "references": {}
5692
+ },
5693
+ "mutable": true,
5694
+ "attr": "open",
5695
+ "reflectToAttr": true,
5696
+ "docs": "Controls the native dialog visibility.",
5697
+ "docsTags": [
5698
+ {
5699
+ "name": "default",
5700
+ "text": "false"
5701
+ }
5702
+ ],
5703
+ "default": "false",
5704
+ "values": [
5705
+ {
5706
+ "type": "boolean"
5707
+ }
5708
+ ],
5709
+ "optional": false,
5710
+ "required": false,
5711
+ "getter": false,
5712
+ "setter": false
5713
+ }
5714
+ ],
5715
+ "methods": [],
5716
+ "events": [
5717
+ {
5718
+ "event": "cancel",
5719
+ "detail": "void",
5720
+ "bubbles": false,
5721
+ "complexType": {
5722
+ "original": "void",
5723
+ "resolved": "void",
5724
+ "references": {}
5725
+ },
5726
+ "cancelable": true,
5727
+ "composed": false,
5728
+ "docs": "Re-emitted from the host whenever the native dialog receives a `cancel` event (e.g. Escape key).\nCall `event.preventDefault()` to keep the dialog open.",
5729
+ "docsTags": []
5730
+ },
5731
+ {
5732
+ "event": "close",
5733
+ "detail": "void",
5734
+ "bubbles": true,
5735
+ "complexType": {
5736
+ "original": "void",
5737
+ "resolved": "void",
5738
+ "references": {}
5739
+ },
5740
+ "cancelable": false,
5741
+ "composed": true,
5742
+ "docs": "Re-emitted from the host whenever the native dialog closes so framework wrappers can synchronize bound state.",
5743
+ "docsTags": []
5744
+ }
5745
+ ],
5746
+ "listeners": [
5747
+ {
5748
+ "event": "submit",
5749
+ "capture": false,
5750
+ "passive": false
5751
+ }
5752
+ ],
5753
+ "styles": [],
5754
+ "slots": [
5755
+ {
5756
+ "name": "actions",
5757
+ "docs": "Modal actions. Only direct `lmvz-button` children are allowed."
5758
+ },
5759
+ {
5760
+ "name": "default",
5761
+ "docs": "Modal body content."
5762
+ },
5763
+ {
5764
+ "name": "header",
5765
+ "docs": "Optional header content used as the dialog's accessible name when present."
5766
+ }
5767
+ ],
5768
+ "parts": [],
5769
+ "states": [],
5770
+ "dependents": [],
5771
+ "dependencies": [
5772
+ "lmvz-button",
5773
+ "lmvz-icon"
5774
+ ],
5775
+ "dependencyGraph": {
5776
+ "lmvz-modal": [
5777
+ "lmvz-button",
5778
+ "lmvz-icon"
5779
+ ]
5780
+ }
5781
+ },
5535
5782
  {
5536
5783
  "filePath": "src/components/lmvz-select/lmvz-select.tsx",
5537
5784
  "encapsulation": "scoped",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lmvz-ds/components",
3
3
  "private": false,
4
- "version": "0.21.0",
4
+ "version": "0.22.0",
5
5
  "type": "module",
6
6
  "description": "The components of the design system",
7
7
  "author": "Patrick Nemenz <patrick.nemenz@adesso.at>",
@@ -64,6 +64,10 @@
64
64
  "types": "./components/lmvz-menuitem.d.ts",
65
65
  "import": "./components/lmvz-menuitem.js"
66
66
  },
67
+ "./lmvz-modal": {
68
+ "types": "./components/lmvz-modal.d.ts",
69
+ "import": "./components/lmvz-modal.js"
70
+ },
67
71
  "./lmvz-select": {
68
72
  "types": "./components/lmvz-select.d.ts",
69
73
  "import": "./components/lmvz-select.js"
@@ -1,2 +1,8 @@
1
1
  export type * from './aria-types';
2
2
  export type * from './ds.types';
3
+
4
+ declare global {
5
+ interface HTMLLmvzModalElement {
6
+ readonly dialog: HTMLDialogElement | undefined;
7
+ }
8
+ }
@@ -16,8 +16,12 @@ export declare class LmvzButton extends ReactiveControllerHost implements AriaVa
16
16
  disabled: boolean;
17
17
  type: 'submit' | 'button';
18
18
  form?: FormRef;
19
+ formMethod?: 'dialog' | 'get' | 'post';
20
+ name?: string;
21
+ value?: string;
19
22
  constructor();
20
23
  connectedCallback(): void;
24
+ disconnectedCallback(): void;
21
25
  private renderHiddenButton;
22
26
  private submitForm;
23
27
  private handleClick;
@@ -0,0 +1,58 @@
1
+ import { type EventEmitter } from '../../stencil-public-runtime';
2
+ import { type AriaValidationHost } from '../../utils/aria/aria-validation-controller';
3
+ import { ReactiveControllerHost } from '../../utils/reactive-controller-host';
4
+ export declare class LmvzModal extends ReactiveControllerHost implements AriaValidationHost {
5
+ readonly el: HTMLLmvzModalElement;
6
+ private inheritedAriaAttributes;
7
+ private dialogEl?;
8
+ private dialogStateObserver?;
9
+ private actionsStateObserver?;
10
+ private headerSlot?;
11
+ private actionsSlot?;
12
+ private closeButtonEl?;
13
+ private previouslyFocusedElement;
14
+ private wrappedDialogShowModal?;
15
+ private lastActionValidationMessage?;
16
+ private pendingCloseReturnValue;
17
+ private readonly dialogTitleId;
18
+ private hasActions;
19
+ private hasHeader;
20
+ open: boolean;
21
+ closeLabel: string;
22
+ dialogClose: EventEmitter<void>;
23
+ dialogCancel: EventEmitter<void>;
24
+ get dialog(): HTMLDialogElement | undefined;
25
+ get validationEl(): HTMLDialogElement | HTMLLmvzModalElement;
26
+ get validationSlot(): HTMLSlotElement | undefined;
27
+ constructor();
28
+ protected handleFormDialogSubmit(event: SubmitEvent): void;
29
+ connectedCallback(): void;
30
+ componentDidLoad(): void;
31
+ disconnectedCallback(): void;
32
+ componentDidRender(): void;
33
+ protected handleOpenChange(): void;
34
+ private get dialogAccessibilityAttributes();
35
+ private get actionButtons();
36
+ private get enabledActionButtons();
37
+ private get assignedActionElements();
38
+ private isDisabledActionButton;
39
+ private getActionVariant;
40
+ private getActionValidationResult;
41
+ private hasAssignedContent;
42
+ private observeDialogState;
43
+ private isVisibleActionButton;
44
+ private capturePreviouslyFocusedElement;
45
+ private ensureDialogShowModalCapture;
46
+ private syncDialogVisibility;
47
+ private focusPrimaryAction;
48
+ private restoreFocus;
49
+ private readonly handleCloseButtonClick;
50
+ private readonly handleDialogCancel;
51
+ private readonly handleDialogClose;
52
+ private readonly handleHeaderSlotChange;
53
+ private observeActionState;
54
+ private syncActionsState;
55
+ private handleActionsSlotChange;
56
+ private checkActions;
57
+ render(): any;
58
+ }
@@ -27,6 +27,14 @@ export declare namespace Components {
27
27
  * The HTML form element or form element id. Used to submit a form when the button is not a child of the form.
28
28
  */
29
29
  "form"?: FormRef;
30
+ /**
31
+ * Native formmethod value forwarded to the hidden native submit button. Use `dialog` to support native dialog close/confirm flows from `lmvz-button`.
32
+ */
33
+ "formMethod"?: 'dialog' | 'get' | 'post';
34
+ /**
35
+ * Native button name forwarded to the hidden native submit button.
36
+ */
37
+ "name"?: string;
30
38
  /**
31
39
  * Scale of the button
32
40
  * @default 'default'
@@ -42,6 +50,10 @@ export declare namespace Components {
42
50
  * @default 'button'
43
51
  */
44
52
  "type": 'submit' | 'button';
53
+ /**
54
+ * Native button value forwarded to the hidden native submit button. For `formmethod="dialog"` flows this becomes the dialog `returnValue`.
55
+ */
56
+ "value"?: string;
45
57
  /**
46
58
  * Variant of the button
47
59
  * @default 'secondary', since the primary button should be marked as such in context
@@ -364,6 +376,22 @@ export declare namespace Components {
364
376
  */
365
377
  "ti": number;
366
378
  }
379
+ /**
380
+ * Native dialog-backed modal with inline `header`, body, and `actions` regions.
381
+ * The implementation intentionally ignores Figma preview container sizes and instead sizes against the viewport plus LMVZ spacing tokens.
382
+ */
383
+ export interface LmvzModal {
384
+ /**
385
+ * Accessible label for the internal close button.
386
+ * @default 'Schliessen'
387
+ */
388
+ "closeLabel": string;
389
+ /**
390
+ * Controls the native dialog visibility.
391
+ * @default false
392
+ */
393
+ "open": boolean;
394
+ }
367
395
  /**
368
396
  * Select component with floating label and pill-shaped trigger.
369
397
  * Wraps a native `<select>` element for full keyboard and form support.
@@ -505,6 +533,14 @@ export declare namespace JSX {
505
533
  * The HTML form element or form element id. Used to submit a form when the button is not a child of the form.
506
534
  */
507
535
  "form"?: FormRef;
536
+ /**
537
+ * Native formmethod value forwarded to the hidden native submit button. Use `dialog` to support native dialog close/confirm flows from `lmvz-button`.
538
+ */
539
+ "formMethod"?: 'dialog' | 'get' | 'post';
540
+ /**
541
+ * Native button name forwarded to the hidden native submit button.
542
+ */
543
+ "name"?: string;
508
544
  /**
509
545
  * Event emitted when the button is activated, either by a click or by pressing "Enter" when the button is focused.
510
546
  */
@@ -524,6 +560,10 @@ export declare namespace JSX {
524
560
  * @default 'button'
525
561
  */
526
562
  "type"?: 'submit' | 'button';
563
+ /**
564
+ * Native button value forwarded to the hidden native submit button. For `formmethod="dialog"` flows this becomes the dialog `returnValue`.
565
+ */
566
+ "value"?: string;
527
567
  /**
528
568
  * Variant of the button
529
569
  * @default 'secondary', since the primary button should be marked as such in context
@@ -822,6 +862,30 @@ export declare namespace JSX {
822
862
  */
823
863
  "ti"?: number;
824
864
  }
865
+ /**
866
+ * Native dialog-backed modal with inline `header`, body, and `actions` regions.
867
+ * The implementation intentionally ignores Figma preview container sizes and instead sizes against the viewport plus LMVZ spacing tokens.
868
+ */
869
+ export interface LmvzModal {
870
+ /**
871
+ * Accessible label for the internal close button.
872
+ * @default 'Schliessen'
873
+ */
874
+ "closeLabel"?: string;
875
+ /**
876
+ * Re-emitted from the host whenever the native dialog receives a `cancel` event (e.g. Escape key). Call `event.preventDefault()` to keep the dialog open.
877
+ */
878
+ "onCancel"?: (event: LmvzModalCustomEvent<void>) => void;
879
+ /**
880
+ * Re-emitted from the host whenever the native dialog closes so framework wrappers can synchronize bound state.
881
+ */
882
+ "onClose"?: (event: LmvzModalCustomEvent<void>) => void;
883
+ /**
884
+ * Controls the native dialog visibility.
885
+ * @default false
886
+ */
887
+ "open"?: boolean;
888
+ }
825
889
  /**
826
890
  * Select component with floating label and pill-shaped trigger.
827
891
  * Wraps a native `<select>` element for full keyboard and form support.
@@ -921,6 +985,9 @@ export declare namespace JSX {
921
985
  "disabled": boolean;
922
986
  "type": 'submit' | 'button';
923
987
  "form": FormRef;
988
+ "formMethod": 'dialog' | 'get' | 'post';
989
+ "name": string;
990
+ "value": string;
924
991
  }
925
992
  export interface LmvzCardAttributes {
926
993
  "cardTitle": string;
@@ -986,6 +1053,10 @@ export declare namespace JSX {
986
1053
  "role": string;
987
1054
  "ti": number;
988
1055
  }
1056
+ export interface LmvzModalAttributes {
1057
+ "open": boolean;
1058
+ "closeLabel": string;
1059
+ }
989
1060
  export interface LmvzSelectAttributes {
990
1061
  "value": string;
991
1062
  "label": string;
@@ -1014,6 +1085,7 @@ export declare namespace JSX {
1014
1085
  "lmvz-icon": Omit<LmvzIcon, keyof LmvzIconAttributes> & { [K in keyof LmvzIcon & keyof LmvzIconAttributes]?: LmvzIcon[K] } & { [K in keyof LmvzIcon & keyof LmvzIconAttributes as `attr:${K}`]?: LmvzIconAttributes[K] } & { [K in keyof LmvzIcon & keyof LmvzIconAttributes as `prop:${K}`]?: LmvzIcon[K] } & OneOf<"icon", LmvzIcon["icon"], LmvzIconAttributes["icon"]>;
1015
1086
  "lmvz-input": Omit<LmvzInput, keyof LmvzInputAttributes> & { [K in keyof LmvzInput & keyof LmvzInputAttributes]?: LmvzInput[K] } & { [K in keyof LmvzInput & keyof LmvzInputAttributes as `attr:${K}`]?: LmvzInputAttributes[K] } & { [K in keyof LmvzInput & keyof LmvzInputAttributes as `prop:${K}`]?: LmvzInput[K] } & OneOf<"label", LmvzInput["label"], LmvzInputAttributes["label"]>;
1016
1087
  "lmvz-menuitem": Omit<LmvzMenuitem, keyof LmvzMenuitemAttributes> & { [K in keyof LmvzMenuitem & keyof LmvzMenuitemAttributes]?: LmvzMenuitem[K] } & { [K in keyof LmvzMenuitem & keyof LmvzMenuitemAttributes as `attr:${K}`]?: LmvzMenuitemAttributes[K] } & { [K in keyof LmvzMenuitem & keyof LmvzMenuitemAttributes as `prop:${K}`]?: LmvzMenuitem[K] };
1088
+ "lmvz-modal": Omit<LmvzModal, keyof LmvzModalAttributes> & { [K in keyof LmvzModal & keyof LmvzModalAttributes]?: LmvzModal[K] } & { [K in keyof LmvzModal & keyof LmvzModalAttributes as `attr:${K}`]?: LmvzModalAttributes[K] } & { [K in keyof LmvzModal & keyof LmvzModalAttributes as `prop:${K}`]?: LmvzModal[K] };
1017
1089
  "lmvz-select": Omit<LmvzSelect, keyof LmvzSelectAttributes> & { [K in keyof LmvzSelect & keyof LmvzSelectAttributes]?: LmvzSelect[K] } & { [K in keyof LmvzSelect & keyof LmvzSelectAttributes as `attr:${K}`]?: LmvzSelectAttributes[K] } & { [K in keyof LmvzSelect & keyof LmvzSelectAttributes as `prop:${K}`]?: LmvzSelect[K] } & OneOf<"label", LmvzSelect["label"], LmvzSelectAttributes["label"]>;
1018
1090
  "lmvz-toggle": Omit<LmvzToggle, keyof LmvzToggleAttributes> & { [K in keyof LmvzToggle & keyof LmvzToggleAttributes]?: LmvzToggle[K] } & { [K in keyof LmvzToggle & keyof LmvzToggleAttributes as `attr:${K}`]?: LmvzToggleAttributes[K] } & { [K in keyof LmvzToggle & keyof LmvzToggleAttributes as `prop:${K}`]?: LmvzToggle[K] } & OneOf<"label", LmvzToggle["label"], LmvzToggleAttributes["label"]>;
1019
1091
  }
@@ -1054,6 +1126,11 @@ export declare interface LmvzMenuitemCustomEvent<T> extends CustomEvent<T> {
1054
1126
  target: HTMLLmvzMenuitemElement;
1055
1127
  }
1056
1128
 
1129
+ export declare interface LmvzModalCustomEvent<T> extends CustomEvent<T> {
1130
+ detail: T;
1131
+ target: HTMLLmvzModalElement;
1132
+ }
1133
+
1057
1134
  export declare interface LmvzSelectCustomEvent<T> extends CustomEvent<T> {
1058
1135
  detail: T;
1059
1136
  target: HTMLLmvzSelectElement;
@@ -1,100 +0,0 @@
1
- 'use strict';
2
-
3
- var index = require('./index-C2yDXRqP.js');
4
- var svg = require('./svg-BMBduILB.js');
5
- var reactiveControllerHost = require('./reactive-controller-host-BA4ZhjKA.js');
6
- var icons = require('./icons-BQASWgk-.js');
7
- require('./logger-DsM6xg6V.js');
8
- require('./aria-loader-Cec1zR2g.js');
9
-
10
- const lmvzIconCss = () => `.sc-lmvz-icon-h{--lmvz-icon-color:var(--lmvz-component-color, var(--lmvz-semantic-color-on-surface-input-primary, #000000));--lmvz-icon-size:var(--lmvz-component-size, var(--lmvz-component-icon-size-md, clamp(1rem, 0.94rem + 0.26vw, 1.25rem)));display:inline-block;line-height:0;svg{display:block;height:var(--lmvz-icon-size);width:auto}svg path{stroke:var(--lmvz-icon-color);fill:none}}[size='xs'].sc-lmvz-icon-h{svg{--lmvz-icon-size:var(--lmvz-component-icon-size-xs, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem))}}[size='sm'].sc-lmvz-icon-h{svg{--lmvz-icon-size:var(--lmvz-component-icon-size-sm, clamp(0.88rem, 0.84rem + 0.13vw, 1rem))}}[size='md'].sc-lmvz-icon-h{svg{--lmvz-icon-size:var(--lmvz-component-icon-size-md, clamp(1rem, 0.94rem + 0.26vw, 1.25rem))}}[size='lg'].sc-lmvz-icon-h{svg{--lmvz-icon-size:var(--lmvz-component-icon-size-lg, clamp(1.5rem, 1.44rem + 0.26vw, 1.75rem))}}[size='inherit'].sc-lmvz-icon-h{svg{height:var(--lmvz-component-size, inherit)}}[weight='light'].sc-lmvz-icon-h{svg path{stroke-width:1}}[weight='medium'].sc-lmvz-icon-h{svg path{stroke-width:1.5}}[weight='bold'].sc-lmvz-icon-h{svg path{stroke-width:2}}[weight='filled'].sc-lmvz-icon-h{svg path{stroke-width:2;fill:var(--lmvz-icon-color)}}`;
11
-
12
- const LmvzIcon = class extends reactiveControllerHost.ReactiveControllerHost {
13
- intersectionObserver;
14
- ariaValidationController = new reactiveControllerHost.AriaValidationController(this);
15
- get el() { return index.getElement(this); }
16
- validationEl;
17
- icon;
18
- weight = 'medium';
19
- size = 'md';
20
- iconset;
21
- iconData;
22
- visible = false;
23
- ariaLabel;
24
- get ariaHidden() {
25
- return !this.ariaLabel;
26
- }
27
- constructor(hostRef) {
28
- super();
29
- index.registerInstance(this, hostRef);
30
- this.addController(this.ariaValidationController);
31
- }
32
- connectedCallback() {
33
- this.waitUntilVisible(() => {
34
- this.visible = true;
35
- this.loadIconPathData();
36
- });
37
- super.connectedCallback();
38
- }
39
- disconnectedCallback() {
40
- if (this.intersectionObserver && typeof this.intersectionObserver.disconnect === 'function') {
41
- this.intersectionObserver.disconnect();
42
- }
43
- this.intersectionObserver = undefined;
44
- super.disconnectedCallback();
45
- }
46
- async loadIconPathData() {
47
- const { icon, iconset, visible } = this;
48
- if (!icon || !visible) {
49
- return;
50
- }
51
- const maybeIcon = svg.parseSvgString(icon);
52
- if (maybeIcon) {
53
- this.iconData = maybeIcon;
54
- return;
55
- }
56
- this.iconData = await icons.resolveIconSvg({
57
- icon,
58
- iconset,
59
- });
60
- }
61
- componentDidRender() {
62
- this.validationEl = this.el.querySelector('svg');
63
- this.ariaValidationController.revalidateAria();
64
- super.componentDidRender();
65
- }
66
- render() {
67
- return index.h(index.Host, { key: 'e76fe28500b3545b8917ecdad590da5bc04ed38f', role: "img", "aria-hidden": `${this.ariaHidden}`, innerHTML: this.iconData });
68
- }
69
- waitUntilVisible(callback, rootMargin = 50) {
70
- if (typeof window === 'undefined' || !window.IntersectionObserver) {
71
- callback();
72
- return;
73
- }
74
- this.intersectionObserver = new IntersectionObserver((entries) => {
75
- entries.some((entry) => {
76
- if (entry.isIntersecting) {
77
- if (this.intersectionObserver && typeof this.intersectionObserver.disconnect === 'function') {
78
- this.intersectionObserver.disconnect();
79
- }
80
- this.intersectionObserver = undefined;
81
- callback();
82
- return true;
83
- }
84
- return false;
85
- });
86
- }, { rootMargin: `${rootMargin}px` });
87
- this.intersectionObserver.observe(this.el);
88
- }
89
- static get watchers() { return {
90
- "icon": [{
91
- "loadIconPathData": 0
92
- }],
93
- "iconset": [{
94
- "loadIconPathData": 0
95
- }]
96
- }; }
97
- };
98
- LmvzIcon.style = lmvzIconCss();
99
-
100
- exports.lmvz_icon = LmvzIcon;