@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,9 +1,15 @@
1
1
  var _a;
2
2
  import { I18n } from '../i18n';
3
3
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
4
- import { FormAssociatedBase, getInternals, makeSlotchangeHandler } from '../internal/class/form-associated-base';
5
- import { $, clamp, kebabCase, onoff, set } from '../internal/utils';
4
+ import { FormAssociatedBase, getInternals } from '../internal/class/form-associated-base';
5
+ import { MutationObserverSet } from '../internal/class/mutation-observer-set';
6
+ import { $, clamp, debug, kebabCase, onoff, set } from '../internal/utils';
7
+ import { queryMorph } from '../morphdom';
8
+ import { html } from '../tpl';
6
9
  const datePickerStyles = ['graphical', 'field', 'automatic'];
10
+ /**
11
+ * @summary A control that selects an absolute date.
12
+ */
7
13
  export class DatePicker extends FormAssociatedBase {
8
14
  static get observedAttributes() {
9
15
  return [
@@ -12,11 +18,17 @@ export class DatePicker extends FormAssociatedBase {
12
18
  * @type {"graphical"|"field"|"automatic"}
13
19
  */
14
20
  'date-picker-style',
21
+ /**
22
+ * @type {boolean}
23
+ */
15
24
  'required',
16
25
  'prompt',
17
26
  'label',
18
27
  'name',
19
28
  'selection',
29
+ /**
30
+ * @type {boolean}
31
+ */
20
32
  'disabled',
21
33
  'minimum',
22
34
  'maximum',
@@ -24,9 +36,15 @@ export class DatePicker extends FormAssociatedBase {
24
36
  }
25
37
  static #templates = new Map();
26
38
  // #lastRenderedStyle?: DatePickerStyle //string | null
39
+ #renderValidityMsgs = (entries) => {
40
+ debug(`${_a.name} ⚡️ mutation`);
41
+ this.setValidity(this.validity, this.validationMessage);
42
+ };
27
43
  #shadowRoot;
28
44
  #customValidity = '';
29
- #validitiesSlot;
45
+ #slots = new Map();
46
+ #validityObservers = new MutationObserverSet(this.#renderValidityMsgs);
47
+ // #validitiesSlot?: HTMLSlotElement
30
48
  #inputs = [];
31
49
  get #internals() {
32
50
  return getInternals(this);
@@ -35,20 +53,19 @@ export class DatePicker extends FormAssociatedBase {
35
53
  if (!_a.#templates.has(this.datePickerStyle))
36
54
  switch (this.datePickerStyle) {
37
55
  default:
38
- _a.#templates.set(this.datePickerStyle, $(String.raw `
39
- <label part="root date-picker-stack">
40
- <div part="root date-picker-label-stack">
41
- <slot name="label"></slot>
42
- </div>
43
- <div part="root date-picker-input-stack">
44
- <input type="text" name="month" inputmode="numeric" pattern="\d*" minlength="1" maxlength="2" min="1" max="12" part="root input date-picker-form-input">
45
- <span part="root date-picker-separator"></span>
46
- <input type="text" name="day" inputmode="numeric" pattern="\d*" minlength="1" maxlength="2" min="1" max="31" part="root input date-picker-form-input">
47
- <span part="root date-picker-separator"></span>
48
- <input type="text" name="year" inputmode="numeric" pattern="\d*" minlength="4" maxlength="4" min="0" max="9999" part="root input date-picker-form-input">
49
- </div>
50
- <slot name="validity-options" hidden></slot>
51
- </label>`, ''));
56
+ _a.#templates.set(this.datePickerStyle, $(html `<label part="root date-picker-stack">
57
+ <div part="root date-picker-label-stack">
58
+ <slot name="label"></slot>
59
+ </div>
60
+ <div part="root date-picker-input-stack">
61
+ <input type="text" name="month" inputmode="numeric" pattern="d*" minlength="1" maxlength="2" min="1" max="12" part="root input date-picker-form-input" />
62
+ <span part="root date-picker-separator"></span>
63
+ <input type="text" name="day" inputmode="numeric" pattern="d*" minlength="1" maxlength="2" min="1" max="31" part="root input date-picker-form-input" />
64
+ <span part="root date-picker-separator"></span>
65
+ <input type="text" name="year" inputmode="numeric" pattern="d*" minlength="4" maxlength="4" min="0" max="9999" part="root input date-picker-form-input" />
66
+ </div>
67
+ <slot name="validity-options" hidden></slot>
68
+ </label>`));
52
69
  break;
53
70
  }
54
71
  return _a.#templates.get(this.datePickerStyle);
@@ -57,29 +74,12 @@ export class DatePicker extends FormAssociatedBase {
57
74
  super();
58
75
  this.#shadowRoot = this.attachShadow({ mode: 'closed' });
59
76
  }
60
- connectedCallback() {
61
- super.connectedCallback();
62
- CleanupRegistry.register(this, onoff('click', this.#handleClick, this).on());
63
- this.#render();
64
- CleanupRegistry.register(this, onoff('change', () => {
65
- this.#render();
66
- }, I18n.on).on());
67
- // finally
68
- if (!this.hasAttribute('selection'))
69
- return;
70
- const [y = '', m = '', d = ''] = (this.getAttribute('selection') ?? '').split(/\D+/);
71
- this.selection = { year: y, month: m, day: d };
72
- this.#sendValueToForm(false);
73
- }
74
- disconnectedCallback() {
75
- super.disconnectedCallback();
76
- }
77
77
  attributeChangedCallback(name, oldValue, newValue) {
78
- console.debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
78
+ debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
79
79
  switch (name) {
80
80
  case 'selection':
81
- const [y = '', m = '', d = ''] = (newValue ?? '').split(/\D+/);
82
- this.selection = { year: y, month: m, day: d };
81
+ // nothing happens// const [y = '', m = '', d = ''] = (newValue ?? '').split(/\D+/)
82
+ // this.#selectedDate = { year: y, month: m, day: d }
83
83
  break;
84
84
  case 'required':
85
85
  for (const input of this.#inputs)
@@ -89,7 +89,7 @@ export class DatePicker extends FormAssociatedBase {
89
89
  case 'name':
90
90
  case 'minimum':
91
91
  case 'maximum':
92
- this.#sendValueToForm();
92
+ this.#sendValueToForm(false);
93
93
  break;
94
94
  case 'prompt':
95
95
  const [py = '', pm = '', pd = ''] = (newValue ?? '').split(/\D+/), map = { year: py, month: pm, day: pd };
@@ -97,14 +97,8 @@ export class DatePicker extends FormAssociatedBase {
97
97
  input.setAttribute('placeholder', map[input.name] ?? '');
98
98
  break;
99
99
  case 'label':
100
- let label = this.querySelector(':scope>[slot=label]');
101
- if (newValue) {
102
- label ??= this.appendChild($(`<span slot="label"></span>`));
103
- label.textContent = newValue;
104
- }
105
- else
106
- label?.remove();
107
- this.#sendValueToForm();
100
+ queryMorph('[slot=label]', html `<label-view slot="label" foreground="secondary">${newValue ? html `<span>${newValue}</span>` : null}</label-view>`, this);
101
+ // this.#sendValueToForm()
108
102
  break;
109
103
  case 'disabled':
110
104
  for (const input of this.#inputs)
@@ -112,22 +106,41 @@ export class DatePicker extends FormAssociatedBase {
112
106
  break;
113
107
  }
114
108
  }
109
+ disconnectedCallback() {
110
+ super.disconnectedCallback();
111
+ this.#validityObservers.unobserveAll();
112
+ }
113
+ connectedCallback() {
114
+ super.connectedCallback();
115
+ CleanupRegistry.register(this, onoff('click', this.#handleClick, this).on());
116
+ this.#render();
117
+ CleanupRegistry.register(this, onoff('localechange', () => {
118
+ this.#render();
119
+ }, I18n.on).on());
120
+ // finally
121
+ if (!this.hasAttribute('selection'))
122
+ return;
123
+ const [y = '', m = '', d = ''] = (this.getAttribute('selection') ?? '').split(/\D+/);
124
+ this.#selectedDate = { year: y, month: m, day: d };
125
+ this.#sendValueToForm(false);
126
+ }
115
127
  get datePickerStyle() {
116
- return datePickerStyles.includes(this.getAttribute('date-picker-style') ?? '')
117
- ? this.getAttribute('date-picker-style')
118
- : 'automatic';
128
+ return datePickerStyles.includes(this.getAttribute('date-picker-style') ?? '') ? this.getAttribute('date-picker-style') : 'automatic';
119
129
  }
120
130
  #render() {
121
- console.debug(`${_a.name} ⚡️ render (${this.datePickerStyle})`);
122
- if (!this.isConnected)
123
- return;
131
+ debug(`${_a.name} ⚡️ #render (${this.datePickerStyle})`);
124
132
  // if (this.#lastRenderedStyle === this.datePickerStyle) return // skip if already applied
125
133
  // this.#lastRenderedStyle = this.datePickerStyle
126
134
  // clear shadow DOM
127
135
  this.#shadowRoot.replaceChildren(document.importNode(this.template, true));
128
- this.#validitiesSlot = this.#shadowRoot.querySelector('slot[name=validity-options]') ?? undefined;
136
+ CleanupRegistry.unregister(this, 'slots');
137
+ for (const slot of this.#shadowRoot.querySelectorAll('slot'))
138
+ this.#slots?.set(slot.name, slot);
139
+ CleanupRegistry.register(this, () => {
140
+ this.#slots = new Map();
141
+ }, 'slots');
129
142
  CleanupRegistry.unregister(this, 'validities');
130
- CleanupRegistry.register(this, onoff(makeSlotchangeHandler(this), this.#validitiesSlot).on(), 'validities');
143
+ CleanupRegistry.register(this, onoff('slotchange', this.#handleValiditiesSlotchange, this.#slots?.get('validity-options')).on(), 'validities');
131
144
  switch (this.datePickerStyle) {
132
145
  default:
133
146
  const [yyyy = '', mm = '', dd = ''] = new Date().toISOString().split('T').shift()?.split('-') ?? [], map = { year: yyyy, month: mm, day: dd };
@@ -158,7 +171,16 @@ export class DatePicker extends FormAssociatedBase {
158
171
  break;
159
172
  }
160
173
  }
161
- get selection() {
174
+ #handleValiditiesSlotchange = ({ type, target: slot }) => {
175
+ debug(`${_a.name} ⚡️ ${type}`);
176
+ if (!(slot instanceof HTMLSlotElement))
177
+ return;
178
+ const assigned = slot.assignedElements();
179
+ this.#validityObservers.syncObservations(assigned, ['value', 'label']);
180
+ // if (0 < assigned.length)
181
+ this.#renderValidityMsgs([]);
182
+ };
183
+ get #selectedDate() {
162
184
  const map = Object.fromEntries(this.#inputs.map(({ name, value }) => [name, value]));
163
185
  return {
164
186
  year: map.year ?? '',
@@ -166,7 +188,7 @@ export class DatePicker extends FormAssociatedBase {
166
188
  day: map.day ?? '',
167
189
  };
168
190
  }
169
- set selection(v) {
191
+ set #selectedDate(v) {
170
192
  for (const input of this.#inputs) {
171
193
  const nv = v[input.name] ?? '', pattern = /^(\d+)?$/;
172
194
  let finalValue = pattern.test(nv) ? nv : '', parsedValue = parseInt(finalValue);
@@ -178,8 +200,11 @@ export class DatePicker extends FormAssociatedBase {
178
200
  }
179
201
  }
180
202
  #handleClick = (evt) => {
181
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
182
- const input = evt.target?.closest('input');
203
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
204
+ const { target } = evt;
205
+ if (!(target instanceof HTMLElement))
206
+ return;
207
+ const input = target.closest('input');
183
208
  if (input)
184
209
  return;
185
210
  this.#shadowRoot.querySelector('input.focus')?.focus?.();
@@ -210,7 +235,7 @@ export class DatePicker extends FormAssociatedBase {
210
235
  else
211
236
  this.setValidity({});
212
237
  }
213
- const selection = `${this.selection.year}-${this.selection.month}-${this.selection.day}`;
238
+ const selection = `${this.#selectedDate.year}-${this.#selectedDate.month}-${this.#selectedDate.day}`;
214
239
  const entries = new FormData();
215
240
  entries.append(this.name, selection);
216
241
  this.#internals.setFormValue(entries);
@@ -218,9 +243,9 @@ export class DatePicker extends FormAssociatedBase {
218
243
  this.dispatchEvent(new CustomEvent('selection', { detail: { selection }, bubbles: true, composed: true }));
219
244
  };
220
245
  #handleInputPaste = (evt) => {
221
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
222
- const input = evt.target;
223
- if (!input)
246
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
247
+ const { target: input } = evt;
248
+ if (!(input instanceof HTMLInputElement))
224
249
  return;
225
250
  evt.preventDefault();
226
251
  const data = [...`${(evt.clipboardData?.getData('text') ?? '').trim()}`].reduce((acc, ch, i) => {
@@ -240,9 +265,9 @@ export class DatePicker extends FormAssociatedBase {
240
265
  this.#sendValueToForm();
241
266
  };
242
267
  #handleInputBeforeinput = (evt) => {
243
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
244
- const input = evt.target;
245
- if (!input)
268
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
269
+ const { target: input } = evt;
270
+ if (!(input instanceof HTMLInputElement))
246
271
  return;
247
272
  if ('insertText' !== evt.inputType)
248
273
  return;
@@ -263,7 +288,9 @@ export class DatePicker extends FormAssociatedBase {
263
288
  }
264
289
  };
265
290
  #handleInputKeydown = ({ type, target, key }) => {
266
- console.debug(`${_a.name} ⚡️ ${type}`);
291
+ debug(`${_a.name} ⚡️ ${type}`);
292
+ if (!(target instanceof HTMLInputElement))
293
+ return;
267
294
  const input = target;
268
295
  if (!input)
269
296
  return;
@@ -280,13 +307,15 @@ export class DatePicker extends FormAssociatedBase {
280
307
  this.#inputs[index]?.focus();
281
308
  };
282
309
  #handleInputFocus = (evt) => {
283
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
310
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
284
311
  for (const input of this.#inputs)
285
312
  input.classList.toggle('focus', input === evt.target);
286
313
  };
287
- #handleInputBlur = (evt) => {
288
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
289
- const input = evt.target;
314
+ #handleInputBlur = ({ target, type }) => {
315
+ debug(`${_a.name} ⚡️ ${type}`);
316
+ if (!(target instanceof HTMLInputElement))
317
+ return;
318
+ const input = target;
290
319
  if (0 === input.value.length)
291
320
  return;
292
321
  const finalText = `${clamp(this.value[input.name] ?? '0', _a.#min(input), _a.#max(input))}`.padStart(parseInt(input.getAttribute('maxlength') ?? '0'), '0');
@@ -296,10 +325,12 @@ export class DatePicker extends FormAssociatedBase {
296
325
  this.#sendValueToForm();
297
326
  };
298
327
  #handleInputInput = (evt) => {
299
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
328
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
300
329
  this.#sendValueToForm();
301
330
  };
302
- // Optional: form participation properties
331
+ /**
332
+ * Form participation property
333
+ */
303
334
  get name() {
304
335
  return this.getAttribute('name') ?? this.getAttribute('label') ?? this.querySelector(':scope>[slot=label]')?.textContent ?? '';
305
336
  }
@@ -313,6 +344,10 @@ export class DatePicker extends FormAssociatedBase {
313
344
  day: (map.day ?? '').padStart(2, '0'),
314
345
  };
315
346
  }
347
+ /**
348
+ * Returns the value as a Date object.
349
+ * @type {Date|null}
350
+ */
316
351
  get valueAsDate() {
317
352
  try {
318
353
  const d = new Date(`${this.value.year}-${this.value.month}-${this.value.day}`);
@@ -379,16 +414,16 @@ export class DatePicker extends FormAssociatedBase {
379
414
  const key = k; // ✅ type-safe cast
380
415
  if (true !== flags[key])
381
416
  continue;
382
- for (const el of this.#validitiesSlot?.assignedElements({ flatten: true }) ?? []) {
417
+ for (const el of this.#slots?.get('validity-options')?.assignedElements({ flatten: true }) ?? []) {
383
418
  if (!el.matches('option'))
384
419
  continue;
385
- const option = el;
386
- if (`${kebabCase(key)}` === option.value) {
387
- message = option.label;
420
+ const { label, value } = el;
421
+ if (`${kebabCase(key)}` === value) {
422
+ message = label;
388
423
  break;
389
424
  }
390
- else if (`${kebabCase(key)}:${message}` === option.value) {
391
- message = option.label;
425
+ else if (`${kebabCase(key)}:${message}` === value) {
426
+ message = label;
392
427
  break;
393
428
  }
394
429
  }
@@ -401,7 +436,7 @@ export class DatePicker extends FormAssociatedBase {
401
436
  message = kebabCase(key);
402
437
  break;
403
438
  }
404
- console.debug(`${_a.name} ⚡️ validity-change`);
439
+ debug(`${_a.name} ⚡️ validity-change`);
405
440
  return this.#internals.setValidity(flags, this.#customValidity || message, anchor ?? this.#inputs.at(0));
406
441
  };
407
442
  setCustomValidity = (message) => {
@@ -411,20 +446,23 @@ export class DatePicker extends FormAssociatedBase {
411
446
  else
412
447
  this.#sendValueToForm(false);
413
448
  };
414
- formAssociatedCallback = (form) => {
415
- this.#sendValueToForm();
416
- };
417
- formDisabledCallback = (disabled) => {
449
+ formStateRestoreCallback(state, reason) {
450
+ //
451
+ }
452
+ formAssociatedCallback(form) {
453
+ this.#sendValueToForm(false);
454
+ }
455
+ formDisabledCallback(disabled) {
418
456
  for (const input of this.#inputs)
419
457
  input.toggleAttribute('disabled', !disabled);
420
- };
421
- formResetCallback = () => {
422
- this.selection = {
458
+ }
459
+ formResetCallback() {
460
+ this.#selectedDate = {
423
461
  year: '',
424
462
  month: '',
425
463
  day: '',
426
464
  };
427
- this.#sendValueToForm();
428
- };
465
+ this.#sendValueToForm(false);
466
+ }
429
467
  }
430
468
  _a = DatePicker;
@@ -0,0 +1,11 @@
1
+ export declare class DetailPlaceholder extends HTMLElement {
2
+ constructor();
3
+ connectedCallback(): void;
4
+ disconnectedCallback(): void;
5
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
6
+ }
7
+ declare global {
8
+ interface HTMLElementTagNameMap {
9
+ 'detail-placeholder': DetailPlaceholder;
10
+ }
11
+ }
@@ -0,0 +1,15 @@
1
+ import { debug } from '../internal/utils';
2
+ export class DetailPlaceholder extends HTMLElement {
3
+ constructor() {
4
+ super();
5
+ }
6
+ connectedCallback() {
7
+ debug(`${DetailPlaceholder.name} ⚡️ connect`);
8
+ }
9
+ disconnectedCallback() {
10
+ debug(`${DetailPlaceholder.name} ⚡️ disconnect`);
11
+ }
12
+ attributeChangedCallback(name, oldValue, newValue) {
13
+ debug(`${DetailPlaceholder.name} ⚡️ attr-change [${name}]`);
14
+ }
15
+ }
@@ -1,4 +1,12 @@
1
1
  import { DetailsBase } from '../namespace-browser/base';
2
+ /**
3
+ * @summary A view that shows or hides another view when the user opens or closes it.
4
+ *
5
+ * @example <details is="disclosure-group"><summary><label-view title="Items"></label-view></summary><label-view title="Item 1"></label-view><label-view title="Item 2"></label-view><details is="disclosure-group"><summary><label-view title="Sub-items"></label-view></summary><label-view title="Sub-item 1"></label-view></details></details>
6
+ *
7
+ * @fires is-expanded
8
+ * @fires is-collapsed
9
+ */
2
10
  export declare class DisclosureGroup extends DetailsBase {
3
11
  #private;
4
12
  static get observedAttributes(): string[];
@@ -1,12 +1,21 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { cssTime, onoff, timeout } from '../internal/utils';
2
+ import { cssTime, debug, onoff, timeout } from '../internal/utils';
3
3
  import { DetailsBase } from '../namespace-browser/base';
4
4
  const toggleTimers = new WeakMap();
5
+ /**
6
+ * @summary A view that shows or hides another view when the user opens or closes it.
7
+ *
8
+ * @example <details is="disclosure-group"><summary><label-view title="Items"></label-view></summary><label-view title="Item 1"></label-view><label-view title="Item 2"></label-view><details is="disclosure-group"><summary><label-view title="Sub-items"></label-view></summary><label-view title="Sub-item 1"></label-view></details></details>
9
+ *
10
+ * @fires is-expanded
11
+ * @fires is-collapsed
12
+ */
5
13
  export class DisclosureGroup extends DetailsBase {
6
14
  static get observedAttributes() {
7
15
  return [
8
16
  /**
9
17
  * The status of this element
18
+ * @type {boolean}
10
19
  */
11
20
  'open',
12
21
  ];
@@ -15,15 +24,15 @@ export class DisclosureGroup extends DetailsBase {
15
24
  super();
16
25
  }
17
26
  attributeChangedCallback(name, oldValue, newValue) {
18
- console.debug(`${DisclosureGroup.name} ⚡️ attr-change [${name}]`);
27
+ debug(`${DisclosureGroup.name} ⚡️ attr-change [${name}]`);
19
28
  // if (CSS.supports('interpolate-size', 'allow-keywords')) return
20
29
  }
21
30
  static polyfillDisconnectedCallback(el) {
22
- console.debug(`${DisclosureGroup.name} ⚡️ disconnect`);
31
+ debug(`${DisclosureGroup.name} ⚡️ disconnect`);
23
32
  CleanupRegistry.unregister(el);
24
33
  }
25
34
  static polyfillConnectedCallback(el) {
26
- console.debug(`${DisclosureGroup.name} ⚡️ connect`);
35
+ debug(`${DisclosureGroup.name} ⚡️ connect`);
27
36
  const newValue = el.open ? 'open' : 'closed';
28
37
  if (newValue !== el.dataset.state)
29
38
  el.dataset.state = newValue;
@@ -33,9 +42,11 @@ export class DisclosureGroup extends DetailsBase {
33
42
  toggleTimers.delete(el);
34
43
  });
35
44
  }
36
- static #handleToggle = async (evt) => {
37
- console.debug(`${DisclosureGroup.name} ⚡️ ${evt?.type}`);
38
- const details = evt.currentTarget, newValue = details.open ? 'opening' : 'closing';
45
+ static #handleToggle = async ({ type, currentTarget: details }) => {
46
+ debug(`${DisclosureGroup.name} ⚡️ ${type}`);
47
+ if (!(details instanceof HTMLDetailsElement))
48
+ return;
49
+ const newValue = details.open ? 'opening' : 'closing';
39
50
  if (newValue !== details.dataset.state)
40
51
  details.dataset.state = newValue;
41
52
  if (!toggleTimers.has(details))
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @summary A tooltip that shows an unobtrusive helpful message on pointer:fine screens. Use it by adding a `help` attribute to any element.
3
+ */
4
+ export declare class FineTooltip extends HTMLElement {
5
+ #private;
6
+ constructor();
7
+ connectedCallback(): void;
8
+ disconnectedCallback(): void;
9
+ hidePopover(): void;
10
+ }
11
+ declare global {
12
+ interface HTMLElementTagNameMap {
13
+ 'fine-tooltip': FineTooltip;
14
+ }
15
+ }
@@ -0,0 +1,108 @@
1
+ var _a;
2
+ import { CleanupRegistry } from '../internal/class/cleanup-registry';
3
+ import { $, debug, onoff } from '../internal/utils';
4
+ import { html } from '../tpl';
5
+ /**
6
+ * @summary A tooltip that shows an unobtrusive helpful message on pointer:fine screens. Use it by adding a `help` attribute to any element.
7
+ */
8
+ export class FineTooltip extends HTMLElement {
9
+ constructor() {
10
+ super();
11
+ }
12
+ #handleTriggerRemovalMutation = (mutations) => {
13
+ if (this.#queryTrigger?.isConnected)
14
+ return;
15
+ this?.remove();
16
+ };
17
+ #handleTriggerAttrMutation = (mutations) => {
18
+ for (const { target, attributeName } of mutations)
19
+ if (target instanceof HTMLElement && attributeName)
20
+ this.#render(target.getAttribute(attributeName));
21
+ };
22
+ #handleMeasure = ([{ target, borderBoxSize }]) => {
23
+ debug(`${_a.name} ⚡️ measure`);
24
+ if (target.hasAttribute('closing'))
25
+ return;
26
+ if (!(target instanceof HTMLElement))
27
+ return;
28
+ const { top } = target.getBoundingClientRect();
29
+ const vpHeight = self.visualViewport?.height ?? 0, blockSize = borderBoxSize.at(0)?.blockSize ?? 0;
30
+ if (top > vpHeight - blockSize - 50) {
31
+ target.style.setProperty('position-area', 'top center');
32
+ target.style.setProperty('transform-origin', 'bottom');
33
+ }
34
+ };
35
+ #mutationObserver = new MutationObserver(this.#handleTriggerAttrMutation);
36
+ #mutationObserver2 = new MutationObserver(this.#handleTriggerRemovalMutation);
37
+ #resizeObserver = new ResizeObserver(this.#handleMeasure);
38
+ get #queryTrigger() {
39
+ const positionAnchor = this.style.positionAnchor;
40
+ if (!positionAnchor.startsWith('--help-'))
41
+ return;
42
+ const trigger = document.querySelector(`[style*="${CSS.escape(positionAnchor)}"][help]`);
43
+ return trigger ?? undefined;
44
+ }
45
+ #render = (str) => {
46
+ const label = this.querySelector(':scope>label-view') ?? this.appendChild($(html `<label-view></label-view>`, '>1'));
47
+ if (str)
48
+ label.setAttribute('title', str);
49
+ else
50
+ label.removeAttribute('title');
51
+ };
52
+ connectedCallback() {
53
+ debug(`${_a.name} ⚡️ connect`);
54
+ this.removeAttribute('closing');
55
+ this.popover = 'manual';
56
+ this.inert = true;
57
+ CleanupRegistry.register(this, onoff('toggle', this.#handleToggle, this).on());
58
+ CleanupRegistry.register(this, onoff('beforetoggle', this.#handleBeforetoggle, this).on());
59
+ this.showPopover();
60
+ }
61
+ disconnectedCallback() {
62
+ debug(`${_a.name} ⚡️ disconnect`);
63
+ this.#resizeObserver.unobserve(this);
64
+ this.#mutationObserver?.disconnect();
65
+ this.#mutationObserver2?.disconnect();
66
+ this.#queryTrigger?.style.removeProperty('anchor-name');
67
+ CleanupRegistry.unregister(this);
68
+ }
69
+ #handleToggle = ({ newState }) => {
70
+ if ('closed' !== newState)
71
+ return;
72
+ this.remove();
73
+ };
74
+ #handleBeforetoggle = (evt) => {
75
+ if ('open' !== evt.newState)
76
+ return;
77
+ const trigger = this.#queryTrigger;
78
+ if (!trigger) {
79
+ evt.preventDefault();
80
+ this.remove();
81
+ return;
82
+ }
83
+ else {
84
+ this.#render(trigger.getAttribute('help'));
85
+ this.#mutationObserver.observe(trigger, {
86
+ attributes: true,
87
+ attributeFilter: ['help'],
88
+ });
89
+ this.#mutationObserver2.observe(document.body, {
90
+ childList: true,
91
+ subtree: true,
92
+ });
93
+ this.#resizeObserver.observe(this);
94
+ }
95
+ this.toggleAttribute('open', 'open' === evt.newState);
96
+ };
97
+ hidePopover() {
98
+ if (this.hasAttribute('closing'))
99
+ return;
100
+ this.setAttribute('closing', '');
101
+ Promise.allSettled(this.getAnimations().map(({ finished }) => finished)).then(() => {
102
+ if (!this.hasAttribute('closing'))
103
+ return;
104
+ this?.remove();
105
+ });
106
+ }
107
+ }
108
+ _a = FineTooltip;
@@ -1,6 +1,16 @@
1
1
  import { FormBase } from '../namespace-browser/base';
2
+ /**
3
+ * @summary A container view that groups controls together for entering data, like a settings screen.
4
+ *
5
+ * @attr {hidden} navigation-link-indicator-visibility — Hides accessories like right-arrow-chevron on NavigationLink buttons inside.
6
+ */
2
7
  export declare class FormView extends FormBase {
3
8
  constructor();
4
9
  static polyfillDisconnectedCallback(el: HTMLFormElement): void;
5
10
  static polyfillConnectedCallback(el: HTMLFormElement): void;
6
11
  }
12
+ declare global {
13
+ interface HTMLElementTagNameMap {
14
+ 'form-view': FormView;
15
+ }
16
+ }
@@ -1,17 +1,22 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { listActive, onoff } from '../internal/utils';
2
+ import { debug, listActive, onoff } from '../internal/utils';
3
3
  import { FormBase } from '../namespace-browser/base';
4
+ /**
5
+ * @summary A container view that groups controls together for entering data, like a settings screen.
6
+ *
7
+ * @attr {hidden} navigation-link-indicator-visibility — Hides accessories like right-arrow-chevron on NavigationLink buttons inside.
8
+ */
4
9
  export class FormView extends FormBase {
5
10
  constructor() {
6
11
  super();
7
12
  }
8
13
  static polyfillDisconnectedCallback(el) {
9
- console.debug(`${FormView.name} ⚡️ disconnect`);
14
+ debug(`${FormView.name} ⚡️ disconnect`);
10
15
  // finally
11
16
  CleanupRegistry.unregister(el);
12
17
  }
13
18
  static polyfillConnectedCallback(el) {
14
- console.debug(`${FormView.name} ⚡️ connect`);
19
+ debug(`${FormView.name} ⚡️ connect`);
15
20
  if (el.closest('[is=sidebar-view],[is=tab-bar]')) {
16
21
  el.method = 'dialog';
17
22
  el.noValidate = true;