wj-elements 0.7.6 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/dist/animations.js +28 -51
  2. package/dist/animations.js.map +1 -1
  3. package/dist/base-path.js +19 -31
  4. package/dist/base-path.js.map +1 -1
  5. package/dist/custom-elements.json +9053 -9048
  6. package/dist/dark.css +1 -302
  7. package/dist/date.js +16 -36
  8. package/dist/date.js.map +1 -1
  9. package/dist/element-utils.js +20 -81
  10. package/dist/element-utils.js.map +1 -1
  11. package/dist/event.js +49 -165
  12. package/dist/event.js.map +1 -1
  13. package/dist/form-associated-element-BjeJn7j8.js +101 -0
  14. package/dist/{form-associated-element-DEQ4y-jn.js.map → form-associated-element-BjeJn7j8.js.map} +1 -1
  15. package/dist/icon-DmsqtDpL.js +102 -0
  16. package/dist/{icon-CReYMzAK.js.map → icon-DmsqtDpL.js.map} +1 -1
  17. package/dist/light.css +1 -731
  18. package/dist/localize.js +36 -111
  19. package/dist/localize.js.map +1 -1
  20. package/dist/packages/wje-accordion-item/accordion-item.element.d.ts +3 -2
  21. package/dist/packages/wje-img/img.element.d.ts +4 -4
  22. package/dist/permissions.js +14 -41
  23. package/dist/permissions.js.map +1 -1
  24. package/dist/popup.element-CbkhthPP.js +806 -0
  25. package/dist/{popup.element-CwXvVFK7.js.map → popup.element-CbkhthPP.js.map} +1 -1
  26. package/dist/router-links-CNsJ-elb.js +105 -0
  27. package/dist/{router-links-wjqCnncc.js.map → router-links-CNsJ-elb.js.map} +1 -1
  28. package/dist/skeleton.css +1 -197
  29. package/dist/styles.css +1 -866
  30. package/dist/universal-service.js +48 -109
  31. package/dist/universal-service.js.map +1 -1
  32. package/dist/utils.js +11 -18
  33. package/dist/utils.js.map +1 -1
  34. package/dist/web-types.json +698 -698
  35. package/dist/wje-accordion-item.js +33 -106
  36. package/dist/wje-accordion-item.js.map +1 -1
  37. package/dist/wje-accordion.js +19 -84
  38. package/dist/wje-accordion.js.map +1 -1
  39. package/dist/wje-animation.js +37 -4258
  40. package/dist/wje-animation.js.map +1 -1
  41. package/dist/wje-aside.js +9 -34
  42. package/dist/wje-aside.js.map +1 -1
  43. package/dist/wje-avatar.js +36 -126
  44. package/dist/wje-avatar.js.map +1 -1
  45. package/dist/wje-badge.js +10 -52
  46. package/dist/wje-badge.js.map +1 -1
  47. package/dist/wje-breadcrumb.js +205 -668
  48. package/dist/wje-breadcrumb.js.map +1 -1
  49. package/dist/wje-breadcrumbs.js +177 -633
  50. package/dist/wje-breadcrumbs.js.map +1 -1
  51. package/dist/wje-button-group.js +48 -153
  52. package/dist/wje-button-group.js.map +1 -1
  53. package/dist/wje-button.js +92 -413
  54. package/dist/wje-button.js.map +1 -1
  55. package/dist/wje-card-content.js +7 -30
  56. package/dist/wje-card-content.js.map +1 -1
  57. package/dist/wje-card-controls.js +7 -30
  58. package/dist/wje-card-controls.js.map +1 -1
  59. package/dist/wje-card-header.js +7 -30
  60. package/dist/wje-card-header.js.map +1 -1
  61. package/dist/wje-card-subtitle.js +7 -34
  62. package/dist/wje-card-subtitle.js.map +1 -1
  63. package/dist/wje-card-title.js +7 -34
  64. package/dist/wje-card-title.js.map +1 -1
  65. package/dist/wje-card.js +15 -71
  66. package/dist/wje-card.js.map +1 -1
  67. package/dist/wje-carousel-item.js +12 -56
  68. package/dist/wje-carousel-item.js.map +1 -1
  69. package/dist/wje-carousel.js +154 -509
  70. package/dist/wje-carousel.js.map +1 -1
  71. package/dist/wje-checkbox.js +50 -227
  72. package/dist/wje-checkbox.js.map +1 -1
  73. package/dist/wje-chip.js +43 -160
  74. package/dist/wje-chip.js.map +1 -1
  75. package/dist/wje-col.js +7 -20
  76. package/dist/wje-col.js.map +1 -1
  77. package/dist/wje-color-picker.js +445 -1464
  78. package/dist/wje-color-picker.js.map +1 -1
  79. package/dist/wje-container.js +9 -35
  80. package/dist/wje-container.js.map +1 -1
  81. package/dist/wje-copy-button.js +64 -204
  82. package/dist/wje-copy-button.js.map +1 -1
  83. package/dist/wje-dialog.js +85 -553
  84. package/dist/wje-dialog.js.map +1 -1
  85. package/dist/wje-divider.js +7 -34
  86. package/dist/wje-divider.js.map +1 -1
  87. package/dist/wje-dropdown.js +78 -305
  88. package/dist/wje-dropdown.js.map +1 -1
  89. package/dist/wje-element.js +191 -700
  90. package/dist/wje-element.js.map +1 -1
  91. package/dist/wje-file-upload-item.js +51 -156
  92. package/dist/wje-file-upload-item.js.map +1 -1
  93. package/dist/wje-file-upload.js +181 -619
  94. package/dist/wje-file-upload.js.map +1 -1
  95. package/dist/wje-footer.js +7 -31
  96. package/dist/wje-footer.js.map +1 -1
  97. package/dist/wje-form.js +7 -32
  98. package/dist/wje-form.js.map +1 -1
  99. package/dist/wje-format-digital.js +26 -118
  100. package/dist/wje-format-digital.js.map +1 -1
  101. package/dist/wje-grid.js +7 -33
  102. package/dist/wje-grid.js.map +1 -1
  103. package/dist/wje-header.js +9 -35
  104. package/dist/wje-header.js.map +1 -1
  105. package/dist/wje-icon-library.js +12 -18
  106. package/dist/wje-icon-library.js.map +1 -1
  107. package/dist/wje-icon-picker.js +65 -320
  108. package/dist/wje-icon-picker.js.map +1 -1
  109. package/dist/wje-icon.js +1 -1
  110. package/dist/wje-img-comparer.js +37 -114
  111. package/dist/wje-img-comparer.js.map +1 -1
  112. package/dist/wje-img.js +50 -197
  113. package/dist/wje-img.js.map +1 -1
  114. package/dist/wje-infinite-scroll.js +94 -346
  115. package/dist/wje-infinite-scroll.js.map +1 -1
  116. package/dist/wje-input-file.js +23 -84
  117. package/dist/wje-input-file.js.map +1 -1
  118. package/dist/wje-input.js +78 -392
  119. package/dist/wje-input.js.map +1 -1
  120. package/dist/wje-item.js +11 -64
  121. package/dist/wje-item.js.map +1 -1
  122. package/dist/wje-kanban.js +124 -401
  123. package/dist/wje-kanban.js.map +1 -1
  124. package/dist/wje-label.js +9 -32
  125. package/dist/wje-label.js.map +1 -1
  126. package/dist/wje-level-indicator.js +38 -157
  127. package/dist/wje-level-indicator.js.map +1 -1
  128. package/dist/wje-list.js +10 -40
  129. package/dist/wje-list.js.map +1 -1
  130. package/dist/wje-main.js +7 -31
  131. package/dist/wje-main.js.map +1 -1
  132. package/dist/wje-masonry.js +66 -211
  133. package/dist/wje-masonry.js.map +1 -1
  134. package/dist/wje-master.js +45 -161
  135. package/dist/wje-master.js.map +1 -1
  136. package/dist/wje-menu-button.js +10 -38
  137. package/dist/wje-menu-button.js.map +1 -1
  138. package/dist/wje-menu-item.js +127 -577
  139. package/dist/wje-menu-item.js.map +1 -1
  140. package/dist/wje-menu-label.js +9 -35
  141. package/dist/wje-menu-label.js.map +1 -1
  142. package/dist/wje-menu.js +14 -49
  143. package/dist/wje-menu.js.map +1 -1
  144. package/dist/wje-option.js +48 -279
  145. package/dist/wje-option.js.map +1 -1
  146. package/dist/wje-options.js +130 -384
  147. package/dist/wje-options.js.map +1 -1
  148. package/dist/wje-orgchart-group.js +16 -52
  149. package/dist/wje-orgchart-group.js.map +1 -1
  150. package/dist/wje-orgchart-item.js +24 -93
  151. package/dist/wje-orgchart-item.js.map +1 -1
  152. package/dist/wje-orgchart.js +18 -68
  153. package/dist/wje-orgchart.js.map +1 -1
  154. package/dist/wje-pagination.js +113 -397
  155. package/dist/wje-pagination.js.map +1 -1
  156. package/dist/wje-popup.js +3 -3
  157. package/dist/wje-popup.js.map +1 -1
  158. package/dist/wje-progress-bar.js +53 -205
  159. package/dist/wje-progress-bar.js.map +1 -1
  160. package/dist/wje-qr-code.js +398 -2980
  161. package/dist/wje-qr-code.js.map +1 -1
  162. package/dist/wje-radio-group.js +52 -190
  163. package/dist/wje-radio-group.js.map +1 -1
  164. package/dist/wje-radio.js +24 -118
  165. package/dist/wje-radio.js.map +1 -1
  166. package/dist/wje-rate.js +62 -266
  167. package/dist/wje-rate.js.map +1 -1
  168. package/dist/wje-relative-time.js +24 -99
  169. package/dist/wje-relative-time.js.map +1 -1
  170. package/dist/wje-reorder-dropzone.js +9 -31
  171. package/dist/wje-reorder-dropzone.js.map +1 -1
  172. package/dist/wje-reorder-handle.js +67 -204
  173. package/dist/wje-reorder-handle.js.map +1 -1
  174. package/dist/wje-reorder-item.js +14 -44
  175. package/dist/wje-reorder-item.js.map +1 -1
  176. package/dist/wje-reorder.js +61 -246
  177. package/dist/wje-reorder.js.map +1 -1
  178. package/dist/wje-route.js +6 -24
  179. package/dist/wje-route.js.map +1 -1
  180. package/dist/wje-router-link.js +11 -39
  181. package/dist/wje-router-link.js.map +1 -1
  182. package/dist/wje-router-outlet.js +76 -172
  183. package/dist/wje-router-outlet.js.map +1 -1
  184. package/dist/wje-routerx.js +537 -1331
  185. package/dist/wje-routerx.js.map +1 -1
  186. package/dist/wje-row.js +9 -31
  187. package/dist/wje-row.js.map +1 -1
  188. package/dist/wje-select.js +326 -1152
  189. package/dist/wje-select.js.map +1 -1
  190. package/dist/wje-slider.js +44 -225
  191. package/dist/wje-slider.js.map +1 -1
  192. package/dist/wje-sliding-container.js +295 -1319
  193. package/dist/wje-sliding-container.js.map +1 -1
  194. package/dist/wje-split-view.js +35 -121
  195. package/dist/wje-split-view.js.map +1 -1
  196. package/dist/wje-status.js +14 -45
  197. package/dist/wje-status.js.map +1 -1
  198. package/dist/wje-step.js +9 -32
  199. package/dist/wje-step.js.map +1 -1
  200. package/dist/wje-stepper.js +109 -357
  201. package/dist/wje-stepper.js.map +1 -1
  202. package/dist/wje-store.js +67 -360
  203. package/dist/wje-store.js.map +1 -1
  204. package/dist/wje-tab-group.js +85 -314
  205. package/dist/wje-tab-group.js.map +1 -1
  206. package/dist/wje-tab-panel.js +7 -28
  207. package/dist/wje-tab-panel.js.map +1 -1
  208. package/dist/wje-tab.js +21 -198
  209. package/dist/wje-tab.js.map +1 -1
  210. package/dist/wje-textarea.js +64 -264
  211. package/dist/wje-textarea.js.map +1 -1
  212. package/dist/wje-thumbnail.js +10 -51
  213. package/dist/wje-thumbnail.js.map +1 -1
  214. package/dist/wje-toast.js +127 -632
  215. package/dist/wje-toast.js.map +1 -1
  216. package/dist/wje-toggle.js +52 -177
  217. package/dist/wje-toggle.js.map +1 -1
  218. package/dist/wje-toolbar-action.js +128 -456
  219. package/dist/wje-toolbar-action.js.map +1 -1
  220. package/dist/wje-toolbar.js +75 -270
  221. package/dist/wje-toolbar.js.map +1 -1
  222. package/dist/wje-tooltip.js +50 -161
  223. package/dist/wje-tooltip.js.map +1 -1
  224. package/dist/wje-tree-item.js +70 -301
  225. package/dist/wje-tree-item.js.map +1 -1
  226. package/dist/wje-tree.js +145 -489
  227. package/dist/wje-tree.js.map +1 -1
  228. package/dist/wje-visually-hidden.js +7 -34
  229. package/dist/wje-visually-hidden.js.map +1 -1
  230. package/package.json +4 -2
  231. package/dist/form-associated-element-DEQ4y-jn.js +0 -245
  232. package/dist/icon-CReYMzAK.js +0 -245
  233. package/dist/popup.element-CwXvVFK7.js +0 -2133
  234. package/dist/router-links-wjqCnncc.js +0 -156
