wj-elements 0.2.0-alpha.9 → 0.3.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/dist/animations.js.map +1 -1
  2. package/dist/base-path.js.map +1 -1
  3. package/dist/dark.css +15 -1
  4. package/dist/date.js.map +1 -1
  5. package/dist/element-utils.js.map +1 -1
  6. package/dist/event.js.map +1 -1
  7. package/dist/{form-associated-element-o0UjvdUp.js → form-associated-element-DEQ4y-jn.js} +1 -2
  8. package/dist/form-associated-element-DEQ4y-jn.js.map +1 -0
  9. package/dist/{icon-DY5AZ6xM.js → icon-DVyMc4Wv.js} +36 -2
  10. package/dist/{icon-DY5AZ6xM.js.map → icon-DVyMc4Wv.js.map} +1 -1
  11. package/dist/light.css +7 -2
  12. package/dist/localize.js +8 -5
  13. package/dist/localize.js.map +1 -1
  14. package/dist/packages/internals/form-associated-element.d.ts +0 -1
  15. package/dist/packages/utils/utils.d.ts +16 -0
  16. package/dist/packages/wje-accordion-item/accordion-item.element.d.ts +3 -0
  17. package/dist/packages/wje-avatar/avatar.element.d.ts +5 -0
  18. package/dist/packages/wje-breadcrumb/breadcrumb.element.d.ts +1 -0
  19. package/dist/packages/wje-button/button.element.d.ts +5 -1
  20. package/dist/packages/wje-button-group/button-group.element.d.ts +4 -0
  21. package/dist/packages/wje-card/card.element.d.ts +15 -6
  22. package/dist/packages/wje-carousel/carousel.element.d.ts +4 -0
  23. package/dist/packages/wje-checkbox/checkbox.element.d.ts +14 -0
  24. package/dist/packages/wje-chip/chip.element.d.ts +6 -0
  25. package/dist/packages/wje-color-picker/color-picker.element.d.ts +43 -1
  26. package/dist/packages/wje-copy-button/copy-button.element.d.ts +4 -0
  27. package/dist/packages/wje-dialog/dialog.element.d.ts +2 -0
  28. package/dist/packages/wje-dropdown/dropdown.element.d.ts +7 -0
  29. package/dist/packages/wje-element/element.d.ts +55 -24
  30. package/dist/packages/wje-file-upload/file-upload.element.d.ts +17 -6
  31. package/dist/packages/wje-file-upload/service/service.d.ts +0 -23
  32. package/dist/packages/wje-file-upload-item/file-upload-item.element.d.ts +5 -0
  33. package/dist/packages/wje-format-digital/format-digital.element.d.ts +2 -0
  34. package/dist/packages/wje-icon/icon.element.d.ts +11 -0
  35. package/dist/packages/wje-icon-picker/icon-picker.element.d.ts +4 -0
  36. package/dist/packages/wje-img/img.element.d.ts +1 -0
  37. package/dist/packages/wje-infinite-scroll/infinite-scroll.element.d.ts +4 -0
  38. package/dist/packages/wje-input/input.element.d.ts +9 -1
  39. package/dist/packages/wje-item/item.element.d.ts +8 -0
  40. package/dist/packages/wje-kanban/kanban.element.d.ts +4 -0
  41. package/dist/packages/wje-level-indicator/level-indicator.element.d.ts +17 -0
  42. package/dist/packages/wje-list/list.element.d.ts +4 -0
  43. package/dist/packages/wje-menu-item/menu-item.element.d.ts +4 -0
  44. package/dist/packages/wje-option/option.element.d.ts +4 -0
  45. package/dist/packages/wje-options/options.element.d.ts +4 -0
  46. package/dist/packages/wje-orgchart/orgchart.element.d.ts +4 -0
  47. package/dist/packages/wje-progress-bar/progress-bar.element.d.ts +11 -0
  48. package/dist/packages/wje-qr-code/qr-code.element.d.ts +63 -0
  49. package/dist/packages/wje-radio/radio.element.d.ts +5 -0
  50. package/dist/packages/wje-radio-group/radio-group.element.d.ts +16 -1
  51. package/dist/packages/wje-rate/rate.element.d.ts +4 -0
  52. package/dist/packages/wje-relative-time/relative-time.element.d.ts +2 -0
  53. package/dist/packages/wje-reorder/reorder.element.d.ts +4 -0
  54. package/dist/packages/wje-reorder-handle/reorder-handle.element.d.ts +4 -0
  55. package/dist/packages/wje-select/select.element.d.ts +7 -0
  56. package/dist/packages/wje-slider/slider.element.d.ts +5 -0
  57. package/dist/packages/wje-sliding-container/sliding-container.element.d.ts +4 -0
  58. package/dist/packages/wje-split-view/split-view.element.d.ts +1 -0
  59. package/dist/packages/wje-stepper/stepper.element.d.ts +1 -0
  60. package/dist/packages/wje-tab/tab.element.d.ts +10 -0
  61. package/dist/packages/wje-tab-group/tab-group.element.d.ts +11 -0
  62. package/dist/packages/wje-textarea/textarea.element.d.ts +20 -1
  63. package/dist/packages/wje-thumbnail/thumbnail.element.d.ts +4 -0
  64. package/dist/packages/wje-timeline/timeline.element.d.ts +4 -0
  65. package/dist/packages/wje-toggle/toggle.element.d.ts +4 -0
  66. package/dist/packages/wje-toolbar/toolbar.element.d.ts +4 -0
  67. package/dist/packages/wje-tooltip/tooltip.element.d.ts +3 -0
  68. package/dist/packages/wje-tree/tree.element.d.ts +4 -0
  69. package/dist/packages/wje-tree-item/tree-item.element.d.ts +5 -0
  70. package/dist/permissions.js.map +1 -1
  71. package/dist/{popup.element-DeajFyOQ.js → popup.element-DklicGea.js} +130 -97
  72. package/dist/popup.element-DklicGea.js.map +1 -0
  73. package/dist/{router-links-CJnOdbas.js → router-links-wjqCnncc.js} +9 -3
  74. package/dist/router-links-wjqCnncc.js.map +1 -0
  75. package/dist/skeleton.css +197 -0
  76. package/dist/universal-service.js.map +1 -1
  77. package/dist/utils.js +18 -1
  78. package/dist/utils.js.map +1 -1
  79. package/dist/wje-accordion-item.js +26 -4
  80. package/dist/wje-accordion-item.js.map +1 -1
  81. package/dist/wje-accordion.js +1 -0
  82. package/dist/wje-accordion.js.map +1 -1
  83. package/dist/wje-animation.js +1 -0
  84. package/dist/wje-animation.js.map +1 -1
  85. package/dist/wje-aside.js.map +1 -1
  86. package/dist/wje-avatar.js +18 -0
  87. package/dist/wje-avatar.js.map +1 -1
  88. package/dist/wje-badge.js +1 -0
  89. package/dist/wje-badge.js.map +1 -1
  90. package/dist/wje-breadcrumb.js +13 -1
  91. package/dist/wje-breadcrumb.js.map +1 -1
  92. package/dist/wje-breadcrumbs.js +1 -0
  93. package/dist/wje-breadcrumbs.js.map +1 -1
  94. package/dist/wje-button-group.js +10 -0
  95. package/dist/wje-button-group.js.map +1 -1
  96. package/dist/wje-button.js +30 -6
  97. package/dist/wje-button.js.map +1 -1
  98. package/dist/wje-card-content.js.map +1 -1
  99. package/dist/wje-card-controls.js.map +1 -1
  100. package/dist/wje-card-header.js.map +1 -1
  101. package/dist/wje-card-subtitle.js.map +1 -1
  102. package/dist/wje-card-title.js.map +1 -1
  103. package/dist/wje-card.js +37 -0
  104. package/dist/wje-card.js.map +1 -1
  105. package/dist/wje-carousel-item.js.map +1 -1
  106. package/dist/wje-carousel.js +38 -4
  107. package/dist/wje-carousel.js.map +1 -1
  108. package/dist/wje-checkbox.js +48 -3
  109. package/dist/wje-checkbox.js.map +1 -1
  110. package/dist/wje-chip.js +22 -0
  111. package/dist/wje-chip.js.map +1 -1
  112. package/dist/wje-col.js.map +1 -1
  113. package/dist/wje-color-picker.js +145 -31
  114. package/dist/wje-color-picker.js.map +1 -1
  115. package/dist/wje-container.js.map +1 -1
  116. package/dist/wje-copy-button.js +21 -0
  117. package/dist/wje-copy-button.js.map +1 -1
  118. package/dist/wje-dialog.js +35 -2
  119. package/dist/wje-dialog.js.map +1 -1
  120. package/dist/wje-divider.js.map +1 -1
  121. package/dist/wje-dropdown.js +27 -3
  122. package/dist/wje-dropdown.js.map +1 -1
  123. package/dist/wje-element.js +87 -242
  124. package/dist/wje-element.js.map +1 -1
  125. package/dist/wje-file-upload-item.js +23 -1
  126. package/dist/wje-file-upload-item.js.map +1 -1
  127. package/dist/wje-file-upload.js +100 -77
  128. package/dist/wje-file-upload.js.map +1 -1
  129. package/dist/wje-footer.js.map +1 -1
  130. package/dist/wje-form.js.map +1 -1
  131. package/dist/wje-format-digital.js +9 -0
  132. package/dist/wje-format-digital.js.map +1 -1
  133. package/dist/wje-grid.js.map +1 -1
  134. package/dist/wje-header.js.map +1 -1
  135. package/dist/wje-icon-library.js.map +1 -1
  136. package/dist/wje-icon-picker.js +15 -0
  137. package/dist/wje-icon-picker.js.map +1 -1
  138. package/dist/wje-icon.js +1 -1
  139. package/dist/wje-img-comparer.js +5 -1
  140. package/dist/wje-img-comparer.js.map +1 -1
  141. package/dist/wje-img.js +16 -1
  142. package/dist/wje-img.js.map +1 -1
  143. package/dist/wje-infinite-scroll.js +10 -0
  144. package/dist/wje-infinite-scroll.js.map +1 -1
  145. package/dist/wje-input-file.js +2 -0
  146. package/dist/wje-input-file.js.map +1 -1
  147. package/dist/wje-input.js +59 -4
  148. package/dist/wje-input.js.map +1 -1
  149. package/dist/wje-item.js +14 -0
  150. package/dist/wje-item.js.map +1 -1
  151. package/dist/wje-kanban.js +14 -0
  152. package/dist/wje-kanban.js.map +1 -1
  153. package/dist/wje-label.js.map +1 -1
  154. package/dist/wje-level-indicator.js +36 -0
  155. package/dist/wje-level-indicator.js.map +1 -1
  156. package/dist/wje-list.js +10 -0
  157. package/dist/wje-list.js.map +1 -1
  158. package/dist/wje-main.js.map +1 -1
  159. package/dist/wje-masonry.js.map +1 -1
  160. package/dist/wje-master.js +12 -3
  161. package/dist/wje-master.js.map +1 -1
  162. package/dist/wje-menu-button.js +1 -0
  163. package/dist/wje-menu-button.js.map +1 -1
  164. package/dist/wje-menu-item.js +25 -1
  165. package/dist/wje-menu-item.js.map +1 -1
  166. package/dist/wje-menu-label.js.map +1 -1
  167. package/dist/wje-menu.js +4 -1
  168. package/dist/wje-menu.js.map +1 -1
  169. package/dist/wje-option.js +14 -1
  170. package/dist/wje-option.js.map +1 -1
  171. package/dist/wje-options.js +13 -0
  172. package/dist/wje-options.js.map +1 -1
  173. package/dist/wje-orgchart-group.js.map +1 -1
  174. package/dist/wje-orgchart-item.js.map +1 -1
  175. package/dist/wje-orgchart.js +9 -0
  176. package/dist/wje-orgchart.js.map +1 -1
  177. package/dist/wje-pagination.js +18 -9
  178. package/dist/wje-pagination.js.map +1 -1
  179. package/dist/wje-popup.js +1 -1
  180. package/dist/wje-progress-bar.js +26 -0
  181. package/dist/wje-progress-bar.js.map +1 -1
  182. package/dist/wje-qr-code.js +162 -20
  183. package/dist/wje-qr-code.js.map +1 -1
  184. package/dist/wje-radio-group.js +49 -2
  185. package/dist/wje-radio-group.js.map +1 -1
  186. package/dist/wje-radio.js +27 -1
  187. package/dist/wje-radio.js.map +1 -1
  188. package/dist/wje-rate.js +23 -1
  189. package/dist/wje-rate.js.map +1 -1
  190. package/dist/wje-relative-time.js +14 -1
  191. package/dist/wje-relative-time.js.map +1 -1
  192. package/dist/wje-reorder-dropzone.js.map +1 -1
  193. package/dist/wje-reorder-handle.js +21 -0
  194. package/dist/wje-reorder-handle.js.map +1 -1
  195. package/dist/wje-reorder-item.js.map +1 -1
  196. package/dist/wje-reorder.js +10 -0
  197. package/dist/wje-reorder.js.map +1 -1
  198. package/dist/wje-route.js.map +1 -1
  199. package/dist/wje-router-link.js +1 -1
  200. package/dist/wje-router-link.js.map +1 -1
  201. package/dist/wje-router-outlet.js +15 -5
  202. package/dist/wje-router-outlet.js.map +1 -1
  203. package/dist/wje-routerx.js +64 -66
  204. package/dist/wje-routerx.js.map +1 -1
  205. package/dist/wje-row.js.map +1 -1
  206. package/dist/wje-select.js +35 -5
  207. package/dist/wje-select.js.map +1 -1
  208. package/dist/wje-slider.js +51 -1
  209. package/dist/wje-slider.js.map +1 -1
  210. package/dist/wje-sliding-container.js +18 -0
  211. package/dist/wje-sliding-container.js.map +1 -1
  212. package/dist/wje-split-view.js +9 -0
  213. package/dist/wje-split-view.js.map +1 -1
  214. package/dist/wje-status.js +1 -0
  215. package/dist/wje-status.js.map +1 -1
  216. package/dist/wje-step.js.map +1 -1
  217. package/dist/wje-stepper.js +24 -1
  218. package/dist/wje-stepper.js.map +1 -1
  219. package/dist/wje-store.js.map +1 -1
  220. package/dist/wje-tab-group.js +59 -2
  221. package/dist/wje-tab-group.js.map +1 -1
  222. package/dist/wje-tab-panel.js.map +1 -1
  223. package/dist/wje-tab.js +31 -1
  224. package/dist/wje-tab.js.map +1 -1
  225. package/dist/wje-textarea.js +96 -14
  226. package/dist/wje-textarea.js.map +1 -1
  227. package/dist/wje-thumbnail.js +19 -0
  228. package/dist/wje-thumbnail.js.map +1 -1
  229. package/dist/wje-toast.js +4 -0
  230. package/dist/wje-toast.js.map +1 -1
  231. package/dist/wje-toggle.js +17 -1
  232. package/dist/wje-toggle.js.map +1 -1
  233. package/dist/wje-toolbar-action.js.map +1 -1
  234. package/dist/wje-toolbar.js +14 -0
  235. package/dist/wje-toolbar.js.map +1 -1
  236. package/dist/wje-tooltip.js +31 -7
  237. package/dist/wje-tooltip.js.map +1 -1
  238. package/dist/wje-tree-item.js +41 -5
  239. package/dist/wje-tree-item.js.map +1 -1
  240. package/dist/wje-tree.js +12 -1
  241. package/dist/wje-tree.js.map +1 -1
  242. package/dist/wje-visually-hidden.js.map +1 -1
  243. package/package.json +22 -3
  244. package/dist/form-associated-element-o0UjvdUp.js.map +0 -1
  245. package/dist/packages/wje-accordion/accordion.test.d.ts +0 -0
  246. package/dist/packages/wje-animation/animation.test.d.ts +0 -1
  247. package/dist/packages/wje-avatar/avatar.test.d.ts +0 -1
  248. package/dist/packages/wje-badge/badge.test.d.ts +0 -1
  249. package/dist/packages/wje-breadcrumbs/breadcrumbs.test.d.ts +0 -1
  250. package/dist/packages/wje-button/button.test.d.ts +0 -1
  251. package/dist/packages/wje-chip/chip.test.d.ts +0 -1
  252. package/dist/packages/wje-color-picker/color-picker.test.d.ts +0 -1
  253. package/dist/packages/wje-file-upload/file-upload.test.d.ts +0 -1
  254. package/dist/packages/wje-format-digital/format-digital.test.d.ts +0 -1
  255. package/dist/packages/wje-pagination/pagination.test.d.ts +0 -1
  256. package/dist/packages/wje-relative-time/relative-time.test.d.ts +0 -1
  257. package/dist/packages/wje-select/select.test.d.ts +0 -1
  258. package/dist/packages/wje-tab-group/tab-group.test.d.ts +0 -1
  259. package/dist/packages/wje-toast/toast.test.d.ts +0 -1
  260. package/dist/packages/wje-toggle/toggle.test.d.ts +0 -1
  261. package/dist/packages/wje-tree/tree.test.d.ts +0 -1
  262. package/dist/packages/wje-tree-item/tree-item.test.d.ts +0 -1
  263. package/dist/popup.element-DeajFyOQ.js.map +0 -1
  264. package/dist/router-links-CJnOdbas.js.map +0 -1
