@swiftwc/ui 0.0.0-dev.3 → 0.0.0-dev.5
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.d.ts +5 -1
- package/generated/client/index.js +222 -7
- package/generated/components/body-view.d.ts +5 -0
- package/generated/components/body-view.js +11 -0
- package/generated/components/borderless-button.d.ts +9 -0
- package/generated/components/borderless-button.js +25 -0
- package/generated/components/bottom-bar.d.ts +10 -0
- package/generated/components/bottom-bar.js +73 -0
- package/generated/components/disclosure-group.d.ts +12 -0
- package/generated/components/disclosure-group.js +76 -0
- package/generated/components/index.d.ts +15 -1
- package/generated/components/index.js +15 -1
- package/generated/components/navigation-bar.d.ts +10 -0
- package/generated/components/navigation-bar.js +80 -0
- package/generated/components/navigation-split-view.d.ts +5 -0
- package/generated/components/navigation-split-view.js +9 -0
- package/generated/components/navigation-stack.d.ts +6 -0
- package/generated/components/navigation-stack.js +67 -0
- package/generated/components/screen-view.d.ts +5 -0
- package/generated/components/screen-view.js +9 -0
- package/generated/components/scroll-view.d.ts +8 -0
- package/generated/components/scroll-view.js +80 -0
- package/generated/components/sheet-view.d.ts +9 -0
- package/generated/components/sheet-view.js +26 -0
- package/generated/components/sidebar-toggle.d.ts +7 -0
- package/generated/components/sidebar-toggle.js +81 -0
- package/generated/components/sidebar-view.d.ts +9 -0
- package/generated/components/sidebar-view.js +26 -0
- package/generated/components/tab-bar.d.ts +9 -0
- package/generated/components/tab-bar.js +26 -0
- package/generated/components/tab-item.d.ts +6 -0
- package/generated/components/tab-item.js +35 -0
- package/generated/components/tab-view.d.ts +7 -0
- package/generated/components/tab-view.js +29 -0
- package/generated/components/v-keyboard.d.ts +9 -0
- package/generated/components/v-keyboard.js +82 -0
- package/generated/index.js +1 -1
- package/generated/internal/class.d.ts +18 -0
- package/generated/internal/class.js +18 -0
- package/generated/internal/utils/css-time.d.ts +1 -0
- package/generated/internal/utils/css-time.js +3 -0
- package/generated/internal/utils/index.d.ts +2 -1
- package/generated/internal/utils/index.js +2 -1
- package/generated/internal/utils/kebab-case.js +3 -3
- package/generated/namespace/index.d.ts +6 -0
- package/generated/namespace/index.js +1 -0
- package/generated/snapshot/index.d.ts +16 -0
- package/generated/snapshot/index.js +150 -0
- package/generated/styles.css +1298 -1
- package/package.json +8 -4
- package/scss/_base.scss +5 -0
- package/scss/_components.scss +39 -0
- package/scss/_dev.scss +68 -0
- package/scss/_functions.scss +21 -0
- package/scss/_mixins.scss +172 -0
- package/scss/_transitions.scss +11 -0
- package/scss/_vars.scss +57 -0
- package/scss/base/_layout.scss +40 -0
- package/scss/base/_reboot.scss +55 -0
- package/scss/base/_root.scss +69 -0
- package/scss/colors/_index.scss +99 -0
- package/scss/components/_body-view.scss +8 -0
- package/scss/components/_borderless-button.scss +14 -0
- package/scss/components/_disclosure-group.scss +80 -0
- package/scss/components/_full-screen.scss +13 -0
- package/scss/components/_index.scss +24 -0
- package/scss/components/_navigation-split-view.scss +364 -0
- package/scss/components/_navigation-stack.scss +11 -0
- package/scss/components/_scroll-view.scss +86 -0
- package/scss/components/_sheet-view.scss +60 -0
- package/scss/components/_sidebar-toggle.scss +61 -0
- package/scss/components/_sidebar-view.scss +63 -0
- package/scss/components/_tab-bar-stack.scss +101 -0
- package/scss/components/_tab-bar.scss +137 -0
- package/scss/components/_tab-view.scss +168 -0
- package/scss/components/_tool-bar-item-group.scss +37 -0
- package/scss/components/_tool-bar-item.scss +87 -0
- package/scss/components/_tool-bar.scss +90 -0
- package/scss/components/_toolbars.scss +100 -0
- package/scss/components/_v-keyboard.scss +12 -0
- package/scss/components/_v-stack.scss +19 -0
- package/scss/index.scss +11 -6
- package/scss/transitions/_bwd.navbar.scss +29 -0
- package/scss/transitions/_bwd.scss +55 -0
- package/scss/transitions/_dialog.scss +32 -0
- package/scss/transitions/_fwd.navbar.scss +46 -0
- package/scss/transitions/_fwd.scss +54 -0
- package/scss/transitions/_index.scss +182 -0
- package/generated/internal/snapshot.d.ts +0 -5
- package/generated/internal/snapshot.js +0 -23
- package/scss/_reboot.scss +0 -11
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export class NavigationStack extends HTMLElement {
|
|
2
|
+
constructor() {
|
|
3
|
+
super();
|
|
4
|
+
/* const shadowRoot = this.attachShadow({ mode: 'open' })
|
|
5
|
+
shadowRoot.appendChild(
|
|
6
|
+
document.importNode(this.constructor.template.content, true)
|
|
7
|
+
)
|
|
8
|
+
const slot = shadowRoot.querySelector('slot')!
|
|
9
|
+
|
|
10
|
+
slot.addEventListener('slotchange', () => {
|
|
11
|
+
const sv = this.querySelector<HTMLElement>(':scope > scroll-view')
|
|
12
|
+
if (!sv) return
|
|
13
|
+
|
|
14
|
+
const st = parseInt(sv?.dataset?.scrolltop ?? '0')
|
|
15
|
+
|
|
16
|
+
requestAnimationFrame(() => (sv.scrollTop = st))
|
|
17
|
+
}) */
|
|
18
|
+
// const template = document.createElement('template')
|
|
19
|
+
// template.innerHTML = this.constructor.#template
|
|
20
|
+
// const template = document.getElementById('element-details-template')
|
|
21
|
+
// // Named slot for toolbar
|
|
22
|
+
// const toolbarSlot = document.createElement('slot');
|
|
23
|
+
// toolbarSlot.name = 'toolbar';
|
|
24
|
+
// // Default slot for everything else
|
|
25
|
+
// const defaultSlot = document.createElement('slot');
|
|
26
|
+
// shadow.appendChild(toolbarSlot);
|
|
27
|
+
// shadow.appendChild(defaultSlot);
|
|
28
|
+
// this.attachShadow({ mode: 'open' }).append(template.content.cloneNode(true))
|
|
29
|
+
////this.constructor.template.content.cloneNode(true)
|
|
30
|
+
// shadowRoot.appendChild(document.importNode(template.content, true))
|
|
31
|
+
// alert(9)
|
|
32
|
+
// const t = this
|
|
33
|
+
}
|
|
34
|
+
disconnectedCallback() {
|
|
35
|
+
console.debug(`${NavigationStack.name} ⚡️ disconnect`);
|
|
36
|
+
}
|
|
37
|
+
connectedCallback() {
|
|
38
|
+
// this.attachShadow({ mode: "open" });
|
|
39
|
+
// this.shadowRoot.innerHTML = NavigationStack.template;
|
|
40
|
+
// Access slotted elements
|
|
41
|
+
// const toolbarSlot = this.shadowRoot.querySelector('slot[name="toolbar"]');
|
|
42
|
+
// const defaultSlot = this.shadowRoot.querySelector('slot:not([name])');
|
|
43
|
+
// // Get assigned nodes
|
|
44
|
+
// const toolbarNodes = toolbarSlot.assignedNodes({ flatten: true });
|
|
45
|
+
// const defaultNodes = defaultSlot.assignedNodes({ flatten: true });
|
|
46
|
+
// console.log('Toolbar nodes:', toolbarNodes);
|
|
47
|
+
// console.log('Default nodes:', defaultNodes);
|
|
48
|
+
// const starRating = document.getElementById('star-rating-template').content;
|
|
49
|
+
// const shadowRoot = this.attachShadow({
|
|
50
|
+
// mode: 'open'
|
|
51
|
+
// });
|
|
52
|
+
// shadowRoot.appendChild(starRating.cloneNode(true));
|
|
53
|
+
// this.innerHTML = `<div>gh</div><slot name="toolbar"><legend>Rate your experience:</legend></slot>`
|
|
54
|
+
// this.appendChild(slottedToolbar)
|
|
55
|
+
// console.log(99)
|
|
56
|
+
// this.innerHTML = `
|
|
57
|
+
// <header>
|
|
58
|
+
// <label>New</label>
|
|
59
|
+
// </header>
|
|
60
|
+
// <p>
|
|
61
|
+
// <h2>Welcome to the new page!</h2>
|
|
62
|
+
// </p>
|
|
63
|
+
// ${this.innerHTML}
|
|
64
|
+
// `;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
NavigationStack.observedAttributes = ['hidden'];
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
6
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
7
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
|
+
};
|
|
12
|
+
var _a, _ScrollView_template, _ScrollView_shadowRoot;
|
|
13
|
+
export class ScrollView extends HTMLElement {
|
|
14
|
+
static get template() {
|
|
15
|
+
if (!__classPrivateFieldGet(this, _a, "f", _ScrollView_template))
|
|
16
|
+
__classPrivateFieldSet(this, _a, Object.assign(document.createElement('template'), {
|
|
17
|
+
innerHTML: `<slot></slot>
|
|
18
|
+
<slot name="navigation-bar"></slot>
|
|
19
|
+
<slot name="bottom-bar"></slot>`,
|
|
20
|
+
}), "f", _ScrollView_template);
|
|
21
|
+
return __classPrivateFieldGet(this, _a, "f", _ScrollView_template);
|
|
22
|
+
}
|
|
23
|
+
constructor() {
|
|
24
|
+
super();
|
|
25
|
+
_ScrollView_shadowRoot.set(this, void 0);
|
|
26
|
+
__classPrivateFieldSet(this, _ScrollView_shadowRoot, this.attachShadow({ mode: 'open' }), "f");
|
|
27
|
+
__classPrivateFieldGet(this, _ScrollView_shadowRoot, "f").appendChild(document.importNode(this.constructor.template.content, true));
|
|
28
|
+
// this.addEventListener(
|
|
29
|
+
// 'scrollend',
|
|
30
|
+
// () => {
|
|
31
|
+
// this.dataset.scrolltop = this.scrollTop
|
|
32
|
+
// },
|
|
33
|
+
// { passive: true }
|
|
34
|
+
// )
|
|
35
|
+
}
|
|
36
|
+
disconnectedCallback() {
|
|
37
|
+
console.debug(`${_a.name} ⚡️ disconnect`);
|
|
38
|
+
}
|
|
39
|
+
connectedCallback() {
|
|
40
|
+
console.debug(`${_a.name} ⚡️ connect`);
|
|
41
|
+
// const nSlot = this.shadowRoot.querySelector('slot[name=navigation-bar]')!
|
|
42
|
+
if (0 ===
|
|
43
|
+
__classPrivateFieldGet(this, _ScrollView_shadowRoot, "f")
|
|
44
|
+
.querySelector('slot[name=navigation-bar]')
|
|
45
|
+
.assignedNodes({ flatten: true }).length)
|
|
46
|
+
this.insertAdjacentHTML('beforeend', `<tool-bar slot="navigation-bar">
|
|
47
|
+
<span>ghjh</span>
|
|
48
|
+
</tool-bar>`);
|
|
49
|
+
if (0 ===
|
|
50
|
+
__classPrivateFieldGet(this, _ScrollView_shadowRoot, "f")
|
|
51
|
+
.querySelector('slot[name=bottom-bar]')
|
|
52
|
+
.assignedNodes({ flatten: true }).length)
|
|
53
|
+
this.insertAdjacentHTML('beforeend', `<tool-bar slot="bottom-bar">
|
|
54
|
+
<span>ghj</span>
|
|
55
|
+
</tool-bar>`);
|
|
56
|
+
}
|
|
57
|
+
scrollToElement(el) {
|
|
58
|
+
// document.querySelector("#kb").innerHTML = self.visualViewport.height;
|
|
59
|
+
// document.querySelector("#console4").innerHTML = `${self.scrollY} / ${
|
|
60
|
+
// document.querySelector("scroll-view").scrollTop
|
|
61
|
+
// }`;
|
|
62
|
+
// const parent = el.closest('scroll-view')
|
|
63
|
+
const child = el;
|
|
64
|
+
// scrollTop needed to center child
|
|
65
|
+
const parentRect = this.getBoundingClientRect();
|
|
66
|
+
const childRect = child.getBoundingClientRect();
|
|
67
|
+
// current scroll + offset of child relative to parent
|
|
68
|
+
const scrollTop = this.scrollTop +
|
|
69
|
+
childRect.top -
|
|
70
|
+
parentRect.top -
|
|
71
|
+
parentRect.height / 2 +
|
|
72
|
+
childRect.height / 2;
|
|
73
|
+
this.scrollTo({
|
|
74
|
+
top: scrollTop,
|
|
75
|
+
behavior: 'smooth', // optional: smooth scroll
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
_a = ScrollView, _ScrollView_shadowRoot = new WeakMap();
|
|
80
|
+
_ScrollView_template = { value: void 0 };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DialogBase } from '../internal/class';
|
|
2
|
+
export declare class SheetView extends DialogBase {
|
|
3
|
+
constructor();
|
|
4
|
+
disconnectedCallback(): void;
|
|
5
|
+
connectedCallback(): void;
|
|
6
|
+
static polyfillDisconnectedCallback(el: SheetView): void;
|
|
7
|
+
static polyfillConnectedCallback(el: SheetView): void;
|
|
8
|
+
static handleCancel: (event: Event) => void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { DialogBase } from '../internal/class';
|
|
2
|
+
export class SheetView extends DialogBase {
|
|
3
|
+
constructor() {
|
|
4
|
+
super();
|
|
5
|
+
}
|
|
6
|
+
disconnectedCallback() {
|
|
7
|
+
console.debug(`${SheetView.name} ⚡️ disconnect`);
|
|
8
|
+
SheetView.polyfillDisconnectedCallback(this);
|
|
9
|
+
}
|
|
10
|
+
connectedCallback() {
|
|
11
|
+
console.debug(`${SheetView.name} ⚡️ connect`);
|
|
12
|
+
SheetView.polyfillConnectedCallback(this);
|
|
13
|
+
}
|
|
14
|
+
static polyfillDisconnectedCallback(el) {
|
|
15
|
+
el.removeEventListener('cancel', SheetView.handleCancel);
|
|
16
|
+
}
|
|
17
|
+
static polyfillConnectedCallback(el) {
|
|
18
|
+
el.addEventListener('cancel', SheetView.handleCancel);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
SheetView.handleCancel = (event) => {
|
|
22
|
+
console.debug(`${SheetView.name} ⚡️ cancel (${event.cancelable})`);
|
|
23
|
+
if (!event.cancelable)
|
|
24
|
+
return;
|
|
25
|
+
event.preventDefault();
|
|
26
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
6
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
7
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
|
+
};
|
|
12
|
+
var _SidebarToggle_instances, _a, _SidebarToggle_ro, _SidebarToggle_autoCloseTabBar, _SidebarToggle_handleClick;
|
|
13
|
+
export class SidebarToggle extends HTMLElement {
|
|
14
|
+
// #io
|
|
15
|
+
static get cssVarPaddingName() {
|
|
16
|
+
return '--tabview-padding-inline-start';
|
|
17
|
+
}
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
_SidebarToggle_instances.add(this);
|
|
21
|
+
_SidebarToggle_ro.set(this, void 0);
|
|
22
|
+
__classPrivateFieldSet(this, _SidebarToggle_ro, new ResizeObserver(__classPrivateFieldGet(this, _SidebarToggle_instances, "m", _SidebarToggle_autoCloseTabBar)), "f");
|
|
23
|
+
// this.#io = new IntersectionObserver((entries) => {
|
|
24
|
+
// this._checkVisibility2(entries)
|
|
25
|
+
// })
|
|
26
|
+
}
|
|
27
|
+
connectedCallback() {
|
|
28
|
+
console.debug(`${_a.name} ⚡️ connect`);
|
|
29
|
+
this.addEventListener('click', __classPrivateFieldGet(this, _SidebarToggle_instances, "m", _SidebarToggle_handleClick));
|
|
30
|
+
__classPrivateFieldGet(this, _SidebarToggle_ro, "f")?.observe(this);
|
|
31
|
+
// this.#io.observe(this)
|
|
32
|
+
__classPrivateFieldGet(this, _SidebarToggle_instances, "m", _SidebarToggle_autoCloseTabBar).call(this);
|
|
33
|
+
}
|
|
34
|
+
disconnectedCallback() {
|
|
35
|
+
console.debug(`${_a.name} ⚡️ disconnect`);
|
|
36
|
+
__classPrivateFieldGet(this, _SidebarToggle_ro, "f")?.disconnect();
|
|
37
|
+
// this.#io.disconnect()
|
|
38
|
+
this.removeEventListener('click', __classPrivateFieldGet(this, _SidebarToggle_instances, "m", _SidebarToggle_handleClick));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
_a = SidebarToggle, _SidebarToggle_ro = new WeakMap(), _SidebarToggle_instances = new WeakSet(), _SidebarToggle_autoCloseTabBar = function _SidebarToggle_autoCloseTabBar() {
|
|
42
|
+
console.debug('#autoCloseTabBar');
|
|
43
|
+
const toggles = [
|
|
44
|
+
...document.querySelectorAll('sidebar-toggle'),
|
|
45
|
+
];
|
|
46
|
+
// set css vars
|
|
47
|
+
for (const tg of toggles) {
|
|
48
|
+
const tv = tg.parentElement;
|
|
49
|
+
const width = tg?.offsetWidth ?? 0;
|
|
50
|
+
if (0 < width) {
|
|
51
|
+
// const gapProp =
|
|
52
|
+
// getComputedStyle(tg).getPropertyValue('--toolbar-col-gap') || '0',
|
|
53
|
+
// gap = parseFloat(gapProp) * 1 //(gapProp.endsWith('rem')? parseFloat(getComputedStyle(document.documentElement).fontSize): 1)
|
|
54
|
+
tv?.style?.setProperty?.(_a.cssVarPaddingName, `${width}px`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
tv?.style?.removeProperty?.(_a.cssVarPaddingName);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// auto close
|
|
61
|
+
const tabBar = document.querySelector('dialog[is=tab-bar]');
|
|
62
|
+
if (!tabBar?.open)
|
|
63
|
+
return;
|
|
64
|
+
// scan all toggles for anyone that is visible, sign that sidebar should stay open
|
|
65
|
+
const isAnyVisible = toggles.some(({ offsetWidth, offsetHeight }) => 0 < offsetWidth && 0 < offsetHeight);
|
|
66
|
+
if (isAnyVisible)
|
|
67
|
+
return;
|
|
68
|
+
tabBar?.close?.();
|
|
69
|
+
}, _SidebarToggle_handleClick = function _SidebarToggle_handleClick(event) {
|
|
70
|
+
const target = event.target;
|
|
71
|
+
if (!target?.closest('button'))
|
|
72
|
+
return;
|
|
73
|
+
const lm = target?.closest('tab-view,navigation-split-view');
|
|
74
|
+
const dialog = 'TAB-VIEW' === lm?.tagName
|
|
75
|
+
? lm.querySelector('dialog[is="tab-bar"]')
|
|
76
|
+
: lm?.querySelector('dialog[is="sidebar-view"]');
|
|
77
|
+
if (!dialog?.open)
|
|
78
|
+
dialog?.showModal();
|
|
79
|
+
else
|
|
80
|
+
dialog.close();
|
|
81
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DialogBase } from '../internal/class';
|
|
2
|
+
export declare class SidebarView extends DialogBase {
|
|
3
|
+
constructor();
|
|
4
|
+
disconnectedCallback(): void;
|
|
5
|
+
connectedCallback(): void;
|
|
6
|
+
static polyfillDisconnectedCallback(el: HTMLDialogElement): void;
|
|
7
|
+
static polyfillConnectedCallback(el: HTMLDialogElement): void;
|
|
8
|
+
static handleClick: (event: Event) => Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { DialogBase } from '../internal/class';
|
|
3
|
+
export class SidebarView extends DialogBase {
|
|
4
|
+
constructor() {
|
|
5
|
+
super();
|
|
6
|
+
}
|
|
7
|
+
disconnectedCallback() {
|
|
8
|
+
console.debug(`${_a.name} ⚡️ disconnect`);
|
|
9
|
+
_a.polyfillDisconnectedCallback(this);
|
|
10
|
+
}
|
|
11
|
+
connectedCallback() {
|
|
12
|
+
_a.polyfillConnectedCallback(this);
|
|
13
|
+
}
|
|
14
|
+
static polyfillDisconnectedCallback(el) {
|
|
15
|
+
el.removeEventListener('click', _a.handleClick);
|
|
16
|
+
}
|
|
17
|
+
static polyfillConnectedCallback(el) {
|
|
18
|
+
el.addEventListener('click', _a.handleClick);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
_a = SidebarView;
|
|
22
|
+
SidebarView.handleClick = async (event) => {
|
|
23
|
+
if ('DIALOG' === event.target.tagName &&
|
|
24
|
+
'sidebar-view' === event.target.getAttribute('is'))
|
|
25
|
+
event?.target?.close?.();
|
|
26
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DialogBase } from '../internal/class';
|
|
2
|
+
export declare class TabBar extends DialogBase {
|
|
3
|
+
constructor();
|
|
4
|
+
disconnectedCallback(): void;
|
|
5
|
+
connectedCallback(): void;
|
|
6
|
+
static polyfillDisconnectedCallback(el: HTMLDialogElement): void;
|
|
7
|
+
static polyfillConnectedCallback(el: HTMLDialogElement): void;
|
|
8
|
+
static handleClick: (event: Event) => Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { DialogBase } from '../internal/class';
|
|
3
|
+
export class TabBar extends DialogBase {
|
|
4
|
+
constructor() {
|
|
5
|
+
super();
|
|
6
|
+
}
|
|
7
|
+
disconnectedCallback() {
|
|
8
|
+
console.debug(`${_a.name} ⚡️ disconnect`);
|
|
9
|
+
_a.polyfillDisconnectedCallback(this);
|
|
10
|
+
}
|
|
11
|
+
connectedCallback() {
|
|
12
|
+
_a.polyfillConnectedCallback(this);
|
|
13
|
+
}
|
|
14
|
+
static polyfillDisconnectedCallback(el) {
|
|
15
|
+
el.removeEventListener('click', _a.handleClick);
|
|
16
|
+
}
|
|
17
|
+
static polyfillConnectedCallback(el) {
|
|
18
|
+
el.addEventListener('click', _a.handleClick);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
_a = TabBar;
|
|
22
|
+
TabBar.handleClick = async (event) => {
|
|
23
|
+
if ('DIALOG' === event.target.tagName &&
|
|
24
|
+
'tab-bar' === event.target.getAttribute('is'))
|
|
25
|
+
event?.target?.close?.();
|
|
26
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
6
|
+
var _a, _TabItem_handleClick;
|
|
7
|
+
export class TabItem extends HTMLElement {
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
_TabItem_handleClick.set(this, () => {
|
|
11
|
+
console.debug(`${_a.name} ⚡️ click`);
|
|
12
|
+
const tag = this.getAttribute('tag');
|
|
13
|
+
if (!tag)
|
|
14
|
+
throw new DOMException(`Attribute "tag" is set but invalid`, 'InvalidStateError');
|
|
15
|
+
const tv = this.closest('tab-view');
|
|
16
|
+
if (!tv)
|
|
17
|
+
throw new Error('Element not found');
|
|
18
|
+
const newTab = tv?.querySelector(`#${tag}`);
|
|
19
|
+
// 'more' === tag
|
|
20
|
+
// ? tv?.querySelector<HTMLElement>(`tab-view>[is=more]`):
|
|
21
|
+
if (!newTab)
|
|
22
|
+
throw new Error('Element not found');
|
|
23
|
+
tv.selection = newTab;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
disconnectedCallback() {
|
|
27
|
+
console.debug(`${_a.name} ⚡️ disconnect`);
|
|
28
|
+
this.removeEventListener('click', __classPrivateFieldGet(this, _TabItem_handleClick, "f"));
|
|
29
|
+
}
|
|
30
|
+
connectedCallback() {
|
|
31
|
+
console.debug(`${_a.name} ⚡️ connect`);
|
|
32
|
+
this.addEventListener('click', __classPrivateFieldGet(this, _TabItem_handleClick, "f"));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
_a = TabItem, _TabItem_handleClick = new WeakMap();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export class TabView extends HTMLElement {
|
|
2
|
+
constructor() {
|
|
3
|
+
super();
|
|
4
|
+
}
|
|
5
|
+
disconnectedCallback() {
|
|
6
|
+
console.debug(`${TabView.name} ⚡️ disconnect`);
|
|
7
|
+
}
|
|
8
|
+
connectedCallback() {
|
|
9
|
+
console.debug(`${TabView.name} ⚡️ connect`);
|
|
10
|
+
}
|
|
11
|
+
get selection() {
|
|
12
|
+
const selectedTab = this.querySelector(':scope > navigation-stack:not([hidden]),:scope > navigation-split-view:not([hidden])');
|
|
13
|
+
return selectedTab;
|
|
14
|
+
}
|
|
15
|
+
set selection(nv) {
|
|
16
|
+
if (!['NAVIGATION-STACK', 'NAVIGATION-SPLIT-VIEW'].includes(nv?.tagName ?? ''))
|
|
17
|
+
throw new Error('Element not found');
|
|
18
|
+
if (nv === this.selection)
|
|
19
|
+
return;
|
|
20
|
+
for (const ns of this.querySelectorAll(':scope > navigation-stack,:scope > navigation-split-view')) {
|
|
21
|
+
if (nv === ns)
|
|
22
|
+
continue;
|
|
23
|
+
ns.hidden = true;
|
|
24
|
+
this.dispatchEvent(new CustomEvent('tabswap', { detail: { x: 42 } }));
|
|
25
|
+
}
|
|
26
|
+
nv.hidden = false;
|
|
27
|
+
this.dispatchEvent(new CustomEvent('tabreveal', { detail: { x: 42 } }));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BUG: Safari on IOS reports inaccurate innerHeight (which is what we really want) on orientationchange.
|
|
3
|
+
* So we live with a pescy body-scrollbar that shows up on resize on desktops.
|
|
4
|
+
*/
|
|
1
5
|
export declare class VKeyboard extends HTMLElement {
|
|
6
|
+
#private;
|
|
7
|
+
constructor();
|
|
8
|
+
disconnectedCallback(): void;
|
|
9
|
+
connectedCallback(): void;
|
|
10
|
+
set shouldKeyboardBeOpen(fn: () => boolean);
|
|
2
11
|
}
|
|
@@ -1,2 +1,84 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
6
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
7
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
|
+
};
|
|
12
|
+
var _a, _VKeyboard_shouldKeyboardBeOpenCallback, _VKeyboard_handleWindowScroll, _VKeyboard_handleVisualViewportResize, _VKeyboard_handleWindowOrientationChange, _VKeyboard_handleBodyFocusIn, _VKeyboard_ifKeyboardScrollIntoActiveElement;
|
|
13
|
+
/**
|
|
14
|
+
* BUG: Safari on IOS reports inaccurate innerHeight (which is what we really want) on orientationchange.
|
|
15
|
+
* So we live with a pescy body-scrollbar that shows up on resize on desktops.
|
|
16
|
+
*/
|
|
1
17
|
export class VKeyboard extends HTMLElement {
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
/**
|
|
21
|
+
* Change like this:
|
|
22
|
+
* document.querySelector('v-keyboard').shouldKeyboardBeOpen = () => document.activeElement.tagName === 'INPUT'
|
|
23
|
+
*/
|
|
24
|
+
_VKeyboard_shouldKeyboardBeOpenCallback.set(this, () => {
|
|
25
|
+
return ('INPUT' === document.activeElement?.tagName &&
|
|
26
|
+
'text' === document.activeElement?.getAttribute('type'));
|
|
27
|
+
});
|
|
28
|
+
_VKeyboard_handleWindowScroll.set(this, () => {
|
|
29
|
+
self.scrollTo(0, 0);
|
|
30
|
+
});
|
|
31
|
+
_VKeyboard_handleVisualViewportResize.set(this, () => {
|
|
32
|
+
const dvh = self.visualViewport?.height ?? 0, fullLvh = this.offsetHeight;
|
|
33
|
+
const diff = Math.abs(self.outerHeight - (__classPrivateFieldGet(this, _VKeyboard_shouldKeyboardBeOpenCallback, "f").call(this) ? dvh : fullLvh));
|
|
34
|
+
document.documentElement.style.setProperty('--100lvh', 30 < diff ? `${dvh}px` : `${fullLvh}px`);
|
|
35
|
+
document.documentElement.style.setProperty('--keyboard-inset-top', 30 < diff ? `${dvh}px` : `${fullLvh}px`);
|
|
36
|
+
document.documentElement.style.setProperty('--keyboard-inset-height', 30 < diff ? `${diff}px` : `0px`);
|
|
37
|
+
// @ts-expect-error
|
|
38
|
+
document.querySelector('#console0').innerHTML =
|
|
39
|
+
`${__classPrivateFieldGet(this, _VKeyboard_shouldKeyboardBeOpenCallback, "f").call(this)} (${diff}) (${self.innerHeight}) (${fullLvh}) (${dvh})`;
|
|
40
|
+
// @ts-expect-error
|
|
41
|
+
document.querySelector('#console').hidePopover();
|
|
42
|
+
// @ts-expect-error
|
|
43
|
+
document.querySelector('#console').showPopover();
|
|
44
|
+
self.scrollTo(0, 0);
|
|
45
|
+
});
|
|
46
|
+
_VKeyboard_handleWindowOrientationChange.set(this, () => {
|
|
47
|
+
console.debug(`${_a.name} ⚡️ orientationchange`);
|
|
48
|
+
self.requestAnimationFrame(__classPrivateFieldGet(this, _VKeyboard_ifKeyboardScrollIntoActiveElement, "f"));
|
|
49
|
+
});
|
|
50
|
+
_VKeyboard_handleBodyFocusIn.set(this, () => {
|
|
51
|
+
console.debug(`${_a.name} ⚡️ focusin`);
|
|
52
|
+
setTimeout(__classPrivateFieldGet(this, _VKeyboard_ifKeyboardScrollIntoActiveElement, "f"), 100);
|
|
53
|
+
});
|
|
54
|
+
_VKeyboard_ifKeyboardScrollIntoActiveElement.set(this, () => {
|
|
55
|
+
if (!__classPrivateFieldGet(this, _VKeyboard_shouldKeyboardBeOpenCallback, "f").call(this) || !document.activeElement)
|
|
56
|
+
return;
|
|
57
|
+
const parent = document.activeElement?.closest('scroll-view');
|
|
58
|
+
parent?.scrollToElement?.(document.activeElement);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
disconnectedCallback() {
|
|
62
|
+
console.debug(`${_a.name} ⚡️ disconnect`);
|
|
63
|
+
self.removeEventListener('resize', __classPrivateFieldGet(this, _VKeyboard_handleWindowScroll, "f"));
|
|
64
|
+
self.visualViewport?.removeEventListener('resize', __classPrivateFieldGet(this, _VKeyboard_handleVisualViewportResize, "f"));
|
|
65
|
+
self.removeEventListener('orientationchange', __classPrivateFieldGet(this, _VKeyboard_handleWindowOrientationChange, "f"));
|
|
66
|
+
document.body.removeEventListener('focusin', __classPrivateFieldGet(this, _VKeyboard_handleBodyFocusIn, "f"));
|
|
67
|
+
}
|
|
68
|
+
connectedCallback() {
|
|
69
|
+
console.debug(`${_a.name} ⚡️ connect`);
|
|
70
|
+
this.inert = true;
|
|
71
|
+
self.addEventListener('scroll', __classPrivateFieldGet(this, _VKeyboard_handleWindowScroll, "f"));
|
|
72
|
+
self.visualViewport?.addEventListener('resize', __classPrivateFieldGet(this, _VKeyboard_handleVisualViewportResize, "f"));
|
|
73
|
+
__classPrivateFieldGet(this, _VKeyboard_handleVisualViewportResize, "f").call(this);
|
|
74
|
+
//
|
|
75
|
+
self.addEventListener('orientationchange', __classPrivateFieldGet(this, _VKeyboard_handleWindowOrientationChange, "f"));
|
|
76
|
+
document.body.addEventListener('focusin', __classPrivateFieldGet(this, _VKeyboard_handleBodyFocusIn, "f"));
|
|
77
|
+
}
|
|
78
|
+
set shouldKeyboardBeOpen(fn) {
|
|
79
|
+
if (typeof fn !== 'function')
|
|
80
|
+
throw new TypeError(`fn must be a function`);
|
|
81
|
+
__classPrivateFieldSet(this, _VKeyboard_shouldKeyboardBeOpenCallback, fn, "f");
|
|
82
|
+
}
|
|
2
83
|
}
|
|
84
|
+
_a = VKeyboard, _VKeyboard_shouldKeyboardBeOpenCallback = new WeakMap(), _VKeyboard_handleWindowScroll = new WeakMap(), _VKeyboard_handleVisualViewportResize = new WeakMap(), _VKeyboard_handleWindowOrientationChange = new WeakMap(), _VKeyboard_handleBodyFocusIn = new WeakMap(), _VKeyboard_ifKeyboardScrollIntoActiveElement = new WeakMap();
|
package/generated/index.js
CHANGED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare abstract class DialogBase extends HTMLDialogElement {
|
|
2
|
+
static polyfillExtends: "dialog";
|
|
3
|
+
static polyfillConnectedCallback(el: HTMLDialogElement): void;
|
|
4
|
+
static polyfillDisonnectedCallback(el: HTMLDialogElement): void;
|
|
5
|
+
static polyfillAttributeChangedCallback(entries: MutationRecord[]): void;
|
|
6
|
+
}
|
|
7
|
+
export declare abstract class ButtonBase extends HTMLButtonElement {
|
|
8
|
+
static polyfillExtends: "button";
|
|
9
|
+
static polyfillConnectedCallback(el: HTMLButtonElement): void;
|
|
10
|
+
static polyfillDisonnectedCallback(el: HTMLButtonElement): void;
|
|
11
|
+
static polyfillAttributeChangedCallback(entries: MutationRecord[]): void;
|
|
12
|
+
}
|
|
13
|
+
export declare abstract class DetailsBase extends HTMLDetailsElement {
|
|
14
|
+
static polyfillExtends: "details";
|
|
15
|
+
static polyfillConnectedCallback(el: HTMLDetailsElement): void;
|
|
16
|
+
static polyfillDisonnectedCallback(el: HTMLDetailsElement): void;
|
|
17
|
+
static polyfillAttributeChangedCallback(entries: MutationRecord[]): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class DialogBase extends HTMLDialogElement {
|
|
2
|
+
static polyfillConnectedCallback(el) { }
|
|
3
|
+
static polyfillDisonnectedCallback(el) { }
|
|
4
|
+
static polyfillAttributeChangedCallback(entries) { }
|
|
5
|
+
}
|
|
6
|
+
DialogBase.polyfillExtends = 'dialog';
|
|
7
|
+
export class ButtonBase extends HTMLButtonElement {
|
|
8
|
+
static polyfillConnectedCallback(el) { }
|
|
9
|
+
static polyfillDisonnectedCallback(el) { }
|
|
10
|
+
static polyfillAttributeChangedCallback(entries) { }
|
|
11
|
+
}
|
|
12
|
+
ButtonBase.polyfillExtends = 'button';
|
|
13
|
+
export class DetailsBase extends HTMLDetailsElement {
|
|
14
|
+
static polyfillConnectedCallback(el) { }
|
|
15
|
+
static polyfillDisonnectedCallback(el) { }
|
|
16
|
+
static polyfillAttributeChangedCallback(entries) { }
|
|
17
|
+
}
|
|
18
|
+
DetailsBase.polyfillExtends = 'details';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (cssTime: string): number;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export { default as kebabCase } from
|
|
1
|
+
export { default as kebabCase } from './kebab-case';
|
|
2
|
+
export { default as cssTime } from './css-time';
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export { default as kebabCase } from
|
|
1
|
+
export { default as kebabCase } from './kebab-case';
|
|
2
|
+
export { default as cssTime } from './css-time';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export default function (str) {
|
|
2
2
|
return (str
|
|
3
3
|
// Replace uppercase letters with - + lowercase
|
|
4
|
-
.replace(/([A-Z])/g,
|
|
4
|
+
.replace(/([A-Z])/g, '-$1')
|
|
5
5
|
// Replace spaces and underscores with -
|
|
6
|
-
.replace(/[\s_]+/g,
|
|
6
|
+
.replace(/[\s_]+/g, '-')
|
|
7
7
|
// Convert to lowercase
|
|
8
8
|
.toLowerCase()
|
|
9
9
|
// Remove leading/trailing dashes
|
|
10
|
-
.replace(/^-+|-+$/g,
|
|
10
|
+
.replace(/^-+|-+$/g, ''));
|
|
11
11
|
}
|