@lmvz-ds/components 0.40.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 (132) hide show
  1. package/CHANGELOG.md +6 -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 +1 -1
  23. package/cjs/lmvz-tabs.cjs.entry.js +1 -1
  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.js +1 -1
  45. package/collection/components/lmvz-tabs/lmvz-tabs.js +1 -1
  46. package/collection/components/lmvz-toggle/lmvz-toggle.js +1 -1
  47. package/collection/integration/header-integration/header-integration.js +1 -1
  48. package/components/index.js +1 -1
  49. package/components/lmvz-button-group.js +1 -1
  50. package/components/lmvz-card.js +1 -1
  51. package/components/lmvz-checkbox.js +1 -1
  52. package/components/lmvz-chip.js +1 -1
  53. package/components/lmvz-datepicker.js +1 -1
  54. package/components/lmvz-header.js +1 -1
  55. package/components/lmvz-icon.js +1 -1
  56. package/components/lmvz-input.js +1 -1
  57. package/components/lmvz-link.js +1 -1
  58. package/components/lmvz-menuitem.js +1 -1
  59. package/components/lmvz-message.js +1 -1
  60. package/components/lmvz-modal.js +1 -1
  61. package/components/lmvz-popover.js +1 -1
  62. package/components/lmvz-radio.js +1 -1
  63. package/components/lmvz-select.js +1 -1
  64. package/components/lmvz-snackbar.js +1 -1
  65. package/components/lmvz-spinner.js +1 -1
  66. package/components/lmvz-tab.js +1 -1
  67. package/components/lmvz-tabs.js +1 -1
  68. package/components/lmvz-toggle.js +1 -1
  69. package/components/p-Buw_s-9k.js +1 -0
  70. package/components/{p-DSDBThqb.js → p-ChNEjbnY.js} +1 -1
  71. package/components/{p-niXjuPxe.js → p-DMdV-cnt.js} +1 -1
  72. package/components/{p-Bc5MM0zh.js → p-D_sr5Z0Q.js} +1 -1
  73. package/components/{p-D_mff3n7.js → p-qLAod5PR.js} +1 -1
  74. package/components/{p-DXhP6UeF.js → p-sJgTdXHR.js} +1 -1
  75. package/esm/{ds.constants-0ctLESas.js → ds.constants-Buw_s-9k.js} +2 -1
  76. package/esm/index.js +1 -1
  77. package/esm/lmvz-button-group.entry.js +1 -1
  78. package/esm/lmvz-button_2.entry.js +1 -1
  79. package/esm/lmvz-card.entry.js +59 -15
  80. package/esm/lmvz-checkbox.entry.js +1 -1
  81. package/esm/lmvz-chip.entry.js +2 -2
  82. package/esm/lmvz-components.js +1 -1
  83. package/esm/lmvz-datepicker.entry.js +2 -2
  84. package/esm/lmvz-header_2.entry.js +1 -1
  85. package/esm/lmvz-input.entry.js +2 -2
  86. package/esm/lmvz-link.entry.js +2 -2
  87. package/esm/lmvz-menuitem.entry.js +1 -1
  88. package/esm/lmvz-message.entry.js +1 -1
  89. package/esm/lmvz-modal.entry.js +1 -1
  90. package/esm/lmvz-popover.entry.js +1 -1
  91. package/esm/lmvz-radio.entry.js +1 -1
  92. package/esm/lmvz-select.entry.js +1 -1
  93. package/esm/lmvz-snackbar.entry.js +1 -1
  94. package/esm/lmvz-spinner.entry.js +1 -1
  95. package/esm/lmvz-tab.entry.js +1 -1
  96. package/esm/lmvz-tabs.entry.js +1 -1
  97. package/esm/lmvz-toggle.entry.js +1 -1
  98. package/esm/loader.js +1 -1
  99. package/hydrate/index.js +83 -38
  100. package/hydrate/index.mjs +83 -38
  101. package/lmvz-components/index.esm.js +1 -1
  102. package/lmvz-components/lmvz-components.esm.js +1 -1
  103. package/lmvz-components/{p-f24f5207.entry.js → p-170dea97.entry.js} +1 -1
  104. package/lmvz-components/{p-efd9d50e.entry.js → p-18a894e4.entry.js} +1 -1
  105. package/lmvz-components/{p-f911691c.entry.js → p-19c9f747.entry.js} +1 -1
  106. package/lmvz-components/{p-87f21ac9.entry.js → p-377c45a7.entry.js} +1 -1
  107. package/lmvz-components/{p-773e9d95.entry.js → p-6292da52.entry.js} +1 -1
  108. package/lmvz-components/{p-ebad823c.entry.js → p-65efa76e.entry.js} +1 -1
  109. package/lmvz-components/{p-27e8b4fa.entry.js → p-67b86084.entry.js} +1 -1
  110. package/lmvz-components/{p-7cbfbc88.entry.js → p-6ffd9391.entry.js} +1 -1
  111. package/lmvz-components/{p-304c7554.entry.js → p-77fd3ce2.entry.js} +1 -1
  112. package/lmvz-components/{p-e35f49a1.entry.js → p-96764fa9.entry.js} +1 -1
  113. package/lmvz-components/p-Buw_s-9k.js +1 -0
  114. package/lmvz-components/{p-6aae1df9.entry.js → p-a70079b6.entry.js} +1 -1
  115. package/lmvz-components/p-aa643b58.entry.js +1 -0
  116. package/lmvz-components/{p-335b3867.entry.js → p-b14966a6.entry.js} +1 -1
  117. package/lmvz-components/{p-8ba6ec19.entry.js → p-b9d29e90.entry.js} +1 -1
  118. package/lmvz-components/{p-41286514.entry.js → p-bf728ef8.entry.js} +1 -1
  119. package/lmvz-components/{p-143e9621.entry.js → p-c6309d6c.entry.js} +1 -1
  120. package/lmvz-components/{p-220e455e.entry.js → p-d466fe8f.entry.js} +1 -1
  121. package/lmvz-components/{p-edec4d09.entry.js → p-dd4a62e1.entry.js} +1 -1
  122. package/lmvz-components/{p-d73bb7fd.entry.js → p-e1c75def.entry.js} +1 -1
  123. package/lmvz-components/{p-93b781ca.entry.js → p-fd29789f.entry.js} +1 -1
  124. package/manifest.json +133 -35
  125. package/package.json +1 -1
  126. package/types/api/ds.constants.d.ts +1 -0
  127. package/types/api/ds.types.d.ts +4 -0
  128. package/types/components/lmvz-card/lmvz-card.d.ts +17 -6
  129. package/types/components.d.ts +51 -19
  130. package/components/p-0ctLESas.js +0 -1
  131. package/lmvz-components/p-0ctLESas.js +0 -1
  132. package/lmvz-components/p-c884c76e.entry.js +0 -1
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-08-17T12:33:14",
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",
@@ -9861,6 +9954,11 @@
9861
9954
  "docstring": "",
