@govtechsg/sgds-web-component 3.26.1-rc.2 → 3.27.0-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 (131) hide show
  1. package/base/dropdown-list-element.js +9 -2
  2. package/base/dropdown-list-element.js.map +1 -1
  3. package/base/nav-element.d.ts +64 -0
  4. package/base/nav-element.js +263 -0
  5. package/base/nav-element.js.map +1 -0
  6. package/base/nav-profile-element.d.ts +47 -0
  7. package/base/nav-profile-element.js +191 -0
  8. package/base/nav-profile-element.js.map +1 -0
  9. package/base/nav-profile.js +6 -0
  10. package/base/nav-profile.js.map +1 -0
  11. package/components/Appnav/appnav-context.d.ts +6 -0
  12. package/components/Appnav/appnav-context.js +7 -0
  13. package/components/Appnav/appnav-context.js.map +1 -0
  14. package/components/Appnav/appnav.js +6 -0
  15. package/components/Appnav/appnav.js.map +1 -0
  16. package/components/Appnav/index.d.ts +9 -0
  17. package/components/Appnav/index.js +8 -0
  18. package/components/Appnav/index.js.map +1 -0
  19. package/components/Appnav/index.umd.min.js +2542 -0
  20. package/components/Appnav/index.umd.min.js.map +1 -0
  21. package/components/Appnav/sgds-appnav-profile.d.ts +17 -0
  22. package/components/Appnav/sgds-appnav-profile.js +31 -0
  23. package/components/Appnav/sgds-appnav-profile.js.map +1 -0
  24. package/components/Appnav/sgds-appnav.d.ts +44 -0
  25. package/components/Appnav/sgds-appnav.js +183 -0
  26. package/components/Appnav/sgds-appnav.js.map +1 -0
  27. package/components/Breadcrumb/index.umd.min.js +1 -1
  28. package/components/Breadcrumb/index.umd.min.js.map +1 -1
  29. package/components/ComboBox/index.umd.min.js +248 -248
  30. package/components/ComboBox/index.umd.min.js.map +1 -1
  31. package/components/Dropdown/index.umd.min.js +1 -1
  32. package/components/Dropdown/index.umd.min.js.map +1 -1
  33. package/components/Mainnav/index.umd.min.js +293 -281
  34. package/components/Mainnav/index.umd.min.js.map +1 -1
  35. package/components/Mainnav/mainnav.js +1 -1
  36. package/components/Mainnav/sgds-mainnav-profile.d.ts +5 -31
  37. package/components/Mainnav/sgds-mainnav-profile.js +5 -112
  38. package/components/Mainnav/sgds-mainnav-profile.js.map +1 -1
  39. package/components/Mainnav/sgds-mainnav.d.ts +5 -46
  40. package/components/Mainnav/sgds-mainnav.js +24 -260
  41. package/components/Mainnav/sgds-mainnav.js.map +1 -1
  42. package/components/OverflowMenu/index.umd.min.js +21 -21
  43. package/components/OverflowMenu/index.umd.min.js.map +1 -1
  44. package/components/QuantityToggle/index.umd.min.js +39 -39
  45. package/components/QuantityToggle/index.umd.min.js.map +1 -1
  46. package/components/QuantityToggle/sgds-quantity-toggle.d.ts +1 -2
  47. package/components/QuantityToggle/sgds-quantity-toggle.js +9 -18
  48. package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
  49. package/components/Select/index.umd.min.js +1 -1
  50. package/components/Select/index.umd.min.js.map +1 -1
  51. package/components/index.d.ts +2 -0
  52. package/components/index.js +2 -0
  53. package/components/index.js.map +1 -1
  54. package/components/index.umd.min.js +592 -543
  55. package/components/index.umd.min.js.map +1 -1
  56. package/css/fouc.css +6 -4
  57. package/custom-elements.json +17733 -15914
  58. package/index.d.ts +1 -0
  59. package/index.js +1 -0
  60. package/index.js.map +1 -1
  61. package/index.umd.min.js +537 -483
  62. package/index.umd.min.js.map +1 -1
  63. package/package.json +1 -1
  64. package/react/appnav/index.cjs.js +45 -0
  65. package/react/appnav/index.cjs.js.map +1 -0
  66. package/react/appnav/index.d.ts +4 -0
  67. package/react/appnav/index.js +21 -0
  68. package/react/appnav/index.js.map +1 -0
  69. package/react/appnav-profile/index.cjs.js +40 -0
  70. package/react/appnav-profile/index.cjs.js.map +1 -0
  71. package/react/appnav-profile/index.d.ts +4 -0
  72. package/react/appnav-profile/index.js +16 -0
  73. package/react/appnav-profile/index.js.map +1 -0
  74. package/react/base/dropdown-list-element.cjs.js +9 -2
  75. package/react/base/dropdown-list-element.cjs.js.map +1 -1
  76. package/react/base/dropdown-list-element.js +9 -2
  77. package/react/base/dropdown-list-element.js.map +1 -1
  78. package/react/base/nav-element.cjs.js +268 -0
  79. package/react/base/nav-element.cjs.js.map +1 -0
  80. package/react/base/nav-element.js +264 -0
  81. package/react/base/nav-element.js.map +1 -0
  82. package/react/base/nav-profile-element.cjs.js +196 -0
  83. package/react/base/nav-profile-element.cjs.js.map +1 -0
  84. package/react/base/nav-profile-element.js +192 -0
  85. package/react/base/nav-profile-element.js.map +1 -0
  86. package/react/base/nav-profile.cjs.js +11 -0
  87. package/react/base/nav-profile.cjs.js.map +1 -0
  88. package/react/base/nav-profile.js +7 -0
  89. package/react/base/nav-profile.js.map +1 -0
  90. package/react/components/Appnav/appnav-context.cjs.js +13 -0
  91. package/react/components/Appnav/appnav-context.cjs.js.map +1 -0
  92. package/react/components/Appnav/appnav-context.js +8 -0
  93. package/react/components/Appnav/appnav-context.js.map +1 -0
  94. package/react/components/Appnav/appnav.cjs.js +11 -0
  95. package/react/components/Appnav/appnav.cjs.js.map +1 -0
  96. package/react/components/Appnav/appnav.js +7 -0
  97. package/react/components/Appnav/appnav.js.map +1 -0
  98. package/react/components/Appnav/sgds-appnav-profile.cjs.js +37 -0
  99. package/react/components/Appnav/sgds-appnav-profile.cjs.js.map +1 -0
  100. package/react/components/Appnav/sgds-appnav-profile.js +32 -0
  101. package/react/components/Appnav/sgds-appnav-profile.js.map +1 -0
  102. package/react/components/Appnav/sgds-appnav.cjs.js +189 -0
  103. package/react/components/Appnav/sgds-appnav.cjs.js.map +1 -0
  104. package/react/components/Appnav/sgds-appnav.js +184 -0
  105. package/react/components/Appnav/sgds-appnav.js.map +1 -0
  106. package/react/components/Mainnav/mainnav.cjs.js +1 -1
  107. package/react/components/Mainnav/mainnav.js +1 -1
  108. package/react/components/Mainnav/sgds-mainnav-profile.cjs.js +4 -111
  109. package/react/components/Mainnav/sgds-mainnav-profile.cjs.js.map +1 -1
  110. package/react/components/Mainnav/sgds-mainnav-profile.js +5 -112
  111. package/react/components/Mainnav/sgds-mainnav-profile.js.map +1 -1
  112. package/react/components/Mainnav/sgds-mainnav.cjs.js +22 -258
  113. package/react/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
  114. package/react/components/Mainnav/sgds-mainnav.js +24 -260
  115. package/react/components/Mainnav/sgds-mainnav.js.map +1 -1
  116. package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js +9 -18
  117. package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
  118. package/react/components/QuantityToggle/sgds-quantity-toggle.js +9 -18
  119. package/react/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
  120. package/react/index.cjs.js +130 -126
  121. package/react/index.cjs.js.map +1 -1
  122. package/react/index.d.ts +6 -4
  123. package/react/index.js +6 -4
  124. package/react/index.js.map +1 -1
  125. package/types/react.d.ts +197 -158
  126. package/components/Mainnav/mainnav-profile.js +0 -6
  127. package/components/Mainnav/mainnav-profile.js.map +0 -1
  128. package/react/components/Mainnav/mainnav-profile.cjs.js +0 -11
  129. package/react/components/Mainnav/mainnav-profile.cjs.js.map +0 -1
  130. package/react/components/Mainnav/mainnav-profile.js +0 -7
  131. package/react/components/Mainnav/mainnav-profile.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-mainnav-profile.js","sources":["../../../../src/components/Mainnav/sgds-mainnav-profile.ts"],"sourcesContent":["import { html, nothing } from \"lit\";\nimport { consume } from \"@lit/context\";\nimport { property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { offset } from \"@floating-ui/dom\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport SgdsDropdown from \"../Dropdown/sgds-dropdown\";\nimport SgdsDropdownItem from \"../Dropdown/sgds-dropdown-item\";\nimport SgdsIcon from \"../Icon/sgds-icon\";\nimport { MainnavBreakpointContext } from \"./mainnav-context\";\nimport mainnavProfileStyle from \"./mainnav-profile.css\";\nimport genId from \"../../utils/generateId\";\n\n/**\n * @summary A profile component for the mainnav that shows a full dropdown in desktop and handles its own mobile menu.\n * In desktop: renders avatar + label + secondaryText with a dropdown.\n * In mobile: renders the avatar as a toggler that opens a self-contained mobile panel with profile items.\n * When present, it disables the mainnav's default hamburger toggler.\n *\n * @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)\n * @slot default - Profile menu items (sgds-dropdown-item elements)\n */\nexport class SgdsMainnavProfile extends SgdsElement {\n static styles = [...SgdsElement.styles, mainnavProfileStyle];\n /** @internal */\n static dependencies = {\n \"sgds-dropdown\": SgdsDropdown,\n \"sgds-dropdown-item\": SgdsDropdownItem,\n \"sgds-icon\": SgdsIcon\n };\n\n @consume({ context: MainnavBreakpointContext, subscribe: true })\n @state()\n private _breakpointReached = true;\n\n /** @internal Whether the mobile menu is open */\n @state()\n private _mobileMenuOpen = false;\n\n /** Primary text displayed next to the avatar in desktop (e.g. user name) */\n @property({ type: String, reflect: true })\n label = \"\";\n\n /** Secondary text displayed below the label in desktop (e.g. agency or role) */\n @property({ type: String, reflect: true })\n secondaryText = \"\";\n\n /** When true, disables the profile dropdown */\n @property({ type: Boolean })\n disabled = false;\n\n /** Accessible label for the profile toggle button */\n @property({ type: String })\n ariaLabel = \"\";\n\n /** Controls dropdown close behavior. \"default\" auto-closes on item/outside click, \"outside\" closes only on outside click, \"inside\" prevents auto-close. */\n @property({ type: String })\n close: \"default\" | \"outside\" | \"inside\" = \"default\";\n\n /** @internal */\n private togglerId: string = genId(\"profile\", \"button\");\n\n private _handleMobileToggle = () => {\n this._mobileMenuOpen = !this._mobileMenuOpen;\n };\n\n private _handleKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleMobileToggle();\n }\n };\n\n render() {\n if (!this._breakpointReached) {\n // Desktop: dropdown with avatar + label + secondaryText\n return html`\n <sgds-dropdown .floatingOpts=${{ middleware: [offset(0)] }} ?disabled=${this.disabled} close=${this.close}>\n <button\n class=\"${classMap({\n \"nav-link\": true,\n disabled: this.disabled\n })}\"\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n aria-label=${ifDefined(this.ariaLabel)}\n id=${this.togglerId}\n tabindex=${this.disabled ? \"-1\" : \"0\"}\n slot=\"toggler\"\n >\n <slot name=\"avatar\"></slot>\n ${this.label || this.secondaryText\n ? html`<div class=\"profile-text\">\n ${this.label ? html`<span class=\"profile-label\">${this.label}</span>` : nothing}\n ${this.secondaryText\n ? html`<span class=\"profile-secondary-text\">${this.secondaryText}</span>`\n : nothing}\n </div>`\n : nothing}\n <sgds-icon name=\"chevron-down\" size=\"md\"></sgds-icon>\n </button>\n <slot></slot>\n </sgds-dropdown>\n `;\n }\n\n // Mobile: avatar toggler + self-contained mobile panel\n return html`\n <div\n class=\"profile-avatar-mobile\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=${this.ariaLabel || \"Toggle navigation\"}\n aria-expanded=${this._mobileMenuOpen ? \"true\" : \"false\"}\n @click=${this._handleMobileToggle}\n @keydown=${this._handleKeydown}\n >\n <slot name=\"avatar\"></slot>\n </div>\n <div class=\"profile-mobile-panel\" ?hidden=${!this._mobileMenuOpen}>\n <div class=\"profile-mobile-items\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\n\nexport default SgdsMainnavProfile;\n"],"names":["mainnavProfileStyle"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-mainnav-profile.js","sources":["../../../../src/components/Mainnav/sgds-mainnav-profile.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { state } from \"lit/decorators.js\";\nimport NavProfileElement from \"../../base/nav-profile-element\";\nimport { MainnavBreakpointContext } from \"./mainnav-context\";\n\n/**\n * @summary A profile component for the mainnav that shows a full dropdown in desktop and handles its own mobile menu.\n * In desktop: renders avatar + label + secondaryText with a dropdown.\n * In mobile: renders the avatar as a toggler that opens a self-contained mobile panel with profile items.\n * When no dropdown items are slotted, renders as a non-interactive read-only element (no caret, no pointer cursor, not focusable).\n * When present, it disables the mainnav's default hamburger toggler.\n *\n * @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)\n * @slot default - Profile menu items (sgds-dropdown-item elements). When empty, the component becomes read-only.\n */\nexport class SgdsMainnavProfile extends NavProfileElement {\n @consume({ context: MainnavBreakpointContext, subscribe: true })\n @state()\n protected override _breakpointReached = true;\n}\n\nexport default SgdsMainnavProfile;\n"],"names":[],"mappings":";;;;;;;AAKA;;;;;;;;;AASG;AACG,MAAO,kBAAmB,SAAQ,iBAAiB,CAAA;AAAzD,IAAA,WAAA,GAAA;;QAGqB,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC;KAC9C;AAAA,CAAA;AADoB,UAAA,CAAA;IAFlB,OAAO,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC/D,IAAA,KAAK,EAAE;AACqC,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA;;;;"}
