@swiftwc/ui 0.0.0-dev.8 → 0.0.0-dev.81

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 (243) hide show
  1. package/generated/buses/alert-dialog.d.ts +2 -0
  2. package/generated/buses/alert-dialog.js +1 -0
  3. package/generated/buses/confirmation-dialog.d.ts +2 -0
  4. package/generated/buses/confirmation-dialog.js +1 -0
  5. package/generated/buses/index.d.ts +6 -0
  6. package/generated/buses/index.js +6 -0
  7. package/generated/buses/lifecycle-observer.d.ts +2 -0
  8. package/generated/buses/lifecycle-observer.js +1 -0
  9. package/generated/client/index.d.ts +21 -10
  10. package/generated/client/index.js +177 -194
  11. package/generated/components/alert-dialog.d.ts +8 -0
  12. package/generated/components/alert-dialog.js +99 -0
  13. package/generated/components/body-view.js +5 -2
  14. package/generated/components/bordered-button.d.ts +10 -0
  15. package/generated/components/bordered-button.js +39 -3
  16. package/generated/components/bordered-prominent-button.d.ts +10 -0
  17. package/generated/components/bordered-prominent-button.js +39 -3
  18. package/generated/components/borderless-button.d.ts +9 -1
  19. package/generated/components/borderless-button.js +32 -11
  20. package/generated/components/color-scheme.d.ts +7 -0
  21. package/generated/components/color-scheme.js +54 -0
  22. package/generated/components/confirmation-dialog.d.ts +1 -1
  23. package/generated/components/confirmation-dialog.js +43 -32
  24. package/generated/components/content-unavailable-view.d.ts +24 -0
  25. package/generated/components/content-unavailable-view.js +81 -0
  26. package/generated/components/date-picker.d.ts +2 -12
  27. package/generated/components/date-picker.js +96 -65
  28. package/generated/components/disclosure-group.d.ts +5 -0
  29. package/generated/components/disclosure-group.js +18 -7
  30. package/generated/components/fine-tooltip.d.ts +7 -0
  31. package/generated/components/fine-tooltip.js +107 -0
  32. package/generated/components/form-view.d.ts +3 -0
  33. package/generated/components/form-view.js +8 -3
  34. package/generated/components/glass-button.d.ts +10 -0
  35. package/generated/components/glass-button.js +39 -3
  36. package/generated/components/glass-prominent-button.d.ts +10 -0
  37. package/generated/components/glass-prominent-button.js +39 -3
  38. package/generated/components/h-stack.d.ts +14 -0
  39. package/generated/components/h-stack.js +23 -0
  40. package/generated/components/image-view.d.ts +9 -0
  41. package/generated/components/image-view.js +64 -0
  42. package/generated/components/index.d.ts +11 -3
  43. package/generated/components/index.js +11 -3
  44. package/generated/components/label-view.d.ts +6 -1
  45. package/generated/components/label-view.js +40 -60
  46. package/generated/components/labeled-content.d.ts +9 -0
  47. package/generated/components/labeled-content.js +116 -0
  48. package/generated/components/list-view.d.ts +3 -0
  49. package/generated/components/list-view.js +20 -17
  50. package/generated/components/menu-view.d.ts +4 -1
  51. package/generated/components/menu-view.js +60 -51
  52. package/generated/components/navigation-large-title.js +9 -5
  53. package/generated/components/navigation-split-view.d.ts +4 -1
  54. package/generated/components/navigation-split-view.js +13 -6
  55. package/generated/components/navigation-stack.d.ts +4 -1
  56. package/generated/components/navigation-stack.js +16 -9
  57. package/generated/components/navigation-title.d.ts +1 -1
  58. package/generated/components/navigation-title.js +58 -55
  59. package/generated/components/picker-view.d.ts +32 -4
  60. package/generated/components/picker-view.js +924 -234
  61. package/generated/components/plain-button.js +5 -3
  62. package/generated/components/progress-view.d.ts +13 -0
  63. package/generated/components/progress-view.js +120 -0
  64. package/generated/components/screen-view.js +3 -1
  65. package/generated/components/scroll-view-proxy.d.ts +8 -0
  66. package/generated/components/scroll-view-proxy.js +17 -0
  67. package/generated/components/scroll-view.d.ts +1 -1
  68. package/generated/components/scroll-view.js +101 -85
  69. package/generated/components/search-view.d.ts +7 -0
  70. package/generated/components/search-view.js +30 -0
  71. package/generated/components/section-view.d.ts +1 -1
  72. package/generated/components/section-view.js +35 -30
  73. package/generated/components/sheet-view.d.ts +1 -2
  74. package/generated/components/sheet-view.js +32 -39
  75. package/generated/components/sidebar-toggle.js +44 -66
  76. package/generated/components/sidebar-view.js +13 -8
  77. package/generated/components/sticky-container.js +8 -4
  78. package/generated/components/tab-bar.d.ts +3 -0
  79. package/generated/components/tab-bar.js +20 -10
  80. package/generated/components/tab-item.js +24 -13
  81. package/generated/components/tab-view.js +25 -17
  82. package/generated/components/table-view.d.ts +5 -0
  83. package/generated/components/table-view.js +55 -77
  84. package/generated/components/text-field.d.ts +2 -2
  85. package/generated/components/text-field.js +95 -88
  86. package/generated/components/toggle-view.d.ts +28 -0
  87. package/generated/components/toggle-view.js +224 -0
  88. package/generated/components/tool-bar-item-group.js +21 -4
  89. package/generated/components/tool-bar-item.d.ts +4 -1
  90. package/generated/components/tool-bar-item.js +57 -10
  91. package/generated/components/tool-bar.d.ts +12 -0
  92. package/generated/components/tool-bar.js +27 -11
  93. package/generated/components/v-keyboard.d.ts +3 -1
  94. package/generated/components/v-keyboard.js +12 -6
  95. package/generated/components/v-stack.d.ts +12 -0
  96. package/generated/components/v-stack.js +17 -2
  97. package/generated/css/index.css +2533 -941
  98. package/generated/events/alert-dialog.d.ts +8 -0
  99. package/generated/events/alert-dialog.js +1 -0
  100. package/generated/events/confirmation-dialog.d.ts +2 -2
  101. package/generated/events/index.d.ts +2 -0
  102. package/generated/events/index.js +2 -0
  103. package/generated/events/picker-view.d.ts +7 -0
  104. package/generated/events/scroll-view.js +4 -0
  105. package/generated/events/tab-view.d.ts +6 -2
  106. package/generated/events/text-field.js +3 -0
  107. package/generated/events/toggle-view.d.ts +9 -0
  108. package/generated/events/toggle-view.js +4 -0
  109. package/generated/i18n/index.d.ts +20 -10
  110. package/generated/i18n/index.js +82 -54
  111. package/generated/i18n/locales/el.d.ts +16 -0
  112. package/generated/i18n/locales/el.js +16 -0
  113. package/generated/i18n/locales/en.d.ts +16 -0
  114. package/generated/i18n/locales/en.js +16 -0
  115. package/generated/i18n/locales/index.d.ts +4 -0
  116. package/generated/i18n/locales/index.js +4 -0
  117. package/generated/internal/class/css-style-observer.js +3 -2
  118. package/generated/internal/class/form-associated-base.d.ts +0 -4
  119. package/generated/internal/class/form-associated-base.js +23 -38
  120. package/generated/internal/class/mutation-observer-set.d.ts +9 -0
  121. package/generated/internal/class/mutation-observer-set.js +42 -0
  122. package/generated/internal/class/mutation-observer-singleton.js +18 -0
  123. package/generated/internal/class/navigation-view.d.ts +1 -1
  124. package/generated/internal/class/navigation-view.js +38 -43
  125. package/generated/internal/decorators/adaptive-slot.d.ts +1 -0
  126. package/generated/internal/decorators/adaptive-slot.js +50 -0
  127. package/generated/internal/decorators/custom-element.d.ts +1 -1
  128. package/generated/internal/decorators/custom-element.js +2 -1
  129. package/generated/internal/decorators/index.d.ts +6 -0
  130. package/generated/internal/decorators/index.js +6 -0
  131. package/generated/internal/decorators/microtask-on-connected.d.ts +39 -0
  132. package/generated/internal/decorators/microtask-on-connected.js +67 -0
  133. package/generated/internal/privateNamespace.d.ts +10 -0
  134. package/generated/internal/privateNamespace.js +168 -1
  135. package/generated/internal/utils/cash/index.d.ts +4 -3
  136. package/generated/internal/utils/cash/index.js +6 -4
  137. package/generated/internal/utils/dev-flags.d.ts +3 -0
  138. package/generated/internal/utils/dev-flags.js +5 -0
  139. package/generated/internal/utils/ensure-placeholder.d.ts +1 -0
  140. package/generated/internal/utils/ensure-placeholder.js +55 -0
  141. package/generated/internal/utils/index.d.ts +7 -2
  142. package/generated/internal/utils/index.js +9 -2
  143. package/generated/internal/utils/is-inside.d.ts +1 -0
  144. package/generated/internal/utils/is-inside.js +4 -0
  145. package/generated/internal/utils/list-active.js +67 -12
  146. package/generated/internal/utils/render-label-icon.d.ts +2 -0
  147. package/generated/internal/utils/render-label-icon.js +19 -0
  148. package/generated/internal/utils/render-label-title.d.ts +2 -0
  149. package/generated/internal/utils/render-label-title.js +16 -0
  150. package/generated/internal/utils/render-label.d.ts +1 -0
  151. package/generated/internal/utils/render-label.js +19 -0
  152. package/generated/internal/utils/touch-glass.js +5 -5
  153. package/generated/namespace-browser/base.d.ts +12 -3
  154. package/generated/namespace-browser/base.js +41 -18
  155. package/generated/namespace-browser/event.d.ts +10 -0
  156. package/generated/namespace-browser/event.js +1 -0
  157. package/generated/snapshot/index.d.ts +3 -1
  158. package/generated/snapshot/index.js +25 -2
  159. package/generated/tpl/html.d.ts +5 -0
  160. package/generated/tpl/html.js +3 -0
  161. package/generated/tpl/index.d.ts +4 -0
  162. package/generated/tpl/index.js +4 -0
  163. package/generated/tpl/render.d.ts +2 -0
  164. package/generated/tpl/render.js +132 -0
  165. package/package.json +18 -4
  166. package/scss/_components.scss +14 -0
  167. package/scss/_functions.scss +10 -0
  168. package/scss/_mixins.scss +4 -0
  169. package/scss/_transitions.scss +6 -1
  170. package/scss/_vars.scss +9 -2
  171. package/scss/base/_layout.scss +17 -7
  172. package/scss/base/_reboot.scss +34 -1
  173. package/scss/base/_root.scss +117 -114
  174. package/scss/colors/_index.scss +304 -85
  175. package/scss/components/_alert-dialog.scss +111 -0
  176. package/scss/components/_bordered-button.scss +35 -0
  177. package/scss/components/_bordered-prominent-button.scss +45 -0
  178. package/scss/components/_borderless-button.scss +25 -0
  179. package/scss/components/_confirmation-dialog.scss +41 -49
  180. package/scss/components/_content-unavailable-view.scss +56 -0
  181. package/scss/components/_date-picker.scss +15 -15
  182. package/scss/components/_detail-placeholder.scss +1 -3
  183. package/scss/components/_disclosure-group.scss +84 -33
  184. package/scss/components/_fine-tooltip.scss +84 -0
  185. package/scss/components/_form-view.scss +58 -20
  186. package/scss/components/_glass-button.scss +35 -0
  187. package/scss/components/_glass-prominent-button.scss +46 -0
  188. package/scss/components/_group-box.scss +27 -0
  189. package/scss/components/_h-flex-stack.scss +23 -0
  190. package/scss/components/_h-stack.scss +21 -15
  191. package/scss/components/_image-view.scss +20 -0
  192. package/scss/components/_index.scss +40 -20
  193. package/scss/components/_label-view copy.scss.txt +420 -0
  194. package/scss/components/_label-view.scss +94 -110
  195. package/scss/components/_label-view.scss.txt +536 -0
  196. package/scss/components/_labeled-content.scss +59 -1
  197. package/scss/components/_list-view.scss +65 -25
  198. package/scss/components/_menu-view.scss +95 -60
  199. package/scss/components/_navigation-large-title.scss +17 -0
  200. package/scss/components/_navigation-split-view.scss +3 -3
  201. package/scss/components/_picker-view.scss +259 -59
  202. package/scss/components/_plain-button.scss +7 -0
  203. package/scss/components/_progress-view.scss +98 -0
  204. package/scss/components/_scroll-view-proxy.scss +22 -20
  205. package/scss/components/_scroll-view.scss +4 -0
  206. package/scss/components/_search-view.scss +22 -0
  207. package/scss/components/_section-view.scss +23 -22
  208. package/scss/components/_sheet-view.scss +16 -6
  209. package/scss/components/_sidebar-toggle.scss +1 -4
  210. package/scss/components/_sticky-container.scss +1 -1
  211. package/scss/components/_tab-bar.scss +17 -3
  212. package/scss/components/_tab-view.scss +4 -2
  213. package/scss/components/_table-column.scss +2 -0
  214. package/scss/components/_table-row.scss +69 -1
  215. package/scss/components/_table-view.scss +22 -14
  216. package/scss/components/_text-field.scss +37 -17
  217. package/scss/components/_toggle-view.scss +112 -0
  218. package/scss/components/_tool-bar-item.scss +34 -82
  219. package/scss/components/_tool-bar.scss +77 -57
  220. package/scss/components/_v-stack.scss +9 -2
  221. package/scss/final/_touch-glass.scss +24 -0
  222. package/scss/mixins/_button.scss +44 -0
  223. package/scss/mixins/_color.scss +16 -0
  224. package/scss/mixins/_dialog.scss +1 -0
  225. package/scss/mixins/_index.scss +64 -2
  226. package/scss/placeholders/_buttons.scss +44 -10
  227. package/scss/placeholders/_lists.scss +133 -126
  228. package/scss/transitions/_alert-dialog.scss +18 -0
  229. package/scss/transitions/_confirmation-dialog.scss +8 -0
  230. package/scss/transitions/_fine-tooltip.scss +21 -0
  231. package/scss/transitions/_menu-view.scss +17 -15
  232. package/scss/transitions/_progress-view.scss +23 -0
  233. package/scss/transitions/_sheet-view.scss +30 -0
  234. package/scss/transitions/_tab-bar.scss +6 -5
  235. package/scss/utils/_frame.scss +42 -0
  236. package/scss/utils/_index.scss +67 -52
  237. package/scss/utils/_stacks.scss +56 -73
  238. package/web-components.html-data/en.json +623 -24
  239. package/generated/confirmation-dialog/index.d.ts +0 -1
  240. package/generated/confirmation-dialog/index.js +0 -1
  241. package/generated/lifecycle-observer/index.d.ts +0 -1
  242. package/generated/lifecycle-observer/index.js +0 -1
  243. package/scss/transitions/_dialog.scss +0 -28
