@zanichelli/zanichelli-it-frontend-kit 1.0.0 → 1.0.3-rc.0

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 (113) hide show
  1. package/dist/cjs/index-xkrZykI_.js +1532 -0
  2. package/dist/cjs/index-xkrZykI_.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +5 -0
  4. package/dist/cjs/index.cjs.js.map +1 -0
  5. package/dist/cjs/loader.cjs.js +15 -0
  6. package/dist/cjs/loader.cjs.js.map +1 -0
  7. package/dist/cjs/zanichelli-it-frontend-kit.cjs.js +27 -0
  8. package/dist/cjs/zanichelli-it-frontend-kit.cjs.js.map +1 -0
  9. package/dist/cjs/zanit-menubar.zanit-mobile-menubar.zanit-search-form.entry.cjs.js.map +1 -0
  10. package/dist/cjs/zanit-menubar_3.cjs.entry.js +682 -0
  11. package/dist/cjs/zanit-menubar_3.cjs.entry.js.map +1 -0
  12. package/dist/collection/collection-manifest.json +14 -0
  13. package/dist/collection/components/menubar/menu/menu.css +95 -0
  14. package/dist/collection/components/menubar/menu/menu.js +38 -0
  15. package/dist/collection/components/menubar/menu/menu.js.map +1 -0
  16. package/dist/collection/components/menubar/menubar.css +167 -0
  17. package/{www/build/zanit-menubar.entry.js → dist/collection/components/menubar/menubar.js} +157 -25
  18. package/dist/collection/components/menubar/menubar.js.map +1 -0
  19. package/dist/collection/components/menubar/mobile-menubar/mobile-menubar.css +119 -0
  20. package/dist/collection/components/menubar/mobile-menubar/mobile-menubar.js +290 -0
  21. package/dist/collection/components/menubar/mobile-menubar/mobile-menubar.js.map +1 -0
  22. package/dist/collection/components/menubar/search-form/search-form.css +155 -0
  23. package/dist/collection/components/menubar/search-form/search-form.js +176 -0
  24. package/dist/collection/components/menubar/search-form/search-form.js.map +1 -0
  25. package/dist/collection/index.js +11 -0
  26. package/dist/collection/index.js.map +1 -0
  27. package/dist/collection/utils/index.js +2 -0
  28. package/dist/collection/utils/index.js.map +1 -0
  29. package/dist/{zanichelli-it-frontend-kit/utils-CaxAWyZI.js → collection/utils/utils.js} +3 -7
  30. package/dist/collection/utils/utils.js.map +1 -0
  31. package/dist/components/index.js +1290 -0
  32. package/dist/components/index.js.map +1 -0
  33. package/dist/components/p-B79OTwr-.js +133 -0
  34. package/dist/components/p-B79OTwr-.js.map +1 -0
  35. package/dist/components/p-DnMMUaAD.js +239 -0
  36. package/dist/components/p-DnMMUaAD.js.map +1 -0
  37. package/dist/{zanichelli-it-frontend-kit/zanit-menubar.entry.js → components/zanit-menubar.js} +56 -13
  38. package/dist/components/zanit-menubar.js.map +1 -0
  39. package/dist/components/zanit-mobile-menubar.js +9 -0
  40. package/dist/components/zanit-mobile-menubar.js.map +1 -0
  41. package/dist/components/zanit-search-form.js +9 -0
  42. package/dist/components/zanit-search-form.js.map +1 -0
  43. package/dist/esm/index-BWVQ0LD4.js +1504 -0
  44. package/dist/esm/index-BWVQ0LD4.js.map +1 -0
  45. package/dist/esm/index.js +4 -0
  46. package/dist/esm/index.js.map +1 -0
  47. package/dist/esm/loader.js +13 -0
  48. package/dist/esm/loader.js.map +1 -0
  49. package/dist/esm/zanichelli-it-frontend-kit.js +23 -0
  50. package/dist/esm/zanichelli-it-frontend-kit.js.map +1 -0
  51. package/dist/esm/zanit-menubar.zanit-mobile-menubar.zanit-search-form.entry.js.map +1 -0
  52. package/dist/esm/zanit-menubar_3.entry.js +678 -0
  53. package/dist/esm/zanit-menubar_3.entry.js.map +1 -0
  54. package/dist/index.cjs.js +1 -0
  55. package/dist/index.js +1 -0
  56. package/dist/types/components/menubar/menu/menu.d.ts +1 -1
  57. package/dist/types/components/menubar/menubar.d.ts +1 -1
  58. package/dist/types/components/menubar/mobile-menubar/mobile-menubar.d.ts +1 -1
  59. package/dist/types/components/menubar/search-form/search-form.d.ts +2 -1
  60. package/dist/types/components.d.ts +2 -2
  61. package/dist/types/utils/index.d.ts +2 -0
  62. package/dist/types/utils/types.d.ts +9 -11
  63. package/dist/zanichelli-it-frontend-kit/index.esm.js +0 -10
  64. package/dist/zanichelli-it-frontend-kit/index.esm.js.map +1 -1
  65. package/dist/zanichelli-it-frontend-kit/p-005efe36.entry.js +2 -0
  66. package/dist/zanichelli-it-frontend-kit/p-005efe36.entry.js.map +1 -0
  67. package/dist/zanichelli-it-frontend-kit/p-BWVQ0LD4.js +3 -0
  68. package/dist/zanichelli-it-frontend-kit/p-BWVQ0LD4.js.map +1 -0
  69. package/dist/zanichelli-it-frontend-kit/zanichelli-it-frontend-kit.css +1 -993
  70. package/dist/zanichelli-it-frontend-kit/zanichelli-it-frontend-kit.esm.js +1 -49
  71. package/dist/zanichelli-it-frontend-kit/zanichelli-it-frontend-kit.esm.js.map +1 -1
  72. package/dist/zanichelli-it-frontend-kit/zanit-menubar.zanit-mobile-menubar.zanit-search-form.entry.esm.js.map +1 -0
  73. package/package.json +1 -1
  74. package/www/build/index.esm.js +0 -10
  75. package/www/build/index.esm.js.map +1 -1
  76. package/www/build/p-005efe36.entry.js +2 -0
  77. package/www/build/p-005efe36.entry.js.map +1 -0
  78. package/www/build/p-750230e3.js +2 -0
  79. package/www/build/p-984b8fa6.css +1 -0
  80. package/www/build/p-BWVQ0LD4.js +3 -0
  81. package/www/build/p-BWVQ0LD4.js.map +1 -0
  82. package/www/build/zanichelli-it-frontend-kit.css +1 -993
  83. package/www/build/zanichelli-it-frontend-kit.esm.js +1 -49
  84. package/www/build/zanichelli-it-frontend-kit.esm.js.map +1 -1
  85. package/www/build/zanit-menubar.zanit-mobile-menubar.zanit-search-form.entry.esm.js.map +1 -0
  86. package/www/index.html +33 -50
  87. package/dist/zanichelli-it-frontend-kit/index-Cn3aX5eK.js +0 -4170
  88. package/dist/zanichelli-it-frontend-kit/index-Cn3aX5eK.js.map +0 -1
  89. package/dist/zanichelli-it-frontend-kit/menu-DZlhu_pe.js +0 -46
  90. package/dist/zanichelli-it-frontend-kit/menu-DZlhu_pe.js.map +0 -1
  91. package/dist/zanichelli-it-frontend-kit/utils-CaxAWyZI.js.map +0 -1
  92. package/dist/zanichelli-it-frontend-kit/zanit-menubar.entry.esm.js.map +0 -1
  93. package/dist/zanichelli-it-frontend-kit/zanit-menubar.entry.js.map +0 -1
  94. package/dist/zanichelli-it-frontend-kit/zanit-mobile-menubar.entry.esm.js.map +0 -1
  95. package/dist/zanichelli-it-frontend-kit/zanit-mobile-menubar.entry.js +0 -166
  96. package/dist/zanichelli-it-frontend-kit/zanit-mobile-menubar.entry.js.map +0 -1
  97. package/dist/zanichelli-it-frontend-kit/zanit-search-form.entry.esm.js.map +0 -1
  98. package/dist/zanichelli-it-frontend-kit/zanit-search-form.entry.js +0 -89
  99. package/dist/zanichelli-it-frontend-kit/zanit-search-form.entry.js.map +0 -1
  100. package/www/build/index-Cn3aX5eK.js +0 -4170
  101. package/www/build/index-Cn3aX5eK.js.map +0 -1
  102. package/www/build/menu-DZlhu_pe.js +0 -46
  103. package/www/build/menu-DZlhu_pe.js.map +0 -1
  104. package/www/build/utils-CaxAWyZI.js +0 -21
  105. package/www/build/utils-CaxAWyZI.js.map +0 -1
  106. package/www/build/zanit-menubar.entry.esm.js.map +0 -1
  107. package/www/build/zanit-menubar.entry.js.map +0 -1
  108. package/www/build/zanit-mobile-menubar.entry.esm.js.map +0 -1
  109. package/www/build/zanit-mobile-menubar.entry.js +0 -166
  110. package/www/build/zanit-mobile-menubar.entry.js.map +0 -1
  111. package/www/build/zanit-search-form.entry.esm.js.map +0 -1
  112. package/www/build/zanit-search-form.entry.js +0 -89
  113. package/www/build/zanit-search-form.entry.js.map +0 -1
