@swiftwc/ui 0.0.0-dev.36 → 0.0.0-dev.38

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 (94) hide show
  1. package/generated/client/index.d.ts +2 -9
  2. package/generated/client/index.js +5 -156
  3. package/generated/components/alert-dialog.js +18 -21
  4. package/generated/components/body-view.js +3 -2
  5. package/generated/components/bordered-button.js +4 -4
  6. package/generated/components/bordered-prominent-button.js +4 -4
  7. package/generated/components/borderless-button.js +4 -4
  8. package/generated/components/confirmation-dialog.js +18 -21
  9. package/generated/components/content-unavailable-view.js +4 -4
  10. package/generated/components/date-picker.d.ts +0 -10
  11. package/generated/components/date-picker.js +43 -30
  12. package/generated/components/disclosure-group.js +5 -5
  13. package/generated/components/fine-tooltip.js +4 -4
  14. package/generated/components/form-view.js +3 -3
  15. package/generated/components/glass-button.js +4 -4
  16. package/generated/components/glass-prominent-button.js +4 -4
  17. package/generated/components/index.d.ts +1 -0
  18. package/generated/components/index.js +1 -0
  19. package/generated/components/label-view.js +4 -4
  20. package/generated/components/list-view.js +3 -3
  21. package/generated/components/menu-view.js +14 -16
  22. package/generated/components/navigation-large-title.js +5 -5
  23. package/generated/components/navigation-split-view.js +4 -3
  24. package/generated/components/navigation-stack.js +4 -3
  25. package/generated/components/navigation-title.js +4 -4
  26. package/generated/components/picker-view.d.ts +2 -2
  27. package/generated/components/picker-view.js +314 -195
  28. package/generated/components/plain-button.js +3 -3
  29. package/generated/components/progress-view.js +6 -8
  30. package/generated/components/screen-view.js +2 -1
  31. package/generated/components/scroll-view-proxy.js +3 -2
  32. package/generated/components/scroll-view.js +15 -18
  33. package/generated/components/search-view.d.ts +8 -0
  34. package/generated/components/search-view.js +27 -0
  35. package/generated/components/section-view.js +4 -5
  36. package/generated/components/sheet-view.js +6 -34
  37. package/generated/components/sidebar-toggle.js +9 -10
  38. package/generated/components/sidebar-view.js +6 -8
  39. package/generated/components/sticky-container.js +3 -3
  40. package/generated/components/tab-bar.js +8 -10
  41. package/generated/components/tab-item.js +8 -8
  42. package/generated/components/tab-view.js +10 -11
  43. package/generated/components/table-view.js +19 -37
  44. package/generated/components/text-field.js +32 -17
  45. package/generated/components/tool-bar-item-group.js +17 -19
  46. package/generated/components/tool-bar-item.js +22 -23
  47. package/generated/components/tool-bar.d.ts +2 -2
  48. package/generated/components/tool-bar.js +7 -7
  49. package/generated/components/v-keyboard.js +5 -5
  50. package/generated/components/v-stack.js +3 -2
  51. package/generated/css/index.css +283 -272
  52. package/generated/events/picker-view.d.ts +6 -0
  53. package/generated/i18n/locales/el.d.ts +1 -0
  54. package/generated/i18n/locales/el.js +1 -0
  55. package/generated/i18n/locales/en.d.ts +1 -0
  56. package/generated/i18n/locales/en.js +1 -0
  57. package/generated/internal/class/css-style-observer.js +2 -2
  58. package/generated/internal/class/form-associated-base.d.ts +0 -4
  59. package/generated/internal/class/form-associated-base.js +21 -41
  60. package/generated/internal/class/mutation-observer-set.d.ts +9 -0
  61. package/generated/internal/class/mutation-observer-set.js +42 -0
  62. package/generated/internal/class/mutation-observer-singleton.js +18 -0
  63. package/generated/internal/class/navigation-view.js +3 -3
  64. package/generated/internal/decorators/adaptive-slot.d.ts +1 -0
  65. package/generated/internal/decorators/adaptive-slot.js +47 -0
  66. package/generated/internal/decorators/custom-element.d.ts +1 -1
  67. package/generated/internal/decorators/custom-element.js +2 -1
  68. package/generated/internal/decorators/index.d.ts +4 -0
  69. package/generated/internal/decorators/index.js +4 -0
  70. package/generated/internal/privateNamespace.d.ts +10 -0
  71. package/generated/internal/privateNamespace.js +159 -1
  72. package/generated/internal/utils/debug.d.ts +1 -0
  73. package/generated/internal/utils/debug.js +3 -0
  74. package/generated/internal/utils/index.d.ts +3 -3
  75. package/generated/internal/utils/index.js +5 -3
  76. package/generated/namespace-browser/base.d.ts +9 -0
  77. package/generated/namespace-browser/base.js +23 -0
  78. package/generated/snapshot/index.d.ts +1 -1
  79. package/generated/snapshot/index.js +4 -4
  80. package/package.json +2 -1
  81. package/scss/_components.scss +2 -0
  82. package/scss/base/_root.scss +10 -8
  83. package/scss/colors/_index.scss +9 -12
  84. package/scss/components/_index.scss +2 -0
  85. package/scss/components/_menu-view.scss +11 -5
  86. package/scss/components/_picker-view.scss +11 -2
  87. package/scss/components/_scroll-view.scss +4 -0
  88. package/scss/components/_search-view.scss +18 -0
  89. package/scss/components/_sheet-view.scss +2 -1
  90. package/scss/components/_sticky-container.scss +1 -1
  91. package/scss/placeholders/_lists.scss +35 -35
  92. package/scss/utils/_index.scss +21 -7
  93. package/scss/utils/_stacks.scss +5 -43
  94. package/web-components.html-data/en.json +11 -0