@@ -1,724 +1,268 @@
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 WJElement from "./wje-element.js";
5
- const styles = "/*\n[ WJ Breadcrumbs ]\n*/\n\n:host {\n --wje-breadcrumbs-breakpoint-sm: 576px;\n --wje-breadcrumbs-breakpoint-md: 768px;\n --wje-breadcrumbs-breakpoint-lg: 992px;\n --wje-breadcrumbs-breakpoint-xl: 1200px;\n --wje-breadcrumbs-breakpoint-2xl: 1450px;\n --wje-breadcrumbs-breakpoint-xxl: 1450px;\n\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n min-width: 0;\n overflow: hidden;\n}\n";
6
- const MANAGED_ITEM_ATTRIBUTE = "data-wje-breadcrumbs-item";
7
- const MOBILE_COLLAPSED_VARIANTS = /* @__PURE__ */ new Set(["text", "back", "parent-title", "menu-title", "sheet"]);
8
- const _Breadcrumbs = class _Breadcrumbs extends WJElement {
9
- /**
10
- * Breadcrumbs constructor method.
11
- * @class
12
- */
4
+ import e from "./wje-element.js";
5
+ const t = "data-wje-breadcrumbs-item", i = /* @__PURE__ */ new Set(["text", "back", "parent-title", "menu-title", "sheet"]);
6
+ const _r = class _r extends e {
13
7
  constructor() {
14
8
  super();
15
- /**
16
- * Class name for the Breadcrumbs element.
17
- * @type {string}
18
- */
19
9
  __publicField(this, "className", "Breadcrumbs");
20
- this.last = false;
21
- this._isCollapsedByBreakpoint = null;
22
- this._items = [];
23
- this._itemRecords = [];
24
- this._hasItemsValue = false;
25
- this.handleManagedItemClick = (e) => this.dispatchManagedItemClick(e);
26
- }
27
- /**
28
- * Sets data-driven breadcrumb items.
29
- * @param {Array|string|null|undefined} value Breadcrumb items or a JSON string.
30
- */
31
- set items(value) {
32
- const records = this.normalizeItems(value);
33
- this._hasItemsValue = true;
34
- this._items = records.map((record) => record.item);
35
- this._itemRecords = records;
36
- this.syncItems(records);
37
- }
38
- /**
39
- * Gets data-driven breadcrumb items.
40
- * @returns {Array}
41
- */
10
+ this.last = false, this._isCollapsedByBreakpoint = null, this._items = [], this._itemRecords = [], this._hasItemsValue = false, this.handleManagedItemClick = (e2) => this.dispatchManagedItemClick(e2);
11
+ }
12
+ set items(e2) {
13
+ const t2 = this.normalizeItems(e2);
14
+ this._hasItemsValue = true, this._items = t2.map((e3) => e3.item), this._itemRecords = t2, this.syncItems(t2);
15
+ }
42
16
  get items() {
43
17
  return this._items;
44
18
  }
45
- /**
46
- * Set variant attribute for the Breadcrumbs element.
47
- * @param value
48
- */
49
- set variant(value) {
50
- this.setAttribute("variant", value);
51
- }
52
- /**
53
- * Get variant attribute for the Breadcrumbs element.
54
- * @returns {string}
55
- */
19
+ set variant(e2) {
20
+ this.setAttribute("variant", e2);
21
+ }
56
22
  get variant() {
57
23
  return this.getAttribute("variant") || "button";
58
24
  }
59
- /**
60
- * Get the collapsed indicator variant.
61
- * @param {string} value Collapsed indicator variant.
62
- */
63
- set collapsedVariant(value) {
64
- if (value) this.setAttribute("collapsed-variant", value);
65
- else this.removeAttribute("collapsed-variant");
66
- }
67
- /**
68
- * Get the collapsed indicator variant.
69
- * @returns {string}
70
- */
25
+ set collapsedVariant(e2) {
26
+ e2 ? this.setAttribute("collapsed-variant", e2) : this.removeAttribute("collapsed-variant");
27
+ }
71
28
  get collapsedVariant() {
72
29
  return this.getAttribute("collapsed-variant") || this.variant;
73
30
  }
74
- /**
75
- * Gets the collapsed indicator variant as a normalized token.
76
- * @returns {string}
77
- */
78
31
  get normalizedCollapsedVariant() {
79
32
  return String(this.collapsedVariant || "").trim().toLowerCase();
80
33
  }
81
- /**
82
- * Sets the collapse breakpoint token or value.
83
- * @param {string} value Breakpoint token or CSS size.
84
- */
85
- set breakpoint(value) {
86
- if (value) this.setAttribute("breakpoint", value);
87
- else this.removeAttribute("breakpoint");
88
- }
89
- /**
90
- * Gets the collapse breakpoint token or value.
91
- * @returns {string}
92
- */
34
+ set breakpoint(e2) {
35
+ e2 ? this.setAttribute("breakpoint", e2) : this.removeAttribute("breakpoint");
36
+ }
93
37
  get breakpoint() {
94
38
  return this.getAttribute("breakpoint") || "";
95
39
  }
96
- /**
97
- * Sets the collapse behavior used below the configured breakpoint.
98
- * @param {string} value Collapse behavior.
99
- */
100
- set breakpointCollapse(value) {
101
- if (value) this.setAttribute("breakpoint-collapse", value);
102
- else this.removeAttribute("breakpoint-collapse");
103
- }
104
- /**
105
- * Gets the collapse behavior used below the configured breakpoint.
106
- * @returns {string}
107
- */
40
+ set breakpointCollapse(e2) {
41
+ e2 ? this.setAttribute("breakpoint-collapse", e2) : this.removeAttribute("breakpoint-collapse");
42
+ }
108
43
  get breakpointCollapse() {
109
44
  return (this.getAttribute("breakpoint-collapse") || "items").toLowerCase();
110
45
  }
111
- /**
112
- * Sets the icon used by the default breakpoint menu trigger.
113
- * @param {string} value Icon name.
114
- */
115
- set breakpointCollapseIcon(value) {
116
- if (value) this.setAttribute("breakpoint-collapse-icon", value);
117
- else this.removeAttribute("breakpoint-collapse-icon");
118
- }
119
- /**
120
- * Gets the icon used by the default breakpoint menu trigger.
121
- * @returns {string}
122
- */
46
+ set breakpointCollapseIcon(e2) {
47
+ e2 ? this.setAttribute("breakpoint-collapse-icon", e2) : this.removeAttribute("breakpoint-collapse-icon");
48
+ }
123
49
  get breakpointCollapseIcon() {
124
50
  return this.getAttribute("breakpoint-collapse-icon") || "";
125
51
  }
126
- /**
127
- * Get items before collapse attribute.
128
- * @param {string} value
129
- */
130
- set maxItems(value) {
131
- this.setAttribute("max-items", value || 0);
132
- }
133
- /**
134
- * Get items before collapse attribute.
135
- * @returns {number}
136
- */
52
+ set maxItems(e2) {
53
+ this.setAttribute("max-items", e2 || 0);
54
+ }
137
55
  get maxItems() {
138
56
  return +this.getAttribute("max-items");
139
57
  }
140
- /**
141
- * Get items before collapse attribute.
142
- * @param value
143
- */
144
- set itemsBeforeCollapse(value) {
145
- this.setAttribute("items-before-collapse", value || 1);
146
- }
147
- /**
148
- * Get items before collapse attribute.
149
- * @returns {number}
150
- */
58
+ set itemsBeforeCollapse(e2) {
59
+ this.setAttribute("items-before-collapse", e2 || 1);
60
+ }
151
61
  get itemsBeforeCollapse() {
152
62
  return +this.getAttribute("items-before-collapse") || 1;
153
63
  }
154
- /**
155
- * Get items after collapse attribute.
156
- * @param value
157
- */
158
- set itemsAfterCollapse(value) {
159
- this.setAttribute("items-after-collapse", value || 1);
160
- }
161
- /**
162
- * Get items after collapse attribute.
163
- * @returns {number}
164
- */
64
+ set itemsAfterCollapse(e2) {
65
+ this.setAttribute("items-after-collapse", e2 || 1);
66
+ }
165
67
  get itemsAfterCollapse() {
166
- if (this.hasAttribute("items-after-collapse")) {
167
- return +this.getAttribute("items-after-collapse") || 1;
168
- }
169
- const derivedItemsAfterCollapse = this.maxItems - this.itemsBeforeCollapse - 1;
170
- return derivedItemsAfterCollapse > 0 ? derivedItemsAfterCollapse : 1;
171
- }
172
- /**
173
- * Get CSS stylesheet for the Breadcrumbs element.
174
- * @static
175
- * @returns {object} styles - The CSS styles
176
- */
68
+ if (this.hasAttribute("items-after-collapse")) return +this.getAttribute("items-after-collapse") || 1;
69
+ const e2 = this.maxItems - this.itemsBeforeCollapse - 1;
70
+ return e2 > 0 ? e2 : 1;
71
+ }
177
72
  static get cssStyleSheet() {
178
- return styles;
73
+ return ":host{--wje-breadcrumbs-breakpoint-sm: 576px;--wje-breadcrumbs-breakpoint-md: 768px;--wje-breadcrumbs-breakpoint-lg: 992px;--wje-breadcrumbs-breakpoint-xl: 1200px;--wje-breadcrumbs-breakpoint-2xl: 1450px;--wje-breadcrumbs-breakpoint-xxl: 1450px;display:flex;flex-wrap:nowrap;align-items:center;min-width:0;overflow:hidden}";
179
74
  }