@@ -0,0 +1,133 @@
1
+ import { p as proxyCustomElement, H, c as createEvent, h } from './index.js';
2
+
3
+ /**
4
+ * Check if an element contains an event target by checking its composedPath.
5
+ * Useful when an event target may come from a component's shadow DOM.
6
+ */
7
+ const containsTarget = (ancestor, event) => {
8
+ return event
9
+ .composedPath()
10
+ .filter((el) => el !== document && el !== window.window)
11
+ .some((el) => ancestor.contains(el));
12
+ };
13
+ /** Move the focus to `next` element, set tabindex to 0 for `next` and -1 to `current`. */
14
+ const moveFocus = (current, next) => {
15
+ current.tabIndex = -1;
16
+ next.tabIndex = 0;
17
+ next.focus();
18
+ };
19
+
20
+ const searchFormCss = ":host,*,::before,::after{box-sizing:border-box}*:focus:focus-visible{box-shadow:var(--shadow-focus-primary);outline:none}button{all:unset;cursor:pointer}.searchbar{--searchbar-button-x-padding:14px;--searchbar-button-icon-width:1.75rem;--closed-searchbar-width:calc((var(--searchbar-button-x-padding) * 2) + var(--searchbar-button-icon-width) + 1px);position:absolute;top:0;right:0;display:flex;width:var(--closed-searchbar-width);justify-content:flex-end;transition:width 0.6s ease-in}.searchbar.searchbar-open{width:100%}.searchbar .input-wrapper{display:flex;overflow:hidden;width:100%;align-items:center;padding:8px;padding-left:var(--grid-margin);background-color:#fff;gap:8px;transition-duration:0.4s;transition-property:padding-right, padding-left, width;transition-timing-function:ease-in}.searchbar:not(.searchbar-open) .input-wrapper{overflow:hidden;width:0;padding:0}.searchbar button[type='reset']{--z-icon-width:1rem;--z-icon-height:1rem;display:flex;align-items:center;cursor:pointer}.searchbar input{z-index:1;width:100%;height:100%;padding:0;border:none;background-color:#fff;font-family:var(--font-family-sans);font-size:1rem}.searchbar.searchbar-open input:first-child{padding-left:4px;margin-left:-4px;}.searchbar input[type='search']::-webkit-search-cancel-button,.searchbar input[type='search']::-webkit-search-decoration{appearance:none}.searchbar input::placeholder{color:var(--gray500)}.searchbar .searchbar-button{display:flex;align-items:center;justify-content:center;padding:10px var(--searchbar-button-x-padding);border-left:1px solid #000;background:var(--zanit-accent-color);font-family:inherit;font-size:inherit;gap:64px;line-height:1}.searchbar .searchbar-button:focus-visible{z-index:1}.searchbar-button z-icon{--z-icon-width:var(--searchbar-button-icon-width);--z-icon-height:var(--searchbar-button-icon-width)}@media (width < 1152px){.searchbar .searchbar-button>.searchbar-button-label{display:none}}@media (width >= 768px){.searchbar{--searchbar-button-x-padding:16px;--searchbar-button-icon-width:2rem}.searchbar .input-wrapper{gap:14px}.searchbar button[type='reset']{--z-icon-width:1.5rem;--z-icon-height:1.5rem}.searchbar input,.searchbar .searchbar-button{font-size:1.5rem}.searchbar .searchbar-button{padding:8px var(--searchbar-button-x-padding)}}@media (width >= 1152px){.searchbar{--closed-searchbar-width:190px}}@media (width >= 1366px){.searchbar .searchbar-button{border-right:1px solid #000}}";
21
+
22
+ const ZanitSearchForm = /*@__PURE__*/ proxyCustomElement(class ZanitSearchForm extends H {
23
+ constructor() {
24
+ super();
25
+ this.__registerHost();
26
+ this.__attachShadow();
27
+ this.search = createEvent(this, "search");
28
+ this.resetSearch = createEvent(this, "resetSearch");
29
+ }
30
+ formElement;
31
+ get host() { return this; }
32
+ /** Indicates whether the searchbar is visible and usable. */
33
+ showSearchbar = false;
34
+ /** Search query to apply. */
35
+ _searchQuery = undefined;
36
+ /** Initial search query */
37
+ searchQuery = undefined;
38
+ onSearchQueryChange() {
39
+ this._searchQuery = this.searchQuery;
40
+ if (this.searchQuery) {
41
+ this.openSearchbar();
42
+ }
43
+ }
44
+ /** Emitted on search form submission. */
45
+ search;
46
+ resetSearch;
47
+ async connectedCallback() {
48
+ this.showSearchbar = !!this.searchQuery;
49
+ this._searchQuery = this.searchQuery;
50
+ }
51
+ /** Close open searchbar when clicking outside. */
52
+ handleOutsideClick(event) {
53
+ if (this.showSearchbar && this.formElement && !containsTarget(this.formElement, event)) {
54
+ this.showSearchbar = false;
55
+ }
56
+ }
57
+ /** Close the menu when pressing Escape or Tab. */
58
+ handleKeydown(event) {
59
+ switch (event.key) {
60
+ case 'Escape':
61
+ this.showSearchbar = false;
62
+ break;
63
+ case 'Tab':
64
+ if (containsTarget(this.host, event)) {
65
+ break;
66
+ }
67
+ this.showSearchbar = false;
68
+ break;
69
+ }
70
+ }
71
+ openSearchbar() {
72
+ this.showSearchbar = true;
73
+ setTimeout(() => {
74
+ const searchbarInput = this.host.shadowRoot.querySelector('#searchbar-input');
75
+ searchbarInput.focus();
76
+ }, 500);
77
+ }
78
+ resetSearchQuery() {
79
+ this.searchQuery = undefined;
80
+ this.resetSearch.emit();
81
+ }
82
+ handleInputChange(event) {
83
+ this._searchQuery = event.target.value;
84
+ if (!this._searchQuery) {
85
+ this.searchQuery = undefined;
86
+ }
87
+ }
88
+ onSearchSubmit(event) {
89
+ event.preventDefault();
90
+ if (!this._searchQuery) {
91
+ return;
92
+ }
93
+ this.showSearchbar = false;
94
+ const searchEv = this.search.emit({ query: this._searchQuery });
95
+ // do not submit the form if the event default behavior was prevented
96
+ if (searchEv.defaultPrevented) {
97
+ return;
98
+ }
99
+ this.formElement.submit();
100
+ }
101
+ render() {
102
+ return (h("form", { key: '7bf580f0811030dea6969498966c42deef752c41', class: { 'searchbar': true, 'searchbar-open': this.showSearchbar }, ref: (el) => (this.formElement = el), role: "search", "aria-label": "Cerca", method: "get", action: "/ricerca", onSubmit: (event) => this.onSearchSubmit(event), onReset: () => this.resetSearchQuery() }, h("div", { key: '4af2bc80acb47f788b258e232b1a945cd3814b6e', class: "input-wrapper", role: "none" }, this.searchQuery && (h("button", { key: '92b37287fb50bbe3587ce24e02db15c071fbbf55', type: "reset", "aria-label": "Svuota campo di ricerca", disabled: !this.showSearchbar }, h("z-icon", { key: '91ad4f9c4a11d0a37de55f6104989a6be3da5c32', name: "multiply-circled" }))), h("input", { key: 'a9ec4ecf6920855c28b3243aa5c866afb4c9cbad', id: "searchbar-input", name: "q", type: "search", disabled: !this.showSearchbar, placeholder: "Cerca per parola chiave o ISBN", onInput: (event) => this.handleInputChange(event), value: this.searchQuery, required: true })), h("button", { key: '9bda2d7aa4f0e6186a810fb7ebaf5273c35976ca', class: "searchbar-button", "aria-label": "Cerca", "aria-controls": "searchbar-input", type: this.showSearchbar ? 'submit' : 'button', onClick: () => this.openSearchbar() }, this.showSearchbar ? null : h("span", { class: "searchbar-button-label" }, "Cerca"), h("z-icon", { key: '9ae6d646027f040a7949e727e19879f572013e1e', name: "search" }))));
103
+ }
104
+ static get watchers() { return {
105
+ "searchQuery": ["onSearchQueryChange"]
106
+ }; }
107
+ static get style() { return searchFormCss; }
108
+ }, [1, "zanit-search-form", {
109
+ "searchQuery": [1025, "search-query"],
110
+ "showSearchbar": [32],
111
+ "_searchQuery": [32]
112
+ }, [[5, "click", "handleOutsideClick"], [1, "keydown", "handleKeydown"]], {
113
+ "searchQuery": ["onSearchQueryChange"]
114
+ }]);
115
+ function defineCustomElement() {
116
+ if (typeof customElements === "undefined") {
117
+ return;
118
+ }
119
+ const components = ["zanit-search-form"];
120
+ components.forEach(tagName => { switch (tagName) {
121
+ case "zanit-search-form":
122
+ if (!customElements.get(tagName)) {
123
+ customElements.define(tagName, ZanitSearchForm);
124
+ }
125
+ break;
126
+ } });
127
+ }
128
+ defineCustomElement();
129
+
130
+ export { ZanitSearchForm as Z, containsTarget as c, defineCustomElement as d, moveFocus as m };
131
+ //# sourceMappingURL=p-B79OTwr-.js.map
132
+
133
+ //# sourceMappingURL=p-B79OTwr-.js.map
@@ -0,0 +1 @@
1
+ {"file":"p-B79OTwr-.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/utils/utils.ts","src/components/menubar/search-form/search-form.css?tag=zanit-search-form&encapsulation=shadow","src/components/menubar/search-form/search-form.tsx"],"sourcesContent":["/**\n * Check if an element contains an event target by checking its composedPath.\n * Useful when an event target may come from a component's shadow DOM.\n */\nexport const containsTarget = (ancestor: HTMLElement, event: Event) => {\n return event\n .composedPath()\n .filter((el) => el !== document && el !== window.window)\n .some((el) => ancestor.contains(el as HTMLElement));\n};\n\n/** Move the focus to `next` element, set tabindex to 0 for `next` and -1 to `current`. */\nexport const moveFocus = (current: HTMLElement, next: HTMLElement) => {\n current.tabIndex = -1;\n next.tabIndex = 0;\n next.focus();\n};\n",":host,\n*,\n::before,\n::after {\n box-sizing: border-box;\n}\n\n*:focus:focus-visible {\n box-shadow: var(--shadow-focus-primary);\n outline: none;\n}\n\nbutton {\n all: unset;\n cursor: pointer;\n}\n\n.searchbar {\n --searchbar-button-x-padding: 14px;\n --searchbar-button-icon-width: 1.75rem;\n\n /* button horizontal padding + icon size + left border */\n --closed-searchbar-width: calc((var(--searchbar-button-x-padding) * 2) + var(--searchbar-button-icon-width) + 1px);\n\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n width: var(--closed-searchbar-width);\n justify-content: flex-end;\n transition: width 0.6s ease-in;\n}\n\n.searchbar.searchbar-open {\n width: 100%;\n}\n\n.searchbar .input-wrapper {\n display: flex;\n overflow: hidden;\n width: 100%;\n align-items: center;\n padding: 8px;\n padding-left: var(--grid-margin);\n background-color: #fff;\n gap: 8px;\n transition-duration: 0.4s;\n transition-property: padding-right, padding-left, width;\n transition-timing-function: ease-in;\n}\n\n.searchbar:not(.searchbar-open) .input-wrapper {\n overflow: hidden;\n width: 0;\n padding: 0;\n}\n\n.searchbar button[type='reset'] {\n --z-icon-width: 1rem;\n --z-icon-height: 1rem;\n\n display: flex;\n align-items: center;\n cursor: pointer;\n}\n\n.searchbar input {\n z-index: 1;\n width: 100%;\n height: 100%;\n padding: 0;\n border: none;\n background-color: #fff;\n font-family: var(--font-family-sans);\n font-size: 1rem;\n}\n\n.searchbar.searchbar-open input:first-child {\n padding-left: 4px;\n margin-left: -4px; /* per evitare che la focus shadow vada fuori dallo schermo */\n}\n\n.searchbar input[type='search']::-webkit-search-cancel-button,\n.searchbar input[type='search']::-webkit-search-decoration {\n appearance: none;\n}\n\n.searchbar input::placeholder {\n color: var(--gray500);\n}\n\n.searchbar .searchbar-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 10px var(--searchbar-button-x-padding);\n border-left: 1px solid #000;\n background: var(--zanit-accent-color);\n font-family: inherit;\n font-size: inherit;\n gap: 64px;\n line-height: 1;\n}\n\n.searchbar .searchbar-button:focus-visible {\n z-index: 1;\n}\n\n.searchbar-button z-icon {\n --z-icon-width: var(--searchbar-button-icon-width);\n --z-icon-height: var(--searchbar-button-icon-width);\n}\n\n@media (width < 1152px) {\n .searchbar .searchbar-button > .searchbar-button-label {\n display: none;\n }\n}\n\n@media (width >= 768px) {\n .searchbar {\n --searchbar-button-x-padding: 16px;\n --searchbar-button-icon-width: 2rem;\n }\n\n .searchbar .input-wrapper {\n gap: 14px;\n }\n\n .searchbar button[type='reset'] {\n --z-icon-width: 1.5rem;\n --z-icon-height: 1.5rem;\n }\n\n .searchbar input,\n .searchbar .searchbar-button {\n font-size: 1.5rem;\n }\n\n .searchbar .searchbar-button {\n padding: 8px var(--searchbar-button-x-padding);\n }\n}\n\n@media (width >= 1152px) {\n .searchbar {\n --closed-searchbar-width: 190px;\n }\n}\n\n@media (width >= 1366px) {\n .searchbar .searchbar-button {\n border-right: 1px solid #000;\n }\n}\n","import { Component, Element, Event, EventEmitter, h, Listen, Prop, State, Watch } from '@stencil/core';\nimport { containsTarget } from '../../../utils';\n\n@Component({\n tag: 'zanit-search-form',\n styleUrl: 'search-form.css',\n shadow: true,\n})\nexport class ZanitSearchForm {\n private formElement: HTMLFormElement;\n\n @Element() host: HTMLZanitSearchFormElement;\n\n /** Indicates whether the searchbar is visible and usable. */\n @State()\n showSearchbar: boolean = false;\n\n /** Search query to apply. */\n @State()\n _searchQuery: string | undefined = undefined;\n\n /** Initial search query */\n @Prop({ mutable: true })\n searchQuery: string | undefined = undefined;\n\n @Watch('searchQuery')\n onSearchQueryChange() {\n this._searchQuery = this.searchQuery;\n if (this.searchQuery) {\n this.openSearchbar();\n }\n }\n\n /** Emitted on search form submission. */\n @Event({ cancelable: true }) search: EventEmitter<{ query: string }>;\n\n @Event() resetSearch: EventEmitter<void>;\n\n async connectedCallback() {\n this.showSearchbar = !!this.searchQuery;\n this._searchQuery = this.searchQuery;\n }\n\n /** Close open searchbar when clicking outside. */\n @Listen('click', { target: 'document', passive: true })\n handleOutsideClick(event: MouseEvent) {\n if (this.showSearchbar && this.formElement && !containsTarget(this.formElement, event)) {\n this.showSearchbar = false;\n }\n }\n\n /** Close the menu when pressing Escape or Tab. */\n @Listen('keydown', { passive: true })\n handleKeydown(event: KeyboardEvent) {\n switch (event.key) {\n case 'Escape':\n this.showSearchbar = false;\n break;\n case 'Tab':\n if (containsTarget(this.host, event)) {\n break;\n }\n\n this.showSearchbar = false;\n break;\n }\n }\n\n private openSearchbar() {\n this.showSearchbar = true;\n setTimeout(() => {\n const searchbarInput = this.host.shadowRoot.querySelector('#searchbar-input') as HTMLInputElement;\n searchbarInput.focus();\n }, 500);\n }\n\n private resetSearchQuery() {\n this.searchQuery = undefined;\n this.resetSearch.emit();\n }\n\n private handleInputChange(event: Event) {\n this._searchQuery = (event.target as HTMLInputElement).value;\n if (!this._searchQuery) {\n this.searchQuery = undefined;\n }\n }\n\n private onSearchSubmit(event: Event) {\n event.preventDefault();\n if (!this._searchQuery) {\n return;\n }\n\n this.showSearchbar = false;\n const searchEv = this.search.emit({ query: this._searchQuery });\n // do not submit the form if the event default behavior was prevented\n if (searchEv.defaultPrevented) {\n return;\n }\n\n this.formElement.submit();\n }\n\n render() {\n return (\n <form\n class={{ 'searchbar': true, 'searchbar-open': this.showSearchbar }}\n ref={(el) => (this.formElement = el)}\n role=\"search\"\n aria-label=\"Cerca\"\n method=\"get\"\n action=\"/ricerca\"\n onSubmit={(event) => this.onSearchSubmit(event)}\n onReset={() => this.resetSearchQuery()}\n >\n <div\n class=\"input-wrapper\"\n role=\"none\"\n >\n {this.searchQuery && (\n <button\n type=\"reset\"\n aria-label=\"Svuota campo di ricerca\"\n disabled={!this.showSearchbar}\n >\n <z-icon name=\"multiply-circled\" />\n </button>\n )}\n <input\n id=\"searchbar-input\"\n name=\"q\"\n type=\"search\"\n disabled={!this.showSearchbar}\n placeholder=\"Cerca per parola chiave o ISBN\"\n onInput={(event) => this.handleInputChange(event)}\n value={this.searchQuery}\n required\n ></input>\n </div>\n\n <button\n class=\"searchbar-button\"\n aria-label=\"Cerca\"\n aria-controls=\"searchbar-input\"\n type={this.showSearchbar ? 'submit' : 'button'}\n onClick={() => this.openSearchbar()}\n >\n {this.showSearchbar ? null : <span class=\"searchbar-button-label\">Cerca</span>}\n <z-icon name=\"search\"></z-icon>\n </button>\n </form>\n );\n }\n}\n"],"version":3}
@@ -0,0 +1,239 @@
1
+ import { h, p as proxyCustomElement, H } from './index.js';
2
+ import { d as defineCustomElement$1, m as moveFocus, c as containsTarget } from './p-B79OTwr-.js';
3
+
4
+ const DEFAULT_GROUP_KEY = 'default';
5
+ const DEFAULT_GROUP = {
6
+ id: DEFAULT_GROUP_KEY,
7
+ label: DEFAULT_GROUP_KEY,
8
+ };
9
+ /** Get the items grouped by their group. */
10
+ const getGroupedItems = (items) => {
11
+ const groups = items.reduce((grouped, item) => {
12
+ const itemGroup = grouped.find(({ group }) => group.id === (item.group?.id || DEFAULT_GROUP.id));
13
+ if (!itemGroup) {
14
+ grouped.push({ group: item.group ?? DEFAULT_GROUP, items: [item] });
15
+ }
16
+ else {
17
+ itemGroup.items.push(item);
18
+ }
19
+ return grouped;
20
+ }, []);
21
+ // Sort to keep default group at the end
22
+ return groups.sort((a, b) => (a.group.id === DEFAULT_GROUP_KEY ? 1 : b.group.id === DEFAULT_GROUP_KEY ? -1 : 0));
23
+ };
24
+ /**
25
+ * Floating menu component. It shows a list of items that can be grouped.
26
+ */
27
+ const Menu = ({ controlledBy, items, currentPath = [], onItemKeyDown }) => {
28
+ if (!items?.length) {
29
+ return null;
30
+ }
31
+ const groups = getGroupedItems(items);
32
+ const isActive = (item) => currentPath.includes(controlledBy) && currentPath.includes(item.id);
33
+ return (h("div", { class: "menu-wrapper", role: "none" },
34
+ h("div", { class: "menu", "aria-labelledby": controlledBy ?? undefined, role: "menu" }, groups.map(({ group, items }) => (h("div", { class: { group: true, highlight: items.some((item) => item.highlight) } },
35
+ group.id !== DEFAULT_GROUP_KEY ? (h("div", { class: "group-name", id: group.id }, group.label)) : groups.length > 1 ? (
36
+ // empty div to keep the same height as the other groups
37
+ h("div", { class: "group-name" })) : null,
38
+ h("ul", { class: "menu-list", role: "group", "aria-labelledby": group.id !== DEFAULT_GROUP_KEY ? group.id : undefined }, items.map((item) => (h("li", { role: "none" }, item.href && (h("a", { class: {
39
+ 'menu-item': true,
40
+ 'active': isActive(item),
41
+ }, href: item.href, role: "menuitem", tabIndex: -1, "aria-current": isActive(item) ? 'page' : 'false', onKeyDown: (event) => onItemKeyDown(event), target: item.target }, item.label))))))))))));
42
+ };
43
+
44
+ const mobileMenubarCss = ":host{position:relative;z-index:2;display:block;width:100%;max-width:100%;background-color:#fff;color:var(--gray900);fill:var(--gray900);font-family:var(--font-family-sans)}:host,*,::before,::after{box-sizing:border-box}*:focus:focus-visible{box-shadow:var(--shadow-focus-primary);outline:none}ul{padding:0;margin:0;list-style:none}a{color:var(--gray900);cursor:pointer;text-decoration:none}button{all:unset;cursor:pointer}nav{display:flex;width:100%;align-items:center;padding-left:var(--grid-margin);gap:8px}nav::after{position:absolute;top:0;right:0;width:100%;height:100%;background:transparent;box-shadow:var(--shadow-1);content:'';pointer-events:none}z-logo{margin:8px 0}.mobile-menu{position:absolute;top:100%;left:0;display:flex;width:100%;flex-direction:column;padding:16px var(--grid-margin) 32px;background-color:#fff;box-shadow:var(--shadow-2);gap:8px}.mobile-menu li{width:100%}.mobile-menu .items-container{display:flex;min-height:256px;flex-direction:column;gap:8px}.mobile-menu .items-container z-ghost-loading{width:40%;height:1.2rem}.mobile-menu .items-container .menubar-item{display:block;width:100%;padding:8px 0;font-size:1rem;text-align:left}.mobile-menu .items-container li:not(:last-child) .menubar-item{border-bottom:1px solid #000}[role='menuitem'].parent{display:flex;width:fit-content;align-items:center;padding:0;border:none;font-size:0.875rem;gap:8px}zanit-search-form{margin-left:auto}";
45
+
46
+ const menuCss = ".menu-wrapper{width:100%;background-color:#fff}.menu{position:relative;display:flex;width:100%;flex-direction:column;gap:32px 0}.menu .group{display:flex;flex-direction:column}.menu .group .group-name{border-bottom:1px solid currentcolor;margin-bottom:4px;color:var(--red500);font-size:0.875rem;font-weight:var(--font-md)}.menu .group .menu-list{display:flex;flex-direction:column;gap:8px}.menu .group .menu-list .menu-item{display:block;border-bottom:2px solid transparent;font-size:0.875rem;font-weight:var(--font-md)}.menu .menu-list .menu-item.active,.menu .menu-list .menu-item:hover{border-bottom-color:var(--red500)}.menu .group.highlight .menu-list .menu-item{font-size:1rem}@media (width >= 768px){.menu-wrapper{position:absolute;top:100%;left:0;display:flex;justify-content:center;box-shadow:var(--shadow-1)}.menu{display:grid;width:100%;max-width:var(--zanit-menubar-max-width, 1366px);padding:16px var(--grid-margin);gap:0 24px;grid-auto-columns:minmax(0, max-content);grid-auto-flow:column;grid-template-rows:minmax(0, max-content) max-content}.menu .group{display:grid;grid-row:1 / -1;grid-template-columns:1fr;grid-template-rows:subgrid}@supports not (grid-template-rows: subgrid){.menu .group{grid-template-rows:repeat(auto-fit, minmax(0, max-content))}}.menu .group .group-name{border:none;margin-bottom:16px}.menu .group .menu-list .menu-item{font-size:1rem}.menu .group.highlight .menu-list .menu-item{font-size:1.5rem}}";
47
+
48
+ const ZanitMobileMenubar = /*@__PURE__*/ proxyCustomElement(class ZanitMobileMenubar extends H {
49
+ constructor() {
50
+ super();
51
+ this.__registerHost();
52
+ this.__attachShadow();
53
+ }
54
+ get host() { return this; }
55
+ /** IDs path of the current item. */
56
+ currentPath = [];
57
+ /** Menubar items. */
58
+ items = [];
59
+ /** Initial search query. */
60
+ searchQuery = undefined;
61
+ /** Whether the menubar is loading the data. */
62
+ loading = false;
63
+ /** Last active item ID. */
64
+ lastCurrent = undefined;
65
+ parentItem = undefined;
66
+ menuItems = undefined;
67
+ /** Whether the items to render come from a menubar or a menu. */
68
+ menuType = undefined;
69
+ open;
70
+ onItemsChange() {
71
+ this.lastCurrent = this.currentPath?.length ? this.currentPath[this.currentPath.length - 1] : undefined;
72
+ this.setupData(this.items);
73
+ }
74
+ /**
75
+ * Find the current item and take its parent, `menuItems` or the `navbarItems`.
76
+ */
77
+ setupData(items, parent) {
78
+ // If no current item is defined, we show all items
79
+ if (this.lastCurrent === undefined) {
80
+ this.parentItem = undefined;
81
+ this.menuType = 'menubar';
82
+ this.menuItems = items;
83
+ return;
84
+ }
85
+ for (const item of items) {
86
+ if (item.id === this.lastCurrent) {
87
+ this.parentItem = parent;
88
+ this.menuType = item.menuItems?.length ? 'menu' : 'menubar';
89
+ this.menuItems = item.menuItems || item.navbarItems;
90
+ return;
91
+ }
92
+ if (this.currentPath.length > 1 &&
93
+ item.id === this.currentPath[this.currentPath.length - 2] &&
94
+ item.menuItems?.some(({ id }) => id === this.lastCurrent)) {
95
+ this.parentItem = item;
96
+ this.menuType = item.menuItems?.length ? 'menu' : 'menubar';
97
+ this.menuItems = item.menuItems || item.navbarItems;
98
+ return;
99
+ }
100
+ if (item.navbarItems?.length) {
101
+ this.setupData(item.navbarItems, item);
102
+ }
103
+ }
104
+ }
105
+ get menuItemsElement() {
106
+ return Array.from(this.host.shadowRoot.querySelectorAll('[role="menuitem"]'));
107
+ }
108
+ /** Initialize tabindex on menuitems, setting -1 to all but the first one. */
109
+ initTabindex() {
110
+ this.menuItemsElement.forEach((item, index) => item.setAttribute('tabindex', index === 0 ? '0' : '-1'));
111
+ }
112
+ toggleMenu() {
113
+ if (this.open) {
114
+ this.open = false;
115
+ }
116
+ else {
117
+ this.open = true;
118
+ setTimeout(() => {
119
+ this.initTabindex();
120
+ this.menuItemsElement[0]?.focus();
121
+ }, 200);
122
+ }
123
+ }
124
+ /** Handles keyboard navigation on mobile menu. */
125
+ handleItemKeydown(event) {
126
+ switch (event.key) {
127
+ case 'ArrowUp': {
128
+ event.preventDefault();
129
+ event.stopPropagation();
130
+ const items = this.menuItemsElement;
131
+ const currentIndex = items.indexOf(event.target);
132
+ const prevItem = items[(currentIndex - 1 + items.length) % items.length];
133
+ moveFocus(items[currentIndex], prevItem);
134
+ break;
135
+ }
136
+ case 'ArrowDown': {
137
+ event.preventDefault();
138
+ event.stopPropagation();
139
+ const items = this.menuItemsElement;
140
+ const currentIndex = items.indexOf(event.target);
141
+ const nextItem = items[(currentIndex + 1) % items.length];
142
+ moveFocus(items[currentIndex], nextItem);
143
+ break;
144
+ }
145
+ case 'Home': {
146
+ event.preventDefault();
147
+ event.stopPropagation();
148
+ moveFocus(event.target, this.menuItemsElement[0]);
149
+ break;
150
+ }
151
+ case 'End': {
152
+ event.preventDefault();
153
+ event.stopPropagation();
154
+ moveFocus(event.target, this.menuItemsElement.pop());
155
+ break;
156
+ }
157
+ }
158
+ }
159
+ connectedCallback() {
160
+ this.lastCurrent = this.currentPath?.length ? this.currentPath[this.currentPath.length - 1] : undefined;
161
+ this.setupData(this.items);
162
+ }
163
+ /** Close the menu when clicking outside. */
164
+ handleOutsideClick(event) {
165
+ if (containsTarget(this.host, event)) {
166
+ return;
167
+ }
168
+ this.open = false;
169
+ }
170
+ /** Close the menu when pressing Escape or Tab. */
171
+ handleKeydown(event) {
172
+ switch (event.key) {
173
+ case 'Escape':
174
+ this.open = false;
175
+ break;
176
+ case 'Tab':
177
+ if (containsTarget(this.host, event)) {
178
+ break;
179
+ }
180
+ this.open = false;
181
+ break;
182
+ }
183
+ }
184
+ /** Close the menu when the focus goes out. */
185
+ handleFocusout(event) {
186
+ if (containsTarget(this.host, event)) {
187
+ return;
188
+ }
189
+ this.open = false;
190
+ }
191
+ render() {
192
+ return (h("nav", { key: 'ff09b71900eed2cfa8747a41d6ee8debb953beef', "aria-label": "Zanichelli.it" }, h("button", { key: '589b555269d7d247957131c820005cc7bf40160c', class: "burger-button", type: "button", "aria-expanded": this.open ? 'true' : 'false', "aria-controls": "mobile-menu", "aria-label": this.open ? 'Chiudi menù' : 'Apri menù', onClick: () => this.toggleMenu() }, h("z-icon", { key: '2e4f0258278c05edc059b7cd9e9de861c8b85f89', name: this.open ? 'multiply' : 'burger-menu', width: "1.5rem", height: "1.5rem" })), h("z-logo", { key: 'd157c94bbde6b834c86121591277e944993cf21e', imageAlt: "Logo Zanichelli", link: "/", height: 32, width: 126 }), h("zanit-search-form", { key: '5b1e3193102243668232ff5ebe2379bcd72306e4', searchQuery: this.searchQuery, onResetSearch: () => (this.searchQuery = undefined) }), this.open && (h("ul", { key: '9697268848890991281e3f6508e3b6c4e9df5f96', class: "mobile-menu", role: "menubar" }, !this.loading && this.currentPath && this.currentPath.length > 0 && (h("li", { key: '718ef3f0a0ba31a9a5639042bb0bebe938a85ae3', role: "none" }, h("a", { key: '0e7f3c3947c1acd0931682fd39db7f134859a185', class: "parent", href: this.parentItem?.href ?? '/', id: this.parentItem?.id ?? undefined, role: "menuitem", tabIndex: -1, onKeyDown: (event) => this.handleItemKeydown(event), target: this.parentItem?.target }, h("z-icon", { key: 'f0978efd2064c9ee872f6dfb85440616ae7f8a11', name: "arrow-left", width: "0.5rem", height: "0.5rem" }), h("span", { key: '56702e49f5a97feddeb66e6271bd898061aa0d48' }, this.parentItem?.label || 'Home')))), this.loading ? (h("div", { class: "items-container", role: "none" }, [...new Array(4)].map(() => (h("li", { role: "none" }, h("div", { class: "menubar-item", role: "none" }, h("z-ghost-loading", null))))))) : this.menuType === 'menu' ? (h(Menu, { items: this.menuItems, controlledBy: this.parentItem?.id, currentPath: this.currentPath, onItemKeyDown: (event) => this.handleItemKeydown(event) })) : (this.menuItems?.length > 0 && (h("div", { class: "items-container", role: "none" }, this.menuItems.map((item) => (h("li", { role: "none" }, h("a", { class: {
193
+ 'menu-item': this.menuType === 'menu',
194
+ 'menubar-item': this.menuType === 'menubar',
195
+ }, href: item.href, id: item.id, role: "menuitem", "aria-current": this.lastCurrent === item.id ? 'page' : 'false', tabIndex: -1, onKeyDown: (event) => this.handleItemKeydown(event), target: item.target }, h("span", { "data-text": item.label }, item.label))))))))))));
196
+ }
197
+ static get watchers() { return {
198
+ "items": ["onItemsChange"],
199
+ "currentPath": ["onItemsChange"]
200
+ }; }
201
+ static get style() { return mobileMenubarCss + menuCss; }
202
+ }, [1, "zanit-mobile-menubar", {
203
+ "currentPath": [16, "current-path"],
204
+ "items": [16],
205
+ "searchQuery": [1025, "search-query"],
206
+ "loading": [4],
207
+ "lastCurrent": [32],
208
+ "parentItem": [32],
209
+ "menuItems": [32],
210
+ "menuType": [32],
211
+ "open": [32]
212
+ }, [[5, "click", "handleOutsideClick"], [1, "keydown", "handleKeydown"], [5, "focusin", "handleFocusout"]], {
213
+ "items": ["onItemsChange"],
214
+ "currentPath": ["onItemsChange"]
215
+ }]);
216
+ function defineCustomElement() {
217
+ if (typeof customElements === "undefined") {
218
+ return;
219
+ }
220
+ const components = ["zanit-mobile-menubar", "zanit-search-form"];
221
+ components.forEach(tagName => { switch (tagName) {
222
+ case "zanit-mobile-menubar":
223
+ if (!customElements.get(tagName)) {
224
+ customElements.define(tagName, ZanitMobileMenubar);
225
+ }
226
+ break;
227
+ case "zanit-search-form":
228
+ if (!customElements.get(tagName)) {
229
+ defineCustomElement$1();
230
+ }
231
+ break;
232
+ } });
233
+ }
234
+ defineCustomElement();
235
+
236
+ export { Menu as M, ZanitMobileMenubar as Z, defineCustomElement as d };
237
+ //# sourceMappingURL=p-DnMMUaAD.js.map
238
+
239
+ //# sourceMappingURL=p-DnMMUaAD.js.map
@@ -0,0 +1 @@
1
+ {"file":"p-DnMMUaAD.js","mappings":";;;AAiBA,MAAM,iBAAiB,GAAG,SAAS;AACnC,MAAM,aAAa,GAAG;AACpB,IAAA,EAAE,EAAE,iBAAiB;AACrB,IAAA,KAAK,EAAE,iBAAiB;CACzB;AAED;AACA,MAAM,eAAe,GAAG,CAAC,KAAiB,KAAI;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAsE,CAAC,OAAO,EAAE,IAAI,KAAI;AACjH,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,aAAa,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;;aAC9D;AACL,YAAA,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG5B,QAAA,OAAO,OAAO;KACf,EAAE,EAAE,CAAC;;IAGN,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,iBAAiB,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,iBAAiB,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAClH,CAAC;AAED;;AAEG;AACU,MAAA,IAAI,GAAmC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,GAAG,EAAE,EAAE,aAAa,EAAE,KAAI;AAC/G,IAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AAClB,QAAA,OAAO,IAAI;;AAGb,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC;IAErC,MAAM,QAAQ,GAAG,CAAC,IAAc,KAAK,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAExG,QACE,WACE,KAAK,EAAC,cAAc,EACpB,IAAI,EAAC,MAAM,EAAA;QAEX,CACE,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,MAAM,EAAA,iBAAA,EACK,YAAY,IAAI,SAAS,EAC1C,IAAI,EAAC,MAAM,IAEV,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAC3B,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,EAAA;AACzE,YAAA,KAAK,CAAC,EAAE,KAAK,iBAAiB,IAC7B,CAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAC,YAAY,EAClB,EAAE,EAAE,KAAK,CAAC,EAAE,EAAA,EAEX,KAAK,CAAC,KAAK,CACR,IACJ,MAAM,CAAC,MAAM,GAAG,CAAC;;YAEnB,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,YAAY,EAAA,CAAG,IACxB,IAAI;YACR,CACE,CAAA,IAAA,EAAA,EAAA,KAAK,EAAC,WAAW,EACjB,IAAI,EAAC,OAAO,qBACK,KAAK,CAAC,EAAE,KAAK,iBAAiB,GAAG,KAAK,CAAC,EAAE,GAAG,SAAS,IAErE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MACd,CAAA,CAAA,IAAA,EAAA,EAAI,IAAI,EAAC,MAAM,IACZ,IAAI,CAAC,IAAI,KACR,CACE,CAAA,GAAA,EAAA,EAAA,KAAK,EAAE;AACL,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;AACzB,iBAAA,EACD,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,EAAE,EACE,cAAA,EAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,EAC/C,SAAS,EAAE,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,CAAC,EAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,EAAA,EAElB,IAAI,CAAC,KAAK,CACT,CACL,CACE,CACN,CAAC,CACC,CACD,CACP,CAAC,CACE,CACF;AAEV;;AC1GA,MAAM,gBAAgB,GAAG,24CAA24C;;ACAp6C,MAAM,OAAO,GAAG,i6CAAi6C;;MCWp6C,kBAAkB,iBAAAA,kBAAA,CAAA,MAAA,kBAAA,SAAAC,CAAA,CAAA;;;;;;;;IAIrB,WAAW,GAAa,EAAE;;IAG1B,KAAK,GAAkB,EAAE;;IAGR,WAAW,GAAuB,SAAS;;IAG5D,OAAO,GAAY,KAAK;;IAGvB,WAAW,GAAuB,SAAS;IAC3C,UAAU,GAA4B,SAAS;IAC/C,SAAS,GAA2C,SAAS;;IAE7D,QAAQ,GAAmC,SAAS;AACpD,IAAA,IAAI;IAIb,aAAa,GAAA;QACX,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;AACvG,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;AAG5B;;AAEG;IACK,SAAS,CAAC,KAAoB,EAAE,MAAoB,EAAA;;AAE1D,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;AAClC,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB;;AAGF,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE;AAChC,gBAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;gBAC3D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW;gBACnD;;AAGF,YAAA,IACE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;AAC3B,gBAAA,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,gBAAA,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,EACzD;AACA,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;gBAC3D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW;gBACnD;;AAGF,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;gBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;;;;AAK5C,IAAA,IAAY,gBAAgB,GAAA;AAC1B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAkB;;;IAIxF,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;;IAGjG,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;;aACZ;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAChB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;aAClC,EAAE,GAAG,CAAC;;;;AAKH,IAAA,iBAAiB,CAAC,KAAoB,EAAA;AAC5C,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,SAAS,EAAE;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB;gBACnC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAqB,CAAC;AAC/D,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;gBACxE,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC;gBACxC;;YAEF,KAAK,WAAW,EAAE;gBAChB,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB;gBACnC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAqB,CAAC;AAC/D,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;gBACzD,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC;gBACxC;;YAEF,KAAK,MAAM,EAAE;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,SAAS,CAAC,KAAK,CAAC,MAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAChE;;YAEF,KAAK,KAAK,EAAE;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,SAAS,CAAC,KAAK,CAAC,MAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;gBACnE;;;;IAKN,iBAAiB,GAAA;QACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;AACvG,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAK5B,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAClC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YACpC;;AAGF,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;;;AAKnB,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK;gBACjB;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;oBACpC;;AAGF,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK;gBACjB;;;;AAMN,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC9B,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YACpC;;AAGF,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;;IAGnB,MAAM,GAAA;AACJ,QAAA,QACE,0EAAgB,eAAe,EAAA,EAC7B,CAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,eAAe,EACrB,IAAI,EAAC,QAAQ,EACE,eAAA,EAAA,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,OAAO,EAC7B,eAAA,EAAA,aAAa,EACf,YAAA,EAAA,IAAI,CAAC,IAAI,GAAG,aAAa,GAAG,WAAW,EACnD,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,EAAA,EAEhC,CACE,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU,GAAG,aAAa,EAC5C,KAAK,EAAC,QAAQ,EACd,MAAM,EAAC,QAAQ,EAAA,CACP,CACH,EAET,CAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,QAAQ,EAAC,iBAAiB,EAC1B,IAAI,EAAC,GAAG,EACR,MAAM,EAAE,EAAE,EACV,KAAK,EAAE,GAAG,EACF,CAAA,EAEV,CAAA,CAAA,mBAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,aAAa,EAAE,OAAO,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,EACnD,CAAA,EAED,IAAI,CAAC,IAAI,KACR,CAAA,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,aAAa,EACnB,IAAI,EAAC,SAAS,EAAA,EAEb,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,KAC/D,CAAI,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,MAAM,EAAA,EACb,CACE,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,QAAQ,EACd,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,GAAG,EAClC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,SAAS,EACpC,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,EAAE,EACZ,SAAS,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EACnD,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAA,EAE/B,CACE,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,YAAY,EACjB,KAAK,EAAC,QAAQ,EACd,MAAM,EAAC,QAAQ,EACP,CAAA,EACV,CAEG,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAA,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,MAAM,CAC5B,CACL,CACD,CACN,EAEA,IAAI,CAAC,OAAO,IACX,CAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAC,iBAAiB,EACvB,IAAI,EAAC,MAAM,EAEV,EAAA,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OACrB,CAAI,CAAA,IAAA,EAAA,EAAA,IAAI,EAAC,MAAM,EAAA,EACb,CAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAC,cAAc,EACpB,IAAI,EAAC,MAAM,EAAA,EAEX,CAAmC,CAAA,iBAAA,EAAA,IAAA,CAAA,CAC/B,CACH,CACN,CAAC,CACE,IACJ,IAAI,CAAC,QAAQ,KAAK,MAAM,IAC1B,CAAA,CAAC,IAAI,EACH,EAAA,KAAK,EAAE,IAAI,CAAC,SAAS,EACrB,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EACjC,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,aAAa,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAA,CACvD,KAEF,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,KACxB,CAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAC,iBAAiB,EACvB,IAAI,EAAC,MAAM,EAEV,EAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,MACvB,CAAA,CAAA,IAAA,EAAA,EAAI,IAAI,EAAC,MAAM,EAAA,EACb,CAAA,CAAA,GAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,KAAK,MAAM;AACrC,gBAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS;AAC5C,aAAA,EACD,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,IAAI,EAAC,UAAU,EACD,cAAA,EAAA,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,OAAO,EAC7D,QAAQ,EAAE,EAAE,EACZ,SAAS,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EACnD,MAAM,EAAE,IAAI,CAAC,MAAM,EAAA,EAEnB,CAAA,CAAA,MAAA,EAAA,EAAA,WAAA,EAAiB,IAAI,CAAC,KAAK,IAAG,IAAI,CAAC,KAAK,CAAQ,CAC9C,CACD,CACN,CAAC,CACE,CACP,CACF,CACE,CACN,CACG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/menubar/menu/menu.tsx","src/components/menubar/mobile-menubar/mobile-menubar.css?tag=zanit-mobile-menubar&encapsulation=shadow","src/components/menubar/menu/menu.css?tag=zanit-mobile-menubar&encapsulation=shadow","src/components/menubar/mobile-menubar/mobile-menubar.tsx"],"sourcesContent":["import { FunctionalComponent, h } from '@stencil/core';\nimport { MenuItem } from '../../../utils';\n\n/**\n * Menu of items that can be grouped.\n * @member {string} controlledBy - The HTML id of the element that controls the menu.\n * @member {MenuItem[]} items - The items to show in the menu.\n * @member {string[]} currentPath - Path of current item.\n * @member {function} onItemKeyDown - The function to call when a key is pressed from a menuitem.\n */\nexport interface MenuProps {\n controlledBy?: string;\n items?: MenuItem[];\n currentPath?: string[];\n onItemKeyDown?: (event: KeyboardEvent) => void;\n}\n\nconst DEFAULT_GROUP_KEY = 'default';\nconst DEFAULT_GROUP = {\n id: DEFAULT_GROUP_KEY,\n label: DEFAULT_GROUP_KEY,\n};\n\n/** Get the items grouped by their group. */\nconst getGroupedItems = (items: MenuItem[]) => {\n const groups = items.reduce<{ group: MenuProps['items'][number]['group']; items: MenuItem[] }[]>((grouped, item) => {\n const itemGroup = grouped.find(({ group }) => group.id === (item.group?.id || DEFAULT_GROUP.id));\n if (!itemGroup) {\n grouped.push({ group: item.group ?? DEFAULT_GROUP, items: [item] });\n } else {\n itemGroup.items.push(item);\n }\n\n return grouped;\n }, []);\n\n // Sort to keep default group at the end\n return groups.sort((a, b) => (a.group.id === DEFAULT_GROUP_KEY ? 1 : b.group.id === DEFAULT_GROUP_KEY ? -1 : 0));\n};\n\n/**\n * Floating menu component. It shows a list of items that can be grouped.\n */\nexport const Menu: FunctionalComponent<MenuProps> = ({ controlledBy, items, currentPath = [], onItemKeyDown }) => {\n if (!items?.length) {\n return null;\n }\n\n const groups = getGroupedItems(items);\n\n const isActive = (item: MenuItem) => currentPath.includes(controlledBy) && currentPath.includes(item.id);\n\n return (\n <div\n class=\"menu-wrapper\"\n role=\"none\"\n >\n <div\n class=\"menu\"\n aria-labelledby={controlledBy ?? undefined}\n role=\"menu\"\n >\n {groups.map(({ group, items }) => (\n <div class={{ group: true, highlight: items.some((item) => item.highlight) }}>\n {group.id !== DEFAULT_GROUP_KEY ? (\n <div\n class=\"group-name\"\n id={group.id}\n >\n {group.label}\n </div>\n ) : groups.length > 1 ? (\n // empty div to keep the same height as the other groups\n <div class=\"group-name\" />\n ) : null}\n <ul\n class=\"menu-list\"\n role=\"group\"\n aria-labelledby={group.id !== DEFAULT_GROUP_KEY ? group.id : undefined}\n >\n {items.map((item) => (\n <li role=\"none\">\n {item.href && (\n <a\n class={{\n 'menu-item': true,\n 'active': isActive(item),\n }}\n href={item.href}\n role=\"menuitem\"\n tabIndex={-1}\n aria-current={isActive(item) ? 'page' : 'false'}\n onKeyDown={(event) => onItemKeyDown(event)}\n target={item.target}\n >\n {item.label}\n </a>\n )}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n );\n};\n",":host {\n position: relative;\n z-index: 2;\n display: block;\n width: 100%;\n max-width: 100%;\n background-color: #fff;\n color: var(--gray900);\n fill: var(--gray900);\n font-family: var(--font-family-sans);\n}\n\n:host,\n*,\n::before,\n::after {\n box-sizing: border-box;\n}\n\n*:focus:focus-visible {\n box-shadow: var(--shadow-focus-primary);\n outline: none;\n}\n\nul {\n padding: 0;\n margin: 0;\n list-style: none;\n}\n\na {\n color: var(--gray900);\n cursor: pointer;\n text-decoration: none;\n}\n\nbutton {\n all: unset;\n cursor: pointer;\n}\n\nnav {\n display: flex;\n width: 100%;\n align-items: center;\n padding-left: var(--grid-margin);\n gap: 8px;\n}\n\nnav::after {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n background: transparent;\n box-shadow: var(--shadow-1);\n content: '';\n pointer-events: none;\n}\n\nz-logo {\n margin: 8px 0;\n}\n\n.mobile-menu {\n position: absolute;\n top: 100%;\n left: 0;\n display: flex;\n width: 100%;\n flex-direction: column;\n padding: 16px var(--grid-margin) 32px;\n background-color: #fff;\n box-shadow: var(--shadow-2);\n gap: 8px;\n}\n\n.mobile-menu li {\n width: 100%;\n}\n\n.mobile-menu .items-container {\n display: flex;\n min-height: 256px;\n flex-direction: column;\n gap: 8px;\n}\n\n.mobile-menu .items-container z-ghost-loading {\n width: 40%;\n height: 1.2rem;\n}\n\n.mobile-menu .items-container .menubar-item {\n display: block;\n width: 100%;\n padding: 8px 0;\n font-size: 1rem;\n text-align: left;\n}\n\n.mobile-menu .items-container li:not(:last-child) .menubar-item {\n border-bottom: 1px solid #000;\n}\n\n[role='menuitem'].parent {\n display: flex;\n width: fit-content;\n align-items: center;\n padding: 0;\n border: none;\n font-size: 0.875rem;\n gap: 8px;\n}\n\nzanit-search-form {\n margin-left: auto;\n}\n",".menu-wrapper {\n width: 100%;\n background-color: #fff;\n}\n\n.menu {\n position: relative;\n display: flex;\n width: 100%;\n flex-direction: column;\n gap: 32px 0;\n}\n\n.menu .group {\n display: flex;\n flex-direction: column;\n}\n\n.menu .group .group-name {\n border-bottom: 1px solid currentcolor;\n margin-bottom: 4px;\n color: var(--red500);\n font-size: 0.875rem;\n font-weight: var(--font-md);\n}\n\n.menu .group .menu-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.menu .group .menu-list .menu-item {\n display: block;\n border-bottom: 2px solid transparent;\n font-size: 0.875rem;\n font-weight: var(--font-md);\n}\n\n.menu .menu-list .menu-item.active,\n.menu .menu-list .menu-item:hover {\n border-bottom-color: var(--red500);\n}\n\n.menu .group.highlight .menu-list .menu-item {\n font-size: 1rem;\n}\n\n@media (width >= 768px) {\n .menu-wrapper {\n position: absolute;\n top: 100%;\n left: 0;\n display: flex;\n justify-content: center;\n box-shadow: var(--shadow-1);\n }\n\n .menu {\n display: grid;\n width: 100%;\n max-width: var(--zanit-menubar-max-width, 1366px);\n padding: 16px var(--grid-margin);\n gap: 0 24px;\n grid-auto-columns: minmax(0, max-content);\n grid-auto-flow: column;\n grid-template-rows: minmax(0, max-content) max-content;\n }\n\n .menu .group {\n display: grid;\n grid-row: 1 / -1;\n grid-template-columns: 1fr;\n grid-template-rows: subgrid;\n }\n\n @supports not (grid-template-rows: subgrid) {\n .menu .group {\n grid-template-rows: repeat(auto-fit, minmax(0, max-content));\n }\n }\n\n .menu .group .group-name {\n border: none;\n margin-bottom: 16px;\n }\n\n .menu .group .menu-list .menu-item {\n font-size: 1rem;\n }\n\n .menu .group.highlight .menu-list .menu-item {\n font-size: 1.5rem;\n }\n}\n","import { Component, Element, h, Listen, Prop, State, Watch } from '@stencil/core';\nimport { MenubarItem, MenuItem } from '../../../utils';\nimport { Menu } from '../menu/menu';\nimport { containsTarget, moveFocus } from '../../../utils';\n\n/** Mobile menubar component. */\n@Component({\n tag: 'zanit-mobile-menubar',\n styleUrls: ['mobile-menubar.css', '../menu/menu.css'],\n shadow: true,\n})\nexport class ZanitMobileMenubar {\n @Element() host: HTMLZanitMobileMenubarElement;\n\n /** IDs path of the current item. */\n @Prop() currentPath: string[] = [];\n\n /** Menubar items. */\n @Prop() items: MenubarItem[] = [];\n\n /** Initial search query. */\n @Prop({ mutable: true }) searchQuery: string | undefined = undefined;\n\n /** Whether the menubar is loading the data. */\n @Prop() loading: boolean = false;\n\n /** Last active item ID. */\n @State() lastCurrent: string | undefined = undefined;\n @State() parentItem: MenubarItem | undefined = undefined;\n @State() menuItems: MenubarItem[] | MenuItem[] | undefined = undefined;\n /** Whether the items to render come from a menubar or a menu. */\n @State() menuType: 'menubar' | 'menu' | undefined = undefined;\n @State() open: boolean;\n\n @Watch('items')\n @Watch('currentPath')\n onItemsChange() {\n this.lastCurrent = this.currentPath?.length ? this.currentPath[this.currentPath.length - 1] : undefined;\n this.setupData(this.items);\n }\n\n /**\n * Find the current item and take its parent, `menuItems` or the `navbarItems`.\n */\n private setupData(items: MenubarItem[], parent?: MenubarItem) {\n // If no current item is defined, we show all items\n if (this.lastCurrent === undefined) {\n this.parentItem = undefined;\n this.menuType = 'menubar';\n this.menuItems = items;\n return;\n }\n\n for (const item of items) {\n if (item.id === this.lastCurrent) {\n this.parentItem = parent;\n this.menuType = item.menuItems?.length ? 'menu' : 'menubar';\n this.menuItems = item.menuItems || item.navbarItems;\n return;\n }\n\n if (\n this.currentPath.length > 1 &&\n item.id === this.currentPath[this.currentPath.length - 2] &&\n item.menuItems?.some(({ id }) => id === this.lastCurrent)\n ) {\n this.parentItem = item;\n this.menuType = item.menuItems?.length ? 'menu' : 'menubar';\n this.menuItems = item.menuItems || item.navbarItems;\n return;\n }\n\n if (item.navbarItems?.length) {\n this.setupData(item.navbarItems, item);\n }\n }\n }\n\n private get menuItemsElement() {\n return Array.from(this.host.shadowRoot.querySelectorAll('[role=\"menuitem\"]')) as HTMLElement[];\n }\n\n /** Initialize tabindex on menuitems, setting -1 to all but the first one. */\n private initTabindex() {\n this.menuItemsElement.forEach((item, index) => item.setAttribute('tabindex', index === 0 ? '0' : '-1'));\n }\n\n private toggleMenu() {\n if (this.open) {\n this.open = false;\n } else {\n this.open = true;\n setTimeout(() => {\n this.initTabindex();\n this.menuItemsElement[0]?.focus();\n }, 200);\n }\n }\n\n /** Handles keyboard navigation on mobile menu. */\n private handleItemKeydown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowUp': {\n event.preventDefault();\n event.stopPropagation();\n const items = this.menuItemsElement;\n const currentIndex = items.indexOf(event.target as HTMLElement);\n const prevItem = items[(currentIndex - 1 + items.length) % items.length];\n moveFocus(items[currentIndex], prevItem);\n break;\n }\n case 'ArrowDown': {\n event.preventDefault();\n event.stopPropagation();\n const items = this.menuItemsElement;\n const currentIndex = items.indexOf(event.target as HTMLElement);\n const nextItem = items[(currentIndex + 1) % items.length];\n moveFocus(items[currentIndex], nextItem);\n break;\n }\n case 'Home': {\n event.preventDefault();\n event.stopPropagation();\n moveFocus(event.target as HTMLElement, this.menuItemsElement[0]);\n break;\n }\n case 'End': {\n event.preventDefault();\n event.stopPropagation();\n moveFocus(event.target as HTMLElement, this.menuItemsElement.pop());\n break;\n }\n }\n }\n\n connectedCallback() {\n this.lastCurrent = this.currentPath?.length ? this.currentPath[this.currentPath.length - 1] : undefined;\n this.setupData(this.items);\n }\n\n /** Close the menu when clicking outside. */\n @Listen('click', { target: 'document', passive: true })\n handleOutsideClick(event: MouseEvent) {\n if (containsTarget(this.host, event)) {\n return;\n }\n\n this.open = false;\n }\n\n /** Close the menu when pressing Escape or Tab. */\n @Listen('keydown', { passive: true })\n handleKeydown(event: KeyboardEvent) {\n switch (event.key) {\n case 'Escape':\n this.open = false;\n break;\n case 'Tab':\n if (containsTarget(this.host, event)) {\n break;\n }\n\n this.open = false;\n break;\n }\n }\n\n /** Close the menu when the focus goes out. */\n @Listen('focusin', { target: 'document', passive: true })\n handleFocusout(event: FocusEvent) {\n if (containsTarget(this.host, event)) {\n return;\n }\n\n this.open = false;\n }\n\n render() {\n return (\n <nav aria-label=\"Zanichelli.it\">\n <button\n class=\"burger-button\"\n type=\"button\"\n aria-expanded={this.open ? 'true' : 'false'}\n aria-controls=\"mobile-menu\"\n aria-label={this.open ? 'Chiudi menù' : 'Apri menù'}\n onClick={() => this.toggleMenu()}\n >\n <z-icon\n name={this.open ? 'multiply' : 'burger-menu'}\n width=\"1.5rem\"\n height=\"1.5rem\"\n ></z-icon>\n </button>\n\n <z-logo\n imageAlt=\"Logo Zanichelli\"\n link=\"/\"\n height={32}\n width={126}\n ></z-logo>\n\n <zanit-search-form\n searchQuery={this.searchQuery}\n onResetSearch={() => (this.searchQuery = undefined)}\n />\n\n {this.open && (\n <ul\n class=\"mobile-menu\"\n role=\"menubar\"\n >\n {!this.loading && this.currentPath && this.currentPath.length > 0 && (\n <li role=\"none\">\n <a\n class=\"parent\"\n href={this.parentItem?.href ?? '/'}\n id={this.parentItem?.id ?? undefined}\n role=\"menuitem\"\n tabIndex={-1}\n onKeyDown={(event) => this.handleItemKeydown(event)}\n target={this.parentItem?.target}\n >\n <z-icon\n name=\"arrow-left\"\n width=\"0.5rem\"\n height=\"0.5rem\"\n ></z-icon>\n <span>\n {/* Show the 'Home' label if the current item is a root child. */}\n {this.parentItem?.label || 'Home'}\n </span>\n </a>\n </li>\n )}\n\n {this.loading ? (\n <div\n class=\"items-container\"\n role=\"none\"\n >\n {[...new Array(4)].map(() => (\n <li role=\"none\">\n <div\n class=\"menubar-item\"\n role=\"none\"\n >\n <z-ghost-loading></z-ghost-loading>\n </div>\n </li>\n ))}\n </div>\n ) : this.menuType === 'menu' ? (\n <Menu\n items={this.menuItems}\n controlledBy={this.parentItem?.id}\n currentPath={this.currentPath}\n onItemKeyDown={(event) => this.handleItemKeydown(event)}\n />\n ) : (\n this.menuItems?.length > 0 && (\n <div\n class=\"items-container\"\n role=\"none\"\n >\n {this.menuItems.map((item) => (\n <li role=\"none\">\n <a\n class={{\n 'menu-item': this.menuType === 'menu',\n 'menubar-item': this.menuType === 'menubar',\n }}\n href={item.href}\n id={item.id}\n role=\"menuitem\"\n aria-current={this.lastCurrent === item.id ? 'page' : 'false'}\n tabIndex={-1}\n onKeyDown={(event) => this.handleItemKeydown(event)}\n target={item.target}\n >\n <span data-text={item.label}>{item.label}</span>\n </a>\n </li>\n ))}\n </div>\n )\n )}\n </ul>\n )}\n </nav>\n );\n }\n}\n"],"version":3}
@@ -1,16 +1,18 @@
1
- import { r as registerInstance, a as getElement, h, F as Fragment } from './index-Cn3aX5eK.js';
2
- import { c as containsTarget, m as moveFocus } from './utils-CaxAWyZI.js';
3
- import { M as Menu } from './menu-DZlhu_pe.js';
1
+ import { p as proxyCustomElement, H, h, F as Fragment } from './index.js';
2
+ import { d as defineCustomElement$2, c as containsTarget, m as moveFocus } from './p-B79OTwr-.js';
3
+ import { d as defineCustomElement$3, M as Menu } from './p-DnMMUaAD.js';
4
4
 
