@pnx-mixtape/mxds 0.0.21 → 0.0.23
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/dist/build/accordion.entry.js +32 -43
- package/dist/build/accordion.entry.js.map +1 -1
- package/dist/build/base.css +19 -39
- package/dist/build/button.css +7 -8
- package/dist/build/chunks/{Accordion-O-huO4At.js → Accordion-D1HQ0FDq.js} +23 -21
- package/dist/build/chunks/{Accordion-O-huO4At.js.map → Accordion-D1HQ0FDq.js.map} +1 -1
- package/dist/build/chunks/disclosure-widget-CdjCdx7t.js +129 -0
- package/dist/build/chunks/disclosure-widget-CdjCdx7t.js.map +1 -0
- package/dist/build/chunks/drop-menu.entry-fzV-_VFl.js +70 -0
- package/dist/build/chunks/drop-menu.entry-fzV-_VFl.js.map +1 -0
- package/dist/build/chunks/{polyfills-C-B7iqDG.js → polyfills-DnrsypYs.js} +35 -26
- package/dist/build/chunks/polyfills-DnrsypYs.js.map +1 -0
- package/dist/build/chunks/popover.entry-BQvyR0d5.js +38 -0
- package/dist/build/chunks/popover.entry-BQvyR0d5.js.map +1 -0
- package/dist/build/chunks/{utilities-DXELy_An.js → utilities-Ci7wwNeg.js} +9 -106
- package/dist/build/chunks/utilities-Ci7wwNeg.js.map +1 -0
- package/dist/build/constants.css +10 -31
- package/dist/build/dialog.entry.js +23 -31
- package/dist/build/dialog.entry.js.map +1 -1
- package/dist/build/drop-menu.entry.js +1 -1
- package/dist/build/drupal.css +5 -9
- package/dist/build/filters.entry.js +54 -50
- package/dist/build/filters.entry.js.map +1 -1
- package/dist/build/form.css +12 -26
- package/dist/build/global-alert.entry.js +26 -19
- package/dist/build/global-alert.entry.js.map +1 -1
- package/dist/build/grid.css +3 -9
- package/dist/build/header.css +5 -3
- package/dist/build/header.entry.js +93 -88
- package/dist/build/header.entry.js.map +1 -1
- package/dist/build/icon.css +3 -3
- package/dist/build/in-page-navigation.entry.js +16 -12
- package/dist/build/in-page-navigation.entry.js.map +1 -1
- package/dist/build/navigation.css +21 -56
- package/dist/build/navigation.entry.js +148 -50
- package/dist/build/navigation.entry.js.map +1 -1
- package/dist/build/page.css +1 -1
- package/dist/build/popover.css +119 -0
- package/dist/build/popover.entry.js +2 -0
- package/dist/build/popover.entry.js.map +1 -0
- package/dist/build/section.css +1 -1
- package/dist/build/sticky.entry.js +11 -12
- package/dist/build/sticky.entry.js.map +1 -1
- package/dist/build/tabs.entry.js +108 -91
- package/dist/build/tabs.entry.js.map +1 -1
- package/dist/build/utility-list.css +43 -0
- package/dist/build/utility-list.entry.js +80 -0
- package/dist/build/utility-list.entry.js.map +1 -0
- package/package.json +9 -10
- package/src/Atom/{Base.mdx → Atom.mdx} +1 -1
- package/src/Atom/Background/Backgrounds.stories.ts +21 -4
- package/src/Atom/Background/__snapshots__/Backgrounds.stories.ts.snap +1 -1
- package/src/Atom/Background/_background.css +1 -2
- package/src/Atom/Blockquote/_blockquote.css +1 -2
- package/src/Atom/Button/Button.stories.ts +128 -19
- package/src/Atom/Button/__snapshots__/Button.stories.ts.snap +75 -11
- package/src/Atom/Button/__snapshots__/Button.stories.tsx.snap +1 -1
- package/src/Atom/Button/_buttons.css +5 -5
- package/src/Atom/DefinitionList/DefinitionList.stories.ts +20 -3
- package/src/Atom/DefinitionList/DefinitionList.stories.tsx +3 -9
- package/src/Atom/DefinitionList/DefinitionList.tsx +3 -4
- package/src/Atom/DefinitionList/__snapshots__/DefinitionList.stories.ts.snap +1 -1
- package/src/Atom/DefinitionList/__snapshots__/DefinitionList.stories.tsx.snap +1 -1
- package/src/Atom/Heading/Heading.stories.ts +49 -7
- package/src/Atom/Heading/Heading.tsx +1 -6
- package/src/Atom/Heading/__snapshots__/Heading.stories.ts.snap +9 -1
- package/src/Atom/Heading/__snapshots__/Heading.stories.tsx.snap +1 -1
- package/src/Atom/Heading/_headings.css +1 -2
- package/src/Atom/Icon/Icon.mdx +5 -1
- package/src/Atom/Icon/Icon.stories.ts +76 -6
- package/src/Atom/Icon/Icon.tsx +1 -8
- package/src/Atom/Icon/__snapshots__/Icon.stories.ts.snap +18 -4
- package/src/Atom/Icon/__snapshots__/Icon.stories.tsx.snap +1 -1
- package/src/Atom/Icon/_icon.css +1 -1
- package/src/Atom/Image/Image.stories.ts +4 -3
- package/src/Atom/Image/__snapshots__/Image.stories.ts.snap +1 -1
- package/src/Atom/Link/Link.stories.ts +74 -7
- package/src/Atom/Link/__snapshots__/Link.stories.ts.snap +4 -4
- package/src/Atom/Link/__snapshots__/Link.stories.tsx.snap +1 -1
- package/src/Atom/Media/Media.stories.ts +34 -5
- package/src/Atom/Media/Media.tsx +1 -6
- package/src/Atom/Media/__snapshots__/Media.stories.ts.snap +2 -2
- package/src/Atom/Media/__snapshots__/Media.stories.tsx.snap +1 -1
- package/src/Atom/Media/_media.css +2 -10
- package/src/Atom/Spacing/Spacing.stories.ts +45 -31
- package/src/Atom/Spacing/__snapshots__/Spacing.stories.ts.snap +5 -4
- package/src/Atom/Spacing/spacing.twig +5 -2
- package/src/Atom/Table/__snapshots__/Table.stories.ts.snap +1 -1
- package/src/Atom/Table/__snapshots__/TableResponsive.stories.ts.snap +1 -1
- package/src/Atom/Table/_table.css +1 -2
- package/src/Atom/Text/Text.stories.ts +62 -0
- package/src/Atom/Text/__snapshots__/{TextSizes.stories.ts.snap → Text.stories.ts.snap} +14 -27
- package/src/Atom/Text/__snapshots__/Text.stories.tsx.snap +1 -1
- package/src/Atom/Text/_text-sizes.css +2 -4
- package/src/Atom/Text/text-style.twig +11 -1
- package/src/Atom/Text/text-styles-example.twig +2 -16
- package/src/Atom/Video/Video.stories.ts +6 -4
- package/src/Atom/Video/Video.tsx +1 -5
- package/src/Atom/Video/__snapshots__/Video.stories.ts.snap +1 -1
- package/src/Atom/_generic.css +4 -4
- package/src/Atom/_hr.css +1 -2
- package/src/Component/Accordion/Accordion.stories.ts +26 -8
- package/src/Component/Accordion/Accordion.stories.tsx +8 -10
- package/src/Component/Accordion/Accordion.tsx +2 -13
- package/src/Component/Accordion/AccordionItem.stories.ts +90 -0
- package/src/Component/Accordion/Components/AccordionContent.tsx +1 -5
- package/src/Component/Accordion/Components/AccordionTitle.tsx +1 -4
- package/src/Component/Accordion/Elements/Accordion.ts +1 -1
- package/src/Component/Accordion/Elements/AccordionDiv.ts +4 -11
- package/src/Component/Accordion/Elements/AccordionGroup.ts +10 -24
- package/src/Component/Accordion/Elements/AccordionMobile.ts +4 -4
- package/src/Component/Accordion/__snapshots__/Accordion.stories.ts.snap +17 -6
- package/src/Component/Accordion/__snapshots__/Accordion.stories.tsx.snap +1 -1
- package/src/Component/Accordion/__snapshots__/AccordionItem.stories.ts.snap +90 -0
- package/src/Component/Accordion/accordion.css +7 -5
- package/src/Component/Accordion/twig/accordion-div.twig +13 -11
- package/src/Component/Accordion/twig/accordion-mobile.twig +13 -11
- package/src/Component/Breadcrumb/Breadcrumb.stories.ts +14 -0
- package/src/Component/Breadcrumb/Breadcrumb.tsx +2 -12
- package/src/Component/Breadcrumb/__snapshots__/Breadcrumb.stories.ts.snap +1 -1
- package/src/Component/Breadcrumb/__snapshots__/Breadcrumb.stories.tsx.snap +1 -1
- package/src/Component/Breadcrumb/breadcrumb.css +1 -4
- package/src/Component/Callout/Callout.stories.ts +20 -0
- package/src/Component/Callout/__snapshots__/Callout.stories.ts.snap +1 -1
- package/src/Component/Callout/callout.css +1 -2
- package/src/Component/Card/Card.stories.ts +129 -14
- package/src/Component/Card/Card.stories.tsx +2 -2
- package/src/Component/Card/Components/CardContent.tsx +1 -5
- package/src/Component/Card/__snapshots__/Card.stories.ts.snap +24 -24
- package/src/Component/Card/__snapshots__/Card.stories.tsx.snap +1 -1
- package/src/Component/Card/card.css +2 -6
- package/src/Component/Card/card.twig +1 -1
- package/src/Component/Carousel/Carousel.stories.ts +61 -8
- package/src/Component/Carousel/Elements/Carousel.ts +10 -19
- package/src/Component/Carousel/__snapshots__/Carousel.stories.ts.snap +321 -35
- package/src/Component/Carousel/carousel.css +1 -2
- package/src/Component/ContentBlock/Components/ContentBlockContent.tsx +1 -5
- package/src/Component/ContentBlock/Components/ContentBlockMedia.tsx +1 -4
- package/src/Component/ContentBlock/ContentBlock.stories.ts +63 -13
- package/src/Component/ContentBlock/ContentBlock.stories.tsx +2 -2
- package/src/Component/ContentBlock/ContentBlock.tsx +1 -5
- package/src/Component/ContentBlock/__snapshots__/ContentBlock.stories.ts.snap +11 -11
- package/src/Component/ContentBlock/__snapshots__/ContentBlock.stories.tsx.snap +1 -1
- package/src/Component/Dialog/Dialog.stories.ts +78 -21
- package/src/Component/Dialog/Dialog.stories.tsx +2 -3
- package/src/Component/Dialog/Elements/Dialog.ts +7 -16
- package/src/Component/Dialog/__snapshots__/Dialog.stories.ts.snap +8 -11
- package/src/Component/Dialog/__snapshots__/Dialog.stories.tsx.snap +1 -1
- package/src/Component/Dialog/dialog.css +1 -2
- package/src/Component/Dialog/dialog.twig +1 -1
- package/src/Component/DropMenu/Components/DropMenuContext.tsx +4 -12
- package/src/Component/DropMenu/DropMenu.stories.ts +60 -1
- package/src/Component/DropMenu/DropMenu.tsx +2 -7
- package/src/Component/DropMenu/Elements/DropMenu.ts +21 -91
- package/src/Component/DropMenu/__snapshots__/DropMenu.stories.ts.snap +53 -11
- package/src/Component/DropMenu/__snapshots__/DropMenu.stories.tsx.snap +1 -1
- package/src/Component/DropMenu/drop-menu.css +13 -41
- package/src/Component/DropMenu/drop-menu.twig +8 -6
- package/src/Component/Filters/Elements/Filters.ts +7 -11
- package/src/Component/Filters/FilterItem.stories.ts +180 -0
- package/src/Component/Filters/Filters.stories.ts +83 -8
- package/src/Component/Filters/__snapshots__/FilterItem.stories.ts.snap +135 -0
- package/src/Component/Filters/__snapshots__/Filters.stories.ts.snap +43 -41
- package/src/Component/Filters/filter-item.twig +1 -1
- package/src/Component/Filters/filters.css +33 -17
- package/src/Component/GlobalAlert/Elements/ClosableAlert.ts +8 -7
- package/src/Component/GlobalAlert/GlobalAlert.stories.ts +60 -12
- package/src/Component/GlobalAlert/GlobalAlert.stories.tsx +1 -2
- package/src/Component/GlobalAlert/__snapshots__/GlobalAlert.stories.ts.snap +8 -6
- package/src/Component/GlobalAlert/__snapshots__/GlobalAlert.stories.tsx.snap +3 -3
- package/src/Component/HeroBanner/HeroBanner.stories.ts +84 -7
- package/src/Component/HeroBanner/HeroBanner.stories.tsx +4 -4
- package/src/Component/HeroBanner/__snapshots__/HeroBanner.stories.ts.snap +91 -99
- package/src/Component/HeroBanner/__snapshots__/HeroBanner.stories.tsx.snap +1 -1
- package/src/Component/HeroSearch/HeroSearch.stories.ts +23 -4
- package/src/Component/HeroSearch/HeroSearch.stories.tsx +4 -4
- package/src/Component/HeroSearch/__snapshots__/HeroSearch.stories.ts.snap +10 -10
- package/src/Component/HeroSearch/__snapshots__/HeroSearch.stories.tsx.snap +1 -1
- package/src/Component/InPageAlert/InPageAlert.stories.ts +76 -8
- package/src/Component/InPageAlert/InPageAlert.stories.tsx +1 -2
- package/src/Component/InPageAlert/InPageAlert.tsx +1 -4
- package/src/Component/InPageAlert/__snapshots__/InPageAlert.stories.ts.snap +80 -2
- package/src/Component/InPageAlert/__snapshots__/InPageAlert.stories.tsx.snap +1 -1
- package/src/Component/InPageNavigation/Elements/InPageNavigation.ts +7 -9
- package/src/Component/InPageNavigation/Hooks/useInPageNavigation.ts +3 -5
- package/src/Component/InPageNavigation/InPageNavigation.stories.ts +44 -9
- package/src/Component/InPageNavigation/InPageNavigation.stories.tsx +32 -40
- package/src/Component/InPageNavigation/__snapshots__/InPageNavigation.stories.ts.snap +152 -5
- package/src/Component/InPageNavigation/__snapshots__/InPageNavigation.stories.tsx.snap +1 -1
- package/src/Component/LinkList/LinkList.stories.ts +23 -0
- package/src/Component/LinkList/__snapshots__/LinkList.stories.ts.snap +8 -8
- package/src/Component/LinkList/__snapshots__/LinkList.stories.tsx.snap +1 -1
- package/src/Component/LinkList/link-list.css +1 -2
- package/src/Component/ListItem/Components/ListItemContent.tsx +1 -5
- package/src/Component/ListItem/Components/ListItemMedia.tsx +1 -4
- package/src/Component/ListItem/ListItem.stories.ts +91 -11
- package/src/Component/ListItem/ListItem.stories.tsx +6 -7
- package/src/Component/ListItem/__snapshots__/ListItem.stories.ts.snap +1 -1
- package/src/Component/ListItem/__snapshots__/ListItem.stories.tsx.snap +1 -1
- package/src/Component/ListItem/list-item.css +1 -2
- package/src/Component/Navigation/Components/DropdownLevel.tsx +5 -13
- package/src/Component/Navigation/Elements/Navigation.ts +6 -13
- package/src/Component/Navigation/Navigation.stories.ts +48 -0
- package/src/Component/Navigation/__snapshots__/Dropdown.stories.tsx.snap +1 -1
- package/src/Component/Navigation/__snapshots__/Navigation.stories.ts.snap +1 -1
- package/src/Component/Navigation/__snapshots__/Navigation.stories.tsx.snap +1 -1
- package/src/Component/Navigation/_navigation-collapsible.css +2 -4
- package/src/Component/Navigation/_navigation-dropdown.css +10 -32
- package/src/Component/Navigation/_navigation-mega.css +1 -4
- package/src/Component/Navigation/_navigation.css +1 -4
- package/src/Component/Pagination/Components/PaginationContext.tsx +5 -19
- package/src/Component/Pagination/Components/PaginationItem.tsx +1 -5
- package/src/Component/Pagination/Pagination.stories.ts +28 -0
- package/src/Component/Pagination/Pagination.tsx +3 -11
- package/src/Component/Pagination/__snapshots__/Pagination.stories.ts.snap +3 -3
- package/src/Component/Pagination/__snapshots__/Pagination.stories.tsx.snap +1 -1
- package/src/Component/Pagination/pagination.css +1 -4
- package/src/Component/Popover/Elements/Popover.ts +55 -0
- package/src/Component/Popover/Popover.stories.ts +259 -0
- package/src/Component/Popover/__snapshots__/Popover.stories.ts.snap +508 -0
- package/src/Component/{DropMenu → Popover}/polyfills.js +6 -4
- package/src/Component/Popover/popover.css +113 -0
- package/src/Component/Popover/popover.entry.js +1 -0
- package/src/Component/Popover/popover.twig +27 -0
- package/src/Component/ResultsBar/Components/ResultsBarInfo.tsx +2 -7
- package/src/Component/ResultsBar/Components/ResultsBarSort.tsx +1 -6
- package/src/Component/ResultsBar/ResultsBar.stories.ts +34 -4
- package/src/Component/ResultsBar/__snapshots__/ResultsBar.stories.ts.snap +3 -3
- package/src/Component/ResultsBar/__snapshots__/ResultsBar.stories.tsx.snap +1 -1
- package/src/Component/SideNavigation/SideNavigation.stories.ts +40 -0
- package/src/Component/SideNavigation/__snapshots__/SideNavigation.stories.ts.snap +1 -1
- package/src/Component/SideNavigation/side-navigation.css +3 -6
- package/src/Component/SocialLinks/SocialLinks.stories.ts +20 -0
- package/src/Component/SocialLinks/__snapshots__/SocialLinks.stories.ts.snap +5 -5
- package/src/Component/SocialShare/SocialShare.stories.ts +37 -0
- package/src/Component/SocialShare/SocialShare.tsx +2 -4
- package/src/Component/SocialShare/__snapshots__/SocialShare.stories.ts.snap +40 -0
- package/src/Component/SocialShare/__snapshots__/SocialShare.stories.tsx.snap +1 -1
- package/src/Component/SocialShare/social-share.twig +34 -0
- package/src/Component/Steps/StepItem.stories.ts +48 -0
- package/src/Component/Steps/Steps.stories.ts +82 -13
- package/src/Component/Steps/__snapshots__/StepItem.stories.ts.snap +31 -0
- package/src/Component/Steps/__snapshots__/Steps.stories.ts.snap +109 -28
- package/src/Component/Steps/step-item.twig +1 -1
- package/src/Component/Steps/steps.css +4 -11
- package/src/Component/Sticky/Elements/Sticky.ts +3 -8
- package/src/Component/Sticky/Sticky.stories.ts +35 -3
- package/src/Component/Sticky/__snapshots__/Sticky.stories.ts.snap +1 -1
- package/src/Component/Sticky/__snapshots__/Sticky.stories.tsx.snap +1 -1
- package/src/Component/Sticky/sticky.twig +1 -1
- package/src/Component/Tabs/Components/Tab.tsx +2 -8
- package/src/Component/Tabs/Components/TabPanel.tsx +1 -5
- package/src/Component/Tabs/Elements/Tabs.ts +21 -31
- package/src/Component/Tabs/TabItem.stories.ts +52 -0
- package/src/Component/Tabs/Tabs.stories.ts +51 -8
- package/src/Component/Tabs/Tabs.tsx +6 -22
- package/src/Component/Tabs/__snapshots__/TabItem.stories.ts.snap +12 -0
- package/src/Component/Tabs/__snapshots__/Tabs.stories.ts.snap +127 -11
- package/src/Component/Tabs/__snapshots__/Tabs.stories.tsx.snap +1 -1
- package/src/Component/Tabs/tab-item.twig +1 -2
- package/src/Component/Tabs/tabs.css +56 -59
- package/src/Component/Tag/Tag.stories.ts +30 -0
- package/src/Component/Tag/Tag.tsx +1 -5
- package/src/Component/Tag/__snapshots__/Tag.stories.ts.snap +1 -1
- package/src/Component/Tag/__snapshots__/Tag.stories.tsx.snap +1 -1
- package/src/Component/Tag/tag.css +1 -4
- package/src/Component/UtilityList/Elements/UtilityList.ts +110 -0
- package/src/Component/UtilityList/UtilityList.stories.ts +72 -0
- package/src/Component/UtilityList/__snapshots__/UtilityList.stories.ts.snap +274 -0
- package/src/Component/UtilityList/utility-list.css +40 -0
- package/src/Component/UtilityList/utility-list.entry.js +1 -0
- package/src/Component/UtilityList/utility-list.twig +66 -0
- package/src/Form/Checkbox/FormCheckbox.stories.tsx +1 -3
- package/src/Form/Checkbox/FormCheckbox.tsx +4 -25
- package/src/Form/Checkbox/__snapshots__/Checkbox.stories.ts.snap +3 -3
- package/src/Form/Description/Description.stories.ts +1 -2
- package/src/Form/Description/FormStatus.stories.ts +1 -4
- package/src/Form/Description/__snapshots__/Description.stories.ts.snap +1 -1
- package/src/Form/Description/__snapshots__/FormDescription.stories.tsx.snap +1 -1
- package/src/Form/Description/__snapshots__/FormStatus.stories.ts.snap +3 -3
- package/src/Form/Form/Form.tsx +1 -3
- package/src/Form/Form/__snapshots__/Form.stories.tsx.snap +1 -1
- package/src/Form/Form/__snapshots__/FormTitle.stories.tsx.snap +1 -1
- package/src/Form/FormItem/FormItem.stories.ts +3 -9
- package/src/Form/FormItem/__snapshots__/FormItem.stories.ts.snap +18 -18
- package/src/Form/FormItem/__snapshots__/FormItem.stories.tsx.snap +1 -1
- package/src/Form/Label/FormLabel.tsx +1 -5
- package/src/Form/Label/__snapshots__/FormLabel.stories.tsx.snap +1 -1
- package/src/Form/Label/__snapshots__/Label.stories.ts.snap +3 -3
- package/src/Form/Radio/FormRadio.stories.tsx +1 -3
- package/src/Form/Radio/FormRadio.tsx +4 -25
- package/src/Form/Radio/__snapshots__/Radio.stories.ts.snap +9 -9
- package/src/Form/Search/__snapshots__/Search.stories.ts.snap +1 -1
- package/src/Form/Select/FormSelect.tsx +3 -9
- package/src/Form/Select/__snapshots__/FormSelect.stories.tsx.snap +1 -1
- package/src/Form/Select/__snapshots__/Select.stories.ts.snap +2 -2
- package/src/Form/TextInput/FormText.tsx +3 -9
- package/src/Form/TextInput/TextInput.stories.ts +1 -4
- package/src/Form/TextInput/__snapshots__/FormText.stories.tsx.snap +1 -1
- package/src/Form/TextInput/__snapshots__/InputDivider.stories.ts.snap +1 -1
- package/src/Form/TextInput/__snapshots__/TextInput.stories.ts.snap +3 -3
- package/src/Form/Textarea/FormTextarea.tsx +3 -9
- package/src/Form/Textarea/__snapshots__/FormTextarea.stories.tsx.snap +1 -1
- package/src/Form/Textarea/__snapshots__/Textarea.stories.ts.snap +2 -2
- package/src/Form/form.css +6 -14
- package/src/Introduction.mdx +1 -2
- package/src/Layout/Footer/Footer.stories.ts +1 -5
- package/src/Layout/Footer/Footer.stories.tsx +2 -3
- package/src/Layout/Footer/Footer.tsx +3 -12
- package/src/Layout/Footer/__snapshots__/Footer.stories.ts.snap +4 -4
- package/src/Layout/Footer/__snapshots__/Footer.stories.tsx.snap +1 -1
- package/src/Layout/Grid/Grid.stories.ts +40 -8
- package/src/Layout/Grid/Grid.tsx +1 -2
- package/src/Layout/Grid/GridItem.stories.ts +63 -0
- package/src/Layout/Grid/__snapshots__/Grid.stories.ts.snap +29 -4
- package/src/Layout/Grid/__snapshots__/Grid.stories.tsx.snap +1 -1
- package/src/Layout/Grid/__snapshots__/GridItem.stories.ts.snap +19 -0
- package/src/Layout/Grid/grid-item.twig +3 -9
- package/src/Layout/Grid/grid.css +1 -4
- package/src/Layout/Header/Elements/GlobalToggle.ts +9 -29
- package/src/Layout/Header/__snapshots__/Header.stories.ts.snap +25 -45
- package/src/Layout/Header/__snapshots__/Header.stories.tsx.snap +3 -3
- package/src/Layout/Header/_toggles.css +2 -2
- package/src/Layout/Header/header.twig +1 -1
- package/src/Layout/Masthead/Masthead.stories.ts +1 -4
- package/src/Layout/Masthead/__snapshots__/Masthead.stories.ts.snap +3 -3
- package/src/Layout/Page/Page.stories.tsx +2 -2
- package/src/Layout/Page/__snapshots__/Page.stories.tsx.snap +3 -3
- package/src/Layout/Page/page.css +2 -10
- package/src/Layout/Section/Background.stories.ts +14 -39
- package/src/Layout/Section/Breakouts.stories.ts +3 -0
- package/src/Layout/Section/Flow.stories.ts +3 -0
- package/src/Layout/Section/Section.stories.ts +93 -11
- package/src/Layout/Section/Section.tsx +3 -13
- package/src/Layout/Section/SectionGrid.tsx +2 -9
- package/src/Layout/Section/__snapshots__/Background.stories.ts.snap +4 -4
- package/src/Layout/Section/__snapshots__/Breakouts.stories.ts.snap +1 -1
- package/src/Layout/Section/__snapshots__/Flow.stories.ts.snap +1 -1
- package/src/Layout/Section/__snapshots__/Section.stories.ts.snap +93 -3
- package/src/Layout/Section/__snapshots__/Section.stories.tsx.snap +1 -1
- package/src/Layout/Section/__snapshots__/SectionGrid.stories.tsx.snap +1 -1
- package/src/Layout/Section/section.css +2 -5
- package/src/Layout/Section/section.twig +1 -3
- package/src/Layout/Sidebar/Sidebar.stories.ts +46 -4
- package/src/Layout/Sidebar/Sidebar.tsx +1 -3
- package/src/Layout/Sidebar/__snapshots__/Sidebar.stories.ts.snap +4 -4
- package/src/Layout/Sidebar/__snapshots__/Sidebar.stories.tsx.snap +1 -1
- package/src/Utility/Context/ImageComponent.tsx +4 -8
- package/src/Utility/Context/LinkComponent.tsx +1 -5
- package/src/Utility/Drupal/drupal.css +2 -4
- package/src/Utility/Elements/breakpoint-loader.ts +4 -10
- package/src/Utility/Elements/cookie-compliance.ts +2 -8
- package/src/Utility/Elements/disclosure-widget.ts +11 -18
- package/src/Utility/Elements/io-loader.ts +4 -6
- package/src/Utility/Elements/keyboard.ts +4 -14
- package/src/Utility/Hooks/useLocalStorage.ts +5 -18
- package/src/Utility/Hooks/useMediaQuery.ts +1 -4
- package/src/Utility/Hooks/useToggle.ts +1 -3
- package/src/Utility/global.d.ts +1 -5
- package/src/Utility/utilities.ts +20 -45
- package/src/constants.css +7 -28
- package/src/enums.ts +3 -1
- package/src/react.ts +5 -21
- package/src/tokens.js +2 -2
- package/dist/build/chunks/disclosure-widget-DVpnRsTI.js +0 -126
- package/dist/build/chunks/disclosure-widget-DVpnRsTI.js.map +0 -1
- package/dist/build/chunks/drop-menu.entry-B4TtnC50.js +0 -132
- package/dist/build/chunks/drop-menu.entry-B4TtnC50.js.map +0 -1
- package/dist/build/chunks/keyboard-rvZ4dfGF.js +0 -104
- package/dist/build/chunks/keyboard-rvZ4dfGF.js.map +0 -1
- package/dist/build/chunks/polyfills-C-B7iqDG.js.map +0 -1
- package/dist/build/chunks/utilities-DXELy_An.js.map +0 -1
- package/src/Atom/Text/TextSizes.stories.ts +0 -25
- package/src/Atom/Text/text-alignment.twig +0 -5
- package/src/Component/Accordion/twig/accordion-example.twig +0 -36
- package/src/Component/Tile/README.md +0 -3
- package/src/Component/Tile/Tile.stories.ts +0 -49
- package/src/Component/Tile/Tile.stories.tsx +0 -35
- package/src/Component/Tile/__snapshots__/Tile.stories.ts.snap +0 -57
- package/src/Component/Tile/__snapshots__/Tile.stories.tsx.snap +0 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.entry.js","sources":["../../src/Component/Tabs/Elements/Tabs.ts"],"sourcesContent":["/**\n * Tab toggle handler\n */\n\nimport DropMenu, { DropMenuEvent } from \"../../DropMenu/Elements/DropMenu\"\nimport { createElement, makeAnchor } from \"../../../Utility/utilities\"\n\ntype TabsType = {\n panel: HTMLElement\n tab: HTMLButtonElement\n button: HTMLButtonElement\n}\n\nexport default class Tabs extends HTMLElement {\n internals_: ElementInternals\n controller: AbortController\n tabs?: Map<string, TabsType>\n mq: string\n locationHash?: string\n tabFocus?: number = 0\n tabListClasses?: string\n dropTriggerClasses?: string\n dropMenuId?: string\n\n constructor() {\n super()\n this.internals_ = this.attachInternals()\n this.controller = new AbortController()\n this.mq = this.getAttribute(\"mq\") || \"(max-width: 720px)\"\n }\n\n connectedCallback(): void {\n if (!this.panels) return\n this.locationHash = window.location.hash\n\n this.tabs = new Map()\n this.panels.forEach((panel: HTMLDivElement): void => {\n const id: string = panel.id\n const name: string = panel.getAttribute(\"aria-label\")\n const tabTemplate = `<button type=\"button\" role=\"tab\" aria-controls=\"${id}\" aria-selected=\"false\">${name}</button>`\n const tab = createElement(tabTemplate) as HTMLButtonElement\n this.tabList.appendChild(tab)\n const button = createElement(tabTemplate) as HTMLButtonElement\n this.dropMenuMenu.appendChild(button)\n if (id && panel && button) {\n this.tabs.set(id, { panel, tab, button })\n }\n })\n\n const { signal }: AbortController = this.controller\n this.handleBreakpoint(this.breakpoint)\n this.breakpoint.addEventListener(\"change\", this.handleBreakpoint, {\n signal,\n })\n\n const hashEl: HTMLElement | null = this.locationHash\n ? this.querySelector(this.locationHash)\n : null\n if (hashEl) {\n this.active = hashEl.id\n } else if (!this.active) {\n this.active = this.panels[0].id\n }\n }\n\n disconnectedCallback(): void {\n this.controller.abort()\n }\n\n handleBreakpoint = ({\n matches,\n }: MediaQueryList | MediaQueryListEvent): void => {\n const { signal }: AbortController = this.controller\n this.dropMenuTrigger.toggleAttribute(\"hidden\", !matches)\n this.tabList.toggleAttribute(\"hidden\", matches)\n if (matches) {\n this.dropMenuMenu.addEventListener(\n \"drop-menu-select\",\n this.handleDropMenuSelect,\n { signal },\n )\n this.tabList.removeEventListener(\"click\", this.handleClick)\n this.tabList.removeEventListener(\"keydown\", this.handleKeydown)\n } else {\n this.tabList.addEventListener(\"click\", this.handleClick, { signal })\n this.tabList.addEventListener(\"keydown\", this.handleKeydown, { signal })\n this.dropMenuMenu.removeEventListener(\n \"drop-menu-select\",\n this.handleDropMenuSelect,\n )\n }\n }\n\n handleKeydown = ({ key }: KeyboardEvent): void => {\n if (key === \"ArrowRight\" || key === \"ArrowLeft\") {\n this.triggers[this.tabFocus].setAttribute(\"tabindex\", \"-1\")\n if (key === \"ArrowRight\") {\n this.tabFocus += 1\n // If we're at the end, go to the start\n if (this.tabFocus >= this.triggers.length) {\n this.tabFocus = 0\n }\n // Move left\n } else if (key === \"ArrowLeft\") {\n this.tabFocus -= 1\n // If we're at the start, move to the end\n if (this.tabFocus < 0) {\n this.tabFocus = this.triggers.length - 1\n }\n }\n this.triggers[this.tabFocus].setAttribute(\"tabindex\", \"0\")\n this.triggers[this.tabFocus].focus()\n }\n }\n\n handleClick = (event: MouseEvent): void => {\n const target = event.target as HTMLButtonElement\n if (!(target instanceof HTMLButtonElement)) return\n event.preventDefault()\n const id: string = target.getAttribute(\"aria-controls\")\n this.handleTabChange(id)\n }\n\n handleDropMenuSelect = (event: DropMenuEvent): void => {\n const target = event.detail.target as HTMLButtonElement\n if (!(target instanceof HTMLButtonElement)) return\n const id = target.getAttribute(\"aria-controls\")\n this.handleTabChange(id)\n }\n\n handleTabChange = (id: string): void => {\n this.active = id\n this.handleUrlParams(id)\n const { panel, tab, button } = this.tabs.get(id)\n panel.focus({ preventScroll: true })\n const newEvent: CustomEvent<{\n id: string\n tab: HTMLButtonElement\n button: HTMLButtonElement\n panel: HTMLElement\n }> = new CustomEvent(\"tab-toggle\", {\n bubbles: true,\n cancelable: true,\n detail: { id, tab, button, panel },\n })\n this.dispatchEvent(newEvent)\n }\n\n get dropMenu(): DropMenu | null {\n const existingMenu = this.querySelector(\"mx-dropmenu\")\n if (existingMenu) return existingMenu\n this.dropTriggerClasses =\n this.getAttribute(\"dropTriggerClasses\") ||\n \"mx-button mx-icon mx-icon--chevron-down mx-icon--end\"\n this.dropMenuId = this.id || makeAnchor(\"tab-drop-menu\")\n const name = `${this.dropMenuId}-target`\n const tabDropMenu = new DropMenu()\n tabDropMenu.setAttribute(\"closeOnClick\", \"true\")\n const trigger = createElement(`<button\n id=\"${name}\"\n class=\"mx-drop-menu__trigger ${this.dropTriggerClasses}\"\n popovertarget=\"${this.dropMenuId}\"\n hidden\n ></button>`)\n const menu = createElement(\n `<div\n class=\"mx-drop-menu\"\n id=\"${this.dropMenuId}\"\n aria-labelledby=\"${name}\"\n anchor=\"${name}\"\n popover\n role=\"tablist\"\n ></div>`,\n )\n tabDropMenu.append(trigger, menu)\n this.prepend(tabDropMenu)\n return tabDropMenu\n }\n\n get dropMenuMenu(): HTMLDivElement {\n return this.dropMenu.querySelector('[popover][role=\"tablist\"]')\n }\n\n get dropMenuTrigger(): HTMLButtonElement | null {\n return this.dropMenu.querySelector(\"[popovertarget]\")\n }\n\n get tabList(): HTMLDivElement {\n this.tabListClasses = this.getAttribute(\"tabListClasses\") || \"mx-tabs__list\"\n const existingTabList: HTMLDivElement = this.querySelector(\n '[role=\"tablist\"]:not([popover])',\n )\n if (existingTabList) return existingTabList\n const tabList = createElement(\n `<div class=\"${this.tabListClasses}\" role=\"tablist\" hidden></div>`,\n ) as HTMLDivElement\n this.prepend(tabList)\n return tabList\n }\n\n get triggers(): NodeListOf<HTMLButtonElement> | null {\n const triggers: NodeListOf<HTMLButtonElement> | null =\n this.tabList.querySelectorAll('[role=\"tab\"]')\n if (!triggers.length) {\n throw new Error(`${this.localName} must contain [role=\"tab\"]`)\n }\n return triggers\n }\n\n get panels(): NodeListOf<HTMLElement> | null {\n const panels: NodeListOf<HTMLElement> | null =\n this.querySelectorAll('[role=\"tabpanel\"]')\n if (!panels.length) {\n throw new Error(`${this.localName} must contain [role=\"tabpanel\"]`)\n }\n return panels\n }\n\n get active(): HTMLButtonElement {\n return this.querySelector('[aria-selected=\"true\"]')\n }\n\n get breakpoint(): MediaQueryList {\n return window.matchMedia(this.mq)\n }\n\n set active(id: string) {\n this.tabs.forEach(({ tab, panel }: TabsType, key: string): void => {\n if (key === id) {\n tab.setAttribute(\"aria-selected\", \"true\")\n tab.setAttribute(\"tab-index\", \"0\")\n panel.removeAttribute(\"inert\")\n this.dropMenuTrigger.textContent = tab.textContent\n } else {\n tab.setAttribute(\"aria-selected\", \"false\")\n tab.setAttribute(\"tab-index\", \"-1\")\n panel.setAttribute(\"inert\", \"\")\n }\n })\n }\n\n handleUrlParams = (id: string): void => {\n const urlParams: URLSearchParams = new URLSearchParams(\n window.location.search,\n )\n if (urlParams.get(\"tab\") === id) return\n urlParams.set(\"tab\", id)\n window.history.replaceState(\n {},\n \"\",\n `${window.location.pathname}?${urlParams.toString()}`,\n )\n }\n}\n\ncustomElements.define(\"mx-tabs\", Tabs)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-tabs\": Tabs\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tabs.entry.js","sources":["../../node_modules/.pnpm/@pnx-mixtape+ids-shape@0.0.22_patch_hash=69b59e7d81ff2626b88306794fb0023d59b96636c48efd2ea6e59d66859857fb/node_modules/@pnx-mixtape/ids-shape/enums.ts","../../src/Component/Tabs/Elements/Tabs.ts"],"sourcesContent":["export enum AlignmentTypes {\n START = \"start\",\n END = \"end\",\n}\n\nexport enum FormStatusTypes {\n DEFAULT = \"default\",\n VALID = \"valid\",\n INVALID = \"invalid\"\n}\n\nexport enum InputTypeTypes {\n BUTTON = \"button\",\n CHECKBOX = \"checkbox\",\n COLOR = \"color\",\n DATE = \"date\",\n DATETIMELOCAL = \"datetime-local\",\n EMAIL = \"email\",\n FILE = \"file\",\n HIDDEN = \"hidden\",\n IMAGE = \"image\",\n MONTH = \"month\",\n NUMBER = \"number\",\n PASSWORD = \"password\",\n RADIO = \"radio\",\n RANGE = \"range\",\n RESET = \"reset\",\n SEARCH = \"search\",\n SUBMIT = \"submit\",\n TEL = \"tel\",\n TEXT = \"text\",\n TIME = \"time\",\n URL = \"url\",\n WEEK = \"week\"\n}\n\nexport enum MediaAlignmentTypes {\n LEFT = \"left\",\n RIGHT = \"right\",\n CENTER = \"center\"\n}\n\nexport enum IconColourModifier {\n INFO = \"info\",\n ERROR = \"error\",\n WARNING = \"warning\",\n SUCCESS = \"success\",\n BRAND = \"brand\",\n ACCENT = \"accent\"\n}\n\nexport enum IconRotateModifier {\n NINETY = \"rotate-90\",\n ONEEIGHTY = \"rotate-180\",\n TWOSEVENTY = \"rotate-270\",\n}\n\nexport enum IconSizeModifier {\n SMALL = \"sm\",\n MEDIUM = \"md\",\n LARGE = \"lg\",\n XLARGE = \"xl\",\n}\n\nexport enum ButtonTypes {\n INPUT = \"input\",\n BUTTON = \"button\",\n LINK = \"link\",\n SUBMIT = \"submit\",\n RESET = \"reset\",\n}\n\nexport enum ButtonModifiers {\n DARK = \"dark\",\n LIGHT = \"light\",\n WHITE = \"white\",\n DESTRUCTIVE = \"destructive\",\n FULL_WIDTH = \"full-width\",\n OUTLINE = \"outline\",\n}\n\nexport enum LoadingTypes {\n LAZY = \"lazy\",\n EAGER = \"eager\"\n}\n\nexport enum AsTypes {\n DIV = \"div\",\n LI = \"li\",\n ARTICLE = \"article\",\n ASIDE = \"aside\",\n SECTION = \"section\",\n}\n\nexport enum SectionTypes {\n DIV = \"div\",\n SECTION = \"section\",\n HEADER = \"header\",\n FOOTER = \"footer\",\n ASIDE = \"aside\",\n LIST = \"ul\",\n}\n\nexport enum SectionModifiers {\n S = \"s\",\n M = \"m\",\n L = \"l\",\n XL = \"xl\",\n TOP_S = \"top-s\",\n TOP_M = \"top-m\",\n TOP_L = \"top-l\",\n TOP_XL = \"top-xl\",\n BOTTOM_S = \"bottom-s\",\n BOTTOM_M = \"bottom-m\",\n BOTTOM_L = \"bottom-l\",\n BOTTOM_XL = \"bottom-xl\",\n}\n\nexport enum HeadingTypes {\n ONE = \"h1\",\n TWO = \"h2\",\n THREE = \"h3\",\n FOUR = \"h4\",\n FIVE = \"h5\",\n}\n\nexport enum TextModifiers {\n INTRO = \"intro\",\n SMALL = \"small\",\n ONE = \"h1\",\n TWO = \"h2\",\n THREE = \"h3\",\n FOUR = \"h4\",\n FIVE = \"h5\",\n}\n\nexport enum GlobalAlertTypes {\n LIGHT = \"light\",\n CRITICAL = \"critical\",\n}\n\nexport enum InPageAlertTypes {\n INFO = \"info\",\n ERROR = \"error\",\n WARNING = \"warning\",\n SUCCESS = \"success\",\n}\n\nexport enum TagTypes {\n TEXT = \"text\",\n LINK = \"link\",\n CHECKBOX = \"checkbox\"\n}\n\nexport enum GridModifiers {\n XS_2 = \"xs-2\",\n SM_2 = \"sm-2\",\n MD_2 = \"md-2\",\n LG_2 = \"lg-2\",\n XL_2 = \"xl-2\",\n MD_3 = \"md-3\",\n LG_3 = \"lg-3\",\n XL_3 = \"xl-3\",\n MD_4 = \"md-4\",\n LG_4 = \"lg-4\",\n XL_4 = \"xl-4\",\n}\n\nexport enum CardModifier {\n DARK = \"dark\",\n LIGHT = \"light\",\n SUPPLEMENTARY = \"supplementary\"\n}\n\nexport enum HeroBannerModifier {\n DARK = \"dark\",\n LIGHT = \"light\",\n WHITE = \"white\",\n GREY = \"off-white\"\n}\n\nexport enum StepsModifier {\n DARK = \"dark\",\n LIGHT = \"light\",\n SUPPLEMENTARY = \"supplementary\"\n}\n\nexport enum ListItemModifiers {\n BLOCK = \"block\",\n REVERSE = \"reversed\"\n}\n\nexport enum MastheadModifier {\n DARK = \"dark\",\n LIGHT = \"light\",\n}\n\nexport enum FooterModifier {\n DARK = \"dark\",\n LIGHT = \"light\",\n}\n\nexport enum PopoverPlacementModifier {\n TOP = \"top\",\n TOP_START = \"top-start\",\n TOP_END = \"top-end\",\n RIGHT = \"right\",\n RIGHT_START = \"right-start\",\n RIGHT_END = \"right-end\",\n LEFT = \"left\",\n LEFT_START = \"left-start\",\n LEFT_END = \"left-end\",\n BOTTOM = \"bottom\",\n BOTTOM_START = \"bottom-start\",\n BOTTOM_END = \"bottom-end\",\n TOP_CENTER = \"top-center\",\n LEFT_CENTER = \"left-center\",\n RIGHT_CENTER = \"right-center\",\n BOTTOM_CENTER = \"right-center\",\n}\n","/**\n * Tab toggle handler\n */\n\nimport DropMenu, { DropMenuEvent } from \"../../DropMenu/Elements/DropMenu\"\nimport { createElement, makeAnchor } from \"../../../Utility/utilities\"\nimport { PopoverPlacementModifier } from \"@pnx-mixtape/ids-shape\"\n\ntype TabsType = {\n panel: HTMLElement\n tab: HTMLButtonElement\n button: HTMLButtonElement\n}\n\nexport default class Tabs extends HTMLElement {\n internals_: ElementInternals\n controller: AbortController\n tabs?: Map<string, TabsType>\n mq: string\n locationHash?: string\n tabFocus?: number = 0\n tabListClasses?: string\n dropTriggerClasses?: string\n dropMenuId?: string\n\n constructor() {\n super()\n this.internals_ = this.attachInternals()\n this.controller = new AbortController()\n this.mq = this.getAttribute(\"mq\") || \"(max-width: 720px)\"\n }\n\n connectedCallback(): void {\n if (!this.panels) return\n this.locationHash = window.location.hash\n\n this.tabs = new Map()\n this.panels.forEach((panel: HTMLDivElement): void => {\n const id: string = panel.id\n const name: string = panel.getAttribute(\"aria-label\")\n const tabTemplate = `<button type=\"button\" role=\"tab\" aria-controls=\"${id}\" aria-selected=\"false\">${name}</button>`\n const tab = createElement(tabTemplate) as HTMLButtonElement\n this.tabList.appendChild(tab)\n const button = createElement(tabTemplate) as HTMLButtonElement\n this.dropMenuMenu.appendChild(button)\n if (id && panel && button) {\n this.tabs.set(id, { panel, tab, button })\n }\n })\n\n const { signal }: AbortController = this.controller\n this.handleBreakpoint(this.breakpoint)\n this.breakpoint.addEventListener(\"change\", this.handleBreakpoint, {\n signal,\n })\n\n const hashEl: HTMLElement | null = this.locationHash\n ? this.querySelector(this.locationHash)\n : null\n if (hashEl) {\n this.active = hashEl.id\n } else if (!this.active) {\n this.active = this.panels[0].id\n }\n }\n\n disconnectedCallback(): void {\n this.controller.abort()\n }\n\n handleBreakpoint = ({ matches }: MediaQueryList | MediaQueryListEvent): void => {\n const { signal }: AbortController = this.controller\n this.dropMenuTrigger.toggleAttribute(\"hidden\", !matches)\n this.tabList.toggleAttribute(\"hidden\", matches)\n if (matches) {\n this.dropMenuMenu.addEventListener(\"drop-menu-select\", this.handleDropMenuSelect, { signal })\n this.tabList.removeEventListener(\"click\", this.handleClick)\n this.tabList.removeEventListener(\"keydown\", this.handleKeydown)\n } else {\n this.tabList.addEventListener(\"click\", this.handleClick, { signal })\n this.tabList.addEventListener(\"keydown\", this.handleKeydown, { signal })\n this.dropMenuMenu.removeEventListener(\"drop-menu-select\", this.handleDropMenuSelect)\n }\n }\n\n handleKeydown = ({ key }: KeyboardEvent): void => {\n if (key === \"ArrowRight\" || key === \"ArrowLeft\") {\n this.triggers[this.tabFocus].setAttribute(\"tabindex\", \"-1\")\n if (key === \"ArrowRight\") {\n this.tabFocus += 1\n // If we're at the end, go to the start\n if (this.tabFocus >= this.triggers.length) {\n this.tabFocus = 0\n }\n // Move left\n } else if (key === \"ArrowLeft\") {\n this.tabFocus -= 1\n // If we're at the start, move to the end\n if (this.tabFocus < 0) {\n this.tabFocus = this.triggers.length - 1\n }\n }\n this.triggers[this.tabFocus].setAttribute(\"tabindex\", \"0\")\n this.triggers[this.tabFocus].focus()\n }\n }\n\n handleClick = (event: MouseEvent): void => {\n const target = event.target as HTMLButtonElement\n if (!(target instanceof HTMLButtonElement)) return\n event.preventDefault()\n const id: string = target.getAttribute(\"aria-controls\")\n this.handleTabChange(id)\n }\n\n handleDropMenuSelect = (event: DropMenuEvent): void => {\n const target = event.detail.target as HTMLButtonElement\n if (!(target instanceof HTMLButtonElement)) return\n const id = target.getAttribute(\"aria-controls\")\n this.handleTabChange(id)\n }\n\n handleTabChange = (id: string): void => {\n this.active = id\n this.handleUrlParams(id)\n const { panel, tab, button } = this.tabs.get(id)\n panel.focus({ preventScroll: true })\n const newEvent: CustomEvent<{\n id: string\n tab: HTMLButtonElement\n button: HTMLButtonElement\n panel: HTMLElement\n }> = new CustomEvent(\"tab-toggle\", {\n bubbles: true,\n cancelable: true,\n detail: { id, tab, button, panel },\n })\n this.dispatchEvent(newEvent)\n }\n\n get dropMenu(): DropMenu | null {\n const existingMenu = this.querySelector(\"mx-dropmenu\")\n if (existingMenu) return existingMenu\n this.dropTriggerClasses =\n this.getAttribute(\"dropTriggerClasses\") ||\n \"mx-button mx-icon mx-icon--chevron-down mx-icon--end\"\n this.dropMenuId = this.id || makeAnchor(\"tab-drop-menu\")\n const name = `${this.dropMenuId}-target`\n const tabDropMenu = new DropMenu()\n tabDropMenu.setAttribute(\"closeOnClick\", \"true\")\n const trigger = createElement(`<button\n id=\"${name}\"\n class=\"mx-popover__trigger ${this.dropTriggerClasses}\"\n popovertarget=\"${this.dropMenuId}\"\n style=\"anchor-name: --${this.dropMenuId}\"\n hidden\n ></button>`)\n const menu = createElement(\n `<div\n class=\"mx-popover mx-drop-menu\"\n id=\"${this.dropMenuId}\"\n aria-describedby=\"${name}\"\n style=\"position-anchor: --${this.dropMenuId}\"\n data-placement=\"${PopoverPlacementModifier.BOTTOM_START}\"\n popover\n role=\"tablist\"\n ></div>`,\n )\n tabDropMenu.append(trigger, menu)\n this.prepend(tabDropMenu)\n return tabDropMenu\n }\n\n get dropMenuMenu(): HTMLDivElement {\n return this.dropMenu.querySelector('[popover][role=\"tablist\"]')\n }\n\n get dropMenuTrigger(): HTMLButtonElement | null {\n return this.dropMenu.querySelector(\"[popovertarget]\")\n }\n\n get tabList(): HTMLDivElement {\n this.tabListClasses = this.getAttribute(\"tabListClasses\") || \"mx-tabs__list\"\n const existingTabList: HTMLDivElement = this.querySelector('[role=\"tablist\"]:not([popover])')\n if (existingTabList) return existingTabList\n const tabList = createElement(\n `<div class=\"${this.tabListClasses}\" role=\"tablist\" hidden></div>`,\n ) as HTMLDivElement\n this.prepend(tabList)\n return tabList\n }\n\n get triggers(): NodeListOf<HTMLButtonElement> | null {\n const triggers: NodeListOf<HTMLButtonElement> | null =\n this.tabList.querySelectorAll('[role=\"tab\"]')\n if (!triggers.length) {\n throw new Error(`${this.localName} must contain [role=\"tab\"]`)\n }\n return triggers\n }\n\n get panels(): NodeListOf<HTMLElement> | null {\n const panels: NodeListOf<HTMLElement> | null = this.querySelectorAll(\"[data-tab]\")\n if (!panels.length) {\n throw new Error(`${this.localName} must contain [data-tab]`)\n }\n panels.forEach(panel => {\n panel.setAttribute(\"role\", \"tabpanel\")\n panel.setAttribute(\"tabindex\", \"0\")\n panel.setAttribute(\"aria-label\", panel.getAttribute(\"data-tab\"))\n })\n return panels\n }\n\n get active(): HTMLButtonElement {\n return this.querySelector('[aria-selected=\"true\"]')\n }\n\n get breakpoint(): MediaQueryList {\n return window.matchMedia(this.mq)\n }\n\n set active(id: string) {\n this.tabs.forEach(({ tab, panel }: TabsType, key: string): void => {\n if (key === id) {\n tab.setAttribute(\"aria-selected\", \"true\")\n tab.setAttribute(\"tab-index\", \"0\")\n panel.removeAttribute(\"inert\")\n this.dropMenuTrigger.textContent = tab.textContent\n } else {\n tab.setAttribute(\"aria-selected\", \"false\")\n tab.setAttribute(\"tab-index\", \"-1\")\n panel.setAttribute(\"inert\", \"\")\n }\n })\n }\n\n handleUrlParams = (id: string): void => {\n const urlParams: URLSearchParams = new URLSearchParams(window.location.search)\n if (urlParams.get(\"tab\") === id) return\n urlParams.set(\"tab\", id)\n window.history.replaceState({}, \"\", `${window.location.pathname}?${urlParams.toString()}`)\n }\n}\n\nif (!customElements.get(\"mx-tabs\")) customElements.define(\"mx-tabs\", Tabs)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-tabs\": Tabs\n }\n}\n"],"names":["PopoverPlacementModifier"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility List
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
@layer design-system.defaults {
|
|
6
|
+
mx-utility-list {
|
|
7
|
+
display: block;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
mx-utility-list:not(:defined) button:not([popovertarget]) {
|
|
11
|
+
pointer-events: none;
|
|
12
|
+
opacity: 0.7;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@layer design-system.components {
|
|
17
|
+
.mx-utility-list ul {
|
|
18
|
+
gap: var(--nav-gap, var(--spacing-xs));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.mx-utility-list:where(.mx-nav--inline) {
|
|
22
|
+
gap: 0;
|
|
23
|
+
gap: var(--inline-nav-gap, 0);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.mx-utility-list__share {
|
|
27
|
+
--utility-link-color: var(--colour-link);
|
|
28
|
+
|
|
29
|
+
min-inline-size: -moz-fit-content;
|
|
30
|
+
|
|
31
|
+
min-inline-size: fit-content;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.mx-utility-list__share a[href] {
|
|
35
|
+
--link-colour: var(--utility-link-color);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.mx-utility-list__share .mx-social-share {
|
|
39
|
+
justify-content: center;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWxpdHktbGlzdC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0VBRUU7O0FBRUY7RUFDRTtJQUNFLGNBQWM7RUFNaEI7O0lBSkU7TUFDRSxvQkFBb0I7TUFDcEIsWUFBWTtJQUNkO0FBRUo7O0FBRUE7SUFFSTtNQUNFLHNDQUFzQztJQUN4Qzs7SUFFQTtNQUNFLE1BQTZCO01BQTdCLDZCQUE2QjtJQUMvQjs7RUFHRjtJQUNFLHdDQUF3Qzs7SUFFeEMsaUNBQTRCOztJQUE1Qiw0QkFBNEI7RUFTOUI7O0lBUEU7TUFDRSx3Q0FBd0M7SUFDMUM7O0lBRUE7TUFDRSx1QkFBdUI7SUFDekI7QUFFSiIsImZpbGUiOiJ1dGlsaXR5LWxpc3QuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVdGlsaXR5IExpc3RcbiAqL1xuXG5AbGF5ZXIgZGVzaWduLXN5c3RlbS5kZWZhdWx0cyB7XG4gIG14LXV0aWxpdHktbGlzdCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAmOm5vdCg6ZGVmaW5lZCkgYnV0dG9uOm5vdChbcG9wb3ZlcnRhcmdldF0pIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cbiAgfVxufVxuXG5AbGF5ZXIgZGVzaWduLXN5c3RlbS5jb21wb25lbnRzIHtcbiAgLm14LXV0aWxpdHktbGlzdCB7XG4gICAgJiB1bCB7XG4gICAgICBnYXA6IHZhcigtLW5hdi1nYXAsIHZhcigtLXNwYWNpbmcteHMpKTtcbiAgICB9XG5cbiAgICAmOndoZXJlKC5teC1uYXYtLWlubGluZSkge1xuICAgICAgZ2FwOiB2YXIoLS1pbmxpbmUtbmF2LWdhcCwgMCk7XG4gICAgfVxuICB9XG5cbiAgLm14LXV0aWxpdHktbGlzdF9fc2hhcmUge1xuICAgIC0tdXRpbGl0eS1saW5rLWNvbG9yOiB2YXIoLS1jb2xvdXItbGluayk7XG5cbiAgICBtaW4taW5saW5lLXNpemU6IGZpdC1jb250ZW50O1xuXG4gICAgJiBhW2hyZWZdIHtcbiAgICAgIC0tbGluay1jb2xvdXI6IHZhcigtLXV0aWxpdHktbGluay1jb2xvcik7XG4gICAgfVxuXG4gICAgJiAubXgtc29jaWFsLXNoYXJlIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIH1cbiAgfVxufVxuIl19 */
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
class UtilityList extends HTMLElement {
|
|
2
|
+
internals_;
|
|
3
|
+
controller;
|
|
4
|
+
copyOriginalText;
|
|
5
|
+
copyOriginalIcon;
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
this.internals_ = this.attachInternals();
|
|
9
|
+
this.controller = new AbortController();
|
|
10
|
+
this.copyOriginalIcon = "mx-icon--link";
|
|
11
|
+
}
|
|
12
|
+
connectedCallback() {
|
|
13
|
+
const { signal } = this.controller;
|
|
14
|
+
this.copyBtn?.addEventListener(
|
|
15
|
+
"click",
|
|
16
|
+
() => {
|
|
17
|
+
void this.handleCopy();
|
|
18
|
+
},
|
|
19
|
+
{ signal }
|
|
20
|
+
);
|
|
21
|
+
this.printBtn?.addEventListener(
|
|
22
|
+
"click",
|
|
23
|
+
() => {
|
|
24
|
+
this.handlePrint();
|
|
25
|
+
},
|
|
26
|
+
{ signal }
|
|
27
|
+
);
|
|
28
|
+
this.pdfBtn?.addEventListener(
|
|
29
|
+
"click",
|
|
30
|
+
() => {
|
|
31
|
+
this.handlePDF();
|
|
32
|
+
},
|
|
33
|
+
{ signal }
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
disconnectedCallback() {
|
|
37
|
+
this.controller.abort();
|
|
38
|
+
}
|
|
39
|
+
handleCopy = async () => {
|
|
40
|
+
try {
|
|
41
|
+
await navigator.clipboard.write([
|
|
42
|
+
new ClipboardItem({
|
|
43
|
+
["text/plain"]: window.location.href
|
|
44
|
+
})
|
|
45
|
+
]).then(() => {
|
|
46
|
+
this.copyLabel.textContent = "Copied!";
|
|
47
|
+
this.copyIcon.classList.replace(this.copyOriginalIcon, "mx-icon--tick");
|
|
48
|
+
setTimeout(() => {
|
|
49
|
+
this.copyLabel.textContent = this.copyOriginalText;
|
|
50
|
+
this.copyIcon.classList.replace("mx-icon--tick", this.copyOriginalIcon);
|
|
51
|
+
}, 3e3);
|
|
52
|
+
});
|
|
53
|
+
} catch {
|
|
54
|
+
console.error("Could not copy the url to clipboard");
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
handlePrint = () => window.print();
|
|
58
|
+
// Defaults to Print dialog, to allow Save to PDF.
|
|
59
|
+
// if this needs to be changed, please extend the class.
|
|
60
|
+
handlePDF = () => window.print();
|
|
61
|
+
get copyBtn() {
|
|
62
|
+
return this.querySelector("button[data-copy]");
|
|
63
|
+
}
|
|
64
|
+
get copyLabel() {
|
|
65
|
+
const el = this.copyBtn.querySelector("span[data-copy-label]");
|
|
66
|
+
this.copyOriginalText = el?.textContent ?? void 0;
|
|
67
|
+
return el;
|
|
68
|
+
}
|
|
69
|
+
get copyIcon() {
|
|
70
|
+
return this.copyBtn.querySelector(".mx-icon");
|
|
71
|
+
}
|
|
72
|
+
get printBtn() {
|
|
73
|
+
return this.querySelector("button[data-print]");
|
|
74
|
+
}
|
|
75
|
+
get pdfBtn() {
|
|
76
|
+
return this.querySelector("button[data-pdf]");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (!customElements.get("mx-utility-list")) customElements.define("mx-utility-list", UtilityList);
|
|
80
|
+
//# sourceMappingURL=utility-list.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utility-list.entry.js","sources":["../../src/Component/UtilityList/Elements/UtilityList.ts"],"sourcesContent":["/**\n * UtilityList\n * @file Support copy and print functions.\n */\n\nexport default class UtilityList extends HTMLElement {\n internals_: ElementInternals\n controller: AbortController\n copyOriginalText?: string\n copyOriginalIcon?: string\n\n constructor() {\n super()\n this.internals_ = this.attachInternals()\n this.controller = new AbortController()\n this.copyOriginalIcon = \"mx-icon--link\"\n }\n\n connectedCallback(): void {\n const { signal }: AbortController = this.controller\n\n // Handle copy.\n this.copyBtn?.addEventListener(\n \"click\",\n (): void => {\n void this.handleCopy()\n },\n { signal },\n )\n\n // Handle print.\n this.printBtn?.addEventListener(\n \"click\",\n (): void => {\n this.handlePrint()\n },\n { signal },\n )\n\n // Handle PDF.\n this.pdfBtn?.addEventListener(\n \"click\",\n (): void => {\n this.handlePDF()\n },\n { signal },\n )\n }\n\n disconnectedCallback(): void {\n this.controller.abort()\n }\n\n handleCopy = async (): Promise<void> => {\n try {\n await navigator.clipboard\n .write([\n new ClipboardItem({\n [\"text/plain\"]: window.location.href,\n }),\n ])\n .then(() => {\n this.copyLabel.textContent = \"Copied!\"\n this.copyIcon.classList.replace(this.copyOriginalIcon, \"mx-icon--tick\")\n setTimeout(() => {\n this.copyLabel.textContent = this.copyOriginalText\n this.copyIcon.classList.replace(\"mx-icon--tick\", this.copyOriginalIcon)\n }, 3000)\n })\n } catch {\n console.error(\"Could not copy the url to clipboard\")\n }\n }\n\n handlePrint = (): void => window.print()\n\n // Defaults to Print dialog, to allow Save to PDF.\n // if this needs to be changed, please extend the class.\n handlePDF = (): void => window.print()\n\n get copyBtn(): HTMLButtonElement | null {\n return this.querySelector(\"button[data-copy]\")\n }\n\n get copyLabel(): HTMLSpanElement | null {\n const el: HTMLSpanElement = this.copyBtn.querySelector(\"span[data-copy-label]\")\n this.copyOriginalText = el?.textContent ?? undefined\n return el\n }\n\n get copyIcon(): HTMLSpanElement | null {\n return this.copyBtn.querySelector(\".mx-icon\")\n }\n\n get printBtn(): HTMLButtonElement | null {\n return this.querySelector(\"button[data-print]\")\n }\n\n get pdfBtn(): HTMLButtonElement | null {\n return this.querySelector(\"button[data-pdf]\")\n }\n}\n\nif (!customElements.get(\"mx-utility-list\")) customElements.define(\"mx-utility-list\", UtilityList)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-utility-list\": UtilityList\n }\n}\n"],"names":[],"mappings":"AAKA,MAAqB,oBAAoB,YAAY;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,cAAc;AACZ,UAAA;AACA,SAAK,aAAa,KAAK,gBAAA;AACvB,SAAK,aAAa,IAAI,gBAAA;AACtB,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,oBAA0B;AACxB,UAAM,EAAE,WAA4B,KAAK;AAGzC,SAAK,SAAS;AAAA,MACZ;AAAA,MACA,MAAY;AACV,aAAK,KAAK,WAAA;AAAA,MACZ;AAAA,MACA,EAAE,OAAA;AAAA,IAAO;AAIX,SAAK,UAAU;AAAA,MACb;AAAA,MACA,MAAY;AACV,aAAK,YAAA;AAAA,MACP;AAAA,MACA,EAAE,OAAA;AAAA,IAAO;AAIX,SAAK,QAAQ;AAAA,MACX;AAAA,MACA,MAAY;AACV,aAAK,UAAA;AAAA,MACP;AAAA,MACA,EAAE,OAAA;AAAA,IAAO;AAAA,EAEb;AAAA,EAEA,uBAA6B;AAC3B,SAAK,WAAW,MAAA;AAAA,EAClB;AAAA,EAEA,aAAa,YAA2B;AACtC,QAAI;AACF,YAAM,UAAU,UACb,MAAM;AAAA,QACL,IAAI,cAAc;AAAA,UAChB,CAAC,YAAY,GAAG,OAAO,SAAS;AAAA,QAAA,CACjC;AAAA,MAAA,CACF,EACA,KAAK,MAAM;AACV,aAAK,UAAU,cAAc;AAC7B,aAAK,SAAS,UAAU,QAAQ,KAAK,kBAAkB,eAAe;AACtE,mBAAW,MAAM;AACf,eAAK,UAAU,cAAc,KAAK;AAClC,eAAK,SAAS,UAAU,QAAQ,iBAAiB,KAAK,gBAAgB;AAAA,QACxE,GAAG,GAAI;AAAA,MACT,CAAC;AAAA,IACL,QAAQ;AACN,cAAQ,MAAM,qCAAqC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,cAAc,MAAY,OAAO,MAAA;AAAA;AAAA;AAAA,EAIjC,YAAY,MAAY,OAAO,MAAA;AAAA,EAE/B,IAAI,UAAoC;AACtC,WAAO,KAAK,cAAc,mBAAmB;AAAA,EAC/C;AAAA,EAEA,IAAI,YAAoC;AACtC,UAAM,KAAsB,KAAK,QAAQ,cAAc,uBAAuB;AAC9E,SAAK,mBAAmB,IAAI,eAAe;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAmC;AACrC,WAAO,KAAK,QAAQ,cAAc,UAAU;AAAA,EAC9C;AAAA,EAEA,IAAI,WAAqC;AACvC,WAAO,KAAK,cAAc,oBAAoB;AAAA,EAChD;AAAA,EAEA,IAAI,SAAmC;AACrC,WAAO,KAAK,cAAc,kBAAkB;AAAA,EAC9C;AACF;AAEA,IAAI,CAAC,eAAe,IAAI,iBAAiB,EAAG,gBAAe,OAAO,mBAAmB,WAAW;"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pnx-mixtape/mxds",
|
|
3
3
|
"description": "The Mixtape Design System",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.23",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@floating-ui/dom": "^1.7.3",
|
|
7
7
|
"@oddbird/popover-polyfill": "^0.6.1",
|
|
@@ -20,14 +20,13 @@
|
|
|
20
20
|
"@csstools/postcss-global-data": "^3.0.0",
|
|
21
21
|
"@csstools/stylelint-formatter-github": "^1.0.0",
|
|
22
22
|
"@rollup/plugin-terser": "^0.4.4",
|
|
23
|
-
"@storybook/addon-a11y": "^
|
|
24
|
-
"@storybook/addon-docs": "^
|
|
25
|
-
"@storybook/addon-links": "^
|
|
26
|
-
"@storybook/html": "^
|
|
27
|
-
"@storybook/
|
|
28
|
-
"@storybook/react": "^
|
|
29
|
-
"@storybook/
|
|
30
|
-
"@storybook/test-runner": "^0.23.0",
|
|
23
|
+
"@storybook/addon-a11y": "^10.0.7",
|
|
24
|
+
"@storybook/addon-docs": "^10.0.7",
|
|
25
|
+
"@storybook/addon-links": "^10.0.7",
|
|
26
|
+
"@storybook/html-vite": "^10.0.7",
|
|
27
|
+
"@storybook/react": "^10.0.7",
|
|
28
|
+
"@storybook/react-vite": "^10.0.7",
|
|
29
|
+
"@storybook/test-runner": "^0.24.1",
|
|
31
30
|
"@svgr/rollup": "^8.1.0",
|
|
32
31
|
"@testing-library/dom": "^10.4.1",
|
|
33
32
|
"@testing-library/jest-dom": "^6.7.0",
|
|
@@ -55,7 +54,7 @@
|
|
|
55
54
|
"postcss-preset-env": "^10.2.4",
|
|
56
55
|
"postcss-pxtorem": "^6.1.0",
|
|
57
56
|
"prettier": "^3.6.2",
|
|
58
|
-
"storybook": "^
|
|
57
|
+
"storybook": "^10.0.7",
|
|
59
58
|
"stylelint": "^16.23.1",
|
|
60
59
|
"stylelint-config-standard": "^39.0.0",
|
|
61
60
|
"stylelint-use-logical-spec": "^5.0.1",
|
|
@@ -7,34 +7,51 @@ type BackgroundsType = {
|
|
|
7
7
|
modifier?: BackgroundStyles
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Background colours also set appropriate foreground colours to ensure contrast is met.
|
|
12
|
+
*/
|
|
10
13
|
const meta: Meta<BackgroundsType> = {
|
|
11
14
|
title: "Atom/Backgrounds",
|
|
12
15
|
tags: ["autodocs"],
|
|
13
16
|
component: Component,
|
|
14
17
|
argTypes: {
|
|
15
|
-
modifier: {
|
|
18
|
+
modifier: {
|
|
19
|
+
description: "Define the colour the use.",
|
|
20
|
+
options: Object.values(BackgroundStyles),
|
|
21
|
+
control: "select",
|
|
22
|
+
table: {
|
|
23
|
+
type: { summary: "enum" },
|
|
24
|
+
},
|
|
25
|
+
},
|
|
16
26
|
},
|
|
17
27
|
}
|
|
18
28
|
|
|
19
29
|
export default meta
|
|
20
30
|
type Story = StoryObj<BackgroundsType>
|
|
21
31
|
|
|
22
|
-
export const Backgrounds: Story = {
|
|
23
|
-
args: {},
|
|
24
|
-
}
|
|
32
|
+
export const Backgrounds: Story = {}
|
|
25
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Nested elements can have their background reset to the default using the `.mx-background--reset` class.
|
|
36
|
+
*/
|
|
26
37
|
export const Alt: Story = {
|
|
27
38
|
args: {
|
|
28
39
|
modifier: BackgroundStyles.ALT,
|
|
29
40
|
},
|
|
30
41
|
}
|
|
31
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Dark background set the colour scheme to `dark` to ensure foreground text meets contrast requirements.
|
|
45
|
+
*/
|
|
32
46
|
export const Reverse: Story = {
|
|
33
47
|
args: {
|
|
34
48
|
modifier: BackgroundStyles.REVERSE,
|
|
35
49
|
},
|
|
36
50
|
}
|
|
37
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Link and line colour can also be customised per background.
|
|
54
|
+
*/
|
|
38
55
|
export const Primary: Story = {
|
|
39
56
|
args: {
|
|
40
57
|
modifier: BackgroundStyles.PRIMARY,
|
|
@@ -42,8 +42,7 @@
|
|
|
42
42
|
position: absolute;
|
|
43
43
|
inline-size: 100%;
|
|
44
44
|
min-block-size: 100%;
|
|
45
|
-
filter: brightness(var(--bg-img-brightness, 1))
|
|
46
|
-
saturate(var(--bg-img-saturate, 1.25))
|
|
45
|
+
filter: brightness(var(--bg-img-brightness, 1)) saturate(var(--bg-img-saturate, 1.25))
|
|
47
46
|
opacity(var(--bg-img-opacity, 0.5));
|
|
48
47
|
}
|
|
49
48
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
@layer design-system.defaults {
|
|
2
2
|
blockquote {
|
|
3
3
|
padding-inline-start: var(--line-gap, var(--gap));
|
|
4
|
-
border-inline-start: var(--line-width, 6px) solid
|
|
5
|
-
var(--line-colour, var(--colour-border));
|
|
4
|
+
border-inline-start: var(--line-width, 6px) solid var(--line-colour, var(--colour-border));
|
|
6
5
|
}
|
|
7
6
|
}
|
|
@@ -2,13 +2,12 @@ import { Meta, StoryObj } from "@storybook/html-vite"
|
|
|
2
2
|
import Component from "./button.twig"
|
|
3
3
|
import Icon from "../Icon/icon.twig"
|
|
4
4
|
import "./button.css"
|
|
5
|
-
import {
|
|
6
|
-
Button as ButtonType,
|
|
7
|
-
ButtonModifiers,
|
|
8
|
-
ButtonTypes,
|
|
9
|
-
} from "@pnx-mixtape/ids-shape"
|
|
5
|
+
import { Button as ButtonType, ButtonModifiers, ButtonTypes } from "@pnx-mixtape/ids-shape"
|
|
10
6
|
import { Icons } from "../../enums"
|
|
11
7
|
|
|
8
|
+
/**
|
|
9
|
+
* A button atom with optional icon.
|
|
10
|
+
*/
|
|
12
11
|
const meta: Meta<ButtonType> = {
|
|
13
12
|
title: "Atom/Button",
|
|
14
13
|
tags: ["autodocs", "ids-mvp"],
|
|
@@ -18,40 +17,124 @@ const meta: Meta<ButtonType> = {
|
|
|
18
17
|
as: ButtonTypes.BUTTON,
|
|
19
18
|
},
|
|
20
19
|
argTypes: {
|
|
20
|
+
title: {
|
|
21
|
+
description: "The button label",
|
|
22
|
+
type: {
|
|
23
|
+
name: "string",
|
|
24
|
+
required: true,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
as: {
|
|
28
|
+
description: "Choose the type of button, or use a link instead.",
|
|
29
|
+
options: Object.values(ButtonTypes),
|
|
30
|
+
control: "select",
|
|
31
|
+
table: {
|
|
32
|
+
defaultValue: { summary: ButtonTypes.BUTTON },
|
|
33
|
+
type: { summary: "enum" },
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
href: {
|
|
37
|
+
description: "When using a Link, set the `href` value.",
|
|
38
|
+
type: "string",
|
|
39
|
+
if: { arg: "as", eq: ButtonTypes.LINK },
|
|
40
|
+
},
|
|
21
41
|
modifiers: {
|
|
42
|
+
description:
|
|
43
|
+
"Define the style of the button. **outline** and **full-width** can be used with the other colour options.",
|
|
22
44
|
options: Object.values(ButtonModifiers),
|
|
23
45
|
control: "multi-select",
|
|
46
|
+
table: {
|
|
47
|
+
type: { summary: "enum" },
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
disabled: {
|
|
51
|
+
description: "Add the `[disabled]` attribute to the button.",
|
|
52
|
+
type: "boolean",
|
|
53
|
+
table: { defaultValue: { summary: "false" } },
|
|
54
|
+
if: { arg: "as", neq: ButtonTypes.LINK },
|
|
55
|
+
},
|
|
56
|
+
iconStart: {
|
|
57
|
+
description:
|
|
58
|
+
"An [Icon](/?path=/docs/atom-icon--docs) object, to display **before** the title.",
|
|
59
|
+
table: {
|
|
60
|
+
subcategory: "Icon",
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
iconEnd: {
|
|
64
|
+
description:
|
|
65
|
+
"An [Icon](/?path=/docs/atom-icon--docs) object, to display **after** the title.",
|
|
66
|
+
table: {
|
|
67
|
+
subcategory: "Icon",
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
iconOnly: {
|
|
71
|
+
description:
|
|
72
|
+
"When an icon is added, visually hide the button text so that only the icon is displayed.",
|
|
73
|
+
control: "boolean",
|
|
74
|
+
table: {
|
|
75
|
+
defaultValue: { summary: "false" },
|
|
76
|
+
subcategory: "Icon",
|
|
77
|
+
},
|
|
24
78
|
},
|
|
25
|
-
as: { options: Object.values(ButtonTypes), control: "select" },
|
|
26
|
-
title: { control: "text" },
|
|
27
|
-
href: { control: "text" },
|
|
28
|
-
disabled: { control: "boolean" },
|
|
29
|
-
// @ts-expect-error The controls follow the shape
|
|
30
|
-
"iconStart.icon": { options: Object.values(Icons), control: "select" },
|
|
31
|
-
"iconEnd.icon": { options: Object.values(Icons), control: "select" },
|
|
32
|
-
iconOnly: { control: "boolean" },
|
|
33
79
|
},
|
|
34
80
|
}
|
|
35
81
|
|
|
36
82
|
export default meta
|
|
37
83
|
type Story = StoryObj<ButtonType>
|
|
38
84
|
|
|
39
|
-
export const Button: Story = {
|
|
40
|
-
args: {},
|
|
41
|
-
}
|
|
85
|
+
export const Button: Story = {}
|
|
42
86
|
|
|
43
|
-
|
|
87
|
+
/**
|
|
88
|
+
* Primary style uses the **dark** modifier.
|
|
89
|
+
*/
|
|
90
|
+
export const Dark: Story = {
|
|
44
91
|
args: {
|
|
45
92
|
modifiers: [ButtonModifiers.DARK],
|
|
46
93
|
},
|
|
47
94
|
}
|
|
48
95
|
|
|
49
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Outline can be combined with the **dark** or **destructive** modifier.
|
|
98
|
+
*/
|
|
99
|
+
export const Outline: Story = {
|
|
100
|
+
args: {
|
|
101
|
+
modifiers: [ButtonModifiers.DARK, ButtonModifiers.OUTLINE],
|
|
102
|
+
},
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Buttons can look more like hyperlinks by using the **light** modifier.
|
|
107
|
+
*/
|
|
108
|
+
export const Light: Story = {
|
|
50
109
|
args: {
|
|
51
110
|
modifiers: [ButtonModifiers.LIGHT],
|
|
52
111
|
},
|
|
53
112
|
}
|
|
54
113
|
|
|
114
|
+
/**
|
|
115
|
+
* Destructive style should be reserved for cancel or delete buttons.
|
|
116
|
+
*/
|
|
117
|
+
export const Destructive: Story = {
|
|
118
|
+
args: {
|
|
119
|
+
modifiers: [ButtonModifiers.DESTRUCTIVE],
|
|
120
|
+
},
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* White style is useful when on a dark background or overlaying an image.
|
|
125
|
+
*/
|
|
126
|
+
export const White: Story = {
|
|
127
|
+
args: {
|
|
128
|
+
modifiers: [ButtonModifiers.WHITE],
|
|
129
|
+
},
|
|
130
|
+
globals: {
|
|
131
|
+
background: "mx-background--alt",
|
|
132
|
+
},
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Button's can be a hyperlink element, though this usage should be limited (or combined with the **light** modifier).
|
|
137
|
+
*/
|
|
55
138
|
export const Link: Story = {
|
|
56
139
|
args: {
|
|
57
140
|
as: ButtonTypes.LINK,
|
|
@@ -59,10 +142,36 @@ export const Link: Story = {
|
|
|
59
142
|
},
|
|
60
143
|
}
|
|
61
144
|
|
|
62
|
-
|
|
145
|
+
/**
|
|
146
|
+
* Icons can be added after the button text.
|
|
147
|
+
*/
|
|
148
|
+
export const IconEnd: Story = {
|
|
63
149
|
args: {
|
|
64
150
|
iconEnd: Icon({
|
|
65
151
|
icon: Icons.ARROW_RIGHT,
|
|
66
152
|
}),
|
|
67
153
|
},
|
|
68
154
|
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Icons can be added before the button text.
|
|
158
|
+
*/
|
|
159
|
+
export const IconStart: Story = {
|
|
160
|
+
args: {
|
|
161
|
+
iconStart: Icon({
|
|
162
|
+
icon: Icons.ARROW_LEFT,
|
|
163
|
+
}),
|
|
164
|
+
},
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Or the icon can visually hide the button text.
|
|
169
|
+
*/
|
|
170
|
+
export const IconOnly: Story = {
|
|
171
|
+
args: {
|
|
172
|
+
iconStart: Icon({
|
|
173
|
+
icon: Icons.SEARCH,
|
|
174
|
+
}),
|
|
175
|
+
iconOnly: true,
|
|
176
|
+
},
|
|
177
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// Jest Snapshot v1, https://
|
|
1
|
+
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
|
2
2
|
|
|
3
3
|
exports[`Atom/Button Button smoke-test 1`] = `
|
|
4
4
|
<div class="mx-page default">
|
|
5
|
-
<button class="mx-button
|
|
5
|
+
<button class="mx-button"
|
|
6
6
|
type="button"
|
|
7
7
|
>
|
|
8
8
|
<span>
|
|
@@ -12,15 +12,79 @@ exports[`Atom/Button Button smoke-test 1`] = `
|
|
|
12
12
|
</div>
|
|
13
13
|
`;
|
|
14
14
|
|
|
15
|
-
exports[`Atom/Button
|
|
15
|
+
exports[`Atom/Button Dark smoke-test 1`] = `
|
|
16
16
|
<div class="mx-page default">
|
|
17
|
-
<button class="mx-button "
|
|
17
|
+
<button class="mx-button mx-button--dark"
|
|
18
18
|
type="button"
|
|
19
19
|
>
|
|
20
20
|
<span>
|
|
21
21
|
Button
|
|
22
22
|
</span>
|
|
23
|
-
|
|
23
|
+
</button>
|
|
24
|
+
</div>
|
|
25
|
+
`;
|
|
26
|
+
|
|
27
|
+
exports[`Atom/Button Destructive smoke-test 1`] = `
|
|
28
|
+
<div class="mx-page default">
|
|
29
|
+
<button class="mx-button mx-button--destructive"
|
|
30
|
+
type="button"
|
|
31
|
+
>
|
|
32
|
+
<span>
|
|
33
|
+
Button
|
|
34
|
+
</span>
|
|
35
|
+
</button>
|
|
36
|
+
</div>
|
|
37
|
+
`;
|
|
38
|
+
|
|
39
|
+
exports[`Atom/Button IconEnd smoke-test 1`] = `
|
|
40
|
+
<div class="mx-page default">
|
|
41
|
+
<button class="mx-button"
|
|
42
|
+
type="button"
|
|
43
|
+
>
|
|
44
|
+
<span>
|
|
45
|
+
Button
|
|
46
|
+
</span>
|
|
47
|
+
<span class="mx-icon mx-icon--arrow-right">
|
|
48
|
+
</span>
|
|
49
|
+
</button>
|
|
50
|
+
</div>
|
|
51
|
+
`;
|
|
52
|
+
|
|
53
|
+
exports[`Atom/Button IconOnly smoke-test 1`] = `
|
|
54
|
+
<div class="mx-page default">
|
|
55
|
+
<button class="mx-button mx-button--icon-only"
|
|
56
|
+
type="button"
|
|
57
|
+
>
|
|
58
|
+
<span class="mx-icon mx-icon--search">
|
|
59
|
+
</span>
|
|
60
|
+
<span class="sr-only">
|
|
61
|
+
Button
|
|
62
|
+
</span>
|
|
63
|
+
</button>
|
|
64
|
+
</div>
|
|
65
|
+
`;
|
|
66
|
+
|
|
67
|
+
exports[`Atom/Button IconStart smoke-test 1`] = `
|
|
68
|
+
<div class="mx-page default">
|
|
69
|
+
<button class="mx-button"
|
|
70
|
+
type="button"
|
|
71
|
+
>
|
|
72
|
+
<span class="mx-icon mx-icon--arrow-left">
|
|
73
|
+
</span>
|
|
74
|
+
<span>
|
|
75
|
+
Button
|
|
76
|
+
</span>
|
|
77
|
+
</button>
|
|
78
|
+
</div>
|
|
79
|
+
`;
|
|
80
|
+
|
|
81
|
+
exports[`Atom/Button Light smoke-test 1`] = `
|
|
82
|
+
<div class="mx-page default">
|
|
83
|
+
<button class="mx-button mx-button--light"
|
|
84
|
+
type="button"
|
|
85
|
+
>
|
|
86
|
+
<span>
|
|
87
|
+
Button
|
|
24
88
|
</span>
|
|
25
89
|
</button>
|
|
26
90
|
</div>
|
|
@@ -28,7 +92,7 @@ exports[`Atom/Button IconButton smoke-test 1`] = `
|
|
|
28
92
|
|
|
29
93
|
exports[`Atom/Button Link smoke-test 1`] = `
|
|
30
94
|
<div class="mx-page default">
|
|
31
|
-
<a class="mx-button
|
|
95
|
+
<a class="mx-button"
|
|
32
96
|
href="#"
|
|
33
97
|
>
|
|
34
98
|
<span>
|
|
@@ -38,9 +102,9 @@ exports[`Atom/Button Link smoke-test 1`] = `
|
|
|
38
102
|
</div>
|
|
39
103
|
`;
|
|
40
104
|
|
|
41
|
-
exports[`Atom/Button
|
|
105
|
+
exports[`Atom/Button Outline smoke-test 1`] = `
|
|
42
106
|
<div class="mx-page default">
|
|
43
|
-
<button class="mx-button
|
|
107
|
+
<button class="mx-button mx-button--dark mx-button--outline"
|
|
44
108
|
type="button"
|
|
45
109
|
>
|
|
46
110
|
<span>
|
|
@@ -50,9 +114,9 @@ exports[`Atom/Button Primary smoke-test 1`] = `
|
|
|
50
114
|
</div>
|
|
51
115
|
`;
|
|
52
116
|
|
|
53
|
-
exports[`Atom/Button
|
|
54
|
-
<div class="mx-page
|
|
55
|
-
<button class="mx-button
|
|
117
|
+
exports[`Atom/Button White smoke-test 1`] = `
|
|
118
|
+
<div class="mx-page mx-background--alt">
|
|
119
|
+
<button class="mx-button mx-button--white"
|
|
56
120
|
type="button"
|
|
57
121
|
>
|
|
58
122
|
<span>
|