@swiftwc/ui 0.0.0-dev.7 → 0.0.0-dev.71

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 (343) hide show
  1. package/README.md +15 -0
  2. package/generated/buses/alert-dialog.d.ts +2 -0
  3. package/generated/buses/alert-dialog.js +1 -0
  4. package/generated/buses/confirmation-dialog.d.ts +2 -0
  5. package/generated/buses/confirmation-dialog.js +1 -0
  6. package/generated/buses/index.d.ts +6 -0
  7. package/generated/buses/index.js +6 -0
  8. package/generated/buses/lifecycle-observer.d.ts +2 -0
  9. package/generated/buses/lifecycle-observer.js +1 -0
  10. package/generated/client/index.d.ts +25 -4
  11. package/generated/client/index.js +234 -181
  12. package/generated/components/alert-dialog.d.ts +8 -0
  13. package/generated/components/alert-dialog.js +99 -0
  14. package/generated/components/body-view.js +5 -2
  15. package/generated/components/bordered-button.d.ts +17 -0
  16. package/generated/components/bordered-button.js +56 -0
  17. package/generated/components/bordered-prominent-button.d.ts +17 -0
  18. package/generated/components/bordered-prominent-button.js +56 -0
  19. package/generated/components/borderless-button.d.ts +12 -4
  20. package/generated/components/borderless-button.js +47 -16
  21. package/generated/components/color-scheme.d.ts +7 -0
  22. package/generated/components/color-scheme.js +54 -0
  23. package/generated/components/confirmation-dialog.d.ts +9 -0
  24. package/generated/components/confirmation-dialog.js +113 -0
  25. package/generated/components/content-unavailable-view.d.ts +24 -0
  26. package/generated/components/content-unavailable-view.js +81 -0
  27. package/generated/components/date-picker.d.ts +36 -0
  28. package/generated/components/date-picker.js +461 -0
  29. package/generated/components/disclosure-group.d.ts +9 -7
  30. package/generated/components/disclosure-group.js +51 -65
  31. package/generated/components/fine-tooltip.d.ts +7 -0
  32. package/generated/components/fine-tooltip.js +107 -0
  33. package/generated/components/form-view.d.ts +9 -0
  34. package/generated/components/form-view.js +63 -0
  35. package/generated/components/glass-button.d.ts +16 -0
  36. package/generated/components/glass-button.js +53 -0
  37. package/generated/components/glass-prominent-button.d.ts +16 -0
  38. package/generated/components/glass-prominent-button.js +53 -0
  39. package/generated/components/h-stack.d.ts +16 -0
  40. package/generated/components/h-stack.js +25 -0
  41. package/generated/components/image-view.d.ts +9 -0
  42. package/generated/components/image-view.js +46 -0
  43. package/generated/components/index.d.ts +42 -10
  44. package/generated/components/index.js +42 -15
  45. package/generated/components/label-view.d.ts +14 -0
  46. package/generated/components/label-view.js +56 -0
  47. package/generated/components/labeled-content.d.ts +9 -0
  48. package/generated/components/labeled-content.js +115 -0
  49. package/generated/components/list-view.d.ts +8 -0
  50. package/generated/components/list-view.js +32 -0
  51. package/generated/components/menu-view.d.ts +12 -0
  52. package/generated/components/menu-view.js +142 -0
  53. package/generated/components/navigation-large-title.d.ts +6 -0
  54. package/generated/components/navigation-large-title.js +181 -0
  55. package/generated/components/navigation-split-view.d.ts +7 -2
  56. package/generated/components/navigation-split-view.js +19 -3
  57. package/generated/components/navigation-stack.d.ts +6 -2
  58. package/generated/components/navigation-stack.js +23 -59
  59. package/generated/components/navigation-title.d.ts +8 -0
  60. package/generated/components/navigation-title.js +50 -0
  61. package/generated/components/picker-view.d.ts +55 -0
  62. package/generated/components/picker-view.js +1132 -0
  63. package/generated/components/plain-button.d.ts +7 -0
  64. package/generated/components/plain-button.js +22 -0
  65. package/generated/components/progress-view.d.ts +13 -0
  66. package/generated/components/progress-view.js +120 -0
  67. package/generated/components/screen-view.d.ts +1 -1
  68. package/generated/components/screen-view.js +4 -2
  69. package/generated/components/scroll-view-proxy.d.ts +8 -0
  70. package/generated/components/scroll-view-proxy.js +17 -0
  71. package/generated/components/scroll-view.d.ts +4 -2
  72. package/generated/components/scroll-view.js +179 -64
  73. package/generated/components/search-view.d.ts +7 -0
  74. package/generated/components/search-view.js +30 -0
  75. package/generated/components/section-view.d.ts +9 -0
  76. package/generated/components/section-view.js +85 -0
  77. package/generated/components/sheet-view.d.ts +3 -4
  78. package/generated/components/sheet-view.js +53 -17
  79. package/generated/components/sidebar-toggle.d.ts +1 -1
  80. package/generated/components/sidebar-toggle.js +76 -72
  81. package/generated/components/sidebar-view.d.ts +2 -4
  82. package/generated/components/sidebar-view.js +25 -17
  83. package/generated/components/sticky-container.d.ts +6 -0
  84. package/generated/components/sticky-container.js +26 -0
  85. package/generated/components/tab-bar.d.ts +5 -4
  86. package/generated/components/tab-bar.js +34 -17
  87. package/generated/components/tab-item.d.ts +4 -3
  88. package/generated/components/tab-item.js +125 -29
  89. package/generated/components/tab-view.d.ts +17 -2
  90. package/generated/components/tab-view.js +252 -17
  91. package/generated/components/table-view.d.ts +12 -0
  92. package/generated/components/table-view.js +153 -0
  93. package/generated/components/text-field.d.ts +29 -0
  94. package/generated/components/text-field.js +496 -0
  95. package/generated/components/toggle-view.d.ts +28 -0
  96. package/generated/components/toggle-view.js +222 -0
  97. package/generated/components/tool-bar-item-group.d.ts +5 -0
  98. package/generated/components/tool-bar-item-group.js +28 -0
  99. package/generated/components/tool-bar-item.d.ts +8 -0
  100. package/generated/components/tool-bar-item.js +66 -0
  101. package/generated/components/tool-bar.d.ts +19 -0
  102. package/generated/components/tool-bar.js +93 -0
  103. package/generated/components/v-keyboard.d.ts +4 -0
  104. package/generated/components/v-keyboard.js +72 -70
  105. package/generated/components/v-stack.d.ts +19 -0
  106. package/generated/components/v-stack.js +28 -0
  107. package/generated/css/index.css +8966 -0
  108. package/generated/events/alert-dialog.d.ts +8 -0
  109. package/generated/events/confirmation-dialog.d.ts +9 -0
  110. package/generated/events/confirmation-dialog.js +1 -0
  111. package/generated/events/date-picker.d.ts +8 -0
  112. package/generated/events/date-picker.js +1 -0
  113. package/generated/events/index.d.ts +9 -0
  114. package/generated/events/index.js +9 -0
  115. package/generated/events/lifecycle-observer.d.ts +10 -0
  116. package/generated/events/lifecycle-observer.js +1 -0
  117. package/generated/events/picker-view.d.ts +15 -0
  118. package/generated/events/picker-view.js +1 -0
  119. package/generated/events/scroll-view.d.ts +10 -0
  120. package/generated/events/scroll-view.js +1 -0
  121. package/generated/events/tab-view.d.ts +28 -0
  122. package/generated/events/tab-view.js +1 -0
  123. package/generated/events/text-field.d.ts +8 -0
  124. package/generated/events/text-field.js +1 -0
  125. package/generated/events/toggle-view.d.ts +9 -0
  126. package/generated/events/toggle-view.js +1 -0
  127. package/generated/i18n/index.d.ts +34 -0
  128. package/generated/i18n/index.js +167 -0
  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/cleanup-registry.d.ts +5 -0
  136. package/generated/internal/class/cleanup-registry.js +38 -0
  137. package/generated/internal/class/css-style-observer.d.ts +8 -0
  138. package/generated/internal/class/css-style-observer.js +26 -0
  139. package/generated/internal/class/form-associated-base.d.ts +16 -0
  140. package/generated/internal/class/form-associated-base.js +78 -0
  141. package/generated/internal/class/mutation-observer-set.d.ts +9 -0
  142. package/generated/internal/class/mutation-observer-set.js +42 -0
  143. package/generated/internal/class/mutation-observer-singleton.d.ts +10 -0
  144. package/generated/internal/class/mutation-observer-singleton.js +64 -0
  145. package/generated/internal/class/navigation-path.d.ts +15 -0
  146. package/generated/internal/class/navigation-path.js +84 -0
  147. package/generated/internal/class/navigation-view.d.ts +8 -0
  148. package/generated/internal/class/navigation-view.js +72 -0
  149. package/generated/internal/class/resize-observer-singleton.d.ts +7 -0
  150. package/generated/internal/class/resize-observer-singleton.js +22 -0
  151. package/generated/internal/decorators/adaptive-slot.d.ts +1 -0
  152. package/generated/internal/decorators/adaptive-slot.js +50 -0
  153. package/generated/internal/decorators/custom-element.d.ts +5 -0
  154. package/generated/internal/decorators/custom-element.js +5 -0
  155. package/generated/internal/decorators/index.d.ts +6 -0
  156. package/generated/internal/decorators/index.js +6 -0
  157. package/generated/internal/decorators/microtask-on-connected.d.ts +39 -0
  158. package/generated/internal/decorators/microtask-on-connected.js +67 -0
  159. package/generated/internal/privateNamespace.d.ts +14 -0
  160. package/generated/internal/privateNamespace.js +168 -0
  161. package/generated/internal/utils/add.d.ts +1 -0
  162. package/generated/internal/utils/add.js +7 -0
  163. package/generated/internal/utils/cash/ancestors.d.ts +1 -0
  164. package/generated/internal/utils/cash/ancestors.js +27 -0
  165. package/generated/internal/utils/cash/index.d.ts +23 -0
  166. package/generated/internal/utils/cash/index.js +25 -0
  167. package/generated/internal/utils/cash/next-all.d.ts +1 -0
  168. package/generated/internal/utils/cash/next-all.js +10 -0
  169. package/generated/internal/utils/cash/next.d.ts +1 -0
  170. package/generated/internal/utils/cash/next.js +9 -0
  171. package/generated/internal/utils/cash/prev-all.d.ts +1 -0
  172. package/generated/internal/utils/cash/prev-all.js +10 -0
  173. package/generated/internal/utils/cash/prev.d.ts +1 -0
  174. package/generated/internal/utils/cash/prev.js +9 -0
  175. package/generated/internal/utils/cash/prop.d.ts +18 -0
  176. package/generated/internal/utils/cash/prop.js +30 -0
  177. package/generated/internal/utils/cash/siblings.d.ts +1 -0
  178. package/generated/internal/utils/cash/siblings.js +10 -0
  179. package/generated/internal/utils/clamp.d.ts +1 -0
  180. package/generated/internal/utils/clamp.js +4 -0
  181. package/generated/internal/utils/compare-big-decimals.d.ts +1 -0
  182. package/generated/internal/utils/compare-big-decimals.js +90 -0
  183. package/generated/internal/utils/debounce.d.ts +1 -0
  184. package/generated/internal/utils/debounce.js +13 -0
  185. package/generated/internal/utils/dev-flags.d.ts +3 -0
  186. package/generated/internal/utils/dev-flags.js +5 -0
  187. package/generated/internal/utils/ensure-placeholder.d.ts +1 -0
  188. package/generated/internal/utils/ensure-placeholder.js +55 -0
  189. package/generated/internal/utils/frame.d.ts +1 -0
  190. package/generated/internal/utils/frame.js +6 -0
  191. package/generated/internal/utils/index.d.ts +21 -1
  192. package/generated/internal/utils/index.js +24 -1
  193. package/generated/internal/utils/is-inside.d.ts +1 -0
  194. package/generated/internal/utils/is-inside.js +4 -0
  195. package/generated/internal/utils/kebab-case.d.ts +1 -1
  196. package/generated/internal/utils/list-active.d.ts +7 -0
  197. package/generated/internal/utils/list-active.js +83 -0
  198. package/generated/internal/utils/microtask.d.ts +1 -0
  199. package/generated/internal/utils/microtask.js +3 -0
  200. package/generated/internal/utils/onoff.d.ts +45 -0
  201. package/generated/internal/utils/onoff.js +31 -0
  202. package/generated/internal/utils/render-label-icon.d.ts +2 -0
  203. package/generated/internal/utils/render-label-icon.js +19 -0
  204. package/generated/internal/utils/render-label-title.d.ts +2 -0
  205. package/generated/internal/utils/render-label-title.js +16 -0
  206. package/generated/internal/utils/render-label.d.ts +1 -0
  207. package/generated/internal/utils/render-label.js +19 -0
  208. package/generated/internal/utils/set.d.ts +1 -0
  209. package/generated/internal/utils/set.js +7 -0
  210. package/generated/internal/utils/sleep.d.ts +1 -0
  211. package/generated/internal/utils/sleep.js +3 -0
  212. package/generated/internal/utils/slow-hide-show.d.ts +1 -0
  213. package/generated/internal/utils/slow-hide-show.js +16 -0
  214. package/generated/internal/utils/timeout.d.ts +5 -0
  215. package/generated/internal/utils/timeout.js +16 -0
  216. package/generated/internal/utils/touch-glass.d.ts +7 -0
  217. package/generated/internal/utils/touch-glass.js +19 -0
  218. package/generated/namespace-browser/base.d.ts +45 -0
  219. package/generated/namespace-browser/base.js +115 -0
  220. package/generated/namespace-browser/index.d.ts +7 -0
  221. package/generated/namespace-browser/index.js +1 -0
  222. package/generated/snapshot/index.d.ts +4 -11
  223. package/generated/snapshot/index.js +55 -145
  224. package/generated/tpl/html.d.ts +5 -0
  225. package/generated/tpl/html.js +3 -0
  226. package/generated/tpl/index.d.ts +4 -0
  227. package/generated/tpl/index.js +4 -0
  228. package/generated/tpl/render.d.ts +2 -0
  229. package/generated/tpl/render.js +131 -0
  230. package/package.json +34 -9
  231. package/scss/_components.scss +62 -13
  232. package/scss/_final.scss +1 -0
  233. package/scss/_functions.scss +10 -0
  234. package/scss/_mixins.scss +4 -169
  235. package/scss/_placeholders.scss +3 -0
  236. package/scss/_transitions.scss +22 -1
  237. package/scss/_utils.scss +9 -0
  238. package/scss/_vars.scss +144 -23
  239. package/scss/base/_layout.scss +40 -16
  240. package/scss/base/_reboot.scss +151 -15
  241. package/scss/base/_root.scss +358 -25
  242. package/scss/colors/_index.scss +843 -70
  243. package/scss/components/_alert-dialog.scss +111 -0
  244. package/scss/components/_body-view.scss +12 -3
  245. package/scss/components/_bordered-button.scss +57 -0
  246. package/scss/components/_bordered-prominent-button.scss +64 -0
  247. package/scss/components/_borderless-button.scss +36 -6
  248. package/scss/components/_confirmation-dialog.scss +102 -0
  249. package/scss/components/_content-unavailable-view.scss +54 -0
  250. package/scss/components/_date-picker.scss +30 -0
  251. package/scss/components/_detail-placeholder.scss +153 -0
  252. package/scss/components/_disclosure-group.scss +147 -48
  253. package/scss/components/_fine-tooltip.scss +84 -0
  254. package/scss/components/_form-view.scss +233 -0
  255. package/scss/components/_full-screen.scss +7 -5
  256. package/scss/components/_glass-button.scss +59 -0
  257. package/scss/components/_glass-prominent-button.scss +70 -0
  258. package/scss/components/_h-divider.scss +13 -0
  259. package/scss/components/_h-flex-stack.scss +23 -0
  260. package/scss/components/_h-stack.scss +45 -0
  261. package/scss/components/_image-view.scss +9 -0
  262. package/scss/components/_index.scss +243 -7
  263. package/scss/components/_label-view copy.scss.txt +420 -0
  264. package/scss/components/_label-view.scss +372 -0
  265. package/scss/components/_label-view.scss.txt +536 -0
  266. package/scss/components/_labeled-content.scss +67 -0
  267. package/scss/components/_list-view.scss +269 -0
  268. package/scss/components/_menu-view.scss +223 -0
  269. package/scss/components/_navigation-large-title.scss +27 -0
  270. package/scss/components/_navigation-split-view.scss +329 -269
  271. package/scss/components/_navigation-stack.scss +6 -6
  272. package/scss/components/_navigation-title.scss +10 -0
  273. package/scss/components/_picker-view.scss +322 -0
  274. package/scss/components/_plain-button.scss +18 -0
  275. package/scss/components/_progress-view.scss +98 -0
  276. package/scss/components/_scroll-view-proxy.scss +81 -0
  277. package/scss/components/_scroll-view-toolbars.scss +126 -0
  278. package/scss/components/_scroll-view.scss +114 -66
  279. package/scss/components/_search-view.scss +22 -0
  280. package/scss/components/_section-view.scss +120 -0
  281. package/scss/components/_sheet-view.scss +78 -35
  282. package/scss/components/_sidebar-toggle.scss +87 -27
  283. package/scss/components/_sidebar-view.scss +30 -40
  284. package/scss/components/_sticky-container.scss +42 -0
  285. package/scss/components/_tab-bar.scss +215 -84
  286. package/scss/components/_tab-item.scss +25 -0
  287. package/scss/components/_tab-view.scss +270 -126
  288. package/scss/components/_table-column.scss +54 -0
  289. package/scss/components/_table-row.scss +240 -0
  290. package/scss/components/_table-view.scss +231 -0
  291. package/scss/components/_text-field.scss +57 -0
  292. package/scss/components/_toggle-view.scss +79 -0
  293. package/scss/components/_tool-bar-item-group.scss +30 -19
  294. package/scss/components/_tool-bar-item.scss +81 -71
  295. package/scss/components/_tool-bar.scss +123 -60
  296. package/scss/components/_v-divider.scss +13 -0
  297. package/scss/components/_v-flex-stack.scss +29 -0
  298. package/scss/components/_v-keyboard.scss +6 -4
  299. package/scss/components/_v-stack.scss +15 -9
  300. package/scss/final/_touch-glass.scss +91 -0
  301. package/scss/index.scss +6 -2
  302. package/scss/mixins/_button.scss +44 -0
  303. package/scss/mixins/_color.scss +16 -0
  304. package/scss/mixins/_dialog.scss +89 -0
  305. package/scss/mixins/_index.scss +461 -0
  306. package/scss/placeholders/_buttons.scss +117 -0
  307. package/scss/placeholders/_lists.scss +596 -0
  308. package/scss/transitions/_alert-dialog.scss +18 -0
  309. package/scss/transitions/_bwd.navbar.scss +3 -13
  310. package/scss/transitions/_bwd.scss +4 -20
  311. package/scss/transitions/_confirmation-dialog.scss +27 -0
  312. package/scss/transitions/_disclosure-group.scss +35 -0
  313. package/scss/transitions/_fine-tooltip.scss +21 -0
  314. package/scss/transitions/_fwd.navbar.scss +4 -9
  315. package/scss/transitions/_fwd.scss +4 -34
  316. package/scss/transitions/_glass-button.scss +12 -0
  317. package/scss/transitions/_glass-prominent-button.scss +12 -0
  318. package/scss/transitions/_index.scss +35 -143
  319. package/scss/transitions/_menu-view.scss +28 -0
  320. package/scss/transitions/_navigation-split-view.scss +23 -0
  321. package/scss/transitions/_progress-view.scss +23 -0
  322. package/scss/transitions/_sheet-view.scss +30 -0
  323. package/scss/transitions/_sidebar-view.scss +36 -0
  324. package/scss/transitions/_tab-bar.scss +20 -0
  325. package/scss/utils/_frame.scss +91 -0
  326. package/scss/utils/_index.scss +83 -0
  327. package/scss/utils/_scroll-view.scss +14 -0
  328. package/scss/utils/_spacing.scss +25 -0
  329. package/scss/utils/_stacks.scss +225 -0
  330. package/web-components.html-data/en.json +950 -0
  331. package/generated/components/bottom-bar.d.ts +0 -10
  332. package/generated/components/bottom-bar.js +0 -73
  333. package/generated/components/navigation-bar.d.ts +0 -10
  334. package/generated/components/navigation-bar.js +0 -80
  335. package/generated/internal/class.d.ts +0 -18
  336. package/generated/internal/class.js +0 -18
  337. package/generated/namespace/index.d.ts +0 -6
  338. package/generated/styles.css +0 -1305
  339. package/scss/_dev.scss +0 -68
  340. package/scss/components/_tab-bar-stack.scss +0 -101
  341. package/scss/components/_toolbars.scss +0 -100
  342. package/scss/transitions/_dialog.scss +0 -32
  343. /package/generated/{namespace/index.js → events/alert-dialog.js} +0 -0