5
5
  const menubarCss = ":host{position:relative;z-index:2;display:flex;width:100%;background-color:#fff;color:var(--gray900);font-family:var(--font-family-sans)}:host,*,::before,::after{box-sizing:border-box}*:focus:focus-visible{box-shadow:var(--shadow-focus-primary);outline:none}ul{padding:0;margin:0;list-style:none}a{color:var(--gray900);cursor:pointer;text-decoration:none}button{all:unset;cursor:pointer}:host nav{width:100%}.shadow-wrapper{position:relative;z-index:1;display:flex;width:100%}.shadow-wrapper::after{position:absolute;top:0;right:0;width:100%;height:100%;background:transparent;box-shadow:var(--shadow-1);content:'';pointer-events:none}.width-limiter{position:relative;display:flex;width:100%;max-width:var(--zanit-menubar-max-width, 1366px);margin:0 auto}.shadow-wrapper+.shadow-wrapper{z-index:0}.sub-menubar>ul{gap:28px}.width-limiter>ul,.sub-menubar>ul{position:relative;display:flex;width:100%;align-items:center;padding:0 var(--grid-margin);margin-right:auto;margin-left:auto;gap:20px}.shadow-wrapper>.width-limiter,.shadow-wrapper>ul{width:100%;max-width:var(--zanit-menubar-max-width, 1366px)}ul.menubar{padding-right:0}.menubar z-ghost-loading{display:block;width:120px;height:1.25rem}.menubar>li[role='separator']{width:1px;height:1.25rem;background-color:#000}.menubar-item{position:relative;display:flex;align-items:center;padding:14px 0;font-size:1rem;gap:8px;line-height:1.25rem}.menubar .menubar-item{text-transform:uppercase}.menubar-item [data-text]{display:flex;flex-direction:column}.menubar-item.active>[data-text],.menubar-item:hover>[data-text],.menubar-item:focus:focus-visible>[data-text]{font-weight:var(--font-bd)}.menubar-item>[data-text]::after{height:0;content:attr(data-text) / '';font-weight:var(--font-bd);letter-spacing:normal;pointer-events:none;user-select:none;visibility:hidden}.sub-menubar .menubar-item.active::after{position:absolute;z-index:-1;bottom:0;left:-4px;width:calc(100% + 8px);height:4px;background-color:var(--red500);content:''}zanit-search-form{margin-left:auto}";
