srcdev-nuxt-components 9.1.49 → 9.1.51

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 (220) hide show
  1. package/.claude/settings.json +2 -4
  2. package/.claude/settings.local.json +22 -2
  3. package/.claude/skills/components/card-core.md +205 -0
  4. package/.claude/skills/components/display-dialog.md +128 -0
  5. package/.claude/skills/components/page-hero-highlights.md +1 -1
  6. package/.claude/skills/components/page-row.md +157 -0
  7. package/.claude/skills/components/services-card-grid.md +4 -4
  8. package/.claude/skills/components/services-section-grid.md +4 -4
  9. package/.claude/skills/components/tab-navigation.md +222 -0
  10. package/.claude/skills/composable-dialog-controls.md +55 -43
  11. package/.claude/skills/index.md +5 -2
  12. package/app/components/01.atoms/card/CONSUMER-STYLING.md +175 -0
  13. package/app/components/01.atoms/card/CardCore.vue +48 -21
  14. package/app/components/01.atoms/display-dialog/CONSUMER-STYLING.md +163 -0
  15. package/app/components/01.atoms/display-dialog/DisplayDialog.vue +277 -0
  16. package/app/components/01.atoms/display-dialog/stories/DisplayDialog.stories.ts +177 -0
  17. package/app/components/01.atoms/display-dialog/tests/DisplayDialog.spec.ts +264 -0
  18. package/app/components/01.atoms/display-dialog/tests/__snapshots__/DisplayDialog.spec.ts.snap +18 -0
  19. package/app/components/01.atoms/page-row/CONSUMER-STYLING.md +90 -0
  20. package/app/components/01.atoms/page-row/PageRow.vue +115 -0
  21. package/app/components/01.atoms/page-row/stories/PageRow.stories.ts +311 -0
  22. package/app/components/01.atoms/page-row/tests/PageRow.spec.ts +191 -0
  23. package/app/components/02.molecules/navigation/tab-navigation/CONSUMER-STYLING.md +145 -0
  24. package/app/components/02.molecules/navigation/tab-navigation/TabNavigation.vue +20 -9
  25. package/app/components/02.molecules/navigation/tab-navigation/tests/__snapshots__/TabNavigation.spec.ts.snap +12 -6
  26. package/app/components/{forms/ui → 05.forms/form-field}/FormField.vue +12 -19
  27. package/app/components/{forms/ui → 05.forms/form-wrapper}/FormWrapper.vue +6 -6
  28. package/app/components/{forms → 05.forms}/input-button/InputButtonCore.vue +2 -0
  29. package/app/components/{forms → 05.forms}/input-button/stories/InputButtonCore.stories.ts +1 -1
  30. package/app/components/{forms → 05.forms}/input-text/InputTextCore.vue +73 -73
  31. package/app/components/{forms → 05.forms}/input-text/variants/InputTextAsNumberWithLabel.vue +29 -29
  32. package/app/components/carousels/CarouselBasic.vue +99 -99
  33. package/app/components/carousels/CarouselInfinite.vue +150 -150
  34. package/app/components/deep-expanding-menu/DeepExpandingMenu.vue +111 -111
  35. package/app/components/responsive-header/ResponsiveHeader.vue +250 -282
  36. package/app/components/test-storybook/TestStorybook.vue +16 -16
  37. package/app/composables/tests/useDialogControls.spec.ts +34 -64
  38. package/app/composables/useDialogControls.ts +19 -33
  39. package/app/composables/useFormControl.ts +0 -2
  40. package/app/layouts/default.vue +9 -7
  41. package/app/pages/auto-grid.vue +37 -20
  42. package/app/pages/banner-video.vue +2 -2
  43. package/app/pages/forms/examples/buttons/index.vue +189 -215
  44. package/app/pages/forms/examples/material/text-fields.vue +2 -2
  45. package/app/pages/grid-stack.vue +10 -10
  46. package/app/pages/index.vue +20 -20
  47. package/app/pages/samaritan.vue +4 -4
  48. package/app/pages/typography/hero-text.vue +6 -6
  49. package/app/pages/typography/index.vue +4 -4
  50. package/app/pages/typography/page-body.vue +4 -4
  51. package/app/pages/typography/page-heading.vue +4 -4
  52. package/app/pages/typography/page-link.vue +4 -4
  53. package/app/pages/ui/accordian.vue +4 -4
  54. package/app/pages/ui/anchor-scroll-tab-navigation.vue +77 -66
  55. package/app/pages/ui/anchor-scroll.vue +94 -70
  56. package/app/pages/ui/animated-svg-text.vue +4 -4
  57. package/app/pages/ui/block-decorators.vue +11 -11
  58. package/app/pages/ui/card-core.vue +9 -9
  59. package/app/pages/ui/carousel-basic.vue +4 -4
  60. package/app/pages/ui/carousel-flip.vue +2 -2
  61. package/app/pages/ui/carousel-infinite.vue +4 -4
  62. package/app/pages/ui/clipped-panels.vue +10 -10
  63. package/app/pages/ui/contact-section.vue +4 -4
  64. package/app/pages/ui/container-glow.vue +2 -3
  65. package/app/pages/ui/deep-expanding-menu.vue +138 -0
  66. package/app/pages/ui/display-avatar.vue +2 -2
  67. package/app/pages/ui/display-banner.vue +2 -2
  68. package/app/pages/ui/display-chip.vue +32 -25
  69. package/app/pages/ui/display-details.vue +6 -10
  70. package/app/pages/ui/display-dialog.vue +96 -131
  71. package/app/pages/ui/display-pill.vue +27 -33
  72. package/app/pages/ui/display-prompt.vue +4 -4
  73. package/app/pages/ui/display-toast.vue +2 -2
  74. package/app/pages/ui/expanding-panel.vue +12 -16
  75. package/app/pages/ui/glowing-border.vue +12 -12
  76. package/app/pages/ui/layout-grid-a.vue +6 -6
  77. package/app/pages/ui/layout-grid-b.vue +4 -4
  78. package/app/pages/ui/magnetic-navigation.vue +6 -6
  79. package/app/pages/ui/marquee-scroller.vue +2 -2
  80. package/app/pages/ui/mask-element.vue +2 -2
  81. package/app/pages/ui/masonry-columns.vue +4 -4
  82. package/app/pages/ui/masonry-grid-ordered-experiment.vue +4 -4
  83. package/app/pages/ui/masonry-grid-ordered.vue +4 -4
  84. package/app/pages/ui/masonry-grid-sorted.vue +4 -4
  85. package/app/pages/ui/masonry-grid.vue +4 -4
  86. package/app/pages/ui/navigation/navigation-horizontal.vue +12 -12
  87. package/app/pages/ui/navigation/tab-navigation.vue +493 -0
  88. package/app/pages/ui/page-row.vue +127 -0
  89. package/app/pages/ui/price-list.vue +4 -4
  90. package/app/pages/ui/profile-section.vue +4 -4
  91. package/app/pages/ui/qr-code/[componentName].vue +6 -6
  92. package/app/pages/ui/rotating-carousel.vue +16 -16
  93. package/app/pages/ui/scroll-reveal-image.vue +20 -20
  94. package/app/pages/ui/section-parallax.vue +7 -7
  95. package/app/pages/ui/services/colour-finder.vue +4 -4
  96. package/app/pages/ui/services/services-cards.vue +4 -4
  97. package/app/pages/ui/services/services-section/[slug].vue +4 -4
  98. package/app/pages/ui/services/services-sections-compact.vue +6 -6
  99. package/app/pages/ui/settings.vue +10 -10
  100. package/app/pages/ui/simple-grid.vue +2 -2
  101. package/app/pages/ui/slider-gallery.vue +5 -5
  102. package/app/pages/ui/tabs-y.vue +2 -3
  103. package/app/pages/ui/tabs.vue +6 -9
  104. package/app/pages/ui/tooltips.vue +9 -9
  105. package/app/pages/ui/wipe-away-vertical.vue +14 -14
  106. package/package.json +1 -1
  107. package/.claude/skills/components/layout-row.md +0 -239
  108. package/app/components/display-dialog/DisplayDialogCore.vue +0 -276
  109. package/app/components/display-dialog/variants/DisplayDialogConfirm.vue +0 -47
  110. package/app/components/display-dialog/variants/DisplayDialogScrollableContent.vue +0 -51
  111. package/app/components/forms/c12/utils.ts +0 -14
  112. package/app/components/layout-row/LayoutRow.vue +0 -171
  113. package/app/components/layout-row/stories/LayoutRow.stories.ts +0 -528
  114. package/app/pages/ui/layout-row.vue +0 -139
  115. /package/app/components/{forms → 05.forms}/form-errors/InputError.vue +0 -0
  116. /package/app/components/{forms → 05.forms}/form-errors/tests/InputError.spec.ts +0 -0
  117. /package/app/components/{forms → 05.forms}/form-fieldset/FormFieldset.vue +0 -0
  118. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts +0 -0
  119. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-secondary-chromium-darwin.png +0 -0
  120. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-secondary-firefox-darwin.png +0 -0
  121. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-secondary-webkit-darwin.png +0 -0
  122. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-tertiary-chromium-darwin.png +0 -0
  123. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-tertiary-firefox-darwin.png +0 -0
  124. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-tertiary-webkit-darwin.png +0 -0
  125. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-primary-pending-chromium-darwin.png +0 -0
  126. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-primary-pending-firefox-darwin.png +0 -0
  127. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-primary-pending-webkit-darwin.png +0 -0
  128. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-secondary-pill-chromium-darwin.png +0 -0
  129. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-secondary-pill-firefox-darwin.png +0 -0
  130. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-secondary-pill-webkit-darwin.png +0 -0
  131. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-tertiary-readonly-chromium-darwin.png +0 -0
  132. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-tertiary-readonly-firefox-darwin.png +0 -0
  133. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-tertiary-readonly-webkit-darwin.png +0 -0
  134. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-chromium-darwin.png +0 -0
  135. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-firefox-darwin.png +0 -0
  136. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-default-chromium-darwin.png +0 -0
  137. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-default-firefox-darwin.png +0 -0
  138. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-default-webkit-darwin.png +0 -0
  139. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-error-chromium-darwin.png +0 -0
  140. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-error-firefox-darwin.png +0 -0
  141. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-error-webkit-darwin.png +0 -0
  142. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-success-chromium-darwin.png +0 -0
  143. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-success-firefox-darwin.png +0 -0
  144. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-success-webkit-darwin.png +0 -0
  145. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-warning-chromium-darwin.png +0 -0
  146. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-warning-firefox-darwin.png +0 -0
  147. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-warning-webkit-darwin.png +0 -0
  148. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-primary-chromium-darwin.png +0 -0
  149. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-primary-firefox-darwin.png +0 -0
  150. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-primary-webkit-darwin.png +0 -0
  151. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-secondary-chromium-darwin.png +0 -0
  152. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-secondary-firefox-darwin.png +0 -0
  153. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-secondary-webkit-darwin.png +0 -0
  154. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-tertiary-chromium-darwin.png +0 -0
  155. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-tertiary-firefox-darwin.png +0 -0
  156. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-tertiary-webkit-darwin.png +0 -0
  157. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-webkit-darwin.png +0 -0
  158. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/nuxt-icon-only-component-chromium-darwin.png +0 -0
  159. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/nuxt-icon-only-component-firefox-darwin.png +0 -0
  160. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/nuxt-icon-only-component-webkit-darwin.png +0 -0
  161. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pending-chromium-darwin.png +0 -0
  162. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pending-firefox-darwin.png +0 -0
  163. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pending-webkit-darwin.png +0 -0
  164. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pill-chromium-darwin.png +0 -0
  165. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pill-firefox-darwin.png +0 -0
  166. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pill-webkit-darwin.png +0 -0
  167. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-readonly-chromium-darwin.png +0 -0
  168. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-readonly-firefox-darwin.png +0 -0
  169. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-readonly-webkit-darwin.png +0 -0
  170. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/with-both-nuxt-icon-components-chromium-darwin.png +0 -0
  171. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/with-both-nuxt-icon-components-firefox-darwin.png +0 -0
  172. /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/with-both-nuxt-icon-components-webkit-darwin.png +0 -0
  173. /package/app/components/{forms → 05.forms}/input-button/tests/InputButtonCore.spec.ts +0 -0
  174. /package/app/components/{forms → 05.forms}/input-button/tests/__snapshots__/InputButtonCore.spec.ts.snap +0 -0
  175. /package/app/components/{forms → 05.forms}/input-checkbox/MultipleCheckboxes.vue +0 -0
  176. /package/app/components/{forms → 05.forms}/input-checkbox/SingleCheckbox.vue +0 -0
  177. /package/app/components/{forms → 05.forms}/input-checkbox/tests/MultipleCheckboxes.spec.ts +0 -0
  178. /package/app/components/{forms → 05.forms}/input-checkbox/tests/data/tags.json +0 -0
  179. /package/app/components/{forms → 05.forms}/input-checkbox-radio/InputCheckboxRadioButton.vue +0 -0
  180. /package/app/components/{forms → 05.forms}/input-checkbox-radio/InputCheckboxRadioCore.vue +0 -0
  181. /package/app/components/{forms → 05.forms}/input-checkbox-radio/InputCheckboxRadioWithLabel.vue +0 -0
  182. /package/app/components/{forms → 05.forms}/input-checkbox-radio/tests/InputCheckboxRadioCore.spec.ts +0 -0
  183. /package/app/components/{forms → 05.forms}/input-copy/InputCopyCore.vue +0 -0
  184. /package/app/components/{forms → 05.forms}/input-copy/stories/InputCopyCore.stories.ts +0 -0
  185. /package/app/components/{forms → 05.forms}/input-copy/tests/InputCopyCore.spec.ts +0 -0
  186. /package/app/components/{forms → 05.forms}/input-copy/tests/__snapshots__/InputCopyCore.spec.ts.snap +0 -0
  187. /package/app/components/{forms → 05.forms}/input-description/InputDescription.vue +0 -0
  188. /package/app/components/{forms → 05.forms}/input-description/tests/InputDescription.spec.ts +0 -0
  189. /package/app/components/{forms → 05.forms}/input-label/InputLabel.vue +0 -0
  190. /package/app/components/{forms → 05.forms}/input-label/tests/InputLabel.spec.ts +0 -0
  191. /package/app/components/{forms → 05.forms}/input-number/InputNumberCore.vue +0 -0
  192. /package/app/components/{forms → 05.forms}/input-number/variants/InputNumberDefault.vue +0 -0
  193. /package/app/components/{forms → 05.forms}/input-radio/MultipleRadiobuttons.vue +0 -0
  194. /package/app/components/{forms → 05.forms}/input-radio/tests/MultipleRadioButtons.spec.ts +0 -0
  195. /package/app/components/{forms → 05.forms}/input-radio/tests/data/tags.json +0 -0
  196. /package/app/components/{forms → 05.forms}/input-range/InputRangeCore.vue +0 -0
  197. /package/app/components/{forms → 05.forms}/input-range/variants/InputRangeDefault.vue +0 -0
  198. /package/app/components/{forms → 05.forms}/input-range-fancy/InputRangeFancyCore.vue +0 -0
  199. /package/app/components/{forms → 05.forms}/input-range-fancy/InputRangeFancyWithLabel.vue +0 -0
  200. /package/app/components/{forms → 05.forms}/input-select/InputSelectCore.vue +0 -0
  201. /package/app/components/{forms → 05.forms}/input-select/variants/InputSelectWithLabel.vue +0 -0
  202. /package/app/components/{forms → 05.forms}/input-text/stories/InputPasswordWithLabel.stories.ts +0 -0
  203. /package/app/components/{forms → 05.forms}/input-text/stories/InputTextAsNumberWithLabel.stories.ts +0 -0
  204. /package/app/components/{forms → 05.forms}/input-text/stories/InputTextCore.stories.ts +0 -0
  205. /package/app/components/{forms → 05.forms}/input-text/stories/InputTextWithLabel.stories.ts +0 -0
  206. /package/app/components/{forms → 05.forms}/input-text/variants/InputPasswordWithLabel.vue +0 -0
  207. /package/app/components/{forms → 05.forms}/input-text/variants/InputTextWithLabel.vue +0 -0
  208. /package/app/components/{forms → 05.forms}/input-textarea/InputTextareaCore.vue +0 -0
  209. /package/app/components/{forms → 05.forms}/input-textarea/stories/InputTextareaCore.stories.ts +0 -0
  210. /package/app/components/{forms → 05.forms}/input-textarea/stories/InputTextareaWithLabel.stories.ts +0 -0
  211. /package/app/components/{forms → 05.forms}/input-textarea/variants/InputTextareaWithLabel.vue +0 -0
  212. /package/app/components/{forms → 05.forms}/pending-effect/PendingEffect.vue +0 -0
  213. /package/app/components/{forms → 05.forms}/toggle-switch/ToggleSwitchCore.vue +0 -0
  214. /package/app/components/{forms → 05.forms}/toggle-switch/stories/ToggleSwitchCore.stories.ts +0 -0
  215. /package/app/components/{forms → 05.forms}/toggle-switch/stories/ToggleSwitchWithLabel.stories.ts +0 -0
  216. /package/app/components/{forms → 05.forms}/toggle-switch/stories/ToggleSwitchWithLabelInline.stories.ts +0 -0
  217. /package/app/components/{forms → 05.forms}/toggle-switch/variants/ToggleSwitchWithLabel.vue +0 -0
  218. /package/app/components/{forms → 05.forms}/toggle-switch/variants/ToggleSwitchWithLabelInline.vue +0 -0
  219. /package/app/components/{forms → 05.forms}/triple-toggle-switch/TripleToggleSwitchCore.vue +0 -0
  220. /package/app/{components/forms/c12/prop-validators/index.ts → utils/prop-validators.ts} +0 -0
