wj-elements 0.1.171 → 0.1.172
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/dist/packages/wje-button/button.element.d.ts +18 -3
- package/dist/packages/wje-format-digital/format-digital.element.d.ts +0 -4
- package/dist/packages/wje-menu-item/menu-item.element.d.ts +19 -0
- package/dist/wje-button.js +38 -9
- package/dist/wje-button.js.map +1 -1
- package/dist/wje-format-digital.js.map +1 -1
- package/dist/wje-menu-item.js +54 -4
- package/dist/wje-menu-item.js.map +1 -1
- package/dist/wje-routerx.js +1 -1
- package/dist/wje-routerx.js.map +1 -1
- package/package.json +1 -1
|
@@ -136,9 +136,24 @@ export default class Button extends WJElement {
|
|
|
136
136
|
* @returns {boolean} stopPropagation - The stop propagation state
|
|
137
137
|
*/
|
|
138
138
|
get stopPropagation(): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Sets the value of the custom event attribute.
|
|
141
|
+
* @param {string} value The value to be assigned to the custom event attribute.
|
|
142
|
+
*/
|
|
139
143
|
set customEvent(value: string);
|
|
140
|
-
|
|
141
|
-
|
|
144
|
+
/**
|
|
145
|
+
* Retrieves the value of the 'custom-event' attribute from the element.
|
|
146
|
+
* @returns {string | null} The value of the 'custom-event' attribute, or null if the attribute is not set.
|
|
147
|
+
*/
|
|
148
|
+
get customEvent(): string | null;
|
|
149
|
+
/**
|
|
150
|
+
* Retrieves a mapped object containing custom event parameters extracted from the element's attributes.
|
|
151
|
+
* Attributes considered are those that begin with 'custom-event-'.
|
|
152
|
+
* The mapped object's keys are derived by removing the 'custom-event-' prefix from the attribute names,
|
|
153
|
+
* and the values are the corresponding attribute values.
|
|
154
|
+
* @returns {object} An object containing key-value pairs of custom event parameters.
|
|
155
|
+
*/
|
|
156
|
+
get customEventParameters(): object;
|
|
142
157
|
/**
|
|
143
158
|
* @summary Callback function that is called when the custom element is associated with a form.
|
|
144
159
|
* This function sets the internal `_form` property to the associated form.
|
|
@@ -159,7 +174,6 @@ export default class Button extends WJElement {
|
|
|
159
174
|
draw(): object;
|
|
160
175
|
hasToggle: boolean;
|
|
161
176
|
slotToggle: HTMLSlotElement;
|
|
162
|
-
populateCustomEvent(): void;
|
|
163
177
|
/**
|
|
164
178
|
* After draw method for the Button element.
|
|
165
179
|
*/
|
|
@@ -174,4 +188,5 @@ export default class Button extends WJElement {
|
|
|
174
188
|
* Toggle states method for the Button element.
|
|
175
189
|
*/
|
|
176
190
|
toggleStates: () => void;
|
|
191
|
+
#private;
|
|
177
192
|
}
|
|
@@ -14,10 +14,6 @@ import { Localizer } from '../utils/localize.js';
|
|
|
14
14
|
* @csspart formatted - The part representing the formatted value.
|
|
15
15
|
* @csspart start - Slot for content before the formatted value.
|
|
16
16
|
* @csspart end - Slot for content after the formatted value.
|
|
17
|
-
* @cssproperty [--wje-format-digital-font-size=1rem] - The font size of the formatted digital value.
|
|
18
|
-
* @cssproperty [--wje-format-digital-color=var(--wje-text-color)] - The color of the formatted text.
|
|
19
|
-
* @cssproperty [--wje-format-digital-padding=.5rem] - The padding around the component.
|
|
20
|
-
* @cssproperty [--wje-format-digital-border-radius=var(--wje-border-radius-small)] - The border radius of the component.
|
|
21
17
|
* @tag wje-format-digital
|
|
22
18
|
*/
|
|
23
19
|
export default class FormatDigital extends WJElement {
|
|
@@ -64,6 +64,24 @@ export default class MenuItem extends WJElement {
|
|
|
64
64
|
* @returns {boolean} True if the closest parent has the collapse attribute, false otherwise.
|
|
65
65
|
*/
|
|
66
66
|
get collapse(): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Sets the value of the custom event attribute.
|
|
69
|
+
* @param {string} value The value to be assigned to the custom event attribute.
|
|
70
|
+
*/
|
|
71
|
+
set customEvent(value: string);
|
|
72
|
+
/**
|
|
73
|
+
* Retrieves the value of the 'custom-event' attribute from the element.
|
|
74
|
+
* @returns {string | null} The value of the 'custom-event' attribute, or null if the attribute is not set.
|
|
75
|
+
*/
|
|
76
|
+
get customEvent(): string | null;
|
|
77
|
+
/**
|
|
78
|
+
* Retrieves a mapped object containing custom event parameters extracted from the element's attributes.
|
|
79
|
+
* Attributes considered are those that begin with 'custom-event-'.
|
|
80
|
+
* The mapped object's keys are derived by removing the 'custom-event-' prefix from the attribute names,
|
|
81
|
+
* and the values are the corresponding attribute values.
|
|
82
|
+
* @returns {object} An object containing key-value pairs of custom event parameters.
|
|
83
|
+
*/
|
|
84
|
+
get customEventParameters(): object;
|
|
67
85
|
/**
|
|
68
86
|
* Removes the active attribute from the menu before drawing the MenuItem.
|
|
69
87
|
*/
|
|
@@ -136,4 +154,5 @@ export default class MenuItem extends WJElement {
|
|
|
136
154
|
* @returns {string} The concatenated and trimmed text content from the element's text nodes.
|
|
137
155
|
*/
|
|
138
156
|
getTextFromElement(element: HTMLElement): string;
|
|
157
|
+
#private;
|
|
139
158
|
}
|
package/dist/wje-button.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
+
var __typeError = (msg) => {
|
|
3
|
+
throw TypeError(msg);
|
|
4
|
+
};
|
|
2
5
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
6
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
7
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
8
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
9
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
10
|
+
var _Button_instances, populateCustomEvent_fn;
|
|
4
11
|
import { b as bindRouterLinks } from "./router-links-CJnOdbas.js";
|
|
5
12
|
import WJElement, { WjElementUtils, event } from "./wje-element.js";
|
|
6
13
|
import Icon from "./wje-icon.js";
|
|
@@ -15,6 +22,7 @@ class Button extends WJElement {
|
|
|
15
22
|
*/
|
|
16
23
|
constructor() {
|
|
17
24
|
super();
|
|
25
|
+
__privateAdd(this, _Button_instances);
|
|
18
26
|
/**
|
|
19
27
|
* Dependencies of the Button element.
|
|
20
28
|
* @type {object}
|
|
@@ -179,12 +187,27 @@ class Button extends WJElement {
|
|
|
179
187
|
get stopPropagation() {
|
|
180
188
|
return bool(this.getAttribute("stop-propagation"));
|
|
181
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Sets the value of the custom event attribute.
|
|
192
|
+
* @param {string} value The value to be assigned to the custom event attribute.
|
|
193
|
+
*/
|
|
182
194
|
set customEvent(value) {
|
|
183
195
|
this.setAttribute("custom-event", value);
|
|
184
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Retrieves the value of the 'custom-event' attribute from the element.
|
|
199
|
+
* @returns {string | null} The value of the 'custom-event' attribute, or null if the attribute is not set.
|
|
200
|
+
*/
|
|
185
201
|
get customEvent() {
|
|
186
202
|
return this.getAttribute("custom-event");
|
|
187
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Retrieves a mapped object containing custom event parameters extracted from the element's attributes.
|
|
206
|
+
* Attributes considered are those that begin with 'custom-event-'.
|
|
207
|
+
* The mapped object's keys are derived by removing the 'custom-event-' prefix from the attribute names,
|
|
208
|
+
* and the values are the corresponding attribute values.
|
|
209
|
+
* @returns {object} An object containing key-value pairs of custom event parameters.
|
|
210
|
+
*/
|
|
188
211
|
get customEventParameters() {
|
|
189
212
|
const attributes = Array.from(this.attributes).filter((attr) => attr.name.startsWith("custom-event-"));
|
|
190
213
|
return attributes.reduce((acc, attr) => {
|
|
@@ -309,13 +332,6 @@ class Button extends WJElement {
|
|
|
309
332
|
}
|
|
310
333
|
return fragment;
|
|
311
334
|
}
|
|
312
|
-
populateCustomEvent() {
|
|
313
|
-
let customEvent = this.customEvent;
|
|
314
|
-
let customEventParameters = this.customEventParameters;
|
|
315
|
-
this.dispatchEvent(
|
|
316
|
-
new CustomEvent(customEvent, { detail: customEventParameters, composed: true, bubbles: true })
|
|
317
|
-
);
|
|
318
|
-
}
|
|
319
335
|
/**
|
|
320
336
|
* After draw method for the Button element.
|
|
321
337
|
*/
|
|
@@ -333,7 +349,7 @@ class Button extends WJElement {
|
|
|
333
349
|
}
|
|
334
350
|
}
|
|
335
351
|
if (this.hasAttribute("custom-event")) {
|
|
336
|
-
event.addListener(this, "click", null, this
|
|
352
|
+
event.addListener(this, "click", null, __privateMethod(this, _Button_instances, populateCustomEvent_fn));
|
|
337
353
|
}
|
|
338
354
|
if (this.hasAttribute("dialog")) {
|
|
339
355
|
event.addListener(this, "click", null, this.eventDialogOpen);
|
|
@@ -364,13 +380,26 @@ class Button extends WJElement {
|
|
|
364
380
|
event.removeListener(this, "click", null, this.eventDialogOpen);
|
|
365
381
|
event.removeListener(this, "click", "wje-button:click", null);
|
|
366
382
|
event.removeListener(this, "click", "wje-button:toggle", this.toggleStates);
|
|
367
|
-
event.removeListener(this, "click", null, this
|
|
383
|
+
event.removeListener(this, "click", null, __privateMethod(this, _Button_instances, populateCustomEvent_fn));
|
|
368
384
|
event.removeListener(this, "click", "wje-button:submit", null);
|
|
369
385
|
event.removeListener(this, "click", "wje-button:reset", null);
|
|
370
386
|
this.removeEventListener("click", this.eventDialogOpen);
|
|
371
387
|
(_a = this.unbindRouterLinks) == null ? void 0 : _a.call(this);
|
|
372
388
|
}
|
|
373
389
|
}
|
|
390
|
+
_Button_instances = new WeakSet();
|
|
391
|
+
/**
|
|
392
|
+
* Dispatches a custom event with specified parameters.
|
|
393
|
+
* This method uses the `customEvent` and `customEventParameters` properties
|
|
394
|
+
* to create and dispatch a `CustomEvent`. The event is configured to be
|
|
395
|
+
* composed and bubbles up through the DOM.
|
|
396
|
+
* @returns {void} This method does not return a value.
|
|
397
|
+
*/
|
|
398
|
+
populateCustomEvent_fn = function() {
|
|
399
|
+
this.dispatchEvent(
|
|
400
|
+
new CustomEvent(this.customEvent, { detail: this.customEventParameters, composed: true, bubbles: true })
|
|
401
|
+
);
|
|
402
|
+
};
|
|
374
403
|
/**
|
|
375
404
|
* @summary A static property that indicates whether the custom element is form-associated or not.
|
|
376
405
|
* Form-associated custom elements are elements that can participate in form submission.
|
package/dist/wje-button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-button.js","sources":["../packages/utils/utils.js","../packages/wje-button/button.element.js","../packages/wje-button/button.js"],"sourcesContent":["export const bool = (v) => {\n return v === 'false' || v === 'null' || v === 'NaN' || v === 'undefined' || v === '0' ? false : !!v;\n};\n","import { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\n\nimport { bool } from '../utils/utils.js';\nimport { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport Icon from '../wje-icon/icon.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This class represents Button element, extending the WJElement class.\n * @documentation https://elements.webjet.sk/components/button\n * @status stable\n * @augments WJElement\n * @dependency wje-icon\n * @slot - The button main content.\n * @slot icon - The button icon.\n * @slot caret - The button caret.\n * @slot start - The button start slot.\n * @slot end - The button end slot.\n * @slot toggle - The button toggle slot.\n * @csspart native - The component's native wrapper.\n * @cssproperty [--wje-button-background-color=transparent] - Background color of the component;\n * @cssproperty [--wje-button-border-color=--wje-color-contrast-4] - Border color of the component;\n * @cssproperty [--wje-button-color=--wje-color-contrast-11] - Color of the component;\n * @cssproperty [--wje-button-border-radius=--wje-border-radius-medium] - Border radius of the component;\n * @cssproperty [--wje-button-border-width=1px] - Border width of the component;\n * @cssproperty [--wje-button-border-style=solid] - Border style of the component;\n * @cssproperty [--wje-button-border-color=--wje-color-contrast-1] - Border color of the component;\n * @cssproperty [--wje-button-margin-inline=0] - Margin inline of the component;\n */\n\nexport default class Button extends WJElement {\n /**\n * Button constructor method.\n * @class\n */\n constructor() {\n super();\n\n this.internals_ = this.attachInternals();\n }\n\n /**\n * Dependencies of the Button element.\n * @type {object}\n */\n dependencies = {\n 'wje-icon': Icon,\n };\n\n /**\n * Properties of the element Button.\n * @param value\n */\n set color(value) {\n this.setAttribute('color', value || 'default');\n }\n\n /**\n * Get color of the Button element.\n * @returns {string|string}\n */\n get color() {\n return this.getAttribute('color') || 'default';\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set caret(value) {\n this.setAttribute('caret', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {boolean}\n */\n get caret() {\n return this.hasAttribute('caret');\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set tooltip(value) {\n this.setAttribute('tooltip', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {boolean}\n */\n get tooltip() {\n return this.hasAttribute('tooltip');\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set dialog(value) {\n this.setAttribute('dialog', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {string|object}\n */\n get dialog() {\n return this.getAttribute('dialog');\n }\n\n /**\n * Set active state of the Button element.\n * @param {boolean} value The value to set\n */\n set active(value) {\n this.setAttribute('active', '');\n }\n\n /**\n * Get active state of the Button element.\n * @returns {boolean} active - The active state\n */\n get active() {\n return this.hasAttribute('active');\n }\n\n /**\n * Set disabled state of the Button element.\n * @param {boolean} value The value to set\n */\n set disabled(value) {\n this.removeAttribute('disabled');\n\n if (value) {\n this.setAttribute('disabled', '');\n }\n }\n\n /**\n * Get disabled state of the Button element.\n * @returns {boolean} disabled - The disabled state\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n /**\n * Set fill of the Button element.\n * @param {string} value The value to set\n */\n set fill(value) {\n this.setAttribute('fill', value);\n }\n\n /**\n * Get fill of the Button element.\n * @returns {string} fill - The fill value\n */\n get fill() {\n return this.getAttribute('fill') || 'solid';\n }\n\n /**\n * Set outline state of the Button element.\n * @param {boolean} value The value to set\n */\n set outline(value) {\n this.setAttribute('outline', '');\n }\n\n /**\n * Get outline state of the Button element.\n * @returns {boolean} outline - The outline state\n */\n get outline() {\n return this.hasAttribute('outline');\n }\n\n /**\n * Set stop propagation state of the Button element.\n * @param {boolean} value The value to set\n */\n set stopPropagation(value) {\n this.setAttribute('stop-propagation', bool(value));\n }\n\n /**\n * Get stop propagation state of the Button element.\n * @returns {boolean} stopPropagation - The stop propagation state\n */\n get stopPropagation() {\n return bool(this.getAttribute('stop-propagation'));\n }\n\n set customEvent(value) {\n this.setAttribute('custom-event', value);\n }\n\n get customEvent() {\n return this.getAttribute('custom-event');\n }\n\n get customEventParameters() {\n const attributes = Array.from(this.attributes).filter((attr) => attr.name.startsWith('custom-event-'));\n\n return attributes.reduce((acc, attr) => {\n const key = attr.name.replace('custom-event-', '');\n acc[key] = attr.value;\n\n return acc;\n }, {});\n }\n\n /**\n * Class name for the Button element\n * @type {string}\n */\n className = 'Button';\n\n /**\n * Get CSS stylesheet for the Button element.\n * @static\n * @returns {CSSStyleSheet} styles - The CSS stylesheet for the Button element.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Get observed attributes for the Button element.\n * @static\n * @returns {Array<string>} observedAttributes - The observed attributes array for the Button element.\n */\n static get observedAttributes() {\n return ['disabled'];\n }\n\n /**\n * @summary A static property that indicates whether the custom element is form-associated or not.\n * Form-associated custom elements are elements that can participate in form submission.\n * @type {boolean}\n */\n static formAssociated = true;\n\n /**\n * @summary Callback function that is called when the custom element is associated with a form.\n * This function sets the internal `_form` property to the associated form.\n * @param {HTMLFormElement} form The form the custom element is associated with.\n */\n formAssociatedCallback(form) {\n this._form = form;\n }\n\n /**\n * @summary Callback function that is called when the form-associated state of the custom element changes.\n * This function updates the 'disabled' attribute of the element based on the new state.\n * @param {boolean} disabled The new form-associated state.\n */\n formDisabledCallback(disabled) {\n if (disabled) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n /**\n * Setup attributes for the Button element.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Draw method for the Button element.\n * @returns {object} fragment - The document fragment containing the drawn element.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement(this.hasAttribute('href') ? 'a' : 'button');\n if (this.hasAttribute('href')) {\n native.setAttribute('href', this.getAttribute('href'));\n } else {\n if (this.type === 'submit') {\n native.setAttribute('type', 'submit');\n }\n }\n\n native.classList.add('native-button');\n native.setAttribute('part', 'native');\n\n this.classList.remove('wje-button-disabled');\n\n if (this.disabled) native.classList.add('wje-button-disabled');\n\n if (this.variant) native.classList.add('wje-button-' + this.variant);\n\n if (this.hasAttribute('round')) native.classList.add('wje-button-round');\n\n if (this.hasAttribute('circle')) native.classList.add('wje-button-circle');\n\n if (this.outline) native.classList.add('wje-outline');\n\n if (this.fill) native.classList.add('wje-button-' + this.fill);\n\n if (this.size) native.classList.add('wje-button-' + this.size);\n\n if (\n (this.querySelectorAll('[slot=caret]').length < 1 && this.hasAttribute('caret')) ||\n this.hasAttribute('only-caret')\n ) {\n let i = document.createElement('wje-icon');\n i.style.setProperty('--wje-icon-size', '14px');\n i.setAttribute('slot', 'caret');\n i.setAttribute('name', 'chevron-down');\n i.setAttribute('part', 'caret');\n\n this.appendChild(i);\n }\n\n if (this.active) {\n this.classList.add('wje-active');\n let i = document.createElement('wje-icon');\n i.setAttribute('name', 'check');\n\n this.appendChild(i);\n }\n\n native.classList.add('wje-color-' + this.color, 'wje-color');\n\n let span = document.createElement('span');\n span.setAttribute('part', 'inner');\n span.classList.add('button-inner');\n\n let slot = document.createElement('slot');\n slot.setAttribute('name', 'icon-only');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'start');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'end');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'caret');\n span.appendChild(slot);\n\n this.hasToggle = WjElementUtils.hasSlot(this, 'toggle');\n\n if (this.hasToggle) {\n this.slotToggle = document.createElement('slot');\n this.slotToggle.setAttribute('name', 'toggle');\n\n span.appendChild(this.slotToggle);\n }\n\n native.appendChild(span);\n\n if (this.tooltip) {\n let tooltip = document.createElement('wje-tooltip');\n tooltip.setAttribute('content', this.getAttribute('tooltip'));\n tooltip.setAttribute('placement', this.getAttribute('tooltip-placement') || 'top');\n tooltip.appendChild(native);\n\n fragment.appendChild(tooltip);\n } else {\n fragment.appendChild(native);\n }\n\n return fragment;\n }\n\n populateCustomEvent() {\n let customEvent = this.customEvent;\n let customEventParameters = this.customEventParameters;\n\n this.dispatchEvent(\n new CustomEvent(customEvent, { detail: customEventParameters, composed: true, bubbles: true })\n );\n }\n\n /**\n * After draw method for the Button element.\n */\n afterDraw() {\n if (this.hasAttribute('route')) {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n }\n\n // nastavenie toggle podla atributu, ak nie je nastaveny, tak sa zobrazi vzdy prvy element\n if (this.hasToggle) {\n if (this.toggle === 'off') {\n this.slotToggle.assignedNodes()[1].classList.add('show');\n this.setAttribute('value', 'off');\n } else {\n this.slotToggle.assignedNodes()[0].classList.add('show');\n this.setAttribute('value', 'on');\n }\n }\n\n if (this.hasAttribute('custom-event')) {\n event.addListener(this, 'click', null, this.populateCustomEvent);\n }\n\n if (this.hasAttribute('dialog')) {\n event.addListener(this, 'click', null, this.eventDialogOpen);\n } else {\n event.addListener(this, 'click', 'wje-button:click', null); // { stopPropagation: this.stopPropagation } - zrusene kvoli dropdown kde som nevedel odchytit event click\n }\n\n if (this.hasToggle)\n event.addListener(this, 'click', 'wje-button:toggle', this.toggleStates, {\n stopPropagation: this.stopPropagation,\n });\n\n if (this.type === 'submit') {\n event.addListener(this, 'click', 'wje-button:submit', () => {\n console.log('submit', this.internals_.form);\n event.dispatchCustomEvent(this.internals_.form, 'submit', {});\n });\n }\n\n if (this.type === 'reset') {\n event.addListener(this, 'click', 'wje-button:reset', () => {\n this.internals_.form.reset();\n });\n }\n }\n\n /**\n * Before disconnect method for the Button element.\n */\n beforeDisconnect() {\n // remove all events from the button\n event.removeListener(this, 'click', null, this.eventDialogOpen);\n event.removeListener(this, 'click', 'wje-button:click', null);\n event.removeListener(this, 'click', 'wje-button:toggle', this.toggleStates);\n event.removeListener(this, 'click', null, this.populateCustomEvent);\n event.removeListener(this, 'click', 'wje-button:submit', null);\n event.removeListener(this, 'click', 'wje-button:reset', null);\n\n this.removeEventListener('click', this.eventDialogOpen);\n this.unbindRouterLinks?.();\n }\n\n /**\n * Event dialog open method for the Button element.\n * @param {Event} e The event object\n */\n eventDialogOpen = (e) => {\n event.dispatchCustomEvent(this, this.dialog);\n };\n\n /**\n * Toggle states method for the Button element.\n */\n toggleStates = () => {\n const nodes = this.slotToggle.assignedNodes().filter((node) => node.nodeType === Node.ELEMENT_NODE);\n\n nodes.forEach((node, index) => {\n if (node.classList.contains('show')) {\n node.classList.remove('show');\n } else {\n node.classList.add('show');\n this.setAttribute('value', index === 0 ? 'on' : 'off');\n }\n });\n };\n}\n","import Button from './button.element.js';\n\nexport default Button;\n\nButton.define('wje-button', Button);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-button.js","sources":["../packages/utils/utils.js","../packages/wje-button/button.element.js","../packages/wje-button/button.js"],"sourcesContent":["export const bool = (v) => {\n return v === 'false' || v === 'null' || v === 'NaN' || v === 'undefined' || v === '0' ? false : !!v;\n};\n","import { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\n\nimport { bool } from '../utils/utils.js';\nimport { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport Icon from '../wje-icon/icon.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This class represents Button element, extending the WJElement class.\n * @documentation https://elements.webjet.sk/components/button\n * @status stable\n * @augments WJElement\n * @dependency wje-icon\n * @slot - The button main content.\n * @slot icon - The button icon.\n * @slot caret - The button caret.\n * @slot start - The button start slot.\n * @slot end - The button end slot.\n * @slot toggle - The button toggle slot.\n * @csspart native - The component's native wrapper.\n * @cssproperty [--wje-button-background-color=transparent] - Background color of the component;\n * @cssproperty [--wje-button-border-color=--wje-color-contrast-4] - Border color of the component;\n * @cssproperty [--wje-button-color=--wje-color-contrast-11] - Color of the component;\n * @cssproperty [--wje-button-border-radius=--wje-border-radius-medium] - Border radius of the component;\n * @cssproperty [--wje-button-border-width=1px] - Border width of the component;\n * @cssproperty [--wje-button-border-style=solid] - Border style of the component;\n * @cssproperty [--wje-button-border-color=--wje-color-contrast-1] - Border color of the component;\n * @cssproperty [--wje-button-margin-inline=0] - Margin inline of the component;\n */\n\nexport default class Button extends WJElement {\n /**\n * Button constructor method.\n * @class\n */\n constructor() {\n super();\n\n this.internals_ = this.attachInternals();\n }\n\n /**\n * Dependencies of the Button element.\n * @type {object}\n */\n dependencies = {\n 'wje-icon': Icon,\n };\n\n /**\n * Properties of the element Button.\n * @param value\n */\n set color(value) {\n this.setAttribute('color', value || 'default');\n }\n\n /**\n * Get color of the Button element.\n * @returns {string|string}\n */\n get color() {\n return this.getAttribute('color') || 'default';\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set caret(value) {\n this.setAttribute('caret', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {boolean}\n */\n get caret() {\n return this.hasAttribute('caret');\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set tooltip(value) {\n this.setAttribute('tooltip', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {boolean}\n */\n get tooltip() {\n return this.hasAttribute('tooltip');\n }\n\n /**\n * Set variant of the Button element.\n * @param value\n */\n set dialog(value) {\n this.setAttribute('dialog', value);\n }\n\n /**\n * Get variant of the Button element.\n * @returns {string|object}\n */\n get dialog() {\n return this.getAttribute('dialog');\n }\n\n /**\n * Set active state of the Button element.\n * @param {boolean} value The value to set\n */\n set active(value) {\n this.setAttribute('active', '');\n }\n\n /**\n * Get active state of the Button element.\n * @returns {boolean} active - The active state\n */\n get active() {\n return this.hasAttribute('active');\n }\n\n /**\n * Set disabled state of the Button element.\n * @param {boolean} value The value to set\n */\n set disabled(value) {\n this.removeAttribute('disabled');\n\n if (value) {\n this.setAttribute('disabled', '');\n }\n }\n\n /**\n * Get disabled state of the Button element.\n * @returns {boolean} disabled - The disabled state\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n /**\n * Set fill of the Button element.\n * @param {string} value The value to set\n */\n set fill(value) {\n this.setAttribute('fill', value);\n }\n\n /**\n * Get fill of the Button element.\n * @returns {string} fill - The fill value\n */\n get fill() {\n return this.getAttribute('fill') || 'solid';\n }\n\n /**\n * Set outline state of the Button element.\n * @param {boolean} value The value to set\n */\n set outline(value) {\n this.setAttribute('outline', '');\n }\n\n /**\n * Get outline state of the Button element.\n * @returns {boolean} outline - The outline state\n */\n get outline() {\n return this.hasAttribute('outline');\n }\n\n /**\n * Set stop propagation state of the Button element.\n * @param {boolean} value The value to set\n */\n set stopPropagation(value) {\n this.setAttribute('stop-propagation', bool(value));\n }\n\n /**\n * Get stop propagation state of the Button element.\n * @returns {boolean} stopPropagation - The stop propagation state\n */\n get stopPropagation() {\n return bool(this.getAttribute('stop-propagation'));\n }\n\n /**\n * Sets the value of the custom event attribute.\n * @param {string} value The value to be assigned to the custom event attribute.\n */\n set customEvent(value) {\n this.setAttribute('custom-event', value);\n }\n\n /**\n * Retrieves the value of the 'custom-event' attribute from the element.\n * @returns {string | null} The value of the 'custom-event' attribute, or null if the attribute is not set.\n */\n get customEvent() {\n return this.getAttribute('custom-event');\n }\n\n /**\n * Retrieves a mapped object containing custom event parameters extracted from the element's attributes.\n * Attributes considered are those that begin with 'custom-event-'.\n * The mapped object's keys are derived by removing the 'custom-event-' prefix from the attribute names,\n * and the values are the corresponding attribute values.\n * @returns {object} An object containing key-value pairs of custom event parameters.\n */\n get customEventParameters() {\n const attributes = Array.from(this.attributes).filter((attr) => attr.name.startsWith('custom-event-'));\n\n return attributes.reduce((acc, attr) => {\n const key = attr.name.replace('custom-event-', '');\n acc[key] = attr.value;\n\n return acc;\n }, {});\n }\n\n /**\n * Class name for the Button element\n * @type {string}\n */\n className = 'Button';\n\n /**\n * Get CSS stylesheet for the Button element.\n * @static\n * @returns {CSSStyleSheet} styles - The CSS stylesheet for the Button element.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Get observed attributes for the Button element.\n * @static\n * @returns {Array<string>} observedAttributes - The observed attributes array for the Button element.\n */\n static get observedAttributes() {\n return ['disabled'];\n }\n\n /**\n * @summary A static property that indicates whether the custom element is form-associated or not.\n * Form-associated custom elements are elements that can participate in form submission.\n * @type {boolean}\n */\n static formAssociated = true;\n\n /**\n * @summary Callback function that is called when the custom element is associated with a form.\n * This function sets the internal `_form` property to the associated form.\n * @param {HTMLFormElement} form The form the custom element is associated with.\n */\n formAssociatedCallback(form) {\n this._form = form;\n }\n\n /**\n * @summary Callback function that is called when the form-associated state of the custom element changes.\n * This function updates the 'disabled' attribute of the element based on the new state.\n * @param {boolean} disabled The new form-associated state.\n */\n formDisabledCallback(disabled) {\n if (disabled) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n /**\n * Setup attributes for the Button element.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Draw method for the Button element.\n * @returns {object} fragment - The document fragment containing the drawn element.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement(this.hasAttribute('href') ? 'a' : 'button');\n if (this.hasAttribute('href')) {\n native.setAttribute('href', this.getAttribute('href'));\n } else {\n if (this.type === 'submit') {\n native.setAttribute('type', 'submit');\n }\n }\n\n native.classList.add('native-button');\n native.setAttribute('part', 'native');\n\n this.classList.remove('wje-button-disabled');\n\n if (this.disabled) native.classList.add('wje-button-disabled');\n\n if (this.variant) native.classList.add('wje-button-' + this.variant);\n\n if (this.hasAttribute('round')) native.classList.add('wje-button-round');\n\n if (this.hasAttribute('circle')) native.classList.add('wje-button-circle');\n\n if (this.outline) native.classList.add('wje-outline');\n\n if (this.fill) native.classList.add('wje-button-' + this.fill);\n\n if (this.size) native.classList.add('wje-button-' + this.size);\n\n if (\n (this.querySelectorAll('[slot=caret]').length < 1 && this.hasAttribute('caret')) ||\n this.hasAttribute('only-caret')\n ) {\n let i = document.createElement('wje-icon');\n i.style.setProperty('--wje-icon-size', '14px');\n i.setAttribute('slot', 'caret');\n i.setAttribute('name', 'chevron-down');\n i.setAttribute('part', 'caret');\n\n this.appendChild(i);\n }\n\n if (this.active) {\n this.classList.add('wje-active');\n let i = document.createElement('wje-icon');\n i.setAttribute('name', 'check');\n\n this.appendChild(i);\n }\n\n native.classList.add('wje-color-' + this.color, 'wje-color');\n\n let span = document.createElement('span');\n span.setAttribute('part', 'inner');\n span.classList.add('button-inner');\n\n let slot = document.createElement('slot');\n slot.setAttribute('name', 'icon-only');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'start');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'end');\n span.appendChild(slot);\n\n slot = document.createElement('slot');\n slot.setAttribute('name', 'caret');\n span.appendChild(slot);\n\n this.hasToggle = WjElementUtils.hasSlot(this, 'toggle');\n\n if (this.hasToggle) {\n this.slotToggle = document.createElement('slot');\n this.slotToggle.setAttribute('name', 'toggle');\n\n span.appendChild(this.slotToggle);\n }\n\n native.appendChild(span);\n\n if (this.tooltip) {\n let tooltip = document.createElement('wje-tooltip');\n tooltip.setAttribute('content', this.getAttribute('tooltip'));\n tooltip.setAttribute('placement', this.getAttribute('tooltip-placement') || 'top');\n tooltip.appendChild(native);\n\n fragment.appendChild(tooltip);\n } else {\n fragment.appendChild(native);\n }\n\n return fragment;\n }\n\n /**\n * After draw method for the Button element.\n */\n afterDraw() {\n if (this.hasAttribute('route')) {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n }\n\n // nastavenie toggle podla atributu, ak nie je nastaveny, tak sa zobrazi vzdy prvy element\n if (this.hasToggle) {\n if (this.toggle === 'off') {\n this.slotToggle.assignedNodes()[1].classList.add('show');\n this.setAttribute('value', 'off');\n } else {\n this.slotToggle.assignedNodes()[0].classList.add('show');\n this.setAttribute('value', 'on');\n }\n }\n\n if (this.hasAttribute('custom-event')) {\n event.addListener(this, 'click', null, this.#populateCustomEvent);\n }\n\n if (this.hasAttribute('dialog')) {\n event.addListener(this, 'click', null, this.eventDialogOpen);\n } else {\n event.addListener(this, 'click', 'wje-button:click', null); // { stopPropagation: this.stopPropagation } - zrusene kvoli dropdown kde som nevedel odchytit event click\n }\n\n if (this.hasToggle)\n event.addListener(this, 'click', 'wje-button:toggle', this.toggleStates, {\n stopPropagation: this.stopPropagation,\n });\n\n if (this.type === 'submit') {\n event.addListener(this, 'click', 'wje-button:submit', () => {\n console.log('submit', this.internals_.form);\n event.dispatchCustomEvent(this.internals_.form, 'submit', {});\n });\n }\n\n if (this.type === 'reset') {\n event.addListener(this, 'click', 'wje-button:reset', () => {\n this.internals_.form.reset();\n });\n }\n }\n\n /**\n * Before disconnect method for the Button element.\n */\n beforeDisconnect() {\n // remove all events from the button\n event.removeListener(this, 'click', null, this.eventDialogOpen);\n event.removeListener(this, 'click', 'wje-button:click', null);\n event.removeListener(this, 'click', 'wje-button:toggle', this.toggleStates);\n event.removeListener(this, 'click', null, this.#populateCustomEvent);\n event.removeListener(this, 'click', 'wje-button:submit', null);\n event.removeListener(this, 'click', 'wje-button:reset', null);\n\n this.removeEventListener('click', this.eventDialogOpen);\n this.unbindRouterLinks?.();\n }\n\n /**\n * Event dialog open method for the Button element.\n * @param {Event} e The event object\n */\n eventDialogOpen = (e) => {\n event.dispatchCustomEvent(this, this.dialog);\n };\n\n /**\n * Toggle states method for the Button element.\n */\n toggleStates = () => {\n const nodes = this.slotToggle.assignedNodes().filter((node) => node.nodeType === Node.ELEMENT_NODE);\n\n nodes.forEach((node, index) => {\n if (node.classList.contains('show')) {\n node.classList.remove('show');\n } else {\n node.classList.add('show');\n this.setAttribute('value', index === 0 ? 'on' : 'off');\n }\n });\n }\n\n /**\n * Dispatches a custom event with specified parameters.\n * This method uses the `customEvent` and `customEventParameters` properties\n * to create and dispatch a `CustomEvent`. The event is configured to be\n * composed and bubbles up through the DOM.\n * @returns {void} This method does not return a value.\n */\n #populateCustomEvent() {\n this.dispatchEvent(\n new CustomEvent(this.customEvent, { detail: this.customEventParameters, composed: true, bubbles: true })\n );\n }\n}\n","import Button from './button.element.js';\n\nexport default Button;\n\nButton.define('wje-button', Button);\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-format-digital.js","sources":["../packages/wje-format-digital/format-digital.element.js","../packages/wje-format-digital/format-digital.js"],"sourcesContent":["import { Localizer } from '../utils/localize.js';\nimport { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This element formats and displays digital values such as file sizes or data transfer rates.\n * `FormatDigital` is a custom web component that represents a formatted digital value with units like\n * bytes or bits. It extends from `WJElement` and utilizes the `Localizer` class for locale-aware formatting.\n * @documentation https://elements.webjet.sk/components/format-digital\n * @status stable\n * @augments {WJElement}\n * @attribute {number} value - The numeric value to format (e.g., 1024 for 1 KB).\n * @attribute {string} unit - The unit of the value (`byte` or `bit`). Defaults to `byte`.\n * @attribute {string} unitDisplay - The display style of the unit (`short`, `long`, or `narrow`). Defaults to `short`.\n * @csspart native - The native part of the component.\n * @csspart formatted - The part representing the formatted value.\n * @csspart start - Slot for content before the formatted value.\n * @csspart end - Slot for content after the formatted value.\n * @
|
|
1
|
+
{"version":3,"file":"wje-format-digital.js","sources":["../packages/wje-format-digital/format-digital.element.js","../packages/wje-format-digital/format-digital.js"],"sourcesContent":["import { Localizer } from '../utils/localize.js';\nimport { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This element formats and displays digital values such as file sizes or data transfer rates.\n * `FormatDigital` is a custom web component that represents a formatted digital value with units like\n * bytes or bits. It extends from `WJElement` and utilizes the `Localizer` class for locale-aware formatting.\n * @documentation https://elements.webjet.sk/components/format-digital\n * @status stable\n * @augments {WJElement}\n * @attribute {number} value - The numeric value to format (e.g., 1024 for 1 KB).\n * @attribute {string} unit - The unit of the value (`byte` or `bit`). Defaults to `byte`.\n * @attribute {string} unitDisplay - The display style of the unit (`short`, `long`, or `narrow`). Defaults to `short`.\n * @csspart native - The native part of the component.\n * @csspart formatted - The part representing the formatted value.\n * @csspart start - Slot for content before the formatted value.\n * @csspart end - Slot for content after the formatted value.\n * @tag wje-format-digital\n */\n\nexport default class FormatDigital extends WJElement {\n /**\n * Creates an instance of FormatDigital.\n * Initializes the `Localizer` for locale-specific formatting.\n */\n constructor() {\n super();\n this.localizer = new Localizer(this);\n }\n\n /**\n * Sets the value of the digital format.\n * This value determines the size in bytes or bits to be displayed.\n * @param {number} value The value to set.\n */\n set value(value) {\n this.setAttribute('value', value);\n }\n\n /**\n * Returns the value of the digital format.\n * @returns {number} The current value of the component.\n */\n get value() {\n return +this.getAttribute('value');\n }\n\n /**\n * Sets the unit of the digital format.\n * Valid values are `bit` or `byte`.\n * @param {string} value The unit to set.\n */\n set unit(value) {\n this.removeAttribute('unit');\n if (value) {\n this.setAttribute('unit', value);\n }\n }\n\n /**\n * Returns the unit of the digital format.\n * Defaults to `byte` if no unit is set.\n * @returns {string} The current unit (`bit` or `byte`).\n */\n get unit() {\n return this.hasAttribute('unit') ? this.getAttribute('unit') : 'byte';\n }\n\n /**\n * Sets the unit display style for the digital format.\n * Valid values are `short`, `long`, or `narrow`.\n * @param {string} value The unit display style to set.\n */\n set unitDisplay(value) {\n this.removeAttribute('unit-display');\n if (value) {\n this.setAttribute('unit-display', value);\n }\n }\n\n /**\n * Returns the unit display style for the digital format.\n * Defaults to `short` if not set.\n * @returns {string} - The current unit display style.\n */\n get unitDisplay() {\n return this.hasAttribute('unit-display') ? this.getAttribute('unit-display') : 'short';\n }\n\n /**\n * The class name identifier for this component.\n * @type {string}\n */\n className = 'FormatDigital';\n\n /**\n * Returns the CSS styles for the component.\n * Encapsulated using shadow DOM.\n * @static\n * @returns {CSSStyleSheet} - The CSS styles for the component.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Returns the list of attributes to observe for changes.\n * Observes `value` and `unit-display` for re-rendering.\n * @static\n * @returns {Array<string>} - The attributes to observe.\n */\n static get observedAttributes() {\n return ['value', 'unit-display'];\n }\n\n /**\n * Sets up the attributes for the component.\n * Initializes the shadow DOM.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Prepares the component before rendering.\n * Computes the formatted value based on the input value and unit.\n */\n beforeDraw() {\n if (this.value < 0) return;\n const bitPrefixes = ['', 'kilo', 'mega', 'giga', 'tera'];\n const bytePrefixes = ['', 'kilo', 'mega', 'giga', 'tera', 'peta'];\n const prefix = this.unit === 'bit' ? bitPrefixes : bytePrefixes;\n const index = Math.max(0, Math.min(Math.floor(Math.log10(this.value) / 3), prefix.length - 1)) || 0;\n const unit = prefix[index] + this.unit;\n const value = parseFloat((this.value / Math.pow(1000, index)).toPrecision(3));\n\n this.formattedValue = this.localizer.formatNumber(value, {\n style: 'unit',\n unit: unit,\n unitDisplay: this.unitDisplay || 'short',\n });\n }\n\n /**\n * Renders the component and returns a document fragment.\n * The rendered structure includes a formatted value wrapped in a container\n * with slots for additional customization.\n * @returns {DocumentFragment} - The DOM structure for the component.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let element = document.createElement('div');\n element.setAttribute('part', 'native');\n element.classList.add('native-format-digital');\n\n let formatted = document.createElement('span');\n formatted.setAttribute('part', 'formatted');\n formatted.innerText = this.formattedValue;\n\n let start = document.createElement('slot');\n start.setAttribute('name', 'start');\n\n let end = document.createElement('slot');\n end.setAttribute('name', 'end');\n\n element.appendChild(start);\n element.appendChild(formatted);\n element.appendChild(end);\n\n fragment.appendChild(element);\n\n return fragment;\n }\n}\n","import FormatDigital from './format-digital.element.js';\n\nexport default FormatDigital;\n\nFormatDigital.define('wje-format-digital', FormatDigital);\n"],"names":[],"mappings":"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"}
|
package/dist/wje-menu-item.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
+
var __typeError = (msg) => {
|
|
3
|
+
throw TypeError(msg);
|
|
4
|
+
};
|
|
2
5
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
6
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
7
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
8
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
9
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
10
|
+
var _MenuItem_instances, populateCustomEvent_fn;
|
|
4
11
|
import { b as bindRouterLinks } from "./router-links-CJnOdbas.js";
|
|
5
12
|
import WJElement, { WjElementUtils, event } from "./wje-element.js";
|
|
6
13
|
const styles = `/*
|
|
@@ -188,6 +195,7 @@ class MenuItem extends WJElement {
|
|
|
188
195
|
*/
|
|
189
196
|
constructor() {
|
|
190
197
|
super();
|
|
198
|
+
__privateAdd(this, _MenuItem_instances);
|
|
191
199
|
__publicField(this, "className", "MenuItem");
|
|
192
200
|
__publicField(this, "mouseenterHandler", (e) => {
|
|
193
201
|
if (this.collapse || this.variant === "CONTEXT" && this.hasSubmenu) {
|
|
@@ -304,6 +312,35 @@ class MenuItem extends WJElement {
|
|
|
304
312
|
if (this.closest("[collapse]")) return true;
|
|
305
313
|
return false;
|
|
306
314
|
}
|
|
315
|
+
/**
|
|
316
|
+
* Sets the value of the custom event attribute.
|
|
317
|
+
* @param {string} value The value to be assigned to the custom event attribute.
|
|
318
|
+
*/
|
|
319
|
+
set customEvent(value) {
|
|
320
|
+
this.setAttribute("custom-event", value);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Retrieves the value of the 'custom-event' attribute from the element.
|
|
324
|
+
* @returns {string | null} The value of the 'custom-event' attribute, or null if the attribute is not set.
|
|
325
|
+
*/
|
|
326
|
+
get customEvent() {
|
|
327
|
+
return this.getAttribute("custom-event");
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Retrieves a mapped object containing custom event parameters extracted from the element's attributes.
|
|
331
|
+
* Attributes considered are those that begin with 'custom-event-'.
|
|
332
|
+
* The mapped object's keys are derived by removing the 'custom-event-' prefix from the attribute names,
|
|
333
|
+
* and the values are the corresponding attribute values.
|
|
334
|
+
* @returns {object} An object containing key-value pairs of custom event parameters.
|
|
335
|
+
*/
|
|
336
|
+
get customEventParameters() {
|
|
337
|
+
const attributes = Array.from(this.attributes).filter((attr) => attr.name.startsWith("custom-event-"));
|
|
338
|
+
return attributes.reduce((acc, attr) => {
|
|
339
|
+
const key = attr.name.replace("custom-event-", "");
|
|
340
|
+
acc[key] = attr.value;
|
|
341
|
+
return acc;
|
|
342
|
+
}, {});
|
|
343
|
+
}
|
|
307
344
|
/**
|
|
308
345
|
* Getter for cssStyleSheet.
|
|
309
346
|
* @returns {string} The styles imported from styles.css.
|
|
@@ -387,10 +424,7 @@ class MenuItem extends WJElement {
|
|
|
387
424
|
native.appendChild(end);
|
|
388
425
|
native.appendChild(submenuIcon);
|
|
389
426
|
let isAppend = false;
|
|
390
|
-
if (
|
|
391
|
-
/*(this.collapse && this.variant === "NAV" && this.hasSubmenu) || */
|
|
392
|
-
this.variant === "CONTEXT" && this.hasSubmenu
|
|
393
|
-
) {
|
|
427
|
+
if (this.variant === "CONTEXT" && this.hasSubmenu) {
|
|
394
428
|
native.setAttribute("slot", "anchor");
|
|
395
429
|
let popup = document.createElement("wje-popup");
|
|
396
430
|
popup.setAttribute("anchor", "anchor");
|
|
@@ -425,6 +459,9 @@ class MenuItem extends WJElement {
|
|
|
425
459
|
event.addListener(this, "mouseleave", null, this.shouldHideSubmenu);
|
|
426
460
|
event.addListener(this, "focusout", null, this.shouldHideSubmenu);
|
|
427
461
|
event.addListener(this, "click", null, this.clickHandler);
|
|
462
|
+
if (this.hasAttribute("custom-event")) {
|
|
463
|
+
event.addListener(this, "click", null, __privateMethod(this, _MenuItem_instances, populateCustomEvent_fn));
|
|
464
|
+
}
|
|
428
465
|
}
|
|
429
466
|
/**
|
|
430
467
|
* Creates a tooltip for the MenuItem when it is collapsed.
|
|
@@ -537,6 +574,19 @@ class MenuItem extends WJElement {
|
|
|
537
574
|
return text.trim();
|
|
538
575
|
}
|
|
539
576
|
}
|
|
577
|
+
_MenuItem_instances = new WeakSet();
|
|
578
|
+
/**
|
|
579
|
+
* Dispatches a custom event with specified parameters.
|
|
580
|
+
* This method uses the `customEvent` and `customEventParameters` properties
|
|
581
|
+
* to create and dispatch a `CustomEvent`. The event is configured to be
|
|
582
|
+
* composed and bubbles up through the DOM.
|
|
583
|
+
* @returns {void} This method does not return a value.
|
|
584
|
+
*/
|
|
585
|
+
populateCustomEvent_fn = function() {
|
|
586
|
+
this.dispatchEvent(
|
|
587
|
+
new CustomEvent(this.customEvent, { detail: this.customEventParameters, composed: true, bubbles: true })
|
|
588
|
+
);
|
|
589
|
+
};
|
|
540
590
|
MenuItem.define("wje-menu-item", MenuItem);
|
|
541
591
|
export {
|
|
542
592
|
MenuItem as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-menu-item.js","sources":["../packages/wje-menu-item/menu-item.element.js","../packages/wje-menu-item/menu-item.js"],"sourcesContent":["import { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\n\nimport { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `MenuItem` is a custom web component that represents a menu item.\n * @summary This element represents a menu item.\n * @documentation https://elements.webjet.sk/components/menu-item\n * @status stable\n * @augments {WJElement}\n * @csspart native - The native part of the menu item.\n * @csspart submenu - The submenu part of the menu item.\n * @slot - The default slot for the menu item.\n * @slot start - The slot for the start of the menu item.\n * @slot end - The slot for the end of the menu item.\n * @slot submenu - The slot for the submenu of the menu item.\n * @cssproperty [--wje-menu-item-color=var(--wje-color)] - Sets the text color of a menu item. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-background=transparent] - Defines the background color of a menu item. Default is `transparent`. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-color-hover=var(--wje-color-contrast-8)] - Specifies the text color of a menu item when hovered. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-background-hover=var(--wje-border-color)] - Sets the background color of a menu item when hovered. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-color-focus=var(--wje-color-contrast-8)] - Defines the text color of a menu item when focused. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-background-focus=var(--wje-border-color)] - Specifies the background color of a menu item when focused. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-color-active=var(--wje-color-contrast-8)] - Sets the text color of a menu item when active. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-background-active=var(--wje-border-color)] - Specifies the background color of a menu item when active. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-padding-top=.5rem] - Specifies the top padding inside a menu item. Accepts any valid CSS length value (e.g., `px`, `rem`).\n * @cssproperty [--wje-menu-item-padding-bottom=.5rem] - Specifies the bottom padding inside a menu item. Accepts any valid CSS length value (e.g., `px`, `rem`).\n * @cssproperty [--wje-menu-item-line-height=1.8rem] - Sets the line height for the text within a menu item. Accepts any valid CSS length value.\n * @cssproperty [--wje-menu-submenu-offset=0] - Determines the horizontal offset of a submenu relative to its parent. Accepts any valid CSS length value.\n * @cssproperty [--wje-menu-item-icon-visibility=hidden] - Controls the visibility of the icon in a menu item. Accepts `visible`, `hidden`, or `collapse`.\n * @cssproperty [--wje-menu-item-safe-triangle-cursor-x] - Specifies the x-coordinate of the cursor for the safe triangle area. Used for managing hover or focus transitions between menu items and submenus.\n * @cssproperty [--wje-menu-item-safe-triangle-cursor-y] - Specifies the y-coordinate of the cursor for the safe triangle area.\n * @cssproperty [--wje-menu-item-safe-triangle-submenu-start-x] - Defines the x-coordinate where the submenu's safe triangle starts. Helps prevent accidental submenu closing when navigating.\n * @cssproperty [--wje-menu-item-safe-triangle-submenu-start-y] - Defines the y-coordinate where the submenu's safe triangle starts.\n * @cssproperty [--wje-menu-item-safe-triangle-submenu-end-x] - Specifies the x-coordinate where the submenu's safe triangle ends.\n * @cssproperty [--wje-menu-item-safe-triangle-submenu-end-y] - Specifies the y-coordinate where the submenu's safe triangle ends.\n * @tag wje-menu-item\n */\nexport default class MenuItem extends WJElement {\n /**\n * Constructor for MenuItem class.\n * @class\n */\n constructor() {\n super();\n\n this._collapsible = false;\n }\n\n /**\n * Getter for placement attribute.\n * @returns {string} The placement attribute of the menu or \"right-start\" if it doesn't exist.\n */\n get placement() {\n let menu = this.querySelector('wje-menu');\n\n if (menu?.hasAttribute('placement')) {\n return menu.getAttribute('placement');\n }\n return 'right-start';\n }\n\n /**\n * Getter for offset attribute.\n * @returns {string} The offset attribute of the menu or \"0\" if it doesn't exist.\n */\n get offset() {\n let menu = this.querySelector('wje-menu');\n\n if (menu?.hasAttribute('offset')) {\n return menu.getAttribute('offset');\n }\n return '0';\n }\n\n /**\n * Getter for variant attribute.\n * @returns {string} The variant attribute of the menu or \"CONTEXT\" if it doesn't exist.\n */\n get variant() {\n let menu = this.querySelector('wje-menu');\n\n if (menu?.hasAttribute('variant') && !this.collapse) {\n return menu.getAttribute('variant').toUpperCase();\n }\n\n return 'CONTEXT';\n }\n\n /**\n * Getter for collapse attribute.\n * @returns {boolean} True if the closest parent has the collapse attribute, false otherwise.\n */\n get collapse() {\n if (this.closest('[collapse]')) return true;\n\n return false;\n }\n\n className = 'MenuItem';\n\n /**\n * Getter for cssStyleSheet.\n * @returns {string} The styles imported from styles.css.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for observedAttributes.\n * @returns {Array} An empty array as no attributes are being observed.\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the MenuItem element.\n */\n setupAttributes() {\n super.setupAttributes();\n this.isShadowRoot = 'open';\n this.setAttribute('active-class', 'open');\n }\n\n /**\n * Removes the active attribute from the menu before drawing the MenuItem.\n */\n beforeDraw() {\n this.querySelector('wje-menu')?.removeAttribute('active');\n }\n\n /**\n * Draws the MenuItem element and sets the variant and collapse attributes.\n * @returns {DocumentFragment} The fragment to be appended to the MenuItem.\n */\n draw() {\n this.hasSubmenu = WjElementUtils.hasSlot(this, 'submenu');\n\n let fragment = document.createDocumentFragment();\n\n this.setAttribute('tabindex', '0');\n\n this.classList.forEach((className) => {\n // Ak trieda začína na \"wje-menu-variant-\", odstráňte ju\n if (className.startsWith('wje-menu-variant-')) {\n this.classList.remove(className);\n }\n });\n\n this.classList.remove('collapse');\n this.classList.add('wje-menu-variant-' + this.variant.toLowerCase());\n\n if (!this.collapse) {\n this.querySelector('wje-menu')?.setAttribute('variant', this.variant.toLowerCase());\n } else if (this.parentElement?.hasAttribute('collapse')) {\n this.classList.add('collapse');\n }\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.setAttribute('id', 'anchor');\n native.classList.add('native-menu-item');\n\n // CHECKED - Icon\n let checkedIcon = document.createElement('span');\n checkedIcon.setAttribute('part', 'check');\n checkedIcon.classList.add('check-icon');\n checkedIcon.innerHTML = `<wje-icon name=\"check\"></wje-icon>`;\n\n if (this.hasAttribute('checked')) checkedIcon.classList.add('checked');\n else checkedIcon.classList.remove('checked');\n\n // SLOT - Start\n let start = document.createElement('slot');\n start.name = 'start';\n\n // SLOT\n let slot = document.createElement('slot');\n slot.classList.add('label');\n\n // SLOT - End\n let end = document.createElement('slot');\n end.setAttribute('part', 'end');\n end.name = 'end';\n\n // SLOT - Submenu\n let submenu = document.createElement('slot');\n submenu.setAttribute('part', 'submenu');\n submenu.name = 'submenu';\n\n // SUBMENU - Icon\n let submenuIconClass = this.collapse ? 'collapse' : 'expand';\n let submenuIcon = document.createElement('span');\n submenuIcon.setAttribute('part', 'submenu-icon');\n submenuIcon.classList.add('submenu-icon', submenuIconClass);\n submenuIcon.innerHTML = this.collapse\n ? `<wje-icon name=\"chevron-down\"></wje-icon>`\n : `<wje-icon name=\"chevron-right\"></wje-icon>`;\n\n if (this.hasSubmenu) native.classList.add('has-submenu');\n else native.classList.remove('has-submenu');\n\n native.appendChild(checkedIcon);\n native.appendChild(start);\n native.appendChild(slot);\n native.appendChild(end);\n native.appendChild(submenuIcon);\n\n let isAppend = false;\n // ak je variant typu CONTEXT zobrazime submenu ako popup\n if (\n /*(this.collapse && this.variant === \"NAV\" && this.hasSubmenu) || */ this.variant === 'CONTEXT' &&\n this.hasSubmenu\n ) {\n native.setAttribute('slot', 'anchor'); // pridame slot anchor pre popup\n\n let popup = document.createElement('wje-popup');\n popup.setAttribute('anchor', 'anchor');\n popup.setAttribute('placement', this.placement);\n popup.setAttribute('offset', this.offset);\n\n popup.appendChild(native);\n popup.appendChild(submenu);\n\n this.popup = popup;\n fragment.appendChild(popup);\n isAppend = true;\n }\n\n if (this.parentElement?.hasAttribute('collapse') && !this.hasSubmenu) {\n fragment.appendChild(this.collapseItem(native));\n } else if (!isAppend) {\n fragment.appendChild(native);\n }\n\n if ((!this.collapse && this.variant === 'NAV') || (this.variant === 'MEGAMENU' && this.hasSubmenu)) {\n fragment.appendChild(submenu);\n }\n\n this.native = native;\n this.submenu = submenu;\n\n return fragment;\n }\n\n /**\n * Adds event listeners after drawing the MenuItem.\n */\n afterDraw() {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n\n this.addEventListener('mousemove', this.dispatchMove);\n this.addEventListener('wje-popup:reposition', this.dispatchReposition);\n\n // Event na zobrazenie submenu\n event.addListener(this, 'mouseenter', null, this.mouseenterHandler);\n // Event na zrusenie zobrazenia submenu ked sa klikne mimo\n event.addListener(this, 'mouseleave', null, this.shouldHideSubmenu);\n // Event na zrusenie zobrazenia submenu ked sa klikne mimo\n event.addListener(this, 'focusout', null, this.shouldHideSubmenu);\n event.addListener(this, 'click', null, this.clickHandler);\n }\n\n mouseenterHandler = (e) => {\n if (this.collapse || (this.variant === 'CONTEXT' && this.hasSubmenu)) {\n if (this.hasAttribute('manual') || (this.variant === 'NAV' && this.collapse)) return;\n\n this.activateSubmenu(e);\n\n e.stopPropagation();\n\n this.showSubmenu();\n // this.focus();\n }\n };\n\n /**\n * Handles the click event on the MenuItem.\n * @param {object} e\n */\n clickHandler = (e) => {\n switch (this.variant) {\n case 'NAV':\n if (!this.collapse && this.hasSubmenu) {\n this.submenuToggle(e);\n this.hideSubmenu();\n e.stopPropagation();\n } else {\n event.dispatchCustomEvent(this, 'wje-menu-item:click');\n event.dispatchCustomEvent(this, this.dialog);\n }\n break;\n case 'CONTEXT':\n if (!this.collapse && this.hasSubmenu) {\n let submenuElements = this.submenu.assignedElements({ flatten: true })[0];\n if (submenuElements?.hasAttribute('active')) {\n this.shouldHideSubmenu(e);\n } else {\n this.activateSubmenu(e);\n this.showSubmenu(e);\n }\n } else {\n event.dispatchCustomEvent(this, 'wje-menu-item:click');\n event.dispatchCustomEvent(this, this.dialog);\n }\n\n break;\n }\n };\n\n /**\n * Checks if the submenu should be hidden based on the event.\n * @param {Event} e The event object.\n */\n shouldHideSubmenu = (e) => {\n if (this.collapse || (this.variant === 'CONTEXT' && this.hasSubmenu)) {\n if ((e.relatedTarget && this.contains(e.relatedTarget)) || (this.variant === 'NAV' && !this.collapse)) {\n return;\n }\n\n this.deactivateSubmenu();\n this.hideSubmenu();\n }\n };\n\n /**\n * Creates a tooltip for the MenuItem when it is collapsed.\n * @param {HTMLElement} native The native MenuItem element.\n * @returns {HTMLElement} The tooltip element.\n */\n collapseItem(native) {\n let tooltipStart = document.createElement('slot');\n tooltipStart.setAttribute('slot', 'start');\n tooltipStart.setAttribute('name', 'tooltip-start');\n\n let tooltipEnd = document.createElement('slot');\n tooltipEnd.setAttribute('slot', 'end');\n tooltipEnd.setAttribute('name', 'tooltip-end');\n\n let tooltip = document.createElement('wje-tooltip');\n tooltip.setAttribute('content', this.getTextFromElement(this));\n tooltip.setAttribute('placement', 'right');\n tooltip.setAttribute('offset', this.offset || '0');\n\n tooltip.appendChild(tooltipStart);\n tooltip.appendChild(tooltipEnd);\n tooltip.appendChild(native);\n\n return tooltip;\n }\n\n /**\n * Dispatches a mousemove event.\n */\n dispatchMove = (e) => {\n this.style.setProperty('--wje-menu-item-safe-triangle-cursor-x', `${e.clientX}px`);\n this.style.setProperty('--wje-menu-item-safe-triangle-cursor-y', `${e.clientY}px`);\n };\n\n /**\n * Dispatches a reposition event.\n */\n dispatchReposition = (e) => {\n // ak nemame submenu tak to ukoncime\n if (this.submenu.assignedNodes().length === 0) return;\n\n let submenu = this.submenu.assignedNodes()[0];\n const { left, top, width, height } = submenu.getBoundingClientRect();\n\n this.style.setProperty('--wje-menu-item-safe-triangle-submenu-start-x', `${left}px`);\n this.style.setProperty('--wje-menu-item-safe-triangle-submenu-start-y', `${top}px`);\n this.style.setProperty('--wje-menu-item-safe-triangle-submenu-end-x', `${left}px`);\n this.style.setProperty('--wje-menu-item-safe-triangle-submenu-end-y', `${top + height}px`);\n };\n\n /**\n * Shows the submenu of the MenuItem.\n */\n showSubmenu() {\n this.tabIndex = -1;\n if (this.hasSubmenu) {\n this.popup?.show();\n this.classList.add('expanded-submenu');\n this.native.classList.add('expanded-submenu');\n }\n }\n\n /**\n * Hides the submenu of the MenuItem.\n */\n hideSubmenu() {\n this.tabIndex = 0;\n if (this.hasSubmenu) {\n this.popup?.hide();\n this.classList.remove('expanded-submenu');\n this.native.classList.remove('expanded-submenu');\n }\n }\n\n /**\n * Toggles the active state of the submenu element.\n * If the submenu is not active, it sets the \"active\" attribute.\n * If the submenu is already active, it removes the \"active\" attribute.\n * @param {Event} e The event object.\n */\n submenuToggle(e) {\n if (this.hasSubmenu) {\n let submenuElements = this.submenu.assignedElements({ flatten: true })[0];\n if (!submenuElements.hasAttribute('active')) {\n submenuElements.setAttribute('active', '');\n } else {\n if (this === e.target) submenuElements.removeAttribute('active');\n }\n }\n }\n\n /**\n * Deactivates the submenu by removing the \"active\" attribute.\n */\n deactivateSubmenu() {\n if (this.hasSubmenu) {\n let submenuElements = this.submenu.assignedElements({ flatten: true })[0];\n if (submenuElements.hasAttribute('active')) {\n submenuElements.removeAttribute('active');\n }\n }\n }\n\n /**\n * Activates the submenu of the menu item.\n */\n activateSubmenu() {\n if (this.hasSubmenu) {\n let submenuElements = this.submenu.assignedElements({ flatten: true })[0];\n if (!submenuElements.hasAttribute('active')) {\n submenuElements.setAttribute('active', '');\n }\n }\n }\n\n /**\n * Gets the text from the element and returns it.\n */\n beforeDisconnect() {\n this.removeEventListener('mousemove', this.dispatchMove);\n this.removeEventListener('wje-popup:reposition', this.dispatchReposition);\n\n event.removeListener(this, 'mouseenter', null, this.mouseenterHandler);\n event.removeListener(this, 'mouseleave', null, this.shouldHideSubmenu);\n event.removeListener(this, 'focusout', null, this.shouldHideSubmenu);\n event.removeListener(this, 'click', null, this.clickHandler);\n\n this.unbindRouterLinks?.();\n }\n\n /**\n * Extracts and returns the concatenated text content from all text nodes within the specified element.\n * @param {HTMLElement} element The HTML element from which to extract text content.\n * @returns {string} The concatenated and trimmed text content from the element's text nodes.\n */\n getTextFromElement(element) {\n let text = '';\n for (let node of element.childNodes) {\n if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent;\n }\n }\n return text.trim();\n }\n}\n","import MenuItem from './menu-item.element.js';\n\nexport default MenuItem;\n\nMenuItem.define('wje-menu-item', MenuItem);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-menu-item.js","sources":["../packages/wje-menu-item/menu-item.element.js","../packages/wje-menu-item/menu-item.js"],"sourcesContent":["import { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\n\nimport { default as WJElement, event, WjElementUtils } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `MenuItem` is a custom web component that represents a menu item.\n * @summary This element represents a menu item.\n * @documentation https://elements.webjet.sk/components/menu-item\n * @status stable\n * @augments {WJElement}\n * @csspart native - The native part of the menu item.\n * @csspart submenu - The submenu part of the menu item.\n * @slot - The default slot for the menu item.\n * @slot start - The slot for the start of the menu item.\n * @slot end - The slot for the end of the menu item.\n * @slot submenu - The slot for the submenu of the menu item.\n * @cssproperty [--wje-menu-item-color=var(--wje-color)] - Sets the text color of a menu item. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-background=transparent] - Defines the background color of a menu item. Default is `transparent`. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-color-hover=var(--wje-color-contrast-8)] - Specifies the text color of a menu item when hovered. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-background-hover=var(--wje-border-color)] - Sets the background color of a menu item when hovered. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-color-focus=var(--wje-color-contrast-8)] - Defines the text color of a menu item when focused. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-background-focus=var(--wje-border-color)] - Specifies the background color of a menu item when focused. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-color-active=var(--wje-color-contrast-8)] - Sets the text color of a menu item when active. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-background-active=var(--wje-border-color)] - Specifies the background color of a menu item when active. Accepts any valid CSS color value.\n * @cssproperty [--wje-menu-item-padding-top=.5rem] - Specifies the top padding inside a menu item. Accepts any valid CSS length value (e.g., `px`, `rem`).\n * @cssproperty [--wje-menu-item-padding-bottom=.5rem] - Specifies the bottom padding inside a menu item. Accepts any valid CSS length value (e.g., `px`, `rem`).\n * @cssproperty [--wje-menu-item-line-height=1.8rem] - Sets the line height for the text within a menu item. Accepts any valid CSS length value.\n * @cssproperty [--wje-menu-submenu-offset=0] - Determines the horizontal offset of a submenu relative to its parent. Accepts any valid CSS length value.\n * @cssproperty [--wje-menu-item-icon-visibility=hidden] - Controls the visibility of the icon in a menu item. Accepts `visible`, `hidden`, or `collapse`.\n * @cssproperty [--wje-menu-item-safe-triangle-cursor-x] - Specifies the x-coordinate of the cursor for the safe triangle area. Used for managing hover or focus transitions between menu items and submenus.\n * @cssproperty [--wje-menu-item-safe-triangle-cursor-y] - Specifies the y-coordinate of the cursor for the safe triangle area.\n * @cssproperty [--wje-menu-item-safe-triangle-submenu-start-x] - Defines the x-coordinate where the submenu's safe triangle starts. Helps prevent accidental submenu closing when navigating.\n * @cssproperty [--wje-menu-item-safe-triangle-submenu-start-y] - Defines the y-coordinate where the submenu's safe triangle starts.\n * @cssproperty [--wje-menu-item-safe-triangle-submenu-end-x] - Specifies the x-coordinate where the submenu's safe triangle ends.\n * @cssproperty [--wje-menu-item-safe-triangle-submenu-end-y] - Specifies the y-coordinate where the submenu's safe triangle ends.\n * @tag wje-menu-item\n */\nexport default class MenuItem extends WJElement {\n /**\n * Constructor for MenuItem class.\n * @class\n */\n constructor() {\n super();\n\n this._collapsible = false;\n }\n\n /**\n * Getter for placement attribute.\n * @returns {string} The placement attribute of the menu or \"right-start\" if it doesn't exist.\n */\n get placement() {\n let menu = this.querySelector('wje-menu');\n\n if (menu?.hasAttribute('placement')) {\n return menu.getAttribute('placement');\n }\n return 'right-start';\n }\n\n /**\n * Getter for offset attribute.\n * @returns {string} The offset attribute of the menu or \"0\" if it doesn't exist.\n */\n get offset() {\n let menu = this.querySelector('wje-menu');\n\n if (menu?.hasAttribute('offset')) {\n return menu.getAttribute('offset');\n }\n return '0';\n }\n\n /**\n * Getter for variant attribute.\n * @returns {string} The variant attribute of the menu or \"CONTEXT\" if it doesn't exist.\n */\n get variant() {\n let menu = this.querySelector('wje-menu');\n\n if (menu?.hasAttribute('variant') && !this.collapse) {\n return menu.getAttribute('variant').toUpperCase();\n }\n\n return 'CONTEXT';\n }\n\n /**\n * Getter for collapse attribute.\n * @returns {boolean} True if the closest parent has the collapse attribute, false otherwise.\n */\n get collapse() {\n if (this.closest('[collapse]')) return true;\n\n return false;\n }\n\n /**\n * Sets the value of the custom event attribute.\n * @param {string} value The value to be assigned to the custom event attribute.\n */\n set customEvent(value) {\n this.setAttribute('custom-event', value);\n }\n\n /**\n * Retrieves the value of the 'custom-event' attribute from the element.\n * @returns {string | null} The value of the 'custom-event' attribute, or null if the attribute is not set.\n */\n get customEvent() {\n return this.getAttribute('custom-event');\n }\n\n /**\n * Retrieves a mapped object containing custom event parameters extracted from the element's attributes.\n * Attributes considered are those that begin with 'custom-event-'.\n * The mapped object's keys are derived by removing the 'custom-event-' prefix from the attribute names,\n * and the values are the corresponding attribute values.\n * @returns {object} An object containing key-value pairs of custom event parameters.\n */\n get customEventParameters() {\n const attributes = Array.from(this.attributes).filter((attr) => attr.name.startsWith('custom-event-'));\n\n return attributes.reduce((acc, attr) => {\n const key = attr.name.replace('custom-event-', '');\n acc[key] = attr.value;\n\n return acc;\n }, {});\n }\n\n className = 'MenuItem';\n\n /**\n * Getter for cssStyleSheet.\n * @returns {string} The styles imported from styles.css.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for observedAttributes.\n * @returns {Array} An empty array as no attributes are being observed.\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the MenuItem element.\n */\n setupAttributes() {\n super.setupAttributes();\n this.isShadowRoot = 'open';\n this.setAttribute('active-class', 'open');\n }\n\n /**\n * Removes the active attribute from the menu before drawing the MenuItem.\n */\n beforeDraw() {\n this.querySelector('wje-menu')?.removeAttribute('active');\n }\n\n /**\n * Draws the MenuItem element and sets the variant and collapse attributes.\n * @returns {DocumentFragment} The fragment to be appended to the MenuItem.\n */\n draw() {\n this.hasSubmenu = WjElementUtils.hasSlot(this, 'submenu');\n\n let fragment = document.createDocumentFragment();\n\n this.setAttribute('tabindex', '0');\n\n this.classList.forEach((className) => {\n // Ak trieda začína na \"wje-menu-variant-\", odstráňte ju\n if (className.startsWith('wje-menu-variant-')) {\n this.classList.remove(className);\n }\n });\n\n this.classList.remove('collapse');\n this.classList.add('wje-menu-variant-' + this.variant.toLowerCase());\n\n if (!this.collapse) {\n this.querySelector('wje-menu')?.setAttribute('variant', this.variant.toLowerCase());\n } else if (this.parentElement?.hasAttribute('collapse')) {\n this.classList.add('collapse');\n }\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.setAttribute('id', 'anchor');\n native.classList.add('native-menu-item');\n\n // CHECKED - Icon\n let checkedIcon = document.createElement('span');\n checkedIcon.setAttribute('part', 'check');\n checkedIcon.classList.add('check-icon');\n checkedIcon.innerHTML = `<wje-icon name=\"check\"></wje-icon>`;\n\n if (this.hasAttribute('checked')) checkedIcon.classList.add('checked');\n else checkedIcon.classList.remove('checked');\n\n // SLOT - Start\n let start = document.createElement('slot');\n start.name = 'start';\n\n // SLOT\n let slot = document.createElement('slot');\n slot.classList.add('label');\n\n // SLOT - End\n let end = document.createElement('slot');\n end.setAttribute('part', 'end');\n end.name = 'end';\n\n // SLOT - Submenu\n let submenu = document.createElement('slot');\n submenu.setAttribute('part', 'submenu');\n submenu.name = 'submenu';\n\n // SUBMENU - Icon\n let submenuIconClass = this.collapse ? 'collapse' : 'expand';\n let submenuIcon = document.createElement('span');\n submenuIcon.setAttribute('part', 'submenu-icon');\n submenuIcon.classList.add('submenu-icon', submenuIconClass);\n submenuIcon.innerHTML = this.collapse\n ? `<wje-icon name=\"chevron-down\"></wje-icon>`\n : `<wje-icon name=\"chevron-right\"></wje-icon>`;\n\n if (this.hasSubmenu) native.classList.add('has-submenu');\n else native.classList.remove('has-submenu');\n\n native.appendChild(checkedIcon);\n native.appendChild(start);\n native.appendChild(slot);\n native.appendChild(end);\n native.appendChild(submenuIcon);\n\n let isAppend = false;\n // ak je variant typu CONTEXT zobrazime submenu ako popup\n if (this.variant === 'CONTEXT' && this.hasSubmenu) {\n native.setAttribute('slot', 'anchor'); // pridame slot anchor pre popup\n\n let popup = document.createElement('wje-popup');\n popup.setAttribute('anchor', 'anchor');\n popup.setAttribute('placement', this.placement);\n popup.setAttribute('offset', this.offset);\n\n popup.appendChild(native);\n popup.appendChild(submenu);\n\n this.popup = popup;\n fragment.appendChild(popup);\n isAppend = true;\n }\n\n if (this.parentElement?.hasAttribute('collapse') && !this.hasSubmenu) {\n fragment.appendChild(this.collapseItem(native));\n } else if (!isAppend) {\n fragment.appendChild(native);\n }\n\n if ((!this.collapse && this.variant === 'NAV') || (this.variant === 'MEGAMENU' && this.hasSubmenu)) {\n fragment.appendChild(submenu);\n }\n\n this.native = native;\n this.submenu = submenu;\n\n return fragment;\n }\n\n /**\n * Adds event listeners after drawing the MenuItem.\n */\n afterDraw() {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n\n this.addEventListener('mousemove', this.dispatchMove);\n this.addEventListener('wje-popup:reposition', this.dispatchReposition);\n\n // Event na zobrazenie submenu\n event.addListener(this, 'mouseenter', null, this.mouseenterHandler);\n // Event na zrusenie zobrazenia submenu ked sa klikne mimo\n event.addListener(this, 'mouseleave', null, this.shouldHideSubmenu);\n // Event na zrusenie zobrazenia submenu ked sa klikne mimo\n event.addListener(this, 'focusout', null, this.shouldHideSubmenu);\n event.addListener(this, 'click', null, this.clickHandler);\n\n if (this.hasAttribute('custom-event')) {\n event.addListener(this, 'click', null, this.#populateCustomEvent);\n }\n }\n\n mouseenterHandler = (e) => {\n if (this.collapse || (this.variant === 'CONTEXT' && this.hasSubmenu)) {\n if (this.hasAttribute('manual') || (this.variant === 'NAV' && this.collapse)) return;\n\n this.activateSubmenu(e);\n\n e.stopPropagation();\n\n this.showSubmenu();\n // this.focus();\n }\n };\n\n /**\n * Handles the click event on the MenuItem.\n * @param {object} e\n */\n clickHandler = (e) => {\n switch (this.variant) {\n case 'NAV':\n if (!this.collapse && this.hasSubmenu) {\n this.submenuToggle(e);\n this.hideSubmenu();\n e.stopPropagation();\n } else {\n event.dispatchCustomEvent(this, 'wje-menu-item:click');\n event.dispatchCustomEvent(this, this.dialog);\n }\n break;\n case 'CONTEXT':\n if (!this.collapse && this.hasSubmenu) {\n let submenuElements = this.submenu.assignedElements({ flatten: true })[0];\n if (submenuElements?.hasAttribute('active')) {\n this.shouldHideSubmenu(e);\n } else {\n this.activateSubmenu(e);\n this.showSubmenu(e);\n }\n } else {\n event.dispatchCustomEvent(this, 'wje-menu-item:click');\n event.dispatchCustomEvent(this, this.dialog);\n }\n\n break;\n }\n };\n\n /**\n * Checks if the submenu should be hidden based on the event.\n * @param {Event} e The event object.\n */\n shouldHideSubmenu = (e) => {\n if (this.collapse || (this.variant === 'CONTEXT' && this.hasSubmenu)) {\n if ((e.relatedTarget && this.contains(e.relatedTarget)) || (this.variant === 'NAV' && !this.collapse)) {\n return;\n }\n\n this.deactivateSubmenu();\n this.hideSubmenu();\n }\n };\n\n /**\n * Creates a tooltip for the MenuItem when it is collapsed.\n * @param {HTMLElement} native The native MenuItem element.\n * @returns {HTMLElement} The tooltip element.\n */\n collapseItem(native) {\n let tooltipStart = document.createElement('slot');\n tooltipStart.setAttribute('slot', 'start');\n tooltipStart.setAttribute('name', 'tooltip-start');\n\n let tooltipEnd = document.createElement('slot');\n tooltipEnd.setAttribute('slot', 'end');\n tooltipEnd.setAttribute('name', 'tooltip-end');\n\n let tooltip = document.createElement('wje-tooltip');\n tooltip.setAttribute('content', this.getTextFromElement(this));\n tooltip.setAttribute('placement', 'right');\n tooltip.setAttribute('offset', this.offset || '0');\n\n tooltip.appendChild(tooltipStart);\n tooltip.appendChild(tooltipEnd);\n tooltip.appendChild(native);\n\n return tooltip;\n }\n\n /**\n * Dispatches a mousemove event.\n */\n dispatchMove = (e) => {\n this.style.setProperty('--wje-menu-item-safe-triangle-cursor-x', `${e.clientX}px`);\n this.style.setProperty('--wje-menu-item-safe-triangle-cursor-y', `${e.clientY}px`);\n };\n\n /**\n * Dispatches a reposition event.\n */\n dispatchReposition = (e) => {\n // ak nemame submenu tak to ukoncime\n if (this.submenu.assignedNodes().length === 0) return;\n\n let submenu = this.submenu.assignedNodes()[0];\n const { left, top, width, height } = submenu.getBoundingClientRect();\n\n this.style.setProperty('--wje-menu-item-safe-triangle-submenu-start-x', `${left}px`);\n this.style.setProperty('--wje-menu-item-safe-triangle-submenu-start-y', `${top}px`);\n this.style.setProperty('--wje-menu-item-safe-triangle-submenu-end-x', `${left}px`);\n this.style.setProperty('--wje-menu-item-safe-triangle-submenu-end-y', `${top + height}px`);\n };\n\n /**\n * Shows the submenu of the MenuItem.\n */\n showSubmenu() {\n this.tabIndex = -1;\n if (this.hasSubmenu) {\n this.popup?.show();\n this.classList.add('expanded-submenu');\n this.native.classList.add('expanded-submenu');\n }\n }\n\n /**\n * Hides the submenu of the MenuItem.\n */\n hideSubmenu() {\n this.tabIndex = 0;\n if (this.hasSubmenu) {\n this.popup?.hide();\n this.classList.remove('expanded-submenu');\n this.native.classList.remove('expanded-submenu');\n }\n }\n\n /**\n * Toggles the active state of the submenu element.\n * If the submenu is not active, it sets the \"active\" attribute.\n * If the submenu is already active, it removes the \"active\" attribute.\n * @param {Event} e The event object.\n */\n submenuToggle(e) {\n if (this.hasSubmenu) {\n let submenuElements = this.submenu.assignedElements({ flatten: true })[0];\n if (!submenuElements.hasAttribute('active')) {\n submenuElements.setAttribute('active', '');\n } else {\n if (this === e.target) submenuElements.removeAttribute('active');\n }\n }\n }\n\n /**\n * Deactivates the submenu by removing the \"active\" attribute.\n */\n deactivateSubmenu() {\n if (this.hasSubmenu) {\n let submenuElements = this.submenu.assignedElements({ flatten: true })[0];\n if (submenuElements.hasAttribute('active')) {\n submenuElements.removeAttribute('active');\n }\n }\n }\n\n /**\n * Activates the submenu of the menu item.\n */\n activateSubmenu() {\n if (this.hasSubmenu) {\n let submenuElements = this.submenu.assignedElements({ flatten: true })[0];\n if (!submenuElements.hasAttribute('active')) {\n submenuElements.setAttribute('active', '');\n }\n }\n }\n\n /**\n * Gets the text from the element and returns it.\n */\n beforeDisconnect() {\n this.removeEventListener('mousemove', this.dispatchMove);\n this.removeEventListener('wje-popup:reposition', this.dispatchReposition);\n\n event.removeListener(this, 'mouseenter', null, this.mouseenterHandler);\n event.removeListener(this, 'mouseleave', null, this.shouldHideSubmenu);\n event.removeListener(this, 'focusout', null, this.shouldHideSubmenu);\n event.removeListener(this, 'click', null, this.clickHandler);\n\n this.unbindRouterLinks?.();\n }\n\n /**\n * Extracts and returns the concatenated text content from all text nodes within the specified element.\n * @param {HTMLElement} element The HTML element from which to extract text content.\n * @returns {string} The concatenated and trimmed text content from the element's text nodes.\n */\n getTextFromElement(element) {\n let text = '';\n for (let node of element.childNodes) {\n if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent;\n }\n }\n return text.trim();\n }\n\n /**\n * Dispatches a custom event with specified parameters.\n * This method uses the `customEvent` and `customEventParameters` properties\n * to create and dispatch a `CustomEvent`. The event is configured to be\n * composed and bubbles up through the DOM.\n * @returns {void} This method does not return a value.\n */\n #populateCustomEvent() {\n this.dispatchEvent(\n new CustomEvent(this.customEvent, { detail: this.customEventParameters, composed: true, bubbles: true })\n );\n }\n}\n","import MenuItem from './menu-item.element.js';\n\nexport default MenuItem;\n\nMenuItem.define('wje-menu-item', MenuItem);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCe,MAAM,iBAAiB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAK5C,cAAc;AACV,UAAO;AANA;AA+FX,qCAAY;AAuKZ,6CAAoB,CAAC,MAAM;AACvB,UAAI,KAAK,YAAa,KAAK,YAAY,aAAa,KAAK,YAAa;AAClE,YAAI,KAAK,aAAa,QAAQ,KAAM,KAAK,YAAY,SAAS,KAAK,SAAW;AAE9E,aAAK,gBAAgB,CAAC;AAEtB,UAAE,gBAAiB;AAEnB,aAAK,YAAa;AAAA,MAE9B;AAAA,IACK;AAMD;AAAA;AAAA;AAAA;AAAA,wCAAe,CAAC,MAAM;AAClB,cAAQ,KAAK,SAAO;AAAA,QAChB,KAAK;AACD,cAAI,CAAC,KAAK,YAAY,KAAK,YAAY;AACnC,iBAAK,cAAc,CAAC;AACpB,iBAAK,YAAa;AAClB,cAAE,gBAAiB;AAAA,UACvC,OAAuB;AACH,kBAAM,oBAAoB,MAAM,qBAAqB;AACrD,kBAAM,oBAAoB,MAAM,KAAK,MAAM;AAAA,UAC/D;AACgB;AAAA,QACJ,KAAK;AACD,cAAI,CAAC,KAAK,YAAY,KAAK,YAAY;AACnC,gBAAI,kBAAkB,KAAK,QAAQ,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;AACxE,gBAAI,mDAAiB,aAAa,WAAW;AACzC,mBAAK,kBAAkB,CAAC;AAAA,YAChD,OAA2B;AACH,mBAAK,gBAAgB,CAAC;AACtB,mBAAK,YAAY,CAAC;AAAA,YAC1C;AAAA,UACA,OAAuB;AACH,kBAAM,oBAAoB,MAAM,qBAAqB;AACrD,kBAAM,oBAAoB,MAAM,KAAK,MAAM;AAAA,UAC/D;AAEgB;AAAA,MAChB;AAAA,IACK;AAMD;AAAA;AAAA;AAAA;AAAA,6CAAoB,CAAC,MAAM;AACvB,UAAI,KAAK,YAAa,KAAK,YAAY,aAAa,KAAK,YAAa;AAClE,YAAK,EAAE,iBAAiB,KAAK,SAAS,EAAE,aAAa,KAAO,KAAK,YAAY,SAAS,CAAC,KAAK,UAAW;AACnG;AAAA,QAChB;AAEY,aAAK,kBAAmB;AACxB,aAAK,YAAa;AAAA,MAC9B;AAAA,IACK;AA+BD;AAAA;AAAA;AAAA,wCAAe,CAAC,MAAM;AAClB,WAAK,MAAM,YAAY,0CAA0C,GAAG,EAAE,OAAO,IAAI;AACjF,WAAK,MAAM,YAAY,0CAA0C,GAAG,EAAE,OAAO,IAAI;AAAA,IACpF;AAKD;AAAA;AAAA;AAAA,8CAAqB,CAAC,MAAM;AAExB,UAAI,KAAK,QAAQ,cAAa,EAAG,WAAW,EAAG;AAE/C,UAAI,UAAU,KAAK,QAAQ,cAAa,EAAG,CAAC;AAC5C,YAAM,EAAE,MAAM,KAAK,OAAO,OAAQ,IAAG,QAAQ,sBAAuB;AAEpE,WAAK,MAAM,YAAY,iDAAiD,GAAG,IAAI,IAAI;AACnF,WAAK,MAAM,YAAY,iDAAiD,GAAG,GAAG,IAAI;AAClF,WAAK,MAAM,YAAY,+CAA+C,GAAG,IAAI,IAAI;AACjF,WAAK,MAAM,YAAY,+CAA+C,GAAG,MAAM,MAAM,IAAI;AAAA,IAC5F;AA5WG,SAAK,eAAe;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,YAAY;AACZ,QAAI,OAAO,KAAK,cAAc,UAAU;AAExC,QAAI,6BAAM,aAAa,cAAc;AACjC,aAAO,KAAK,aAAa,WAAW;AAAA,IAChD;AACQ,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,SAAS;AACT,QAAI,OAAO,KAAK,cAAc,UAAU;AAExC,QAAI,6BAAM,aAAa,WAAW;AAC9B,aAAO,KAAK,aAAa,QAAQ;AAAA,IAC7C;AACQ,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,UAAU;AACV,QAAI,OAAO,KAAK,cAAc,UAAU;AAExC,SAAI,6BAAM,aAAa,eAAc,CAAC,KAAK,UAAU;AACjD,aAAO,KAAK,aAAa,SAAS,EAAE,YAAa;AAAA,IAC7D;AAEQ,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,WAAW;AACX,QAAI,KAAK,QAAQ,YAAY,EAAG,QAAO;AAEvC,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,YAAY,OAAO;AACnB,SAAK,aAAa,gBAAgB,KAAK;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,IAAI,cAAc;AACd,WAAO,KAAK,aAAa,cAAc;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASI,IAAI,wBAAwB;AACxB,UAAM,aAAa,MAAM,KAAK,KAAK,UAAU,EAAE,OAAO,CAAC,SAAS,KAAK,KAAK,WAAW,eAAe,CAAC;AAErG,WAAO,WAAW,OAAO,CAAC,KAAK,SAAS;AACpC,YAAM,MAAM,KAAK,KAAK,QAAQ,iBAAiB,EAAE;AACjD,UAAI,GAAG,IAAI,KAAK;AAEhB,aAAO;AAAA,IACV,GAAE,EAAE;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAQI,WAAW,gBAAgB;AACvB,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,WAAW,qBAAqB;AAC5B,WAAO,CAAE;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKI,kBAAkB;AACd,UAAM,gBAAiB;AACvB,SAAK,eAAe;AACpB,SAAK,aAAa,gBAAgB,MAAM;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKI,aAAa;;AACT,eAAK,cAAc,UAAU,MAA7B,mBAAgC,gBAAgB;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,OAAO;;AACH,SAAK,aAAa,eAAe,QAAQ,MAAM,SAAS;AAExD,QAAI,WAAW,SAAS,uBAAwB;AAEhD,SAAK,aAAa,YAAY,GAAG;AAEjC,SAAK,UAAU,QAAQ,CAAC,cAAc;AAElC,UAAI,UAAU,WAAW,mBAAmB,GAAG;AAC3C,aAAK,UAAU,OAAO,SAAS;AAAA,MAC/C;AAAA,IACA,CAAS;AAED,SAAK,UAAU,OAAO,UAAU;AAChC,SAAK,UAAU,IAAI,sBAAsB,KAAK,QAAQ,aAAa;AAEnE,QAAI,CAAC,KAAK,UAAU;AAChB,iBAAK,cAAc,UAAU,MAA7B,mBAAgC,aAAa,WAAW,KAAK,QAAQ;IACxE,YAAU,UAAK,kBAAL,mBAAoB,aAAa,aAAa;AACrD,WAAK,UAAU,IAAI,UAAU;AAAA,IACzC;AAEQ,QAAI,SAAS,SAAS,cAAc,KAAK;AACzC,WAAO,aAAa,QAAQ,QAAQ;AACpC,WAAO,aAAa,MAAM,QAAQ;AAClC,WAAO,UAAU,IAAI,kBAAkB;AAGvC,QAAI,cAAc,SAAS,cAAc,MAAM;AAC/C,gBAAY,aAAa,QAAQ,OAAO;AACxC,gBAAY,UAAU,IAAI,YAAY;AACtC,gBAAY,YAAY;AAExB,QAAI,KAAK,aAAa,SAAS,EAAG,aAAY,UAAU,IAAI,SAAS;AAAA,QAChE,aAAY,UAAU,OAAO,SAAS;AAG3C,QAAI,QAAQ,SAAS,cAAc,MAAM;AACzC,UAAM,OAAO;AAGb,QAAI,OAAO,SAAS,cAAc,MAAM;AACxC,SAAK,UAAU,IAAI,OAAO;AAG1B,QAAI,MAAM,SAAS,cAAc,MAAM;AACvC,QAAI,aAAa,QAAQ,KAAK;AAC9B,QAAI,OAAO;AAGX,QAAI,UAAU,SAAS,cAAc,MAAM;AAC3C,YAAQ,aAAa,QAAQ,SAAS;AACtC,YAAQ,OAAO;AAGf,QAAI,mBAAmB,KAAK,WAAW,aAAa;AACpD,QAAI,cAAc,SAAS,cAAc,MAAM;AAC/C,gBAAY,aAAa,QAAQ,cAAc;AAC/C,gBAAY,UAAU,IAAI,gBAAgB,gBAAgB;AAC1D,gBAAY,YAAY,KAAK,WACvB,8CACA;AAEN,QAAI,KAAK,WAAY,QAAO,UAAU,IAAI,aAAa;AAAA,QAClD,QAAO,UAAU,OAAO,aAAa;AAE1C,WAAO,YAAY,WAAW;AAC9B,WAAO,YAAY,KAAK;AACxB,WAAO,YAAY,IAAI;AACvB,WAAO,YAAY,GAAG;AACtB,WAAO,YAAY,WAAW;AAE9B,QAAI,WAAW;AAEf,QAAI,KAAK,YAAY,aAAa,KAAK,YAAY;AAC/C,aAAO,aAAa,QAAQ,QAAQ;AAEpC,UAAI,QAAQ,SAAS,cAAc,WAAW;AAC9C,YAAM,aAAa,UAAU,QAAQ;AACrC,YAAM,aAAa,aAAa,KAAK,SAAS;AAC9C,YAAM,aAAa,UAAU,KAAK,MAAM;AAExC,YAAM,YAAY,MAAM;AACxB,YAAM,YAAY,OAAO;AAEzB,WAAK,QAAQ;AACb,eAAS,YAAY,KAAK;AAC1B,iBAAW;AAAA,IACvB;AAEQ,UAAI,UAAK,kBAAL,mBAAoB,aAAa,gBAAe,CAAC,KAAK,YAAY;AAClE,eAAS,YAAY,KAAK,aAAa,MAAM,CAAC;AAAA,IAC1D,WAAmB,CAAC,UAAU;AAClB,eAAS,YAAY,MAAM;AAAA,IACvC;AAEQ,QAAK,CAAC,KAAK,YAAY,KAAK,YAAY,SAAW,KAAK,YAAY,cAAc,KAAK,YAAa;AAChG,eAAS,YAAY,OAAO;AAAA,IACxC;AAEQ,SAAK,SAAS;AACd,SAAK,UAAU;AAEf,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKI,YAAY;AACR,SAAK,oBAAoB,gBAAgB,KAAK,eAAe,EAAE,UAAU,OAAO;AAEhF,SAAK,iBAAiB,aAAa,KAAK,YAAY;AACpD,SAAK,iBAAiB,wBAAwB,KAAK,kBAAkB;AAGrE,UAAM,YAAY,MAAM,cAAc,MAAM,KAAK,iBAAiB;AAElE,UAAM,YAAY,MAAM,cAAc,MAAM,KAAK,iBAAiB;AAElE,UAAM,YAAY,MAAM,YAAY,MAAM,KAAK,iBAAiB;AAChE,UAAM,YAAY,MAAM,SAAS,MAAM,KAAK,YAAY;AAExD,QAAI,KAAK,aAAa,cAAc,GAAG;AACnC,YAAM,YAAY,MAAM,SAAS,MAAM,sBAAK,4CAAoB;AAAA,IAC5E;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqEI,aAAa,QAAQ;AACjB,QAAI,eAAe,SAAS,cAAc,MAAM;AAChD,iBAAa,aAAa,QAAQ,OAAO;AACzC,iBAAa,aAAa,QAAQ,eAAe;AAEjD,QAAI,aAAa,SAAS,cAAc,MAAM;AAC9C,eAAW,aAAa,QAAQ,KAAK;AACrC,eAAW,aAAa,QAAQ,aAAa;AAE7C,QAAI,UAAU,SAAS,cAAc,aAAa;AAClD,YAAQ,aAAa,WAAW,KAAK,mBAAmB,IAAI,CAAC;AAC7D,YAAQ,aAAa,aAAa,OAAO;AACzC,YAAQ,aAAa,UAAU,KAAK,UAAU,GAAG;AAEjD,YAAQ,YAAY,YAAY;AAChC,YAAQ,YAAY,UAAU;AAC9B,YAAQ,YAAY,MAAM;AAE1B,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EA6BI,cAAc;;AACV,SAAK,WAAW;AAChB,QAAI,KAAK,YAAY;AACjB,iBAAK,UAAL,mBAAY;AACZ,WAAK,UAAU,IAAI,kBAAkB;AACrC,WAAK,OAAO,UAAU,IAAI,kBAAkB;AAAA,IACxD;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAKI,cAAc;;AACV,SAAK,WAAW;AAChB,QAAI,KAAK,YAAY;AACjB,iBAAK,UAAL,mBAAY;AACZ,WAAK,UAAU,OAAO,kBAAkB;AACxC,WAAK,OAAO,UAAU,OAAO,kBAAkB;AAAA,IAC3D;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQI,cAAc,GAAG;AACb,QAAI,KAAK,YAAY;AACjB,UAAI,kBAAkB,KAAK,QAAQ,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;AACxE,UAAI,CAAC,gBAAgB,aAAa,QAAQ,GAAG;AACzC,wBAAgB,aAAa,UAAU,EAAE;AAAA,MACzD,OAAmB;AACH,YAAI,SAAS,EAAE,OAAQ,iBAAgB,gBAAgB,QAAQ;AAAA,MAC/E;AAAA,IACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAKI,oBAAoB;AAChB,QAAI,KAAK,YAAY;AACjB,UAAI,kBAAkB,KAAK,QAAQ,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;AACxE,UAAI,gBAAgB,aAAa,QAAQ,GAAG;AACxC,wBAAgB,gBAAgB,QAAQ;AAAA,MACxD;AAAA,IACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAKI,kBAAkB;AACd,QAAI,KAAK,YAAY;AACjB,UAAI,kBAAkB,KAAK,QAAQ,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;AACxE,UAAI,CAAC,gBAAgB,aAAa,QAAQ,GAAG;AACzC,wBAAgB,aAAa,UAAU,EAAE;AAAA,MACzD;AAAA,IACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAKI,mBAAmB;;AACf,SAAK,oBAAoB,aAAa,KAAK,YAAY;AACvD,SAAK,oBAAoB,wBAAwB,KAAK,kBAAkB;AAExE,UAAM,eAAe,MAAM,cAAc,MAAM,KAAK,iBAAiB;AACrE,UAAM,eAAe,MAAM,cAAc,MAAM,KAAK,iBAAiB;AACrE,UAAM,eAAe,MAAM,YAAY,MAAM,KAAK,iBAAiB;AACnE,UAAM,eAAe,MAAM,SAAS,MAAM,KAAK,YAAY;AAE3D,eAAK,sBAAL;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOI,mBAAmB,SAAS;AACxB,QAAI,OAAO;AACX,aAAS,QAAQ,QAAQ,YAAY;AACjC,UAAI,KAAK,aAAa,KAAK,WAAW;AAClC,gBAAQ,KAAK;AAAA,MAC7B;AAAA,IACA;AACQ,WAAO,KAAK,KAAM;AAAA,EAC1B;AAcA;AAjee;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4dX,yBAAoB,WAAG;AACnB,OAAK;AAAA,IACH,IAAI,YAAY,KAAK,aAAa,EAAE,QAAQ,KAAK,uBAAuB,UAAU,MAAM,SAAS,KAAM,CAAA;AAAA,EACxG;AACT;AClgBA,SAAS,OAAO,iBAAiB,QAAQ;"}
|
package/dist/wje-routerx.js
CHANGED
|
@@ -1372,7 +1372,7 @@ class Routerx extends WJElement {
|
|
|
1372
1372
|
const parser = new DOMParser();
|
|
1373
1373
|
const htmlDocument = parser.parseFromString(htmlString, "text/html");
|
|
1374
1374
|
const rootElement = htmlDocument.querySelector("wje-router");
|
|
1375
|
-
const routes = this.
|
|
1375
|
+
const routes = this.parseElement(rootElement).root;
|
|
1376
1376
|
this.router = new Router2({
|
|
1377
1377
|
outlet: this.outlet || "wje-router-outlet",
|
|
1378
1378
|
log: false,
|
package/dist/wje-routerx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-routerx.js","sources":["../node_modules/slick-router/lib/utils.js","../node_modules/slick-router/lib/invariant.js","../node_modules/slick-router/lib/function-dsl.js","../node_modules/slick-router/lib/array-dsl.js","../node_modules/slick-router/lib/path.js","../node_modules/slick-router/lib/events.js","../node_modules/slick-router/lib/locations/location-bar.js","../node_modules/slick-router/lib/locations/browser.js","../node_modules/slick-router/lib/locations/memory.js","../node_modules/slick-router/lib/constants.js","../node_modules/slick-router/lib/transition.js","../node_modules/slick-router/lib/links.js","../node_modules/slick-router/lib/logger.js","../node_modules/slick-router/lib/qs.js","../node_modules/regexparam/dist/index.mjs","../node_modules/slick-router/lib/patternCompiler.js","../node_modules/slick-router/lib/router.js","../node_modules/slick-router/lib/middlewares/wc.js","../node_modules/slick-router/lib/wc-router.js","../node_modules/slick-router/lib/middlewares/events.js","../packages/wje-router/router.element.js","../packages/wje-router/router.js"],"sourcesContent":["const assoc = (obj, attr, val) => {\r\n obj[attr] = val\r\n return obj\r\n}\r\nconst isArray = Array.isArray\r\n\r\nexport const keys = Object.keys\r\n\r\nexport const clone = (obj) => (obj ? (isArray(obj) ? obj.slice(0) : extend({}, obj)) : obj)\r\n\r\nexport const pick = (obj, attrs) =>\r\n attrs.reduce((acc, attr) => (obj[attr] === undefined ? acc : assoc(acc, attr, obj[attr])), {})\r\n\r\nexport const isEqual = (obj1, obj2) => {\r\n const keys1 = keys(obj1)\r\n return keys1.length === keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\r\n}\r\n\r\nexport const extend = Object.assign\r\n","export default function invariant(condition, format, ...args) {\r\n if (!condition) {\r\n let argIndex = 0\r\n throw new Error('Invariant Violation: ' + format.replace(/%s/g, () => args[argIndex++]))\r\n }\r\n}\r\n","import invariant from './invariant.js'\r\n\r\n/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @callback registerRoute\r\n * @param {string} name\r\n * @param {Object} options\r\n * @param {routeCallback} childrenCallback\r\n */\r\n\r\n/**\r\n * @callback routeCallback\r\n * @param {registerRoute} route\r\n */\r\n\r\n/**\r\n * @export\r\n * @param {routeCallback} callback\r\n * @return {Route[]}\r\n */\r\nexport default function functionDsl(callback) {\r\n let ancestors = []\r\n const matches = {}\r\n const names = {}\r\n\r\n callback(function route(name, options, childrenCallback) {\r\n let routes\r\n\r\n invariant(\r\n !names[name],\r\n 'Route names must be unique, but route \"%s\" is declared multiple times',\r\n name,\r\n )\r\n\r\n names[name] = true\r\n\r\n if (arguments.length === 1) {\r\n options = {}\r\n }\r\n\r\n if (arguments.length === 2 && typeof options === 'function') {\r\n childrenCallback = options\r\n options = {}\r\n }\r\n\r\n if (typeof options.path !== 'string') {\r\n const parts = name.split('.')\r\n options.path = parts[parts.length - 1]\r\n }\r\n\r\n // go to the next level\r\n if (childrenCallback) {\r\n ancestors = ancestors.concat(name)\r\n childrenCallback()\r\n routes = pop()\r\n ancestors.splice(-1)\r\n }\r\n\r\n // add the node to the tree\r\n push({\r\n name,\r\n path: options.path,\r\n routes: routes || [],\r\n options,\r\n })\r\n })\r\n\r\n function pop() {\r\n return matches[currentLevel()] || []\r\n }\r\n\r\n function push(route) {\r\n const level = currentLevel()\r\n matches[level] = matches[level] || []\r\n matches[level].push(route)\r\n }\r\n\r\n function currentLevel() {\r\n return ancestors.join('.')\r\n }\r\n\r\n return pop()\r\n}\r\n","/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @typedef RouteDef\r\n * @property {string} name\r\n * @property {string} path\r\n * @property {RouteDef[]} children\r\n */\r\n\r\n/**\r\n * @export\r\n * @param {RouteDef[]} routes\r\n * @return {Route[]}\r\n */\r\nexport default function arrayDsl(routes) {\r\n const result = []\r\n\r\n routes.forEach(({ name, children, ...options }) => {\r\n if (typeof options.path !== 'string') {\r\n const parts = name.split('.')\r\n options.path = parts[parts.length - 1]\r\n }\r\n result.push({\r\n name,\r\n path: options.path,\r\n options,\r\n routes: children ? arrayDsl(children) : [],\r\n })\r\n })\r\n\r\n return result\r\n}\r\n","import invariant from './invariant.js'\r\n\r\nconst paramInjectMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$?]*[?+*]?)/g\r\nconst specialParamChars = /[+*?]$/g\r\nconst queryMatcher = /\\?(.+)/\r\n\r\nconst _compiledPatterns = {}\r\n\r\nfunction compilePattern(pattern, compiler) {\r\n if (!(pattern in _compiledPatterns)) {\r\n _compiledPatterns[pattern] = compiler(pattern)\r\n }\r\n\r\n return _compiledPatterns[pattern]\r\n}\r\n\r\nexport function clearPatternCompilerCache() {\r\n for (const x in _compiledPatterns) {\r\n delete _compiledPatterns[x]\r\n }\r\n}\r\n\r\n/**\r\n * Returns an array of the names of all parameters in the given pattern.\r\n */\r\nexport function extractParamNames(pattern, compiler) {\r\n return compilePattern(pattern, compiler).paramNames\r\n}\r\n\r\n/**\r\n * Extracts the portions of the given URL path that match the given pattern\r\n * and returns an object of param name => value pairs. Returns null if the\r\n * pattern does not match the given path.\r\n */\r\nexport function extractParams(pattern, path, compiler) {\r\n const cp = compilePattern(pattern, compiler)\r\n const matcher = cp.matcher\r\n const paramNames = cp.paramNames\r\n const match = path.match(matcher)\r\n\r\n if (!match) {\r\n return null\r\n }\r\n\r\n const params = {}\r\n\r\n paramNames.forEach(function (paramName, index) {\r\n params[paramName] = match[index + 1] && decodeURIComponent(match[index + 1])\r\n })\r\n\r\n return params\r\n}\r\n\r\n/**\r\n * Returns a version of the given route path with params interpolated. Throws\r\n * if there is a dynamic segment of the route path for which there is no param.\r\n */\r\nexport function injectParams(pattern, params) {\r\n params = params || {}\r\n\r\n return pattern.replace(paramInjectMatcher, function (match, param) {\r\n const paramName = param.replace(specialParamChars, '')\r\n const lastChar = param.slice(-1)\r\n\r\n // If param is optional don't check for existence\r\n if (lastChar === '?' || lastChar === '*') {\r\n if (params[paramName] == null) {\r\n return ''\r\n }\r\n } else {\r\n invariant(\r\n params[paramName] != null,\r\n \"Missing '%s' parameter for path '%s'\",\r\n paramName,\r\n pattern,\r\n )\r\n }\r\n\r\n let paramValue = encodeURIComponent(params[paramName])\r\n if (lastChar === '*' || lastChar === '+') {\r\n // restore / for splats\r\n paramValue = paramValue.replace('%2F', '/')\r\n }\r\n return paramValue\r\n })\r\n}\r\n\r\n/**\r\n * Returns an object that is the result of parsing any query string contained\r\n * in the given path, null if the path contains no query string.\r\n */\r\nexport function extractQuery(qs, path) {\r\n const match = path.match(queryMatcher)\r\n return match && qs.parse(match[1])\r\n}\r\n\r\n/**\r\n * Returns a version of the given path with the parameters in the given\r\n * query merged into the query string.\r\n */\r\nexport function withQuery(qs, path, query) {\r\n const queryString = qs.stringify(query, { indices: false })\r\n\r\n if (queryString) {\r\n return withoutQuery(path) + '?' + queryString\r\n }\r\n\r\n return path\r\n}\r\n\r\n/**\r\n * Returns a version of the given path without the query string.\r\n */\r\nexport function withoutQuery(path) {\r\n return path.replace(queryMatcher, '')\r\n}\r\n","/**\r\n * Bind `el` event `type` to `fn`.\r\n *\r\n * @param {Element} el\r\n * @param {String} type\r\n * @param {Function} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nexport function bindEvent(el, type, fn) {\r\n el.addEventListener(type, fn)\r\n return fn\r\n}\r\n\r\n/**\r\n * Unbind `el` event `type`'s callback `fn`.\r\n *\r\n * @param {Element} el\r\n * @param {String} type\r\n * @param {Function} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nexport function unbindEvent(el, type, fn) {\r\n el.removeEventListener(type, fn)\r\n return fn\r\n}\r\n","/* eslint-disable */\r\n// LocationBar module extracted from Backbone.js 1.1.0\r\n//\r\n// the dependency on backbone, underscore and jquery have been removed to turn\r\n// this into a small standalone library for handling browser's history API\r\n// cross browser and with a fallback to hashchange events or polling.\r\n\r\nimport {extend} from '../utils.js'\r\nimport {bindEvent, unbindEvent} from '../events.js'\r\n\r\n// this is mostly original code with minor modifications\r\n// to avoid dependency on 3rd party libraries\r\n//\r\n// Backbone.History\r\n// ----------------\r\n\r\n// Handles cross-browser history management, based on either\r\n// [pushState](http://diveintohtml5.info/history.html) and real URLs, or\r\n// [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\r\n// and URL fragments.\r\nclass History {\r\n constructor() {\r\n this.handlers = [];\r\n this.checkUrl = this.checkUrl.bind(this);\r\n this.location = window.location;\r\n this.history = window.history;\r\n }\r\n\r\n // Set up all inheritable **Backbone.History** properties and methods.\r\n // Are we at the app root?\r\n atRoot() {\r\n return this.location.pathname.replace(/[^\\/]$/, '$&/') === this.root;\r\n }\r\n\r\n // Gets the true hash value. Cannot use location.hash directly due to bug\r\n // in Firefox where location.hash will always be decoded.\r\n getHash() {\r\n const match = this.location.href.match(/#(.*)$/);\r\n return match ? match[1] : '';\r\n }\r\n\r\n // Get the cross-browser normalized URL fragment, either from the URL,\r\n // the hash, or the override.\r\n getFragment(fragment, forcePushState) {\r\n if (fragment == null) {\r\n if (this._hasPushState || !this._wantsHashChange || forcePushState) {\r\n fragment = decodeURI(this.location.pathname + this.location.search);\r\n const root = this.root.replace(trailingSlash, '');\r\n if (!fragment.indexOf(root)) fragment = fragment.slice(root.length);\r\n } else {\r\n fragment = this.getHash();\r\n }\r\n }\r\n return fragment.replace(routeStripper, '');\r\n }\r\n\r\n // Start the hash change handling, returning `true` if the current URL matches\r\n // an existing route, and `false` otherwise.\r\n start(options = {}) {\r\n // MODIFICATION OF ORIGINAL BACKBONE.HISTORY\r\n // if (History.started) throw new Error(\"LocationBar has already been started\");\r\n // History.started = true;\r\n this.started = true;\r\n\r\n // Figure out the initial configuration.\r\n // Is pushState desired ... is it available?\r\n this.options = extend({root: '/'}, options);\r\n this.location = this.options.location || this.location;\r\n this.history = this.options.history || this.history;\r\n this.root = this.options.root;\r\n this._wantsHashChange = this.options.hashChange !== false;\r\n this._wantsPushState = !!this.options.pushState;\r\n this._hasPushState = this._wantsPushState;\r\n const fragment = this.getFragment();\r\n\r\n // Normalize root to always include a leading and trailing slash.\r\n this.root = (`/${this.root}/`).replace(rootStripper, '/');\r\n\r\n // Depending on whether we're using pushState or hashes, and whether\r\n // 'onhashchange' is supported, determine how we check the URL state.\r\n bindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\r\n\r\n // Determine if we need to change the base url, for a pushState link\r\n // opened by a non-pushState browser.\r\n this.fragment = fragment;\r\n const loc = this.location;\r\n\r\n // Transition from hashChange to pushState or vice versa if both are\r\n // requested.\r\n if (this._wantsHashChange && this._wantsPushState) {\r\n\r\n // If we've started off with a route from a `pushState`-enabled\r\n // browser, but we're currently in a browser that doesn't support it...\r\n if (!this._hasPushState && !this.atRoot()) {\r\n this.fragment = this.getFragment(null, true);\r\n this.location.replace(`${this.root}#${this.fragment}`);\r\n // Return immediately as browser will do redirect to new url\r\n return true;\r\n\r\n // Or if we've started out with a hash-based route, but we're currently\r\n // in a browser where it could be `pushState`-based instead...\r\n } else if (this._hasPushState && this.atRoot() && loc.hash) {\r\n this.fragment = this.getHash().replace(routeStripper, '');\r\n this.history.replaceState({}, document.title, this.root + this.fragment);\r\n }\r\n\r\n }\r\n\r\n if (!this.options.silent) return this.loadUrl();\r\n }\r\n\r\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\r\n // but possibly useful for unit testing Routers.\r\n stop() {\r\n unbindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\r\n this.started = false;\r\n }\r\n\r\n // Add a route to be tested when the fragment changes. Routes added later\r\n // may override previous routes.\r\n route(route, callback) {\r\n this.handlers.unshift({route, callback});\r\n }\r\n\r\n // Checks the current URL to see if it has changed, and if it has,\r\n // calls `loadUrl`.\r\n checkUrl() {\r\n const current = this.getFragment();\r\n if (current === this.fragment) return false;\r\n this.loadUrl();\r\n }\r\n\r\n // Attempt to load the current URL fragment. If a route succeeds with a\r\n // match, returns `true`. If no defined routes matches the fragment,\r\n // returns `false`.\r\n loadUrl(fragment) {\r\n fragment = this.fragment = this.getFragment(fragment);\r\n return this.handlers.some(handler => {\r\n if (handler.route.test(fragment)) {\r\n handler.callback(fragment);\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n // Save a fragment into the hash history, or replace the URL state if the\r\n // 'replace' option is passed. You are responsible for properly URL-encoding\r\n // the fragment in advance.\r\n //\r\n // The options object can contain `trigger: true` if you wish to have the\r\n // route callback be fired (not usually desirable), or `replace: true`, if\r\n // you wish to modify the current URL without adding an entry to the history.\r\n update(fragment, options) {\r\n if (!this.started) return false;\r\n if (!options || options === true) options = {trigger: !!options};\r\n\r\n let url = this.root + (fragment = this.getFragment(fragment || ''));\r\n\r\n // Strip the hash for matching.\r\n fragment = fragment.replace(pathStripper, '');\r\n\r\n if (this.fragment === fragment) return;\r\n this.fragment = fragment;\r\n\r\n // Don't include a trailing slash on the root.\r\n if (fragment === '' && url !== '/') url = url.slice(0, -1);\r\n\r\n // If pushState is available, we use it to set the fragment as a real URL.\r\n if (this._hasPushState) {\r\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\r\n\r\n // If hash changes haven't been explicitly disabled, update the hash\r\n // fragment to store history.\r\n } else if (this._wantsHashChange) {\r\n this._updateHash(this.location, fragment, options.replace);\r\n // If you've told us that you explicitly don't want fallback hashchange-\r\n // based history, then `update` becomes a page refresh.\r\n } else {\r\n return this.location.assign(url);\r\n }\r\n if (options.trigger) return this.loadUrl(fragment);\r\n }\r\n\r\n // Update the hash location, either replacing the current entry, or adding\r\n // a new one to the browser history.\r\n _updateHash(location, fragment, replace) {\r\n if (replace) {\r\n const href = location.href.replace(/(javascript:|#).*$/, '');\r\n location.replace(`${href}#${fragment}`);\r\n } else {\r\n // Some browsers require that `hash` contains a leading #.\r\n location.hash = `#${fragment}`;\r\n }\r\n }\r\n\r\n // add some features to History\r\n\r\n // a generic callback for any changes\r\n onChange(callback) {\r\n this.route(/^(.*?)$/, callback);\r\n }\r\n\r\n // checks if the browser has pushstate support\r\n hasPushState() {\r\n // MODIFICATION OF ORIGINAL BACKBONE.HISTORY\r\n if (!this.started) {\r\n throw new Error(\"only available after LocationBar.start()\");\r\n }\r\n return this._hasPushState;\r\n }\r\n}\r\n\r\n// Cached regex for stripping a leading hash/slash and trailing space.\r\nconst routeStripper = /^[#\\/]|\\s+$/g;\r\n\r\n// Cached regex for stripping leading and trailing slashes.\r\nconst rootStripper = /^\\/+|\\/+$/g;\r\n\r\n// Cached regex for removing a trailing slash.\r\nconst trailingSlash = /\\/$/;\r\n\r\n// Cached regex for stripping urls of hash.\r\nconst pathStripper = /#.*$/;\r\n\r\n\r\n// export\r\nexport default History;\r\n","import { extend } from '../utils.js'\r\nimport LocationBar from './location-bar.js'\r\n\r\nclass BrowserLocation {\r\n constructor(options = {}) {\r\n this.path = options.path || ''\r\n\r\n this.options = extend(\r\n {\r\n pushState: false,\r\n root: '/',\r\n },\r\n options,\r\n )\r\n\r\n // we're using the location-bar module for actual\r\n // URL management\r\n this.locationBar = new LocationBar()\r\n this.locationBar.onChange((path) => {\r\n this.handleURL(`/${path || ''}`)\r\n })\r\n\r\n this.locationBar.start(options)\r\n }\r\n\r\n /**\r\n * Get the current URL\r\n */\r\n\r\n getURL() {\r\n return this.path\r\n }\r\n\r\n /**\r\n * Set the current URL without triggering any events\r\n * back to the router. Add a new entry in browser's history.\r\n */\r\n\r\n setURL(path, options = {}) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.locationBar.update(path, extend({ trigger: true }, options))\r\n }\r\n }\r\n\r\n /**\r\n * Set the current URL without triggering any events\r\n * back to the router. Replace the latest entry in broser's history.\r\n */\r\n\r\n replaceURL(path, options = {}) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.locationBar.update(path, extend({ trigger: true, replace: true }, options))\r\n }\r\n }\r\n\r\n /**\r\n * Setup a URL change handler\r\n * @param {Function} callback\r\n */\r\n onChange(callback) {\r\n this.changeCallback = callback\r\n }\r\n\r\n /**\r\n * Given a path, generate a URL appending root\r\n * if pushState is used and # if hash state is used\r\n */\r\n formatURL(path) {\r\n if (this.locationBar.hasPushState()) {\r\n let rootURL = this.options.root\r\n if (path !== '') {\r\n rootURL = rootURL.replace(/\\/$/, '')\r\n }\r\n return rootURL + path\r\n } else {\r\n if (path[0] === '/') {\r\n path = path.substr(1)\r\n }\r\n return `#${path}`\r\n }\r\n }\r\n\r\n /**\r\n * When we use pushState with a custom root option,\r\n * we need to take care of removingRoot at certain points.\r\n * Specifically\r\n * - browserLocation.update() can be called with the full URL by router\r\n * - LocationBar expects all .update() calls to be called without root\r\n * - this method is public so that we could dispatch URLs without root in router\r\n */\r\n removeRoot(url) {\r\n if (this.options.pushState && this.options.root && this.options.root !== '/') {\r\n return url.replace(this.options.root, '')\r\n } else {\r\n return url\r\n }\r\n }\r\n\r\n /**\r\n * Stop listening to URL changes and link clicks\r\n */\r\n destroy() {\r\n this.locationBar.stop()\r\n }\r\n\r\n /**\r\n initially, the changeCallback won't be defined yet, but that's good\r\n because we dont' want to kick off routing right away, the router\r\n does that later by manually calling this handleURL method with the\r\n url it reads of the location. But it's important this is called\r\n first by Backbone, because we wanna set a correct this.path value\r\n\r\n @private\r\n */\r\n handleURL(url) {\r\n this.path = url\r\n if (this.changeCallback) {\r\n this.changeCallback(url)\r\n }\r\n }\r\n}\r\n\r\nexport default BrowserLocation\r\n","import { extend } from '../utils.js'\r\n\r\nclass MemoryLocation {\r\n constructor({ path }) {\r\n this.path = path || ''\r\n }\r\n\r\n getURL() {\r\n return this.path\r\n }\r\n\r\n setURL(path, options) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.handleURL(this.getURL(), options)\r\n }\r\n }\r\n\r\n replaceURL(path, options) {\r\n if (this.path !== path) {\r\n this.setURL(path, options)\r\n }\r\n }\r\n\r\n onChange(callback) {\r\n this.changeCallback = callback\r\n }\r\n\r\n handleURL(url, options = {}) {\r\n this.path = url\r\n options = extend({ trigger: true }, options)\r\n if (this.changeCallback && options.trigger) {\r\n this.changeCallback(url)\r\n }\r\n }\r\n\r\n removeRoot(url) {\r\n return url\r\n }\r\n\r\n formatURL(url) {\r\n return url\r\n }\r\n}\r\n\r\nexport default MemoryLocation\r\n","export const TRANSITION_REDIRECTED = 'TransitionRedirected'\r\n\r\nexport const TRANSITION_CANCELLED = 'TransitionCancelled'\r\n","import { clone } from './utils.js'\r\nimport invariant from './invariant.js'\r\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\r\n\r\n/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @typedef {Pick<Transition, 'routes' | 'pathname' | 'path' | 'params' | 'query' >} TransitionData\r\n */\r\n\r\n/**\r\n * @typedef Transition\r\n * @property {Route[]} routes\r\n * @property {string} pathname\r\n * @property {string} path\r\n * @property {Object} params\r\n * @property {Object} query\r\n * @property {TransitionData} prev\r\n * @property {(name: string, params?: any, query?: any) => Transition} redirectTo\r\n * @property {(name: string, params?: any, query?: any) => Transition} retry\r\n * @property {(error: string | Error) => void} cancel\r\n * @property {() => Promise<any>} followRedirects\r\n * @property {function} then\r\n * @property {function} catch\r\n * @property {boolean} noop\r\n * @property {boolean} isCancelled\r\n */\r\n\r\n/**\r\n * @param {*} router\r\n * @param {Transition} transition\r\n * @param {*} err\r\n */\r\nfunction runError(router, transition, err) {\r\n router.middleware.forEach((m) => {\r\n m.error && m.error(transition, err)\r\n })\r\n}\r\n\r\n/**\r\n * @export\r\n * @param {*} options\r\n * @return {Transition}\r\n */\r\nexport default function transition(options) {\r\n options = options || {}\r\n\r\n const router = options.router\r\n const log = router.log\r\n const logError = router.logError\r\n\r\n const path = options.path\r\n const match = options.match\r\n const routes = match.routes\r\n const params = match.params\r\n const pathname = match.pathname\r\n const query = match.query\r\n\r\n const id = options.id\r\n const startTime = Date.now()\r\n log('---')\r\n log('Transition #' + id, 'to', path)\r\n log(\r\n 'Transition #' + id,\r\n 'routes:',\r\n routes.map((r) => r.name),\r\n )\r\n log('Transition #' + id, 'params:', params)\r\n log('Transition #' + id, 'query:', query)\r\n\r\n // create the transition promise\r\n let resolve, reject\r\n const promise = new Promise(function (res, rej) {\r\n resolve = res\r\n reject = rej\r\n })\r\n\r\n // 1. make transition errors loud\r\n // 2. by adding this handler we make sure\r\n // we don't trigger the default 'Potentially\r\n // unhandled rejection' for cancellations\r\n promise\r\n .then(function () {\r\n log('Transition #' + id, 'completed in', Date.now() - startTime + 'ms')\r\n })\r\n .catch(function (err) {\r\n if (err.type !== TRANSITION_REDIRECTED && err.type !== TRANSITION_CANCELLED) {\r\n log('Transition #' + id, 'FAILED')\r\n logError(err)\r\n }\r\n })\r\n\r\n let cancelled = false\r\n\r\n const transition = {\r\n id,\r\n prev: {\r\n routes: clone(router.state.routes) || [],\r\n path: router.state.path || '',\r\n pathname: router.state.pathname || '',\r\n params: clone(router.state.params) || {},\r\n query: clone(router.state.query) || {},\r\n },\r\n routes: clone(routes),\r\n path,\r\n pathname,\r\n params: clone(params),\r\n query: clone(query),\r\n redirectTo: function (...args) {\r\n return router.transitionTo(...args)\r\n },\r\n retry: function () {\r\n return router.transitionTo(path)\r\n },\r\n cancel: function (err) {\r\n if (router.state.activeTransition !== transition) {\r\n return\r\n }\r\n\r\n if (transition.isCancelled) {\r\n return\r\n }\r\n\r\n router.state.activeTransition = null\r\n transition.isCancelled = true\r\n cancelled = true\r\n\r\n if (!err) {\r\n err = new Error(TRANSITION_CANCELLED)\r\n err.type = TRANSITION_CANCELLED\r\n }\r\n if (err.type === TRANSITION_CANCELLED) {\r\n log('Transition #' + id, 'cancelled')\r\n }\r\n if (err.type === TRANSITION_REDIRECTED) {\r\n log('Transition #' + id, 'redirected')\r\n }\r\n\r\n router.middleware.forEach((m) => {\r\n m.cancel && m.cancel(transition, err)\r\n })\r\n reject(err)\r\n },\r\n followRedirects: function () {\r\n return promise.catch(function (reason) {\r\n if (router.state.activeTransition) {\r\n return router.state.activeTransition.followRedirects()\r\n }\r\n return Promise.reject(reason)\r\n })\r\n },\r\n\r\n then: promise.then.bind(promise),\r\n catch: promise.catch.bind(promise),\r\n }\r\n\r\n router.middleware.forEach((m) => {\r\n m.before && m.before(transition)\r\n })\r\n\r\n // here we handle calls to all of the middlewares\r\n function callNext(i, prevResult) {\r\n let middleware\r\n let middlewareName\r\n // if transition has been cancelled - nothing left to do\r\n if (cancelled) {\r\n return\r\n }\r\n // done\r\n if (i < router.middleware.length) {\r\n middleware = router.middleware[i]\r\n middlewareName = middleware.name || 'anonymous'\r\n log('Transition #' + id, 'resolving middleware:', middlewareName)\r\n let middlewarePromise\r\n try {\r\n middlewarePromise = middleware.resolve\r\n ? middleware.resolve(transition, prevResult)\r\n : prevResult\r\n invariant(\r\n transition !== middlewarePromise,\r\n 'Middleware %s returned a transition which resulted in a deadlock',\r\n middlewareName,\r\n )\r\n } catch (err) {\r\n router.state.activeTransition = null\r\n runError(router, transition, err)\r\n return reject(err)\r\n }\r\n Promise.resolve(middlewarePromise)\r\n .then(function (result) {\r\n callNext(i + 1, result)\r\n })\r\n .catch(function (err) {\r\n log('Transition #' + id, 'resolving middleware:', middlewareName, 'FAILED')\r\n router.state.activeTransition = null\r\n runError(router, transition, err)\r\n reject(err)\r\n })\r\n } else {\r\n router.state = {\r\n activeTransition: null,\r\n routes,\r\n path,\r\n pathname,\r\n params,\r\n query,\r\n }\r\n router.middleware.forEach((m) => {\r\n m.done && m.done(transition)\r\n })\r\n resolve()\r\n }\r\n }\r\n\r\n if (!options.noop) {\r\n Promise.resolve().then(() => callNext(0))\r\n } else {\r\n resolve()\r\n }\r\n\r\n if (options.noop) {\r\n transition.noop = true\r\n }\r\n\r\n return transition\r\n}\r\n","import { bindEvent, unbindEvent } from './events.js'\r\n\r\n/**\r\n * Handle link delegation on `el` or the document,\r\n * and invoke `fn(e)` when clickable.\r\n *\r\n * @param {Element} el\r\n * @param {(e: Event, el: HTMLElement) => void} fn\r\n * @return {Function} dispose\r\n * @api public\r\n */\r\n\r\nexport function intercept(el, fn) {\r\n const cb = delegate(el, 'click', function (e, el) {\r\n if (clickable(e, el)) fn(e, el)\r\n })\r\n\r\n return function dispose() {\r\n unbindEvent(el, 'click', cb)\r\n }\r\n}\r\n\r\n/**\r\n * Delegate event `type` to links\r\n * and invoke `fn(e)`. A callback function\r\n * is returned which may be passed to `.unbind()`.\r\n *\r\n * @param {HTMLElement} el\r\n * @param {String} selector\r\n * @param {String} type\r\n * @param {(e: Event, el: HTMLElement) => void} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nfunction delegate(el, type, fn) {\r\n return bindEvent(el, type, function (e) {\r\n const el = e.target.closest('a')\r\n if (el) {\r\n fn(e, el)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Check if `e` is clickable.\r\n */\r\n\r\n/**\r\n * @param {Event} e\r\n * @param {HTMLElement} el\r\n * @return {Boolean | undefined}\r\n */\r\nfunction clickable(e, el) {\r\n if (which(e) !== 1) return\r\n if (e.metaKey || e.ctrlKey || e.shiftKey) return\r\n if (e.defaultPrevented) return\r\n\r\n // check target\r\n if (el.target) return\r\n\r\n // check for data-bypass attribute\r\n if (el.getAttribute('data-bypass') !== null) return\r\n\r\n // inspect the href\r\n const href = el.getAttribute('href')\r\n if (!href || href.length === 0) return\r\n\r\n // don't handle hash links, external/absolute links, email links and javascript links\r\n if (/^(#|https{0,1}:\\/\\/|mailto|javascript:)/i.test(href)) return\r\n\r\n return true\r\n}\r\n\r\n/**\r\n * Event button.\r\n */\r\n\r\nfunction which(e) {\r\n e = e || window.event\r\n return e.which === null ? e.button : e.which\r\n}\r\n","export default function defineLogger(router, method, fn) {\r\n if (fn === true) return\r\n router[method] = typeof fn === 'function' ? fn : () => {}\r\n}\r\n","export default {\r\n parse(querystring) {\r\n return querystring.split('&').reduce((acc, pair) => {\r\n const parts = pair.split('=')\r\n acc[parts[0]] = decodeURIComponent(parts[1])\r\n return acc\r\n }, {})\r\n },\r\n\r\n stringify(params) {\r\n return Object.keys(params)\r\n .reduce((acc, key) => {\r\n if (params[key] !== undefined) {\r\n acc.push(key + '=' + encodeURIComponent(params[key]))\r\n }\r\n return acc\r\n }, [])\r\n .join('&')\r\n },\r\n}\r\n","/**\n * @param {string|RegExp} input The route pattern\n * @param {boolean} [loose] Allow open-ended matching. Ignored with `RegExp` input.\n */\nexport function parse(input, loose) {\n\tif (input instanceof RegExp) return { keys:false, pattern:input };\n\tvar c, o, tmp, ext, keys=[], pattern='', arr = input.split('/');\n\tarr[0] || arr.shift();\n\n\twhile (tmp = arr.shift()) {\n\t\tc = tmp[0];\n\t\tif (c === '*') {\n\t\t\tkeys.push(c);\n\t\t\tpattern += tmp[1] === '?' ? '(?:/(.*))?' : '/(.*)';\n\t\t} else if (c === ':') {\n\t\t\to = tmp.indexOf('?', 1);\n\t\t\text = tmp.indexOf('.', 1);\n\t\t\tkeys.push( tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length) );\n\t\t\tpattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';\n\t\t\tif (!!~ext) pattern += (!!~o ? '?' : '') + '\\\\' + tmp.substring(ext);\n\t\t} else {\n\t\t\tpattern += '/' + tmp;\n\t\t}\n\t}\n\n\treturn {\n\t\tkeys: keys,\n\t\tpattern: new RegExp('^' + pattern + (loose ? '(?=$|\\/)' : '\\/?$'), 'i')\n\t};\n}\n\nvar RGX = /(\\/|^)([:*][^/]*?)(\\?)?(?=[/.]|$)/g;\n\n// error if key missing?\nexport function inject(route, values) {\n\treturn route.replace(RGX, (x, lead, key, optional) => {\n\t\tx = values[key=='*' ? key : key.substring(1)];\n\t\treturn x ? '/'+x : (optional || key=='*') ? '' : '/' + key;\n\t});\n}\n","import { parse } from 'regexparam'\r\n\r\nconst splatRegex = /:(\\w+)\\*/\r\n\r\nexport function patternCompiler(pattern) {\r\n // hack to add (partial) named splat support\r\n const splatMatch = splatRegex.exec(pattern)\r\n const normalizedPattern = splatMatch ? pattern.replace(splatRegex, '*') : pattern\r\n\r\n const { pattern: matcher, keys } = parse(normalizedPattern)\r\n\r\n const paramNames = splatMatch ? keys.map((key) => (key === '*' ? splatMatch[1] : key)) : keys\r\n\r\n return {\r\n matcher,\r\n paramNames,\r\n }\r\n}\r\n","/* eslint-disable array-callback-return */\r\nimport { pick, clone, extend, isEqual, keys } from './utils.js'\r\nimport functionDsl from './function-dsl.js'\r\nimport arrayDsl from './array-dsl.js'\r\nimport {\r\n withQuery,\r\n withoutQuery,\r\n injectParams,\r\n extractParams,\r\n extractParamNames,\r\n extractQuery,\r\n} from './path.js'\r\nimport invariant from './invariant.js'\r\nimport BrowserLocation from './locations/browser.js'\r\nimport MemoryLocation from './locations/memory.js'\r\nimport transition from './transition.js'\r\nimport { intercept } from './links.js'\r\nimport defineLogger from './logger.js'\r\nimport qs from './qs.js'\r\nimport { patternCompiler } from './patternCompiler.js'\r\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\r\n\r\n/**\r\n * @typedef {import('./function-dsl.js').routeCallback} routeCallback\r\n * @typedef {import('./array-dsl.js').RouteDef} RouteDef\r\n * @typedef {import('./transition.js').Transition} Transition\r\n *\r\n * @typedef Route\r\n * @property {String} name\r\n * @property {String} path\r\n * @property {Object} options\r\n * @property {Route[]} routes\r\n *\r\n\r\n * @typedef {Object | 'browser' | 'memory'} LocationParam\r\n *\r\n *\r\n * @typedef RouterOptions\r\n * @property {routeCallback | RouteDef[]} [routes]\r\n * @property {LocationParam} [location]\r\n * @property {Boolean} [logError]\r\n * @property {Object} [qs]\r\n * @property {Object} [patternCompiler]\r\n *\r\n */\r\n\r\nclass Router {\r\n /**\r\n * @param {RouterOptions} [options]\r\n */\r\n constructor(options = {}) {\r\n this.nextId = 1\r\n this.state = {}\r\n this.middleware = []\r\n this.options = extend(\r\n {\r\n location: 'browser',\r\n logError: true,\r\n qs,\r\n patternCompiler,\r\n },\r\n options,\r\n )\r\n defineLogger(this, 'log', this.options.log)\r\n defineLogger(this, 'logError', this.options.logError)\r\n if (options.routes) {\r\n this.map(options.routes)\r\n }\r\n }\r\n\r\n /**\r\n * Add a middleware\r\n * @param {Function} middleware\r\n * @return {Router}\r\n * @api public\r\n */\r\n use(middleware, options = {}) {\r\n const m = typeof middleware === 'function' ? { resolve: middleware } : middleware\r\n typeof options.at === 'number'\r\n ? this.middleware.splice(options.at, 0, m)\r\n : this.middleware.push(m)\r\n m.create && m.create(this)\r\n return this\r\n }\r\n\r\n /**\r\n * Add the route map\r\n * @param {routeCallback | RouteDef[]} routes\r\n * @return {Router}\r\n * @api public\r\n */\r\n map(routes) {\r\n // create the route tree\r\n this.routes = Array.isArray(routes) ? arrayDsl(routes) : functionDsl(routes)\r\n\r\n // create the matcher list, which is like a flattened\r\n // list of routes = a list of all branches of the route tree\r\n const matchers = (this.matchers = [])\r\n // keep track of whether duplicate paths have been created,\r\n // in which case we'll warn the dev\r\n const dupes = {}\r\n // keep track of abstract routes to build index route forwarding\r\n const abstracts = {}\r\n\r\n eachBranch({ routes: this.routes }, [], (routes) => {\r\n // concatenate the paths of the list of routes\r\n let path = routes.reduce(\r\n (\r\n memo,\r\n r, // reset if there's a leading slash, otherwise concat\r\n ) =>\r\n // and keep resetting the trailing slash\r\n (r.path[0] === '/' ? r.path : `${memo}/${r.path}`).replace(/\\/$/, ''),\r\n '',\r\n )\r\n // ensure we have a leading slash\r\n if (path === '') {\r\n path = '/'\r\n }\r\n\r\n const lastRoute = routes[routes.length - 1]\r\n\r\n if (lastRoute.options.abstract) {\r\n abstracts[path] = lastRoute.name\r\n return\r\n }\r\n\r\n if (lastRoute.path === '') {\r\n let matcher\r\n matchers.some((m) => {\r\n if (m.path === path) {\r\n matcher = m\r\n return true\r\n }\r\n })\r\n\r\n if (matcher) {\r\n // remap the matcher of a parent route\r\n matcher.routes = routes\r\n } else if (abstracts[path]) {\r\n matchers.push({\r\n routes,\r\n name: abstracts[path],\r\n path,\r\n })\r\n }\r\n }\r\n\r\n // register routes\r\n matchers.push({\r\n routes,\r\n name: lastRoute.name,\r\n path,\r\n })\r\n\r\n // dupe detection\r\n if (dupes[path] && lastRoute.path !== '') {\r\n throw new Error(\r\n `Routes ${dupes[path]} and ${lastRoute.name} have the same url path '${path}'`,\r\n )\r\n }\r\n dupes[path] = lastRoute.name\r\n })\r\n\r\n function eachBranch(node, memo, fn) {\r\n node.routes.forEach((route) => {\r\n fn(memo.concat(route))\r\n\r\n if (route.routes.length) {\r\n eachBranch(route, memo.concat(route), fn)\r\n }\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * Starts listening to the location changes.\r\n * @param {String} [path]\r\n * @return {Transition} initial transition\r\n *\r\n * @api public\r\n */\r\n listen(path) {\r\n const location = (this.location = this.createLocation(path || ''))\r\n // setup the location onChange handler\r\n location.onChange((url) => {\r\n const previousUrl = this.state.path\r\n this.dispatch(url).catch((err) => {\r\n if (err && err.type === TRANSITION_CANCELLED) {\r\n // reset the URL in case the transition has been cancelled\r\n this.location.replaceURL(previousUrl, { trigger: false })\r\n }\r\n return err\r\n })\r\n })\r\n // and also kick off the initial transition\r\n return this.dispatch(location.getURL())\r\n }\r\n\r\n /**\r\n * Transition to a different route. Passe in url or a route name followed by params and query\r\n * @param {String} name url or route name\r\n * @param {Object} [params] Optional\r\n * @param {Object} [query] Optional\r\n * @return {Transition} transition\r\n *\r\n * @api public\r\n */\r\n transitionTo(name, params, query) {\r\n if (this.state.activeTransition) {\r\n return this.replaceWith(name, params, query)\r\n }\r\n return this.doTransition('setURL', name, params, query)\r\n }\r\n\r\n /**\r\n * Like transitionTo, but doesn't leave an entry in the browser's history,\r\n * so clicking back will skip this route\r\n * @param {String} name url or route name followed by params and query\r\n * @param {Record<string, any>} [params]\r\n * @param {Record<string, any>} [query]\r\n * @return {Transition} transition\r\n *\r\n * @api public\r\n */\r\n replaceWith(name, params, query) {\r\n return this.doTransition('replaceURL', name, params, query)\r\n }\r\n\r\n /**\r\n * Create an href\r\n * @param {String} name target route name\r\n * @param {Object} [params]\r\n * @param {Object} [query]\r\n * @return {String} href\r\n *\r\n * @api public\r\n */\r\n generate(name, params, query) {\r\n invariant(this.location, 'call .listen() before using .generate()')\r\n let matcher\r\n\r\n query = query || {}\r\n\r\n this.matchers.forEach((m) => {\r\n if (m.name === name) {\r\n matcher = m\r\n }\r\n })\r\n\r\n if (!matcher) {\r\n throw new Error(`No route is named ${name}`)\r\n }\r\n\r\n const url = withQuery(this.options.qs, injectParams(matcher.path, params), query)\r\n return this.location.formatURL(url)\r\n }\r\n\r\n /**\r\n * Stop listening to URL changes\r\n * @api public\r\n */\r\n destroy() {\r\n if (this.location && this.location.destroy) {\r\n this.location.destroy()\r\n }\r\n if (this.state.activeTransition) {\r\n this.state.activeTransition.cancel()\r\n }\r\n this.state = {}\r\n this.middleware.forEach((m) => {\r\n m.destroy && m.destroy(this)\r\n })\r\n }\r\n\r\n /**\r\n * Check if the given route/params/query combo is active\r\n * @param {String} name target route name\r\n * @param {Record<string, any>} [params]\r\n * @param {Record<string, any>} [query]\r\n * @param {Boolean} [exact]\r\n * @return {Boolean}\r\n *\r\n * @api public\r\n */\r\n isActive(name, params, query, exact) {\r\n const activeRoutes = this.state.routes || []\r\n const activeParams = this.state.params\r\n const activeQuery = this.state.query\r\n\r\n let isActive =\r\n activeRoutes.some((route) => route.name === name) &&\r\n (!exact || activeRoutes[activeRoutes.length - 1].name === name)\r\n isActive =\r\n isActive && (!params || keys(params).every((key) => activeParams[key] === params[key]))\r\n isActive = isActive && (!query || keys(query).every((key) => activeQuery[key] === query[key]))\r\n\r\n return isActive\r\n }\r\n\r\n /**\r\n * @api private\r\n * @param {String} method pushState or replaceState\r\n * @param {String} name target route name\r\n * @param {Object} [params]\r\n * @param {Object} [query]\r\n * @return {Transition} transition\r\n */\r\n doTransition(method, name, params, query) {\r\n const previousUrl = this.location.getURL()\r\n\r\n let url = name\r\n if (url[0] !== '/') {\r\n url = this.generate(name, params, query)\r\n url = url.replace(/^#/, '/')\r\n }\r\n\r\n if (this.options.pushState) {\r\n url = this.location.removeRoot(url)\r\n }\r\n\r\n const transition = this.dispatch(url)\r\n\r\n transition.catch((err) => {\r\n if (err && err.type === TRANSITION_CANCELLED) {\r\n // reset the URL in case the transition has been cancelled\r\n this.location.replaceURL(previousUrl, { trigger: false })\r\n }\r\n return err\r\n })\r\n\r\n this.location[method](url, { trigger: false })\r\n\r\n return transition\r\n }\r\n\r\n /**\r\n * Match the path against the routes\r\n * @param {String} path\r\n * @return {Object} the list of matching routes and params\r\n *\r\n * @api private\r\n */\r\n match(path) {\r\n path = (path || '').replace(/\\/$/, '') || '/'\r\n let params\r\n let routes = []\r\n const pathWithoutQuery = withoutQuery(path)\r\n const { qs, patternCompiler } = this.options\r\n this.matchers.some((matcher) => {\r\n params = extractParams(matcher.path, pathWithoutQuery, patternCompiler)\r\n if (params) {\r\n routes = matcher.routes\r\n return true\r\n }\r\n })\r\n return {\r\n routes: routes.map(descriptor),\r\n params: params || {},\r\n pathname: pathWithoutQuery,\r\n query: extractQuery(qs, path) || {},\r\n }\r\n\r\n // clone the data (only a shallow clone of options)\r\n // to make sure the internal route store is not mutated\r\n // by the middleware. The middleware can mutate data\r\n // before it gets passed into the resolve middleware, but\r\n // only within the same transition. New transitions\r\n // will get to use pristine data.\r\n function descriptor(route) {\r\n return {\r\n name: route.name,\r\n path: route.path,\r\n params: pick(params, extractParamNames(route.path, patternCompiler)),\r\n options: clone(route.options),\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {string} path\r\n * @returns {Transition}\r\n */\r\n dispatch(path) {\r\n const match = this.match(path)\r\n const query = match.query\r\n const pathname = match.pathname\r\n\r\n const activeTransition = this.state.activeTransition\r\n\r\n // if we already have an active transition with all the same\r\n // params - return that and don't do anything else\r\n if (\r\n activeTransition &&\r\n activeTransition.pathname === pathname &&\r\n isEqual(activeTransition.query, query)\r\n ) {\r\n return activeTransition\r\n }\r\n\r\n // otherwise, cancel the active transition since we're\r\n // redirecting (or initiating a brand new transition)\r\n if (activeTransition) {\r\n const err = new Error(TRANSITION_REDIRECTED)\r\n err.type = TRANSITION_REDIRECTED\r\n err.nextPath = path\r\n activeTransition.cancel(err)\r\n }\r\n\r\n // if there is no active transition, check if\r\n // this is a noop transition, in which case, return\r\n // a transition to respect the function signature,\r\n // but don't actually run any of the middleware\r\n if (!activeTransition) {\r\n if (this.state.pathname === pathname && isEqual(this.state.query, query)) {\r\n return transition({\r\n id: this.nextId++,\r\n path,\r\n match,\r\n noop: true,\r\n router: this,\r\n })\r\n }\r\n }\r\n\r\n const t = transition({\r\n id: this.nextId++,\r\n path,\r\n match,\r\n router: this,\r\n })\r\n\r\n this.state.activeTransition = t\r\n\r\n return t\r\n }\r\n\r\n /**\r\n * Create the default location.\r\n * This is used when no custom location is passed to\r\n * the listen call.\r\n * @param {LocationParam} path\r\n * @return {Object} location\r\n *\r\n * @api private\r\n */\r\n createLocation(path) {\r\n const location = this.options.location\r\n if (typeof location !== 'string') {\r\n return location\r\n }\r\n if (location === 'browser') {\r\n return new BrowserLocation(pick(this.options, ['pushState', 'root']))\r\n } else if (location === 'memory') {\r\n return new MemoryLocation({ path })\r\n } else {\r\n throw new Error('Location can be `browser`, `memory` or a custom implementation')\r\n }\r\n }\r\n\r\n log(...args) {\r\n console.info(...args)\r\n }\r\n\r\n logError(...args) {\r\n console.error(...args)\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {Event} event\r\n * @param {HTMLAnchorElement} link\r\n * @param {Router} router\r\n */\r\nfunction defaultClickHandler(event, link, router) {\r\n event.preventDefault()\r\n router.transitionTo(router.location.removeRoot(link.getAttribute('href')))\r\n}\r\n\r\n/**\r\n * @description Helper to intercept links when using pushState but server is not configured for it\r\n * Link clicks are handled via the router avoiding browser page reload\r\n * @param {Router} router\r\n * @param {HTMLElement} el\r\n * @param {(e: Event, link: HTMLAnchorElement, router: Router) => void} clickHandler\r\n * @returns {Function} dispose\r\n */\r\nfunction interceptLinks(router, el = document, clickHandler = defaultClickHandler) {\r\n return intercept(el, (event, link) => clickHandler(event, link, router))\r\n}\r\n\r\nexport { Router, interceptLinks }\r\n","const resolved = Promise.resolve()\r\nlet routeElMap = Object.create(null)\r\nlet routeComponentMap = Object.create(null)\r\nlet routePropertiesMap = Object.create(null)\r\n\r\nlet router, rootOutlet, rootOutletEl\r\n\r\n/**\r\n * @typedef {import(\"../transition.js\").Transition} Transition\r\n *\r\n * @typedef WCRouteDef\r\n * @property {string} name\r\n * @property {string} path\r\n * @property {string | Function} component\r\n * @property {Object.<string, PropertyHook | PropertyHook[]>} [properties]\r\n * @property {boolean} [reuse]\r\n * @property {function(Transition): Promise<boolean> | boolean} [beforeEnter]\r\n * @property {function(Transition): Promise<boolean> | boolean} [beforeLeave]\r\n * @property {function(Transition): Promise<void> | void} [afterEnter]\r\n * @property {function(Transition): Promise<void> | void} [afterLeave]\r\n */\r\n\r\n/**\r\n * @callback PropertySetter\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * @typedef PropertyHook\r\n * @property {function(PropertySetter): void} [init]\r\n * @property {function(Transition, PropertySetter): void} [enter]\r\n * @property {function(Transition, PropertySetter): void} [leave]\r\n * @property {function(*, HTMLElement): void} [update]\r\n */\r\n\r\n/**\r\n * @param {*} value\r\n * @return {*}\r\n */\r\nfunction parseNumber(value) {\r\n const n = parseFloat(value)\r\n const isNumeric = value == n // eslint-disable-line eqeqeq\r\n return isNumeric ? n : value\r\n}\r\n\r\nfunction getFormattedValue(value, format) {\r\n let v = value\r\n if (v !== undefined) {\r\n if (format === 'number') {\r\n v = parseNumber(value)\r\n } else if (typeof format === 'function') {\r\n v = format(value)\r\n }\r\n }\r\n return v\r\n}\r\n\r\n/**\r\n * @param {*} value\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromValue(value) {\r\n return {\r\n init(setValue) {\r\n setValue(value)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * @param {string} key\r\n * @param {string | Function} [format]\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromQuery(queryKey, format) {\r\n return {\r\n enter(transition, setValue) {\r\n setValue(transition.query[queryKey], format)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} paramKey\r\n * @param {string | Function} format\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromParam(paramKey, format) {\r\n return {\r\n enter(transition, setValue) {\r\n setValue(transition.params[paramKey], format)\r\n },\r\n }\r\n}\r\n\r\nexport function getRouteEl(route) {\r\n return routeElMap[route.name]\r\n}\r\n\r\nfunction create(instance) {\r\n router = instance\r\n rootOutlet = instance.options.outlet\r\n}\r\n\r\nfunction destroy() {\r\n router = null\r\n routeElMap = Object.create(null)\r\n routeComponentMap = Object.create(null)\r\n routePropertiesMap = Object.create(null)\r\n rootOutletEl = null\r\n}\r\n\r\nfunction isEqual(obj1, obj2) {\r\n const keys1 = Object.keys(obj1)\r\n return keys1.length === Object.keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\r\n}\r\n\r\nfunction getOutlet(el) {\r\n const renderRoot = el.shadowRoot || el\r\n return renderRoot.querySelector(el.constructor.outlet || 'router-outlet')\r\n}\r\n\r\nfunction resolveRootOutlet() {\r\n if (rootOutletEl) return rootOutletEl\r\n if (!rootOutlet) return document.body\r\n rootOutletEl = typeof rootOutlet === 'string' ? document.querySelector(rootOutlet) : rootOutlet\r\n if (!rootOutletEl) {\r\n throw new Error(`slick-router(wc): Invalid outlet option ${rootOutlet}`)\r\n }\r\n return rootOutletEl\r\n}\r\n\r\nfunction getParentEl(transition, parentIndex) {\r\n let parent = transition.routes[parentIndex]\r\n while (parent) {\r\n if (parent.options.component) {\r\n return routeElMap[parent.name]\r\n }\r\n parent = transition.routes[--parentIndex]\r\n }\r\n}\r\n\r\nfunction getChangingIndex(prevRoutes, currentRoutes) {\r\n let index, prev, current\r\n const count = Math.max(prevRoutes.length, currentRoutes.length)\r\n for (index = 0; index < count; index++) {\r\n prev = prevRoutes[index]\r\n current = currentRoutes[index]\r\n if (!(prev && current) || prev.name !== current.name || !isEqual(prev.params, current.params)) {\r\n break\r\n }\r\n }\r\n return index\r\n}\r\n\r\nfunction runPropertyHookMethod(transition, routes, method) {\r\n for (let i = 0; i < routes.length; i++) {\r\n const { route } = routes[i]\r\n const propertiesData = routePropertiesMap[route.name]\r\n for (const { hooks, set } of Object.values(propertiesData)) {\r\n hooks.forEach((hook) => {\r\n if (typeof hook[method] === 'function') {\r\n hook[method](transition, set)\r\n }\r\n })\r\n }\r\n }\r\n}\r\n\r\nasync function runLifeCycle(transition, routes, prefix, suffix) {\r\n for (let i = 0; i < routes.length; i++) {\r\n let result\r\n const { route, el } = routes[i]\r\n const routeMethod = route.options[`${prefix}${suffix}`]\r\n if (typeof routeMethod === 'function') {\r\n result = await routeMethod(transition)\r\n if (result === false) {\r\n transition.cancel()\r\n }\r\n }\r\n if (transition.isCancelled) break\r\n const elMethod = el && el[`${prefix}Route${suffix}`]\r\n if (typeof elMethod === 'function') {\r\n result = await elMethod.call(el, transition)\r\n if (result === false) {\r\n transition.cancel()\r\n }\r\n }\r\n if (transition.isCancelled) break\r\n }\r\n}\r\n\r\nfunction resolveModule(value) {\r\n return value && value.__esModule ? value.default : value\r\n}\r\n\r\nfunction initPropertyHook(value) {\r\n if (value && typeof value === 'object') return value\r\n return fromValue(value)\r\n}\r\n\r\nfunction initProperties(route) {\r\n let propertiesData = routePropertiesMap[route.name]\r\n if (!propertiesData) {\r\n propertiesData = routePropertiesMap[route.name] = Object.create(null)\r\n const properties = route.options.properties\r\n if (properties) {\r\n for (const [name, hookOrValue] of Object.entries(properties)) {\r\n const hooks = Array.isArray(hookOrValue)\r\n ? hookOrValue.map(initPropertyHook)\r\n : [initPropertyHook(hookOrValue)]\r\n\r\n const set = (v, format) => {\r\n const propertyData = propertiesData[name]\r\n const newValue = getFormattedValue(v, format)\r\n if (propertyData.value === newValue) return\r\n propertyData.value = newValue\r\n const el = routeElMap[route.name]\r\n if (el) {\r\n el[name] = newValue\r\n }\r\n hooks.forEach((hook) => {\r\n if (typeof hook.update === 'function') {\r\n hook.update(newValue, el)\r\n }\r\n })\r\n }\r\n propertiesData[name] = { hooks, set }\r\n hooks.forEach((hook) => {\r\n if (typeof hook.init === 'function') {\r\n hook.init(set)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n\r\nasync function resolveRoutes(routes) {\r\n const result = []\r\n\r\n for (const route of routes) {\r\n let el = route.options.reuse ? routeElMap[route.name] : undefined\r\n let Component = route.options.component\r\n if (!el && Component) {\r\n if (typeof Component === 'function' && !(Component.prototype instanceof HTMLElement)) {\r\n Component =\r\n routeComponentMap[route.name] ||\r\n (routeComponentMap[route.name] = resolveModule(await Component(route)))\r\n }\r\n el = typeof Component === 'string' ? document.createElement(Component) : new Component()\r\n routeElMap[route.name] = el\r\n el.$router = router\r\n }\r\n\r\n initProperties(route)\r\n\r\n result.push({ el, route })\r\n }\r\n return result\r\n}\r\n\r\nfunction applyProperties(el, route) {\r\n const propertiesData = routePropertiesMap[route.name]\r\n Object.entries(propertiesData).forEach(([name, { value }]) => {\r\n el[name] = value\r\n })\r\n}\r\n\r\nconst removedEls = new WeakSet()\r\nconst outletCurrentEl = new WeakMap()\r\n\r\nasync function renderElements(transition, activated, changingIndex) {\r\n // set properties of not activated elements\r\n const { path, pathname, routes, params, query } = transition\r\n const routeState = { path, pathname, routes, params, query }\r\n for (let k = 0; k < changingIndex; k++) {\r\n const route = transition.routes[k]\r\n const el = routeElMap[route.name]\r\n if (el) {\r\n el.$route = routeState\r\n applyProperties(el, route)\r\n }\r\n }\r\n for (let i = 0; i < activated.length; i++) {\r\n const { el, route } = activated[i]\r\n if (el) {\r\n const parentEl = getParentEl(transition, changingIndex + i - 1)\r\n const outletEl = parentEl ? getOutlet(parentEl) : resolveRootOutlet()\r\n if (outletEl) {\r\n const currentEl = outletCurrentEl.get(outletEl) || outletEl.firstElementChild\r\n if (currentEl) {\r\n outletEl.removeChild(currentEl)\r\n removedEls.add(currentEl)\r\n }\r\n el.$route = routeState\r\n applyProperties(el, route)\r\n outletEl.appendChild(el)\r\n outletCurrentEl.set(outletEl, el)\r\n await (el.updateComplete || resolved)\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction updateDOMTree(activated, deactivated) {\r\n let parentElRemoved\r\n for (let routeIndex = deactivated.length - 1; routeIndex >= 0; routeIndex--) {\r\n const { route, el } = deactivated[routeIndex]\r\n if (!activated.some(({ route: activeRoute }) => activeRoute.name === route.name)) {\r\n if (el) {\r\n // removes only the parent el from the deactivated els\r\n // and don't remove elements that were queued to be removed\r\n // necessary for lazy removal done in animations\r\n if (!parentElRemoved && !removedEls.has(el)) el.remove()\r\n parentElRemoved = true\r\n }\r\n routeElMap[route.name] = undefined\r\n }\r\n }\r\n}\r\n\r\nasync function resolve(transition) {\r\n const prevRoutes = transition.prev.routes\r\n const changingIndex = getChangingIndex(prevRoutes, transition.routes)\r\n const deactivated = []\r\n\r\n // deactivate previous routes from child to parent\r\n for (let routeIndex = prevRoutes.length - 1; routeIndex >= changingIndex; routeIndex--) {\r\n const route = prevRoutes[routeIndex]\r\n deactivated.push({ el: routeElMap[route.name], route })\r\n }\r\n\r\n await runLifeCycle(transition, deactivated, 'before', 'Leave')\r\n\r\n if (transition.isCancelled) return\r\n\r\n const activated = await resolveRoutes(transition.routes.slice(changingIndex))\r\n\r\n await runLifeCycle(transition, activated, 'before', 'Enter')\r\n\r\n if (transition.isCancelled) return\r\n\r\n runPropertyHookMethod(transition, activated, 'enter')\r\n\r\n await renderElements(transition, activated, changingIndex)\r\n\r\n updateDOMTree(activated, deactivated)\r\n\r\n transition.activated = activated\r\n transition.deactivated = deactivated\r\n}\r\n\r\nfunction done(transition) {\r\n runPropertyHookMethod(transition, transition.deactivated, 'leave')\r\n runLifeCycle(transition, transition.deactivated, 'after', 'Leave')\r\n runLifeCycle(transition, transition.activated, 'after', 'Enter')\r\n}\r\n\r\nexport const wc = {\r\n create,\r\n destroy,\r\n resolve,\r\n done,\r\n}\r\n","import { Router as CoreRouter, interceptLinks } from './router.js'\r\nimport { wc, fromParam, fromQuery, fromValue, getRouteEl } from './middlewares/wc.js'\r\nimport { routerLinks } from './middlewares/router-links.js'\r\nimport './components/router-links.js'\r\n\r\n/**\r\n * @typedef {import(\"./middlewares/wc.js\").WCRouteDef} WCRouteDef\r\n * @typedef {import(\"./middlewares/wc.js\").PropertyHook} PropertyHook\r\n * @typedef {import(\"./transition.js\").Transition} Transition\r\n */\r\n\r\nclass Router extends CoreRouter {\r\n constructor(options) {\r\n super(options)\r\n this.use(wc)\r\n this.use(routerLinks)\r\n }\r\n}\r\n\r\nexport { Router, interceptLinks, fromParam, fromQuery, fromValue, getRouteEl }\r\n","let eventPrefix\r\n\r\nfunction trigger(name, detail) {\r\n window.dispatchEvent(new CustomEvent(`${eventPrefix}${name}`, { detail }))\r\n}\r\n\r\nexport const events = {\r\n create: function (router) {\r\n eventPrefix = router.options.eventPrefix || 'router-'\r\n },\r\n\r\n before: function (transition) {\r\n trigger('before:transition', { transition })\r\n },\r\n\r\n done: function (transition) {\r\n trigger('transition', { transition })\r\n },\r\n\r\n cancel: function (transition, error) {\r\n if (error.type !== 'TransitionRedirected') {\r\n trigger('abort', { transition, error })\r\n }\r\n },\r\n\r\n error: function (transition, error) {\r\n trigger('abort', { transition, error })\r\n trigger('error', { transition, error })\r\n },\r\n}\r\n","import { interceptLinks, Router } from 'slick-router';\n//import {Router as CoreRouter, interceptLinks} from 'slick-router/core.js';\nimport { events } from 'slick-router/middlewares/events.js';\n\nimport { default as WJElement } from '../wje-element/element.js';\n\n/**\n * `Routerx` is a custom web component that represents a router in a routing system.\n * @summary This element represents a router in a routing system.\n * @documentation https://elements.webjet.sk/components/router\n * @status stable\n * @augments {WJElement}\n * @tag wje-router\n */\nexport default class Routerx extends WJElement {\n /**\n * Creates an instance of Routerx.\n * @class\n */\n constructor() {\n super();\n }\n\n className = 'Routerx';\n\n /**\n * Returns the list of attributes to observe for changes.\n * @static\n * @returns {Array<string>}\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Sets up the router after the component is drawn.\n */\n beforeDraw() {\n const htmlString = this.outerHTML;\n\n const parser = new DOMParser();\n const htmlDocument = parser.parseFromString(htmlString, 'text/html');\n const rootElement = htmlDocument.querySelector('wje-router');\n\n const routes = this.data ? this.data : this.parseElement(rootElement).root;\n\n this.router = new Router({\n outlet: this.outlet || 'wje-router-outlet',\n log: false,\n logError: true,\n root: this.root || '/',\n pushState: true,\n });\n\n this.router.map(routes);\n this.router.use(this.setBreadcrumb);\n this.router.use(events);\n this.router.use(this.resetScrollPosition);\n this.router.listen();\n\n this.unbindIntercept = interceptLinks(this.router);\n }\n\n /**\n * Parses an element and returns an object representation.\n * @param {Element} element The element to parse.\n * @returns {object} The object representation of the element.\n */\n parseElement(element) {\n const obj = {};\n const attributes = element.attributes;\n\n for (let i = 0; i < attributes.length; i++) {\n const attributeName = attributes[i].name;\n const attributeValue = attributes[i].value;\n\n if (attributeName === 'component' && attributeValue.indexOf('.js') > -1) {\n // eslint-disable-next-line jsdoc/no-bad-blocks\n obj.component = () => import(/* @vite-ignore */ attributeValue);\n } else {\n if (attributeName !== 'shadow') {\n const camelCase = attributeName.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n obj[camelCase] = attributeValue;\n }\n }\n }\n\n const children = [];\n const childElements = Array.from(element.children);\n\n childElements.forEach((childElement) => {\n children.push(this.parseElement(childElement));\n });\n\n if (children.length > 0 && element.tagName === 'WJE-ROUTE') {\n obj.children = children;\n } else {\n obj.root = children;\n }\n\n return obj;\n }\n\n /**\n * Sets the breadcrumb for the transition.\n * @param {object} transition The transition object.\n */\n setBreadcrumb = (transition) => {\n let breadcrumb = [\n ...transition.routes\n .filter((obj) => 'breadcrumb' in obj.options)\n .map((b, i) => {\n return {\n name: b.options.breadcrumbPath || b.name,\n text:\n b.options.breadcrumb instanceof Function\n ? b.options.breadcrumb?.(transition)\n : b.options.breadcrumb,\n params: { ...b.params, ...transition.params },\n path: this.router.generate(b.name, { ...b.params, ...transition.params }),\n };\n }),\n ];\n\n transition.breadcrumbs = breadcrumb;\n };\n\n /**\n * Resets the scroll position.\n * @param {object} transition The transition object.\n */\n resetScrollPosition = (transition) => {\n window.scrollTo(0, 0);\n };\n\n /**\n * Cleans up before the component is disconnected.\n */\n beforeDisconnect() {\n this.unbindIntercept();\n this.router.destroy();\n }\n}\n","import Routerx from './router.element.js';\n\nexport default Routerx;\n\nRouterx.define('wje-router', Routerx);\n"],"names":["isEqual","qs","LocationBar","router","transition","resolve","el","keys","routes","patternCompiler","Router","CoreRouter"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}
|
|
1
|
+
{"version":3,"file":"wje-routerx.js","sources":["../node_modules/slick-router/lib/utils.js","../node_modules/slick-router/lib/invariant.js","../node_modules/slick-router/lib/function-dsl.js","../node_modules/slick-router/lib/array-dsl.js","../node_modules/slick-router/lib/path.js","../node_modules/slick-router/lib/events.js","../node_modules/slick-router/lib/locations/location-bar.js","../node_modules/slick-router/lib/locations/browser.js","../node_modules/slick-router/lib/locations/memory.js","../node_modules/slick-router/lib/constants.js","../node_modules/slick-router/lib/transition.js","../node_modules/slick-router/lib/links.js","../node_modules/slick-router/lib/logger.js","../node_modules/slick-router/lib/qs.js","../node_modules/regexparam/dist/index.mjs","../node_modules/slick-router/lib/patternCompiler.js","../node_modules/slick-router/lib/router.js","../node_modules/slick-router/lib/middlewares/wc.js","../node_modules/slick-router/lib/wc-router.js","../node_modules/slick-router/lib/middlewares/events.js","../packages/wje-router/router.element.js","../packages/wje-router/router.js"],"sourcesContent":["const assoc = (obj, attr, val) => {\r\n obj[attr] = val\r\n return obj\r\n}\r\nconst isArray = Array.isArray\r\n\r\nexport const keys = Object.keys\r\n\r\nexport const clone = (obj) => (obj ? (isArray(obj) ? obj.slice(0) : extend({}, obj)) : obj)\r\n\r\nexport const pick = (obj, attrs) =>\r\n attrs.reduce((acc, attr) => (obj[attr] === undefined ? acc : assoc(acc, attr, obj[attr])), {})\r\n\r\nexport const isEqual = (obj1, obj2) => {\r\n const keys1 = keys(obj1)\r\n return keys1.length === keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\r\n}\r\n\r\nexport const extend = Object.assign\r\n","export default function invariant(condition, format, ...args) {\r\n if (!condition) {\r\n let argIndex = 0\r\n throw new Error('Invariant Violation: ' + format.replace(/%s/g, () => args[argIndex++]))\r\n }\r\n}\r\n","import invariant from './invariant.js'\r\n\r\n/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @callback registerRoute\r\n * @param {string} name\r\n * @param {Object} options\r\n * @param {routeCallback} childrenCallback\r\n */\r\n\r\n/**\r\n * @callback routeCallback\r\n * @param {registerRoute} route\r\n */\r\n\r\n/**\r\n * @export\r\n * @param {routeCallback} callback\r\n * @return {Route[]}\r\n */\r\nexport default function functionDsl(callback) {\r\n let ancestors = []\r\n const matches = {}\r\n const names = {}\r\n\r\n callback(function route(name, options, childrenCallback) {\r\n let routes\r\n\r\n invariant(\r\n !names[name],\r\n 'Route names must be unique, but route \"%s\" is declared multiple times',\r\n name,\r\n )\r\n\r\n names[name] = true\r\n\r\n if (arguments.length === 1) {\r\n options = {}\r\n }\r\n\r\n if (arguments.length === 2 && typeof options === 'function') {\r\n childrenCallback = options\r\n options = {}\r\n }\r\n\r\n if (typeof options.path !== 'string') {\r\n const parts = name.split('.')\r\n options.path = parts[parts.length - 1]\r\n }\r\n\r\n // go to the next level\r\n if (childrenCallback) {\r\n ancestors = ancestors.concat(name)\r\n childrenCallback()\r\n routes = pop()\r\n ancestors.splice(-1)\r\n }\r\n\r\n // add the node to the tree\r\n push({\r\n name,\r\n path: options.path,\r\n routes: routes || [],\r\n options,\r\n })\r\n })\r\n\r\n function pop() {\r\n return matches[currentLevel()] || []\r\n }\r\n\r\n function push(route) {\r\n const level = currentLevel()\r\n matches[level] = matches[level] || []\r\n matches[level].push(route)\r\n }\r\n\r\n function currentLevel() {\r\n return ancestors.join('.')\r\n }\r\n\r\n return pop()\r\n}\r\n","/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @typedef RouteDef\r\n * @property {string} name\r\n * @property {string} path\r\n * @property {RouteDef[]} children\r\n */\r\n\r\n/**\r\n * @export\r\n * @param {RouteDef[]} routes\r\n * @return {Route[]}\r\n */\r\nexport default function arrayDsl(routes) {\r\n const result = []\r\n\r\n routes.forEach(({ name, children, ...options }) => {\r\n if (typeof options.path !== 'string') {\r\n const parts = name.split('.')\r\n options.path = parts[parts.length - 1]\r\n }\r\n result.push({\r\n name,\r\n path: options.path,\r\n options,\r\n routes: children ? arrayDsl(children) : [],\r\n })\r\n })\r\n\r\n return result\r\n}\r\n","import invariant from './invariant.js'\r\n\r\nconst paramInjectMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$?]*[?+*]?)/g\r\nconst specialParamChars = /[+*?]$/g\r\nconst queryMatcher = /\\?(.+)/\r\n\r\nconst _compiledPatterns = {}\r\n\r\nfunction compilePattern(pattern, compiler) {\r\n if (!(pattern in _compiledPatterns)) {\r\n _compiledPatterns[pattern] = compiler(pattern)\r\n }\r\n\r\n return _compiledPatterns[pattern]\r\n}\r\n\r\nexport function clearPatternCompilerCache() {\r\n for (const x in _compiledPatterns) {\r\n delete _compiledPatterns[x]\r\n }\r\n}\r\n\r\n/**\r\n * Returns an array of the names of all parameters in the given pattern.\r\n */\r\nexport function extractParamNames(pattern, compiler) {\r\n return compilePattern(pattern, compiler).paramNames\r\n}\r\n\r\n/**\r\n * Extracts the portions of the given URL path that match the given pattern\r\n * and returns an object of param name => value pairs. Returns null if the\r\n * pattern does not match the given path.\r\n */\r\nexport function extractParams(pattern, path, compiler) {\r\n const cp = compilePattern(pattern, compiler)\r\n const matcher = cp.matcher\r\n const paramNames = cp.paramNames\r\n const match = path.match(matcher)\r\n\r\n if (!match) {\r\n return null\r\n }\r\n\r\n const params = {}\r\n\r\n paramNames.forEach(function (paramName, index) {\r\n params[paramName] = match[index + 1] && decodeURIComponent(match[index + 1])\r\n })\r\n\r\n return params\r\n}\r\n\r\n/**\r\n * Returns a version of the given route path with params interpolated. Throws\r\n * if there is a dynamic segment of the route path for which there is no param.\r\n */\r\nexport function injectParams(pattern, params) {\r\n params = params || {}\r\n\r\n return pattern.replace(paramInjectMatcher, function (match, param) {\r\n const paramName = param.replace(specialParamChars, '')\r\n const lastChar = param.slice(-1)\r\n\r\n // If param is optional don't check for existence\r\n if (lastChar === '?' || lastChar === '*') {\r\n if (params[paramName] == null) {\r\n return ''\r\n }\r\n } else {\r\n invariant(\r\n params[paramName] != null,\r\n \"Missing '%s' parameter for path '%s'\",\r\n paramName,\r\n pattern,\r\n )\r\n }\r\n\r\n let paramValue = encodeURIComponent(params[paramName])\r\n if (lastChar === '*' || lastChar === '+') {\r\n // restore / for splats\r\n paramValue = paramValue.replace('%2F', '/')\r\n }\r\n return paramValue\r\n })\r\n}\r\n\r\n/**\r\n * Returns an object that is the result of parsing any query string contained\r\n * in the given path, null if the path contains no query string.\r\n */\r\nexport function extractQuery(qs, path) {\r\n const match = path.match(queryMatcher)\r\n return match && qs.parse(match[1])\r\n}\r\n\r\n/**\r\n * Returns a version of the given path with the parameters in the given\r\n * query merged into the query string.\r\n */\r\nexport function withQuery(qs, path, query) {\r\n const queryString = qs.stringify(query, { indices: false })\r\n\r\n if (queryString) {\r\n return withoutQuery(path) + '?' + queryString\r\n }\r\n\r\n return path\r\n}\r\n\r\n/**\r\n * Returns a version of the given path without the query string.\r\n */\r\nexport function withoutQuery(path) {\r\n return path.replace(queryMatcher, '')\r\n}\r\n","/**\r\n * Bind `el` event `type` to `fn`.\r\n *\r\n * @param {Element} el\r\n * @param {String} type\r\n * @param {Function} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nexport function bindEvent(el, type, fn) {\r\n el.addEventListener(type, fn)\r\n return fn\r\n}\r\n\r\n/**\r\n * Unbind `el` event `type`'s callback `fn`.\r\n *\r\n * @param {Element} el\r\n * @param {String} type\r\n * @param {Function} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nexport function unbindEvent(el, type, fn) {\r\n el.removeEventListener(type, fn)\r\n return fn\r\n}\r\n","/* eslint-disable */\r\n// LocationBar module extracted from Backbone.js 1.1.0\r\n//\r\n// the dependency on backbone, underscore and jquery have been removed to turn\r\n// this into a small standalone library for handling browser's history API\r\n// cross browser and with a fallback to hashchange events or polling.\r\n\r\nimport {extend} from '../utils.js'\r\nimport {bindEvent, unbindEvent} from '../events.js'\r\n\r\n// this is mostly original code with minor modifications\r\n// to avoid dependency on 3rd party libraries\r\n//\r\n// Backbone.History\r\n// ----------------\r\n\r\n// Handles cross-browser history management, based on either\r\n// [pushState](http://diveintohtml5.info/history.html) and real URLs, or\r\n// [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\r\n// and URL fragments.\r\nclass History {\r\n constructor() {\r\n this.handlers = [];\r\n this.checkUrl = this.checkUrl.bind(this);\r\n this.location = window.location;\r\n this.history = window.history;\r\n }\r\n\r\n // Set up all inheritable **Backbone.History** properties and methods.\r\n // Are we at the app root?\r\n atRoot() {\r\n return this.location.pathname.replace(/[^\\/]$/, '$&/') === this.root;\r\n }\r\n\r\n // Gets the true hash value. Cannot use location.hash directly due to bug\r\n // in Firefox where location.hash will always be decoded.\r\n getHash() {\r\n const match = this.location.href.match(/#(.*)$/);\r\n return match ? match[1] : '';\r\n }\r\n\r\n // Get the cross-browser normalized URL fragment, either from the URL,\r\n // the hash, or the override.\r\n getFragment(fragment, forcePushState) {\r\n if (fragment == null) {\r\n if (this._hasPushState || !this._wantsHashChange || forcePushState) {\r\n fragment = decodeURI(this.location.pathname + this.location.search);\r\n const root = this.root.replace(trailingSlash, '');\r\n if (!fragment.indexOf(root)) fragment = fragment.slice(root.length);\r\n } else {\r\n fragment = this.getHash();\r\n }\r\n }\r\n return fragment.replace(routeStripper, '');\r\n }\r\n\r\n // Start the hash change handling, returning `true` if the current URL matches\r\n // an existing route, and `false` otherwise.\r\n start(options = {}) {\r\n // MODIFICATION OF ORIGINAL BACKBONE.HISTORY\r\n // if (History.started) throw new Error(\"LocationBar has already been started\");\r\n // History.started = true;\r\n this.started = true;\r\n\r\n // Figure out the initial configuration.\r\n // Is pushState desired ... is it available?\r\n this.options = extend({root: '/'}, options);\r\n this.location = this.options.location || this.location;\r\n this.history = this.options.history || this.history;\r\n this.root = this.options.root;\r\n this._wantsHashChange = this.options.hashChange !== false;\r\n this._wantsPushState = !!this.options.pushState;\r\n this._hasPushState = this._wantsPushState;\r\n const fragment = this.getFragment();\r\n\r\n // Normalize root to always include a leading and trailing slash.\r\n this.root = (`/${this.root}/`).replace(rootStripper, '/');\r\n\r\n // Depending on whether we're using pushState or hashes, and whether\r\n // 'onhashchange' is supported, determine how we check the URL state.\r\n bindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\r\n\r\n // Determine if we need to change the base url, for a pushState link\r\n // opened by a non-pushState browser.\r\n this.fragment = fragment;\r\n const loc = this.location;\r\n\r\n // Transition from hashChange to pushState or vice versa if both are\r\n // requested.\r\n if (this._wantsHashChange && this._wantsPushState) {\r\n\r\n // If we've started off with a route from a `pushState`-enabled\r\n // browser, but we're currently in a browser that doesn't support it...\r\n if (!this._hasPushState && !this.atRoot()) {\r\n this.fragment = this.getFragment(null, true);\r\n this.location.replace(`${this.root}#${this.fragment}`);\r\n // Return immediately as browser will do redirect to new url\r\n return true;\r\n\r\n // Or if we've started out with a hash-based route, but we're currently\r\n // in a browser where it could be `pushState`-based instead...\r\n } else if (this._hasPushState && this.atRoot() && loc.hash) {\r\n this.fragment = this.getHash().replace(routeStripper, '');\r\n this.history.replaceState({}, document.title, this.root + this.fragment);\r\n }\r\n\r\n }\r\n\r\n if (!this.options.silent) return this.loadUrl();\r\n }\r\n\r\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\r\n // but possibly useful for unit testing Routers.\r\n stop() {\r\n unbindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\r\n this.started = false;\r\n }\r\n\r\n // Add a route to be tested when the fragment changes. Routes added later\r\n // may override previous routes.\r\n route(route, callback) {\r\n this.handlers.unshift({route, callback});\r\n }\r\n\r\n // Checks the current URL to see if it has changed, and if it has,\r\n // calls `loadUrl`.\r\n checkUrl() {\r\n const current = this.getFragment();\r\n if (current === this.fragment) return false;\r\n this.loadUrl();\r\n }\r\n\r\n // Attempt to load the current URL fragment. If a route succeeds with a\r\n // match, returns `true`. If no defined routes matches the fragment,\r\n // returns `false`.\r\n loadUrl(fragment) {\r\n fragment = this.fragment = this.getFragment(fragment);\r\n return this.handlers.some(handler => {\r\n if (handler.route.test(fragment)) {\r\n handler.callback(fragment);\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n // Save a fragment into the hash history, or replace the URL state if the\r\n // 'replace' option is passed. You are responsible for properly URL-encoding\r\n // the fragment in advance.\r\n //\r\n // The options object can contain `trigger: true` if you wish to have the\r\n // route callback be fired (not usually desirable), or `replace: true`, if\r\n // you wish to modify the current URL without adding an entry to the history.\r\n update(fragment, options) {\r\n if (!this.started) return false;\r\n if (!options || options === true) options = {trigger: !!options};\r\n\r\n let url = this.root + (fragment = this.getFragment(fragment || ''));\r\n\r\n // Strip the hash for matching.\r\n fragment = fragment.replace(pathStripper, '');\r\n\r\n if (this.fragment === fragment) return;\r\n this.fragment = fragment;\r\n\r\n // Don't include a trailing slash on the root.\r\n if (fragment === '' && url !== '/') url = url.slice(0, -1);\r\n\r\n // If pushState is available, we use it to set the fragment as a real URL.\r\n if (this._hasPushState) {\r\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\r\n\r\n // If hash changes haven't been explicitly disabled, update the hash\r\n // fragment to store history.\r\n } else if (this._wantsHashChange) {\r\n this._updateHash(this.location, fragment, options.replace);\r\n // If you've told us that you explicitly don't want fallback hashchange-\r\n // based history, then `update` becomes a page refresh.\r\n } else {\r\n return this.location.assign(url);\r\n }\r\n if (options.trigger) return this.loadUrl(fragment);\r\n }\r\n\r\n // Update the hash location, either replacing the current entry, or adding\r\n // a new one to the browser history.\r\n _updateHash(location, fragment, replace) {\r\n if (replace) {\r\n const href = location.href.replace(/(javascript:|#).*$/, '');\r\n location.replace(`${href}#${fragment}`);\r\n } else {\r\n // Some browsers require that `hash` contains a leading #.\r\n location.hash = `#${fragment}`;\r\n }\r\n }\r\n\r\n // add some features to History\r\n\r\n // a generic callback for any changes\r\n onChange(callback) {\r\n this.route(/^(.*?)$/, callback);\r\n }\r\n\r\n // checks if the browser has pushstate support\r\n hasPushState() {\r\n // MODIFICATION OF ORIGINAL BACKBONE.HISTORY\r\n if (!this.started) {\r\n throw new Error(\"only available after LocationBar.start()\");\r\n }\r\n return this._hasPushState;\r\n }\r\n}\r\n\r\n// Cached regex for stripping a leading hash/slash and trailing space.\r\nconst routeStripper = /^[#\\/]|\\s+$/g;\r\n\r\n// Cached regex for stripping leading and trailing slashes.\r\nconst rootStripper = /^\\/+|\\/+$/g;\r\n\r\n// Cached regex for removing a trailing slash.\r\nconst trailingSlash = /\\/$/;\r\n\r\n// Cached regex for stripping urls of hash.\r\nconst pathStripper = /#.*$/;\r\n\r\n\r\n// export\r\nexport default History;\r\n","import { extend } from '../utils.js'\r\nimport LocationBar from './location-bar.js'\r\n\r\nclass BrowserLocation {\r\n constructor(options = {}) {\r\n this.path = options.path || ''\r\n\r\n this.options = extend(\r\n {\r\n pushState: false,\r\n root: '/',\r\n },\r\n options,\r\n )\r\n\r\n // we're using the location-bar module for actual\r\n // URL management\r\n this.locationBar = new LocationBar()\r\n this.locationBar.onChange((path) => {\r\n this.handleURL(`/${path || ''}`)\r\n })\r\n\r\n this.locationBar.start(options)\r\n }\r\n\r\n /**\r\n * Get the current URL\r\n */\r\n\r\n getURL() {\r\n return this.path\r\n }\r\n\r\n /**\r\n * Set the current URL without triggering any events\r\n * back to the router. Add a new entry in browser's history.\r\n */\r\n\r\n setURL(path, options = {}) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.locationBar.update(path, extend({ trigger: true }, options))\r\n }\r\n }\r\n\r\n /**\r\n * Set the current URL without triggering any events\r\n * back to the router. Replace the latest entry in broser's history.\r\n */\r\n\r\n replaceURL(path, options = {}) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.locationBar.update(path, extend({ trigger: true, replace: true }, options))\r\n }\r\n }\r\n\r\n /**\r\n * Setup a URL change handler\r\n * @param {Function} callback\r\n */\r\n onChange(callback) {\r\n this.changeCallback = callback\r\n }\r\n\r\n /**\r\n * Given a path, generate a URL appending root\r\n * if pushState is used and # if hash state is used\r\n */\r\n formatURL(path) {\r\n if (this.locationBar.hasPushState()) {\r\n let rootURL = this.options.root\r\n if (path !== '') {\r\n rootURL = rootURL.replace(/\\/$/, '')\r\n }\r\n return rootURL + path\r\n } else {\r\n if (path[0] === '/') {\r\n path = path.substr(1)\r\n }\r\n return `#${path}`\r\n }\r\n }\r\n\r\n /**\r\n * When we use pushState with a custom root option,\r\n * we need to take care of removingRoot at certain points.\r\n * Specifically\r\n * - browserLocation.update() can be called with the full URL by router\r\n * - LocationBar expects all .update() calls to be called without root\r\n * - this method is public so that we could dispatch URLs without root in router\r\n */\r\n removeRoot(url) {\r\n if (this.options.pushState && this.options.root && this.options.root !== '/') {\r\n return url.replace(this.options.root, '')\r\n } else {\r\n return url\r\n }\r\n }\r\n\r\n /**\r\n * Stop listening to URL changes and link clicks\r\n */\r\n destroy() {\r\n this.locationBar.stop()\r\n }\r\n\r\n /**\r\n initially, the changeCallback won't be defined yet, but that's good\r\n because we dont' want to kick off routing right away, the router\r\n does that later by manually calling this handleURL method with the\r\n url it reads of the location. But it's important this is called\r\n first by Backbone, because we wanna set a correct this.path value\r\n\r\n @private\r\n */\r\n handleURL(url) {\r\n this.path = url\r\n if (this.changeCallback) {\r\n this.changeCallback(url)\r\n }\r\n }\r\n}\r\n\r\nexport default BrowserLocation\r\n","import { extend } from '../utils.js'\r\n\r\nclass MemoryLocation {\r\n constructor({ path }) {\r\n this.path = path || ''\r\n }\r\n\r\n getURL() {\r\n return this.path\r\n }\r\n\r\n setURL(path, options) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.handleURL(this.getURL(), options)\r\n }\r\n }\r\n\r\n replaceURL(path, options) {\r\n if (this.path !== path) {\r\n this.setURL(path, options)\r\n }\r\n }\r\n\r\n onChange(callback) {\r\n this.changeCallback = callback\r\n }\r\n\r\n handleURL(url, options = {}) {\r\n this.path = url\r\n options = extend({ trigger: true }, options)\r\n if (this.changeCallback && options.trigger) {\r\n this.changeCallback(url)\r\n }\r\n }\r\n\r\n removeRoot(url) {\r\n return url\r\n }\r\n\r\n formatURL(url) {\r\n return url\r\n }\r\n}\r\n\r\nexport default MemoryLocation\r\n","export const TRANSITION_REDIRECTED = 'TransitionRedirected'\r\n\r\nexport const TRANSITION_CANCELLED = 'TransitionCancelled'\r\n","import { clone } from './utils.js'\r\nimport invariant from './invariant.js'\r\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\r\n\r\n/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @typedef {Pick<Transition, 'routes' | 'pathname' | 'path' | 'params' | 'query' >} TransitionData\r\n */\r\n\r\n/**\r\n * @typedef Transition\r\n * @property {Route[]} routes\r\n * @property {string} pathname\r\n * @property {string} path\r\n * @property {Object} params\r\n * @property {Object} query\r\n * @property {TransitionData} prev\r\n * @property {(name: string, params?: any, query?: any) => Transition} redirectTo\r\n * @property {(name: string, params?: any, query?: any) => Transition} retry\r\n * @property {(error: string | Error) => void} cancel\r\n * @property {() => Promise<any>} followRedirects\r\n * @property {function} then\r\n * @property {function} catch\r\n * @property {boolean} noop\r\n * @property {boolean} isCancelled\r\n */\r\n\r\n/**\r\n * @param {*} router\r\n * @param {Transition} transition\r\n * @param {*} err\r\n */\r\nfunction runError(router, transition, err) {\r\n router.middleware.forEach((m) => {\r\n m.error && m.error(transition, err)\r\n })\r\n}\r\n\r\n/**\r\n * @export\r\n * @param {*} options\r\n * @return {Transition}\r\n */\r\nexport default function transition(options) {\r\n options = options || {}\r\n\r\n const router = options.router\r\n const log = router.log\r\n const logError = router.logError\r\n\r\n const path = options.path\r\n const match = options.match\r\n const routes = match.routes\r\n const params = match.params\r\n const pathname = match.pathname\r\n const query = match.query\r\n\r\n const id = options.id\r\n const startTime = Date.now()\r\n log('---')\r\n log('Transition #' + id, 'to', path)\r\n log(\r\n 'Transition #' + id,\r\n 'routes:',\r\n routes.map((r) => r.name),\r\n )\r\n log('Transition #' + id, 'params:', params)\r\n log('Transition #' + id, 'query:', query)\r\n\r\n // create the transition promise\r\n let resolve, reject\r\n const promise = new Promise(function (res, rej) {\r\n resolve = res\r\n reject = rej\r\n })\r\n\r\n // 1. make transition errors loud\r\n // 2. by adding this handler we make sure\r\n // we don't trigger the default 'Potentially\r\n // unhandled rejection' for cancellations\r\n promise\r\n .then(function () {\r\n log('Transition #' + id, 'completed in', Date.now() - startTime + 'ms')\r\n })\r\n .catch(function (err) {\r\n if (err.type !== TRANSITION_REDIRECTED && err.type !== TRANSITION_CANCELLED) {\r\n log('Transition #' + id, 'FAILED')\r\n logError(err)\r\n }\r\n })\r\n\r\n let cancelled = false\r\n\r\n const transition = {\r\n id,\r\n prev: {\r\n routes: clone(router.state.routes) || [],\r\n path: router.state.path || '',\r\n pathname: router.state.pathname || '',\r\n params: clone(router.state.params) || {},\r\n query: clone(router.state.query) || {},\r\n },\r\n routes: clone(routes),\r\n path,\r\n pathname,\r\n params: clone(params),\r\n query: clone(query),\r\n redirectTo: function (...args) {\r\n return router.transitionTo(...args)\r\n },\r\n retry: function () {\r\n return router.transitionTo(path)\r\n },\r\n cancel: function (err) {\r\n if (router.state.activeTransition !== transition) {\r\n return\r\n }\r\n\r\n if (transition.isCancelled) {\r\n return\r\n }\r\n\r\n router.state.activeTransition = null\r\n transition.isCancelled = true\r\n cancelled = true\r\n\r\n if (!err) {\r\n err = new Error(TRANSITION_CANCELLED)\r\n err.type = TRANSITION_CANCELLED\r\n }\r\n if (err.type === TRANSITION_CANCELLED) {\r\n log('Transition #' + id, 'cancelled')\r\n }\r\n if (err.type === TRANSITION_REDIRECTED) {\r\n log('Transition #' + id, 'redirected')\r\n }\r\n\r\n router.middleware.forEach((m) => {\r\n m.cancel && m.cancel(transition, err)\r\n })\r\n reject(err)\r\n },\r\n followRedirects: function () {\r\n return promise.catch(function (reason) {\r\n if (router.state.activeTransition) {\r\n return router.state.activeTransition.followRedirects()\r\n }\r\n return Promise.reject(reason)\r\n })\r\n },\r\n\r\n then: promise.then.bind(promise),\r\n catch: promise.catch.bind(promise),\r\n }\r\n\r\n router.middleware.forEach((m) => {\r\n m.before && m.before(transition)\r\n })\r\n\r\n // here we handle calls to all of the middlewares\r\n function callNext(i, prevResult) {\r\n let middleware\r\n let middlewareName\r\n // if transition has been cancelled - nothing left to do\r\n if (cancelled) {\r\n return\r\n }\r\n // done\r\n if (i < router.middleware.length) {\r\n middleware = router.middleware[i]\r\n middlewareName = middleware.name || 'anonymous'\r\n log('Transition #' + id, 'resolving middleware:', middlewareName)\r\n let middlewarePromise\r\n try {\r\n middlewarePromise = middleware.resolve\r\n ? middleware.resolve(transition, prevResult)\r\n : prevResult\r\n invariant(\r\n transition !== middlewarePromise,\r\n 'Middleware %s returned a transition which resulted in a deadlock',\r\n middlewareName,\r\n )\r\n } catch (err) {\r\n router.state.activeTransition = null\r\n runError(router, transition, err)\r\n return reject(err)\r\n }\r\n Promise.resolve(middlewarePromise)\r\n .then(function (result) {\r\n callNext(i + 1, result)\r\n })\r\n .catch(function (err) {\r\n log('Transition #' + id, 'resolving middleware:', middlewareName, 'FAILED')\r\n router.state.activeTransition = null\r\n runError(router, transition, err)\r\n reject(err)\r\n })\r\n } else {\r\n router.state = {\r\n activeTransition: null,\r\n routes,\r\n path,\r\n pathname,\r\n params,\r\n query,\r\n }\r\n router.middleware.forEach((m) => {\r\n m.done && m.done(transition)\r\n })\r\n resolve()\r\n }\r\n }\r\n\r\n if (!options.noop) {\r\n Promise.resolve().then(() => callNext(0))\r\n } else {\r\n resolve()\r\n }\r\n\r\n if (options.noop) {\r\n transition.noop = true\r\n }\r\n\r\n return transition\r\n}\r\n","import { bindEvent, unbindEvent } from './events.js'\r\n\r\n/**\r\n * Handle link delegation on `el` or the document,\r\n * and invoke `fn(e)` when clickable.\r\n *\r\n * @param {Element} el\r\n * @param {(e: Event, el: HTMLElement) => void} fn\r\n * @return {Function} dispose\r\n * @api public\r\n */\r\n\r\nexport function intercept(el, fn) {\r\n const cb = delegate(el, 'click', function (e, el) {\r\n if (clickable(e, el)) fn(e, el)\r\n })\r\n\r\n return function dispose() {\r\n unbindEvent(el, 'click', cb)\r\n }\r\n}\r\n\r\n/**\r\n * Delegate event `type` to links\r\n * and invoke `fn(e)`. A callback function\r\n * is returned which may be passed to `.unbind()`.\r\n *\r\n * @param {HTMLElement} el\r\n * @param {String} selector\r\n * @param {String} type\r\n * @param {(e: Event, el: HTMLElement) => void} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nfunction delegate(el, type, fn) {\r\n return bindEvent(el, type, function (e) {\r\n const el = e.target.closest('a')\r\n if (el) {\r\n fn(e, el)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Check if `e` is clickable.\r\n */\r\n\r\n/**\r\n * @param {Event} e\r\n * @param {HTMLElement} el\r\n * @return {Boolean | undefined}\r\n */\r\nfunction clickable(e, el) {\r\n if (which(e) !== 1) return\r\n if (e.metaKey || e.ctrlKey || e.shiftKey) return\r\n if (e.defaultPrevented) return\r\n\r\n // check target\r\n if (el.target) return\r\n\r\n // check for data-bypass attribute\r\n if (el.getAttribute('data-bypass') !== null) return\r\n\r\n // inspect the href\r\n const href = el.getAttribute('href')\r\n if (!href || href.length === 0) return\r\n\r\n // don't handle hash links, external/absolute links, email links and javascript links\r\n if (/^(#|https{0,1}:\\/\\/|mailto|javascript:)/i.test(href)) return\r\n\r\n return true\r\n}\r\n\r\n/**\r\n * Event button.\r\n */\r\n\r\nfunction which(e) {\r\n e = e || window.event\r\n return e.which === null ? e.button : e.which\r\n}\r\n","export default function defineLogger(router, method, fn) {\r\n if (fn === true) return\r\n router[method] = typeof fn === 'function' ? fn : () => {}\r\n}\r\n","export default {\r\n parse(querystring) {\r\n return querystring.split('&').reduce((acc, pair) => {\r\n const parts = pair.split('=')\r\n acc[parts[0]] = decodeURIComponent(parts[1])\r\n return acc\r\n }, {})\r\n },\r\n\r\n stringify(params) {\r\n return Object.keys(params)\r\n .reduce((acc, key) => {\r\n if (params[key] !== undefined) {\r\n acc.push(key + '=' + encodeURIComponent(params[key]))\r\n }\r\n return acc\r\n }, [])\r\n .join('&')\r\n },\r\n}\r\n","/**\n * @param {string|RegExp} input The route pattern\n * @param {boolean} [loose] Allow open-ended matching. Ignored with `RegExp` input.\n */\nexport function parse(input, loose) {\n\tif (input instanceof RegExp) return { keys:false, pattern:input };\n\tvar c, o, tmp, ext, keys=[], pattern='', arr = input.split('/');\n\tarr[0] || arr.shift();\n\n\twhile (tmp = arr.shift()) {\n\t\tc = tmp[0];\n\t\tif (c === '*') {\n\t\t\tkeys.push(c);\n\t\t\tpattern += tmp[1] === '?' ? '(?:/(.*))?' : '/(.*)';\n\t\t} else if (c === ':') {\n\t\t\to = tmp.indexOf('?', 1);\n\t\t\text = tmp.indexOf('.', 1);\n\t\t\tkeys.push( tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length) );\n\t\t\tpattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';\n\t\t\tif (!!~ext) pattern += (!!~o ? '?' : '') + '\\\\' + tmp.substring(ext);\n\t\t} else {\n\t\t\tpattern += '/' + tmp;\n\t\t}\n\t}\n\n\treturn {\n\t\tkeys: keys,\n\t\tpattern: new RegExp('^' + pattern + (loose ? '(?=$|\\/)' : '\\/?$'), 'i')\n\t};\n}\n\nvar RGX = /(\\/|^)([:*][^/]*?)(\\?)?(?=[/.]|$)/g;\n\n// error if key missing?\nexport function inject(route, values) {\n\treturn route.replace(RGX, (x, lead, key, optional) => {\n\t\tx = values[key=='*' ? key : key.substring(1)];\n\t\treturn x ? '/'+x : (optional || key=='*') ? '' : '/' + key;\n\t});\n}\n","import { parse } from 'regexparam'\r\n\r\nconst splatRegex = /:(\\w+)\\*/\r\n\r\nexport function patternCompiler(pattern) {\r\n // hack to add (partial) named splat support\r\n const splatMatch = splatRegex.exec(pattern)\r\n const normalizedPattern = splatMatch ? pattern.replace(splatRegex, '*') : pattern\r\n\r\n const { pattern: matcher, keys } = parse(normalizedPattern)\r\n\r\n const paramNames = splatMatch ? keys.map((key) => (key === '*' ? splatMatch[1] : key)) : keys\r\n\r\n return {\r\n matcher,\r\n paramNames,\r\n }\r\n}\r\n","/* eslint-disable array-callback-return */\r\nimport { pick, clone, extend, isEqual, keys } from './utils.js'\r\nimport functionDsl from './function-dsl.js'\r\nimport arrayDsl from './array-dsl.js'\r\nimport {\r\n withQuery,\r\n withoutQuery,\r\n injectParams,\r\n extractParams,\r\n extractParamNames,\r\n extractQuery,\r\n} from './path.js'\r\nimport invariant from './invariant.js'\r\nimport BrowserLocation from './locations/browser.js'\r\nimport MemoryLocation from './locations/memory.js'\r\nimport transition from './transition.js'\r\nimport { intercept } from './links.js'\r\nimport defineLogger from './logger.js'\r\nimport qs from './qs.js'\r\nimport { patternCompiler } from './patternCompiler.js'\r\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\r\n\r\n/**\r\n * @typedef {import('./function-dsl.js').routeCallback} routeCallback\r\n * @typedef {import('./array-dsl.js').RouteDef} RouteDef\r\n * @typedef {import('./transition.js').Transition} Transition\r\n *\r\n * @typedef Route\r\n * @property {String} name\r\n * @property {String} path\r\n * @property {Object} options\r\n * @property {Route[]} routes\r\n *\r\n\r\n * @typedef {Object | 'browser' | 'memory'} LocationParam\r\n *\r\n *\r\n * @typedef RouterOptions\r\n * @property {routeCallback | RouteDef[]} [routes]\r\n * @property {LocationParam} [location]\r\n * @property {Boolean} [logError]\r\n * @property {Object} [qs]\r\n * @property {Object} [patternCompiler]\r\n *\r\n */\r\n\r\nclass Router {\r\n /**\r\n * @param {RouterOptions} [options]\r\n */\r\n constructor(options = {}) {\r\n this.nextId = 1\r\n this.state = {}\r\n this.middleware = []\r\n this.options = extend(\r\n {\r\n location: 'browser',\r\n logError: true,\r\n qs,\r\n patternCompiler,\r\n },\r\n options,\r\n )\r\n defineLogger(this, 'log', this.options.log)\r\n defineLogger(this, 'logError', this.options.logError)\r\n if (options.routes) {\r\n this.map(options.routes)\r\n }\r\n }\r\n\r\n /**\r\n * Add a middleware\r\n * @param {Function} middleware\r\n * @return {Router}\r\n * @api public\r\n */\r\n use(middleware, options = {}) {\r\n const m = typeof middleware === 'function' ? { resolve: middleware } : middleware\r\n typeof options.at === 'number'\r\n ? this.middleware.splice(options.at, 0, m)\r\n : this.middleware.push(m)\r\n m.create && m.create(this)\r\n return this\r\n }\r\n\r\n /**\r\n * Add the route map\r\n * @param {routeCallback | RouteDef[]} routes\r\n * @return {Router}\r\n * @api public\r\n */\r\n map(routes) {\r\n // create the route tree\r\n this.routes = Array.isArray(routes) ? arrayDsl(routes) : functionDsl(routes)\r\n\r\n // create the matcher list, which is like a flattened\r\n // list of routes = a list of all branches of the route tree\r\n const matchers = (this.matchers = [])\r\n // keep track of whether duplicate paths have been created,\r\n // in which case we'll warn the dev\r\n const dupes = {}\r\n // keep track of abstract routes to build index route forwarding\r\n const abstracts = {}\r\n\r\n eachBranch({ routes: this.routes }, [], (routes) => {\r\n // concatenate the paths of the list of routes\r\n let path = routes.reduce(\r\n (\r\n memo,\r\n r, // reset if there's a leading slash, otherwise concat\r\n ) =>\r\n // and keep resetting the trailing slash\r\n (r.path[0] === '/' ? r.path : `${memo}/${r.path}`).replace(/\\/$/, ''),\r\n '',\r\n )\r\n // ensure we have a leading slash\r\n if (path === '') {\r\n path = '/'\r\n }\r\n\r\n const lastRoute = routes[routes.length - 1]\r\n\r\n if (lastRoute.options.abstract) {\r\n abstracts[path] = lastRoute.name\r\n return\r\n }\r\n\r\n if (lastRoute.path === '') {\r\n let matcher\r\n matchers.some((m) => {\r\n if (m.path === path) {\r\n matcher = m\r\n return true\r\n }\r\n })\r\n\r\n if (matcher) {\r\n // remap the matcher of a parent route\r\n matcher.routes = routes\r\n } else if (abstracts[path]) {\r\n matchers.push({\r\n routes,\r\n name: abstracts[path],\r\n path,\r\n })\r\n }\r\n }\r\n\r\n // register routes\r\n matchers.push({\r\n routes,\r\n name: lastRoute.name,\r\n path,\r\n })\r\n\r\n // dupe detection\r\n if (dupes[path] && lastRoute.path !== '') {\r\n throw new Error(\r\n `Routes ${dupes[path]} and ${lastRoute.name} have the same url path '${path}'`,\r\n )\r\n }\r\n dupes[path] = lastRoute.name\r\n })\r\n\r\n function eachBranch(node, memo, fn) {\r\n node.routes.forEach((route) => {\r\n fn(memo.concat(route))\r\n\r\n if (route.routes.length) {\r\n eachBranch(route, memo.concat(route), fn)\r\n }\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * Starts listening to the location changes.\r\n * @param {String} [path]\r\n * @return {Transition} initial transition\r\n *\r\n * @api public\r\n */\r\n listen(path) {\r\n const location = (this.location = this.createLocation(path || ''))\r\n // setup the location onChange handler\r\n location.onChange((url) => {\r\n const previousUrl = this.state.path\r\n this.dispatch(url).catch((err) => {\r\n if (err && err.type === TRANSITION_CANCELLED) {\r\n // reset the URL in case the transition has been cancelled\r\n this.location.replaceURL(previousUrl, { trigger: false })\r\n }\r\n return err\r\n })\r\n })\r\n // and also kick off the initial transition\r\n return this.dispatch(location.getURL())\r\n }\r\n\r\n /**\r\n * Transition to a different route. Passe in url or a route name followed by params and query\r\n * @param {String} name url or route name\r\n * @param {Object} [params] Optional\r\n * @param {Object} [query] Optional\r\n * @return {Transition} transition\r\n *\r\n * @api public\r\n */\r\n transitionTo(name, params, query) {\r\n if (this.state.activeTransition) {\r\n return this.replaceWith(name, params, query)\r\n }\r\n return this.doTransition('setURL', name, params, query)\r\n }\r\n\r\n /**\r\n * Like transitionTo, but doesn't leave an entry in the browser's history,\r\n * so clicking back will skip this route\r\n * @param {String} name url or route name followed by params and query\r\n * @param {Record<string, any>} [params]\r\n * @param {Record<string, any>} [query]\r\n * @return {Transition} transition\r\n *\r\n * @api public\r\n */\r\n replaceWith(name, params, query) {\r\n return this.doTransition('replaceURL', name, params, query)\r\n }\r\n\r\n /**\r\n * Create an href\r\n * @param {String} name target route name\r\n * @param {Object} [params]\r\n * @param {Object} [query]\r\n * @return {String} href\r\n *\r\n * @api public\r\n */\r\n generate(name, params, query) {\r\n invariant(this.location, 'call .listen() before using .generate()')\r\n let matcher\r\n\r\n query = query || {}\r\n\r\n this.matchers.forEach((m) => {\r\n if (m.name === name) {\r\n matcher = m\r\n }\r\n })\r\n\r\n if (!matcher) {\r\n throw new Error(`No route is named ${name}`)\r\n }\r\n\r\n const url = withQuery(this.options.qs, injectParams(matcher.path, params), query)\r\n return this.location.formatURL(url)\r\n }\r\n\r\n /**\r\n * Stop listening to URL changes\r\n * @api public\r\n */\r\n destroy() {\r\n if (this.location && this.location.destroy) {\r\n this.location.destroy()\r\n }\r\n if (this.state.activeTransition) {\r\n this.state.activeTransition.cancel()\r\n }\r\n this.state = {}\r\n this.middleware.forEach((m) => {\r\n m.destroy && m.destroy(this)\r\n })\r\n }\r\n\r\n /**\r\n * Check if the given route/params/query combo is active\r\n * @param {String} name target route name\r\n * @param {Record<string, any>} [params]\r\n * @param {Record<string, any>} [query]\r\n * @param {Boolean} [exact]\r\n * @return {Boolean}\r\n *\r\n * @api public\r\n */\r\n isActive(name, params, query, exact) {\r\n const activeRoutes = this.state.routes || []\r\n const activeParams = this.state.params\r\n const activeQuery = this.state.query\r\n\r\n let isActive =\r\n activeRoutes.some((route) => route.name === name) &&\r\n (!exact || activeRoutes[activeRoutes.length - 1].name === name)\r\n isActive =\r\n isActive && (!params || keys(params).every((key) => activeParams[key] === params[key]))\r\n isActive = isActive && (!query || keys(query).every((key) => activeQuery[key] === query[key]))\r\n\r\n return isActive\r\n }\r\n\r\n /**\r\n * @api private\r\n * @param {String} method pushState or replaceState\r\n * @param {String} name target route name\r\n * @param {Object} [params]\r\n * @param {Object} [query]\r\n * @return {Transition} transition\r\n */\r\n doTransition(method, name, params, query) {\r\n const previousUrl = this.location.getURL()\r\n\r\n let url = name\r\n if (url[0] !== '/') {\r\n url = this.generate(name, params, query)\r\n url = url.replace(/^#/, '/')\r\n }\r\n\r\n if (this.options.pushState) {\r\n url = this.location.removeRoot(url)\r\n }\r\n\r\n const transition = this.dispatch(url)\r\n\r\n transition.catch((err) => {\r\n if (err && err.type === TRANSITION_CANCELLED) {\r\n // reset the URL in case the transition has been cancelled\r\n this.location.replaceURL(previousUrl, { trigger: false })\r\n }\r\n return err\r\n })\r\n\r\n this.location[method](url, { trigger: false })\r\n\r\n return transition\r\n }\r\n\r\n /**\r\n * Match the path against the routes\r\n * @param {String} path\r\n * @return {Object} the list of matching routes and params\r\n *\r\n * @api private\r\n */\r\n match(path) {\r\n path = (path || '').replace(/\\/$/, '') || '/'\r\n let params\r\n let routes = []\r\n const pathWithoutQuery = withoutQuery(path)\r\n const { qs, patternCompiler } = this.options\r\n this.matchers.some((matcher) => {\r\n params = extractParams(matcher.path, pathWithoutQuery, patternCompiler)\r\n if (params) {\r\n routes = matcher.routes\r\n return true\r\n }\r\n })\r\n return {\r\n routes: routes.map(descriptor),\r\n params: params || {},\r\n pathname: pathWithoutQuery,\r\n query: extractQuery(qs, path) || {},\r\n }\r\n\r\n // clone the data (only a shallow clone of options)\r\n // to make sure the internal route store is not mutated\r\n // by the middleware. The middleware can mutate data\r\n // before it gets passed into the resolve middleware, but\r\n // only within the same transition. New transitions\r\n // will get to use pristine data.\r\n function descriptor(route) {\r\n return {\r\n name: route.name,\r\n path: route.path,\r\n params: pick(params, extractParamNames(route.path, patternCompiler)),\r\n options: clone(route.options),\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {string} path\r\n * @returns {Transition}\r\n */\r\n dispatch(path) {\r\n const match = this.match(path)\r\n const query = match.query\r\n const pathname = match.pathname\r\n\r\n const activeTransition = this.state.activeTransition\r\n\r\n // if we already have an active transition with all the same\r\n // params - return that and don't do anything else\r\n if (\r\n activeTransition &&\r\n activeTransition.pathname === pathname &&\r\n isEqual(activeTransition.query, query)\r\n ) {\r\n return activeTransition\r\n }\r\n\r\n // otherwise, cancel the active transition since we're\r\n // redirecting (or initiating a brand new transition)\r\n if (activeTransition) {\r\n const err = new Error(TRANSITION_REDIRECTED)\r\n err.type = TRANSITION_REDIRECTED\r\n err.nextPath = path\r\n activeTransition.cancel(err)\r\n }\r\n\r\n // if there is no active transition, check if\r\n // this is a noop transition, in which case, return\r\n // a transition to respect the function signature,\r\n // but don't actually run any of the middleware\r\n if (!activeTransition) {\r\n if (this.state.pathname === pathname && isEqual(this.state.query, query)) {\r\n return transition({\r\n id: this.nextId++,\r\n path,\r\n match,\r\n noop: true,\r\n router: this,\r\n })\r\n }\r\n }\r\n\r\n const t = transition({\r\n id: this.nextId++,\r\n path,\r\n match,\r\n router: this,\r\n })\r\n\r\n this.state.activeTransition = t\r\n\r\n return t\r\n }\r\n\r\n /**\r\n * Create the default location.\r\n * This is used when no custom location is passed to\r\n * the listen call.\r\n * @param {LocationParam} path\r\n * @return {Object} location\r\n *\r\n * @api private\r\n */\r\n createLocation(path) {\r\n const location = this.options.location\r\n if (typeof location !== 'string') {\r\n return location\r\n }\r\n if (location === 'browser') {\r\n return new BrowserLocation(pick(this.options, ['pushState', 'root']))\r\n } else if (location === 'memory') {\r\n return new MemoryLocation({ path })\r\n } else {\r\n throw new Error('Location can be `browser`, `memory` or a custom implementation')\r\n }\r\n }\r\n\r\n log(...args) {\r\n console.info(...args)\r\n }\r\n\r\n logError(...args) {\r\n console.error(...args)\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {Event} event\r\n * @param {HTMLAnchorElement} link\r\n * @param {Router} router\r\n */\r\nfunction defaultClickHandler(event, link, router) {\r\n event.preventDefault()\r\n router.transitionTo(router.location.removeRoot(link.getAttribute('href')))\r\n}\r\n\r\n/**\r\n * @description Helper to intercept links when using pushState but server is not configured for it\r\n * Link clicks are handled via the router avoiding browser page reload\r\n * @param {Router} router\r\n * @param {HTMLElement} el\r\n * @param {(e: Event, link: HTMLAnchorElement, router: Router) => void} clickHandler\r\n * @returns {Function} dispose\r\n */\r\nfunction interceptLinks(router, el = document, clickHandler = defaultClickHandler) {\r\n return intercept(el, (event, link) => clickHandler(event, link, router))\r\n}\r\n\r\nexport { Router, interceptLinks }\r\n","const resolved = Promise.resolve()\r\nlet routeElMap = Object.create(null)\r\nlet routeComponentMap = Object.create(null)\r\nlet routePropertiesMap = Object.create(null)\r\n\r\nlet router, rootOutlet, rootOutletEl\r\n\r\n/**\r\n * @typedef {import(\"../transition.js\").Transition} Transition\r\n *\r\n * @typedef WCRouteDef\r\n * @property {string} name\r\n * @property {string} path\r\n * @property {string | Function} component\r\n * @property {Object.<string, PropertyHook | PropertyHook[]>} [properties]\r\n * @property {boolean} [reuse]\r\n * @property {function(Transition): Promise<boolean> | boolean} [beforeEnter]\r\n * @property {function(Transition): Promise<boolean> | boolean} [beforeLeave]\r\n * @property {function(Transition): Promise<void> | void} [afterEnter]\r\n * @property {function(Transition): Promise<void> | void} [afterLeave]\r\n */\r\n\r\n/**\r\n * @callback PropertySetter\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * @typedef PropertyHook\r\n * @property {function(PropertySetter): void} [init]\r\n * @property {function(Transition, PropertySetter): void} [enter]\r\n * @property {function(Transition, PropertySetter): void} [leave]\r\n * @property {function(*, HTMLElement): void} [update]\r\n */\r\n\r\n/**\r\n * @param {*} value\r\n * @return {*}\r\n */\r\nfunction parseNumber(value) {\r\n const n = parseFloat(value)\r\n const isNumeric = value == n // eslint-disable-line eqeqeq\r\n return isNumeric ? n : value\r\n}\r\n\r\nfunction getFormattedValue(value, format) {\r\n let v = value\r\n if (v !== undefined) {\r\n if (format === 'number') {\r\n v = parseNumber(value)\r\n } else if (typeof format === 'function') {\r\n v = format(value)\r\n }\r\n }\r\n return v\r\n}\r\n\r\n/**\r\n * @param {*} value\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromValue(value) {\r\n return {\r\n init(setValue) {\r\n setValue(value)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * @param {string} key\r\n * @param {string | Function} [format]\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromQuery(queryKey, format) {\r\n return {\r\n enter(transition, setValue) {\r\n setValue(transition.query[queryKey], format)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} paramKey\r\n * @param {string | Function} format\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromParam(paramKey, format) {\r\n return {\r\n enter(transition, setValue) {\r\n setValue(transition.params[paramKey], format)\r\n },\r\n }\r\n}\r\n\r\nexport function getRouteEl(route) {\r\n return routeElMap[route.name]\r\n}\r\n\r\nfunction create(instance) {\r\n router = instance\r\n rootOutlet = instance.options.outlet\r\n}\r\n\r\nfunction destroy() {\r\n router = null\r\n routeElMap = Object.create(null)\r\n routeComponentMap = Object.create(null)\r\n routePropertiesMap = Object.create(null)\r\n rootOutletEl = null\r\n}\r\n\r\nfunction isEqual(obj1, obj2) {\r\n const keys1 = Object.keys(obj1)\r\n return keys1.length === Object.keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\r\n}\r\n\r\nfunction getOutlet(el) {\r\n const renderRoot = el.shadowRoot || el\r\n return renderRoot.querySelector(el.constructor.outlet || 'router-outlet')\r\n}\r\n\r\nfunction resolveRootOutlet() {\r\n if (rootOutletEl) return rootOutletEl\r\n if (!rootOutlet) return document.body\r\n rootOutletEl = typeof rootOutlet === 'string' ? document.querySelector(rootOutlet) : rootOutlet\r\n if (!rootOutletEl) {\r\n throw new Error(`slick-router(wc): Invalid outlet option ${rootOutlet}`)\r\n }\r\n return rootOutletEl\r\n}\r\n\r\nfunction getParentEl(transition, parentIndex) {\r\n let parent = transition.routes[parentIndex]\r\n while (parent) {\r\n if (parent.options.component) {\r\n return routeElMap[parent.name]\r\n }\r\n parent = transition.routes[--parentIndex]\r\n }\r\n}\r\n\r\nfunction getChangingIndex(prevRoutes, currentRoutes) {\r\n let index, prev, current\r\n const count = Math.max(prevRoutes.length, currentRoutes.length)\r\n for (index = 0; index < count; index++) {\r\n prev = prevRoutes[index]\r\n current = currentRoutes[index]\r\n if (!(prev && current) || prev.name !== current.name || !isEqual(prev.params, current.params)) {\r\n break\r\n }\r\n }\r\n return index\r\n}\r\n\r\nfunction runPropertyHookMethod(transition, routes, method) {\r\n for (let i = 0; i < routes.length; i++) {\r\n const { route } = routes[i]\r\n const propertiesData = routePropertiesMap[route.name]\r\n for (const { hooks, set } of Object.values(propertiesData)) {\r\n hooks.forEach((hook) => {\r\n if (typeof hook[method] === 'function') {\r\n hook[method](transition, set)\r\n }\r\n })\r\n }\r\n }\r\n}\r\n\r\nasync function runLifeCycle(transition, routes, prefix, suffix) {\r\n for (let i = 0; i < routes.length; i++) {\r\n let result\r\n const { route, el } = routes[i]\r\n const routeMethod = route.options[`${prefix}${suffix}`]\r\n if (typeof routeMethod === 'function') {\r\n result = await routeMethod(transition)\r\n if (result === false) {\r\n transition.cancel()\r\n }\r\n }\r\n if (transition.isCancelled) break\r\n const elMethod = el && el[`${prefix}Route${suffix}`]\r\n if (typeof elMethod === 'function') {\r\n result = await elMethod.call(el, transition)\r\n if (result === false) {\r\n transition.cancel()\r\n }\r\n }\r\n if (transition.isCancelled) break\r\n }\r\n}\r\n\r\nfunction resolveModule(value) {\r\n return value && value.__esModule ? value.default : value\r\n}\r\n\r\nfunction initPropertyHook(value) {\r\n if (value && typeof value === 'object') return value\r\n return fromValue(value)\r\n}\r\n\r\nfunction initProperties(route) {\r\n let propertiesData = routePropertiesMap[route.name]\r\n if (!propertiesData) {\r\n propertiesData = routePropertiesMap[route.name] = Object.create(null)\r\n const properties = route.options.properties\r\n if (properties) {\r\n for (const [name, hookOrValue] of Object.entries(properties)) {\r\n const hooks = Array.isArray(hookOrValue)\r\n ? hookOrValue.map(initPropertyHook)\r\n : [initPropertyHook(hookOrValue)]\r\n\r\n const set = (v, format) => {\r\n const propertyData = propertiesData[name]\r\n const newValue = getFormattedValue(v, format)\r\n if (propertyData.value === newValue) return\r\n propertyData.value = newValue\r\n const el = routeElMap[route.name]\r\n if (el) {\r\n el[name] = newValue\r\n }\r\n hooks.forEach((hook) => {\r\n if (typeof hook.update === 'function') {\r\n hook.update(newValue, el)\r\n }\r\n })\r\n }\r\n propertiesData[name] = { hooks, set }\r\n hooks.forEach((hook) => {\r\n if (typeof hook.init === 'function') {\r\n hook.init(set)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n\r\nasync function resolveRoutes(routes) {\r\n const result = []\r\n\r\n for (const route of routes) {\r\n let el = route.options.reuse ? routeElMap[route.name] : undefined\r\n let Component = route.options.component\r\n if (!el && Component) {\r\n if (typeof Component === 'function' && !(Component.prototype instanceof HTMLElement)) {\r\n Component =\r\n routeComponentMap[route.name] ||\r\n (routeComponentMap[route.name] = resolveModule(await Component(route)))\r\n }\r\n el = typeof Component === 'string' ? document.createElement(Component) : new Component()\r\n routeElMap[route.name] = el\r\n el.$router = router\r\n }\r\n\r\n initProperties(route)\r\n\r\n result.push({ el, route })\r\n }\r\n return result\r\n}\r\n\r\nfunction applyProperties(el, route) {\r\n const propertiesData = routePropertiesMap[route.name]\r\n Object.entries(propertiesData).forEach(([name, { value }]) => {\r\n el[name] = value\r\n })\r\n}\r\n\r\nconst removedEls = new WeakSet()\r\nconst outletCurrentEl = new WeakMap()\r\n\r\nasync function renderElements(transition, activated, changingIndex) {\r\n // set properties of not activated elements\r\n const { path, pathname, routes, params, query } = transition\r\n const routeState = { path, pathname, routes, params, query }\r\n for (let k = 0; k < changingIndex; k++) {\r\n const route = transition.routes[k]\r\n const el = routeElMap[route.name]\r\n if (el) {\r\n el.$route = routeState\r\n applyProperties(el, route)\r\n }\r\n }\r\n for (let i = 0; i < activated.length; i++) {\r\n const { el, route } = activated[i]\r\n if (el) {\r\n const parentEl = getParentEl(transition, changingIndex + i - 1)\r\n const outletEl = parentEl ? getOutlet(parentEl) : resolveRootOutlet()\r\n if (outletEl) {\r\n const currentEl = outletCurrentEl.get(outletEl) || outletEl.firstElementChild\r\n if (currentEl) {\r\n outletEl.removeChild(currentEl)\r\n removedEls.add(currentEl)\r\n }\r\n el.$route = routeState\r\n applyProperties(el, route)\r\n outletEl.appendChild(el)\r\n outletCurrentEl.set(outletEl, el)\r\n await (el.updateComplete || resolved)\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction updateDOMTree(activated, deactivated) {\r\n let parentElRemoved\r\n for (let routeIndex = deactivated.length - 1; routeIndex >= 0; routeIndex--) {\r\n const { route, el } = deactivated[routeIndex]\r\n if (!activated.some(({ route: activeRoute }) => activeRoute.name === route.name)) {\r\n if (el) {\r\n // removes only the parent el from the deactivated els\r\n // and don't remove elements that were queued to be removed\r\n // necessary for lazy removal done in animations\r\n if (!parentElRemoved && !removedEls.has(el)) el.remove()\r\n parentElRemoved = true\r\n }\r\n routeElMap[route.name] = undefined\r\n }\r\n }\r\n}\r\n\r\nasync function resolve(transition) {\r\n const prevRoutes = transition.prev.routes\r\n const changingIndex = getChangingIndex(prevRoutes, transition.routes)\r\n const deactivated = []\r\n\r\n // deactivate previous routes from child to parent\r\n for (let routeIndex = prevRoutes.length - 1; routeIndex >= changingIndex; routeIndex--) {\r\n const route = prevRoutes[routeIndex]\r\n deactivated.push({ el: routeElMap[route.name], route })\r\n }\r\n\r\n await runLifeCycle(transition, deactivated, 'before', 'Leave')\r\n\r\n if (transition.isCancelled) return\r\n\r\n const activated = await resolveRoutes(transition.routes.slice(changingIndex))\r\n\r\n await runLifeCycle(transition, activated, 'before', 'Enter')\r\n\r\n if (transition.isCancelled) return\r\n\r\n runPropertyHookMethod(transition, activated, 'enter')\r\n\r\n await renderElements(transition, activated, changingIndex)\r\n\r\n updateDOMTree(activated, deactivated)\r\n\r\n transition.activated = activated\r\n transition.deactivated = deactivated\r\n}\r\n\r\nfunction done(transition) {\r\n runPropertyHookMethod(transition, transition.deactivated, 'leave')\r\n runLifeCycle(transition, transition.deactivated, 'after', 'Leave')\r\n runLifeCycle(transition, transition.activated, 'after', 'Enter')\r\n}\r\n\r\nexport const wc = {\r\n create,\r\n destroy,\r\n resolve,\r\n done,\r\n}\r\n","import { Router as CoreRouter, interceptLinks } from './router.js'\r\nimport { wc, fromParam, fromQuery, fromValue, getRouteEl } from './middlewares/wc.js'\r\nimport { routerLinks } from './middlewares/router-links.js'\r\nimport './components/router-links.js'\r\n\r\n/**\r\n * @typedef {import(\"./middlewares/wc.js\").WCRouteDef} WCRouteDef\r\n * @typedef {import(\"./middlewares/wc.js\").PropertyHook} PropertyHook\r\n * @typedef {import(\"./transition.js\").Transition} Transition\r\n */\r\n\r\nclass Router extends CoreRouter {\r\n constructor(options) {\r\n super(options)\r\n this.use(wc)\r\n this.use(routerLinks)\r\n }\r\n}\r\n\r\nexport { Router, interceptLinks, fromParam, fromQuery, fromValue, getRouteEl }\r\n","let eventPrefix\r\n\r\nfunction trigger(name, detail) {\r\n window.dispatchEvent(new CustomEvent(`${eventPrefix}${name}`, { detail }))\r\n}\r\n\r\nexport const events = {\r\n create: function (router) {\r\n eventPrefix = router.options.eventPrefix || 'router-'\r\n },\r\n\r\n before: function (transition) {\r\n trigger('before:transition', { transition })\r\n },\r\n\r\n done: function (transition) {\r\n trigger('transition', { transition })\r\n },\r\n\r\n cancel: function (transition, error) {\r\n if (error.type !== 'TransitionRedirected') {\r\n trigger('abort', { transition, error })\r\n }\r\n },\r\n\r\n error: function (transition, error) {\r\n trigger('abort', { transition, error })\r\n trigger('error', { transition, error })\r\n },\r\n}\r\n","import { interceptLinks, Router } from 'slick-router';\n//import {Router as CoreRouter, interceptLinks} from 'slick-router/core.js';\nimport { events } from 'slick-router/middlewares/events.js';\n\nimport { default as WJElement } from '../wje-element/element.js';\n\n/**\n * `Routerx` is a custom web component that represents a router in a routing system.\n * @summary This element represents a router in a routing system.\n * @documentation https://elements.webjet.sk/components/router\n * @status stable\n * @augments {WJElement}\n * @tag wje-router\n */\nexport default class Routerx extends WJElement {\n /**\n * Creates an instance of Routerx.\n * @class\n */\n constructor() {\n super();\n }\n\n className = 'Routerx';\n\n /**\n * Returns the list of attributes to observe for changes.\n * @static\n * @returns {Array<string>}\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Sets up the router after the component is drawn.\n */\n beforeDraw() {\n const htmlString = this.outerHTML;\n\n const parser = new DOMParser();\n const htmlDocument = parser.parseFromString(htmlString, 'text/html');\n const rootElement = htmlDocument.querySelector('wje-router');\n\n const routes = this.parseElement(rootElement).root;\n\n this.router = new Router({\n outlet: this.outlet || 'wje-router-outlet',\n log: false,\n logError: true,\n root: this.root || '/',\n pushState: true,\n });\n\n this.router.map(routes);\n this.router.use(this.setBreadcrumb);\n this.router.use(events);\n this.router.use(this.resetScrollPosition);\n this.router.listen();\n\n this.unbindIntercept = interceptLinks(this.router);\n }\n\n /**\n * Parses an element and returns an object representation.\n * @param {Element} element The element to parse.\n * @returns {object} The object representation of the element.\n */\n parseElement(element) {\n const obj = {};\n const attributes = element.attributes;\n\n for (let i = 0; i < attributes.length; i++) {\n const attributeName = attributes[i].name;\n const attributeValue = attributes[i].value;\n\n if (attributeName === 'component' && attributeValue.indexOf('.js') > -1) {\n // eslint-disable-next-line jsdoc/no-bad-blocks\n obj.component = () => import(/* @vite-ignore */ attributeValue);\n } else {\n if (attributeName !== 'shadow') {\n const camelCase = attributeName.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n obj[camelCase] = attributeValue;\n }\n }\n }\n\n const children = [];\n const childElements = Array.from(element.children);\n\n childElements.forEach((childElement) => {\n children.push(this.parseElement(childElement));\n });\n\n if (children.length > 0 && element.tagName === 'WJE-ROUTE') {\n obj.children = children;\n } else {\n obj.root = children;\n }\n\n return obj;\n }\n\n /**\n * Sets the breadcrumb for the transition.\n * @param {object} transition The transition object.\n */\n setBreadcrumb = (transition) => {\n let breadcrumb = [\n ...transition.routes\n .filter((obj) => 'breadcrumb' in obj.options)\n .map((b, i) => {\n return {\n name: b.options.breadcrumbPath || b.name,\n text:\n b.options.breadcrumb instanceof Function\n ? b.options.breadcrumb?.(transition)\n : b.options.breadcrumb,\n params: { ...b.params, ...transition.params },\n path: this.router.generate(b.name, { ...b.params, ...transition.params }),\n };\n }),\n ];\n\n transition.breadcrumbs = breadcrumb;\n };\n\n /**\n * Resets the scroll position.\n * @param {object} transition The transition object.\n */\n resetScrollPosition = (transition) => {\n window.scrollTo(0, 0);\n };\n\n /**\n * Cleans up before the component is disconnected.\n */\n beforeDisconnect() {\n this.unbindIntercept();\n this.router.destroy();\n }\n}\n","import Routerx from './router.element.js';\n\nexport default Routerx;\n\nRouterx.define('wje-router', Routerx);\n"],"names":["isEqual","qs","LocationBar","router","transition","resolve","el","keys","routes","patternCompiler","Router","CoreRouter"],"mappings":";;;;;AAAA,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ;AAChC,MAAI,IAAI,IAAI;AACZ,SAAO;AACT;AACA,MAAM,UAAU,MAAM;AAEf,MAAM,OAAO,OAAO;AAEpB,MAAM,QAAQ,CAAC,QAAS,MAAO,QAAQ,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,OAAO,CAAE,GAAE,GAAG,IAAK;AAEhF,MAAM,OAAO,CAAC,KAAK,UACxB,MAAM,OAAO,CAAC,KAAK,SAAU,IAAI,IAAI,MAAM,SAAY,MAAM,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,GAAI,EAAE;AAExF,MAAMA,YAAU,CAAC,MAAM,SAAS;AACrC,QAAM,QAAQ,KAAK,IAAI;AACvB,SAAO,MAAM,WAAW,KAAK,IAAI,EAAE,UAAU,MAAM,MAAM,CAAC,QAAQ,KAAK,GAAG,MAAM,KAAK,GAAG,CAAC;AAC3F;AAEO,MAAM,SAAS,OAAO;AClBd,SAAS,UAAU,WAAW,WAAW,MAAM;AAC5D,MAAI,CAAC,WAAW;AACd,QAAI,WAAW;AACf,UAAM,IAAI,MAAM,0BAA0B,OAAO,QAAQ,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,EACxF;AACH;ACkBe,SAAS,YAAY,UAAU;AAC5C,MAAI,YAAY,CAAE;AAClB,QAAM,UAAU,CAAE;AAClB,QAAM,QAAQ,CAAE;AAEhB,WAAS,SAAS,MAAM,MAAM,SAAS,kBAAkB;AACvD,QAAI;AAEJ;AAAA,MACE,CAAC,MAAM,IAAI;AAAA,MACX;AAAA,MACA;AAAA,IACD;AAED,UAAM,IAAI,IAAI;AAEd,QAAI,UAAU,WAAW,GAAG;AAC1B,gBAAU,CAAE;AAAA,IACb;AAED,QAAI,UAAU,WAAW,KAAK,OAAO,YAAY,YAAY;AAC3D,yBAAmB;AACnB,gBAAU,CAAE;AAAA,IACb;AAED,QAAI,OAAO,QAAQ,SAAS,UAAU;AACpC,YAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,cAAQ,OAAO,MAAM,MAAM,SAAS,CAAC;AAAA,IACtC;AAGD,QAAI,kBAAkB;AACpB,kBAAY,UAAU,OAAO,IAAI;AACjC,uBAAkB;AAClB,eAAS,IAAK;AACd,gBAAU,OAAO,EAAE;AAAA,IACpB;AAGD,SAAK;AAAA,MACH;AAAA,MACA,MAAM,QAAQ;AAAA,MACd,QAAQ,UAAU,CAAE;AAAA,MACpB;AAAA,IACN,CAAK;AAAA,EACL,CAAG;AAED,WAAS,MAAM;AACb,WAAO,QAAQ,aAAc,CAAA,KAAK,CAAE;AAAA,EACrC;AAED,WAAS,KAAK,OAAO;AACnB,UAAM,QAAQ,aAAc;AAC5B,YAAQ,KAAK,IAAI,QAAQ,KAAK,KAAK,CAAE;AACrC,YAAQ,KAAK,EAAE,KAAK,KAAK;AAAA,EAC1B;AAED,WAAS,eAAe;AACtB,WAAO,UAAU,KAAK,GAAG;AAAA,EAC1B;AAED,SAAO,IAAK;AACd;ACrEe,SAAS,SAAS,QAAQ;AACvC,QAAM,SAAS,CAAE;AAEjB,SAAO,QAAQ,CAAC,EAAE,MAAM,UAAU,GAAG,cAAc;AACjD,QAAI,OAAO,QAAQ,SAAS,UAAU;AACpC,YAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,cAAQ,OAAO,MAAM,MAAM,SAAS,CAAC;AAAA,IACtC;AACD,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,QAAQ;AAAA,MACd;AAAA,MACA,QAAQ,WAAW,SAAS,QAAQ,IAAI,CAAE;AAAA,IAChD,CAAK;AAAA,EACL,CAAG;AAED,SAAO;AACT;AC/BA,MAAM,qBAAqB;AAC3B,MAAM,oBAAoB;AAC1B,MAAM,eAAe;AAErB,MAAM,oBAAoB,CAAE;AAE5B,SAAS,eAAe,SAAS,UAAU;AACzC,MAAI,EAAE,WAAW,oBAAoB;AACnC,sBAAkB,OAAO,IAAI,SAAS,OAAO;AAAA,EAC9C;AAED,SAAO,kBAAkB,OAAO;AAClC;AAWO,SAAS,kBAAkB,SAAS,UAAU;AACnD,SAAO,eAAe,SAAS,QAAQ,EAAE;AAC3C;AAOO,SAAS,cAAc,SAAS,MAAM,UAAU;AACrD,QAAM,KAAK,eAAe,SAAS,QAAQ;AAC3C,QAAM,UAAU,GAAG;AACnB,QAAM,aAAa,GAAG;AACtB,QAAM,QAAQ,KAAK,MAAM,OAAO;AAEhC,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACR;AAED,QAAM,SAAS,CAAE;AAEjB,aAAW,QAAQ,SAAU,WAAW,OAAO;AAC7C,WAAO,SAAS,IAAI,MAAM,QAAQ,CAAC,KAAK,mBAAmB,MAAM,QAAQ,CAAC,CAAC;AAAA,EAC/E,CAAG;AAED,SAAO;AACT;AAMO,SAAS,aAAa,SAAS,QAAQ;AAC5C,WAAS,UAAU,CAAE;AAErB,SAAO,QAAQ,QAAQ,oBAAoB,SAAU,OAAO,OAAO;AACjE,UAAM,YAAY,MAAM,QAAQ,mBAAmB,EAAE;AACrD,UAAM,WAAW,MAAM,MAAM,EAAE;AAG/B,QAAI,aAAa,OAAO,aAAa,KAAK;AACxC,UAAI,OAAO,SAAS,KAAK,MAAM;AAC7B,eAAO;AAAA,MACR;AAAA,IACP,OAAW;AACL;AAAA,QACE,OAAO,SAAS,KAAK;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACF;AAED,QAAI,aAAa,mBAAmB,OAAO,SAAS,CAAC;AACrD,QAAI,aAAa,OAAO,aAAa,KAAK;AAExC,mBAAa,WAAW,QAAQ,OAAO,GAAG;AAAA,IAC3C;AACD,WAAO;AAAA,EACX,CAAG;AACH;AAMO,SAAS,aAAaC,KAAI,MAAM;AACrC,QAAM,QAAQ,KAAK,MAAM,YAAY;AACrC,SAAO,SAASA,IAAG,MAAM,MAAM,CAAC,CAAC;AACnC;AAMO,SAAS,UAAUA,KAAI,MAAM,OAAO;AACzC,QAAM,cAAcA,IAAG,UAAU,OAAO,EAAE,SAAS,OAAO;AAE1D,MAAI,aAAa;AACf,WAAO,aAAa,IAAI,IAAI,MAAM;AAAA,EACnC;AAED,SAAO;AACT;AAKO,SAAS,aAAa,MAAM;AACjC,SAAO,KAAK,QAAQ,cAAc,EAAE;AACtC;ACzGO,SAAS,UAAU,IAAI,MAAM,IAAI;AACtC,KAAG,iBAAiB,MAAM,EAAE;AAC5B,SAAO;AACT;AAYO,SAAS,YAAY,IAAI,MAAM,IAAI;AACxC,KAAG,oBAAoB,MAAM,EAAE;AAC/B,SAAO;AACT;ACRA,MAAM,QAAQ;AAAA,EACZ,cAAc;AACZ,SAAK,WAAW;AAChB,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,WAAW,OAAO;AACvB,SAAK,UAAU,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA,EAID,SAAS;AACP,WAAO,KAAK,SAAS,SAAS,QAAQ,UAAU,KAAK,MAAM,KAAK;AAAA,EACjE;AAAA;AAAA;AAAA,EAID,UAAU;AACR,UAAM,QAAQ,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC/C,WAAO,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC3B;AAAA;AAAA;AAAA,EAID,YAAY,UAAU,gBAAgB;AACpC,QAAI,YAAY,MAAM;AACpB,UAAI,KAAK,iBAAiB,CAAC,KAAK,oBAAoB,gBAAgB;AAClE,mBAAW,UAAU,KAAK,SAAS,WAAW,KAAK,SAAS,MAAM;AAClE,cAAM,OAAO,KAAK,KAAK,QAAQ,eAAe,EAAE;AAChD,YAAI,CAAC,SAAS,QAAQ,IAAI,EAAG,YAAW,SAAS,MAAM,KAAK,MAAM;AAAA,MAC1E,OAAa;AACL,mBAAW,KAAK;MACjB;AAAA,IACF;AACD,WAAO,SAAS,QAAQ,eAAe,EAAE;AAAA,EAC1C;AAAA;AAAA;AAAA,EAID,MAAM,UAAU,IAAI;AAIlB,SAAK,UAAU;AAIf,SAAK,UAAmB,OAAO,EAAC,MAAM,IAAG,GAAG,OAAO;AACnD,SAAK,WAAmB,KAAK,QAAQ,YAAY,KAAK;AACtD,SAAK,UAAmB,KAAK,QAAQ,WAAW,KAAK;AACrD,SAAK,OAAmB,KAAK,QAAQ;AACrC,SAAK,mBAAmB,KAAK,QAAQ,eAAe;AACpD,SAAK,kBAAmB,CAAC,CAAC,KAAK,QAAQ;AACvC,SAAK,gBAAmB,KAAK;AAC7B,UAAM,WAAkB,KAAK;AAG7B,SAAK,OAAQ,IAAI,KAAK,IAAI,IAAK,QAAQ,cAAc,GAAG;AAIxD,cAAU,QAAQ,KAAK,gBAAgB,aAAa,cAAc,KAAK,QAAQ;AAI/E,SAAK,WAAW;AAChB,UAAM,MAAM,KAAK;AAIjB,QAAI,KAAK,oBAAoB,KAAK,iBAAiB;AAIjD,UAAI,CAAC,KAAK,iBAAiB,CAAC,KAAK,OAAM,GAAI;AACzC,aAAK,WAAW,KAAK,YAAY,MAAM,IAAI;AAC3C,aAAK,SAAS,QAAQ,GAAG,KAAK,IAAI,IAAI,KAAK,QAAQ,EAAE;AAErD,eAAO;AAAA,MAIf,WAAiB,KAAK,iBAAiB,KAAK,OAAQ,KAAI,IAAI,MAAM;AAC1D,aAAK,WAAW,KAAK,QAAS,EAAC,QAAQ,eAAe,EAAE;AACxD,aAAK,QAAQ,aAAa,CAAA,GAAI,SAAS,OAAO,KAAK,OAAO,KAAK,QAAQ;AAAA,MACxE;AAAA,IAEF;AAED,QAAI,CAAC,KAAK,QAAQ,OAAQ,QAAO,KAAK;EACvC;AAAA;AAAA;AAAA,EAID,OAAO;AACL,gBAAY,QAAQ,KAAK,gBAAgB,aAAa,cAAc,KAAK,QAAQ;AACjF,SAAK,UAAU;AAAA,EAChB;AAAA;AAAA;AAAA,EAID,MAAM,OAAO,UAAU;AACrB,SAAK,SAAS,QAAQ,EAAC,OAAO,SAAQ,CAAC;AAAA,EACxC;AAAA;AAAA;AAAA,EAID,WAAW;AACT,UAAM,UAAU,KAAK;AACrB,QAAI,YAAY,KAAK,SAAU,QAAO;AACtC,SAAK,QAAO;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKD,QAAQ,UAAU;AAChB,eAAW,KAAK,WAAW,KAAK,YAAY,QAAQ;AACpD,WAAO,KAAK,SAAS,KAAK,aAAW;AACnC,UAAI,QAAQ,MAAM,KAAK,QAAQ,GAAG;AAChC,gBAAQ,SAAS,QAAQ;AACzB,eAAO;AAAA,MACR;AAAA,IACP,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,OAAO,UAAU,SAAS;AACxB,QAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,QAAI,CAAC,WAAW,YAAY,KAAM,WAAU,EAAC,SAAS,CAAC,CAAC,QAAO;AAE/D,QAAI,MAAM,KAAK,QAAQ,WAAW,KAAK,YAAY,YAAY,EAAE;AAGjE,eAAW,SAAS,QAAQ,cAAc,EAAE;AAE5C,QAAI,KAAK,aAAa,SAAU;AAChC,SAAK,WAAW;AAGhB,QAAI,aAAa,MAAM,QAAQ,IAAK,OAAM,IAAI,MAAM,GAAG,EAAE;AAGzD,QAAI,KAAK,eAAe;AACtB,WAAK,QAAQ,QAAQ,UAAU,iBAAiB,WAAW,EAAE,IAAI,SAAS,OAAO,GAAG;AAAA,IAI1F,WAAe,KAAK,kBAAkB;AAChC,WAAK,YAAY,KAAK,UAAU,UAAU,QAAQ,OAAO;AAAA,IAG/D,OAAW;AACL,aAAO,KAAK,SAAS,OAAO,GAAG;AAAA,IAChC;AACD,QAAI,QAAQ,QAAS,QAAO,KAAK,QAAQ,QAAQ;AAAA,EAClD;AAAA;AAAA;AAAA,EAID,YAAY,UAAU,UAAU,SAAS;AACvC,QAAI,SAAS;AACX,YAAM,OAAO,SAAS,KAAK,QAAQ,sBAAsB,EAAE;AAC3D,eAAS,QAAQ,GAAG,IAAI,IAAI,QAAQ,EAAE;AAAA,IAC5C,OAAW;AAEL,eAAS,OAAO,IAAI,QAAQ;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA,EAKD,SAAS,UAAU;AACjB,SAAK,MAAM,WAAW,QAAQ;AAAA,EAC/B;AAAA;AAAA,EAGD,eAAe;AAEb,QAAI,CAAC,KAAK,SAAS;AACjB,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC3D;AACD,WAAO,KAAK;AAAA,EACb;AACH;AAGA,MAAM,gBAAgB;AAGtB,MAAM,eAAe;AAGrB,MAAM,gBAAgB;AAGtB,MAAM,eAAe;AC3NrB,MAAM,gBAAgB;AAAA,EACpB,YAAY,UAAU,IAAI;AACxB,SAAK,OAAO,QAAQ,QAAQ;AAE5B,SAAK,UAAU;AAAA,MACb;AAAA,QACE,WAAW;AAAA,QACX,MAAM;AAAA,MACP;AAAA,MACD;AAAA,IACD;AAID,SAAK,cAAc,IAAIC,QAAa;AACpC,SAAK,YAAY,SAAS,CAAC,SAAS;AAClC,WAAK,UAAU,IAAI,QAAQ,EAAE,EAAE;AAAA,IACrC,CAAK;AAED,SAAK,YAAY,MAAM,OAAO;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAMD,SAAS;AACP,WAAO,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,OAAO,MAAM,UAAU,IAAI;AACzB,QAAI,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AACZ,WAAK,YAAY,OAAO,MAAM,OAAO,EAAE,SAAS,QAAQ,OAAO,CAAC;AAAA,IACjE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,WAAW,MAAM,UAAU,IAAI;AAC7B,QAAI,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AACZ,WAAK,YAAY,OAAO,MAAM,OAAO,EAAE,SAAS,MAAM,SAAS,KAAM,GAAE,OAAO,CAAC;AAAA,IAChF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,SAAS,UAAU;AACjB,SAAK,iBAAiB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,UAAU,MAAM;AACd,QAAI,KAAK,YAAY,gBAAgB;AACnC,UAAI,UAAU,KAAK,QAAQ;AAC3B,UAAI,SAAS,IAAI;AACf,kBAAU,QAAQ,QAAQ,OAAO,EAAE;AAAA,MACpC;AACD,aAAO,UAAU;AAAA,IACvB,OAAW;AACL,UAAI,KAAK,CAAC,MAAM,KAAK;AACnB,eAAO,KAAK,OAAO,CAAC;AAAA,MACrB;AACD,aAAO,IAAI,IAAI;AAAA,IAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,WAAW,KAAK;AACd,QAAI,KAAK,QAAQ,aAAa,KAAK,QAAQ,QAAQ,KAAK,QAAQ,SAAS,KAAK;AAC5E,aAAO,IAAI,QAAQ,KAAK,QAAQ,MAAM,EAAE;AAAA,IAC9C,OAAW;AACL,aAAO;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKD,UAAU;AACR,SAAK,YAAY,KAAM;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,UAAU,KAAK;AACb,SAAK,OAAO;AACZ,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,GAAG;AAAA,IACxB;AAAA,EACF;AACH;ACxHA,MAAM,eAAe;AAAA,EACnB,YAAY,EAAE,QAAQ;AACpB,SAAK,OAAO,QAAQ;AAAA,EACrB;AAAA,EAED,SAAS;AACP,WAAO,KAAK;AAAA,EACb;AAAA,EAED,OAAO,MAAM,SAAS;AACpB,QAAI,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AACZ,WAAK,UAAU,KAAK,OAAM,GAAI,OAAO;AAAA,IACtC;AAAA,EACF;AAAA,EAED,WAAW,MAAM,SAAS;AACxB,QAAI,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO,MAAM,OAAO;AAAA,IAC1B;AAAA,EACF;AAAA,EAED,SAAS,UAAU;AACjB,SAAK,iBAAiB;AAAA,EACvB;AAAA,EAED,UAAU,KAAK,UAAU,IAAI;AAC3B,SAAK,OAAO;AACZ,cAAU,OAAO,EAAE,SAAS,KAAI,GAAI,OAAO;AAC3C,QAAI,KAAK,kBAAkB,QAAQ,SAAS;AAC1C,WAAK,eAAe,GAAG;AAAA,IACxB;AAAA,EACF;AAAA,EAED,WAAW,KAAK;AACd,WAAO;AAAA,EACR;AAAA,EAED,UAAU,KAAK;AACb,WAAO;AAAA,EACR;AACH;AC3CO,MAAM,wBAAwB;AAE9B,MAAM,uBAAuB;ACiCpC,SAAS,SAASC,SAAQC,aAAY,KAAK;AACzC,EAAAD,QAAO,WAAW,QAAQ,CAAC,MAAM;AAC/B,MAAE,SAAS,EAAE,MAAMC,aAAY,GAAG;AAAA,EACtC,CAAG;AACH;AAOe,SAAS,WAAW,SAAS;AAC1C,YAAU,WAAW,CAAE;AAEvB,QAAMD,UAAS,QAAQ;AACvB,QAAM,MAAMA,QAAO;AACnB,QAAM,WAAWA,QAAO;AAExB,QAAM,OAAO,QAAQ;AACrB,QAAM,QAAQ,QAAQ;AACtB,QAAM,SAAS,MAAM;AACrB,QAAM,SAAS,MAAM;AACrB,QAAM,WAAW,MAAM;AACvB,QAAM,QAAQ,MAAM;AAEpB,QAAM,KAAK,QAAQ;AACnB,QAAM,YAAY,KAAK,IAAK;AAC5B,MAAI,KAAK;AACT,MAAI,iBAAiB,IAAI,MAAM,IAAI;AACnC;AAAA,IACE,iBAAiB;AAAA,IACjB;AAAA,IACA,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,EACzB;AACD,MAAI,iBAAiB,IAAI,WAAW,MAAM;AAC1C,MAAI,iBAAiB,IAAI,UAAU,KAAK;AAGxC,MAAIE,UAAS;AACb,QAAM,UAAU,IAAI,QAAQ,SAAU,KAAK,KAAK;AAC9C,IAAAA,WAAU;AACV,aAAS;AAAA,EACb,CAAG;AAMD,UACG,KAAK,WAAY;AAChB,QAAI,iBAAiB,IAAI,gBAAgB,KAAK,IAAK,IAAG,YAAY,IAAI;AAAA,EAC5E,CAAK,EACA,MAAM,SAAU,KAAK;AACpB,QAAI,IAAI,SAAS,yBAAyB,IAAI,SAAS,sBAAsB;AAC3E,UAAI,iBAAiB,IAAI,QAAQ;AACjC,eAAS,GAAG;AAAA,IACb;AAAA,EACP,CAAK;AAEH,MAAI,YAAY;AAEhB,QAAMD,cAAa;AAAA,IACjB;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ,MAAMD,QAAO,MAAM,MAAM,KAAK,CAAE;AAAA,MACxC,MAAMA,QAAO,MAAM,QAAQ;AAAA,MAC3B,UAAUA,QAAO,MAAM,YAAY;AAAA,MACnC,QAAQ,MAAMA,QAAO,MAAM,MAAM,KAAK,CAAE;AAAA,MACxC,OAAO,MAAMA,QAAO,MAAM,KAAK,KAAK,CAAE;AAAA,IACvC;AAAA,IACD,QAAQ,MAAM,MAAM;AAAA,IACpB;AAAA,IACA;AAAA,IACA,QAAQ,MAAM,MAAM;AAAA,IACpB,OAAO,MAAM,KAAK;AAAA,IAClB,YAAY,YAAa,MAAM;AAC7B,aAAOA,QAAO,aAAa,GAAG,IAAI;AAAA,IACnC;AAAA,IACD,OAAO,WAAY;AACjB,aAAOA,QAAO,aAAa,IAAI;AAAA,IAChC;AAAA,IACD,QAAQ,SAAU,KAAK;AACrB,UAAIA,QAAO,MAAM,qBAAqBC,aAAY;AAChD;AAAA,MACD;AAED,UAAIA,YAAW,aAAa;AAC1B;AAAA,MACD;AAED,MAAAD,QAAO,MAAM,mBAAmB;AAChC,MAAAC,YAAW,cAAc;AACzB,kBAAY;AAEZ,UAAI,CAAC,KAAK;AACR,cAAM,IAAI,MAAM,oBAAoB;AACpC,YAAI,OAAO;AAAA,MACZ;AACD,UAAI,IAAI,SAAS,sBAAsB;AACrC,YAAI,iBAAiB,IAAI,WAAW;AAAA,MACrC;AACD,UAAI,IAAI,SAAS,uBAAuB;AACtC,YAAI,iBAAiB,IAAI,YAAY;AAAA,MACtC;AAED,MAAAD,QAAO,WAAW,QAAQ,CAAC,MAAM;AAC/B,UAAE,UAAU,EAAE,OAAOC,aAAY,GAAG;AAAA,MAC5C,CAAO;AACD,aAAO,GAAG;AAAA,IACX;AAAA,IACD,iBAAiB,WAAY;AAC3B,aAAO,QAAQ,MAAM,SAAU,QAAQ;AACrC,YAAID,QAAO,MAAM,kBAAkB;AACjC,iBAAOA,QAAO,MAAM,iBAAiB,gBAAiB;AAAA,QACvD;AACD,eAAO,QAAQ,OAAO,MAAM;AAAA,MACpC,CAAO;AAAA,IACF;AAAA,IAED,MAAM,QAAQ,KAAK,KAAK,OAAO;AAAA,IAC/B,OAAO,QAAQ,MAAM,KAAK,OAAO;AAAA,EAClC;AAED,EAAAA,QAAO,WAAW,QAAQ,CAAC,MAAM;AAC/B,MAAE,UAAU,EAAE,OAAOC,WAAU;AAAA,EACnC,CAAG;AAGD,WAAS,SAAS,GAAG,YAAY;AAC/B,QAAI;AACJ,QAAI;AAEJ,QAAI,WAAW;AACb;AAAA,IACD;AAED,QAAI,IAAID,QAAO,WAAW,QAAQ;AAChC,mBAAaA,QAAO,WAAW,CAAC;AAChC,uBAAiB,WAAW,QAAQ;AACpC,UAAI,iBAAiB,IAAI,yBAAyB,cAAc;AAChE,UAAI;AACJ,UAAI;AACF,4BAAoB,WAAW,UAC3B,WAAW,QAAQC,aAAY,UAAU,IACzC;AACJ;AAAA,UACEA,gBAAe;AAAA,UACf;AAAA,UACA;AAAA,QACD;AAAA,MACF,SAAQ,KAAK;AACZ,QAAAD,QAAO,MAAM,mBAAmB;AAChC,iBAASA,SAAQC,aAAY,GAAG;AAChC,eAAO,OAAO,GAAG;AAAA,MAClB;AACD,cAAQ,QAAQ,iBAAiB,EAC9B,KAAK,SAAU,QAAQ;AACtB,iBAAS,IAAI,GAAG,MAAM;AAAA,MAChC,CAAS,EACA,MAAM,SAAU,KAAK;AACpB,YAAI,iBAAiB,IAAI,yBAAyB,gBAAgB,QAAQ;AAC1E,QAAAD,QAAO,MAAM,mBAAmB;AAChC,iBAASA,SAAQC,aAAY,GAAG;AAChC,eAAO,GAAG;AAAA,MACpB,CAAS;AAAA,IACT,OAAW;AACL,MAAAD,QAAO,QAAQ;AAAA,QACb,kBAAkB;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AACD,MAAAA,QAAO,WAAW,QAAQ,CAAC,MAAM;AAC/B,UAAE,QAAQ,EAAE,KAAKC,WAAU;AAAA,MACnC,CAAO;AACD,MAAAC,SAAS;AAAA,IACV;AAAA,EACF;AAED,MAAI,CAAC,QAAQ,MAAM;AACjB,YAAQ,QAAO,EAAG,KAAK,MAAM,SAAS,CAAC,CAAC;AAAA,EAC5C,OAAS;AACL,IAAAA,SAAS;AAAA,EACV;AAED,MAAI,QAAQ,MAAM;AAChB,IAAAD,YAAW,OAAO;AAAA,EACnB;AAED,SAAOA;AACT;ACvNO,SAAS,UAAU,IAAI,IAAI;AAChC,QAAM,KAAK,SAAS,IAAI,SAAS,SAAU,GAAGE,KAAI;AAChD,QAAI,UAAU,GAAGA,GAAE,EAAG,IAAG,GAAGA,GAAE;AAAA,EAClC,CAAG;AAED,SAAO,SAAS,UAAU;AACxB,gBAAY,IAAI,SAAS,EAAE;AAAA,EAC5B;AACH;AAeA,SAAS,SAAS,IAAI,MAAM,IAAI;AAC9B,SAAO,UAAU,IAAI,MAAM,SAAU,GAAG;AACtC,UAAMA,MAAK,EAAE,OAAO,QAAQ,GAAG;AAC/B,QAAIA,KAAI;AACN,SAAG,GAAGA,GAAE;AAAA,IACT;AAAA,EACL,CAAG;AACH;AAWA,SAAS,UAAU,GAAG,IAAI;AACxB,MAAI,MAAM,CAAC,MAAM,EAAG;AACpB,MAAI,EAAE,WAAW,EAAE,WAAW,EAAE,SAAU;AAC1C,MAAI,EAAE,iBAAkB;AAGxB,MAAI,GAAG,OAAQ;AAGf,MAAI,GAAG,aAAa,aAAa,MAAM,KAAM;AAG7C,QAAM,OAAO,GAAG,aAAa,MAAM;AACnC,MAAI,CAAC,QAAQ,KAAK,WAAW,EAAG;AAGhC,MAAI,2CAA2C,KAAK,IAAI,EAAG;AAE3D,SAAO;AACT;AAMA,SAAS,MAAM,GAAG;AAChB,MAAI,KAAK,OAAO;AAChB,SAAO,EAAE,UAAU,OAAO,EAAE,SAAS,EAAE;AACzC;ACjFe,SAAS,aAAaH,SAAQ,QAAQ,IAAI;AACvD,MAAI,OAAO,KAAM;AACjB,EAAAA,QAAO,MAAM,IAAI,OAAO,OAAO,aAAa,KAAK,MAAM;AAAA,EAAE;AAC3D;ACHA,MAAe,KAAA;AAAA,EACb,MAAM,aAAa;AACjB,WAAO,YAAY,MAAM,GAAG,EAAE,OAAO,CAAC,KAAK,SAAS;AAClD,YAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,UAAI,MAAM,CAAC,CAAC,IAAI,mBAAmB,MAAM,CAAC,CAAC;AAC3C,aAAO;AAAA,IACR,GAAE,EAAE;AAAA,EACN;AAAA,EAED,UAAU,QAAQ;AAChB,WAAO,OAAO,KAAK,MAAM,EACtB,OAAO,CAAC,KAAK,QAAQ;AACpB,UAAI,OAAO,GAAG,MAAM,QAAW;AAC7B,YAAI,KAAK,MAAM,MAAM,mBAAmB,OAAO,GAAG,CAAC,CAAC;AAAA,MACrD;AACD,aAAO;AAAA,IACR,GAAE,EAAE,EACJ,KAAK,GAAG;AAAA,EACZ;AACH;ACfO,SAAS,MAAM,OAAO,OAAO;AACnC,MAAI,iBAAiB,OAAQ,QAAO,EAAE,MAAK,OAAO,SAAQ,MAAO;AACjE,MAAI,GAAG,GAAG,KAAK,KAAKI,QAAK,CAAA,GAAI,UAAQ,IAAI,MAAM,MAAM,MAAM,GAAG;AAC9D,MAAI,CAAC,KAAK,IAAI,MAAO;AAErB,SAAO,MAAM,IAAI,SAAS;AACzB,QAAI,IAAI,CAAC;AACT,QAAI,MAAM,KAAK;AACd,MAAAA,MAAK,KAAK,CAAC;AACX,iBAAW,IAAI,CAAC,MAAM,MAAM,eAAe;AAAA,IAC9C,WAAa,MAAM,KAAK;AACrB,UAAI,IAAI,QAAQ,KAAK,CAAC;AACtB,YAAM,IAAI,QAAQ,KAAK,CAAC;AACxB,MAAAA,MAAK,KAAM,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,MAAM,IAAI,MAAM,CAAG;AACnE,iBAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,mBAAmB;AAC9C,UAAI,CAAC,CAAC,CAAC,IAAK,aAAY,CAAC,CAAC,CAAC,IAAI,MAAM,MAAM,OAAO,IAAI,UAAU,GAAG;AAAA,IACtE,OAAS;AACN,iBAAW,MAAM;AAAA,IACpB;AAAA,EACA;AAEC,SAAO;AAAA,IACN,MAAMA;AAAA,IACN,SAAS,IAAI,OAAO,MAAM,UAAgC,OAAS,GAAG;AAAA,EACtE;AACF;AC3BA,MAAM,aAAa;AAEZ,SAAS,gBAAgB,SAAS;AAEvC,QAAM,aAAa,WAAW,KAAK,OAAO;AAC1C,QAAM,oBAAoB,aAAa,QAAQ,QAAQ,YAAY,GAAG,IAAI;AAE1E,QAAM,EAAE,SAAS,SAAS,MAAAA,MAAI,IAAK,MAAM,iBAAiB;AAE1D,QAAM,aAAa,aAAaA,MAAK,IAAI,CAAC,QAAS,QAAQ,MAAM,WAAW,CAAC,IAAI,GAAI,IAAIA;AAEzF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACD;AACH;AC6BA,IAAA,WAAA,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA,EAIX,YAAY,UAAU,IAAI;AACxB,SAAK,SAAS;AACd,SAAK,QAAQ,CAAE;AACf,SAAK,aAAa,CAAE;AACpB,SAAK,UAAU;AAAA,MACb;AAAA,QACE,UAAU;AAAA,QACV,UAAU;AAAA,QACV;AAAA,QACA;AAAA,MACD;AAAA,MACD;AAAA,IACD;AACD,iBAAa,MAAM,OAAO,KAAK,QAAQ,GAAG;AAC1C,iBAAa,MAAM,YAAY,KAAK,QAAQ,QAAQ;AACpD,QAAI,QAAQ,QAAQ;AAClB,WAAK,IAAI,QAAQ,MAAM;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,IAAI,YAAY,UAAU,IAAI;AAC5B,UAAM,IAAI,OAAO,eAAe,aAAa,EAAE,SAAS,WAAU,IAAK;AACvE,WAAO,QAAQ,OAAO,WAClB,KAAK,WAAW,OAAO,QAAQ,IAAI,GAAG,CAAC,IACvC,KAAK,WAAW,KAAK,CAAC;AAC1B,MAAE,UAAU,EAAE,OAAO,IAAI;AACzB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,IAAI,QAAQ;AAEV,SAAK,SAAS,MAAM,QAAQ,MAAM,IAAI,SAAS,MAAM,IAAI,YAAY,MAAM;AAI3E,UAAM,WAAY,KAAK,WAAW;AAGlC,UAAM,QAAQ,CAAE;AAEhB,UAAM,YAAY,CAAE;AAEpB,eAAW,EAAE,QAAQ,KAAK,OAAM,GAAI,CAAA,GAAI,CAACC,YAAW;AAElD,UAAI,OAAOA,QAAO;AAAA,QAChB,CACE,MACA;AAAA;AAAA,WAGC,EAAE,KAAK,CAAC,MAAM,MAAM,EAAE,OAAO,GAAG,IAAI,IAAI,EAAE,IAAI,IAAI,QAAQ,OAAO,EAAE;AAAA;AAAA,QACtE;AAAA,MACD;AAED,UAAI,SAAS,IAAI;AACf,eAAO;AAAA,MACR;AAED,YAAM,YAAYA,QAAOA,QAAO,SAAS,CAAC;AAE1C,UAAI,UAAU,QAAQ,UAAU;AAC9B,kBAAU,IAAI,IAAI,UAAU;AAC5B;AAAA,MACD;AAED,UAAI,UAAU,SAAS,IAAI;AACzB,YAAI;AACJ,iBAAS,KAAK,CAAC,MAAM;AACnB,cAAI,EAAE,SAAS,MAAM;AACnB,sBAAU;AACV,mBAAO;AAAA,UACR;AAAA,QACX,CAAS;AAED,YAAI,SAAS;AAEX,kBAAQ,SAASA;AAAA,QAC3B,WAAmB,UAAU,IAAI,GAAG;AAC1B,mBAAS,KAAK;AAAA,YACZ,QAAAA;AAAA,YACA,MAAM,UAAU,IAAI;AAAA,YACpB;AAAA,UACZ,CAAW;AAAA,QACF;AAAA,MACF;AAGD,eAAS,KAAK;AAAA,QACZ,QAAAA;AAAA,QACA,MAAM,UAAU;AAAA,QAChB;AAAA,MACR,CAAO;AAGD,UAAI,MAAM,IAAI,KAAK,UAAU,SAAS,IAAI;AACxC,cAAM,IAAI;AAAA,UACR,UAAU,MAAM,IAAI,CAAC,QAAQ,UAAU,IAAI,4BAA4B,IAAI;AAAA,QAC5E;AAAA,MACF;AACD,YAAM,IAAI,IAAI,UAAU;AAAA,IAC9B,CAAK;AAED,aAAS,WAAW,MAAM,MAAM,IAAI;AAClC,WAAK,OAAO,QAAQ,CAAC,UAAU;AAC7B,WAAG,KAAK,OAAO,KAAK,CAAC;AAErB,YAAI,MAAM,OAAO,QAAQ;AACvB,qBAAW,OAAO,KAAK,OAAO,KAAK,GAAG,EAAE;AAAA,QACzC;AAAA,MACT,CAAO;AAAA,IACF;AAED,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,OAAO,MAAM;AACX,UAAM,WAAY,KAAK,WAAW,KAAK,eAAe,QAAQ,EAAE;AAEhE,aAAS,SAAS,CAAC,QAAQ;AACzB,YAAM,cAAc,KAAK,MAAM;AAC/B,WAAK,SAAS,GAAG,EAAE,MAAM,CAAC,QAAQ;AAChC,YAAI,OAAO,IAAI,SAAS,sBAAsB;AAE5C,eAAK,SAAS,WAAW,aAAa,EAAE,SAAS,OAAO;AAAA,QACzD;AACD,eAAO;AAAA,MACf,CAAO;AAAA,IACP,CAAK;AAED,WAAO,KAAK,SAAS,SAAS,OAAM,CAAE;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,aAAa,MAAM,QAAQ,OAAO;AAChC,QAAI,KAAK,MAAM,kBAAkB;AAC/B,aAAO,KAAK,YAAY,MAAM,QAAQ,KAAK;AAAA,IAC5C;AACD,WAAO,KAAK,aAAa,UAAU,MAAM,QAAQ,KAAK;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,YAAY,MAAM,QAAQ,OAAO;AAC/B,WAAO,KAAK,aAAa,cAAc,MAAM,QAAQ,KAAK;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,SAAS,MAAM,QAAQ,OAAO;AAC5B,cAAU,KAAK,UAAU,yCAAyC;AAClE,QAAI;AAEJ,YAAQ,SAAS,CAAE;AAEnB,SAAK,SAAS,QAAQ,CAAC,MAAM;AAC3B,UAAI,EAAE,SAAS,MAAM;AACnB,kBAAU;AAAA,MACX;AAAA,IACP,CAAK;AAED,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,qBAAqB,IAAI,EAAE;AAAA,IAC5C;AAED,UAAM,MAAM,UAAU,KAAK,QAAQ,IAAI,aAAa,QAAQ,MAAM,MAAM,GAAG,KAAK;AAChF,WAAO,KAAK,SAAS,UAAU,GAAG;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,UAAU;AACR,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS;AAC1C,WAAK,SAAS,QAAS;AAAA,IACxB;AACD,QAAI,KAAK,MAAM,kBAAkB;AAC/B,WAAK,MAAM,iBAAiB,OAAQ;AAAA,IACrC;AACD,SAAK,QAAQ,CAAE;AACf,SAAK,WAAW,QAAQ,CAAC,MAAM;AAC7B,QAAE,WAAW,EAAE,QAAQ,IAAI;AAAA,IACjC,CAAK;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,SAAS,MAAM,QAAQ,OAAO,OAAO;AACnC,UAAM,eAAe,KAAK,MAAM,UAAU,CAAE;AAC5C,UAAM,eAAe,KAAK,MAAM;AAChC,UAAM,cAAc,KAAK,MAAM;AAE/B,QAAI,WACF,aAAa,KAAK,CAAC,UAAU,MAAM,SAAS,IAAI,MAC/C,CAAC,SAAS,aAAa,aAAa,SAAS,CAAC,EAAE,SAAS;AAC5D,eACE,aAAa,CAAC,UAAU,KAAK,MAAM,EAAE,MAAM,CAAC,QAAQ,aAAa,GAAG,MAAM,OAAO,GAAG,CAAC;AACvF,eAAW,aAAa,CAAC,SAAS,KAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,YAAY,GAAG,MAAM,MAAM,GAAG,CAAC;AAE5F,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUD,aAAa,QAAQ,MAAM,QAAQ,OAAO;AACxC,UAAM,cAAc,KAAK,SAAS,OAAQ;AAE1C,QAAI,MAAM;AACV,QAAI,IAAI,CAAC,MAAM,KAAK;AAClB,YAAM,KAAK,SAAS,MAAM,QAAQ,KAAK;AACvC,YAAM,IAAI,QAAQ,MAAM,GAAG;AAAA,IAC5B;AAED,QAAI,KAAK,QAAQ,WAAW;AAC1B,YAAM,KAAK,SAAS,WAAW,GAAG;AAAA,IACnC;AAED,UAAMJ,cAAa,KAAK,SAAS,GAAG;AAEpC,IAAAA,YAAW,MAAM,CAAC,QAAQ;AACxB,UAAI,OAAO,IAAI,SAAS,sBAAsB;AAE5C,aAAK,SAAS,WAAW,aAAa,EAAE,SAAS,OAAO;AAAA,MACzD;AACD,aAAO;AAAA,IACb,CAAK;AAED,SAAK,SAAS,MAAM,EAAE,KAAK,EAAE,SAAS,OAAO;AAE7C,WAAOA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,MAAM,MAAM;AACV,YAAQ,QAAQ,IAAI,QAAQ,OAAO,EAAE,KAAK;AAC1C,QAAI;AACJ,QAAI,SAAS,CAAE;AACf,UAAM,mBAAmB,aAAa,IAAI;AAC1C,UAAM,EAAE,IAAAH,KAAI,iBAAAQ,iBAAiB,IAAG,KAAK;AACrC,SAAK,SAAS,KAAK,CAAC,YAAY;AAC9B,eAAS,cAAc,QAAQ,MAAM,kBAAkBA,gBAAe;AACtE,UAAI,QAAQ;AACV,iBAAS,QAAQ;AACjB,eAAO;AAAA,MACR;AAAA,IACP,CAAK;AACD,WAAO;AAAA,MACL,QAAQ,OAAO,IAAI,UAAU;AAAA,MAC7B,QAAQ,UAAU,CAAE;AAAA,MACpB,UAAU;AAAA,MACV,OAAO,aAAaR,KAAI,IAAI,KAAK,CAAE;AAAA,IACpC;AAQD,aAAS,WAAW,OAAO;AACzB,aAAO;AAAA,QACL,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,QAAQ,KAAK,QAAQ,kBAAkB,MAAM,MAAMQ,gBAAe,CAAC;AAAA,QACnE,SAAS,MAAM,MAAM,OAAO;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,SAAS,MAAM;AACb,UAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,UAAM,QAAQ,MAAM;AACpB,UAAM,WAAW,MAAM;AAEvB,UAAM,mBAAmB,KAAK,MAAM;AAIpC,QACE,oBACA,iBAAiB,aAAa,YAC9BT,UAAQ,iBAAiB,OAAO,KAAK,GACrC;AACA,aAAO;AAAA,IACR;AAID,QAAI,kBAAkB;AACpB,YAAM,MAAM,IAAI,MAAM,qBAAqB;AAC3C,UAAI,OAAO;AACX,UAAI,WAAW;AACf,uBAAiB,OAAO,GAAG;AAAA,IAC5B;AAMD,QAAI,CAAC,kBAAkB;AACrB,UAAI,KAAK,MAAM,aAAa,YAAYA,UAAQ,KAAK,MAAM,OAAO,KAAK,GAAG;AACxE,eAAO,WAAW;AAAA,UAChB,IAAI,KAAK;AAAA,UACT;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,QAClB,CAAS;AAAA,MACF;AAAA,IACF;AAED,UAAM,IAAI,WAAW;AAAA,MACnB,IAAI,KAAK;AAAA,MACT;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACd,CAAK;AAED,SAAK,MAAM,mBAAmB;AAE9B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWD,eAAe,MAAM;AACnB,UAAM,WAAW,KAAK,QAAQ;AAC9B,QAAI,OAAO,aAAa,UAAU;AAChC,aAAO;AAAA,IACR;AACD,QAAI,aAAa,WAAW;AAC1B,aAAO,IAAI,gBAAgB,KAAK,KAAK,SAAS,CAAC,aAAa,MAAM,CAAC,CAAC;AAAA,IAC1E,WAAe,aAAa,UAAU;AAChC,aAAO,IAAI,eAAe,EAAE,MAAM;AAAA,IACxC,OAAW;AACL,YAAM,IAAI,MAAM,gEAAgE;AAAA,IACjF;AAAA,EACF;AAAA,EAED,OAAO,MAAM;AACX,YAAQ,KAAK,GAAG,IAAI;AAAA,EACrB;AAAA,EAED,YAAY,MAAM;AAChB,YAAQ,MAAM,GAAG,IAAI;AAAA,EACtB;AACH;AAQA,SAAS,oBAAoB,OAAO,MAAMG,SAAQ;AAChD,QAAM,eAAgB;AACtB,EAAAA,QAAO,aAAaA,QAAO,SAAS,WAAW,KAAK,aAAa,MAAM,CAAC,CAAC;AAC3E;AAUA,SAAS,eAAeA,SAAQ,KAAK,UAAU,eAAe,qBAAqB;AACjF,SAAO,UAAU,IAAI,CAAC,OAAO,SAAS,aAAa,OAAO,MAAMA,OAAM,CAAC;AACzE;AC7eA,MAAM,WAAW,QAAQ,QAAS;AAClC,IAAI,aAAa,uBAAO,OAAO,IAAI;AACnC,IAAI,oBAAoB,uBAAO,OAAO,IAAI;AAC1C,IAAI,qBAAqB,uBAAO,OAAO,IAAI;AAE3C,IAAI,QAAQ,YAAY;AAmCxB,SAAS,YAAY,OAAO;AAC1B,QAAM,IAAI,WAAW,KAAK;AAC1B,QAAM,YAAY,SAAS;AAC3B,SAAO,YAAY,IAAI;AACzB;AAEA,SAAS,kBAAkB,OAAO,QAAQ;AACxC,MAAI,IAAI;AACR,MAAI,MAAM,QAAW;AACnB,QAAI,WAAW,UAAU;AACvB,UAAI,YAAY,KAAK;AAAA,IAC3B,WAAe,OAAO,WAAW,YAAY;AACvC,UAAI,OAAO,KAAK;AAAA,IACjB;AAAA,EACF;AACD,SAAO;AACT;AAMO,SAAS,UAAU,OAAO;AAC/B,SAAO;AAAA,IACL,KAAK,UAAU;AACb,eAAS,KAAK;AAAA,IACf;AAAA,EACF;AACH;AAiCA,SAAS,OAAO,UAAU;AACxB,WAAS;AACT,eAAa,SAAS,QAAQ;AAChC;AAEA,SAAS,UAAU;AACjB,WAAS;AACT,eAAa,uBAAO,OAAO,IAAI;AAC/B,sBAAoB,uBAAO,OAAO,IAAI;AACtC,uBAAqB,uBAAO,OAAO,IAAI;AACvC,iBAAe;AACjB;AAEA,SAAS,QAAQ,MAAM,MAAM;AAC3B,QAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,SAAO,MAAM,WAAW,OAAO,KAAK,IAAI,EAAE,UAAU,MAAM,MAAM,CAAC,QAAQ,KAAK,GAAG,MAAM,KAAK,GAAG,CAAC;AAClG;AAEA,SAAS,UAAU,IAAI;AACrB,QAAM,aAAa,GAAG,cAAc;AACpC,SAAO,WAAW,cAAc,GAAG,YAAY,UAAU,eAAe;AAC1E;AAEA,SAAS,oBAAoB;AAC3B,MAAI,aAAc,QAAO;AACzB,MAAI,CAAC,WAAY,QAAO,SAAS;AACjC,iBAAe,OAAO,eAAe,WAAW,SAAS,cAAc,UAAU,IAAI;AACrF,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,MAAM,2CAA2C,UAAU,EAAE;AAAA,EACxE;AACD,SAAO;AACT;AAEA,SAAS,YAAYC,aAAY,aAAa;AAC5C,MAAI,SAASA,YAAW,OAAO,WAAW;AAC1C,SAAO,QAAQ;AACb,QAAI,OAAO,QAAQ,WAAW;AAC5B,aAAO,WAAW,OAAO,IAAI;AAAA,IAC9B;AACD,aAASA,YAAW,OAAO,EAAE,WAAW;AAAA,EACzC;AACH;AAEA,SAAS,iBAAiB,YAAY,eAAe;AACnD,MAAI,OAAO,MAAM;AACjB,QAAM,QAAQ,KAAK,IAAI,WAAW,QAAQ,cAAc,MAAM;AAC9D,OAAK,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACtC,WAAO,WAAW,KAAK;AACvB,cAAU,cAAc,KAAK;AAC7B,QAAI,EAAE,QAAQ,YAAY,KAAK,SAAS,QAAQ,QAAQ,CAAC,QAAQ,KAAK,QAAQ,QAAQ,MAAM,GAAG;AAC7F;AAAA,IACD;AAAA,EACF;AACD,SAAO;AACT;AAEA,SAAS,sBAAsBA,aAAY,QAAQ,QAAQ;AACzD,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,EAAE,MAAK,IAAK,OAAO,CAAC;AAC1B,UAAM,iBAAiB,mBAAmB,MAAM,IAAI;AACpD,eAAW,EAAE,OAAO,IAAG,KAAM,OAAO,OAAO,cAAc,GAAG;AAC1D,YAAM,QAAQ,CAAC,SAAS;AACtB,YAAI,OAAO,KAAK,MAAM,MAAM,YAAY;AACtC,eAAK,MAAM,EAAEA,aAAY,GAAG;AAAA,QAC7B;AAAA,MACT,CAAO;AAAA,IACF;AAAA,EACF;AACH;AAEA,eAAe,aAAaA,aAAY,QAAQ,QAAQ,QAAQ;AAC9D,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,QAAI;AACJ,UAAM,EAAE,OAAO,OAAO,OAAO,CAAC;AAC9B,UAAM,cAAc,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,EAAE;AACtD,QAAI,OAAO,gBAAgB,YAAY;AACrC,eAAS,MAAM,YAAYA,WAAU;AACrC,UAAI,WAAW,OAAO;AACpB,QAAAA,YAAW,OAAQ;AAAA,MACpB;AAAA,IACF;AACD,QAAIA,YAAW,YAAa;AAC5B,UAAM,WAAW,MAAM,GAAG,GAAG,MAAM,QAAQ,MAAM,EAAE;AACnD,QAAI,OAAO,aAAa,YAAY;AAClC,eAAS,MAAM,SAAS,KAAK,IAAIA,WAAU;AAC3C,UAAI,WAAW,OAAO;AACpB,QAAAA,YAAW,OAAQ;AAAA,MACpB;AAAA,IACF;AACD,QAAIA,YAAW,YAAa;AAAA,EAC7B;AACH;AAEA,SAAS,cAAc,OAAO;AAC5B,SAAO,SAAS,MAAM,aAAa,MAAM,UAAU;AACrD;AAEA,SAAS,iBAAiB,OAAO;AAC/B,MAAI,SAAS,OAAO,UAAU,SAAU,QAAO;AAC/C,SAAO,UAAU,KAAK;AACxB;AAEA,SAAS,eAAe,OAAO;AAC7B,MAAI,iBAAiB,mBAAmB,MAAM,IAAI;AAClD,MAAI,CAAC,gBAAgB;AACnB,qBAAiB,mBAAmB,MAAM,IAAI,IAAI,uBAAO,OAAO,IAAI;AACpE,UAAM,aAAa,MAAM,QAAQ;AACjC,QAAI,YAAY;AACd,iBAAW,CAAC,MAAM,WAAW,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC5D,cAAM,QAAQ,MAAM,QAAQ,WAAW,IACnC,YAAY,IAAI,gBAAgB,IAChC,CAAC,iBAAiB,WAAW,CAAC;AAElC,cAAM,MAAM,CAAC,GAAG,WAAW;AACzB,gBAAM,eAAe,eAAe,IAAI;AACxC,gBAAM,WAAW,kBAAkB,GAAG,MAAM;AAC5C,cAAI,aAAa,UAAU,SAAU;AACrC,uBAAa,QAAQ;AACrB,gBAAM,KAAK,WAAW,MAAM,IAAI;AAChC,cAAI,IAAI;AACN,eAAG,IAAI,IAAI;AAAA,UACZ;AACD,gBAAM,QAAQ,CAAC,SAAS;AACtB,gBAAI,OAAO,KAAK,WAAW,YAAY;AACrC,mBAAK,OAAO,UAAU,EAAE;AAAA,YACzB;AAAA,UACb,CAAW;AAAA,QACF;AACD,uBAAe,IAAI,IAAI,EAAE,OAAO,IAAK;AACrC,cAAM,QAAQ,CAAC,SAAS;AACtB,cAAI,OAAO,KAAK,SAAS,YAAY;AACnC,iBAAK,KAAK,GAAG;AAAA,UACd;AAAA,QACX,CAAS;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACH;AAEA,eAAe,cAAc,QAAQ;AACnC,QAAM,SAAS,CAAE;AAEjB,aAAW,SAAS,QAAQ;AAC1B,QAAI,KAAK,MAAM,QAAQ,QAAQ,WAAW,MAAM,IAAI,IAAI;AACxD,QAAI,YAAY,MAAM,QAAQ;AAC9B,QAAI,CAAC,MAAM,WAAW;AACpB,UAAI,OAAO,cAAc,cAAc,EAAE,UAAU,qBAAqB,cAAc;AACpF,oBACE,kBAAkB,MAAM,IAAI,MAC3B,kBAAkB,MAAM,IAAI,IAAI,cAAc,MAAM,UAAU,KAAK,CAAC;AAAA,MACxE;AACD,WAAK,OAAO,cAAc,WAAW,SAAS,cAAc,SAAS,IAAI,IAAI,UAAW;AACxF,iBAAW,MAAM,IAAI,IAAI;AACzB,SAAG,UAAU;AAAA,IACd;AAED,mBAAe,KAAK;AAEpB,WAAO,KAAK,EAAE,IAAI,MAAK,CAAE;AAAA,EAC1B;AACD,SAAO;AACT;AAEA,SAAS,gBAAgB,IAAI,OAAO;AAClC,QAAM,iBAAiB,mBAAmB,MAAM,IAAI;AACpD,SAAO,QAAQ,cAAc,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAK,CAAE,MAAM;AAC5D,OAAG,IAAI,IAAI;AAAA,EACf,CAAG;AACH;AAEA,MAAM,aAAa,oBAAI,QAAS;AAChC,MAAM,kBAAkB,oBAAI,QAAS;AAErC,eAAe,eAAeA,aAAY,WAAW,eAAe;AAElE,QAAM,EAAE,MAAM,UAAU,QAAQ,QAAQ,MAAK,IAAKA;AAClD,QAAM,aAAa,EAAE,MAAM,UAAU,QAAQ,QAAQ,MAAO;AAC5D,WAAS,IAAI,GAAG,IAAI,eAAe,KAAK;AACtC,UAAM,QAAQA,YAAW,OAAO,CAAC;AACjC,UAAM,KAAK,WAAW,MAAM,IAAI;AAChC,QAAI,IAAI;AACN,SAAG,SAAS;AACZ,sBAAgB,IAAI,KAAK;AAAA,IAC1B;AAAA,EACF;AACD,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,EAAE,IAAI,UAAU,UAAU,CAAC;AACjC,QAAI,IAAI;AACN,YAAM,WAAW,YAAYA,aAAY,gBAAgB,IAAI,CAAC;AAC9D,YAAM,WAAW,WAAW,UAAU,QAAQ,IAAI,kBAAmB;AACrE,UAAI,UAAU;AACZ,cAAM,YAAY,gBAAgB,IAAI,QAAQ,KAAK,SAAS;AAC5D,YAAI,WAAW;AACb,mBAAS,YAAY,SAAS;AAC9B,qBAAW,IAAI,SAAS;AAAA,QACzB;AACD,WAAG,SAAS;AACZ,wBAAgB,IAAI,KAAK;AACzB,iBAAS,YAAY,EAAE;AACvB,wBAAgB,IAAI,UAAU,EAAE;AAChC,eAAO,GAAG,kBAAkB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACH;AAEA,SAAS,cAAc,WAAW,aAAa;AAC7C,MAAI;AACJ,WAAS,aAAa,YAAY,SAAS,GAAG,cAAc,GAAG,cAAc;AAC3E,UAAM,EAAE,OAAO,OAAO,YAAY,UAAU;AAC5C,QAAI,CAAC,UAAU,KAAK,CAAC,EAAE,OAAO,YAAa,MAAK,YAAY,SAAS,MAAM,IAAI,GAAG;AAChF,UAAI,IAAI;AAIN,YAAI,CAAC,mBAAmB,CAAC,WAAW,IAAI,EAAE,EAAG,IAAG,OAAQ;AACxD,0BAAkB;AAAA,MACnB;AACD,iBAAW,MAAM,IAAI,IAAI;AAAA,IAC1B;AAAA,EACF;AACH;AAEA,eAAe,QAAQA,aAAY;AACjC,QAAM,aAAaA,YAAW,KAAK;AACnC,QAAM,gBAAgB,iBAAiB,YAAYA,YAAW,MAAM;AACpE,QAAM,cAAc,CAAE;AAGtB,WAAS,aAAa,WAAW,SAAS,GAAG,cAAc,eAAe,cAAc;AACtF,UAAM,QAAQ,WAAW,UAAU;AACnC,gBAAY,KAAK,EAAE,IAAI,WAAW,MAAM,IAAI,GAAG,OAAO;AAAA,EACvD;AAED,QAAM,aAAaA,aAAY,aAAa,UAAU,OAAO;AAE7D,MAAIA,YAAW,YAAa;AAE5B,QAAM,YAAY,MAAM,cAAcA,YAAW,OAAO,MAAM,aAAa,CAAC;AAE5E,QAAM,aAAaA,aAAY,WAAW,UAAU,OAAO;AAE3D,MAAIA,YAAW,YAAa;AAE5B,wBAAsBA,aAAY,WAAW,OAAO;AAEpD,QAAM,eAAeA,aAAY,WAAW,aAAa;AAEzD,gBAAc,WAAW,WAAW;AAEpC,EAAAA,YAAW,YAAY;AACvB,EAAAA,YAAW,cAAc;AAC3B;AAEA,SAAS,KAAKA,aAAY;AACxB,wBAAsBA,aAAYA,YAAW,aAAa,OAAO;AACjE,eAAaA,aAAYA,YAAW,aAAa,SAAS,OAAO;AACjE,eAAaA,aAAYA,YAAW,WAAW,SAAS,OAAO;AACjE;AAEO,MAAM,KAAK;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;ACnWA,MAAMM,gBAAeC,SAAW;AAAA,EAC9B,YAAY,SAAS;AACnB,UAAM,OAAO;AACb,SAAK,IAAI,EAAE;AACX,SAAK,IAAI,WAAW;AAAA,EACrB;AACH;ACjBA,IAAI;AAEJ,SAAS,QAAQ,MAAM,QAAQ;AAC7B,SAAO,cAAc,IAAI,YAAY,GAAG,WAAW,GAAG,IAAI,IAAI,EAAE,OAAM,CAAE,CAAC;AAC3E;AAEO,MAAM,SAAS;AAAA,EACpB,QAAQ,SAAUR,SAAQ;AACxB,kBAAcA,QAAO,QAAQ,eAAe;AAAA,EAC7C;AAAA,EAED,QAAQ,SAAUC,aAAY;AAC5B,YAAQ,qBAAqB,EAAE,YAAAA,aAAY;AAAA,EAC5C;AAAA,EAED,MAAM,SAAUA,aAAY;AAC1B,YAAQ,cAAc,EAAE,YAAAA,aAAY;AAAA,EACrC;AAAA,EAED,QAAQ,SAAUA,aAAY,OAAO;AACnC,QAAI,MAAM,SAAS,wBAAwB;AACzC,cAAQ,SAAS,EAAE,YAAAA,aAAY,MAAK,CAAE;AAAA,IACvC;AAAA,EACF;AAAA,EAED,OAAO,SAAUA,aAAY,OAAO;AAClC,YAAQ,SAAS,EAAE,YAAAA,aAAY,MAAK,CAAE;AACtC,YAAQ,SAAS,EAAE,YAAAA,aAAY,MAAK,CAAE;AAAA,EACvC;AACH;ACfe,MAAM,gBAAgB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3C,cAAc;AACV,UAAO;AAGX,qCAAY;AA2FZ;AAAA;AAAA;AAAA;AAAA,yCAAgB,CAACA,gBAAe;AAC5B,UAAI,aAAa;AAAA,QACb,GAAGA,YAAW,OACT,OAAO,CAAC,QAAQ,gBAAgB,IAAI,OAAO,EAC3C,IAAI,CAAC,GAAG,MAAM;;AACX,iBAAO;AAAA,YACH,MAAM,EAAE,QAAQ,kBAAkB,EAAE;AAAA,YACpC,MACI,EAAE,QAAQ,sBAAsB,YAC1B,aAAE,SAAQ,eAAV,4BAAuBA,eACvB,EAAE,QAAQ;AAAA,YACpB,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAGA,YAAW,OAAQ;AAAA,YAC7C,MAAM,KAAK,OAAO,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAGA,YAAW,OAAM,CAAE;AAAA,UAC3E;AAAA,QACrB,CAAiB;AAAA,MACR;AAED,MAAAA,YAAW,cAAc;AAAA,IAC5B;AAMD;AAAA;AAAA;AAAA;AAAA,+CAAsB,CAACA,gBAAe;AAClC,aAAO,SAAS,GAAG,CAAC;AAAA,IACvB;AAAA,EAvHL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASI,WAAW,qBAAqB;AAC5B,WAAO,CAAE;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKI,kBAAkB;AACd,SAAK,eAAe;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKI,aAAa;AACT,UAAM,aAAa,KAAK;AAExB,UAAM,SAAS,IAAI,UAAW;AAC9B,UAAM,eAAe,OAAO,gBAAgB,YAAY,WAAW;AACnE,UAAM,cAAc,aAAa,cAAc,YAAY;AAE3D,UAAM,SAAS,KAAK,aAAa,WAAW,EAAE;AAE9C,SAAK,SAAS,IAAIM,QAAO;AAAA,MACrB,QAAQ,KAAK,UAAU;AAAA,MACvB,KAAK;AAAA,MACL,UAAU;AAAA,MACV,MAAM,KAAK,QAAQ;AAAA,MACnB,WAAW;AAAA,IACvB,CAAS;AAED,SAAK,OAAO,IAAI,MAAM;AACtB,SAAK,OAAO,IAAI,KAAK,aAAa;AAClC,SAAK,OAAO,IAAI,MAAM;AACtB,SAAK,OAAO,IAAI,KAAK,mBAAmB;AACxC,SAAK,OAAO,OAAQ;AAEpB,SAAK,kBAAkB,eAAe,KAAK,MAAM;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOI,aAAa,SAAS;AAClB,UAAM,MAAM,CAAE;AACd,UAAM,aAAa,QAAQ;AAE3B,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,YAAM,gBAAgB,WAAW,CAAC,EAAE;AACpC,YAAM,iBAAiB,WAAW,CAAC,EAAE;AAErC,UAAI,kBAAkB,eAAe,eAAe,QAAQ,KAAK,IAAI,IAAI;AAErE,YAAI,YAAY,MAAM;AAAA;AAAA,UAA0B;AAAA;AAAA,MAChE,OAAmB;AACH,YAAI,kBAAkB,UAAU;AAC5B,gBAAM,YAAY,cAAc,QAAQ,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa;AAC9E,cAAI,SAAS,IAAI;AAAA,QACrC;AAAA,MACA;AAAA,IACA;AAEQ,UAAM,WAAW,CAAE;AACnB,UAAM,gBAAgB,MAAM,KAAK,QAAQ,QAAQ;AAEjD,kBAAc,QAAQ,CAAC,iBAAiB;AACpC,eAAS,KAAK,KAAK,aAAa,YAAY,CAAC;AAAA,IACzD,CAAS;AAED,QAAI,SAAS,SAAS,KAAK,QAAQ,YAAY,aAAa;AACxD,UAAI,WAAW;AAAA,IAC3B,OAAe;AACH,UAAI,OAAO;AAAA,IACvB;AAEQ,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAqCI,mBAAmB;AACf,SAAK,gBAAiB;AACtB,SAAK,OAAO,QAAS;AAAA,EAC7B;AACA;ACjJA,QAAQ,OAAO,cAAc,OAAO;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wj-elements",
|
|
3
3
|
"description": "WebJET Elements is a modern set of user interface tools harnessing the power of web components designed to simplify web application development.",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.172",
|
|
5
5
|
"homepage": "https://github.com/lencys/wj-elements",
|
|
6
6
|
"author": "Lukáš Ondrejček <lukas.ondrejcek@gmail.com>",
|
|
7
7
|
"license": "MIT",
|