6
6
 
7
- const menuCss = ".menu-wrapper{width:100%;background-color:#fff}.menu{position:relative;display:flex;width:100%;flex-direction:column;gap:32px 0}.menu .group{display:flex;flex-direction:column}.menu .group .group-name{border-bottom:1px solid currentcolor;margin-bottom:4px;color:var(--red500);font-size:0.875rem;font-weight:var(--font-rg)}.menu .group .menu-list{display:flex;flex-direction:column;gap:4px}.menu .group .menu-list .menu-item{border-bottom:2px solid transparent;font-size:0.875rem;font-weight:var(--font-md)}.menu .menu-list .menu-item.active,.menu .menu-list .menu-item:hover{border-bottom-color:var(--red500)}.menu .group.highlight .menu-list .menu-item{font-size:1rem}@media (width >= 768px){.menu-wrapper{position:absolute;top:100%;left:0;display:flex;justify-content:center;box-shadow:var(--shadow-1)}.menu{display:grid;width:100%;max-width:var(--zanit-menubar-max-width, 1366px);padding:16px var(--grid-margin);gap:0 24px;grid-auto-columns:minmax(0, max-content);grid-auto-flow:column;grid-template-rows:minmax(0, max-content) max-content}.menu .group{display:grid;grid-row:1 / -1;grid-template-columns:1fr;grid-template-rows:subgrid}@supports not (grid-template-rows: subgrid){.menu .group{grid-template-rows:repeat(auto-fit, minmax(0, max-content))}}.menu .group .group-name{border:none;margin-bottom:16px}.menu .group .menu-list .menu-item{font-size:1rem}.menu .group.highlight .menu-list .menu-item{font-size:1.5rem}.menu .group.highlight .menu-list{gap:24px}}";
7
+ const menuCss = ".menu-wrapper{width:100%;background-color:#fff}.menu{position:relative;display:flex;width:100%;flex-direction:column;gap:32px 0}.menu .group{display:flex;flex-direction:column}.menu .group .group-name{border-bottom:1px solid currentcolor;margin-bottom:4px;color:var(--red500);font-size:0.875rem;font-weight:var(--font-md)}.menu .group .menu-list{display:flex;flex-direction:column;gap:8px}.menu .group .menu-list .menu-item{display:block;border-bottom:2px solid transparent;font-size:0.875rem;font-weight:var(--font-md)}.menu .menu-list .menu-item.active,.menu .menu-list .menu-item:hover{border-bottom-color:var(--red500)}.menu .group.highlight .menu-list .menu-item{font-size:1rem}@media (width >= 768px){.menu-wrapper{position:absolute;top:100%;left:0;display:flex;justify-content:center;box-shadow:var(--shadow-1)}.menu{display:grid;width:100%;max-width:var(--zanit-menubar-max-width, 1366px);padding:16px var(--grid-margin);gap:0 24px;grid-auto-columns:minmax(0, max-content);grid-auto-flow:column;grid-template-rows:minmax(0, max-content) max-content}.menu .group{display:grid;grid-row:1 / -1;grid-template-columns:1fr;grid-template-rows:subgrid}@supports not (grid-template-rows: subgrid){.menu .group{grid-template-rows:repeat(auto-fit, minmax(0, max-content))}}.menu .group .group-name{border:none;margin-bottom:16px}.menu .group .menu-list .menu-item{font-size:1rem}.menu .group.highlight .menu-list .menu-item{font-size:1.5rem}}";
8
8
 
