@pnx-mixtape/mxds 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/README.md +13 -13
  2. package/dist/build/accordion.css +1 -108
  3. package/dist/build/accordion.entry.js +1 -0
  4. package/dist/build/base.css +1 -1000
  5. package/dist/build/breadcrumb.css +1 -47
  6. package/dist/build/button.css +1 -126
  7. package/dist/build/callout.css +1 -11
  8. package/dist/build/card.css +1 -135
  9. package/dist/build/chunks/disclosure-widget-CfhDmuvA.js +1 -0
  10. package/dist/build/chunks/keyboard-Cs0cduxq.js +1 -0
  11. package/dist/build/chunks/polyfills-DUM8gN-6.js +1 -0
  12. package/dist/build/chunks/popover-BGbvrIUp.js +1 -0
  13. package/dist/build/chunks/utilities-Bzel_okZ.js +2 -0
  14. package/dist/build/constants.css +1 -120
  15. package/dist/build/container-grid.css +1 -207
  16. package/dist/build/content-block.css +1 -23
  17. package/dist/build/dialog.css +1 -98
  18. package/dist/build/dialog.entry.js +1 -0
  19. package/dist/build/drop-menu.css +1 -78
  20. package/dist/build/drop-menu.entry.js +1 -0
  21. package/dist/build/drupal.css +1 -74
  22. package/dist/build/footer-menu.css +1 -32
  23. package/dist/build/footer.css +1 -61
  24. package/dist/build/form.css +1 -589
  25. package/dist/build/grid.css +1 -200
  26. package/dist/build/header.css +1 -131
  27. package/dist/build/header.entry.js +1 -0
  28. package/dist/build/hero-banner.css +1 -62
  29. package/dist/build/icon.css +1 -399
  30. package/dist/build/in-page-alert.css +1 -94
  31. package/dist/build/in-page-alert.entry.js +1 -0
  32. package/dist/build/in-page-navigation.css +1 -17
  33. package/dist/build/in-page-navigation.entry.js +1 -0
  34. package/dist/build/index.css +1 -4980
  35. package/dist/build/link-list.css +1 -72
  36. package/dist/build/masthead.css +1 -39
  37. package/dist/build/nav-list.css +1 -29
  38. package/dist/build/navigation.css +1 -371
  39. package/dist/build/navigation.entry.js +1 -0
  40. package/dist/build/page.css +1 -184
  41. package/dist/build/pagination.css +1 -123
  42. package/dist/build/section.css +1 -160
  43. package/dist/build/sidebar.css +1 -105
  44. package/dist/build/sticky.css +1 -47
  45. package/dist/build/sticky.entry.js +1 -0
  46. package/dist/build/tabs.css +1 -106
  47. package/dist/build/tabs.entry.js +1 -0
  48. package/dist/build/tag.css +1 -67
  49. package/dist/build/tiles.css +1 -61
  50. package/dist/build/utilities.css +1 -175
  51. package/package.json +4 -3
  52. package/src/Atom/Background/_background.css +1 -22
  53. package/src/Atom/Blockquote/_blockquote.css +1 -1
  54. package/src/Atom/Button/README.md +3 -3
  55. package/src/Atom/Button/_buttons-styles.css +1 -1
  56. package/src/Atom/Button/_buttons.css +1 -1
  57. package/src/Atom/Heading/_headings.css +1 -1
  58. package/src/Atom/Icon/README.md +1 -1
  59. package/src/Atom/Icon/_extended-set.css +1 -1
  60. package/src/Atom/Icon/_icon.css +5 -5
  61. package/src/Atom/Image/_image.css +1 -1
  62. package/src/Atom/Link/_links.css +1 -1
  63. package/src/Atom/Media/_media.css +1 -1
  64. package/src/Atom/Media/media.twig +1 -5
  65. package/src/Atom/NavList/nav-list.css +1 -1
  66. package/src/Atom/README.md +1 -1
  67. package/src/Atom/Spacing/_spacing.css +1 -1
  68. package/src/Atom/Table/_table.css +1 -1
  69. package/src/Atom/Text/_text-align.css +1 -1
  70. package/src/Atom/Text/_text-sizes.css +1 -1
  71. package/src/Atom/Video/_video.css +1 -1
  72. package/src/Atom/Video/video.twig +10 -4
  73. package/src/Atom/_animated.css +1 -1
  74. package/src/Atom/_flow-legacy.css +1 -1
  75. package/src/Atom/_flow.css +1 -1
  76. package/src/Atom/_generic.css +1 -1
  77. package/src/Atom/_hr.css +1 -1
  78. package/src/Atom/base.css +2 -2
  79. package/src/Component/Accordion/README.md +7 -17
  80. package/src/Component/Accordion/accordion.css +2 -2
  81. package/src/Component/Accordion/accordion.entry.js +2 -0
  82. package/src/Component/Breadcrumb/breadcrumb.css +1 -1
  83. package/src/Component/Callout/callout.css +1 -1
  84. package/src/Component/Card/README.md +7 -13
  85. package/src/Component/Card/card.css +3 -3
  86. package/src/Component/ContentBlock/README.md +7 -13
  87. package/src/Component/ContentBlock/content-block.css +2 -2
  88. package/src/Component/Dialog/README.md +15 -49
  89. package/src/Component/Dialog/dialog.css +3 -3
  90. package/src/Component/Dialog/dialog.entry.js +1 -0
  91. package/src/Component/DropMenu/README.md +19 -4
  92. package/src/Component/DropMenu/drop-menu.css +1 -1
  93. package/src/Component/DropMenu/drop-menu.entry.js +1 -0
  94. package/src/Component/HeroBanner/hero-banner.css +1 -1
  95. package/src/Component/HeroBanner/hero-banner.twig +1 -0
  96. package/src/Component/InPageAlert/README.md +4 -4
  97. package/src/Component/InPageAlert/in-page-alert.css +2 -2
  98. package/src/Component/InPageAlert/in-page-alert.entry.js +1 -0
  99. package/src/Component/InPageNavigation/README.md +10 -15
  100. package/src/Component/InPageNavigation/in-page-navigation.css +2 -2
  101. package/src/Component/InPageNavigation/in-page-navigation.entry.js +1 -0
  102. package/src/Component/LinkList/README.md +3 -3
  103. package/src/Component/LinkList/link-list.css +1 -1
  104. package/src/Component/Navigation/README.md +16 -7
  105. package/src/Component/Navigation/_navigation-collapsible.css +1 -1
  106. package/src/Component/Navigation/_navigation-dropdown.css +1 -1
  107. package/src/Component/Navigation/_navigation-mega.css +1 -1
  108. package/src/Component/Navigation/_navigation.css +1 -1
  109. package/src/Component/Navigation/navigation.entry.js +1 -0
  110. package/src/Component/Pagination/README.md +3 -3
  111. package/src/Component/Pagination/pagination.css +1 -1
  112. package/src/Component/Sticky/README.md +12 -5
  113. package/src/Component/Sticky/sticky.css +2 -2
  114. package/src/Component/Sticky/sticky.entry.js +1 -0
  115. package/src/Component/Tabs/README.md +12 -4
  116. package/src/Component/Tabs/tabs.css +2 -2
  117. package/src/Component/Tabs/tabs.entry.js +1 -0
  118. package/src/Component/Tag/README.md +2 -2
  119. package/src/Component/Tag/tag.css +1 -1
  120. package/src/Component/Tile/tiles.css +1 -1
  121. package/src/Form/README.md +2 -2
  122. package/src/Form/form.css +12 -12
  123. package/src/Layout/Footer/FooterMenu/footer-menu.css +1 -1
  124. package/src/Layout/Footer/footer.css +1 -1
  125. package/src/Layout/Grid/container-grid.css +2 -2
  126. package/src/Layout/Grid/grid.css +2 -2
  127. package/src/Layout/Header/_header.css +1 -1
  128. package/src/Layout/Header/_toggles.css +1 -1
  129. package/src/Layout/Header/header.entry.js +1 -0
  130. package/src/Layout/Masthead/masthead.css +5 -5
  131. package/src/Layout/Masthead/masthead.twig +2 -2
  132. package/src/Layout/Page/README.md +2 -2
  133. package/src/Layout/Page/page.css +2 -2
  134. package/src/Layout/README.md +3 -2
  135. package/src/Layout/Section/section.css +4 -4
  136. package/src/Layout/Sidebar/sidebar.css +1 -1
  137. package/src/Utility/Drupal/README.md +1 -1
  138. package/src/Utility/README.md +1 -1
  139. package/src/Utility/_layout-utils.css +1 -1
  140. package/src/Utility/utilities.css +3 -3
  141. package/dist/build/Accordion.js +0 -61
  142. package/dist/build/Accordion.js.map +0 -1
  143. package/dist/build/AccordionDiv.js +0 -62
  144. package/dist/build/AccordionDiv.js.map +0 -1
  145. package/dist/build/AccordionGroup.js +0 -85
  146. package/dist/build/AccordionGroup.js.map +0 -1
  147. package/dist/build/AccordionMobile.js +0 -31
  148. package/dist/build/AccordionMobile.js.map +0 -1
  149. package/dist/build/Dialog.js +0 -116
  150. package/dist/build/Dialog.js.map +0 -1
  151. package/dist/build/DropMenu.js +0 -132
  152. package/dist/build/DropMenu.js.map +0 -1
  153. package/dist/build/GlobalToggle.js +0 -103
  154. package/dist/build/GlobalToggle.js.map +0 -1
  155. package/dist/build/InPageAlert.js +0 -61
  156. package/dist/build/InPageAlert.js.map +0 -1
  157. package/dist/build/InPageNavigation.js +0 -92
  158. package/dist/build/InPageNavigation.js.map +0 -1
  159. package/dist/build/Navigation.js +0 -126
  160. package/dist/build/Navigation.js.map +0 -1
  161. package/dist/build/Sticky.js +0 -63
  162. package/dist/build/Sticky.js.map +0 -1
  163. package/dist/build/Tabs.js +0 -164
  164. package/dist/build/Tabs.js.map +0 -1
  165. package/dist/build/breakpoint-loader.js +0 -52
  166. package/dist/build/breakpoint-loader.js.map +0 -1
  167. package/dist/build/chunks/js.cookie-CiMiGxWx.js +0 -101
  168. package/dist/build/chunks/js.cookie-CiMiGxWx.js.map +0 -1
  169. package/dist/build/chunks/polyfills-CJ5uTmUJ.js +0 -749
  170. package/dist/build/chunks/polyfills-CJ5uTmUJ.js.map +0 -1
  171. package/dist/build/chunks/popover-wbPSyFRj.js +0 -654
  172. package/dist/build/chunks/popover-wbPSyFRj.js.map +0 -1
  173. package/dist/build/chunks/utilities-BIk0P2KX.js +0 -61
  174. package/dist/build/chunks/utilities-BIk0P2KX.js.map +0 -1
  175. package/dist/build/cookie-compliance.js +0 -122
  176. package/dist/build/cookie-compliance.js.map +0 -1
  177. package/dist/build/disclosure-widget.js +0 -124
  178. package/dist/build/disclosure-widget.js.map +0 -1
  179. package/dist/build/io-loader.js +0 -44
  180. package/dist/build/io-loader.js.map +0 -1
  181. package/dist/build/keyboard.js +0 -101
  182. package/dist/build/keyboard.js.map +0 -1
  183. package/src/index.css +0 -27