@@ -1,46 +1,51 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { onoff } from '../internal/utils';
2
+ import { devFlags, onoff } from '../internal/utils';
3
3
  import { DialogBase } from '../namespace-browser/base';
4
- import { Snapshot } from '../snapshot';
5
4
  export class SheetView extends DialogBase {
6
- static get observedAttributes() {
7
- return ['fine-presentation-large-adaptation'];
8
- }
9
5
  constructor() {
10
6
  super();
11
7
  }
12
8
  static polyfillDisconnectedCallback(el) {
13
- console.debug(`${SheetView.name} ⚡️ disconnect`);
9
+ if (devFlags.debug)
10
+ console.debug(`${SheetView.name} ⚡️ disconnect`);
14
11
  CleanupRegistry.unregister(el);
15
12
  }
16
13
  static polyfillConnectedCallback(el) {
17
- console.debug(`${SheetView.name} ⚡️ connect`);
14
+ if (devFlags.debug)
15
+ console.debug(`${SheetView.name} ⚡️ connect`);
18
16
  CleanupRegistry.register(el, onoff([
19
17
  { types: 'cancel', listener: this.#handleCancel },
20
18
  { types: 'keydown', listener: SheetView.#handleKeydown },
21
19
  ], el).on());
22
20
  el.autofocus = true;
23
21
  }
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
- }
22
+ static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]) {
23
+ if (devFlags.debug)
24
+ console.debug(`${SheetView.name} ⚡️ attr-change [${attributeName}] ("${oldValue}" → "${target.getAttribute(attributeName ?? '')}")`);
25
+ // // NOTE: wait for config
26
+ // Snapshot.waitReady.then(() => {
27
+ // switch (attributeName) {
28
+ // case 'fine-presentation-large-adaptation':
29
+ // const node = target instanceof HTMLDialogElement && target
30
+ // if (!node) break
31
+ // CleanupRegistry.unregister(node, 'mediaquery')
32
+ // if ('bottom-bar' !== target.getAttribute(attributeName ?? '')) 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(
35
+ // node,
36
+ // new MediaQueryListEvent(`media-change`, {
37
+ // matches: mediaQueryList.matches,
38
+ // })
39
+ // ) // Initial check
40
+ // const handler1 = SheetView.#handleMediaChange.bind(null, node)
41
+ // CleanupRegistry.register(node, onoff('change', handler1 as unknown as EventListener, mediaQueryList).on(), 'mediaquery')
42
+ // break
43
+ // }
44
+ // })
41
45
  }