9
- const ZanitMenubar = class {
10
- constructor(hostRef) {
11
- registerInstance(this, hostRef);
9
+ const ZanitMenubar$1 = /*@__PURE__*/ proxyCustomElement(class ZanitMenubar extends H {
10
+ constructor() {
11
+ super();
12
+ this.__registerHost();
13
+ this.__attachShadow();
12
14
  }
13
- get host() { return getElement(this); }
15
+ get host() { return this; }
14
16
  /** Menubar items extracted from `data`. */
15
17
  items = [];
16
18
  /** ID of the currently open menu. */
@@ -368,10 +370,51 @@ const ZanitMenubar = class {
368
370
  "items": ["onItemsChange"],
369
371
  "current": ["onCurrentChange"]
370
372
  }; }
371
- };
372
- ZanitMenubar.style = menubarCss + menuCss;
373
+ static get style() { return menubarCss + menuCss; }
374
+ }, [1, "zanit-menubar", {
375
+ "data": [1],
376
+ "current": [1],
377
+ "searchQuery": [1025, "search-query"],
378
+ "items": [32],
379
+ "openMenu": [32],
380
+ "openNavbar": [32],
381
+ "currentPath": [32],
382
+ "isMobile": [32],
383
+ "loading": [32]
384
+ }, [[5, "click", "handleOutsideClick"], [1, "keydown", "handleKeydown"], [1, "mouseover", "handleMouseover"], [1, "mouseout", "handleMouseout"], [1, "focusout", "handleFocusout"]], {
385
+ "data": ["parseData"],
386
+ "items": ["onItemsChange"],
387
+ "current": ["onCurrentChange"]
388
+ }]);
389
+ function defineCustomElement$1() {
390
+ if (typeof customElements === "undefined") {
391
+ return;
392
+ }
393
+ const components = ["zanit-menubar", "zanit-mobile-menubar", "zanit-search-form"];
394
+ components.forEach(tagName => { switch (tagName) {
395
+ case "zanit-menubar":
396
+ if (!customElements.get(tagName)) {
397
+ customElements.define(tagName, ZanitMenubar$1);
398
+ }
399
+ break;
400
+ case "zanit-mobile-menubar":
401
+ if (!customElements.get(tagName)) {
402
+ defineCustomElement$3();
403
+ }
404
+ break;
405
+ case "zanit-search-form":
406
+ if (!customElements.get(tagName)) {
407
+ defineCustomElement$2();
408
+ }
409
+ break;
410
+ } });
411
+ }
412
+ defineCustomElement$1();
413
+
414
+ const ZanitMenubar = ZanitMenubar$1;
415
+ const defineCustomElement = defineCustomElement$1;
373
416
 
374
- export { ZanitMenubar as zanit_menubar };
375
- //# sourceMappingURL=zanit-menubar.entry.esm.js.map
417
+ export { ZanitMenubar, defineCustomElement };
418
+ //# sourceMappingURL=zanit-menubar.js.map
376
419
 
377
- //# sourceMappingURL=zanit-menubar.entry.js.map
420
+ //# sourceMappingURL=zanit-menubar.js.map