@govtechsg/sgds-web-component 1.1.0 → 1.2.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.
- package/Masthead/index.js +1 -1
- package/base/sgds-element.cjs2.js +1 -1
- package/base/sgds-element2.js +1 -1
- package/components/Accordion/index.umd.js +3 -3
- package/components/Accordion/index.umd.js.map +1 -1
- package/components/Accordion/sgds-accordion.cjs.js +2 -2
- package/components/Accordion/sgds-accordion.cjs.js.map +1 -1
- package/components/Accordion/sgds-accordion.js +2 -2
- package/components/Accordion/sgds-accordion.js.map +1 -1
- package/components/ActionCard/index.umd.js +1 -1
- package/components/Alert/index.umd.js +1 -1
- package/components/Badge/index.umd.js +1 -1
- package/components/Breadcrumb/index.umd.js +1 -1
- package/components/Button/index.umd.js +1 -1
- package/components/Card/index.umd.js +1 -1
- package/components/Checkbox/index.umd.js +1 -1
- package/components/ComboBox/index.umd.js +10 -5
- package/components/ComboBox/index.umd.js.map +1 -1
- package/components/Datepicker/datepicker-calendar.cjs.js +43 -23
- package/components/Datepicker/datepicker-calendar.cjs.js.map +1 -1
- package/components/Datepicker/datepicker-calendar.cjs2.js +1 -1
- package/components/Datepicker/datepicker-calendar.d.ts +0 -1
- package/components/Datepicker/datepicker-calendar.js +43 -23
- package/components/Datepicker/datepicker-calendar.js.map +1 -1
- package/components/Datepicker/datepicker-calendar2.js +1 -1
- package/components/Datepicker/datepicker-header.cjs.js +44 -9
- package/components/Datepicker/datepicker-header.cjs.js.map +1 -1
- package/components/Datepicker/datepicker-header.cjs2.js +1 -1
- package/components/Datepicker/datepicker-header.d.ts +5 -1
- package/components/Datepicker/datepicker-header.js +44 -9
- package/components/Datepicker/datepicker-header.js.map +1 -1
- package/components/Datepicker/datepicker-header2.js +1 -1
- package/components/Datepicker/datepicker-input.cjs.js +4 -0
- package/components/Datepicker/datepicker-input.cjs.js.map +1 -1
- package/components/Datepicker/datepicker-input.d.ts +1 -0
- package/components/Datepicker/datepicker-input.js +4 -0
- package/components/Datepicker/datepicker-input.js.map +1 -1
- package/components/Datepicker/index.umd.js +252 -166
- package/components/Datepicker/index.umd.js.map +1 -1
- package/components/Datepicker/sgds-datepicker.cjs.js +25 -2
- package/components/Datepicker/sgds-datepicker.cjs.js.map +1 -1
- package/components/Datepicker/sgds-datepicker.d.ts +7 -1
- package/components/Datepicker/sgds-datepicker.js +25 -2
- package/components/Datepicker/sgds-datepicker.js.map +1 -1
- package/components/Datepicker/types.d.ts +0 -3
- package/components/Drawer/index.umd.js +1 -1
- package/components/Dropdown/index.umd.js +1 -1
- package/components/FileUpload/index.umd.js +2 -1
- package/components/FileUpload/index.umd.js.map +1 -1
- package/components/FileUpload/sgds-file-upload.cjs.js +1 -0
- package/components/FileUpload/sgds-file-upload.cjs.js.map +1 -1
- package/components/FileUpload/sgds-file-upload.d.ts +1 -0
- package/components/FileUpload/sgds-file-upload.js +1 -0
- package/components/FileUpload/sgds-file-upload.js.map +1 -1
- package/components/Footer/index.umd.js +1 -1
- package/components/Input/index.umd.js +10 -5
- package/components/Input/index.umd.js.map +1 -1
- package/components/Input/sgds-input.cjs.js +9 -4
- package/components/Input/sgds-input.cjs.js.map +1 -1
- package/components/Input/sgds-input.d.ts +1 -0
- package/components/Input/sgds-input.js +9 -4
- package/components/Input/sgds-input.js.map +1 -1
- package/components/Mainnav/index.umd.js +5989 -6128
- package/components/Mainnav/index.umd.js.map +1 -1
- package/components/Mainnav/sgds-mainnav.cjs.js +102 -29
- package/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
- package/components/Mainnav/sgds-mainnav.d.ts +16 -4
- package/components/Mainnav/sgds-mainnav.js +103 -26
- package/components/Mainnav/sgds-mainnav.js.map +1 -1
- package/components/Masthead/index.umd.js +1 -1
- package/components/Modal/index.umd.js +1 -1
- package/components/Pagination/index.umd.js +231 -41
- package/components/Pagination/index.umd.js.map +1 -1
- package/components/Pagination/sgds-pagination.cjs.js +94 -39
- package/components/Pagination/sgds-pagination.cjs.js.map +1 -1
- package/components/Pagination/sgds-pagination.cjs2.js +1 -1
- package/components/Pagination/sgds-pagination.d.ts +20 -13
- package/components/Pagination/sgds-pagination.js +95 -40
- package/components/Pagination/sgds-pagination.js.map +1 -1
- package/components/Pagination/sgds-pagination2.js +1 -1
- package/components/Progress/index.umd.js +1 -1
- package/components/QuantityToggle/index.umd.js +26 -8
- package/components/QuantityToggle/index.umd.js.map +1 -1
- package/components/QuantityToggle/sgds-quantity-toggle.cjs.js +25 -7
- package/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
- package/components/QuantityToggle/sgds-quantity-toggle.d.ts +1 -0
- package/components/QuantityToggle/sgds-quantity-toggle.js +25 -7
- package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
- package/components/Radio/index.umd.js +1 -1
- package/components/Sidenav/index.umd.js +505 -1648
- package/components/Sidenav/index.umd.js.map +1 -1
- package/components/Sidenav/sgds-sidenav-item.cjs.js +122 -45
- package/components/Sidenav/sgds-sidenav-item.cjs.js.map +1 -1
- package/components/Sidenav/sgds-sidenav-item.d.ts +19 -8
- package/components/Sidenav/sgds-sidenav-item.js +123 -42
- package/components/Sidenav/sgds-sidenav-item.js.map +1 -1
- package/components/Sidenav/sgds-sidenav.cjs.js +38 -12
- package/components/Sidenav/sgds-sidenav.cjs.js.map +1 -1
- package/components/Sidenav/sgds-sidenav.cjs2.js +1 -1
- package/components/Sidenav/sgds-sidenav.d.ts +9 -0
- package/components/Sidenav/sgds-sidenav.js +39 -13
- package/components/Sidenav/sgds-sidenav.js.map +1 -1
- package/components/Sidenav/sgds-sidenav2.js +1 -1
- package/components/Spinner/index.umd.js +1 -1
- package/components/Stepper/index.umd.js +1 -1
- package/components/Tab/index.umd.js +1 -1
- package/components/Table/index.umd.js +1 -1
- package/components/Textarea/index.umd.js +1 -1
- package/components/Toast/index.umd.js +1 -1
- package/components/Tooltip/index.umd.js +1 -1
- package/components/index.umd.js +534 -539
- package/components/index.umd.js.map +1 -1
- package/index.umd.js +534 -539
- package/index.umd.js.map +1 -1
- package/package.json +2 -2
- package/react/mainnav/index.cjs.js +6 -1
- package/react/mainnav/index.cjs.js.map +1 -1
- package/react/mainnav/index.js +6 -1
- package/react/mainnav/index.js.map +1 -1
- package/react/sidenav-item/index.cjs.js +5 -1
- package/react/sidenav-item/index.cjs.js.map +1 -1
- package/react/sidenav-item/index.js +5 -1
- package/react/sidenav-item/index.js.map +1 -1
|
@@ -3,20 +3,18 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var tslib = require('tslib');
|
|
6
|
-
var Collapse = require('bootstrap/js/src/collapse');
|
|
7
6
|
var lit = require('lit');
|
|
8
7
|
var decorators_js = require('lit/decorators.js');
|
|
9
8
|
var classMap_js = require('lit/directives/class-map.js');
|
|
10
|
-
var ref_js = require('lit/directives/ref.js');
|
|
11
9
|
var sgdsElement = require('../../base/sgds-element.cjs.js');
|
|
10
|
+
var animate = require('../../utils/animate.cjs.js');
|
|
11
|
+
var animationRegistry = require('../../utils/animation-registry.cjs.js');
|
|
12
12
|
var breakpoints = require('../../utils/breakpoints.cjs.js');
|
|
13
|
+
var event = require('../../utils/event.cjs.js');
|
|
13
14
|
var generateId = require('../../utils/generateId.cjs.js');
|
|
15
|
+
var watch = require('../../utils/watch.cjs.js');
|
|
14
16
|
var sgdsMainnav = require('./sgds-mainnav.cjs2.js');
|
|
15
17
|
|
|
16
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
17
|
-
|
|
18
|
-
var Collapse__default = /*#__PURE__*/_interopDefaultLegacy(Collapse);
|
|
19
|
-
|
|
20
18
|
const SIZES = {
|
|
21
19
|
sm: breakpoints.SM_BREAKPOINT,
|
|
22
20
|
md: breakpoints.MD_BREAKPOINT,
|
|
@@ -29,6 +27,11 @@ const SIZES = {
|
|
|
29
27
|
/**
|
|
30
28
|
* @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.
|
|
31
29
|
*
|
|
30
|
+
* @event sgds-show - Emitted on show. Only for collapsed menu.
|
|
31
|
+
* @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.
|
|
32
|
+
* @event sgds-hide - Emitted on hide. Only for collapsed menu.
|
|
33
|
+
* @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
|
|
34
|
+
*
|
|
32
35
|
* @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.
|
|
33
36
|
* @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.
|
|
34
37
|
* @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here
|
|
@@ -45,10 +48,6 @@ const SIZES = {
|
|
|
45
48
|
class SgdsMainnav extends sgdsElement["default"] {
|
|
46
49
|
constructor() {
|
|
47
50
|
super();
|
|
48
|
-
/** @internal */
|
|
49
|
-
this.myCollapse = ref_js.createRef();
|
|
50
|
-
/** @internal */
|
|
51
|
-
this.bsCollapse = null;
|
|
52
51
|
/** The href link for brand logo */
|
|
53
52
|
this.brandHref = "";
|
|
54
53
|
this.collapseId = generateId["default"]("mainnav", "collapse");
|
|
@@ -63,27 +62,78 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
63
62
|
if (newBreakpointReachedValue !== this.breakpointReached) {
|
|
64
63
|
this.requestUpdate();
|
|
65
64
|
}
|
|
65
|
+
else {
|
|
66
|
+
this.body ? (this.body.hidden = true) : null;
|
|
67
|
+
this.expanded = false;
|
|
68
|
+
}
|
|
66
69
|
});
|
|
67
70
|
}
|
|
68
|
-
_onClickButton() {
|
|
69
|
-
this.bsCollapse.toggle();
|
|
70
|
-
}
|
|
71
71
|
firstUpdated() {
|
|
72
|
-
this.
|
|
73
|
-
toggle: false
|
|
74
|
-
});
|
|
75
|
-
this.myCollapse.value.addEventListener("show.bs.collapse", () => {
|
|
76
|
-
this.expanded = true;
|
|
77
|
-
});
|
|
78
|
-
this.myCollapse.value.addEventListener("shown.bs.collapse", () => {
|
|
79
|
-
this.expanded = true;
|
|
80
|
-
});
|
|
81
|
-
this.myCollapse.value.addEventListener("hide.bs.collapse", () => {
|
|
72
|
+
if (this.breakpointReached && this.body) {
|
|
82
73
|
this.expanded = false;
|
|
83
|
-
|
|
84
|
-
|
|
74
|
+
this.body.hidden = true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
handleSummaryClick() {
|
|
78
|
+
if (this.expanded) {
|
|
79
|
+
this.hide();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.show();
|
|
83
|
+
}
|
|
84
|
+
this.header.focus();
|
|
85
|
+
}
|
|
86
|
+
async _animateToShow() {
|
|
87
|
+
const sgdsShow = this.emit("sgds-show", { cancelable: true });
|
|
88
|
+
if (sgdsShow.defaultPrevented) {
|
|
85
89
|
this.expanded = false;
|
|
86
|
-
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
await animate.stopAnimations(this.body);
|
|
93
|
+
this.body.hidden = false;
|
|
94
|
+
const { keyframes, options } = animationRegistry.getAnimation(this, "mainnav.show");
|
|
95
|
+
await animate.animateTo(this.body, animate.shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
|
|
96
|
+
this.body.style.height = "auto";
|
|
97
|
+
this.emit("sgds-after-show");
|
|
98
|
+
}
|
|
99
|
+
async _animateToHide() {
|
|
100
|
+
const slHide = this.emit("sgds-hide", { cancelable: true });
|
|
101
|
+
if (slHide.defaultPrevented) {
|
|
102
|
+
this.expanded = true;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
await animate.stopAnimations(this.body);
|
|
106
|
+
const { keyframes, options } = animationRegistry.getAnimation(this, "mainnav.hide");
|
|
107
|
+
await animate.animateTo(this.body, animate.shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
|
|
108
|
+
this.body.hidden = true;
|
|
109
|
+
this.body.style.height = "auto";
|
|
110
|
+
this.emit("sgds-after-hide");
|
|
111
|
+
}
|
|
112
|
+
async handleOpenChange() {
|
|
113
|
+
if (this.expanded) {
|
|
114
|
+
// Show
|
|
115
|
+
this._animateToShow();
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// Hide
|
|
119
|
+
this._animateToHide();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** Shows the menu. For when mainnav is in the collapsed form */
|
|
123
|
+
async show() {
|
|
124
|
+
if (this.expanded) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
this.expanded = true;
|
|
128
|
+
return event.waitForEvent(this, "sgds-after-show");
|
|
129
|
+
}
|
|
130
|
+
/** Hide the menu. For when mainnav is in the collapsed form */
|
|
131
|
+
async hide() {
|
|
132
|
+
if (!this.expanded) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
this.expanded = false;
|
|
136
|
+
return event.waitForEvent(this, "sgds-after-hide");
|
|
87
137
|
}
|
|
88
138
|
// assigning name attribute to elements added in slot="end", to use wildcard css selector to assign styles only to *-mainnav-item
|
|
89
139
|
_handleSlotChange(e) {
|
|
@@ -94,7 +144,7 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
94
144
|
}
|
|
95
145
|
render() {
|
|
96
146
|
this.breakpointReached = window.innerWidth < SIZES[this.expand];
|
|
97
|
-
const collapseClass = "
|
|
147
|
+
const collapseClass = "navbar-body navbar-collapse order-2";
|
|
98
148
|
return lit.html `
|
|
99
149
|
<nav
|
|
100
150
|
class="sgds navbar navbar-light
|
|
@@ -107,7 +157,7 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
107
157
|
<button
|
|
108
158
|
class="navbar-toggler order-1"
|
|
109
159
|
type="button"
|
|
110
|
-
@click=${
|
|
160
|
+
@click=${this.handleSummaryClick}
|
|
111
161
|
aria-controls="${this.collapseId}"
|
|
112
162
|
aria-expanded="${this.expanded}"
|
|
113
163
|
aria-label="Toggle navigation"
|
|
@@ -126,7 +176,7 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
126
176
|
/>
|
|
127
177
|
</svg>
|
|
128
178
|
</button>
|
|
129
|
-
<div class=${collapseClass}
|
|
179
|
+
<div class=${collapseClass} id=${this.collapseId}>
|
|
130
180
|
<ul class="navbar-nav">
|
|
131
181
|
<slot></slot>
|
|
132
182
|
<slot
|
|
@@ -151,6 +201,12 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
151
201
|
}
|
|
152
202
|
}
|
|
153
203
|
SgdsMainnav.styles = [sgdsElement["default"].styles, sgdsMainnav["default"]];
|
|
204
|
+
tslib.__decorate([
|
|
205
|
+
decorators_js.query(".navbar-toggler")
|
|
206
|
+
], SgdsMainnav.prototype, "header", void 0);
|
|
207
|
+
tslib.__decorate([
|
|
208
|
+
decorators_js.query(".navbar-body")
|
|
209
|
+
], SgdsMainnav.prototype, "body", void 0);
|
|
154
210
|
tslib.__decorate([
|
|
155
211
|
decorators_js.property({ type: String })
|
|
156
212
|
], SgdsMainnav.prototype, "brandHref", void 0);
|
|
@@ -163,6 +219,23 @@ tslib.__decorate([
|
|
|
163
219
|
tslib.__decorate([
|
|
164
220
|
decorators_js.state()
|
|
165
221
|
], SgdsMainnav.prototype, "expanded", void 0);
|
|
222
|
+
tslib.__decorate([
|
|
223
|
+
watch.watch("expanded", { waitUntilFirstUpdate: true })
|
|
224
|
+
], SgdsMainnav.prototype, "handleOpenChange", null);
|
|
225
|
+
animationRegistry.setDefaultAnimation("mainnav.show", {
|
|
226
|
+
keyframes: [
|
|
227
|
+
{ height: "0", opacity: "0" },
|
|
228
|
+
{ height: "auto", opacity: "1" }
|
|
229
|
+
],
|
|
230
|
+
options: { duration: 200, easing: "ease-in-out" }
|
|
231
|
+
});
|
|
232
|
+
animationRegistry.setDefaultAnimation("mainnav.hide", {
|
|
233
|
+
keyframes: [
|
|
234
|
+
{ height: "auto", opacity: "1" },
|
|
235
|
+
{ height: "0", opacity: "0" }
|
|
236
|
+
],
|
|
237
|
+
options: { duration: 200, easing: "ease-in-out" }
|
|
238
|
+
});
|
|
166
239
|
|
|
167
240
|
exports.SgdsMainnav = SgdsMainnav;
|
|
168
241
|
exports["default"] = SgdsMainnav;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sgds-mainnav.cjs.js","sources":["../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import Collapse from \"bootstrap/js/src/collapse\";\nimport type { Collapse as BsCollapse } from \"bootstrap\";\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { Ref, createRef, ref } from \"lit/directives/ref.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { LG_BREAKPOINT, MD_BREAKPOINT, SM_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from \"../../utils/breakpoints\";\nimport genId from \"../../utils/generateId\";\nimport styles from \"./sgds-mainnav.scss\";\n\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\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 * @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\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 non-collapsible - Elements in this slot will not be collapsed\n *\n * @cssproperty --mainnav-background-color - Navbar's background color.\n * @cssproperty --mainnav-padding-x - left and right padding for browser width > 768px\n * @cssproperty --mainnav-padding-y - top and bottom padding for browser width > 768px\n * @cssproperty --mainnav-mobile-padding-x - left and right padding for browser width < 768px\n * @cssproperty --mainnav-mobile-padding-y - top and bottom padding for browser width < 768px\n * @cssproperty --mainnav-borderBottom-width - bottom border width\n * @cssproperty --mainnav-borderBottom-color - borderBottom width color\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n constructor() {\n super();\n window.addEventListener(\"resize\", () => {\n const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];\n if (newBreakpointReachedValue !== this.breakpointReached) {\n this.requestUpdate();\n }\n });\n }\n /** @internal */\n private myCollapse: Ref<HTMLElement> = createRef();\n /** @internal */\n private bsCollapse: BsCollapse = null;\n\n private _onClickButton() {\n this.bsCollapse.toggle();\n }\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\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 /** @internal */\n @state()\n breakpointReached = false;\n\n /** @internal */\n @state()\n expanded = false;\n\n firstUpdated() {\n this.bsCollapse = new Collapse(this.myCollapse.value, {\n toggle: false\n });\n this.myCollapse.value.addEventListener(\"show.bs.collapse\", () => {\n this.expanded = true;\n });\n this.myCollapse.value.addEventListener(\"shown.bs.collapse\", () => {\n this.expanded = true;\n });\n this.myCollapse.value.addEventListener(\"hide.bs.collapse\", () => {\n this.expanded = false;\n });\n this.myCollapse.value.addEventListener(\"hidden.bs.collapse\", () => {\n this.expanded = false;\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 _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n });\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n const collapseClass = \"collapse navbar-collapse order-2\";\n return html`\n <nav\n class=\"sgds navbar navbar-light\n ${this._expandClass()}\"\n >\n <a class=\"navbar-brand me-auto order-first\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <slot name=\"non-collapsible\" class=\"${this.breakpointReached ? \"order-1\" : \"order-last\"}\"></slot>\n <button\n class=\"navbar-toggler order-1\"\n type=\"button\"\n @click=${() => this._onClickButton()}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n aria-label=\"Toggle navigation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n fill=\"currentColor\"\n class=\"bi bi-list\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z\"\n />\n </svg>\n </button>\n <div class=${collapseClass} ${ref(this.myCollapse)} id=${this.collapseId}>\n <ul class=\"navbar-nav\">\n <slot></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </ul>\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}\n\nexport default SgdsMainnav;\n"],"names":["SM_BREAKPOINT","MD_BREAKPOINT","LG_BREAKPOINT","XL_BREAKPOINT","XXL_BREAKPOINT","SgdsElement","createRef","genId","Collapse","html","ref","classMap","styles","__decorate","property","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sgds-mainnav.cjs.js","sources":["../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import { html } from \"lit\";\nimport { property, query, 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 styles from \"./sgds-mainnav.scss\";\n\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\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 slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\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 non-collapsible - Elements in this slot will not be collapsed\n *\n * @cssproperty --mainnav-background-color - Navbar's background color.\n * @cssproperty --mainnav-padding-x - left and right padding for browser width > 768px\n * @cssproperty --mainnav-padding-y - top and bottom padding for browser width > 768px\n * @cssproperty --mainnav-mobile-padding-x - left and right padding for browser width < 768px\n * @cssproperty --mainnav-mobile-padding-y - top and bottom padding for browser width < 768px\n * @cssproperty --mainnav-borderBottom-width - bottom border width\n * @cssproperty --mainnav-borderBottom-color - borderBottom width color\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n /** @internal */\n @query(\".navbar-toggler\") header: HTMLElement;\n /** @internal */\n @query(\".navbar-body\") body: HTMLElement;\n\n constructor() {\n super();\n window.addEventListener(\"resize\", () => {\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 }\n });\n }\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\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 /** @internal */\n @state()\n breakpointReached = false;\n\n /** @internal */\n @state()\n expanded = false;\n firstUpdated() {\n if (this.breakpointReached && this.body) {\n this.expanded = false;\n this.body.hidden = true;\n }\n }\n private handleSummaryClick() {\n if (this.expanded) {\n this.hide();\n } else {\n this.show();\n }\n\n this.header.focus();\n }\n\n private async _animateToShow() {\n const sgdsShow = this.emit(\"sgds-show\", { cancelable: true });\n if (sgdsShow.defaultPrevented) {\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.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\n this.emit(\"sgds-after-hide\");\n }\n\n @watch(\"expanded\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.expanded) {\n // Show\n this._animateToShow();\n } else {\n // Hide\n this._animateToHide();\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.expanded = 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 this.expanded = false;\n return waitForEvent(this, \"sgds-after-hide\");\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 _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n });\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n const collapseClass = \"navbar-body navbar-collapse order-2\";\n return html`\n <nav\n class=\"sgds navbar navbar-light\n ${this._expandClass()}\"\n >\n <a class=\"navbar-brand me-auto order-first\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <slot name=\"non-collapsible\" class=\"${this.breakpointReached ? \"order-1\" : \"order-last\"}\"></slot>\n <button\n class=\"navbar-toggler order-1\"\n type=\"button\"\n @click=${this.handleSummaryClick}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n aria-label=\"Toggle navigation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n fill=\"currentColor\"\n class=\"bi bi-list\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z\"\n />\n </svg>\n </button>\n <div class=${collapseClass} id=${this.collapseId}>\n <ul class=\"navbar-nav\">\n <slot></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </ul>\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","stopAnimations","getAnimation","animateTo","shimKeyframesHeightAuto","waitForEvent","html","classMap","styles","__decorate","query","property","state","watch","setDefaultAnimation"],"mappings":"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"}
|
|
@@ -3,6 +3,11 @@ export type MainnavExpandSize = "sm" | "md" | "lg" | "xl" | "xxl" | "always" | "
|
|
|
3
3
|
/**
|
|
4
4
|
* @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.
|
|
5
5
|
*
|
|
6
|
+
* @event sgds-show - Emitted on show. Only for collapsed menu.
|
|
7
|
+
* @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.
|
|
8
|
+
* @event sgds-hide - Emitted on hide. Only for collapsed menu.
|
|
9
|
+
* @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
|
|
10
|
+
*
|
|
6
11
|
* @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.
|
|
7
12
|
* @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.
|
|
8
13
|
* @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here
|
|
@@ -18,12 +23,11 @@ export type MainnavExpandSize = "sm" | "md" | "lg" | "xl" | "xxl" | "always" | "
|
|
|
18
23
|
*/
|
|
19
24
|
export declare class SgdsMainnav extends SgdsElement {
|
|
20
25
|
static styles: import("lit").CSSResultGroup[];
|
|
21
|
-
constructor();
|
|
22
26
|
/** @internal */
|
|
23
|
-
|
|
27
|
+
header: HTMLElement;
|
|
24
28
|
/** @internal */
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
body: HTMLElement;
|
|
30
|
+
constructor();
|
|
27
31
|
/** The href link for brand logo */
|
|
28
32
|
brandHref: string;
|
|
29
33
|
private collapseId;
|
|
@@ -34,6 +38,14 @@ export declare class SgdsMainnav extends SgdsElement {
|
|
|
34
38
|
/** @internal */
|
|
35
39
|
expanded: boolean;
|
|
36
40
|
firstUpdated(): void;
|
|
41
|
+
private handleSummaryClick;
|
|
42
|
+
private _animateToShow;
|
|
43
|
+
private _animateToHide;
|
|
44
|
+
handleOpenChange(): Promise<void>;
|
|
45
|
+
/** Shows the menu. For when mainnav is in the collapsed form */
|
|
46
|
+
show(): Promise<void>;
|
|
47
|
+
/** Hide the menu. For when mainnav is in the collapsed form */
|
|
48
|
+
hide(): Promise<void>;
|
|
37
49
|
_handleSlotChange(e: Event): void;
|
|
38
50
|
render(): import("lit-html").TemplateResult<1>;
|
|
39
51
|
_expandClass(): string;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { __decorate } from 'tslib';
|
|
2
|
-
import Collapse from 'bootstrap/js/src/collapse';
|
|
3
2
|
import { html } from 'lit';
|
|
4
|
-
import { property, state } from 'lit/decorators.js';
|
|
3
|
+
import { query, property, state } from 'lit/decorators.js';
|
|
5
4
|
import { classMap } from 'lit/directives/class-map.js';
|
|
6
|
-
import { createRef, ref } from 'lit/directives/ref.js';
|
|
7
5
|
import SgdsElement from '../../base/sgds-element.js';
|
|
6
|
+
import { stopAnimations, animateTo, shimKeyframesHeightAuto } from '../../utils/animate.js';
|
|
7
|
+
import { setDefaultAnimation, getAnimation } from '../../utils/animation-registry.js';
|
|
8
8
|
import { SM_BREAKPOINT, MD_BREAKPOINT, LG_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from '../../utils/breakpoints.js';
|
|
9
|
+
import { waitForEvent } from '../../utils/event.js';
|
|
9
10
|
import genId from '../../utils/generateId.js';
|
|
11
|
+
import { watch } from '../../utils/watch.js';
|
|
10
12
|
import css_248z from './sgds-mainnav2.js';
|
|
11
13
|
|
|
12
14
|
const SIZES = {
|
|
@@ -21,6 +23,11 @@ const SIZES = {
|
|
|
21
23
|
/**
|
|
22
24
|
* @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.
|
|
23
25
|
*
|
|
26
|
+
* @event sgds-show - Emitted on show. Only for collapsed menu.
|
|
27
|
+
* @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.
|
|
28
|
+
* @event sgds-hide - Emitted on hide. Only for collapsed menu.
|
|
29
|
+
* @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
|
|
30
|
+
*
|
|
24
31
|
* @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.
|
|
25
32
|
* @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.
|
|
26
33
|
* @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here
|
|
@@ -37,10 +44,6 @@ const SIZES = {
|
|
|
37
44
|
class SgdsMainnav extends SgdsElement {
|
|
38
45
|
constructor() {
|
|
39
46
|
super();
|
|
40
|
-
/** @internal */
|
|
41
|
-
this.myCollapse = createRef();
|
|
42
|
-
/** @internal */
|
|
43
|
-
this.bsCollapse = null;
|
|
44
47
|
/** The href link for brand logo */
|
|
45
48
|
this.brandHref = "";
|
|
46
49
|
this.collapseId = genId("mainnav", "collapse");
|
|
@@ -55,27 +58,78 @@ class SgdsMainnav extends SgdsElement {
|
|
|
55
58
|
if (newBreakpointReachedValue !== this.breakpointReached) {
|
|
56
59
|
this.requestUpdate();
|
|
57
60
|
}
|
|
61
|
+
else {
|
|
62
|
+
this.body ? (this.body.hidden = true) : null;
|
|
63
|
+
this.expanded = false;
|
|
64
|
+
}
|
|
58
65
|
});
|
|
59
66
|
}
|
|
60
|
-
_onClickButton() {
|
|
61
|
-
this.bsCollapse.toggle();
|
|
62
|
-
}
|
|
63
67
|
firstUpdated() {
|
|
64
|
-
this.
|
|
65
|
-
toggle: false
|
|
66
|
-
});
|
|
67
|
-
this.myCollapse.value.addEventListener("show.bs.collapse", () => {
|
|
68
|
-
this.expanded = true;
|
|
69
|
-
});
|
|
70
|
-
this.myCollapse.value.addEventListener("shown.bs.collapse", () => {
|
|
71
|
-
this.expanded = true;
|
|
72
|
-
});
|
|
73
|
-
this.myCollapse.value.addEventListener("hide.bs.collapse", () => {
|
|
68
|
+
if (this.breakpointReached && this.body) {
|
|
74
69
|
this.expanded = false;
|
|
75
|
-
|
|
76
|
-
|
|
70
|
+
this.body.hidden = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
handleSummaryClick() {
|
|
74
|
+
if (this.expanded) {
|
|
75
|
+
this.hide();
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.show();
|
|
79
|
+
}
|
|
80
|
+
this.header.focus();
|
|
81
|
+
}
|
|
82
|
+
async _animateToShow() {
|
|
83
|
+
const sgdsShow = this.emit("sgds-show", { cancelable: true });
|
|
84
|
+
if (sgdsShow.defaultPrevented) {
|
|
77
85
|
this.expanded = false;
|
|
78
|
-
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
await stopAnimations(this.body);
|
|
89
|
+
this.body.hidden = false;
|
|
90
|
+
const { keyframes, options } = getAnimation(this, "mainnav.show");
|
|
91
|
+
await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
|
|
92
|
+
this.body.style.height = "auto";
|
|
93
|
+
this.emit("sgds-after-show");
|
|
94
|
+
}
|
|
95
|
+
async _animateToHide() {
|
|
96
|
+
const slHide = this.emit("sgds-hide", { cancelable: true });
|
|
97
|
+
if (slHide.defaultPrevented) {
|
|
98
|
+
this.expanded = true;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
await stopAnimations(this.body);
|
|
102
|
+
const { keyframes, options } = getAnimation(this, "mainnav.hide");
|
|
103
|
+
await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
|
|
104
|
+
this.body.hidden = true;
|
|
105
|
+
this.body.style.height = "auto";
|
|
106
|
+
this.emit("sgds-after-hide");
|
|
107
|
+
}
|
|
108
|
+
async handleOpenChange() {
|
|
109
|
+
if (this.expanded) {
|
|
110
|
+
// Show
|
|
111
|
+
this._animateToShow();
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// Hide
|
|
115
|
+
this._animateToHide();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/** Shows the menu. For when mainnav is in the collapsed form */
|
|
119
|
+
async show() {
|
|
120
|
+
if (this.expanded) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
this.expanded = true;
|
|
124
|
+
return waitForEvent(this, "sgds-after-show");
|
|
125
|
+
}
|
|
126
|
+
/** Hide the menu. For when mainnav is in the collapsed form */
|
|
127
|
+
async hide() {
|
|
128
|
+
if (!this.expanded) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
this.expanded = false;
|
|
132
|
+
return waitForEvent(this, "sgds-after-hide");
|
|
79
133
|
}
|
|
80
134
|
// assigning name attribute to elements added in slot="end", to use wildcard css selector to assign styles only to *-mainnav-item
|
|
81
135
|
_handleSlotChange(e) {
|
|
@@ -86,7 +140,7 @@ class SgdsMainnav extends SgdsElement {
|
|
|
86
140
|
}
|
|
87
141
|
render() {
|
|
88
142
|
this.breakpointReached = window.innerWidth < SIZES[this.expand];
|
|
89
|
-
const collapseClass = "
|
|
143
|
+
const collapseClass = "navbar-body navbar-collapse order-2";
|
|
90
144
|
return html `
|
|
91
145
|
<nav
|
|
92
146
|
class="sgds navbar navbar-light
|
|
@@ -99,7 +153,7 @@ class SgdsMainnav extends SgdsElement {
|
|
|
99
153
|
<button
|
|
100
154
|
class="navbar-toggler order-1"
|
|
101
155
|
type="button"
|
|
102
|
-
@click=${
|
|
156
|
+
@click=${this.handleSummaryClick}
|
|
103
157
|
aria-controls="${this.collapseId}"
|
|
104
158
|
aria-expanded="${this.expanded}"
|
|
105
159
|
aria-label="Toggle navigation"
|
|
@@ -118,7 +172,7 @@ class SgdsMainnav extends SgdsElement {
|
|
|
118
172
|
/>
|
|
119
173
|
</svg>
|
|
120
174
|
</button>
|
|
121
|
-
<div class=${collapseClass}
|
|
175
|
+
<div class=${collapseClass} id=${this.collapseId}>
|
|
122
176
|
<ul class="navbar-nav">
|
|
123
177
|
<slot></slot>
|
|
124
178
|
<slot
|
|
@@ -143,6 +197,12 @@ class SgdsMainnav extends SgdsElement {
|
|
|
143
197
|
}
|
|
144
198
|
}
|
|
145
199
|
SgdsMainnav.styles = [SgdsElement.styles, css_248z];
|
|
200
|
+
__decorate([
|
|
201
|
+
query(".navbar-toggler")
|
|
202
|
+
], SgdsMainnav.prototype, "header", void 0);
|
|
203
|
+
__decorate([
|
|
204
|
+
query(".navbar-body")
|
|
205
|
+
], SgdsMainnav.prototype, "body", void 0);
|
|
146
206
|
__decorate([
|
|
147
207
|
property({ type: String })
|
|
148
208
|
], SgdsMainnav.prototype, "brandHref", void 0);
|
|
@@ -155,6 +215,23 @@ __decorate([
|
|
|
155
215
|
__decorate([
|
|
156
216
|
state()
|
|
157
217
|
], SgdsMainnav.prototype, "expanded", void 0);
|
|
218
|
+
__decorate([
|
|
219
|
+
watch("expanded", { waitUntilFirstUpdate: true })
|
|
220
|
+
], SgdsMainnav.prototype, "handleOpenChange", null);
|
|
221
|
+
setDefaultAnimation("mainnav.show", {
|
|
222
|
+
keyframes: [
|
|
223
|
+
{ height: "0", opacity: "0" },
|
|
224
|
+
{ height: "auto", opacity: "1" }
|
|
225
|
+
],
|
|
226
|
+
options: { duration: 200, easing: "ease-in-out" }
|
|
227
|
+
});
|
|
228
|
+
setDefaultAnimation("mainnav.hide", {
|
|
229
|
+
keyframes: [
|
|
230
|
+
{ height: "auto", opacity: "1" },
|
|
231
|
+
{ height: "0", opacity: "0" }
|
|
232
|
+
],
|
|
233
|
+
options: { duration: 200, easing: "ease-in-out" }
|
|
234
|
+
});
|
|
158
235
|
|
|
159
236
|
export { SgdsMainnav, SgdsMainnav as default };
|
|
160
237
|
//# sourceMappingURL=sgds-mainnav.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sgds-mainnav.js","sources":["../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import Collapse from \"bootstrap/js/src/collapse\";\nimport type { Collapse as BsCollapse } from \"bootstrap\";\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { Ref, createRef, ref } from \"lit/directives/ref.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { LG_BREAKPOINT, MD_BREAKPOINT, SM_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from \"../../utils/breakpoints\";\nimport genId from \"../../utils/generateId\";\nimport styles from \"./sgds-mainnav.scss\";\n\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\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 * @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\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 non-collapsible - Elements in this slot will not be collapsed\n *\n * @cssproperty --mainnav-background-color - Navbar's background color.\n * @cssproperty --mainnav-padding-x - left and right padding for browser width > 768px\n * @cssproperty --mainnav-padding-y - top and bottom padding for browser width > 768px\n * @cssproperty --mainnav-mobile-padding-x - left and right padding for browser width < 768px\n * @cssproperty --mainnav-mobile-padding-y - top and bottom padding for browser width < 768px\n * @cssproperty --mainnav-borderBottom-width - bottom border width\n * @cssproperty --mainnav-borderBottom-color - borderBottom width color\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n constructor() {\n super();\n window.addEventListener(\"resize\", () => {\n const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];\n if (newBreakpointReachedValue !== this.breakpointReached) {\n this.requestUpdate();\n }\n });\n }\n /** @internal */\n private myCollapse: Ref<HTMLElement> = createRef();\n /** @internal */\n private bsCollapse: BsCollapse = null;\n\n private _onClickButton() {\n this.bsCollapse.toggle();\n }\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\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 /** @internal */\n @state()\n breakpointReached = false;\n\n /** @internal */\n @state()\n expanded = false;\n\n firstUpdated() {\n this.bsCollapse = new Collapse(this.myCollapse.value, {\n toggle: false\n });\n this.myCollapse.value.addEventListener(\"show.bs.collapse\", () => {\n this.expanded = true;\n });\n this.myCollapse.value.addEventListener(\"shown.bs.collapse\", () => {\n this.expanded = true;\n });\n this.myCollapse.value.addEventListener(\"hide.bs.collapse\", () => {\n this.expanded = false;\n });\n this.myCollapse.value.addEventListener(\"hidden.bs.collapse\", () => {\n this.expanded = false;\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 _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n });\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n const collapseClass = \"collapse navbar-collapse order-2\";\n return html`\n <nav\n class=\"sgds navbar navbar-light\n ${this._expandClass()}\"\n >\n <a class=\"navbar-brand me-auto order-first\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <slot name=\"non-collapsible\" class=\"${this.breakpointReached ? \"order-1\" : \"order-last\"}\"></slot>\n <button\n class=\"navbar-toggler order-1\"\n type=\"button\"\n @click=${() => this._onClickButton()}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n aria-label=\"Toggle navigation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n fill=\"currentColor\"\n class=\"bi bi-list\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z\"\n />\n </svg>\n </button>\n <div class=${collapseClass} ${ref(this.myCollapse)} id=${this.collapseId}>\n <ul class=\"navbar-nav\">\n <slot></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </ul>\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}\n\nexport default SgdsMainnav;\n"],"names":["styles"],"mappings":";;;;;;;;;;;AAaA,MAAM,KAAK,GAAG;AACZ,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,EAAE,EAAE,aAAa;AACjB,IAAA,GAAG,EAAE,cAAc;AACnB,IAAA,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,CAAC,CAAC;CACX,CAAC;AAEF;;;;;;;;;;;;;;;AAeG;AACG,MAAO,WAAY,SAAQ,WAAW,CAAA;AAG1C,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;;QASF,IAAU,CAAA,UAAA,GAAqB,SAAS,EAAE,CAAC;;QAE3C,IAAU,CAAA,UAAA,GAAe,IAAI,CAAC;;QAQtC,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;AAEP,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;;QAIlD,IAAM,CAAA,MAAA,GAAsB,IAAI,CAAC;;QAIjC,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;;QAI1B,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAhCf,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AACrC,YAAA,MAAM,yBAAyB,GAAG,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzE,YAAA,IAAI,yBAAyB,KAAK,IAAI,CAAC,iBAAiB,EAAE;gBACxD,IAAI,CAAC,aAAa,EAAE,CAAC;aACtB;AACH,SAAC,CAAC,CAAC;KACJ;IAMO,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;KAC1B;IAoBD,YAAY,GAAA;QACV,IAAI,CAAC,UAAU,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACpD,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAK;AAC9D,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,MAAK;AAC/D,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAK;AAC9D,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,MAAK;AAChE,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,SAAC,CAAC,CAAC;KACJ;;AAED,IAAA,iBAAiB,CAAC,CAAQ,EAAA;AACxB,QAAA,MAAM,aAAa,GAAI,CAAC,CAAC,MAA0B,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAExF,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAG;AACxB,YAAA,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAClD,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,kCAAkC,CAAC;AACzD,QAAA,OAAO,IAAI,CAAA,CAAA;;;UAGL,IAAI,CAAC,YAAY,EAAE,CAAA;;AAE8B,yDAAA,EAAA,IAAI,CAAC,SAAS,CAAA;;;8CAG3B,IAAI,CAAC,iBAAiB,GAAG,SAAS,GAAG,YAAY,CAAA;;;;AAI5E,iBAAA,EAAA,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;AACnB,yBAAA,EAAA,IAAI,CAAC,UAAU,CAAA;AACf,yBAAA,EAAA,IAAI,CAAC,QAAQ,CAAA;;;;;;;;;;;;;;;;;qBAiBnB,aAAa,CAAA,CAAA,EAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA,IAAA,EAAO,IAAI,CAAC,UAAU,CAAA;;;;;sBAK1D,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;AAC3C,0BAAA,EAAA,IAAI,CAAC,iBAAiB,CAAA;;;;;KAK7C,CAAC;KACH;IACD,YAAY,GAAA;AACV,QAAA,QAAQ,IAAI,CAAC,MAAM;AACjB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,eAAe,CAAC;AACzB,YAAA,KAAK,OAAO;gBACV,MAAM;AACR,YAAA;AACE,gBAAA,OAAO,CAAiB,cAAA,EAAA,IAAI,CAAC,MAAM,EAAE,CAAC;SACzC;KACF;;AAxHM,WAAM,CAAA,MAAA,GAAG,CAAC,WAAW,CAAC,MAAM,EAAEA,QAAM,CAA9B,CAAgC;AAsB7C,UAAA,CAAA;AADC,IAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACZ,CAAA,EAAA,WAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAMf,UAAA,CAAA;AADC,IAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACM,CAAA,EAAA,WAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAIjC,UAAA,CAAA;AADC,IAAA,KAAK,EAAE;AACkB,CAAA,EAAA,WAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAI1B,UAAA,CAAA;AADC,IAAA,KAAK,EAAE;AACS,CAAA,EAAA,WAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"sgds-mainnav.js","sources":["../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import { html } from \"lit\";\nimport { property, query, 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 styles from \"./sgds-mainnav.scss\";\n\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\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 slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\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 non-collapsible - Elements in this slot will not be collapsed\n *\n * @cssproperty --mainnav-background-color - Navbar's background color.\n * @cssproperty --mainnav-padding-x - left and right padding for browser width > 768px\n * @cssproperty --mainnav-padding-y - top and bottom padding for browser width > 768px\n * @cssproperty --mainnav-mobile-padding-x - left and right padding for browser width < 768px\n * @cssproperty --mainnav-mobile-padding-y - top and bottom padding for browser width < 768px\n * @cssproperty --mainnav-borderBottom-width - bottom border width\n * @cssproperty --mainnav-borderBottom-color - borderBottom width color\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n /** @internal */\n @query(\".navbar-toggler\") header: HTMLElement;\n /** @internal */\n @query(\".navbar-body\") body: HTMLElement;\n\n constructor() {\n super();\n window.addEventListener(\"resize\", () => {\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 }\n });\n }\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\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 /** @internal */\n @state()\n breakpointReached = false;\n\n /** @internal */\n @state()\n expanded = false;\n firstUpdated() {\n if (this.breakpointReached && this.body) {\n this.expanded = false;\n this.body.hidden = true;\n }\n }\n private handleSummaryClick() {\n if (this.expanded) {\n this.hide();\n } else {\n this.show();\n }\n\n this.header.focus();\n }\n\n private async _animateToShow() {\n const sgdsShow = this.emit(\"sgds-show\", { cancelable: true });\n if (sgdsShow.defaultPrevented) {\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.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\n this.emit(\"sgds-after-hide\");\n }\n\n @watch(\"expanded\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.expanded) {\n // Show\n this._animateToShow();\n } else {\n // Hide\n this._animateToHide();\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.expanded = 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 this.expanded = false;\n return waitForEvent(this, \"sgds-after-hide\");\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 _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n });\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n const collapseClass = \"navbar-body navbar-collapse order-2\";\n return html`\n <nav\n class=\"sgds navbar navbar-light\n ${this._expandClass()}\"\n >\n <a class=\"navbar-brand me-auto order-first\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <slot name=\"non-collapsible\" class=\"${this.breakpointReached ? \"order-1\" : \"order-last\"}\"></slot>\n <button\n class=\"navbar-toggler order-1\"\n type=\"button\"\n @click=${this.handleSummaryClick}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n aria-label=\"Toggle navigation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n fill=\"currentColor\"\n class=\"bi bi-list\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z\"\n />\n </svg>\n </button>\n <div class=${collapseClass} id=${this.collapseId}>\n <ul class=\"navbar-nav\">\n <slot></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </ul>\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":["styles"],"mappings":"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"}
|