180
- /**
181
- * Get observed attributes for the Breadcrumb element.
182
- * @static
183
- * @returns {Array<string>} - The observed attributes array for the Breadcrumb element.
184
- */
185
75
  static get observedAttributes() {
186
- return [
187
- "breakpoint",
188
- "breakpoint-collapse",
189
- "max-items",
190
- "items-before-collapse",
191
- "items-after-collapse",
192
- "collapsed-variant",
193
- "breakpoint-collapse-icon",
194
- "variant",
195
- "aria-label",
196
- "aria-labelledby"
197
- ];
198
- }
199
- /**
200
- * Setup attributes for the Breadcrumbs element.
201
- */
76
+ return ["breakpoint", "breakpoint-collapse", "max-items", "items-before-collapse", "items-after-collapse", "collapsed-variant", "breakpoint-collapse-icon", "variant", "aria-label", "aria-labelledby"];
77
+ }
202
78
  setupAttributes() {
203
- this.isShadowRoot = "open";
204
- this.syncAria();
205
- this.upgradeProperty("items");
206
- if (!this._hasItemsValue && this.hasAttribute("items")) {
207
- this.items = this.getAttribute("items");
208
- }
79
+ this.isShadowRoot = "open", this.syncAria(), this.upgradeProperty("items"), !this._hasItemsValue && this.hasAttribute("items") && (this.items = this.getAttribute("items"));
209
80
  }
