@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,16 +1,18 @@
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
  export class PlainButton extends ButtonBase {
5
5
  constructor() {
6
6
  super();
7
7
  }
8
8
  static polyfillDisconnectedCallback(el) {
9
- console.debug(`${PlainButton.name} ⚡️ disconnect`);
9
+ if (devFlags.debug)
10
+ console.debug(`${PlainButton.name} ⚡️ disconnect`);
10
11
  CleanupRegistry.unregister(el);
11
12
  }
12
13
  static polyfillConnectedCallback(el) {
13
- console.debug(`${PlainButton.name} ⚡️ connect`);
14
+ if (devFlags.debug)
15
+ console.debug(`${PlainButton.name} ⚡️ connect`);
14
16
  el.tabIndex = 0;
15
17
  CleanupRegistry.register(el, onoff('click', PlainButton.#handleClick, el).on());
16
18
  }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @summary A view that shows the progress toward completion of a task.
3
+ */
4
+ export declare class ProgressView extends HTMLElement {
5
+ #private;
6
+ static get observedAttributes(): string[];
7
+ get progressViewStyle(): "circular" | "linear";
8
+ get template(): DocumentFragment;
9
+ constructor();
10
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
11
+ disconnectedCallback(): void;
12
+ connectedCallback(): void;
13
+ }
@@ -0,0 +1,120 @@
1
+ var _a;
2
+ import { CleanupRegistry } from '../internal/class/cleanup-registry';
3
+ import { CSSStyleObserver } from '../internal/class/css-style-observer';
4
+ import { $, devFlags, renderLabel } from '../internal/utils';
5
+ import { Snapshot } from '../snapshot';
6
+ const progressViewStyles = ['circular', 'linear'];
7
+ /**
8
+ * @summary A view that shows the progress toward completion of a task.
9
+ */
10
+ export class ProgressView extends HTMLElement {
11
+ static get observedAttributes() {
12
+ return ['label', 'current-value-label', 'value'];
13
+ }
14
+ static #templates = new Map();
15
+ #cssStyleObserver;
16
+ #progressViewStyle;
17
+ #lastRenderedStyle;
18
+ #shadowRoot;
19
+ #slots = new Map();
20
+ get progressViewStyle() {
21
+ return this.#progressViewStyle ?? 'circular';
22
+ }
23
+ get template() {
24
+ if (!_a.#templates.has(this.progressViewStyle))
25
+ switch (this.progressViewStyle) {
26
+ case 'linear':
27
+ _a.#templates.set(this.progressViewStyle, $(String.raw `
28
+ <slot></slot>
29
+ <div part="root progress-control progress-line-control"></div>
30
+ <slot name="current-value"></slot>
31
+ `));
32
+ break;
33
+ case 'circular':
34
+ default:
35
+ _a.#templates.set(this.progressViewStyle, $(String.raw `
36
+ <div part="root progress-control progress-circular-control">
37
+ <div part="root progress-control progress-circular-blade progress-circular-blade-1"></div>
38
+ <div part="root progress-control progress-circular-blade progress-circular-blade-2"></div>
39
+ <div part="root progress-control progress-circular-blade progress-circular-blade-3"></div>
40
+ <div part="root progress-control progress-circular-blade progress-circular-blade-4"></div>
41
+ <div part="root progress-control progress-circular-blade progress-circular-blade-5"></div>
42
+ <div part="root progress-control progress-circular-blade progress-circular-blade-6"></div>
43
+ <div part="root progress-control progress-circular-blade progress-circular-blade-7"></div>
44
+ <div part="root progress-control progress-circular-blade progress-circular-blade-8"></div>
45
+ </div>
46
+ <slot></slot>
47
+ <slot name="current-value"></slot>
48
+ `));
49
+ break;
50
+ }
51
+ return _a.#templates.get(this.progressViewStyle);
52
+ }
53
+ constructor() {
54
+ super();
55
+ this.#shadowRoot = this.attachShadow({ mode: 'closed' });
56
+ }
57
+ attributeChangedCallback(name, oldValue, newValue) {
58
+ if (devFlags.debug)
59
+ console.debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
60
+ switch (name) {
61
+ case 'label': {
62
+ const label = this.querySelector(':scope>label-view:not([slot])') ?? this.appendChild($(`<label-view foreground="secondary"></label-view>`, '>1'));
63
+ if (newValue) {
64
+ label.setAttribute('title', newValue);
65
+ }
66
+ else
67
+ label.removeAttribute('title');
68
+ break;
69
+ }
70
+ case 'current-value-label': {
71
+ renderLabel(':scope>[slot=current-value]', `<label-view slot="current-value" font="callout" foreground="secondary"><span></span></label-view>`, this, newValue);
72
+ break;
73
+ }
74
+ }
75
+ }
76
+ disconnectedCallback() {
77
+ if (devFlags.debug)
78
+ console.debug(`${_a.name} ⚡️ disconnect`);
79
+ CleanupRegistry.unregister(this);
80
+ }
81
+ connectedCallback() {
82
+ if (devFlags.debug)
83
+ console.debug(`${_a.name} ⚡️ connect`);
84
+ this.inert = true;
85
+ this.#cssStyleObserver = new CSSStyleObserver({
86
+ properties: ['--progress-view-style-index'],
87
+ });
88
+ this.#cssStyleObserver.observe(this, this.#handleStyleChange);
89
+ Snapshot.waitReady.then(() => self.requestAnimationFrame(this.#handleStyleChange));
90
+ }
91
+ #handleStyleChange = () => {
92
+ if (devFlags.debug)
93
+ console.debug(`${_a.name} ⚡️ style`);
94
+ const raw = self.getComputedStyle(this).getPropertyValue('--progress-view-style-index').trim();
95
+ const newValue = progressViewStyles[Number(raw)] ?? progressViewStyles[0];
96
+ if (newValue === this.#progressViewStyle)
97
+ return;
98
+ this.#progressViewStyle = newValue;
99
+ this.#render();
100
+ };
101
+ #render() {
102
+ if (devFlags.debug)
103
+ console.debug(`${_a.name} ⚡️ render (${this.#progressViewStyle})`);
104
+ if (this.#lastRenderedStyle === this.#progressViewStyle)
105
+ return; // skip if already applied
106
+ this.#lastRenderedStyle = this.#progressViewStyle;
107
+ this.#shadowRoot.replaceChildren(document.importNode(this.template, true)); // clear shadow DOM
108
+ CleanupRegistry.unregister(this, 'slots');
109
+ for (const slot of this.#shadowRoot.querySelectorAll('slot'))
110
+ this.#slots?.set(slot.name, slot);
111
+ CleanupRegistry.register(this, () => {
112
+ this.#slots = new Map();
113
+ }, 'slots');
114
+ switch (this.#progressViewStyle
115
+ //
116
+ ) {
117
+ }
118
+ }
119
+ }
120
+ _a = ProgressView;
@@ -1,9 +1,11 @@
1
+ import { devFlags } from '../internal/utils';
1
2
  import { DialogBase } from '../namespace-browser/base';
2
3
  export class ScreenView extends DialogBase {
3
4
  constructor() {
4
5
  super();
5
6
  }
6
7
  disconnectedCallback() {
7
- console.debug(`${ScreenView.name} ⚡️ disconnect`);
8
+ if (devFlags.debug)
9
+ console.debug(`${ScreenView.name} ⚡️ disconnect`);
8
10
  }
9
11
  }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @summary A wrapper to {hv}-stacks
3
+ */
4
+ export declare class ScrollViewProxy extends HTMLElement {
5
+ constructor();
6
+ disconnectedCallback(): void;
7
+ connectedCallback(): void;
8
+ }
@@ -0,0 +1,17 @@
1
+ import { devFlags } from '../internal/utils';
2
+ /**
3
+ * @summary A wrapper to {hv}-stacks
4
+ */
5
+ export class ScrollViewProxy extends HTMLElement {
6
+ constructor() {
7
+ super();
8
+ }
9
+ disconnectedCallback() {
10
+ if (devFlags.debug)
11
+ console.debug(`${ScrollViewProxy.name} ⚡️ disconnect`);
12
+ }
13
+ connectedCallback() {
14
+ if (devFlags.debug)
15
+ console.debug(`${ScrollViewProxy.name} ⚡️ connect`);
16
+ }
17
+ }
@@ -3,8 +3,8 @@ export declare class ScrollView extends HTMLElement {
3
3
  static get observedAttributes(): string[];
4
4
  static get template(): DocumentFragment;
5
5
  constructor();
6
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
6
7
  disconnectedCallback(): void;
7
8
  connectedCallback(): void;
8
- attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
9
9
  centerScrollToElement(child: Element): void;
10
10
  }
@@ -1,8 +1,9 @@
1
1
  var _a;
2
+ import { lifecycleObserver } from '../buses';
2
3
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
3
4
  import { ResizeObserverSingleton } from '../internal/class/resize-observer-singleton';
4
- import { $, frame, onoff, slowHideShow } from '../internal/utils';
5
- import { LifecycleObserver } from '../lifecycle-observer';
5
+ import { $, devFlags, frame, onoff, slowHideShow } from '../internal/utils';
6
+ import { html, render } from '../tpl';
6
7
  const observers = new ResizeObserverSingleton();
7
8
  export class ScrollView extends HTMLElement {
8
9
  static get observedAttributes() {
@@ -21,10 +22,11 @@ export class ScrollView extends HTMLElement {
21
22
  <div part="root scroll-view-toolbar-stack">
22
23
  <slot name="bottom-bar-principal"></slot>
23
24
  </div>
24
- </div>`, ''));
25
+ </div>`));
25
26
  }
26
27
  #shadowRoot;
27
- #navbarPrincipalSlot;
28
+ #slots = new Map();
29
+ // #navbarPrincipalSlot?: HTMLSlotElement
28
30
  #isMidScroll;
29
31
  #lastScrollTop = 0;
30
32
  // #stopRecordingScrollTop?: boolean = false
@@ -33,16 +35,42 @@ export class ScrollView extends HTMLElement {
33
35
  super();
34
36
  this.#shadowRoot = this.attachShadow({ mode: 'closed' });
35
37
  this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
36
- this.#navbarPrincipalSlot = this.#shadowRoot.querySelector('slot[name=top-bar-principal]') ?? undefined;
38
+ for (const slot of this.#shadowRoot.querySelectorAll('slot'))
39
+ this.#slots?.set(slot.name, slot);
40
+ CleanupRegistry.register(this, () => {
41
+ this.#slots = new Map();
42
+ });
43
+ }
44
+ attributeChangedCallback(name, oldValue, newValue) {
45
+ if (devFlags.debug)
46
+ console.debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
47
+ switch (name) {
48
+ case 'navigation-inline-title':
49
+ this.#renderNavTitle(newValue, this.getAttribute('navigation-inline-subtitle'));
50
+ break;
51
+ case 'navigation-inline-subtitle':
52
+ this.#renderNavTitle(this.getAttribute('navigation-inline-title'), newValue);
53
+ break;
54
+ case 'navigation-title':
55
+ //
56
+ break;
57
+ case 'navigation-bar-title-display-mode':
58
+ if (oldValue === newValue)
59
+ break;
60
+ this.#syncSibling(`${oldValue}${newValue}`);
61
+ break;
62
+ }
37
63
  }
38
64
  disconnectedCallback() {
39
- console.debug(`${_a.name} ⚡️ disconnect`);
65
+ if (devFlags.debug)
66
+ console.debug(`${_a.name} ⚡️ disconnect`);
40
67
  CleanupRegistry.unregister(this);
41
68
  observers.unobserve(this);
42
- frame().then(() => LifecycleObserver.dispatchEvent(new CustomEvent('pagehide', { detail: { page: this }, bubbles: true, composed: true })));
69
+ frame().then(() => lifecycleObserver.dispatchEvent(new CustomEvent('pagehide', { detail: { page: this }, bubbles: true, composed: true })));
43
70
  }
44
71
  connectedCallback() {
45
- console.debug(`${_a.name} ⚡️ connect`);
72
+ if (devFlags.debug)
73
+ console.debug(`${_a.name} ⚡️ connect`);
46
74
  CleanupRegistry.register(this, onoff([
47
75
  // { types: 'tabreveal', listener: this.#handleTabReveal as EventListener },
48
76
  { types: 'beforetabswap', listener: this.#handleTabBeforeswap },
@@ -51,7 +79,7 @@ export class ScrollView extends HTMLElement {
51
79
  { types: 'scroll', listener: this.#handleScroll, addOptions: { passive: true } },
52
80
  { types: 'scrollend', listener: this.#handleScrollend, addOptions: { passive: true } },
53
81
  ], this).on());
54
- frame().then(() => LifecycleObserver.dispatchEvent(new CustomEvent('pageshow', { detail: { page: this }, bubbles: true, composed: true })));
82
+ frame().then(() => lifecycleObserver.dispatchEvent(new CustomEvent('pageshow', { detail: { page: this }, bubbles: true, composed: true })));
55
83
  observers.observe(this, this.#handleMeasure.bind(this));
56
84
  // frame(this).then((r) => {
57
85
  // if (!r) return
@@ -65,44 +93,35 @@ export class ScrollView extends HTMLElement {
65
93
  // })
66
94
  // })
67
95
  }
68
- attributeChangedCallback(name, oldValue, newValue) {
69
- console.debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
70
- switch (name) {
71
- case 'navigation-inline-title':
72
- this.#renderNavTitle(newValue, this.getAttribute('navigation-inline-subtitle'));
73
- break;
74
- case 'navigation-inline-subtitle':
75
- this.#renderNavTitle(this.getAttribute('navigation-inline-title'), newValue);
76
- break;
77
- case 'navigation-title':
78
- //
79
- break;
80
- case 'navigation-bar-title-display-mode':
81
- if (oldValue === newValue)
82
- break;
83
- if (this.closest('[hidden]'))
84
- break; // iREPAINT ALERT! if (0 === this.offsetHeight + this.offsetWidth) break
85
- if (!this.#isMidScroll)
86
- break;
87
- const title = this.#navbarPrincipalSlot?.assignedElements({ flatten: true })?.at(0);
88
- slowHideShow('largeinline' === `${oldValue}${newValue}` ? 'show' : 'hide', title);
89
- break;
90
- }
91
- }
92
- #handleScroll = (evt) => {
93
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
96
+ #syncSibling = (comp) => {
97
+ if (!this.isConnected)
98
+ return;
99
+ if (this.closest('[hidden]'))
100
+ return; // iREPAINT ALERT! if (0 === this.offsetHeight + this.offsetWidth) break
101
+ if (!this.#isMidScroll)
102
+ return;
103
+ const title = this.#slots?.get('top-bar-principal')?.assignedElements({ flatten: true })?.at(0);
104
+ slowHideShow('largeinline' === `${comp}` ? 'show' : 'hide', title);
105
+ };
106
+ #handleScroll = ({ target, type }) => {
107
+ if (devFlags.debug)
108
+ console.debug(`${_a.name} ⚡️ ${type}`);
94
109
  if (!this.#isMidScroll)
95
110
  this.#isMidScroll = true;
96
111
  // if (this.#stopRecordingScrollTop) return
97
- this.#lastScrollTop = evt.target.scrollTop;
112
+ if (!(target instanceof HTMLElement))
113
+ return;
114
+ this.#lastScrollTop = target.scrollTop;
98
115
  };
99
116
  #handleScrollend = (evt) => {
100
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
117
+ if (devFlags.debug)
118
+ console.debug(`${_a.name} ⚡️ ${evt?.type}`);
101
119
  if (this.#isMidScroll)
102
120
  this.#isMidScroll = false;
103
121
  };
104
122
  #handleMeasure = (entry) => {
105
- console.debug(`${_a.name} ⚡️ measure`);
123
+ if (devFlags.debug)
124
+ console.debug(`${_a.name} ⚡️ measure`);
106
125
  if (0 === entry.contentRect.width + entry.contentRect.height)
107
126
  return;
108
127
  if (undefined === this.#beforeTabSwapLastScrolltop)
@@ -118,38 +137,40 @@ export class ScrollView extends HTMLElement {
118
137
  // this.#stopRecordingScrollTop = false
119
138
  this.#beforeTabSwapLastScrolltop = undefined;
120
139
  };
121
- #handleTabReveal = (evt) => {
122
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
123
- if (!evt.target?.contains(this))
140
+ // #handleTabReveal = ({ type, target }: CustomEvent<TabDetail>) => {
141
+ // if (devFlags.debug) console.debug(`${ScrollView.name} ⚡️ ${type}`)
142
+ // if (!(target instanceof HTMLElement)) return
143
+ // if (!target.contains(this)) return
144
+ // if (this.closest('[hidden]')) return
145
+ // // console.log(888, this.#beforeTabSwapLastScrolltop, this.#lastScrollTop)
146
+ // // this.style.setProperty('clip-path', 'inset(50%)')
147
+ // // this.style.setProperty('opacity', '0.001')
148
+ // // this.style.opacity = '0.001'
149
+ // // console.log(99, this.style.opacity)
150
+ // // self.requestAnimationFrame(() => {
151
+ // // if (undefined === this.#beforeTabSwapLastScrolltop) return
152
+ // // if (this.#beforeTabSwapLastScrolltop === this.#lastScrollTop) return
153
+ // // this.#stopRecordingScrollTop = true
154
+ // // // console.log(999, this.#beforeTabSwapLastScrolltop)
155
+ // // // console.log(999, this, this.#beforeTabSwapLastScrolltop, this.#lastScrollTop)
156
+ // // this.scrollTop = this.#beforeTabSwapLastScrolltop
157
+ // // // this.scrollTo({
158
+ // // // top: this.#beforeTabSwapLastScrolltop,
159
+ // // // behavior: 'instant',
160
+ // // // }) //
161
+ // // this.#stopRecordingScrollTop = false
162
+ // // this.#beforeTabSwapLastScrolltop = undefined
163
+ // // // self.requestAnimationFrame(() => {
164
+ // // // // this.style.removeProperty('opacity')
165
+ // // // })
166
+ // // })
167
+ // }
168
+ #handleTabBeforeswap = ({ type, target }) => {
169
+ if (devFlags.debug)
170
+ console.debug(`${_a.name} ⚡️ ${type}`);
171
+ if (!(target instanceof HTMLElement))
124
172
  return;
125
- if (this.closest('[hidden]'))
126
- return;
127
- // console.log(888, this.#beforeTabSwapLastScrolltop, this.#lastScrollTop)
128
- // this.style.setProperty('clip-path', 'inset(50%)')
129
- // this.style.setProperty('opacity', '0.001')
130
- // this.style.opacity = '0.001'
131
- // console.log(99, this.style.opacity)
132
- // self.requestAnimationFrame(() => {
133
- // if (undefined === this.#beforeTabSwapLastScrolltop) return
134
- // if (this.#beforeTabSwapLastScrolltop === this.#lastScrollTop) return
135
- // this.#stopRecordingScrollTop = true
136
- // // console.log(999, this.#beforeTabSwapLastScrolltop)
137
- // // console.log(999, this, this.#beforeTabSwapLastScrolltop, this.#lastScrollTop)
138
- // this.scrollTop = this.#beforeTabSwapLastScrolltop
139
- // // this.scrollTo({
140
- // // top: this.#beforeTabSwapLastScrolltop,
141
- // // behavior: 'instant',
142
- // // }) //
143
- // this.#stopRecordingScrollTop = false
144
- // this.#beforeTabSwapLastScrolltop = undefined
145
- // // self.requestAnimationFrame(() => {
146
- // // // this.style.removeProperty('opacity')
147
- // // })
148
- // })
149
- };
150
- #handleTabBeforeswap = (evt) => {
151
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
152
- if (!evt.target?.contains(this))
173
+ if (!target.contains(this))
153
174
  return;
154
175
  if (this.closest('[hidden]'))
155
176
  return;
@@ -166,22 +187,17 @@ export class ScrollView extends HTMLElement {
166
187
  });
167
188
  }
168
189
  #renderNavTitle = (title, subtitle) => {
169
- const vStack = this.querySelector(':scope>[slot=top-bar-principal]') ??
170
- this.appendChild($(`<v-stack spacing="0" alignment="fill" slot="top-bar-principal"><label-view line-limit="1" truncation-mode="tail" font="headline"></label-view><label-view line-limit="1" truncation-mode="tail" font="callout"></label-view></v-stack>`));
171
- let titleLabel = vStack.querySelector(':scope>label-view:nth-child(1)');
172
- if (title) {
173
- titleLabel ??= vStack.appendChild($(`<label-view line-limit="1" truncation-mode="tail" font="headline"></label-view>`));
174
- titleLabel.setAttribute('title', title);
175
- }
176
- else
177
- titleLabel?.remove();
178
- let subtitleLabel = vStack.querySelector(':scope>label-view:nth-child(2)');
179
- if (subtitle) {
180
- subtitleLabel ??= vStack.appendChild($(`<label-view line-limit="1" truncation-mode="tail" font="callout"></label-view>`));
181
- subtitleLabel.setAttribute('title', subtitle);
182
- }
183
- else
184
- subtitleLabel?.remove();
190
+ // const titleTemplate = `<label-view line-limit="1" truncation-mode="tail" font="headline"><span></span></label-view>`,
191
+ // subtitleTemplate = `<label-view line-limit="1" truncation-mode="tail" foreground="secondary" font="callout"><span></span></label-view>`
192
+ // const vStack =
193
+ // this.querySelector(':scope>[slot=top-bar-principal]') ?? this.appendChild($(`<v-stack spacing="0" alignment="fill" slot="top-bar-principal">${titleTemplate}${subtitleTemplate}</v-stack>`, '>1'))
194
+ // renderLabel(':scope>label-view:nth-child(1)', titleTemplate, vStack, title)
195
+ // renderLabel(':scope>label-view:nth-child(2)', subtitleTemplate, vStack, subtitle)
196
+ const container = this.querySelector(':scope>[slot=top-bar-principal]') ?? this.appendChild($(`<v-stack spacing="0" alignment="fill" slot="top-bar-principal"></v-stack>`, '>1'));
197
+ render(html `
198
+ ${title ? html `<label-view line-limit="1" truncation-mode="tail" font="headline"><span>${title}</span></label-view>` : null}
199
+ ${subtitle ? html `<label-view line-limit="1" truncation-mode="tail" foreground="secondary" font="callout"><span>${subtitle}</span></label-view>` : null}
200
+ `, container);
185
201
  };
186
202
  }
187
203
  _a = ScrollView;
@@ -0,0 +1,7 @@
1
+ import { InputBase } from '../namespace-browser/base';
2
+ export declare class SearchView extends InputBase {
3
+ constructor();
4
+ static polyfillDisconnectedCallback(el: InputBase): void;
5
+ static polyfillConnectedCallback(el: InputBase): void;
6
+ static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]: Pick<MutationRecord, 'attributeName' | 'oldValue' | 'target'>[]): void;
7
+ }
@@ -0,0 +1,30 @@
1
+ import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
+ import { devFlags, onoff, touchGlass } from '../internal/utils';
3
+ import { InputBase } from '../namespace-browser/base';
4
+ export class SearchView extends InputBase {
5
+ // static get observedAttributes() {
6
+ // return ['role', 'title-key']
7
+ // }
8
+ constructor() {
9
+ super();
10
+ }
11
+ static polyfillDisconnectedCallback(el) {
12
+ if (devFlags.debug)
13
+ console.debug(`${SearchView.name} ⚡️ disconnect`);
14
+ CleanupRegistry.unregister(el);
15
+ }
16
+ static polyfillConnectedCallback(el) {
17
+ if (devFlags.debug)
18
+ console.debug(`${SearchView.name} ⚡️ connect`);
19
+ CleanupRegistry.register(el, onoff(touchGlass(el, (t) => t, () => true), el).on());
20
+ el.type = 'search';
21
+ }
22
+ static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]) {
23
+ if (devFlags.debug)
24
+ console.debug(`${SearchView.name} ⚡️ attr-change [${attributeName}] ("${oldValue}" → "${target.getAttribute(attributeName ?? '')}")`);
25
+ const node = target instanceof HTMLInputElement;
26
+ if (!node)
27
+ return;
28
+ //
29
+ }
30
+ }
@@ -3,7 +3,7 @@ export declare class SectionView extends HTMLElement {
3
3
  static get observedAttributes(): string[];
4
4
  static get template(): DocumentFragment;
5
5
  constructor();
6
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
6
7
  disconnectedCallback(): void;
7
8
  connectedCallback(): void;
8
- attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
9
9
  }
@@ -1,4 +1,5 @@
1
- import { $ } from '../internal/utils';
1
+ import { $, devFlags } from '../internal/utils';
2
+ import { html, render } from '../tpl';
2
3
  export class SectionView extends HTMLElement {
3
4
  static get observedAttributes() {
4
5
  return ['header', 'footer'];
@@ -14,7 +15,7 @@ export class SectionView extends HTMLElement {
14
15
  </div>
15
16
  <div part="root section-footer-stack">
16
17
  <slot name="footer"></slot>
17
- </div>`, ''));
18
+ </div>`));
18
19
  // <div class="sticky-sentinel" style="grid-area:sentinel;inline-size:100%;block-size:0.1px;pointer-events:none;"></div>
19
20
  }
20
21
  #shadowRoot;
@@ -31,17 +32,46 @@ export class SectionView extends HTMLElement {
31
32
  // this.#sentinel = this.#shadowRoot.querySelector('.sticky-sentinel') ?? undefined
32
33
  // })
33
34
  }
35
+ attributeChangedCallback(name, oldValue, newValue) {
36
+ if (devFlags.debug)
37
+ console.debug(`${SectionView.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
38
+ // Snapshot.waitReady.then(() => {
39
+ switch (name) {
40
+ case 'header':
41
+ if (!newValue) {
42
+ this.querySelector(':scope>[slot=header]')?.remove();
43
+ break;
44
+ }
45
+ const header = this.querySelector(':scope>[slot=header]') ?? this.appendChild(Object.assign(document.createElement('header'), { slot: 'header' }));
46
+ render(html `<label-view line-limit="1" truncation-mode="tail" font="callout">
47
+ <span>${newValue}</span>
48
+ </label-view>`, header);
49
+ break;
50
+ case 'footer':
51
+ if (!newValue) {
52
+ this.querySelector(':scope>[slot=footer]')?.remove();
53
+ break;
54
+ }
55
+ const footer = this.querySelector(':scope>[slot=footer]') ?? this.appendChild(Object.assign(document.createElement('footer'), { slot: 'footer' }));
56
+ render(html `<label-view line-limit="1" truncation-mode="tail" font="callout">
57
+ <span>${newValue}</span>
58
+ </label-view>`, footer);
59
+ break;
60
+ }
61
+ // })
62
+ }
34
63
  disconnectedCallback() {
35
- console.debug(`${SectionView.name} ⚡️ disconnect`);
64
+ if (devFlags.debug)
65
+ console.debug(`${SectionView.name} ⚡️ disconnect`);
36
66
  // if (this.#sentinel) this.#observer?.unobserve(this.#sentinel)
37
67
  // this.#observer?.unobserve(this)
38
68
  }
39
69
  connectedCallback() {
40
- console.debug(`${SectionView.name} ⚡️ connect`);
70
+ if (devFlags.debug)
71
+ console.debug(`${SectionView.name} ⚡️ connect`);
41
72
  // this.#sibling = this.closest('scroll-view') ?? undefined
42
73
  // Snapshot.waitReady.then(() => {
43
74
  // if (!(await frame(this))) return // NOTE: Required or BREAKS transitions // self.requestAnimationFrame(() => {
44
- // if (!this.isConnected) return
45
75
  // const blockSizeProp = getComputedStyle(this).getPropertyValue('--navigation-bar-block-size') || '0', //`${document.documentElement.computedStyleMap().get(`--navigation-bar-block-size`) ?? '0'}`, //
46
76
  // blockSize = parseFloat(blockSizeProp) * (blockSizeProp.endsWith('rem') ? parseFloat(getComputedStyle(document.documentElement).fontSize) : 1)
47
77
  // this.#observer = new IntersectionObserver(this.#handleIntersect, {
@@ -53,29 +83,4 @@ export class SectionView extends HTMLElement {
53
83
  // this.#observer.observe(this)
54
84
  // })
55
85
  }
56
- attributeChangedCallback(name, oldValue, newValue) {
57
- console.debug(`${SectionView.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
58
- // Snapshot.waitReady.then(() => {
59
- switch (name) {
60
- 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();
68
- break;
69
- 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();
77
- break;
78
- }
79
- // })
80
- }
81
86
  }
@@ -1,9 +1,8 @@
1
1
  import { DialogBase } from '../namespace-browser/base';
2
2
  export declare class SheetView extends DialogBase {
3
3
  #private;
4
- static get observedAttributes(): string[];
5
4
  constructor();
6
5
  static polyfillDisconnectedCallback(el: SheetView): void;
7
6
  static polyfillConnectedCallback(el: SheetView): void;
8
- static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]: Pick<MutationRecord, 'attributeName' | 'oldValue' | 'target'>[]): Promise<void>;
7
+ static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]: Pick<MutationRecord, 'attributeName' | 'oldValue' | 'target'>[]): void;
9
8
  }