@@ -44,6 +44,7 @@ class Reorder extends WJElement {
44
44
  */
45
45
  setupAttributes() {
46
46
  this.isShadowRoot = "open";
47
+ this.syncAria();
47
48
  }
48
49
  /**
49
50
  * Draws the component after it is connected to the DOM.
@@ -65,6 +66,7 @@ class Reorder extends WJElement {
65
66
  * Adds event listeners after the component is drawn.
66
67
  */
67
68
  afterDraw() {
69
+ this.syncAria();
68
70
  const items = this.querySelectorAll("wje-reorder-item");
69
71
  const dropZones = this.querySelectorAll("wje-reorder-dropzone");
70
72
  this.container.classList.add(this.hasAttribute("reverse") ? "reversed" : "basic");
@@ -84,6 +86,14 @@ class Reorder extends WJElement {
84
86
  });
85
87
  }
86
88
  }
89
+ /**
90
+ * Sync ARIA attributes on host.
91
+ */
92
+ syncAria() {
93
+ if (!this.hasAttribute("role")) {
94
+ this.setAriaState({ role: "list" });
95
+ }
96
+ }
87
97
  /**
88
98
  * Attaches event listeners to the element.
89
99
  * @param element
@@ -1 +1 @@
1
- {"version":3,"file":"wje-reorder.js","sources":["../packages/wje-reorder/reorder.element.js","../packages/wje-reorder/reorder.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Reorder` is a custom web component that represents a reorder.\n * It extends from `WJElement`.\n * @summary This element represents a reorder.\n * @documentation https://elements.webjet.sk/components/reorder\n * @status stable\n * @augments WJElement\n * @csspart native - The native part of the reorder.\n * @slot - The default slot for the reorder.\n * // @fires wje-reorder:change - Event fired when the reorder is changed.\n * @tag wje-reorder\n */\n\nexport default class Reorder extends WJElement {\n /**\n * Creates an instance of Select.\n * @class\n */\n constructor() {\n super();\n this.dragEl = null;\n this.items = [];\n this.originalIndex = null;\n this.isDragging = false;\n this.offsetX = 0;\n this.offsetY = 0;\n this.cloneEl = null;\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'Select';\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 [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Draws the component after it is connected to the DOM.\n * @returns {DocumentFragment}\n */\n draw() {\n const fragment = document.createDocumentFragment();\n\n const container = document.createElement('div');\n container.classList.add('container');\n container.setAttribute('part', 'native');\n\n const slot = document.createElement('slot');\n slot.classList.add('reorder-items');\n\n container.appendChild(slot);\n\n fragment.appendChild(container);\n\n this.container = container;\n\n return fragment;\n }\n\n /**\n * Adds event listeners after the component is drawn.\n */\n afterDraw() {\n const items = this.querySelectorAll('wje-reorder-item');\n const dropZones = this.querySelectorAll('wje-reorder-dropzone');\n this.container.classList.add(this.hasAttribute('reverse') ? 'reversed' : 'basic');\n\n if (dropZones) {\n dropZones.forEach((dropZone) => {\n this.container.classList.remove('container');\n this.container.classList.add('container-w-dropzones');\n });\n }\n\n if (items) {\n items.forEach((item) => {\n const handles = item.querySelectorAll('[slot=handle]');\n const draggableElement = handles.length > 0 ? handles : [item];\n\n draggableElement.forEach((element) => {\n this.attachEventListeners(element);\n });\n });\n }\n }\n\n /**\n * Attaches event listeners to the element.\n * @param element\n */\n attachEventListeners(element) {\n element.addEventListener('mousedown', this.mouseDown.bind(this), false);\n element.addEventListener('touchstart', this.touchStart.bind(this), false);\n element.addEventListener('dragstart', this.dragStart.bind(this), false);\n }\n\n /**\n * Handles the mouse down event.\n * @param {object} e\n */\n mouseDown(e) {\n this.startDragging(e.clientX, e.clientY, e.currentTarget);\n document.addEventListener('mousemove', this.mouseMove.bind(this), false);\n document.addEventListener('mouseup', this.mouseUp.bind(this), false);\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Handles the touch start event.\n * @param e\n */\n touchStart(e) {\n const touch = e.touches[0];\n this.startDragging(touch.clientX, touch.clientY, e.currentTarget);\n document.addEventListener('touchmove', this.touchMove.bind(this), false);\n document.addEventListener('touchend', this.touchEnd.bind(this), false);\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Initializes the dragging process for a reorderable item.\n * @param {number} clientX The x-coordinate of the mouse pointer when the drag starts.\n * @param {number} clientY The y-coordinate of the mouse pointer when the drag starts.\n * @param {HTMLElement} target The target element where the drag event originated.\n */\n startDragging(clientX, clientY, target) {\n if (this.hasAttribute('disabled')) {\n return;\n }\n\n this.isDragging = true;\n this.dragEl = target.closest('wje-reorder-item');\n\n this.createClone();\n\n this.dragEl.style.opacity = '0.3';\n\n const rect = this.dragEl.getBoundingClientRect();\n this.offsetX = clientX - rect.left;\n this.offsetY = clientY - rect.top;\n\n this.dragEl.classList.add('dragging');\n\n this.originalIndex = [...this.dragEl.parentNode.children].indexOf(this.dragEl);\n this.originalParent = this.dragEl.parentNode;\n }\n\n /**\n * Handles the mouse move event.\n * @param e\n */\n mouseMove(e) {\n if (!this.isDragging) return;\n this.moveElement(e.pageX, e.pageY);\n\n if (this.cloneEl) {\n this.cloneEl.style.left = `${e.pageX - this.offsetX}px`;\n this.cloneEl.style.top = `${e.pageY - this.offsetY}px`;\n }\n }\n\n /**\n * Handles the `touchmove` event and updates the position of the dragged element.\n * @param {TouchEvent} e The touch event containing touch position data.\n */\n touchMove(e) {\n if (!this.isDragging) return;\n const touch = e.touches[0];\n this.moveElement(touch.pageX, touch.pageY);\n }\n\n /**\n * Updates the position of the dragged element and handles reordering logic based on the mouse position.\n * @param {number} pageX The x-coordinate of the mouse pointer relative to the viewport during the move event.\n * @param {number} pageY The y-coordinate of the mouse pointer relative to the viewport during the move event.\n */\n moveElement(pageX, pageY) {\n const scrollX = window.scrollX || document.documentElement.scrollLeft;\n const scrollY = window.scrollY || document.documentElement.scrollTop;\n const adjustedPageX = pageX - scrollX;\n const adjustedPageY = pageY - scrollY;\n\n this.dragEl.style.left = `${adjustedPageX}px`;\n this.dragEl.style.top = `${adjustedPageY}px`;\n\n if (this.cloneEl) {\n this.cloneEl.style.left = `${adjustedPageX}px`;\n this.cloneEl.style.top = `${adjustedPageY}px`;\n }\n\n const items = this.querySelectorAll('wje-reorder-item');\n items.forEach((item) => {\n if (item === this.dragEl) return;\n\n const boundingBox = item.getBoundingClientRect();\n const mouseY = adjustedPageY - boundingBox.top;\n const mouseYPercent = (mouseY / boundingBox.height) * 100;\n\n if (mouseYPercent > 30 && this.isMovingDown(item)) {\n item.parentNode.insertBefore(this.dragEl, item.nextSibling);\n } else if (mouseYPercent < 30 && !this.isMovingDown(item)) {\n item.parentNode.insertBefore(this.dragEl, item);\n }\n });\n }\n\n /**\n * Handles the mouse up event.\n */\n mouseUp() {\n this.stopDragging();\n document.removeEventListener('mousemove', this.mouseMove.bind(this), false);\n document.removeEventListener('mouseup', this.mouseUp.bind(this), false);\n\n if (this.cloneEl) {\n this.cloneEl.remove();\n this.cloneEl = null;\n }\n\n if (this.dragEl) {\n this.dragEl.style.opacity = '1';\n }\n }\n\n /**\n * Handles the touch end event.\n */\n touchEnd() {\n this.stopDragging();\n document.removeEventListener('touchmove', this.touchMove.bind(this), false);\n document.removeEventListener('touchend', this.touchEnd.bind(this), false);\n }\n\n /**\n * Stops dragging the element.\n */\n stopDragging() {\n if (!this.isDragging) return;\n\n this.isDragging = false;\n this.dragEl.classList.remove('dragging');\n this.dragEl.style.left = '';\n this.dragEl.style.top = '';\n\n const parent = this.dragEl.parentNode;\n const newIndex = Array.from(parent.children).indexOf(this.dragEl);\n\n const newOrderElements = Array.from(parent.children).map((el) => {\n const clonedNode = el.cloneNode(true);\n const handle = clonedNode.querySelector('.handle');\n if (handle) {\n handle.remove();\n }\n return clonedNode;\n });\n\n const newOrder = newOrderElements.map(el => el.innerText.trim());\n\n this.dispatchChange(this.originalIndex, newIndex, newOrder, newOrderElements);\n\n document.body.style.userSelect = '';\n }\n\n /**\n * Prevents the default behavior of the `dragstart` event.\n * @param {DragEvent} e The drag event triggered when a drag operation starts.\n */\n dragStart(e) {\n e.preventDefault();\n }\n\n /**\n * Creates a clone of the element.\n */\n createClone() {\n this.cloneEl = this.dragEl.cloneNode(true);\n this.cloneEl.style.position = 'absolute';\n this.cloneEl.style.pointerEvents = 'none';\n this.cloneEl.style.visibility = 'visible';\n\n document.body.appendChild(this.cloneEl);\n }\n\n /**\n * Checks if the dragged element is moving down.\n * @param droppedElement\n * @returns {boolean}\n */\n isMovingDown(droppedElement) {\n const parent = droppedElement.parentNode;\n const dragIndex = Array.from(parent.children).indexOf(this.dragEl);\n const dropIndex = Array.from(parent.children).indexOf(droppedElement);\n\n return dragIndex < dropIndex;\n }\n\n /**\n * Dispatches a custom event to signal that a reordering operation has occurred.\n * @param {number} from The original index of the dragged item.\n * @param {number} to The new index of the dragged item after reordering.\n * @param {Array<number>} order The updated order of items after the reordering.\n * // @fires wje-reorder:change - Dispatched when the reordering is completed.\n * The event includes details about the initial position, the new position, and the new order.\n */\n dispatchChange(from, to, order, orderElements) {\n this.dispatchEvent(\n new CustomEvent('wje-reorder:change', {\n detail: { from, to, order, orderElements },\n })\n );\n }\n}\n","import Reorder from './reorder.element.js';\n\nexport default Reorder;\n\nReorder.define('wje-reorder', Reorder);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wje-reorder.js","sources":["../packages/wje-reorder/reorder.element.js","../packages/wje-reorder/reorder.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Reorder` is a custom web component that represents a reorder.\n * It extends from `WJElement`.\n * @summary This element represents a reorder.\n * @documentation https://elements.webjet.sk/components/reorder\n * @status stable\n * @augments WJElement\n * @csspart native - The native part of the reorder.\n * @slot - The default slot for the reorder.\n * // @fires wje-reorder:change - Event fired when the reorder is changed.\n * @tag wje-reorder\n */\n\nexport default class Reorder extends WJElement {\n /**\n * Creates an instance of Select.\n * @class\n */\n constructor() {\n super();\n this.dragEl = null;\n this.items = [];\n this.originalIndex = null;\n this.isDragging = false;\n this.offsetX = 0;\n this.offsetY = 0;\n this.cloneEl = null;\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'Select';\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 [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.syncAria();\n }\n\n /**\n * Draws the component after it is connected to the DOM.\n * @returns {DocumentFragment}\n */\n draw() {\n const fragment = document.createDocumentFragment();\n\n const container = document.createElement('div');\n container.classList.add('container');\n container.setAttribute('part', 'native');\n\n const slot = document.createElement('slot');\n slot.classList.add('reorder-items');\n\n container.appendChild(slot);\n\n fragment.appendChild(container);\n\n this.container = container;\n\n return fragment;\n }\n\n /**\n * Adds event listeners after the component is drawn.\n */\n afterDraw() {\n this.syncAria();\n const items = this.querySelectorAll('wje-reorder-item');\n const dropZones = this.querySelectorAll('wje-reorder-dropzone');\n this.container.classList.add(this.hasAttribute('reverse') ? 'reversed' : 'basic');\n\n if (dropZones) {\n dropZones.forEach((dropZone) => {\n this.container.classList.remove('container');\n this.container.classList.add('container-w-dropzones');\n });\n }\n\n if (items) {\n items.forEach((item) => {\n const handles = item.querySelectorAll('[slot=handle]');\n const draggableElement = handles.length > 0 ? handles : [item];\n\n draggableElement.forEach((element) => {\n this.attachEventListeners(element);\n });\n });\n }\n }\n\n /**\n * Sync ARIA attributes on host.\n */\n syncAria() {\n if (!this.hasAttribute('role')) {\n this.setAriaState({ role: 'list' });\n }\n }\n\n /**\n * Attaches event listeners to the element.\n * @param element\n */\n attachEventListeners(element) {\n element.addEventListener('mousedown', this.mouseDown.bind(this), false);\n element.addEventListener('touchstart', this.touchStart.bind(this), false);\n element.addEventListener('dragstart', this.dragStart.bind(this), false);\n }\n\n /**\n * Handles the mouse down event.\n * @param {object} e\n */\n mouseDown(e) {\n this.startDragging(e.clientX, e.clientY, e.currentTarget);\n document.addEventListener('mousemove', this.mouseMove.bind(this), false);\n document.addEventListener('mouseup', this.mouseUp.bind(this), false);\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Handles the touch start event.\n * @param e\n */\n touchStart(e) {\n const touch = e.touches[0];\n this.startDragging(touch.clientX, touch.clientY, e.currentTarget);\n document.addEventListener('touchmove', this.touchMove.bind(this), false);\n document.addEventListener('touchend', this.touchEnd.bind(this), false);\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Initializes the dragging process for a reorderable item.\n * @param {number} clientX The x-coordinate of the mouse pointer when the drag starts.\n * @param {number} clientY The y-coordinate of the mouse pointer when the drag starts.\n * @param {HTMLElement} target The target element where the drag event originated.\n */\n startDragging(clientX, clientY, target) {\n if (this.hasAttribute('disabled')) {\n return;\n }\n\n this.isDragging = true;\n this.dragEl = target.closest('wje-reorder-item');\n\n this.createClone();\n\n this.dragEl.style.opacity = '0.3';\n\n const rect = this.dragEl.getBoundingClientRect();\n this.offsetX = clientX - rect.left;\n this.offsetY = clientY - rect.top;\n\n this.dragEl.classList.add('dragging');\n\n this.originalIndex = [...this.dragEl.parentNode.children].indexOf(this.dragEl);\n this.originalParent = this.dragEl.parentNode;\n }\n\n /**\n * Handles the mouse move event.\n * @param e\n */\n mouseMove(e) {\n if (!this.isDragging) return;\n this.moveElement(e.pageX, e.pageY);\n\n if (this.cloneEl) {\n this.cloneEl.style.left = `${e.pageX - this.offsetX}px`;\n this.cloneEl.style.top = `${e.pageY - this.offsetY}px`;\n }\n }\n\n /**\n * Handles the `touchmove` event and updates the position of the dragged element.\n * @param {TouchEvent} e The touch event containing touch position data.\n */\n touchMove(e) {\n if (!this.isDragging) return;\n const touch = e.touches[0];\n this.moveElement(touch.pageX, touch.pageY);\n }\n\n /**\n * Updates the position of the dragged element and handles reordering logic based on the mouse position.\n * @param {number} pageX The x-coordinate of the mouse pointer relative to the viewport during the move event.\n * @param {number} pageY The y-coordinate of the mouse pointer relative to the viewport during the move event.\n */\n moveElement(pageX, pageY) {\n const scrollX = window.scrollX || document.documentElement.scrollLeft;\n const scrollY = window.scrollY || document.documentElement.scrollTop;\n const adjustedPageX = pageX - scrollX;\n const adjustedPageY = pageY - scrollY;\n\n this.dragEl.style.left = `${adjustedPageX}px`;\n this.dragEl.style.top = `${adjustedPageY}px`;\n\n if (this.cloneEl) {\n this.cloneEl.style.left = `${adjustedPageX}px`;\n this.cloneEl.style.top = `${adjustedPageY}px`;\n }\n\n const items = this.querySelectorAll('wje-reorder-item');\n items.forEach((item) => {\n if (item === this.dragEl) return;\n\n const boundingBox = item.getBoundingClientRect();\n const mouseY = adjustedPageY - boundingBox.top;\n const mouseYPercent = (mouseY / boundingBox.height) * 100;\n\n if (mouseYPercent > 30 && this.isMovingDown(item)) {\n item.parentNode.insertBefore(this.dragEl, item.nextSibling);\n } else if (mouseYPercent < 30 && !this.isMovingDown(item)) {\n item.parentNode.insertBefore(this.dragEl, item);\n }\n });\n }\n\n /**\n * Handles the mouse up event.\n */\n mouseUp() {\n this.stopDragging();\n document.removeEventListener('mousemove', this.mouseMove.bind(this), false);\n document.removeEventListener('mouseup', this.mouseUp.bind(this), false);\n\n if (this.cloneEl) {\n this.cloneEl.remove();\n this.cloneEl = null;\n }\n\n if (this.dragEl) {\n this.dragEl.style.opacity = '1';\n }\n }\n\n /**\n * Handles the touch end event.\n */\n touchEnd() {\n this.stopDragging();\n document.removeEventListener('touchmove', this.touchMove.bind(this), false);\n document.removeEventListener('touchend', this.touchEnd.bind(this), false);\n }\n\n /**\n * Stops dragging the element.\n */\n stopDragging() {\n if (!this.isDragging) return;\n\n this.isDragging = false;\n this.dragEl.classList.remove('dragging');\n this.dragEl.style.left = '';\n this.dragEl.style.top = '';\n\n const parent = this.dragEl.parentNode;\n const newIndex = Array.from(parent.children).indexOf(this.dragEl);\n\n const newOrderElements = Array.from(parent.children).map((el) => {\n const clonedNode = el.cloneNode(true);\n const handle = clonedNode.querySelector('.handle');\n if (handle) {\n handle.remove();\n }\n return clonedNode;\n });\n\n const newOrder = newOrderElements.map(el => el.innerText.trim());\n\n this.dispatchChange(this.originalIndex, newIndex, newOrder, newOrderElements);\n\n document.body.style.userSelect = '';\n }\n\n /**\n * Prevents the default behavior of the `dragstart` event.\n * @param {DragEvent} e The drag event triggered when a drag operation starts.\n */\n dragStart(e) {\n e.preventDefault();\n }\n\n /**\n * Creates a clone of the element.\n */\n createClone() {\n this.cloneEl = this.dragEl.cloneNode(true);\n this.cloneEl.style.position = 'absolute';\n this.cloneEl.style.pointerEvents = 'none';\n this.cloneEl.style.visibility = 'visible';\n\n document.body.appendChild(this.cloneEl);\n }\n\n /**\n * Checks if the dragged element is moving down.\n * @param droppedElement\n * @returns {boolean}\n */\n isMovingDown(droppedElement) {\n const parent = droppedElement.parentNode;\n const dragIndex = Array.from(parent.children).indexOf(this.dragEl);\n const dropIndex = Array.from(parent.children).indexOf(droppedElement);\n\n return dragIndex < dropIndex;\n }\n\n /**\n * Dispatches a custom event to signal that a reordering operation has occurred.\n * @param {number} from The original index of the dragged item.\n * @param {number} to The new index of the dragged item after reordering.\n * @param {Array<number>} order The updated order of items after the reordering.\n * // @fires wje-reorder:change - Dispatched when the reordering is completed.\n * The event includes details about the initial position, the new position, and the new order.\n */\n dispatchChange(from, to, order, orderElements) {\n this.dispatchEvent(\n new CustomEvent('wje-reorder:change', {\n detail: { from, to, order, orderElements },\n })\n );\n }\n}\n","import Reorder from './reorder.element.js';\n\nexport default Reorder;\n\nReorder.define('wje-reorder', Reorder);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wje-route.js","sources":["../packages/wje-route/route.element.js","../packages/wje-route/route.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\n\n/**\n * `Route` is a custom web component that represents a route in a routing system.\n * @summary This element represents a route in a routing system.\n * @documentation https://elements.webjet.sk/components/route\n * @status stable\n * @augments WJElement\n * @tag wje-route\n */\nexport default class Route extends WJElement {\n /**\n * Creates an instance of Route.\n * @class\n */\n constructor() {\n super();\n }\n\n className = 'Route';\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 * Draws the component for the route.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let slot = document.createElement('slot');\n\n fragment.appendChild(slot);\n\n return fragment;\n }\n}\n","import Route from './route.element.js';\n\nexport default Route;\n\nRoute.define('wje-route', Route);\n"],"names":[],"mappings":";;;;AAUe,MAAM,cAAc,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzC,cAAc;AACV,UAAO;AAGX,qCAAY;AAAA,EAFhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASI,WAAW,qBAAqB;AAC5B,WAAO,CAAE;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKI,kBAAkB;AACd,SAAK,eAAe;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,OAAO;AACH,QAAI,WAAW,SAAS,uBAAwB;AAEhD,QAAI,OAAO,SAAS,cAAc,MAAM;AAExC,aAAS,YAAY,IAAI;AAEzB,WAAO;AAAA,EACf;AACA;AC9CA,MAAM,OAAO,aAAa,KAAK;"}
1
+ {"version":3,"file":"wje-route.js","sources":["../packages/wje-route/route.element.js","../packages/wje-route/route.js"],"sourcesContent":["import { default as WJElement } from '../wje-element/element.js';\n\n/**\n * `Route` is a custom web component that represents a route in a routing system.\n * @summary This element represents a route in a routing system.\n * @documentation https://elements.webjet.sk/components/route\n * @status stable\n * @augments WJElement\n * @tag wje-route\n */\nexport default class Route extends WJElement {\n /**\n * Creates an instance of Route.\n * @class\n */\n constructor() {\n super();\n }\n\n className = 'Route';\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 * Draws the component for the route.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let slot = document.createElement('slot');\n\n fragment.appendChild(slot);\n\n return fragment;\n }\n}\n","import Route from './route.element.js';\n\nexport default Route;\n\nRoute.define('wje-route', Route);\n"],"names":[],"mappings":";;;;AAUe,MAAM,cAAc,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzC,cAAc;AACV,UAAK;AAGT,qCAAY;AAAA,EAFZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW,qBAAqB;AAC5B,WAAO,CAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AACd,SAAK,eAAe;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACH,QAAI,WAAW,SAAS,uBAAsB;AAE9C,QAAI,OAAO,SAAS,cAAc,MAAM;AAExC,aAAS,YAAY,IAAI;AAEzB,WAAO;AAAA,EACX;AACJ;AC9CA,MAAM,OAAO,aAAa,KAAK;"}
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { b as bindRouterLinks } from "./router-links-CJnOdbas.js";
4
+ import { b as bindRouterLinks } from "./router-links-wjqCnncc.js";
5
5
  import WJElement from "./wje-element.js";
6
6
  const styles = "/*\n[ WJ Router Link ]\n*/\n\n:host {\n display: block;\n background: transparent !important;\n}\n\n:host(.active) {\n cursor: pointer;\n font-weight: bold;\n}\n";
7
7
  class RouterLink extends WJElement {
@@ -1 +1 @@
1
- {"version":3,"file":"wje-router-link.js","sources":["../packages/wje-router-link/router-link.element.js","../packages/wje-router-link/router-link.js"],"sourcesContent":["import { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\n\nimport { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `RouterLink` is a custom web component that represents a router link in a routing system.\n * @summary This element represents a router link in a routing system.\n * @documentation https://elements.webjet.sk/components/router-link\n * @status stable\n * @augments {WJElement}\n * @slot - The default slot for the router link.\n * @tag wje-router-link\n */\nexport default class RouterLink extends WJElement {\n /**\n * Creates an instance of RouterLink.\n * @class\n */\n constructor() {\n super();\n }\n\n className = 'RouterLink';\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 [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.setAttribute('active-class', 'active');\n }\n\n /**\n * Draws the component for the router link.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let element = document.createElement('slot');\n\n fragment.appendChild(element);\n\n return fragment;\n }\n\n afterDraw(context, appStore, attributes) {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n }\n\n /**\n * Cleans up before the component is disconnected.\n */\n beforeDisconnect() {\n this.unbindRouterLinks?.();\n }\n}\n","import RouterLink from './router-link.element.js';\n\nexport default RouterLink;\n\nRouterLink.define('wje-router-link', RouterLink);\n"],"names":[],"mappings":";;;;;;AAce,MAAM,mBAAmB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAK9C,cAAc;AACV,UAAO;AAGX,qCAAY;AAAA,EAFhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASI,WAAW,gBAAgB;AACvB,WAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOI,WAAW,qBAAqB;AAC5B,WAAO,CAAE;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKI,kBAAkB;AACd,SAAK,eAAe;AACpB,SAAK,aAAa,gBAAgB,QAAQ;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,OAAO;AACH,QAAI,WAAW,SAAS,uBAAwB;AAEhD,QAAI,UAAU,SAAS,cAAc,MAAM;AAE3C,aAAS,YAAY,OAAO;AAE5B,WAAO;AAAA,EACf;AAAA,EAEI,UAAU,SAAS,UAAU,YAAY;AACrC,SAAK,oBAAoB,gBAAgB,KAAK,eAAe,EAAE,UAAU,OAAO;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA,EAKI,mBAAmB;;AACf,eAAK,sBAAL;AAAA,EACR;AACA;ACvEA,WAAW,OAAO,mBAAmB,UAAU;"}
1
+ {"version":3,"file":"wje-router-link.js","sources":["../packages/wje-router-link/router-link.element.js","../packages/wje-router-link/router-link.js"],"sourcesContent":["import { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\n\nimport { default as WJElement } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `RouterLink` is a custom web component that represents a router link in a routing system.\n * @summary This element represents a router link in a routing system.\n * @documentation https://elements.webjet.sk/components/router-link\n * @status stable\n * @augments {WJElement}\n * @slot - The default slot for the router link.\n * @tag wje-router-link\n */\nexport default class RouterLink extends WJElement {\n /**\n * Creates an instance of RouterLink.\n * @class\n */\n constructor() {\n super();\n }\n\n className = 'RouterLink';\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 [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.setAttribute('active-class', 'active');\n }\n\n /**\n * Draws the component for the router link.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let element = document.createElement('slot');\n\n fragment.appendChild(element);\n\n return fragment;\n }\n\n afterDraw(context, appStore, attributes) {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n }\n\n /**\n * Cleans up before the component is disconnected.\n */\n beforeDisconnect() {\n this.unbindRouterLinks?.();\n }\n}\n","import RouterLink from './router-link.element.js';\n\nexport default RouterLink;\n\nRouterLink.define('wje-router-link', RouterLink);\n"],"names":[],"mappings":";;;;;;AAce,MAAM,mBAAmB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAK9C,cAAc;AACV,UAAK;AAGT,qCAAY;AAAA,EAFZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW,gBAAgB;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,qBAAqB;AAC5B,WAAO,CAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AACd,SAAK,eAAe;AACpB,SAAK,aAAa,gBAAgB,QAAQ;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO;AACH,QAAI,WAAW,SAAS,uBAAsB;AAE9C,QAAI,UAAU,SAAS,cAAc,MAAM;AAE3C,aAAS,YAAY,OAAO;AAE5B,WAAO;AAAA,EACX;AAAA,EAEA,UAAU,SAAS,UAAU,YAAY;AACrC,SAAK,oBAAoB,gBAAgB,KAAK,eAAe,EAAE,UAAU,OAAO;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;;AACf,eAAK,sBAAL;AAAA,EACJ;AACJ;ACvEA,WAAW,OAAO,mBAAmB,UAAU;"}
@@ -129,10 +129,14 @@ function getAnimationHook(name) {
129
129
  return animationRegistry[name] || defaultHook || (defaultHook = new GenericCSS());
130
130
  }
131
131
  class AnimatedOutlet extends HTMLElement {
132
+ /**
133
+ * @template {Node} T
134
+ * @param {T} el
135
+ * @returns {T}
136
+ */
132
137
  appendChild(el) {
133
138
  if (!this.hasAttribute("animation")) {
134
- super.appendChild(el);
135
- return;
139
+ return super.appendChild(el);
136
140
  }
137
141
  const hook = getAnimationHook(this.getAttribute("animation"));
138
142
  const runParallel = hook.runParallel(this);
@@ -143,11 +147,16 @@ class AnimatedOutlet extends HTMLElement {
143
147
  } else {
144
148
  hook.enter(this, el);
145
149
  }
150
+ return el;
146
151
  }
152
+ /**
153
+ * @template {Node} T
154
+ * @param {T} el
155
+ * @returns {T}
156
+ */
147
157
  removeChild(el) {
148
158
  if (!this.hasAttribute("animation")) {
149
- super.removeChild(el);
150
- return;
159
+ return super.removeChild(el);
151
160
  }
152
161
  const hook = getAnimationHook(this.getAttribute("animation"));
153
162
  if (this.removing && this.removing.parentNode === this) {
@@ -158,7 +167,7 @@ class AnimatedOutlet extends HTMLElement {
158
167
  super.removeChild(el);
159
168
  }
160
169
  this.removing = null;
161
- return;
170
+ return el;
162
171
  }
163
172
  this.removing = el;
164
173
  hook.leave(this, el, () => {
@@ -169,6 +178,7 @@ class AnimatedOutlet extends HTMLElement {
169
178
  this.appending = null;
170
179
  this.removing = null;
171
180
  });
181
+ return el;
172
182
  }
173
183
  }
174
184
  const styles = "/*\n[ WJ Router Outlet ]\n*/\n\n.fade-enter-active,\n.fade-leave-active {\n transition: opacity 0.5s;\n}\n.fade-enter {\n height: 0;\n overflow: hidden;\n}\n\n.fade-enter,\n.fade-leave-to {\n opacity: 0;\n}\n\n.slide-fade-enter-active {\n transition: all 0.3s ease;\n}\n\n.slide-fade-leave-active {\n transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);\n}\n\n.slide-fade-enter,\n.slide-fade-leave-to {\n transform: translateX(100px);\n opacity: 0;\n}\n\n.bounce-enter {\n opacity: 0;\n}\n\n.bounce-enter-active {\n animation: bounce-in 0.5s;\n}\n\n.bounce-leave-active {\n animation: bounce-in 0.5s reverse;\n}\n\n@keyframes bounce-in {\n 0% {\n transform: scale(0);\n }\n 50% {\n transform: scale(1.5);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n\n";
@@ -1 +1 @@
1
- {"version":3,"file":"wje-router-outlet.js","sources":["../node_modules/slick-router/lib/components/animated-outlet.js","../packages/wje-router-outlet/router-outlet.element.js","../packages/wje-router-outlet/router-outlet.js"],"sourcesContent":["export class AnimationHook {\r\n constructor(options = {}) {\r\n this.options = options\r\n }\r\n\r\n getOption(outlet, name) {\r\n return outlet.hasAttribute(name) ? outlet.getAttribute(name) : this.options[name]\r\n }\r\n\r\n hasOption(outlet, name) {\r\n return outlet.hasAttribute(name) || this.options[name]\r\n }\r\n\r\n runParallel(outlet) {\r\n return this.hasOption(outlet, 'parallel')\r\n }\r\n\r\n beforeEnter(outlet, el) {}\r\n\r\n enter(outlet, el) {}\r\n\r\n leave(outlet, el, done) {\r\n done()\r\n }\r\n}\r\n\r\n// code extracted from vue\r\nconst raf = window.requestAnimationFrame\r\nconst TRANSITION = 'transition'\r\nconst ANIMATION = 'animation'\r\n\r\n// Transition property/event sniffing\r\nconst transitionProp = 'transition'\r\nconst transitionEndEvent = 'transitionend'\r\nconst animationProp = 'animation'\r\nconst animationEndEvent = 'animationend'\r\n\r\nfunction nextFrame(fn) {\r\n raf(function () {\r\n raf(fn)\r\n })\r\n}\r\n\r\nfunction whenTransitionEnds(el, cb) {\r\n const ref = getTransitionInfo(el)\r\n const type = ref.type\r\n const timeout = ref.timeout\r\n const propCount = ref.propCount\r\n if (!type) {\r\n return cb()\r\n }\r\n const event = type === TRANSITION ? transitionEndEvent : animationEndEvent\r\n let ended = 0\r\n const end = function () {\r\n el.removeEventListener(event, onEnd)\r\n cb()\r\n }\r\n const onEnd = function (e) {\r\n if (e.target === el) {\r\n if (++ended >= propCount) {\r\n end()\r\n }\r\n }\r\n }\r\n setTimeout(function () {\r\n if (ended < propCount) {\r\n end()\r\n }\r\n }, timeout + 1)\r\n el.addEventListener(event, onEnd)\r\n}\r\n\r\nfunction getTransitionInfo(el) {\r\n const styles = window.getComputedStyle(el)\r\n // JSDOM may return undefined for transition properties\r\n const transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ')\r\n const transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ')\r\n const transitionTimeout = getTimeout(transitionDelays, transitionDurations)\r\n const animationDelays = (styles[animationProp + 'Delay'] || '').split(', ')\r\n const animationDurations = (styles[animationProp + 'Duration'] || '').split(', ')\r\n const animationTimeout = getTimeout(animationDelays, animationDurations)\r\n\r\n const timeout = Math.max(transitionTimeout, animationTimeout)\r\n const type = timeout > 0 ? (transitionTimeout > animationTimeout ? TRANSITION : ANIMATION) : null\r\n const propCount = type\r\n ? type === TRANSITION\r\n ? transitionDurations.length\r\n : animationDurations.length\r\n : 0\r\n\r\n return {\r\n type,\r\n timeout,\r\n propCount,\r\n }\r\n}\r\n\r\nfunction getTimeout(delays, durations) {\r\n /* istanbul ignore next */\r\n while (delays.length < durations.length) {\r\n delays = delays.concat(delays)\r\n }\r\n\r\n return Math.max.apply(\r\n null,\r\n durations.map(function (d, i) {\r\n return toMs(d) + toMs(delays[i])\r\n }),\r\n )\r\n}\r\n\r\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\r\n// in a locale-dependent way, using a comma instead of a dot.\r\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\r\n// as a floor function) causing unexpected behaviors\r\nfunction toMs(s) {\r\n return Number(s.slice(0, -1).replace(',', '.')) * 1000\r\n}\r\n\r\nfunction runTransition(el, name, type, cb) {\r\n el.classList.add(`${name}-${type}-active`)\r\n nextFrame(function () {\r\n el.classList.remove(`${name}-${type}`)\r\n el.classList.add(`${name}-${type}-to`)\r\n whenTransitionEnds(el, function () {\r\n el.classList.remove(`${name}-${type}-active`, `${name}-${type}-to`)\r\n if (cb) cb()\r\n })\r\n })\r\n}\r\n\r\nexport class GenericCSS extends AnimationHook {\r\n beforeEnter(outlet, el) {\r\n const name = outlet.getAttribute('animation') || 'outlet'\r\n el.classList.add(`${name}-enter`)\r\n }\r\n\r\n enter(outlet, el) {\r\n const name = outlet.getAttribute('animation') || 'outlet'\r\n runTransition(el, name, 'enter')\r\n }\r\n\r\n leave(outlet, el, done) {\r\n const name = outlet.getAttribute('animation') || 'outlet'\r\n el.classList.add(`${name}-leave`)\r\n runTransition(el, name, 'leave', done)\r\n }\r\n}\r\n\r\nexport class AnimateCSS extends AnimationHook {\r\n beforeEnter(outlet, el) {\r\n const enter = this.getOption(outlet, 'enter')\r\n if (enter) {\r\n el.style.display = 'none'\r\n }\r\n }\r\n\r\n enter(outlet, el) {\r\n const enter = this.getOption(outlet, 'enter')\r\n if (!enter) return\r\n el.style.display = 'block'\r\n el.classList.add('animated', enter)\r\n el.addEventListener(\r\n 'animationend',\r\n () => {\r\n el.classList.remove('animated', enter)\r\n },\r\n { once: true },\r\n )\r\n }\r\n\r\n leave(outlet, el, done) {\r\n const leave = this.getOption(outlet, 'leave')\r\n if (!leave) {\r\n done()\r\n return\r\n }\r\n el.classList.add('animated', leave)\r\n el.addEventListener('animationend', done, { once: true })\r\n }\r\n}\r\n\r\nconst animationRegistry = {}\r\nlet defaultHook\r\n\r\nexport function registerAnimation(name, AnimationHookClass, options = {}) {\r\n animationRegistry[name] = new AnimationHookClass(options)\r\n}\r\n\r\nexport function setDefaultAnimation(AnimationHookClass, options = {}) {\r\n defaultHook = new AnimationHookClass(options)\r\n}\r\n\r\nfunction getAnimationHook(name) {\r\n return animationRegistry[name] || defaultHook || (defaultHook = new GenericCSS())\r\n}\r\n\r\nexport class AnimatedOutlet extends HTMLElement {\r\n appendChild(el) {\r\n if (!this.hasAttribute('animation')) {\r\n super.appendChild(el)\r\n return\r\n }\r\n const hook = getAnimationHook(this.getAttribute('animation'))\r\n const runParallel = hook.runParallel(this)\r\n\r\n hook.beforeEnter(this, el)\r\n super.appendChild(el)\r\n if (!runParallel && this.removing) {\r\n // when removing a previous el, append animation is run after remove one\r\n this.appending = el\r\n } else {\r\n hook.enter(this, el)\r\n }\r\n }\r\n\r\n removeChild(el) {\r\n if (!this.hasAttribute('animation')) {\r\n super.removeChild(el)\r\n return\r\n }\r\n const hook = getAnimationHook(this.getAttribute('animation'))\r\n\r\n if (this.removing && this.removing.parentNode === this) {\r\n super.removeChild(this.removing)\r\n }\r\n\r\n if (el === this.appending) {\r\n if (el.parentNode === this) {\r\n super.removeChild(el)\r\n }\r\n this.removing = null\r\n return\r\n }\r\n\r\n this.removing = el\r\n hook.leave(this, el, () => {\r\n if (this.removing && this.removing.parentNode === this) {\r\n super.removeChild(this.removing)\r\n }\r\n if (this.appending) hook.enter(this, this.appending)\r\n this.appending = null\r\n this.removing = null\r\n })\r\n }\r\n}\r\n","import { AnimatedOutlet, GenericCSS, setDefaultAnimation } from 'slick-router/components/animated-outlet.js';\n\nimport styles from './styles/styles.css?inline';\n\nsetDefaultAnimation(GenericCSS);\n\n/**\n * `Route` is a custom web component that represents a route in a routing system.\n * @summary This element represents a route in a routing system.\n * @documentation https://elements.webjet.sk/components/route\n * @status stable\n * @augments AnimatedOutlet\n * @tag wje-router-outlet\n */\nexport default class RouterOutlet extends AnimatedOutlet {\n /**\n * Creates an instance of Route.\n */\n constructor() {\n super();\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'RouterOutlet';\n\n connectedCallback() {\n const styleEl = document.createElement('style');\n styleEl.textContent = styles;\n this.parentNode.insertBefore(styleEl, this);\n }\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport RouterOutlet from './router-outlet.element.js';\n\nexport default RouterOutlet;\n\nWJElement.define('wje-router-outlet', RouterOutlet);\n"],"names":["styles"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"wje-router-outlet.js","sources":["../node_modules/slick-router/lib/components/animated-outlet.js","../packages/wje-router-outlet/router-outlet.element.js","../packages/wje-router-outlet/router-outlet.js"],"sourcesContent":["export class AnimationHook {\n constructor(options = {}) {\n this.options = options\n }\n\n getOption(outlet, name) {\n return outlet.hasAttribute(name) ? outlet.getAttribute(name) : this.options[name]\n }\n\n hasOption(outlet, name) {\n return outlet.hasAttribute(name) || this.options[name]\n }\n\n runParallel(outlet) {\n return this.hasOption(outlet, 'parallel')\n }\n\n beforeEnter(outlet, el) {}\n\n enter(outlet, el) {}\n\n leave(outlet, el, done) {\n done()\n }\n}\n\n// code extracted from vue\nconst raf = window.requestAnimationFrame\nconst TRANSITION = 'transition'\nconst ANIMATION = 'animation'\n\n// Transition property/event sniffing\nconst transitionProp = 'transition'\nconst transitionEndEvent = 'transitionend'\nconst animationProp = 'animation'\nconst animationEndEvent = 'animationend'\n\nfunction nextFrame(fn) {\n raf(function () {\n raf(fn)\n })\n}\n\nfunction whenTransitionEnds(el, cb) {\n const ref = getTransitionInfo(el)\n const type = ref.type\n const timeout = ref.timeout\n const propCount = ref.propCount\n if (!type) {\n return cb()\n }\n const event = type === TRANSITION ? transitionEndEvent : animationEndEvent\n let ended = 0\n const end = function () {\n el.removeEventListener(event, onEnd)\n cb()\n }\n const onEnd = function (e) {\n if (e.target === el) {\n if (++ended >= propCount) {\n end()\n }\n }\n }\n setTimeout(function () {\n if (ended < propCount) {\n end()\n }\n }, timeout + 1)\n el.addEventListener(event, onEnd)\n}\n\nfunction getTransitionInfo(el) {\n const styles = window.getComputedStyle(el)\n // JSDOM may return undefined for transition properties\n const transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ')\n const transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ')\n const transitionTimeout = getTimeout(transitionDelays, transitionDurations)\n const animationDelays = (styles[animationProp + 'Delay'] || '').split(', ')\n const animationDurations = (styles[animationProp + 'Duration'] || '').split(', ')\n const animationTimeout = getTimeout(animationDelays, animationDurations)\n\n const timeout = Math.max(transitionTimeout, animationTimeout)\n const type = timeout > 0 ? (transitionTimeout > animationTimeout ? TRANSITION : ANIMATION) : null\n const propCount = type\n ? type === TRANSITION\n ? transitionDurations.length\n : animationDurations.length\n : 0\n\n return {\n type,\n timeout,\n propCount,\n }\n}\n\nfunction getTimeout(delays, durations) {\n /* istanbul ignore next */\n while (delays.length < durations.length) {\n delays = delays.concat(delays)\n }\n\n return Math.max.apply(\n null,\n durations.map(function (d, i) {\n return toMs(d) + toMs(delays[i])\n }),\n )\n}\n\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs(s) {\n return Number(s.slice(0, -1).replace(',', '.')) * 1000\n}\n\nfunction runTransition(el, name, type, cb) {\n el.classList.add(`${name}-${type}-active`)\n nextFrame(function () {\n el.classList.remove(`${name}-${type}`)\n el.classList.add(`${name}-${type}-to`)\n whenTransitionEnds(el, function () {\n el.classList.remove(`${name}-${type}-active`, `${name}-${type}-to`)\n if (cb) cb()\n })\n })\n}\n\nexport class GenericCSS extends AnimationHook {\n beforeEnter(outlet, el) {\n const name = outlet.getAttribute('animation') || 'outlet'\n el.classList.add(`${name}-enter`)\n }\n\n enter(outlet, el) {\n const name = outlet.getAttribute('animation') || 'outlet'\n runTransition(el, name, 'enter')\n }\n\n leave(outlet, el, done) {\n const name = outlet.getAttribute('animation') || 'outlet'\n el.classList.add(`${name}-leave`)\n runTransition(el, name, 'leave', done)\n }\n}\n\nexport class AnimateCSS extends AnimationHook {\n beforeEnter(outlet, el) {\n const enter = this.getOption(outlet, 'enter')\n if (enter) {\n el.style.display = 'none'\n }\n }\n\n enter(outlet, el) {\n const enter = this.getOption(outlet, 'enter')\n if (!enter) return\n el.style.display = 'block'\n el.classList.add('animated', enter)\n el.addEventListener(\n 'animationend',\n () => {\n el.classList.remove('animated', enter)\n },\n { once: true },\n )\n }\n\n leave(outlet, el, done) {\n const leave = this.getOption(outlet, 'leave')\n if (!leave) {\n done()\n return\n }\n el.classList.add('animated', leave)\n el.addEventListener('animationend', done, { once: true })\n }\n}\n\nconst animationRegistry = {}\nlet defaultHook\n\nexport function registerAnimation(name, AnimationHookClass, options = {}) {\n animationRegistry[name] = new AnimationHookClass(options)\n}\n\nexport function setDefaultAnimation(AnimationHookClass, options = {}) {\n defaultHook = new AnimationHookClass(options)\n}\n\nfunction getAnimationHook(name) {\n return animationRegistry[name] || defaultHook || (defaultHook = new GenericCSS())\n}\n\nexport class AnimatedOutlet extends HTMLElement {\n /**\n * @template {Node} T\n * @param {T} el\n * @returns {T}\n */\n appendChild(el) {\n if (!this.hasAttribute('animation')) {\n return super.appendChild(el)\n }\n const hook = getAnimationHook(this.getAttribute('animation'))\n const runParallel = hook.runParallel(this)\n\n hook.beforeEnter(this, el)\n super.appendChild(el)\n if (!runParallel && this.removing) {\n // when removing a previous el, append animation is run after remove one\n this.appending = el\n } else {\n hook.enter(this, el)\n }\n return el\n }\n\n /**\n * @template {Node} T\n * @param {T} el\n * @returns {T}\n */\n removeChild(el) {\n if (!this.hasAttribute('animation')) {\n return super.removeChild(el)\n }\n const hook = getAnimationHook(this.getAttribute('animation'))\n\n if (this.removing && this.removing.parentNode === this) {\n super.removeChild(this.removing)\n }\n\n if (el === this.appending) {\n if (el.parentNode === this) {\n super.removeChild(el)\n }\n this.removing = null\n return el\n }\n\n this.removing = el\n hook.leave(this, el, () => {\n if (this.removing && this.removing.parentNode === this) {\n super.removeChild(this.removing)\n }\n if (this.appending) hook.enter(this, this.appending)\n this.appending = null\n this.removing = null\n })\n return el\n }\n}\n","import { AnimatedOutlet, GenericCSS, setDefaultAnimation } from 'slick-router/components/animated-outlet.js';\n\nimport styles from './styles/styles.css?inline';\n\nsetDefaultAnimation(GenericCSS);\n\n/**\n * `Route` is a custom web component that represents a route in a routing system.\n * @summary This element represents a route in a routing system.\n * @documentation https://elements.webjet.sk/components/route\n * @status stable\n * @augments AnimatedOutlet\n * @tag wje-router-outlet\n */\nexport default class RouterOutlet extends AnimatedOutlet {\n /**\n * Creates an instance of Route.\n */\n constructor() {\n super();\n }\n\n /**\n * The class name for the component.\n * @type {string}\n */\n className = 'RouterOutlet';\n\n connectedCallback() {\n const styleEl = document.createElement('style');\n styleEl.textContent = styles;\n this.parentNode.insertBefore(styleEl, this);\n }\n}\n","import { default as WJElement } from '../wje-element/element.js';\nimport RouterOutlet from './router-outlet.element.js';\n\nexport default RouterOutlet;\n\nWJElement.define('wje-router-outlet', RouterOutlet);\n"],"names":["styles"],"mappings":"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","x_google_ignoreList":[0]}
@@ -8,7 +8,7 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
8
8
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
9
9
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
10
10
  var _routes;
11
- import { r as routerLinks } from "./router-links-CJnOdbas.js";
11
+ import { r as routerLinks } from "./router-links-wjqCnncc.js";
12
12
  import WJElement from "./wje-element.js";
13
13
  const assoc = (obj, attr, val) => {
14
14
  obj[attr] = val;
@@ -201,21 +201,20 @@ class History {
201
201
  }
202
202
  // Start the hash change handling, returning `true` if the current URL matches
203
203
  // an existing route, and `false` otherwise.
204
- start(options = {}) {
204
+ start(options) {
205
205
  this.started = true;
206
- this.options = extend({ root: "/" }, options);
207
- this.location = this.options.location || this.location;
208
- this.history = this.options.history || this.history;
209
- this.root = this.options.root;
210
- this._wantsHashChange = this.options.hashChange !== false;
211
- this._wantsPushState = !!this.options.pushState;
212
- this._hasPushState = this._wantsPushState;
206
+ const _wantsPushState = !!options.pushState;
207
+ this.location = options.location || this.location;
208
+ this.history = options.history || this.history;
209
+ this.root = options.root;
210
+ this._wantsHashChange = options.hashChange !== false;
211
+ this._hasPushState = _wantsPushState;
213
212
  const fragment = this.getFragment();
214
213
  this.root = `/${this.root}/`.replace(rootStripper, "/");
215
214
  bindEvent(window, this._hasPushState ? "popstate" : "hashchange", this.checkUrl);
216
215
  this.fragment = fragment;
217
216
  const loc = this.location;
218
- if (this._wantsHashChange && this._wantsPushState) {
217
+ if (this._wantsHashChange && _wantsPushState) {
219
218
  if (!this._hasPushState && !this.atRoot()) {
220
219
  this.fragment = this.getFragment(null, true);
221
220
  this.location.replace(`${this.root}#${this.fragment}`);
@@ -225,7 +224,7 @@ class History {
225
224
  this.history.replaceState({}, document.title, this.root + this.fragment);
226
225
  }
227
226
  }
228
- if (!this.options.silent) return this.loadUrl();
227
+ if (!options.silent) return this.loadUrl();
229
228
  }
230
229
  // Disable Backbone.history, perhaps temporarily. Not useful in a real app,
231
230
  // but possibly useful for unit testing Routers.
@@ -296,19 +295,15 @@ class History {
296
295
  onChange(callback) {
297
296
  this.route(/^(.*?)$/, callback);
298
297
  }
299
- // checks if the browser has pushstate support
300
- hasPushState() {
301
- if (!this.started) {
302
- throw new Error("only available after LocationBar.start()");
303
- }
304
- return this._hasPushState;
305
- }
306
298
  }
307
299
  const routeStripper = /^[#\/]|\s+$/g;
308
300
  const rootStripper = /^\/+|\/+$/g;
309
301
  const trailingSlash = /\/$/;
310
302
  const pathStripper = /#.*$/;
311
303
  class BrowserLocation {
304
+ /**
305
+ * @param {BrowserLocationOptions} options
306
+ */
312
307
  constructor(options = {}) {
313
308
  this.path = options.path || "";
314
309
  this.options = extend(
@@ -318,11 +313,7 @@ class BrowserLocation {
318
313
  },
319
314
  options
320
315
  );
321
- this.locationBar = new History();
322
- this.locationBar.onChange((path) => {
323
- this.handleURL(`/${path || ""}`);
324
- });
325
- this.locationBar.start(options);
316
+ this.history = new History();
326
317
  }
327
318
  /**
328
319
  * Get the current URL
@@ -337,7 +328,7 @@ class BrowserLocation {
337
328
  setURL(path, options = {}) {
338
329
  if (this.path !== path) {
339
330
  this.path = path;
340
- this.locationBar.update(path, extend({ trigger: true }, options));
331
+ this.history.update(path, extend({ trigger: true }, options));
341
332
  }
342
333
  }
343
334
  /**
@@ -347,23 +338,24 @@ class BrowserLocation {
347
338
  replaceURL(path, options = {}) {
348
339
  if (this.path !== path) {
349
340
  this.path = path;
350
- this.locationBar.update(path, extend({ trigger: true, replace: true }, options));
341
+ this.history.update(path, extend({ trigger: true, replace: true }, options));
351
342
  }
352
343
  }
353
344
  /**
354
345
  * Setup a URL change handler
355
- * @param {Function} callback
346
+ * @param {(url: string) => void} callback
356
347
  */
357
348
  onChange(callback) {
358
- this.changeCallback = callback;
349
+ this.callback = callback;
359
350
  }
360
351
  /**
361
352
  * Given a path, generate a URL appending root
362
353
  * if pushState is used and # if hash state is used
363
354
  */
364
355
  formatURL(path) {
365
- if (this.locationBar.hasPushState()) {
366
- let rootURL = this.options.root;
356
+ const { root, pushState } = this.options;
357
+ if (pushState) {
358
+ let rootURL = root;
367
359
  if (path !== "") {
368
360
  rootURL = rootURL.replace(/\/$/, "");
369
361
  }
@@ -384,8 +376,9 @@ class BrowserLocation {
384
376
  * - this method is public so that we could dispatch URLs without root in router
385
377
  */
386
378
  removeRoot(url) {
387
- if (this.options.pushState && this.options.root && this.options.root !== "/") {
388
- return url.replace(this.options.root, "");
379
+ const { root, pushState } = this.options;
380
+ if (pushState && root && root !== "/") {
381
+ return url.replace(root, "");
389
382
  } else {
390
383
  return url;
391
384
  }
@@ -394,7 +387,7 @@ class BrowserLocation {
394
387
  * Stop listening to URL changes and link clicks
395
388
  */
396
389
  destroy() {
397
- this.locationBar.stop();
390
+ this.history.stop();
398
391
  }
399
392
  /**
400
393
  initially, the changeCallback won't be defined yet, but that's good
@@ -407,14 +400,21 @@ class BrowserLocation {
407
400
  */
408
401
  handleURL(url) {
409
402
  this.path = url;
410
- if (this.changeCallback) {
411
- this.changeCallback(url);
403
+ if (this.callback) {
404
+ this.callback(url);
412
405
  }
413
406
  }
407
+ start(path) {
408
+ this.path = path;
409
+ this.history.onChange((path2) => {
410
+ this.handleURL(`/${path2 || ""}`);
411
+ });
412
+ this.history.start(this.options);
413
+ }
414
414
  }
415
415
  class MemoryLocation {
416
- constructor({ path }) {
417
- this.path = path || "";
416
+ constructor() {
417
+ this.path = "";
418
418
  }
419
419
  getURL() {
420
420
  return this.path;
@@ -431,13 +431,13 @@ class MemoryLocation {
431
431
  }
432
432
  }
433
433
  onChange(callback) {
434
- this.changeCallback = callback;
434
+ this.callback = callback;
435
435
  }
436
- handleURL(url, options = {}) {
436
+ handleURL(url, options) {
437
437
  this.path = url;
438
- options = extend({ trigger: true }, options);
439
- if (this.changeCallback && options.trigger) {
440
- this.changeCallback(url);
438
+ const shouldTrigger = (options == null ? void 0 : options.trigger) !== false;
439
+ if (this.callback && shouldTrigger) {
440
+ this.callback(url);
441
441
  }
442
442
  }
443
443
  removeRoot(url) {
@@ -446,6 +446,9 @@ class MemoryLocation {
446
446
  formatURL(url) {
447
447
  return url;
448
448
  }
449
+ start(path) {
450
+ this.path = path;
451
+ }
449
452
  }
450
453
  const TRANSITION_REDIRECTED = "TransitionRedirected";
451
454
  const TRANSITION_CANCELLED = "TransitionCancelled";
@@ -693,6 +696,20 @@ function patternCompiler(pattern) {
693
696
  paramNames
694
697
  };
695
698
  }
699
+ function createLocation(options) {
700
+ const location = options.location;
701
+ if (typeof location !== "string") {
702
+ return location;
703
+ }
704
+ if (location === "browser") {
705
+ const { pushState, root } = options;
706
+ return new BrowserLocation({ pushState, root });
707
+ } else if (location === "memory") {
708
+ return new MemoryLocation();
709
+ } else {
710
+ throw new Error("Location can be `browser`, `memory` or a custom implementation");
711
+ }
712
+ }
696
713
  let Router$1 = class Router {
697
714
  /**
698
715
  * @param {RouterOptions} [options]
@@ -715,10 +732,13 @@ let Router$1 = class Router {
715
732
  if (options.routes) {
716
733
  this.map(options.routes);
717
734
  }
735
+ this.location = createLocation(this.options);
718
736
  }
719
737
  /**
720
738
  * Add a middleware
721
- * @param {Function} middleware
739
+ * @param {((transition: Transition) => void) | RouterMiddleware} middleware
740
+ * @param {object} [options]
741
+ * @param {number} [options.at] position to insert the middleware
722
742
  * @return {Router}
723
743
  * @api public
724
744
  */
@@ -803,7 +823,8 @@ let Router$1 = class Router {
803
823
  * @api public
804
824
  */
805
825
  listen(path) {
806
- const location = this.location = this.createLocation(path || "");
826
+ const location = this.location;
827
+ location.start(path);
807
828
  location.onChange((url) => {
808
829
  const previousUrl = this.state.path;
809
830
  this.dispatch(url).catch((err) => {
@@ -853,7 +874,6 @@ let Router$1 = class Router {
853
874
  * @api public
854
875
  */
855
876
  generate(name, params, query) {
856
- invariant(this.location, "call .listen() before using .generate()");
857
877
  let matcher;
858
878
  query = query || {};
859
879
  this.matchers.forEach((m) => {
@@ -1004,28 +1024,6 @@ let Router$1 = class Router {
1004
1024
  this.state.activeTransition = t;
1005
1025
  return t;
1006
1026
  }
1007
- /**
1008
- * Create the default location.
1009
- * This is used when no custom location is passed to
1010
- * the listen call.
1011
- * @param {LocationParam} path
1012
- * @return {Object} location
1013
- *
1014
- * @api private
1015
- */
1016
- createLocation(path) {
1017
- const location = this.options.location;
1018
- if (typeof location !== "string") {
1019
- return location;
1020
- }
1021
- if (location === "browser") {
1022
- return new BrowserLocation(pick(this.options, ["pushState", "root"]));
1023
- } else if (location === "memory") {
1024
- return new MemoryLocation({ path });
1025
- } else {
1026
- throw new Error("Location can be `browser`, `memory` or a custom implementation");
1027
- }
1028
- }
1029
1027
  log(...args) {
1030
1028
  console.info(...args);
1031
1029
  }