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

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 (300) 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 +24 -10
  10. package/generated/client/index.js +179 -194
  11. package/generated/components/alert-dialog.d.ts +11 -0
  12. package/generated/components/alert-dialog.js +94 -0
  13. package/generated/components/body-view.d.ts +8 -0
  14. package/generated/components/body-view.js +6 -2
  15. package/generated/components/bordered-button.d.ts +10 -0
  16. package/generated/components/bordered-button.js +36 -3
  17. package/generated/components/bordered-prominent-button.d.ts +10 -0
  18. package/generated/components/bordered-prominent-button.js +36 -3
  19. package/generated/components/borderless-button.d.ts +9 -1
  20. package/generated/components/borderless-button.js +29 -11
  21. package/generated/components/color-scheme.d.ts +12 -0
  22. package/generated/components/color-scheme.js +51 -0
  23. package/generated/components/confirmation-dialog.d.ts +4 -1
  24. package/generated/components/confirmation-dialog.js +38 -32
  25. package/generated/components/content-unavailable.d.ts +30 -0
  26. package/generated/components/content-unavailable.js +79 -0
  27. package/generated/components/date-picker.d.ts +21 -15
  28. package/generated/components/date-picker.js +126 -88
  29. package/generated/components/detail-placeholder.d.ts +11 -0
  30. package/generated/components/detail-placeholder.js +15 -0
  31. package/generated/components/disclosure-group.d.ts +8 -0
  32. package/generated/components/disclosure-group.js +18 -7
  33. package/generated/components/fine-tooltip.d.ts +15 -0
  34. package/generated/components/fine-tooltip.js +108 -0
  35. package/generated/components/form-view.d.ts +10 -0
  36. package/generated/components/form-view.js +8 -3
  37. package/generated/components/glass-button.d.ts +10 -0
  38. package/generated/components/glass-button.js +36 -3
  39. package/generated/components/glass-prominent-button.d.ts +10 -0
  40. package/generated/components/glass-prominent-button.js +36 -3
  41. package/generated/components/h-divider.d.ts +11 -0
  42. package/generated/components/h-divider.js +15 -0
  43. package/generated/components/h-stack.d.ts +22 -0
  44. package/generated/components/h-stack.js +24 -0
  45. package/generated/components/image-view.d.ts +18 -0
  46. package/generated/components/image-view.js +65 -0
  47. package/generated/components/index.d.ts +15 -3
  48. package/generated/components/index.js +15 -3
  49. package/generated/components/label-view.d.ts +19 -1
  50. package/generated/components/label-view.js +63 -62
  51. package/generated/components/labeled-content.d.ts +33 -0
  52. package/generated/components/labeled-content.js +160 -0
  53. package/generated/components/list-view.d.ts +14 -0
  54. package/generated/components/list-view.js +12 -17
  55. package/generated/components/menu-view.d.ts +12 -1
  56. package/generated/components/menu-view.js +63 -65
  57. package/generated/components/navigation-large-title.d.ts +11 -0
  58. package/generated/components/navigation-large-title.js +11 -5
  59. package/generated/components/navigation-split-view.d.ts +9 -1
  60. package/generated/components/navigation-split-view.js +10 -6
  61. package/generated/components/navigation-stack.d.ts +9 -1
  62. package/generated/components/navigation-stack.js +13 -11
  63. package/generated/components/navigation-title.d.ts +11 -1
  64. package/generated/components/navigation-title.js +58 -55
  65. package/generated/components/picker-view.d.ts +48 -7
  66. package/generated/components/picker-view.js +971 -261
  67. package/generated/components/plain-button.js +3 -3
  68. package/generated/components/progress-view.d.ts +20 -0
  69. package/generated/components/progress-view.js +120 -0
  70. package/generated/components/screen-view.js +2 -1
  71. package/generated/components/scroll-view-proxy.d.ts +13 -0
  72. package/generated/components/scroll-view-proxy.js +15 -0
  73. package/generated/components/scroll-view.d.ts +13 -1
  74. package/generated/components/scroll-view.js +140 -97
  75. package/generated/components/search-view.d.ts +12 -0
  76. package/generated/components/search-view.js +24 -0
  77. package/generated/components/section-view.d.ts +13 -1
  78. package/generated/components/section-view.js +38 -58
  79. package/generated/components/sheet-view.d.ts +4 -2
  80. package/generated/components/sheet-view.js +10 -39
  81. package/generated/components/sidebar-toggle.d.ts +9 -1
  82. package/generated/components/sidebar-toggle.js +46 -69
  83. package/generated/components/sidebar-view.d.ts +3 -0
  84. package/generated/components/sidebar-view.js +16 -9
  85. package/generated/components/sticky-container.d.ts +6 -1
  86. package/generated/components/sticky-container.js +9 -7
  87. package/generated/components/tab-bar.d.ts +3 -0
  88. package/generated/components/tab-bar.js +17 -13
  89. package/generated/components/tab-item.d.ts +3 -0
  90. package/generated/components/tab-item.js +20 -13
  91. package/generated/components/tab-view.d.ts +13 -4
  92. package/generated/components/tab-view.js +25 -89
  93. package/generated/components/table-view.d.ts +19 -0
  94. package/generated/components/table-view.js +88 -107
  95. package/generated/components/text-field.d.ts +19 -6
  96. package/generated/components/text-field.js +127 -99
  97. package/generated/components/text-view.d.ts +11 -0
  98. package/generated/components/text-view.js +16 -0
  99. package/generated/components/toggle-view.d.ts +43 -0
  100. package/generated/components/toggle-view.js +366 -0
  101. package/generated/components/tool-bar-item-group.d.ts +8 -0
  102. package/generated/components/tool-bar-item-group.js +22 -4
  103. package/generated/components/tool-bar-item.d.ts +12 -1
  104. package/generated/components/tool-bar-item.js +57 -10
  105. package/generated/components/tool-bar.d.ts +19 -0
  106. package/generated/components/tool-bar.js +48 -33
  107. package/generated/components/v-divider.d.ts +11 -0
  108. package/generated/components/v-divider.js +15 -0
  109. package/generated/components/v-keyboard.d.ts +8 -1
  110. package/generated/components/v-keyboard.js +11 -9
  111. package/generated/components/v-stack.d.ts +20 -0
  112. package/generated/components/v-stack.js +18 -2
  113. package/generated/css/index.css +4617 -1266
  114. package/generated/events/alert-dialog.d.ts +13 -0
  115. package/generated/events/alert-dialog.js +1 -0
  116. package/generated/events/confirmation-dialog.d.ts +7 -2
  117. package/generated/events/date-picker.d.ts +6 -1
  118. package/generated/events/index.d.ts +2 -0
  119. package/generated/events/index.js +2 -0
  120. package/generated/events/lifecycle-observer.d.ts +10 -2
  121. package/generated/events/picker-view.d.ts +22 -1
  122. package/generated/events/scroll-view.d.ts +10 -2
  123. package/generated/events/tab-view.d.ts +38 -8
  124. package/generated/events/text-field.d.ts +6 -1
  125. package/generated/events/toggle-view.d.ts +14 -0
  126. package/generated/events/toggle-view.js +1 -0
  127. package/generated/i18n/index.d.ts +19 -10
  128. package/generated/i18n/index.js +79 -54
  129. package/generated/i18n/locales/el.d.ts +16 -0
  130. package/generated/i18n/locales/el.js +16 -0
  131. package/generated/i18n/locales/en.d.ts +16 -0
  132. package/generated/i18n/locales/en.js +16 -0
  133. package/generated/i18n/locales/index.d.ts +4 -0
  134. package/generated/i18n/locales/index.js +4 -0
  135. package/generated/internal/class/css-style-observer.js +2 -2
  136. package/generated/internal/class/form-associated-base.d.ts +0 -4
  137. package/generated/internal/class/form-associated-base.js +22 -39
  138. package/generated/internal/class/mutation-observer-set.d.ts +9 -0
  139. package/generated/internal/class/mutation-observer-set.js +42 -0
  140. package/generated/internal/class/mutation-observer-singleton.js +18 -0
  141. package/generated/internal/class/navigation-view.d.ts +1 -1
  142. package/generated/internal/class/navigation-view.js +36 -43
  143. package/generated/internal/decorators/adaptive-slot.d.ts +1 -0
  144. package/generated/internal/decorators/adaptive-slot.js +47 -0
  145. package/generated/internal/decorators/custom-element.d.ts +1 -1
  146. package/generated/internal/decorators/custom-element.js +2 -1
  147. package/generated/internal/decorators/index.d.ts +6 -0
  148. package/generated/internal/decorators/index.js +6 -0
  149. package/generated/internal/decorators/microtask-on-connected.d.ts +39 -0
  150. package/generated/internal/decorators/microtask-on-connected.js +67 -0
  151. package/generated/internal/flags.d.ts +4 -0
  152. package/generated/internal/flags.js +1 -0
  153. package/generated/internal/privateNamespace.d.ts +10 -0
  154. package/generated/internal/privateNamespace.js +159 -1
  155. package/generated/internal/utils/$.d.ts +9 -0
  156. package/generated/internal/utils/$.js +11 -0
  157. package/generated/internal/utils/compare-big-decimals.js +7 -17
  158. package/generated/internal/utils/debug.d.ts +1 -0
  159. package/generated/internal/utils/debug.js +4 -0
  160. package/generated/internal/utils/define-translations.d.ts +1 -0
  161. package/generated/internal/utils/define-translations.js +3 -0
  162. package/generated/internal/utils/ensure-placeholder.d.ts +1 -0
  163. package/generated/internal/utils/ensure-placeholder.js +41 -0
  164. package/generated/internal/utils/index.d.ts +39 -2
  165. package/generated/internal/utils/index.js +39 -3
  166. package/generated/internal/utils/is-inside.d.ts +1 -0
  167. package/generated/internal/utils/is-inside.js +4 -0
  168. package/generated/internal/utils/kebab-case.js +6 -9
  169. package/generated/internal/utils/list-active.js +67 -12
  170. package/generated/internal/utils/touch-glass.js +5 -5
  171. package/generated/internal/vendor/morphdom.d.ts +6 -0
  172. package/generated/internal/vendor/morphdom.js +720 -0
  173. package/generated/morphdom/index.d.ts +8 -0
  174. package/generated/morphdom/index.js +8 -0
  175. package/generated/morphdom/morph.d.ts +4 -0
  176. package/generated/morphdom/morph.js +10 -0
  177. package/generated/morphdom/query-morph.d.ts +5 -0
  178. package/generated/morphdom/query-morph.js +12 -0
  179. package/generated/morphdom/render-to-string.d.ts +12 -0
  180. package/generated/morphdom/render-to-string.js +48 -0
  181. package/generated/morphdom/unsafe-html.d.ts +2 -0
  182. package/generated/morphdom/unsafe-html.js +4 -0
  183. package/generated/namespace-browser/base.d.ts +12 -3
  184. package/generated/namespace-browser/base.js +41 -18
  185. package/generated/namespace-browser/event.d.ts +10 -0
  186. package/generated/namespace-browser/event.js +1 -0
  187. package/generated/snapshot/index.d.ts +3 -1
  188. package/generated/snapshot/index.js +23 -2
  189. package/generated/tpl/html.d.ts +5 -0
  190. package/generated/tpl/html.js +7 -0
  191. package/generated/tpl/index.d.ts +6 -0
  192. package/generated/tpl/index.js +6 -0
  193. package/generated/tpl/is-template-result.d.ts +3 -0
  194. package/generated/tpl/is-template-result.js +1 -0
  195. package/generated/tpl/render.d.ts +2 -0
  196. package/generated/tpl/render.js +132 -0
  197. package/package.json +32 -7
  198. package/scss/_components.scss +15 -0
  199. package/scss/_functions.scss +10 -0
  200. package/scss/_maps.scss +293 -0
  201. package/scss/_mixins.scss +4 -0
  202. package/scss/_transitions.scss +6 -1
  203. package/scss/_utils.scss +2 -0
  204. package/scss/_vars.scss +9 -115
  205. package/scss/base/_layout.scss +17 -7
  206. package/scss/base/_reboot.scss +34 -1
  207. package/scss/base/_root.scss +143 -124
  208. package/scss/colors/_index.scss +328 -88
  209. package/scss/components/_alert-dialog.scss +111 -0
  210. package/scss/components/_bordered-button.scss +37 -0
  211. package/scss/components/_bordered-prominent-button.scss +46 -0
  212. package/scss/components/_borderless-button.scss +26 -0
  213. package/scss/components/_confirmation-dialog.scss +41 -49
  214. package/scss/components/_content-unavailable.scss +57 -0
  215. package/scss/components/_date-picker.scss +15 -15
  216. package/scss/components/_detail-placeholder.scss +1 -3
  217. package/scss/components/_disclosure-group.scss +85 -34
  218. package/scss/components/_fine-tooltip.scss +84 -0
  219. package/scss/components/_form-view.scss +63 -24
  220. package/scss/components/_glass-button.scss +37 -0
  221. package/scss/components/_glass-prominent-button.scss +47 -0
  222. package/scss/components/_group-box.scss +27 -0
  223. package/scss/components/_h-flex-stack.scss +23 -0
  224. package/scss/components/_h-stack.scss +6 -17
  225. package/scss/components/_image-view.scss +20 -0
  226. package/scss/components/_index.scss +69 -36
  227. package/scss/components/_label-view copy.scss.txt +420 -0
  228. package/scss/components/_label-view.scss +105 -120
  229. package/scss/components/_label-view.scss.txt +536 -0
  230. package/scss/components/_labeled-content.scss +67 -1
  231. package/scss/components/_list-view.scss +70 -29
  232. package/scss/components/_menu-view.scss +96 -61
  233. package/scss/components/_navigation-large-title.scss +23 -0
  234. package/scss/components/_navigation-split-view.scss +3 -3
  235. package/scss/components/_navigation-title.scss +1 -1
  236. package/scss/components/_picker-view.scss +270 -63
  237. package/scss/components/_plain-button.scss +8 -0
  238. package/scss/components/_progress-view.scss +98 -0
  239. package/scss/components/_scroll-view-proxy.scss +24 -22
  240. package/scss/components/_scroll-view-toolbars.scss +8 -2
  241. package/scss/components/_scroll-view.scss +16 -0
  242. package/scss/components/_search-view.scss +23 -0
  243. package/scss/components/_section-view.scss +23 -22
  244. package/scss/components/_sheet-view.scss +16 -6
  245. package/scss/components/_sidebar-toggle.scss +1 -4
  246. package/scss/components/_sticky-container.scss +1 -1
  247. package/scss/components/_tab-bar.scss +17 -3
  248. package/scss/components/_tab-view.scss +12 -2
  249. package/scss/components/_table-column.scss +4 -2
  250. package/scss/components/_table-row.scss +71 -3
  251. package/scss/components/_table-view.scss +27 -18
  252. package/scss/components/_text-field.scss +37 -17
  253. package/scss/components/_text-view.scss +57 -0
  254. package/scss/components/_toggle-view.scss +171 -0
  255. package/scss/components/_tool-bar-item.scss +34 -82
  256. package/scss/components/_tool-bar.scss +77 -57
  257. package/scss/components/_v-stack.scss +8 -2
  258. package/scss/final/_touch-glass.scss +31 -0
  259. package/scss/mixins/_button.scss +44 -0
  260. package/scss/mixins/_color.scss +16 -0
  261. package/scss/mixins/_dialog.scss +1 -0
  262. package/scss/mixins/_index.scss +73 -5
  263. package/scss/placeholders/_buttons.scss +46 -11
  264. package/scss/placeholders/_lists.scss +159 -126
  265. package/scss/transitions/_alert-dialog.scss +18 -0
  266. package/scss/transitions/_confirmation-dialog.scss +8 -0
  267. package/scss/transitions/_fine-tooltip.scss +21 -0
  268. package/scss/transitions/_menu-view.scss +17 -15
  269. package/scss/transitions/_progress-view.scss +23 -0
  270. package/scss/transitions/_sheet-view.scss +30 -0
  271. package/scss/transitions/_tab-bar.scss +6 -5
  272. package/scss/utils/_background.scss +52 -0
  273. package/scss/utils/_frame.scss +59 -40
  274. package/scss/utils/_index.scss +45 -56
  275. package/scss/utils/_scroll-view.scss +1 -1
  276. package/scss/utils/_spacing.scss +1 -1
  277. package/scss/utils/_stacks.scss +34 -164
  278. package/web-components.css-data/en.json +28 -0
  279. package/web-components.html-data/en.json +2456 -166
  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/generated/internal/utils/{cash/ancestors.d.ts → ancestors.d.ts} +0 -0
  288. /package/generated/internal/utils/{cash/ancestors.js → ancestors.js} +0 -0
  289. /package/generated/internal/utils/{cash/next-all.d.ts → next-all.d.ts} +0 -0
  290. /package/generated/internal/utils/{cash/next-all.js → next-all.js} +0 -0
  291. /package/generated/internal/utils/{cash/next.d.ts → next.d.ts} +0 -0
  292. /package/generated/internal/utils/{cash/next.js → next.js} +0 -0
  293. /package/generated/internal/utils/{cash/prev-all.d.ts → prev-all.d.ts} +0 -0
  294. /package/generated/internal/utils/{cash/prev-all.js → prev-all.js} +0 -0
  295. /package/generated/internal/utils/{cash/prev.d.ts → prev.d.ts} +0 -0
  296. /package/generated/internal/utils/{cash/prev.js → prev.js} +0 -0
  297. /package/generated/internal/utils/{cash/prop.d.ts → prop.d.ts} +0 -0
  298. /package/generated/internal/utils/{cash/prop.js → prop.js} +0 -0
  299. /package/generated/internal/utils/{cash/siblings.d.ts → siblings.d.ts} +0 -0
  300. /package/generated/internal/utils/{cash/siblings.js → siblings.js} +0 -0
