@swiftwc/ui 0.0.0-dev.8 → 0.0.0-dev.81
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/buses/alert-dialog.d.ts +2 -0
- package/generated/buses/alert-dialog.js +1 -0
- package/generated/buses/confirmation-dialog.d.ts +2 -0
- package/generated/buses/confirmation-dialog.js +1 -0
- package/generated/buses/index.d.ts +6 -0
- package/generated/buses/index.js +6 -0
- package/generated/buses/lifecycle-observer.d.ts +2 -0
- package/generated/buses/lifecycle-observer.js +1 -0
- package/generated/client/index.d.ts +21 -10
- package/generated/client/index.js +177 -194
- package/generated/components/alert-dialog.d.ts +8 -0
- package/generated/components/alert-dialog.js +99 -0
- package/generated/components/body-view.js +5 -2
- package/generated/components/bordered-button.d.ts +10 -0
- package/generated/components/bordered-button.js +39 -3
- package/generated/components/bordered-prominent-button.d.ts +10 -0
- package/generated/components/bordered-prominent-button.js +39 -3
- package/generated/components/borderless-button.d.ts +9 -1
- package/generated/components/borderless-button.js +32 -11
- package/generated/components/color-scheme.d.ts +7 -0
- package/generated/components/color-scheme.js +54 -0
- package/generated/components/confirmation-dialog.d.ts +1 -1
- package/generated/components/confirmation-dialog.js +43 -32
- package/generated/components/content-unavailable-view.d.ts +24 -0
- package/generated/components/content-unavailable-view.js +81 -0
- package/generated/components/date-picker.d.ts +2 -12
- package/generated/components/date-picker.js +96 -65
- package/generated/components/disclosure-group.d.ts +5 -0
- package/generated/components/disclosure-group.js +18 -7
- package/generated/components/fine-tooltip.d.ts +7 -0
- package/generated/components/fine-tooltip.js +107 -0
- package/generated/components/form-view.d.ts +3 -0
- package/generated/components/form-view.js +8 -3
- package/generated/components/glass-button.d.ts +10 -0
- package/generated/components/glass-button.js +39 -3
- package/generated/components/glass-prominent-button.d.ts +10 -0
- package/generated/components/glass-prominent-button.js +39 -3
- package/generated/components/h-stack.d.ts +14 -0
- package/generated/components/h-stack.js +23 -0
- package/generated/components/image-view.d.ts +9 -0
- package/generated/components/image-view.js +64 -0
- package/generated/components/index.d.ts +11 -3
- package/generated/components/index.js +11 -3
- package/generated/components/label-view.d.ts +6 -1
- package/generated/components/label-view.js +40 -60
- package/generated/components/labeled-content.d.ts +9 -0
- package/generated/components/labeled-content.js +116 -0
- package/generated/components/list-view.d.ts +3 -0
- package/generated/components/list-view.js +20 -17
- package/generated/components/menu-view.d.ts +4 -1
- package/generated/components/menu-view.js +60 -51
- package/generated/components/navigation-large-title.js +9 -5
- package/generated/components/navigation-split-view.d.ts +4 -1
- package/generated/components/navigation-split-view.js +13 -6
- package/generated/components/navigation-stack.d.ts +4 -1
- package/generated/components/navigation-stack.js +16 -9
- package/generated/components/navigation-title.d.ts +1 -1
- package/generated/components/navigation-title.js +58 -55
- package/generated/components/picker-view.d.ts +32 -4
- package/generated/components/picker-view.js +924 -234
- package/generated/components/plain-button.js +5 -3
- package/generated/components/progress-view.d.ts +13 -0
- package/generated/components/progress-view.js +120 -0
- package/generated/components/screen-view.js +3 -1
- package/generated/components/scroll-view-proxy.d.ts +8 -0
- package/generated/components/scroll-view-proxy.js +17 -0
- package/generated/components/scroll-view.d.ts +1 -1
- package/generated/components/scroll-view.js +101 -85
- package/generated/components/search-view.d.ts +7 -0
- package/generated/components/search-view.js +30 -0
- package/generated/components/section-view.d.ts +1 -1
- package/generated/components/section-view.js +35 -30
- package/generated/components/sheet-view.d.ts +1 -2
- package/generated/components/sheet-view.js +32 -39
- package/generated/components/sidebar-toggle.js +44 -66
- package/generated/components/sidebar-view.js +13 -8
- package/generated/components/sticky-container.js +8 -4
- package/generated/components/tab-bar.d.ts +3 -0
- package/generated/components/tab-bar.js +20 -10
- package/generated/components/tab-item.js +24 -13
- package/generated/components/tab-view.js +25 -17
- package/generated/components/table-view.d.ts +5 -0
- package/generated/components/table-view.js +55 -77
- package/generated/components/text-field.d.ts +2 -2
- package/generated/components/text-field.js +95 -88
- package/generated/components/toggle-view.d.ts +28 -0
- package/generated/components/toggle-view.js +224 -0
- package/generated/components/tool-bar-item-group.js +21 -4
- package/generated/components/tool-bar-item.d.ts +4 -1
- package/generated/components/tool-bar-item.js +57 -10
- package/generated/components/tool-bar.d.ts +12 -0
- package/generated/components/tool-bar.js +27 -11
- package/generated/components/v-keyboard.d.ts +3 -1
- package/generated/components/v-keyboard.js +12 -6
- package/generated/components/v-stack.d.ts +12 -0
- package/generated/components/v-stack.js +17 -2
- package/generated/css/index.css +2533 -941
- package/generated/events/alert-dialog.d.ts +8 -0
- package/generated/events/alert-dialog.js +1 -0
- package/generated/events/confirmation-dialog.d.ts +2 -2
- package/generated/events/index.d.ts +2 -0
- package/generated/events/index.js +2 -0
- package/generated/events/picker-view.d.ts +7 -0
- package/generated/events/scroll-view.js +4 -0
- package/generated/events/tab-view.d.ts +6 -2
- package/generated/events/text-field.js +3 -0
- package/generated/events/toggle-view.d.ts +9 -0
- package/generated/events/toggle-view.js +4 -0
- package/generated/i18n/index.d.ts +20 -10
- package/generated/i18n/index.js +82 -54
- package/generated/i18n/locales/el.d.ts +16 -0
- package/generated/i18n/locales/el.js +16 -0
- package/generated/i18n/locales/en.d.ts +16 -0
- package/generated/i18n/locales/en.js +16 -0
- package/generated/i18n/locales/index.d.ts +4 -0
- package/generated/i18n/locales/index.js +4 -0
- package/generated/internal/class/css-style-observer.js +3 -2
- package/generated/internal/class/form-associated-base.d.ts +0 -4
- package/generated/internal/class/form-associated-base.js +23 -38
- package/generated/internal/class/mutation-observer-set.d.ts +9 -0
- package/generated/internal/class/mutation-observer-set.js +42 -0
- package/generated/internal/class/mutation-observer-singleton.js +18 -0
- package/generated/internal/class/navigation-view.d.ts +1 -1
- package/generated/internal/class/navigation-view.js +38 -43
- package/generated/internal/decorators/adaptive-slot.d.ts +1 -0
- package/generated/internal/decorators/adaptive-slot.js +50 -0
- package/generated/internal/decorators/custom-element.d.ts +1 -1
- package/generated/internal/decorators/custom-element.js +2 -1
- package/generated/internal/decorators/index.d.ts +6 -0
- package/generated/internal/decorators/index.js +6 -0
- package/generated/internal/decorators/microtask-on-connected.d.ts +39 -0
- package/generated/internal/decorators/microtask-on-connected.js +67 -0
- package/generated/internal/privateNamespace.d.ts +10 -0
- package/generated/internal/privateNamespace.js +168 -1
- package/generated/internal/utils/cash/index.d.ts +4 -3
- package/generated/internal/utils/cash/index.js +6 -4
- package/generated/internal/utils/dev-flags.d.ts +3 -0
- package/generated/internal/utils/dev-flags.js +5 -0
- package/generated/internal/utils/ensure-placeholder.d.ts +1 -0
- package/generated/internal/utils/ensure-placeholder.js +55 -0
- package/generated/internal/utils/index.d.ts +7 -2
- package/generated/internal/utils/index.js +9 -2
- package/generated/internal/utils/is-inside.d.ts +1 -0
- package/generated/internal/utils/is-inside.js +4 -0
- package/generated/internal/utils/list-active.js +67 -12
- package/generated/internal/utils/render-label-icon.d.ts +2 -0
- package/generated/internal/utils/render-label-icon.js +19 -0
- package/generated/internal/utils/render-label-title.d.ts +2 -0
- package/generated/internal/utils/render-label-title.js +16 -0
- package/generated/internal/utils/render-label.d.ts +1 -0
- package/generated/internal/utils/render-label.js +19 -0
- package/generated/internal/utils/touch-glass.js +5 -5
- package/generated/namespace-browser/base.d.ts +12 -3
- package/generated/namespace-browser/base.js +41 -18
- package/generated/namespace-browser/event.d.ts +10 -0
- package/generated/namespace-browser/event.js +1 -0
- package/generated/snapshot/index.d.ts +3 -1
- package/generated/snapshot/index.js +25 -2
- package/generated/tpl/html.d.ts +5 -0
- package/generated/tpl/html.js +3 -0
- package/generated/tpl/index.d.ts +4 -0
- package/generated/tpl/index.js +4 -0
- package/generated/tpl/render.d.ts +2 -0
- package/generated/tpl/render.js +132 -0
- package/package.json +18 -4
- package/scss/_components.scss +14 -0
- package/scss/_functions.scss +10 -0
- package/scss/_mixins.scss +4 -0
- package/scss/_transitions.scss +6 -1
- package/scss/_vars.scss +9 -2
- package/scss/base/_layout.scss +17 -7
- package/scss/base/_reboot.scss +34 -1
- package/scss/base/_root.scss +117 -114
- package/scss/colors/_index.scss +304 -85
- package/scss/components/_alert-dialog.scss +111 -0
- package/scss/components/_bordered-button.scss +35 -0
- package/scss/components/_bordered-prominent-button.scss +45 -0
- package/scss/components/_borderless-button.scss +25 -0
- package/scss/components/_confirmation-dialog.scss +41 -49
- package/scss/components/_content-unavailable-view.scss +56 -0
- package/scss/components/_date-picker.scss +15 -15
- package/scss/components/_detail-placeholder.scss +1 -3
- package/scss/components/_disclosure-group.scss +84 -33
- package/scss/components/_fine-tooltip.scss +84 -0
- package/scss/components/_form-view.scss +58 -20
- package/scss/components/_glass-button.scss +35 -0
- package/scss/components/_glass-prominent-button.scss +46 -0
- package/scss/components/_group-box.scss +27 -0
- package/scss/components/_h-flex-stack.scss +23 -0
- package/scss/components/_h-stack.scss +21 -15
- package/scss/components/_image-view.scss +20 -0
- package/scss/components/_index.scss +40 -20
- package/scss/components/_label-view copy.scss.txt +420 -0
- package/scss/components/_label-view.scss +94 -110
- package/scss/components/_label-view.scss.txt +536 -0
- package/scss/components/_labeled-content.scss +59 -1
- package/scss/components/_list-view.scss +65 -25
- package/scss/components/_menu-view.scss +95 -60
- package/scss/components/_navigation-large-title.scss +17 -0
- package/scss/components/_navigation-split-view.scss +3 -3
- package/scss/components/_picker-view.scss +259 -59
- package/scss/components/_plain-button.scss +7 -0
- package/scss/components/_progress-view.scss +98 -0
- package/scss/components/_scroll-view-proxy.scss +22 -20
- package/scss/components/_scroll-view.scss +4 -0
- package/scss/components/_search-view.scss +22 -0
- package/scss/components/_section-view.scss +23 -22
- package/scss/components/_sheet-view.scss +16 -6
- package/scss/components/_sidebar-toggle.scss +1 -4
- package/scss/components/_sticky-container.scss +1 -1
- package/scss/components/_tab-bar.scss +17 -3
- package/scss/components/_tab-view.scss +4 -2
- package/scss/components/_table-column.scss +2 -0
- package/scss/components/_table-row.scss +69 -1
- package/scss/components/_table-view.scss +22 -14
- package/scss/components/_text-field.scss +37 -17
- package/scss/components/_toggle-view.scss +112 -0
- package/scss/components/_tool-bar-item.scss +34 -82
- package/scss/components/_tool-bar.scss +77 -57
- package/scss/components/_v-stack.scss +9 -2
- package/scss/final/_touch-glass.scss +24 -0
- package/scss/mixins/_button.scss +44 -0
- package/scss/mixins/_color.scss +16 -0
- package/scss/mixins/_dialog.scss +1 -0
- package/scss/mixins/_index.scss +64 -2
- package/scss/placeholders/_buttons.scss +44 -10
- package/scss/placeholders/_lists.scss +133 -126
- package/scss/transitions/_alert-dialog.scss +18 -0
- package/scss/transitions/_confirmation-dialog.scss +8 -0
- package/scss/transitions/_fine-tooltip.scss +21 -0
- package/scss/transitions/_menu-view.scss +17 -15
- package/scss/transitions/_progress-view.scss +23 -0
- package/scss/transitions/_sheet-view.scss +30 -0
- package/scss/transitions/_tab-bar.scss +6 -5
- package/scss/utils/_frame.scss +42 -0
- package/scss/utils/_index.scss +67 -52
- package/scss/utils/_stacks.scss +56 -73
- package/web-components.html-data/en.json +623 -24
- package/generated/confirmation-dialog/index.d.ts +0 -1
- package/generated/confirmation-dialog/index.js +0 -1
- package/generated/lifecycle-observer/index.d.ts +0 -1
- package/generated/lifecycle-observer/index.js +0 -1
- package/scss/transitions/_dialog.scss +0 -28
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var _a;
|
|
2
|
+
import { lifecycleObserver } from '../../buses';
|
|
2
3
|
import { CleanupRegistry } from '../../internal/class/cleanup-registry';
|
|
3
|
-
import {
|
|
4
|
-
import { frame, onoff } from '../utils';
|
|
4
|
+
import { devFlags, frame, onoff } from '../utils';
|
|
5
5
|
export class NavigationView extends HTMLElement {
|
|
6
6
|
static get observedAttributes() {
|
|
7
7
|
return ['hidden'];
|
|
@@ -11,30 +11,6 @@ export class NavigationView extends HTMLElement {
|
|
|
11
11
|
constructor() {
|
|
12
12
|
super();
|
|
13
13
|
}
|
|
14
|
-
disconnectedCallback() {
|
|
15
|
-
CleanupRegistry.unregister(this);
|
|
16
|
-
this.#recentBefore = undefined;
|
|
17
|
-
// this.removeEventListener('tabreveal', this.#handleTabReveal)
|
|
18
|
-
if (this.closest('tab-view'))
|
|
19
|
-
frame().then(() => LifecycleObserver.dispatchEvent(new CustomEvent('tabhide', { detail: { tag: this.id }, bubbles: true, composed: true })));
|
|
20
|
-
}
|
|
21
|
-
connectedCallback() {
|
|
22
|
-
if (this.closest('tab-view')) {
|
|
23
|
-
// frame(this).then((r) => {
|
|
24
|
-
// if (!r) return
|
|
25
|
-
// this.dispatchEvent(new CustomEvent<TabDetail>('tabshow', { detail: { tag: this.id }, bubbles: true, composed: true }))
|
|
26
|
-
// })
|
|
27
|
-
CleanupRegistry.register(this, onoff('beforetabreveal beforetabswap', this.#handleBeforeTabRevealOrSwap, this).on());
|
|
28
|
-
}
|
|
29
|
-
// Snapshot.waitReady.then(async () => {
|
|
30
|
-
if (this.hasAttribute('hidden'))
|
|
31
|
-
return; // will be picked up by attr-change!
|
|
32
|
-
if (this.closest('tab-view'))
|
|
33
|
-
frame(this).then(() => {
|
|
34
|
-
// if (!r) return
|
|
35
|
-
LifecycleObserver.dispatchEvent(new CustomEvent('tabshow', { detail: { tag: this.id }, bubbles: true, composed: true }));
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
14
|
attributeChangedCallback(name, oldValue, newValue) {
|
|
39
15
|
switch (name) {
|
|
40
16
|
case 'hidden':
|
|
@@ -42,36 +18,55 @@ export class NavigationView extends HTMLElement {
|
|
|
42
18
|
break;
|
|
43
19
|
if (!this.closest('tab-view'))
|
|
44
20
|
break; // tabview stuff
|
|
45
|
-
|
|
21
|
+
// trigger show/hide/reveal/swap on NEXT tick
|
|
22
|
+
// show/hide run on initial render too (show on NEXT tick, is also taken care of on connected on initial render)
|
|
23
|
+
let eventType = this.hasAttribute(name) ? 'tabhide' : 'tabshow', target = lifecycleObserver;
|
|
46
24
|
// isRecent by 100ms window
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
else if (this.#recentBefore.type === 'beforetabswap') {
|
|
53
|
-
eventType = 'tabswap';
|
|
25
|
+
// && performance.now() - this.#recentBefore.time <= 100) {
|
|
26
|
+
if (this.#recentBefore) {
|
|
27
|
+
if (['beforetabreveal', 'beforetabswap'].includes(this.#recentBefore.type)) {
|
|
28
|
+
eventType = this.#recentBefore.type === 'beforetabreveal' ? 'tabreveal' : 'tabswap';
|
|
54
29
|
target = this;
|
|
55
30
|
}
|
|
56
31
|
// consume it (important so it doesn’t leak to next change)
|
|
57
32
|
this.#recentBefore = undefined;
|
|
58
33
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
target.dispatchEvent(new CustomEvent(eventType, { detail: { tag: this.id }, bubbles: true, composed: true }));
|
|
63
|
-
});
|
|
34
|
+
if (devFlags.debug)
|
|
35
|
+
console.debug(`${_a.name} 💡 ${eventType}`);
|
|
36
|
+
frame(this).then(() => target.dispatchEvent(new CustomEvent(eventType, { detail: { tag: this.id }, bubbles: true, composed: true })));
|
|
64
37
|
break;
|
|
65
38
|
}
|
|
66
39
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
40
|
+
disconnectedCallback() {
|
|
41
|
+
CleanupRegistry.unregister(this);
|
|
42
|
+
this.#recentBefore = undefined;
|
|
43
|
+
// trigger hide on NEXT tick
|
|
44
|
+
if (!this.closest('tab-view'))
|
|
45
|
+
return;
|
|
46
|
+
frame().then(() => lifecycleObserver.dispatchEvent(new CustomEvent('tabhide', { detail: { tag: this.id }, bubbles: true, composed: true })));
|
|
47
|
+
}
|
|
48
|
+
connectedCallback() {
|
|
49
|
+
if (!this.closest('tab-view'))
|
|
50
|
+
return;
|
|
51
|
+
// wire befores
|
|
52
|
+
CleanupRegistry.register(this, onoff('beforetabreveal beforetabswap', this.#handleBeforeTabRevealOrSwap, this).on());
|
|
53
|
+
// trigger show on NEXT tick
|
|
54
|
+
if (this.hasAttribute('hidden'))
|
|
55
|
+
return; // skip if already rendered by attr-change during upgrade!
|
|
56
|
+
frame(this).then(() => lifecycleObserver.dispatchEvent(new CustomEvent('tabshow', { detail: { tag: this.id }, bubbles: true, composed: true })));
|
|
57
|
+
}
|
|
58
|
+
#handleBeforeTabRevealOrSwap = ({ type, detail }) => {
|
|
59
|
+
if (devFlags.debug)
|
|
60
|
+
console.debug(`${_a.name} ⚡️ ${type}`);
|
|
61
|
+
if (this.id !== detail?.tag)
|
|
70
62
|
return;
|
|
71
63
|
this.#recentBefore = {
|
|
72
|
-
type
|
|
64
|
+
type, // beforetabreveal / beforetabswap
|
|
73
65
|
time: performance.now(),
|
|
74
66
|
};
|
|
67
|
+
self.queueMicrotask(() => {
|
|
68
|
+
this.#recentBefore = undefined;
|
|
69
|
+
}); // auto-expire after current task
|
|
75
70
|
};
|
|
76
71
|
}
|
|
77
72
|
_a = NavigationView;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (filter?: (el: HTMLElement) => boolean): <T extends CustomElementConstructor>(Base: T, _context?: ClassDecoratorContext<T>) => void;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Snapshot } from '../../snapshot';
|
|
2
|
+
import { CleanupRegistry } from '../class/cleanup-registry';
|
|
3
|
+
import { devFlags, onoff } from '../utils';
|
|
4
|
+
export default function (filter) {
|
|
5
|
+
const handleMediaChange = (el, { type, matches }) => {
|
|
6
|
+
if (devFlags.debug)
|
|
7
|
+
console.debug(`${el.localName} ⚡️ ${type}`);
|
|
8
|
+
if (matches) {
|
|
9
|
+
if (!el.matches(`[slot="cancellation-action"],[slot="primary-action"],[slot="confirmation-action"],[slot="destructive-action"]`))
|
|
10
|
+
return;
|
|
11
|
+
const newSlot = ['destructive-action'].includes(el.slot) ? 'bottom-bar-leading' : 'bottom-bar-trailing';
|
|
12
|
+
if (el.slot !== newSlot)
|
|
13
|
+
el.dataset.previousSlot = el.slot;
|
|
14
|
+
el.slot = newSlot;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
if (!el.matches(`[data-previous-slot]`))
|
|
18
|
+
return;
|
|
19
|
+
el.slot = el.dataset.previousSlot ?? '';
|
|
20
|
+
delete el.dataset.previousSlot;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
return function (Base, _context) {
|
|
24
|
+
const originalConnected = Base.prototype.connectedCallback, originalDisconnected = Base.prototype.disconnectedCallback;
|
|
25
|
+
Base.prototype.connectedCallback = function () {
|
|
26
|
+
if (devFlags.debug)
|
|
27
|
+
console.debug(`decorator:[${this.localName}] ⚡️ connect`);
|
|
28
|
+
originalConnected?.call(this);
|
|
29
|
+
if (filter && !filter(this))
|
|
30
|
+
return;
|
|
31
|
+
if (!this.closest('[is=sheet-view]'))
|
|
32
|
+
return;
|
|
33
|
+
if (!self.matchMedia('(pointer: fine)').matches)
|
|
34
|
+
return;
|
|
35
|
+
const handler1 = handleMediaChange.bind(null, this);
|
|
36
|
+
CleanupRegistry.register(this, onoff('fine_dialog_sheet:change', handler1, Snapshot.on).on(), 'adaptive-slot');
|
|
37
|
+
Snapshot.waitReady.then(() => {
|
|
38
|
+
handleMediaChange(this, new MediaQueryListEvent(`media-change`, {
|
|
39
|
+
matches: Snapshot.breakpoints?.get('fine_dialog_sheet'),
|
|
40
|
+
})); // Initial check
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
Base.prototype.disconnectedCallback = function () {
|
|
44
|
+
if (devFlags.debug)
|
|
45
|
+
console.debug(`decorator:[${this.localName}] ⚡️ disconnect`);
|
|
46
|
+
originalDisconnected?.call(this);
|
|
47
|
+
CleanupRegistry.unregister(this, 'adaptive-slot');
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as adaptiveSlot } from './adaptive-slot';
|
|
2
|
+
export * from './adaptive-slot';
|
|
3
|
+
export { default as customElement } from './custom-element';
|
|
4
|
+
export * from './custom-element';
|
|
5
|
+
export { default as microtaskOnConnected } from './microtask-on-connected';
|
|
6
|
+
export * from './microtask-on-connected';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as adaptiveSlot } from './adaptive-slot';
|
|
2
|
+
export * from './adaptive-slot';
|
|
3
|
+
export { default as customElement } from './custom-element';
|
|
4
|
+
export * from './custom-element';
|
|
5
|
+
export { default as microtaskOnConnected } from './microtask-on-connected';
|
|
6
|
+
export * from './microtask-on-connected';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replacement for this
|
|
3
|
+
class() {
|
|
4
|
+
#pendingSync = false
|
|
5
|
+
#scheduleSync() {
|
|
6
|
+
if (this.#pendingSync) return
|
|
7
|
+
this.#pendingSync = true
|
|
8
|
+
self.queueMicrotask(() => {
|
|
9
|
+
this.#pendingSync = false
|
|
10
|
+
this.#syncSibling()
|
|
11
|
+
})
|
|
12
|
+
}
|
|
13
|
+
#syncSibling = () => {
|
|
14
|
+
const sibling = this.closest<ScrollView>('scroll-view'),
|
|
15
|
+
value = this.getAttribute('value'),
|
|
16
|
+
subtitle = this.getAttribute('subtitle')
|
|
17
|
+
|
|
18
|
+
if (null === value) sibling?.removeAttribute('navigation-inline-title')
|
|
19
|
+
else sibling?.setAttribute('navigation-inline-title', value)
|
|
20
|
+
|
|
21
|
+
if (null === subtitle) sibling?.removeAttribute('navigation-inline-subtitle')
|
|
22
|
+
else sibling?.setAttribute('navigation-inline-subtitle', subtitle)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
connectedCallback() {
|
|
26
|
+
if (devFlags.debug) console.debug(`${NavigationTitle.name} ⚡️ connect`)
|
|
27
|
+
|
|
28
|
+
this.#scheduleSync()
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
|
|
32
|
+
if (devFlags.debug) console.debug(`${NavigationTitle.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`)
|
|
33
|
+
|
|
34
|
+
this.#scheduleSync()
|
|
35
|
+
|
|
36
|
+
this.#render(this.getAttribute('value'), this.getAttribute('subtitle'))
|
|
37
|
+
}
|
|
38
|
+
*/
|
|
39
|
+
export default function <T extends HTMLElement>(fn: (el: T) => void): <C extends CustomElementConstructor>(Base: C, _context?: ClassDecoratorContext<C>) => void;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replacement for this
|
|
3
|
+
class() {
|
|
4
|
+
#pendingSync = false
|
|
5
|
+
#scheduleSync() {
|
|
6
|
+
if (this.#pendingSync) return
|
|
7
|
+
this.#pendingSync = true
|
|
8
|
+
self.queueMicrotask(() => {
|
|
9
|
+
this.#pendingSync = false
|
|
10
|
+
this.#syncSibling()
|
|
11
|
+
})
|
|
12
|
+
}
|
|
13
|
+
#syncSibling = () => {
|
|
14
|
+
const sibling = this.closest<ScrollView>('scroll-view'),
|
|
15
|
+
value = this.getAttribute('value'),
|
|
16
|
+
subtitle = this.getAttribute('subtitle')
|
|
17
|
+
|
|
18
|
+
if (null === value) sibling?.removeAttribute('navigation-inline-title')
|
|
19
|
+
else sibling?.setAttribute('navigation-inline-title', value)
|
|
20
|
+
|
|
21
|
+
if (null === subtitle) sibling?.removeAttribute('navigation-inline-subtitle')
|
|
22
|
+
else sibling?.setAttribute('navigation-inline-subtitle', subtitle)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
connectedCallback() {
|
|
26
|
+
if (devFlags.debug) console.debug(`${NavigationTitle.name} ⚡️ connect`)
|
|
27
|
+
|
|
28
|
+
this.#scheduleSync()
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
|
|
32
|
+
if (devFlags.debug) console.debug(`${NavigationTitle.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`)
|
|
33
|
+
|
|
34
|
+
this.#scheduleSync()
|
|
35
|
+
|
|
36
|
+
this.#render(this.getAttribute('value'), this.getAttribute('subtitle'))
|
|
37
|
+
}
|
|
38
|
+
*/
|
|
39
|
+
// const _sync = Symbol('sync')
|
|
40
|
+
// @microtaskOnConnected((el) => (el as NavigationTitle)[_sync]())
|
|
41
|
+
// attributeChangedCallback fires
|
|
42
|
+
// → originalAttrChanged (your #render) runs synchronously ✅
|
|
43
|
+
// → schedule() queues microtask
|
|
44
|
+
// → microtask flush: syncToScrollView runs with already-updated attrs ✅
|
|
45
|
+
export default function (fn) {
|
|
46
|
+
return function (Base, _context) {
|
|
47
|
+
const originalConnected = Base.prototype.connectedCallback, originalAttrChanged = Base.prototype.attributeChangedCallback;
|
|
48
|
+
Base.prototype.connectedCallback = function () {
|
|
49
|
+
originalConnected?.call(this);
|
|
50
|
+
schedule(this, fn);
|
|
51
|
+
};
|
|
52
|
+
Base.prototype.attributeChangedCallback = function (name, oldValue, newValue) {
|
|
53
|
+
originalAttrChanged?.call(this, name, oldValue, newValue);
|
|
54
|
+
schedule(this, fn);
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const pendingMap = new WeakMap();
|
|
59
|
+
function schedule(el, fn) {
|
|
60
|
+
if (pendingMap.get(el))
|
|
61
|
+
return;
|
|
62
|
+
pendingMap.set(el, true);
|
|
63
|
+
self.queueMicrotask(() => {
|
|
64
|
+
pendingMap.delete(el);
|
|
65
|
+
fn(el);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import type * as Components from '../components';
|
|
2
|
+
import { NavigationPath } from '../internal/class/navigation-path';
|
|
3
|
+
type TransitionType = 'forwards' | 'backwards' | 'reload';
|
|
2
4
|
export type NavigationHost = Components.BodyView | Components.SheetView | Components.NavigationStack | Components.NavigationSplitView;
|
|
3
5
|
export type NavigationToolbarConfiguration = Components.ToolBarItem | Components.ToolBarItemGroup;
|
|
4
6
|
export type NavigationPage = Components.SidebarView | Components.ScrollView;
|
|
7
|
+
export declare function queryInsertPosition(frame: NavigationHost): "afterend" | "beforebegin";
|
|
8
|
+
type UpdateCallback = () => void | Promise<void>;
|
|
9
|
+
type NavigateOptions = {
|
|
10
|
+
updateCallback?: UpdateCallback;
|
|
11
|
+
tos?: () => NavigationPath[];
|
|
12
|
+
};
|
|
13
|
+
export declare const startViewTransition: (target: HTMLElement, type?: TransitionType, updateCallbackOrOptions?: UpdateCallback | NavigateOptions) => Promise<void>;
|
|
14
|
+
export {};
|
|
@@ -1 +1,168 @@
|
|
|
1
|
-
|
|
1
|
+
import { NavigationPath } from '../internal/class/navigation-path';
|
|
2
|
+
import { devFlags } from '../internal/utils';
|
|
3
|
+
import { Snapshot } from '../snapshot';
|
|
4
|
+
export function queryInsertPosition(frame) {
|
|
5
|
+
if ('NAVIGATION-SPLIT-VIEW' === frame?.tagName)
|
|
6
|
+
return 'beforebegin'; // lookFor = 'previousElementSibling'
|
|
7
|
+
else if ('NAVIGATION-SPLIT-VIEW' === frame?.parentElement?.tagName && frame?.parentElement.querySelector(':scope>[is=sidebar-view]') && 'BODY-VIEW' === frame?.tagName)
|
|
8
|
+
return 'beforebegin'; // lookFor = 'previousElementSibling'
|
|
9
|
+
return 'afterend'; // lookFor = 'nextElementSibling'
|
|
10
|
+
}
|
|
11
|
+
const cleanup = (lm, type) => {
|
|
12
|
+
let arr = [Snapshot.config['vt-fwd-class-name'], 'fwdd', 'fwn', 'fwnn', 'bwd', 'bwdd', 'bwn', 'bwnn'];
|
|
13
|
+
if (['backwards', 'forwards'].includes(type ?? ''))
|
|
14
|
+
for (let i = arr.length - 1; i >= 0; i--)
|
|
15
|
+
if (arr[i].startsWith('backwards' === type ? 'fw' : 'bw'))
|
|
16
|
+
arr.splice(i, 1);
|
|
17
|
+
for (const el of [...(lm?.querySelectorAll(arr.map((v) => `.${v}`).join(',')) ?? [])])
|
|
18
|
+
el.classList.remove(...arr);
|
|
19
|
+
};
|
|
20
|
+
export const startViewTransition = async (target, type = 'forwards', updateCallbackOrOptions = async () => { }) => {
|
|
21
|
+
if (devFlags.debug)
|
|
22
|
+
console.debug(`startViewTransition (${type})`, target);
|
|
23
|
+
if (!(target instanceof HTMLElement))
|
|
24
|
+
throw new TypeError("Argument 1 ('target') to client.startViewTransition must be an instance of HTMLElement");
|
|
25
|
+
if (!['forwards', 'backwards', 'reload'].includes(type))
|
|
26
|
+
throw new TypeError("Argument 2 ('type') to client.startViewTransition must be of TransitionType");
|
|
27
|
+
const options = typeof updateCallbackOrOptions === 'function'
|
|
28
|
+
? {
|
|
29
|
+
updateCallback: updateCallbackOrOptions,
|
|
30
|
+
}
|
|
31
|
+
: (updateCallbackOrOptions ?? {}), updateCallback = options.updateCallback ?? (async () => { });
|
|
32
|
+
await Snapshot.waitReady;
|
|
33
|
+
const from = new NavigationPath(target); //const from = closestBody(target) //event.target as HTMLElement)
|
|
34
|
+
if ('forwards' === type) {
|
|
35
|
+
await updateCallback(); // updatetheDOMSomehow
|
|
36
|
+
// Snapshot.getSnapshot(from)
|
|
37
|
+
// const root = getRootViewController(from)
|
|
38
|
+
// const oldPath = new NavigationPath(from)
|
|
39
|
+
const root = [from, ...from.parents()]
|
|
40
|
+
.map((item) => item.component)
|
|
41
|
+
.filter(Boolean)
|
|
42
|
+
.at(-1);
|
|
43
|
+
// const { toolBarConfig: oldToolbars } = getComputedView(from) // const { toolBarConfig: oldToolbars, slot: oldSLot, page: oldPage } = getComputedView(from) //
|
|
44
|
+
// console.log(88, oldPage, oldPath.page, oldSLot, oldPath.slot, oldToolbars, oldPath.toolBarConfig)
|
|
45
|
+
// const oldToolbars = Snapshot.toolbarItems
|
|
46
|
+
// const { toolBarConfig: oldToolbars, host: oldHost } = getComputedView(from)
|
|
47
|
+
const tos = options.tos?.() ?? [...from.children()].map((item) => item?.hydrate()), //queryBodyAll(oldSLot), //[...oldPath.children()].map((item) => item.body).filter(Boolean),//
|
|
48
|
+
to = tos.at(-1),
|
|
49
|
+
// to = newPath?.body, //tos.slice(-1)?.pop?.(), //Snapshot.leaf, //
|
|
50
|
+
// newHost = newPath?.component, //{ host: newHost } = getComputedView(to),
|
|
51
|
+
newToolbars = tos.flatMap((item) => item.toolBarConfig ?? []).filter((item) => !!item),
|
|
52
|
+
// .map((item) => item.toolBarConfig)
|
|
53
|
+
// .flat()
|
|
54
|
+
// .filter(Boolean), //queryToolbarConfigAll(oldSLot),
|
|
55
|
+
modalViews = tos.map((item) => item.component).filter((item) => !!item && item.matches('dialog')); //[...queryHostAll(oldPage)].filter?.((item) => item?.matches('dialog'))
|
|
56
|
+
// toFrame = Snapshot.leafContainer, //queryHostAll(from).slice(-1)?.pop?.(),
|
|
57
|
+
// toToolbars = Snapshot.leafToolbarItems
|
|
58
|
+
// dialogFrames = [toFrame, ...(Snapshot.leaveFrames ?? [])].filter((item): item is HTMLDialogElement => item instanceof HTMLDialogElement) //[toFrame, ...(Snapshot.leaveFrames ?? [])].filter((item) => item?.matches('dialog'))
|
|
59
|
+
// if ('DIALOG' === newHost?.tagName) {
|
|
60
|
+
// ;(newHost as HTMLDialogElement).showModal()
|
|
61
|
+
// if (devFlags.debug) console.debug(`⚡️ view-transition-start (${type})`)
|
|
62
|
+
// await Promise.allSettled(newHost.getAnimations().map(({ finished }) => finished))
|
|
63
|
+
// if (devFlags.debug) console.debug(`⚡️ view-transition-end (${type})`)
|
|
64
|
+
// return
|
|
65
|
+
// }
|
|
66
|
+
// purge
|
|
67
|
+
cleanup(root, 'backwards');
|
|
68
|
+
// prepare old
|
|
69
|
+
from.body?.classList.add(Snapshot.config['vt-fwd-class-name']);
|
|
70
|
+
from.body?.dispatchEvent(new CustomEvent('pageswap', { detail: { page: from.body }, bubbles: true, composed: true }));
|
|
71
|
+
for (const oldToolbar of from.toolBarConfig ?? [])
|
|
72
|
+
oldToolbar.classList.add('fwn'); // prepare navbs
|
|
73
|
+
// prepare new
|
|
74
|
+
const toolbarExclusion = 0 < modalViews.length
|
|
75
|
+
? (value, index, array) => value.parentElement?.matches('tool-bar:not(dialog tool-bar,body-view ~ tool-bar)')
|
|
76
|
+
: (value, index, array) => value.parentElement?.matches('tool-bar:not(body-view ~ tool-bar)'), bodyExclusion = 0 < modalViews.length ? (item) => item.body?.matches('scroll-view:not(dialog scroll-view)') : (value, index, array) => value;
|
|
77
|
+
for (const bti of newToolbars?.filter?.(toolbarExclusion) ?? [])
|
|
78
|
+
bti.classList.add('fwnn'); // for (const ti of newToolbars ?? []) ti.classList.add('fwnn') //
|
|
79
|
+
for (const bt of tos?.filter?.(bodyExclusion) ?? []) {
|
|
80
|
+
bt.body?.classList.add('fwdd'); //to?.classList.add('fwdd')
|
|
81
|
+
bt.body?.dispatchEvent(new CustomEvent('pagereveal', { detail: { page: bt.body }, bubbles: true, composed: true }));
|
|
82
|
+
}
|
|
83
|
+
if (0 < modalViews.length) {
|
|
84
|
+
for await (const el of modalViews)
|
|
85
|
+
el.showModal();
|
|
86
|
+
if (devFlags.debug)
|
|
87
|
+
console.debug(`⚡️ view-dialog-transition-start (${type})`);
|
|
88
|
+
await Promise.allSettled(modalViews?.[0].getAnimations().map(({ finished }) => finished));
|
|
89
|
+
if (devFlags.debug)
|
|
90
|
+
console.debug(`⚡️ view-dialog-transition-end (${type})`);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
if (devFlags.debug)
|
|
94
|
+
console.debug(`⚡️ view-transition-start (${type})`);
|
|
95
|
+
await Promise.allSettled([...(from.body?.getAnimations().map(({ finished }) => finished) ?? []), ...(to?.body?.getAnimations().map(({ finished }) => finished) ?? [])]);
|
|
96
|
+
if (devFlags.debug)
|
|
97
|
+
console.debug(`⚡️ view-transition-end (${type})`);
|
|
98
|
+
}
|
|
99
|
+
if (0 < (to?.component?.querySelectorAll(`.${Snapshot.config?.['vt-fwd-class-name']},.bwd`) ?? []).length)
|
|
100
|
+
return;
|
|
101
|
+
cleanup(root);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Snapshot.getSnapshot(from)
|
|
105
|
+
// const oldPath = new NavigationPath(from)
|
|
106
|
+
const root = [from, ...from.parents()]
|
|
107
|
+
.map((item) => item.component)
|
|
108
|
+
.filter(Boolean)
|
|
109
|
+
.at(-1); // const root = getRootViewController(from)
|
|
110
|
+
//const { toolBarConfig: oldToolbars, host: oldHost, page: oldPage, slot: oldSlot } = getComputedView(from)
|
|
111
|
+
const froms = [...from.children()].map((item) => item?.hydrate());
|
|
112
|
+
const oldToolbars = froms.flatMap((item) => item.toolBarConfig ?? []).filter((item) => !!item), oldBodies = froms.map((item) => item.body).filter((item) => !!item);
|
|
113
|
+
// console.log(99, queryToolbarConfigAll(oldSlot), oldToolbars)
|
|
114
|
+
// if most-top effect is closing a modal, skip everything
|
|
115
|
+
if ('DIALOG' === from.component?.tagName) {
|
|
116
|
+
from.body?.dispatchEvent(new CustomEvent('pageswap', { detail: { page: from.body }, bubbles: true, composed: true }));
|
|
117
|
+
from.component.close();
|
|
118
|
+
if (devFlags.debug)
|
|
119
|
+
console.debug(`⚡️ view-dialog-transition-start (${type})`);
|
|
120
|
+
await Promise.allSettled(from.component.getAnimations().map(({ finished }) => finished));
|
|
121
|
+
if (devFlags.debug)
|
|
122
|
+
console.debug(`⚡️ view-dialog-transition-end (${type})`);
|
|
123
|
+
if (from.component.matches('[open]'))
|
|
124
|
+
return;
|
|
125
|
+
await updateCallback();
|
|
126
|
+
return; // just close modal
|
|
127
|
+
}
|
|
128
|
+
const to = [...from.parents()].at(0)?.hydrate(); //closestBody(oldPath.component?.parentElement ?? undefined)
|
|
129
|
+
if (!to)
|
|
130
|
+
return console.debug('Can not go backwards.'); // nothing to go back to
|
|
131
|
+
const tv = to.body?.closest('tab-view');
|
|
132
|
+
if (tv && to.body?.matches('tab-view>navigation-stack:has(> navigation-stack,> navigation-split-view)>:scope'))
|
|
133
|
+
if ('bottom-bar' !== tv.tabBarPlacement)
|
|
134
|
+
return;
|
|
135
|
+
// const { toolBarConfig: newToolbars } = getComputedView(to.body)
|
|
136
|
+
// purge
|
|
137
|
+
cleanup(root, 'forwards');
|
|
138
|
+
// prepare new
|
|
139
|
+
for (const ti of to.toolBarConfig ?? [])
|
|
140
|
+
ti.classList.add('bwnn');
|
|
141
|
+
to.body?.classList.add('bwdd');
|
|
142
|
+
to.body?.dispatchEvent(new CustomEvent('pagereveal', { detail: { page: to.body }, bubbles: true, composed: true }));
|
|
143
|
+
// prepare old
|
|
144
|
+
const inbetweenModals = froms.map((item) => item.component).filter((item) => !!item && item.matches('dialog[open]')), //queryHostAll(oldPage).filter?.((item) => item.matches('dialog[open]')) ?? [], // FIXME: TEst this, added oldHost too
|
|
145
|
+
toolbarExclusion = 0 < inbetweenModals.length
|
|
146
|
+
? (value, index, array) => value.parentElement?.matches('tool-bar:not(dialog tool-bar)')
|
|
147
|
+
: (value, index, array) => value, bodyExclusion = 0 < inbetweenModals.length ? (item) => item?.matches('scroll-view:not(dialog scroll-view)') : (item) => item;
|
|
148
|
+
for (const ti of [...(from.toolBarConfig ?? []), ...(oldToolbars?.filter?.(toolbarExclusion) ?? [])])
|
|
149
|
+
ti.classList.add('bwn');
|
|
150
|
+
for (const nn of [from.body, ...oldBodies?.filter?.(bodyExclusion)]) {
|
|
151
|
+
nn?.classList.add('bwd'); //from?.classList.add('bwd')
|
|
152
|
+
nn?.dispatchEvent(new CustomEvent('pageswap', { detail: { page: nn }, bubbles: true, composed: true }));
|
|
153
|
+
}
|
|
154
|
+
for (const el of inbetweenModals)
|
|
155
|
+
el.close(); // close old inbetween modals
|
|
156
|
+
// capture trans
|
|
157
|
+
if (devFlags.debug)
|
|
158
|
+
console.debug(`⚡️ view-transition-start (${type})`);
|
|
159
|
+
await Promise.allSettled([...(from.body?.getAnimations().map(({ finished }) => finished) ?? []), ...(to.body?.getAnimations().map(({ finished }) => finished) ?? [])]);
|
|
160
|
+
if (devFlags.debug)
|
|
161
|
+
console.debug(`⚡️ view-transition-end (${type})`);
|
|
162
|
+
if (to.body?.closest(`.bwd,.${Snapshot.config?.['vt-fwd-class-name']}`))
|
|
163
|
+
return;
|
|
164
|
+
cleanup(root);
|
|
165
|
+
// remove or hide
|
|
166
|
+
await updateCallback();
|
|
167
|
+
}
|
|
168
|
+
};
|
|
@@ -5,10 +5,11 @@ import prev from './prev';
|
|
|
5
5
|
import prevAll from './prev-all';
|
|
6
6
|
import prop from './prop';
|
|
7
7
|
import siblings from './siblings';
|
|
8
|
-
declare const DEFAULT: "
|
|
8
|
+
declare const DEFAULT: ">1";
|
|
9
9
|
interface CashFn {
|
|
10
|
-
(innerHTML: string
|
|
11
|
-
(innerHTML: string, selector:
|
|
10
|
+
(innerHTML: string): DocumentFragment;
|
|
11
|
+
<T extends Element = Element>(innerHTML: string, selector: typeof DEFAULT): T;
|
|
12
|
+
<T extends Element = Element>(innerHTML: string, selector: string): T;
|
|
12
13
|
prop: typeof prop;
|
|
13
14
|
nextAll: typeof nextAll;
|
|
14
15
|
prevAll: typeof prevAll;
|
|
@@ -5,12 +5,14 @@ import prev from './prev';
|
|
|
5
5
|
import prevAll from './prev-all';
|
|
6
6
|
import prop from './prop';
|
|
7
7
|
import siblings from './siblings';
|
|
8
|
-
const DEFAULT = '
|
|
9
|
-
const cash = ((innerHTML, selector
|
|
8
|
+
const DEFAULT = '>1';
|
|
9
|
+
const cash = ((innerHTML, selector) => {
|
|
10
10
|
const template = Object.assign(document.createElement('template'), { innerHTML });
|
|
11
|
+
if (!selector)
|
|
12
|
+
return template.content;
|
|
11
13
|
if (selector === DEFAULT)
|
|
12
|
-
return template.content.firstElementChild;
|
|
13
|
-
return template.content;
|
|
14
|
+
return template.content.firstElementChild; // OVERKILL
|
|
15
|
+
return template.content.querySelector('>1' === selector ? ':first-child' : selector);
|
|
14
16
|
});
|
|
15
17
|
cash.prop = prop;
|
|
16
18
|
cash.nextAll = nextAll;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (target: HTMLElement | null, role: string | null, titleKey?: string | null): void;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { I18n } from '../../i18n';
|
|
2
|
+
import { Snapshot } from '../../snapshot';
|
|
3
|
+
import { default as $ } from './cash';
|
|
4
|
+
function renderPlaceholder(el, role, titleKey) {
|
|
5
|
+
// if (!el.isConnected) return
|
|
6
|
+
// self.requestAnimationFrame(() => {
|
|
7
|
+
// if (!el.isConnected) return
|
|
8
|
+
const label = el.querySelector(':scope>[slot=placeholder]') ?? el.appendChild($(`<label-view slot="placeholder"></label-view>`, '>1'));
|
|
9
|
+
switch (role) {
|
|
10
|
+
case 'cancel':
|
|
11
|
+
label.setAttribute('title', titleKey && titleKey in I18n.t('ButtonRole') ? I18n.t('ButtonRole')[titleKey] : I18n.t('ButtonRole').Cancel);
|
|
12
|
+
label.setAttribute('system-image', Snapshot.config['cancel-button-icon']);
|
|
13
|
+
break;
|
|
14
|
+
case 'close':
|
|
15
|
+
if (label.closest('[is=alert-dialog]')) {
|
|
16
|
+
label.setAttribute('title', titleKey && titleKey in I18n.t('ButtonRole') ? I18n.t('ButtonRole')[titleKey] : I18n.t('ButtonRole').OK);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
label.setAttribute('title', titleKey && titleKey in I18n.t('ButtonRole') ? I18n.t('ButtonRole')[titleKey] : I18n.t('ButtonRole').Close);
|
|
20
|
+
label.setAttribute('system-image', Snapshot.config['close-button-icon']);
|
|
21
|
+
}
|
|
22
|
+
break;
|
|
23
|
+
case 'confirm':
|
|
24
|
+
label.setAttribute('title', titleKey && titleKey in I18n.t('ButtonRole') ? I18n.t('ButtonRole')[titleKey] : I18n.t('ButtonRole').Confirm);
|
|
25
|
+
label.setAttribute('system-image', Snapshot.config['confirm-button-icon']);
|
|
26
|
+
break;
|
|
27
|
+
case 'confirmation-action':
|
|
28
|
+
label.setAttribute('title', titleKey && titleKey in I18n.t('ButtonRole') ? I18n.t('ButtonRole')[titleKey] : I18n.t('ButtonRole').Confirm);
|
|
29
|
+
label.setAttribute('system-image', Snapshot.config['confirm-button-icon']);
|
|
30
|
+
break;
|
|
31
|
+
case 'cancellation-action':
|
|
32
|
+
label.setAttribute('title', titleKey && titleKey in I18n.t('ButtonRole') ? I18n.t('ButtonRole')[titleKey] : I18n.t('ButtonRole').Cancel);
|
|
33
|
+
label.setAttribute('system-image', Snapshot.config['cancel-button-icon']);
|
|
34
|
+
break;
|
|
35
|
+
case 'destructive':
|
|
36
|
+
label.setAttribute('title', titleKey && titleKey in I18n.t('ButtonRole') ? I18n.t('ButtonRole')[titleKey] : I18n.t('ButtonRole').Destructive);
|
|
37
|
+
label.setAttribute('system-image', Snapshot.config['delete-button-icon']);
|
|
38
|
+
break;
|
|
39
|
+
default:
|
|
40
|
+
label?.remove();
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
// if (role) {
|
|
44
|
+
// label.setAttribute('title', I18n.t('ButtonRole').Default.Destructive)
|
|
45
|
+
// } else label?.remove()
|
|
46
|
+
// })
|
|
47
|
+
}
|
|
48
|
+
export default function (target, role, titleKey) {
|
|
49
|
+
if (!target)
|
|
50
|
+
return;
|
|
51
|
+
const overiderTitle = typeof titleKey === 'string' && titleKey in I18n.t('ButtonRole') ? titleKey : undefined;
|
|
52
|
+
renderPlaceholder(target, role, overiderTitle);
|
|
53
|
+
// CleanupRegistry.unregister(target, 'i18n')
|
|
54
|
+
// CleanupRegistry.register(target, onoff('localechange', () => renderPlaceholder(target, role, overiderTitle), I18n.on).on(), 'i18n')
|
|
55
|
+
}
|
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import cash from './cash';
|
|
2
1
|
export { default as add } from './add';
|
|
2
|
+
export { default as $ } from './cash';
|
|
3
3
|
export { default as clamp } from './clamp';
|
|
4
4
|
export { default as compareBigDecimals } from './compare-big-decimals';
|
|
5
5
|
export { default as cssTime } from './css-time';
|
|
6
6
|
export { default as debounce } from './debounce';
|
|
7
|
+
export { default as devFlags } from './dev-flags';
|
|
8
|
+
export { default as ensurePlaceholder } from './ensure-placeholder';
|
|
7
9
|
export { default as frame } from './frame';
|
|
10
|
+
export { default as isInside } from './is-inside';
|
|
8
11
|
export { default as kebabCase } from './kebab-case';
|
|
9
12
|
export { default as listActive } from './list-active';
|
|
10
13
|
export { default as microtask } from './microtask';
|
|
11
14
|
export { default as onoff } from './onoff';
|
|
15
|
+
export { default as renderLabel } from './render-label';
|
|
16
|
+
export { default as renderLabelIcon } from './render-label-icon';
|
|
17
|
+
export { default as renderLabelTitle } from './render-label-title';
|
|
12
18
|
export { default as set } from './set';
|
|
13
19
|
export { default as sleep } from './sleep';
|
|
14
20
|
export { default as slowHideShow } from './slow-hide-show';
|
|
15
21
|
export { default as timeout } from './timeout';
|
|
16
22
|
export { default as touchGlass } from './touch-glass';
|
|
17
|
-
export declare const $: typeof cash;
|