210
- /**
211
- * Handles attribute changes that affect light-DOM breadcrumb indicators.
212
- * @param {string} name Updated attribute.
213
- * @param {string|null} oldValue Previous value.
214
- * @param {string|null} newValue Next value.
215
- */
216
- attributeChangedCallback(name, oldValue, newValue) {
81
+ attributeChangedCallback(e2, t2, i2) {
217
82
  var _a;
218
- if (oldValue === newValue) return;
219
- (_a = super.attributeChangedCallback) == null ? void 0 : _a.call(this, name, oldValue, newValue);
220
- if (name === "aria-label" || name === "aria-labelledby") {
221
- this.syncAria();
222
- }
223
- if (name === "collapsed-variant" || name === "variant" || name === "breakpoint-collapse" || name === "breakpoint-collapse-icon") {
224
- this.updateCollapse();
225
- this.refreshCollapsedIndicators();
226
- }
83
+ t2 !== i2 && ((_a = super.attributeChangedCallback) == null ? void 0 : _a.call(this, e2, t2, i2), "aria-label" !== e2 && "aria-labelledby" !== e2 || this.syncAria(), "collapsed-variant" !== e2 && "variant" !== e2 && "breakpoint-collapse" !== e2 && "breakpoint-collapse-icon" !== e2 || (this.updateCollapse(), this.refreshCollapsedIndicators()));
227
84
  }
228
- /**
229
- * Syncs host navigation semantics while preserving user-provided names.
230
- */
231
85
  syncAria() {
232
86
  this.setAriaState({ role: "navigation" });
233
- const label = this.getAttribute("aria-label");
234
- const hasLabelledBy = this.hasAttribute("aria-labelledby");
235
- if (!label && !hasLabelledBy) {
236
- this.setAriaState({ label: "Breadcrumb" });
237
- } else if (hasLabelledBy && label === "Breadcrumb") {
238
- this.removeAttribute("aria-label");
239
- }
87
+ const e2 = this.getAttribute("aria-label"), t2 = this.hasAttribute("aria-labelledby");
88
+ e2 || t2 ? t2 && "Breadcrumb" === e2 && this.removeAttribute("aria-label") : this.setAriaState({ label: "Breadcrumb" });
240
89
  }
241
- /**
242
- * Draw method for the Breadcrumbs element.
243
- * @returns {object} fragment - The document fragment
244
- */
245
90
  draw() {
246
- let fragment = document.createDocumentFragment();
247
- let element = document.createElement("slot");
248
- fragment.appendChild(element);
249
- this.defaultSlot = element;
250
- return fragment;
251
- }
252
- /**
253
- * Updates the breadcrumb elements after they are drawn on the page.
254
- * It manages attributes on breadcrumb items and handles the logic for collapsing breadcrumbs
255
- * if the total exceeds the specified maximum items.
256
- * @returns {void} This method does not return a value.
257
- */
91
+ let e2 = document.createDocumentFragment(), t2 = document.createElement("slot");
92
+ return e2.appendChild(t2), this.defaultSlot = t2, e2;
93
+ }
258
94
  afterDraw() {
259
95
  var _a;
260
- this.onSlotChange = () => this.updateCollapse();
261
- (_a = this.defaultSlot) == null ? void 0 : _a.addEventListener("slotchange", this.onSlotChange);
262
- this.addEventListener("click", this.handleManagedItemClick);
263
- this.handleResize = () => this.handleBreakpointResize();
264
- if (this.getBreakpointWidth()) {
265
- window.addEventListener("resize", this.handleResize);
266
- }
267
- if (this._itemRecords.length > 0 && this.getManagedBreadcrumbs().length === 0) {
268
- this.syncItems(this._itemRecords);
269
- }
270
- this.updateCollapse();
96
+ this.onSlotChange = () => this.updateCollapse(), (_a = this.defaultSlot) == null ? void 0 : _a.addEventListener("slotchange", this.onSlotChange), this.addEventListener("click", this.handleManagedItemClick), this.handleResize = () => this.handleBreakpointResize(), this.getBreakpointWidth() && window.addEventListener("resize", this.handleResize), this._itemRecords.length > 0 && 0 === this.getManagedBreadcrumbs().length && this.syncItems(this._itemRecords), this.updateCollapse();
271
97
  }