@@ -1,16 +1,16 @@
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
  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
+ debug(`${PlainButton.name} ⚡️ disconnect`);
10
10
  CleanupRegistry.unregister(el);
11
11
  }
12
12
  static polyfillConnectedCallback(el) {
13
- console.debug(`${PlainButton.name} ⚡️ connect`);
13
+ debug(`${PlainButton.name} ⚡️ connect`);
14
14
  el.tabIndex = 0;
15
15
  CleanupRegistry.register(el, onoff('click', PlainButton.#handleClick, el).on());
16
16
  }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @summary A view that shows how far along a task is.
3
+ *
4
+ * @slot — The default slot.
5
+ * @slot current-value
6
+ */
7
+ export declare class ProgressView extends HTMLElement {
8
+ #private;
9
+ static get observedAttributes(): string[];
10
+ get progressViewStyle(): "circular" | "linear";
11
+ constructor();
12
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
13
+ disconnectedCallback(): void;
14
+ connectedCallback(): void;
15
+ }
16
+ declare global {
17
+ interface HTMLElementTagNameMap {
18
+ 'progress-view': ProgressView;
19
+ }
20
+ }
@@ -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 { $, debug } from '../internal/utils';
5
+ import { queryMorph } from '../morphdom';
6
+ import { Snapshot } from '../snapshot';
7
+ import { html } from '../tpl';
8
+ const progressViewStyles = ['circular', 'linear'];
9
+ /**
10
+ * @summary A view that shows how far along a task is.
11
+ *
12
+ * @slot — The default slot.
13
+ * @slot current-value
14
+ */
15
+ export class ProgressView extends HTMLElement {
16
+ static get observedAttributes() {
17
+ return ['label', 'current-value-label', 'value'];
18
+ }
19
+ static #templates = new Map();
20
+ #cssStyleObserver;
21
+ #progressViewStyle;
22
+ #lastRenderedStyle;
23
+ #shadowRoot;
24
+ #slots = new Map();
25
+ get progressViewStyle() {
26
+ return this.#progressViewStyle ?? 'circular';
27
+ }
28
+ get #template() {
29
+ if (!_a.#templates.has(this.progressViewStyle))
30
+ switch (this.progressViewStyle) {
31
+ case 'linear':
32
+ _a.#templates.set(this.progressViewStyle, $(html `
33
+ <slot></slot>
34
+ <div part="root progress-control progress-line-control"></div>
35
+ <slot name="current-value"></slot>
36
+ `));
37
+ break;
38
+ case 'circular':
39
+ default:
40
+ _a.#templates.set(this.progressViewStyle, $(html `
41
+ <div part="root progress-control progress-circular-control">
42
+ <div part="root progress-control progress-circular-blade progress-circular-blade-1"></div>
43
+ <div part="root progress-control progress-circular-blade progress-circular-blade-2"></div>
44
+ <div part="root progress-control progress-circular-blade progress-circular-blade-3"></div>
45
+ <div part="root progress-control progress-circular-blade progress-circular-blade-4"></div>
46
+ <div part="root progress-control progress-circular-blade progress-circular-blade-5"></div>
47
+ <div part="root progress-control progress-circular-blade progress-circular-blade-6"></div>
48
+ <div part="root progress-control progress-circular-blade progress-circular-blade-7"></div>
49
+ <div part="root progress-control progress-circular-blade progress-circular-blade-8"></div>
50
+ </div>
51
+ <slot></slot>
52
+ <slot name="current-value"></slot>
53
+ `));
54
+ break;
55
+ }
56
+ return _a.#templates.get(this.progressViewStyle);
57
+ }
58
+ constructor() {
59
+ super();
60
+ this.#shadowRoot = this.attachShadow({ mode: 'closed' });
61
+ }
62
+ attributeChangedCallback(name, oldValue, newValue) {
63
+ debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
64
+ switch (name) {
65
+ case 'label': {
66
+ const label = this.querySelector(':scope>label-view:not([slot])') ?? this.appendChild($(html `<label-view foreground="secondary"></label-view>`, '>1'));
67
+ if (newValue) {
68
+ label.setAttribute('title', newValue);
69
+ }
70
+ else
71
+ label.removeAttribute('title');
72
+ break;
73
+ }
74
+ case 'current-value-label': {
75
+ queryMorph('[slot=current-value]', html `<label-view slot="current-value" font="callout" foreground="secondary">${newValue ? html `<span>${newValue}</span>` : null}</label-view>`, this);
76
+ break;
77
+ }
78
+ }
79
+ }
80
+ disconnectedCallback() {
81
+ debug(`${_a.name} ⚡️ disconnect`);
82
+ CleanupRegistry.unregister(this);
83
+ }
84
+ connectedCallback() {
85
+ debug(`${_a.name} ⚡️ connect`);
86
+ this.inert = true;
87
+ this.#cssStyleObserver = new CSSStyleObserver({
88
+ properties: ['--progress-view-style-index'],
89
+ });
90
+ this.#cssStyleObserver.observe(this, this.#handleStyleChange);
91
+ Snapshot.waitReady.then(() => self.requestAnimationFrame(this.#handleStyleChange));
92
+ }
93
+ #handleStyleChange = () => {
94
+ debug(`${_a.name} ⚡️ style`);
95
+ const raw = self.getComputedStyle(this).getPropertyValue('--progress-view-style-index').trim();
96
+ const newValue = progressViewStyles[Number(raw)] ?? progressViewStyles[0];
97
+ if (newValue === this.#progressViewStyle)
98
+ return;
99
+ this.#progressViewStyle = newValue;
100
+ this.#render();
101
+ };
102
+ #render() {
103
+ 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,10 @@
1
+ import { debug } 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
+ debug(`${ScreenView.name} ⚡️ disconnect`);
8
9
  }
9
10
  }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @summary A wrapper for {hv}-stacks
3
+ */
4
+ export declare class ScrollViewProxy extends HTMLElement {
5
+ constructor();
6
+ disconnectedCallback(): void;
7
+ connectedCallback(): void;
8
+ }
9
+ declare global {
10
+ interface HTMLElementTagNameMap {
11
+ 'scroll-view-proxy': ScrollViewProxy;
12
+ }
13
+ }
@@ -0,0 +1,15 @@
1
+ import { debug } from '../internal/utils';
2
+ /**
3
+ * @summary A wrapper for {hv}-stacks
4
+ */
5
+ export class ScrollViewProxy extends HTMLElement {
6
+ constructor() {
7
+ super();
8
+ }
9
+ disconnectedCallback() {
10
+ debug(`${ScrollViewProxy.name} ⚡️ disconnect`);
11
+ }
12
+ connectedCallback() {
13
+ debug(`${ScrollViewProxy.name} ⚡️ connect`);
14
+ }
15
+ }
@@ -1,10 +1,22 @@
1
+ /**
2
+ * @summary A view that scrolls its content when it doesn’t fit the screen.
3
+ *
4
+ * @slot — The default slot.
5
+ * @slot top-bar-principal
6
+ * @slot bottom-bar-principal
7
+ */
1
8
  export declare class ScrollView extends HTMLElement {
2
9
  #private;
3
10
  static get observedAttributes(): string[];
4
11
  static get template(): DocumentFragment;
5
12
  constructor();
13
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
6
14
  disconnectedCallback(): void;
7
15
  connectedCallback(): void;
8
- attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
9
16
  centerScrollToElement(child: Element): void;
10
17
  }
18
+ declare global {
19
+ interface HTMLElementTagNameMap {
20
+ 'scroll-view': ScrollView;
21
+ }
22
+ }
@@ -1,30 +1,47 @@
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 { $, debug, frame, onoff, slowHideShow } from '../internal/utils';
6
+ import { queryMorph } from '../morphdom';
7
+ import { html } from '../tpl';
6
8
  const observers = new ResizeObserverSingleton();
9
+ /**
10
+ * @summary A view that scrolls its content when it doesn’t fit the screen.
11
+ *
12
+ * @slot — The default slot.
13
+ * @slot top-bar-principal
14
+ * @slot bottom-bar-principal
15
+ */
7
16
  export class ScrollView extends HTMLElement {
8
17
  static get observedAttributes() {
9
- return ['navigation-title', 'navigation-inline-title', 'navigation-inline-subtitle', 'navigation-bar-title-display-mode'];
18
+ return [
19
+ /**
20
+ * Configures the view’s title for purposes of navigation. Shorthand for `<v-stack spacing="0" alignment="fill" slot="top-bar-principal"><label-view line-limit="1" truncation-mode="tail" font="headline"><span>Navigation Title</span></label-view></v-stack>`
21
+ */
22
+ 'navigation-title',
23
+ 'navigation-inline-title',
24
+ 'navigation-inline-subtitle',
25
+ 'navigation-icon',
26
+ 'navigation-bar-title-display-mode',
27
+ ];
10
28
  }
11
29
  static #template;
12
30
  static get template() {
13
- return (this.#template ??= $(String.raw `
14
- <slot></slot>
15
- <div part="root scroll-view-navbar">
16
- <div part="root scroll-view-navbar-stack">
17
- <slot name="top-bar-principal"></slot>
18
- </div>
19
- </div>
20
- <div part="root scroll-view-toolbar">
21
- <div part="root scroll-view-toolbar-stack">
22
- <slot name="bottom-bar-principal"></slot>
23
- </div>
24
- </div>`, ''));
31
+ return (this.#template ??= $(html `<slot></slot>
32
+ <div part="root scroll-view-navbar">
33
+ <div part="root scroll-view-navbar-stack">
34
+ <slot name="top-bar-principal"></slot>
35
+ </div>
36
+ </div>
37
+ <div part="root scroll-view-toolbar">
38
+ <div part="root scroll-view-toolbar-stack">
39
+ <slot name="bottom-bar-principal"></slot>
40
+ </div>
41
+ </div>`));
25
42
  }
26
43
  #shadowRoot;
27
- #navbarPrincipalSlot;
44
+ #slots = new Map();
28
45
  #isMidScroll;
29
46
  #lastScrollTop = 0;
30
47
  // #stopRecordingScrollTop?: boolean = false
@@ -33,16 +50,42 @@ export class ScrollView extends HTMLElement {
33
50
  super();
34
51
  this.#shadowRoot = this.attachShadow({ mode: 'closed' });
35
52
  this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
36
- this.#navbarPrincipalSlot = this.#shadowRoot.querySelector('slot[name=top-bar-principal]') ?? undefined;
53
+ for (const slot of this.#shadowRoot.querySelectorAll('slot'))
54
+ this.#slots?.set(slot.name, slot);
55
+ CleanupRegistry.register(this, () => {
56
+ this.#slots = new Map();
57
+ });
58
+ }
59
+ attributeChangedCallback(name, oldValue, newValue) {
60
+ debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
61
+ switch (name) {
62
+ case 'navigation-inline-title':
63
+ this.#renderNavTitle(newValue, this.getAttribute('navigation-inline-subtitle'));
64
+ break;
65
+ case 'navigation-inline-subtitle':
66
+ this.#renderNavTitle(this.getAttribute('navigation-inline-title'), newValue);
67
+ break;
68
+ case 'navigation-title': {
69
+ if (oldValue === newValue)
70
+ return;
71
+ this.#renderNavTitleComponent(newValue, null, this.getAttribute('navigation-icon'));
72
+ break;
73
+ }
74
+ case 'navigation-bar-title-display-mode':
75
+ if (oldValue === newValue)
76
+ break;
77
+ this.#syncSibling(`${oldValue}${newValue}`);
78
+ break;
79
+ }
37
80
  }
38
81
  disconnectedCallback() {
39
- console.debug(`${_a.name} ⚡️ disconnect`);
82
+ debug(`${_a.name} ⚡️ disconnect`);
40
83
  CleanupRegistry.unregister(this);
41
84
  observers.unobserve(this);
42
- frame().then(() => LifecycleObserver.dispatchEvent(new CustomEvent('pagehide', { detail: { page: this }, bubbles: true, composed: true })));
85
+ frame().then(() => lifecycleObserver.dispatchEvent(new CustomEvent('pagehide', { detail: { page: this }, bubbles: true, composed: true })));
43
86
  }
44
87
  connectedCallback() {
45
- console.debug(`${_a.name} ⚡️ connect`);
88
+ debug(`${_a.name} ⚡️ connect`);
46
89
  CleanupRegistry.register(this, onoff([
47
90
  // { types: 'tabreveal', listener: this.#handleTabReveal as EventListener },
48
91
  { types: 'beforetabswap', listener: this.#handleTabBeforeswap },
@@ -51,7 +94,7 @@ export class ScrollView extends HTMLElement {
51
94
  { types: 'scroll', listener: this.#handleScroll, addOptions: { passive: true } },
52
95
  { types: 'scrollend', listener: this.#handleScrollend, addOptions: { passive: true } },
53
96
  ], this).on());
54
- frame().then(() => LifecycleObserver.dispatchEvent(new CustomEvent('pageshow', { detail: { page: this }, bubbles: true, composed: true })));
97
+ frame().then(() => lifecycleObserver.dispatchEvent(new CustomEvent('pageshow', { detail: { page: this }, bubbles: true, composed: true })));
55
98
  observers.observe(this, this.#handleMeasure.bind(this));
56
99
  // frame(this).then((r) => {
57
100
  // if (!r) return
@@ -65,44 +108,32 @@ export class ScrollView extends HTMLElement {
65
108
  // })
66
109
  // })
67
110
  }
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}`);
111
+ #syncSibling = (comp) => {
112
+ if (!this.isConnected)
113
+ return;
114
+ if (this.closest('[hidden]'))
115
+ return; // iREPAINT ALERT! if (0 === this.offsetHeight + this.offsetWidth) break
116
+ if (!this.#isMidScroll)
117
+ return;
118
+ const title = this.#slots?.get('top-bar-principal')?.assignedElements({ flatten: true })?.at(0);
119
+ slowHideShow('largeinline' === `${comp}` ? 'show' : 'hide', title);
120
+ };
121
+ #handleScroll = ({ target, type }) => {
122
+ debug(`${_a.name} ⚡️ ${type}`);
94
123
  if (!this.#isMidScroll)
95
124
  this.#isMidScroll = true;
96
125
  // if (this.#stopRecordingScrollTop) return
97
- this.#lastScrollTop = evt.target.scrollTop;
126
+ if (!(target instanceof HTMLElement))
127
+ return;
128
+ this.#lastScrollTop = target.scrollTop;
98
129
  };
99
130
  #handleScrollend = (evt) => {
100
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
131
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
101
132
  if (this.#isMidScroll)
102
133
  this.#isMidScroll = false;
103
134
  };
104
135
  #handleMeasure = (entry) => {
105
- console.debug(`${_a.name} ⚡️ measure`);
136
+ debug(`${_a.name} ⚡️ measure`);
106
137
  if (0 === entry.contentRect.width + entry.contentRect.height)
107
138
  return;
108
139
  if (undefined === this.#beforeTabSwapLastScrolltop)
@@ -118,38 +149,39 @@ export class ScrollView extends HTMLElement {
118
149
  // this.#stopRecordingScrollTop = false
119
150
  this.#beforeTabSwapLastScrolltop = undefined;
120
151
  };
121
- #handleTabReveal = (evt) => {
122
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
123
- if (!evt.target?.contains(this))
152
+ // #handleTabReveal = ({ type, target }: CustomEvent<TabDetail>) => {
153
+ // debug(`${ScrollView.name} ⚡️ ${type}`)
154
+ // if (!(target instanceof HTMLElement)) return
155
+ // if (!target.contains(this)) return
156
+ // if (this.closest('[hidden]')) return
157
+ // // console.log(888, this.#beforeTabSwapLastScrolltop, this.#lastScrollTop)
158
+ // // this.style.setProperty('clip-path', 'inset(50%)')
159
+ // // this.style.setProperty('opacity', '0.001')
160
+ // // this.style.opacity = '0.001'
161
+ // // console.log(99, this.style.opacity)
162
+ // // self.requestAnimationFrame(() => {
163
+ // // if (undefined === this.#beforeTabSwapLastScrolltop) return
164
+ // // if (this.#beforeTabSwapLastScrolltop === this.#lastScrollTop) return
165
+ // // this.#stopRecordingScrollTop = true
166
+ // // // console.log(999, this.#beforeTabSwapLastScrolltop)
167
+ // // // console.log(999, this, this.#beforeTabSwapLastScrolltop, this.#lastScrollTop)
168
+ // // this.scrollTop = this.#beforeTabSwapLastScrolltop
169
+ // // // this.scrollTo({
170
+ // // // top: this.#beforeTabSwapLastScrolltop,
171
+ // // // behavior: 'instant',
172
+ // // // }) //
173
+ // // this.#stopRecordingScrollTop = false
174
+ // // this.#beforeTabSwapLastScrolltop = undefined
175
+ // // // self.requestAnimationFrame(() => {
176
+ // // // // this.style.removeProperty('opacity')
177
+ // // // })
178
+ // // })
179
+ // }
180
+ #handleTabBeforeswap = ({ type, target }) => {
181
+ debug(`${_a.name} ⚡️ ${type}`);
182
+ if (!(target instanceof HTMLElement))
124
183
  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))
184
+ if (!target.contains(this))
153
185
  return;
154
186
  if (this.closest('[hidden]'))
155
187
  return;
@@ -166,22 +198,33 @@ export class ScrollView extends HTMLElement {
166
198
  });
167
199
  }
168
200
  #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();
201
+ // const titleTemplate = `<label-view line-limit="1" truncation-mode="tail" font="headline"><span></span></label-view>`,
202
+ // subtitleTemplate = `<label-view line-limit="1" truncation-mode="tail" foreground="secondary" font="callout"><span></span></label-view>`
203
+ // const vStack =
204
+ // this.querySelector(':scope>[slot=top-bar-principal]') ?? this.appendChild($(`<v-stack spacing="0" alignment="fill" slot="top-bar-principal">${titleTemplate}${subtitleTemplate}</v-stack>`, '>1'))
205
+ // renderLabel(':scope>label-view:nth-child(1)', titleTemplate, vStack, title)
206
+ // renderLabel(':scope>label-view:nth-child(2)', subtitleTemplate, vStack, subtitle)
207
+ // const container = this.querySelector(':scope>[slot=top-bar-principal]') ?? this.appendChild($(`<v-stack spacing="0" alignment="fill" slot="top-bar-principal"></v-stack>`, '>1'))
208
+ queryMorph('[slot=top-bar-principal]', html `<v-stack spacing="0" alignment="fill" slot="top-bar-principal">
209
+ ${title ? html `<label-view line-limit="1" truncation-mode="tail" font="headline"><span>${title}</span></label-view>` : null}
210
+ ${subtitle ? html `<label-view line-limit="1" truncation-mode="tail" foreground="secondary" font="callout"><span>${subtitle}</span></label-view>` : null}
211
+ </v-stack>`, this);
212
+ // render(
213
+ // html`
214
+ // ${title ? html`<label-view line-limit="1" truncation-mode="tail" font="headline"><span>${title}</span></label-view>` : null}
215
+ // ${subtitle ? html`<label-view line-limit="1" truncation-mode="tail" foreground="secondary" font="callout"><span>${subtitle}</span></label-view>` : null}
216
+ // `,
217
+ // container
218
+ // )
219
+ };
220
+ #renderNavTitleComponent = (title, subtitle, icon) => {
221
+ if (!title)
222
+ return this.querySelector(':scope>v-stack>navigation-title:not([slot])')?.remove?.();
223
+ // const container = ((vs = this.querySelector<HTMLElement>(':scope>v-stack') ?? (this.appendChild($(`<v-stack></v-stack>`, '>1')) as HTMLElement)) =>
224
+ // vs.querySelector<HTMLElement>(':scope>navigation-title:not([slot])') ??
225
+ // vs.appendChild($(html`<navigation-title value="${title}" subtitle="${subtitle}" system-image="${icon}" padding></navigation-title>`.toString(), '>1')))()
226
+ const container = this.querySelector(':scope>v-stack') ?? this.appendChild($(html `<v-stack></v-stack>`, '>1'));
227
+ queryMorph('navigation-title:not([slot])', html `<navigation-title value="${title}" subtitle="${subtitle}" system-image="${icon}" padding></navigation-title>`, container);
185
228
  };