42
46
  static #handleKeydown = (evt) => {
43
- console.debug(`${SheetView.name} ⚡️ ${evt?.type} (${evt.key})`);
47
+ if (devFlags.debug)
48
+ console.debug(`${SheetView.name} ⚡️ ${evt?.type} (${evt.key})`);
44
49
  if ('Escape' !== evt.key)
45
50
  return;
46
51
  evt.preventDefault();
@@ -48,22 +53,10 @@ export class SheetView extends DialogBase {
48
53
  evt.stopPropagation();
49
54
  };
50
55
  static #handleCancel = (evt) => {
51
- console.debug(`${SheetView.name} ⚡️ ${evt?.type} (${evt.cancelable})`);
56
+ if (devFlags.debug)
57
+ console.debug(`${SheetView.name} ⚡️ ${evt?.type} (${evt.cancelable})`);
52
58
  if (!evt.cancelable)
53
59
  return;
54
60
  evt.preventDefault();
55
61
  };
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
62
  }
@@ -1,103 +1,81 @@
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, devFlags, onoff } from '../internal/utils';
5
5
  const observers = new ResizeObserverSingleton();
6
6
  export class SidebarToggle extends HTMLElement {
7
- // #ro
8
- // #io
9
7
  constructor() {
10
8
  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
- // })
17
9
  }
18
10
  connectedCallback() {
19
- console.debug(`${_a.name} ⚡️ connect`);
11
+ if (devFlags.debug)
12
+ console.debug(`${_a.name} ⚡️ connect`);
20
13
  CleanupRegistry.register(this, onoff('click', this.#handleClick, this).on());
21
14
  const entry = {
22
15
  target: this,
23
16
  };
24
- // NOTE: wait for config
25
- // Snapshot.waitReady.then(() => {
26
17
  observers.observe(this, debounce(_a.#handleMeasure, 100, true)); //this.#ro?.observe(this)
27
- // this.#io.observe(this)
28
18
  // @ts-expect-error
29
19
  _a.#handleMeasure([entry]);
30
- // })
31
20
  }
32
21
  disconnectedCallback() {
33
- console.debug(`${_a.name} ⚡️ disconnect`);
34
- observers.unobserve(this); //this.#ro?.disconnect()
35
- // this.#io.disconnect()
22
+ if (devFlags.debug)
23
+ console.debug(`${_a.name} ⚡️ disconnect`);
24
+ observers.unobserve(this);
36
25
  CleanupRegistry.unregister(this);
37
26
  }
38
27
  static query(target) {
39
- const container = target?.closest('navigation-split-view,tab-view'), sideBar = container?.querySelector(':scope > [is=sidebar-view]');
28
+ const container = target?.closest('navigation-split-view,tab-view'), sideBar = container?.querySelector(':scope>[is=sidebar-view]');
40
29
  return { container, sideBar };
41
30
  }
42
31
  // This triggers on show/hide of any of sidebar-toggle elements
43
32
  static #handleMeasure(entry) {
44
- console.debug(`${_a.name} ⚡️ measure`);
45
- const target = entry?.target;
33
+ if (devFlags.debug)
34
+ console.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
+ if (devFlags.debug)
73
+ console.debug(`${_a.name} ⚡️ ${type}`);
74
+ if (!(target instanceof HTMLElement))
75
+ return;
93
76
  if (!target?.closest('button'))
94
77
  return;
95
78
  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
79
  if (!sideBar?.open)
102
80
  sideBar?.showModal();
103
81
  else
@@ -1,5 +1,5 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { onoff, touchGlass } from '../internal/utils';
2
+ import { devFlags, onoff, touchGlass } from '../internal/utils';
3
3
  import { DialogBase } from '../namespace-browser/base';
4
4
  export class SidebarView extends DialogBase {
5
5
  constructor() {
@@ -11,19 +11,24 @@ export class SidebarView extends DialogBase {
11
11
  }
12
12
  static polyfillConnectedCallback(el) {
13
13
  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]'))
14
+ CleanupRegistry.register(el, onoff(touchGlass(el, (t) => t, ({ target }) => {
15
+ if (!(target instanceof HTMLElement))
16
+ return true;
17
+ if (target.matches('[is=sidebar-view]'))
16
18
  return false;
17
- if (evt.target.closest('tool-bar-item'))
19
+ if (target.closest('tool-bar-item'))
18
20
  return false;
19
21
  return true;
20
22
  }), el).on());
21
23
  el.autofocus = true;
22
24
  }
23
25
  /** 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?.();
26
+ static #handleClick = async ({ target, type }) => {
27
+ if (devFlags.debug)
28
+ console.debug(`${SidebarView.name} ⚡️ ${type}`);
29
+ if (!(target instanceof HTMLElement))
30
+ return;
31
+ if (target instanceof HTMLDialogElement && 'sidebar-view' === target.getAttribute('is'))
32
+ target.close?.();
28
33
  };
29
34
  }
@@ -1,20 +1,24 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { onoff } from '../internal/utils';
2
+ import { devFlags, onoff } from '../internal/utils';
3
3
  export class StickyContainer extends HTMLElement {
4
4
  constructor() {
5
5
  super();
6
6
  }
7
7
  connectedCallback() {
8
- console.debug(`${StickyContainer.name} ⚡️ connect`);
8
+ if (devFlags.debug)
9
+ console.debug(`${StickyContainer.name} ⚡️ connect`);
9
10
  // CleanupRegistry.register(this, onoff('transitionend transitionstart transitioncancel', this.#handleTransitionrun as unknown as EventListener, this).on())
10
11
  CleanupRegistry.register(this, onoff('transitionrun', this.#handleTransitionrun, this).on());
11
12
  }
12
13
  disconnectedCallback() {
13
- console.debug(`${StickyContainer.name} ⚡️ disconnect`);
14
+ if (devFlags.debug)
15
+ console.debug(`${StickyContainer.name} ⚡️ disconnect`);
14
16
  CleanupRegistry.unregister(this);
15
17
  }
16
18
  #handleTransitionrun = ({ target, propertyName, pseudoElement }) => {
17
- if ('--stuck' !== propertyName || '::before' !== pseudoElement || !target?.matches('sticky-container'))
19
+ if (!(target instanceof HTMLElement))
20
+ return;
21
+ if ('--stuck' !== propertyName || '::before' !== pseudoElement || !target.matches('sticky-container'))
18
22
  return;
19
23
  const stuck = self.getComputedStyle(this, 'before').getPropertyValue('--stuck');
20
24
  this.toggleAttribute('stuck', '1' === stuck);
@@ -1,4 +1,7 @@
1
1
  import { DialogBase } from '../namespace-browser/base';
2
+ /**
3
+ * @summary A screen that lets users switch between different views using buttons, tabs, or other controls.
4
+ */
2
5
  export declare class TabBar extends DialogBase {
3
6
  #private;
4
7
  constructor();
@@ -1,33 +1,43 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { onoff, touchGlass } from '../internal/utils';
2
+ import { devFlags, onoff, touchGlass } from '../internal/utils';
3
3
  import { DialogBase } from '../namespace-browser/base';
4
+ /**
5
+ * @summary A screen that lets users switch between different views using buttons, tabs, or other controls.
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
+ if (devFlags.debug)
13
+ console.debug(`${TabBar.name} ⚡️ disconnect`);
10
14
  el.removeEventListener('click', TabBar.#handleClick);
11
15
  CleanupRegistry.unregister(el);
12
16
  }
13
17
  static polyfillConnectedCallback(el) {
14
- console.debug(`${TabBar.name} ⚡️ connect`);
18
+ if (devFlags.debug)
19
+ console.debug(`${TabBar.name} ⚡️ connect`);
15
20
  el.autofocus = true;
16
21
  // Snapshot.waitReadyFor(el).then((r) => {
17
22
  // if (!r) return
18
23
  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]'))
24
+ CleanupRegistry.register(el, onoff(touchGlass(el, (t) => t, ({ target }) => {
25
+ if (!(target instanceof HTMLElement))
26
+ return true;
27
+ if (target.matches('[is=tab-bar]'))
21
28
  return false;
22
- if (evt.target.closest('tool-bar-item'))
29
+ if (target.closest('tool-bar-item'))
23
30
  return false;
24
31
  return true;
25
32
  }), el).on());
26
33
  // })
27
34
  }
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?.();
35
+ static #handleClick = async ({ target, type }) => {
36
+ if (devFlags.debug)
37
+ console.debug(`${TabBar.name} ⚡️ ${type}`);
38
+ if (!(target instanceof HTMLElement))
39
+ return;
40
+ if (target instanceof HTMLDialogElement && 'tab-bar' === target.getAttribute('is'))
41
+ target.close?.();
32
42
  };
33
43
  }
@@ -1,5 +1,5 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { onoff } from '../internal/utils';
2
+ import { devFlags, onoff } from '../internal/utils';
3
3
  import { ButtonBase } from '../namespace-browser/base';
4
4
  import { TabView } from './tab-view';
5
5
  export class TabItem extends ButtonBase {
@@ -7,11 +7,13 @@ export class TabItem extends ButtonBase {
7
7
  super();
8
8
  }
9
9
  static polyfillDisconnectedCallback(btn) {
10
- console.debug(`${TabItem.name} ⚡️ disconnect`);
10
+ if (devFlags.debug)
11
+ console.debug(`${TabItem.name} ⚡️ disconnect`);
11
12
  CleanupRegistry.unregister(btn);
12
13
  }
13
14
  static polyfillConnectedCallback(btn) {
14
- console.debug(`${TabItem.name} ⚡️ connect`);
15
+ if (devFlags.debug)
16
+ console.debug(`${TabItem.name} ⚡️ connect`);
15
17
  Object.assign(btn, {
16
18
  tabIndex: 0,
17
19
  ariaSelected: 'false',
@@ -31,7 +33,8 @@ export class TabItem extends ButtonBase {
31
33
  });
32
34
  }
33
35
  static #handleTabMoreStackAllowance = async (btn, evt) => {
34
- console.debug(`${TabItem.name} ⚡️ ${evt?.type}`);
36
+ if (devFlags.debug)
37
+ console.debug(`${TabItem.name} ⚡️ ${evt?.type}`);
35
38
  const tv = btn.closest('tab-view');
36
39
  if (!tv)
37
40
  return;
@@ -40,12 +43,16 @@ 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
+ if (devFlags.debug)
47
+ console.debug(`${TabItem.name} ⚡️ ${evt?.type}`);
48
+ const tv = btn?.closest('tab-view');
49
+ if (!tv)
45
50
  return;
51
+ // if (evt.detail?.tag !== btn.value) return
46
52
  // await Snapshot.waitReady
47
- const isSelected = 'tabreveal' === evt?.type;
48
- btn.ariaSelected = `${isSelected}`;
53
+ const isSelected = tv.selectedTab.map(({ id }) => id).includes(btn.value); //'tabreveal' === evt?.type
54
+ if (`${isSelected}` !== btn.ariaSelected)
55
+ btn.ariaSelected = `${isSelected}`;
49
56
  if (!isSelected)
50
57
  return;
51
58
  setTimeout(() => {
@@ -58,9 +65,11 @@ export class TabItem extends ButtonBase {
58
65
  });
59
66
  }, 100);
60
67
  };
61
- static #handleClick = async (evt) => {
62
- console.debug(`${TabItem.name} ⚡️ ${evt?.type}`);
63
- const btn = evt.currentTarget;
68
+ static #handleClick = async ({ type, currentTarget: btn }) => {
69
+ if (devFlags.debug)
70
+ console.debug(`${TabItem.name} ⚡️ ${type}`);
71
+ if (!(btn instanceof HTMLElement))
72
+ return;
64
73
  // const tag = btn.getAttribute('value')
65
74
  // if (!tag) return // sidebartoggle > tab-item //throw new DOMException(`Attribute "tag" is set but invalid`, 'InvalidStateError')
66
75
  const tv = btn.closest('tab-view');
@@ -104,14 +113,16 @@ export class TabItem extends ButtonBase {
104
113
  for (const tab of tabs.reverse())
105
114
  if (tv.selectedTab.includes(tab)) {
106
115
  const eventType = 'tabroot';
107
- console.debug(`${TabItem.name} 💡 ${eventType}`);
116
+ if (devFlags.debug)
117
+ console.debug(`${TabItem.name} 💡 ${eventType}`);
108
118
  tab?.dispatchEvent(new CustomEvent(eventType, { bubbles: true, composed: true }));
109
119
  return; // skip rest no selection!
110
120
  }
111
121
  }
112
122
  else if ('->' === dir) {
113
123
  const eventType = 'tabroot';
114
- console.debug(`${TabItem.name} 💡 ${eventType}`);
124
+ if (devFlags.debug)
125
+ console.debug(`${TabItem.name} 💡 ${eventType}`);
115
126
  tabs.at(0)?.dispatchEvent(new CustomEvent(eventType, { bubbles: true, composed: true }));
116
127
  }
117
128
  // SECTION: finally, submit new tabs
@@ -2,7 +2,7 @@ var _a;
2
2
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
3
3
  import { CSSStyleObserver } from '../internal/class/css-style-observer';
4
4
  import { NavigationPath } from '../internal/class/navigation-path';
5
- import { $, cssTime, debounce, frame, onoff, timeout } from '../internal/utils';
5
+ import { $, cssTime, debounce, devFlags, frame, onoff, timeout } from '../internal/utils';
6
6
  import { Snapshot } from '../snapshot';
7
7
  const TAB_BAR_PLACEMENTS = ['bottom-bar', 'ornament', 'sidebar', 'top-bar'];
8
8
  /**
@@ -25,7 +25,8 @@ export class TabView extends HTMLElement {
25
25
  this.#debouncedHandler = debounce(this.#handleSelectionChange, 1);
26
26
  }
27
27
  disconnectedCallback() {
28
- console.debug(`${_a.name} ⚡️ disconnect`);
28
+ if (devFlags.debug)
29
+ console.debug(`${_a.name} ⚡️ disconnect`);
29
30
  this.#afterTabRevealDelay.cancel();
30
31
  this.#cssStyleObserver?.disconnect();
31
32
  CleanupRegistry.unregister(this);
@@ -37,7 +38,8 @@ export class TabView extends HTMLElement {
37
38
  return this.querySelector(':scope>navigation-stack:has(> navigation-stack,> navigation-split-view)');
38
39
  }
39
40
  connectedCallback() {
40
- console.debug(`${_a.name} ⚡️ connect`);
41
+ if (devFlags.debug)
42
+ console.debug(`${_a.name} ⚡️ connect`);
41
43
  this.#cssStyleObserver = new CSSStyleObserver({
42
44
  properties: ['--adaptable-tab-bar-placement-index'],
43
45
  });
@@ -72,8 +74,10 @@ export class TabView extends HTMLElement {
72
74
  ], this).on());
73
75
  // })
74
76
  }
75
- #handleSummaryClick = (evt) => {
76
- const summary = evt.target.closest('summary');
77
+ #handleSummaryClick = ({ target }) => {
78
+ if (!(target instanceof HTMLElement))
79
+ return;
80
+ const summary = target.closest('summary');
77
81
  if (!summary)
78
82
  return;
79
83
  if (0 === $.siblings('[aria-selected=true]', summary).length)
@@ -86,14 +90,16 @@ export class TabView extends HTMLElement {
86
90
  const style = self.getComputedStyle(form);
87
91
  if ('sidebar' !== style.getPropertyValue('--list-style'))
88
92
  return;
89
- this.#addAnimations();
93
+ this.#addAnimations(new CustomEvent('beforetabreveal', { detail: { tag: '', ms: cssTime(`${this.computedStyleMap().get(`--tabbar-after-tabreveal-duration`)}`) }, bubbles: true, composed: true }));
90
94
  };
91
95
  #handleTabViewPagereveal = (evt) => {
92
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
96
+ if (devFlags.debug)
97
+ console.debug(`${_a.name} ⚡️ ${evt?.type}`);
93
98
  void this.#syncBodyFace();
94
99
  };
95
100
  #handleStyleChange = () => {
96
- console.debug(`${_a.name} ⚡️ style`);
101
+ if (devFlags.debug)
102
+ console.debug(`${_a.name} ⚡️ style`);
97
103
  const style = self.getComputedStyle(this);
98
104
  const placement = style.getPropertyValue('--adaptable-tab-bar-placement'), // or do it manually without any computedstyle
99
105
  newValue = TAB_BAR_PLACEMENTS.includes(placement) ? placement : 'bottom-bar';
@@ -108,7 +114,7 @@ export class TabView extends HTMLElement {
108
114
  }
109
115
  };
110
116
  // #handleMediaChange: (evt: MediaQueryListEvent) => void = (evt) => {
111
- // console.debug(`${TabView.name} ⚡️ ${evt?.type}`)
117
+ // if (devFlags.debug) console.debug(`${TabView.name} ⚡️ ${evt?.type}`)
112
118
  // if (!evt.matches) return
113
119
  // this.#handleStyleChange()
114
120
  // // if (evt.matches) {
@@ -159,7 +165,8 @@ export class TabView extends HTMLElement {
159
165
  // // }
160
166
  // }
161
167
  #handleAdaptableTabBarPlacementChange = (evt) => {
162
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
168
+ if (devFlags.debug)
169
+ console.debug(`${_a.name} ⚡️ ${evt?.type}`);
163
170
  if ('bottom-bar' !== evt.detail.oldValue)
164
171
  return; // button triggers should happen, ONLY when going FROM bottom-bar TO anything else
165
172
  const innerSelection = this.moreTab?.querySelector(':scope>navigation-stack:not([hidden]),:scope>navigation-split-view:not([hidden])')?.id;
@@ -199,28 +206,28 @@ export class TabView extends HTMLElement {
199
206
  throw new Error('selectedTab[] must be in order of parent>child. You provided an element that contains the previous sibling.');
200
207
  //
201
208
  const selectors = [':not(:is(:scope>{{tag}}))', ':is(:scope>{{tag}})']; // first nested ones, then root ones
209
+ const ms = cssTime(`${this.computedStyleMap().get(`--tabbar-after-tabreveal-duration`)}`);
202
210
  for (const selector of selectors)
203
211
  for (const ns of this.querySelectorAll(`navigation-stack:not([hidden])${selector.replace('{{tag}}', 'navigation-stack')},navigation-split-view:not([hidden])${selector.replace('{{tag}}', 'navigation-split-view')}`)) {
204
212
  if (!tabs.some((tab) => !ns.contains(tab)))
205
213
  continue; // shouldRun
206
- ns.dispatchEvent(new CustomEvent('beforetabswap', { detail: { tag: ns.id }, bubbles: true, composed: true }));
214
+ ns.dispatchEvent(new CustomEvent('beforetabswap', { detail: { tag: ns.id, ms }, bubbles: true, composed: true }));
207
215
  ns.hidden = true; // triggers
208
216
  }
209
217
  for (const selector of selectors.reverse())
210
218
  for (const ns of this.querySelectorAll(`navigation-stack[hidden]${selector.replace('{{tag}}', 'navigation-stack')},navigation-split-view[hidden]${selector.replace('{{tag}}', 'navigation-split-view')}`)) {
211
219
  if (!tabs.some((tab) => ns.contains(tab)))
212
220
  continue; // shouldRun
213
- ns.dispatchEvent(new CustomEvent('beforetabreveal', { detail: { tag: ns.id }, bubbles: true, composed: true }));
221
+ ns.dispatchEvent(new CustomEvent('beforetabreveal', { detail: { tag: ns.id, ms }, bubbles: true, composed: true }));
214
222
  ns.hidden = false; // triggers
215
223
  }
216
224
  }
217
- #addAnimations = () => {
225
+ #addAnimations = (evt) => {
218
226
  this.setAttribute('js-aftertabreveal', '');
227
+ // const ms = cssTime(`${this.computedStyleMap().get(`--tabbar-after-tabreveal-duration`)}`)
219
228
  this.#afterTabRevealDelay.next(() => {
220
229
  this.removeAttribute('js-aftertabreveal');
221
- }, cssTime(`${this.computedStyleMap().get(`--tabbar-after-tabreveal-duration`)}`));
222
- // this.removeAttribute('js-aftertabreveal')
223
- // this.#afterTabRevealDelay = undefined
230
+ }, evt.detail.ms);
224
231
  };
225
232
  #handleSelectionChange = (evt) => {
226
233
  this.#triggerToggleEvent(evt);
@@ -228,7 +235,8 @@ export class TabView extends HTMLElement {
228
235
  #triggerToggleEvent = (evt) => {
229
236
  const eventType = 'tab-view:toggle';
230
237
  void this.#syncBodyFace();
231
- console.debug(`${_a.name} 💡 ${eventType}`);
238
+ if (devFlags.debug)
239
+ console.debug(`${_a.name} 💡 ${eventType}`);
232
240
  this.dispatchEvent(new CustomEvent(eventType, { detail: { selection: this.selectedTab }, bubbles: true, composed: true }));
233
241
  };
234
242
  #syncBodyFace = async () => {
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @summary Display selectable, sortable data arranged in rows and columns.
3
+ *
4
+ * @attr {title:trailing:subtitle|trailing:title:subtitle|title:subtitle:trailing|*} preferred-compact-template - Sets the template areas when the table is in compact mode
5
+ */
1
6
  export declare class TableView extends HTMLElement {
2
7
  #private;
3
8
  static get template(): DocumentFragment;