@tartaguti/ui-components 0.1.0 → 0.3.0
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/CHANGELOG.md +43 -0
- package/README.md +12 -0
- package/custom-elements.json +2887 -823
- package/dist/accordion/tt-accordion-item.d.ts.map +1 -1
- package/dist/accordion/tt-accordion-item.js +5 -2
- package/dist/accordion/tt-accordion-item.js.map +1 -1
- package/dist/bento/tt-bento-item.d.ts.map +1 -1
- package/dist/bento/tt-bento-item.js +7 -13
- package/dist/bento/tt-bento-item.js.map +1 -1
- package/dist/docs.d.ts +7 -0
- package/dist/docs.d.ts.map +1 -0
- package/dist/docs.js +15 -0
- package/dist/docs.js.map +1 -0
- package/dist/index.d.ts +4 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/dist/sidebar/tt-menu-group.d.ts.map +1 -1
- package/dist/sidebar/tt-menu-group.js +16 -5
- package/dist/sidebar/tt-menu-group.js.map +1 -1
- package/dist/sidebar/tt-menu-item.d.ts.map +1 -1
- package/dist/sidebar/tt-menu-item.js +24 -11
- package/dist/sidebar/tt-menu-item.js.map +1 -1
- package/dist/sidebar/tt-sidebar-footer.d.ts.map +1 -1
- package/dist/sidebar/tt-sidebar-footer.js +7 -3
- package/dist/sidebar/tt-sidebar-footer.js.map +1 -1
- package/dist/sidebar/tt-sidebar.d.ts +8 -3
- package/dist/sidebar/tt-sidebar.d.ts.map +1 -1
- package/dist/sidebar/tt-sidebar.js +196 -44
- package/dist/sidebar/tt-sidebar.js.map +1 -1
- package/dist/strings.d.ts +64 -0
- package/dist/strings.d.ts.map +1 -0
- package/dist/strings.js +68 -0
- package/dist/strings.js.map +1 -0
- package/dist/tokens.css +30 -6
- package/dist/tt-alert.d.ts.map +1 -1
- package/dist/tt-alert.js +5 -2
- package/dist/tt-alert.js.map +1 -1
- package/dist/tt-auth.d.ts +5 -1
- package/dist/tt-auth.d.ts.map +1 -1
- package/dist/tt-auth.js +72 -10
- package/dist/tt-auth.js.map +1 -1
- package/dist/tt-breadcrumbs.d.ts.map +1 -1
- package/dist/tt-breadcrumbs.js +6 -3
- package/dist/tt-breadcrumbs.js.map +1 -1
- package/dist/tt-button-group.d.ts.map +1 -1
- package/dist/tt-button-group.js +7 -1
- package/dist/tt-button-group.js.map +1 -1
- package/dist/tt-button.d.ts.map +1 -1
- package/dist/tt-button.js +37 -28
- package/dist/tt-button.js.map +1 -1
- package/dist/tt-card.d.ts.map +1 -1
- package/dist/tt-card.js +9 -6
- package/dist/tt-card.js.map +1 -1
- package/dist/tt-chart.d.ts +10 -2
- package/dist/tt-chart.d.ts.map +1 -1
- package/dist/tt-chart.js +167 -29
- package/dist/tt-chart.js.map +1 -1
- package/dist/tt-checkbox.d.ts.map +1 -1
- package/dist/tt-checkbox.js +5 -2
- package/dist/tt-checkbox.js.map +1 -1
- package/dist/tt-code-block.d.ts +4 -5
- package/dist/tt-code-block.d.ts.map +1 -1
- package/dist/tt-code-block.js +53 -17
- package/dist/tt-code-block.js.map +1 -1
- package/dist/tt-combobox.d.ts +14 -0
- package/dist/tt-combobox.d.ts.map +1 -1
- package/dist/tt-combobox.js +234 -31
- package/dist/tt-combobox.js.map +1 -1
- package/dist/tt-company-card.d.ts +18 -0
- package/dist/tt-company-card.d.ts.map +1 -1
- package/dist/tt-company-card.js +73 -4
- package/dist/tt-company-card.js.map +1 -1
- package/dist/tt-comparison-table.d.ts.map +1 -1
- package/dist/tt-comparison-table.js +6 -3
- package/dist/tt-comparison-table.js.map +1 -1
- package/dist/tt-component-doc.d.ts.map +1 -1
- package/dist/tt-component-doc.js +6 -3
- package/dist/tt-component-doc.js.map +1 -1
- package/dist/tt-contact-list.d.ts +17 -2
- package/dist/tt-contact-list.d.ts.map +1 -1
- package/dist/tt-contact-list.js +68 -10
- package/dist/tt-contact-list.js.map +1 -1
- package/dist/tt-copy-button.d.ts.map +1 -1
- package/dist/tt-copy-button.js +6 -3
- package/dist/tt-copy-button.js.map +1 -1
- package/dist/tt-data-table.d.ts +32 -1
- package/dist/tt-data-table.d.ts.map +1 -1
- package/dist/tt-data-table.js +302 -16
- package/dist/tt-data-table.js.map +1 -1
- package/dist/tt-dock-item.d.ts +53 -0
- package/dist/tt-dock-item.d.ts.map +1 -0
- package/dist/tt-dock-item.js +270 -0
- package/dist/tt-dock-item.js.map +1 -0
- package/dist/tt-dock.d.ts +59 -0
- package/dist/tt-dock.d.ts.map +1 -0
- package/dist/tt-dock.js +337 -0
- package/dist/tt-dock.js.map +1 -0
- package/dist/tt-drawer.d.ts +4 -0
- package/dist/tt-drawer.d.ts.map +1 -1
- package/dist/tt-drawer.js +14 -4
- package/dist/tt-drawer.js.map +1 -1
- package/dist/tt-dropdown-menu.d.ts +5 -0
- package/dist/tt-dropdown-menu.d.ts.map +1 -1
- package/dist/tt-dropdown-menu.js +34 -8
- package/dist/tt-dropdown-menu.js.map +1 -1
- package/dist/tt-file-upload.d.ts +35 -0
- package/dist/tt-file-upload.d.ts.map +1 -1
- package/dist/tt-file-upload.js +210 -21
- package/dist/tt-file-upload.js.map +1 -1
- package/dist/tt-filter.d.ts.map +1 -1
- package/dist/tt-filter.js +10 -5
- package/dist/tt-filter.js.map +1 -1
- package/dist/tt-form.d.ts +25 -1
- package/dist/tt-form.d.ts.map +1 -1
- package/dist/tt-form.js +151 -12
- package/dist/tt-form.js.map +1 -1
- package/dist/tt-grid.d.ts +10 -1
- package/dist/tt-grid.d.ts.map +1 -1
- package/dist/tt-grid.js +38 -9
- package/dist/tt-grid.js.map +1 -1
- package/dist/tt-icon.d.ts.map +1 -1
- package/dist/tt-icon.js +5 -0
- package/dist/tt-icon.js.map +1 -1
- package/dist/tt-inbox.d.ts +4 -0
- package/dist/tt-inbox.d.ts.map +1 -1
- package/dist/tt-inbox.js +13 -3
- package/dist/tt-inbox.js.map +1 -1
- package/dist/tt-input.d.ts.map +1 -1
- package/dist/tt-input.js +15 -5
- package/dist/tt-input.js.map +1 -1
- package/dist/tt-key-values.d.ts +2 -0
- package/dist/tt-key-values.d.ts.map +1 -1
- package/dist/tt-key-values.js +45 -2
- package/dist/tt-key-values.js.map +1 -1
- package/dist/tt-layout.d.ts +53 -2
- package/dist/tt-layout.d.ts.map +1 -1
- package/dist/tt-layout.js +233 -27
- package/dist/tt-layout.js.map +1 -1
- package/dist/tt-modal.d.ts +4 -0
- package/dist/tt-modal.d.ts.map +1 -1
- package/dist/tt-modal.js +14 -4
- package/dist/tt-modal.js.map +1 -1
- package/dist/tt-navbar.d.ts +4 -0
- package/dist/tt-navbar.d.ts.map +1 -1
- package/dist/tt-navbar.js +42 -7
- package/dist/tt-navbar.js.map +1 -1
- package/dist/tt-pagination.d.ts +4 -0
- package/dist/tt-pagination.d.ts.map +1 -1
- package/dist/tt-pagination.js +8 -1
- package/dist/tt-pagination.js.map +1 -1
- package/dist/tt-product.d.ts +67 -15
- package/dist/tt-product.d.ts.map +1 -1
- package/dist/tt-product.js +447 -366
- package/dist/tt-product.js.map +1 -1
- package/dist/tt-progress.d.ts +1 -0
- package/dist/tt-progress.d.ts.map +1 -1
- package/dist/tt-progress.js +26 -7
- package/dist/tt-progress.js.map +1 -1
- package/dist/tt-quantity.d.ts.map +1 -1
- package/dist/tt-quantity.js +5 -2
- package/dist/tt-quantity.js.map +1 -1
- package/dist/tt-radio-group.d.ts.map +1 -1
- package/dist/tt-radio-group.js +5 -2
- package/dist/tt-radio-group.js.map +1 -1
- package/dist/tt-scroller.d.ts +76 -0
- package/dist/tt-scroller.d.ts.map +1 -0
- package/dist/tt-scroller.js +525 -0
- package/dist/tt-scroller.js.map +1 -0
- package/dist/tt-search.d.ts.map +1 -1
- package/dist/tt-search.js +10 -5
- package/dist/tt-search.js.map +1 -1
- package/dist/tt-select.d.ts +9 -0
- package/dist/tt-select.d.ts.map +1 -1
- package/dist/tt-select.js +99 -14
- package/dist/tt-select.js.map +1 -1
- package/dist/tt-slider.d.ts.map +1 -1
- package/dist/tt-slider.js +13 -2
- package/dist/tt-slider.js.map +1 -1
- package/dist/tt-social-links.d.ts.map +1 -1
- package/dist/tt-social-links.js +7 -4
- package/dist/tt-social-links.js.map +1 -1
- package/dist/tt-switcher.d.ts +2 -0
- package/dist/tt-switcher.d.ts.map +1 -1
- package/dist/tt-switcher.js +24 -76
- package/dist/tt-switcher.js.map +1 -1
- package/dist/tt-table-row.d.ts.map +1 -1
- package/dist/tt-table-row.js +5 -2
- package/dist/tt-table-row.js.map +1 -1
- package/dist/tt-table.d.ts.map +1 -1
- package/dist/tt-table.js +5 -2
- package/dist/tt-table.js.map +1 -1
- package/dist/tt-tabs.d.ts.map +1 -1
- package/dist/tt-tabs.js +5 -2
- package/dist/tt-tabs.js.map +1 -1
- package/dist/tt-tag-list.d.ts.map +1 -1
- package/dist/tt-tag-list.js +6 -3
- package/dist/tt-tag-list.js.map +1 -1
- package/dist/tt-textarea.d.ts.map +1 -1
- package/dist/tt-textarea.js +5 -2
- package/dist/tt-textarea.js.map +1 -1
- package/dist/tt-toast.d.ts +4 -1
- package/dist/tt-toast.d.ts.map +1 -1
- package/dist/tt-toast.js +40 -6
- package/dist/tt-toast.js.map +1 -1
- package/dist/tt-toggle-group.d.ts.map +1 -1
- package/dist/tt-toggle-group.js +7 -1
- package/dist/tt-toggle-group.js.map +1 -1
- package/dist/tt-toggle.d.ts.map +1 -1
- package/dist/tt-toggle.js +14 -9
- package/dist/tt-toggle.js.map +1 -1
- package/package.json +1 -1
- package/vscode.html-custom-data.json +241 -66
package/dist/tt-key-values.js
CHANGED
|
@@ -10,6 +10,9 @@ let TTKeyValues = class TTKeyValues extends LitElement {
|
|
|
10
10
|
constructor() {
|
|
11
11
|
super(...arguments);
|
|
12
12
|
this.items = [];
|
|
13
|
+
// Reflected, because the split rules are :host([layout="split"])
|
|
14
|
+
// selectors, and a selector matches an attribute, never a property.
|
|
15
|
+
this.layout = "columns";
|
|
13
16
|
}
|
|
14
17
|
static { this.styles = css `
|
|
15
18
|
/* The browser's own [hidden] rule loses to any :host display, so a
|
|
@@ -71,8 +74,12 @@ let TTKeyValues = class TTKeyValues extends LitElement {
|
|
|
71
74
|
text-decoration: none;
|
|
72
75
|
}
|
|
73
76
|
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
/* Only where the pointer can hover: a tap leaves :hover on until the
|
|
78
|
+
next tap, so the link stayed underlined on a phone. */
|
|
79
|
+
@media (hover: hover) {
|
|
80
|
+
dd a:hover {
|
|
81
|
+
text-decoration: underline;
|
|
82
|
+
}
|
|
76
83
|
}
|
|
77
84
|
|
|
78
85
|
/*
|
|
@@ -104,6 +111,39 @@ let TTKeyValues = class TTKeyValues extends LitElement {
|
|
|
104
111
|
margin-top: 0;
|
|
105
112
|
}
|
|
106
113
|
}
|
|
114
|
+
|
|
115
|
+
/*
|
|
116
|
+
Split: the label takes what is left, the value is pushed to the end.
|
|
117
|
+
|
|
118
|
+
The value column is auto, so it is as wide as its longest value and
|
|
119
|
+
no wider, and the label column (1fr) gets the rest. On a phone the
|
|
120
|
+
pair stays on one row, which is the point of this layout: the
|
|
121
|
+
numbers line up down the right edge where the eye reads them.
|
|
122
|
+
|
|
123
|
+
The label may wrap here, unlike in columns, where it is nowrap. A
|
|
124
|
+
long label wraps under itself instead of pushing the value off the
|
|
125
|
+
row, and a value too long for what remains wraps at its own end.
|
|
126
|
+
|
|
127
|
+
Each selector outranks the narrow rule's (the :host([layout])
|
|
128
|
+
part adds to it), so a split list stays split in a narrow card.
|
|
129
|
+
*/
|
|
130
|
+
:host([layout="split"]) dl {
|
|
131
|
+
grid-template-columns: 1fr auto;
|
|
132
|
+
gap: var(--tt-space-2) var(--tt-space-4);
|
|
133
|
+
align-items: baseline;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
:host([layout="split"]) dt {
|
|
137
|
+
margin-top: 0;
|
|
138
|
+
font-size: inherit;
|
|
139
|
+
white-space: normal;
|
|
140
|
+
overflow-wrap: break-word;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
:host([layout="split"]) dd {
|
|
144
|
+
text-align: end;
|
|
145
|
+
font-variant-numeric: tabular-nums;
|
|
146
|
+
}
|
|
107
147
|
`; }
|
|
108
148
|
render() {
|
|
109
149
|
return html `
|
|
@@ -119,6 +159,9 @@ let TTKeyValues = class TTKeyValues extends LitElement {
|
|
|
119
159
|
__decorate([
|
|
120
160
|
property({ type: Array })
|
|
121
161
|
], TTKeyValues.prototype, "items", void 0);
|
|
162
|
+
__decorate([
|
|
163
|
+
property({ type: String, reflect: true })
|
|
164
|
+
], TTKeyValues.prototype, "layout", void 0);
|
|
122
165
|
TTKeyValues = __decorate([
|
|
123
166
|
customElement("tt-key-values")
|
|
124
167
|
], TTKeyValues);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tt-key-values.js","sourceRoot":"","sources":["../src/tt-key-values.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tt-key-values.js","sourceRoot":"","sources":["../src/tt-key-values.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAoBrD,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAApC;;QAEL,UAAK,GAAe,EAAE,CAAC;QAEvB,iEAAiE;QACjE,oEAAoE;QAEpE,WAAM,GAAoB,SAAS,CAAC;IAkJtC,CAAC;aAhJQ,WAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkIlB,AAlIY,CAkIX;IAEF,MAAM;QACJ,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,KAAK,CAAC,GAAG,CACd,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAA;+BACO,IAAI,CAAC,KAAK;+BACV,IAAI,CAAC,KAAK;WAC9B,CACF;;KAEJ,CAAC;IACJ,CAAC;;AAtJD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;0CACH;AAKvB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;2CACN;AAPzB,WAAW;IADvB,aAAa,CAAC,eAAe,CAAC;GAClB,WAAW,CAyJvB"}
|
package/dist/tt-layout.d.ts
CHANGED
|
@@ -14,13 +14,64 @@ import { LitElement } from "lit";
|
|
|
14
14
|
export interface MenuToggleHost extends HTMLElement {
|
|
15
15
|
mobileMenuOpen?: boolean;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* The app shell: a navbar across the top, a sidebar down the side and the
|
|
19
|
+
* page beside it, with the sidebar turning into a drawer on a phone.
|
|
20
|
+
*
|
|
21
|
+
* ---------------------------------------------------------------------
|
|
22
|
+
* TWO WAYS TO SCROLL.
|
|
23
|
+
*
|
|
24
|
+
* By default the layout is exactly one screen tall and only the content
|
|
25
|
+
* area scrolls, under a fixed bar and beside a fixed sidebar. That is
|
|
26
|
+
* the whole window, and it is what this app's own shell uses.
|
|
27
|
+
*
|
|
28
|
+
* `contained` keeps the same picture and changes who scrolls: the layout
|
|
29
|
+
* grows with its content and the PAGE scrolls, while the navbar and the
|
|
30
|
+
* sidebar stay pinned with position: sticky. Nothing is placed against
|
|
31
|
+
* the window, the phone drawer included, so a contained layout also
|
|
32
|
+
* works inside something smaller than the window: a preview, a design
|
|
33
|
+
* in the component builder, a page of documentation.
|
|
34
|
+
*
|
|
35
|
+
* ---------------------------------------------------------------------
|
|
36
|
+
* PHONE OR NOT IS ASKED OF THE LAYOUT, NOT THE WINDOW.
|
|
37
|
+
*
|
|
38
|
+
* The host is a size container, and the drawer, the navbar's menu button
|
|
39
|
+
* and the sidebar's drawer rules all ask the same container query (below
|
|
40
|
+
* 768px). A media query asks how wide the WINDOW is, which in a builder
|
|
41
|
+
* canvas drawing a 375px phone on a 1440px screen is the wrong question.
|
|
42
|
+
* The container is the host rather than an element inside it, because
|
|
43
|
+
* WebKit finds containers through the DOM tree, and the navbar and the
|
|
44
|
+
* sidebar are the host's children, not its shadow root's.
|
|
45
|
+
*/
|
|
17
46
|
export declare class TTLayout extends LitElement {
|
|
18
|
-
|
|
19
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Grows with its content and lets the page scroll, with the navbar and
|
|
49
|
+
* the sidebar pinned. Reflected, because the styles match on it.
|
|
50
|
+
*/
|
|
51
|
+
contained: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Whether the phone menu (the sidebar drawer) is open. The layout opens
|
|
54
|
+
* and closes it itself: the navbar's menu button, Escape, the backdrop
|
|
55
|
+
* and a click on a menu item. It announces the ones it decides with
|
|
56
|
+
* tt-menu-toggle, the same event the navbar sends for its button, so a
|
|
57
|
+
* listener on the layout hears every change once. Setting it opens or
|
|
58
|
+
* closes the drawer; on a wider screen it changes nothing.
|
|
59
|
+
*
|
|
60
|
+
* Named as on tt-navbar, whose button it keeps in step.
|
|
61
|
+
*/
|
|
62
|
+
mobileMenuOpen: boolean;
|
|
63
|
+
private layoutEl?;
|
|
64
|
+
private navbarEl?;
|
|
65
|
+
private backdropEl?;
|
|
66
|
+
private settled;
|
|
67
|
+
private closeMenu;
|
|
20
68
|
private handleMenuToggle;
|
|
21
69
|
private handleSidebarMenu;
|
|
22
70
|
private handleKeydown;
|
|
71
|
+
private barObserver?;
|
|
72
|
+
private observeBar;
|
|
23
73
|
connectedCallback(): void;
|
|
74
|
+
firstUpdated(): void;
|
|
24
75
|
private locked;
|
|
25
76
|
private setLock;
|
|
26
77
|
disconnectedCallback(): void;
|
package/dist/tt-layout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tt-layout.d.ts","sourceRoot":"","sources":["../src/tt-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAK5C;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qBACa,QAAS,SAAQ,UAAU;
|
|
1
|
+
{"version":3,"file":"tt-layout.d.ts","sourceRoot":"","sources":["../src/tt-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAK5C;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBACa,QAAS,SAAQ,UAAU;IACtC;;;OAGG;IAEH,SAAS,UAAS;IAElB;;;;;;;;;OASG;IAEH,cAAc,UAAS;IAGvB,OAAO,CAAC,QAAQ,CAAC,CAAc;IAG/B,OAAO,CAAC,QAAQ,CAAC,CAAc;IAG/B,OAAO,CAAC,UAAU,CAAC,CAAc;IAUjC,OAAO,CAAC,OAAO,CAAS;IAMxB,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,aAAa,CAInB;IAQF,OAAO,CAAC,WAAW,CAAC,CAAiB;IAErC,OAAO,CAAC,UAAU;IAYlB,iBAAiB;IASjB,YAAY;IAYZ,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,OAAO;IASf,oBAAoB;IAWpB,OAAO;IAgCP,MAAM,CAAC,MAAM,0BA2RX;IAEF,MAAM;CA+CP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,QAAQ,CAAC;KACvB;CACF"}
|
package/dist/tt-layout.js
CHANGED
|
@@ -5,23 +5,86 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { LitElement, html, css } from "lit";
|
|
8
|
-
import { customElement, state } from "lit/decorators.js";
|
|
8
|
+
import { customElement, property, query, state } from "lit/decorators.js";
|
|
9
9
|
import { lockScroll, unlockScroll } from "./scroll-lock.js";
|
|
10
|
+
/**
|
|
11
|
+
* The app shell: a navbar across the top, a sidebar down the side and the
|
|
12
|
+
* page beside it, with the sidebar turning into a drawer on a phone.
|
|
13
|
+
*
|
|
14
|
+
* ---------------------------------------------------------------------
|
|
15
|
+
* TWO WAYS TO SCROLL.
|
|
16
|
+
*
|
|
17
|
+
* By default the layout is exactly one screen tall and only the content
|
|
18
|
+
* area scrolls, under a fixed bar and beside a fixed sidebar. That is
|
|
19
|
+
* the whole window, and it is what this app's own shell uses.
|
|
20
|
+
*
|
|
21
|
+
* `contained` keeps the same picture and changes who scrolls: the layout
|
|
22
|
+
* grows with its content and the PAGE scrolls, while the navbar and the
|
|
23
|
+
* sidebar stay pinned with position: sticky. Nothing is placed against
|
|
24
|
+
* the window, the phone drawer included, so a contained layout also
|
|
25
|
+
* works inside something smaller than the window: a preview, a design
|
|
26
|
+
* in the component builder, a page of documentation.
|
|
27
|
+
*
|
|
28
|
+
* ---------------------------------------------------------------------
|
|
29
|
+
* PHONE OR NOT IS ASKED OF THE LAYOUT, NOT THE WINDOW.
|
|
30
|
+
*
|
|
31
|
+
* The host is a size container, and the drawer, the navbar's menu button
|
|
32
|
+
* and the sidebar's drawer rules all ask the same container query (below
|
|
33
|
+
* 768px). A media query asks how wide the WINDOW is, which in a builder
|
|
34
|
+
* canvas drawing a 375px phone on a 1440px screen is the wrong question.
|
|
35
|
+
* The container is the host rather than an element inside it, because
|
|
36
|
+
* WebKit finds containers through the DOM tree, and the navbar and the
|
|
37
|
+
* sidebar are the host's children, not its shadow root's.
|
|
38
|
+
*/
|
|
10
39
|
let TTLayout = class TTLayout extends LitElement {
|
|
11
40
|
constructor() {
|
|
12
41
|
super(...arguments);
|
|
13
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Grows with its content and lets the page scroll, with the navbar and
|
|
44
|
+
* the sidebar pinned. Reflected, because the styles match on it.
|
|
45
|
+
*/
|
|
46
|
+
this.contained = false;
|
|
47
|
+
/**
|
|
48
|
+
* Whether the phone menu (the sidebar drawer) is open. The layout opens
|
|
49
|
+
* and closes it itself: the navbar's menu button, Escape, the backdrop
|
|
50
|
+
* and a click on a menu item. It announces the ones it decides with
|
|
51
|
+
* tt-menu-toggle, the same event the navbar sends for its button, so a
|
|
52
|
+
* listener on the layout hears every change once. Setting it opens or
|
|
53
|
+
* closes the drawer; on a wider screen it changes nothing.
|
|
54
|
+
*
|
|
55
|
+
* Named as on tt-navbar, whose button it keeps in step.
|
|
56
|
+
*/
|
|
57
|
+
this.mobileMenuOpen = false;
|
|
58
|
+
/*
|
|
59
|
+
False until the first two frames have been drawn, and the drawer's
|
|
60
|
+
slide is switched off until then. Firefox styles a new layout once
|
|
61
|
+
without its container query and once with it, and starts transitions
|
|
62
|
+
between the two, so on a phone the closed drawer slid out across the
|
|
63
|
+
page as it loaded.
|
|
64
|
+
*/
|
|
65
|
+
this.settled = false;
|
|
14
66
|
this.handleKeydown = (event) => {
|
|
15
|
-
if (event.key === "Escape" && this.
|
|
16
|
-
this.
|
|
67
|
+
if (event.key === "Escape" && this.mobileMenuOpen) {
|
|
68
|
+
this.closeMenu();
|
|
17
69
|
}
|
|
18
70
|
};
|
|
19
71
|
// Whether this element currently holds a scroll lock. The lock is
|
|
20
72
|
// reference counted, so it has to release exactly what it took.
|
|
21
73
|
this.locked = false;
|
|
22
74
|
}
|
|
23
|
-
|
|
24
|
-
|
|
75
|
+
/*
|
|
76
|
+
Closes the drawer for a reason the navbar did not see, and says so.
|
|
77
|
+
The navbar's own click is announced by the navbar.
|
|
78
|
+
*/
|
|
79
|
+
closeMenu() {
|
|
80
|
+
if (!this.mobileMenuOpen)
|
|
81
|
+
return;
|
|
82
|
+
this.mobileMenuOpen = false;
|
|
83
|
+
this.dispatchEvent(new CustomEvent("tt-menu-toggle", {
|
|
84
|
+
detail: { open: false },
|
|
85
|
+
bubbles: true,
|
|
86
|
+
composed: true,
|
|
87
|
+
}));
|
|
25
88
|
}
|
|
26
89
|
/*
|
|
27
90
|
Takes the state FROM the event rather than flipping independently.
|
|
@@ -31,14 +94,33 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
31
94
|
is the single decision and the layout follows it.
|
|
32
95
|
*/
|
|
33
96
|
handleMenuToggle(event) {
|
|
34
|
-
this.
|
|
97
|
+
this.mobileMenuOpen = event.detail.open;
|
|
35
98
|
}
|
|
36
99
|
handleSidebarMenu() {
|
|
37
|
-
this.
|
|
100
|
+
this.closeMenu();
|
|
101
|
+
}
|
|
102
|
+
observeBar() {
|
|
103
|
+
if (!this.navbarEl || this.barObserver)
|
|
104
|
+
return;
|
|
105
|
+
this.barObserver = new ResizeObserver(() => {
|
|
106
|
+
// offsetHeight, not a bounding box: a scaled canvas would scale it.
|
|
107
|
+
const height = this.navbarEl?.offsetHeight ?? 0;
|
|
108
|
+
this.layoutEl?.style.setProperty("--_bar", `${height}px`);
|
|
109
|
+
});
|
|
110
|
+
this.barObserver.observe(this.navbarEl);
|
|
38
111
|
}
|
|
39
112
|
connectedCallback() {
|
|
40
113
|
super.connectedCallback();
|
|
41
114
|
window.addEventListener("keydown", this.handleKeydown);
|
|
115
|
+
// Back in the page after a move: the first render will not run again.
|
|
116
|
+
if (this.hasUpdated)
|
|
117
|
+
this.observeBar();
|
|
118
|
+
}
|
|
119
|
+
firstUpdated() {
|
|
120
|
+
this.observeBar();
|
|
121
|
+
requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
122
|
+
this.settled = true;
|
|
123
|
+
}));
|
|
42
124
|
}
|
|
43
125
|
setLock(want) {
|
|
44
126
|
if (want === this.locked)
|
|
@@ -51,11 +133,30 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
51
133
|
}
|
|
52
134
|
disconnectedCallback() {
|
|
53
135
|
window.removeEventListener("keydown", this.handleKeydown);
|
|
136
|
+
this.barObserver?.disconnect();
|
|
137
|
+
this.barObserver = undefined;
|
|
54
138
|
this.setLock(false);
|
|
55
139
|
super.disconnectedCallback();
|
|
56
140
|
}
|
|
57
141
|
updated() {
|
|
58
|
-
|
|
142
|
+
/*
|
|
143
|
+
A contained layout's page is the window's scroller, so freezing it
|
|
144
|
+
while the drawer is not a drawer (a wider screen, where the menu
|
|
145
|
+
state changes nothing) would freeze the app. The backdrop shows
|
|
146
|
+
only when the drawer is one. The full-window layout scrolls its own
|
|
147
|
+
content area, so for it the page lock is harmless at any width, and
|
|
148
|
+
it keeps the rule it always had.
|
|
149
|
+
*/
|
|
150
|
+
const drawer = !this.contained ||
|
|
151
|
+
(this.backdropEl !== undefined &&
|
|
152
|
+
getComputedStyle(this.backdropEl).display !== "none");
|
|
153
|
+
/*
|
|
154
|
+
Only while in the page. An update can still run after the element
|
|
155
|
+
has left it (the settle timer above, a property set late), and a
|
|
156
|
+
lock taken then is never given back: disconnectedCallback has
|
|
157
|
+
already run.
|
|
158
|
+
*/
|
|
159
|
+
this.setLock(this.isConnected && this.mobileMenuOpen && drawer);
|
|
59
160
|
/*
|
|
60
161
|
Escape and the backdrop can also close the sidebar, and the navbar
|
|
61
162
|
hears neither: its own click handler is the only thing that would
|
|
@@ -64,7 +165,7 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
64
165
|
*/
|
|
65
166
|
const navbar = this.querySelector("tt-navbar");
|
|
66
167
|
if (navbar)
|
|
67
|
-
navbar.mobileMenuOpen = this.
|
|
168
|
+
navbar.mobileMenuOpen = this.mobileMenuOpen;
|
|
68
169
|
}
|
|
69
170
|
static { this.styles = css `
|
|
70
171
|
/* The browser's own [hidden] rule loses to any :host display, so a
|
|
@@ -76,8 +177,12 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
76
177
|
:host {
|
|
77
178
|
display: block;
|
|
78
179
|
|
|
180
|
+
/* See "phone or not" at the top. Inline size only, so the height
|
|
181
|
+
is still whatever the content makes it. */
|
|
182
|
+
container-type: inline-size;
|
|
183
|
+
|
|
79
184
|
height: 100vh;
|
|
80
|
-
height: 100dvh;
|
|
185
|
+
height: var(--tt-viewport-height, 100dvh);
|
|
81
186
|
|
|
82
187
|
background: var(--tt-background);
|
|
83
188
|
color: var(--tt-foreground);
|
|
@@ -156,17 +261,69 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
156
261
|
display: none;
|
|
157
262
|
}
|
|
158
263
|
|
|
159
|
-
/*
|
|
264
|
+
/* ---- contained: the page scrolls ----
|
|
265
|
+
|
|
266
|
+
At least one screen tall and otherwise as tall as its content. The
|
|
267
|
+
bar is pinned by the sticky wrapper above; the sidebar is pinned
|
|
268
|
+
just under it and is exactly the rest of the screen, so its footer
|
|
269
|
+
sits on the bottom edge however long or short the page is, and its
|
|
270
|
+
own menu scrolls. The body must not clip (overflow: hidden would
|
|
271
|
+
make it the scroller the sidebar sticks to, and it never scrolls),
|
|
272
|
+
and must not stretch the sidebar to the page's height. */
|
|
273
|
+
|
|
274
|
+
:host([contained]) {
|
|
275
|
+
height: auto;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
:host([contained]) .layout {
|
|
279
|
+
height: auto;
|
|
280
|
+
min-height: var(--tt-viewport-height, 100dvh);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
:host([contained]) .body {
|
|
284
|
+
align-items: flex-start;
|
|
285
|
+
overflow: visible;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
:host([contained]) .sidebar {
|
|
289
|
+
position: sticky;
|
|
290
|
+
top: var(--_bar, 0px);
|
|
291
|
+
height: calc(var(--tt-viewport-height, 100dvh) - var(--_bar, 0px));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/* What goes in a contained layout is a designed screen (a page
|
|
295
|
+
header, a grid, a card), not one tt-page that spaces its own
|
|
296
|
+
children, so the content area spaces them, as a page would. */
|
|
297
|
+
:host([contained]) .content {
|
|
298
|
+
display: flex;
|
|
299
|
+
flex-direction: column;
|
|
300
|
+
gap: var(--tt-space-6);
|
|
301
|
+
|
|
302
|
+
overflow: visible;
|
|
303
|
+
scrollbar-gutter: auto;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
:host([contained]) .content ::slotted(*) {
|
|
307
|
+
min-width: 0;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/* ---- phones ----
|
|
160
311
|
|
|
161
|
-
|
|
162
|
-
|
|
312
|
+
The host's own height is the one rule that cannot follow the
|
|
313
|
+
container query (a container cannot query itself), so it asks the
|
|
314
|
+
window. For the full-window layout the two are the same width. */
|
|
315
|
+
|
|
316
|
+
@media (width < 768px) {
|
|
317
|
+
:host(:not([contained])) {
|
|
163
318
|
height: auto;
|
|
164
319
|
min-height: 100dvh;
|
|
165
320
|
}
|
|
321
|
+
}
|
|
166
322
|
|
|
323
|
+
@container (width < 768px) {
|
|
167
324
|
.layout {
|
|
168
325
|
height: auto;
|
|
169
|
-
min-height: 100dvh;
|
|
326
|
+
min-height: var(--tt-viewport-height, 100dvh);
|
|
170
327
|
}
|
|
171
328
|
|
|
172
329
|
.body {
|
|
@@ -198,12 +355,12 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
198
355
|
.sidebar {
|
|
199
356
|
position: fixed;
|
|
200
357
|
|
|
201
|
-
top: 60px;
|
|
358
|
+
top: var(--_bar, 60px);
|
|
202
359
|
left: 0;
|
|
203
360
|
bottom: 0;
|
|
204
361
|
|
|
205
362
|
width: 220px;
|
|
206
|
-
max-width:
|
|
363
|
+
max-width: 82cqi;
|
|
207
364
|
|
|
208
365
|
z-index: var(--tt-z-drawer);
|
|
209
366
|
|
|
@@ -218,18 +375,23 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
218
375
|
*/
|
|
219
376
|
visibility: hidden;
|
|
220
377
|
|
|
221
|
-
transition:
|
|
222
|
-
transform var(--tt-duration-slow) var(--tt-ease-out),
|
|
223
|
-
visibility 0s linear var(--tt-duration-slow);
|
|
224
|
-
|
|
225
378
|
box-shadow: var(--tt-elevation-3);
|
|
226
379
|
|
|
227
380
|
will-change: transform;
|
|
228
381
|
}
|
|
229
382
|
|
|
383
|
+
.settled .sidebar {
|
|
384
|
+
transition:
|
|
385
|
+
transform var(--tt-duration-slow) var(--tt-ease-out),
|
|
386
|
+
visibility 0s linear var(--tt-duration-slow);
|
|
387
|
+
}
|
|
388
|
+
|
|
230
389
|
.sidebar.open {
|
|
231
390
|
transform: translateX(0);
|
|
232
391
|
visibility: visible;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.settled .sidebar.open {
|
|
233
395
|
transition: transform var(--tt-duration-slow) var(--tt-ease-out);
|
|
234
396
|
}
|
|
235
397
|
|
|
@@ -257,12 +419,41 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
257
419
|
|
|
258
420
|
opacity: 1;
|
|
259
421
|
}
|
|
260
|
-
}
|
|
261
422
|
|
|
423
|
+
/*
|
|
424
|
+
Contained, nothing may be fixed to the window: in a preview or a
|
|
425
|
+
builder canvas the window is not the screen being drawn. So the
|
|
426
|
+
drawer and the backdrop are STICKY instead, pinned under the bar
|
|
427
|
+
exactly where fixed would put them, and a negative bottom margin
|
|
428
|
+
as tall as they are takes them out of the flow, so the content
|
|
429
|
+
starts where they do. They stay in the layout and follow the
|
|
430
|
+
page as it scrolls.
|
|
431
|
+
|
|
432
|
+
A contained layout pads its content on every side: what goes in
|
|
433
|
+
it is a designed screen, not a tt-page that brings its own
|
|
434
|
+
gutter. A phone's gap is a step smaller, like its gutter.
|
|
435
|
+
*/
|
|
436
|
+
:host([contained]) .content {
|
|
437
|
+
padding: var(--tt-space-4);
|
|
438
|
+
gap: var(--tt-space-4);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
:host([contained]) .sidebar,
|
|
442
|
+
:host([contained]) .backdrop {
|
|
443
|
+
--_screen: calc(var(--tt-viewport-height, 100dvh) - var(--_bar, 0px));
|
|
444
|
+
|
|
445
|
+
position: sticky;
|
|
446
|
+
top: var(--_bar, 0px);
|
|
447
|
+
bottom: auto;
|
|
448
|
+
|
|
449
|
+
height: var(--_screen);
|
|
450
|
+
margin-bottom: calc(-1 * var(--_screen));
|
|
451
|
+
}
|
|
452
|
+
}
|
|
262
453
|
`; }
|
|
263
454
|
render() {
|
|
264
455
|
return html `
|
|
265
|
-
<div class="layout" part="layout">
|
|
456
|
+
<div class="layout ${this.settled ? "settled" : ""}" part="layout">
|
|
266
457
|
|
|
267
458
|
<!-- Navbar -->
|
|
268
459
|
|
|
@@ -276,8 +467,8 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
276
467
|
<!-- Backdrop -->
|
|
277
468
|
|
|
278
469
|
<div
|
|
279
|
-
class="backdrop ${this.
|
|
280
|
-
@click=${this.
|
|
470
|
+
class="backdrop ${this.mobileMenuOpen ? "show" : ""}"
|
|
471
|
+
@click=${this.closeMenu}
|
|
281
472
|
></div>
|
|
282
473
|
|
|
283
474
|
<!-- Main body -->
|
|
@@ -288,7 +479,7 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
288
479
|
|
|
289
480
|
<aside
|
|
290
481
|
part="sidebar"
|
|
291
|
-
class="sidebar ${this.
|
|
482
|
+
class="sidebar ${this.mobileMenuOpen ? "open" : ""}"
|
|
292
483
|
>
|
|
293
484
|
<slot
|
|
294
485
|
name="sidebar"
|
|
@@ -308,9 +499,24 @@ let TTLayout = class TTLayout extends LitElement {
|
|
|
308
499
|
`;
|
|
309
500
|
}
|
|
310
501
|
};
|
|
502
|
+
__decorate([
|
|
503
|
+
property({ type: Boolean, reflect: true })
|
|
504
|
+
], TTLayout.prototype, "contained", void 0);
|
|
505
|
+
__decorate([
|
|
506
|
+
property({ type: Boolean, attribute: "mobile-menu-open" })
|
|
507
|
+
], TTLayout.prototype, "mobileMenuOpen", void 0);
|
|
508
|
+
__decorate([
|
|
509
|
+
query(".layout")
|
|
510
|
+
], TTLayout.prototype, "layoutEl", void 0);
|
|
511
|
+
__decorate([
|
|
512
|
+
query(".navbar")
|
|
513
|
+
], TTLayout.prototype, "navbarEl", void 0);
|
|
514
|
+
__decorate([
|
|
515
|
+
query(".backdrop")
|
|
516
|
+
], TTLayout.prototype, "backdropEl", void 0);
|
|
311
517
|
__decorate([
|
|
312
518
|
state()
|
|
313
|
-
], TTLayout.prototype, "
|
|
519
|
+
], TTLayout.prototype, "settled", void 0);
|
|
314
520
|
TTLayout = __decorate([
|
|
315
521
|
customElement("tt-layout")
|
|
316
522
|
], TTLayout);
|
package/dist/tt-layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tt-layout.js","sourceRoot":"","sources":["../src/tt-layout.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tt-layout.js","sourceRoot":"","sources":["../src/tt-layout.ts"],"names":[],"mappings":"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"}
|
package/dist/tt-modal.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
2
|
import type { PropertyValues } from "lit";
|
|
3
3
|
import "./tt-icon.js";
|
|
4
|
+
import type { TTStrings } from "./strings.js";
|
|
4
5
|
export type ModalSize = "small" | "medium" | "large";
|
|
5
6
|
export declare class TTModal extends LitElement {
|
|
7
|
+
/** This component's own text, over setStrings() (see strings.ts). */
|
|
8
|
+
strings: Partial<TTStrings>;
|
|
9
|
+
private text;
|
|
6
10
|
open: boolean;
|
|
7
11
|
heading: string;
|
|
8
12
|
size: ModalSize;
|
package/dist/tt-modal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tt-modal.d.ts","sourceRoot":"","sources":["../src/tt-modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAO1C,OAAO,cAAc,CAAC;AAEtB,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErD,qBACa,OAAQ,SAAQ,UAAU;
|
|
1
|
+
{"version":3,"file":"tt-modal.d.ts","sourceRoot":"","sources":["../src/tt-modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAO1C,OAAO,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErD,qBACa,OAAQ,SAAQ,UAAU;IACrC,qEAAqE;IACrC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAM;IAEjE,OAAO,CAAC,IAAI,CAA+B;IAK3C,IAAI,UAAS;IAKb,OAAO,SAAM;IAGb,IAAI,EAAE,SAAS,CAAY;IAS3B,UAAU,UAAS;IAInB,OAAO,UAAS;IAEhB,OAAO,CAAC,WAAW,CAA4B;IAQtC,OAAO,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,UAAU,CAAC,CAAa;IAEhC,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,iBAAiB;IAQzB,iBAAiB;IAWjB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,OAAO;IASf,oBAAoB;IAapB,UAAU,CAAC,OAAO,EAAE,cAAc;IAYlC,OAAO,CAAC,OAAO,EAAE,cAAc;IA2D/B,OAAO,CAAC,aAAa,CA4BnB;IAEF,MAAM,CAAC,MAAM,0BA2SX;IAEF,MAAM;CAmDP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
|
package/dist/tt-modal.js
CHANGED
|
@@ -10,9 +10,13 @@ import { lockScroll, unlockScroll } from "./scroll-lock.js";
|
|
|
10
10
|
import { deepActiveElement, pushOverlay, removeOverlay, isTopOverlay, trapTab } from "./overlay.js";
|
|
11
11
|
import { afterTransitions } from "./motion.js";
|
|
12
12
|
import "./tt-icon.js";
|
|
13
|
+
import { StringsController } from "./strings.js";
|
|
13
14
|
let TTModal = class TTModal extends LitElement {
|
|
14
15
|
constructor() {
|
|
15
16
|
super(...arguments);
|
|
17
|
+
/** This component's own text, over setStrings() (see strings.ts). */
|
|
18
|
+
this.strings = {};
|
|
19
|
+
this.text = new StringsController(this);
|
|
16
20
|
// Reflected, like open on tt-drawer and every other disclosure, so
|
|
17
21
|
// tt-modal[open] works as a selector.
|
|
18
22
|
this.open = false;
|
|
@@ -400,9 +404,12 @@ let TTModal = class TTModal extends LitElement {
|
|
|
400
404
|
color var(--tt-duration-normal) var(--tt-ease);
|
|
401
405
|
}
|
|
402
406
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
407
|
+
/* Only where a pointer can hover: a tap would leave this on. */
|
|
408
|
+
@media (hover: hover) {
|
|
409
|
+
.close:hover {
|
|
410
|
+
background: var(--tt-accent);
|
|
411
|
+
color: var(--_foreground);
|
|
412
|
+
}
|
|
406
413
|
}
|
|
407
414
|
|
|
408
415
|
.close:focus-visible {
|
|
@@ -507,7 +514,7 @@ let TTModal = class TTModal extends LitElement {
|
|
|
507
514
|
<button
|
|
508
515
|
part="close"
|
|
509
516
|
class="close"
|
|
510
|
-
aria-label
|
|
517
|
+
aria-label=${this.text.get("close")}
|
|
511
518
|
@click=${this.closeModal}
|
|
512
519
|
>
|
|
513
520
|
<tt-icon name="x" size="16px"></tt-icon>
|
|
@@ -528,6 +535,9 @@ let TTModal = class TTModal extends LitElement {
|
|
|
528
535
|
`;
|
|
529
536
|
}
|
|
530
537
|
};
|
|
538
|
+
__decorate([
|
|
539
|
+
property({ attribute: false })
|
|
540
|
+
], TTModal.prototype, "strings", void 0);
|
|
531
541
|
__decorate([
|
|
532
542
|
property({ type: Boolean, reflect: true })
|
|
533
543
|
], TTModal.prototype, "open", void 0);
|
package/dist/tt-modal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tt-modal.js","sourceRoot":"","sources":["../src/tt-modal.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"tt-modal.js","sourceRoot":"","sources":["../src/tt-modal.ts"],"names":[],"mappings":"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"}
|