9862
9955
  "path": "src/api/index.d.ts"
9863
9956
  },
9957
+ "src/api/ds.types.d.ts::Card": {
9958
+ "declaration": "any",
9959
+ "docstring": "",
9960
+ "path": "src/api/ds.types.d.ts"
9961
+ },
9864
9962
  "src/api/ds.types.d.ts::Chip": {
9865
9963
  "declaration": "any",
9866
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.40.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
  }
@@ -5,6 +5,12 @@ export declare namespace Button {
5
5
  export type Variant = LmvzDS.Variant;
6
6
  }
7
7
 
8
+ export declare namespace Card {
9
+ export type Size = (typeof cardSizes)[number];
10
+ }
11
+
12
+ declare const cardSizes: readonly ["large", "small"];
13
+
8
14
  export declare namespace Chip {
9
15
  export type Type = (typeof chipTypes)[number];
10
16
  export type Size = (typeof chipSizes)[number];
@@ -111,24 +117,36 @@ export declare namespace Components {
111
117
  */
112
118
  "stacked": boolean;
113
119
  }
120
+ /**
121
+ * A card composes an image, title, description, an optional chip, and an optional single action into a self-contained content unit.
122
+ */
114
123
  export interface LmvzCard {
115
124
  /**
116
- * Card title (required)
125
+ * Label for the card's single action button. The action row renders only when this is a non-empty string.
117
126
  */
118
- "cardTitle": string;
127
+ "actionLabel"?: string;
119
128
  /**
120
- * Optional description
129
+ * Card title text, rendered as the fallback `<h3>` for the `card-title` slot. Ignored when a heading is slotted into `card-title`. One of `cardTitle` or a slotted heading should be supplied.
130
+ */
131
+ "cardTitle"?: string;
132
+ /**
133
+ * Optional description text.
121
134
  */
122
135
  "description"?: string;
123
136
  /**
124
- * Optional image URL; placeholder used if omitted
137
+ * Accessible alt text for the image.
138
+ * @default ''
139
+ */
140
+ "imageAlt": string;
141
+ /**
142
+ * Optional image URL; falls back to a bundled placeholder graphic when unset.
125
143
  */
126
144
  "imageUrl"?: string;
127
145
  /**
128
- * Primary action button label
129
- * @default ''
146
+ * Size variant of the card. Invalid values are normalized to `large` at runtime.
147
+ * @default 'large'
130
148
  */
131
- "primaryActionLabel": string;
149
+ "size": Card.Size;
132
150
  }
133
151
  /**
134
152
  * Checkbox component with form association, ARIA validation, and accessible label support.
@@ -1141,28 +1159,40 @@ export declare namespace JSX {
1141
1159
  */
1142
1160
  "stacked"?: boolean;
1143
1161
  }