@@ -1,62 +0,0 @@
1
- import DisclosureWidget from "./disclosure-widget.js";
2
- import "./chunks/js.cookie-CiMiGxWx.js";
3
- import "./io-loader.js";
4
- import "./breakpoint-loader.js";
5
- const _AccordionDiv = class _AccordionDiv extends HTMLElement {
6
- constructor() {
7
- super();
8
- this.handleHash = () => {
9
- const { hash } = window.location;
10
- if (hash && hash === `#${this.id}` && !this.hasAttribute("open")) {
11
- this.widget.handleToggle();
12
- }
13
- };
14
- this.internals_ = this.attachInternals();
15
- this.controller = new AbortController();
16
- }
17
- connectedCallback() {
18
- if (!this.trigger || !this.content) return;
19
- this.content?.setAttribute("inert", "");
20
- this.content?.setAttribute("role", "region");
21
- this.widget = new DisclosureWidget(this.trigger, this, {
22
- attribute: "open",
23
- setInitialAttribute: false
24
- });
25
- this.widget.init();
26
- const { signal } = this.controller;
27
- this.handleHash();
28
- document.addEventListener("hashchange", this.handleHash, { signal });
29
- }
30
- disconnectedCallback() {
31
- this.content?.removeAttribute("inert");
32
- this.widget.detach();
33
- this.controller.abort();
34
- }
35
- attributeChangedCallback(name, oldValue, newValue) {
36
- const isClosed = newValue === null;
37
- this.content?.toggleAttribute("inert", isClosed);
38
- }
39
- get trigger() {
40
- const trigger = this.querySelector(":scope > button");
41
- if (!trigger) {
42
- throw new Error(`${this.localName} must contain a <button> element.`);
43
- }
44
- return trigger;
45
- }
46
- get content() {
47
- const content = this.trigger?.nextElementSibling;
48
- if (!content) {
49
- throw new Error(
50
- `${this.localName} must contain a <div> element after the <button>.`
51
- );
52
- }
53
- return content;
54
- }
55
- };
56
- _AccordionDiv.observedAttributes = ["open"];
57
- let AccordionDiv = _AccordionDiv;
58
- customElements.define("mx-accordiondiv", AccordionDiv);
59
- export {
60
- AccordionDiv as default
61
- };
62
- //# sourceMappingURL=AccordionDiv.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccordionDiv.js","sources":["../../src/Component/Accordion/Elements/AccordionDiv.ts"],"sourcesContent":["/**\n * AccordionDiv\n * @file Support for adding <details> type behavior to divs.\n */\n\nimport { DisclosureWidget } from \"../../../Utility/utilities\"\n\nexport default class AccordionDiv extends HTMLElement {\n internals_: ElementInternals\n controller: AbortController\n widget!: DisclosureWidget\n static observedAttributes: string[] = [\"open\"]\n\n constructor() {\n super()\n this.internals_ = this.attachInternals()\n this.controller = new AbortController()\n }\n\n connectedCallback(): void {\n if (!this.trigger || !this.content) return\n this.content?.setAttribute(\"inert\", \"\")\n this.content?.setAttribute(\"role\", \"region\")\n this.widget = new DisclosureWidget(this.trigger, this, {\n attribute: \"open\",\n setInitialAttribute: false,\n })\n this.widget.init()\n const { signal }: AbortController = this.controller\n this.handleHash()\n document.addEventListener(\"hashchange\", this.handleHash, { signal })\n }\n\n disconnectedCallback(): void {\n this.content?.removeAttribute(\"inert\")\n this.widget.detach()\n this.controller.abort()\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string,\n newValue: string,\n ): void {\n const isClosed = newValue === null\n this.content?.toggleAttribute(\"inert\", isClosed)\n }\n\n handleHash = (): void => {\n const { hash } = window.location\n if (hash && hash === `#${this.id}` && !this.hasAttribute(\"open\")) {\n this.widget.handleToggle()\n }\n }\n\n get trigger(): HTMLButtonElement {\n const trigger: HTMLButtonElement | null =\n this.querySelector(\":scope > button\")\n if (!trigger) {\n throw new Error(`${this.localName} must contain a <button> element.`)\n }\n return trigger\n }\n\n get content(): HTMLDivElement {\n const content: HTMLDivElement | null | undefined = this.trigger\n ?.nextElementSibling as HTMLDivElement\n if (!content) {\n throw new Error(\n `${this.localName} must contain a <div> element after the <button>.`,\n )\n }\n return content\n }\n}\n\ncustomElements.define(\"mx-accordiondiv\", AccordionDiv)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-accordiondiv\": AccordionDiv\n }\n}\n"],"names":[],"mappings":";;;;AAOA,MAAqB,gBAArB,MAAqB,sBAAqB,YAAY;AAAA,EAMpD,cAAc;AACN;AAkCR,SAAA,aAAa,MAAY;AACjB,YAAA,EAAE,KAAK,IAAI,OAAO;AACpB,UAAA,QAAQ,SAAS,IAAI,KAAK,EAAE,MAAM,CAAC,KAAK,aAAa,MAAM,GAAG;AAChE,aAAK,OAAO;MACd;AAAA,IAAA;AArCK,SAAA,aAAa,KAAK;AAClB,SAAA,aAAa,IAAI;EACxB;AAAA,EAEA,oBAA0B;AACxB,QAAI,CAAC,KAAK,WAAW,CAAC,KAAK,QAAS;AAC/B,SAAA,SAAS,aAAa,SAAS,EAAE;AACjC,SAAA,SAAS,aAAa,QAAQ,QAAQ;AAC3C,SAAK,SAAS,IAAI,iBAAiB,KAAK,SAAS,MAAM;AAAA,MACrD,WAAW;AAAA,MACX,qBAAqB;AAAA,IAAA,CACtB;AACD,SAAK,OAAO;AACN,UAAA,EAAE,OAAO,IAAqB,KAAK;AACzC,SAAK,WAAW;AAChB,aAAS,iBAAiB,cAAc,KAAK,YAAY,EAAE,QAAQ;AAAA,EACrE;AAAA,EAEA,uBAA6B;AACtB,SAAA,SAAS,gBAAgB,OAAO;AACrC,SAAK,OAAO;AACZ,SAAK,WAAW;EAClB;AAAA,EAEA,yBACE,MACA,UACA,UACM;AACN,UAAM,WAAW,aAAa;AACzB,SAAA,SAAS,gBAAgB,SAAS,QAAQ;AAAA,EACjD;AAAA,EASA,IAAI,UAA6B;AACzB,UAAA,UACJ,KAAK,cAAc,iBAAiB;AACtC,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,GAAG,KAAK,SAAS,mCAAmC;AAAA,IACtE;AACO,WAAA;AAAA,EACT;AAAA,EAEA,IAAI,UAA0B;AACtB,UAAA,UAA6C,KAAK,SACpD;AACJ,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI;AAAA,QACR,GAAG,KAAK,SAAS;AAAA,MAAA;AAAA,IAErB;AACO,WAAA;AAAA,EACT;AACF;AA/DS,cAAA,qBAA+B,CAAC,MAAM;AAJ/C,IAAqB,eAArB;AAqEA,eAAe,OAAO,mBAAmB,YAAY;"}
@@ -1,85 +0,0 @@
1
- class AccordionGroup extends HTMLElement {
2
- constructor() {
3
- super();
4
- this.handleClick = ({ target }) => {
5
- if (target === this.expandTrigger) {
6
- this.handleExpand();
7
- }
8
- if (target === this.collapseTrigger) {
9
- this.handleCollapse();
10
- }
11
- };
12
- this.handleExpand = () => {
13
- this.accordions.forEach((detail) => detail.open = true);
14
- this.expandTrigger.disabled = true;
15
- this.collapseTrigger.disabled = false;
16
- };
17
- this.handleCollapse = () => {
18
- this.accordions.forEach((detail) => detail.open = false);
19
- this.expandTrigger.disabled = false;
20
- this.collapseTrigger.disabled = true;
21
- };
22
- this.handleToggle = () => {
23
- this.expandTrigger.disabled = [...this.accordions].every(
24
- (details) => details.open === true
25
- );
26
- this.collapseTrigger.disabled = [...this.accordions].every(
27
- (details) => details.open !== true
28
- );
29
- };
30
- this.internals_ = this.attachInternals();
31
- this.controller = new AbortController();
32
- }
33
- connectedCallback() {
34
- if (!this.accordions || !this.expandTrigger || !this.collapseTrigger) return;
35
- this.collapseTrigger.disabled = true;
36
- const { signal } = this.controller;
37
- this.addEventListener("click", this.handleClick, {
38
- signal
39
- });
40
- this.accordions.forEach(
41
- (details) => details.addEventListener("toggle", this.handleToggle, {
42
- signal
43
- })
44
- );
45
- }
46
- disconnectedCallback() {
47
- this.controller.abort();
48
- }
49
- get accordions() {
50
- const accordions = this.querySelectorAll("details");
51
- if (!accordions.length) {
52
- throw new Error(
53
- `${this.localName} must contain at least one <details> element.`
54
- );
55
- }
56
- return accordions;
57
- }
58
- get expandTrigger() {
59
- const trigger = this.querySelector(
60
- ".accordions__toggle-all button[data-expand]"
61
- );
62
- if (!trigger) {
63
- throw new Error(
64
- `${this.localName} must contain a <button data-expand> element.`
65
- );
66
- }
67
- return trigger;
68
- }
69
- get collapseTrigger() {
70
- const trigger = this.querySelector(
71
- ".accordions__toggle-all button[data-collapse]"
72
- );
73
- if (!trigger) {
74
- throw new Error(
75
- `${this.localName} must contain a <button data-collapse> element.`
76
- );
77
- }
78
- return trigger;
79
- }
80
- }
81
- customElements.define("mx-accordion-group", AccordionGroup);
82
- export {
83
- AccordionGroup as default
84
- };
85
- //# sourceMappingURL=AccordionGroup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccordionGroup.js","sources":["../../src/Component/Accordion/Elements/AccordionGroup.ts"],"sourcesContent":["/**\n * Accordion Group\n * @file Support opening and closing all.\n */\n\nexport default class AccordionGroup extends HTMLElement {\n internals_: ElementInternals\n controller: AbortController\n\n constructor() {\n super()\n this.internals_ = this.attachInternals()\n this.controller = new AbortController()\n }\n\n connectedCallback(): void {\n if (!this.accordions || !this.expandTrigger || !this.collapseTrigger) return\n this.collapseTrigger.disabled = true\n const { signal }: AbortController = this.controller\n this.addEventListener(\"click\", this.handleClick, {\n signal,\n })\n this.accordions.forEach(details =>\n details.addEventListener(\"toggle\", this.handleToggle, {\n signal,\n }),\n )\n }\n\n disconnectedCallback(): void {\n this.controller.abort()\n }\n\n handleClick = ({ target }) => {\n if (target === this.expandTrigger) {\n this.handleExpand()\n }\n if (target === this.collapseTrigger) {\n this.handleCollapse()\n }\n }\n\n handleExpand = () => {\n this.accordions.forEach(detail => (detail.open = true))\n this.expandTrigger.disabled = true\n this.collapseTrigger.disabled = false\n }\n\n handleCollapse = () => {\n this.accordions.forEach(detail => (detail.open = false))\n this.expandTrigger.disabled = false\n this.collapseTrigger.disabled = true\n }\n\n handleToggle = () => {\n this.expandTrigger.disabled = [...this.accordions].every(\n details => details.open === true,\n )\n this.collapseTrigger.disabled = [...this.accordions].every(\n details => details.open !== true,\n )\n }\n\n get accordions(): NodeListOf<HTMLDetailsElement> | null {\n const accordions: NodeListOf<HTMLDetailsElement> | null =\n this.querySelectorAll(\"details\")\n if (!accordions.length) {\n throw new Error(\n `${this.localName} must contain at least one <details> element.`,\n )\n }\n return accordions\n }\n\n get expandTrigger(): HTMLButtonElement | null {\n const trigger: HTMLButtonElement | null = this.querySelector(\n \".accordions__toggle-all button[data-expand]\",\n )\n if (!trigger) {\n throw new Error(\n `${this.localName} must contain a <button data-expand> element.`,\n )\n }\n return trigger\n }\n\n get collapseTrigger(): HTMLButtonElement | null {\n const trigger: HTMLButtonElement | null = this.querySelector(\n \".accordions__toggle-all button[data-collapse]\",\n )\n if (!trigger) {\n throw new Error(\n `${this.localName} must contain a <button data-collapse> element.`,\n )\n }\n return trigger\n }\n}\n\ncustomElements.define(\"mx-accordion-group\", AccordionGroup)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-accordion-group\": AccordionGroup\n }\n}\n"],"names":[],"mappings":"AAKA,MAAqB,uBAAuB,YAAY;AAAA,EAItD,cAAc;AACN;AAuBM,SAAA,cAAA,CAAC,EAAE,aAAa;AACxB,UAAA,WAAW,KAAK,eAAe;AACjC,aAAK,aAAa;AAAA,MACpB;AACI,UAAA,WAAW,KAAK,iBAAiB;AACnC,aAAK,eAAe;AAAA,MACtB;AAAA,IAAA;AAGF,SAAA,eAAe,MAAM;AACnB,WAAK,WAAW,QAAQ,CAAW,WAAA,OAAO,OAAO,IAAK;AACtD,WAAK,cAAc,WAAW;AAC9B,WAAK,gBAAgB,WAAW;AAAA,IAAA;AAGlC,SAAA,iBAAiB,MAAM;AACrB,WAAK,WAAW,QAAQ,CAAW,WAAA,OAAO,OAAO,KAAM;AACvD,WAAK,cAAc,WAAW;AAC9B,WAAK,gBAAgB,WAAW;AAAA,IAAA;AAGlC,SAAA,eAAe,MAAM;AACnB,WAAK,cAAc,WAAW,CAAC,GAAG,KAAK,UAAU,EAAE;AAAA,QACjD,CAAA,YAAW,QAAQ,SAAS;AAAA,MAAA;AAE9B,WAAK,gBAAgB,WAAW,CAAC,GAAG,KAAK,UAAU,EAAE;AAAA,QACnD,CAAA,YAAW,QAAQ,SAAS;AAAA,MAAA;AAAA,IAC9B;AAjDK,SAAA,aAAa,KAAK;AAClB,SAAA,aAAa,IAAI;EACxB;AAAA,EAEA,oBAA0B;AACpB,QAAA,CAAC,KAAK,cAAc,CAAC,KAAK,iBAAiB,CAAC,KAAK,gBAAiB;AACtE,SAAK,gBAAgB,WAAW;AAC1B,UAAA,EAAE,OAAO,IAAqB,KAAK;AACpC,SAAA,iBAAiB,SAAS,KAAK,aAAa;AAAA,MAC/C;AAAA,IAAA,CACD;AACD,SAAK,WAAW;AAAA,MAAQ,CACtB,YAAA,QAAQ,iBAAiB,UAAU,KAAK,cAAc;AAAA,QACpD;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EAEL;AAAA,EAEA,uBAA6B;AAC3B,SAAK,WAAW;EAClB;AAAA,EAgCA,IAAI,aAAoD;AAChD,UAAA,aACJ,KAAK,iBAAiB,SAAS;AAC7B,QAAA,CAAC,WAAW,QAAQ;AACtB,YAAM,IAAI;AAAA,QACR,GAAG,KAAK,SAAS;AAAA,MAAA;AAAA,IAErB;AACO,WAAA;AAAA,EACT;AAAA,EAEA,IAAI,gBAA0C;AAC5C,UAAM,UAAoC,KAAK;AAAA,MAC7C;AAAA,IAAA;AAEF,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI;AAAA,QACR,GAAG,KAAK,SAAS;AAAA,MAAA;AAAA,IAErB;AACO,WAAA;AAAA,EACT;AAAA,EAEA,IAAI,kBAA4C;AAC9C,UAAM,UAAoC,KAAK;AAAA,MAC7C;AAAA,IAAA;AAEF,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI;AAAA,QACR,GAAG,KAAK,SAAS;AAAA,MAAA;AAAA,IAErB;AACO,WAAA;AAAA,EACT;AACF;AAEA,eAAe,OAAO,sBAAsB,cAAc;"}
@@ -1,31 +0,0 @@
1
- import Accordion from "./Accordion.js";
2
- class AccordionMobile extends Accordion {
3
- constructor() {
4
- super();
5
- this.handleBreakpoint = ({
6
- matches
7
- }) => {
8
- if (!this.details) return;
9
- this.details.toggleAttribute("open", !matches);
10
- };
11
- this.mq = this.getAttribute("mq") || "(max-width: 720px)";
12
- }
13
- connectedCallback() {
14
- this.handleBreakpoint(this.breakpoint);
15
- const { signal } = this.controller;
16
- this.breakpoint.addEventListener("change", this.handleBreakpoint, {
17
- signal
18
- });
19
- }
20
- disconnectedCallback() {
21
- this.controller.abort();
22
- }
23
- get breakpoint() {
24
- return window.matchMedia(this.mq);
25
- }
26
- }
27
- customElements.define("mx-accordionmobile", AccordionMobile);
28
- export {
29
- AccordionMobile as default
30
- };
31
- //# sourceMappingURL=AccordionMobile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccordionMobile.js","sources":["../../src/Component/Accordion/Elements/AccordionMobile.ts"],"sourcesContent":["/**\n * AccordionMobile\n * @file Support a mobile only <details> element, that opens at a breakpoint.\n */\n\nimport Accordion from \"./Accordion\"\n\nexport default class AccordionMobile extends Accordion {\n mq: string\n toggleAttribute!: Element[\"toggleAttribute\"]\n\n constructor() {\n super()\n this.mq = this.getAttribute(\"mq\") || \"(max-width: 720px)\"\n }\n\n connectedCallback(): void {\n this.handleBreakpoint(this.breakpoint)\n const { signal }: AbortController = this.controller\n this.breakpoint.addEventListener(\"change\", this.handleBreakpoint, {\n signal,\n })\n }\n\n disconnectedCallback(): void {\n this.controller.abort()\n }\n\n handleBreakpoint = ({\n matches,\n }: MediaQueryList | MediaQueryListEvent): void => {\n if (!this.details) return\n this.details.toggleAttribute(\"open\", !matches)\n }\n\n get breakpoint(): MediaQueryList {\n return window.matchMedia(this.mq)\n }\n}\n\ncustomElements.define(\"mx-accordionmobile\", AccordionMobile)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-accordionmobile\": AccordionMobile\n }\n}\n"],"names":[],"mappings":";AAOA,MAAqB,wBAAwB,UAAU;AAAA,EAIrD,cAAc;AACN;AAgBR,SAAA,mBAAmB,CAAC;AAAA,MAClB;AAAA,IAAA,MACgD;AAC5C,UAAA,CAAC,KAAK,QAAS;AACnB,WAAK,QAAQ,gBAAgB,QAAQ,CAAC,OAAO;AAAA,IAAA;AAnB7C,SAAK,KAAK,KAAK,aAAa,IAAI,KAAK;AAAA,EACvC;AAAA,EAEA,oBAA0B;AACnB,SAAA,iBAAiB,KAAK,UAAU;AAC/B,UAAA,EAAE,OAAO,IAAqB,KAAK;AACzC,SAAK,WAAW,iBAAiB,UAAU,KAAK,kBAAkB;AAAA,MAChE;AAAA,IAAA,CACD;AAAA,EACH;AAAA,EAEA,uBAA6B;AAC3B,SAAK,WAAW;EAClB;AAAA,EASA,IAAI,aAA6B;AACxB,WAAA,OAAO,WAAW,KAAK,EAAE;AAAA,EAClC;AACF;AAEA,eAAe,OAAO,sBAAsB,eAAe;"}
@@ -1,116 +0,0 @@
1
- import { h as handleOutsideClick, a as handleEscape } from "./chunks/utilities-BIk0P2KX.js";
2
- class Dialog extends HTMLElement {
3
- constructor() {
4
- super();
5
- this.scrollLockClass = "body--scroll-lock";
6
- this.handleOpen = () => {
7
- if (!this.dialog) return;
8
- if (typeof this.dialog.show === "function") {
9
- this.isModal ? this.dialog.showModal() : this.dialog.show();
10
- }
11
- this.openBtns.forEach(
12
- (btn) => btn.setAttribute("aria-expanded", "true")
13
- );
14
- document.body.classList.add(this.scrollLockClass);
15
- };
16
- this.handleClose = () => {
17
- if (!this.dialog) return;
18
- if (typeof this.dialog.close === "function") this.dialog.close();
19
- this.openBtns.forEach(
20
- (btn) => btn.setAttribute("aria-expanded", "false")
21
- );
22
- document.body.classList.remove(this.scrollLockClass);
23
- };
24
- this.internals_ = this.attachInternals();
25
- this.controller = new AbortController();
26
- }
27
- connectedCallback() {
28
- if (!this.openBtns || !this.dialog) return;
29
- const { signal } = this.controller;
30
- document.addEventListener(
31
- "click",
32
- (e) => {
33
- if (![...this.openBtns].includes(e.target)) return;
34
- this.handleOpen();
35
- e.preventDefault();
36
- },
37
- {
38
- signal
39
- }
40
- );
41
- this.dialog.addEventListener(
42
- "click",
43
- (e) => {
44
- if (![...this.closeBtns].includes(e.target)) return;
45
- this.handleClose();
46
- e.preventDefault();
47
- },
48
- {
49
- signal
50
- }
51
- );
52
- document.addEventListener(
53
- "click",
54
- (e) => {
55
- if (!this.dialog?.open) return;
56
- handleOutsideClick(e, this.dialog, this.handleClose, [
57
- ...this.openBtns,
58
- ...this.closeBtns
59
- ]);
60
- },
61
- { signal }
62
- );
63
- document.addEventListener(
64
- "keydown",
65
- (e) => {
66
- if (!this.dialog?.open) return;
67
- handleEscape(e, this.handleClose);
68
- },
69
- { signal }
70
- );
71
- }
72
- /**
73
- * Disconnected.
74
- */
75
- disconnectedCallback() {
76
- if (!this.dialog) return;
77
- if (typeof this.dialog.close === "function") this.dialog.close();
78
- this.openBtns.forEach(
79
- (btn) => btn.setAttribute("aria-expanded", "false")
80
- );
81
- document.body.classList.remove(this.scrollLockClass);
82
- this.controller.abort();
83
- }
84
- get dialog() {
85
- const dialog = this.querySelector("dialog");
86
- if (!dialog) {
87
- throw new Error(`${this.localName} must contain a <dialog> element.`);
88
- }
89
- return dialog;
90
- }
91
- get openBtns() {
92
- const btns = document.querySelectorAll(
93
- `[href="#${this.id}"], [aria-controls="${this.id}"]`
94
- );
95
- if (!btns) {
96
- throw new Error(
97
- `${this.localName} must have an associated opening element.`
98
- );
99
- }
100
- btns.forEach((btn) => {
101
- btn.setAttribute("aria-controls", this.id);
102
- });
103
- return btns;
104
- }
105
- get closeBtns() {
106
- return this.querySelectorAll("button[data-close]");
107
- }
108
- get isModal() {
109
- return this.hasAttribute("data-modal");
110
- }
111
- }
112
- customElements.define("mx-dialog", Dialog);
113
- export {
114
- Dialog as default
115
- };
116
- //# sourceMappingURL=Dialog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Dialog.js","sources":["../../src/Component/Dialog/Elements/Dialog.ts"],"sourcesContent":["/**\n * DialogBase\n * @file Support opening/closing, and adding a scroll lock to the body.\n */\n\nimport { handleOutsideClick, handleEscape } from \"../../../Utility/utilities\"\n\nexport default class Dialog extends HTMLElement {\n internals_: ElementInternals\n controller: AbortController\n scrollLockClass: string = \"body--scroll-lock\"\n\n constructor() {\n super()\n this.internals_ = this.attachInternals()\n this.controller = new AbortController()\n }\n\n connectedCallback(): void {\n if (!this.openBtns || !this.dialog) return\n\n const { signal }: AbortController = this.controller\n\n // Open on toggle click.\n document.addEventListener(\n \"click\",\n (e: MouseEvent): void => {\n if (![...this.openBtns].includes(e.target as HTMLButtonElement)) return\n this.handleOpen()\n e.preventDefault()\n },\n {\n signal,\n },\n )\n\n // Close on close button click.\n this.dialog.addEventListener(\n \"click\",\n (e: MouseEvent): void => {\n if (![...this.closeBtns].includes(e.target as HTMLButtonElement)) return\n this.handleClose()\n e.preventDefault()\n },\n {\n signal,\n },\n )\n\n // Close on outside click.\n document.addEventListener(\n \"click\",\n (e: MouseEvent): void => {\n if (!this.dialog?.open) return\n handleOutsideClick(e, this.dialog as HTMLElement, this.handleClose, [\n ...this.openBtns,\n ...this.closeBtns,\n ])\n },\n { signal },\n )\n\n // Close on escape keydown.\n document.addEventListener(\n \"keydown\",\n (e: KeyboardEvent): void => {\n if (!this.dialog?.open) return\n handleEscape(e, this.handleClose)\n },\n { signal },\n )\n }\n\n /**\n * Disconnected.\n */\n disconnectedCallback(): void {\n if (!this.dialog) return\n if (typeof this.dialog.close === \"function\") this.dialog.close()\n this.openBtns.forEach((btn: Element) =>\n btn.setAttribute(\"aria-expanded\", \"false\"),\n )\n document.body.classList.remove(this.scrollLockClass)\n this.controller.abort()\n }\n\n handleOpen = (): void => {\n if (!this.dialog) return\n if (typeof this.dialog.show === \"function\") {\n this.isModal ? this.dialog.showModal() : this.dialog.show()\n }\n this.openBtns.forEach((btn: Element) =>\n btn.setAttribute(\"aria-expanded\", \"true\"),\n )\n document.body.classList.add(this.scrollLockClass)\n }\n\n handleClose = (): void => {\n if (!this.dialog) return\n if (typeof this.dialog.close === \"function\") this.dialog.close()\n this.openBtns.forEach((btn: Element) =>\n btn.setAttribute(\"aria-expanded\", \"false\"),\n )\n document.body.classList.remove(this.scrollLockClass)\n }\n\n get dialog(): HTMLDialogElement | null {\n const dialog: HTMLDialogElement | null = this.querySelector(\"dialog\")\n if (!dialog) {\n throw new Error(`${this.localName} must contain a <dialog> element.`)\n }\n return dialog\n }\n\n get openBtns(): NodeListOf<HTMLButtonElement> {\n const btns: NodeListOf<HTMLButtonElement> = document.querySelectorAll(\n `[href=\"#${this.id}\"], [aria-controls=\"${this.id}\"]`,\n )\n if (!btns) {\n throw new Error(\n `${this.localName} must have an associated opening element.`,\n )\n }\n btns.forEach((btn: HTMLButtonElement): void => {\n btn.setAttribute(\"aria-controls\", this.id)\n })\n return btns\n }\n\n get closeBtns(): NodeListOf<HTMLButtonElement> {\n return this.querySelectorAll(\"button[data-close]\")\n }\n\n get isModal(): boolean {\n return this.hasAttribute(\"data-modal\")\n }\n}\n\ncustomElements.define(\"mx-dialog\", Dialog)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-dialog\": Dialog\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,132 +0,0 @@
1
- import { m as makeAnchor } from "./chunks/utilities-BIk0P2KX.js";
2
- import Keyboard from "./keyboard.js";
3
- class DropMenu extends HTMLElement {
4
- constructor() {
5
- super();
6
- this.keyboard = new Keyboard();
7
- this.handleSelect = (event) => {
8
- const target = event.target;
9
- this.items.forEach((item) => {
10
- if (!(item instanceof HTMLButtonElement)) return;
11
- item.setAttribute("aria-checked", String(item === target));
12
- });
13
- const newEvent = new CustomEvent("drop-menu-select", {
14
- bubbles: true,
15
- cancelable: true,
16
- detail: {
17
- event,
18
- target
19
- }
20
- });
21
- this.menu.dispatchEvent(newEvent);
22
- if (this.closeOnClick) this.menu.togglePopover();
23
- };
24
- this.handleToggle = ({ newState }) => {
25
- const handleClose = () => this.menu.togglePopover();
26
- if (newState === "open") {
27
- this.keyboard.attachPopup(this.menu.id, handleClose);
28
- } else {
29
- this.keyboard.detachPopup(this.menu.id);
30
- }
31
- };
32
- this.attachKeyboardMenu = () => {
33
- this.keyboard.attachMenu(this.menu, this.items);
34
- };
35
- this.detachKeyboardMenu = () => {
36
- this.keyboard.detachMenu();
37
- };
38
- this.generatedId = () => {
39
- const string = this.trigger?.textContent?.trim();
40
- return !string ? "" : makeAnchor(string);
41
- };
42
- this.internals_ = this.attachInternals();
43
- this.controller = new AbortController();
44
- }
45
- async connectedCallback() {
46
- if (!this.menu || !this.trigger) return;
47
- if (!("anchorName" in document.documentElement.style)) {
48
- const { default: Polyfills } = await import("./chunks/polyfills-CJ5uTmUJ.js");
49
- new Polyfills(this.menu);
50
- }
51
- if (!Object.hasOwn(HTMLElement, "popover")) {
52
- await import("./chunks/popover-wbPSyFRj.js");
53
- }
54
- this.closeOnClick = this.hasAttribute("closeonclick");
55
- const { signal } = this.controller;
56
- document.addEventListener(
57
- "click",
58
- (event) => {
59
- const { target } = event;
60
- if (target !== this.menu && ![...this.items].includes(
61
- target
62
- ))
63
- return;
64
- this.handleSelect(event);
65
- event.preventDefault();
66
- },
67
- {
68
- signal
69
- }
70
- );
71
- document.addEventListener(
72
- "keydown",
73
- (event) => {
74
- const { target, key } = event;
75
- if (target !== this.menu && ![...this.items].includes(
76
- target
77
- ))
78
- return;
79
- if (key === "Enter") this.handleSelect(event);
80
- event.preventDefault();
81
- },
82
- {
83
- signal
84
- }
85
- );
86
- this.keyboard.attachEventListeners(signal);
87
- this.menu.addEventListener("focusin", this.attachKeyboardMenu, {
88
- signal
89
- });
90
- this.menu.addEventListener("focusout", this.detachKeyboardMenu, {
91
- signal
92
- });
93
- this.menu.addEventListener("toggle", this.handleToggle, {
94
- signal
95
- });
96
- }
97
- disconnectedCallback() {
98
- this.controller.abort();
99
- this.keyboard.detachMenu();
100
- }
101
- get menu() {
102
- const menu = this.querySelector("[popover]");
103
- if (!menu) {
104
- throw new Error(`${this.localName} must contain a <div popover> element.`);
105
- }
106
- menu.id = menu.id || this.generatedId();
107
- return menu;
108
- }
109
- get items() {
110
- const items = this.menu.querySelectorAll(":scope > *");
111
- if (!items) {
112
- throw new Error(`${this.localName} must contain some menu items.`);
113
- }
114
- return items;
115
- }
116
- get trigger() {
117
- const trigger = this.querySelector(
118
- `[popovertarget=${this.menu?.id}]`
119
- );
120
- if (!trigger) {
121
- throw new Error(
122
- `${this.localName} must contain a <button popovertarget="${this.menu.id}">`
123
- );
124
- }
125
- return trigger;
126
- }
127
- }
128
- customElements.define("mx-dropmenu", DropMenu);
129
- export {
130
- DropMenu as default
131
- };
132
- //# sourceMappingURL=DropMenu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DropMenu.js","sources":["../../src/Component/DropMenu/Elements/DropMenu.ts"],"sourcesContent":["/**\n * DropMenu\n * @file Create a DropMenu using the Popover and Anchor APIs\n */\n\nimport { Keyboard, makeAnchor } from \"../../../Utility/utilities\"\n\nexport type DropMenuEvent = CustomEvent<{\n event: MouseEvent | KeyboardEvent\n target: HTMLButtonElement | HTMLAnchorElement\n}>\n\nexport default class DropMenu extends HTMLElement {\n internals_: ElementInternals\n controller: AbortController\n keyboard: Keyboard = new Keyboard()\n closeOnClick: boolean\n\n constructor() {\n super()\n this.internals_ = this.attachInternals()\n this.controller = new AbortController()\n }\n\n async connectedCallback() {\n if (!this.menu || !this.trigger) return\n\n // Polyfill anchor (everywhere so far).\n if (!(\"anchorName\" in document.documentElement.style)) {\n const { default: Polyfills } = await import(\"../polyfills.js\")\n new Polyfills(this.menu) // eslint-disable-line no-new\n }\n // Polyfill popover (FF only)\n if (!Object.hasOwn(HTMLElement, \"popover\")) {\n await import(\"@oddbird/popover-polyfill\")\n }\n this.closeOnClick = this.hasAttribute(\"closeonclick\")\n\n const { signal }: AbortController = this.controller\n document.addEventListener(\n \"click\",\n (event: MouseEvent): void => {\n const { target } = event\n if (\n (target as HTMLElement) !== this.menu &&\n ![...this.items].includes(\n target as HTMLButtonElement | HTMLAnchorElement,\n )\n )\n return\n this.handleSelect(event)\n event.preventDefault()\n },\n {\n signal,\n },\n )\n\n document.addEventListener(\n \"keydown\",\n (event: KeyboardEvent): void => {\n const { target, key } = event\n if (\n (target as HTMLElement) !== this.menu &&\n ![...this.items].includes(\n target as HTMLButtonElement | HTMLAnchorElement,\n )\n )\n return\n if (key === \"Enter\") this.handleSelect(event)\n event.preventDefault()\n },\n {\n signal,\n },\n )\n\n this.keyboard.attachEventListeners(signal)\n this.menu.addEventListener(\"focusin\", this.attachKeyboardMenu, {\n signal,\n })\n this.menu.addEventListener(\"focusout\", this.detachKeyboardMenu, {\n signal,\n })\n this.menu.addEventListener(\"toggle\", this.handleToggle, {\n signal,\n })\n }\n\n disconnectedCallback(): void {\n this.controller.abort()\n this.keyboard.detachMenu()\n }\n\n handleSelect = (event: MouseEvent | KeyboardEvent): void => {\n const target = event.target as HTMLButtonElement | HTMLAnchorElement\n this.items.forEach(item => {\n if (!(item instanceof HTMLButtonElement)) return\n item.setAttribute(\"aria-checked\", String(item === target))\n })\n const newEvent: DropMenuEvent = new CustomEvent(\"drop-menu-select\", {\n bubbles: true,\n cancelable: true,\n detail: {\n event,\n target,\n },\n })\n this.menu.dispatchEvent(newEvent)\n if (this.closeOnClick) this.menu.togglePopover()\n }\n\n handleToggle = ({ newState }: ToggleEvent): void => {\n const handleClose = () => this.menu.togglePopover()\n if (newState === \"open\") {\n this.keyboard.attachPopup(this.menu.id, handleClose)\n } else {\n this.keyboard.detachPopup(this.menu.id)\n }\n }\n\n attachKeyboardMenu = (): void => {\n this.keyboard.attachMenu(this.menu, this.items)\n }\n\n detachKeyboardMenu = (): void => {\n this.keyboard.detachMenu()\n }\n\n get menu(): HTMLDivElement | null {\n const menu: HTMLDivElement | null = this.querySelector(\"[popover]\")\n if (!menu) {\n throw new Error(`${this.localName} must contain a <div popover> element.`)\n }\n menu.id = menu.id || this.generatedId()\n return menu\n }\n\n get items(): NodeListOf<HTMLButtonElement | HTMLAnchorElement> {\n const items: NodeListOf<HTMLButtonElement | HTMLAnchorElement> =\n this.menu.querySelectorAll(\":scope > *\")\n if (!items) {\n throw new Error(`${this.localName} must contain some menu items.`)\n }\n return items\n }\n\n get trigger(): HTMLButtonElement | null {\n const trigger: HTMLButtonElement | null = this.querySelector(\n `[popovertarget=${this.menu?.id}]`,\n )\n if (!trigger) {\n throw new Error(\n `${this.localName} must contain a <button popovertarget=\"${this.menu.id}\">`,\n )\n }\n return trigger\n }\n\n generatedId = (): string => {\n const string: string | undefined = this.trigger?.textContent?.trim()\n return !string ? \"\" : makeAnchor(string)\n }\n}\n\ncustomElements.define(\"mx-dropmenu\", DropMenu)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-dropmenu\": DropMenu\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,103 +0,0 @@
1
- import DisclosureWidget from "./disclosure-widget.js";
2
- import "./chunks/js.cookie-CiMiGxWx.js";
3
- import "./io-loader.js";
4
- import "./breakpoint-loader.js";
5
- class GlobalToggle extends HTMLElement {
6
- constructor() {
7
- super();
8
- this.closeIconClass = "icon--close";
9
- this.menuIconClass = "icon--menu";
10
- this.searchIconClass = "icon--search";
11
- this.handleBreakpoint = ({
12
- matches
13
- }) => {
14
- if (!this.trigger) return;
15
- if (matches) {
16
- this.widget.attach();
17
- this.target.setAttribute("inert", "");
18
- this.trigger.addEventListener("disclosure-toggle", this.handleDisclosure);
19
- } else {
20
- this.widget.detach();
21
- this.target.removeAttribute("inert");
22
- this.trigger.removeEventListener(
23
- "disclosure-toggle",
24
- this.handleDisclosure
25
- );
26
- }
27
- };
28
- this.handleDisclosure = ({ detail }) => {
29
- const { isOpen } = detail;
30
- const origText = !isOpen ? "Close" : "Open";
31
- const replaceText = !isOpen ? "Open" : "Close";
32
- this.trigger.textContent = this.triggerText.replace(origText, replaceText);
33
- const isSearch = this.controls === "primary-search";
34
- if (isSearch) this.handleSearchDisclosure(isOpen);
35
- this.trigger.classList.toggle(
36
- isSearch ? this.searchIconClass : this.menuIconClass
37
- );
38
- this.trigger.classList.toggle(this.closeIconClass);
39
- };
40
- this.handleSearchDisclosure = (isOpen) => {
41
- if (this.hideMenu) {
42
- const menuTrigger = document.querySelector(`.${this.menuIconClass}`);
43
- menuTrigger.toggleAttribute("hidden");
44
- }
45
- if (!isOpen) {
46
- this.trigger.focus();
47
- } else {
48
- this.target.querySelector("input")?.focus();
49
- }
50
- };
51
- this.internals_ = this.attachInternals();
52
- this.controller = new AbortController();
53
- this.mq = this.getAttribute("mq") || "(max-width: 720px)";
54
- }
55
- connectedCallback() {
56
- if (!this.trigger || !this.target) return;
57
- this.target?.setAttribute("role", "region");
58
- this.widget = new DisclosureWidget(this.trigger, this.target);
59
- this.widget.init();
60
- const { signal } = this.controller;
61
- this.handleBreakpoint(this.breakpoint);
62
- this.breakpoint.addEventListener("change", this.handleBreakpoint, {
63
- signal
64
- });
65
- }
66
- disconnectedCallback() {
67
- this.widget.detach();
68
- this.controller.abort();
69
- }
70
- get trigger() {
71
- const trigger = this.querySelector(":scope > button");
72
- const controls = trigger.getAttribute("aria-controls");
73
- if (!trigger || !controls) {
74
- throw new Error(
75
- `${this.localName} must contain a <button aria-controls="element-to-trigger"> element.`
76
- );
77
- }
78
- trigger.removeAttribute("disabled");
79
- this.controls = controls;
80
- this.triggerText = trigger.textContent;
81
- return trigger;
82
- }
83
- get target() {
84
- const target = document.querySelector(
85
- `div[id="${this.controls}"]`
86
- );
87
- if (!target) {
88
- throw new Error(
89
- `${this.localName} must contain a target <div id="${this.controls}">.`
90
- );
91
- }
92
- target.classList.remove("global-nav-up-only");
93
- return target;
94
- }
95
- get breakpoint() {
96
- return window.matchMedia(this.mq);
97
- }
98
- }
99
- customElements.define("mx-global-toggle", GlobalToggle);
100
- export {
101
- GlobalToggle as default
102
- };
103
- //# sourceMappingURL=GlobalToggle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GlobalToggle.js","sources":["../../src/Layout/Header/Elements/GlobalToggle.ts"],"sourcesContent":["/**\n * Header\n * @file Handle accessible trigger of menus on small screens.\n */\n\nimport {\n DisclosureWidget,\n DisclosureWidgetEvent,\n} from \"../../../Utility/utilities\"\n\nexport default class GlobalToggle extends HTMLElement {\n internals_: ElementInternals\n controller: AbortController\n widget!: DisclosureWidget\n controls?: string\n mq: string\n triggerText: string\n closeIconClass: string = \"icon--close\"\n menuIconClass: string = \"icon--menu\"\n searchIconClass: string = \"icon--search\"\n hideMenu: boolean\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.trigger || !this.target) return\n\n this.target?.setAttribute(\"role\", \"region\")\n this.widget = new DisclosureWidget(this.trigger, this.target)\n this.widget.init()\n const { signal }: AbortController = this.controller\n this.handleBreakpoint(this.breakpoint)\n this.breakpoint.addEventListener(\"change\", this.handleBreakpoint, {\n signal,\n })\n }\n\n disconnectedCallback(): void {\n this.widget.detach()\n this.controller.abort()\n }\n\n handleBreakpoint = ({\n matches,\n }: MediaQueryList | MediaQueryListEvent): void => {\n if (!this.trigger) return\n if (matches) {\n this.widget.attach()\n this.target.setAttribute(\"inert\", \"\")\n this.trigger.addEventListener(\"disclosure-toggle\", this.handleDisclosure)\n } else {\n this.widget.detach()\n this.target.removeAttribute(\"inert\")\n this.trigger.removeEventListener(\n \"disclosure-toggle\",\n this.handleDisclosure,\n )\n }\n }\n\n handleDisclosure = ({ detail }: CustomEvent<DisclosureWidgetEvent>): void => {\n const { isOpen } = detail\n // Toggle toggle text.\n const origText = !isOpen ? \"Close\" : \"Open\"\n const replaceText = !isOpen ? \"Open\" : \"Close\"\n this.trigger.textContent = this.triggerText.replace(origText, replaceText)\n\n // Search is a little different.\n const isSearch = this.controls === \"primary-search\"\n if (isSearch) this.handleSearchDisclosure(isOpen)\n\n // Toggle trigger classes.\n this.trigger.classList.toggle(\n isSearch ? this.searchIconClass : this.menuIconClass,\n )\n this.trigger.classList.toggle(this.closeIconClass)\n }\n\n handleSearchDisclosure = (isOpen?: boolean): void => {\n if (this.hideMenu) {\n // Search trigger should hide the menu trigger.\n const menuTrigger = document.querySelector(`.${this.menuIconClass}`)\n menuTrigger.toggleAttribute(\"hidden\")\n }\n // Shift focus between search input and trigger.\n if (!isOpen) {\n this.trigger.focus()\n } else {\n this.target.querySelector(\"input\")?.focus()\n }\n }\n\n get trigger(): HTMLButtonElement {\n const trigger: HTMLButtonElement | null =\n this.querySelector(\":scope > button\")\n const controls = trigger.getAttribute(\"aria-controls\")\n if (!trigger || !controls) {\n throw new Error(\n `${this.localName} must contain a <button aria-controls=\"element-to-trigger\"> element.`,\n )\n }\n trigger.removeAttribute(\"disabled\")\n this.controls = controls\n this.triggerText = trigger.textContent\n return trigger\n }\n\n get target(): HTMLDivElement {\n const target: HTMLDivElement | null = document.querySelector(\n `div[id=\"${this.controls}\"]`,\n )\n if (!target) {\n throw new Error(\n `${this.localName} must contain a target <div id=\"${this.controls}\">.`,\n )\n }\n target.classList.remove(\"global-nav-up-only\")\n return target\n }\n\n get breakpoint(): MediaQueryList {\n return window.matchMedia(this.mq)\n }\n}\n\ncustomElements.define(\"mx-global-toggle\", GlobalToggle)\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"mx-trigger\": GlobalToggle\n }\n}\n"],"names":[],"mappings":";;;;AAUA,MAAqB,qBAAqB,YAAY;AAAA,EAYpD,cAAc;AACN;AANiB,SAAA,iBAAA;AACD,SAAA,gBAAA;AACE,SAAA,kBAAA;AA4B1B,SAAA,mBAAmB,CAAC;AAAA,MAClB;AAAA,IAAA,MACgD;AAC5C,UAAA,CAAC,KAAK,QAAS;AACnB,UAAI,SAAS;AACX,aAAK,OAAO;AACP,aAAA,OAAO,aAAa,SAAS,EAAE;AACpC,aAAK,QAAQ,iBAAiB,qBAAqB,KAAK,gBAAgB;AAAA,MAAA,OACnE;AACL,aAAK,OAAO;AACP,aAAA,OAAO,gBAAgB,OAAO;AACnC,aAAK,QAAQ;AAAA,UACX;AAAA,UACA,KAAK;AAAA,QAAA;AAAA,MAET;AAAA,IAAA;AAGiB,SAAA,mBAAA,CAAC,EAAE,aAAuD;AACrE,YAAA,EAAE,OAAW,IAAA;AAEb,YAAA,WAAW,CAAC,SAAS,UAAU;AAC/B,YAAA,cAAc,CAAC,SAAS,SAAS;AACvC,WAAK,QAAQ,cAAc,KAAK,YAAY,QAAQ,UAAU,WAAW;AAGnE,YAAA,WAAW,KAAK,aAAa;AAC/B,UAAA,SAAe,MAAA,uBAAuB,MAAM;AAGhD,WAAK,QAAQ,UAAU;AAAA,QACrB,WAAW,KAAK,kBAAkB,KAAK;AAAA,MAAA;AAEzC,WAAK,QAAQ,UAAU,OAAO,KAAK,cAAc;AAAA,IAAA;AAGnD,SAAA,yBAAyB,CAAC,WAA2B;AACnD,UAAI,KAAK,UAAU;AAEjB,cAAM,cAAc,SAAS,cAAc,IAAI,KAAK,aAAa,EAAE;AACnE,oBAAY,gBAAgB,QAAQ;AAAA,MACtC;AAEA,UAAI,CAAC,QAAQ;AACX,aAAK,QAAQ;MAAM,OACd;AACL,aAAK,OAAO,cAAc,OAAO,GAAG,MAAM;AAAA,MAC5C;AAAA,IAAA;AAtEK,SAAA,aAAa,KAAK;AAClB,SAAA,aAAa,IAAI;AACtB,SAAK,KAAK,KAAK,aAAa,IAAI,KAAK;AAAA,EACvC;AAAA,EAEA,oBAA0B;AACxB,QAAI,CAAC,KAAK,WAAW,CAAC,KAAK,OAAQ;AAE9B,SAAA,QAAQ,aAAa,QAAQ,QAAQ;AAC1C,SAAK,SAAS,IAAI,iBAAiB,KAAK,SAAS,KAAK,MAAM;AAC5D,SAAK,OAAO;AACN,UAAA,EAAE,OAAO,IAAqB,KAAK;AACpC,SAAA,iBAAiB,KAAK,UAAU;AACrC,SAAK,WAAW,iBAAiB,UAAU,KAAK,kBAAkB;AAAA,MAChE;AAAA,IAAA,CACD;AAAA,EACH;AAAA,EAEA,uBAA6B;AAC3B,SAAK,OAAO;AACZ,SAAK,WAAW;EAClB;AAAA,EAoDA,IAAI,UAA6B;AACzB,UAAA,UACJ,KAAK,cAAc,iBAAiB;AAChC,UAAA,WAAW,QAAQ,aAAa,eAAe;AACjD,QAAA,CAAC,WAAW,CAAC,UAAU;AACzB,YAAM,IAAI;AAAA,QACR,GAAG,KAAK,SAAS;AAAA,MAAA;AAAA,IAErB;AACA,YAAQ,gBAAgB,UAAU;AAClC,SAAK,WAAW;AAChB,SAAK,cAAc,QAAQ;AACpB,WAAA;AAAA,EACT;AAAA,EAEA,IAAI,SAAyB;AAC3B,UAAM,SAAgC,SAAS;AAAA,MAC7C,WAAW,KAAK,QAAQ;AAAA,IAAA;AAE1B,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR,GAAG,KAAK,SAAS,mCAAmC,KAAK,QAAQ;AAAA,MAAA;AAAA,IAErE;AACO,WAAA,UAAU,OAAO,oBAAoB;AACrC,WAAA;AAAA,EACT;AAAA,EAEA,IAAI,aAA6B;AACxB,WAAA,OAAO,WAAW,KAAK,EAAE;AAAA,EAClC;AACF;AAEA,eAAe,OAAO,oBAAoB,YAAY;"}
@@ -1,61 +0,0 @@
1
- import { c as createElement, m as makeAnchor } from "./chunks/utilities-BIk0P2KX.js";
2
- class InPageAlert extends HTMLElement {
3
- constructor() {
4
- super();
5
- this.handleClose = () => {
6
- this.controller.abort();
7
- this.remove();
8
- this.localStorage = "true";
9
- const newEvent = new CustomEvent("InPageAlert-close", {
10
- bubbles: true,
11
- cancelable: true,
12
- detail: {
13
- id: this.id,
14
- target: this
15
- }
16
- });
17
- this.dispatchEvent(newEvent);
18
- };
19
- this.internals_ = this.attachInternals();
20
- this.controller = new AbortController();
21
- }
22
- connectedCallback() {
23
- this.id = this.id || this.generatedId();
24
- if (this.localStorage) {
25
- this.controller.abort();
26
- this.remove();
27
- return;
28
- }
29
- const { signal } = this.controller;
30
- this.close?.addEventListener("click", this.handleClose, { signal });
31
- }
32
- disconnectedCallback() {
33
- this.controller.abort();
34
- this.close.remove();
35
- }
36
- get localStorage() {
37
- return localStorage.getItem(this.id);
38
- }
39
- set localStorage(value) {
40
- localStorage.setItem(this.id, value);
41
- }
42
- get close() {
43
- let closeBtn = this.querySelector(".icon--close");
44
- if (!closeBtn) {
45
- closeBtn = createElement(
46
- `<button class="icon icon--close" aria-controls="${this.id}" aria-label="Close InPageAlert" type="button"></button>`
47
- );
48
- this.appendChild(closeBtn);
49
- }
50
- return closeBtn;
51
- }
52
- generatedId() {
53
- const id = `mx-alert-${Math.floor(Math.random() * Math.floor(1e4))}`;
54
- return makeAnchor(id, 20);
55
- }
56
- }
57
- customElements.define("mx-closable-alert", InPageAlert);
58
- export {
59
- InPageAlert as default
60
- };
61
- //# sourceMappingURL=InPageAlert.js.map