@swiftwc/ui 0.0.0-dev.11 → 0.0.0-dev.111

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 (301) hide show
  1. package/css-data/en.json +28 -0
  2. package/generated/buses/alert-dialog.d.ts +2 -0
  3. package/generated/buses/alert-dialog.js +1 -0
  4. package/generated/buses/confirmation-dialog.d.ts +2 -0
  5. package/generated/buses/confirmation-dialog.js +1 -0
  6. package/generated/buses/index.d.ts +6 -0
  7. package/generated/buses/index.js +6 -0
  8. package/generated/buses/lifecycle-observer.d.ts +2 -0
  9. package/generated/buses/lifecycle-observer.js +1 -0
  10. package/generated/client/index.d.ts +24 -10
  11. package/generated/client/index.js +179 -194
  12. package/generated/components/alert-dialog.d.ts +11 -0
  13. package/generated/components/alert-dialog.js +94 -0
  14. package/generated/components/body-view.d.ts +8 -0
  15. package/generated/components/body-view.js +6 -2
  16. package/generated/components/bordered-button.d.ts +10 -0
  17. package/generated/components/bordered-button.js +36 -3
  18. package/generated/components/bordered-prominent-button.d.ts +10 -0
  19. package/generated/components/bordered-prominent-button.js +36 -3
  20. package/generated/components/borderless-button.d.ts +9 -1
  21. package/generated/components/borderless-button.js +29 -11
  22. package/generated/components/color-scheme.d.ts +12 -0
  23. package/generated/components/color-scheme.js +51 -0
  24. package/generated/components/confirmation-dialog.d.ts +4 -1
  25. package/generated/components/confirmation-dialog.js +38 -32
  26. package/generated/components/content-unavailable.d.ts +30 -0
  27. package/generated/components/content-unavailable.js +79 -0
  28. package/generated/components/date-picker.d.ts +21 -15
  29. package/generated/components/date-picker.js +126 -88
  30. package/generated/components/detail-placeholder.d.ts +11 -0
  31. package/generated/components/detail-placeholder.js +15 -0
  32. package/generated/components/disclosure-group.d.ts +8 -0
  33. package/generated/components/disclosure-group.js +18 -7
  34. package/generated/components/fine-tooltip.d.ts +15 -0
  35. package/generated/components/fine-tooltip.js +108 -0
  36. package/generated/components/form-view.d.ts +10 -0
  37. package/generated/components/form-view.js +8 -3
  38. package/generated/components/glass-button.d.ts +10 -0
  39. package/generated/components/glass-button.js +36 -3
  40. package/generated/components/glass-prominent-button.d.ts +10 -0
  41. package/generated/components/glass-prominent-button.js +36 -3
  42. package/generated/components/h-divider.d.ts +11 -0
  43. package/generated/components/h-divider.js +15 -0
  44. package/generated/components/h-stack.d.ts +22 -0
  45. package/generated/components/h-stack.js +24 -0
  46. package/generated/components/image-view.d.ts +18 -0
  47. package/generated/components/image-view.js +65 -0
  48. package/generated/components/index.d.ts +15 -3
  49. package/generated/components/index.js +15 -3
  50. package/generated/components/label-view.d.ts +19 -1
  51. package/generated/components/label-view.js +63 -62
  52. package/generated/components/labeled-content.d.ts +33 -0
  53. package/generated/components/labeled-content.js +160 -0
  54. package/generated/components/list-view.d.ts +14 -0
  55. package/generated/components/list-view.js +12 -17
  56. package/generated/components/menu-view.d.ts +12 -1
  57. package/generated/components/menu-view.js +63 -65
  58. package/generated/components/navigation-large-title.d.ts +11 -0
  59. package/generated/components/navigation-large-title.js +11 -5
  60. package/generated/components/navigation-split-view.d.ts +9 -1
  61. package/generated/components/navigation-split-view.js +10 -6
  62. package/generated/components/navigation-stack.d.ts +9 -1
  63. package/generated/components/navigation-stack.js +13 -11
  64. package/generated/components/navigation-title.d.ts +11 -1
  65. package/generated/components/navigation-title.js +58 -55
  66. package/generated/components/picker-view.d.ts +48 -7
  67. package/generated/components/picker-view.js +971 -261
  68. package/generated/components/plain-button.js +3 -3
  69. package/generated/components/progress-view.d.ts +20 -0
  70. package/generated/components/progress-view.js +120 -0
  71. package/generated/components/screen-view.js +2 -1
  72. package/generated/components/scroll-view-proxy.d.ts +13 -0
  73. package/generated/components/scroll-view-proxy.js +15 -0
  74. package/generated/components/scroll-view.d.ts +13 -1
  75. package/generated/components/scroll-view.js +140 -97
  76. package/generated/components/search-view.d.ts +12 -0
  77. package/generated/components/search-view.js +24 -0
  78. package/generated/components/section-view.d.ts +13 -1
  79. package/generated/components/section-view.js +38 -58
  80. package/generated/components/sheet-view.d.ts +4 -2
  81. package/generated/components/sheet-view.js +10 -39
  82. package/generated/components/sidebar-toggle.d.ts +9 -1
  83. package/generated/components/sidebar-toggle.js +46 -69
  84. package/generated/components/sidebar-view.d.ts +3 -0
  85. package/generated/components/sidebar-view.js +16 -9
  86. package/generated/components/sticky-container.d.ts +6 -1
  87. package/generated/components/sticky-container.js +9 -7
  88. package/generated/components/tab-bar.d.ts +3 -0
  89. package/generated/components/tab-bar.js +17 -13
  90. package/generated/components/tab-item.d.ts +3 -0
  91. package/generated/components/tab-item.js +20 -13
  92. package/generated/components/tab-view.d.ts +13 -4
  93. package/generated/components/tab-view.js +25 -89
  94. package/generated/components/table-view.d.ts +19 -0
  95. package/generated/components/table-view.js +88 -107
  96. package/generated/components/text-field.d.ts +19 -6
  97. package/generated/components/text-field.js +127 -99
  98. package/generated/components/text-view.d.ts +11 -0
  99. package/generated/components/text-view.js +16 -0
  100. package/generated/components/toggle-view.d.ts +43 -0
  101. package/generated/components/toggle-view.js +366 -0
  102. package/generated/components/tool-bar-item-group.d.ts +8 -0
  103. package/generated/components/tool-bar-item-group.js +22 -4
  104. package/generated/components/tool-bar-item.d.ts +12 -1
  105. package/generated/components/tool-bar-item.js +57 -10
  106. package/generated/components/tool-bar.d.ts +19 -0
  107. package/generated/components/tool-bar.js +48 -33
  108. package/generated/components/v-divider.d.ts +11 -0
  109. package/generated/components/v-divider.js +15 -0
  110. package/generated/components/v-keyboard.d.ts +8 -1
  111. package/generated/components/v-keyboard.js +11 -9
  112. package/generated/components/v-stack.d.ts +20 -0
  113. package/generated/components/v-stack.js +18 -2
  114. package/generated/css/index.css +4617 -1266
  115. package/generated/events/alert-dialog.d.ts +13 -0
  116. package/generated/events/alert-dialog.js +1 -0
  117. package/generated/events/confirmation-dialog.d.ts +7 -2
  118. package/generated/events/date-picker.d.ts +6 -1
  119. package/generated/events/index.d.ts +2 -0
  120. package/generated/events/index.js +2 -0
  121. package/generated/events/lifecycle-observer.d.ts +10 -2
  122. package/generated/events/picker-view.d.ts +22 -1
  123. package/generated/events/scroll-view.d.ts +10 -2
  124. package/generated/events/tab-view.d.ts +38 -8
  125. package/generated/events/text-field.d.ts +6 -1
  126. package/generated/events/toggle-view.d.ts +14 -0
  127. package/generated/events/toggle-view.js +1 -0
  128. package/generated/i18n/index.d.ts +19 -10
  129. package/generated/i18n/index.js +79 -54
  130. package/generated/i18n/locales/el.d.ts +16 -0
  131. package/generated/i18n/locales/el.js +16 -0
  132. package/generated/i18n/locales/en.d.ts +16 -0
  133. package/generated/i18n/locales/en.js +16 -0
  134. package/generated/i18n/locales/index.d.ts +4 -0
  135. package/generated/i18n/locales/index.js +4 -0
  136. package/generated/internal/class/css-style-observer.js +2 -2
  137. package/generated/internal/class/form-associated-base.d.ts +0 -4
  138. package/generated/internal/class/form-associated-base.js +22 -39
  139. package/generated/internal/class/mutation-observer-set.d.ts +9 -0
  140. package/generated/internal/class/mutation-observer-set.js +42 -0
  141. package/generated/internal/class/mutation-observer-singleton.js +18 -0
  142. package/generated/internal/class/navigation-view.d.ts +1 -1
  143. package/generated/internal/class/navigation-view.js +36 -43
  144. package/generated/internal/decorators/adaptive-slot.d.ts +1 -0
  145. package/generated/internal/decorators/adaptive-slot.js +47 -0
  146. package/generated/internal/decorators/custom-element.d.ts +1 -1
  147. package/generated/internal/decorators/custom-element.js +2 -1
  148. package/generated/internal/decorators/index.d.ts +6 -0
  149. package/generated/internal/decorators/index.js +6 -0
  150. package/generated/internal/decorators/microtask-on-connected.d.ts +39 -0
  151. package/generated/internal/decorators/microtask-on-connected.js +67 -0
  152. package/generated/internal/flags.d.ts +4 -0
  153. package/generated/internal/flags.js +1 -0
  154. package/generated/internal/privateNamespace.d.ts +10 -0
  155. package/generated/internal/privateNamespace.js +159 -1
  156. package/generated/internal/utils/$.d.ts +9 -0
  157. package/generated/internal/utils/$.js +11 -0
  158. package/generated/internal/utils/compare-big-decimals.js +7 -17
  159. package/generated/internal/utils/debug.d.ts +1 -0
  160. package/generated/internal/utils/debug.js +4 -0
  161. package/generated/internal/utils/define-translations.d.ts +1 -0
  162. package/generated/internal/utils/define-translations.js +3 -0
  163. package/generated/internal/utils/ensure-placeholder.d.ts +1 -0
  164. package/generated/internal/utils/ensure-placeholder.js +41 -0
  165. package/generated/internal/utils/index.d.ts +39 -2
  166. package/generated/internal/utils/index.js +39 -3
  167. package/generated/internal/utils/is-inside.d.ts +1 -0
  168. package/generated/internal/utils/is-inside.js +4 -0
  169. package/generated/internal/utils/kebab-case.js +6 -9
  170. package/generated/internal/utils/list-active.js +67 -12
  171. package/generated/internal/utils/touch-glass.js +5 -5
  172. package/generated/internal/vendor/morphdom.d.ts +6 -0
  173. package/generated/internal/vendor/morphdom.js +720 -0
  174. package/generated/morphdom/index.d.ts +8 -0
  175. package/generated/morphdom/index.js +8 -0
  176. package/generated/morphdom/morph.d.ts +4 -0
  177. package/generated/morphdom/morph.js +10 -0
  178. package/generated/morphdom/query-morph.d.ts +5 -0
  179. package/generated/morphdom/query-morph.js +12 -0
  180. package/generated/morphdom/render-to-string.d.ts +12 -0
  181. package/generated/morphdom/render-to-string.js +48 -0
  182. package/generated/morphdom/unsafe-html.d.ts +2 -0
  183. package/generated/morphdom/unsafe-html.js +4 -0
  184. package/generated/namespace-browser/base.d.ts +12 -3
  185. package/generated/namespace-browser/base.js +41 -18
  186. package/generated/namespace-browser/event.d.ts +10 -0
  187. package/generated/namespace-browser/event.js +1 -0
  188. package/generated/snapshot/index.d.ts +3 -1
  189. package/generated/snapshot/index.js +23 -2
  190. package/generated/tpl/html.d.ts +5 -0
  191. package/generated/tpl/html.js +7 -0
  192. package/generated/tpl/index.d.ts +6 -0
  193. package/generated/tpl/index.js +6 -0
  194. package/generated/tpl/is-template-result.d.ts +3 -0
  195. package/generated/tpl/is-template-result.js +1 -0
  196. package/generated/tpl/render.d.ts +2 -0
  197. package/generated/tpl/render.js +132 -0
  198. package/html-data/en.json +2620 -0
  199. package/package.json +32 -7
  200. package/scss/_components.scss +15 -0
  201. package/scss/_functions.scss +10 -0
  202. package/scss/_maps.scss +293 -0
  203. package/scss/_mixins.scss +4 -0
  204. package/scss/_transitions.scss +6 -1
  205. package/scss/_utils.scss +2 -0
  206. package/scss/_vars.scss +9 -115
  207. package/scss/base/_layout.scss +17 -7
  208. package/scss/base/_reboot.scss +34 -1
  209. package/scss/base/_root.scss +143 -124
  210. package/scss/colors/_index.scss +328 -88
  211. package/scss/components/_alert-dialog.scss +111 -0
  212. package/scss/components/_bordered-button.scss +37 -0
  213. package/scss/components/_bordered-prominent-button.scss +46 -0
  214. package/scss/components/_borderless-button.scss +26 -0
  215. package/scss/components/_confirmation-dialog.scss +41 -49
  216. package/scss/components/_content-unavailable.scss +57 -0
  217. package/scss/components/_date-picker.scss +15 -15
  218. package/scss/components/_detail-placeholder.scss +1 -3
  219. package/scss/components/_disclosure-group.scss +85 -34
  220. package/scss/components/_fine-tooltip.scss +84 -0
  221. package/scss/components/_form-view.scss +63 -24
  222. package/scss/components/_glass-button.scss +37 -0
  223. package/scss/components/_glass-prominent-button.scss +47 -0
  224. package/scss/components/_group-box.scss +27 -0
  225. package/scss/components/_h-flex-stack.scss +23 -0
  226. package/scss/components/_h-stack.scss +6 -17
  227. package/scss/components/_image-view.scss +20 -0
  228. package/scss/components/_index.scss +69 -36
  229. package/scss/components/_label-view copy.scss.txt +420 -0
  230. package/scss/components/_label-view.scss +105 -120
  231. package/scss/components/_label-view.scss.txt +536 -0
  232. package/scss/components/_labeled-content.scss +67 -1
  233. package/scss/components/_list-view.scss +70 -29
  234. package/scss/components/_menu-view.scss +96 -61
  235. package/scss/components/_navigation-large-title.scss +23 -0
  236. package/scss/components/_navigation-split-view.scss +3 -3
  237. package/scss/components/_navigation-title.scss +1 -1
  238. package/scss/components/_picker-view.scss +270 -63
  239. package/scss/components/_plain-button.scss +8 -0
  240. package/scss/components/_progress-view.scss +98 -0
  241. package/scss/components/_scroll-view-proxy.scss +24 -22
  242. package/scss/components/_scroll-view-toolbars.scss +8 -2
  243. package/scss/components/_scroll-view.scss +16 -0
  244. package/scss/components/_search-view.scss +23 -0
  245. package/scss/components/_section-view.scss +23 -22
  246. package/scss/components/_sheet-view.scss +16 -6
  247. package/scss/components/_sidebar-toggle.scss +1 -4
  248. package/scss/components/_sticky-container.scss +1 -1
  249. package/scss/components/_tab-bar.scss +17 -3
  250. package/scss/components/_tab-view.scss +12 -2
  251. package/scss/components/_table-column.scss +4 -2
  252. package/scss/components/_table-row.scss +71 -3
  253. package/scss/components/_table-view.scss +27 -18
  254. package/scss/components/_text-field.scss +37 -17
  255. package/scss/components/_text-view.scss +57 -0
  256. package/scss/components/_toggle-view.scss +171 -0
  257. package/scss/components/_tool-bar-item.scss +34 -82
  258. package/scss/components/_tool-bar.scss +77 -57
  259. package/scss/components/_v-stack.scss +8 -2
  260. package/scss/final/_touch-glass.scss +31 -0
  261. package/scss/mixins/_button.scss +44 -0
  262. package/scss/mixins/_color.scss +16 -0
  263. package/scss/mixins/_dialog.scss +1 -0
  264. package/scss/mixins/_index.scss +73 -5
  265. package/scss/placeholders/_buttons.scss +46 -11
  266. package/scss/placeholders/_lists.scss +159 -126
  267. package/scss/transitions/_alert-dialog.scss +18 -0
  268. package/scss/transitions/_confirmation-dialog.scss +8 -0
  269. package/scss/transitions/_fine-tooltip.scss +21 -0
  270. package/scss/transitions/_menu-view.scss +17 -15
  271. package/scss/transitions/_progress-view.scss +23 -0
  272. package/scss/transitions/_sheet-view.scss +30 -0
  273. package/scss/transitions/_tab-bar.scss +6 -5
  274. package/scss/utils/_background.scss +52 -0
  275. package/scss/utils/_frame.scss +59 -40
  276. package/scss/utils/_index.scss +45 -56
  277. package/scss/utils/_scroll-view.scss +1 -1
  278. package/scss/utils/_spacing.scss +1 -1
  279. package/scss/utils/_stacks.scss +34 -164
  280. package/generated/confirmation-dialog/index.d.ts +0 -1
  281. package/generated/confirmation-dialog/index.js +0 -1
  282. package/generated/internal/utils/cash/index.d.ts +0 -22
  283. package/generated/internal/utils/cash/index.js +0 -23
  284. package/generated/lifecycle-observer/index.d.ts +0 -1
  285. package/generated/lifecycle-observer/index.js +0 -1
  286. package/scss/transitions/_dialog.scss +0 -28
  287. package/web-components.html-data/en.json +0 -330
  288. /package/generated/internal/utils/{cash/ancestors.d.ts → ancestors.d.ts} +0 -0
  289. /package/generated/internal/utils/{cash/ancestors.js → ancestors.js} +0 -0
  290. /package/generated/internal/utils/{cash/next-all.d.ts → next-all.d.ts} +0 -0
  291. /package/generated/internal/utils/{cash/next-all.js → next-all.js} +0 -0
  292. /package/generated/internal/utils/{cash/next.d.ts → next.d.ts} +0 -0
  293. /package/generated/internal/utils/{cash/next.js → next.js} +0 -0
  294. /package/generated/internal/utils/{cash/prev-all.d.ts → prev-all.d.ts} +0 -0
  295. /package/generated/internal/utils/{cash/prev-all.js → prev-all.js} +0 -0
  296. /package/generated/internal/utils/{cash/prev.d.ts → prev.d.ts} +0 -0
  297. /package/generated/internal/utils/{cash/prev.js → prev.js} +0 -0
  298. /package/generated/internal/utils/{cash/prop.d.ts → prop.d.ts} +0 -0
  299. /package/generated/internal/utils/{cash/prop.js → prop.js} +0 -0
  300. /package/generated/internal/utils/{cash/siblings.d.ts → siblings.d.ts} +0 -0
  301. /package/generated/internal/utils/{cash/siblings.js → siblings.js} +0 -0