272
- /**
273
- * Removes listeners after disconnect.
274
- */
275
98
  afterDisconnect() {
276
99
  var _a;
277
- (_a = this.defaultSlot) == null ? void 0 : _a.removeEventListener("slotchange", this.onSlotChange);
278
- this.removeEventListener("click", this.handleManagedItemClick);
279
- window.removeEventListener("resize", this.handleResize);
280
- this._isCollapsedByBreakpoint = null;
281
- }
282
- /**
283
- * Upgrades properties set before the custom element definition was loaded.
284
- * @param {string} property Property name.
285
- */
286
- upgradeProperty(property) {
287
- if (!Object.prototype.hasOwnProperty.call(this, property)) return;
288
- const value = this[property];
289
- delete this[property];
290
- this[property] = value;
291
- }
292
- /**
293
- * Normalizes incoming item data for keyed DOM diffing.
294
- * @param {Array|string|null|undefined} value Breadcrumb item data.
295
- * @returns {Array<object>}
296
- */
297
- normalizeItems(value) {
298
- let items = value;
299
- if (typeof items === "string") {
300
- try {
301
- items = JSON.parse(items);
302
- } catch (e) {
303
- console.warn("Invalid JSON passed to wje-breadcrumbs.items", e);
304
- items = [];
305
- }
306
- }
307
- if (items === null || items === void 0) return [];
308
- if (!Array.isArray(items)) {
309
- console.warn("wje-breadcrumbs.items expects an array.");
310
- return [];
100
+ (_a = this.defaultSlot) == null ? void 0 : _a.removeEventListener("slotchange", this.onSlotChange), this.removeEventListener("click", this.handleManagedItemClick), window.removeEventListener("resize", this.handleResize), this._isCollapsedByBreakpoint = null;
101
+ }
102
+ upgradeProperty(e2) {
103
+ if (!Object.prototype.hasOwnProperty.call(this, e2)) return;
104
+ const t2 = this[e2];
105
+ delete this[e2], this[e2] = t2;
106
+ }
107
+ normalizeItems(e2) {
108
+ let t2 = e2;
109
+ if ("string" == typeof t2) try {
110
+ t2 = JSON.parse(t2);
111
+ } catch (e3) {
112
+ console.warn("Invalid JSON passed to wje-breadcrumbs.items", e3), t2 = [];
311
113
  }
312
- const usedKeys = /* @__PURE__ */ new Set();
313
- return items.map((item, index) => this.normalizeItem(item, index, usedKeys));
314
- }
315
- /**
316
- * Normalizes a single item while preserving the original object for events.
317
- * @param {object|string|number} item Source value for a breadcrumb entry.
318
- * @param {number} index Position of the value in the current items array.
319
- * @param {Set<string>} usedKeys Keys that have already been assigned during this update.
320
- * @returns {object}
321
- */
322
- normalizeItem(item, index, usedKeys) {
323
- const isObject = item !== null && typeof item === "object";
324
- const source = isObject ? item : {
325
- id: index,
326
- label: item === null || item === void 0 ? "" : String(item)
327
- };
328
- return {
329
- item: source,
330
- key: this.getItemKey(source, index, usedKeys),
331
- index,
332
- label: source.label === null || source.label === void 0 ? "" : String(source.label),
333
- href: source.href === null || source.href === void 0 ? null : String(source.href),
334
- icon: source.icon === null || source.icon === void 0 || source.icon === "" ? null : String(source.icon),
335
- title: source.title === null || source.title === void 0 ? null : String(source.title),
336
- disabled: source.disabled === true || source.disabled === "" || source.disabled === "true" || source.disabled === 1 || source.disabled === "1"
337
- };
338
- }
339
- /**
340
- * Resolves a stable key for an item.
341
- * @param {object} item Normalized source object used to resolve the key.
342
- * @param {number} index Fallback position used when the item has no id.
343
- * @param {Set<string>} usedKeys Keys that have already been assigned during this update.
344
- * @returns {string}
345
- */
346
- getItemKey(item, index, usedKeys) {
347
- const baseKey = item.id === null || item.id === void 0 ? String(index) : String(item.id);
348
- let key = baseKey;
349
- let suffix = 1;
350
- while (usedKeys.has(key)) {
351
- key = `${baseKey}:${suffix}`;
352
- suffix += 1;
353
- }
354
- usedKeys.add(key);
355
- return key;
356
- }
357
- /**
358
- * Incrementally synchronizes data-driven items into light DOM breadcrumbs.
359
- * @param {Array<object>} records Normalized records for the next breadcrumb trail.
360
- */
361
- syncItems(records) {
362
- const managed = this.getManagedBreadcrumbs();
363
- const managedByKey = new Map(managed.map((breadcrumb) => [breadcrumb.__wjeBreadcrumbKey || breadcrumb.getAttribute(MANAGED_ITEM_ATTRIBUTE), breadcrumb]));
364
- const nextKeys = new Set(records.map((record) => record.key));
365
- managed.forEach((breadcrumb) => {
366
- const key = breadcrumb.__wjeBreadcrumbKey || breadcrumb.getAttribute(MANAGED_ITEM_ATTRIBUTE);
367
- if (!nextKeys.has(key)) {
368
- breadcrumb.remove();
369
- }
370
- });
371
- let referenceNode = this.firstChild;
372
- records.forEach((record, index) => {
373
- let breadcrumb = managedByKey.get(record.key);
374
- const signature = this.getItemStructureSignature(record);
375
- if (breadcrumb && breadcrumb.__wjeBreadcrumbSignature !== signature) {
376
- const previousBreadcrumb = breadcrumb;
377
- const replacement = this.createItemElement(record, index);
378
- breadcrumb.replaceWith(replacement);
379
- breadcrumb = replacement;
380
- if (referenceNode === previousBreadcrumb) referenceNode = breadcrumb;
381
- } else if (!breadcrumb) {
382
- breadcrumb = this.createItemElement(record, index);
383
- } else {
384
- this.updateItemElement(breadcrumb, record, index);
385
- }
386
- if (breadcrumb !== referenceNode) {
387
- this.insertBefore(breadcrumb, referenceNode);
388
- }
389
- referenceNode = breadcrumb.nextSibling;
114
+ if (null == t2) return [];
115
+ if (!Array.isArray(t2)) return console.warn("wje-breadcrumbs.items expects an array."), [];
116
+ const i2 = /* @__PURE__ */ new Set();
117
+ return t2.map((e3, t3) => this.normalizeItem(e3, t3, i2));
118
+ }
119
+ normalizeItem(e2, t2, i2) {
120
+ const r2 = null !== e2 && "object" == typeof e2 ? e2 : { id: t2, label: null == e2 ? "" : String(e2) };
121
+ return { item: r2, key: this.getItemKey(r2, t2, i2), index: t2, label: null === r2.label || void 0 === r2.label ? "" : String(r2.label), href: null === r2.href || void 0 === r2.href ? null : String(r2.href), icon: null === r2.icon || void 0 === r2.icon || "" === r2.icon ? null : String(r2.icon), title: null === r2.title || void 0 === r2.title ? null : String(r2.title), disabled: true === r2.disabled || "" === r2.disabled || "true" === r2.disabled || 1 === r2.disabled || "1" === r2.disabled };
122
+ }
123
+ getItemKey(e2, t2, i2) {
124
+ const r2 = null === e2.id || void 0 === e2.id ? String(t2) : String(e2.id);
125
+ let s = r2, a = 1;
126
+ for (; i2.has(s); ) s = `${r2}:${a}`, a += 1;
127
+ return i2.add(s), s;
128
+ }
129
+ syncItems(e2) {
130
+ const i2 = this.getManagedBreadcrumbs(), r2 = new Map(i2.map((e3) => [e3.__wjeBreadcrumbKey || e3.getAttribute(t), e3])), s = new Set(e2.map((e3) => e3.key));
131
+ i2.forEach((e3) => {
132
+ const i3 = e3.__wjeBreadcrumbKey || e3.getAttribute(t);
133
+ s.has(i3) || e3.remove();
390
134
  });
391
- this.updateCollapse();
392
- }
393
- /**
394
- * Creates a managed breadcrumb element.
395
- * @param {object} record Normalized data used to create the breadcrumb.
396
- * @param {number} index Position assigned to the created breadcrumb.
397
- * @returns {HTMLElement}
398
- */
399
- createItemElement(record, index) {
400
- const breadcrumb = document.createElement("wje-breadcrumb");
401
- this.updateItemElement(breadcrumb, record, index);
402
- return breadcrumb;
403
- }
404
- /**
405
- * Updates a managed breadcrumb element only where values changed.
406
- * @param {HTMLElement} breadcrumb Existing managed element to update.
407
- * @param {object} record Normalized data used for the next rendered state.
408
- * @param {number} index Position assigned to the managed breadcrumb.
409
- */
410
- updateItemElement(breadcrumb, record, index) {
411
- breadcrumb.__wjeBreadcrumbManaged = true;
412
- breadcrumb.__wjeBreadcrumbItem = record.item;
413
- breadcrumb.__wjeBreadcrumbIndex = index;
414
- breadcrumb.__wjeBreadcrumbKey = record.key;
415
- breadcrumb.__wjeBreadcrumbSignature = this.getItemStructureSignature(record);
416
- if (breadcrumb.getAttribute(MANAGED_ITEM_ATTRIBUTE) !== record.key) {
417
- breadcrumb.setAttribute(MANAGED_ITEM_ATTRIBUTE, record.key);
418
- }
419
- this.syncItemAttribute(breadcrumb, "href", record.href);
420
- this.syncItemAttribute(breadcrumb, "title", record.title);
421
- this.syncItemAttribute(breadcrumb, "aria-label", record.label || null);
422
- this.syncBooleanItemAttribute(breadcrumb, "disabled", record.disabled);
423
- this.syncItemContent(breadcrumb, record);
424
- }
425
- /**
426
- * Synchronizes an attribute when its value changed.
427
- * @param {HTMLElement} element Element receiving the synchronized attribute.
428
- * @param {string} name Attribute to add, update, or remove.
429
- * @param {string|null|undefined} value Next serialized value for the attribute.
430
- */
431
- syncItemAttribute(element, name, value) {
432
- if (value === null || value === void 0 || value === false) {
433
- if (element.hasAttribute(name)) element.removeAttribute(name);
434
- return;
435
- }
436
- const normalizedValue = String(value);
437
- if (element.getAttribute(name) !== normalizedValue) {
438
- element.setAttribute(name, normalizedValue);
439
- }
440
- }
441
- /**
442
- * Synchronizes a boolean attribute.
443
- * @param {HTMLElement} element Element receiving the boolean attribute.
444
- * @param {string} name Boolean attribute to toggle.
445
- * @param {boolean} isEnabled Whether the attribute should be present.
446
- */
447
- syncBooleanItemAttribute(element, name, isEnabled) {
448
- if (isEnabled && !element.hasAttribute(name)) {
449
- element.setAttribute(name, "");
450
- }
451
- if (!isEnabled && element.hasAttribute(name)) {
452
- element.removeAttribute(name);
453
- }
454
- }
455
- /**
456
- * Synchronizes slotted icon and text nodes for a managed breadcrumb.
457
- * @param {HTMLElement} breadcrumb Breadcrumb element.
458
- * @param {object} record Normalized item record.
459
- */
460
- syncItemContent(breadcrumb, record) {
461
- let icon = breadcrumb.__wjeBreadcrumbIcon;
462
- if (record.icon) {
463
- if (!icon || icon.parentElement !== breadcrumb) {
464
- icon = document.createElement("wje-icon");
465
- icon.setAttribute("slot", "start");
466
- breadcrumb.insertBefore(icon, breadcrumb.firstChild);
467
- breadcrumb.__wjeBreadcrumbIcon = icon;
468
- }
469
- if (icon.getAttribute("name") !== record.icon) {
470
- icon.setAttribute("name", record.icon);
471
- }
472
- } else if (icon) {
473
- icon.remove();
474
- breadcrumb.__wjeBreadcrumbIcon = null;
475
- }
476
- let labelNode = breadcrumb.__wjeBreadcrumbLabelNode;
477
- if (!labelNode || labelNode.parentNode !== breadcrumb) {
478
- labelNode = document.createTextNode("");
479
- breadcrumb.appendChild(labelNode);
480
- breadcrumb.__wjeBreadcrumbLabelNode = labelNode;
481
- }
482
- if (labelNode.textContent !== record.label) {
483
- labelNode.textContent = record.label;
484
- }
485
- }
486
- /**
487
- * Returns a small signature for structural changes that need item replacement.
488
- * @param {object} record Normalized item record.
489
- * @returns {string}
490
- */
491
- getItemStructureSignature(record) {
492
- return `icon:${record.icon ? "1" : "0"}`;
493
- }
494
- /**
495
- * Dispatches the data-driven item click event.
496
- * @param {MouseEvent} e Original click event.
497
- */
498
- dispatchManagedItemClick(e) {
135
+ let a = this.firstChild;
136
+ e2.forEach((e3, t2) => {
137
+ let i3 = r2.get(e3.key);
138
+ const s2 = this.getItemStructureSignature(e3);
139
+ if (i3 && i3.__wjeBreadcrumbSignature !== s2) {
140
+ const r3 = i3, s3 = this.createItemElement(e3, t2);
141
+ i3.replaceWith(s3), i3 = s3, a === r3 && (a = i3);
142
+ } else i3 ? this.updateItemElement(i3, e3, t2) : i3 = this.createItemElement(e3, t2);
143
+ i3 !== a && this.insertBefore(i3, a), a = i3.nextSibling;
144
+ }), this.updateCollapse();
145
+ }
146
+ createItemElement(e2, t2) {
147
+ const i2 = document.createElement("wje-breadcrumb");
148
+ return this.updateItemElement(i2, e2, t2), i2;
149
+ }
150
+ updateItemElement(e2, i2, r2) {
151
+ e2.__wjeBreadcrumbManaged = true, e2.__wjeBreadcrumbItem = i2.item, e2.__wjeBreadcrumbIndex = r2, e2.__wjeBreadcrumbKey = i2.key, e2.__wjeBreadcrumbSignature = this.getItemStructureSignature(i2), e2.getAttribute(t) !== i2.key && e2.setAttribute(t, i2.key), this.syncItemAttribute(e2, "href", i2.href), this.syncItemAttribute(e2, "title", i2.title), this.syncItemAttribute(e2, "aria-label", i2.label || null), this.syncBooleanItemAttribute(e2, "disabled", i2.disabled), this.syncItemContent(e2, i2);
152
+ }
153
+ syncItemAttribute(e2, t2, i2) {
154
+ if (null == i2 || false === i2) return void (e2.hasAttribute(t2) && e2.removeAttribute(t2));
155
+ const r2 = String(i2);
156
+ e2.getAttribute(t2) !== r2 && e2.setAttribute(t2, r2);
157
+ }
158
+ syncBooleanItemAttribute(e2, t2, i2) {
159
+ i2 && !e2.hasAttribute(t2) && e2.setAttribute(t2, ""), !i2 && e2.hasAttribute(t2) && e2.removeAttribute(t2);
160
+ }
161
+ syncItemContent(e2, t2) {
162
+ let i2 = e2.__wjeBreadcrumbIcon;
163
+ t2.icon ? (i2 && i2.parentElement === e2 || (i2 = document.createElement("wje-icon"), i2.setAttribute("slot", "start"), e2.insertBefore(i2, e2.firstChild), e2.__wjeBreadcrumbIcon = i2), i2.getAttribute("name") !== t2.icon && i2.setAttribute("name", t2.icon)) : i2 && (i2.remove(), e2.__wjeBreadcrumbIcon = null);
164
+ let r2 = e2.__wjeBreadcrumbLabelNode;
165
+ r2 && r2.parentNode === e2 || (r2 = document.createTextNode(""), e2.appendChild(r2), e2.__wjeBreadcrumbLabelNode = r2), r2.textContent !== t2.label && (r2.textContent = t2.label);
166
+ }
167
+ getItemStructureSignature(e2) {
168
+ return "icon:" + (e2.icon ? "1" : "0");
169
+ }
170
+ dispatchManagedItemClick(e2) {
499
171
  var _a;
500
- const breadcrumb = this.getManagedBreadcrumbFromEvent(e);
501
- if (!breadcrumb) return;
502
- const item = breadcrumb.__wjeBreadcrumbItem;
503
- if ((item == null ? void 0 : item.disabled) || breadcrumb.hasAttribute("disabled")) {
504
- e.preventDefault();
505
- e.stopPropagation();
506
- (_a = e.stopImmediatePropagation) == null ? void 0 : _a.call(e);
507
- return;
508
- }
509
- const itemClickEvent = new CustomEvent("wje-breadcrumbs:item-click", {
510
- detail: {
511
- item,
512
- index: breadcrumb.__wjeBreadcrumbIndex,
513
- originalEvent: e
514
- },
515
- bubbles: true,
516
- composed: true,
517
- cancelable: true
518
- });
519
- const shouldContinue = this.dispatchEvent(itemClickEvent);
520
- if (!shouldContinue) {
521
- e.preventDefault();
522
- }
523
- }
524
- /**
525
- * Finds the managed breadcrumb that originated an event.
526
- * @param {Event} e Event whose composed path should be inspected.
527
- * @returns {HTMLElement|null}
528
- */
529
- getManagedBreadcrumbFromEvent(e) {
530
- const path = typeof e.composedPath === "function" ? e.composedPath() : [];
531
- return path.find((node) => {
172
+ const t2 = this.getManagedBreadcrumbFromEvent(e2);
173
+ if (!t2) return;
174
+ const i2 = t2.__wjeBreadcrumbItem;
175
+ if ((i2 == null ? void 0 : i2.disabled) || t2.hasAttribute("disabled")) return e2.preventDefault(), e2.stopPropagation(), void ((_a = e2.stopImmediatePropagation) == null ? void 0 : _a.call(e2));
176
+ const r2 = new CustomEvent("wje-breadcrumbs:item-click", { detail: { item: i2, index: t2.__wjeBreadcrumbIndex, originalEvent: e2 }, bubbles: true, composed: true, cancelable: true });
177
+ this.dispatchEvent(r2) || e2.preventDefault();
178
+ }
179
+ getManagedBreadcrumbFromEvent(e2) {
180
+ return ("function" == typeof e2.composedPath ? e2.composedPath() : []).find((e3) => {
532
181
  var _a;
533
- return (node == null ? void 0 : node.nodeType) === Node.ELEMENT_NODE && ((_a = node.tagName) == null ? void 0 : _a.toLowerCase()) === "wje-breadcrumb" && node.parentElement === this && node.hasAttribute(MANAGED_ITEM_ATTRIBUTE);
182
+ return (e3 == null ? void 0 : e3.nodeType) === Node.ELEMENT_NODE && "wje-breadcrumb" === ((_a = e3.tagName) == null ? void 0 : _a.toLowerCase()) && e3.parentElement === this && e3.hasAttribute(t);
534
183
  }) || null;
535
184
  }
536
- /**
537
- * Reacts to viewport resize only when the breakpoint mode actually changes.
538
- * @returns {void}
539
- */
540
185
  handleBreakpointResize() {
541
186
  if (!this.getBreakpointWidth()) return;
542
- const nextState = this.shouldApplyBreakpointCollapse();
543
- if (this._isCollapsedByBreakpoint === nextState) return;
544
- this.updateCollapse();
545
- }
546
- /**
547
- * Recalculates breadcrumb collapse state.
548
- * @returns {void}
549
- */
187
+ const e2 = this.shouldApplyBreakpointCollapse();
188
+ this._isCollapsedByBreakpoint !== e2 && this.updateCollapse();
189
+ }
550
190
  updateCollapse() {
551
- let breadcrumbs = this.getBreadcrumbs();
552
- if (breadcrumbs.length === 0) return;
191
+ let e2 = this.getBreadcrumbs();
192
+ if (0 === e2.length) return;
553
193
  this._isCollapsedByBreakpoint = this.shouldApplyBreakpointCollapse();
554
- const shouldCollapseToMenu = this.isBreakpointMenuCollapseActive() && (breadcrumbs.length > 1 || this.usesMobileCollapsedVariant());
555
- if (shouldCollapseToMenu) {
556
- this.applyMenuCollapse(breadcrumbs);
557
- return;
558
- }
559
- const effectiveItemsAfterCollapse = this.itemsAfterCollapse;
560
- const shouldUseItemCollapse = this.breakpointCollapse === "menu" || this._isCollapsedByBreakpoint;
561
- const shouldCollapse = shouldUseItemCollapse && this.maxItems > 0 && breadcrumbs.length > this.maxItems && this.itemsBeforeCollapse + effectiveItemsAfterCollapse + 1 <= this.maxItems;
562
- const lastIndex = breadcrumbs.length - 1;
563
- const indicatorIndex = shouldCollapse ? this.itemsBeforeCollapse : -1;
564
- const collapseStart = this.itemsBeforeCollapse;
565
- const collapseEnd = breadcrumbs.length - effectiveItemsAfterCollapse;
566
- breadcrumbs.forEach((breadcrumb, index) => {
567
- this.syncManagedAttribute(breadcrumb, "last", index === lastIndex);
568
- this.syncManagedAttribute(breadcrumb, "show-collapsed-indicator", index === indicatorIndex);
569
- this.syncManagedAttribute(breadcrumb, "mobile-collapsed-indicator", false);
570
- const isCollapsed = shouldCollapse && index >= collapseStart && index < collapseEnd;
571
- this.syncManagedAttribute(breadcrumb, "collapsed", isCollapsed);
572
- if (!isCollapsed && breadcrumb.classList.contains("collapsed")) {
573
- breadcrumb.classList.remove("collapsed");
574
- }
575
- });
576
- this.refreshCollapsedIndicators();
577
- }
578
- /**
579
- * Collapses the whole breadcrumb trail into a single menu indicator.
580
- * @param {Array<Element>} breadcrumbs Breadcrumb items.
581
- */
582
- applyMenuCollapse(breadcrumbs) {
583
- const lastIndex = breadcrumbs.length - 1;
584
- const usesMobileVariant = this.usesMobileCollapsedVariant();
585
- breadcrumbs.forEach((breadcrumb, index) => {
586
- const isIndicator = index === 0;
587
- this.syncManagedAttribute(breadcrumb, "last", index === lastIndex);
588
- this.syncManagedAttribute(breadcrumb, "show-collapsed-indicator", isIndicator);
589
- this.syncManagedAttribute(breadcrumb, "collapsed", true);
590
- this.syncManagedAttribute(breadcrumb, "mobile-collapsed-indicator", isIndicator && usesMobileVariant);
591
- if (isIndicator) {
592
- breadcrumb.classList.remove("collapsed");
593
- }
594
- });
595
- this.refreshCollapsedIndicators();
194
+ if (this.isBreakpointMenuCollapseActive() && (e2.length > 1 || this.usesMobileCollapsedVariant())) return void this.applyMenuCollapse(e2);
195
+ const t2 = this.itemsAfterCollapse, i2 = ("menu" === this.breakpointCollapse || this._isCollapsedByBreakpoint) && this.maxItems > 0 && e2.length > this.maxItems && this.itemsBeforeCollapse + t2 + 1 <= this.maxItems, r2 = e2.length - 1, s = i2 ? this.itemsBeforeCollapse : -1, a = this.itemsBeforeCollapse, l = e2.length - t2;
196
+ e2.forEach((e3, t3) => {
197
+ this.syncManagedAttribute(e3, "last", t3 === r2), this.syncManagedAttribute(e3, "show-collapsed-indicator", t3 === s), this.syncManagedAttribute(e3, "mobile-collapsed-indicator", false);
198
+ const n = i2 && t3 >= a && t3 < l;
199
+ this.syncManagedAttribute(e3, "collapsed", n), !n && e3.classList.contains("collapsed") && e3.classList.remove("collapsed");
200
+ }), this.refreshCollapsedIndicators();
201
+ }
202
+ applyMenuCollapse(e2) {
203
+ const t2 = e2.length - 1, i2 = this.usesMobileCollapsedVariant();
204
+ e2.forEach((e3, r2) => {
205
+ const s = 0 === r2;
206
+ this.syncManagedAttribute(e3, "last", r2 === t2), this.syncManagedAttribute(e3, "show-collapsed-indicator", s), this.syncManagedAttribute(e3, "collapsed", true), this.syncManagedAttribute(e3, "mobile-collapsed-indicator", s && i2), s && e3.classList.remove("collapsed");
207
+ }), this.refreshCollapsedIndicators();
596
208
  }
597
- /**
598
- * Returns whether the active breakpoint mode should move the full trail into one menu.
599
- * @returns {boolean}
600
- */
601
209
  isBreakpointMenuCollapseActive() {
602
- return Boolean(
603
- this.getBreakpointWidth() && this._isCollapsedByBreakpoint && this.breakpointCollapse === "menu"
604
- );
605
- }
606
- /**
607
- * Returns whether the active collapsed variant is one of the mobile compact layouts.
608
- * @returns {boolean}
609
- */
210
+ return Boolean(this.getBreakpointWidth() && this._isCollapsedByBreakpoint && "menu" === this.breakpointCollapse);
211
+ }
610
212
  usesMobileCollapsedVariant() {
611
- return MOBILE_COLLAPSED_VARIANTS.has(this.normalizedCollapsedVariant);
612
- }
613
- /**
614
- * Clears attributes/classes managed by the collapse algorithm.
615
- * @param {Array<Element>} breadcrumbs Breadcrumb items.
616
- */
617
- resetCollapseState(breadcrumbs = this.getBreadcrumbs()) {
618
- breadcrumbs.forEach((breadcrumb) => {
619
- breadcrumb.removeAttribute("collapsed");
620
- breadcrumb.removeAttribute("show-collapsed-indicator");
621
- breadcrumb.removeAttribute("mobile-collapsed-indicator");
622
- breadcrumb.removeAttribute("last");
623
- breadcrumb.classList.remove("collapsed");
213
+ return i.has(this.normalizedCollapsedVariant);
214
+ }
215
+ resetCollapseState(e2 = this.getBreadcrumbs()) {
216
+ e2.forEach((e3) => {
217
+ e3.removeAttribute("collapsed"), e3.removeAttribute("show-collapsed-indicator"), e3.removeAttribute("mobile-collapsed-indicator"), e3.removeAttribute("last"), e3.classList.remove("collapsed");
624
218
  });
625
219
  }
626
- /**
627
- * Applies a managed boolean attribute only when its value truly changes.
628
- * @param {Element} element Breadcrumb item whose responsive state is being synchronized.
629
- * @param {string} name Managed state flag that should be synchronized on the breadcrumb item.
630
- * @param {boolean} isEnabled Whether the attribute should be present.
631
- */
632
- syncManagedAttribute(element, name, isEnabled) {
633
- if (!element) return;
634
- const hasAttribute = element.hasAttribute(name);
635
- if (isEnabled && !hasAttribute) {
636
- element.setAttribute(name, true);
637
- }
638
- if (!isEnabled && hasAttribute) {
639
- element.removeAttribute(name);
640
- }
220
+ syncManagedAttribute(e2, t2, i2) {
221
+ if (!e2) return;
222
+ const r2 = e2.hasAttribute(t2);
223
+ i2 && !r2 && e2.setAttribute(t2, true), !i2 && r2 && e2.removeAttribute(t2);
641
224
  }
642
- /**
643
- * Redraws active collapsed indicators when parent-only rendering inputs change.
644
- */
645
225
  refreshCollapsedIndicators() {
646
- this.getBreadcrumbs().filter((breadcrumb) => breadcrumb.hasAttribute("show-collapsed-indicator")).forEach((breadcrumb) => {
226
+ this.getBreadcrumbs().filter((e2) => e2.hasAttribute("show-collapsed-indicator")).forEach((e2) => {
647
227
  var _a;
648
- return (_a = breadcrumb.refresh) == null ? void 0 : _a.call(breadcrumb);
228
+ return (_a = e2.refresh) == null ? void 0 : _a.call(e2);
649
229
  });
650
230
  }
651
- /**
652
- * Returns whether collapse rules should currently be applied.
653
- * @returns {boolean}
654
- */
655
231
  shouldApplyBreakpointCollapse() {
656
- const breakpointWidth = this.getBreakpointWidth();
657
- if (!breakpointWidth) return true;
658
- return window.innerWidth < breakpointWidth;
659
- }
660
- /**
661
- * Resolves the configured breakpoint to a pixel width.
662
- * @returns {number|null}
663
- */
232
+ const e2 = this.getBreakpointWidth();
233
+ return !e2 || window.innerWidth < e2;
234
+ }
664
235
  getBreakpointWidth() {
665
236
  if (!this.breakpoint) return null;
666
- const token = this.breakpoint.trim().toLowerCase();
667
- const cssValue = getComputedStyle(this).getPropertyValue(`--wje-breadcrumbs-breakpoint-${token}`).trim();
668
- const namedBreakpoint = _Breadcrumbs.BREAKPOINTS[token];
669
- if (cssValue) {
670
- const cssNumber = parseFloat(cssValue);
671
- if (Number.isFinite(cssNumber)) return cssNumber;
672
- }
673
- if (Number.isFinite(namedBreakpoint)) {
674
- return namedBreakpoint;
237
+ const e2 = this.breakpoint.trim().toLowerCase(), t2 = getComputedStyle(this).getPropertyValue(`--wje-breadcrumbs-breakpoint-${e2}`).trim(), i2 = _r.BREAKPOINTS[e2];
238
+ if (t2) {
239
+ const e3 = parseFloat(t2);
240
+ if (Number.isFinite(e3)) return e3;
675
241
  }
676
- const directNumber = parseFloat(token);
677
- return Number.isFinite(directNumber) ? directNumber : null;
242
+ if (Number.isFinite(i2)) return i2;
243
+ const s = parseFloat(e2);
244
+ return Number.isFinite(s) ? s : null;
678
245
  }
679
- /**
680
- * Returns the custom trigger element configured for breakpoint menu collapse.
681
- * @returns {Element|null}
682
- */
683
246
  getBreakpointCollapseTrigger() {
684
- return Array.from(this.children).find((child) => {
247
+ return Array.from(this.children).find((e2) => {
685
248
  var _a;
686
- return ((_a = child.getAttribute) == null ? void 0 : _a.call(child, "slot")) === "breakpoint-collapse-trigger";
249
+ return "breakpoint-collapse-trigger" === ((_a = e2.getAttribute) == null ? void 0 : _a.call(e2, "slot"));
687
250
  }) || null;
688
251
  }
689
- /**
690
- * Retrieves all breadcrumb elements within the current instance.
691
- * @returns {Array<Element>} An array of breadcrumb elements (`wje-breadcrumb`) found within the instance. Returns an empty array if no breadcrumbs are found.
692
- */
693
252
  getBreadcrumbs() {
694
253
  return Array.from(this.querySelectorAll("wje-breadcrumb")) || [];
695
254
  }
696
- /**
697
- * Retrieves breadcrumbs managed by the items property.
698
- * @returns {Array<Element>}
699
- */
700
255
  getManagedBreadcrumbs() {
701
- return Array.from(this.querySelectorAll(`wje-breadcrumb[${MANAGED_ITEM_ATTRIBUTE}]`)) || [];
256
+ return Array.from(this.querySelectorAll(`wje-breadcrumb[${t}]`)) || [];
702
257
  }
703
- /**
704
- * Retrieves all breadcrumb elements that have the 'collapsed' attribute.
705
- * @returns {Array<Element>} An array of DOM elements representing breadcrumbs with the 'collapsed' attribute.
706
- */
707
258
  getBreadcrumbsCollapsed() {
708
259
  return Array.from(this.querySelectorAll("wje-breadcrumb[collapsed]")) || [];
709
260
  }
710
261
  };
711
- __publicField(_Breadcrumbs, "BREAKPOINTS", {
712
- sm: 576,
713
- md: 768,
714
- lg: 992,
715
- xl: 1200,
716
- "2xl": 1450,
717
- xxl: 1450
718
- });
719
- let Breadcrumbs = _Breadcrumbs;
720
- Breadcrumbs.define("wje-breadcrumbs", Breadcrumbs);
262
+ __publicField(_r, "BREAKPOINTS", { sm: 576, md: 768, lg: 992, xl: 1200, "2xl": 1450, xxl: 1450 });
263
+ let r = _r;
264
+ r.define("wje-breadcrumbs", r);
721
265
  export {
722
- Breadcrumbs as default
266
+ r as default
723
267
  };
724
268
  //# sourceMappingURL=wje-breadcrumbs.js.map