@lmvz-ds/components 0.39.0 → 0.41.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 (138) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/cjs/{ds.constants-C6eKRAEu.js → ds.constants-pI-qkOYv.js} +2 -0
  3. package/cjs/index.cjs.js +2 -1
  4. package/cjs/lmvz-button-group.cjs.entry.js +1 -1
  5. package/cjs/lmvz-button_2.cjs.entry.js +1 -1
  6. package/cjs/lmvz-card.cjs.entry.js +58 -14
  7. package/cjs/lmvz-checkbox.cjs.entry.js +1 -1
  8. package/cjs/lmvz-chip.cjs.entry.js +2 -2
  9. package/cjs/lmvz-components.cjs.js +1 -1
  10. package/cjs/lmvz-datepicker.cjs.entry.js +2 -2
  11. package/cjs/lmvz-header_2.cjs.entry.js +1 -1
  12. package/cjs/lmvz-input.cjs.entry.js +2 -2
  13. package/cjs/lmvz-link.cjs.entry.js +2 -2
  14. package/cjs/lmvz-menuitem.cjs.entry.js +1 -1
  15. package/cjs/lmvz-message.cjs.entry.js +1 -1
  16. package/cjs/lmvz-modal.cjs.entry.js +1 -1
  17. package/cjs/lmvz-popover.cjs.entry.js +1 -1
  18. package/cjs/lmvz-radio.cjs.entry.js +1 -1
  19. package/cjs/lmvz-select.cjs.entry.js +1 -1
  20. package/cjs/lmvz-snackbar.cjs.entry.js +1 -1
  21. package/cjs/lmvz-spinner.cjs.entry.js +1 -1
  22. package/cjs/lmvz-tab.cjs.entry.js +3 -3
  23. package/cjs/lmvz-tabs.cjs.entry.js +37 -44
  24. package/cjs/lmvz-toggle.cjs.entry.js +1 -1
  25. package/cjs/loader.cjs.js +1 -1
  26. package/collection/api/ds.constants.js +1 -0
  27. package/collection/components/lmvz-card/lmvz-card.css +82 -194
  28. package/collection/components/lmvz-card/lmvz-card.js +131 -38
  29. package/collection/components/lmvz-checkbox/lmvz-checkbox.js +1 -1
  30. package/collection/components/lmvz-chip/lmvz-chip.js +1 -1
  31. package/collection/components/lmvz-datepicker/lmvz-datepicker.js +2 -2
  32. package/collection/components/lmvz-header/lmvz-header.js +1 -1
  33. package/collection/components/lmvz-icon/lmvz-icon.js +1 -1
  34. package/collection/components/lmvz-input/lmvz-input.js +2 -2
  35. package/collection/components/lmvz-link/lmvz-link.js +1 -1
  36. package/collection/components/lmvz-menuitem/lmvz-menuitem.js +1 -1
  37. package/collection/components/lmvz-message/lmvz-message.js +1 -1
  38. package/collection/components/lmvz-modal/lmvz-modal.js +1 -1
  39. package/collection/components/lmvz-popover/lmvz-popover.js +1 -1
  40. package/collection/components/lmvz-radio/lmvz-radio.js +1 -1
  41. package/collection/components/lmvz-select/lmvz-select.js +1 -1
  42. package/collection/components/lmvz-snackbar/lmvz-snackbar.js +1 -1
  43. package/collection/components/lmvz-spinner/lmvz-spinner.js +1 -1
  44. package/collection/components/lmvz-tab/lmvz-tab.css +0 -13
  45. package/collection/components/lmvz-tab/lmvz-tab.js +10 -14
  46. package/collection/components/lmvz-tabs/lmvz-tabs.css +0 -5
  47. package/collection/components/lmvz-tabs/lmvz-tabs.js +45 -66
  48. package/collection/components/lmvz-toggle/lmvz-toggle.js +1 -1
  49. package/collection/integration/header-integration/header-integration.js +1 -1
  50. package/components/index.js +1 -1
  51. package/components/lmvz-button-group.js +1 -1
  52. package/components/lmvz-card.js +1 -1
  53. package/components/lmvz-checkbox.js +1 -1
  54. package/components/lmvz-chip.js +1 -1
  55. package/components/lmvz-datepicker.js +1 -1
  56. package/components/lmvz-header.js +1 -1
  57. package/components/lmvz-icon.js +1 -1
  58. package/components/lmvz-input.js +1 -1
  59. package/components/lmvz-link.js +1 -1
  60. package/components/lmvz-menuitem.js +1 -1
  61. package/components/lmvz-message.js +1 -1
  62. package/components/lmvz-modal.js +1 -1
  63. package/components/lmvz-popover.js +1 -1
  64. package/components/lmvz-radio.js +1 -1
  65. package/components/lmvz-select.js +1 -1
  66. package/components/lmvz-snackbar.js +1 -1
  67. package/components/lmvz-spinner.js +1 -1
  68. package/components/lmvz-tab.js +1 -1
  69. package/components/lmvz-tabs.js +1 -1
  70. package/components/lmvz-toggle.js +1 -1
  71. package/components/p-Buw_s-9k.js +1 -0
  72. package/components/{p-DSDBThqb.js → p-ChNEjbnY.js} +1 -1
  73. package/components/{p-niXjuPxe.js → p-DMdV-cnt.js} +1 -1
  74. package/components/{p-Bc5MM0zh.js → p-D_sr5Z0Q.js} +1 -1
  75. package/components/{p-D_mff3n7.js → p-qLAod5PR.js} +1 -1
  76. package/components/{p-DXhP6UeF.js → p-sJgTdXHR.js} +1 -1
  77. package/esm/{ds.constants-0ctLESas.js → ds.constants-Buw_s-9k.js} +2 -1
  78. package/esm/index.js +1 -1
  79. package/esm/lmvz-button-group.entry.js +1 -1
  80. package/esm/lmvz-button_2.entry.js +1 -1
  81. package/esm/lmvz-card.entry.js +59 -15
  82. package/esm/lmvz-checkbox.entry.js +1 -1
  83. package/esm/lmvz-chip.entry.js +2 -2
  84. package/esm/lmvz-components.js +1 -1
  85. package/esm/lmvz-datepicker.entry.js +2 -2
  86. package/esm/lmvz-header_2.entry.js +1 -1
  87. package/esm/lmvz-input.entry.js +2 -2
  88. package/esm/lmvz-link.entry.js +2 -2
  89. package/esm/lmvz-menuitem.entry.js +1 -1
  90. package/esm/lmvz-message.entry.js +1 -1
  91. package/esm/lmvz-modal.entry.js +1 -1
  92. package/esm/lmvz-popover.entry.js +1 -1
  93. package/esm/lmvz-radio.entry.js +1 -1
  94. package/esm/lmvz-select.entry.js +1 -1
  95. package/esm/lmvz-snackbar.entry.js +1 -1
  96. package/esm/lmvz-spinner.entry.js +1 -1
  97. package/esm/lmvz-tab.entry.js +3 -3
  98. package/esm/lmvz-tabs.entry.js +37 -44
  99. package/esm/lmvz-toggle.entry.js +1 -1
  100. package/esm/loader.js +1 -1
  101. package/hydrate/index.js +125 -88
  102. package/hydrate/index.mjs +125 -88
  103. package/lmvz-components/index.esm.js +1 -1
  104. package/lmvz-components/lmvz-components.esm.js +1 -1
  105. package/lmvz-components/{p-f24f5207.entry.js → p-170dea97.entry.js} +1 -1
  106. package/lmvz-components/{p-efd9d50e.entry.js → p-18a894e4.entry.js} +1 -1
  107. package/lmvz-components/{p-f911691c.entry.js → p-19c9f747.entry.js} +1 -1
  108. package/lmvz-components/{p-87f21ac9.entry.js → p-377c45a7.entry.js} +1 -1
  109. package/lmvz-components/{p-773e9d95.entry.js → p-6292da52.entry.js} +1 -1
  110. package/lmvz-components/{p-ebad823c.entry.js → p-65efa76e.entry.js} +1 -1
  111. package/lmvz-components/{p-27e8b4fa.entry.js → p-67b86084.entry.js} +1 -1
  112. package/lmvz-components/{p-7cbfbc88.entry.js → p-6ffd9391.entry.js} +1 -1
  113. package/lmvz-components/{p-304c7554.entry.js → p-77fd3ce2.entry.js} +1 -1
  114. package/lmvz-components/{p-e35f49a1.entry.js → p-96764fa9.entry.js} +1 -1
  115. package/lmvz-components/p-Buw_s-9k.js +1 -0
  116. package/lmvz-components/{p-6aae1df9.entry.js → p-a70079b6.entry.js} +1 -1
  117. package/lmvz-components/p-aa643b58.entry.js +1 -0
  118. package/lmvz-components/{p-335b3867.entry.js → p-b14966a6.entry.js} +1 -1
  119. package/lmvz-components/{p-8ba6ec19.entry.js → p-b9d29e90.entry.js} +1 -1
  120. package/lmvz-components/{p-41286514.entry.js → p-bf728ef8.entry.js} +1 -1
  121. package/lmvz-components/p-c6309d6c.entry.js +1 -0
  122. package/lmvz-components/p-d466fe8f.entry.js +1 -0
  123. package/lmvz-components/{p-edec4d09.entry.js → p-dd4a62e1.entry.js} +1 -1
  124. package/lmvz-components/{p-d73bb7fd.entry.js → p-e1c75def.entry.js} +1 -1
  125. package/lmvz-components/{p-93b781ca.entry.js → p-fd29789f.entry.js} +1 -1
  126. package/manifest.json +169 -102
  127. package/package.json +1 -1
  128. package/types/api/ds.constants.d.ts +1 -0
  129. package/types/api/ds.types.d.ts +4 -0
  130. package/types/components/lmvz-card/lmvz-card.d.ts +17 -6
  131. package/types/components/lmvz-tab/lmvz-tab.d.ts +1 -1
  132. package/types/components/lmvz-tabs/lmvz-tabs.d.ts +7 -8
  133. package/types/components.d.ts +68 -47
  134. package/components/p-0ctLESas.js +0 -1
  135. package/lmvz-components/p-0ctLESas.js +0 -1
  136. package/lmvz-components/p-1ba1af8d.entry.js +0 -1
  137. package/lmvz-components/p-3b7203a3.entry.js +0 -1
  138. package/lmvz-components/p-c884c76e.entry.js +0 -1