@@ -1,81 +1,61 @@
1
- import { $ } from '../internal/utils';
1
+ import { $, debug } from '../internal/utils';
2
+ import { queryMorph } from '../morphdom';
3
+ import { html } from '../tpl';
4
+ /**
5
+ * @summary A container view that groups related content together.
6
+ *
7
+ * @slot — The default slot.
8
+ * @slot header
9
+ * @slot footer
10
+ */
2
11
  export class SectionView extends HTMLElement {
3
12
  static get observedAttributes() {
4
13
  return ['header', 'footer'];
5
14
  }
6
15
  static #template;
7
16
  static get template() {
8
- return (this.#template ??= $(String.raw `
9
- <div part="root section-main-stack">
10
- <slot></slot>
11
- </div>
12
- <div part="root section-header-stack">
13
- <slot name="header"></slot>
14
- </div>
15
- <div part="root section-footer-stack">
16
- <slot name="footer"></slot>
17
- </div>`, ''));
17
+ return (this.#template ??= $(html `<div part="root section-main-stack">
18
+ <slot></slot>
19
+ </div>
20
+ <div part="root section-header-stack">
21
+ <slot name="header"></slot>
22
+ </div>
23
+ <div part="root section-footer-stack">
24
+ <slot name="footer"></slot>
25
+ </div>`));
18
26
  // <div class="sticky-sentinel" style="grid-area:sentinel;inline-size:100%;block-size:0.1px;pointer-events:none;"></div>
19
27
  }
20
28
  #shadowRoot;
21
- // #observer?: IntersectionObserver
22
- // #sibling?: HTMLElement
23
- // #sentinel?: HTMLElement
24
- // #sentinelIsIntersecting: boolean = false
25
- // #isIntersecting: boolean = false
26
29
  constructor() {
27
30
  super();
28
31
  this.#shadowRoot = this.attachShadow({ mode: 'closed' });
29
- // Snapshot.waitReady.then(() => {
30
32
  this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
31
- // this.#sentinel = this.#shadowRoot.querySelector('.sticky-sentinel') ?? undefined
32
- // })
33
- }
34
- disconnectedCallback() {
35
- console.debug(`${SectionView.name} ⚡️ disconnect`);
36
- // if (this.#sentinel) this.#observer?.unobserve(this.#sentinel)
37
- // this.#observer?.unobserve(this)
38
- }
39
- connectedCallback() {
40
- console.debug(`${SectionView.name} ⚡️ connect`);
41
- // this.#sibling = this.closest('scroll-view') ?? undefined
42
- // Snapshot.waitReady.then(() => {
43
- // if (!(await frame(this))) return // NOTE: Required or BREAKS transitions // self.requestAnimationFrame(() => {
44
- // if (!this.isConnected) return
45
- // const blockSizeProp = getComputedStyle(this).getPropertyValue('--navigation-bar-block-size') || '0', //`${document.documentElement.computedStyleMap().get(`--navigation-bar-block-size`) ?? '0'}`, //
46
- // blockSize = parseFloat(blockSizeProp) * (blockSizeProp.endsWith('rem') ? parseFloat(getComputedStyle(document.documentElement).fontSize) : 1)
47
- // this.#observer = new IntersectionObserver(this.#handleIntersect, {
48
- // root: this.#sibling,
49
- // rootMargin: `-${blockSize}px 0px 0px 0px`,
50
- // threshold: [0, 1],
51
- // })
52
- // if (this.#sentinel) this.#observer.observe(this.#sentinel)
53
- // this.#observer.observe(this)
54
- // })
55
33
  }
56
34
  attributeChangedCallback(name, oldValue, newValue) {
57
- console.debug(`${SectionView.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
58
- // Snapshot.waitReady.then(() => {
35
+ debug(`${SectionView.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
59
36
  switch (name) {
60
37
  case 'header':
61
- let header = this.querySelector(':scope>[slot=header]');
62
- if (newValue) {
63
- header ??= this.appendChild($(`<header slot="header"><label-view line-limit="1" truncation-mode="tail" font="callout"></label-view></header>`));
64
- header.querySelector('label-view')?.setAttribute('title', newValue);
65
- }
66
- else
67
- header?.remove();
38
+ queryMorph('[slot=header]', html `<header slot="header">
39
+ <label-view line-limit="1" truncation-mode="tail" font="callout">
40
+ <span>${newValue}</span>
41
+ </label-view>
42
+ </header>`, this, { removeIf: !newValue });
68
43
  break;
69
44
  case 'footer':
70
- let footer = this.querySelector(':scope>[slot=footer]');
71
- if (newValue) {
72
- footer ??= this.appendChild($(`<footer slot="footer"><label-view line-limit="1" truncation-mode="tail" font="callout"></label-view></footer>`));
73
- footer.querySelector('label-view')?.setAttribute('title', newValue);
74
- }
75
- else
76
- footer?.remove();
45
+ queryMorph('[slot=footer]', html `<footer slot="footer">
46
+ <label-view line-limit="1" truncation-mode="tail" font="callout">
47
+ <span>${newValue}</span>
48
+ </label-view>
49
+ </footer>`, this, { removeIf: !newValue });
77
50
  break;
78
51
  }
79
- // })
52
+ }
53
+ disconnectedCallback() {
54
+ debug(`${SectionView.name} ⚡️ disconnect`);
55
+ //
56
+ }
57
+ connectedCallback() {
58
+ debug(`${SectionView.name} ⚡️ connect`);
59
+ //
80
60
  }
81
61
  }
@@ -1,9 +1,11 @@
1
1
  import { DialogBase } from '../namespace-browser/base';
2
+ /**
3
+ * @summary A dialog that slides up over the current screen.
4
+ */
2
5
  export declare class SheetView extends DialogBase {
3
6
  #private;
4
- static get observedAttributes(): string[];
5
7
  constructor();
6
8
  static polyfillDisconnectedCallback(el: SheetView): void;
7
9
  static polyfillConnectedCallback(el: SheetView): void;
8
- static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]: Pick<MutationRecord, 'attributeName' | 'oldValue' | 'target'>[]): Promise<void>;
10
+ static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]: Pick<MutationRecord, 'attributeName' | 'oldValue' | 'target'>[]): void;
9
11
  }
@@ -1,46 +1,30 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { onoff } from '../internal/utils';
2
+ import { debug, onoff } from '../internal/utils';
3
3
  import { DialogBase } from '../namespace-browser/base';
4
- import { Snapshot } from '../snapshot';
4
+ /**
5
+ * @summary A dialog that slides up over the current screen.
6
+ */
5
7
  export class SheetView extends DialogBase {
6
- static get observedAttributes() {
7
- return ['fine-presentation-large-adaptation'];
8
- }
9
8
  constructor() {
10
9
  super();
11
10
  }
12
11
  static polyfillDisconnectedCallback(el) {
13
- console.debug(`${SheetView.name} ⚡️ disconnect`);
12
+ debug(`${SheetView.name} ⚡️ disconnect`);
14
13
  CleanupRegistry.unregister(el);
15
14
  }
16
15
  static polyfillConnectedCallback(el) {
17
- console.debug(`${SheetView.name} ⚡️ connect`);
16
+ debug(`${SheetView.name} ⚡️ connect`);
18
17
  CleanupRegistry.register(el, onoff([
19
18
  { types: 'cancel', listener: this.#handleCancel },
20
19
  { types: 'keydown', listener: SheetView.#handleKeydown },
21
20
  ], el).on());
22
21
  el.autofocus = true;
23
22
  }
24
- static async polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]) {
25
- console.debug(`${SheetView.name} ⚡️ attr-change [${attributeName}] ("${oldValue}" → "${target.getAttribute(attributeName ?? '')}")`);
26
- await Snapshot.waitReady; // NOTE: wait for config
27
- switch (attributeName) {
28
- case 'fine-presentation-large-adaptation':
29
- const node = target;
30
- CleanupRegistry.unregister(node, 'mediaquery');
31
- if ('bottom-bar' !== target.getAttribute(attributeName ?? ''))
32
- break;
33
- const mediaQueryList = self.matchMedia(`(pointer: fine) and (min-width: ${Snapshot.config['ipad-sheet-view-inline-size']}) and (min-height: ${Snapshot.config['ipad-sheet-view-height']})`);
34
- SheetView.#handleMediaChange(node, new MediaQueryListEvent(`media-change`, {
35
- matches: mediaQueryList.matches,
36
- })); // Initial check
37
- const handler1 = SheetView.#handleMediaChange.bind(null, node);
38
- CleanupRegistry.register(node, onoff('change', handler1, mediaQueryList).on(), 'mediaquery');
39
- break;
40
- }
23
+ static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]) {
24
+ debug(`${SheetView.name} ⚡️ attr-change [${attributeName}] ("${oldValue}" → "${target.getAttribute(attributeName ?? '')}")`);
41
25
  }
42
26
  static #handleKeydown = (evt) => {
43
- console.debug(`${SheetView.name} ⚡️ ${evt?.type} (${evt.key})`);
27
+ debug(`${SheetView.name} ⚡️ ${evt?.type} (${evt.key})`);
44
28
  if ('Escape' !== evt.key)
45
29
  return;
46
30
  evt.preventDefault();
@@ -48,22 +32,9 @@ export class SheetView extends DialogBase {
48
32
  evt.stopPropagation();
49
33
  };
50
34
  static #handleCancel = (evt) => {
51
- console.debug(`${SheetView.name} ⚡️ ${evt?.type} (${evt.cancelable})`);
35
+ debug(`${SheetView.name} ⚡️ ${evt?.type} (${evt.cancelable})`);
52
36
  if (!evt.cancelable)
53
37
  return;
54
38
  evt.preventDefault();
55
39
  };
56
- static #handleMediaChange = (el, evt) => {
57
- console.debug(`${SheetView.name} ⚡️ ${evt?.type}`);
58
- if (evt.matches)
59
- for (const item of el.querySelectorAll(':scope>tool-bar>[slot^="top-bar-"]')) {
60
- item.dataset.previousSlot = item.getAttribute('slot') ?? '';
61
- item.slot = 'bottom-bar-trailing';
62
- }
63
- else
64
- for (const item of el.querySelectorAll(':scope>tool-bar>[data-previous-slot]')) {
65
- item.slot = item.dataset.previousSlot ?? '';
66
- delete item.dataset.previousSlot;
67
- }
68
- };
69
40
  }
@@ -1,7 +1,15 @@
1
+ /**
2
+ * @summary A control that shows or hides the sidebar view.
3
+ */
1
4
  export declare class SidebarToggle extends HTMLElement {
2
5
  #private;
3
6
  constructor();
4
- connectedCallback(): void;
5
7
  disconnectedCallback(): void;
8
+ connectedCallback(): void;
6
9
  private static query;
7
10
  }
11
+ declare global {
12
+ interface HTMLElementTagNameMap {
13
+ 'sidebar-toggle': SidebarToggle;
14
+ }
15
+ }
@@ -1,103 +1,80 @@
1
1
  var _a;
2
2
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
3
3
  import { ResizeObserverSingleton } from '../internal/class/resize-observer-singleton';
4
- import { $, debounce, onoff } from '../internal/utils';
4
+ import { debounce, debug, onoff } from '../internal/utils';
5
5
  const observers = new ResizeObserverSingleton();
6
+ /**
7
+ * @summary A control that shows or hides the sidebar view.
8
+ */
6
9
  export class SidebarToggle extends HTMLElement {
7
- // #ro
8
- // #io
9
10
  constructor() {
10
11
  super();
11
- // this.#ro = new ResizeObserver(
12
- // debounce(this.#handleMeasure.bind(this), 100, true)
13
- // )
14
- // this.#io = new IntersectionObserver((entries) => {
15
- // this._checkVisibility2(entries)
16
- // })
12
+ }
13
+ disconnectedCallback() {
14
+ debug(`${_a.name} ⚡️ disconnect`);
15
+ observers.unobserve(this);
16
+ CleanupRegistry.unregister(this);
17
17
  }
18
18
  connectedCallback() {
19
- console.debug(`${_a.name} ⚡️ connect`);
19
+ debug(`${_a.name} ⚡️ connect`);
20
20
  CleanupRegistry.register(this, onoff('click', this.#handleClick, this).on());
21
21
  const entry = {
22
22
  target: this,
23
23
  };
24
- // NOTE: wait for config
25
- // Snapshot.waitReady.then(() => {
26
24
  observers.observe(this, debounce(_a.#handleMeasure, 100, true)); //this.#ro?.observe(this)
27
- // this.#io.observe(this)
28
25
  // @ts-expect-error
29
26
  _a.#handleMeasure([entry]);
30
- // })
31
- }
32
- disconnectedCallback() {
33
- console.debug(`${_a.name} ⚡️ disconnect`);
34
- observers.unobserve(this); //this.#ro?.disconnect()
35
- // this.#io.disconnect()
36
- CleanupRegistry.unregister(this);
37
27
  }
38
28
  static query(target) {
39
- const container = target?.closest('navigation-split-view,tab-view'), sideBar = container?.querySelector(':scope > [is=sidebar-view]');
29
+ const container = target?.closest('navigation-split-view,tab-view'), sideBar = container?.querySelector(':scope>[is=sidebar-view]');
40
30
  return { container, sideBar };
41
31
  }
42
32
  // This triggers on show/hide of any of sidebar-toggle elements
43
33
  static #handleMeasure(entry) {
44
- console.debug(`${_a.name} ⚡️ measure`);
45
- const target = entry?.target;
34
+ debug(`${_a.name} ⚡️ measure`);
35
+ const { target } = entry ?? {};
36
+ if (!(target instanceof HTMLElement))
37
+ return;
46
38
  // set/remove css var/prop to parent based on shown/hidden
47
- // for (const { target } of entries) {
48
- const tv = target?.parentElement, width = target?.offsetWidth ?? 0;
49
- // const gapProp =
50
- // getComputedStyle(tg).getPropertyValue('--toolbar-col-gap') || '0',
51
- // gap = parseFloat(gapProp) * 1 //(gapProp.endsWith('rem')? parseFloat(getComputedStyle(document.documentElement).fontSize): 1)
52
- if (0 < width)
53
- $.prop('--sidebar-toggle-padding-inline-start', `${width}px`, tv); //tv?.style?.setProperty?.(Snapshot.config!['sidebar-toggle-padding-inline-start-css-prop'], `${width}px`)
54
- else
55
- $.prop('--sidebar-toggle-padding-inline-start', null, tv); //tv?.style?.removeProperty?.(Snapshot.config!['sidebar-toggle-padding-inline-start-css-prop'])
56
- // }
39
+ const tv = target.parentElement;
40
+ // inlineSize = entry.borderBoxSize?.at(0)?.inlineSize ?? entry.contentRect?.width ?? 0,
41
+ // blockSize = entry.borderBoxSize?.at(0)?.blockSize ?? entry.contentRect?.height ?? 0
42
+ self.requestAnimationFrame(() => {
43
+ const inlineSize = target.offsetWidth ?? 0;
44
+ if (0 < inlineSize)
45
+ tv?.style?.setProperty?.('--sidebar-toggle-padding-inline-start', `${inlineSize}px`); //$.prop('--sidebar-toggle-padding-inline-start', `${inlineSize}px`, tv) //
46
+ else
47
+ tv?.style?.removeProperty?.('--sidebar-toggle-padding-inline-start'); //$.prop('--sidebar-toggle-padding-inline-start', null, tv) //
48
+ });
57
49
  // auto close IF open
58
- // for (const { target } of entries) {
59
50
  const { container, sideBar } = _a.query(target); //target?.closest('navigation-split-view,tab-view')
60
- // const sideBar = container?.querySelector<HTMLDialogElement>(':scope > dialog[is=sidebar-view]')
61
51
  if (!sideBar?.open)
62
52
  return;
63
- switch (container?.tagName) {
64
- case 'NAVIGATION-SPLIT-VIEW':
65
- // const sideBar = target?.parentElement?.querySelector<HTMLDialogElement>(':scope > dialog[is=sidebar-view]')
66
- // if (!sideBar?.open) return
67
- if (0 < target.offsetWidth && 0 < target.offsetHeight)
68
- return;
69
- // sideBar?.close?.()
70
- break;
71
- case 'TAB-VIEW':
72
- // const tabBar = container.querySelector<HTMLDialogElement>(':scope > dialog[is=tab-bar]')
73
- // if (!tabBar?.open) return
74
- // scan all toggles for anyone that is visible, sign that sidebar should stay open
75
- if ([
76
- ...container.querySelectorAll(":scope > sidebar-toggle,:scope > [is=tab-bar] > sidebar-toggle,:scope > [is='sidebar-view'] > tool-bar > sidebar-toggle"),
77
- ].some(({ offsetWidth, offsetHeight }) => 0 < offsetWidth && 0 < offsetHeight))
78
- return;
79
- //tabBar?.close?.()
80
- break;
81
- }
82
- sideBar?.close?.();
83
- // }
53
+ self.requestAnimationFrame(() => {
54
+ switch (container?.tagName) {
55
+ case 'NAVIGATION-SPLIT-VIEW':
56
+ if (0 < target.offsetWidth && 0 < target.offsetHeight)
57
+ return;
58
+ break;
59
+ case 'TAB-VIEW':
60
+ // scan all toggles for anyone that is visible, sign that sidebar should stay open
61
+ if ([
62
+ ...container.querySelectorAll(':scope > sidebar-toggle,:scope > [is=tab-bar] > sidebar-toggle' //,:scope > [is='sidebar-view'] > tool-bar > sidebar-toggle" ?? FIXME: removed this bc/ inside sidebar!
63
+ ),
64
+ ].some(({ offsetWidth, offsetHeight }) => 0 < offsetWidth && 0 < offsetHeight))
65
+ return;
66
+ break;
67
+ }
68
+ sideBar?.close?.();
69
+ });
84
70
  }
85
- // _checkVisibility2(entries) {
86
- // entries.forEach((entry) => {
87
- // console.log('Visible in viewport?', entry.isIntersecting)
88
- // })
89
- // }
90
- #handleClick(evt) {
91
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
92
- const target = evt.target;
71
+ #handleClick({ target, type }) {
72
+ debug(`${_a.name} ⚡️ ${type}`);
73
+ if (!(target instanceof HTMLElement))
74
+ return;
93
75
  if (!target?.closest('button'))
94
76
  return;
95
77
  const { sideBar } = _a.query(target);
96
- // const container = target?.closest('tab-view,navigation-split-view')
97
- // const dialog =
98
- // 'TAB-VIEW' === container?.tagName
99
- // ? container.querySelector<TabBar>('dialog[is="tab-bar"]')
100
- // : container?.querySelector<SidebarView>('dialog[is="sidebar-view"]')
101
78
  if (!sideBar?.open)
102
79
  sideBar?.showModal();
103
80
  else
@@ -1,4 +1,7 @@
1
1
  import { DialogBase } from '../namespace-browser/base';
2
+ /**
3
+ * @summary A container view that arranges navigation destinations in a single column.
4
+ */
2
5
  export declare class SidebarView extends DialogBase {
3
6
  #private;
4
7
  constructor();
@@ -1,6 +1,9 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { onoff, touchGlass } from '../internal/utils';
2
+ import { debug, onoff, touchGlass } from '../internal/utils';
3
3
  import { DialogBase } from '../namespace-browser/base';
4
+ /**
5
+ * @summary A container view that arranges navigation destinations in a single column.
6
+ */
4
7
  export class SidebarView extends DialogBase {
5
8
  constructor() {
6
9
  super();
@@ -11,19 +14,23 @@ export class SidebarView extends DialogBase {
11
14
  }
12
15
  static polyfillConnectedCallback(el) {
13
16
  CleanupRegistry.register(el, onoff('click', SidebarView.#handleClick, el).on());
14
- CleanupRegistry.register(el, onoff(touchGlass(el, (t) => t, (evt) => {
15
- if (evt.target.matches('[is=sidebar-view]'))
17
+ CleanupRegistry.register(el, onoff(touchGlass(el, (t) => t, ({ target }) => {
18
+ if (!(target instanceof HTMLElement))
19
+ return true;
20
+ if (target.matches('[is=sidebar-view]'))
16
21
  return false;
17
- if (evt.target.closest('tool-bar-item'))
22
+ if (target.closest('tool-bar-item'))
18
23
  return false;
19
24
  return true;
20
25
  }), el).on());
21
26
  el.autofocus = true;
22
27
  }
23
- /** Autoclose on click outside. */
24
- static #handleClick = async (evt) => {
25
- console.debug(`${SidebarView.name} ⚡️ ${evt?.type}`);
26
- if ('DIALOG' === evt.target.tagName && 'sidebar-view' === evt.target.getAttribute('is'))
27
- evt?.target?.close?.();
28
+ // Autoclose on click outside.
29
+ static #handleClick = async ({ target, type }) => {
30
+ debug(`${SidebarView.name} ⚡️ ${type}`);
31
+ if (!(target instanceof HTMLElement))
32
+ return;
33
+ if (target instanceof HTMLDialogElement && 'sidebar-view' === target.getAttribute('is'))
34
+ target.close?.();
28
35
  };
29
36
  }
@@ -1,6 +1,11 @@
1
1
  export declare class StickyContainer extends HTMLElement {
2
2
  #private;
3
3
  constructor();
4
- connectedCallback(): void;
5
4
  disconnectedCallback(): void;
5
+ connectedCallback(): void;
6
+ }
7
+ declare global {
8
+ interface HTMLElementTagNameMap {
9
+ 'sticky-container': StickyContainer;
10
+ }
6
11
  }
@@ -1,20 +1,22 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { onoff } from '../internal/utils';
2
+ import { debug, onoff } from '../internal/utils';
3
3
  export class StickyContainer extends HTMLElement {
4
4
  constructor() {
5
5
  super();
6
6
  }
7
+ disconnectedCallback() {
8
+ debug(`${StickyContainer.name} ⚡️ disconnect`);
9
+ CleanupRegistry.unregister(this);
10
+ }
7
11
  connectedCallback() {
8
- console.debug(`${StickyContainer.name} ⚡️ connect`);
12
+ debug(`${StickyContainer.name} ⚡️ connect`);
9
13
  // CleanupRegistry.register(this, onoff('transitionend transitionstart transitioncancel', this.#handleTransitionrun as unknown as EventListener, this).on())
10
14
  CleanupRegistry.register(this, onoff('transitionrun', this.#handleTransitionrun, this).on());
11
15
  }
12
- disconnectedCallback() {
13
- console.debug(`${StickyContainer.name} ⚡️ disconnect`);
14
- CleanupRegistry.unregister(this);
15
- }
16
16
  #handleTransitionrun = ({ target, propertyName, pseudoElement }) => {
17
- if ('--stuck' !== propertyName || '::before' !== pseudoElement || !target?.matches('sticky-container'))
17
+ if (!(target instanceof HTMLElement))
18
+ return;
19
+ if ('--stuck' !== propertyName || '::before' !== pseudoElement || !target.matches('sticky-container'))
18
20
  return;
19
21
  const stuck = self.getComputedStyle(this, 'before').getPropertyValue('--stuck');
20
22
  this.toggleAttribute('stuck', '1' === stuck);
@@ -1,4 +1,7 @@
1
1
  import { DialogBase } from '../namespace-browser/base';
2
+ /**
3
+ * @summary A container view that groups tab-items together along the top or bottom of the screen.
4
+ */
2
5
  export declare class TabBar extends DialogBase {
3
6
  #private;
4
7
  constructor();
@@ -1,33 +1,37 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { onoff, touchGlass } from '../internal/utils';
2
+ import { debug, onoff, touchGlass } from '../internal/utils';
3
3
  import { DialogBase } from '../namespace-browser/base';
4
+ /**
5
+ * @summary A container view that groups tab-items together along the top or bottom of the screen.
6
+ */
4
7
  export class TabBar extends DialogBase {
5
8
  constructor() {
6
9
  super();
7
10
  }
8
11
  static polyfillDisconnectedCallback(el) {
9
- console.debug(`${TabBar.name} ⚡️ disconnect`);
12
+ debug(`${TabBar.name} ⚡️ disconnect`);
10
13
  el.removeEventListener('click', TabBar.#handleClick);
11
14
  CleanupRegistry.unregister(el);
12
15
  }
13
16
  static polyfillConnectedCallback(el) {
14
- console.debug(`${TabBar.name} ⚡️ connect`);
17
+ debug(`${TabBar.name} ⚡️ connect`);
15
18
  el.autofocus = true;
16
- // Snapshot.waitReadyFor(el).then((r) => {
17
- // if (!r) return
18
19
  CleanupRegistry.register(el, onoff('click', TabBar.#handleClick, el).on());
19
- CleanupRegistry.register(el, onoff(touchGlass(el, (t) => t, (evt) => {
20
- if (evt.target.matches('[is=tab-bar]'))
20
+ CleanupRegistry.register(el, onoff(touchGlass(el, (t) => t, ({ target }) => {
21
+ if (!(target instanceof HTMLElement))
22
+ return true;
23
+ if (target.matches('[is=tab-bar]'))
21
24
  return false;
22
- if (evt.target.closest('tool-bar-item'))
25
+ if (target.closest('tool-bar-item'))
23
26
  return false;
24
27
  return true;
25
28
  }), el).on());
26
- // })
27
29
  }
28
- static #handleClick = async (event) => {
29
- console.debug(`${TabBar.name} ⚡️ ${event?.type}`);
30
- if ('DIALOG' === event.target.tagName && 'tab-bar' === event.target.getAttribute('is'))
31
- event?.target?.close?.();
30
+ static #handleClick = async ({ target, type }) => {
31
+ debug(`${TabBar.name} ⚡️ ${type}`);
32
+ if (!(target instanceof HTMLElement))
33
+ return;
34
+ if (target instanceof HTMLDialogElement && 'tab-bar' === target.getAttribute('is'))
35
+ target.close?.();
32
36
  };
33
37
  }
@@ -1,4 +1,7 @@
1
1
  import { ButtonBase } from '../namespace-browser/base';
2
+ /**
3
+ * @summary A control that switches the tab view to this tab.
4
+ */
2
5
  export declare class TabItem extends ButtonBase {
3
6
  #private;
4
7
  constructor();
@@ -1,17 +1,20 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { onoff } from '../internal/utils';
2
+ import { debug, onoff } from '../internal/utils';
3
3
  import { ButtonBase } from '../namespace-browser/base';
4
4
  import { TabView } from './tab-view';
5
+ /**
6
+ * @summary A control that switches the tab view to this tab.
7
+ */
5
8
  export class TabItem extends ButtonBase {
6
9
  constructor() {
7
10
  super();
8
11
  }
9
12
  static polyfillDisconnectedCallback(btn) {
10
- console.debug(`${TabItem.name} ⚡️ disconnect`);
13
+ debug(`${TabItem.name} ⚡️ disconnect`);
11
14
  CleanupRegistry.unregister(btn);
12
15
  }
13
16
  static polyfillConnectedCallback(btn) {
14
- console.debug(`${TabItem.name} ⚡️ connect`);
17
+ debug(`${TabItem.name} ⚡️ connect`);
15
18
  Object.assign(btn, {
16
19
  tabIndex: 0,
17
20
  ariaSelected: 'false',
@@ -31,7 +34,7 @@ export class TabItem extends ButtonBase {
31
34
  });
32
35
  }
33
36
  static #handleTabMoreStackAllowance = async (btn, evt) => {
34
- console.debug(`${TabItem.name} ⚡️ ${evt?.type}`);
37
+ debug(`${TabItem.name} ⚡️ ${evt?.type}`);
35
38
  const tv = btn.closest('tab-view');
36
39
  if (!tv)
37
40
  return;
@@ -40,12 +43,15 @@ export class TabItem extends ButtonBase {
40
43
  btn.hidden = 'bottom-bar' !== tv.tabBarPlacement;
41
44
  };
42
45
  static #handleTabRevealOrSwap = async (btn, evt) => {
43
- console.debug(`${TabItem.name} ⚡️ ${evt?.type}`);
44
- if (evt.detail?.tag !== btn.value)
46
+ debug(`${TabItem.name} ⚡️ ${evt?.type}`);
47
+ const tv = btn?.closest('tab-view');
48
+ if (!tv)
45
49
  return;
50
+ // if (evt.detail?.tag !== btn.value) return
46
51
  // await Snapshot.waitReady
47
- const isSelected = 'tabreveal' === evt?.type;
48
- btn.ariaSelected = `${isSelected}`;
52
+ const isSelected = tv.selectedTab.map(({ id }) => id).includes(btn.value); //'tabreveal' === evt?.type
53
+ if (`${isSelected}` !== btn.ariaSelected)
54
+ btn.ariaSelected = `${isSelected}`;
49
55
  if (!isSelected)
50
56
  return;
51
57
  setTimeout(() => {
@@ -58,9 +64,10 @@ export class TabItem extends ButtonBase {
58
64
  });
59
65
  }, 100);
60
66
  };
61
- static #handleClick = async (evt) => {
62
- console.debug(`${TabItem.name} ⚡️ ${evt?.type}`);
63
- const btn = evt.currentTarget;
67
+ static #handleClick = async ({ type, currentTarget: btn }) => {
68
+ debug(`${TabItem.name} ⚡️ ${type}`);
69
+ if (!(btn instanceof HTMLElement))
70
+ return;
64
71
  // const tag = btn.getAttribute('value')
65
72
  // if (!tag) return // sidebartoggle > tab-item //throw new DOMException(`Attribute "tag" is set but invalid`, 'InvalidStateError')
66
73
  const tv = btn.closest('tab-view');
@@ -104,14 +111,14 @@ export class TabItem extends ButtonBase {
104
111
  for (const tab of tabs.reverse())
105
112
  if (tv.selectedTab.includes(tab)) {
106
113
  const eventType = 'tabroot';
107
- console.debug(`${TabItem.name} 💡 ${eventType}`);
114
+ debug(`${TabItem.name} 💡 ${eventType}`);
108
115
  tab?.dispatchEvent(new CustomEvent(eventType, { bubbles: true, composed: true }));
109
116
  return; // skip rest no selection!
110
117
  }
111
118
  }
112
119
  else if ('->' === dir) {
113
120
  const eventType = 'tabroot';
114
- console.debug(`${TabItem.name} 💡 ${eventType}`);
121
+ debug(`${TabItem.name} 💡 ${eventType}`);
115
122
  tabs.at(0)?.dispatchEvent(new CustomEvent(eventType, { bubbles: true, composed: true }));
116
123
  }
117
124
  // SECTION: finally, submit new tabs