1162
+ /**
1163
+ * A card composes an image, title, description, an optional chip, and an optional single action into a self-contained content unit.
1164
+ */
1144
1165
  export interface LmvzCard {
1145
1166
  /**
1146
- * Card title (required)
1167
+ * Label for the card's single action button. The action row renders only when this is a non-empty string.
1147
1168
  */
1148
- "cardTitle": string;
1169
+ "actionLabel"?: string;
1149
1170
  /**
1150
- * Optional description
1171
+ * Card title text, rendered as the fallback `<h3>` for the `card-title` slot. Ignored when a heading is slotted into `card-title`. One of `cardTitle` or a slotted heading should be supplied.
1172
+ */
1173
+ "cardTitle"?: string;
1174
+ /**
1175
+ * Optional description text.
1151
1176
  */
1152
1177
  "description"?: string;
1153
1178
  /**
1154
- * Optional image URL; placeholder used if omitted
1179
+ * Accessible alt text for the image.
1180
+ * @default ''
1181
+ */
1182
+ "imageAlt"?: string;
1183
+ /**
1184
+ * Optional image URL; falls back to a bundled placeholder graphic when unset.
1155
1185
  */
1156
1186
  "imageUrl"?: string;
1157
1187
  /**
1158
- * Event emitted when primary button is clicked
1188
+ * Emitted once per activation of the action button.
1159
1189
  */
1160
- "onPrimaryAction"?: (event: LmvzCardCustomEvent<PointerEvent>) => void;
1190
+ "onLmvzCardAction"?: (event: LmvzCardCustomEvent<void>) => void;
1161
1191
  /**
1162
- * Primary action button label
1163
- * @default ''
1192
+ * Size variant of the card. Invalid values are normalized to `large` at runtime.
1193
+ * @default 'large'
1164
1194
  */
1165
- "primaryActionLabel"?: string;
1195
+ "size"?: Card.Size;
1166
1196
  }
