wj-elements 0.1.169 → 0.1.171
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-accordion/accordion.test.d.ts +0 -0
- package/dist/packages/wje-checkbox/checkbox.element.d.ts +1 -0
- package/dist/packages/wje-color-picker/color-picker.test.d.ts +1 -0
- package/dist/packages/wje-element/element.d.ts +1 -1
- package/dist/packages/wje-file-upload-item/file-upload-item.element.d.ts +2 -0
- package/dist/wje-checkbox.js +23 -5
- package/dist/wje-checkbox.js.map +1 -1
- package/dist/wje-file-upload-item.js +14 -2
- package/dist/wje-file-upload-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
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -97,7 +97,7 @@ export default class WJElement extends HTMLElement {
|
|
|
97
97
|
* Gets the rendering context, either the shadow root or the component itself.
|
|
98
98
|
* @returns The rendering context.
|
|
99
99
|
*/
|
|
100
|
-
get context():
|
|
100
|
+
get context(): any;
|
|
101
101
|
/**
|
|
102
102
|
* Gets the store instance.
|
|
103
103
|
* @returns {object} The store instance.
|
|
@@ -31,6 +31,8 @@ export default class FileUploadItem extends WJElement {
|
|
|
31
31
|
*/
|
|
32
32
|
static get observedAttributes(): Array<string>;
|
|
33
33
|
localizer: Localizer;
|
|
34
|
+
set isUploaded(value: boolean);
|
|
35
|
+
get isUploaded(): boolean;
|
|
34
36
|
set size(value: string);
|
|
35
37
|
get size(): string;
|
|
36
38
|
/**
|
package/dist/wje-checkbox.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
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 __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
9
|
+
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);
|
|
10
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
11
|
+
var _internalValue;
|
|
4
12
|
import WJElement, { event } from "./wje-element.js";
|
|
5
13
|
const styles = `/*
|
|
6
14
|
[ Checkbox ]
|
|
@@ -269,6 +277,7 @@ class Checkbox extends WJElement {
|
|
|
269
277
|
*/
|
|
270
278
|
constructor() {
|
|
271
279
|
super();
|
|
280
|
+
__privateAdd(this, _internalValue, false);
|
|
272
281
|
/**
|
|
273
282
|
* The class name for the Checkbox.
|
|
274
283
|
*/
|
|
@@ -281,15 +290,18 @@ class Checkbox extends WJElement {
|
|
|
281
290
|
*/
|
|
282
291
|
set value(value) {
|
|
283
292
|
this.internals.setFormValue(value);
|
|
284
|
-
|
|
293
|
+
__privateSet(this, _internalValue, value);
|
|
294
|
+
if (this.input) {
|
|
295
|
+
this.input.value = value;
|
|
296
|
+
this.input.checked = value;
|
|
297
|
+
}
|
|
285
298
|
}
|
|
286
299
|
/**
|
|
287
300
|
* Getter for the value attribute.
|
|
288
301
|
* @returns {string} The value of the attribute.
|
|
289
302
|
*/
|
|
290
303
|
get value() {
|
|
291
|
-
|
|
292
|
-
return ((_a = this.input) == null ? void 0 : _a.value) || "";
|
|
304
|
+
return __privateGet(this, _internalValue);
|
|
293
305
|
}
|
|
294
306
|
/**
|
|
295
307
|
* Getter for the customErrorDisplay attribute.
|
|
@@ -401,8 +413,13 @@ class Checkbox extends WJElement {
|
|
|
401
413
|
* @param {boolean} value true if the toggle is checked, false otherwise
|
|
402
414
|
*/
|
|
403
415
|
set checked(value) {
|
|
404
|
-
if (value)
|
|
405
|
-
|
|
416
|
+
if (value) {
|
|
417
|
+
this.setAttribute("checked", "");
|
|
418
|
+
this.value = true;
|
|
419
|
+
} else {
|
|
420
|
+
this.removeAttribute("checked");
|
|
421
|
+
this.value = false;
|
|
422
|
+
}
|
|
406
423
|
}
|
|
407
424
|
/**
|
|
408
425
|
* Get checked attribute.
|
|
@@ -529,6 +546,7 @@ class Checkbox extends WJElement {
|
|
|
529
546
|
console.warn("formDisabledCallback not implemented yet");
|
|
530
547
|
}
|
|
531
548
|
}
|
|
549
|
+
_internalValue = new WeakMap();
|
|
532
550
|
/**
|
|
533
551
|
* Whether the input is associated with a form.
|
|
534
552
|
* @type {boolean}
|
package/dist/wje-checkbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-checkbox.js","sources":["../packages/wje-checkbox/checkbox.element.js","../packages/wje-checkbox/checkbox.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This method dispatches a custom event named \"wje-checkbox:change\".\n * It is triggered when the input event is fired, which happens when the state of the checkbox changes.\n * The event is dispatched on the current instance of the Checkbox class.\n * @documentation https://elements.webjet.sk/components/checkbox\n * @status stable\n * @augments WJElement\n * @slot - The checkbox main content.\n * @csspart native - The component's native wrapper.\n * @cssproperty [--wje-checkbox-border-radius=--wje-border-radius-medium] - Border radius of the component;\n * @cssproperty [--wje-checkbox-border-width=1px] - Border width of the component;\n * @cssproperty [--wje-checkbox-border-style=solid] - Border style of the component;\n * @cssproperty [--wje-checkbox-border-color=--wje-color-contrast-1] - Border color of the component;\n * @cssproperty [--wje-checkbox-margin-inline=0] - Margin inline of the component;\n * //@fires wje-checkbox:change - Dispatched when the checkbox state changes;\n */\nexport default class Checkbox extends WJElement {\n /**\n * Checkbox constructor method.\n */\n constructor() {\n super();\n this.internals = this.attachInternals();\n }\n\n /**\n * Setter for the value attribute.\n * @param {string} value The value to set.\n */\n set value(value) {\n this.internals.setFormValue(value);\n\n if (this.input) this.input.value = value;\n }\n\n /**\n * Getter for the value attribute.\n * @returns {string} The value of the attribute.\n */\n get value() {\n return this.input?.value || '';\n }\n\n /**\n * Getter for the customErrorDisplay attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get customErrorDisplay() {\n return this.hasAttribute('custom-error-display');\n }\n\n /**\n * Getter for the validateOnChange attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get validateOnChange() {\n return this.hasAttribute('validate-on-change');\n }\n\n /**\n * Setter for the invalid attribute.\n * @param {boolean} isInvalid Whether the input is invalid.\n */\n set invalid(isInvalid) {\n if (isInvalid) this.setAttribute('invalid', '');\n else this.removeAttribute('invalid');\n }\n\n /**\n * Getter for the invalid attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get invalid() {\n return this.hasAttribute('invalid');\n }\n\n /**\n * Getter for the form attribute.\n * @returns {HTMLFormElement} The form the input is associated with.\n */\n get form() {\n return this.internals.form;\n }\n\n /**\n * Getter for the name attribute.\n * @returns {string} The name of the input.\n */\n get name() {\n return this.getAttribute('name');\n }\n\n /**\n * Getter for the type attribute.\n * @returns {string} The type of the input.\n */\n get type() {\n return this.localName;\n }\n\n /**\n * Getter for the validity attribute.\n * @returns {ValidityState} The validity state of the input.\n */\n get validity() {\n return this.internals.validity;\n }\n\n /**\n * Getter for the validationMessage attribute.\n * @returns {string} The validation message of the input.\n */\n get validationMessage() {\n return this.internals.validationMessage;\n }\n\n /**\n * Getter for the willValidate attribute.\n * @returns {boolean} Whether the input will be validated.\n */\n get willValidate() {\n return this.internals.willValidate;\n }\n\n /**\n * Getter for the defaultValue attribute.\n * This method retrieves the 'value' attribute of the custom input element.\n * The 'value' attribute represents the default value of the input element.\n * If the 'value' attribute is not set, it returns an empty string.\n * @returns {string} The default value of the input element.\n */\n get defaultValue() {\n return this.getAttribute('value') ?? '';\n }\n\n /**\n * Setter for the defaultValue attribute.\n * This method sets the 'value' attribute of the custom input element to the provided value.\n * The 'value' attribute represents the default value of the input element.\n * @param {string} value The value to set as the default value.\n */\n set defaultValue(value) {\n this.setAttribute('value', value);\n }\n\n /**\n * Set checked attribute.\n * @param {boolean} value true if the toggle is checked, false otherwise\n */\n set disabled(value) {\n if (value) this.setAttribute('disabled', '');\n else this.removeAttribute('disabled');\n }\n\n /**\n * Get disabled attribute value.\n * @returns {boolean} true if the toggle is disabled, false otherwise\n */\n get disabled() {\n return this.hasAttribute('disabled');\n }\n\n /**\n * Set checked attribute.\n * @param {boolean} value true if the toggle is checked, false otherwise\n */\n set checked(value) {\n if (value) this.setAttribute('checked', '');\n else this.removeAttribute('checked');\n }\n\n /**\n * Get checked attribute.\n * @returns {boolean} true if the toggle is checked, false otherwise\n */\n get checked() {\n return this.hasAttribute('checked');\n }\n\n /**\n * The class name for the Checkbox.\n */\n className = 'Checkbox';\n\n /**\n * Getter for the CSS stylesheet.\n * @returns {string} The CSS stylesheet.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n static get observedAttributes() {\n return ['checked', 'disabled', 'value', 'indeterminate'];\n }\n\n /**\n * Whether the input is associated with a form.\n * @type {boolean}\n */\n static formAssociated = true;\n\n /**\n * Sets up the attributes for the checkbox.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Draws the checkbox element.\n * @returns {DocumentFragment} The created fragment.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-checkbox');\n\n let input = document.createElement('input');\n input.type = 'checkbox';\n input.id = 'checkbox';\n input.name = this.name || 'checkbox';\n input.checked = this.hasAttribute('checked');\n input.disabled = this.hasAttribute('disabled');\n input.indeterminate = this.hasAttribute('indeterminate');\n\n let label = document.createElement('label');\n label.htmlFor = 'checkbox';\n label.innerHTML = '<slot></slot>';\n\n native.appendChild(input);\n native.appendChild(label);\n\n this.input = input;\n\n fragment.appendChild(native);\n\n return fragment;\n }\n\n /**\n * Adds an event listener after drawing the checkbox.\n */\n afterDraw() {\n if (!this.disabled) {\n this.input.addEventListener('input', (e) => {\n this.value = e.target.checked;\n this.checked = e.target.checked;\n event.dispatchCustomEvent(this, 'wje-toggle:input');\n });\n\n this.input.addEventListener('change', (e) => {\n this.value = e.target.checked;\n this.checked = e.target.checked;\n event.dispatchCustomEvent(this, 'wje-toggle:change');\n });\n }\n }\n\n /**\n * Removes the event listener when the checkbox is disconnected.\n */\n beforeDisconnect() {\n event.removeElement(this.input);\n }\n\n /**\n * @summary Callback function that is called when the custom element is associated with a form.\n * This function adds an event listener to the form's submit event, which validates the input and propagates the validation.\n * @param {HTMLFormElement} form The form the custom element is associated with.\n */\n formAssociatedCallback(form) {\n if (form) {\n this.internals.setFormValue(this.value);\n }\n }\n\n /**\n * The formResetCallback method is a built-in lifecycle callback that gets called when a form gets reset.\n * This method is responsible for resetting the value of the custom input element to its default value.\n * It also resets the form value and validity state in the form internals.\n * @function\n */\n formResetCallback() {\n // Set the value of the custom input element to its default value\n this.value = this.defaultValue;\n // Reset the form value in the form internals to the default value\n this.internals.setFormValue(this.defaultValue);\n // Reset the validity state in the form internals\n this.internals.setValidity({});\n }\n\n /**\n * The formStateRestoreCallback method is a built-in lifecycle callback that gets called when the state of a form-associated custom element is restored.\n * This method is responsible for restoring the value of the custom input element to its saved state.\n * It also restores the form value and validity state in the form internals to their saved states.\n * @param {object} state The saved state of the custom input element.\n * @function\n */\n formStateRestoreCallback(state) {\n // Set the value of the custom input element to its saved value\n this.value = state.value;\n // Restore the form value in the form internals to the saved value\n this.internals.setFormValue(state.value);\n // Restore the validity state in the form internals to the saved state\n this.internals.setValidity({});\n }\n\n /**\n * The formStateSaveCallback method is a built-in lifecycle callback that gets called when the state of a form-associated custom element is saved.\n * This method is responsible for saving the value of the custom input element.\n * @returns {object} The saved state of the custom input element.\n * @function\n */\n formStateSaveCallback() {\n return {\n value: this.value,\n };\n }\n\n /**\n * The formDisabledCallback method is a built-in lifecycle callback that gets called when the disabled state of a form-associated custom element changes.\n * This method is not implemented yet.\n * @param {boolean} disabled The new disabled state of the custom input element.\n * @function\n */\n formDisabledCallback(disabled) {\n console.warn('formDisabledCallback not implemented yet');\n }\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport Checkbox from './checkbox.element.js';\n\n// export * from \"./checkbox.element.js\";\nexport default Checkbox;\n\nWJElement.define('wje-checkbox', Checkbox);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-checkbox.js","sources":["../packages/wje-checkbox/checkbox.element.js","../packages/wje-checkbox/checkbox.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This method dispatches a custom event named \"wje-checkbox:change\".\n * It is triggered when the input event is fired, which happens when the state of the checkbox changes.\n * The event is dispatched on the current instance of the Checkbox class.\n * @documentation https://elements.webjet.sk/components/checkbox\n * @status stable\n * @augments WJElement\n * @slot - The checkbox main content.\n * @csspart native - The component's native wrapper.\n * @cssproperty [--wje-checkbox-border-radius=--wje-border-radius-medium] - Border radius of the component;\n * @cssproperty [--wje-checkbox-border-width=1px] - Border width of the component;\n * @cssproperty [--wje-checkbox-border-style=solid] - Border style of the component;\n * @cssproperty [--wje-checkbox-border-color=--wje-color-contrast-1] - Border color of the component;\n * @cssproperty [--wje-checkbox-margin-inline=0] - Margin inline of the component;\n * //@fires wje-checkbox:change - Dispatched when the checkbox state changes;\n */\nexport default class Checkbox extends WJElement {\n\t#internalValue = false;\n\t/**\n\t * Checkbox constructor method.\n\t */\n\tconstructor() {\n\t\tsuper();\n\t\tthis.internals = this.attachInternals();\n\t}\n\n\t/**\n\t * Setter for the value attribute.\n\t * @param {string} value The value to set.\n\t */\n\tset value(value) {\n\t\tthis.internals.setFormValue(value);\n\t\tthis.#internalValue = value;\n\n\t\tif (this.input) {\n\t\t\tthis.input.value = value;\n\t\t\tthis.input.checked = value;\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the value attribute.\n\t * @returns {string} The value of the attribute.\n\t */\n\tget value() {\n\t\treturn this.#internalValue;\n\t}\n\n\t/**\n\t * Getter for the customErrorDisplay attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget customErrorDisplay() {\n\t\treturn this.hasAttribute('custom-error-display');\n\t}\n\n\t/**\n\t * Getter for the validateOnChange attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget validateOnChange() {\n\t\treturn this.hasAttribute('validate-on-change');\n\t}\n\n\t/**\n\t * Setter for the invalid attribute.\n\t * @param {boolean} isInvalid Whether the input is invalid.\n\t */\n\tset invalid(isInvalid) {\n\t\tif (isInvalid) this.setAttribute('invalid', '');\n\t\telse this.removeAttribute('invalid');\n\t}\n\n\t/**\n\t * Getter for the invalid attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget invalid() {\n\t\treturn this.hasAttribute('invalid');\n\t}\n\n\t/**\n\t * Getter for the form attribute.\n\t * @returns {HTMLFormElement} The form the input is associated with.\n\t */\n\tget form() {\n\t\treturn this.internals.form;\n\t}\n\n\t/**\n\t * Getter for the name attribute.\n\t * @returns {string} The name of the input.\n\t */\n\tget name() {\n\t\treturn this.getAttribute('name');\n\t}\n\n\t/**\n\t * Getter for the type attribute.\n\t * @returns {string} The type of the input.\n\t */\n\tget type() {\n\t\treturn this.localName;\n\t}\n\n\t/**\n\t * Getter for the validity attribute.\n\t * @returns {ValidityState} The validity state of the input.\n\t */\n\tget validity() {\n\t\treturn this.internals.validity;\n\t}\n\n\t/**\n\t * Getter for the validationMessage attribute.\n\t * @returns {string} The validation message of the input.\n\t */\n\tget validationMessage() {\n\t\treturn this.internals.validationMessage;\n\t}\n\n\t/**\n\t * Getter for the willValidate attribute.\n\t * @returns {boolean} Whether the input will be validated.\n\t */\n\tget willValidate() {\n\t\treturn this.internals.willValidate;\n\t}\n\n\t/**\n\t * Getter for the defaultValue attribute.\n\t * This method retrieves the 'value' attribute of the custom input element.\n\t * The 'value' attribute represents the default value of the input element.\n\t * If the 'value' attribute is not set, it returns an empty string.\n\t * @returns {string} The default value of the input element.\n\t */\n\tget defaultValue() {\n\t\treturn this.getAttribute('value') ?? '';\n\t}\n\n\t/**\n\t * Setter for the defaultValue attribute.\n\t * This method sets the 'value' attribute of the custom input element to the provided value.\n\t * The 'value' attribute represents the default value of the input element.\n\t * @param {string} value The value to set as the default value.\n\t */\n\tset defaultValue(value) {\n\t\tthis.setAttribute('value', value);\n\t}\n\n\t/**\n\t * Set checked attribute.\n\t * @param {boolean} value true if the toggle is checked, false otherwise\n\t */\n\tset disabled(value) {\n\t\tif (value) this.setAttribute('disabled', '');\n\t\telse this.removeAttribute('disabled');\n\t}\n\n\t/**\n\t * Get disabled attribute value.\n\t * @returns {boolean} true if the toggle is disabled, false otherwise\n\t */\n\tget disabled() {\n\t\treturn this.hasAttribute('disabled');\n\t}\n\n\t/**\n\t * Set checked attribute.\n\t * @param {boolean} value true if the toggle is checked, false otherwise\n\t */\n\tset checked(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('checked', '');\n\t\t\tthis.value = true;\n\t\t}\n\t\telse {\n\t\t\tthis.removeAttribute('checked');\n\t\t\tthis.value = false;\n\t\t}\n\t}\n\n\t/**\n\t * Get checked attribute.\n\t * @returns {boolean} true if the toggle is checked, false otherwise\n\t */\n\tget checked() {\n\t\treturn this.hasAttribute('checked');\n\t}\n\n\t/**\n\t * The class name for the Checkbox.\n\t */\n\tclassName = 'Checkbox';\n\n\t/**\n\t * Getter for the CSS stylesheet.\n\t * @returns {string} The CSS stylesheet.\n\t */\n\tstatic get cssStyleSheet() {\n\t\treturn styles;\n\t}\n\n\tstatic get observedAttributes() {\n\t\treturn ['checked', 'disabled', 'value', 'indeterminate'];\n\t}\n\n\t/**\n\t * Whether the input is associated with a form.\n\t * @type {boolean}\n\t */\n\tstatic formAssociated = true;\n\n\t/**\n\t * Sets up the attributes for the checkbox.\n\t */\n\tsetupAttributes() {\n\t\tthis.isShadowRoot = 'open';\n\t}\n\n\t/**\n\t * Draws the checkbox element.\n\t * @returns {DocumentFragment} The created fragment.\n\t */\n\tdraw() {\n\t\tlet fragment = document.createDocumentFragment();\n\n\t\tlet native = document.createElement('div');\n\t\tnative.setAttribute('part', 'native');\n\t\tnative.classList.add('native-checkbox');\n\n\t\tlet input = document.createElement('input');\n\t\tinput.type = 'checkbox';\n\t\tinput.id = 'checkbox';\n\t\tinput.name = this.name || 'checkbox';\n\t\tinput.checked = this.hasAttribute('checked');\n\t\tinput.disabled = this.hasAttribute('disabled');\n\t\tinput.indeterminate = this.hasAttribute('indeterminate');\n\n\t\tlet label = document.createElement('label');\n\t\tlabel.htmlFor = 'checkbox';\n\t\tlabel.innerHTML = '<slot></slot>';\n\n\t\tnative.appendChild(input);\n\t\tnative.appendChild(label);\n\n\t\tthis.input = input;\n\n\t\tfragment.appendChild(native);\n\n\t\treturn fragment;\n\t}\n\n\t/**\n\t * Adds an event listener after drawing the checkbox.\n\t */\n\tafterDraw() {\n\t\tif (!this.disabled) {\n\t\t\tthis.input.addEventListener('input', (e) => {\n\t\t\t\tthis.value = e.target.checked;\n\t\t\t\tthis.checked = e.target.checked;\n\t\t\t\tevent.dispatchCustomEvent(this, 'wje-toggle:input');\n\t\t\t});\n\n\t\t\tthis.input.addEventListener('change', (e) => {\n\t\t\t\tthis.value = e.target.checked;\n\t\t\t\tthis.checked = e.target.checked;\n\t\t\t\tevent.dispatchCustomEvent(this, 'wje-toggle:change');\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Removes the event listener when the checkbox is disconnected.\n\t */\n\tbeforeDisconnect() {\n\t\tevent.removeElement(this.input);\n\t}\n\n\t/**\n\t * @summary Callback function that is called when the custom element is associated with a form.\n\t * This function adds an event listener to the form's submit event, which validates the input and propagates the validation.\n\t * @param {HTMLFormElement} form The form the custom element is associated with.\n\t */\n\tformAssociatedCallback(form) {\n\t\tif (form) {\n\t\t\tthis.internals.setFormValue(this.value);\n\t\t}\n\t}\n\n\t/**\n\t * The formResetCallback method is a built-in lifecycle callback that gets called when a form gets reset.\n\t * This method is responsible for resetting the value of the custom input element to its default value.\n\t * It also resets the form value and validity state in the form internals.\n\t * @function\n\t */\n\tformResetCallback() {\n\t\t// Set the value of the custom input element to its default value\n\t\tthis.value = this.defaultValue;\n\t\t// Reset the form value in the form internals to the default value\n\t\tthis.internals.setFormValue(this.defaultValue);\n\t\t// Reset the validity state in the form internals\n\t\tthis.internals.setValidity({});\n\t}\n\n\t/**\n\t * The formStateRestoreCallback method is a built-in lifecycle callback that gets called when the state of a form-associated custom element is restored.\n\t * This method is responsible for restoring the value of the custom input element to its saved state.\n\t * It also restores the form value and validity state in the form internals to their saved states.\n\t * @param {object} state The saved state of the custom input element.\n\t * @function\n\t */\n\tformStateRestoreCallback(state) {\n\t\t// Set the value of the custom input element to its saved value\n\t\tthis.value = state.value;\n\t\t// Restore the form value in the form internals to the saved value\n\t\tthis.internals.setFormValue(state.value);\n\t\t// Restore the validity state in the form internals to the saved state\n\t\tthis.internals.setValidity({});\n\t}\n\n\t/**\n\t * The formStateSaveCallback method is a built-in lifecycle callback that gets called when the state of a form-associated custom element is saved.\n\t * This method is responsible for saving the value of the custom input element.\n\t * @returns {object} The saved state of the custom input element.\n\t * @function\n\t */\n\tformStateSaveCallback() {\n\t\treturn {\n\t\t\tvalue: this.value,\n\t\t};\n\t}\n\n\t/**\n\t * The formDisabledCallback method is a built-in lifecycle callback that gets called when the disabled state of a form-associated custom element changes.\n\t * This method is not implemented yet.\n\t * @param {boolean} disabled The new disabled state of the custom input element.\n\t * @function\n\t */\n\tformDisabledCallback(disabled) {\n\t\tconsole.warn('formDisabledCallback not implemented yet');\n\t}\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport Checkbox from './checkbox.element.js';\n\n// export * from \"./checkbox.element.js\";\nexport default Checkbox;\n\nWJElement.define('wje-checkbox', Checkbox);\n"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,12 @@ class FileUploadItem extends WJElement {
|
|
|
34
34
|
});
|
|
35
35
|
this.localizer = new Localizer(this);
|
|
36
36
|
}
|
|
37
|
+
set isUploaded(value) {
|
|
38
|
+
this.setAttribute("is-uploaded", "");
|
|
39
|
+
}
|
|
40
|
+
get isUploaded() {
|
|
41
|
+
return this.hasAttribute("is-uploaded");
|
|
42
|
+
}
|
|
37
43
|
set size(value) {
|
|
38
44
|
this.setAttribute("size", value);
|
|
39
45
|
}
|
|
@@ -108,6 +114,8 @@ class FileUploadItem extends WJElement {
|
|
|
108
114
|
let size = document.createElement("wje-format-digital");
|
|
109
115
|
size.setAttribute("value", this.size || 0);
|
|
110
116
|
size.innerHTML = `<span slot="start"> ${this.localizer.translate("wj.file.upload.from")} </span>`;
|
|
117
|
+
let size2 = document.createElement("wje-format-digital");
|
|
118
|
+
size2.setAttribute("value", this.size || 0);
|
|
111
119
|
let slider = document.createElement("wje-progress-bar");
|
|
112
120
|
slider.classList.add("file-progress");
|
|
113
121
|
slider.setAttribute("id", "id-" + this.lastModified);
|
|
@@ -119,9 +127,13 @@ class FileUploadItem extends WJElement {
|
|
|
119
127
|
sizeWrapper.appendChild(size);
|
|
120
128
|
native.appendChild(image);
|
|
121
129
|
native.appendChild(name);
|
|
122
|
-
|
|
130
|
+
if (!this.isUploaded)
|
|
131
|
+
native.appendChild(sizeWrapper);
|
|
132
|
+
else
|
|
133
|
+
native.appendChild(size2);
|
|
123
134
|
native.appendChild(actions);
|
|
124
|
-
|
|
135
|
+
if (!this.isUploaded)
|
|
136
|
+
native.appendChild(slider);
|
|
125
137
|
fragment.appendChild(native);
|
|
126
138
|
this.button = button;
|
|
127
139
|
this.uploadedEl = uploaded;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-file-upload-item.js","sources":["../packages/wje-file-upload-item/file-upload-item.element.js","../packages/wje-file-upload-item/file-upload-item.js"],"sourcesContent":["import { Localizer } from '../utils/localize.js';\nimport Button from '../wje-button/button.js';\nimport { default as WJElement } from '../wje-element/element.js';\nimport FormatDigital from '../wje-format-digital/format-digital.js';\nimport Icon from '../wje-icon/icon.js';\nimport Slider from '../wje-slider/slider.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This element allows users to upload files.\n * `FileUploadItem` is a custom web component that represents a file upload item.\n * It extends from `WJElement` and uses the `Localizer` utility for localization.\n * @documentation https://elements.webjet.sk/components/file-upload\n * @status stable\n * @augments WJElement\n * @csspart button - The delete button part\n * @csspart image - The image part\n * @csspart name - The name part\n * @csspart size - The size part\n * @slot img - Slot for the image\n * @slot action - Slot for the action buttons\n * @cssproperty --primary-color - The primary color of the file upload item.\n * //@fires wje-button:click - Dispatches when the delete button is clicked\n * @tag wje-file-upload\n */\nexport default class FileUploadItem extends WJElement {\n /**\n * Creates an instance of FileUploadItem.\n * @class\n */\n constructor() {\n super();\n this.localizer = new Localizer(this);\n }\n\n set size(value) {\n this.setAttribute('size', value);\n }\n\n get size() {\n return this.getAttribute('size');\n }\n\n /**\n * Dependencies for the component.\n * @type {object}\n */\n dependencies = {\n 'wje-format-digital': FormatDigital,\n 'wje-button': Button,\n 'wje-slider': Slider,\n 'wje-icon': Icon,\n };\n\n className = 'FileUploadItem';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\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 ['uploaded'];\n }\n\n /**\n * Handles updates to the attributes of a custom element whenever one of the observed attributes is changed.\n * Updates the related elements based on the changed attribute and its new value.\n * @param {string} name The name of the attribute being changed.\n * @param {string | null} oldValue The previous value of the attribute before the change, or null if the attribute was not previously set.\n * @param {string | null} newValue The new value of the attribute after the change, or null if the attribute is being removed.\n * @returns {void} Does not return a value.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'uploaded' && oldValue !== newValue && this.uploadedEl) {\n this.uploadedEl.setAttribute('value', newValue);\n\n let progress = (+newValue / +this.size) * 100 || 0;\n\n this.sliderEl.setAttribute('progress', Math.round(progress, 0));\n }\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Method to draw the component on the screen.\n * @returns {DocumentFragment} The fragment containing the component.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.classList.add('native-file-upload-item');\n\n let slot = document.createElement('slot');\n slot.setAttribute('name', 'img');\n\n let image = document.createElement('div');\n image.setAttribute('part', 'image');\n image.classList.add('image');\n\n let name = document.createElement('span');\n name.classList.add('name');\n name.innerText = this.name;\n\n let actions = document.createElement('slot');\n actions.classList.add('actions');\n actions.setAttribute('name', 'action');\n\n let button = document.createElement('wje-button');\n button.setAttribute('fill', 'link');\n button.setAttribute('size', 'small');\n button.innerHTML = `<wje-icon name=\"x\" size=\"small\"></wje-icon>`;\n\n let sizeWrapper = document.createElement('span');\n sizeWrapper.classList.add('size');\n\n let uploaded = document.createElement('wje-format-digital');\n uploaded.setAttribute('value', this.uploaded || 0);\n uploaded.innerHTML = `<span slot=\"start\">${this.localizer.translate('wj.file.upload.uploaded')}</span>`;\n\n let size = document.createElement('wje-format-digital');\n size.setAttribute('value', this.size || 0);\n size.innerHTML = `<span slot=\"start\"> ${this.localizer.translate('wj.file.upload.from')} </span>`;\n\n let slider = document.createElement('wje-progress-bar');\n slider.classList.add('file-progress');\n slider.setAttribute('id', 'id-' + this.lastModified);\n slider.setAttribute('progress', this.progress);\n slider.setAttribute('color', 'success');\n\n image.appendChild(slot);\n actions.appendChild(button);\n\n sizeWrapper.appendChild(uploaded);\n sizeWrapper.appendChild(size);\n\n native.appendChild(image);\n native.appendChild(name);\n native.appendChild(sizeWrapper);\n native.appendChild(actions);\n native.appendChild(slider);\n\n fragment.appendChild(native);\n\n this.button = button;\n this.uploadedEl = uploaded;\n this.sliderEl = slider;\n\n return fragment;\n }\n\n /**\n * Called after the component has been drawn.\n */\n afterDraw() {\n this.button.addEventListener('wje-button:click', this.onDelete);\n }\n\n /**\n * Handles the delete action.\n */\n onDelete = () => {\n this.remove();\n };\n}\n","import FileUploadItem from './file-upload-item.element.js';\n\nexport default FileUploadItem;\n\nFileUploadItem.define('wje-file-upload-item', FileUploadItem);\n"],"names":[],"mappings":";;;;;;;;;;AAyBe,MAAM,uBAAuB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlD,cAAc;AACV,UAAO;
|
|
1
|
+
{"version":3,"file":"wje-file-upload-item.js","sources":["../packages/wje-file-upload-item/file-upload-item.element.js","../packages/wje-file-upload-item/file-upload-item.js"],"sourcesContent":["import { Localizer } from '../utils/localize.js';\nimport Button from '../wje-button/button.js';\nimport { default as WJElement } from '../wje-element/element.js';\nimport FormatDigital from '../wje-format-digital/format-digital.js';\nimport Icon from '../wje-icon/icon.js';\nimport Slider from '../wje-slider/slider.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This element allows users to upload files.\n * `FileUploadItem` is a custom web component that represents a file upload item.\n * It extends from `WJElement` and uses the `Localizer` utility for localization.\n * @documentation https://elements.webjet.sk/components/file-upload\n * @status stable\n * @augments WJElement\n * @csspart button - The delete button part\n * @csspart image - The image part\n * @csspart name - The name part\n * @csspart size - The size part\n * @slot img - Slot for the image\n * @slot action - Slot for the action buttons\n * @cssproperty --primary-color - The primary color of the file upload item.\n * //@fires wje-button:click - Dispatches when the delete button is clicked\n * @tag wje-file-upload\n */\nexport default class FileUploadItem extends WJElement {\n /**\n * Creates an instance of FileUploadItem.\n * @class\n */\n constructor() {\n super();\n this.localizer = new Localizer(this);\n }\n\n set isUploaded(value) {\n this.setAttribute('is-uploaded', '');\n }\n\n get isUploaded() {\n return this.hasAttribute('is-uploaded');\n }\n\n set size(value) {\n this.setAttribute('size', value);\n }\n\n get size() {\n return this.getAttribute('size');\n }\n\n /**\n * Dependencies for the component.\n * @type {object}\n */\n dependencies = {\n 'wje-format-digital': FormatDigital,\n 'wje-button': Button,\n 'wje-slider': Slider,\n 'wje-icon': Icon,\n };\n\n className = 'FileUploadItem';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\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 ['uploaded'];\n }\n\n /**\n * Handles updates to the attributes of a custom element whenever one of the observed attributes is changed.\n * Updates the related elements based on the changed attribute and its new value.\n * @param {string} name The name of the attribute being changed.\n * @param {string | null} oldValue The previous value of the attribute before the change, or null if the attribute was not previously set.\n * @param {string | null} newValue The new value of the attribute after the change, or null if the attribute is being removed.\n * @returns {void} Does not return a value.\n */\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'uploaded' && oldValue !== newValue && this.uploadedEl) {\n this.uploadedEl.setAttribute('value', newValue);\n\n let progress = (+newValue / +this.size) * 100 || 0;\n\n this.sliderEl.setAttribute('progress', Math.round(progress, 0));\n }\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Method to draw the component on the screen.\n * @returns {DocumentFragment} The fragment containing the component.\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.classList.add('native-file-upload-item');\n\n let slot = document.createElement('slot');\n slot.setAttribute('name', 'img');\n\n let image = document.createElement('div');\n image.setAttribute('part', 'image');\n image.classList.add('image');\n\n let name = document.createElement('span');\n name.classList.add('name');\n name.innerText = this.name;\n\n let actions = document.createElement('slot');\n actions.classList.add('actions');\n actions.setAttribute('name', 'action');\n\n let button = document.createElement('wje-button');\n button.setAttribute('fill', 'link');\n button.setAttribute('size', 'small');\n button.innerHTML = `<wje-icon name=\"x\" size=\"small\"></wje-icon>`;\n\n let sizeWrapper = document.createElement('span');\n sizeWrapper.classList.add('size');\n\n let uploaded = document.createElement('wje-format-digital');\n uploaded.setAttribute('value', this.uploaded || 0);\n uploaded.innerHTML = `<span slot=\"start\">${this.localizer.translate('wj.file.upload.uploaded')}</span>`;\n\n let size = document.createElement('wje-format-digital');\n size.setAttribute('value', this.size || 0);\n size.innerHTML = `<span slot=\"start\"> ${this.localizer.translate('wj.file.upload.from')} </span>`;\n\n let size2 = document.createElement('wje-format-digital');\n size2.setAttribute('value', this.size || 0);\n\n let slider = document.createElement('wje-progress-bar');\n slider.classList.add('file-progress');\n slider.setAttribute('id', 'id-' + this.lastModified);\n slider.setAttribute('progress', this.progress);\n slider.setAttribute('color', 'success');\n\n image.appendChild(slot);\n actions.appendChild(button);\n\n sizeWrapper.appendChild(uploaded);\n sizeWrapper.appendChild(size);\n\n native.appendChild(image);\n native.appendChild(name);\n\n if (!this.isUploaded)\n native.appendChild(sizeWrapper);\n else\n native.appendChild(size2);\n\n native.appendChild(actions);\n\n if (!this.isUploaded)\n native.appendChild(slider);\n\n fragment.appendChild(native);\n\n this.button = button;\n this.uploadedEl = uploaded;\n this.sliderEl = slider;\n\n return fragment;\n }\n\n /**\n * Called after the component has been drawn.\n */\n afterDraw() {\n this.button.addEventListener('wje-button:click', this.onDelete);\n }\n\n /**\n * Handles the delete action.\n */\n onDelete = () => {\n this.remove();\n };\n}\n","import FileUploadItem from './file-upload-item.element.js';\n\nexport default FileUploadItem;\n\nFileUploadItem.define('wje-file-upload-item', FileUploadItem);\n"],"names":[],"mappings":"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"}
|
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.parseElement(rootElement).root;
|
|
1375
|
+
const routes = this.data ? this.data : 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.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.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]}
|
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.171",
|
|
5
5
|
"homepage": "https://github.com/lencys/wj-elements",
|
|
6
6
|
"author": "Lukáš Ondrejček <lukas.ondrejcek@gmail.com>",
|
|
7
7
|
"license": "MIT",
|