@@ -1 +1 @@
1
- import{g as M,r as N,h as e,H as I}from"./p-DVab4vzV.js";import{A as j}from"./p-Wi9d2-w9.js";import{D}from"./p-BlkpdeQI.js";import{R as g}from"./p-CICeIanv.js";export{lmvz_menuitem}from"./p-8ba6ec19.entry.js";import"./p-BDonpCG8.js";import"./p-BA3wizqg.js";import"./p-DIyiticz.js";import"./p-CPSyM_e-.js";const a=class extends g{get el(){return M(this)}get validationEl(){return this.el}primarySlot;secondarySlot;secondaryNav;keyboardNavigationController=new D(this,{orientation:"both",manageTabIndex:!1,enableHomeAndEnd:!1});get primaryMenuitems(){return this.primarySlot?.assignedElements({flatten:!1})||[]}get secondaryMenuitems(){return this.secondarySlot?.assignedElements({flatten:!0})||[]}get role(){return"banner"}lmvzActiveNav;get secondarySlotName(){return`connect-nav-${this.lmvzActiveNav}`}constructor(M){super(),N(this,M),this.addController(new j(this,{reValidateOnPropChanges:!0})),this.addController(this.keyboardNavigationController)}handleActiveNavChange(){this.updateElementsActive()}async initFocus(){this.keyboardNavigationController.initFocus()}componentDidLoad(){this.primarySlot?.addEventListener("slotchange",this.handlePrimaryNavItemsChange.bind(this)),this.handlePrimaryNavItemsChange(),this.secondarySlot?.addEventListener("slotchange",this.handleSecondaryNavItemsChange.bind(this)),super.componentDidLoad()}handlePrimaryNavItemsChange(){const M=this.primaryMenuitems;M.length?(M.forEach((M=>{M.setAttribute("aria-haspopup","true"),M.setAttribute("aria-controls","nav-secondary")})),this.updateElementsActive(),this.updateKeyboardNavSubjects()):console.warn("Primary slot has no assigned elements. Please add navigation items to the primary slot.")}handleSecondaryNavItemsChange(){this.secondaryMenuitems.length&&this.updateKeyboardNavSubjects()}updateKeyboardNavSubjects(){this.keyboardNavigationController.updateElements([...this.primaryMenuitems,...this.secondaryMenuitems])}updateElementsActive(){const M=this.primaryMenuitems;if(!M.length)return;let N="";M.forEach((M=>{const e=M.id===this.lmvzActiveNav;e&&(N=M.textContent||M.id),M.setAttribute("aria-expanded",e?"true":"false")})),N&&this.secondaryNav?.setAttribute("aria-label",`Untermenü für ${N}`)}delegateFocus(){const M=this.primaryMenuitems[0];M&&M.focus()}render(){return e(I,{key:"a72c860d7f67c9631c462c0abcc798bb142dfc55",onFocus:this.delegateFocus.bind(this)},e("div",{key:"4ed87264d201c513bce284536793692424ed864b",class:"brand"},e("slot",{key:"9291d81d7f8a630007b8ad827a16ebea7222b9d2",name:"brand"},e("img",{key:"77da99409f40d93e4a2d190cbb2a8857f1e81c36",id:"fallback-logo-lmvz",src:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDYiIGhlaWdodD0iNzIiIHZpZXdCb3g9IjAgMCA0NiA3MiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI3Ml80MDUpIj4KPHBhdGggZD0iTTEyLjUgMjAuNjVDMTMuMSAyMC42NSAxNC4yIDIwLjM1IDE0LjcgMjAuMzVDMTYuMSAyMC4zNSAxNy4yIDIxLjQ1IDE3LjIgMjIuODVDMTcuMiAyNC4yNSAxNi4xIDI1LjM1IDE0LjcgMjUuMzVIMi44QzEuMiAyNS4zNSAwIDI0LjE1IDAgMjIuNTVDMCAyMS45NSAwLjIgMjAuNjUgMC4yIDIwLjA1VjUuODQ5OTlDMC4yIDUuMTQ5OTkgMCAzLjk0OTk5IDAgMy4zNDk5OUMwIDEuNzQ5OTkgMS4yIDAuNTQ5OTg4IDIuOCAwLjU0OTk4OEM0LjMgMC41NDk5ODggNS42IDEuNzQ5OTkgNS42IDMuMzQ5OTlDNS42IDMuOTQ5OTkgNS40IDUuMTQ5OTkgNS40IDUuODQ5OTlWMjAuNTVIMTIuNVYyMC42NVpNMjIuMSAyMi43NUMyMi4xIDIyLjE1IDIyLjMgMjAuOTUgMjIuMyAyMC4yNVY1Ljg0OTk5QzIyLjMgNS4xNDk5OSAyMi4xIDMuOTQ5OTkgMjIuMSAzLjQ0OTk5QzIyLjEgMS45NDk5OSAyMy4yIDAuNzQ5OTg4IDI0LjYgMC43NDk5ODhIMjUuMkMyNi40IDAuNzQ5OTg4IDI3LjIgMS41NDk5OSAyNy42IDIuNjQ5OTlMMjggMy40NDk5OUwzMi45IDE0LjA1QzMzLjMgMTQuOTUgMzMuNyAxNi4wNSAzNCAxNi43NUMzNC4zIDE2LjA1IDM0LjcgMTQuOTUgMzUuMSAxNC4wNUw0MCAzLjU0OTk5TDQwLjMgMi41NDk5OUM0MC43IDEuNTQ5OTkgNDEuNSAwLjY0OTk4OCA0Mi42IDAuNjQ5OTg4SDQzLjJDNDQuNyAwLjY0OTk4OCA0NS43IDEuODQ5OTkgNDUuNyAzLjM0OTk5QzQ1LjcgMy45NDk5OSA0NS41IDUuMTQ5OTkgNDUuNSA1Ljc0OTk5VjIwLjE1QzQ1LjUgMjAuODUgNDUuNyAyMi4wNSA0NS43IDIyLjY1QzQ1LjcgMjQuMjUgNDQuNSAyNS40NSA0MyAyNS40NUM0MS40IDI1LjQ1IDQwLjMgMjQuMjUgNDAuMyAyMi42NUM0MC4zIDIxLjk1IDQwLjQgMjAuNzUgNDAuNCAyMC4xNUw0MC42IDE0LjA1QzQwLjYgMTMuMTUgNDAuNyAxMS43NSA0MC43IDEwLjY1TDM3IDE5LjA1QzM2LjcgMTkuNzUgMzYuNiAxOS45NSAzNi40IDIwLjM1QzM2IDIxLjI1IDM1LjMgMjEuODUgMzMuOSAyMS44NUMzMi41IDIxLjg1IDMxLjggMjEuMjUgMzEuNCAyMC40NUMzMS4yIDIwLjA1IDMxLjIgMTkuNzUgMzAuOCAxOS4wNUwyNyAxMC43NUMyNyAxMC43NSAyNy4xIDEzLjE1IDI3LjIgMTQuMDVMMjcuNCAyMC4xNUMyNy40IDIwLjg1IDI3LjUgMjEuOTUgMjcuNSAyMi42NUMyNy41IDI0LjI1IDI2LjQgMjUuNDUgMjQuOCAyNS40NUMyMy4zIDI1LjU1IDIyLjEgMjQuMjUgMjIuMSAyMi43NVpNMjguNyAzMi45NUMyOS4xIDMyLjk1IDMwLjIgMzMuMTUgMzAuNyAzMy4xNUg0MS44QzQyLjMgMzMuMTUgNDMuMiAzMi45NSA0My43IDMyLjk1QzQ0LjkgMzIuOTUgNDUuOCAzMy44NSA0NS44IDM1LjA1QzQ1LjggMzYuMTUgNDQuOSAzNy4xNSA0My43IDM3LjE1QzQzLjMgMzcuMTUgNDIuMyAzNi45NSA0MS44IDM2Ljk1SDMwLjhDMzAuMyAzNi45NSAyOS4yIDM3LjE1IDI4LjggMzcuMTVDMjcuNiAzNy4xNSAyNi43IDM2LjI1IDI2LjcgMzUuMDVDMjYuNiAzMy45NSAyNy41IDMyLjk1IDI4LjcgMzIuOTVaTTIuMSA2Ny4yNUMyLjUgNjcuMjUgMy42IDY3LjQ1IDQuMSA2Ny40NUgxOC41QzE5IDY3LjQ1IDE5LjkgNjcuMjUgMjAuNCA2Ny4yNUMyMS42IDY3LjI1IDIyLjUgNjguMTUgMjIuNSA2OS4zNUMyMi41IDcwLjQ1IDIxLjYgNzEuNDUgMjAuNCA3MS40NUMyMCA3MS40NSAxOSA3MS4yNSAxOC41IDcxLjI1SDQuMUMzLjYgNzEuMjUgMi41IDcxLjQ1IDIuMSA3MS40NUMwLjkgNzEuNDUgMCA3MC41NSAwIDY5LjM1QzAgNjguMjUgMC45IDY3LjI1IDIuMSA2Ny4yNVpNMjEuOSAzNS42NUMyMS45IDM1Ljk1IDIxLjggMzYuMzUgMjEuNiAzNi43NUMyMS4zIDM3LjQ1IDIwLjkgMzguMzUgMjAuNyAzOC44NUwxNC43IDU0LjY1QzE0LjUgNTUuMDUgMTQuNCA1NS41NSAxNC4yIDU2LjM1QzEzLjggNTcuNjUgMTIuNiA1OC4yNSAxMS4yIDU4LjI1SDEwLjhDOS40IDU4LjI1IDguMiA1Ny43NSA3LjggNTYuMzVDNy42IDU1LjU1IDcuNCA1NS4xNSA3LjIgNTQuNjVMMS4yIDM4Ljg1QzEgMzguMzUgMC42IDM3LjU1IDAuMiAzNi44NUMwLjEgMzYuNDUgMCAzNS45NSAwIDM1LjY1QzAgMzQuMTUgMS4yIDMyLjg1IDIuOCAzMi44NUMzLjkgMzIuODUgNSAzMy41NSA1LjMgMzQuNzVDNS41IDM1LjU1IDUuNSAzNi4xNSA2IDM3LjU1TDEwLjIgNDkuNDVDMTAuNSA1MC4zNSAxMC45IDUxLjQ1IDExLjEgNTIuMzVDMTEuMyA1MS40NSAxMS42IDUwLjQ1IDExLjkgNDkuNTVMMTYgMzcuNTVDMTYuNSAzNi4wNSAxNi40IDM1LjY1IDE2LjcgMzQuODVDMTcuMSAzMy42NSAxOC4xIDMyLjg1IDE5LjMgMzIuODVDMjAuOSAzMi44NSAyMS45IDM0LjE1IDIxLjkgMzUuNjVaTTI5LjcgNzEuNDVDMjguMiA3MS40NSAyNy4yIDcwLjQ1IDI3LjIgNjkuMTVDMjcuMiA2OC43NSAyNy4yIDY4LjI1IDI3LjggNjcuNDVMMzcuNCA1My40NUMzNy45IDUyLjc1IDM4LjUgNTIuMDUgMzkuMSA1MS4zNUgzMi4yQzMxLjUgNTEuMzUgMzAuNyA1MS42NSAzMC4xIDUxLjY1QzI4LjcgNTEuNjUgMjcuNiA1MC43NSAyNy42IDQ5LjM1QzI3LjYgNDcuOTUgMjguNyA0Ni45NSAzMC4xIDQ2Ljk1SDQyLjdDNDQuMiA0Ni45NSA0NS4yIDQ3Ljg1IDQ1LjIgNDkuMjVDNDUuMiA0OS42NSA0NSA1MC4zNSA0NC41IDUxLjA1TDM1LjIgNjQuODVDMzQuNyA2NS42NSAzNC4xIDY2LjQ1IDMzLjUgNjcuMDVINDEuMUM0MS45IDY3LjA1IDQyLjcgNjYuNzUgNDMuMyA2Ni43NUM0NC43IDY2Ljc1IDQ1LjcgNjcuNzUgNDUuNyA2OS4wNUM0NS43IDcwLjU1IDQ0LjUgNzEuNTUgNDMuMiA3MS41NUgyOS43VjcxLjQ1WiIgZmlsbD0iYmxhY2siLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yNzJfNDA1Ij4KPHJlY3Qgd2lkdGg9IjQ2IiBoZWlnaHQ9IjcyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=",alt:"Lehrmittelverlag Zürich"}))),e("nav",{key:"3c40c04bb23524ae58e391a54b044e225a25ad07","aria-label":"Hauptnavigation"},e("div",{key:"207b8032d3d11b4bfacb6e7fcffb683ad5da8ccc",role:"menubar",class:"primary-menubar"},e("slot",{key:"8ae67a57ac7b6bb6083c469a857542e31b0c2294",name:"nav-primary",ref:M=>this.primarySlot=M}),e("div",{key:"86b9696c95e9ae0e3843fa1607f268dcae8cb279",role:"menu",id:"nav-secondary",class:"secondary-menubar",hidden:!this.lmvzActiveNav,ref:M=>this.secondaryNav=M},e("slot",{key:"67966de33555dc26ac2dc51fc8a85d456a2e8e85",name:this.secondarySlotName,ref:M=>this.secondarySlot=M})))),e("div",{key:"bfb2831144cee723c3182d96d64f44be1cc5a78b",class:"actions"},e("slot",{key:"6956b81fa8ed6c446edc5f7d9708462b39bc8cbb",name:"actions"})))}static get watchers(){return{lmvzActiveNav:[{handleActiveNavChange:0}]}}};a.style=":host{display:flex;width:100vw;flex-direction:row;align-items:center;box-sizing:border-box;background-color:var(--lmvz-semantic-color-surface-primary, #ffffff);--lmvz-header-x-spacing-level-1:var(--lmvz-dimension-28-8, clamp(0.5rem, 0.2rem + 1.29vw, 1.75rem));--lmvz-header-x-spacing-level-2:var(--lmvz-component-buttongroup-wrapper-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem));padding:var(--lmvz-dimension-16-8, clamp(0.5rem, 0.38rem + 0.52vw, 1rem)) var(--lmvz-header-x-spacing-level-1);gap:var(--lmvz-header-x-spacing-level-1);.brand{display:inline-flex;justify-content:center;align-items:center}#fallback-logo-lmvz{height:34px;width:auto}nav{flex-grow:1}.primary-menubar{display:flex;flex-direction:row;align-items:center}.secondary-menubar{display:flex;flex-direction:row;align-items:center;margin-left:var(--lmvz-header-x-spacing-level-2);padding-left:var(--lmvz-header-x-spacing-level-2);border-left:1px solid var(--lmvz-semantic-color-border-default, #e0e0e0)}}";export{a as lmvz_header}
1
+ import{g as M,r as N,h as e,H as I}from"./p-DVab4vzV.js";import{A as j}from"./p-Wi9d2-w9.js";import{D}from"./p-BlkpdeQI.js";import{R as g}from"./p-CICeIanv.js";export{lmvz_menuitem}from"./p-b9d29e90.entry.js";import"./p-BDonpCG8.js";import"./p-BA3wizqg.js";import"./p-DIyiticz.js";import"./p-CPSyM_e-.js";const a=class extends g{get el(){return M(this)}get validationEl(){return this.el}primarySlot;secondarySlot;secondaryNav;keyboardNavigationController=new D(this,{orientation:"both",manageTabIndex:!1,enableHomeAndEnd:!1});get primaryMenuitems(){return this.primarySlot?.assignedElements({flatten:!1})||[]}get secondaryMenuitems(){return this.secondarySlot?.assignedElements({flatten:!0})||[]}get role(){return"banner"}lmvzActiveNav;get secondarySlotName(){return`connect-nav-${this.lmvzActiveNav}`}constructor(M){super(),N(this,M),this.addController(new j(this,{reValidateOnPropChanges:!0})),this.addController(this.keyboardNavigationController)}handleActiveNavChange(){this.updateElementsActive()}async initFocus(){this.keyboardNavigationController.initFocus()}componentDidLoad(){this.primarySlot?.addEventListener("slotchange",this.handlePrimaryNavItemsChange.bind(this)),this.handlePrimaryNavItemsChange(),this.secondarySlot?.addEventListener("slotchange",this.handleSecondaryNavItemsChange.bind(this)),super.componentDidLoad()}handlePrimaryNavItemsChange(){const M=this.primaryMenuitems;M.length?(M.forEach((M=>{M.setAttribute("aria-haspopup","true"),M.setAttribute("aria-controls","nav-secondary")})),this.updateElementsActive(),this.updateKeyboardNavSubjects()):console.warn("Primary slot has no assigned elements. Please add navigation items to the primary slot.")}handleSecondaryNavItemsChange(){this.secondaryMenuitems.length&&this.updateKeyboardNavSubjects()}updateKeyboardNavSubjects(){this.keyboardNavigationController.updateElements([...this.primaryMenuitems,...this.secondaryMenuitems])}updateElementsActive(){const M=this.primaryMenuitems;if(!M.length)return;let N="";M.forEach((M=>{const e=M.id===this.lmvzActiveNav;e&&(N=M.textContent||M.id),M.setAttribute("aria-expanded",e?"true":"false")})),N&&this.secondaryNav?.setAttribute("aria-label",`Untermenü für ${N}`)}delegateFocus(){const M=this.primaryMenuitems[0];M&&M.focus()}render(){return e(I,{key:"427f1fe61ea8809a17dc08518c3dca7218cd2c9b",onFocus:this.delegateFocus.bind(this)},e("div",{key:"b95c5d269c18001592b4ea853b9c945eeedfda07",class:"brand"},e("slot",{key:"d856c174220f6e17b1aa977745bd057f7ca12625",name:"brand"},e("img",{key:"554896aadccb818f06d01ad88f9be96a1afa615a",id:"fallback-logo-lmvz",src:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDYiIGhlaWdodD0iNzIiIHZpZXdCb3g9IjAgMCA0NiA3MiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI3Ml80MDUpIj4KPHBhdGggZD0iTTEyLjUgMjAuNjVDMTMuMSAyMC42NSAxNC4yIDIwLjM1IDE0LjcgMjAuMzVDMTYuMSAyMC4zNSAxNy4yIDIxLjQ1IDE3LjIgMjIuODVDMTcuMiAyNC4yNSAxNi4xIDI1LjM1IDE0LjcgMjUuMzVIMi44QzEuMiAyNS4zNSAwIDI0LjE1IDAgMjIuNTVDMCAyMS45NSAwLjIgMjAuNjUgMC4yIDIwLjA1VjUuODQ5OTlDMC4yIDUuMTQ5OTkgMCAzLjk0OTk5IDAgMy4zNDk5OUMwIDEuNzQ5OTkgMS4yIDAuNTQ5OTg4IDIuOCAwLjU0OTk4OEM0LjMgMC41NDk5ODggNS42IDEuNzQ5OTkgNS42IDMuMzQ5OTlDNS42IDMuOTQ5OTkgNS40IDUuMTQ5OTkgNS40IDUuODQ5OTlWMjAuNTVIMTIuNVYyMC42NVpNMjIuMSAyMi43NUMyMi4xIDIyLjE1IDIyLjMgMjAuOTUgMjIuMyAyMC4yNVY1Ljg0OTk5QzIyLjMgNS4xNDk5OSAyMi4xIDMuOTQ5OTkgMjIuMSAzLjQ0OTk5QzIyLjEgMS45NDk5OSAyMy4yIDAuNzQ5OTg4IDI0LjYgMC43NDk5ODhIMjUuMkMyNi40IDAuNzQ5OTg4IDI3LjIgMS41NDk5OSAyNy42IDIuNjQ5OTlMMjggMy40NDk5OUwzMi45IDE0LjA1QzMzLjMgMTQuOTUgMzMuNyAxNi4wNSAzNCAxNi43NUMzNC4zIDE2LjA1IDM0LjcgMTQuOTUgMzUuMSAxNC4wNUw0MCAzLjU0OTk5TDQwLjMgMi41NDk5OUM0MC43IDEuNTQ5OTkgNDEuNSAwLjY0OTk4OCA0Mi42IDAuNjQ5OTg4SDQzLjJDNDQuNyAwLjY0OTk4OCA0NS43IDEuODQ5OTkgNDUuNyAzLjM0OTk5QzQ1LjcgMy45NDk5OSA0NS41IDUuMTQ5OTkgNDUuNSA1Ljc0OTk5VjIwLjE1QzQ1LjUgMjAuODUgNDUuNyAyMi4wNSA0NS43IDIyLjY1QzQ1LjcgMjQuMjUgNDQuNSAyNS40NSA0MyAyNS40NUM0MS40IDI1LjQ1IDQwLjMgMjQuMjUgNDAuMyAyMi42NUM0MC4zIDIxLjk1IDQwLjQgMjAuNzUgNDAuNCAyMC4xNUw0MC42IDE0LjA1QzQwLjYgMTMuMTUgNDAuNyAxMS43NSA0MC43IDEwLjY1TDM3IDE5LjA1QzM2LjcgMTkuNzUgMzYuNiAxOS45NSAzNi40IDIwLjM1QzM2IDIxLjI1IDM1LjMgMjEuODUgMzMuOSAyMS44NUMzMi41IDIxLjg1IDMxLjggMjEuMjUgMzEuNCAyMC40NUMzMS4yIDIwLjA1IDMxLjIgMTkuNzUgMzAuOCAxOS4wNUwyNyAxMC43NUMyNyAxMC43NSAyNy4xIDEzLjE1IDI3LjIgMTQuMDVMMjcuNCAyMC4xNUMyNy40IDIwLjg1IDI3LjUgMjEuOTUgMjcuNSAyMi42NUMyNy41IDI0LjI1IDI2LjQgMjUuNDUgMjQuOCAyNS40NUMyMy4zIDI1LjU1IDIyLjEgMjQuMjUgMjIuMSAyMi43NVpNMjguNyAzMi45NUMyOS4xIDMyLjk1IDMwLjIgMzMuMTUgMzAuNyAzMy4xNUg0MS44QzQyLjMgMzMuMTUgNDMuMiAzMi45NSA0My43IDMyLjk1QzQ0LjkgMzIuOTUgNDUuOCAzMy44NSA0NS44IDM1LjA1QzQ1LjggMzYuMTUgNDQuOSAzNy4xNSA0My43IDM3LjE1QzQzLjMgMzcuMTUgNDIuMyAzNi45NSA0MS44IDM2Ljk1SDMwLjhDMzAuMyAzNi45NSAyOS4yIDM3LjE1IDI4LjggMzcuMTVDMjcuNiAzNy4xNSAyNi43IDM2LjI1IDI2LjcgMzUuMDVDMjYuNiAzMy45NSAyNy41IDMyLjk1IDI4LjcgMzIuOTVaTTIuMSA2Ny4yNUMyLjUgNjcuMjUgMy42IDY3LjQ1IDQuMSA2Ny40NUgxOC41QzE5IDY3LjQ1IDE5LjkgNjcuMjUgMjAuNCA2Ny4yNUMyMS42IDY3LjI1IDIyLjUgNjguMTUgMjIuNSA2OS4zNUMyMi41IDcwLjQ1IDIxLjYgNzEuNDUgMjAuNCA3MS40NUMyMCA3MS40NSAxOSA3MS4yNSAxOC41IDcxLjI1SDQuMUMzLjYgNzEuMjUgMi41IDcxLjQ1IDIuMSA3MS40NUMwLjkgNzEuNDUgMCA3MC41NSAwIDY5LjM1QzAgNjguMjUgMC45IDY3LjI1IDIuMSA2Ny4yNVpNMjEuOSAzNS42NUMyMS45IDM1Ljk1IDIxLjggMzYuMzUgMjEuNiAzNi43NUMyMS4zIDM3LjQ1IDIwLjkgMzguMzUgMjAuNyAzOC44NUwxNC43IDU0LjY1QzE0LjUgNTUuMDUgMTQuNCA1NS41NSAxNC4yIDU2LjM1QzEzLjggNTcuNjUgMTIuNiA1OC4yNSAxMS4yIDU4LjI1SDEwLjhDOS40IDU4LjI1IDguMiA1Ny43NSA3LjggNTYuMzVDNy42IDU1LjU1IDcuNCA1NS4xNSA3LjIgNTQuNjVMMS4yIDM4Ljg1QzEgMzguMzUgMC42IDM3LjU1IDAuMiAzNi44NUMwLjEgMzYuNDUgMCAzNS45NSAwIDM1LjY1QzAgMzQuMTUgMS4yIDMyLjg1IDIuOCAzMi44NUMzLjkgMzIuODUgNSAzMy41NSA1LjMgMzQuNzVDNS41IDM1LjU1IDUuNSAzNi4xNSA2IDM3LjU1TDEwLjIgNDkuNDVDMTAuNSA1MC4zNSAxMC45IDUxLjQ1IDExLjEgNTIuMzVDMTEuMyA1MS40NSAxMS42IDUwLjQ1IDExLjkgNDkuNTVMMTYgMzcuNTVDMTYuNSAzNi4wNSAxNi40IDM1LjY1IDE2LjcgMzQuODVDMTcuMSAzMy42NSAxOC4xIDMyLjg1IDE5LjMgMzIuODVDMjAuOSAzMi44NSAyMS45IDM0LjE1IDIxLjkgMzUuNjVaTTI5LjcgNzEuNDVDMjguMiA3MS40NSAyNy4yIDcwLjQ1IDI3LjIgNjkuMTVDMjcuMiA2OC43NSAyNy4yIDY4LjI1IDI3LjggNjcuNDVMMzcuNCA1My40NUMzNy45IDUyLjc1IDM4LjUgNTIuMDUgMzkuMSA1MS4zNUgzMi4yQzMxLjUgNTEuMzUgMzAuNyA1MS42NSAzMC4xIDUxLjY1QzI4LjcgNTEuNjUgMjcuNiA1MC43NSAyNy42IDQ5LjM1QzI3LjYgNDcuOTUgMjguNyA0Ni45NSAzMC4xIDQ2Ljk1SDQyLjdDNDQuMiA0Ni45NSA0NS4yIDQ3Ljg1IDQ1LjIgNDkuMjVDNDUuMiA0OS42NSA0NSA1MC4zNSA0NC41IDUxLjA1TDM1LjIgNjQuODVDMzQuNyA2NS42NSAzNC4xIDY2LjQ1IDMzLjUgNjcuMDVINDEuMUM0MS45IDY3LjA1IDQyLjcgNjYuNzUgNDMuMyA2Ni43NUM0NC43IDY2Ljc1IDQ1LjcgNjcuNzUgNDUuNyA2OS4wNUM0NS43IDcwLjU1IDQ0LjUgNzEuNTUgNDMuMiA3MS41NUgyOS43VjcxLjQ1WiIgZmlsbD0iYmxhY2siLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yNzJfNDA1Ij4KPHJlY3Qgd2lkdGg9IjQ2IiBoZWlnaHQ9IjcyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=",alt:"Lehrmittelverlag Zürich"}))),e("nav",{key:"414d208fe60eb4dd0c1400727b4198b81fc4a041","aria-label":"Hauptnavigation"},e("div",{key:"608ea0c8ddcfef024505505ae7f91f644bfc1298",role:"menubar",class:"primary-menubar"},e("slot",{key:"b5de644c07b4ef809c7afa377bed5e48356fc93a",name:"nav-primary",ref:M=>this.primarySlot=M}),e("div",{key:"a6e308da89df8b705a0d03218778bc36fb0cbaf2",role:"menu",id:"nav-secondary",class:"secondary-menubar",hidden:!this.lmvzActiveNav,ref:M=>this.secondaryNav=M},e("slot",{key:"cf78a68329eadb96ad656ed81d8b3c72db582fc9",name:this.secondarySlotName,ref:M=>this.secondarySlot=M})))),e("div",{key:"f7a00431635969cd0f3b29e52d002ec67c8dae04",class:"actions"},e("slot",{key:"6ed3b3d6ef85646742f0a2cf5267464f06e20a05",name:"actions"})))}static get watchers(){return{lmvzActiveNav:[{handleActiveNavChange:0}]}}};a.style=":host{display:flex;width:100vw;flex-direction:row;align-items:center;box-sizing:border-box;background-color:var(--lmvz-semantic-color-surface-primary, #ffffff);--lmvz-header-x-spacing-level-1:var(--lmvz-dimension-28-8, clamp(0.5rem, 0.2rem + 1.29vw, 1.75rem));--lmvz-header-x-spacing-level-2:var(--lmvz-component-buttongroup-wrapper-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem));padding:var(--lmvz-dimension-16-8, clamp(0.5rem, 0.38rem + 0.52vw, 1rem)) var(--lmvz-header-x-spacing-level-1);gap:var(--lmvz-header-x-spacing-level-1);.brand{display:inline-flex;justify-content:center;align-items:center}#fallback-logo-lmvz{height:34px;width:auto}nav{flex-grow:1}.primary-menubar{display:flex;flex-direction:row;align-items:center}.secondary-menubar{display:flex;flex-direction:row;align-items:center;margin-left:var(--lmvz-header-x-spacing-level-2);padding-left:var(--lmvz-header-x-spacing-level-2);border-left:1px solid var(--lmvz-semantic-color-border-default, #e0e0e0)}}";export{a as lmvz_header}
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-08-11T13:11:51",
2
+ "timestamp": "2026-08-20T18:00:44",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.43.5",
@@ -568,6 +568,7 @@
568
568
  ],
569
569
  "states": [],
570
570
  "dependents": [
571
+ "lmvz-card",
571
572
  "lmvz-datepicker",
572
573
  "lmvz-message",
573
574
  "lmvz-modal",
@@ -575,6 +576,9 @@
575
576
  ],
576
577
  "dependencies": [],
577
578
  "dependencyGraph": {
579
+ "lmvz-card": [
580
+ "lmvz-button"
581
+ ],
578
582
  "lmvz-datepicker": [
579
583
  "lmvz-button"
580
584
  ],
@@ -710,38 +714,50 @@
710
714
  },
711
715
  {
712
716
  "filePath": "src/components/lmvz-card/lmvz-card.tsx",
713
- "encapsulation": "scoped",
717
+ "encapsulation": "shadow",
714
718
  "tag": "lmvz-card",
715
- "readme": "# lmvz-card\n\n\n",
716
- "docs": "",
717
- "docsTags": [],
719
+ "readme": "# lmvz-card\n\nA card composes an image, title, description, an optional chip, and an optional single action into a self-contained content unit. Cards are available in two sizes: `large` and `small`.\n\n## Props\n\n- **`size`** — Size variant (`'large'` or `'small'`, default: `'large'`). Invalid values are normalized to `'large'` at runtime.\n- **`cardTitle?`** — Card title text. Rendered as the fallback `<h3>` for the `card-title` slot. Ignored when a heading is slotted into `card-title`. Exactly one of `cardTitle` or a slotted heading should be supplied.\n- **`description?`** — Optional description text.\n- **`imageUrl?`** — Optional image URL. Falls back to a bundled placeholder graphic when unset.\n- **`imageAlt?`** — Accessible alt text for the image (default: `''`). Use an empty string for decorative images.\n- **`actionLabel?`** — Label for the card's single action button. The action row renders only when this is a non-empty string.\n\n## Events\n\n- **`lmvzCardAction`** — Emitted once per activation of the action button.\n\n## Slots\n\n- **`chip`** — Optional slot for a status/metadata chip (e.g., `<lmvz-chip>`), rendered in the content block. Visibility and spacing are handled automatically based on whether content is present.\n\n- **`card-title`** — Optional slot to provide a heading element (`h2`, `h3`, `h4`, or `h5`) for the card title, allowing you to control the heading level for a correct document outline.\n - **Purpose:** When no heading is slotted, the `cardTitle` prop is rendered as a fallback `<h3>`. The slot lets you override the heading level so the card fits correctly into your page's document outline structure.\n - **Supported range:** `h2` through `h5`. This range is **documented guidance only and not technically enforced by any DOM, CSS, or type mechanism** — any element can technically be slotted. A dev-time console warning (when ARIA validation is enabled) flags non-heading elements, out-of-range headings (`h1` or `h6`), or when neither a heading nor a `cardTitle` prop is supplied.\n - **Mutual exclusivity:** Exactly one of `cardTitle` or a slotted heading must be supplied. Slotting a heading and setting `cardTitle` at the same time is not an error, but only the slotted heading will render. The two mechanisms are mutually exclusive by platform design (slot fallback content only renders when no content is assigned to the slot).\n - **Styling:** The card applies its own size-branched title typography to the slotted heading regardless of which heading level you choose. Slotting a heading replaces the default `<h3>` entirely. You control the heading level for your document outline; the card controls the typography.\n\n## Breaking Changes\n\nThis version of `lmvz-card` is a from-scratch implementation with no migration path, deprecation alias, or compatibility shim:\n\n- **Removed props:** `primaryActionLabel`\n- **Removed events:** `primaryAction`\n- **Removed UI:** The overflow/kebab menu button\n\nThere is no direct successor for these removed APIs. The new card ships with a single secondary-styled action button whose label is supplied via `actionLabel` and whose activation emits `lmvzCardAction`. No old-to-new mapping exists.\n\n## Deferred Features\n\nA favorite/bookmark icon-button affordance was evaluated during design (visible in the source Figma frame) but intentionally deferred out of this implementation, pending a future, separately-scoped checklist. It is not available in this version.\n",
720
+ "docs": "A card composes an image, title, description, an optional chip, and an optional single action into a self-contained content unit.",
721
+ "docsTags": [
722
+ {
723
+ "name": "slot",
724
+ "text": "chip - Optional slot for a status/metadata chip (e.g. `<lmvz-chip>`), rendered in the content block. Visibility and spacing are handled automatically based on whether content is present."
725
+ },
726
+ {
727
+ "name": "slot",
728
+ "text": "card-title - Optional slot to provide a heading element (`<h2>`-`<h5>`) for the card title, allowing consumers to control the heading level for a correct document outline. If nothing is slotted, the `cardTitle` prop is rendered as the fallback `<h3>`. Exactly one of the two mechanisms should be used."
729
+ }
730
+ ],
718
731
  "usage": {},
719
732
  "props": [
720
733
  {
721
- "name": "cardTitle",
722
- "type": "string",
734
+ "name": "actionLabel",
735
+ "type": "string | undefined",
723
736
  "complexType": {
724
737
  "original": "string",
725
- "resolved": "string",
738
+ "resolved": "string | undefined",
726
739
  "references": {}
727
740
  },
728
741
  "mutable": false,
729
- "attr": "card-title",
742
+ "attr": "action-label",
730
743
  "reflectToAttr": false,
731
- "docs": "Card title (required)",
744
+ "docs": "Label for the card's single action button. The action row renders only when this is a non-empty string.",
732
745
  "docsTags": [],
733
746
  "values": [
734
747
  {
735
748
  "type": "string"
749
+ },
750
+ {
751
+ "type": "undefined"
736
752
  }
737
753
  ],
738
- "optional": false,
739
- "required": true,
754
+ "optional": true,
755
+ "required": false,
740
756
  "getter": false,
741
757
  "setter": false
742
758
  },
743
759
  {
744
- "name": "description",
760
+ "name": "cardTitle",
745
761
  "type": "string | undefined",
746
762
  "complexType": {
747
763
  "original": "string",
@@ -749,9 +765,9 @@
749
765
  "references": {}
750
766
  },
751
767
  "mutable": false,
752
- "attr": "description",
768
+ "attr": "card-title",
753
769
  "reflectToAttr": false,
754
- "docs": "Optional description",
770
+ "docs": "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.",
755
771
  "docsTags": [],
756
772
  "values": [
757
773
  {
@@ -767,7 +783,7 @@
767
783
  "setter": false
768
784
  },
769
785
  {
770
- "name": "imageUrl",
786
+ "name": "description",
771
787
  "type": "string | undefined",
772
788
  "complexType": {
773
789
  "original": "string",
@@ -775,9 +791,9 @@
775
791
  "references": {}
776
792
  },
777
793
  "mutable": false,
778
- "attr": "image-url",
794
+ "attr": "description",
779
795
  "reflectToAttr": false,
780
- "docs": "Optional image URL; placeholder used if omitted",
796
+ "docs": "Optional description text.",
781
797
  "docsTags": [],
782
798
  "values": [
783
799
  {
@@ -793,7 +809,7 @@
793
809
  "setter": false
794
810
  },
795
811
  {
796
- "name": "primaryActionLabel",
812
+ "name": "imageAlt",
797
813
  "type": "string",
798
814
  "complexType": {
799
815
  "original": "string",
@@ -801,9 +817,9 @@
801
817
  "references": {}
802
818
  },
803
819
  "mutable": false,
804
- "attr": "primary-action-label",
820
+ "attr": "image-alt",
805
821
  "reflectToAttr": false,
806
- "docs": "Primary action button label",
822
+ "docs": "Accessible alt text for the image.",
807
823
  "docsTags": [
808
824
  {
809
825
  "name": "default",
@@ -820,38 +836,115 @@
820
836
  "required": false,
821
837
  "getter": false,
822
838
  "setter": false
839
+ },
840
+ {
841
+ "name": "imageUrl",
842
+ "type": "string | undefined",
843
+ "complexType": {
844
+ "original": "string",
845
+ "resolved": "string | undefined",
846
+ "references": {}
847
+ },
848
+ "mutable": false,
849
+ "attr": "image-url",
850
+ "reflectToAttr": false,
851
+ "docs": "Optional image URL; falls back to a bundled placeholder graphic when unset.",
852
+ "docsTags": [],
853
+ "values": [
854
+ {
855
+ "type": "string"
856
+ },
857
+ {
858
+ "type": "undefined"
859
+ }
860
+ ],
861
+ "optional": true,
862
+ "required": false,
863
+ "getter": false,
864
+ "setter": false
865
+ },
866
+ {
867
+ "name": "size",
868
+ "type": "\"large\" | \"small\"",
869
+ "complexType": {
870
+ "original": "Card.Size",
871
+ "resolved": "\"large\" | \"small\"",
872
+ "references": {
873
+ "Card": {
874
+ "location": "import",
875
+ "path": "../../api/ds.types",
876
+ "id": "src/api/ds.types.d.ts::Card",
877
+ "referenceLocation": "Card"
878
+ }
879
+ }
880
+ },
881
+ "mutable": true,
882
+ "attr": "size",
883
+ "reflectToAttr": true,
884
+ "docs": "Size variant of the card.\nInvalid values are normalized to `large` at runtime.",
885
+ "docsTags": [
886
+ {
887
+ "name": "default",
888
+ "text": "'large'"
889
+ }
890
+ ],
891
+ "default": "'large'",
892
+ "values": [
893
+ {
894
+ "value": "large",
895
+ "type": "string"
896
+ },
897
+ {
898
+ "value": "small",
899
+ "type": "string"
900
+ }
901
+ ],
902
+ "optional": false,
903
+ "required": false,
904
+ "getter": false,
905
+ "setter": false
823
906
  }
824
907
  ],
825
908
  "methods": [],
826
909
  "events": [
827
910
  {
828
- "event": "primaryAction",
829
- "detail": "PointerEvent",
911
+ "event": "lmvzCardAction",
912
+ "detail": "void",
830
913
  "bubbles": true,
831
914
  "complexType": {
832
- "original": "PointerEvent",
833
- "resolved": "PointerEvent",
834
- "references": {
835
- "PointerEvent": {
836
- "location": "global",
837
- "id": "global::PointerEvent"
838
- }
839
- }
915
+ "original": "void",
916
+ "resolved": "void",
917
+ "references": {}
840
918
  },
841
919
  "cancelable": true,
842
920
  "composed": true,
843
- "docs": "Event emitted when primary button is clicked",
921
+ "docs": "Emitted once per activation of the action button.",
844
922
  "docsTags": []
845
923
  }
846
924
  ],
847
925
  "listeners": [],
848
926
  "styles": [],
849
- "slots": [],
927
+ "slots": [
928
+ {
929
+ "name": "card-title",
930
+ "docs": "Optional slot to provide a heading element (`<h2>`-`<h5>`) for the card title, allowing consumers to control the heading level for a correct document outline. If nothing is slotted, the `cardTitle` prop is rendered as the fallback `<h3>`. Exactly one of the two mechanisms should be used."
931
+ },
932
+ {
933
+ "name": "chip",
934
+ "docs": "Optional slot for a status/metadata chip (e.g. `<lmvz-chip>`), rendered in the content block. Visibility and spacing are handled automatically based on whether content is present."
935
+ }
936
+ ],
850
937
  "parts": [],
851
938
  "states": [],
852
939
  "dependents": [],
853
- "dependencies": [],
854
- "dependencyGraph": {}
940
+ "dependencies": [
941
+ "lmvz-button"
942
+ ],
943
+ "dependencyGraph": {
944
+ "lmvz-card": [
945
+ "lmvz-button"
946
+ ]
947
+ }
855
948
  },
856
949
  {
857
950
  "filePath": "src/components/lmvz-checkbox/lmvz-checkbox.tsx",
@@ -9100,7 +9193,7 @@
9100
9193
  "filePath": "src/components/lmvz-tab/lmvz-tab.tsx",
9101
9194
  "encapsulation": "shadow",
9102
9195
  "tag": "lmvz-tab",
9103
- "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",
9196
+ "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### Linking to a panel by ID\n\nUse the `panel` attribute to explicitly link a tab to a panel by `id`. This is useful when DOM order does not match logical tab/panel pairing.\n\n```html\n<lmvz-tabs value=\"home\">\n <!-- Tabs in DOM order: home, profile, settings -->\n <lmvz-tab value=\"home\" panel=\"home-content\">Home</lmvz-tab>\n <lmvz-tab value=\"profile\" panel=\"profile-content\">Profile</lmvz-tab>\n <lmvz-tab value=\"settings\" panel=\"settings-content\" disabled>Settings</lmvz-tab>\n\n <!-- Panels in arbitrary order: profile, home, settings -->\n <div slot=\"panels\" id=\"profile-content\" role=\"tabpanel\">Profile content</div>\n <div slot=\"panels\" id=\"home-content\" role=\"tabpanel\">Home content</div>\n <div slot=\"panels\" id=\"settings-content\" role=\"tabpanel\">Settings content</div>\n</lmvz-tabs>\n```\n\nWhen `panel` is omitted, `lmvz-tabs` falls back to positional pairing: the first tab pairs with the first panel, the second tab with the second panel, and so on.\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",
9104
9197
  "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.",
9105
9198
  "docsTags": [
9106
9199
  {
@@ -9151,6 +9244,32 @@
9151
9244
  "getter": false,
9152
9245
  "setter": false
9153
9246
  },
9247
+ {
9248
+ "name": "panel",
9249
+ "type": "string | undefined",
9250
+ "complexType": {
9251
+ "original": "string",
9252
+ "resolved": "string | undefined",
9253
+ "references": {}
9254
+ },
9255
+ "mutable": false,
9256
+ "attr": "panel",
9257
+ "reflectToAttr": true,
9258
+ "docs": "The `id` of the target `lmvz-tab-panel` this tab controls.\nWhen omitted, pairing falls back to DOM position.",
9259
+ "docsTags": [],
9260
+ "values": [
9261
+ {
9262
+ "type": "string"
9263
+ },
9264
+ {
9265
+ "type": "undefined"
9266
+ }
9267
+ ],
9268
+ "optional": true,
9269
+ "required": false,
9270
+ "getter": false,
9271
+ "setter": false
9272
+ },
9154
9273
  {
9155
9274
  "name": "selected",
9156
9275
  "type": "boolean",
@@ -9202,35 +9321,6 @@
9202
9321
  "required": true,
9203
9322
  "getter": false,
9204
9323
  "setter": false
9205
- },
9206
- {
9207
- "name": "vertical",
9208
- "type": "boolean",
9209
- "complexType": {
9210
- "original": "boolean",
9211
- "resolved": "boolean",
9212
- "references": {}
9213
- },
9214
- "mutable": false,
9215
- "attr": "vertical",
9216
- "reflectToAttr": true,
9217
- "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.",
9218
- "docsTags": [
9219
- {
9220
- "name": "default",
9221
- "text": "false"
9222
- }
9223
- ],
9224
- "default": "false",
9225
- "values": [
9226
- {
9227
- "type": "boolean"
9228
- }
9229
- ],
9230
- "optional": false,
9231
- "required": false,
9232
- "getter": false,
9233
- "setter": false
9234
9324
  }
9235
9325
  ],
9236
9326
  "methods": [],
@@ -9266,8 +9356,8 @@
9266
9356
  "filePath": "src/components/lmvz-tabs/lmvz-tabs.tsx",
9267
9357
  "encapsulation": "shadow",
9268
9358
  "tag": "lmvz-tabs",
9269
- "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",
9270
- "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.",
9359
+ "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` pairs each tab to its panel using one of two strategies:\n\n1. **ID-based linking (preferred):** Set a `panel` attribute on an `lmvz-tab` equal to the target panel's `id`. `lmvz-tabs` matches the tab to the panel by that `id`, regardless of DOM order.\n2. **Positional fallback:** If a tab omits the `panel` attribute, `lmvz-tabs` falls back to positional pairing: tab N is paired with panel N (by DOM order).\n\nFor each paired tab/panel, `lmvz-tabs`:\n- Sets `aria-controls=\"<panelId>\"` on the tab button.\n- Sets `aria-labelledby=\"<tabId>\"` and `role=\"tabpanel\"` on the panel element.\n- Automatically manages panel visibility by toggling the `hidden` attribute based on the active tab.\n\n**Unresolved `panel` reference:** If a tab's `panel` attribute references a non-existent `id`, that tab falls back to positional pairing for that single tab.\n\n#### Example: ID-based linking (order-independent)\n\n```html\n<lmvz-tabs value=\"home\">\n <!-- Tabs explicitly link to panels via panel=\"id\" -->\n <lmvz-tab value=\"home\" panel=\"home-panel\">Home</lmvz-tab>\n <lmvz-tab value=\"profile\" panel=\"profile-panel\">Profile</lmvz-tab>\n <lmvz-tab value=\"settings\" panel=\"settings-panel\">Settings</lmvz-tab>\n\n <!-- Panels can be in any order -->\n <div slot=\"panels\" id=\"profile-panel\" role=\"tabpanel\">Profile content</div>\n <div slot=\"panels\" id=\"home-panel\" role=\"tabpanel\">Home content</div>\n <div slot=\"panels\" id=\"settings-panel\" role=\"tabpanel\" hidden>Settings content</div>\n</lmvz-tabs>\n```\n\nFor an interactive demonstration of order-independent tab/panel linking, see the **LinkedByPanelId** story in Storybook.\n\n### Reacting to tab changes\n\nPanel visibility is automatically managed by `lmvz-tabs` — the active panel is shown and all others are hidden via the `hidden` attribute. If you need to perform custom logic when a tab changes, listen to the `lmvzChange` event:\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 // perform custom logic (e.g. analytics, scroll, focus management)\n});\n```\n\n## Keyboard interaction\n\n| Key | Behaviour |\n| --------------------- | -------------------------------------------------------- |\n| `←` / `→` | 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",
9360
+ "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. Each `lmvz-tab` can declare\na `panel` attribute whose value matches the target `lmvz-tab-panel`'s `id`,\nresolving the pairing explicitly. Tabs without a `panel` attribute fall back\nto positional pairing (tab N pairs with panel N).",
9271
9361
  "docsTags": [
9272
9362
  {
9273
9363
  "name": "slot",
@@ -9292,40 +9382,6 @@
9292
9382
  ],
9293
9383
  "usage": {},
9294
9384
  "props": [
9295
- {
9296
- "name": "orientation",
9297
- "type": "\"horizontal\" | \"vertical\"",
9298
- "complexType": {
9299
- "original": "'horizontal' | 'vertical'",
9300
- "resolved": "\"horizontal\" | \"vertical\"",
9301
- "references": {}
9302
- },
9303
- "mutable": true,
9304
- "attr": "orientation",
9305
- "reflectToAttr": true,
9306
- "docs": "Layout and keyboard-navigation orientation.",
9307
- "docsTags": [
9308
- {
9309
- "name": "default",
9310
- "text": "'horizontal'"
9311
- }
9312
- ],
9313
- "default": "'horizontal'",
9314
- "values": [
9315
- {
9316
- "value": "horizontal",
9317
- "type": "string"
9318
- },
9319
- {
9320
- "value": "vertical",
9321
- "type": "string"
9322
- }
9323
- ],
9324
- "optional": false,
9325
- "required": false,
9326
- "getter": false,
9327
- "setter": false
9328
- },
9329
9385
  {
9330
9386
  "name": "value",
9331
9387
  "type": "string",
@@ -9488,7 +9544,13 @@
9488
9544
  "docsTags": []
9489
9545
  }
9490
9546
  ],
9491
- "listeners": [],
9547
+ "listeners": [
9548
+ {
9549
+ "event": "slotchange",
9550
+ "capture": false,
9551
+ "passive": false
9552
+ }
9553
+ ],
9492
9554
  "styles": [],
9493
9555
  "slots": [
9494
9556
  {
@@ -9892,6 +9954,11 @@
9892
9954
  "docstring": "",
9893
9955
  "path": "src/api/index.d.ts"
9894
9956
  },
9957
+ "src/api/ds.types.d.ts::Card": {
9958
+ "declaration": "any",
9959
+ "docstring": "",
9960
+ "path": "src/api/ds.types.d.ts"
9961
+ },
9895
9962
  "src/api/ds.types.d.ts::Chip": {
9896
9963
  "declaration": "any",
9897
9964
  "docstring": "",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lmvz-ds/components",
3
3
  "private": false,
4
- "version": "0.39.0",
4
+ "version": "0.41.0",
5
5
  "type": "module",
6
6
  "description": "The components of the design system",
7
7
  "author": "Patrick Nemenz <patrick.nemenz@adesso.at>",
@@ -9,6 +9,7 @@ export declare const iconSizes: readonly ["xs", "sm", "md", "lg", "inherit"];
9
9
  export declare const iconWeights: readonly ["thin", "medium", "bold"];
10
10
  export declare const chipTypes: readonly ["active", "warning", "success", "error", "neutral"];
11
11
  export declare const chipSizes: readonly ["default", "small"];
12
+ export declare const cardSizes: readonly ["large", "small"];
12
13
  export declare const linkTypes: readonly ["internal", "external"];
13
14
  export declare const messageTypes: readonly ["neutral", "warning"];
14
15
  export declare const snackbarStatuses: readonly ["success", "warning", "error"];
@@ -1,4 +1,5 @@
1
1
  import type {
2
+ cardSizes,
2
3
  chipSizes,
3
4
  chipTypes,
4
5
  iconSizes,
@@ -34,6 +35,9 @@ export namespace Chip {
34
35
  export type Type = (typeof chipTypes)[number];
35
36
  export type Size = (typeof chipSizes)[number];
36
37
  }
38
+ export namespace Card {
39
+ export type Size = (typeof cardSizes)[number];
40
+ }
37
41
  export namespace Link {
38
42
  export type Type = (typeof linkTypes)[number];
39
43
  }
@@ -1,12 +1,23 @@
1
1
  import type { EventEmitter } from '../../stencil-public-runtime';
2
+ import type { Card } from '../../api/ds.types';
2
3
  export declare class LmvzCard {
3
- cardTitle: string;
4
- imageUrl?: string;
4
+ el: HTMLElement;
5
+ private titleSlotElement?;
6
+ private readonly warnedCases;
7
+ size: Card.Size;
8
+ cardTitle?: string;
5
9
  description?: string;
6
- primaryActionLabel: string;
7
- primaryAction: EventEmitter<PointerEvent>;
10
+ imageUrl?: string;
11
+ imageAlt: string;
12
+ actionLabel?: string;
13
+ lmvzCardAction: EventEmitter<void>;
14
+ normalizeSize(value: string): void;
15
+ componentWillLoad(): void;
16
+ componentDidLoad(): void;
8
17
  private get fallbackImage();
9
- private _onPrimaryClick;
10
- private _onOverflowClick;
18
+ private readonly handleActionClick;
19
+ private get slottedTitleElement();
20
+ private checkTitleContent;
21
+ private warnOnce;
11
22
  render(): any;
12
23
  }
@@ -4,7 +4,7 @@ export declare class LmvzTab {
4
4
  value: string;
5
5
  disabled: boolean;
6
6
  selected: boolean;
7
- vertical: boolean;
7
+ panel?: string;
8
8
  private readonly handleMediaSlotChange;
9
9
  componentDidLoad(): void;
10
10
  render(): any;
@@ -7,9 +7,8 @@ export declare class LmvzTabs extends ReactiveControllerHost implements Directio
7
7
  private tabSlotEl?;
8
8
  private panelSlotEl?;
9
9
  private tablistEl?;
10
- private focusController;
10
+ private readonly focusController;
11
11
  value: string;
12
- orientation: 'horizontal' | 'vertical';
13
12
  lmvzChange: EventEmitter<{
14
13
  value: string;
15
14
  }>;
@@ -18,21 +17,21 @@ export declare class LmvzTabs extends ReactiveControllerHost implements Directio
18
17
  componentWillLoad(): void;
19
18
  componentDidLoad(): void;
20
19
  disconnectedCallback(): void;
20
+ handleSlotChangeEvent(): void;
21
21
  handleValueChange(newValue: string): void;
22
- handleOrientationChange(): void;
23
22
  initFocus(): Promise<void>;
24
23
  activateTab(value: string): Promise<void>;
25
24
  getTabElements(): Promise<HTMLElement[]>;
26
25
  setTabPanelIds(pairs: Array<[string, string]>): Promise<void>;
27
26
  private get slottedTabs();
28
27
  private get slottedPanels();
29
- private readonly handleTabSlotChange;
30
- private readonly handlePanelSlotChange;
31
- private readonly handleTabReady;
28
+ private handleTabSlotChange;
29
+ private handlePanelSlotChange;
30
+ private handleTabReady;
32
31
  private updateIconTabsAttr;
33
32
  private syncFocusTargets;
34
- private syncOrientation;
35
- private syncTabOrientation;
33
+ private resolvePanelForTab;
34
+ private warnIfMixedPanelLinking;
36
35
  private wireAriaIds;
37
36
  private applySelection;
38
37
  private isTabDisabled;