1167
1197
  /**
1168
1198
  * Checkbox component with form association, ARIA validation, and accessible label support.
@@ -1973,10 +2003,12 @@ export declare namespace JSX {
1973
2003
  "hasActions": boolean;
1974
2004
  }
1975
2005
  export interface LmvzCardAttributes {
2006
+ "size": Card.Size;
1976
2007
  "cardTitle": string;
1977
- "imageUrl": string;
1978
2008
  "description": string;
1979
- "primaryActionLabel": string;
2009
+ "imageUrl": string;
2010
+ "imageAlt": string;
2011
+ "actionLabel": string;
1980
2012
  }
1981
2013
  export interface LmvzCheckboxAttributes {
1982
2014
  "label": string;
@@ -2142,7 +2174,7 @@ export declare namespace JSX {
2142
2174
  "lmvz-action-list": Omit<LmvzActionList, keyof LmvzActionListAttributes> & { [K in keyof LmvzActionList & keyof LmvzActionListAttributes]?: LmvzActionList[K] } & { [K in keyof LmvzActionList & keyof LmvzActionListAttributes as `attr:${K}`]?: LmvzActionListAttributes[K] } & { [K in keyof LmvzActionList & keyof LmvzActionListAttributes as `prop:${K}`]?: LmvzActionList[K] };
2143
2175
  "lmvz-button": Omit<LmvzButton, keyof LmvzButtonAttributes> & { [K in keyof LmvzButton & keyof LmvzButtonAttributes]?: LmvzButton[K] } & { [K in keyof LmvzButton & keyof LmvzButtonAttributes as `attr:${K}`]?: LmvzButtonAttributes[K] } & { [K in keyof LmvzButton & keyof LmvzButtonAttributes as `prop:${K}`]?: LmvzButton[K] };
2144
2176
  "lmvz-button-group": Omit<LmvzButtonGroup, keyof LmvzButtonGroupAttributes> & { [K in keyof LmvzButtonGroup & keyof LmvzButtonGroupAttributes]?: LmvzButtonGroup[K] } & { [K in keyof LmvzButtonGroup & keyof LmvzButtonGroupAttributes as `attr:${K}`]?: LmvzButtonGroupAttributes[K] } & { [K in keyof LmvzButtonGroup & keyof LmvzButtonGroupAttributes as `prop:${K}`]?: LmvzButtonGroup[K] };
2145
- "lmvz-card": Omit<LmvzCard, keyof LmvzCardAttributes> & { [K in keyof LmvzCard & keyof LmvzCardAttributes]?: LmvzCard[K] } & { [K in keyof LmvzCard & keyof LmvzCardAttributes as `attr:${K}`]?: LmvzCardAttributes[K] } & { [K in keyof LmvzCard & keyof LmvzCardAttributes as `prop:${K}`]?: LmvzCard[K] } & OneOf<"cardTitle", LmvzCard["cardTitle"], LmvzCardAttributes["cardTitle"]>;
2177
+ "lmvz-card": Omit<LmvzCard, keyof LmvzCardAttributes> & { [K in keyof LmvzCard & keyof LmvzCardAttributes]?: LmvzCard[K] } & { [K in keyof LmvzCard & keyof LmvzCardAttributes as `attr:${K}`]?: LmvzCardAttributes[K] } & { [K in keyof LmvzCard & keyof LmvzCardAttributes as `prop:${K}`]?: LmvzCard[K] };
2146
2178
  "lmvz-checkbox": Omit<LmvzCheckbox, keyof LmvzCheckboxAttributes> & { [K in keyof LmvzCheckbox & keyof LmvzCheckboxAttributes]?: LmvzCheckbox[K] } & { [K in keyof LmvzCheckbox & keyof LmvzCheckboxAttributes as `attr:${K}`]?: LmvzCheckboxAttributes[K] } & { [K in keyof LmvzCheckbox & keyof LmvzCheckboxAttributes as `prop:${K}`]?: LmvzCheckbox[K] } & OneOf<"label", LmvzCheckbox["label"], LmvzCheckboxAttributes["label"]>;
2147
2179
  "lmvz-chip": Omit<LmvzChip, keyof LmvzChipAttributes> & { [K in keyof LmvzChip & keyof LmvzChipAttributes]?: LmvzChip[K] } & { [K in keyof LmvzChip & keyof LmvzChipAttributes as `attr:${K}`]?: LmvzChipAttributes[K] } & { [K in keyof LmvzChip & keyof LmvzChipAttributes as `prop:${K}`]?: LmvzChip[K] };
2148
2180
  "lmvz-datepicker": Omit<LmvzDatepicker, keyof LmvzDatepickerAttributes> & { [K in keyof LmvzDatepicker & keyof LmvzDatepickerAttributes]?: LmvzDatepicker[K] } & { [K in keyof LmvzDatepicker & keyof LmvzDatepickerAttributes as `attr:${K}`]?: LmvzDatepickerAttributes[K] } & { [K in keyof LmvzDatepicker & keyof LmvzDatepickerAttributes as `prop:${K}`]?: LmvzDatepicker[K] };
@@ -1 +0,0 @@
1
- const a=["primary","secondary","tertiary","danger"],s=["small","default","large"],t=["xs","sm","md","lg"],e=[...t,"xl"],r=["text","email","password","tel","url","search","number"],l=["sm","md","lg"],n=s,o=[...t,"inherit"],m=["thin","medium","bold"],d=["active","warning","success","error","neutral"],i=["default","small"],u=["internal","external"],c=["neutral","warning"],g=["success","warning","error"],p=["low","normal","high"],w=["timeout","manual","action","overridden","swallowed"],b=["top","bottom","start","end","top-start","top-end","bottom-start","bottom-end"],h=["sm","md","lg"];export{t as a,l as b,n as c,o as d,m as e,d as f,i as g,g as h,r as i,p as j,w as k,u as l,c as m,h as n,b as p,s,e as t,a as v}
@@ -1 +0,0 @@
1
- const a=["primary","secondary","tertiary","danger"],s=["small","default","large"],t=["xs","sm","md","lg"],e=[...t,"xl"],r=["text","email","password","tel","url","search","number"],l=["sm","md","lg"],n=s,o=[...t,"inherit"],m=["thin","medium","bold"],d=["active","warning","success","error","neutral"],i=["default","small"],u=["internal","external"],c=["neutral","warning"],g=["success","warning","error"],p=["low","normal","high"],w=["timeout","manual","action","overridden","swallowed"],b=["top","bottom","start","end","top-start","top-end","bottom-start","bottom-end"],h=["sm","md","lg"];export{t as a,l as b,n as c,o as d,m as e,d as f,i as g,g as h,r as i,p as j,w as k,u as l,c as m,h as n,b as p,s,e as t,a as v}
@@ -1 +0,0 @@
1
- import{a as r,r as e,c as o,h as t,H as a}from"./p-DVab4vzV.js";const n=class{constructor(r){e(this,r),this.primaryAction=o(this,"primaryAction",7)}cardTitle;imageUrl;description;primaryActionLabel="";primaryAction;get fallbackImage(){return((e,o)=>{const t=function(...r){return r.filter(Boolean).join("/").replace("//","/").replace("/./","/")}("../../assets",o,e);try{return r(t)}catch{return console.warn(`Failed to create URL for asset "${e}" in path "${o}".\n Please provide an absolute URL in your app's 'setAssetPath(...)' configuration! Falling back to a relative URL, which may work in some environments but is not guaranteed to be correct.`),new URL(t,import.meta?.url??window?.location?.origin??"")}})("card-placeholder.svg")}_onPrimaryClick(){this.primaryAction.emit()}_onOverflowClick(r){console.log(r)}render(){return t(a,{key:"1dd819fd7c752af8d15001c08f7f60c6ea7278b9",role:"article"},t("div",{key:"e0cc822e627b6bbe665e4faa705cc46a09bac7c6",class:"top"},t("div",{key:"db79cb5a67ebdd6097f985e4b4bd27665b6329ef",class:"image-wrapper",style:{backgroundImage:`url(${this.imageUrl??this.fallbackImage})`}},t("div",{key:"90facc8595ddbbf31e3768faa8254a82ab8d3e65",class:"chip-slot"},t("slot",{key:"cb2e6a1053aae2b2ca90c52c175e3c4174c89d23",name:"chip"})))),t("div",{key:"cb11069a329385178677e92d08044e0fe8e5b982",class:"bottom"},t("header",{key:"1e6076352124ca03de2fb13c17a565b4f492567e"},t("h2",{key:"73f11099fb751bd4f967dbe49b79763b6a8268f3",class:"title"},this.cardTitle)),t("p",{key:"36cf87b4c2004bff1e65feedd13e137d67115de3",class:"description"},this.description),t("div",{key:"6c1d82f4968ce8252307858e6ad0681274f06397",class:"actions"},t("button",{key:"0366e0caaf9235a3eaf7bfcab116e6a828fb248d",class:"primary",onClick:this._onPrimaryClick.bind(this),"data-testid":"primary"},this.primaryActionLabel),t("button",{key:"4f435e79d75a621d6fe065471a915b55308ad15d",class:"tertiary","aria-label":"More actions",onClick:this._onOverflowClick},t("span",{key:"7dec97e0b0ca58c40fc5308cc7863acafa8c5147",class:"icon-placeholder"},"...")))))}static get assetsDirs(){return["../../assets"]}};n.style="@layer lmvz-ds.reset, lmvz-ds.theme, lmvz-ds.components, lmvz-ds.overrides; @layer lmvz-ds.theme { @font-face { font-family: Router; src: local('RouterBook-Regular'), local('Router-Book'), url('/assets/fonts/Router-Book.woff') format('woff'); font-weight: 400; } @font-face { font-family: Router; src: local('RouterMedium-Regular'), local('Router-Medium'), url('/assets/fonts/Router-Medium.woff') format('woff'); font-weight: 500; } @font-face { font-family: Router; src: local('RouterBold-Regular'), local('Router-Bold'), url('/assets/fonts/Router-Bold.woff') format('woff'); font-weight: 700; } } @layer lmvz-ds.reset { body { margin: 0; } h1, h2, h3, h4, h5, h6 { margin: 0; } *[hidden] { display: none !important; } hr { height: 0; border: none; margin: var(--lmvz-dimension-8-4, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem)) 0; border-top: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-border-subtle, #f0f0f0); } fieldset { border: none; margin: 0; padding: 0; } legend { padding: 0; display: block; } } .sc-lmvz-card-h { & { & { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-secondary, #f0f0f0)); --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-int-on-secondary, #000000)); --lmvz-button-radius: var(--lmvz-button-radius-override, var(--lmvz-component-input-radius-default, 999px)); --lmvz-button-padding-inline: var(--lmvz-button-padding-inline-override, var(--lmvz-button-padding, var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)))); --lmvz-button-padding-block: var(--lmvz-button-padding-block-override, var(--lmvz-button-padding, var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem)))); --lmvz-button-gap: var(--lmvz-button-gap-override, var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem))); --lmvz-button-min-height: var(--lmvz-button-min-height-override, var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem))); --lmvz-button-font: var(--lmvz-button-font-override, var(--lmvz-typography-label-md-strong, normal 700 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router)); --lmvz-button-border-width: var(--lmvz-button-border-width-override, 0); --lmvz-button-border-color: var(--lmvz-button-border-color-override, transparent); display: inline-flex; align-items: center; justify-content: var(--lmvz-button-content-justification, center); gap: var(--lmvz-button-gap, var(--lmvz-component-input-gap-md, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem))); box-sizing: border-box; padding-block: var(--lmvz-button-padding-block, var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem))); padding-inline: var(--lmvz-button-padding-inline, var(--lmvz-component-input-padding-md, clamp(0.88rem, 0.84rem + 0.13vw, 1rem))); min-height: var(--lmvz-button-min-height, var(--lmvz-component-input-size-md, clamp(2.5rem, 2.44rem + 0.26vw, 2.75rem))); border: var(--lmvz-button-border-width, 0) solid var(--lmvz-button-border-color, transparent); border-radius: var(--lmvz-button-radius, var(--lmvz-component-input-radius-default, 999px)); background-color: var(--lmvz-button-background); color: var(--lmvz-button-color); cursor: pointer; font: var(--lmvz-button-font); text-decoration: none; white-space: nowrap; transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease; } & > * { font: inherit; color: inherit; } &:focus-visible { outline: var(--lmvz-ds-outline, 1px solid #0e7ab4); outline-offset: var(--lmvz-ds-outline-offset, clamp(0.25rem, 0.19rem + 0.26vw, 0.5rem)); position: relative; z-index: 1; } &:is([disabled], .disabled) { cursor: not-allowed; pointer-events: none; opacity: var(--lmvz-component-input-disabled-opacity, 40%); } &:not([disabled]):hover { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-secondary-hover, #e0e0e0)); } &:not([disabled]):active { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-secondary-active, #d4d4d4)); } &.primary { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-primary, #000000)); --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-int-on-primary, #ffffff)); --lmvz-button-border-width: var(--lmvz-button-border-width-override, 0); --lmvz-button-border-color: var(--lmvz-button-border-color-override, transparent); } &.primary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-primary-hover, #2e2e2e)); } &.primary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-primary-active, #545454)); } &.danger { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-tertiary, #ffffff)); --lmvz-button-border-color: var(--lmvz-button-border-color-override, transparent); --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-status-on-danger, #a31419)); } &.danger:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-status-danger, #fbdfe0)); --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-status-on-danger, #a31419)); } &.danger:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-status-on-danger-subtle, #e8454b)); --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-status-on-danger, #a31419)); } &.tertiary { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-tertiary, #ffffff)); --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-int-on-tertiary, #000000)); } &.tertiary:not([disabled], .disabled):hover { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-tertiary-hover, #f0f0f0)); --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-int-on-tertiary-hover, #000000)); } &.tertiary:not([disabled], .disabled):active { --lmvz-button-background: var(--lmvz-button-background-override, var(--lmvz-semantic-color-int-tertiary-active, #e0e0e0)); --lmvz-button-color: var(--lmvz-button-color-override, var(--lmvz-semantic-color-int-on-tertiary-active, #000000)); } &.small { --lmvz-button-padding-inline: var(--lmvz-button-padding-inline-override, var(--lmvz-component-input-padding-sm, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem))); --lmvz-button-padding-block: var(--lmvz-button-padding-block-override, var(--lmvz-component-input-padding-sm, clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem))); --lmvz-button-gap: var(--lmvz-button-gap-override, var(--lmvz-component-input-gap-sm, clamp(0.38rem, 0.31rem + 0.26vw, 0.63rem))); --lmvz-button-min-height: var(--lmvz-button-min-height-override, var(--lmvz-component-input-size-sm, clamp(2rem, 1.94rem + 0.26vw, 2.25rem))); --lmvz-button-font: var(--lmvz-button-font-override, var(--lmvz-typography-label-sm-strong, normal 700 clamp(0.75rem, 0.72rem + 0.13vw, 0.88rem) / 1.5 Router)); } &.large { --lmvz-button-padding-inline: var(--lmvz-button-padding-inline-override, var(--lmvz-component-input-padding-lg, clamp(1rem, 0.94rem + 0.26vw, 1.25rem))); --lmvz-button-padding-block: var(--lmvz-button-padding-block-override, var(--lmvz-component-input-padding-lg, clamp(1rem, 0.94rem + 0.26vw, 1.25rem))); --lmvz-button-gap: var(--lmvz-button-gap-override, var(--lmvz-component-input-gap-lg, clamp(0.75rem, 0.69rem + 0.26vw, 1rem))); --lmvz-button-min-height: var(--lmvz-button-min-height-override, var(--lmvz-component-input-size-lg, clamp(2.75rem, 2.69rem + 0.26vw, 3rem))); --lmvz-button-font: var(--lmvz-button-font-override, var(--lmvz-typography-label-lg-strong, normal 700 clamp(1rem, 0.97rem + 0.13vw, 1.13rem) / 1.5 Router)); } } display: flex; min-width: var(--lmvz-card-component-card-minwidth, 20.4375rem); max-width: var(--lmvz-card-component-card-maxwidth, 21.6875rem); flex-direction: column; align-items: flex-start; border-radius: var(--lmvz-semantic-border-radius-lg, 14px); border: var(--lmvz-semantic-border-width-default, 1px) solid var(--lmvz-semantic-color-border-default, #e0e0e0); background: var(--lmvz-semantic-color-surface-primary, #ffffff); } *.sc-lmvz-card { color: var(--lmvz-semantic-color-on-surface-primary, #000000); font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); } .top.sc-lmvz-card { display: flex; padding: var(--lmvz-dimension-12-8, clamp(0.5rem, 0.44rem + 0.26vw, 0.75rem)); flex-direction: column; justify-content: center; align-items: center; align-self: stretch; } .bottom.sc-lmvz-card { display: flex; min-width: 150px; padding: var(--lmvz-dimension-6-4, clamp(0.25rem, 0.22rem + 0.13vw, 0.38rem)) var(--lmvz-dimension-14-10, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)) var(--lmvz-dimension-14-10, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)) var(--lmvz-dimension-14-10, clamp(0.63rem, 0.56rem + 0.26vw, 0.88rem)); flex-direction: column; align-items: flex-start; align-self: stretch; } .title.sc-lmvz-card { margin: 0; display: flex; justify-content: center; align-items: center; align-self: stretch; padding-bottom: var(--lmvz-global-s4, 4px); overflow-wrap: break-word; font: var(--lmvz-typography-heading-2xl, 500 clamp(2rem, 1.82rem + 0.78vw, 2.75rem) / 1.4 Router); } .description.sc-lmvz-card { display: flex; margin: 0; padding-bottom: var(--lmvz-component-body-sm-padding-bottom, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); align-items: flex-start; align-self: stretch; white-space: pre-line; font: var(--lmvz-typography-body-md, 400 clamp(0.88rem, 0.84rem + 0.13vw, 1rem) / 1.5 Router); } .image-wrapper.sc-lmvz-card { aspect-ratio: 4 / 3; width: 100%; background-size: cover; background-position: center; flex: 1 0 0; align-self: stretch; border-radius: var(--lmvz-semantic-border-radius-md, 6px); } .actions.sc-lmvz-card { margin-top: var(--lmvz-component-form-wrapper-gap-y, clamp(1.13rem, 0.97rem + 0.65vw, 1.75rem)); display: flex; align-items: center; gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); align-self: stretch; } button.primary.sc-lmvz-card, lmvz-button.primary.sc-lmvz-card { display: flex; justify-content: center; align-items: center; gap: var(--lmvz-component-input-md-gap-x, clamp(0.25rem, 0.16rem + 0.39vw, 0.63rem)); flex: 1 0 0; }";export{n as lmvz_card}