@pnx-mixtape/mxds 0.0.18 → 0.0.20
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/README.md +8 -8
- package/dist/build/accordion.entry.js +1 -1
- package/dist/build/accordion.entry.js.map +1 -1
- package/dist/build/base.css +2 -1
- package/dist/build/button.css +4 -4
- package/dist/build/card.css +6 -5
- package/dist/build/chunks/Accordion-O-huO4At.js.map +1 -1
- package/dist/build/chunks/{disclosure-widget-CtNx0f8p.js → disclosure-widget-DVpnRsTI.js} +3 -1
- package/dist/build/chunks/{disclosure-widget-CtNx0f8p.js.map → disclosure-widget-DVpnRsTI.js.map} +1 -1
- package/dist/build/chunks/{drop-menu.entry-BEhZ_Je3.js → drop-menu.entry-B4TtnC50.js} +3 -3
- package/dist/build/chunks/{drop-menu.entry-BEhZ_Je3.js.map → drop-menu.entry-B4TtnC50.js.map} +1 -1
- package/dist/build/chunks/{keyboard-C73DHu0c.js → keyboard-rvZ4dfGF.js} +4 -1
- package/dist/build/chunks/{keyboard-C73DHu0c.js.map → keyboard-rvZ4dfGF.js.map} +1 -1
- package/dist/build/chunks/{polyfills-DoxMZOqh.js → polyfills-C-B7iqDG.js} +5 -8
- package/dist/build/chunks/polyfills-C-B7iqDG.js.map +1 -0
- package/dist/build/chunks/popover-DzUcnIlX.js.map +1 -1
- package/dist/build/chunks/utilities-DXELy_An.js.map +1 -1
- package/dist/build/constants.css +8 -6
- package/dist/build/dialog.css +1 -9
- package/dist/build/dialog.entry.js.map +1 -1
- package/dist/build/drop-menu.entry.js +1 -1
- package/dist/build/filters.entry.js.map +1 -1
- package/dist/build/global-alert.entry.js.map +1 -1
- package/dist/build/header.css +49 -63
- package/dist/build/header.entry.js +1106 -20
- package/dist/build/header.entry.js.map +1 -1
- package/dist/build/hero-banner.css +12 -6
- package/dist/build/in-page-navigation.entry.js.map +1 -1
- package/dist/build/navigation.entry.js +2 -2
- package/dist/build/navigation.entry.js.map +1 -1
- package/dist/build/page.css +2 -2
- package/dist/build/pagination.css +15 -21
- package/dist/build/steps.css +11 -11
- package/dist/build/sticky.entry.js.map +1 -1
- package/dist/build/tabs.entry.js +1 -1
- package/dist/build/tabs.entry.js.map +1 -1
- package/dist/build/utilities.css +9 -1
- package/package.json +47 -39
- package/src/Atom/Button/Button.stories.ts +1 -0
- package/src/Atom/Button/_buttons-styles.css +3 -3
- package/src/Atom/Button/button.twig +1 -1
- package/src/Atom/Heading/Heading.tsx +1 -1
- package/src/Atom/Link/Link.stories.tsx +2 -6
- package/src/Atom/Link/Link.tsx +9 -4
- package/src/Atom/Link/_links.css +1 -0
- package/src/Component/Accordion/Accordion.stories.ts +19 -0
- package/src/Component/Accordion/Accordion.stories.tsx +39 -9
- package/src/Component/Accordion/Accordion.tsx +28 -50
- package/src/Component/Accordion/Components/AccordionContent.tsx +24 -0
- package/src/Component/Accordion/Components/AccordionTitle.tsx +34 -0
- package/src/Component/Accordion/Components/AccordionTitleIcon.tsx +22 -0
- package/src/Component/Accordion/Elements/AccordionGroup.ts +1 -1
- package/src/Component/Accordion/__snapshots__/Accordion.stories.ts.snap +42 -0
- package/src/Component/Accordion/__snapshots__/Accordion.stories.tsx.snap +26 -0
- package/src/Component/Accordion/accordion-item.twig +1 -1
- package/src/Component/Breadcrumb/Breadcrumb.tsx +8 -2
- package/src/Component/Breadcrumb/__snapshots__/Breadcrumb.stories.tsx.snap +7 -3
- package/src/Component/Card/Card.stories.ts +1 -1
- package/src/Component/Card/Card.stories.tsx +22 -19
- package/src/Component/Card/Card.tsx +6 -28
- package/src/Component/Card/Components/CardContent.tsx +12 -0
- package/src/Component/Card/Components/CardMedia.tsx +17 -0
- package/src/Component/Card/__snapshots__/Card.stories.tsx.snap +9 -9
- package/src/Component/Card/card.css +3 -2
- package/src/Component/ContentBlock/Components/ContentBlockContent.tsx +14 -0
- package/src/Component/ContentBlock/Components/ContentBlockMedia.tsx +20 -0
- package/src/Component/ContentBlock/ContentBlock.stories.tsx +16 -13
- package/src/Component/ContentBlock/ContentBlock.tsx +5 -28
- package/src/Component/ContentBlock/__snapshots__/ContentBlock.stories.tsx.snap +0 -2
- package/src/Component/Dialog/Components/DialogCloseButton.tsx +18 -0
- package/src/Component/Dialog/Components/DialogContent.tsx +7 -0
- package/src/Component/Dialog/Dialog.stories.tsx +19 -24
- package/src/Component/Dialog/Dialog.tsx +31 -25
- package/src/Component/Dialog/__snapshots__/Dialog.stories.tsx.snap +14 -21
- package/src/Component/Dialog/dialog.css +0 -8
- package/src/Component/HeroBanner/HeroBanner.stories.ts +23 -12
- package/src/Component/HeroBanner/HeroBanner.stories.tsx +26 -7
- package/src/Component/HeroBanner/HeroBanner.tsx +2 -20
- package/src/Component/HeroBanner/__snapshots__/HeroBanner.stories.ts.snap +51 -3
- package/src/Component/HeroBanner/hero-banner.css +8 -4
- package/src/Component/HeroBanner/hero-banner.twig +2 -2
- package/src/Component/HeroSearch/HeroSearch.stories.ts +105 -0
- package/src/Component/HeroSearch/HeroSearch.stories.tsx +48 -0
- package/src/Component/HeroSearch/HeroSearch.tsx +32 -0
- package/src/Component/HeroSearch/__snapshots__/HeroSearch.stories.ts.snap +176 -0
- package/src/Component/HeroSearch/__snapshots__/HeroSearch.stories.tsx.snap +36 -0
- package/src/Component/HeroSearch/hero-search.twig +43 -0
- package/src/Component/InPageNavigation/InPageNavigation.stories.tsx +1 -1
- package/src/Component/InPageNavigation/InPageNavigation.tsx +1 -0
- package/src/Component/InPageNavigation/__snapshots__/InPageNavigation.stories.tsx.snap +1 -1
- package/src/Component/LinkList/LinkList.stories.ts +12 -0
- package/src/Component/LinkList/LinkList.stories.tsx +0 -6
- package/src/Component/LinkList/LinkList.tsx +5 -16
- package/src/Component/LinkList/__snapshots__/LinkList.stories.ts.snap +37 -0
- package/src/Component/LinkList/__snapshots__/LinkList.stories.tsx.snap +9 -29
- package/src/Component/LinkList/link-list.twig +1 -0
- package/src/Component/ListItem/Components/ListItemContent.tsx +12 -0
- package/src/Component/ListItem/Components/ListItemMedia.tsx +20 -0
- package/src/Component/ListItem/ListItem.stories.ts +1 -1
- package/src/Component/ListItem/ListItem.stories.tsx +22 -19
- package/src/Component/ListItem/ListItem.tsx +3 -32
- package/src/Component/ListItem/__snapshots__/ListItem.stories.tsx.snap +3 -0
- package/src/Component/Pagination/Components/PaginationContext.tsx +10 -4
- package/src/Component/Pagination/Components/PaginationItem.tsx +10 -10
- package/src/Component/Pagination/__snapshots__/Pagination.stories.tsx.snap +10 -4
- package/src/Component/Pagination/pagination.css +13 -18
- package/src/Component/Steps/steps.css +5 -6
- package/src/Component/Tabs/Components/TabPanel.tsx +1 -1
- package/src/Component/Tabs/__snapshots__/Tabs.stories.tsx.snap +2 -0
- package/src/Component/Tag/Tag.stories.ts +3 -3
- package/src/Component/Tag/tags.twig +2 -2
- package/src/Component/Tile/Tile.stories.tsx +20 -15
- package/src/Component/Tile/__snapshots__/Tile.stories.tsx.snap +18 -23
- package/src/Layout/Header/Elements/GlobalToggle.ts +55 -21
- package/src/Layout/Header/__snapshots__/Header.stories.ts.snap +14 -14
- package/src/Layout/Header/_header.css +2 -47
- package/src/Layout/Header/_toggles.css +37 -1
- package/src/Layout/Header/header.twig +5 -5
- package/src/Layout/Page/Page.stories.tsx +13 -4
- package/src/Layout/Page/page.css +1 -1
- package/src/Layout/Section/__snapshots__/Section.stories.tsx.snap +3 -3
- package/src/Layout/Section/__snapshots__/SectionGrid.stories.tsx.snap +2 -2
- package/src/Layout/Sidebar/__snapshots__/Sidebar.stories.tsx.snap +3 -3
- package/src/Utility/utilities.css +8 -0
- package/src/constants.css +7 -5
- package/src/react.ts +30 -7
- package/src/tokens.js +3 -1
- package/dist/build/chunks/polyfills-DoxMZOqh.js.map +0 -1
- package/src/Component/Tile/Tile.tsx +0 -53
package/dist/build/steps.css
CHANGED
|
@@ -19,8 +19,10 @@
|
|
|
19
19
|
var(--line-colour, var(--colour-border));
|
|
20
20
|
background-color: var(--background, var(--colour-background));
|
|
21
21
|
border-radius: 100%;
|
|
22
|
-
inline-size:
|
|
23
|
-
|
|
22
|
+
inline-size: 2rem;
|
|
23
|
+
inline-size: var(--counter-size, 2rem);
|
|
24
|
+
block-size: 2rem;
|
|
25
|
+
block-size: var(--counter-size, 2rem);
|
|
24
26
|
inset-block-start: 0;
|
|
25
27
|
inset-block-start: var(--counter-top, 0);
|
|
26
28
|
inset-inline-start: 0;
|
|
@@ -39,16 +41,16 @@
|
|
|
39
41
|
font-weight: var(--font-weight-bold);
|
|
40
42
|
line-height: var(--line-height-ui);
|
|
41
43
|
inline-size: calc(
|
|
42
|
-
|
|
44
|
+
2rem + (2px * 2)
|
|
43
45
|
);
|
|
44
46
|
inline-size: calc(
|
|
45
|
-
var(--counter-size,
|
|
47
|
+
var(--counter-size, 2rem) + (var(--line-width, 2px) * 2)
|
|
46
48
|
);
|
|
47
49
|
block-size: calc(
|
|
48
|
-
|
|
50
|
+
2rem + (2px * 2)
|
|
49
51
|
);
|
|
50
52
|
block-size: calc(
|
|
51
|
-
var(--counter-size,
|
|
53
|
+
var(--counter-size, 2rem) + (var(--line-width, 2px) * 2)
|
|
52
54
|
);
|
|
53
55
|
justify-content: center;
|
|
54
56
|
inset-block-start: 0;
|
|
@@ -84,12 +86,10 @@
|
|
|
84
86
|
inline-size: var(--line-width, 2px);
|
|
85
87
|
background-color: var(--line-colour, var(--colour-border));
|
|
86
88
|
inset-inline-start: calc(
|
|
87
|
-
(
|
|
88
|
-
(2px / 2)
|
|
89
|
+
(2rem / 2) + (2px)
|
|
89
90
|
);
|
|
90
91
|
inset-inline-start: calc(
|
|
91
|
-
(var(--counter-size,
|
|
92
|
-
(var(--line-width, 2px) / 2)
|
|
92
|
+
(var(--counter-size, 2rem) / 2) + (var(--line-width, 2px))
|
|
93
93
|
);
|
|
94
94
|
inset-block: 0;
|
|
95
95
|
position: absolute;
|
|
@@ -115,4 +115,4 @@
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
/*# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZXBzLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7RUFFRTs7QUFFRjtFQUNFO0lBQ0UsbUJBQW1CO0VBQ3JCOztFQUVBO0lBQ0Usa0JBQWtCO0VBa0RwQjs7SUFoREU7TUFDRSxXQUFXO01BQ1g7Z0RBQzBDO01BRDFDO2dEQUMwQztNQUMxQyw2REFBNkQ7TUFDN0QsbUJBQW1CO01BQ25CLGlCQUFzQztNQUF0QyxzQ0FBc0M7TUFDdEMsZ0JBQXFDO01BQXJDLHFDQUFxQztNQUNyQyxvQkFBd0M7TUFBeEMsd0NBQXdDO01BQ3hDLHFCQUFxQjtNQUNyQixrQkFBa0I7TUFDbEIsVUFBVTtJQUNaOztJQUVBO01BQ0UsbUJBQW1CO01BQ25CLGNBQWlDO01BQWpDLGlDQUFpQztNQUNqQyx1QkFBdUI7TUFDdkIseUJBQXlCO01BQ3pCLGFBQWE7TUFDYiw2QkFBNkI7TUFDN0Isb0NBQW9DO01BQ3BDLGtDQUFrQztNQUNsQzs7T0FFQztNQUZEOztPQUVDO01BQ0Q7O09BRUM7TUFGRDs7T0FFQztNQUNELHVCQUF1QjtNQUN2QixvQkFBd0M7TUFBeEMsd0NBQXdDO01BQ3hDLHFCQUFxQjtNQUNyQixrQkFBa0I7TUFDbEIsVUFBVTtNQUNWLGtCQUE2QztNQUE3Qyw2Q0FBNkM7SUFDL0M7O0lBRUE7TUFDRSxZQUFZO0lBQ2Q7O0lBRUE7TUFDRSx3QkFBbUI7SUFDckI7O0lBRUE7TUFDRSx1QkFBbUI7SUFDckI7O0VBR0Y7SUFDRSxpREFBaUQ7SUFDakQsdURBQXVEO0lBQ3ZELGtEQUFrRDtFQVlwRDs7SUFWRTtNQUNFLFdBQVc7TUFDWCxnQkFBbUM7TUFBbkMsbUNBQW1DO01BQ25DLDBEQUEwRDtNQUMxRDs7T0FFQztNQUZEOztPQUVDO01BQ0QsY0FBYztNQUNkLGtCQUFrQjtJQUNwQjs7RUFHRjtJQUNFLG9DQUFvQztJQUNwQyxzREFBc0Q7RUFDeEQ7O0VBRUE7SUFDRSxtQ0FBbUM7SUFDbkMsc0RBQXNEO0VBQ3hEOztFQUVBO0lBQ0Usc0RBQXNEO0lBQ3RELGdEQUFnRDtFQUNsRDs7RUFFQTtJQUNFLDZCQUE2QjtFQUMvQjtBQUNGIiwiZmlsZSI6InN0ZXBzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RlcHNcbiAqL1xuXG5AbGF5ZXIgZGVzaWduLXN5c3RlbS5jb21wb25lbnRzIHtcbiAgLm14LXN0ZXBzIHtcbiAgICBjb3VudGVyLXJlc2V0OiBzdGVwO1xuICB9XG5cbiAgLm14LXN0ZXBzX19wYW5lbCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBib3JkZXI6IHZhcigtLWxpbmUtd2lkdGgsIDJweCkgc29saWRcbiAgICAgICAgdmFyKC0tbGluZS1jb2xvdXIsIHZhcigtLWNvbG91ci1ib3JkZXIpKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQsIHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kKSk7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgICAgaW5saW5lLXNpemU6IHZhcigtLWNvdW50ZXItc2l6ZSwgMnJlbSk7XG4gICAgICBibG9jay1zaXplOiB2YXIoLS1jb3VudGVyLXNpemUsIDJyZW0pO1xuICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IHZhcigtLWNvdW50ZXItdG9wLCAwKTtcbiAgICAgIGluc2V0LWlubGluZS1zdGFydDogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGNvbG9yOiB2YXIoLS1mb3JlZ3JvdW5kLCBpbmhlcml0KTtcbiAgICAgIGNvdW50ZXItaW5jcmVtZW50OiBzdGVwO1xuICAgICAgY29udGVudDogY291bnRlcihzdGVwKSBcIlwiO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXMpO1xuICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LXVpKTtcbiAgICAgIGlubGluZS1zaXplOiBjYWxjKFxuICAgICAgICB2YXIoLS1jb3VudGVyLXNpemUsIDJyZW0pICsgKHZhcigtLWxpbmUtd2lkdGgsIDJweCkgKiAyKVxuICAgICAgKTtcbiAgICAgIGJsb2NrLXNpemU6IGNhbGMoXG4gICAgICAgIHZhcigtLWNvdW50ZXItc2l6ZSwgMnJlbSkgKyAodmFyKC0tbGluZS13aWR0aCwgMnB4KSAqIDIpXG4gICAgICApO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBpbnNldC1ibG9jay1zdGFydDogdmFyKC0tY291bnRlci10b3AsIDApO1xuICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgei1pbmRleDogMztcbiAgICAgIHZpc2liaWxpdHk6IHZhcigtLWNvdW50ZXItdmlzaWJpbGl0eSwgaGlkZGVuKTtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgLS1zcGFjaW5nOiAwO1xuICAgIH1cblxuICAgICY6aGFzKC5teC1zdGVwc19fcGFuZWwtY29udGVudCBoMzpmaXJzdC1jaGlsZCkge1xuICAgICAgLS1jb3VudGVyLXRvcDogLTJweDtcbiAgICB9XG5cbiAgICAmOmhhcygubXgtc3RlcHNfX3BhbmVsLWNvbnRlbnQgaDQ6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIC0tY291bnRlci10b3A6IC00cHg7XG4gICAgfVxuICB9XG5cbiAgLm14LXN0ZXBzX19wYW5lbC1jb250ZW50IHtcbiAgICBwYWRkaW5nLWJsb2NrOiAwIHZhcigtLXNwYWNpbmcsIHZhcigtLXNwYWNpbmctbCkpO1xuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1pbmRlbnQsIHZhcigtLXNwYWNpbmcteHhsKSk7XG4gICAgaW5saW5lLXNpemU6IG1pbigxMDAlLCB2YXIoLS1jb250YWluZXItbWF4LXdpZHRoKSk7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGlubGluZS1zaXplOiB2YXIoLS1saW5lLXdpZHRoLCAycHgpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGluZS1jb2xvdXIsIHZhcigtLWNvbG91ci1ib3JkZXIpKTtcbiAgICAgIGluc2V0LWlubGluZS1zdGFydDogY2FsYyhcbiAgICAgICAgKHZhcigtLWNvdW50ZXItc2l6ZSwgMnJlbSkgLyAyKSArICh2YXIoLS1saW5lLXdpZHRoLCAycHgpKVxuICAgICAgKTtcbiAgICAgIGluc2V0LWJsb2NrOiAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cbiAgfVxuXG4gIC5teC1zdGVwcy0tZGFyayB7XG4gICAgLS1saW5lLWNvbG91cjogdmFyKC0tY29sb3VyLXByaW1hcnkpO1xuICAgIC0tY291bnRlci1mb3JlZ3JvdW5kOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZC1yZXZlcnNlKTtcbiAgfVxuXG4gIC5teC1zdGVwcy0tc3VwcGxlbWVudGFyeSB7XG4gICAgLS1saW5lLWNvbG91cjogdmFyKC0tY29sb3VyLWFjY2VudCk7XG4gICAgLS1jb3VudGVyLWZvcmVncm91bmQ6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kLXJldmVyc2UpO1xuICB9XG5cbiAgLm14LXN0ZXBzLS1maWxsOndoZXJlKDpub3QoOmhhcygubXgtc3RlcHMtLWZpbGwpKSkge1xuICAgIC0tYmFja2dyb3VuZDogdmFyKC0tbGluZS1jb2xvdXIsIHZhcigtLWNvbG91ci1ib3JkZXIpKTtcbiAgICAtLWZvcmVncm91bmQ6IHZhcigtLWNvdW50ZXItZm9yZWdyb3VuZCwgaW5oZXJpdCk7XG4gIH1cblxuICAubXgtc3RlcHMtLWNvdW50ZXJzIHtcbiAgICAtLWNvdW50ZXItdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgfVxufVxuIl19 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sticky.entry.js","sources":["../../src/Component/Sticky/Elements/Sticky.ts"],"sourcesContent":["/**\n * Sticky \"is-stuck\" and offset handler.\n */\n\nimport { createElement } from \"../../../Utility/utilities\"\n\ntype IOOptions = {\n root: IntersectionObserver[\"root\"]\n rootMargin: IntersectionObserver[\"rootMargin\"]\n thresholds: IntersectionObserver[\"thresholds\"]\n}\n\nexport default class Sticky extends HTMLElement {\n internals_: ElementInternals\n iO: IntersectionObserver\n rO?: ResizeObserver\n offsetPropName?: string\n root?: IOOptions[\"root\"] = null\n rootMargin?: IOOptions[\"rootMargin\"] = \"0px 0px 0px 0px\"\n thresholds?: IOOptions[\"thresholds\"] = [0]\n\n constructor() {\n super()\n this.internals_ = this.attachInternals()\n }\n\n connectedCallback(): void {\n this.offsetPropName = this.getAttribute(\"offsetpropname\")\n const options: IOOptions = {\n root: this.root,\n rootMargin: this.rootMargin,\n thresholds: this.thresholds,\n }\n\n // Toggle \"is-stuck\" and emit event.\n this.iO = new IntersectionObserver(([{ boundingClientRect }]) => {\n const isSticky: boolean = boundingClientRect.y < 0\n this.classList.toggle(\"is-stuck\", isSticky)\n const newEvent: CustomEvent<{\n isSticky: boolean\n options: IOOptions\n target: Sticky\n }> = new CustomEvent(\"sticky-toggle\", {\n bubbles: true,\n cancelable: true,\n detail: {\n isSticky,\n options,\n target: this,\n },\n })\n this.dispatchEvent(newEvent)\n }, options)\n this.iO.observe(this.trigger)\n\n // If offsetPropName, record its height.\n if (!this.offsetPropName) return\n this.rO = new ResizeObserver(entries => {\n entries.forEach(({ borderBoxSize }) => {\n const [{ blockSize }] = borderBoxSize\n document.body.style.setProperty(\n this.offsetPropName,\n `${blockSize.toFixed(1)}px`,\n )\n })\n })\n this.rO.observe(this)\n }\n\n disconnectedCallback(): void {\n this.iO.unobserve(this.trigger)\n this.rO.disconnect()\n }\n\n get trigger(): HTMLDivElement {\n let trigger: HTMLDivElement | null = this.querySelector(\".sticky__trigger\")\n if (!trigger) {\n trigger = createElement(\n '<div class=\"sticky__trigger\"></div>',\n ) as HTMLDivElement\n this.insertAdjacentElement(\"beforebegin\", trigger)\n }\n return trigger\n }\n}\n\ncustomElements.define(\"mx-sticky\", Sticky)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-sticky\": Sticky\n }\n}\n"],"names":[],"mappings":";AAYA,MAAqB,eAAe,YAAY;AAAA,EAS9C,cAAc;
|
|
1
|
+
{"version":3,"file":"sticky.entry.js","sources":["../../src/Component/Sticky/Elements/Sticky.ts"],"sourcesContent":["/**\n * Sticky \"is-stuck\" and offset handler.\n */\n\nimport { createElement } from \"../../../Utility/utilities\"\n\ntype IOOptions = {\n root: IntersectionObserver[\"root\"]\n rootMargin: IntersectionObserver[\"rootMargin\"]\n thresholds: IntersectionObserver[\"thresholds\"]\n}\n\nexport default class Sticky extends HTMLElement {\n internals_: ElementInternals\n iO: IntersectionObserver\n rO?: ResizeObserver\n offsetPropName?: string\n root?: IOOptions[\"root\"] = null\n rootMargin?: IOOptions[\"rootMargin\"] = \"0px 0px 0px 0px\"\n thresholds?: IOOptions[\"thresholds\"] = [0]\n\n constructor() {\n super()\n this.internals_ = this.attachInternals()\n }\n\n connectedCallback(): void {\n this.offsetPropName = this.getAttribute(\"offsetpropname\")\n const options: IOOptions = {\n root: this.root,\n rootMargin: this.rootMargin,\n thresholds: this.thresholds,\n }\n\n // Toggle \"is-stuck\" and emit event.\n this.iO = new IntersectionObserver(([{ boundingClientRect }]) => {\n const isSticky: boolean = boundingClientRect.y < 0\n this.classList.toggle(\"is-stuck\", isSticky)\n const newEvent: CustomEvent<{\n isSticky: boolean\n options: IOOptions\n target: Sticky\n }> = new CustomEvent(\"sticky-toggle\", {\n bubbles: true,\n cancelable: true,\n detail: {\n isSticky,\n options,\n target: this,\n },\n })\n this.dispatchEvent(newEvent)\n }, options)\n this.iO.observe(this.trigger)\n\n // If offsetPropName, record its height.\n if (!this.offsetPropName) return\n this.rO = new ResizeObserver(entries => {\n entries.forEach(({ borderBoxSize }) => {\n const [{ blockSize }] = borderBoxSize\n document.body.style.setProperty(\n this.offsetPropName,\n `${blockSize.toFixed(1)}px`,\n )\n })\n })\n this.rO.observe(this)\n }\n\n disconnectedCallback(): void {\n this.iO.unobserve(this.trigger)\n this.rO.disconnect()\n }\n\n get trigger(): HTMLDivElement {\n let trigger: HTMLDivElement | null = this.querySelector(\".sticky__trigger\")\n if (!trigger) {\n trigger = createElement(\n '<div class=\"sticky__trigger\"></div>',\n ) as HTMLDivElement\n this.insertAdjacentElement(\"beforebegin\", trigger)\n }\n return trigger\n }\n}\n\ncustomElements.define(\"mx-sticky\", Sticky)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-sticky\": Sticky\n }\n}\n"],"names":[],"mappings":";AAYA,MAAqB,eAAe,YAAY;AAAA,EAS9C,cAAc;AACZ,UAAA;AALF,SAAA,OAA2B;AAC3B,SAAA,aAAuC;AACvC,SAAA,aAAuC,CAAC,CAAC;AAIvC,SAAK,aAAa,KAAK,gBAAA;AAAA,EACzB;AAAA,EAEA,oBAA0B;AACxB,SAAK,iBAAiB,KAAK,aAAa,gBAAgB;AACxD,UAAM,UAAqB;AAAA,MACzB,MAAM,KAAK;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,IAAA;AAInB,SAAK,KAAK,IAAI,qBAAqB,CAAC,CAAC,EAAE,mBAAA,CAAoB,MAAM;AAC/D,YAAM,WAAoB,mBAAmB,IAAI;AACjD,WAAK,UAAU,OAAO,YAAY,QAAQ;AAC1C,YAAM,WAID,IAAI,YAAY,iBAAiB;AAAA,QACpC,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,QAAA;AAAA,MACV,CACD;AACD,WAAK,cAAc,QAAQ;AAAA,IAC7B,GAAG,OAAO;AACV,SAAK,GAAG,QAAQ,KAAK,OAAO;AAG5B,QAAI,CAAC,KAAK,eAAgB;AAC1B,SAAK,KAAK,IAAI,eAAe,CAAA,YAAW;AACtC,cAAQ,QAAQ,CAAC,EAAE,oBAAoB;AACrC,cAAM,CAAC,EAAE,UAAA,CAAW,IAAI;AACxB,iBAAS,KAAK,MAAM;AAAA,UAClB,KAAK;AAAA,UACL,GAAG,UAAU,QAAQ,CAAC,CAAC;AAAA,QAAA;AAAA,MAE3B,CAAC;AAAA,IACH,CAAC;AACD,SAAK,GAAG,QAAQ,IAAI;AAAA,EACtB;AAAA,EAEA,uBAA6B;AAC3B,SAAK,GAAG,UAAU,KAAK,OAAO;AAC9B,SAAK,GAAG,WAAA;AAAA,EACV;AAAA,EAEA,IAAI,UAA0B;AAC5B,QAAI,UAAiC,KAAK,cAAc,kBAAkB;AAC1E,QAAI,CAAC,SAAS;AACZ,gBAAU;AAAA,QACR;AAAA,MAAA;AAEF,WAAK,sBAAsB,eAAe,OAAO;AAAA,IACnD;AACA,WAAO;AAAA,EACT;AACF;AAEA,eAAe,OAAO,aAAa,MAAM;"}
|
package/dist/build/tabs.entry.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { D as DropMenu } from "./chunks/drop-menu.entry-
|
|
1
|
+
import { D as DropMenu } from "./chunks/drop-menu.entry-B4TtnC50.js";
|
|
2
2
|
import { c as createElement, m as makeAnchor } from "./chunks/utilities-DXELy_An.js";
|
|
3
3
|
class Tabs extends HTMLElement {
|
|
4
4
|
constructor() {
|
|
@@ -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":["../../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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"}
|
package/dist/build/utilities.css
CHANGED
|
@@ -101,6 +101,14 @@
|
|
|
101
101
|
[hidden] {
|
|
102
102
|
display: none;
|
|
103
103
|
}
|
|
104
|
+
|
|
105
|
+
/* Prevent scrolling on the body. */
|
|
106
|
+
.body--scroll-lock,
|
|
107
|
+
.body-dialog--open {
|
|
108
|
+
overflow: hidden;
|
|
109
|
+
position: fixed;
|
|
110
|
+
inline-size: 100vw;
|
|
111
|
+
}
|
|
104
112
|
}
|
|
105
113
|
|
|
106
114
|
/**
|
|
@@ -175,4 +183,4 @@
|
|
|
175
183
|
}
|
|
176
184
|
}
|
|
177
185
|
|
|
178
|
-
/*# sourceMappingURL=data:application/json;base64,
|
|
186
|
+
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9sYXlvdXQtdXRpbHMuY3NzIiwidXRpbGl0aWVzLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFO0lBQ0UsYUFBYTtJQUNiLDRCQUE0QjtFQUs5Qjs7SUFIRTtNQUNFLGdCQUFnQjtJQUNsQjs7RUFHRjtJQUNFLGFBQWE7RUFDZjs7RUFFQTtJQUNFLHFCQUFxQjtJQUFyQix1QkFBcUI7SUFBckIscUJBQXFCO0VBQ3ZCOztFQUVBO0lBQ0UsbUJBQW1CO0VBQ3JCOztFQUVBO0lBQ0UsdUJBQXVCO0VBQ3pCOztFQUVBO0lBQ0UseUJBQXlCO0VBQzNCOztFQUVBO0lBQ0Usd0JBQXdCO0VBQzFCOztFQUVBO0lBQ0Usc0JBQXNCO0VBQ3hCOztFQUVBO0lBQ0UsU0FBUztFQUNYOztFQUVBO0lBQ0UsUUFBUTtFQUNWOztFQUVBO0lBQ0UsUUFBUTtFQUNWOztFQUVBO0lBQ0UsUUFBUTtFQUNWOztFQUVBO0lBQ0UsaUJBQWlCO0VBQ25COztFQUVBO0lBQ0UsZUFBZTtFQUNqQjs7RUFFQTtJQUNFLGlCQUFpQjtFQUNuQjs7RUFFQTtJQUNFLGtCQUFrQjtFQUNwQjs7RUFFQTtJQUNFLHdDQUF3QztFQUMxQzs7RUFFQTtJQUNFLDBDQUEwQztFQUM1QztBQUNGOztBQzNFQTtFQUNFOzs7SUFHRSxzQ0FBc0M7SUFDdEMsc0JBQXNCO0lBQ3RCLDZCQUE2QjtJQUM3QixTQUFTO0lBQ1QsVUFBVTtFQUNaOztFQUVBOztJQUVFLGVBQWU7SUFDZiwyQkFBMkI7SUFDM0IsY0FBYztJQUNkLGVBQWU7RUFDakI7O0VBRUE7SUFDRSxhQUFhO0VBQ2Y7O0VBRUEsbUNBQW1DO0VBQ25DOztJQUVFLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2Ysa0JBQWtCO0VBQ3BCO0FBQ0Y7O0FBRUE7O0VBRUU7O0FBRUY7SUFFSTtFQURGO01BRUksYUFBYTtFQUVqQjtJQURFO0lBSUE7O0VBREY7TUFFSSxhQUFhO0VBRWpCO0lBREU7O0VBR0Y7SUFDRSx3QkFBd0I7RUFLMUI7O0lBSEU7O0VBSEY7TUFJSSx5QkFBeUI7RUFFN0I7SUFERTtJQUlBOztFQURGO01BRUksd0JBQXdCO0VBRTVCO0lBREU7QUFFSjs7QUFFQTs7RUFFRTs7QUFDRjtFQUNFO0lBQ0Usa0NBQW1DO0lBQ25DLGtCQUFrQjtJQUNsQixvQkFBb0I7SUFDcEIsa0JBQWtCOztJQUVsQixxQ0FBOEM7O0lBQTlDLDhDQUE4QztFQUNoRDs7RUFFQTtJQUNFLG1DQUFtQztJQUNuQyxtQ0FBbUM7SUFDbkMsV0FBVztFQUNiO0FBQ0Y7O0FBRUE7RUFDRTtJQUNFLDJCQUEyQjtFQUM3Qjs7RUFFQTtJQUNFLDRCQUE0QjtFQUM5Qjs7RUFFQTtJQUNFLDJCQUEyQjtFQUM3QjtBQUNGIiwiZmlsZSI6InV0aWxpdGllcy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAbGF5ZXIgZGVzaWduLXN5c3RlbS51dGlsaXRpZXMge1xuICAuc3RhY2sge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJzdGFja1wiO1xuXG4gICAgJiA+ICoge1xuICAgICAgZ3JpZC1hcmVhOiBzdGFjaztcbiAgICB9XG4gIH1cblxuICAuZmxleCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gIC5wbGFjZS1jZW50ZXIge1xuICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjtcbiAgfVxuXG4gIC5hbGlnbi0tY2VudGVyIHtcbiAgICBtYXJnaW4taW5saW5lOiBhdXRvO1xuICB9XG5cbiAgLmFsaWduLS1sZWZ0IHtcbiAgICBtYXJnaW4taW5saW5lLWVuZDogYXV0bztcbiAgfVxuXG4gIC5hbGlnbi0tcmlnaHQge1xuICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IGF1dG87XG4gIH1cblxuICAuYWxpZ24tLWJvdHRvbSB7XG4gICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiBhdXRvO1xuICB9XG5cbiAgLmFsaWduLS10b3Age1xuICAgIG1hcmdpbi1ibG9jay1lbmQ6IGF1dG87XG4gIH1cblxuICAub3JkZXItLXN0YXJ0IHtcbiAgICBvcmRlcjogLTE7XG4gIH1cblxuICAub3JkZXItLTEge1xuICAgIG9yZGVyOiAxO1xuICB9XG5cbiAgLm9yZGVyLS0yIHtcbiAgICBvcmRlcjogMjtcbiAgfVxuXG4gIC5vcmRlci0tMyB7XG4gICAgb3JkZXI6IDM7XG4gIH1cblxuICAuZ2FwLS1zIHtcbiAgICBnYXA6IHZhcigtLWdhcC1zKTtcbiAgfVxuXG4gIC5nYXAtLW0ge1xuICAgIGdhcDogdmFyKC0tZ2FwKTtcbiAgfVxuXG4gIC5nYXAtLWwge1xuICAgIGdhcDogdmFyKC0tZ2FwLWwpO1xuICB9XG5cbiAgLmdhcC0teGwge1xuICAgIGdhcDogdmFyKC0tZ2FwLXhsKTtcbiAgfVxuXG4gIC5nYXAtLXNlY3Rpb24tbCB7XG4gICAgZ2FwOiB2YXIoLS1zZWN0aW9uLWwsIHZhcigtLXNwYWNpbmcteGwpKTtcbiAgfVxuXG4gIC5nYXAtLXNlY3Rpb24teGwge1xuICAgIGdhcDogdmFyKC0tc2VjdGlvbi14bCwgdmFyKC0tc3BhY2luZy11dWwpKTtcbiAgfVxufVxuIiwiQGltcG9ydCBcIl9sYXlvdXQtdXRpbHMuY3NzXCI7XG5cbkBsYXllciBkZXNpZ24tc3lzdGVtLnV0aWxpdGllcyB7XG4gIC5oaWRkZW4sXG4gIC52aXN1YWxseS1oaWRkZW4sXG4gIC5zci1vbmx5IHtcbiAgICBjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAwIDAsIDAgMCwgMCAwKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLnZpc3VhbGx5LWhpZGRlbi52aXN1YWxseS1oaWRkZW4tLWZvY3Vzc2FibGU6Zm9jdXMsXG4gIC5zci1vbmx5LnNyLW9ubHktLWZvY3Vzc2FibGU6Zm9jdXMge1xuICAgIGNsaXAtcGF0aDogbm9uZTtcbiAgICBwb3NpdGlvbjogcmV2ZXJ0ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiByZXZlcnQ7XG4gICAgcGFkZGluZzogcmV2ZXJ0O1xuICB9XG5cbiAgW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAvKiBQcmV2ZW50IHNjcm9sbGluZyBvbiB0aGUgYm9keS4gKi9cbiAgLmJvZHktLXNjcm9sbC1sb2NrLFxuICAuYm9keS1kaWFsb2ctLW9wZW4ge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGlubGluZS1zaXplOiAxMDB2dztcbiAgfVxufVxuXG4vKipcbiAqIFJlc3BvbnNpdmUgdXRpbGl0eSBjbGFzc1xuICovXG5cbkBsYXllciBkZXNpZ24tc3lzdGVtLnV0aWxpdGllcyB7XG4gIC5tb2JpbGUtb25seSB7XG4gICAgQG1lZGlhICgtLWxhcmdlLXVwKSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5kZXNrdG9wLW9ubHkge1xuICAgIEBtZWRpYSAoLS1sYXJnZS1kb3duKSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5wcmludC1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG5cbiAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAuc2NyZWVuLW9ubHkge1xuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2tlbGV0b24gYW5kIGxvYWRpbmcgVUkuXG4gKi9cbkBsYXllciBkZXNpZ24tc3lzdGVtLnV0aWxpdGllcyB7XG4gIC5za2VsZXRvbiB7XG4gICAgLS1iYWNrZ3JvdW5kOiBoc2woMGRlZyAwJSAwJSAvIDEwJSk7XG4gICAgLS1vcGFjaXR5LWxvdzogMC41O1xuICAgIC0tb3BhY2l0eS1oaWdoOiAwLjc1O1xuICAgIC0tZHVyYXRpb246IDE1MDBtcztcblxuICAgIGFuaW1hdGlvbjogcHVsc2UgdmFyKC0tZHVyYXRpb24pIGVhc2UgaW5maW5pdGU7XG4gIH1cblxuICAuc2tlbGV0b24tLWJnIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcbiAgICB6LWluZGV4OiAtMTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHB1bHNlIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IHZhcigtLW9wYWNpdHktbG93KTtcbiAgfVxuXG4gIDc1JSB7XG4gICAgb3BhY2l0eTogdmFyKC0tb3BhY2l0eS1oaWdoKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IHZhcigtLW9wYWNpdHktbG93KTtcbiAgfVxufVxuIl19 */
|
package/package.json
CHANGED
|
@@ -1,52 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pnx-mixtape/mxds",
|
|
3
3
|
"description": "The Mixtape Design System",
|
|
4
|
-
"version": "0.0.
|
|
5
|
-
"scripts": {
|
|
6
|
-
"dev": "concurrently -k -n \"VITE,STORYBOOK\" -c \"#636cff,#ff4785\" \"npm run dev-vite\" \"npm run dev-storybook\"",
|
|
7
|
-
"build": "concurrently -n \"VITE,STORYBOOK\" -c \"#636cff,#ff4785\" \"npm run build-vite\" \"npm run build-storybook\"",
|
|
8
|
-
"dev-storybook-html": "storybook dev -p 6006",
|
|
9
|
-
"dev-storybook-react": "storybook dev -p 6008 -c .storybook-react",
|
|
10
|
-
"dev-storybook": "concurrently \"npm:dev-storybook-*\"",
|
|
11
|
-
"build-storybook": "npm run build-storybook-html && npm run build-storybook-react",
|
|
12
|
-
"build-storybook-html": "storybook build -o dist/storybook",
|
|
13
|
-
"build-storybook-react": "storybook build -o dist/storybook/react -c .storybook-react",
|
|
14
|
-
"dev-vite": "vite build -w -m development",
|
|
15
|
-
"build-vite": "vite build",
|
|
16
|
-
"format": "prettier --write \"**/*.{css,ts,tsx,js,jsx,json,md,mdx}\" && npm run fix-css && npm run fix-js",
|
|
17
|
-
"lint": "npm run lint-prettier && npm run lint-css && npm run lint-ts && npm run lint-js",
|
|
18
|
-
"lint-prettier": "prettier --check \"**/*.{css,ts,tsx,js,jsx,json,md,mdx}\"",
|
|
19
|
-
"lint-css": "stylelint \"./**/*.css\"",
|
|
20
|
-
"lint-css-ci": "stylelint \"./**/*.css\" --custom-formatter @csstools/stylelint-formatter-github",
|
|
21
|
-
"fix-css": "npm run lint-css -- --fix",
|
|
22
|
-
"lint-js": "eslint \"./**/*.{ts,tsx}\"",
|
|
23
|
-
"lint-js-ci": "eslint \"./**/*.{ts,tsx}\" --format gha",
|
|
24
|
-
"fix-js": "npm run lint-js -- --fix",
|
|
25
|
-
"lint-ts": "tsc",
|
|
26
|
-
"test": "npm run test-storybook",
|
|
27
|
-
"test-vitest": "vitest --run",
|
|
28
|
-
"test-storybook": "concurrently \"npm:test-storybook-*\"",
|
|
29
|
-
"test-storybook-html": "test-storybook --maxWorkers=2",
|
|
30
|
-
"test-storybook-react": "test-storybook --maxWorkers=2 --url http://127.0.0.1:6008 -c .storybook-react",
|
|
31
|
-
"clean": "rm -rf ./dist",
|
|
32
|
-
"commit": "git-cz",
|
|
33
|
-
"http-server": "http-server ./dist/storybook -i -p 3001 --silent",
|
|
34
|
-
"build-ci": "npm run build",
|
|
35
|
-
"lint-ci": "npm run lint-prettier && npm run lint-css-ci && npm run lint-ts && npm run lint-js-ci"
|
|
36
|
-
},
|
|
4
|
+
"version": "0.0.20",
|
|
37
5
|
"dependencies": {
|
|
38
6
|
"@floating-ui/dom": "^1.7.3",
|
|
39
7
|
"@oddbird/popover-polyfill": "^0.6.1",
|
|
40
|
-
"@pnx-mixtape/ids-shape": "^0.0.
|
|
8
|
+
"@pnx-mixtape/ids-shape": "^0.0.22",
|
|
41
9
|
"@types/react": "^19.1.10",
|
|
42
10
|
"@types/react-dom": "^19.1.7",
|
|
43
11
|
"classnames": "^2.5.1",
|
|
12
|
+
"focus-trap": "^7.6.5",
|
|
44
13
|
"js-cookie": "^3.0.5",
|
|
45
14
|
"react": "^19.1.1",
|
|
46
15
|
"react-aria": "^3.42.0",
|
|
47
16
|
"react-dom": "^19.1.1",
|
|
48
|
-
"react-stately": "^3.40.0"
|
|
49
|
-
"tabbable": "^6.2.0"
|
|
17
|
+
"react-stately": "^3.40.0"
|
|
50
18
|
},
|
|
51
19
|
"devDependencies": {
|
|
52
20
|
"@csstools/postcss-global-data": "^3.0.0",
|
|
@@ -58,7 +26,9 @@
|
|
|
58
26
|
"@storybook/addon-a11y": "^9.1.2",
|
|
59
27
|
"@storybook/addon-docs": "^9.1.2",
|
|
60
28
|
"@storybook/addon-links": "^9.1.2",
|
|
29
|
+
"@storybook/html": "^9.1.7",
|
|
61
30
|
"@storybook/html-vite": "^9.1.2",
|
|
31
|
+
"@storybook/react": "^9.1.7",
|
|
62
32
|
"@storybook/react-vite": "^9.1.2",
|
|
63
33
|
"@storybook/test-runner": "^0.23.0",
|
|
64
34
|
"@svgr/rollup": "^8.1.0",
|
|
@@ -66,6 +36,7 @@
|
|
|
66
36
|
"@testing-library/jest-dom": "^6.7.0",
|
|
67
37
|
"@testing-library/react": "^16.3.0",
|
|
68
38
|
"@testing-library/user-event": "^14.6.1",
|
|
39
|
+
"@types/node": "^24.5.2",
|
|
69
40
|
"@typescript-eslint/parser": "^8.39.1",
|
|
70
41
|
"@vitejs/plugin-react": "^5.0.0",
|
|
71
42
|
"@vitest/ui": "^3.2.4",
|
|
@@ -76,6 +47,7 @@
|
|
|
76
47
|
"concurrently": "^9.2.0",
|
|
77
48
|
"cz-conventional-changelog": "^3.3.0",
|
|
78
49
|
"drupal-attribute": "^1.1.0",
|
|
50
|
+
"drupal-twig-extensions": "1.0.0-beta.5",
|
|
79
51
|
"eslint": "^9.33.0",
|
|
80
52
|
"eslint-config-prettier": "^10.1.8",
|
|
81
53
|
"eslint-formatter-gha": "^1.6.0",
|
|
@@ -86,6 +58,7 @@
|
|
|
86
58
|
"globals": "^16.3.0",
|
|
87
59
|
"http-server": "^14.1.1",
|
|
88
60
|
"jsdom": "^26.1.0",
|
|
61
|
+
"playwright": "^1.55.0",
|
|
89
62
|
"postcss": "^8.5.6",
|
|
90
63
|
"postcss-design-tokens": "^1.3.0",
|
|
91
64
|
"postcss-inline-svg": "^6.0.0",
|
|
@@ -93,14 +66,17 @@
|
|
|
93
66
|
"postcss-preset-env": "^10.2.4",
|
|
94
67
|
"postcss-pxtorem": "^6.1.0",
|
|
95
68
|
"prettier": "^3.6.2",
|
|
96
|
-
"storybook": "^9.1.
|
|
69
|
+
"storybook": "^9.1.7",
|
|
97
70
|
"stylelint": "^16.23.1",
|
|
98
71
|
"stylelint-config-standard": "^39.0.0",
|
|
99
72
|
"stylelint-use-logical-spec": "^5.0.1",
|
|
100
73
|
"tinyglobby": "^0.2.14",
|
|
74
|
+
"twig": "^1.17.1",
|
|
101
75
|
"typescript": "^5.9.2",
|
|
102
76
|
"typescript-eslint": "^8.39.1",
|
|
103
|
-
"vite
|
|
77
|
+
"vite": "^7.1.6",
|
|
78
|
+
"vite-plugin-twig-drupal": "^1.6.2",
|
|
79
|
+
"wait-on": "^9.0.0"
|
|
104
80
|
},
|
|
105
81
|
"optionalDependencies": {
|
|
106
82
|
"@esbuild/linux-arm64": "^0.25.9",
|
|
@@ -127,5 +103,37 @@
|
|
|
127
103
|
"./tokens": "./src/tokens.js",
|
|
128
104
|
"./dist/*": "./dist/build/*",
|
|
129
105
|
"./src/*": "./src/*"
|
|
106
|
+
},
|
|
107
|
+
"scripts": {
|
|
108
|
+
"dev": "concurrently -k -n \"VITE,STORYBOOK\" -c \"#636cff,#ff4785\" \"pnpm dev-vite\" \"pnpm dev-storybook\"",
|
|
109
|
+
"build": "concurrently -n \"VITE,STORYBOOK\" -c \"#636cff,#ff4785\" \"pnpm build-vite\" \"pnpm build-storybook\"",
|
|
110
|
+
"dev-storybook-html": "storybook dev -p 6006",
|
|
111
|
+
"dev-storybook-react": "storybook dev -p 6008 -c .storybook-react",
|
|
112
|
+
"dev-storybook": "concurrently \"npm:dev-storybook-*\"",
|
|
113
|
+
"build-storybook": "pnpm build-storybook-html && pnpm build-storybook-react",
|
|
114
|
+
"build-storybook-html": "storybook build -o dist/storybook",
|
|
115
|
+
"build-storybook-react": "storybook build -o dist/storybook/react -c .storybook-react",
|
|
116
|
+
"dev-vite": "vite build -w -m development",
|
|
117
|
+
"build-vite": "vite build",
|
|
118
|
+
"format": "prettier --write \"**/*.{css,ts,tsx,js,jsx,json,md,mdx}\" && pnpm fix-css && pnpm fix-js",
|
|
119
|
+
"lint": "pnpm lint-prettier && pnpm lint-css && pnpm lint-ts && pnpm lint-js",
|
|
120
|
+
"lint-prettier": "prettier --check \"**/*.{css,ts,tsx,js,jsx,json,md,mdx}\"",
|
|
121
|
+
"lint-css": "stylelint \"./**/*.css\"",
|
|
122
|
+
"lint-css-ci": "stylelint \"./**/*.css\" --custom-formatter @csstools/stylelint-formatter-github",
|
|
123
|
+
"fix-css": "pnpm lint-css --fix",
|
|
124
|
+
"lint-js": "eslint \"./**/*.{ts,tsx}\"",
|
|
125
|
+
"lint-js-ci": "eslint \"./**/*.{ts,tsx}\" --format gha",
|
|
126
|
+
"fix-js": "pnpm lint-js --fix",
|
|
127
|
+
"lint-ts": "tsc",
|
|
128
|
+
"test": "pnpm test-storybook",
|
|
129
|
+
"test-vitest": "vitest --run",
|
|
130
|
+
"test-storybook": "concurrently \"npm:test-storybook-*\"",
|
|
131
|
+
"test-storybook-html": "test-storybook --maxWorkers=2",
|
|
132
|
+
"test-storybook-react": "test-storybook --maxWorkers=2 --url http://127.0.0.1:6008 -c .storybook-react",
|
|
133
|
+
"clean": "rm -rf ./dist",
|
|
134
|
+
"commit": "git-cz",
|
|
135
|
+
"http-server": "http-server ./dist/storybook -i -p 3001 --silent",
|
|
136
|
+
"build-ci": "pnpm build",
|
|
137
|
+
"lint-ci": "pnpm lint-prettier && pnpm lint-css-ci && pnpm lint-ts && pnpm lint-js-ci"
|
|
130
138
|
}
|
|
131
|
-
}
|
|
139
|
+
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
--background: var(--colour-link);
|
|
9
9
|
--foreground: var(--colour-foreground-reverse);
|
|
10
10
|
|
|
11
|
-
&.button--outline {
|
|
11
|
+
&.mx-button--outline {
|
|
12
12
|
--background: transparent;
|
|
13
13
|
--foreground: var(--colour-primary);
|
|
14
14
|
}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
--background: var(--colour-error);
|
|
30
30
|
--foreground: var(--colour-foreground-reverse);
|
|
31
31
|
|
|
32
|
-
&.button--outline {
|
|
32
|
+
&.mx-button--outline {
|
|
33
33
|
--background: transparent;
|
|
34
34
|
--foreground: var(--colour-error);
|
|
35
35
|
}
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
--background: var(--colour-foreground-reverse);
|
|
41
41
|
--foreground: var(--colour-foreground);
|
|
42
42
|
|
|
43
|
-
&.button--outline {
|
|
43
|
+
&.mx-button--outline {
|
|
44
44
|
--background: transparent;
|
|
45
45
|
--foreground: var(--colour-foreground-reverse);
|
|
46
46
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{% endfor %}
|
|
9
9
|
{% set attributes = (attributes ?? create_attribute()).addClass(classes) %}
|
|
10
10
|
|
|
11
|
-
{% if
|
|
11
|
+
{% if as == "link" %}
|
|
12
12
|
<a{{ attributes}} href="{{ href }}">
|
|
13
13
|
{{ iconStart }}
|
|
14
14
|
<span{% if iconOnly %} class="sr-only"{% endif %}>{{ title }}</span>
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Meta, StoryObj } from "@storybook/react-vite"
|
|
2
2
|
import Component from "./Link"
|
|
3
|
-
import { LinkStyles } from "../../enums"
|
|
4
3
|
|
|
5
4
|
const meta: Meta<typeof Component> = {
|
|
6
5
|
title: "Atom/Link",
|
|
@@ -10,9 +9,6 @@ const meta: Meta<typeof Component> = {
|
|
|
10
9
|
children: "Link",
|
|
11
10
|
to: "http://example.com",
|
|
12
11
|
},
|
|
13
|
-
argTypes: {
|
|
14
|
-
modifier: { options: Object.values(LinkStyles), control: "radio" },
|
|
15
|
-
},
|
|
16
12
|
}
|
|
17
13
|
export default meta
|
|
18
14
|
type Story = StoryObj<typeof meta>
|
|
@@ -20,11 +16,11 @@ type Story = StoryObj<typeof meta>
|
|
|
20
16
|
export const Link: Story = {}
|
|
21
17
|
export const External: Story = {
|
|
22
18
|
args: {
|
|
23
|
-
|
|
19
|
+
external: true,
|
|
24
20
|
},
|
|
25
21
|
}
|
|
26
22
|
export const More: Story = {
|
|
27
23
|
args: {
|
|
28
|
-
|
|
24
|
+
more: true,
|
|
29
25
|
},
|
|
30
26
|
}
|
package/src/Atom/Link/Link.tsx
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { JSX, ComponentPropsWithoutRef, PropsWithChildren } from "react"
|
|
2
2
|
import classNames from "classnames"
|
|
3
3
|
import { useLinkComponent } from "../../react"
|
|
4
|
-
import { LinkStyles } from "../../enums"
|
|
5
4
|
|
|
6
5
|
type LinkProps = ComponentPropsWithoutRef<"a"> &
|
|
7
6
|
PropsWithChildren & {
|
|
8
7
|
to: string
|
|
9
|
-
|
|
8
|
+
more?: boolean
|
|
9
|
+
external?: boolean
|
|
10
|
+
download?: boolean
|
|
10
11
|
className?: string
|
|
11
12
|
allyText?: string
|
|
12
13
|
}
|
|
@@ -15,7 +16,9 @@ const Link = ({
|
|
|
15
16
|
to,
|
|
16
17
|
children,
|
|
17
18
|
allyText,
|
|
18
|
-
|
|
19
|
+
more,
|
|
20
|
+
external,
|
|
21
|
+
download,
|
|
19
22
|
className = "mx-link",
|
|
20
23
|
...props
|
|
21
24
|
}: LinkProps): JSX.Element => {
|
|
@@ -25,7 +28,9 @@ const Link = ({
|
|
|
25
28
|
<LinkComponent
|
|
26
29
|
to={to}
|
|
27
30
|
className={classNames(className, {
|
|
28
|
-
|
|
31
|
+
"mx-link--more": more,
|
|
32
|
+
"mx-link--external": external,
|
|
33
|
+
"mx-link--download": download,
|
|
29
34
|
})}
|
|
30
35
|
{...props}
|
|
31
36
|
>
|
package/src/Atom/Link/_links.css
CHANGED
|
@@ -43,6 +43,25 @@ type Story = StoryObj<AccordionType>
|
|
|
43
43
|
|
|
44
44
|
export const Accordion: Story = {}
|
|
45
45
|
|
|
46
|
+
export const DefaultOpen: Story = {
|
|
47
|
+
args: {
|
|
48
|
+
...meta.args,
|
|
49
|
+
items: [
|
|
50
|
+
AccordionItem({
|
|
51
|
+
title: "Music",
|
|
52
|
+
content:
|
|
53
|
+
"I'm baby air plant hashtag letterpress blue bottle. Cloud bread dreamcatcher everyday carry lumbersexual, iceland cardigan swag chicharrones lo-fi fanny pack affogato freegan XOXO shaman. Shoreditch cloud bread waistcoat tbh XOXO. Chillwave pour-over umami pug glossier health goth.",
|
|
54
|
+
}),
|
|
55
|
+
AccordionItem({
|
|
56
|
+
title: "Performances (default open)",
|
|
57
|
+
open: true,
|
|
58
|
+
content:
|
|
59
|
+
"I'm baby air plant hashtag letterpress blue bottle. Cloud bread dreamcatcher everyday carry lumbersexual, iceland cardigan swag chicharrones lo-fi fanny pack affogato freegan XOXO shaman. Shoreditch cloud bread waistcoat tbh XOXO. Chillwave pour-over umami pug glossier health goth.",
|
|
60
|
+
}),
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
}
|
|
64
|
+
|
|
46
65
|
export const ToggleAll: Story = {
|
|
47
66
|
args: {
|
|
48
67
|
toggleAll: true,
|
|
@@ -1,21 +1,51 @@
|
|
|
1
1
|
import { Meta, StoryObj } from "@storybook/react-vite"
|
|
2
|
-
import { AccordionStyles, HeadingLevels } from "../../enums"
|
|
3
2
|
import Component from "./Accordion"
|
|
3
|
+
import AccordionTitle from "./Components/AccordionTitle"
|
|
4
|
+
import AccordionContent from "./Components/AccordionContent"
|
|
5
|
+
import AccordionTitleIcon from "./Components/AccordionTitleIcon"
|
|
4
6
|
import "./accordion.css"
|
|
7
|
+
import { HeadingTypes } from "@pnx-mixtape/ids-shape"
|
|
5
8
|
|
|
6
9
|
const meta: Meta<typeof Component> = {
|
|
7
10
|
component: Component,
|
|
8
11
|
tags: ["autodocs"],
|
|
9
12
|
args: {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
children: (
|
|
14
|
+
<>
|
|
15
|
+
<AccordionTitle>
|
|
16
|
+
Open me!
|
|
17
|
+
<AccordionTitleIcon />
|
|
18
|
+
</AccordionTitle>
|
|
19
|
+
<AccordionContent>
|
|
20
|
+
I'm baby air plant hashtag letterpress blue bottle. Cloud bread
|
|
21
|
+
dreamcatcher everyday carry lumbersexual, iceland cardigan swag
|
|
22
|
+
chicharrones lo-fi fanny pack affogato freegan XOXO shaman. Shoreditch
|
|
23
|
+
cloud bread waistcoat tbh XOXO. Chillwave pour-over umami pug glossier
|
|
24
|
+
health goth.
|
|
25
|
+
</AccordionContent>
|
|
26
|
+
</>
|
|
27
|
+
),
|
|
18
28
|
},
|
|
19
29
|
}
|
|
20
30
|
export default meta
|
|
21
31
|
export const Accordion: StoryObj<typeof meta> = {}
|
|
32
|
+
|
|
33
|
+
export const HeadingLevel: StoryObj<typeof meta> = {
|
|
34
|
+
args: {
|
|
35
|
+
children: (
|
|
36
|
+
<>
|
|
37
|
+
<AccordionTitle headingLevel={HeadingTypes.TWO}>
|
|
38
|
+
Open me!
|
|
39
|
+
<AccordionTitleIcon />
|
|
40
|
+
</AccordionTitle>
|
|
41
|
+
<AccordionContent>
|
|
42
|
+
I'm baby air plant hashtag letterpress blue bottle. Cloud bread
|
|
43
|
+
dreamcatcher everyday carry lumbersexual, iceland cardigan swag
|
|
44
|
+
chicharrones lo-fi fanny pack affogato freegan XOXO shaman. Shoreditch
|
|
45
|
+
cloud bread waistcoat tbh XOXO. Chillwave pour-over umami pug glossier
|
|
46
|
+
health goth.
|
|
47
|
+
</AccordionContent>
|
|
48
|
+
</>
|
|
49
|
+
),
|
|
50
|
+
},
|
|
51
|
+
}
|