@swiftwc/ui 0.0.0-dev.1 → 0.0.0-dev.101
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/README.md +15 -0
- 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 +30 -2
- package/generated/client/index.js +279 -8
- package/generated/components/alert-dialog.d.ts +11 -0
- package/generated/components/alert-dialog.js +102 -0
- package/generated/components/body-view.d.ts +13 -0
- package/generated/components/body-view.js +17 -0
- package/generated/components/bordered-button.d.ts +17 -0
- package/generated/components/bordered-button.js +56 -0
- package/generated/components/bordered-prominent-button.d.ts +17 -0
- package/generated/components/bordered-prominent-button.js +56 -0
- package/generated/components/borderless-button.d.ts +17 -0
- package/generated/components/borderless-button.js +56 -0
- package/generated/components/color-scheme.d.ts +12 -0
- package/generated/components/color-scheme.js +54 -0
- package/generated/components/confirmation-dialog.d.ts +12 -0
- package/generated/components/confirmation-dialog.js +116 -0
- package/generated/components/content-unavailable.d.ts +30 -0
- package/generated/components/content-unavailable.js +82 -0
- package/generated/components/date-picker.d.ts +52 -0
- package/generated/components/date-picker.js +480 -0
- package/generated/components/detail-placeholder.d.ts +11 -0
- package/generated/components/detail-placeholder.js +19 -0
- package/generated/components/disclosure-group.d.ts +17 -0
- package/generated/components/disclosure-group.js +66 -0
- package/generated/components/fine-tooltip.d.ts +15 -0
- package/generated/components/fine-tooltip.js +111 -0
- package/generated/components/form-view.d.ts +16 -0
- package/generated/components/form-view.js +65 -0
- package/generated/components/glass-button.d.ts +16 -0
- package/generated/components/glass-button.js +53 -0
- package/generated/components/glass-prominent-button.d.ts +16 -0
- package/generated/components/glass-prominent-button.js +53 -0
- package/generated/components/h-stack.d.ts +22 -0
- package/generated/components/h-stack.js +26 -0
- package/generated/components/image-view.d.ts +18 -0
- package/generated/components/image-view.js +68 -0
- package/generated/components/index.d.ts +49 -1
- package/generated/components/index.js +49 -6
- package/generated/components/label-view.d.ts +27 -0
- package/generated/components/label-view.js +87 -0
- package/generated/components/labeled-content.d.ts +33 -0
- package/generated/components/labeled-content.js +163 -0
- package/generated/components/list-view.d.ts +18 -0
- package/generated/components/list-view.js +25 -0
- package/generated/components/menu-view.d.ts +20 -0
- package/generated/components/menu-view.js +140 -0
- package/generated/components/navigation-large-title.d.ts +18 -0
- package/generated/components/navigation-large-title.js +188 -0
- package/generated/components/navigation-split-view.d.ts +15 -0
- package/generated/components/navigation-split-view.js +25 -0
- package/generated/components/navigation-stack.d.ts +15 -0
- package/generated/components/navigation-stack.js +29 -0
- package/generated/components/navigation-title.d.ts +18 -0
- package/generated/components/navigation-title.js +72 -0
- package/generated/components/picker-view.d.ts +68 -0
- package/generated/components/picker-view.js +1153 -0
- package/generated/components/plain-button.d.ts +7 -0
- package/generated/components/plain-button.js +22 -0
- package/generated/components/progress-view.d.ts +20 -0
- package/generated/components/progress-view.js +125 -0
- package/generated/components/screen-view.d.ts +5 -0
- package/generated/components/screen-view.js +11 -0
- package/generated/components/scroll-view-proxy.d.ts +13 -0
- package/generated/components/scroll-view-proxy.js +17 -0
- package/generated/components/scroll-view.d.ts +22 -0
- package/generated/components/scroll-view.js +237 -0
- package/generated/components/search-view.d.ts +12 -0
- package/generated/components/search-view.js +27 -0
- package/generated/components/section-view.d.ts +21 -0
- package/generated/components/section-view.js +64 -0
- package/generated/components/sheet-view.d.ts +11 -0
- package/generated/components/sheet-view.js +45 -0
- package/generated/components/sidebar-toggle.d.ts +15 -0
- package/generated/components/sidebar-toggle.js +88 -0
- package/generated/components/sidebar-view.d.ts +10 -0
- package/generated/components/sidebar-view.js +37 -0
- package/generated/components/sticky-container.d.ts +11 -0
- package/generated/components/sticky-container.js +26 -0
- package/generated/components/tab-bar.d.ts +10 -0
- package/generated/components/tab-bar.js +40 -0
- package/generated/components/tab-item.d.ts +10 -0
- package/generated/components/tab-item.js +134 -0
- package/generated/components/tab-view.d.ts +31 -0
- package/generated/components/tab-view.js +198 -0
- package/generated/components/table-view.d.ts +26 -0
- package/generated/components/table-view.js +161 -0
- package/generated/components/text-field.d.ts +42 -0
- package/generated/components/text-field.js +526 -0
- package/generated/components/text-view.d.ts +11 -0
- package/generated/components/text-view.js +19 -0
- package/generated/components/toggle-view.d.ts +43 -0
- package/generated/components/toggle-view.js +371 -0
- package/generated/components/tool-bar-item-group.d.ts +13 -0
- package/generated/components/tool-bar-item-group.js +31 -0
- package/generated/components/tool-bar-item.d.ts +16 -0
- package/generated/components/tool-bar-item.js +69 -0
- package/generated/components/tool-bar.d.ts +26 -0
- package/generated/components/tool-bar.js +95 -0
- package/generated/components/v-keyboard.d.ts +18 -0
- package/generated/components/v-keyboard.js +87 -0
- package/generated/components/v-stack.d.ts +25 -0
- package/generated/components/v-stack.js +29 -0
- package/generated/css/index.css +10732 -0
- package/generated/events/alert-dialog.d.ts +13 -0
- package/generated/events/alert-dialog.js +1 -0
- package/generated/events/confirmation-dialog.d.ts +14 -0
- package/generated/events/confirmation-dialog.js +1 -0
- package/generated/events/date-picker.d.ts +13 -0
- package/generated/events/date-picker.js +1 -0
- package/generated/events/index.d.ts +9 -0
- package/generated/events/index.js +9 -0
- package/generated/events/lifecycle-observer.d.ts +18 -0
- package/generated/events/lifecycle-observer.js +1 -0
- package/generated/events/picker-view.d.ts +29 -0
- package/generated/events/picker-view.js +1 -0
- package/generated/events/scroll-view.d.ts +18 -0
- package/generated/events/scroll-view.js +1 -0
- package/generated/events/tab-view.d.ts +54 -0
- package/generated/events/tab-view.js +1 -0
- package/generated/events/text-field.d.ts +13 -0
- package/generated/events/text-field.js +1 -0
- package/generated/events/toggle-view.d.ts +14 -0
- package/generated/events/toggle-view.js +1 -0
- package/generated/i18n/index.d.ts +33 -0
- package/generated/i18n/index.js +164 -0
- 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/index.js +1 -1
- package/generated/internal/class/cleanup-registry.d.ts +5 -0
- package/generated/internal/class/cleanup-registry.js +38 -0
- package/generated/internal/class/css-style-observer.d.ts +8 -0
- package/generated/internal/class/css-style-observer.js +26 -0
- package/generated/internal/class/form-associated-base.d.ts +16 -0
- package/generated/internal/class/form-associated-base.js +78 -0
- 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.d.ts +10 -0
- package/generated/internal/class/mutation-observer-singleton.js +64 -0
- package/generated/internal/class/navigation-path.d.ts +15 -0
- package/generated/internal/class/navigation-path.js +84 -0
- package/generated/internal/class/navigation-view.d.ts +8 -0
- package/generated/internal/class/navigation-view.js +72 -0
- package/generated/internal/class/resize-observer-singleton.d.ts +7 -0
- package/generated/internal/class/resize-observer-singleton.js +22 -0
- 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 +5 -0
- package/generated/internal/decorators/custom-element.js +5 -0
- 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 +14 -0
- package/generated/internal/privateNamespace.js +168 -0
- package/generated/internal/utils/add.d.ts +1 -0
- package/generated/internal/utils/add.js +7 -0
- package/generated/internal/utils/cash/ancestors.d.ts +1 -0
- package/generated/internal/utils/cash/ancestors.js +27 -0
- package/generated/internal/utils/cash/index.d.ts +24 -0
- package/generated/internal/utils/cash/index.js +27 -0
- package/generated/internal/utils/cash/next-all.d.ts +1 -0
- package/generated/internal/utils/cash/next-all.js +10 -0
- package/generated/internal/utils/cash/next.d.ts +1 -0
- package/generated/internal/utils/cash/next.js +9 -0
- package/generated/internal/utils/cash/prev-all.d.ts +1 -0
- package/generated/internal/utils/cash/prev-all.js +10 -0
- package/generated/internal/utils/cash/prev.d.ts +1 -0
- package/generated/internal/utils/cash/prev.js +9 -0
- package/generated/internal/utils/cash/prop.d.ts +18 -0
- package/generated/internal/utils/cash/prop.js +30 -0
- package/generated/internal/utils/cash/siblings.d.ts +1 -0
- package/generated/internal/utils/cash/siblings.js +10 -0
- package/generated/internal/utils/clamp.d.ts +1 -0
- package/generated/internal/utils/clamp.js +4 -0
- package/generated/internal/utils/compare-big-decimals.d.ts +1 -0
- package/generated/internal/utils/compare-big-decimals.js +80 -0
- package/generated/internal/utils/css-time.d.ts +1 -0
- package/generated/internal/utils/css-time.js +3 -0
- package/generated/internal/utils/debounce.d.ts +1 -0
- package/generated/internal/utils/debounce.js +13 -0
- package/generated/internal/utils/define-translations.d.ts +1 -0
- package/generated/internal/utils/define-translations.js +3 -0
- 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 +41 -0
- package/generated/internal/utils/frame.d.ts +1 -0
- package/generated/internal/utils/frame.js +6 -0
- package/generated/internal/utils/index.d.ts +20 -1
- package/generated/internal/utils/index.js +23 -1
- package/generated/internal/utils/is-inside.d.ts +1 -0
- package/generated/internal/utils/is-inside.js +4 -0
- package/generated/internal/utils/kebab-case.d.ts +1 -1
- package/generated/internal/utils/kebab-case.js +6 -9
- package/generated/internal/utils/list-active.d.ts +7 -0
- package/generated/internal/utils/list-active.js +83 -0
- package/generated/internal/utils/microtask.d.ts +1 -0
- package/generated/internal/utils/microtask.js +3 -0
- package/generated/internal/utils/onoff.d.ts +45 -0
- package/generated/internal/utils/onoff.js +31 -0
- package/generated/internal/utils/set.d.ts +1 -0
- package/generated/internal/utils/set.js +7 -0
- package/generated/internal/utils/sleep.d.ts +1 -0
- package/generated/internal/utils/sleep.js +3 -0
- package/generated/internal/utils/slow-hide-show.d.ts +1 -0
- package/generated/internal/utils/slow-hide-show.js +16 -0
- package/generated/internal/utils/timeout.d.ts +5 -0
- package/generated/internal/utils/timeout.js +16 -0
- package/generated/internal/utils/touch-glass.d.ts +7 -0
- package/generated/internal/utils/touch-glass.js +19 -0
- package/generated/internal/vendor/morphdom.d.ts +6 -0
- package/generated/internal/vendor/morphdom.js +720 -0
- package/generated/morphdom/index.d.ts +8 -0
- package/generated/morphdom/index.js +8 -0
- package/generated/morphdom/morph.d.ts +4 -0
- package/generated/morphdom/morph.js +10 -0
- package/generated/morphdom/query-morph.d.ts +5 -0
- package/generated/morphdom/query-morph.js +12 -0
- package/generated/morphdom/render-to-string.d.ts +12 -0
- package/generated/morphdom/render-to-string.js +48 -0
- package/generated/morphdom/unsafe-html.d.ts +2 -0
- package/generated/morphdom/unsafe-html.js +4 -0
- package/generated/namespace-browser/base.d.ts +45 -0
- package/generated/namespace-browser/base.js +115 -0
- package/generated/namespace-browser/event.d.ts +10 -0
- package/generated/namespace-browser/event.js +1 -0
- package/generated/namespace-browser/index.d.ts +7 -0
- package/generated/namespace-browser/index.js +1 -0
- package/generated/snapshot/index.d.ts +9 -0
- package/generated/snapshot/index.js +60 -0
- package/generated/tpl/html.d.ts +5 -0
- package/generated/tpl/html.js +7 -0
- package/generated/tpl/index.d.ts +6 -0
- package/generated/tpl/index.js +6 -0
- package/generated/tpl/is-template-result.d.ts +3 -0
- package/generated/tpl/is-template-result.js +1 -0
- package/generated/tpl/render.d.ts +2 -0
- package/generated/tpl/render.js +132 -0
- package/package.json +49 -8
- package/scss/_base.scss +5 -0
- package/scss/_components.scss +90 -0
- package/scss/_final.scss +1 -0
- package/scss/_functions.scss +31 -0
- package/scss/_maps.scss +293 -0
- package/scss/_mixins.scss +7 -0
- package/scss/_placeholders.scss +3 -0
- package/scss/_transitions.scss +32 -0
- package/scss/_utils.scss +9 -0
- package/scss/_vars.scss +68 -0
- package/scss/base/_layout.scss +66 -0
- package/scss/base/_reboot.scss +191 -0
- package/scss/base/_root.scss +415 -0
- package/scss/colors/_index.scss +881 -0
- package/scss/components/_alert-dialog.scss +111 -0
- package/scss/components/_body-view.scss +17 -0
- package/scss/components/_bordered-button.scss +59 -0
- package/scss/components/_bordered-prominent-button.scss +65 -0
- package/scss/components/_borderless-button.scss +45 -0
- package/scss/components/_confirmation-dialog.scss +102 -0
- package/scss/components/_content-unavailable.scss +57 -0
- package/scss/components/_date-picker.scss +30 -0
- package/scss/components/_detail-placeholder.scss +153 -0
- package/scss/components/_disclosure-group.scss +179 -0
- package/scss/components/_fine-tooltip.scss +84 -0
- package/scss/components/_form-view.scss +234 -0
- package/scss/components/_full-screen.scss +15 -0
- package/scss/components/_glass-button.scss +61 -0
- package/scss/components/_glass-prominent-button.scss +71 -0
- package/scss/components/_group-box.scss +27 -0
- package/scss/components/_h-divider.scss +13 -0
- package/scss/components/_h-flex-stack.scss +23 -0
- package/scss/components/_h-stack.scss +28 -0
- package/scss/components/_image-view.scss +20 -0
- package/scss/components/_index.scss +272 -0
- package/scss/components/_label-view copy.scss.txt +420 -0
- package/scss/components/_label-view.scss +371 -0
- package/scss/components/_label-view.scss.txt +536 -0
- package/scss/components/_labeled-content.scss +75 -0
- package/scss/components/_list-view.scss +270 -0
- package/scss/components/_menu-view.scss +223 -0
- package/scss/components/_navigation-large-title.scss +44 -0
- package/scss/components/_navigation-split-view.scss +424 -0
- package/scss/components/_navigation-stack.scss +11 -0
- package/scss/components/_navigation-title.scss +10 -0
- package/scss/components/_picker-view.scss +329 -0
- package/scss/components/_plain-button.scss +19 -0
- package/scss/components/_progress-view.scss +98 -0
- package/scss/components/_scroll-view-proxy.scss +81 -0
- package/scss/components/_scroll-view-toolbars.scss +132 -0
- package/scss/components/_scroll-view.scss +134 -0
- package/scss/components/_search-view.scss +23 -0
- package/scss/components/_section-view.scss +120 -0
- package/scss/components/_sheet-view.scss +103 -0
- package/scss/components/_sidebar-toggle.scss +121 -0
- package/scss/components/_sidebar-view.scss +53 -0
- package/scss/components/_sticky-container.scss +42 -0
- package/scss/components/_tab-bar.scss +268 -0
- package/scss/components/_tab-item.scss +25 -0
- package/scss/components/_tab-view.scss +320 -0
- package/scss/components/_table-column.scss +54 -0
- package/scss/components/_table-row.scss +240 -0
- package/scss/components/_table-view.scss +232 -0
- package/scss/components/_text-field.scss +57 -0
- package/scss/components/_text-view.scss +57 -0
- package/scss/components/_toggle-view.scss +161 -0
- package/scss/components/_tool-bar-item-group.scss +48 -0
- package/scss/components/_tool-bar-item.scss +97 -0
- package/scss/components/_tool-bar.scss +153 -0
- package/scss/components/_v-divider.scss +13 -0
- package/scss/components/_v-flex-stack.scss +29 -0
- package/scss/components/_v-keyboard.scss +14 -0
- package/scss/components/_v-stack.scss +24 -0
- package/scss/final/_touch-glass.scss +98 -0
- package/scss/index.scss +18 -1
- package/scss/mixins/_button.scss +44 -0
- package/scss/mixins/_color.scss +16 -0
- package/scss/mixins/_dialog.scss +89 -0
- package/scss/mixins/_index.scss +473 -0
- package/scss/placeholders/_buttons.scss +118 -0
- package/scss/placeholders/_lists.scss +622 -0
- package/scss/transitions/_alert-dialog.scss +18 -0
- package/scss/transitions/_bwd.navbar.scss +19 -0
- package/scss/transitions/_bwd.scss +39 -0
- package/scss/transitions/_confirmation-dialog.scss +27 -0
- package/scss/transitions/_disclosure-group.scss +35 -0
- package/scss/transitions/_fine-tooltip.scss +21 -0
- package/scss/transitions/_fwd.navbar.scss +41 -0
- package/scss/transitions/_fwd.scss +24 -0
- package/scss/transitions/_glass-button.scss +12 -0
- package/scss/transitions/_glass-prominent-button.scss +12 -0
- package/scss/transitions/_index.scss +74 -0
- package/scss/transitions/_menu-view.scss +28 -0
- package/scss/transitions/_navigation-split-view.scss +23 -0
- package/scss/transitions/_progress-view.scss +23 -0
- package/scss/transitions/_sheet-view.scss +30 -0
- package/scss/transitions/_sidebar-view.scss +36 -0
- package/scss/transitions/_tab-bar.scss +20 -0
- package/scss/utils/_frame.scss +103 -0
- package/scss/utils/_index.scss +54 -0
- package/scss/utils/_scroll-view.scss +14 -0
- package/scss/utils/_spacing.scss +25 -0
- package/scss/utils/_stacks.scss +112 -0
- package/web-components.css-data/en.json +28 -0
- package/web-components.html-data/en.json +2612 -0
- package/generated/internal/snapshot.d.ts +0 -5
- package/generated/internal/snapshot.js +0 -23
- package/generated/styles.css +0 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { $, devFlags } from '../internal/utils';
|
|
2
|
+
import { queryMorph } from '../morphdom';
|
|
3
|
+
import { html } from '../tpl';
|
|
4
|
+
/**
|
|
5
|
+
* @summary A view that labels items with an icon and a title.
|
|
6
|
+
*
|
|
7
|
+
* @example <label-view><span>Hello world!</span></label-view> — Creating a label using a `span` element
|
|
8
|
+
* @example <label-view title="Hello world!"></label-view> — Creating a label using the `title` attribute
|
|
9
|
+
* @example <label-view system-image="hand-waving"><span>Hello world!</span></label-view> — Creating a label with an icon and a title using the `system-image` attribute
|
|
10
|
+
* @example <label-view><i slot="icon" class="ph ph-duotone ph-hand-waving"></i><span>Hello world!</span></label-view> — Creating a label with an icon and a title using the `icon` slot
|
|
11
|
+
*
|
|
12
|
+
* @attr {@Font} font — Sets the default font for text in this view.
|
|
13
|
+
*
|
|
14
|
+
* @slot — Any children without a `slot` attribute are placed in the title block.
|
|
15
|
+
* @slot icon — Use the `slot="icon"` attribute to place childen in the icon block.
|
|
16
|
+
*
|
|
17
|
+
* @cssprop {length} --label-gap — The gap between the icon and the title.
|
|
18
|
+
* @cssprop {number} --label-image-size — The size of the icon.
|
|
19
|
+
* @cssprop {length}--label-padding-inline — The padding inline of the label.
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
export class LabelView extends HTMLElement {
|
|
23
|
+
static get observedAttributes() {
|
|
24
|
+
return [
|
|
25
|
+
'system-image',
|
|
26
|
+
'title',
|
|
27
|
+
'line-limit',
|
|
28
|
+
/**
|
|
29
|
+
* @type {"tail"}
|
|
30
|
+
*/
|
|
31
|
+
'truncation-mode',
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
static #template;
|
|
35
|
+
static get template() {
|
|
36
|
+
return (this.#template ??= $(html `
|
|
37
|
+
<slot name="icon"></slot>
|
|
38
|
+
<slot></slot>
|
|
39
|
+
`));
|
|
40
|
+
// String.raw`
|
|
41
|
+
// <div part="root label-image-stack">
|
|
42
|
+
// <slot name="image"></slot>
|
|
43
|
+
// </div>
|
|
44
|
+
// <div part="root label-title-stack">
|
|
45
|
+
// <slot></slot>
|
|
46
|
+
// </div>`
|
|
47
|
+
}
|
|
48
|
+
#shadowRoot;
|
|
49
|
+
// #reflectScheduled = false
|
|
50
|
+
constructor() {
|
|
51
|
+
super();
|
|
52
|
+
this.#shadowRoot = this.attachShadow({ mode: 'closed' });
|
|
53
|
+
this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
|
|
54
|
+
}
|
|
55
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
56
|
+
if (devFlags.debug)
|
|
57
|
+
console.debug(`${LabelView.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
|
|
58
|
+
if (oldValue === newValue)
|
|
59
|
+
return;
|
|
60
|
+
// this.#scheduleReflect()
|
|
61
|
+
switch (name) {
|
|
62
|
+
// case 'system-image':
|
|
63
|
+
// case 'title':
|
|
64
|
+
// render(
|
|
65
|
+
// html`${this.getAttribute('title') ? html`<span>${this.getAttribute('title')}</span>` : null}${this.getAttribute('system-image')
|
|
66
|
+
// ? html`<image-view slot="icon" system-name="${this.getAttribute('system-image')}"></image-view>`
|
|
67
|
+
// : null}`,
|
|
68
|
+
// this
|
|
69
|
+
// )
|
|
70
|
+
// break
|
|
71
|
+
case 'system-image':
|
|
72
|
+
queryMorph('[slot=icon]', html `<image-view slot="icon" system-name="${newValue}"></image-view>`, this, { removeIf: !newValue });
|
|
73
|
+
break;
|
|
74
|
+
case 'title':
|
|
75
|
+
queryMorph(':not([slot])', html `<span>${newValue}</span>`, this, { removeIf: !newValue });
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
disconnectedCallback() {
|
|
80
|
+
if (devFlags.debug)
|
|
81
|
+
console.debug(`${LabelView.name} ⚡️ disconnect`);
|
|
82
|
+
}
|
|
83
|
+
connectedCallback() {
|
|
84
|
+
if (devFlags.debug)
|
|
85
|
+
console.debug(`${LabelView.name} ⚡️ connect`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @summary A container view that pairs a label with a value.
|
|
3
|
+
*
|
|
4
|
+
* @example <labeled-content label="Label" value="Content"></labeled-content> — Creates a standard labeled element, with a view that conveys the value of the element and a label
|
|
5
|
+
*
|
|
6
|
+
* @example <labeled-content label="Height" value="6" format="unit::unit=foot"></labeled-content> — Creates a labeled element from a formatted value
|
|
7
|
+
*
|
|
8
|
+
* @example <labeled-content value="Content"><label-view slot="label" title="Custom Value"></label-view><label-view slot="label" title="Custom Subtitle Value"></label-view></labeled-content> — Creates a labeled element that displays a custom label and a custom subtitle to the label
|
|
9
|
+
*
|
|
10
|
+
* @slot — The default slot.
|
|
11
|
+
* @slot label — Use the `slot="label"` attribute to place childen in the label block.
|
|
12
|
+
* @slot header
|
|
13
|
+
* @slot footer
|
|
14
|
+
*
|
|
15
|
+
* @csspart labeled-content-container
|
|
16
|
+
* @csspart labeled-content-stack
|
|
17
|
+
* @csspart labeled-content-label-stack
|
|
18
|
+
* @csspart labeled-content-value-stack
|
|
19
|
+
*/
|
|
20
|
+
export declare class LabeledContent extends HTMLElement {
|
|
21
|
+
#private;
|
|
22
|
+
static get observedAttributes(): string[];
|
|
23
|
+
static get template(): DocumentFragment;
|
|
24
|
+
constructor();
|
|
25
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
26
|
+
disconnectedCallback(): void;
|
|
27
|
+
connectedCallback(): void;
|
|
28
|
+
}
|
|
29
|
+
declare global {
|
|
30
|
+
interface HTMLElementTagNameMap {
|
|
31
|
+
'labeled-content': LabeledContent;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { $, devFlags } from '../internal/utils';
|
|
2
|
+
import { queryMorph } from '../morphdom';
|
|
3
|
+
import { html } from '../tpl';
|
|
4
|
+
/**
|
|
5
|
+
* @summary A container view that pairs a label with a value.
|
|
6
|
+
*
|
|
7
|
+
* @example <labeled-content label="Label" value="Content"></labeled-content> — Creates a standard labeled element, with a view that conveys the value of the element and a label
|
|
8
|
+
*
|
|
9
|
+
* @example <labeled-content label="Height" value="6" format="unit::unit=foot"></labeled-content> — Creates a labeled element from a formatted value
|
|
10
|
+
*
|
|
11
|
+
* @example <labeled-content value="Content"><label-view slot="label" title="Custom Value"></label-view><label-view slot="label" title="Custom Subtitle Value"></label-view></labeled-content> — Creates a labeled element that displays a custom label and a custom subtitle to the label
|
|
12
|
+
*
|
|
13
|
+
* @slot — The default slot.
|
|
14
|
+
* @slot label — Use the `slot="label"` attribute to place childen in the label block.
|
|
15
|
+
* @slot header
|
|
16
|
+
* @slot footer
|
|
17
|
+
*
|
|
18
|
+
* @csspart labeled-content-container
|
|
19
|
+
* @csspart labeled-content-stack
|
|
20
|
+
* @csspart labeled-content-label-stack
|
|
21
|
+
* @csspart labeled-content-value-stack
|
|
22
|
+
*/
|
|
23
|
+
export class LabeledContent extends HTMLElement {
|
|
24
|
+
static get observedAttributes() {
|
|
25
|
+
return [
|
|
26
|
+
'value',
|
|
27
|
+
'label',
|
|
28
|
+
'header',
|
|
29
|
+
'footer',
|
|
30
|
+
/**
|
|
31
|
+
* Use this to force a specific style.
|
|
32
|
+
*
|
|
33
|
+
* @type {vertical|horizontal}
|
|
34
|
+
*/
|
|
35
|
+
'labeled-content-style',
|
|
36
|
+
/**
|
|
37
|
+
* Use this to format the text inside the value attribute. For example `format="currency::currency=USD" value="1234.5"` produces a value of `$1,234.50`.
|
|
38
|
+
*
|
|
39
|
+
* @type {"<format-type>:<locale?>:<format-options?>"}
|
|
40
|
+
*/
|
|
41
|
+
'format',
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
static #template;
|
|
45
|
+
static get template() {
|
|
46
|
+
return (this.#template ??= $(html `
|
|
47
|
+
<div part="root labeled-content-container">
|
|
48
|
+
<slot name="header"></slot>
|
|
49
|
+
<div part="root labeled-content-stack">
|
|
50
|
+
<div part="root labeled-content-label-stack">
|
|
51
|
+
<slot name="label"></slot>
|
|
52
|
+
</div>
|
|
53
|
+
<div part="root labeled-content-value-stack">
|
|
54
|
+
<slot></slot>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
<slot name="footer"></slot>
|
|
58
|
+
</div>
|
|
59
|
+
`));
|
|
60
|
+
}
|
|
61
|
+
#shadowRoot;
|
|
62
|
+
constructor() {
|
|
63
|
+
super();
|
|
64
|
+
this.#shadowRoot = this.attachShadow({ mode: 'closed' });
|
|
65
|
+
this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
|
|
66
|
+
}
|
|
67
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
68
|
+
if (devFlags.debug)
|
|
69
|
+
console.debug(`${LabeledContent.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
|
|
70
|
+
if (oldValue === newValue)
|
|
71
|
+
return;
|
|
72
|
+
switch (name) {
|
|
73
|
+
case 'header':
|
|
74
|
+
queryMorph('[slot=header]', html `<header slot="header">
|
|
75
|
+
<label-view font="callout">
|
|
76
|
+
<span>${newValue}</span>
|
|
77
|
+
</label-view>
|
|
78
|
+
</header>`, this, { removeIf: !newValue });
|
|
79
|
+
break;
|
|
80
|
+
case 'footer':
|
|
81
|
+
queryMorph('[slot=footer]', html `<footer slot="footer">
|
|
82
|
+
<label-view font="callout">
|
|
83
|
+
<span>${newValue}</span>
|
|
84
|
+
</label-view>
|
|
85
|
+
</footer>`, this, { removeIf: !newValue });
|
|
86
|
+
break;
|
|
87
|
+
case 'value': {
|
|
88
|
+
const val = this.#fmt(newValue, this.getAttribute('format'));
|
|
89
|
+
queryMorph('label-view:not([slot])', html `<label-view>${val ? html `<span>${val}</span>` : null}</label-view>`, this);
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case 'format': {
|
|
93
|
+
const val = this.#fmt(this.getAttribute('value'), newValue);
|
|
94
|
+
queryMorph('label-view:not([slot])', html `<label-view>${val ? html `<span>${val}</span>` : null}</label-view>`, this);
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
case 'label':
|
|
98
|
+
queryMorph('[slot=label]', html `<label-view slot="label">${newValue ? html `<span>${newValue}</span>` : null}</label-view>`, this);
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
disconnectedCallback() {
|
|
103
|
+
if (devFlags.debug)
|
|
104
|
+
console.debug(`${LabeledContent.name} ⚡️ disconnect`);
|
|
105
|
+
}
|
|
106
|
+
connectedCallback() {
|
|
107
|
+
if (devFlags.debug)
|
|
108
|
+
console.debug(`${LabeledContent.name} ⚡️ connect`);
|
|
109
|
+
}
|
|
110
|
+
// <type>:<locale>;<option>=<value>;<option>=<value>
|
|
111
|
+
#fmt = (value, format) => {
|
|
112
|
+
const parseFormat = (format) => {
|
|
113
|
+
if (!format)
|
|
114
|
+
return {
|
|
115
|
+
type: 'text',
|
|
116
|
+
locale: navigator.language,
|
|
117
|
+
options: {},
|
|
118
|
+
};
|
|
119
|
+
const [type, locale, opts = {}] = format.split(':', 3), loc = new Intl.Locale(locale || navigator.language), options = Object.fromEntries(new URLSearchParams(opts));
|
|
120
|
+
return {
|
|
121
|
+
type,
|
|
122
|
+
locale: loc.toString(),
|
|
123
|
+
options,
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
const { type, locale, options } = parseFormat(format);
|
|
127
|
+
switch (type) {
|
|
128
|
+
case 'currency':
|
|
129
|
+
return new Intl.NumberFormat(locale, { style: 'currency', ...options }).format(Number(value)); // currency:en-US;currency=USD "$1,234.50"
|
|
130
|
+
case 'percent':
|
|
131
|
+
return new Intl.NumberFormat(locale, { style: 'percent' }).format(Number(value)); // percent:en-US "42%"
|
|
132
|
+
case 'unit':
|
|
133
|
+
return new Intl.NumberFormat(locale, { style: 'unit', ...options }).format(Number(value)); // percent:en-US:unit=kilometer-per-hour "50 km/h"
|
|
134
|
+
case 'number':
|
|
135
|
+
return new Intl.NumberFormat(locale, options).format(Number(value)); // number:en-US:notation=compact "1.2M"
|
|
136
|
+
case 'date':
|
|
137
|
+
return new Intl.DateTimeFormat(locale, options).format(new Date(value ?? '2000')); // { dateStyle: 'full', timeStyle: 'short' } "Saturday, July 4, 2026 at 2:30 PM"
|
|
138
|
+
case 'relative-time': {
|
|
139
|
+
const [number = 0, unit = 'day'] = value?.split('~') ?? [];
|
|
140
|
+
return new Intl.RelativeTimeFormat(locale, options).format(Number(number), unit); // -1~day { numeric: 'auto' } "yesterday"
|
|
141
|
+
}
|
|
142
|
+
case 'list':
|
|
143
|
+
return new Intl.ListFormat(locale, options).format(value?.split('~') ?? []); // '' { style: 'long', type: 'conjunction' } "Foo, Bar, and Baz"
|
|
144
|
+
case 'region':
|
|
145
|
+
return value ? new Intl.DisplayNames(locale, { type: 'region' }).of(value) : ''; // "Greece"
|
|
146
|
+
case 'byte-count': {
|
|
147
|
+
const bytes = Number(value);
|
|
148
|
+
if (!Number.isFinite(bytes))
|
|
149
|
+
return value;
|
|
150
|
+
const units = ['byte', 'kilobyte', 'megabyte', 'gigabyte', 'terabyte', 'petabyte', 'exabyte'];
|
|
151
|
+
const index = Math.min(Math.floor(Math.log(Math.abs(bytes)) / Math.log(1024)), units.length - 1);
|
|
152
|
+
return new Intl.NumberFormat(locale, {
|
|
153
|
+
style: 'unit',
|
|
154
|
+
unit: units[Math.max(0, index)],
|
|
155
|
+
unitDisplay: 'short',
|
|
156
|
+
...options,
|
|
157
|
+
}).format(bytes / 1024 ** Math.max(0, index));
|
|
158
|
+
}
|
|
159
|
+
default:
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @summary A container view that arranges rows of data in a single column, optionally letting the user select one or more of them.
|
|
3
|
+
*
|
|
4
|
+
* @attr {hidden} navigation-link-indicator-visibility — Hides accessories like right-arrow-chevron on NavigationLink buttons inside
|
|
5
|
+
*
|
|
6
|
+
* @cssprop {length} --list-row-gap — The gap between rows
|
|
7
|
+
* @cssprop {length} --list--media-inner-padding-inline-start — The inline paddint start for each row
|
|
8
|
+
*/
|
|
9
|
+
export declare class ListView extends HTMLElement {
|
|
10
|
+
constructor();
|
|
11
|
+
disconnectedCallback(): void;
|
|
12
|
+
connectedCallback(): void;
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
interface HTMLElementTagNameMap {
|
|
16
|
+
'list-view': ListView;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CleanupRegistry } from '../internal/class/cleanup-registry';
|
|
2
|
+
import { devFlags, listActive, onoff } from '../internal/utils';
|
|
3
|
+
/**
|
|
4
|
+
* @summary A container view that arranges rows of data in a single column, optionally letting the user select one or more of them.
|
|
5
|
+
*
|
|
6
|
+
* @attr {hidden} navigation-link-indicator-visibility — Hides accessories like right-arrow-chevron on NavigationLink buttons inside
|
|
7
|
+
*
|
|
8
|
+
* @cssprop {length} --list-row-gap — The gap between rows
|
|
9
|
+
* @cssprop {length} --list--media-inner-padding-inline-start — The inline paddint start for each row
|
|
10
|
+
*/
|
|
11
|
+
export class ListView extends HTMLElement {
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
}
|
|
15
|
+
disconnectedCallback() {
|
|
16
|
+
if (devFlags.debug)
|
|
17
|
+
console.debug(`${ListView.name} ⚡️ disconnect`);
|
|
18
|
+
CleanupRegistry.unregister(this);
|
|
19
|
+
}
|
|
20
|
+
connectedCallback() {
|
|
21
|
+
if (devFlags.debug)
|
|
22
|
+
console.debug(`${ListView.name} ⚡️ connect`);
|
|
23
|
+
CleanupRegistry.register(this, onoff(listActive(this), this).on());
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @summary A control that opens a menu of actions.
|
|
3
|
+
*
|
|
4
|
+
* @slot — The default slot.
|
|
5
|
+
* @slot label
|
|
6
|
+
*/
|
|
7
|
+
export declare class MenuView extends HTMLElement {
|
|
8
|
+
#private;
|
|
9
|
+
static get observedAttributes(): string[];
|
|
10
|
+
static get template(): DocumentFragment;
|
|
11
|
+
constructor();
|
|
12
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
13
|
+
disconnectedCallback(): void;
|
|
14
|
+
connectedCallback(): void;
|
|
15
|
+
}
|
|
16
|
+
declare global {
|
|
17
|
+
interface HTMLElementTagNameMap {
|
|
18
|
+
'menu-view': MenuView;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { CleanupRegistry } from '../internal/class/cleanup-registry';
|
|
3
|
+
import { $, devFlags, onoff, touchGlass } from '../internal/utils';
|
|
4
|
+
import { queryMorph } from '../morphdom';
|
|
5
|
+
import { html } from '../tpl';
|
|
6
|
+
/**
|
|
7
|
+
* @summary A control that opens a menu of actions.
|
|
8
|
+
*
|
|
9
|
+
* @slot — The default slot.
|
|
10
|
+
* @slot label
|
|
11
|
+
*/
|
|
12
|
+
export class MenuView extends HTMLElement {
|
|
13
|
+
static get observedAttributes() {
|
|
14
|
+
return ['open', 'closing', 'label'];
|
|
15
|
+
}
|
|
16
|
+
static #template;
|
|
17
|
+
static get template() {
|
|
18
|
+
return (this.#template ??= $(html `<button type="button" part="root button menu-summary">
|
|
19
|
+
<slot name="label"></slot>
|
|
20
|
+
</button>
|
|
21
|
+
<dialog part="root menu-dialog" autofocus inert>
|
|
22
|
+
<form part="root menu-form" method="dialog" novalidate>
|
|
23
|
+
<div part="root menu-scrollable">
|
|
24
|
+
<slot></slot>
|
|
25
|
+
</div>
|
|
26
|
+
</form>
|
|
27
|
+
</dialog>`));
|
|
28
|
+
}
|
|
29
|
+
#shadowRoot;
|
|
30
|
+
#dialog;
|
|
31
|
+
constructor() {
|
|
32
|
+
super();
|
|
33
|
+
this.#shadowRoot = this.attachShadow({ mode: 'closed' });
|
|
34
|
+
this.#shadowRoot.appendChild(document.importNode(this.constructor.template, true));
|
|
35
|
+
}
|
|
36
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
37
|
+
if (devFlags.debug)
|
|
38
|
+
console.debug(`${_a.name} ⚡️ attr-change [${name}] ("${oldValue}" → "${newValue}")`);
|
|
39
|
+
switch (name) {
|
|
40
|
+
case 'open':
|
|
41
|
+
if (!this.#dialog)
|
|
42
|
+
break;
|
|
43
|
+
this.#dialog.inert = null === newValue;
|
|
44
|
+
if (null === newValue && this.#dialog.open) {
|
|
45
|
+
if (devFlags.debug)
|
|
46
|
+
console.debug(`${_a.name} ⚡️ will-close`);
|
|
47
|
+
this.setAttribute('closing', '');
|
|
48
|
+
Promise.allSettled(this.#dialog.getAnimations().map(({ finished }) => finished)).then(() => {
|
|
49
|
+
if (!this.hasAttribute('closing'))
|
|
50
|
+
return;
|
|
51
|
+
this.#dialog?.close();
|
|
52
|
+
this.removeAttribute('closing');
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if ('' === newValue && !this.#dialog.open) {
|
|
56
|
+
if (devFlags.debug)
|
|
57
|
+
console.debug(`${_a.name} ⚡️ will-open`);
|
|
58
|
+
this.removeAttribute('closing');
|
|
59
|
+
const form = this.#shadowRoot.querySelector('form');
|
|
60
|
+
form.scrollTop = 0;
|
|
61
|
+
this.#dialog.showModal();
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
case 'label':
|
|
65
|
+
queryMorph('[slot=label]', html `<label-view slot="label">${newValue ? html `<span>${newValue}</span>` : null}</label-view>`, this);
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
disconnectedCallback() {
|
|
70
|
+
if (devFlags.debug)
|
|
71
|
+
console.debug(`${_a.name} ⚡️ disconnect`);
|
|
72
|
+
const summaryPart = this.#shadowRoot.querySelector('[part*=menu-summary]'), dialogPart = this.#shadowRoot.querySelector('[part*=menu-dialog]');
|
|
73
|
+
summaryPart?.style.removeProperty('anchor-name'); //$.prop('anchor-name', null, summaryPart)
|
|
74
|
+
dialogPart?.style.removeProperty('position-anchor'); //$.prop('position-anchor', null, dialogPart)
|
|
75
|
+
CleanupRegistry.unregister(this);
|
|
76
|
+
}
|
|
77
|
+
connectedCallback() {
|
|
78
|
+
if (devFlags.debug)
|
|
79
|
+
console.debug(`${_a.name} ⚡️ connect`);
|
|
80
|
+
this.#dialog = this.#shadowRoot.querySelector('dialog') ?? undefined;
|
|
81
|
+
const trigger = this.#shadowRoot.querySelector('button') ?? undefined;
|
|
82
|
+
CleanupRegistry.register(this, onoff('click', this.#handleTriggerClick, trigger).on());
|
|
83
|
+
CleanupRegistry.register(this, onoff([
|
|
84
|
+
{ types: 'click', listener: this.#handleDialogClick },
|
|
85
|
+
{ types: 'close', listener: this.#handleDialogClose },
|
|
86
|
+
{ types: 'cancel', listener: this.#handleDialogCancel },
|
|
87
|
+
], this.#dialog).on());
|
|
88
|
+
CleanupRegistry.register(this, onoff(touchGlass(this, (t) => t, ({ target }) => {
|
|
89
|
+
if (!(target instanceof HTMLElement))
|
|
90
|
+
return true;
|
|
91
|
+
if (target.matches('menu-view'))
|
|
92
|
+
return false;
|
|
93
|
+
if (!target.closest('menu-view[open]'))
|
|
94
|
+
return false;
|
|
95
|
+
return true;
|
|
96
|
+
}), this).on());
|
|
97
|
+
const newAnchorName = `--menu-view-${self.crypto.randomUUID()}`;
|
|
98
|
+
const summaryPart = this.#shadowRoot.querySelector('[part*=menu-summary]'), dialogPart = this.#shadowRoot.querySelector('[part*=menu-dialog]');
|
|
99
|
+
summaryPart?.style.setProperty('anchor-name', newAnchorName, 'important'); // override unset:all // $.prop('anchor-name', newAnchorName, summaryPart, 'important') //
|
|
100
|
+
dialogPart?.style.setProperty('position-anchor', newAnchorName); // $.prop('position-anchor', newAnchorName, dialogPart) //
|
|
101
|
+
}
|
|
102
|
+
#handleDialogClick = ({ type, target }) => {
|
|
103
|
+
if (devFlags.debug)
|
|
104
|
+
console.debug(`${_a.name} ⚡️ ${type}`);
|
|
105
|
+
if (!(target instanceof HTMLElement))
|
|
106
|
+
return;
|
|
107
|
+
if (target.matches('dialog'))
|
|
108
|
+
return this.toggleAttribute('open', false); // click outside
|
|
109
|
+
target.scrollIntoView({
|
|
110
|
+
behavior: self.matchMedia('(prefers-reduced-motion: no-preference)').matches ? 'smooth' : 'instant',
|
|
111
|
+
block: 'nearest',
|
|
112
|
+
inline: 'nearest',
|
|
113
|
+
});
|
|
114
|
+
if (!target.closest('button'))
|
|
115
|
+
return;
|
|
116
|
+
// TODO: Handle btns this.toggleAttribute('open', false)
|
|
117
|
+
this.toggleAttribute('open', false);
|
|
118
|
+
// event.stopPropagation() //NOTE: add this only if not nested, disposes all nicely if ommited
|
|
119
|
+
};
|
|
120
|
+
#handleTriggerClick = (evt) => {
|
|
121
|
+
if (devFlags.debug)
|
|
122
|
+
console.debug(`${_a.name} ⚡️ ${evt?.type}`);
|
|
123
|
+
this.toggleAttribute('open', true);
|
|
124
|
+
};
|
|
125
|
+
// intercept to modify open attr
|
|
126
|
+
#handleDialogCancel = (evt) => {
|
|
127
|
+
if (devFlags.debug)
|
|
128
|
+
console.debug(`${_a.name} ⚡️ ${evt?.type}`);
|
|
129
|
+
if (!evt.cancelable)
|
|
130
|
+
return;
|
|
131
|
+
evt.preventDefault();
|
|
132
|
+
this.toggleAttribute('open', false);
|
|
133
|
+
};
|
|
134
|
+
#handleDialogClose = (evt) => {
|
|
135
|
+
if (devFlags.debug)
|
|
136
|
+
console.debug(`${_a.name} ⚡️ ${evt?.type}`);
|
|
137
|
+
this.toggleAttribute('open', this.#shadowRoot.querySelector('dialog')?.open ?? false);
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
_a = MenuView;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @attr {grouped} background-style
|
|
4
|
+
* @attr {boolean} padding
|
|
5
|
+
* @attr {boolean} navigation-bar-auto-hide
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
export declare class NavigationLargeTitle extends HTMLElement {
|
|
9
|
+
#private;
|
|
10
|
+
constructor();
|
|
11
|
+
disconnectedCallback(): void;
|
|
12
|
+
connectedCallback(): void;
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
interface HTMLElementTagNameMap {
|
|
16
|
+
'navigation-large-title': NavigationLargeTitle;
|
|
17
|
+
}
|
|
18
|
+
}
|