q2-tecton-elements 1.70.2 → 1.70.4

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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-08-04T18:17:41",
2
+ "timestamp": "2026-09-28T19:56:57",
3
3
  "compiler": {
4
4
  "name": "node",
5
5
  "version": "24.10.0"
@@ -1405,7 +1405,7 @@
1405
1405
  "component-DaQM9u3s.js",
1406
1406
  "index-Cps4jSQM.js"
1407
1407
  ],
1408
- "originalByteSize": 52751
1408
+ "originalByteSize": 52995
1409
1409
  },
1410
1410
  {
1411
1411
  "key": "q2-chart-bar.entry",
@@ -2266,7 +2266,7 @@
2266
2266
  "component-DaQM9u3s.js",
2267
2267
  "index-Cps4jSQM.js"
2268
2268
  ],
2269
- "originalByteSize": 52751
2269
+ "originalByteSize": 52995
2270
2270
  },
2271
2271
  {
2272
2272
  "key": "q2-chart-bar.entry",
@@ -3129,7 +3129,7 @@
3129
3129
  "component-iASoq6gx.js",
3130
3130
  "index-SpDCZABA.js"
3131
3131
  ],
3132
- "originalByteSize": 52839
3132
+ "originalByteSize": 53083
3133
3133
  },
3134
3134
  {
3135
3135
  "key": "q2-chart-bar.entry",
@@ -511,6 +511,9 @@ const Q2OptionList = class {
511
511
  return;
512
512
  const optionRole = type === 'menu' ? 'menuitem' : 'option';
513
513
  this.allOptions.forEach(option => {
514
+ // iOS 26 bug: setting role="menuitem" on the q2-dropdown-item host prevents VoiceOver from announcing the option name.
515
+ if (type === 'menu' && option.tagName.toLowerCase() === 'q2-dropdown-item')
516
+ return;
514
517
  option.role = optionRole;
515
518
  });
516
519
  }
@@ -681,7 +684,7 @@ const Q2OptionList = class {
681
684
  // #endregion
682
685
  // #region Render Methods
683
686
  render() {
684
- return (index.h(index.Host, { key: 'ea6ef8ea9e667c6d1485212ea636b23725ce9043' }, index.h("div", { key: '6bc6ffec50a40b8b8ee4cf2b66388200eb3f0d32', class: "content", ref: el => (this.contentElement = el), onFocusout: this.focusoutHandler }, index.h("div", { key: '28b5d0460ceca2f0b9a8fd4fa018f949d04154df', class: "options", "aria-label": index$1.loc('tecton.element.optionList.label', [this.label]), "aria-multiselectable": this.type === 'menu' ? undefined : this.multiple ? 'true' : undefined, role: this.type || 'listbox', onKeyDown: this.internalKeydownHandler, onClick: this.clickHandler }, index.h("slot", { key: '666147b2cd06490c883c8a01b11e9cfa209a19dd' })))));
687
+ return (index.h(index.Host, { key: '14f2a8ab97077ed7b93d746b75f89b98f416a55d' }, index.h("div", { key: '1184c5d8d4cf8af63a60bef1282d6442b8539cf6', class: "content", ref: el => (this.contentElement = el), onFocusout: this.focusoutHandler }, index.h("div", { key: '5dcb6a82f1759e46d5e742e72075bf3dfa3c6d70', class: "options", "aria-label": index$1.loc('tecton.element.optionList.label', [this.label]), "aria-multiselectable": this.type === 'menu' ? undefined : this.multiple ? 'true' : undefined, role: this.type || 'listbox', onKeyDown: this.internalKeydownHandler, onClick: this.clickHandler }, index.h("slot", { key: '39372ab91b081ba124ff4c4dc04fc0c84be7a4ad' })))));
685
688
  }
686
689
  get hostElement() { return index.getElement(this); }
687
690
  static get watchers() { return {
@@ -413,6 +413,9 @@ export class Q2OptionList {
413
413
  return;
414
414
  const optionRole = type === 'menu' ? 'menuitem' : 'option';
415
415
  this.allOptions.forEach(option => {
416
+ // iOS 26 bug: setting role="menuitem" on the q2-dropdown-item host prevents VoiceOver from announcing the option name.
417
+ if (type === 'menu' && option.tagName.toLowerCase() === 'q2-dropdown-item')
418
+ return;
416
419
  option.role = optionRole;
417
420
  });
418
421
  }
@@ -583,7 +586,7 @@ export class Q2OptionList {
583
586
  // #endregion
584
587
  // #region Render Methods
585
588
  render() {
586
- return (h(Host, { key: 'ea6ef8ea9e667c6d1485212ea636b23725ce9043' }, h("div", { key: '6bc6ffec50a40b8b8ee4cf2b66388200eb3f0d32', class: "content", ref: el => (this.contentElement = el), onFocusout: this.focusoutHandler }, h("div", { key: '28b5d0460ceca2f0b9a8fd4fa018f949d04154df', class: "options", "aria-label": loc('tecton.element.optionList.label', [this.label]), "aria-multiselectable": this.type === 'menu' ? undefined : this.multiple ? 'true' : undefined, role: this.type || 'listbox', onKeyDown: this.internalKeydownHandler, onClick: this.clickHandler }, h("slot", { key: '666147b2cd06490c883c8a01b11e9cfa209a19dd' })))));
589
+ return (h(Host, { key: '14f2a8ab97077ed7b93d746b75f89b98f416a55d' }, h("div", { key: '1184c5d8d4cf8af63a60bef1282d6442b8539cf6', class: "content", ref: el => (this.contentElement = el), onFocusout: this.focusoutHandler }, h("div", { key: '5dcb6a82f1759e46d5e742e72075bf3dfa3c6d70', class: "options", "aria-label": loc('tecton.element.optionList.label', [this.label]), "aria-multiselectable": this.type === 'menu' ? undefined : this.multiple ? 'true' : undefined, role: this.type || 'listbox', onKeyDown: this.internalKeydownHandler, onClick: this.clickHandler }, h("slot", { key: '39372ab91b081ba124ff4c4dc04fc0c84be7a4ad' })))));
587
590
  }
588
591
  static get is() { return "q2-option-list"; }
589
592
  static get encapsulation() { return "shadow"; }
@@ -2,7 +2,7 @@ import { proxyCustomElement as t, HTMLElement as e, createEvent as i, h as s, Ho
2
2
 
3
3
  import { b as h } from "./component.js";
4
4
 
5
- import { l as a, n as c, o as r, i as l, w as d, t as p } from "./index2.js";
5
+ import { l as a, n as r, o as c, i as l, w as d, t as p } from "./index2.js";
6
6
 
7
7
  import { m as u } from "./mirror-emit.js";
8
8
 
@@ -42,7 +42,7 @@ const b = t(class extends e {
42
42
  break;
43
43
  }
44
44
  "menu" === this.type ? (this.activeIndex = 0, this.openDropdownWithActiveElement(0)) : (this.setDefaultActiveElement(),
45
- c((() => this.popoverState.emit({
45
+ r((() => this.popoverState.emit({
46
46
  open: !0,
47
47
  action: "open"
48
48
  }))));
@@ -50,7 +50,7 @@ const b = t(class extends e {
50
50
 
51
51
  case "Enter":
52
52
  "menu" === this.type ? (this.activeIndex = 0, this.openDropdownWithActiveElement(0)) : (this.setDefaultActiveElement(),
53
- c((() => this.popoverState.emit({
53
+ r((() => this.popoverState.emit({
54
54
  open: !0,
55
55
  action: "open"
56
56
  }))));
@@ -112,7 +112,7 @@ const b = t(class extends e {
112
112
  }, this.internalKeydownHandler = t => {
113
113
  t.stopPropagation();
114
114
  const {activeIndex: e, customSearch: i, allOptions: s, allVisibleOptions: n, multiple: o} = this, {key: h, shiftKey: a} = t;
115
- let c;
115
+ let r;
116
116
  switch (h) {
117
117
  case " ":
118
118
  if (this.searchString && !this.multiple) {
@@ -120,8 +120,8 @@ const b = t(class extends e {
120
120
  this.searchOptions(h, !1);
121
121
  break;
122
122
  }
123
- if (c = s.find((t => t.active)), !c || c.disabled) break;
124
- if (this.selectOption(c), o) break;
123
+ if (r = s.find((t => t.active)), !r || r.disabled) break;
124
+ if (this.selectOption(r), o) break;
125
125
  this.hostElement.addEventListener("tctClick", (() => {
126
126
  this.popoverState.emit({
127
127
  open: !1,
@@ -133,8 +133,8 @@ const b = t(class extends e {
133
133
  break;
134
134
 
135
135
  case "Enter":
136
- if (c = s.find((t => t.active)), !c || c.disabled) break;
137
- if (this.selectOption(c), o) break;
136
+ if (r = s.find((t => t.active)), !r || r.disabled) break;
137
+ if (this.selectOption(r), o) break;
138
138
  this.hostElement.addEventListener("tctClick", (() => {
139
139
  this.popoverState.emit({
140
140
  open: !1,
@@ -148,8 +148,8 @@ const b = t(class extends e {
148
148
  case "ArrowUp":
149
149
  case "ArrowDown":
150
150
  // Guard: only process if an option is currently focused
151
- const r = document.activeElement;
152
- if (!this.allOptions.some((t => t === r))) return;
151
+ const c = document.activeElement;
152
+ if (!this.allOptions.some((t => t === c))) return;
153
153
  if (t.preventDefault(), "ArrowUp" === h) {
154
154
  if (n[0].active) break;
155
155
  if (void 0 === e) {
@@ -201,8 +201,8 @@ const b = t(class extends e {
201
201
  });
202
202
  break;
203
203
  }
204
- if (c = s.find((t => t.active)), !c || c.disabled) return;
205
- this.selectOption(c);
204
+ if (r = s.find((t => t.active)), !r || r.disabled) return;
205
+ this.selectOption(r);
206
206
  break;
207
207
 
208
208
  case "Esc":
@@ -257,7 +257,7 @@ const b = t(class extends e {
257
257
  this.hasOptions = !!this.hostElement.querySelectorAll("q2-option:not([separator]):not([separator=true]), q2-dropdown-item:not([separator]):not([separator=true])").length;
258
258
  }
259
259
  componentDidLoad() {
260
- r(this.hostElement), this.checkOptions(), this.selectedOptionsUpdated(), this.ready.emit();
260
+ c(this.hostElement), this.checkOptions(), this.selectedOptionsUpdated(), this.ready.emit();
261
261
  }
262
262
  componentDidRender() {
263
263
  this.scheduledAfterRender.forEach((t => t())), this.scheduledAfterRender = [];
@@ -323,8 +323,9 @@ const b = t(class extends e {
323
323
  const {type: t} = this;
324
324
  if (!t) return;
325
325
  const e = "menu" === t ? "menuitem" : "option";
326
- this.allOptions.forEach((t => {
327
- t.role = e;
326
+ this.allOptions.forEach((i => {
327
+ // iOS 26 bug: setting role="menuitem" on the q2-dropdown-item host prevents VoiceOver from announcing the option name.
328
+ "menu" === t && "q2-dropdown-item" === i.tagName.toLowerCase() || (i.role = e);
328
329
  }));
329
330
  }
330
331
  focusSelectedSibling(t) {
@@ -405,7 +406,7 @@ const b = t(class extends e {
405
406
  if (!t) return;
406
407
  p(t) ? t.focus({
407
408
  preventScroll: !0
408
- }) : c((() => t.focus({
409
+ }) : r((() => t.focus({
409
410
  preventScroll: !0
410
411
  })));
411
412
  }
@@ -426,14 +427,14 @@ const b = t(class extends e {
426
427
  // #region Render Methods
427
428
  render() {
428
429
  return s(n, {
429
- key: "ea6ef8ea9e667c6d1485212ea636b23725ce9043"
430
+ key: "14f2a8ab97077ed7b93d746b75f89b98f416a55d"
430
431
  }, s("div", {
431
- key: "6bc6ffec50a40b8b8ee4cf2b66388200eb3f0d32",
432
+ key: "1184c5d8d4cf8af63a60bef1282d6442b8539cf6",
432
433
  class: "content",
433
434
  ref: t => this.contentElement = t,
434
435
  onFocusout: this.focusoutHandler
435
436
  }, s("div", {
436
- key: "28b5d0460ceca2f0b9a8fd4fa018f949d04154df",
437
+ key: "5dcb6a82f1759e46d5e742e72075bf3dfa3c6d70",
437
438
  class: "options",
438
439
  "aria-label": a("tecton.element.optionList.label", [ this.label ]),
439
440
  "aria-multiselectable": "menu" === this.type ? void 0 : this.multiple ? "true" : void 0,
@@ -441,7 +442,7 @@ const b = t(class extends e {
441
442
  onKeyDown: this.internalKeydownHandler,
442
443
  onClick: this.clickHandler
443
444
  }, s("slot", {
444
- key: "666147b2cd06490c883c8a01b11e9cfa209a19dd"
445
+ key: "39372ab91b081ba124ff4c4dc04fc0c84be7a4ad"
445
446
  }))));
446
447
  }
447
448
  get hostElement() {
@@ -509,6 +509,9 @@ const Q2OptionList = class {
509
509
  return;
510
510
  const optionRole = type === 'menu' ? 'menuitem' : 'option';
511
511
  this.allOptions.forEach(option => {
512
+ // iOS 26 bug: setting role="menuitem" on the q2-dropdown-item host prevents VoiceOver from announcing the option name.
513
+ if (type === 'menu' && option.tagName.toLowerCase() === 'q2-dropdown-item')
514
+ return;
512
515
  option.role = optionRole;
513
516
  });
514
517
  }
@@ -679,7 +682,7 @@ const Q2OptionList = class {
679
682
  // #endregion
680
683
  // #region Render Methods
681
684
  render() {
682
- return (h(Host, { key: 'ea6ef8ea9e667c6d1485212ea636b23725ce9043' }, h("div", { key: '6bc6ffec50a40b8b8ee4cf2b66388200eb3f0d32', class: "content", ref: el => (this.contentElement = el), onFocusout: this.focusoutHandler }, h("div", { key: '28b5d0460ceca2f0b9a8fd4fa018f949d04154df', class: "options", "aria-label": loc('tecton.element.optionList.label', [this.label]), "aria-multiselectable": this.type === 'menu' ? undefined : this.multiple ? 'true' : undefined, role: this.type || 'listbox', onKeyDown: this.internalKeydownHandler, onClick: this.clickHandler }, h("slot", { key: '666147b2cd06490c883c8a01b11e9cfa209a19dd' })))));
685
+ return (h(Host, { key: '14f2a8ab97077ed7b93d746b75f89b98f416a55d' }, h("div", { key: '1184c5d8d4cf8af63a60bef1282d6442b8539cf6', class: "content", ref: el => (this.contentElement = el), onFocusout: this.focusoutHandler }, h("div", { key: '5dcb6a82f1759e46d5e742e72075bf3dfa3c6d70', class: "options", "aria-label": loc('tecton.element.optionList.label', [this.label]), "aria-multiselectable": this.type === 'menu' ? undefined : this.multiple ? 'true' : undefined, role: this.type || 'listbox', onKeyDown: this.internalKeydownHandler, onClick: this.clickHandler }, h("slot", { key: '39372ab91b081ba124ff4c4dc04fc0c84be7a4ad' })))));
683
686
  }
684
687
  get hostElement() { return getElement(this); }
685
688
  static get watchers() { return {
@@ -4,7 +4,7 @@ import { m as n } from "./mirror-emit-DUjY_ucm.js";
4
4
 
5
5
  import { b as r } from "./component-DaQM9u3s.js";
6
6
 
7
- import { l as a, n as h, o as p, i as c, w as l, v as d, q as u, x as m, y as v, g as b } from "./index-Cps4jSQM.js";
7
+ import { l as a, n as h, o as p, i as c, w as l, v as d, q as u, x as m, y as b, g as v } from "./index-Cps4jSQM.js";
8
8
 
9
9
  const w = class {
10
10
  constructor(o) {
@@ -388,8 +388,9 @@ const f = class {
388
388
  const {type: t} = this;
389
389
  if (!t) return;
390
390
  const i = "menu" === t ? "menuitem" : "option";
391
- this.allOptions.forEach((t => {
392
- t.role = i;
391
+ this.allOptions.forEach((o => {
392
+ // iOS 26 bug: setting role="menuitem" on the q2-dropdown-item host prevents VoiceOver from announcing the option name.
393
+ "menu" === t && "q2-dropdown-item" === o.tagName.toLowerCase() || (o.role = i);
393
394
  }));
394
395
  }
395
396
  focusSelectedSibling(t) {
@@ -491,14 +492,14 @@ const f = class {
491
492
  // #region Render Methods
492
493
  render() {
493
494
  return e(s, {
494
- key: "ea6ef8ea9e667c6d1485212ea636b23725ce9043"
495
+ key: "14f2a8ab97077ed7b93d746b75f89b98f416a55d"
495
496
  }, e("div", {
496
- key: "6bc6ffec50a40b8b8ee4cf2b66388200eb3f0d32",
497
+ key: "1184c5d8d4cf8af63a60bef1282d6442b8539cf6",
497
498
  class: "content",
498
499
  ref: t => this.contentElement = t,
499
500
  onFocusout: this.focusoutHandler
500
501
  }, e("div", {
501
- key: "28b5d0460ceca2f0b9a8fd4fa018f949d04154df",
502
+ key: "5dcb6a82f1759e46d5e742e72075bf3dfa3c6d70",
502
503
  class: "options",
503
504
  "aria-label": a("tecton.element.optionList.label", [ this.label ]),
504
505
  "aria-multiselectable": "menu" === this.type ? void 0 : this.multiple ? "true" : void 0,
@@ -506,7 +507,7 @@ const f = class {
506
507
  onKeyDown: this.internalKeydownHandler,
507
508
  onClick: this.clickHandler
508
509
  }, e("slot", {
509
- key: "666147b2cd06490c883c8a01b11e9cfa209a19dd"
510
+ key: "39372ab91b081ba124ff4c4dc04fc0c84be7a4ad"
510
511
  }))));
511
512
  }
512
513
  get hostElement() {
@@ -568,11 +569,11 @@ const g = class {
568
569
  bottom: 0,
569
570
  left: 0,
570
571
  right: 0
571
- }, u = c, b = (null === (o = null === window || void 0 === window ? void 0 : window.visualViewport) || void 0 === o ? void 0 : o.width) - d, w = m(e), f = w ? 0 : window.scrollX, g = w ? 0 : window.scrollY;
572
- s.style.setProperty("--comp-pop-position", w ? "fixed" : "absolute"), "right" === a ? (s.style.setProperty("--comp-pop-right", b - f + "px"),
572
+ }, u = c, v = (null === (o = null === window || void 0 === window ? void 0 : window.visualViewport) || void 0 === o ? void 0 : o.width) - d, w = m(e), f = w ? 0 : window.scrollX, g = w ? 0 : window.scrollY;
573
+ s.style.setProperty("--comp-pop-position", w ? "fixed" : "absolute"), "right" === a ? (s.style.setProperty("--comp-pop-right", v - f + "px"),
573
574
  s.style.setProperty("--comp-pop-left", "unset")) : (s.style.setProperty("--comp-pop-left", `${u + f}px`),
574
575
  s.style.setProperty("--comp-pop-right", "unset")), this.block && s.style.setProperty("--comp-pop-width", `${(null == e ? void 0 : e.offsetWidth) || 0}px`);
575
- const k = r && v(this.hostElement);
576
+ const k = r && b(this.hostElement);
576
577
  "up" === n && (r && !k ? s.style.setProperty("--comp-pop-bottom", window.innerHeight - h + "px") : s.style.setProperty("--comp-pop-bottom", window.innerHeight - h - g + "px")),
577
578
  "down" === n && (r && !k ? s.style.setProperty("--comp-pop-top", `${p}px`) : s.style.setProperty("--comp-pop-top", `${p + g}px`)),
578
579
  // Wait for one paint to prevent layout thrashing
@@ -670,7 +671,7 @@ const g = class {
670
671
  addViewportListeners() {
671
672
  var t;
672
673
  window.addEventListener("resize", this.viewPortOrientationChanged), null === visualViewport || void 0 === visualViewport || visualViewport.addEventListener("resize", this.viewPortChanged),
673
- v(this.hostElement) && !b() && window.addEventListener("scroll", this.viewPortChanged, {
674
+ b(this.hostElement) && !v() && window.addEventListener("scroll", this.viewPortChanged, {
674
675
  passive: !0,
675
676
  capture: !0
676
677
  }), null === (t = null === screen || void 0 === screen ? void 0 : screen.orientation) || void 0 === t || t.addEventListener("orientationchange", this.viewPortOrientationChanged),
@@ -692,16 +693,16 @@ const g = class {
692
693
  bottom: 0
693
694
  };
694
695
  let c, d, u;
695
- const m = a && v(this.hostElement);
696
+ const m = a && b(this.hostElement);
696
697
  if (a && !m) {
697
698
  const {outletOffset: t = 0, innerHeight: i = window.innerHeight, top: e = 0, bottom: s = 0} = (null === (o = window.Tecton) || void 0 === o ? void 0 : o.platformDimensions) || {}, n = window.innerHeight - p, a = i - s - (t + p - e);
698
699
  d = (t > 0 ? h : h + t - e) - r, u = n < a ? n - r : a - r;
699
700
  } else c = window.innerHeight, d = h - r, u = c - p - r;
700
- const b = d > u ? "up" : "down", w = !(null == e ? void 0 : e.style.getPropertyValue("--comp-pop-max-height")) || this.orientationChanged;
701
+ const v = d > u ? "up" : "down", w = !(null == e ? void 0 : e.style.getPropertyValue("--comp-pop-max-height")) || this.orientationChanged;
701
702
  // We do not want to update the max height once the popover is open unless the page orientation shifts (resize or mobile use cases)
702
703
  // we do not want to constantly update the max-height after an orientation change, so we switch this back to false
703
704
  this.orientationChanged = !1;
704
- switch (this.currentDirection || n || b) {
705
+ switch (this.currentDirection || n || v) {
705
706
  case "up":
706
707
  if (w && e) {
707
708
  const t = this.validatedMaxHeight || d, i = Math.min(d, t);
@@ -738,7 +739,7 @@ const g = class {
738
739
  // #region Render Methods
739
740
  render() {
740
741
  const t = [ "container", this.currentDirection, this.align ];
741
- return b() && t.push("mobile"), this.show && t.push("show"), this.block && t.push("block"),
742
+ return v() && t.push("mobile"), this.show && t.push("show"), this.block && t.push("block"),
742
743
  "legacy" === this.mode && t.push("legacy"), "opening" === this.animationState && t.push("animating-open"),
743
744
  "closing" === this.animationState && t.push("animating-close"), e("div", {
744
745
  key: "4fe0c06793144eb83fe53cfc568af81226f78345",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "q2-tecton-elements",
3
- "version": "1.70.2",
3
+ "version": "1.70.4",
4
4
  "description": "Q2 Tecton Custom Elements",
5
5
  "license": "MIT",
6
6
  "author": "Q2 Tecton Team",
@@ -56,7 +56,7 @@
56
56
  },
57
57
  "dependencies": {
58
58
  "@stencil/core": "~4.43.0",
59
- "q2-tecton-common": "1.70.2",
59
+ "q2-tecton-common": "1.70.4",
60
60
  "swiper": "^12.1.2"
61
61
  },
62
62
  "devDependencies": {
@@ -78,5 +78,5 @@
78
78
  "rollup-plugin-istanbul": "^5.0.0"
79
79
  },
80
80
  "packageManager": "pnpm@10.27.0",
81
- "gitHead": "66dbc0c35b0017b6c73c3c2be184b3ba17f43ce6"
81
+ "gitHead": "4137548f06eea1a9d43b2bc1e3aad13b61c2fc39"
82
82
  }