@@ -8,27 +8,11 @@ var context = require('@lit/context');
8
8
  var lit = require('lit');
9
9
  var decorators_js = require('lit/decorators.js');
10
10
  var classMap_js = require('lit/directives/class-map.js');
11
- var sgdsElement = require('../../base/sgds-element.cjs.js');
12
- var animate = require('../../utils/animate.cjs.js');
13
- var animationRegistry = require('../../utils/animation-registry.cjs.js');
14
- var breakpoints = require('../../utils/breakpoints.cjs.js');
15
- var event = require('../../utils/event.cjs.js');
16
- var generateId = require('../../utils/generateId.cjs.js');
17
- var watch = require('../../utils/watch.cjs.js');
18
- var sgdsIconButton = require('../IconButton/sgds-icon-button.cjs.js');
11
+ var navElement = require('../../base/nav-element.cjs.js');
12
+ var slot = require('../../utils/slot.cjs.js');
19
13
  var mainnavContext = require('./mainnav-context.cjs.js');
20
14
  var mainnav = require('./mainnav.cjs.js');
21
- var slot = require('../../utils/slot.cjs.js');
22
15
 
23
- const SIZES = {
24
- sm: breakpoints.SM_BREAKPOINT,
25
- md: breakpoints.MD_BREAKPOINT,
26
- lg: breakpoints.LG_BREAKPOINT,
27
- xl: breakpoints.XL_BREAKPOINT,
28
- xxl: breakpoints.XXL_BREAKPOINT,
29
- never: Infinity,
30
- always: -1
31
- };
32
16
  /**
33
17
  * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.
34
18
  *
@@ -45,29 +29,16 @@ const SIZES = {
45
29
  * @slot non-collapsible - Elements in this slot will not be collapsed
46
30
  *
47
31
  */