186
229
  }
187
230
  _a = ScrollView;
@@ -0,0 +1,12 @@
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
+ }
8
+ declare global {
9
+ interface HTMLElementTagNameMap {
10
+ 'search-view': SearchView;
11
+ }
12
+ }
@@ -0,0 +1,24 @@
1
+ import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
+ import { debug, onoff, touchGlass } from '../internal/utils';
3
+ import { InputBase } from '../namespace-browser/base';
4
+ export class SearchView extends InputBase {
5
+ constructor() {
6
+ super();
7
+ }
8
+ static polyfillDisconnectedCallback(el) {
9
+ debug(`${SearchView.name} ⚡️ disconnect`);
10
+ CleanupRegistry.unregister(el);
11
+ }
12
+ static polyfillConnectedCallback(el) {
13
+ debug(`${SearchView.name} ⚡️ connect`);
14
+ CleanupRegistry.register(el, onoff(touchGlass(el, (t) => t, () => true), el).on());
15
+ el.type = 'search';
16
+ }
17
+ static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]) {
18
+ debug(`${SearchView.name} ⚡️ attr-change [${attributeName}] ("${oldValue}" → "${target.getAttribute(attributeName ?? '')}")`);
19
+ const node = target instanceof HTMLInputElement;
20
+ if (!node)
21
+ return;
22
+ //
23
+ }
24
+ }
@@ -1,9 +1,21 @@
1
+ /**
2
+ * @summary A container view that groups related content together.
3
+ *
4
+ * @slot — The default slot.
5
+ * @slot header
6
+ * @slot footer
7
+ */
1
8
  export declare class SectionView extends HTMLElement {
2
9
  #private;
3
10
  static get observedAttributes(): string[];
4
11
  static get template(): DocumentFragment;
5
12
  constructor();
13
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
6
14
  disconnectedCallback(): void;
7
15
  connectedCallback(): void;
8
- attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
16
+ }
17
+ declare global {
18
+ interface HTMLElementTagNameMap {
19
+ 'section-view': SectionView;
20
+ }
9
21
  }