@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
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-06-02T16:23:34",
2
+ "timestamp": "2026-06-11T12:19:37",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.43.5",
@@ -452,12 +452,16 @@
452
452
  ],
453
453
  "states": [],
454
454
  "dependents": [
455
- "lmvz-modal"
455
+ "lmvz-modal",
456
+ "lmvz-snackbar"
456
457
  ],
457
458
  "dependencies": [],
458
459
  "dependencyGraph": {
459
460
  "lmvz-modal": [
460
461
  "lmvz-button"
462
+ ],
463
+ "lmvz-snackbar": [
464
+ "lmvz-button"
461
465
  ]
462
466
  }
463
467
  },
@@ -1512,10 +1516,10 @@
1512
1516
  },
1513
1517
  {
1514
1518
  "name": "weight",
1515
- "type": "\"bold\" | \"filled\" | \"medium\" | \"thin\" | undefined",
1519
+ "type": "\"bold\" | \"medium\" | \"thin\" | undefined",
1516
1520
  "complexType": {
1517
1521
  "original": "Icon.IconWeight",
1518
- "resolved": "\"bold\" | \"filled\" | \"medium\" | \"thin\" | undefined",
1522
+ "resolved": "\"bold\" | \"medium\" | \"thin\" | undefined",
1519
1523
  "references": {
1520
1524
  "Icon": {
1521
1525
  "location": "import",
@@ -1541,10 +1545,6 @@
1541
1545
  "value": "bold",
1542
1546
  "type": "string"
1543
1547
  },
1544
- {
1545
- "value": "filled",
1546
- "type": "string"
1547
- },
1548
1548
  {
1549
1549
  "value": "medium",
1550
1550
  "type": "string"
@@ -1582,12 +1582,16 @@
1582
1582
  "parts": [],
1583
1583
  "states": [],
1584
1584
  "dependents": [
1585
- "lmvz-modal"
1585
+ "lmvz-modal",
1586
+ "lmvz-snackbar"
1586
1587
  ],
1587
1588
  "dependencies": [],
1588
1589
  "dependencyGraph": {
1589
1590
  "lmvz-modal": [
1590
1591
  "lmvz-icon"
1592
+ ],
1593
+ "lmvz-snackbar": [
1594
+ "lmvz-icon"
1591
1595
  ]
1592
1596
  }
1593
1597
  },
@@ -6500,93 +6504,56 @@
6500
6504
  "dependencyGraph": {}
6501
6505
  },
6502
6506
  {
6503
- "filePath": "src/components/lmvz-toggle/lmvz-toggle.tsx",
6504
- "encapsulation": "scoped",
6505
- "tag": "lmvz-toggle",
6506
- "readme": "# lmvz-toggle\n\n\n",
6507
- "docs": "Toggle (switch) component. Wraps a native `<input type=\"checkbox\" role=\"switch\">` for full keyboard and form support.",
6508
- "docsTags": [
6509
- {
6510
- "name": "example",
6511
- "text": "```html\n<lmvz-toggle label=\"Enable notifications\" name=\"notifications\" required></lmvz-toggle>\n```"
6512
- }
6513
- ],
6507
+ "filePath": "src/components/lmvz-snackbar/lmvz-snackbar.tsx",
6508
+ "encapsulation": "shadow",
6509
+ "tag": "lmvz-snackbar",
6510
+ "readme": "# lmvz-snackbar\n\nBrief notification displayed at the bottom center of the screen with optional auto-dismiss. Use snackbars to communicate non-blocking confirmations, warnings, or errors to the user.\n\n## Status Semantics\n\nThe snackbar's `status` prop controls both the visual appearance and accessibility semantics:\n\n| Status | ARIA Role | aria-live | Semantic Meaning |\n|--------|-----------|-----------|------------------|\n| `success` | `status` | `polite` | Non-critical confirmation or successful action. Announced when convenient. |\n| `warning` | `status` | `polite` | Non-blocking warning that the user should be aware of. Announced when convenient. |\n| `error` | `alert` | `assertive` | Critical error requiring immediate attention. Announced with interruption. |\n\n## Props\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `status` | `'success' \\| 'warning' \\| 'error'` | `'success'` | Status variant controlling color, icon, and ARIA role/aria-live. |\n| `message` | `string` | `''` | Message text displayed in the snackbar. |\n| `duration` | `number \\| undefined` | `undefined` | Auto-dismiss timeout in milliseconds. `undefined` uses the per-status default (5000 ms for success/warning, 8000 ms for error). Set to `0` to disable auto-dismiss and require manual dismissal. |\n| `priority` | `'low' \\| 'normal' \\| 'high'` | `'normal'` | Priority level. When a snackbar is already visible, an incoming higher-priority call overrides it; lower-priority calls are silently swallowed with no queue. |\n| `showLeadingIcon` | `boolean` | `true` | Show the status-specific leading icon (info for success, warning triangle for warning, exclamation for error). |\n| `actionLabel` | `string \\| undefined` | `undefined` | Optional action button label. When set, an action button is rendered. |\n\n## Methods\n\n### `show() => Promise<void>`\n\nTriggers the entry animation. Used internally by the controller; may be called directly when using the snackbar as a declarative component.\n\n### `hide() => Promise<void>`\n\nTriggers the exit animation and waits for completion before resolving. The animation duration is 300 ms.\n\n## Events\n\n### `lmvzClose`\n\nFired when the snackbar is dismissed. The event detail includes the dismiss reason:\n\n```typescript\ntype lmvzClose = CustomEvent<{ reason: 'timeout' | 'manual' | 'action' | 'overridden' | 'swallowed' }>;\n```\n\n**Reason meanings:**\n- `'timeout'` — Auto-dismiss timer elapsed.\n- `'manual'` — Dismissed by calling the controller's `dismiss()` or the component's `hide()` method.\n- `'action'` — User clicked the action button.\n- `'overridden'` — A higher-priority snackbar call displaced this one.\n- `'swallowed'` — A lower-priority call was ignored because a higher-priority snackbar was already visible (controller only).\n\n## ARIA & Accessibility\n\n- The snackbar host element has a dynamic `role` that changes with the `status` prop: `role=\"status\"` for success/warning, `role=\"alert\"` for error.\n- `aria-live` is set to `\"polite\"` for success/warning (non-interrupting announcements) and `\"assertive\"` for error (interrupting announcements).\n- The leading status icon is marked `aria-hidden=\"true\"` because its information is redundant with the status prop and role semantics.\n- The optional action button uses its `actionLabel` text as its accessible name (via native button semantics).\n- The snackbar does not receive focus on appearance. Keyboard users can tab to the action button if present.\n\n## Motion & Reduced Motion\n\nThe snackbar slides up from the bottom with a fade-in on entry, and slides down with a fade-out on exit. Both animations use a duration of 200 ms.\n\nWhen `prefers-reduced-motion: reduce` is active, spatial motion (slide) is removed and replaced with a brief opacity-only fade (80 ms), providing a perceptual cue without distracting motion.\n\n## Color Contrast\n\nThe error variant (`status=\"error\"`) achieves a color contrast ratio of 4.5:1 (WCAG AA) between the error surface color and text. The success and warning variants also meet WCAG AA contrast requirements.\n\n## Examples\n\n### Imperative Usage with Controller\n\nMost applications use the snackbar via the imperative `SnackbarController` API. The controller manages a singleton host element and handles priority-based override logic automatically:\n\n```typescript\nimport { SnackbarController } from '@lmvz-ds/components';\n\n// Show a success notification\nSnackbarController.open({\n message: 'Your changes have been saved.',\n status: 'success',\n duration: 5000, // auto-dismiss after 5 seconds\n});\n\n// Show an error with an action\nconst handle = SnackbarController.open({\n message: 'Upload failed.',\n status: 'error',\n duration: 8000,\n actionLabel: 'Retry',\n onAction: () => {\n console.log('User clicked Retry');\n retryUpload();\n },\n});\n\n// Wait for dismissal (for any reason)\nhandle.closed.then(({ reason }) => {\n console.log(`Closed due to: ${reason}`);\n});\n\n// Manually dismiss\nhandle.dismiss();\n```\n\n### Priority Override\n\nThe controller enforces a single visible snackbar. Higher-priority calls override lower-priority ones:\n\n```typescript\n// High-priority error appears\nSnackbarController.open({\n message: 'Critical error',\n status: 'error',\n priority: 'high',\n});\n\n// Low-priority confirmation is silently swallowed\nconst handle = SnackbarController.open({\n message: 'Saved.',\n status: 'success',\n priority: 'low',\n});\n\nhandle.closed.then(({ reason }) => {\n console.log(reason); // 'swallowed'\n});\n```\n\n### Declarative Usage\n\nFor in-place rendering (e.g., in tests or special layouts), the snackbar can be declared in HTML and controlled via `show()`/`hide()` methods:\n\n```html\n<lmvz-snackbar\n message=\"Operation complete\"\n status=\"success\"\n show-leading-icon=\"true\"\n></lmvz-snackbar>\n```\n\n```typescript\nconst snackbar = document.querySelector('lmvz-snackbar');\nawait snackbar.show();\n// ... later\nawait snackbar.hide();\n```\n",
6511
+ "docs": "Brief notification displayed at the bottom center of the screen with optional auto-dismiss. Use snackbars to communicate non-blocking confirmations, warnings, or errors to the user.",
6512
+ "docsTags": [],
6514
6513
  "usage": {},
6515
6514
  "props": [
6516
6515
  {
6517
- "name": "checked",
6518
- "type": "boolean",
6516
+ "name": "actionLabel",
6517
+ "type": "string | undefined",
6519
6518
  "complexType": {
6520
- "original": "boolean",
6521
- "resolved": "boolean",
6519
+ "original": "string",
6520
+ "resolved": "string | undefined",
6522
6521
  "references": {}
6523
6522
  },
6524
6523
  "mutable": true,
6525
- "attr": "checked",
6526
- "reflectToAttr": true,
6527
- "docs": "Whether the toggle is checked",
6528
- "docsTags": [
6529
- {
6530
- "name": "default",
6531
- "text": "false"
6532
- }
6533
- ],
6534
- "default": "false",
6524
+ "attr": "action-label",
6525
+ "reflectToAttr": false,
6526
+ "docs": "",
6527
+ "docsTags": [],
6535
6528
  "values": [
6536
6529
  {
6537
- "type": "boolean"
6538
- }
6539
- ],
6540
- "optional": false,
6541
- "required": false,
6542
- "getter": false,
6543
- "setter": false
6544
- },
6545
- {
6546
- "name": "disabled",
6547
- "type": "boolean",
6548
- "complexType": {
6549
- "original": "boolean",
6550
- "resolved": "boolean",
6551
- "references": {}
6552
- },
6553
- "mutable": false,
6554
- "attr": "disabled",
6555
- "reflectToAttr": true,
6556
- "docs": "Whether the toggle is disabled",
6557
- "docsTags": [
6558
- {
6559
- "name": "default",
6560
- "text": "false"
6561
- }
6562
- ],
6563
- "default": "false",
6564
- "values": [
6530
+ "type": "string"
6531
+ },
6565
6532
  {
6566
- "type": "boolean"
6533
+ "type": "undefined"
6567
6534
  }
6568
6535
  ],
6569
- "optional": false,
6536
+ "optional": true,
6570
6537
  "required": false,
6571
6538
  "getter": false,
6572
6539
  "setter": false
6573
6540
  },
6574
6541
  {
6575
- "name": "form",
6576
- "type": "string | undefined",
6542
+ "name": "duration",
6543
+ "type": "number | undefined",
6577
6544
  "complexType": {
6578
- "original": "string",
6579
- "resolved": "string | undefined",
6545
+ "original": "number",
6546
+ "resolved": "number | undefined",
6580
6547
  "references": {}
6581
6548
  },
6582
- "mutable": false,
6583
- "attr": "form",
6549
+ "mutable": true,
6550
+ "attr": "duration",
6584
6551
  "reflectToAttr": false,
6585
- "docs": "Form id to associate with",
6552
+ "docs": "",
6586
6553
  "docsTags": [],
6587
6554
  "values": [
6588
6555
  {
6589
- "type": "string"
6556
+ "type": "number"
6590
6557
  },
6591
6558
  {
6592
6559
  "type": "undefined"
@@ -6598,43 +6565,71 @@
6598
6565
  "setter": false
6599
6566
  },
6600
6567
  {
6601
- "name": "label",
6568
+ "name": "message",
6602
6569
  "type": "string",
6603
6570
  "complexType": {
6604
6571
  "original": "string",
6605
6572
  "resolved": "string",
6606
6573
  "references": {}
6607
6574
  },
6608
- "mutable": false,
6609
- "attr": "label",
6575
+ "mutable": true,
6576
+ "attr": "message",
6610
6577
  "reflectToAttr": false,
6611
- "docs": "Label text for the toggle",
6612
- "docsTags": [],
6578
+ "docs": "",
6579
+ "docsTags": [
6580
+ {
6581
+ "name": "default",
6582
+ "text": "''"
6583
+ }
6584
+ ],
6585
+ "default": "''",
6613
6586
  "values": [
6614
6587
  {
6615
6588
  "type": "string"
6616
6589
  }
6617
6590
  ],
6618
6591
  "optional": false,
6619
- "required": true,
6592
+ "required": false,
6620
6593
  "getter": false,
6621
6594
  "setter": false
6622
6595
  },
6623
6596
  {
6624
- "name": "name",
6625
- "type": "string | undefined",
6597
+ "name": "priority",
6598
+ "type": "\"high\" | \"low\" | \"normal\" | undefined",
6626
6599
  "complexType": {
6627
- "original": "string",
6628
- "resolved": "string | undefined",
6629
- "references": {}
6600
+ "original": "Snackbar.Priority",
6601
+ "resolved": "\"high\" | \"low\" | \"normal\" | undefined",
6602
+ "references": {
6603
+ "Snackbar": {
6604
+ "location": "import",
6605
+ "path": "../../api",
6606
+ "id": "src/api/index.d.ts::Snackbar",
6607
+ "referenceLocation": "Snackbar"
6608
+ }
6609
+ }
6630
6610
  },
6631
- "mutable": false,
6632
- "attr": "name",
6611
+ "mutable": true,
6612
+ "attr": "priority",
6633
6613
  "reflectToAttr": false,
6634
- "docs": "Name attribute for form integration",
6635
- "docsTags": [],
6614
+ "docs": "",
6615
+ "docsTags": [
6616
+ {
6617
+ "name": "default",
6618
+ "text": "'normal'"
6619
+ }
6620
+ ],
6621
+ "default": "'normal'",
6636
6622
  "values": [
6637
6623
  {
6624
+ "value": "high",
6625
+ "type": "string"
6626
+ },
6627
+ {
6628
+ "value": "low",
6629
+ "type": "string"
6630
+ },
6631
+ {
6632
+ "value": "normal",
6638
6633
  "type": "string"
6639
6634
  },
6640
6635
  {
@@ -6647,55 +6642,42 @@
6647
6642
  "setter": false
6648
6643
  },
6649
6644
  {
6650
- "name": "required",
6651
- "type": "boolean",
6645
+ "name": "status",
6646
+ "type": "\"error\" | \"success\" | \"warning\"",
6652
6647
  "complexType": {
6653
- "original": "boolean",
6654
- "resolved": "boolean",
6655
- "references": {}
6648
+ "original": "Snackbar.Status",
6649
+ "resolved": "\"error\" | \"success\" | \"warning\"",
6650
+ "references": {
6651
+ "Snackbar": {
6652
+ "location": "import",
6653
+ "path": "../../api",
6654
+ "id": "src/api/index.d.ts::Snackbar",
6655
+ "referenceLocation": "Snackbar"
6656
+ }
6657
+ }
6656
6658
  },
6657
- "mutable": false,
6658
- "attr": "required",
6659
+ "mutable": true,
6660
+ "attr": "status",
6659
6661
  "reflectToAttr": true,
6660
- "docs": "Whether the toggle is required",
6662
+ "docs": "",
6661
6663
  "docsTags": [
6662
6664
  {
6663
6665
  "name": "default",
6664
- "text": "false"
6666
+ "text": "'success'"
6665
6667
  }
6666
6668
  ],
6667
- "default": "false",
6669
+ "default": "'success'",
6668
6670
  "values": [
6669
6671
  {
6670
- "type": "boolean"
6671
- }
6672
- ],
6673
- "optional": false,
6674
- "required": false,
6675
- "getter": false,
6676
- "setter": false
6677
- },
6678
- {
6679
- "name": "value",
6680
- "type": "string",
6681
- "complexType": {
6682
- "original": "string",
6683
- "resolved": "string",
6684
- "references": {}
6685
- },
6686
- "mutable": false,
6687
- "attr": "value",
6688
- "reflectToAttr": false,
6689
- "docs": "Value submitted with the form when checked",
6690
- "docsTags": [
6672
+ "value": "error",
6673
+ "type": "string"
6674
+ },
6691
6675
  {
6692
- "name": "default",
6693
- "text": "'on'"
6694
- }
6695
- ],
6696
- "default": "'on'",
6697
- "values": [
6676
+ "value": "success",
6677
+ "type": "string"
6678
+ },
6698
6679
  {
6680
+ "value": "warning",
6699
6681
  "type": "string"
6700
6682
  }
6701
6683
  ],
@@ -6707,7 +6689,7 @@
6707
6689
  ],
6708
6690
  "methods": [
6709
6691
  {
6710
- "name": "blurToggle",
6692
+ "name": "hide",
6711
6693
  "returns": {
6712
6694
  "type": "Promise<void>",
6713
6695
  "docs": ""
@@ -6723,35 +6705,13 @@
6723
6705
  },
6724
6706
  "return": "Promise<void>"
6725
6707
  },
6726
- "signature": "blurToggle() => Promise<void>",
6727
- "parameters": [],
6728
- "docs": "Removes focus from the toggle",
6729
- "docsTags": []
6730
- },
6731
- {
6732
- "name": "checkValidity",
6733
- "returns": {
6734
- "type": "Promise<boolean>",
6735
- "docs": ""
6736
- },
6737
- "complexType": {
6738
- "signature": "() => Promise<boolean>",
6739
- "parameters": [],
6740
- "references": {
6741
- "Promise": {
6742
- "location": "global",
6743
- "id": "global::Promise"
6744
- }
6745
- },
6746
- "return": "Promise<boolean>"
6747
- },
6748
- "signature": "checkValidity() => Promise<boolean>",
6708
+ "signature": "hide() => Promise<void>",
6749
6709
  "parameters": [],
6750
- "docs": "Returns whether the toggle satisfies its validation constraints",
6710
+ "docs": "",
6751
6711
  "docsTags": []
6752
6712
  },
6753
6713
  {
6754
- "name": "focusToggle",
6714
+ "name": "show",
6755
6715
  "returns": {
6756
6716
  "type": "Promise<void>",
6757
6717
  "docs": ""
@@ -6767,50 +6727,757 @@
6767
6727
  },
6768
6728
  "return": "Promise<void>"
6769
6729
  },
6770
- "signature": "focusToggle() => Promise<void>",
6730
+ "signature": "show() => Promise<void>",
6771
6731
  "parameters": [],
6772
- "docs": "Sets focus on the toggle",
6732
+ "docs": "",
6773
6733
  "docsTags": []
6774
- },
6734
+ }
6735
+ ],
6736
+ "events": [
6775
6737
  {
6776
- "name": "getInputElement",
6777
- "returns": {
6778
- "type": "Promise<HTMLInputElement | undefined>",
6779
- "docs": ""
6780
- },
6738
+ "event": "lmvzClose",
6739
+ "detail": "{ reason: \"timeout\" | \"manual\" | \"action\" | \"overridden\" | \"swallowed\"; }",
6740
+ "bubbles": true,
6781
6741
  "complexType": {
6782
- "signature": "() => Promise<HTMLInputElement | undefined>",
6783
- "parameters": [],
6742
+ "original": "{ reason: Snackbar.DismissReason }",
6743
+ "resolved": "{ reason: \"timeout\" | \"manual\" | \"action\" | \"overridden\" | \"swallowed\"; }",
6784
6744
  "references": {
6785
- "Promise": {
6786
- "location": "global",
6787
- "id": "global::Promise"
6788
- },
6789
- "HTMLInputElement": {
6790
- "location": "global",
6791
- "id": "global::HTMLInputElement"
6745
+ "Snackbar": {
6746
+ "location": "import",
6747
+ "path": "../../api",
6748
+ "id": "src/api/index.d.ts::Snackbar",
6749
+ "referenceLocation": "Snackbar"
6792
6750
  }
6793
- },
6794
- "return": "Promise<HTMLInputElement | undefined>"
6751
+ }
6795
6752
  },
6796
- "signature": "getInputElement() => Promise<HTMLInputElement | undefined>",
6797
- "parameters": [],
6798
- "docs": "Returns the native HTMLInputElement.\n\nPromise resolves when the element is ready and the input is available.",
6753
+ "cancelable": false,
6754
+ "composed": true,
6755
+ "docs": "",
6799
6756
  "docsTags": []
6800
- },
6801
- {
6802
- "name": "reportValidity",
6803
- "returns": {
6804
- "type": "Promise<boolean>",
6805
- "docs": ""
6806
- },
6807
- "complexType": {
6808
- "signature": "() => Promise<boolean>",
6809
- "parameters": [],
6810
- "references": {
6811
- "Promise": {
6812
- "location": "global",
6813
- "id": "global::Promise"
6757
+ }
6758
+ ],
6759
+ "listeners": [],
6760
+ "styles": [],
6761
+ "slots": [],
6762
+ "parts": [],
6763
+ "states": [],
6764
+ "dependents": [],
6765
+ "dependencies": [
6766
+ "lmvz-icon",
6767
+ "lmvz-button"
6768
+ ],
6769
+ "dependencyGraph": {
6770
+ "lmvz-snackbar": [
6771
+ "lmvz-icon",
6772
+ "lmvz-button"
6773
+ ]
6774
+ }
6775
+ },
6776
+ {
6777
+ "filePath": "src/components/lmvz-tab/lmvz-tab.tsx",
6778
+ "encapsulation": "shadow",
6779
+ "tag": "lmvz-tab",
6780
+ "readme": "# lmvz-tab\n\nThe `lmvz-tab` is the individual tab trigger primitive. It must be used as a direct child of `lmvz-tabs`, which owns selection state, ARIA semantics (`tablist`/`tab`/`tabpanel`), keyboard management, and roving `tabindex`.\n\n## Usage\n\n```html\n<lmvz-tabs value=\"home\">\n <lmvz-tab value=\"home\">Home</lmvz-tab>\n <lmvz-tab value=\"profile\">Profile</lmvz-tab>\n <lmvz-tab value=\"settings\" disabled>Settings</lmvz-tab>\n</lmvz-tabs>\n```\n\n### With media slot (icon above label)\n\n```html\n<lmvz-tab value=\"home\">\n <lmvz-icon slot=\"media\" name=\"home\" aria-hidden=\"true\"></lmvz-icon>\n Home\n</lmvz-tab>\n```\n\n> **Icon-only tabs**: When no visible label is provided, supply an `aria-label` on the `lmvz-tab` element itself to maintain accessibility.\n\n## Visual states\n\n| State | Description |\n| -------- | --------------------------------------------------------------------------- |\n| Default | Neutral interactive surface; hidden selection indicator. |\n| Selected | Active-tinted container; active-colored text; full-width 4 px gradient bar at bottom (horizontal) or inline-start (vertical). |\n| Disabled | Reduced opacity; non-interactive. Set by consumer via `disabled` attribute. |\n| Focus | DS-style outline ring, distinct from the selection indicator. |\n\n## Orientation\n\nThe `vertical` attribute is set automatically by `lmvz-tabs` when `orientation=\"vertical\"`. When vertical, the selection indicator bar moves from the bottom edge to the inline-start edge of the button.\n",
6781
+ "docs": "The tab trigger primitive. Must be used as a direct child of `lmvz-tabs`.\n\nSelection state, ARIA semantics (tablist/tab/tabpanel), keyboard management,\nand roving tabindex are all owned by the parent `lmvz-tabs` component.",
6782
+ "docsTags": [
6783
+ {
6784
+ "name": "slot",
6785
+ "text": "default - Label text or arbitrary inline content for the tab."
6786
+ },
6787
+ {
6788
+ "name": "slot",
6789
+ "text": "media - Optional icon or image placed above the label in the tab stack."
6790
+ },
6791
+ {
6792
+ "name": "part",
6793
+ "text": "button - The inner `<button role=\"tab\">` element."
6794
+ },
6795
+ {
6796
+ "name": "part",
6797
+ "text": "indicator - The selection indicator bar."
6798
+ }
6799
+ ],
6800
+ "usage": {},
6801
+ "props": [
6802
+ {
6803
+ "name": "disabled",
6804
+ "type": "boolean",
6805
+ "complexType": {
6806
+ "original": "boolean",
6807
+ "resolved": "boolean",
6808
+ "references": {}
6809
+ },
6810
+ "mutable": false,
6811
+ "attr": "disabled",
6812
+ "reflectToAttr": true,
6813
+ "docs": "Whether the tab is disabled.\nDisabled tabs are not activatable and are skipped by arrow-key navigation in `lmvz-tabs`.",
6814
+ "docsTags": [
6815
+ {
6816
+ "name": "default",
6817
+ "text": "false"
6818
+ }
6819
+ ],
6820
+ "default": "false",
6821
+ "values": [
6822
+ {
6823
+ "type": "boolean"
6824
+ }
6825
+ ],
6826
+ "optional": false,
6827
+ "required": false,
6828
+ "getter": false,
6829
+ "setter": false
6830
+ },
6831
+ {
6832
+ "name": "selected",
6833
+ "type": "boolean",
6834
+ "complexType": {
6835
+ "original": "boolean",
6836
+ "resolved": "boolean",
6837
+ "references": {}
6838
+ },
6839
+ "mutable": false,
6840
+ "attr": "selected",
6841
+ "reflectToAttr": true,
6842
+ "docs": "Whether this tab is currently selected.\nSet by the parent `lmvz-tabs` component — do not set manually.",
6843
+ "docsTags": [
6844
+ {
6845
+ "name": "default",
6846
+ "text": "false"
6847
+ }
6848
+ ],
6849
+ "default": "false",
6850
+ "values": [
6851
+ {
6852
+ "type": "boolean"
6853
+ }
6854
+ ],
6855
+ "optional": false,
6856
+ "required": false,
6857
+ "getter": false,
6858
+ "setter": false
6859
+ },
6860
+ {
6861
+ "name": "value",
6862
+ "type": "string",
6863
+ "complexType": {
6864
+ "original": "string",
6865
+ "resolved": "string",
6866
+ "references": {}
6867
+ },
6868
+ "mutable": false,
6869
+ "attr": "value",
6870
+ "reflectToAttr": true,
6871
+ "docs": "Unique value that identifies this tab within its `lmvz-tabs` parent.\nThe parent uses this to track the selected tab.",
6872
+ "docsTags": [],
6873
+ "values": [
6874
+ {
6875
+ "type": "string"
6876
+ }
6877
+ ],
6878
+ "optional": false,
6879
+ "required": true,
6880
+ "getter": false,
6881
+ "setter": false
6882
+ },
6883
+ {
6884
+ "name": "vertical",
6885
+ "type": "boolean",
6886
+ "complexType": {
6887
+ "original": "boolean",
6888
+ "resolved": "boolean",
6889
+ "references": {}
6890
+ },
6891
+ "mutable": false,
6892
+ "attr": "vertical",
6893
+ "reflectToAttr": true,
6894
+ "docs": "Vertical orientation context.\nSet by the parent `lmvz-tabs` when `orientation=\"vertical\"` — do not set manually.\nWhen true the selection indicator moves to the inline-start edge.",
6895
+ "docsTags": [
6896
+ {
6897
+ "name": "default",
6898
+ "text": "false"
6899
+ }
6900
+ ],
6901
+ "default": "false",
6902
+ "values": [
6903
+ {
6904
+ "type": "boolean"
6905
+ }
6906
+ ],
6907
+ "optional": false,
6908
+ "required": false,
6909
+ "getter": false,
6910
+ "setter": false
6911
+ }
6912
+ ],
6913
+ "methods": [],
6914
+ "events": [],
6915
+ "listeners": [],
6916
+ "styles": [],
6917
+ "slots": [
6918
+ {
6919
+ "name": "default",
6920
+ "docs": "Label text or arbitrary inline content for the tab."
6921
+ },
6922
+ {
6923
+ "name": "media",
6924
+ "docs": "Optional icon or image placed above the label in the tab stack."
6925
+ }
6926
+ ],
6927
+ "parts": [
6928
+ {
6929
+ "name": "button",
6930
+ "docs": "The inner `<button role=\"tab\">` element."
6931
+ },
6932
+ {
6933
+ "name": "indicator",
6934
+ "docs": "The selection indicator bar."
6935
+ }
6936
+ ],
6937
+ "states": [],
6938
+ "dependents": [],
6939
+ "dependencies": [],
6940
+ "dependencyGraph": {}
6941
+ },
6942
+ {
6943
+ "filePath": "src/components/lmvz-tabs/lmvz-tabs.tsx",
6944
+ "encapsulation": "shadow",
6945
+ "tag": "lmvz-tabs",
6946
+ "readme": "# lmvz-tabs\n\n`lmvz-tabs` is the WAI-ARIA Tabs pattern owner. It renders a `tablist` containing `lmvz-tab` trigger children and links them to consumer-authored panel elements via `aria-controls` / `aria-labelledby`. Selection state, keyboard management (roving `tabindex`, directional focus, manual activation), disabled-tab skipping, and overflow behaviour are all owned here.\n\n## Usage\n\n```html\n<lmvz-tabs value=\"home\" id=\"my-tabs\">\n <lmvz-tab value=\"home\">Home</lmvz-tab>\n <lmvz-tab value=\"profile\">Profile</lmvz-tab>\n <lmvz-tab value=\"settings\" disabled>Settings</lmvz-tab>\n\n <div slot=\"panels\" role=\"tabpanel\" id=\"panel-home\">Home content</div>\n <div slot=\"panels\" role=\"tabpanel\" id=\"panel-profile\" hidden>Profile content</div>\n <div slot=\"panels\" role=\"tabpanel\" id=\"panel-settings\" hidden>Settings content</div>\n</lmvz-tabs>\n```\n\n### Panels — slotted content model\n\nPanels are **consumer-authored** light-DOM elements placed in the `panels` slot. The component does **not** own or render a `lmvz-tab-panel` primitive — consumers supply any element they like (a `<div>`, a custom element, a route outlet, …).\n\n`lmvz-tabs` automatically pairs each panel with the corresponding tab by position:\n- It sets `aria-controls=\"<panelId>\"` on each `lmvz-tab` button.\n- It sets `aria-labelledby=\"<tabId>\"` on each panel element.\n\nIf you need an explicit mapping instead of positional pairing, call the `setTabPanelIds` method with an ordered array of `[tabId, panelId]` tuples.\n\nPanel **visibility** (the `hidden` attribute) is the consumer's responsibility. Listen to the `lmvzChange` event and toggle the relevant panel.\n\n### Reacting to tab changes\n\n```ts\nconst tabs = document.querySelector('lmvz-tabs');\n\ntabs.addEventListener('lmvzChange', (event) => {\n const { value } = event.detail; // the newly-activated tab value\n // show/hide panels as appropriate\n});\n```\n\n### Vertical orientation\n\n```html\n<lmvz-tabs value=\"home\" orientation=\"vertical\">\n <lmvz-tab value=\"home\">Home</lmvz-tab>\n <lmvz-tab value=\"profile\">Profile</lmvz-tab>\n <div slot=\"panels\" role=\"tabpanel\">Home content</div>\n <div slot=\"panels\" role=\"tabpanel\" hidden>Profile content</div>\n</lmvz-tabs>\n```\n\nWhen `orientation=\"vertical\"` the tab list stacks vertically, arrow navigation switches to up/down, and the selection indicator moves to the inline-start edge of each tab trigger.\n\n## Keyboard interaction\n\n| Key | Behaviour |\n| --------------------- | -------------------------------------------------------- |\n| `←` / `→` (horizontal) | Move focus to previous / next enabled tab. |\n| `↑` / `↓` (vertical) | Move focus to previous / next enabled tab. |\n| `Home` | Move focus to the first enabled tab. |\n| `End` | Move focus to the last enabled tab. |\n| `Enter` / `Space` | Activate the currently focused tab (manual activation). |\n| `Tab` | Leave the tab list; focus moves to the active panel. |\n\nDisabled tabs are skipped during arrow-key navigation and cannot be activated.\n\n## Disabled-tab fallback\n\nWhen the selected tab becomes disabled at runtime, `lmvz-tabs` automatically activates the nearest enabled tab (preferring the next sibling, then the previous). If no enabled tab exists the selection value is left unchanged.\n",
6947
+ "docs": "The semantics and state owner for the WAI-ARIA tabs pattern.\n\n`lmvz-tabs` owns:\n- `tablist` / `tab` / `tabpanel` ARIA semantics\n- Selected-value state and manual activation (`Enter`, `Space`, click)\n- Roving `tabindex` via `DirectionalFocusController`\n- Horizontal scroll overflow (horizontal mode only)\n- Disabled-tab skipping and nearest-enabled fallback\n- Child registration and panel linkage via `aria-controls` / `aria-labelledby`\n\nPanels are consumer-authored light-DOM elements. Associate each panel with\nits tab by adding an `id` attribute — either matching `lmvz-tab[panel]` or\nderived positionally when no explicit id is provided.",
6948
+ "docsTags": [
6949
+ {
6950
+ "name": "slot",
6951
+ "text": "default - `lmvz-tab` trigger elements."
6952
+ },
6953
+ {
6954
+ "name": "slot",
6955
+ "text": "panels - Arbitrary panel elements."
6956
+ },
6957
+ {
6958
+ "name": "part",
6959
+ "text": "panels-container - The container wrapping the slotted panels."
6960
+ },
6961
+ {
6962
+ "name": "event",
6963
+ "text": "lmvzChange - Fired when a tab is activated. Detail: `{ value: string }`."
6964
+ },
6965
+ {
6966
+ "name": "example",
6967
+ "text": "```html\n<lmvz-tabs value=\"home\">\n <lmvz-tab value=\"home\">Home</lmvz-tab>\n <lmvz-tab value=\"settings\" disabled>Settings</lmvz-tab>\n\n <div slot=\"panels\" id=\"panel-home\" role=\"tabpanel\">Home content</div>\n <div slot=\"panels\" id=\"panel-settings\" role=\"tabpanel\">Settings content</div>\n</lmvz-tabs>\n```"
6968
+ }
6969
+ ],
6970
+ "usage": {},
6971
+ "props": [
6972
+ {
6973
+ "name": "orientation",
6974
+ "type": "\"horizontal\" | \"vertical\"",
6975
+ "complexType": {
6976
+ "original": "'horizontal' | 'vertical'",
6977
+ "resolved": "\"horizontal\" | \"vertical\"",
6978
+ "references": {}
6979
+ },
6980
+ "mutable": true,
6981
+ "attr": "orientation",
6982
+ "reflectToAttr": true,
6983
+ "docs": "Layout and keyboard-navigation orientation.",
6984
+ "docsTags": [
6985
+ {
6986
+ "name": "default",
6987
+ "text": "'horizontal'"
6988
+ }
6989
+ ],
6990
+ "default": "'horizontal'",
6991
+ "values": [
6992
+ {
6993
+ "value": "horizontal",
6994
+ "type": "string"
6995
+ },
6996
+ {
6997
+ "value": "vertical",
6998
+ "type": "string"
6999
+ }
7000
+ ],
7001
+ "optional": false,
7002
+ "required": false,
7003
+ "getter": false,
7004
+ "setter": false
7005
+ },
7006
+ {
7007
+ "name": "value",
7008
+ "type": "string",
7009
+ "complexType": {
7010
+ "original": "string",
7011
+ "resolved": "string",
7012
+ "references": {}
7013
+ },
7014
+ "mutable": true,
7015
+ "attr": "value",
7016
+ "reflectToAttr": true,
7017
+ "docs": "The `value` of the currently selected tab.",
7018
+ "docsTags": [],
7019
+ "values": [
7020
+ {
7021
+ "type": "string"
7022
+ }
7023
+ ],
7024
+ "optional": false,
7025
+ "required": true,
7026
+ "getter": false,
7027
+ "setter": false
7028
+ }
7029
+ ],
7030
+ "methods": [
7031
+ {
7032
+ "name": "activateTab",
7033
+ "returns": {
7034
+ "type": "Promise<void>",
7035
+ "docs": ""
7036
+ },
7037
+ "complexType": {
7038
+ "signature": "(value: string) => Promise<void>",
7039
+ "parameters": [
7040
+ {
7041
+ "name": "value",
7042
+ "type": "string",
7043
+ "docs": ""
7044
+ }
7045
+ ],
7046
+ "references": {
7047
+ "Promise": {
7048
+ "location": "global",
7049
+ "id": "global::Promise"
7050
+ }
7051
+ },
7052
+ "return": "Promise<void>"
7053
+ },
7054
+ "signature": "activateTab(value: string) => Promise<void>",
7055
+ "parameters": [
7056
+ {
7057
+ "name": "value",
7058
+ "type": "string",
7059
+ "docs": ""
7060
+ }
7061
+ ],
7062
+ "docs": "Programmatically activate a tab by value.\nDisabled tabs are ignored; emits `lmvzChange` on change.",
7063
+ "docsTags": []
7064
+ },
7065
+ {
7066
+ "name": "getTabElements",
7067
+ "returns": {
7068
+ "type": "Promise<HTMLElement[]>",
7069
+ "docs": ""
7070
+ },
7071
+ "complexType": {
7072
+ "signature": "() => Promise<HTMLElement[]>",
7073
+ "parameters": [],
7074
+ "references": {
7075
+ "Promise": {
7076
+ "location": "global",
7077
+ "id": "global::Promise"
7078
+ },
7079
+ "HTMLElement": {
7080
+ "location": "global",
7081
+ "id": "global::HTMLElement"
7082
+ }
7083
+ },
7084
+ "return": "Promise<HTMLElement[]>"
7085
+ },
7086
+ "signature": "getTabElements() => Promise<HTMLElement[]>",
7087
+ "parameters": [],
7088
+ "docs": "Returns all slotted `lmvz-tab` elements.\nExposed for external orchestration.",
7089
+ "docsTags": []
7090
+ },
7091
+ {
7092
+ "name": "setTabPanelIds",
7093
+ "returns": {
7094
+ "type": "Promise<void>",
7095
+ "docs": ""
7096
+ },
7097
+ "complexType": {
7098
+ "signature": "(pairs: Array<[string, string]>) => Promise<void>",
7099
+ "parameters": [
7100
+ {
7101
+ "name": "pairs",
7102
+ "type": "[string, string][]",
7103
+ "docs": ""
7104
+ }
7105
+ ],
7106
+ "references": {
7107
+ "Promise": {
7108
+ "location": "global",
7109
+ "id": "global::Promise"
7110
+ },
7111
+ "Array": {
7112
+ "location": "global",
7113
+ "id": "global::Array"
7114
+ }
7115
+ },
7116
+ "return": "Promise<void>"
7117
+ },
7118
+ "signature": "setTabPanelIds(pairs: Array<[string, string]>) => Promise<void>",
7119
+ "parameters": [
7120
+ {
7121
+ "name": "pairs",
7122
+ "type": "[string, string][]",
7123
+ "docs": ""
7124
+ }
7125
+ ],
7126
+ "docs": "Wires `aria-controls` on each tab and `aria-labelledby` on each panel\nusing the provided ordered array of `[tabId, panelId]` pairs.\nCallers only need this for explicit control; `lmvz-tabs` wires positional\npairs automatically on `slotchange`.",
7127
+ "docsTags": []
7128
+ }
7129
+ ],
7130
+ "events": [
7131
+ {
7132
+ "event": "lmvzChange",
7133
+ "detail": "{ value: string; }",
7134
+ "bubbles": true,
7135
+ "complexType": {
7136
+ "original": "{ value: string }",
7137
+ "resolved": "{ value: string; }",
7138
+ "references": {}
7139
+ },
7140
+ "cancelable": true,
7141
+ "composed": true,
7142
+ "docs": "Emitted when a tab is activated.\nDetail: `{ value: string }`.",
7143
+ "docsTags": []
7144
+ }
7145
+ ],
7146
+ "listeners": [],
7147
+ "styles": [],
7148
+ "slots": [
7149
+ {
7150
+ "name": "default",
7151
+ "docs": "`lmvz-tab` trigger elements."
7152
+ },
7153
+ {
7154
+ "name": "panels",
7155
+ "docs": "Arbitrary panel elements."
7156
+ }
7157
+ ],
7158
+ "parts": [
7159
+ {
7160
+ "name": "panels-container",
7161
+ "docs": "The container wrapping the slotted panels."
7162
+ }
7163
+ ],
7164
+ "states": [],
7165
+ "dependents": [],
7166
+ "dependencies": [],
7167
+ "dependencyGraph": {}
7168
+ },
7169
+ {
7170
+ "filePath": "src/components/lmvz-toggle/lmvz-toggle.tsx",
7171
+ "encapsulation": "scoped",
7172
+ "tag": "lmvz-toggle",
7173
+ "readme": "# lmvz-toggle\n\n\n",
7174
+ "docs": "Toggle (switch) component. Wraps a native `<input type=\"checkbox\" role=\"switch\">` for full keyboard and form support.",
7175
+ "docsTags": [
7176
+ {
7177
+ "name": "example",
7178
+ "text": "```html\n<lmvz-toggle label=\"Enable notifications\" name=\"notifications\" required></lmvz-toggle>\n```"
7179
+ }
7180
+ ],
7181
+ "usage": {},
7182
+ "props": [
7183
+ {
7184
+ "name": "checked",
7185
+ "type": "boolean",
7186
+ "complexType": {
7187
+ "original": "boolean",
7188
+ "resolved": "boolean",
7189
+ "references": {}
7190
+ },
7191
+ "mutable": true,
7192
+ "attr": "checked",
7193
+ "reflectToAttr": true,
7194
+ "docs": "Whether the toggle is checked",
7195
+ "docsTags": [
7196
+ {
7197
+ "name": "default",
7198
+ "text": "false"
7199
+ }
7200
+ ],
7201
+ "default": "false",
7202
+ "values": [
7203
+ {
7204
+ "type": "boolean"
7205
+ }
7206
+ ],
7207
+ "optional": false,
7208
+ "required": false,
7209
+ "getter": false,
7210
+ "setter": false
7211
+ },
7212
+ {
7213
+ "name": "disabled",
7214
+ "type": "boolean",
7215
+ "complexType": {
7216
+ "original": "boolean",
7217
+ "resolved": "boolean",
7218
+ "references": {}
7219
+ },
7220
+ "mutable": false,
7221
+ "attr": "disabled",
7222
+ "reflectToAttr": true,
7223
+ "docs": "Whether the toggle is disabled",
7224
+ "docsTags": [
7225
+ {
7226
+ "name": "default",
7227
+ "text": "false"
7228
+ }
7229
+ ],
7230
+ "default": "false",
7231
+ "values": [
7232
+ {
7233
+ "type": "boolean"
7234
+ }
7235
+ ],
7236
+ "optional": false,
7237
+ "required": false,
7238
+ "getter": false,
7239
+ "setter": false
7240
+ },
7241
+ {
7242
+ "name": "form",
7243
+ "type": "string | undefined",
7244
+ "complexType": {
7245
+ "original": "string",
7246
+ "resolved": "string | undefined",
7247
+ "references": {}
7248
+ },
7249
+ "mutable": false,
7250
+ "attr": "form",
7251
+ "reflectToAttr": false,
7252
+ "docs": "Form id to associate with",
7253
+ "docsTags": [],
7254
+ "values": [
7255
+ {
7256
+ "type": "string"
7257
+ },
7258
+ {
7259
+ "type": "undefined"
7260
+ }
7261
+ ],
7262
+ "optional": true,
7263
+ "required": false,
7264
+ "getter": false,
7265
+ "setter": false
7266
+ },
7267
+ {
7268
+ "name": "label",
7269
+ "type": "string",
7270
+ "complexType": {
7271
+ "original": "string",
7272
+ "resolved": "string",
7273
+ "references": {}
7274
+ },
7275
+ "mutable": false,
7276
+ "attr": "label",
7277
+ "reflectToAttr": false,
7278
+ "docs": "Label text for the toggle",
7279
+ "docsTags": [],
7280
+ "values": [
7281
+ {
7282
+ "type": "string"
7283
+ }
7284
+ ],
7285
+ "optional": false,
7286
+ "required": true,
7287
+ "getter": false,
7288
+ "setter": false
7289
+ },
7290
+ {
7291
+ "name": "name",
7292
+ "type": "string | undefined",
7293
+ "complexType": {
7294
+ "original": "string",
7295
+ "resolved": "string | undefined",
7296
+ "references": {}
7297
+ },
7298
+ "mutable": false,
7299
+ "attr": "name",
7300
+ "reflectToAttr": false,
7301
+ "docs": "Name attribute for form integration",
7302
+ "docsTags": [],
7303
+ "values": [
7304
+ {
7305
+ "type": "string"
7306
+ },
7307
+ {
7308
+ "type": "undefined"
7309
+ }
7310
+ ],
7311
+ "optional": true,
7312
+ "required": false,
7313
+ "getter": false,
7314
+ "setter": false
7315
+ },
7316
+ {
7317
+ "name": "required",
7318
+ "type": "boolean",
7319
+ "complexType": {
7320
+ "original": "boolean",
7321
+ "resolved": "boolean",
7322
+ "references": {}
7323
+ },
7324
+ "mutable": false,
7325
+ "attr": "required",
7326
+ "reflectToAttr": true,
7327
+ "docs": "Whether the toggle is required",
7328
+ "docsTags": [
7329
+ {
7330
+ "name": "default",
7331
+ "text": "false"
7332
+ }
7333
+ ],
7334
+ "default": "false",
7335
+ "values": [
7336
+ {
7337
+ "type": "boolean"
7338
+ }
7339
+ ],
7340
+ "optional": false,
7341
+ "required": false,
7342
+ "getter": false,
7343
+ "setter": false
7344
+ },
7345
+ {
7346
+ "name": "value",
7347
+ "type": "string",
7348
+ "complexType": {
7349
+ "original": "string",
7350
+ "resolved": "string",
7351
+ "references": {}
7352
+ },
7353
+ "mutable": false,
7354
+ "attr": "value",
7355
+ "reflectToAttr": false,
7356
+ "docs": "Value submitted with the form when checked",
7357
+ "docsTags": [
7358
+ {
7359
+ "name": "default",
7360
+ "text": "'on'"
7361
+ }
7362
+ ],
7363
+ "default": "'on'",
7364
+ "values": [
7365
+ {
7366
+ "type": "string"
7367
+ }
7368
+ ],
7369
+ "optional": false,
7370
+ "required": false,
7371
+ "getter": false,
7372
+ "setter": false
7373
+ }
7374
+ ],
7375
+ "methods": [
7376
+ {
7377
+ "name": "blurToggle",
7378
+ "returns": {
7379
+ "type": "Promise<void>",
7380
+ "docs": ""
7381
+ },
7382
+ "complexType": {
7383
+ "signature": "() => Promise<void>",
7384
+ "parameters": [],
7385
+ "references": {
7386
+ "Promise": {
7387
+ "location": "global",
7388
+ "id": "global::Promise"
7389
+ }
7390
+ },
7391
+ "return": "Promise<void>"
7392
+ },
7393
+ "signature": "blurToggle() => Promise<void>",
7394
+ "parameters": [],
7395
+ "docs": "Removes focus from the toggle",
7396
+ "docsTags": []
7397
+ },
7398
+ {
7399
+ "name": "checkValidity",
7400
+ "returns": {
7401
+ "type": "Promise<boolean>",
7402
+ "docs": ""
7403
+ },
7404
+ "complexType": {
7405
+ "signature": "() => Promise<boolean>",
7406
+ "parameters": [],
7407
+ "references": {
7408
+ "Promise": {
7409
+ "location": "global",
7410
+ "id": "global::Promise"
7411
+ }
7412
+ },
7413
+ "return": "Promise<boolean>"
7414
+ },
7415
+ "signature": "checkValidity() => Promise<boolean>",
7416
+ "parameters": [],
7417
+ "docs": "Returns whether the toggle satisfies its validation constraints",
7418
+ "docsTags": []
7419
+ },
7420
+ {
7421
+ "name": "focusToggle",
7422
+ "returns": {
7423
+ "type": "Promise<void>",
7424
+ "docs": ""
7425
+ },
7426
+ "complexType": {
7427
+ "signature": "() => Promise<void>",
7428
+ "parameters": [],
7429
+ "references": {
7430
+ "Promise": {
7431
+ "location": "global",
7432
+ "id": "global::Promise"
7433
+ }
7434
+ },
7435
+ "return": "Promise<void>"
7436
+ },
7437
+ "signature": "focusToggle() => Promise<void>",
7438
+ "parameters": [],
7439
+ "docs": "Sets focus on the toggle",
7440
+ "docsTags": []
7441
+ },
7442
+ {
7443
+ "name": "getInputElement",
7444
+ "returns": {
7445
+ "type": "Promise<HTMLInputElement | undefined>",
7446
+ "docs": ""
7447
+ },
7448
+ "complexType": {
7449
+ "signature": "() => Promise<HTMLInputElement | undefined>",
7450
+ "parameters": [],
7451
+ "references": {
7452
+ "Promise": {
7453
+ "location": "global",
7454
+ "id": "global::Promise"
7455
+ },
7456
+ "HTMLInputElement": {
7457
+ "location": "global",
7458
+ "id": "global::HTMLInputElement"
7459
+ }
7460
+ },
7461
+ "return": "Promise<HTMLInputElement | undefined>"
7462
+ },
7463
+ "signature": "getInputElement() => Promise<HTMLInputElement | undefined>",
7464
+ "parameters": [],
7465
+ "docs": "Returns the native HTMLInputElement.\n\nPromise resolves when the element is ready and the input is available.",
7466
+ "docsTags": []
7467
+ },
7468
+ {
7469
+ "name": "reportValidity",
7470
+ "returns": {
7471
+ "type": "Promise<boolean>",
7472
+ "docs": ""
7473
+ },
7474
+ "complexType": {
7475
+ "signature": "() => Promise<boolean>",
7476
+ "parameters": [],
7477
+ "references": {
7478
+ "Promise": {
7479
+ "location": "global",
7480
+ "id": "global::Promise"
6814
7481
  }
6815
7482
  },
6816
7483
  "return": "Promise<boolean>"
@@ -6877,6 +7544,11 @@
6877
7544
  "declaration": "any",
6878
7545
  "docstring": "",
6879
7546
  "path": "src/api/index.d.ts"
7547
+ },
7548
+ "src/api/index.d.ts::Snackbar": {
7549
+ "declaration": "any",
7550
+ "docstring": "",
7551
+ "path": "src/api/index.d.ts"
6880
7552
  }
6881
7553
  }
6882
7554
  }