@@ -1,8 +1,9 @@
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';
6
7
  const datePickerStyles = ['graphical', 'field', 'automatic'];
7
8
  export class DatePicker extends FormAssociatedBase {
8
9
  static get observedAttributes() {
@@ -24,9 +25,14 @@ export class DatePicker extends FormAssociatedBase {
24
25
  }
25
26
  static #templates = new Map();
26
27
  // #lastRenderedStyle?: DatePickerStyle //string | null
28
+ #renderValidityMsgs = (entries) => {
29
+ debug(`${_a.name} ⚡️ mutation`);
30
+ this.setValidity(this.validity, this.validationMessage);
31
+ };
27
32
  #shadowRoot;
28
33
  #customValidity = '';
29
34
  #slots = new Map();
35
+ #validityObservers = new MutationObserverSet(this.#renderValidityMsgs);
30
36
  // #validitiesSlot?: HTMLSlotElement
31
37
  #inputs = [];
32
38
  get #internals() {
@@ -69,18 +75,19 @@ export class DatePicker extends FormAssociatedBase {
69
75
  if (!this.hasAttribute('selection'))
70
76
  return;
71
77
  const [y = '', m = '', d = ''] = (this.getAttribute('selection') ?? '').split(/\D+/);
72
- this.selectedDate = { year: y, month: m, day: d };
78
+ this.#selectedDate = { year: y, month: m, day: d };
73
79
  this.#sendValueToForm(false);
74
80
  }
75
81
  disconnectedCallback() {
76
82
  super.disconnectedCallback();
83
+ this.#validityObservers.unobserveAll();
77
84
  }
78
85
  attributeChangedCallback(name, oldValue, newValue) {
79
- console.debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
86
+ debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
80
87
  switch (name) {
81
88
  case 'selection':
82
89
  const [y = '', m = '', d = ''] = (newValue ?? '').split(/\D+/);
83
- this.selectedDate = { year: y, month: m, day: d };
90
+ this.#selectedDate = { year: y, month: m, day: d };
84
91
  break;
85
92
  case 'required':
86
93
  for (const input of this.#inputs)
@@ -117,9 +124,7 @@ export class DatePicker extends FormAssociatedBase {
117
124
  return datePickerStyles.includes(this.getAttribute('date-picker-style') ?? '') ? this.getAttribute('date-picker-style') : 'automatic';
118
125
  }
119
126
  #render() {
120
- console.debug(`${_a.name} ⚡️ render (${this.datePickerStyle})`);
121
- if (!this.isConnected)
122
- return;
127
+ debug(`${_a.name} ⚡️ render (${this.datePickerStyle})`);
123
128
  // if (this.#lastRenderedStyle === this.datePickerStyle) return // skip if already applied
124
129
  // this.#lastRenderedStyle = this.datePickerStyle
125
130
  // clear shadow DOM
@@ -131,7 +136,7 @@ export class DatePicker extends FormAssociatedBase {
131
136
  this.#slots = new Map();
132
137
  }, 'slots');
133
138
  CleanupRegistry.unregister(this, 'validities');
134
- CleanupRegistry.register(this, onoff(makeSlotchangeHandler(this), this.#slots?.get('validity-options')).on(), 'validities');
139
+ CleanupRegistry.register(this, onoff('slotchange', this.#handleValiditiesSlotchange, this.#slots?.get('validity-options')).on(), 'validities');
135
140
  switch (this.datePickerStyle) {
136
141
  default:
137
142
  const [yyyy = '', mm = '', dd = ''] = new Date().toISOString().split('T').shift()?.split('-') ?? [], map = { year: yyyy, month: mm, day: dd };
@@ -162,7 +167,16 @@ export class DatePicker extends FormAssociatedBase {
162
167
  break;
163
168
  }
164
169
  }
165
- get selectedDate() {
170
+ #handleValiditiesSlotchange = ({ type, target: slot }) => {
171
+ debug(`${_a.name} ⚡️ ${type}`);
172
+ if (!(slot instanceof HTMLSlotElement && slot))
173
+ return;
174
+ const assigned = slot.assignedElements();
175
+ this.#validityObservers.syncObservations(assigned, ['value', 'label']);
176
+ // if (0 < assigned.length)
177
+ this.#renderValidityMsgs([]);
178
+ };
179
+ get #selectedDate() {
166
180
  const map = Object.fromEntries(this.#inputs.map(({ name, value }) => [name, value]));
167
181
  return {
168
182
  year: map.year ?? '',
@@ -170,7 +184,7 @@ export class DatePicker extends FormAssociatedBase {
170
184
  day: map.day ?? '',
171
185
  };
172
186
  }
173
- set selectedDate(v) {
187
+ set #selectedDate(v) {
174
188
  for (const input of this.#inputs) {
175
189
  const nv = v[input.name] ?? '', pattern = /^(\d+)?$/;
176
190
  let finalValue = pattern.test(nv) ? nv : '', parsedValue = parseInt(finalValue);
@@ -182,9 +196,9 @@ export class DatePicker extends FormAssociatedBase {
182
196
  }
183
197
  }
184
198
  #handleClick = (evt) => {
185
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
186
- const target = evt.target instanceof HTMLElement && evt.target;
187
- if (!target)
199
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
200
+ const { target } = evt;
201
+ if (!(target instanceof HTMLElement && target))
188
202
  return;
189
203
  const input = target.closest('input');
190
204
  if (input)
@@ -217,7 +231,7 @@ export class DatePicker extends FormAssociatedBase {
217
231
  else
218
232
  this.setValidity({});
219
233
  }
220
- const selection = `${this.selectedDate.year}-${this.selectedDate.month}-${this.selectedDate.day}`;
234
+ const selection = `${this.#selectedDate.year}-${this.#selectedDate.month}-${this.#selectedDate.day}`;
221
235
  const entries = new FormData();
222
236
  entries.append(this.name, selection);
223
237
  this.#internals.setFormValue(entries);
@@ -225,9 +239,9 @@ export class DatePicker extends FormAssociatedBase {
225
239
  this.dispatchEvent(new CustomEvent('selection', { detail: { selection }, bubbles: true, composed: true }));
226
240
  };
227
241
  #handleInputPaste = (evt) => {
228
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
229
- const input = evt.target instanceof HTMLInputElement && evt.target;
230
- if (!input)
242
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
243
+ const { target: input } = evt;
244
+ if (!(input instanceof HTMLInputElement && input))
231
245
  return;
232
246
  evt.preventDefault();
233
247
  const data = [...`${(evt.clipboardData?.getData('text') ?? '').trim()}`].reduce((acc, ch, i) => {
@@ -247,9 +261,9 @@ export class DatePicker extends FormAssociatedBase {
247
261
  this.#sendValueToForm();
248
262
  };
249
263
  #handleInputBeforeinput = (evt) => {
250
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
251
- const input = evt.target instanceof HTMLInputElement && evt.target;
252
- if (!input)
264
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
265
+ const { target: input } = evt;
266
+ if (!(input instanceof HTMLInputElement && input))
253
267
  return;
254
268
  if ('insertText' !== evt.inputType)
255
269
  return;
@@ -270,7 +284,7 @@ export class DatePicker extends FormAssociatedBase {
270
284
  }
271
285
  };
272
286
  #handleInputKeydown = ({ type, target, key }) => {
273
- console.debug(`${_a.name} ⚡️ ${type}`);
287
+ debug(`${_a.name} ⚡️ ${type}`);
274
288
  if (!(target instanceof HTMLInputElement && target))
275
289
  return;
276
290
  const input = target;
@@ -289,14 +303,13 @@ export class DatePicker extends FormAssociatedBase {
289
303
  this.#inputs[index]?.focus();
290
304
  };
291
305
  #handleInputFocus = (evt) => {
292
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
306
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
293
307
  for (const input of this.#inputs)
294
308
  input.classList.toggle('focus', input === evt.target);
295
309
  };
296
- #handleInputBlur = (evt) => {
297
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
298
- const target = evt.target instanceof HTMLInputElement && evt.target;
299
- if (!target)
310
+ #handleInputBlur = ({ target, type }) => {
311
+ debug(`${_a.name} ⚡️ ${type}`);
312
+ if (!(target instanceof HTMLInputElement && target))
300
313
  return;
301
314
  const input = target;
302
315
  if (0 === input.value.length)
@@ -308,7 +321,7 @@ export class DatePicker extends FormAssociatedBase {
308
321
  this.#sendValueToForm();
309
322
  };
310
323
  #handleInputInput = (evt) => {
311
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
324
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
312
325
  this.#sendValueToForm();
313
326
  };
314
327
  // Optional: form participation properties
@@ -413,7 +426,7 @@ export class DatePicker extends FormAssociatedBase {
413
426
  message = kebabCase(key);
414
427
  break;
415
428
  }
416
- console.debug(`${_a.name} ⚡️ validity-change`);
429
+ debug(`${_a.name} ⚡️ validity-change`);
417
430
  return this.#internals.setValidity(flags, this.#customValidity || message, anchor ?? this.#inputs.at(0));
418
431
  };
419
432
  setCustomValidity = (message) => {
@@ -431,7 +444,7 @@ export class DatePicker extends FormAssociatedBase {
431
444
  input.toggleAttribute('disabled', !disabled);
432
445
  };
433
446
  formResetCallback = () => {
434
- this.selectedDate = {
447
+ this.#selectedDate = {
435
448
  year: '',
436
449
  month: '',
437
450
  day: '',
@@ -1,5 +1,5 @@
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
5
  export class DisclosureGroup extends DetailsBase {
@@ -15,15 +15,15 @@ export class DisclosureGroup extends DetailsBase {
15
15
  super();
16
16
  }
17
17
  attributeChangedCallback(name, oldValue, newValue) {
18
- console.debug(`${DisclosureGroup.name} ⚡️ attr-change [${name}]`);
18
+ debug(`${DisclosureGroup.name} ⚡️ attr-change [${name}]`);
19
19
  // if (CSS.supports('interpolate-size', 'allow-keywords')) return
20
20
  }
21
21
  static polyfillDisconnectedCallback(el) {
22
- console.debug(`${DisclosureGroup.name} ⚡️ disconnect`);
22
+ debug(`${DisclosureGroup.name} ⚡️ disconnect`);
23
23
  CleanupRegistry.unregister(el);
24
24
  }
25
25
  static polyfillConnectedCallback(el) {
26
- console.debug(`${DisclosureGroup.name} ⚡️ connect`);
26
+ debug(`${DisclosureGroup.name} ⚡️ connect`);
27
27
  const newValue = el.open ? 'open' : 'closed';
28
28
  if (newValue !== el.dataset.state)
29
29
  el.dataset.state = newValue;
@@ -34,7 +34,7 @@ export class DisclosureGroup extends DetailsBase {
34
34
  });
35
35
  }
36
36
  static #handleToggle = async (evt) => {
37
- console.debug(`${DisclosureGroup.name} ⚡️ ${evt?.type}`);
37
+ debug(`${DisclosureGroup.name} ⚡️ ${evt?.type}`);
38
38
  const details = evt.currentTarget instanceof HTMLDetailsElement && evt.currentTarget;
39
39
  if (!details)
40
40
  return;
@@ -1,6 +1,6 @@
1
1
  var _a;
2
2
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
3
- import { $, onoff } from '../internal/utils';
3
+ import { $, debug, onoff } from '../internal/utils';
4
4
  export class FineTooltip extends HTMLElement {
5
5
  constructor() {
6
6
  super();
@@ -16,7 +16,7 @@ export class FineTooltip extends HTMLElement {
16
16
  this.#render(target.getAttribute(attributeName));
17
17
  };
18
18
  #handleMeasure = ([{ target, borderBoxSize }]) => {
19
- console.debug(`${_a.name} ⚡️ measure`);
19
+ debug(`${_a.name} ⚡️ measure`);
20
20
  if (target.hasAttribute('closing'))
21
21
  return;
22
22
  if (!(target instanceof HTMLElement && target))
@@ -46,7 +46,7 @@ export class FineTooltip extends HTMLElement {
46
46
  label.removeAttribute('title');
47
47
  };
48
48
  connectedCallback() {
49
- console.debug(`${_a.name} ⚡️ connect`);
49
+ debug(`${_a.name} ⚡️ connect`);
50
50
  this.removeAttribute('closing');
51
51
  this.popover = 'manual';
52
52
  this.inert = true;
@@ -55,7 +55,7 @@ export class FineTooltip extends HTMLElement {
55
55
  this.showPopover();
56
56
  }
57
57
  disconnectedCallback() {
58
- console.debug(`${_a.name} ⚡️ disconnect`);
58
+ debug(`${_a.name} ⚡️ disconnect`);
59
59
  this.#resizeObserver.unobserve(this);
60
60
  this.#mutationObserver?.disconnect();
61
61
  this.#mutationObserver2?.disconnect();
@@ -1,17 +1,17 @@
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
4
  export class FormView extends FormBase {
5
5
  constructor() {
6
6
  super();
7
7
  }
8
8
  static polyfillDisconnectedCallback(el) {
9
- console.debug(`${FormView.name} ⚡️ disconnect`);
9
+ debug(`${FormView.name} ⚡️ disconnect`);
10
10
  // finally
11
11
  CleanupRegistry.unregister(el);
12
12
  }
13
13
  static polyfillConnectedCallback(el) {
14
- console.debug(`${FormView.name} ⚡️ connect`);
14
+ debug(`${FormView.name} ⚡️ connect`);
15
15
  if (el.closest('[is=sidebar-view],[is=tab-bar]')) {
16
16
  el.method = 'dialog';
17
17
  el.noValidate = true;
@@ -1,5 +1,5 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { ensurePlaceholder, onoff, touchGlass } from '../internal/utils';
2
+ import { debug, ensurePlaceholder, onoff, touchGlass } from '../internal/utils';
3
3
  import { ButtonBase } from '../namespace-browser/base';
4
4
  import { Snapshot } from '../snapshot';
5
5
  /**
@@ -14,16 +14,16 @@ export class GlassButton extends ButtonBase {
14
14
  super();
15
15
  }
16
16
  static polyfillDisconnectedCallback(el) {
17
- console.debug(`${GlassButton.name} ⚡️ disconnect`);
17
+ debug(`${GlassButton.name} ⚡️ disconnect`);
18
18
  CleanupRegistry.unregister(el);
19
19
  }
20
20
  static polyfillConnectedCallback(el) {
21
- console.debug(`${GlassButton.name} ⚡️ connect`);
21
+ debug(`${GlassButton.name} ⚡️ connect`);
22
22
  CleanupRegistry.register(el, onoff(touchGlass(el, (t) => t, () => true), el).on());
23
23
  el.tabIndex = 0;
24
24
  }
25
25
  static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]) {
26
- console.debug(`${GlassButton.name} ⚡️ attr-change [${attributeName}] ("${oldValue}" → "${target.getAttribute(attributeName ?? '')}")`);
26
+ debug(`${GlassButton.name} ⚡️ attr-change [${attributeName}] ("${oldValue}" → "${target.getAttribute(attributeName ?? '')}")`);
27
27
  const node = target instanceof HTMLButtonElement && target;
28
28
  if (!node)
29
29
  return;
@@ -1,5 +1,5 @@
1
1
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
2
- import { ensurePlaceholder, onoff, touchGlass } from '../internal/utils';
2
+ import { debug, ensurePlaceholder, onoff, touchGlass } from '../internal/utils';
3
3
  import { ButtonBase } from '../namespace-browser/base';
4
4
  import { Snapshot } from '../snapshot';
5
5
  /**
@@ -14,16 +14,16 @@ export class GlassProminentButton extends ButtonBase {
14
14
  super();
15
15
  }
16
16
  static polyfillDisconnectedCallback(el) {
17
- console.debug(`${GlassProminentButton.name} ⚡️ disconnect`);
17
+ debug(`${GlassProminentButton.name} ⚡️ disconnect`);
18
18
  CleanupRegistry.unregister(el);
19
19
  }
20
20
  static polyfillConnectedCallback(el) {
21
- console.debug(`${GlassProminentButton.name} ⚡️ connect`);
21
+ debug(`${GlassProminentButton.name} ⚡️ connect`);
22
22
  CleanupRegistry.register(el, onoff(touchGlass(el, (t) => t, () => true), el).on());
23
23
  el.tabIndex = 0;
24
24
  }
25
25
  static polyfillAttributeChangedCallback([{ attributeName, target, oldValue }]) {
26
- console.debug(`${GlassProminentButton.name} ⚡️ attr-change [${attributeName}] ("${oldValue}" → "${target.getAttribute(attributeName ?? '')}")`);
26
+ debug(`${GlassProminentButton.name} ⚡️ attr-change [${attributeName}] ("${oldValue}" → "${target.getAttribute(attributeName ?? '')}")`);
27
27
  const node = target instanceof HTMLButtonElement && target;
28
28
  if (!node)
29
29
  return;
@@ -24,6 +24,7 @@ export * from './progress-view';
24
24
  export * from './screen-view';
25
25
  export * from './scroll-view-proxy';
26
26
  export * from './scroll-view';
27
+ export * from './search-view';
27
28
  export * from './section-view';
28
29
  export * from './sheet-view';
29
30
  export * from './sidebar-toggle';
@@ -24,6 +24,7 @@ export * from './progress-view';
24
24
  export * from './screen-view';
25
25
  export * from './scroll-view-proxy';
26
26
  export * from './scroll-view';
27
+ export * from './search-view';
27
28
  export * from './section-view';
28
29
  export * from './sheet-view';
29
30
  export * from './sidebar-toggle';
@@ -1,4 +1,4 @@
1
- import { $ } from '../internal/utils';
1
+ import { $, debug } from '../internal/utils';
2
2
  export class LabelView extends HTMLElement {
3
3
  static get observedAttributes() {
4
4
  return ['system-image', 'title', 'line-limit', 'truncation-mode'];
@@ -25,13 +25,13 @@ export class LabelView extends HTMLElement {
25
25
  this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
26
26
  }
27
27
  disconnectedCallback() {
28
- console.debug(`${LabelView.name} ⚡️ disconnect`);
28
+ debug(`${LabelView.name} ⚡️ disconnect`);
29
29
  }
30
30
  connectedCallback() {
31
- console.debug(`${LabelView.name} ⚡️ connect`);
31
+ debug(`${LabelView.name} ⚡️ connect`);
32
32
  }
33
33
  attributeChangedCallback(name, oldValue, newValue) {
34
- console.debug(`${LabelView.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
34
+ debug(`${LabelView.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
35
35
  switch (name) {
36
36
  case 'system-image':
37
37
  let image = this.querySelector(':scope>[slot=image]');
@@ -1,5 +1,5 @@
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
  export class ListView extends HTMLElement {
4
4
  // static #template: DocumentFragment
5
5
  // static get template() {
@@ -17,11 +17,11 @@ export class ListView extends HTMLElement {
17
17
  // this.#shadowRoot.appendChild(document.importNode((this.constructor as typeof ListView).template, true))
18
18
  }
19
19
  disconnectedCallback() {
20
- console.debug(`${ListView.name} ⚡️ disconnect`);
20
+ debug(`${ListView.name} ⚡️ disconnect`);
21
21
  CleanupRegistry.unregister(this);
22
22
  }
23
23
  connectedCallback() {
24
- console.debug(`${ListView.name} ⚡️ connect`);
24
+ debug(`${ListView.name} ⚡️ connect`);
25
25
  CleanupRegistry.register(this, onoff(listActive(this), this).on());
26
26
  }
27
27
  }
@@ -1,6 +1,6 @@
1
1
  var _a;
2
2
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
3
- import { $, onoff, touchGlass } from '../internal/utils';
3
+ import { $, debug, onoff, touchGlass } from '../internal/utils';
4
4
  export class MenuView extends HTMLElement {
5
5
  static get observedAttributes() {
6
6
  return ['open', 'closing', 'label'];
@@ -27,7 +27,7 @@ export class MenuView extends HTMLElement {
27
27
  this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
28
28
  }
29
29
  disconnectedCallback() {
30
- console.debug(`${_a.name} ⚡️ disconnect`);
30
+ debug(`${_a.name} ⚡️ disconnect`);
31
31
  // const dialog = this.#shadowRoot.querySelector('dialog'),
32
32
  // trigger = this.#shadowRoot.querySelector('button')
33
33
  // trigger?.removeEventListener('click', this.#handleTriggerClick)
@@ -40,7 +40,7 @@ export class MenuView extends HTMLElement {
40
40
  CleanupRegistry.unregister(this);
41
41
  }
42
42
  connectedCallback() {
43
- console.debug(`${_a.name} ⚡️ connect`);
43
+ debug(`${_a.name} ⚡️ connect`);
44
44
  this.#dialog = this.#shadowRoot.querySelector('dialog') ?? undefined;
45
45
  const trigger = this.#shadowRoot.querySelector('button') ?? undefined;
46
46
  CleanupRegistry.register(this, onoff('click', this.#handleTriggerClick, trigger).on());
@@ -49,9 +49,8 @@ export class MenuView extends HTMLElement {
49
49
  { types: 'close', listener: this.#handleDialogClose },
50
50
  { types: 'cancel', listener: this.#handleDialogCancel },
51
51
  ], this.#dialog).on());
52
- CleanupRegistry.register(this, onoff(touchGlass(this, (t) => t, (evt) => {
53
- const target = evt.target instanceof HTMLElement && evt.target;
54
- if (!target)
52
+ CleanupRegistry.register(this, onoff(touchGlass(this, (t) => t, ({ target }) => {
53
+ if (!(target instanceof HTMLElement && target))
55
54
  return true;
56
55
  if (target.matches('menu-view'))
57
56
  return false;
@@ -65,14 +64,14 @@ export class MenuView extends HTMLElement {
65
64
  dialogPart?.style.setProperty('position-anchor', newAnchorName); // $.prop('position-anchor', newAnchorName, dialogPart) //
66
65
  }
67
66
  attributeChangedCallback(name, oldValue, newValue) {
68
- console.debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
67
+ debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
69
68
  switch (name) {
70
69
  case 'open':
71
70
  if (!this.#dialog)
72
71
  break;
73
72
  this.#dialog.inert = null === newValue;
74
73
  if (null === newValue && this.#dialog.open) {
75
- console.debug(`${_a.name} ⚡️ will-close`);
74
+ debug(`${_a.name} ⚡️ will-close`);
76
75
  this.setAttribute('closing', '');
77
76
  Promise.allSettled(this.#dialog.getAnimations().map(({ finished }) => finished)).then(() => {
78
77
  if (!this.hasAttribute('closing'))
@@ -82,7 +81,7 @@ export class MenuView extends HTMLElement {
82
81
  });
83
82
  }
84
83
  if ('' === newValue && !this.#dialog.open) {
85
- console.debug(`${_a.name} ⚡️ will-open`);
84
+ debug(`${_a.name} ⚡️ will-open`);
86
85
  this.removeAttribute('closing');
87
86
  const form = this.#shadowRoot.querySelector('form');
88
87
  form.scrollTop = 0;
@@ -100,10 +99,9 @@ export class MenuView extends HTMLElement {
100
99
  break;
101
100
  }
102
101
  }
103
- #handleDialogClick = (evt) => {
104
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
105
- const target = evt.target instanceof HTMLElement && evt.target;
106
- if (!target)
102
+ #handleDialogClick = ({ type, target }) => {
103
+ debug(`${_a.name} ⚡️ ${type}`);
104
+ if (!(target instanceof HTMLElement && target))
107
105
  return;
108
106
  if (target.matches('dialog'))
109
107
  return this.toggleAttribute('open', false); // click outside
@@ -119,19 +117,19 @@ export class MenuView extends HTMLElement {
119
117
  // event.stopPropagation() //NOTE: add this only if not nested, disposes all nicely if ommited
120
118
  };
121
119
  #handleTriggerClick = (evt) => {
122
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
120
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
123
121
  this.toggleAttribute('open', true);
124
122
  };
125
123
  // intercept to modify open attr
126
124
  #handleDialogCancel = (evt) => {
127
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
125
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
128
126
  if (!evt.cancelable)
129
127
  return;
130
128
  evt.preventDefault();
131
129
  this.toggleAttribute('open', false);
132
130
  };
133
131
  #handleDialogClose = (evt) => {
134
- console.debug(`${_a.name} ⚡️ ${evt?.type}`);
132
+ debug(`${_a.name} ⚡️ ${evt?.type}`);
135
133
  this.toggleAttribute('open', this.#shadowRoot.querySelector('dialog')?.open ?? false);
136
134
  };
137
135
  }
@@ -1,7 +1,7 @@
1
1
  var _a;
2
2
  import { CleanupRegistry } from '../internal/class/cleanup-registry';
3
3
  import { CSSStyleObserver } from '../internal/class/css-style-observer';
4
- import { add, frame, onoff, slowHideShow, timeout } from '../internal/utils';
4
+ import { add, debug, frame, onoff, slowHideShow, timeout } from '../internal/utils';
5
5
  import { Snapshot } from '../snapshot';
6
6
  const observing = new WeakSet();
7
7
  function observeResizeEnd(el, callback, stableFrames = 4) {
@@ -76,13 +76,13 @@ export class NavigationLargeTitle extends HTMLElement {
76
76
  super();
77
77
  }
78
78
  disconnectedCallback() {
79
- console.debug(`${_a.name} ⚡️ disconnect`);
79
+ debug(`${_a.name} ⚡️ disconnect`);
80
80
  this.#clearScrollState();
81
81
  this.#styleObserver?.disconnect();
82
82
  CleanupRegistry.unregister(this);
83
83
  }
84
84
  connectedCallback() {
85
- console.debug(`${_a.name} ⚡️ connect`);
85
+ debug(`${_a.name} ⚡️ connect`);
86
86
  const root = this.closest('scroll-view') ?? undefined;
87
87
  if (!root)
88
88
  return;
@@ -105,7 +105,7 @@ export class NavigationLargeTitle extends HTMLElement {
105
105
  });
106
106
  }
107
107
  #handleStyleChange = () => {
108
- console.debug(`${_a.name} ⚡️ style`);
108
+ debug(`${_a.name} ⚡️ style`);
109
109
  const root = this.closest('scroll-view') ?? undefined;
110
110
  if (!root)
111
111
  return;
@@ -150,7 +150,7 @@ export class NavigationLargeTitle extends HTMLElement {
150
150
  // this.#applySlowness(root, isIntersecting)
151
151
  // }
152
152
  #handleIntersect = (entries, { root }) => {
153
- console.debug(`${_a.name} ⚡️ intersect (${entries?.at(0)?.isIntersecting})`);
153
+ debug(`${_a.name} ⚡️ intersect (${entries?.at(0)?.isIntersecting})`);
154
154
  if (!(root instanceof HTMLElement))
155
155
  return;
156
156
  for (const { isIntersecting } of entries)
@@ -1,4 +1,5 @@
1
1
  import { NavigationView } from '../internal/class/navigation-view';
2
+ import { debug } from '../internal/utils';
2
3
  /**
3
4
  * @summary A view with two or three side-by-side sections, where what you choose in the left section changes what appears in the next section.
4
5
  */
@@ -7,15 +8,15 @@ export class NavigationSplitView extends NavigationView {
7
8
  super();
8
9
  }
9
10
  disconnectedCallback() {
10
- console.debug(`${NavigationSplitView.name} ⚡️ disconnect`);
11
+ debug(`${NavigationSplitView.name} ⚡️ disconnect`);
11
12
  super.disconnectedCallback();
12
13
  }
13
14
  connectedCallback() {
14
- console.debug(`${NavigationSplitView.name} ⚡️ connect`);
15
+ debug(`${NavigationSplitView.name} ⚡️ connect`);
15
16
  super.connectedCallback();
16
17
  }
17
18
  attributeChangedCallback(name, oldValue, newValue) {
18
- console.debug(`${NavigationSplitView.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
19
+ debug(`${NavigationSplitView.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
19
20
  super.attributeChangedCallback(name, oldValue, newValue);
20
21
  }
21
22
  }
@@ -1,4 +1,5 @@
1
1
  import { NavigationView } from '../internal/class/navigation-view';
2
+ import { debug } from '../internal/utils';
2
3
  /**
3
4
  * @summary A view that shows a main screen and lets you open other screens on top of it.
4
5
  */
@@ -7,15 +8,15 @@ export class NavigationStack extends NavigationView {
7
8
  super();
8
9
  }
9
10
  disconnectedCallback() {
10
- console.debug(`${NavigationStack.name} ⚡️ disconnect`);
11
+ debug(`${NavigationStack.name} ⚡️ disconnect`);
11
12
  super.disconnectedCallback();
12
13
  }
13
14
  connectedCallback() {
14
- console.debug(`${NavigationStack.name} ⚡️ connect`);
15
+ debug(`${NavigationStack.name} ⚡️ connect`);
15
16
  super.connectedCallback();
16
17
  }
17
18
  attributeChangedCallback(name, oldValue, newValue) {
18
- console.debug(`${NavigationStack.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
19
+ debug(`${NavigationStack.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
19
20
  super.attributeChangedCallback(name, oldValue, newValue);
20
21
  // Snapshot.waitReady.then(() => {
21
22
  switch (name) {
@@ -1,4 +1,4 @@
1
- import { $ } from '../internal/utils';
1
+ import { $, debug } from '../internal/utils';
2
2
  export class NavigationTitle extends HTMLElement {
3
3
  static get observedAttributes() {
4
4
  return ['value', 'subtitle'];
@@ -7,13 +7,13 @@ export class NavigationTitle extends HTMLElement {
7
7
  super();
8
8
  }
9
9
  disconnectedCallback() {
10
- console.debug(`${NavigationTitle.name} ⚡️ disconnect`);
10
+ debug(`${NavigationTitle.name} ⚡️ disconnect`);
11
11
  }
12
12
  connectedCallback() {
13
- console.debug(`${NavigationTitle.name} ⚡️ connect`);
13
+ debug(`${NavigationTitle.name} ⚡️ connect`);
14
14
  }
15
15
  attributeChangedCallback(name, oldValue, newValue) {
16
- console.debug(`${NavigationTitle.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
16
+ debug(`${NavigationTitle.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
17
17
  const sibling = this.closest('scroll-view') ?? undefined;
18
18
  switch (name) {
19
19
  case 'value':
@@ -1,5 +1,5 @@
1
1
  import { FormAssociatedBase } from '../internal/class/form-associated-base';
2
- declare const pickerStyles: readonly ["menu", "inline", "automatic"];
2
+ declare const pickerStyles: readonly ["menu", "inline", "navigation-link", "sheet", "automatic"];
3
3
  export type PickerStyle = (typeof pickerStyles)[number];
4
4
  export declare class PickerView extends FormAssociatedBase {
5
5
  #private;
@@ -8,6 +8,7 @@ export declare class PickerView extends FormAssociatedBase {
8
8
  LABEL: string;
9
9
  PICKER_STYLE: string;
10
10
  SELECTION: string;
11
+ SEARCHABLE: string;
11
12
  };
12
13
  static get observedAttributes(): string[];
13
14
  get template(): DocumentFragment;
@@ -16,7 +17,6 @@ export declare class PickerView extends FormAssociatedBase {
16
17
  disconnectedCallback(): void;
17
18
  attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
18
19
  get pickerStyle(): PickerStyle;
19
- static wrapTag(node: Element, slotName?: string): Element;
20
20
  get name(): string;
21
21
  setValidity: (flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement) => void;
22
22
  setCustomValidity: (message: string) => void;