@swiftwc/ui 0.0.0-dev.34 → 0.0.0-dev.36
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.
- package/generated/client/index.js +8 -2
- package/generated/components/bordered-button.js +2 -2
- package/generated/components/bordered-prominent-button.js +2 -2
- package/generated/components/borderless-button.js +2 -2
- package/generated/components/date-picker.d.ts +2 -2
- package/generated/components/date-picker.js +6 -6
- package/generated/components/glass-button.js +2 -2
- package/generated/components/glass-prominent-button.js +2 -2
- package/generated/components/list-view.js +12 -14
- package/generated/components/tool-bar-item.d.ts +2 -1
- package/generated/components/tool-bar-item.js +19 -8
- package/generated/css/index.css +3 -0
- package/generated/internal/utils/ensure-placeholder.d.ts +1 -0
- package/generated/internal/utils/{button-role.js → ensure-placeholder.js} +7 -14
- package/generated/internal/utils/index.d.ts +1 -1
- package/generated/internal/utils/index.js +1 -1
- package/package.json +1 -1
- package/scss/components/_h-stack.scss +1 -1
- package/scss/placeholders/_lists.scss +11 -1
- package/generated/internal/utils/button-role.d.ts +0 -1
|
@@ -4,6 +4,7 @@ import { I18n } from '../i18n';
|
|
|
4
4
|
import { NavigationPath } from '../internal/class/navigation-path';
|
|
5
5
|
import { $, kebabCase, onoff } from '../internal/utils';
|
|
6
6
|
import { Snapshot } from '../snapshot';
|
|
7
|
+
//#region polyfills
|
|
7
8
|
export const polyfills = new Map();
|
|
8
9
|
for (const [k, Ctor] of Object.entries(Components)) {
|
|
9
10
|
const is = kebabCase(k);
|
|
@@ -101,6 +102,7 @@ if (0 < polyfills.size) {
|
|
|
101
102
|
}
|
|
102
103
|
// SECTION: Safari polyfill
|
|
103
104
|
document.addEventListener('touchstart', () => { }, { passive: true });
|
|
105
|
+
//#endregion
|
|
104
106
|
// SECTION
|
|
105
107
|
const handleHelp = ({ target, relatedTarget }) => {
|
|
106
108
|
if (!(target instanceof HTMLElement && target))
|
|
@@ -164,7 +166,7 @@ if (mediaQueryList.matches)
|
|
|
164
166
|
['pointerout', handleDone],
|
|
165
167
|
])
|
|
166
168
|
document.addEventListener(k, v, { passive: true });
|
|
167
|
-
|
|
169
|
+
//#region Transitions
|
|
168
170
|
const cleanup = (lm, type) => {
|
|
169
171
|
let arr = [Snapshot.config['vt-fwd-class-name'], 'fwdd', 'fwn', 'fwnn', 'bwd', 'bwdd', 'bwn', 'bwnn'];
|
|
170
172
|
if (['backwards', 'forwards'].includes(type ?? ''))
|
|
@@ -315,6 +317,8 @@ export const startViewTransition = async (target, type = 'forwards', updateCallb
|
|
|
315
317
|
await updateCallback();
|
|
316
318
|
}
|
|
317
319
|
};
|
|
320
|
+
//#endregion
|
|
321
|
+
//#region fns
|
|
318
322
|
export const alert = async (title, message, actions, options) => {
|
|
319
323
|
await navigator.locks.request('alert:', async () => {
|
|
320
324
|
const dialog = $(`<dialog is="alert-dialog"></dialog>`, '>1'), vStack = dialog.querySelector(':scope>v-stack') ?? dialog.appendChild($(`<v-stack spacing="1" alignment="fill"></v-stack>`, '>1'));
|
|
@@ -410,6 +414,8 @@ export const confirmationDialog = async (trigger, title, message, actions, optio
|
|
|
410
414
|
// // controller.signal.addEventListener('abort', onAbort, { once: true })
|
|
411
415
|
// })
|
|
412
416
|
};
|
|
417
|
+
//#endregion
|
|
413
418
|
void Snapshot.waitReady; // void Snapshot.setOwnConfig()
|
|
414
|
-
|
|
419
|
+
//#region exports
|
|
415
420
|
export { I18n, lifecycleObserver, NavigationPath, Snapshot };
|
|
421
|
+
//#endregion
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CleanupRegistry } from '../internal/class/cleanup-registry';
|
|
2
|
-
import {
|
|
2
|
+
import { ensurePlaceholder, onoff } from '../internal/utils';
|
|
3
3
|
import { ButtonBase } from '../namespace-browser/base';
|
|
4
4
|
import { Snapshot } from '../snapshot';
|
|
5
5
|
/**
|
|
@@ -31,7 +31,7 @@ export class BorderedButton extends ButtonBase {
|
|
|
31
31
|
case 'title-key':
|
|
32
32
|
case 'role':
|
|
33
33
|
Snapshot.waitReady.then(() => {
|
|
34
|
-
|
|
34
|
+
ensurePlaceholder(target, target.getAttribute('role'), target.getAttribute('title-key'));
|
|
35
35
|
});
|
|
36
36
|
break;
|
|
37
37
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CleanupRegistry } from '../internal/class/cleanup-registry';
|
|
2
|
-
import {
|
|
2
|
+
import { ensurePlaceholder, onoff } from '../internal/utils';
|
|
3
3
|
import { ButtonBase } from '../namespace-browser/base';
|
|
4
4
|
import { Snapshot } from '../snapshot';
|
|
5
5
|
/**
|
|
@@ -31,7 +31,7 @@ export class BorderedProminentButton extends ButtonBase {
|
|
|
31
31
|
case 'title-key':
|
|
32
32
|
case 'role':
|
|
33
33
|
Snapshot.waitReady.then(() => {
|
|
34
|
-
|
|
34
|
+
ensurePlaceholder(target, target.getAttribute('role'), target.getAttribute('title-key'));
|
|
35
35
|
});
|
|
36
36
|
break;
|
|
37
37
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CleanupRegistry } from '../internal/class/cleanup-registry';
|
|
2
|
-
import {
|
|
2
|
+
import { ensurePlaceholder, onoff } from '../internal/utils';
|
|
3
3
|
import { ButtonBase } from '../namespace-browser/base';
|
|
4
4
|
import { Snapshot } from '../snapshot';
|
|
5
5
|
/**
|
|
@@ -31,7 +31,7 @@ export class BorderlessButton extends ButtonBase {
|
|
|
31
31
|
case 'title-key':
|
|
32
32
|
case 'role':
|
|
33
33
|
Snapshot.waitReady.then(() => {
|
|
34
|
-
|
|
34
|
+
ensurePlaceholder(target, target.getAttribute('role'), target.getAttribute('title-key'));
|
|
35
35
|
});
|
|
36
36
|
break;
|
|
37
37
|
}
|
|
@@ -10,12 +10,12 @@ export declare class DatePicker extends FormAssociatedBase {
|
|
|
10
10
|
disconnectedCallback(): void;
|
|
11
11
|
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
12
12
|
get datePickerStyle(): DatePickerStyle;
|
|
13
|
-
get
|
|
13
|
+
get selectedDate(): {
|
|
14
14
|
year: string;
|
|
15
15
|
month: string;
|
|
16
16
|
day: string;
|
|
17
17
|
};
|
|
18
|
-
set
|
|
18
|
+
set selectedDate(v: {
|
|
19
19
|
year: string;
|
|
20
20
|
month: string;
|
|
21
21
|
day: string;
|
|
@@ -69,7 +69,7 @@ export class DatePicker extends FormAssociatedBase {
|
|
|
69
69
|
if (!this.hasAttribute('selection'))
|
|
70
70
|
return;
|
|
71
71
|
const [y = '', m = '', d = ''] = (this.getAttribute('selection') ?? '').split(/\D+/);
|
|
72
|
-
this.
|
|
72
|
+
this.selectedDate = { year: y, month: m, day: d };
|
|
73
73
|
this.#sendValueToForm(false);
|
|
74
74
|
}
|
|
75
75
|
disconnectedCallback() {
|
|
@@ -80,7 +80,7 @@ export class DatePicker extends FormAssociatedBase {
|
|
|
80
80
|
switch (name) {
|
|
81
81
|
case 'selection':
|
|
82
82
|
const [y = '', m = '', d = ''] = (newValue ?? '').split(/\D+/);
|
|
83
|
-
this.
|
|
83
|
+
this.selectedDate = { year: y, month: m, day: d };
|
|
84
84
|
break;
|
|
85
85
|
case 'required':
|
|
86
86
|
for (const input of this.#inputs)
|
|
@@ -162,7 +162,7 @@ export class DatePicker extends FormAssociatedBase {
|
|
|
162
162
|
break;
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
|
-
get
|
|
165
|
+
get selectedDate() {
|
|
166
166
|
const map = Object.fromEntries(this.#inputs.map(({ name, value }) => [name, value]));
|
|
167
167
|
return {
|
|
168
168
|
year: map.year ?? '',
|
|
@@ -170,7 +170,7 @@ export class DatePicker extends FormAssociatedBase {
|
|
|
170
170
|
day: map.day ?? '',
|
|
171
171
|
};
|
|
172
172
|
}
|
|
173
|
-
set
|
|
173
|
+
set selectedDate(v) {
|
|
174
174
|
for (const input of this.#inputs) {
|
|
175
175
|
const nv = v[input.name] ?? '', pattern = /^(\d+)?$/;
|
|
176
176
|
let finalValue = pattern.test(nv) ? nv : '', parsedValue = parseInt(finalValue);
|
|
@@ -217,7 +217,7 @@ export class DatePicker extends FormAssociatedBase {
|
|
|
217
217
|
else
|
|
218
218
|
this.setValidity({});
|
|
219
219
|
}
|
|
220
|
-
const selection = `${this.
|
|
220
|
+
const selection = `${this.selectedDate.year}-${this.selectedDate.month}-${this.selectedDate.day}`;
|
|
221
221
|
const entries = new FormData();
|
|
222
222
|
entries.append(this.name, selection);
|
|
223
223
|
this.#internals.setFormValue(entries);
|
|
@@ -431,7 +431,7 @@ export class DatePicker extends FormAssociatedBase {
|
|
|
431
431
|
input.toggleAttribute('disabled', !disabled);
|
|
432
432
|
};
|
|
433
433
|
formResetCallback = () => {
|
|
434
|
-
this.
|
|
434
|
+
this.selectedDate = {
|
|
435
435
|
year: '',
|
|
436
436
|
month: '',
|
|
437
437
|
day: '',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CleanupRegistry } from '../internal/class/cleanup-registry';
|
|
2
|
-
import {
|
|
2
|
+
import { ensurePlaceholder, onoff, touchGlass } from '../internal/utils';
|
|
3
3
|
import { ButtonBase } from '../namespace-browser/base';
|
|
4
4
|
import { Snapshot } from '../snapshot';
|
|
5
5
|
/**
|
|
@@ -31,7 +31,7 @@ export class GlassButton extends ButtonBase {
|
|
|
31
31
|
case 'title-key':
|
|
32
32
|
case 'role':
|
|
33
33
|
Snapshot.waitReady.then(() => {
|
|
34
|
-
|
|
34
|
+
ensurePlaceholder(target, target.getAttribute('role'), target.getAttribute('title-key'));
|
|
35
35
|
});
|
|
36
36
|
break;
|
|
37
37
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CleanupRegistry } from '../internal/class/cleanup-registry';
|
|
2
|
-
import {
|
|
2
|
+
import { ensurePlaceholder, onoff, touchGlass } from '../internal/utils';
|
|
3
3
|
import { ButtonBase } from '../namespace-browser/base';
|
|
4
4
|
import { Snapshot } from '../snapshot';
|
|
5
5
|
/**
|
|
@@ -31,7 +31,7 @@ export class GlassProminentButton extends ButtonBase {
|
|
|
31
31
|
case 'title-key':
|
|
32
32
|
case 'role':
|
|
33
33
|
Snapshot.waitReady.then(() => {
|
|
34
|
-
|
|
34
|
+
ensurePlaceholder(target, target.getAttribute('role'), target.getAttribute('title-key'));
|
|
35
35
|
});
|
|
36
36
|
break;
|
|
37
37
|
}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { CleanupRegistry } from '../internal/class/cleanup-registry';
|
|
2
2
|
import { listActive, onoff } from '../internal/utils';
|
|
3
3
|
export class ListView extends HTMLElement {
|
|
4
|
-
// static
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
4
|
+
// static #template: DocumentFragment
|
|
5
|
+
// static get template() {
|
|
6
|
+
// return (this.#template ??= $(
|
|
7
|
+
// String.raw`
|
|
8
|
+
// <slot name="searchable"></slot>
|
|
9
|
+
// <slot></slot>
|
|
10
|
+
// `
|
|
11
|
+
// ))
|
|
12
|
+
// }
|
|
13
|
+
// #shadowRoot
|
|
9
14
|
constructor() {
|
|
10
15
|
super();
|
|
11
|
-
// this.#
|
|
12
|
-
// this.
|
|
16
|
+
// this.#shadowRoot = this.attachShadow({ mode: 'closed' })
|
|
17
|
+
// this.#shadowRoot.appendChild(document.importNode((this.constructor as typeof ListView).template, true))
|
|
13
18
|
}
|
|
14
19
|
disconnectedCallback() {
|
|
15
20
|
console.debug(`${ListView.name} ⚡️ disconnect`);
|
|
@@ -18,12 +23,5 @@ export class ListView extends HTMLElement {
|
|
|
18
23
|
connectedCallback() {
|
|
19
24
|
console.debug(`${ListView.name} ⚡️ connect`);
|
|
20
25
|
CleanupRegistry.register(this, onoff(listActive(this), this).on());
|
|
21
|
-
// this.setAttribute('role', 'listbox')
|
|
22
|
-
// this.setAttribute('aria-multiselectable', 'true')
|
|
23
|
-
// this.#options = Array.from(this.querySelectorAll('[option]'))
|
|
24
|
-
// this.addEventListener('pointerleave', this.#onCancel)
|
|
25
|
-
// this.addEventListener('click', this.#onClick)
|
|
26
|
-
// this.addEventListener('keydown', this.#onKeyDown)
|
|
27
|
-
// this.#updateOptionAttributes()
|
|
28
26
|
}
|
|
29
27
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export declare class ToolBarItem extends HTMLElement {
|
|
2
|
+
#private;
|
|
2
3
|
static get observedAttributes(): string[];
|
|
3
4
|
constructor();
|
|
4
|
-
connectedCallback(): void;
|
|
5
5
|
disconnectedCallback(): void;
|
|
6
|
+
connectedCallback(): void;
|
|
6
7
|
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
7
8
|
}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { CleanupRegistry } from '../internal/class/cleanup-registry';
|
|
2
|
-
import {
|
|
2
|
+
import { ensurePlaceholder, onoff, touchGlass } from '../internal/utils';
|
|
3
3
|
import { Snapshot } from '../snapshot';
|
|
4
4
|
export class ToolBarItem extends HTMLElement {
|
|
5
5
|
static get observedAttributes() {
|
|
6
6
|
return ['slot', 'data-previous-slot', 'title-key'];
|
|
7
7
|
}
|
|
8
|
+
#mutationObserver;
|
|
8
9
|
constructor() {
|
|
9
10
|
super();
|
|
10
11
|
}
|
|
12
|
+
disconnectedCallback() {
|
|
13
|
+
console.debug(`${ToolBarItem.name} ⚡️ disconnect`);
|
|
14
|
+
this.#mutationObserver?.disconnect();
|
|
15
|
+
CleanupRegistry.unregister(this);
|
|
16
|
+
}
|
|
11
17
|
connectedCallback() {
|
|
12
18
|
console.debug(`${ToolBarItem.name} ⚡️ connect`);
|
|
13
19
|
CleanupRegistry.register(this, onoff(touchGlass(this, (t) => t.closest('tool-bar-item-group') ?? t, (evt) => {
|
|
@@ -32,20 +38,25 @@ export class ToolBarItem extends HTMLElement {
|
|
|
32
38
|
// ) // Initial check
|
|
33
39
|
// })
|
|
34
40
|
}
|
|
35
|
-
disconnectedCallback() {
|
|
36
|
-
console.debug(`${ToolBarItem.name} ⚡️ disconnect`);
|
|
37
|
-
CleanupRegistry.unregister(this);
|
|
38
|
-
}
|
|
39
41
|
attributeChangedCallback(name, oldValue, newValue) {
|
|
40
42
|
console.debug(`${ToolBarItem.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
|
|
41
43
|
switch (name) {
|
|
42
44
|
case 'slot':
|
|
43
45
|
case 'data-previous-slot':
|
|
44
46
|
case 'title-key':
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
this.#mutationObserver?.disconnect();
|
|
48
|
+
const role = this.getAttribute('data-previous-slot') ?? this.getAttribute('slot') ?? '', tKey = this.getAttribute('title-key');
|
|
49
|
+
if (['confirmation-action', 'cancellation-action'].includes(role))
|
|
47
50
|
Snapshot.waitReady.then(() => {
|
|
48
|
-
|
|
51
|
+
ensurePlaceholder(this.querySelector(':scope>button'), role, tKey);
|
|
52
|
+
this.#mutationObserver = new MutationObserver((mutations) => {
|
|
53
|
+
for (const { target } of mutations)
|
|
54
|
+
if (target instanceof HTMLElement && target)
|
|
55
|
+
ensurePlaceholder(this.querySelector(':scope>button'), role, tKey);
|
|
56
|
+
});
|
|
57
|
+
this.#mutationObserver.observe(this, {
|
|
58
|
+
childList: true,
|
|
59
|
+
});
|
|
49
60
|
});
|
|
50
61
|
break;
|
|
51
62
|
}
|
package/generated/css/index.css
CHANGED
|
@@ -1956,6 +1956,9 @@
|
|
|
1956
1956
|
place-content: safe center;
|
|
1957
1957
|
gap: 1rem;
|
|
1958
1958
|
}
|
|
1959
|
+
:where(h-stack[template="auto spacer"]) {
|
|
1960
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
1961
|
+
}
|
|
1959
1962
|
:where(h-stack[template="spacer auto"]) {
|
|
1960
1963
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
1961
1964
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (target: HTMLElement | null, role: string | null, titleKey?: string | null): void;
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { I18n } from '../../i18n';
|
|
2
2
|
import { Snapshot } from '../../snapshot';
|
|
3
|
-
import { CleanupRegistry } from '../class/cleanup-registry';
|
|
4
3
|
import { default as $ } from './cash';
|
|
5
|
-
|
|
6
|
-
const observing = new WeakMap();
|
|
7
|
-
function ensurePlaceholder(el, role, titleKey) {
|
|
4
|
+
function renderPlaceholder(el, role, titleKey) {
|
|
8
5
|
// if (!el.isConnected) return
|
|
9
6
|
// self.requestAnimationFrame(() => {
|
|
10
7
|
// if (!el.isConnected) return
|
|
@@ -48,15 +45,11 @@ function ensurePlaceholder(el, role, titleKey) {
|
|
|
48
45
|
// } else label?.remove()
|
|
49
46
|
// })
|
|
50
47
|
}
|
|
51
|
-
export default function (
|
|
48
|
+
export default function (target, role, titleKey) {
|
|
49
|
+
if (!target)
|
|
50
|
+
return;
|
|
52
51
|
const overiderTitle = typeof titleKey === 'string' && titleKey in I18n.t('ButtonRole') ? titleKey : undefined;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
CleanupRegistry.unregister(target, 'i18n');
|
|
57
|
-
CleanupRegistry.register(target, onoff('localechange', () => ensurePlaceholder(target, role, overiderTitle), I18n.on).on(), 'i18n');
|
|
58
|
-
observing.set(host, new MutationObserver(() => ensurePlaceholder(target, role, overiderTitle)));
|
|
59
|
-
observing.get(host)?.observe(host, {
|
|
60
|
-
childList: true,
|
|
61
|
-
});
|
|
52
|
+
renderPlaceholder(target, role, overiderTitle);
|
|
53
|
+
// CleanupRegistry.unregister(target, 'i18n')
|
|
54
|
+
// CleanupRegistry.register(target, onoff('localechange', () => renderPlaceholder(target, role, overiderTitle), I18n.on).on(), 'i18n')
|
|
62
55
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import cash from './cash';
|
|
2
2
|
export { default as add } from './add';
|
|
3
|
-
export { default as
|
|
3
|
+
export { default as ensurePlaceholder } from './ensure-placeholder';
|
|
4
4
|
export { default as clamp } from './clamp';
|
|
5
5
|
export { default as compareBigDecimals } from './compare-big-decimals';
|
|
6
6
|
export { default as cssTime } from './css-time';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// import * as _intl from './intl'
|
|
2
2
|
import cash from './cash';
|
|
3
3
|
export { default as add } from './add';
|
|
4
|
-
export { default as
|
|
4
|
+
export { default as ensurePlaceholder } from './ensure-placeholder';
|
|
5
5
|
export { default as clamp } from './clamp';
|
|
6
6
|
export { default as compareBigDecimals } from './compare-big-decimals';
|
|
7
7
|
export { default as cssTime } from './css-time';
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
@use 'sass:string';
|
|
4
4
|
@use 'sass:list';
|
|
5
5
|
|
|
6
|
-
$h-stack-templates: ((minmax(0, 1fr) auto), (auto minmax(0, 1fr) auto auto), (auto minmax(0, 1fr) auto), (repeat(4, minmax(0, 1fr))), (repeat(2, minmax(0, 1fr)) auto));
|
|
6
|
+
$h-stack-templates: ((auto minmax(0, 1fr)), (minmax(0, 1fr) auto), (auto minmax(0, 1fr) auto auto), (auto minmax(0, 1fr) auto), (repeat(4, minmax(0, 1fr))), (repeat(2, minmax(0, 1fr)) auto));
|
|
7
7
|
|
|
8
8
|
@layer #{vars.$components-layer} {
|
|
9
9
|
h-stack {
|
|
@@ -494,7 +494,6 @@
|
|
|
494
494
|
}
|
|
495
495
|
}
|
|
496
496
|
}
|
|
497
|
-
// }
|
|
498
497
|
}
|
|
499
498
|
// }
|
|
500
499
|
// [is='disclosure-group'] summary [slot='marker'] {
|
|
@@ -505,6 +504,17 @@
|
|
|
505
504
|
// --itempadistart: calc(calc(var(--root-font-size) * 1px) * var(--list--accessory-size) + var(--list--item-padding-inline-start, 0px));
|
|
506
505
|
// }
|
|
507
506
|
// }
|
|
507
|
+
|
|
508
|
+
// // SECTION: add searchable
|
|
509
|
+
// > [slot='searchable'] {
|
|
510
|
+
// :where(&) {
|
|
511
|
+
// position: sticky;
|
|
512
|
+
|
|
513
|
+
// top: 20px
|
|
514
|
+
|
|
515
|
+
// background: red;
|
|
516
|
+
// }
|
|
517
|
+
// }
|
|
508
518
|
}
|
|
509
519
|
}
|
|
510
520
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function (host: HTMLElement, target: HTMLElement, role: string | null, titleKey?: string | null): void;
|