48
- class SgdsMainnav extends sgdsElement["default"] {
32
+ class SgdsMainnav extends navElement["default"] {
49
33
  constructor() {
50
34
  super(...arguments);
51
35
  this._breakpointReached = false;
52
- /** Indicates if mobile menu is open or closed */
53
- this.expanded = false;
54
- /** Denotes the transition state of mobile mainnav menu opening */
55
- this.expanding = false;
56
- /** @internal Whether sgds-mainnav-profile is slotted in the profile slot */
57
- this._hasProfileComponent = false;
36
+ this._expanded = false;
58
37
  /** Used only for SSR to indicate the presence of the `non-collapsible` slot. */
59
38
  this.hasNonCollapsibleSlot = false;
60
- /** The href link for brand logo */
61
- this.brandHref = "";
62
- this.tone = "default";
63
- this.collapseId = generateId["default"]("mainnav", "collapse");
64
- /** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */
65
- this.expand = "lg";
66
39
  /** When true, removes max-width constraint to allow content to stretch full screen width */
67
40
  this.fluid = false;
68
- this.breakpointReached = false;
69
41
  this.hasSlotController = new slot.HasSlotController(this, "non-collapsible");
70
- this._handleMobileNavBound = this._handleMobileNav.bind(this);
71
42
  }
72
43
  /** @internal */
73
44
  get defaultSlotItems() {
@@ -77,145 +48,22 @@ class SgdsMainnav extends sgdsElement["default"] {
77
48
  get endSlotItems() {
78
49
  return [...(this.endNodes || [])].filter((node) => typeof node.tagName !== "undefined");
79
50
  }
80
- connectedCallback() {
81
- super.connectedCallback();
82
- this._handleResize();
83
- window.addEventListener("click", (event) => this._handleClickOutOfElement(event, this.body));
84
- window.addEventListener("resize", this._handleResize.bind(this));
85
- }
86
- disconnectedCallback() {
87
- super.disconnectedCallback();
88
- window.removeEventListener("click", (event) => this._handleClickOutOfElement(event, this.body));
89
- window.removeEventListener("resize", this._handleResize.bind(this));
90
- }
91
- firstUpdated(changedProperties) {
92
- super.firstUpdated(changedProperties);
93
- if (this.breakpointReached && this.body) {
94
- this.expanded = false;
95
- this.body.hidden = true;
96
- this._handleMobileNav();
97
- this._breakpointReached = true;
98
- }
99
- }
100
51
  updated() {
101
52
  if (!this.hasNonCollapsibleSlot)
102
53
  this.hasNonCollapsibleSlot = this.hasSlotController.test("non-collapsible");
54
+ // Sync expanded state to context
55
+ this._expanded = this.expanded;
103
56
  }
104
- _handleClickOutOfElement(e, self) {
105
- if (!e.composedPath().includes(self) && !(this.header && e.composedPath().includes(this.header))) {
106
- this.hide();
107
- }
108
- }
109
- _handleSummaryClick() {
110
- if (this.expanded) {
111
- this.hide();
112
- }
113
- else {
114
- document.body.style.overflow = "hidden";
115
- this.show();
116
- }
117
- }
118
- _handleResize() {
119
- const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];
120
- if (newBreakpointReachedValue !== this.breakpointReached) {
121
- this.requestUpdate();
122
- }
123
- else {
124
- this.body ? (this.body.hidden = true) : null;
125
- // this.expanded = false;
126
- this.expanding = false;
127
- }
128
- if (newBreakpointReachedValue) {
129
- this._handleMobileNav();
130
- if (!this._breakpointReached) {
131
- this._breakpointReached = true;
132
- window.addEventListener("scrollend", this._handleMobileNavBound);
133
- }
134
- }
135
- else {
136
- this._handleDesktopNav();
137
- this._breakpointReached = false;
138
- window.removeEventListener("scrollend", this._handleMobileNavBound);
139
- }
140
- }
141
- async _handleMobileNav() {
142
- if (!this.nav)
143
- return;
144
- this.nav.appendChild(this.body);
145
- await customElements.whenDefined("sgds-masthead");
146
- const { bottom } = this.nav.getBoundingClientRect();
147
- const navBodyPaddingY = parseFloat(getComputedStyle(this.body).paddingTop) + parseFloat(getComputedStyle(this.body).paddingBottom);
148
- this.navScroll.style.maxHeight = `calc(100dvh - ${bottom}px - ${navBodyPaddingY}px)`;
149
- }
150
- _handleDesktopNav() {
151
- var _a;
152
- (_a = this.navbar) === null || _a === void 0 ? void 0 : _a.insertBefore(this.body, this.navbarEnd);
153
- }
154
- async _animateToShow() {
155
- const sgdsShow = this.emit("sgds-show", { cancelable: true });
156
- if (sgdsShow.defaultPrevented) {
157
- this.expanding = false;
158
- this.expanded = false;
159
- return;
160
- }
161
- await animate.stopAnimations(this.body);
162
- this.body.hidden = false;
163
- const { keyframes, options } = animationRegistry.getAnimation(this, "mainnav.show");
164
- await animate.animateTo(this.body, animate.shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
165
- this.body.style.height = "auto";
166
- this.emit("sgds-after-show");
167
- }
168
- async _animateToHide() {
169
- const slHide = this.emit("sgds-hide", { cancelable: true });
170
- if (slHide.defaultPrevented) {
171
- this.expanding = false;
172
- this.expanded = true;
173
- return;
174
- }
175
- await animate.stopAnimations(this.body);
176
- const { keyframes, options } = animationRegistry.getAnimation(this, "mainnav.hide");
177
- await animate.animateTo(this.body, animate.shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
178
- this.body.hidden = true;
179
- this.body.style.height = "auto";
180
- this.emit("sgds-after-hide");
181
- }
182
- /** @internal */
183
- async handleOpenChange() {
184
- var _a;
185
- if (this.expanding) {
186
- // Show
187
- await this._animateToShow();
188
- this.expanded = true;
189
- }
190
- else {
191
- (_a = this.header) === null || _a === void 0 ? void 0 : _a.focus();
192
- // Hide
193
- await this._animateToHide();
194
- this.expanded = false;
195
- }
196
- }
197
- /** Shows the menu. For when mainnav is in the collapsed form */
198
- async show() {
199
- if (this.expanded) {
200
- return;
201
- }
202
- this.expanding = true;
203
- return event.waitForEvent(this, "sgds-after-show");
57
+ _onBreakpointReached(reached) {
58
+ this._breakpointReached = reached;
204
59
  }
205
- /** Hide the menu. For when mainnav is in the collapsed form */
206
- async hide() {
207
- if (!this.expanded) {
208
- return;
209
- }
210
- this.expanding = false;
211
- document.body.style.removeProperty("overflow");
212
- return event.waitForEvent(this, "sgds-after-hide");
60
+ _isBreakpointReached() {
61
+ return this._breakpointReached;
213
62
  }
214
63
  _handleDefaultSlotChange(e) {
215
64
  const childElements = e.target.assignedElements({ flatten: true });
216
65
  childElements.forEach(el => {
217
66
  el.setAttribute("expand", this.expand);
218
- el.setAttribute("tone", this.tone);
219
67
  });
220
68
  if (this._hasProfileComponent && childElements.length > 0) {
221
69
  console.warn("[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. " +
@@ -223,30 +71,27 @@ class SgdsMainnav extends sgdsElement["default"] {
223
71
  "Use a sidebar for navigation in operational apps.");
224
72
  }
225
73
  }
226
- // assigning name attribute to elements added in slot="end", to use wildcard css selector to assign styles only to *-mainnav-item
227
74
  _handleSlotChange(e) {
228
75
  const childElements = e.target.assignedElements({ flatten: true });
229
76
  childElements.forEach(e => {
230
77
  e.setAttribute("name", e.tagName.toLowerCase());
231
78
  e.setAttribute("expand", this.expand);
232
- e.setAttribute("tone", this.tone);
233
79
  });
234
80
  }
235
81
  _handleProfileSlotChange(e) {
236
82
  const childElements = e.target.assignedElements({ flatten: true });
237
- this._hasProfileComponent = childElements.some(el => el.tagName.toLowerCase() === "sgds-mainnav-profile");
238
83
  childElements.forEach(el => {
239
84
  el.setAttribute("expand", this.expand);
240
- el.setAttribute("tone", this.tone);
241
85
  });
242
- if (this._hasProfileComponent && this.defaultSlotItems.length > 0) {
243
- console.warn("[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. " +
244
- "The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. " +
245
- "Use a sidebar for navigation in operational apps.");
246
- }
247
86
  }
248
87
  render() {
249
- this.breakpointReached = window.innerWidth < SIZES[this.expand];
88
+ this.breakpointReached =
89
+ window.innerWidth <
90
+ (this.expand === "always"
91
+ ? -1
92
+ : this.expand === "never"
93
+ ? Infinity
94
+ : { sm: 512, md: 768, lg: 1024, xl: 1280, xxl: 1440 }[this.expand]);
250
95
  return lit.html `
251
96
  <nav>
252
97
  <div class="navbar ${this._expandClass()}">
@@ -265,45 +110,16 @@ class SgdsMainnav extends sgdsElement["default"] {
265
110
  </div>
266
111
  </div>
267
112
  <div class="navbar-end">
268
- <slot
269
- name="non-collapsible"
270
- class=${classMap_js.classMap({ "non-collapsible-empty": !this.hasNonCollapsibleSlot })}
271
- ></slot>
113
+ <slot name="non-collapsible" class=${classMap_js.classMap({ "slot-empty": !this.hasNonCollapsibleSlot })}></slot>
272
114
  <slot name="profile" @slotchange=${this._handleProfileSlotChange}></slot>
273
- ${!(this._hasProfileComponent && this.breakpointReached)
274
- ? lit.html `<sgds-icon-button
275
- name=${this.expanded ? "cross" : "menu"}
276
- variant="ghost"
277
- size="sm"
278
- tone=${this.tone !== "default" ? "fixed-light" : lit.nothing}
279
- class="navbar-toggler"
280
- @click=${this._handleSummaryClick}
281
- aria-controls="${this.collapseId}"
282
- aria-expanded="${this.expanded}"
283
- .ariaLabel=${"Toggle navigation"}
284
- ></sgds-icon-button>`
285
- : lit.nothing}
115
+ ${this._renderToggler()}
286
116
  </div>
287
117
  </div>
288
118
  </nav>
289
119
  `;
290
120
  }
291
- _expandClass() {
292
- switch (this.expand) {
293
- case "always":
294
- return "navbar-expand";
295
- case "never":
296
- break;
297
- default:
298
- return `navbar-expand-${this.expand}`;
299
- }
300
- }
301
121
  }
302
- SgdsMainnav.styles = [...sgdsElement["default"].styles, mainnav["default"]];
303
- /** @internal */
304
- SgdsMainnav.dependencies = {
305
- "sgds-icon-button": sgdsIconButton.SgdsIconButton
306
- };
122
+ SgdsMainnav.styles = [...navElement["default"].styles, mainnav["default"]];
307
123
  tslib.__decorate([
308
124
  context.provide({ context: mainnavContext.MainnavBreakpointContext }),
309
125
  decorators_js.state()
@@ -311,72 +127,20 @@ tslib.__decorate([
311
127
  tslib.__decorate([
312
128
  context.provide({ context: mainnavContext.MainnavExpandedContext }),
313
129
  decorators_js.state()
314
- ], SgdsMainnav.prototype, "expanded", void 0);
315
- tslib.__decorate([
316
- decorators_js.state()
317
- ], SgdsMainnav.prototype, "expanding", void 0);
318
- tslib.__decorate([
319
- decorators_js.query("nav")
320
- ], SgdsMainnav.prototype, "nav", void 0);
321
- tslib.__decorate([
322
- decorators_js.query(".navbar")
323
- ], SgdsMainnav.prototype, "navbar", void 0);
324
- tslib.__decorate([
325
- decorators_js.query(".navbar-toggler")
326
- ], SgdsMainnav.prototype, "header", void 0);
327
- tslib.__decorate([
328
- decorators_js.query(".navbar-body")
329
- ], SgdsMainnav.prototype, "body", void 0);
330
- tslib.__decorate([
331
- decorators_js.query(".navbar-nav-scroll")
332
- ], SgdsMainnav.prototype, "navScroll", void 0);
333
- tslib.__decorate([
334
- decorators_js.query(".navbar-end")
335
- ], SgdsMainnav.prototype, "navbarEnd", void 0);
336
- tslib.__decorate([
337
- decorators_js.state()
338
- ], SgdsMainnav.prototype, "_hasProfileComponent", void 0);
130
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
131
+ ], SgdsMainnav.prototype, "_expanded", void 0);
339
132
  tslib.__decorate([
340
133
  decorators_js.property({ type: Boolean })
341
134
  ], SgdsMainnav.prototype, "hasNonCollapsibleSlot", void 0);
342
- tslib.__decorate([
343
- decorators_js.property({ type: String })
344
- ], SgdsMainnav.prototype, "brandHref", void 0);
345
- tslib.__decorate([
346
- decorators_js.property({ type: String, reflect: true })
347
- ], SgdsMainnav.prototype, "tone", void 0);
348
- tslib.__decorate([
349
- decorators_js.property({ type: String })
350
- ], SgdsMainnav.prototype, "expand", void 0);
351
135
  tslib.__decorate([
352
136
  decorators_js.property({ type: Boolean, reflect: true })
353
137
  ], SgdsMainnav.prototype, "fluid", void 0);
354
- tslib.__decorate([
355
- decorators_js.state()
356
- ], SgdsMainnav.prototype, "breakpointReached", void 0);
357
138
  tslib.__decorate([
358
139
  decorators_js.queryAssignedElements()
359
140
  ], SgdsMainnav.prototype, "defaultNodes", void 0);
360
141
  tslib.__decorate([
361
142
  decorators_js.queryAssignedElements({ slot: "end" })
362
143
  ], SgdsMainnav.prototype, "endNodes", void 0);
363
- tslib.__decorate([
364
- watch.watch("expanding", { waitUntilFirstUpdate: true })
365
- ], SgdsMainnav.prototype, "handleOpenChange", null);
366
- animationRegistry.setDefaultAnimation("mainnav.show", {
367
- keyframes: [
368
- { height: "0", opacity: "0" },
369
- { height: "auto", opacity: "1" }
370
- ],
371
- options: { duration: 200, easing: "ease-in-out" }
372
- });
373
- animationRegistry.setDefaultAnimation("mainnav.hide", {
374
- keyframes: [
375
- { height: "auto", opacity: "1" },
376
- { height: "0", opacity: "0" }
377
- ],
378
- options: { duration: 200, easing: "ease-in-out" }
379
- });
380
144
 
381
145
  exports.SgdsMainnav = SgdsMainnav;
382
146
  exports["default"] = SgdsMainnav;
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-mainnav.cjs.js","sources":["../../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { html, nothing, PropertyValueMap } from \"lit\";\nimport { property, query, queryAssignedElements, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { animateTo, shimKeyframesHeightAuto, stopAnimations } from \"../../utils/animate\";\nimport { getAnimation, setDefaultAnimation } from \"../../utils/animation-registry\";\nimport { LG_BREAKPOINT, MD_BREAKPOINT, SM_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from \"../../utils/breakpoints\";\nimport { waitForEvent } from \"../../utils/event\";\nimport genId from \"../../utils/generateId\";\nimport { watch } from \"../../utils/watch\";\nimport SgdsIconButton from \"../IconButton/sgds-icon-button\";\nimport { MainnavBreakpointContext, MainnavExpandedContext } from \"./mainnav-context\";\nimport mainnavStyle from \"./mainnav.css\";\nimport SgdsMainnavDropdown from \"./sgds-mainnav-dropdown\";\nimport SgdsMainnavItem from \"./sgds-mainnav-item\";\nimport { HasSlotController } from \"../../utils/slot\";\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\nexport type MainnavTone = \"default\" | \"brand\" | \"gradient-1\" | \"gradient-2\" | \"gradient-3\" | \"gradient-4\";\n\nconst SIZES = {\n sm: SM_BREAKPOINT,\n md: MD_BREAKPOINT,\n lg: LG_BREAKPOINT,\n xl: XL_BREAKPOINT,\n xxl: XXL_BREAKPOINT,\n never: Infinity,\n always: -1\n};\n\n/**\n * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.\n *\n * @event sgds-show - Emitted on show. Only for collapsed menu.\n * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.\n * @event sgds-hide - Emitted on hide. Only for collapsed menu.\n * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.\n *\n * @slot default - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\n * @slot start - Elements in this slot will be positioned to the left of the brand.\n * @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.\n * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here\n * @slot profile - Profile slot positioned at the far right in desktop. In mobile, moves into the collapsed menu as the first item.\n * @slot non-collapsible - Elements in this slot will not be collapsed\n *\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [...SgdsElement.styles, mainnavStyle];\n /** @internal */\n static dependencies = {\n \"sgds-icon-button\": SgdsIconButton\n };\n\n @provide({ context: MainnavBreakpointContext })\n @state()\n private _breakpointReached = false;\n /** Indicates if mobile menu is open or closed */\n @provide({ context: MainnavExpandedContext })\n @state()\n private expanded = false;\n /** Denotes the transition state of mobile mainnav menu opening */\n @state()\n private expanding = false;\n\n @query(\"nav\") private nav: HTMLElement;\n @query(\".navbar\") private navbar: HTMLElement;\n @query(\".navbar-toggler\") private header: HTMLElement;\n @query(\".navbar-body\") private body: HTMLElement;\n @query(\".navbar-nav-scroll\") private navScroll: HTMLElement;\n @query(\".navbar-end\") private navbarEnd: HTMLElement;\n\n /** @internal Whether sgds-mainnav-profile is slotted in the profile slot */\n @state()\n private _hasProfileComponent = false;\n\n /** Used only for SSR to indicate the presence of the `non-collapsible` slot. */\n @property({ type: Boolean }) hasNonCollapsibleSlot = false;\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\n\n @property({ type: String, reflect: true })\n tone: MainnavTone = \"default\";\n\n private collapseId = genId(\"mainnav\", \"collapse\");\n\n /** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */\n @property({ type: String })\n expand: MainnavExpandSize = \"lg\";\n\n /** When true, removes max-width constraint to allow content to stretch full screen width */\n @property({ type: Boolean, reflect: true })\n fluid = false;\n\n @state()\n private breakpointReached = false;\n\n @queryAssignedElements() private defaultNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n @queryAssignedElements({ slot: \"end\" }) private endNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n /** @internal */\n get defaultSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.defaultNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n /** @internal */\n get endSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.endNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n private readonly hasSlotController = new HasSlotController(this, \"non-collapsible\");\n\n connectedCallback() {\n super.connectedCallback();\n\n this._handleResize();\n\n window.addEventListener(\"click\", (event: MouseEvent) => this._handleClickOutOfElement(event, this.body));\n window.addEventListener(\"resize\", this._handleResize.bind(this));\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n window.removeEventListener(\"click\", (event: MouseEvent) => this._handleClickOutOfElement(event, this.body));\n window.removeEventListener(\"resize\", this._handleResize.bind(this));\n }\n\n firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n if (this.breakpointReached && this.body) {\n this.expanded = false;\n this.body.hidden = true;\n this._handleMobileNav();\n this._breakpointReached = true;\n }\n }\n\n updated() {\n if (!this.hasNonCollapsibleSlot) this.hasNonCollapsibleSlot = this.hasSlotController.test(\"non-collapsible\");\n }\n\n private _handleClickOutOfElement(e: MouseEvent, self: HTMLElement) {\n if (!e.composedPath().includes(self) && !(this.header && e.composedPath().includes(this.header))) {\n this.hide();\n }\n }\n\n private _handleSummaryClick() {\n if (this.expanded) {\n this.hide();\n } else {\n document.body.style.overflow = \"hidden\";\n this.show();\n }\n }\n\n private _handleResize() {\n const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];\n if (newBreakpointReachedValue !== this.breakpointReached) {\n this.requestUpdate();\n } else {\n this.body ? (this.body.hidden = true) : null;\n // this.expanded = false;\n this.expanding = false;\n }\n\n if (newBreakpointReachedValue) {\n this._handleMobileNav();\n\n if (!this._breakpointReached) {\n this._breakpointReached = true;\n\n window.addEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n } else {\n this._handleDesktopNav();\n this._breakpointReached = false;\n window.removeEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n }\n\n private _handleMobileNavBound = this._handleMobileNav.bind(this);\n\n private async _handleMobileNav() {\n if (!this.nav) return;\n\n this.nav.appendChild(this.body);\n await customElements.whenDefined(\"sgds-masthead\");\n\n const { bottom } = this.nav.getBoundingClientRect();\n const navBodyPaddingY =\n parseFloat(getComputedStyle(this.body).paddingTop) + parseFloat(getComputedStyle(this.body).paddingBottom);\n\n this.navScroll.style.maxHeight = `calc(100dvh - ${bottom}px - ${navBodyPaddingY}px)`;\n }\n\n private _handleDesktopNav() {\n this.navbar?.insertBefore(this.body, this.navbarEnd);\n }\n\n private async _animateToShow() {\n const sgdsShow = this.emit(\"sgds-show\", { cancelable: true });\n if (sgdsShow.defaultPrevented) {\n this.expanding = false;\n this.expanded = false;\n return;\n }\n\n await stopAnimations(this.body);\n this.body.hidden = false;\n\n const { keyframes, options } = getAnimation(this, \"mainnav.show\");\n await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);\n this.body.style.height = \"auto\";\n\n this.emit(\"sgds-after-show\");\n }\n\n private async _animateToHide() {\n const slHide = this.emit(\"sgds-hide\", { cancelable: true });\n if (slHide.defaultPrevented) {\n this.expanding = false;\n this.expanded = true;\n return;\n }\n\n await stopAnimations(this.body);\n\n const { keyframes, options } = getAnimation(this, \"mainnav.hide\");\n await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);\n this.body.hidden = true;\n this.body.style.height = \"auto\";\n this.emit(\"sgds-after-hide\");\n }\n /** @internal */\n @watch(\"expanding\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.expanding) {\n // Show\n await this._animateToShow();\n this.expanded = true;\n } else {\n this.header?.focus();\n // Hide\n await this._animateToHide();\n this.expanded = false;\n }\n }\n\n /** Shows the menu. For when mainnav is in the collapsed form */\n public async show() {\n if (this.expanded) {\n return;\n }\n\n this.expanding = true;\n return waitForEvent(this, \"sgds-after-show\");\n }\n\n /** Hide the menu. For when mainnav is in the collapsed form */\n public async hide() {\n if (!this.expanded) {\n return;\n }\n\n this.expanding = false;\n document.body.style.removeProperty(\"overflow\");\n\n return waitForEvent(this, \"sgds-after-hide\");\n }\n\n private _handleDefaultSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n el.setAttribute(\"tone\", this.tone);\n });\n\n if (this._hasProfileComponent && childElements.length > 0) {\n console.warn(\n \"[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. \" +\n \"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. \" +\n \"Use a sidebar for navigation in operational apps.\"\n );\n }\n }\n\n // assigning name attribute to elements added in slot=\"end\", to use wildcard css selector to assign styles only to *-mainnav-item\n private _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n e.setAttribute(\"expand\", this.expand);\n e.setAttribute(\"tone\", this.tone);\n });\n }\n\n private _handleProfileSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n this._hasProfileComponent = childElements.some(el => el.tagName.toLowerCase() === \"sgds-mainnav-profile\");\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n el.setAttribute(\"tone\", this.tone);\n });\n\n if (this._hasProfileComponent && this.defaultSlotItems.length > 0) {\n console.warn(\n \"[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. \" +\n \"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. \" +\n \"Use a sidebar for navigation in operational apps.\"\n );\n }\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n\n return html`\n <nav>\n <div class=\"navbar ${this._expandClass()}\">\n <slot name=\"start\"></slot>\n <a class=\"navbar-brand\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <div class=\"navbar-body navbar-collapse\" id=${this.collapseId}>\n <div class=\"navbar-nav navbar-nav-scroll\">\n <slot @slotchange=${this._handleDefaultSlotChange}></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </div>\n </div>\n <div class=\"navbar-end\">\n <slot\n name=\"non-collapsible\"\n class=${classMap({ \"non-collapsible-empty\": !this.hasNonCollapsibleSlot })}\n ></slot>\n <slot name=\"profile\" @slotchange=${this._handleProfileSlotChange}></slot>\n ${!(this._hasProfileComponent && this.breakpointReached)\n ? html`<sgds-icon-button\n name=${this.expanded ? \"cross\" : \"menu\"}\n variant=\"ghost\"\n size=\"sm\"\n tone=${this.tone !== \"default\" ? \"fixed-light\" : nothing}\n class=\"navbar-toggler\"\n @click=${this._handleSummaryClick}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n .ariaLabel=${\"Toggle navigation\"}\n ></sgds-icon-button>`\n : nothing}\n </div>\n </div>\n </nav>\n `;\n }\n _expandClass() {\n switch (this.expand) {\n case \"always\":\n return \"navbar-expand\";\n case \"never\":\n break;\n default:\n return `navbar-expand-${this.expand}`;\n }\n }\n}\nsetDefaultAnimation(\"mainnav.show\", {\n keyframes: [\n { height: \"0\", opacity: \"0\" },\n { height: \"auto\", opacity: \"1\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n\nsetDefaultAnimation(\"mainnav.hide\", {\n keyframes: [\n { height: \"auto\", opacity: \"1\" },\n { height: \"0\", opacity: \"0\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n\nexport default SgdsMainnav;\n"],"names":["SM_BREAKPOINT","MD_BREAKPOINT","LG_BREAKPOINT","XL_BREAKPOINT","XXL_BREAKPOINT","SgdsElement","genId","HasSlotController","stopAnimations","getAnimation","animateTo","shimKeyframesHeightAuto","waitForEvent","html","classMap","nothing","mainnavStyle","SgdsIconButton","__decorate","provide","MainnavBreakpointContext","state","MainnavExpandedContext","query","property","queryAssignedElements","watch","setDefaultAnimation"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-mainnav.cjs.js","sources":["../../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { html } from \"lit\";\nimport { property, queryAssignedElements, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport NavElement from \"../../base/nav-element\";\nimport { HasSlotController } from \"../../utils/slot\";\nimport { MainnavBreakpointContext, MainnavExpandedContext } from \"./mainnav-context\";\nimport mainnavStyle from \"./mainnav.css\";\nimport SgdsMainnavDropdown from \"./sgds-mainnav-dropdown\";\nimport SgdsMainnavItem from \"./sgds-mainnav-item\";\n\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\n\n/**\n * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.\n *\n * @event sgds-show - Emitted on show. Only for collapsed menu.\n * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.\n * @event sgds-hide - Emitted on hide. Only for collapsed menu.\n * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.\n *\n * @slot default - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\n * @slot start - Elements in this slot will be positioned to the left of the brand.\n * @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.\n * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here\n * @slot profile - Profile slot positioned at the far right in desktop. In mobile, moves into the collapsed menu as the first item.\n * @slot non-collapsible - Elements in this slot will not be collapsed\n *\n */\nexport class SgdsMainnav extends NavElement {\n static styles = [...NavElement.styles, mainnavStyle];\n\n @provide({ context: MainnavBreakpointContext })\n @state()\n private _breakpointReached = false;\n\n @provide({ context: MainnavExpandedContext })\n @state()\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private _expanded = false;\n\n /** Used only for SSR to indicate the presence of the `non-collapsible` slot. */\n @property({ type: Boolean }) hasNonCollapsibleSlot = false;\n\n /** When true, removes max-width constraint to allow content to stretch full screen width */\n @property({ type: Boolean, reflect: true })\n fluid = false;\n\n @queryAssignedElements() private defaultNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n @queryAssignedElements({ slot: \"end\" }) private endNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n /** @internal */\n get defaultSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.defaultNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n /** @internal */\n get endSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.endNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n private readonly hasSlotController = new HasSlotController(this, \"non-collapsible\");\n\n updated() {\n if (!this.hasNonCollapsibleSlot) this.hasNonCollapsibleSlot = this.hasSlotController.test(\"non-collapsible\");\n // Sync expanded state to context\n this._expanded = this.expanded;\n }\n\n protected _onBreakpointReached(reached: boolean): void {\n this._breakpointReached = reached;\n }\n\n protected _isBreakpointReached(): boolean {\n return this._breakpointReached;\n }\n\n private _handleDefaultSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n });\n\n if (this._hasProfileComponent && childElements.length > 0) {\n console.warn(\n \"[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. \" +\n \"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. \" +\n \"Use a sidebar for navigation in operational apps.\"\n );\n }\n }\n\n private _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n e.setAttribute(\"expand\", this.expand);\n });\n }\n\n private _handleProfileSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n });\n }\n\n render() {\n this.breakpointReached =\n window.innerWidth <\n (this.expand === \"always\"\n ? -1\n : this.expand === \"never\"\n ? Infinity\n : { sm: 512, md: 768, lg: 1024, xl: 1280, xxl: 1440 }[this.expand]);\n\n return html`\n <nav>\n <div class=\"navbar ${this._expandClass()}\">\n <slot name=\"start\"></slot>\n <a class=\"navbar-brand\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <div class=\"navbar-body navbar-collapse\" id=${this.collapseId}>\n <div class=\"navbar-nav navbar-nav-scroll\">\n <slot @slotchange=${this._handleDefaultSlotChange}></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </div>\n </div>\n <div class=\"navbar-end\">\n <slot name=\"non-collapsible\" class=${classMap({ \"slot-empty\": !this.hasNonCollapsibleSlot })}></slot>\n <slot name=\"profile\" @slotchange=${this._handleProfileSlotChange}></slot>\n ${this._renderToggler()}\n </div>\n </div>\n </nav>\n `;\n }\n}\n\nexport default SgdsMainnav;\n"],"names":["NavElement","HasSlotController","html","classMap","mainnavStyle","__decorate","provide","MainnavBreakpointContext","state","MainnavExpandedContext","property","queryAssignedElements"],"mappings":"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"}