@@ -0,0 +1,222 @@
1
+ var _a;
2
+ import { CleanupRegistry } from '../internal/class/cleanup-registry';
3
+ import { FormAssociatedBase, getInternals } from '../internal/class/form-associated-base';
4
+ import { MutationObserverSet } from '../internal/class/mutation-observer-set';
5
+ import { $, devFlags, kebabCase, onoff, renderLabel } from '../internal/utils';
6
+ const toggleStyles = ['switch', 'button'];
7
+ /**
8
+ * @slot label
9
+ * @slot validity-options
10
+ */
11
+ export class ToggleView extends FormAssociatedBase {
12
+ static get observedAttributes() {
13
+ return ['label', 'name', 'value', 'is-on', 'keyboard-type', 'required', 'disabled'];
14
+ }
15
+ static #template;
16
+ static get template() {
17
+ return (this.#template ??= $(String.raw `
18
+ <label part="root toggle-stack">
19
+ <div part="root toggle-label-stack">
20
+ <slot name="label"></slot>
21
+ </div>
22
+ <div part="root toggle-input-stack">
23
+ <!--<input type="checkbox" part="root input toggle-form-input">-->
24
+ <div part="root toggle-form-input" tabindex="0"></div>
25
+ </div>
26
+ <slot name="validity-options" hidden></slot>
27
+ </label>`));
28
+ }
29
+ #renderValidityMsgs = (entries) => {
30
+ if (devFlags.debug)
31
+ console.debug(`${_a.name} ⚡️ mutation`);
32
+ this.setValidity(this.validity, this.validationMessage);
33
+ };
34
+ #shadowRoot;
35
+ #customValidity = '';
36
+ #slots = new Map();
37
+ #validityObservers = new MutationObserverSet(this.#renderValidityMsgs);
38
+ #input;
39
+ #value = 'on';
40
+ #isOn = false;
41
+ #connected = false;
42
+ get #internals() {
43
+ return getInternals(this);
44
+ }
45
+ constructor() {
46
+ super();
47
+ this.#shadowRoot = this.attachShadow({ mode: 'closed' });
48
+ this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
49
+ for (const slot of this.#shadowRoot.querySelectorAll('slot'))
50
+ this.#slots?.set(slot.name, slot);
51
+ CleanupRegistry.register(this, () => {
52
+ this.#slots = new Map();
53
+ });
54
+ CleanupRegistry.unregister(this, 'validities');
55
+ CleanupRegistry.register(this, onoff('slotchange', this.#handleValiditiesSlotchange, this.#slots?.get('validity-options')).on(), 'validities');
56
+ this.#input = this.#shadowRoot.querySelector('[part*=toggle-form-input]') ?? undefined;
57
+ this.#input?.addEventListener('click', () => {
58
+ this.isOn = !this.isOn;
59
+ this.#sendValueToForm(this.#connected);
60
+ });
61
+ CleanupRegistry.register(this, onoff([{ types: 'focusin', listener: this.#handleFocusin }], this).on());
62
+ CleanupRegistry.register(this, onoff([{ types: 'keydown', listener: this.#handleInputKeydown }], this.#input).on());
63
+ // CleanupRegistry.register(this, onoff([{ types: 'input', listener: this.#handleInputInput }], this.#input).on())
64
+ }
65
+ attributeChangedCallback(name, oldValue, newValue) {
66
+ if (devFlags.debug)
67
+ console.debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
68
+ switch (name) {
69
+ case 'value':
70
+ this.value = String(newValue); // this.#input?.setAttribute('checked', newValue ?? '')
71
+ this.#sendValueToForm(this.#connected);
72
+ break;
73
+ case 'is-on':
74
+ this.isOn = newValue !== null; // this.#input?.setAttribute('checked', newValue ?? '')
75
+ this.#sendValueToForm(this.#connected);
76
+ break;
77
+ case 'required':
78
+ // this.#input?.setAttribute(name, newValue ?? '')
79
+ this.#sendValueToForm(this.#connected);
80
+ break;
81
+ case 'name':
82
+ this.#sendValueToForm(this.#connected);
83
+ break;
84
+ case 'label':
85
+ renderLabel(':scope>label-view[slot=label]', `<label-view slot="label" foreground="secondary"><span></span></label-view>`, this, newValue);
86
+ break;
87
+ case 'disabled':
88
+ for (const el of this.#shadowRoot.querySelectorAll('input'))
89
+ el.toggleAttribute('disabled', !newValue);
90
+ break;
91
+ }
92
+ }
93
+ disconnectedCallback() {
94
+ super.disconnectedCallback();
95
+ this.#validityObservers.unobserveAll();
96
+ }
97
+ connectedCallback() {
98
+ super.connectedCallback();
99
+ // finally
100
+ // if (this.hasAttribute('value')) this.value = this.getAttribute('value') ?? ''
101
+ if (this.hasAttribute('is-on'))
102
+ this.isOn = this.hasAttribute('is-on');
103
+ this.#sendValueToForm(false);
104
+ this.#connected = true;
105
+ }
106
+ get toggleStyle() {
107
+ return toggleStyles.includes(this.getAttribute('toggle-style') ?? '') ? this.getAttribute('toggle-style') : 'switch';
108
+ }
109
+ get isOn() {
110
+ return this.#isOn;
111
+ }
112
+ set isOn(v) {
113
+ this.#isOn = Boolean(v);
114
+ this.#value = this.#isOn ? (this.getAttribute('value') ?? 'on') : null;
115
+ this.ariaChecked = `${this.#isOn}`;
116
+ }
117
+ #handleValiditiesSlotchange = ({ type, target: slot }) => {
118
+ if (devFlags.debug)
119
+ console.debug(`${_a.name} ⚡️ ${type}`);
120
+ if (!(slot instanceof HTMLSlotElement))
121
+ return;
122
+ const assigned = slot.assignedElements();
123
+ this.#validityObservers.syncObservations(assigned, ['value', 'label']);
124
+ this.#renderValidityMsgs([]);
125
+ };
126
+ #handleFocusin = ({ type, target }) => {
127
+ if (devFlags.debug)
128
+ console.debug(`${_a.name} ⚡️ ${type}`);
129
+ if (target === this)
130
+ this.#input?.focus();
131
+ };
132
+ #sendValueToForm = (dispatchEvent = true) => {
133
+ // input.value has already been updated/synced !!
134
+ if (this.matches(':disabled'))
135
+ return this.setValidity({});
136
+ if (this.hasAttribute('required') && !this.isOn) {
137
+ this.setValidity({ valueMissing: true });
138
+ }
139
+ else {
140
+ this.setValidity({});
141
+ }
142
+ const entries = new FormData();
143
+ if (this.value)
144
+ entries.append(this.name, this.value);
145
+ this.#internals.setFormValue(entries);
146
+ if (dispatchEvent)
147
+ this.dispatchEvent(new CustomEvent('commit', { detail: { value: this.value, isOn: this.isOn }, bubbles: true, composed: true }));
148
+ };
149
+ #handleInputKeydown = (evt) => {
150
+ if (devFlags.debug)
151
+ console.debug(`${_a.name} ⚡️ ${evt?.type}`);
152
+ this.isOn = !this.isOn;
153
+ this.#sendValueToForm();
154
+ };
155
+ #handleInputInput = (evt) => {
156
+ if (devFlags.debug)
157
+ console.debug(`${_a.name} ⚡️ ${evt?.type}`);
158
+ this.#sendValueToForm();
159
+ };
160
+ // Optional: form participation properties
161
+ get name() {
162
+ return this.getAttribute('name') ?? this.getAttribute('label') ?? this.querySelector(':scope>[slot=label]')?.textContent ?? '';
163
+ }
164
+ get value() {
165
+ return this.#value;
166
+ }
167
+ set value(v) {
168
+ this.#value = this.isOn ? String(v) : null;
169
+ }
170
+ setValidity = (flags, message, anchor) => {
171
+ // let msg
172
+ // if (message)
173
+ for (const k in flags) {
174
+ const key = k; // ✅ type-safe cast
175
+ if (true !== flags[key])
176
+ continue;
177
+ for (const el of this.#slots?.get('validity-options')?.assignedElements({ flatten: true }) ?? []) {
178
+ if (!el.matches('option'))
179
+ continue;
180
+ const { label, value } = el;
181
+ if (`${kebabCase(key)}` === value) {
182
+ message = label;
183
+ break;
184
+ }
185
+ else if (`${kebabCase(key)}:${message}` === value) {
186
+ message = label;
187
+ break;
188
+ }
189
+ }
190
+ }
191
+ if (!message)
192
+ for (const k in flags) {
193
+ const key = k; // ✅ type-safe cast
194
+ if (true !== flags[key])
195
+ continue;
196
+ message = kebabCase(key);
197
+ break;
198
+ }
199
+ if (devFlags.debug)
200
+ console.debug(`${_a.name} ⚡️ validity-change`);
201
+ return this.#internals.setValidity(flags, this.#customValidity || message, anchor ?? this.#input);
202
+ };
203
+ setCustomValidity = (message) => {
204
+ this.#customValidity = message;
205
+ if (this.#customValidity)
206
+ this.#internals.setValidity({ ...this.#internals.validity, customError: true }, message);
207
+ else
208
+ this.#sendValueToForm(false);
209
+ };
210
+ formAssociatedCallback = (form) => {
211
+ this.#sendValueToForm();
212
+ };
213
+ formDisabledCallback = (disabled) => {
214
+ for (const el of this.#shadowRoot.querySelectorAll('input'))
215
+ el.toggleAttribute('disabled', !disabled);
216
+ };
217
+ formResetCallback = () => {
218
+ this.value = '';
219
+ this.#sendValueToForm();
220
+ };
221
+ }
222
+ _a = ToggleView;
@@ -0,0 +1,5 @@
1
+ export declare class ToolBarItemGroup extends HTMLElement {
2
+ constructor();
3
+ connectedCallback(): void;
4
+ disconnectedCallback(): void;
5
+ }
@@ -0,0 +1,28 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var ToolBarItemGroup_1;
8
+ import { CleanupRegistry } from '../internal/class/cleanup-registry';
9
+ import { adaptiveSlot } from '../internal/decorators';
10
+ import { devFlags } from '../internal/utils';
11
+ let ToolBarItemGroup = ToolBarItemGroup_1 = class ToolBarItemGroup extends HTMLElement {
12
+ constructor() {
13
+ super();
14
+ }
15
+ connectedCallback() {
16
+ if (devFlags.debug)
17
+ console.debug(`${ToolBarItemGroup_1.name} ⚡️ connect`);
18
+ }
19
+ disconnectedCallback() {
20
+ if (devFlags.debug)
21
+ console.debug(`${ToolBarItemGroup_1.name} ⚡️ disconnect`);
22
+ CleanupRegistry.unregister(this);
23
+ }
24
+ };
25
+ ToolBarItemGroup = ToolBarItemGroup_1 = __decorate([
26
+ adaptiveSlot()
27
+ ], ToolBarItemGroup);
28
+ export { ToolBarItemGroup };
@@ -0,0 +1,8 @@
1
+ export declare class ToolBarItem extends HTMLElement {
2
+ #private;
3
+ static get observedAttributes(): string[];
4
+ constructor();
5
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
6
+ disconnectedCallback(): void;
7
+ connectedCallback(): void;
8
+ }
@@ -0,0 +1,66 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var ToolBarItem_1;
8
+ import { CleanupRegistry } from '../internal/class/cleanup-registry';
9
+ import { adaptiveSlot } from '../internal/decorators';
10
+ import { devFlags, ensurePlaceholder, onoff, touchGlass } from '../internal/utils';
11
+ import { Snapshot } from '../snapshot';
12
+ let ToolBarItem = ToolBarItem_1 = class ToolBarItem extends HTMLElement {
13
+ static get observedAttributes() {
14
+ return ['slot', 'data-previous-slot', 'title-key'];
15
+ }
16
+ #mutationObserver;
17
+ constructor() {
18
+ super();
19
+ }
20
+ attributeChangedCallback(name, oldValue, newValue) {
21
+ if (devFlags.debug)
22
+ console.debug(`${ToolBarItem_1.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
23
+ switch (name) {
24
+ case 'slot':
25
+ case 'data-previous-slot':
26
+ case 'title-key': {
27
+ this.#mutationObserver?.disconnect();
28
+ const role = this.getAttribute('data-previous-slot') ?? this.getAttribute('slot') ?? '', tKey = this.getAttribute('title-key');
29
+ if (['confirmation-action', 'cancellation-action'].includes(role))
30
+ Snapshot.waitReady.then(() => {
31
+ ensurePlaceholder(this.querySelector(':scope>button'), role, tKey);
32
+ this.#mutationObserver = new MutationObserver((mutations) => {
33
+ for (const { target } of mutations)
34
+ if (target instanceof HTMLElement)
35
+ ensurePlaceholder(this.querySelector(':scope>button'), role, tKey);
36
+ });
37
+ this.#mutationObserver.observe(this, {
38
+ childList: true,
39
+ });
40
+ });
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ disconnectedCallback() {
46
+ if (devFlags.debug)
47
+ console.debug(`${ToolBarItem_1.name} ⚡️ disconnect`);
48
+ this.#mutationObserver?.disconnect();
49
+ CleanupRegistry.unregister(this);
50
+ }
51
+ connectedCallback() {
52
+ if (devFlags.debug)
53
+ console.debug(`${ToolBarItem_1.name} ⚡️ connect`);
54
+ CleanupRegistry.register(this, onoff(touchGlass(this, (t) => t.closest('tool-bar-item-group') ?? t, ({ target }) => {
55
+ if (!(target instanceof HTMLElement))
56
+ return true;
57
+ if (target.closest('menu-view[open]'))
58
+ return false;
59
+ return true;
60
+ }), this).on());
61
+ }
62
+ };
63
+ ToolBarItem = ToolBarItem_1 = __decorate([
64
+ adaptiveSlot((el) => !el.closest('tool-bar-item-group'))
65
+ ], ToolBarItem);
66
+ export { ToolBarItem };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @slot cancellation-action - The item represents a cancellation action for a modal interface. Places the item in the leading edge of the top bar and on the trailing edge of the bottom bar when fine modal
3
+ * @slot primary-action - The item represents a primary action. Places the item in the trailing edge of the top bar and on the trailing edge of the bottom bar when fine modal
4
+ * @slot confirmation-action - The item represents a confirmation action for a modal interface. Places the item in the trailing edge of the top bar and on the trailing edge of the bottom bar when fine modal
5
+ * @slot destructive-action - The item represents a destructive action for a modal interface. Places the item in the leading edge of the top bar and on the leading edge of the bottom bar when fine modal
6
+ * @slot top-bar-leading - Places the item in the leading edge of the top bar
7
+ * @slot top-bar-principal - Places the item in the middle of the top bar
8
+ * @slot top-bar-trailing - Places the item in the trailing edge of the top bar
9
+ * @slot bottom-bar-leading - Places the item in the leading edge of the bottom bar
10
+ * @slot bottom-bar-principal - Places the item in the middle of the bottom bar
11
+ * @slot bottom-bar-trailing - Places the item in the trailing edge of the bottom bar
12
+ */
13
+ export declare class ToolBar extends HTMLElement {
14
+ #private;
15
+ static get template(): DocumentFragment;
16
+ constructor();
17
+ connectedCallback(): void;
18
+ disconnectedCallback(): void;
19
+ }
@@ -0,0 +1,93 @@
1
+ var _a;
2
+ import { ResizeObserverSingleton } from '../internal/class/resize-observer-singleton';
3
+ import { $, devFlags } from '../internal/utils';
4
+ const observers = new ResizeObserverSingleton();
5
+ /**
6
+ * @slot cancellation-action - The item represents a cancellation action for a modal interface. Places the item in the leading edge of the top bar and on the trailing edge of the bottom bar when fine modal
7
+ * @slot primary-action - The item represents a primary action. Places the item in the trailing edge of the top bar and on the trailing edge of the bottom bar when fine modal
8
+ * @slot confirmation-action - The item represents a confirmation action for a modal interface. Places the item in the trailing edge of the top bar and on the trailing edge of the bottom bar when fine modal
9
+ * @slot destructive-action - The item represents a destructive action for a modal interface. Places the item in the leading edge of the top bar and on the leading edge of the bottom bar when fine modal
10
+ * @slot top-bar-leading - Places the item in the leading edge of the top bar
11
+ * @slot top-bar-principal - Places the item in the middle of the top bar
12
+ * @slot top-bar-trailing - Places the item in the trailing edge of the top bar
13
+ * @slot bottom-bar-leading - Places the item in the leading edge of the bottom bar
14
+ * @slot bottom-bar-principal - Places the item in the middle of the bottom bar
15
+ * @slot bottom-bar-trailing - Places the item in the trailing edge of the bottom bar
16
+ */
17
+ export class ToolBar extends HTMLElement {
18
+ static #template;
19
+ static get template() {
20
+ // <!--exportparts="toolbar-leading-stack,toolbar-principal-stack,toolbar-trailing-stack"-->
21
+ return (this.#template ??= $(String.raw `
22
+ <div part="root top-bar">
23
+ <div part="root toolbar-leading-stack">
24
+ <slot name="cancellation-action"></slot>
25
+ <slot name="destructive-action"></slot>
26
+ <slot name="top-bar-leading"></slot>
27
+ </div>
28
+ <div part="root toolbar-principal-stack">
29
+ <slot name="top-bar-principal"></slot>
30
+ </div>
31
+ <div part="root toolbar-trailing-stack">
32
+ <slot name="top-bar-trailing"></slot>
33
+ <slot name="primary-action"></slot>
34
+ <slot name="confirmation-action"></slot>
35
+ </div>
36
+ </div>
37
+ <div part="root bottom-bar">
38
+ <div part="root toolbar-leading-stack">
39
+ <slot name="bottom-bar-leading"></slot>
40
+ </div>
41
+ <div part="root toolbar-principal-stack">
42
+ <slot name="bottom-bar-principal"></slot>
43
+ </div>
44
+ <div part="root toolbar-trailing-stack">
45
+ <slot name="bottom-bar-trailing"></slot>
46
+ </div>
47
+ </div>`));
48
+ }
49
+ #shadowRoot;
50
+ get #scrollView() {
51
+ return this.parentElement?.querySelector(':scope>scroll-view') ?? undefined; //this.previousElementSibling ?? undefined
52
+ }
53
+ constructor() {
54
+ super();
55
+ this.#shadowRoot = this.attachShadow({ mode: 'closed' });
56
+ this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
57
+ }
58
+ connectedCallback() {
59
+ if (devFlags.debug)
60
+ console.debug(`${_a.name} ⚡️ connect`);
61
+ // NOTE: wait for config
62
+ // Snapshot.waitReady.then(() => {
63
+ for (const el of this.#shadowRoot.querySelectorAll(`[part*="toolbar-leading-stack"],[part*="toolbar-trailing-stack"]`))
64
+ observers.observe(el, this.#measureStacks.bind(this));
65
+ // })
66
+ }
67
+ disconnectedCallback() {
68
+ if (devFlags.debug)
69
+ console.debug(`${_a.name} ⚡️ disconnect`);
70
+ observers.unobserve(this);
71
+ }
72
+ #measureStacks(entry) {
73
+ if (devFlags.debug)
74
+ console.debug(`${_a.name} ⚡️ measure`);
75
+ if (this.closest('[hidden]'))
76
+ return;
77
+ const leading = 'toolbar-leading-stack', trailing = 'toolbar-trailing-stack';
78
+ const parentMap = {
79
+ 'top-bar': 'navbar',
80
+ 'bottom-bar': 'toolbar', //'bottombar',
81
+ };
82
+ const { contentRect: { width }, target, } = entry;
83
+ const parentPart = target.parentElement?.part.contains('top-bar') ? 'top-bar' : target.parentElement?.part.contains('bottom-bar') ? 'bottom-bar' : null;
84
+ if (!parentPart)
85
+ return;
86
+ const side = target.part.contains(leading) ? 'inline-start' : target.part.contains(trailing) ? 'inline-end' : null;
87
+ if (!side)
88
+ return;
89
+ const prop = `--${parentMap[parentPart]}-padding-${side}`;
90
+ this.#scrollView?.style?.setProperty(prop, `${Math.round(width)}px`); // $.prop(prop, `${Math.round(width)}px`, this.#scrollView) //
91
+ }
92
+ }
93
+ _a = ToolBar;
@@ -1,6 +1,10 @@
1
1
  /**
2
2
  * BUG: Safari on IOS reports inaccurate innerHeight (which is what we really want) on orientationchange.
3
3
  * So we live with a pescy body-scrollbar that shows up on resize on desktops.
4
+ *
5
+ * @summary Required component, used to handle the virtual keyboard on touch devices.
6
+ *
7
+ * @attr {Inter} system-font - Prefers the "Inter" font family, if loaded.
4
8
  */
5
9
  export declare class VKeyboard extends HTMLElement {
6
10
  #private;
@@ -1,87 +1,89 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7
- if (kind === "m") throw new TypeError("Private method is not writable");
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
11
- };
12
- var _a, _VKeyboard_shouldKeyboardBeOpenCallback, _VKeyboard_handleWindowScroll, _VKeyboard_handleVisualViewportResize, _VKeyboard_handleWindowOrientationChange, _VKeyboard_handleBodyFocusIn, _VKeyboard_ifKeyboardScrollIntoActiveElement;
1
+ var _a;
2
+ import { CleanupRegistry } from '../internal/class/cleanup-registry';
3
+ import { $, devFlags, frame, onoff, sleep } from '../internal/utils';
4
+ import { Snapshot } from '../snapshot';
13
5
  /**
14
6
  * BUG: Safari on IOS reports inaccurate innerHeight (which is what we really want) on orientationchange.
15
7
  * So we live with a pescy body-scrollbar that shows up on resize on desktops.
8
+ *
9
+ * @summary Required component, used to handle the virtual keyboard on touch devices.
10
+ *
11
+ * @attr {Inter} system-font - Prefers the "Inter" font family, if loaded.
16
12
  */
17
13
  export class VKeyboard extends HTMLElement {
14
+ /**
15
+ * Change like this:
16
+ * document.querySelector('v-keyboard').shouldKeyboardBeOpen = () => document.activeElement.tagName === 'INPUT'
17
+ */
18
+ #shouldKeyboardBeOpenCallback = () => {
19
+ return 'INPUT' === document.activeElement?.tagName && 'text' === document.activeElement?.getAttribute('type');
20
+ };
18
21
  constructor() {
19
22
  super();
20
- /**
21
- * Change like this:
22
- * document.querySelector('v-keyboard').shouldKeyboardBeOpen = () => document.activeElement.tagName === 'INPUT'
23
- */
24
- _VKeyboard_shouldKeyboardBeOpenCallback.set(this, () => {
25
- return ('INPUT' === document.activeElement?.tagName &&
26
- 'text' === document.activeElement?.getAttribute('type'));
27
- });
28
- _VKeyboard_handleWindowScroll.set(this, () => {
29
- self.scrollTo(0, 0);
30
- });
31
- _VKeyboard_handleVisualViewportResize.set(this, () => {
32
- const dvh = self.visualViewport?.height ?? 0, fullLvh = this.offsetHeight;
33
- const diff = Math.abs(self.outerHeight - (__classPrivateFieldGet(this, _VKeyboard_shouldKeyboardBeOpenCallback, "f").call(this) ? dvh : fullLvh));
34
- document.documentElement.style.setProperty('--100lvh', 30 < diff ? `${dvh}px` : `${fullLvh}px`);
35
- document.documentElement.style.setProperty('--keyboard-inset-top', 30 < diff ? `${dvh}px` : `${fullLvh}px`);
36
- document.documentElement.style.setProperty('--keyboard-inset-height', 30 < diff ? `${diff}px` : `0px`);
37
- // @ts-expect-error
38
- if (import.meta?.env?.DEV) {
39
- // @ts-expect-error
40
- document.querySelector('#console0').innerHTML =
41
- `${__classPrivateFieldGet(this, _VKeyboard_shouldKeyboardBeOpenCallback, "f").call(this)} (${diff}) (${self.innerHeight}) (${fullLvh}) (${dvh})`;
42
- // @ts-expect-error
43
- document.querySelector('#console').hidePopover();
44
- // @ts-expect-error
45
- document.querySelector('#console').showPopover();
46
- }
47
- self.scrollTo(0, 0);
48
- });
49
- _VKeyboard_handleWindowOrientationChange.set(this, () => {
50
- console.debug(`${_a.name} ⚡️ orientationchange`);
51
- self.requestAnimationFrame(__classPrivateFieldGet(this, _VKeyboard_ifKeyboardScrollIntoActiveElement, "f"));
52
- });
53
- _VKeyboard_handleBodyFocusIn.set(this, () => {
54
- console.debug(`${_a.name} ⚡️ focusin`);
55
- setTimeout(__classPrivateFieldGet(this, _VKeyboard_ifKeyboardScrollIntoActiveElement, "f"), 100);
56
- });
57
- _VKeyboard_ifKeyboardScrollIntoActiveElement.set(this, () => {
58
- if (!__classPrivateFieldGet(this, _VKeyboard_shouldKeyboardBeOpenCallback, "f").call(this) || !document.activeElement)
59
- return;
60
- const parent = document.activeElement?.closest('scroll-view');
61
- parent?.scrollToElement?.(document.activeElement);
62
- });
63
23
  }
64
24
  disconnectedCallback() {
65
- console.debug(`${_a.name} ⚡️ disconnect`);
66
- self.removeEventListener('resize', __classPrivateFieldGet(this, _VKeyboard_handleWindowScroll, "f"));
67
- self.visualViewport?.removeEventListener('resize', __classPrivateFieldGet(this, _VKeyboard_handleVisualViewportResize, "f"));
68
- self.removeEventListener('orientationchange', __classPrivateFieldGet(this, _VKeyboard_handleWindowOrientationChange, "f"));
69
- document.body.removeEventListener('focusin', __classPrivateFieldGet(this, _VKeyboard_handleBodyFocusIn, "f"));
25
+ if (devFlags.debug)
26
+ console.debug(`${_a.name} ⚡️ disconnect`);
27
+ CleanupRegistry.unregister(this);
70
28
  }
71
29
  connectedCallback() {
72
- console.debug(`${_a.name} ⚡️ connect`);
30
+ if (devFlags.debug)
31
+ console.debug(`${_a.name} ⚡️ connect`);
73
32
  this.inert = true;
74
- self.addEventListener('scroll', __classPrivateFieldGet(this, _VKeyboard_handleWindowScroll, "f"));
75
- self.visualViewport?.addEventListener('resize', __classPrivateFieldGet(this, _VKeyboard_handleVisualViewportResize, "f"));
76
- __classPrivateFieldGet(this, _VKeyboard_handleVisualViewportResize, "f").call(this);
33
+ CleanupRegistry.register(this, onoff([
34
+ { types: 'scroll', listener: this.#handleWindowScroll },
35
+ { types: 'orientationchange', listener: this.#handleWindowOrientationchange },
36
+ ], self).on());
37
+ CleanupRegistry.register(this, onoff('resize', this.#handleVisualViewportResize, self.visualViewport ?? undefined, { passive: true }).on());
38
+ this.#handleVisualViewportResize();
77
39
  //
78
- self.addEventListener('orientationchange', __classPrivateFieldGet(this, _VKeyboard_handleWindowOrientationChange, "f"));
79
- document.body.addEventListener('focusin', __classPrivateFieldGet(this, _VKeyboard_handleBodyFocusIn, "f"));
40
+ CleanupRegistry.register(this, onoff('focusin', this.#handleBodyFocusin, document.body).on());
41
+ Snapshot.waitReady.then(() => {
42
+ document.documentElement.style.setProperty('--root-font-size', parseFloat(self.getComputedStyle(document.documentElement).fontSize).toFixed(5));
43
+ CleanupRegistry.register(this, onoff('transitionrun', this.#handleDocumentTransitionrun, document.documentElement).on());
44
+ });
80
45
  }
46
+ #handleDocumentTransitionrun = (evt) => {
47
+ if (evt.target !== document.documentElement || 'font-size' !== evt.propertyName)
48
+ return;
49
+ document.documentElement.style.setProperty('--root-font-size', parseFloat(self.getComputedStyle(document.documentElement).fontSize).toFixed(5));
50
+ };
51
+ #handleWindowScroll = () => {
52
+ self.scrollTo(0, 0);
53
+ };
54
+ #handleVisualViewportResize = () => {
55
+ const dvh = self.visualViewport?.height ?? 0, fullLvh = this.offsetHeight;
56
+ const diff = Math.abs(self.outerHeight - (this.#shouldKeyboardBeOpenCallback() ? dvh : fullLvh));
57
+ $.prop('--100lvh', 30 < diff ? `${dvh}px` : `${fullLvh}px`, document.documentElement); //document.documentElement.style.setProperty('--100lvh', 30 < diff ? `${dvh}px` : `${fullLvh}px`)
58
+ $.prop('--keyboard-inset-top', 30 < diff ? `${dvh}px` : `${fullLvh}px`, document.documentElement); //document.documentElement.style.setProperty('--keyboard-inset-top', 30 < diff ? `${dvh}px` : `${fullLvh}px`)
59
+ $.prop('--keyboard-inset-height', 30 < diff ? `${diff}px` : `0px`, document.documentElement); //document.documentElement.style.setProperty('--keyboard-inset-height', 30 < diff ? `${diff}px` : `0px`)
60
+ self.scrollTo(0, 0);
61
+ };
62
+ #handleWindowOrientationchange = async () => {
63
+ if (devFlags.debug)
64
+ console.debug(`${_a.name} ⚡️ orientationchange`);
65
+ if (!(await frame(this)))
66
+ return; //self.requestAnimationFrame(this.#ifKeyboardScrollIntoActiveElement)
67
+ this.#ifKeyboardScrollIntoActiveElement();
68
+ };
69
+ #handleBodyFocusin = async () => {
70
+ if (devFlags.debug)
71
+ console.debug(`${_a.name} ⚡️ focusin`);
72
+ await sleep(100); // self.setTimeout(this.#ifKeyboardScrollIntoActiveElement, 100)
73
+ if (!this.isConnected)
74
+ return;
75
+ this.#ifKeyboardScrollIntoActiveElement();
76
+ };
77
+ #ifKeyboardScrollIntoActiveElement = () => {
78
+ if (!this.#shouldKeyboardBeOpenCallback() || !document.activeElement)
79
+ return;
80
+ const parent = document.activeElement?.closest('scroll-view');
81
+ parent?.centerScrollToElement?.(document.activeElement);
82
+ };
81
83
  set shouldKeyboardBeOpen(fn) {
82
- if (typeof fn !== 'function')
83
- throw new TypeError(`fn must be a function`);
84
- __classPrivateFieldSet(this, _VKeyboard_shouldKeyboardBeOpenCallback, fn, "f");
84
+ if ('function' !== typeof fn)
85
+ throw new TypeError(`fn must be typeof function`);
86
+ this.#shouldKeyboardBeOpenCallback = fn;
85
87
  }
86
88
  }
87
- _a = VKeyboard, _VKeyboard_shouldKeyboardBeOpenCallback = new WeakMap(), _VKeyboard_handleWindowScroll = new WeakMap(), _VKeyboard_handleVisualViewportResize = new WeakMap(), _VKeyboard_handleWindowOrientationChange = new WeakMap(), _VKeyboard_handleBodyFocusIn = new WeakMap(), _VKeyboard_ifKeyboardScrollIntoActiveElement = new WeakMap();
89
+ _a = VKeyboard;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @attr {leading|"leading fill"|center|trailing|fill|space-between} distribution - The distribution of cols
3
+ *
4
+ * @attr {"auto spacer"|"auto auto spacer"|"auto auto auto spacer"} template
5
+ *
6
+ * @attr {leading|center|trailing} frame:alignment - The alignment of the stack on the cross-axis
7
+ *
8
+ * @attr {@spacingSet} spacing - The gap between the primary axis
9
+ *
10
+ * @attr {@alignmentSet} alignment - The cross-axis alignment
11
+ * @attr {@distributionSet} distribution - The main-axis alignment
12
+ * @attr {@placementSet} placement - The main-axis alignment
13
+ *
14
+ */
15
+ export declare class VStack extends HTMLElement {
16
+ constructor();
17
+ connectedCallback(): void;
18
+ disconnectedCallback(): void;
19
+ }