srcdev-nuxt-components 9.1.49 → 9.1.50
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.
- package/.claude/settings.json +2 -4
- package/.claude/settings.local.json +22 -2
- package/.claude/skills/components/card-core.md +205 -0
- package/.claude/skills/components/display-dialog.md +128 -0
- package/.claude/skills/components/page-hero-highlights.md +1 -1
- package/.claude/skills/components/page-row.md +157 -0
- package/.claude/skills/components/services-card-grid.md +4 -4
- package/.claude/skills/components/services-section-grid.md +4 -4
- package/.claude/skills/components/tab-navigation.md +222 -0
- package/.claude/skills/composable-dialog-controls.md +55 -43
- package/.claude/skills/index.md +5 -2
- package/app/components/01.atoms/card/CONSUMER-STYLING.md +175 -0
- package/app/components/01.atoms/card/CardCore.vue +48 -21
- package/app/components/01.atoms/display-dialog/CONSUMER-STYLING.md +163 -0
- package/app/components/01.atoms/display-dialog/DisplayDialog.vue +277 -0
- package/app/components/01.atoms/display-dialog/stories/DisplayDialog.stories.ts +177 -0
- package/app/components/01.atoms/display-dialog/tests/DisplayDialog.spec.ts +264 -0
- package/app/components/01.atoms/display-dialog/tests/__snapshots__/DisplayDialog.spec.ts.snap +18 -0
- package/app/components/01.atoms/page-row/CONSUMER-STYLING.md +90 -0
- package/app/components/01.atoms/page-row/PageRow.vue +115 -0
- package/app/components/01.atoms/page-row/stories/PageRow.stories.ts +311 -0
- package/app/components/01.atoms/page-row/tests/PageRow.spec.ts +191 -0
- package/app/components/02.molecules/navigation/tab-navigation/CONSUMER-STYLING.md +145 -0
- package/app/components/02.molecules/navigation/tab-navigation/TabNavigation.vue +21 -11
- package/app/components/02.molecules/navigation/tab-navigation/tests/__snapshots__/TabNavigation.spec.ts.snap +12 -6
- package/app/components/{forms/ui → 05.forms/form-field}/FormField.vue +12 -19
- package/app/components/{forms/ui → 05.forms/form-wrapper}/FormWrapper.vue +6 -6
- package/app/components/{forms → 05.forms}/input-button/InputButtonCore.vue +2 -0
- package/app/components/{forms → 05.forms}/input-button/stories/InputButtonCore.stories.ts +1 -1
- package/app/components/{forms → 05.forms}/input-text/InputTextCore.vue +73 -73
- package/app/components/{forms → 05.forms}/input-text/variants/InputTextAsNumberWithLabel.vue +29 -29
- package/app/components/carousels/CarouselBasic.vue +99 -99
- package/app/components/carousels/CarouselInfinite.vue +150 -150
- package/app/components/deep-expanding-menu/DeepExpandingMenu.vue +111 -111
- package/app/components/responsive-header/ResponsiveHeader.vue +250 -282
- package/app/components/test-storybook/TestStorybook.vue +16 -16
- package/app/composables/tests/useDialogControls.spec.ts +34 -64
- package/app/composables/useDialogControls.ts +19 -33
- package/app/composables/useFormControl.ts +0 -2
- package/app/layouts/default.vue +9 -7
- package/app/pages/auto-grid.vue +37 -20
- package/app/pages/banner-video.vue +2 -2
- package/app/pages/forms/examples/buttons/index.vue +189 -215
- package/app/pages/forms/examples/material/text-fields.vue +2 -2
- package/app/pages/grid-stack.vue +10 -10
- package/app/pages/index.vue +20 -20
- package/app/pages/samaritan.vue +4 -4
- package/app/pages/typography/hero-text.vue +6 -6
- package/app/pages/typography/index.vue +4 -4
- package/app/pages/typography/page-body.vue +4 -4
- package/app/pages/typography/page-heading.vue +4 -4
- package/app/pages/typography/page-link.vue +4 -4
- package/app/pages/ui/accordian.vue +4 -4
- package/app/pages/ui/anchor-scroll-tab-navigation.vue +77 -66
- package/app/pages/ui/anchor-scroll.vue +94 -70
- package/app/pages/ui/animated-svg-text.vue +4 -4
- package/app/pages/ui/block-decorators.vue +11 -11
- package/app/pages/ui/card-core.vue +9 -9
- package/app/pages/ui/carousel-basic.vue +4 -4
- package/app/pages/ui/carousel-flip.vue +2 -2
- package/app/pages/ui/carousel-infinite.vue +4 -4
- package/app/pages/ui/clipped-panels.vue +10 -10
- package/app/pages/ui/contact-section.vue +4 -4
- package/app/pages/ui/container-glow.vue +2 -3
- package/app/pages/ui/deep-expanding-menu.vue +138 -0
- package/app/pages/ui/display-avatar.vue +2 -2
- package/app/pages/ui/display-banner.vue +2 -2
- package/app/pages/ui/display-chip.vue +32 -25
- package/app/pages/ui/display-details.vue +6 -10
- package/app/pages/ui/display-dialog.vue +96 -131
- package/app/pages/ui/display-pill.vue +27 -33
- package/app/pages/ui/display-prompt.vue +4 -4
- package/app/pages/ui/display-toast.vue +2 -2
- package/app/pages/ui/expanding-panel.vue +12 -16
- package/app/pages/ui/glowing-border.vue +12 -12
- package/app/pages/ui/layout-grid-a.vue +6 -6
- package/app/pages/ui/layout-grid-b.vue +4 -4
- package/app/pages/ui/magnetic-navigation.vue +6 -6
- package/app/pages/ui/marquee-scroller.vue +2 -2
- package/app/pages/ui/mask-element.vue +2 -2
- package/app/pages/ui/masonry-columns.vue +4 -4
- package/app/pages/ui/masonry-grid-ordered-experiment.vue +4 -4
- package/app/pages/ui/masonry-grid-ordered.vue +4 -4
- package/app/pages/ui/masonry-grid-sorted.vue +4 -4
- package/app/pages/ui/masonry-grid.vue +4 -4
- package/app/pages/ui/navigation/navigation-horizontal.vue +12 -12
- package/app/pages/ui/navigation/tab-navigation.vue +493 -0
- package/app/pages/ui/page-row.vue +127 -0
- package/app/pages/ui/price-list.vue +4 -4
- package/app/pages/ui/profile-section.vue +4 -4
- package/app/pages/ui/qr-code/[componentName].vue +6 -6
- package/app/pages/ui/rotating-carousel.vue +16 -16
- package/app/pages/ui/scroll-reveal-image.vue +20 -20
- package/app/pages/ui/section-parallax.vue +7 -7
- package/app/pages/ui/services/colour-finder.vue +4 -4
- package/app/pages/ui/services/services-cards.vue +4 -4
- package/app/pages/ui/services/services-section/[slug].vue +4 -4
- package/app/pages/ui/services/services-sections-compact.vue +6 -6
- package/app/pages/ui/settings.vue +10 -10
- package/app/pages/ui/simple-grid.vue +2 -2
- package/app/pages/ui/slider-gallery.vue +5 -5
- package/app/pages/ui/tabs-y.vue +2 -3
- package/app/pages/ui/tabs.vue +6 -9
- package/app/pages/ui/tooltips.vue +9 -9
- package/app/pages/ui/wipe-away-vertical.vue +14 -14
- package/package.json +1 -1
- package/.claude/skills/components/layout-row.md +0 -239
- package/app/components/display-dialog/DisplayDialogCore.vue +0 -276
- package/app/components/display-dialog/variants/DisplayDialogConfirm.vue +0 -47
- package/app/components/display-dialog/variants/DisplayDialogScrollableContent.vue +0 -51
- package/app/components/forms/c12/utils.ts +0 -14
- package/app/components/layout-row/LayoutRow.vue +0 -171
- package/app/components/layout-row/stories/LayoutRow.stories.ts +0 -528
- package/app/pages/ui/layout-row.vue +0 -139
- /package/app/components/{forms → 05.forms}/form-errors/InputError.vue +0 -0
- /package/app/components/{forms → 05.forms}/form-errors/tests/InputError.spec.ts +0 -0
- /package/app/components/{forms → 05.forms}/form-fieldset/FormFieldset.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-secondary-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-secondary-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-secondary-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-tertiary-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-tertiary-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-icons-tertiary-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-primary-pending-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-primary-pending-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-primary-pending-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-secondary-pill-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-secondary-pill-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-secondary-pill-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-tertiary-readonly-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-tertiary-readonly-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/combo-tertiary-readonly-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-default-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-default-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-default-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-error-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-error-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-error-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-success-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-success-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-success-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-warning-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-warning-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-theme-warning-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-primary-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-primary-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-primary-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-secondary-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-secondary-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-secondary-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-tertiary-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-tertiary-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-variant-tertiary-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/default-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/nuxt-icon-only-component-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/nuxt-icon-only-component-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/nuxt-icon-only-component-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pending-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pending-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pending-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pill-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pill-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-pill-webkit-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-readonly-chromium-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-readonly-firefox-darwin.png +0 -0
- /package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts-snapshots/state-readonly-webkit-darwin.png +0 -0
- /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
- /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
- /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
- /package/app/components/{forms → 05.forms}/input-button/tests/InputButtonCore.spec.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-button/tests/__snapshots__/InputButtonCore.spec.ts.snap +0 -0
- /package/app/components/{forms → 05.forms}/input-checkbox/MultipleCheckboxes.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-checkbox/SingleCheckbox.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-checkbox/tests/MultipleCheckboxes.spec.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-checkbox/tests/data/tags.json +0 -0
- /package/app/components/{forms → 05.forms}/input-checkbox-radio/InputCheckboxRadioButton.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-checkbox-radio/InputCheckboxRadioCore.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-checkbox-radio/InputCheckboxRadioWithLabel.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-checkbox-radio/tests/InputCheckboxRadioCore.spec.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-copy/InputCopyCore.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-copy/stories/InputCopyCore.stories.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-copy/tests/InputCopyCore.spec.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-copy/tests/__snapshots__/InputCopyCore.spec.ts.snap +0 -0
- /package/app/components/{forms → 05.forms}/input-description/InputDescription.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-description/tests/InputDescription.spec.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-label/InputLabel.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-label/tests/InputLabel.spec.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-number/InputNumberCore.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-number/variants/InputNumberDefault.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-radio/MultipleRadiobuttons.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-radio/tests/MultipleRadioButtons.spec.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-radio/tests/data/tags.json +0 -0
- /package/app/components/{forms → 05.forms}/input-range/InputRangeCore.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-range/variants/InputRangeDefault.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-range-fancy/InputRangeFancyCore.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-range-fancy/InputRangeFancyWithLabel.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-select/InputSelectCore.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-select/variants/InputSelectWithLabel.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-text/stories/InputPasswordWithLabel.stories.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-text/stories/InputTextAsNumberWithLabel.stories.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-text/stories/InputTextCore.stories.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-text/stories/InputTextWithLabel.stories.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-text/variants/InputPasswordWithLabel.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-text/variants/InputTextWithLabel.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-textarea/InputTextareaCore.vue +0 -0
- /package/app/components/{forms → 05.forms}/input-textarea/stories/InputTextareaCore.stories.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-textarea/stories/InputTextareaWithLabel.stories.ts +0 -0
- /package/app/components/{forms → 05.forms}/input-textarea/variants/InputTextareaWithLabel.vue +0 -0
- /package/app/components/{forms → 05.forms}/pending-effect/PendingEffect.vue +0 -0
- /package/app/components/{forms → 05.forms}/toggle-switch/ToggleSwitchCore.vue +0 -0
- /package/app/components/{forms → 05.forms}/toggle-switch/stories/ToggleSwitchCore.stories.ts +0 -0
- /package/app/components/{forms → 05.forms}/toggle-switch/stories/ToggleSwitchWithLabel.stories.ts +0 -0
- /package/app/components/{forms → 05.forms}/toggle-switch/stories/ToggleSwitchWithLabelInline.stories.ts +0 -0
- /package/app/components/{forms → 05.forms}/toggle-switch/variants/ToggleSwitchWithLabel.vue +0 -0
- /package/app/components/{forms → 05.forms}/toggle-switch/variants/ToggleSwitchWithLabelInline.vue +0 -0
- /package/app/components/{forms → 05.forms}/triple-toggle-switch/TripleToggleSwitchCore.vue +0 -0
- /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: <{{ args.tag }}>
|
|
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
|
-
<{{ args.tag }} class="layout-row">
|
|
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>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/app/components/{forms → 05.forms}/input-button/playwright/input-button-core.playwright.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|