@@ -1,528 +0,0 @@
1
- import type { Meta, StoryFn } from "@nuxtjs/storybook";
2
- import LayoutRowComponent from "../LayoutRow.vue";
3
-
4
- // Define the args interface
5
- interface LayoutRowArgs {
6
- dataTestid: string;
7
- tag: string;
8
- variant: string;
9
- id?: string;
10
- styleClassPassthrough: string[];
11
- isLandmark: boolean;
12
- }
13
-
14
- export default {
15
- title: "Components/Layouts/LayoutRow",
16
- component: LayoutRowComponent,
17
- argTypes: {
18
- // Configuration
19
- variant: {
20
- control: { type: "select" },
21
- options: [
22
- "full",
23
- "full-start",
24
- "full-end",
25
- "popout",
26
- "popout-start",
27
- "popout-end",
28
- "content",
29
- "content-start",
30
- "content-end",
31
- "inset-content",
32
- "inset-content-start",
33
- "inset-content-end",
34
- "full-width",
35
- "full-content",
36
- "full-content-nopad",
37
- ],
38
- description: "Layout variant controlling the grid column positioning",
39
- table: {
40
- category: "Layout",
41
- },
42
- },
43
- tag: {
44
- control: { type: "select" },
45
- options: ["div", "section", "article", "aside", "header", "footer", "main", "nav", "ul", "ol"],
46
- description: "HTML tag to render as",
47
- table: {
48
- category: "Semantic",
49
- },
50
- },
51
- isLandmark: {
52
- control: { type: "boolean" },
53
- description: "Whether this element should be a landmark (adds tabindex and aria-label)",
54
- table: {
55
- category: "Accessibility",
56
- },
57
- },
58
- // Content
59
- dataTestid: {
60
- control: { type: "text" },
61
- description: "Test ID for the inner layout row element",
62
- table: {
63
- category: "Testing",
64
- },
65
- },
66
- id: {
67
- control: { type: "text" },
68
- description: "ID attribute for the component",
69
- table: {
70
- category: "HTML",
71
- },
72
- },
73
- // Hide complex props
74
- styleClassPassthrough: {
75
- table: {
76
- disable: true,
77
- },
78
- },
79
- },
80
- args: {
81
- variant: "content",
82
- tag: "div",
83
- isLandmark: false,
84
- dataTestid: "layout-row",
85
- id: "",
86
- styleClassPassthrough: [],
87
- },
88
- parameters: {
89
- docs: {
90
- description: {
91
- component:
92
- "A flexible layout component that uses CSS Grid to create various content width constraints. Based on the 'layout breakouts' pattern for responsive design with multiple content tracks.",
93
- },
94
- },
95
- },
96
- } as Meta<LayoutRowArgs>;
97
-
98
- const Template: StoryFn<LayoutRowArgs> = (args) => ({
99
- components: { LayoutRowComponent },
100
- setup() {
101
- const sampleContent = {
102
- shortText: "Brief example content.",
103
- mediumText:
104
- "This is a medium-length text example that demonstrates how content adapts within different layout row variants and their width constraints.",
105
- longText:
106
- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
107
- };
108
-
109
- return { args, sampleContent };
110
- },
111
- template: `
112
- <div style="min-height: 100vh; background: linear-gradient(45deg, #f0f9ff 0%, #e0f2fe 100%);">
113
- <LayoutRowComponent
114
- :data-testid="args.dataTestid"
115
- :tag="args.tag"
116
- :variant="args.variant"
117
- :id="args.id || undefined"
118
- :style-class-passthrough="args.styleClassPassthrough"
119
- :is-landmark="args.isLandmark"
120
- >
121
- <div style="padding: 20px; background: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); margin: 20px 0;">
122
- <h2 style="margin: 0 0 16px 0; color: #374151; font-size: 20px;">
123
- Layout Variant: {{ args.variant }}
124
- </h2>
125
- <p style="margin: 0 0 16px 0; color: #6b7280; line-height: 1.5;">
126
- {{ sampleContent.longText }}
127
- </p>
128
- <div style="padding: 12px; background: #f3f4f6; border-radius: 4px; font-family: monospace; font-size: 12px; color: #374151;">
129
- variant="{{ args.variant }}" tag="{{ args.tag }}"
130
- </div>
131
- </div>
132
- </LayoutRowComponent>
133
- </div>
134
- `,
135
- });
136
-
137
- // ===== BASIC VARIANT STORIES =====
138
-
139
- export const Default = Template.bind({});
140
- Default.args = {};
141
-
142
- export const Full = Template.bind({});
143
- Full.args = {
144
- variant: "full",
145
- };
146
- Full.parameters = {
147
- docs: {
148
- description: {
149
- story: "Full width variant (1fr) - extends to the full available width of the container.",
150
- },
151
- },
152
- };
153
-
154
- export const Popout = Template.bind({});
155
- Popout.args = {
156
- variant: "popout",
157
- };
158
- Popout.parameters = {
159
- docs: {
160
- description: {
161
- story: "Popout variant (max 1400px) - wider than content but with some constraints for better readability.",
162
- },
163
- },
164
- };
165
-
166
- export const Content = Template.bind({});
167
- Content.args = {
168
- variant: "content",
169
- };
170
- Content.parameters = {
171
- docs: {
172
- description: {
173
- story: "Content variant (max 1064px) - optimal reading width for most content types.",
174
- },
175
- },
176
- };
177
-
178
- export const InsetContent = Template.bind({});
179
- InsetContent.args = {
180
- variant: "inset-content",
181
- };
182
- InsetContent.parameters = {
183
- docs: {
184
- description: {
185
- story: "Inset content variant (max 840px) - narrower width ideal for focused reading or sidebar content.",
186
- },
187
- },
188
- };
189
-
190
- export const FullWidth = Template.bind({});
191
- FullWidth.args = {
192
- variant: "full-width",
193
- };
194
- FullWidth.parameters = {
195
- docs: {
196
- description: {
197
- story: "Full width variant - extends to full container width without constraints.",
198
- },
199
- },
200
- };
201
-
202
- export const FullContent = Template.bind({});
203
- FullContent.args = {
204
- variant: "full-content",
205
- };
206
- FullContent.parameters = {
207
- docs: {
208
- description: {
209
- story: "Full content variant - full width with inline padding applied automatically.",
210
- },
211
- },
212
- };
213
-
214
- export const FullContentNoPad = Template.bind({});
215
- FullContentNoPad.args = {
216
- variant: "full-content-nopad",
217
- };
218
- FullContentNoPad.parameters = {
219
- docs: {
220
- description: {
221
- story: "Full content without padding - full width without automatic inline padding.",
222
- },
223
- },
224
- };
225
-
226
- // ===== POSITIONAL VARIANTS =====
227
-
228
- const PositionalTemplate: StoryFn<LayoutRowArgs> = (args) => ({
229
- components: { LayoutRowComponent },
230
- setup() {
231
- return { args };
232
- },
233
- template: `
234
- <div style="min-height: 100vh; background: linear-gradient(45deg, #f0f9ff 0%, #e0f2fe 100%);">
235
- <LayoutRowComponent
236
- :data-testid="args.dataTestid"
237
- :tag="args.tag"
238
- :variant="args.variant"
239
- :style-class-passthrough="args.styleClassPassthrough"
240
- :is-landmark="args.isLandmark"
241
- >
242
- <div style="padding: 20px; background: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); margin: 20px 0;">
243
- <h2 style="margin: 0 0 16px 0; color: #374151; font-size: 20px;">
244
- Positional Variant: {{ args.variant }}
245
- </h2>
246
- <p style="margin: 0 0 16px 0; color: #6b7280; line-height: 1.5;">
247
- This variant demonstrates how content can be positioned to start or end at specific grid lines,
248
- allowing for asymmetric layouts and creative positioning within the grid system.
249
- </p>
250
- <div style="padding: 12px; background: #fef3c7; border-radius: 4px; border-left: 4px solid #f59e0b;">
251
- <strong>Grid Column:</strong> {{ args.variant }}
252
- </div>
253
- </div>
254
- </LayoutRowComponent>
255
- </div>
256
- `,
257
- });
258
-
259
- export const FullStart = PositionalTemplate.bind({});
260
- FullStart.args = {
261
- variant: "full-start",
262
- };
263
- FullStart.parameters = {
264
- docs: {
265
- description: {
266
- story: "Starts at the full grid line - content begins at the edge and flows inward.",
267
- },
268
- },
269
- };
270
-
271
- export const PopoutStart = PositionalTemplate.bind({});
272
- PopoutStart.args = {
273
- variant: "popout-start",
274
- };
275
- PopoutStart.parameters = {
276
- docs: {
277
- description: {
278
- story: "Starts at the popout grid line - content begins at the popout boundary.",
279
- },
280
- },
281
- };
282
-
283
- export const ContentStart = PositionalTemplate.bind({});
284
- ContentStart.args = {
285
- variant: "content-start",
286
- };
287
- ContentStart.parameters = {
288
- docs: {
289
- description: {
290
- story: "Starts at the content grid line - content begins at the content boundary.",
291
- },
292
- },
293
- };
294
-
295
- export const InsetContentStart = PositionalTemplate.bind({});
296
- InsetContentStart.args = {
297
- variant: "inset-content-start",
298
- };
299
- InsetContentStart.parameters = {
300
- docs: {
301
- description: {
302
- story: "Starts at the inset-content grid line - content begins at the inset boundary.",
303
- },
304
- },
305
- };
306
-
307
- // ===== SEMANTIC TAG VARIANTS =====
308
-
309
- const SemanticTemplate: StoryFn<LayoutRowArgs> = (args) => ({
310
- components: { LayoutRowComponent },
311
- setup() {
312
- const getTagDescription = (tag: string) => {
313
- const descriptions = {
314
- section: "Groups related content together",
315
- article: "Self-contained, distributable content",
316
- aside: "Content tangentially related to main content",
317
- header: "Introductory content or navigation",
318
- footer: "Footer information for its nearest sectioning element",
319
- main: "Main content of the document",
320
- nav: "Navigation links",
321
- div: "Generic container (default)",
322
- };
323
- return descriptions[tag as keyof typeof descriptions] || "Generic container";
324
- };
325
-
326
- return { args, getTagDescription };
327
- },
328
- template: `
329
- <div style="min-height: 50vh; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white;">
330
- <LayoutRowComponent
331
- :data-testid="args.dataTestid"
332
- :tag="args.tag"
333
- :variant="args.variant"
334
- :style-class-passthrough="args.styleClassPassthrough"
335
- :is-landmark="args.isLandmark"
336
- >
337
- <div style="padding: 30px; text-align: center;">
338
- <h2 style="margin: 0 0 16px 0; font-size: 24px;">
339
- Semantic Element: &lt;{{ args.tag }}&gt;
340
- </h2>
341
- <p style="margin: 0 0 20px 0; opacity: 0.9; line-height: 1.6;">
342
- {{ getTagDescription(args.tag) }}
343
- </p>
344
- <div style="display: inline-block; padding: 12px 20px; background: rgba(255, 255, 255, 0.2); border-radius: 6px; font-family: monospace; font-size: 14px;">
345
- &lt;{{ args.tag }} class="layout-row"&gt;
346
- </div>
347
- </div>
348
- </LayoutRowComponent>
349
- </div>
350
- `,
351
- });
352
-
353
- export const SemanticSection = SemanticTemplate.bind({});
354
- SemanticSection.args = {
355
- tag: "section",
356
- variant: "content",
357
- };
358
-
359
- export const SemanticArticle = SemanticTemplate.bind({});
360
- SemanticArticle.args = {
361
- tag: "article",
362
- variant: "content",
363
- };
364
-
365
- export const SemanticHeader = SemanticTemplate.bind({});
366
- SemanticHeader.args = {
367
- tag: "header",
368
- variant: "full-width",
369
- };
370
-
371
- export const SemanticMain = SemanticTemplate.bind({});
372
- SemanticMain.args = {
373
- tag: "main",
374
- variant: "content",
375
- isLandmark: true,
376
- };
377
-
378
- export const SemanticNav = SemanticTemplate.bind({});
379
- SemanticNav.args = {
380
- tag: "nav",
381
- variant: "popout",
382
- isLandmark: true,
383
- };
384
-
385
- // ===== ACCESSIBILITY STORY =====
386
-
387
- const AccessibilityTemplate: StoryFn<LayoutRowArgs> = (args) => ({
388
- components: { LayoutRowComponent },
389
- setup() {
390
- return { args };
391
- },
392
- template: `
393
- <div style="background: #f9fafb; padding: 20px;">
394
- <div style="background: white; border-radius: 12px; padding: 20px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);">
395
- <h3 style="margin: 0 0 16px 0; color: #374151;">Accessibility Features</h3>
396
- <p style="margin: 0 0 20px 0; color: #6b7280; line-height: 1.5;">
397
- When <code>isLandmark</code> is enabled, the component becomes keyboard focusable and includes appropriate ARIA labeling.
398
- </p>
399
- </div>
400
-
401
- <LayoutRowComponent
402
- :data-testid="args.dataTestid"
403
- :tag="args.tag"
404
- :variant="args.variant"
405
- :style-class-passthrough="args.styleClassPassthrough"
406
- :is-landmark="args.isLandmark"
407
- >
408
- <div style="padding: 20px; background: #dbeafe; border-radius: 8px; margin: 20px 0; border: 2px solid #3b82f6;">
409
- <h3 style="margin: 0 0 12px 0; color: #1e40af;">
410
- {{ args.isLandmark ? 'Landmark Element' : 'Regular Element' }}
411
- </h3>
412
- <p style="margin: 0 0 12px 0; color: #3b82f6; line-height: 1.5;">
413
- {{ args.isLandmark
414
- ? 'This element is focusable with tab navigation and has an accessible label.'
415
- : 'This is a regular layout element without landmark features.'
416
- }}
417
- </p>
418
- <div style="padding: 8px; background: rgba(59, 130, 246, 0.1); border-radius: 4px; font-family: monospace; font-size: 12px;">
419
- tabindex="{{ args.isLandmark ? '0' : 'null' }}"
420
- aria-label="{{ args.isLandmark ? 'Layout Row Landmark' : 'undefined' }}"
421
- </div>
422
- </div>
423
- </LayoutRowComponent>
424
- </div>
425
- `,
426
- });
427
-
428
- export const WithLandmark = AccessibilityTemplate.bind({});
429
- WithLandmark.args = {
430
- variant: "content",
431
- isLandmark: true,
432
- tag: "section",
433
- };
434
- WithLandmark.parameters = {
435
- docs: {
436
- description: {
437
- story: "Layout row with landmark accessibility features enabled - focusable and labeled for screen readers.",
438
- },
439
- },
440
- };
441
-
442
- export const WithoutLandmark = AccessibilityTemplate.bind({});
443
- WithoutLandmark.args = {
444
- variant: "content",
445
- isLandmark: false,
446
- tag: "div",
447
- };
448
- WithoutLandmark.parameters = {
449
- docs: {
450
- description: {
451
- story: "Standard layout row without landmark features - regular content container.",
452
- },
453
- },
454
- };
455
-
456
- // ===== COMPARISON STORY =====
457
-
458
- const ComparisonTemplate: StoryFn = () => ({
459
- components: { LayoutRowComponent },
460
- setup() {
461
- const variants = [
462
- { name: "full", description: "Full width (1fr)", color: "#ef4444" },
463
- { name: "popout", description: "Popout (1400px max)", color: "#f97316" },
464
- { name: "content", description: "Content (1064px max)", color: "#eab308" },
465
- { name: "inset-content", description: "Inset (840px max)", color: "#22c55e" },
466
- ];
467
- return { variants };
468
- },
469
- template: `
470
- <div style="background: #f8fafc; min-height: 100vh; padding: 20px 0;">
471
- <div style="text-align: center; margin-bottom: 40px;">
472
- <h2 style="margin: 0 0 16px 0; color: #374151; font-size: 28px;">Layout Row Width Comparison</h2>
473
- <p style="margin: 0; color: #6b7280; max-width: 600px; margin: 0 auto; line-height: 1.6;">
474
- Observe how different variants create varying content widths at different viewport sizes.
475
- </p>
476
- </div>
477
-
478
- <div v-for="variant in variants" :key="variant.name">
479
- <LayoutRowComponent :variant="variant.name" style="margin-bottom: 20px;">
480
- <div
481
- style="padding: 20px; border-radius: 8px; text-align: center;"
482
- :style="{
483
- background: variant.color,
484
- color: 'white',
485
- boxShadow: '0 2px 8px rgba(0, 0, 0, 0.15)'
486
- }"
487
- >
488
- <h3 style="margin: 0 0 8px 0; font-size: 18px; font-weight: bold;">
489
- {{ variant.name }}
490
- </h3>
491
- <p style="margin: 0 0 8px 0; opacity: 0.9;">
492
- {{ variant.description }}
493
- </p>
494
- <code style="background: rgba(255, 255, 255, 0.2); padding: 4px 8px; border-radius: 4px; font-size: 12px;">
495
- variant="{{ variant.name }}"
496
- </code>
497
- </div>
498
- </LayoutRowComponent>
499
- </div>
500
-
501
- <LayoutRowComponent variant="content" style="margin-top: 40px;">
502
- <div style="padding: 20px; background: white; border-radius: 12px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);">
503
- <h3 style="margin: 0 0 16px 0; color: #374151;">Understanding the Grid System</h3>
504
- <p style="margin: 0 0 16px 0; color: #6b7280; line-height: 1.6;">
505
- The layout row component uses CSS Grid with named grid lines to create a flexible, responsive layout system.
506
- Each variant corresponds to different grid column spans, allowing for precise control over content width and positioning.
507
- </p>
508
- <ul style="margin: 0; color: #6b7280; line-height: 1.6; padding-left: 20px;">
509
- <li><strong>Full:</strong> Uses the entire available width</li>
510
- <li><strong>Popout:</strong> Wider than content, ideal for images or callouts</li>
511
- <li><strong>Content:</strong> Optimal reading width for most text content</li>
512
- <li><strong>Inset:</strong> Narrower width for focused content or sidebars</li>
513
- </ul>
514
- </div>
515
- </LayoutRowComponent>
516
- </div>
517
- `,
518
- });
519
-
520
- export const VariantComparison = ComparisonTemplate.bind({});
521
- VariantComparison.parameters = {
522
- docs: {
523
- description: {
524
- story:
525
- "Side-by-side comparison of all major layout variants, demonstrating the width differences and visual hierarchy they create.",
526
- },
527
- },
528
- };
@@ -1,139 +0,0 @@
1
- <template>
2
- <div>
3
- <NuxtLayout name="default">
4
- <template #layout-content>
5
- <LayoutRow tag="div" variant="full-width" :style-class-passthrough="['mbe-20']">
6
- <h1 class="page-heading-2">Layout rows</h1>
7
- </LayoutRow>
8
-
9
- <LayoutRow tag="div" variant="full" :style-class-passthrough="['mbe-20']">
10
- <h2 class="page-heading-2">Full Track (1fr)</h2>
11
- <pre>variant="full"</pre>
12
- <p>
13
- Lorem ipsum odor amet, consectetuer adipiscing elit. Nec elementum maecenas placerat laoreet curae elit
14
- convallis himenaeos. Tellus varius cursus convallis commodo suspendisse litora. Platea accumsan interdum
15
- ultrices adipiscing molestie cras dui. Vehicula egestas nisi sagittis fames metus velit. Sodales blandit
16
- nisi eu dis sit, ridiculus aliquam. Morbi tellus eu in penatibus torquent tortor. Platea gravida nam;
17
- egestas enim nostra ultricies.
18
- </p>
19
- <p>
20
- Mi nibh quisque taciti porta curabitur nostra volutpat. Habitant sodales arcu habitasse mi duis conubia leo
21
- lacinia. Montes torquent sodales adipiscing; proin semper feugiat morbi ullamcorper praesent. Arcu luctus
22
- tempor quam ligula vestibulum sapien faucibus ridiculus. Cursus consequat ultricies consectetur class
23
- suscipit quisque convallis eget? Dignissim mattis luctus enim habitant porta pretium litora. Parturient
24
- montes imperdiet massa; sollicitudin varius hac aptent. Eleifend parturient mattis tellus nisi a montes.
25
- </p>
26
- </LayoutRow>
27
-
28
- <LayoutRow tag="div" variant="full-content" :style-class-passthrough="['mbe-20']">
29
- <h2 class="page-heading-2">Full Content Track (1fr)</h2>
30
- <pre>variant="full-content"</pre>
31
- <p>
32
- Lorem ipsum odor amet, consectetuer adipiscing elit. Nec elementum maecenas placerat laoreet curae elit
33
- convallis himenaeos. Tellus varius cursus convallis commodo suspendisse litora. Platea accumsan interdum
34
- ultrices adipiscing molestie cras dui. Vehicula egestas nisi sagittis fames metus velit. Sodales blandit
35
- nisi eu dis sit, ridiculus aliquam. Morbi tellus eu in penatibus torquent tortor. Platea gravida nam;
36
- egestas enim nostra ultricies.
37
- </p>
38
- <p>
39
- Mi nibh quisque taciti porta curabitur nostra volutpat. Habitant sodales arcu habitasse mi duis conubia leo
40
- lacinia. Montes torquent sodales adipiscing; proin semper feugiat morbi ullamcorper praesent. Arcu luctus
41
- tempor quam ligula vestibulum sapien faucibus ridiculus. Cursus consequat ultricies consectetur class
42
- suscipit quisque convallis eget? Dignissim mattis luctus enim habitant porta pretium litora. Parturient
43
- montes imperdiet massa; sollicitudin varius hac aptent. Eleifend parturient mattis tellus nisi a montes.
44
- </p>
45
- </LayoutRow>
46
-
47
- <LayoutRow tag="div" variant="popout" :style-class-passthrough="['mbe-20']">
48
- <h2 class="page-heading-2">Popout Track (1400px)</h2>
49
- <pre>variant="popout"</pre>
50
- <p>
51
- Lorem ipsum odor amet, consectetuer adipiscing elit. Nec elementum maecenas placerat laoreet curae elit
52
- convallis himenaeos. Tellus varius cursus convallis commodo suspendisse litora. Platea accumsan interdum
53
- ultrices adipiscing molestie cras dui. Vehicula egestas nisi sagittis fames metus velit. Sodales blandit
54
- nisi eu dis sit, ridiculus aliquam. Morbi tellus eu in penatibus torquent tortor. Platea gravida nam;
55
- egestas enim nostra ultricies.
56
- </p>
57
- <p>
58
- Mi nibh quisque taciti porta curabitur nostra volutpat. Habitant sodales arcu habitasse mi duis conubia leo
59
- lacinia. Montes torquent sodales adipiscing; proin semper feugiat morbi ullamcorper praesent. Arcu luctus
60
- tempor quam ligula vestibulum sapien faucibus ridiculus. Cursus consequat ultricies consectetur class
61
- suscipit quisque convallis eget? Dignissim mattis luctus enim habitant porta pretium litora. Parturient
62
- montes imperdiet massa; sollicitudin varius hac aptent. Eleifend parturient mattis tellus nisi a montes.
63
- </p>
64
- </LayoutRow>
65
-
66
- <LayoutRow tag="div" variant="content" :style-class-passthrough="['mbe-20']">
67
- <h2 class="page-heading-2">Content Track (1064px)</h2>
68
- <pre>variant="content"</pre>
69
- <p>
70
- Lorem ipsum odor amet, consectetuer adipiscing elit. Nec elementum maecenas placerat laoreet curae elit
71
- convallis himenaeos. Tellus varius cursus convallis commodo suspendisse litora. Platea accumsan interdum
72
- ultrices adipiscing molestie cras dui. Vehicula egestas nisi sagittis fames metus velit. Sodales blandit
73
- nisi eu dis sit, ridiculus aliquam. Morbi tellus eu in penatibus torquent tortor. Platea gravida nam;
74
- egestas enim nostra ultricies.
75
- </p>
76
- <p>
77
- Mi nibh quisque taciti porta curabitur nostra volutpat. Habitant sodales arcu habitasse mi duis conubia leo
78
- lacinia. Montes torquent sodales adipiscing; proin semper feugiat morbi ullamcorper praesent. Arcu luctus
79
- tempor quam ligula vestibulum sapien faucibus ridiculus. Cursus consequat ultricies consectetur class
80
- suscipit quisque convallis eget? Dignissim mattis luctus enim habitant porta pretium litora. Parturient
81
- montes imperdiet massa; sollicitudin varius hac aptent. Eleifend parturient mattis tellus nisi a montes.
82
- </p>
83
- </LayoutRow>
84
-
85
- <LayoutRow tag="div" variant="inset-content" :style-class-passthrough="['mbe-20']">
86
- <h2 class="page-heading-2">Inset Content Track (840px)</h2>
87
- <pre>variant="inset-content"</pre>
88
- <p>
89
- Lorem ipsum odor amet, consectetuer adipiscing elit. Nec elementum maecenas placerat laoreet curae elit
90
- convallis himenaeos. Tellus varius cursus convallis commodo suspendisse litora. Platea accumsan interdum
91
- ultrices adipiscing molestie cras dui. Vehicula egestas nisi sagittis fames metus velit. Sodales blandit
92
- nisi eu dis sit, ridiculus aliquam. Morbi tellus eu in penatibus torquent tortor. Platea gravida nam;
93
- egestas enim nostra ultricies.
94
- </p>
95
- <p>
96
- Mi nibh quisque taciti porta curabitur nostra volutpat. Habitant sodales arcu habitasse mi duis conubia leo
97
- lacinia. Montes torquent sodales adipiscing; proin semper feugiat morbi ullamcorper praesent. Arcu luctus
98
- tempor quam ligula vestibulum sapien faucibus ridiculus. Cursus consequat ultricies consectetur class
99
- suscipit quisque convallis eget? Dignissim mattis luctus enim habitant porta pretium litora. Parturient
100
- montes imperdiet massa; sollicitudin varius hac aptent. Eleifend parturient mattis tellus nisi a montes.
101
- </p>
102
- </LayoutRow>
103
-
104
- <LayoutRow tag="div" variant="full-width" :style-class-passthrough="['mbe-20']">
105
- <h2 class="page-heading-2">Full Width</h2>
106
- <pre>variant="full-width"</pre>
107
- <p>
108
- Lorem ipsum odor amet, consectetuer adipiscing elit. Nec elementum maecenas placerat laoreet curae elit
109
- convallis himenaeos. Tellus varius cursus convallis commodo suspendisse litora. Platea accumsan interdum
110
- ultrices adipiscing molestie cras dui. Vehicula egestas nisi sagittis fames metus velit. Sodales blandit
111
- nisi eu dis sit, ridiculus aliquam. Morbi tellus eu in penatibus torquent tortor. Platea gravida nam;
112
- egestas enim nostra ultricies.
113
- </p>
114
- <p>
115
- Mi nibh quisque taciti porta curabitur nostra volutpat. Habitant sodales arcu habitasse mi duis conubia leo
116
- lacinia. Montes torquent sodales adipiscing; proin semper feugiat morbi ullamcorper praesent. Arcu luctus
117
- tempor quam ligula vestibulum sapien faucibus ridiculus. Cursus consequat ultricies consectetur class
118
- suscipit quisque convallis eget? Dignissim mattis luctus enim habitant porta pretium litora. Parturient
119
- montes imperdiet massa; sollicitudin varius hac aptent. Eleifend parturient mattis tellus nisi a montes.
120
- </p>
121
- </LayoutRow>
122
- </template>
123
- </NuxtLayout>
124
- </div>
125
- </template>
126
-
127
- <script setup lang="ts">
128
- definePageMeta({
129
- layout: false,
130
- });
131
-
132
- useHead({
133
- title: "UI Layout Row",
134
- meta: [{ name: "description", content: "Examples of UI Component Layout Row" }],
135
- bodyAttrs: {
136
- class: "home",
137
- },
138
- });
139
- </script>