@redvars/peacock 3.4.0 → 3.5.1
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/dist/BaseButton-DuASuVth.js +219 -0
- package/dist/BaseButton-DuASuVth.js.map +1 -0
- package/dist/BaseHyperlinkMixin-BNuwbiEf.js +65 -0
- package/dist/BaseHyperlinkMixin-BNuwbiEf.js.map +1 -0
- package/dist/assets/components.css +1 -1
- package/dist/assets/components.css.map +1 -1
- package/dist/assets/styles.css +1 -1
- package/dist/assets/styles.css.map +1 -1
- package/dist/banner.js +187 -0
- package/dist/banner.js.map +1 -0
- package/dist/bottom-sheet.js +2 -2
- package/dist/{button-COYCtuA8.js → button-DouvOfEU.js} +92 -283
- package/dist/button-DouvOfEU.js.map +1 -0
- package/dist/{button-group-DsXquZQn.js → button-group-CEdMwvJJ.js} +72 -48
- package/dist/button-group-CEdMwvJJ.js.map +1 -0
- package/dist/button-group.js +8 -5
- package/dist/button-group.js.map +1 -1
- package/dist/button.js +7 -4
- package/dist/button.js.map +1 -1
- package/dist/card.js +29 -74
- package/dist/card.js.map +1 -1
- package/dist/chart-bar.js +2 -2
- package/dist/chart-bar.js.map +1 -1
- package/dist/chart-doughnut.js +2 -2
- package/dist/chart-doughnut.js.map +1 -1
- package/dist/chart-pie.js +2 -2
- package/dist/chart-pie.js.map +1 -1
- package/dist/chart-stacked-bar.js +2 -2
- package/dist/chart-stacked-bar.js.map +1 -1
- package/dist/{class-map-3TAnCMAX.js → class-map-YU7g0o3B.js} +2 -2
- package/dist/{class-map-3TAnCMAX.js.map → class-map-YU7g0o3B.js.map} +1 -1
- package/dist/clock.js.map +1 -1
- package/dist/code-editor.js +4 -4
- package/dist/code-editor.js.map +1 -1
- package/dist/code-highlighter.js +5 -4
- package/dist/code-highlighter.js.map +1 -1
- package/dist/custom-elements-jsdocs.json +6627 -3477
- package/dist/custom-elements.json +10954 -7810
- package/dist/directive-ZPhl09Yt.js +9 -0
- package/dist/directive-ZPhl09Yt.js.map +1 -0
- package/dist/dispatch-event-utils-CuEqjlPT.js +127 -0
- package/dist/dispatch-event-utils-CuEqjlPT.js.map +1 -0
- package/dist/fab.js +423 -0
- package/dist/fab.js.map +1 -0
- package/dist/index.js +17 -9
- package/dist/index.js.map +1 -1
- package/dist/{observe-theme-change-DKAIv5BB.js → is-dark-mode-DicqGkCJ.js} +6 -2
- package/dist/is-dark-mode-DicqGkCJ.js.map +1 -0
- package/dist/{select-C3XAzenC.js → navigation-rail-Lxetd5-Z.js} +2426 -898
- package/dist/navigation-rail-Lxetd5-Z.js.map +1 -0
- package/dist/notification.js +418 -0
- package/dist/notification.js.map +1 -0
- package/dist/number-counter.js +2 -2
- package/dist/number-counter.js.map +1 -1
- package/dist/observe-slot-change-BGJfgg2E.js +31 -0
- package/dist/observe-slot-change-BGJfgg2E.js.map +1 -0
- package/dist/peacock-loader.js +48 -13
- package/dist/peacock-loader.js.map +1 -1
- package/dist/search.js +456 -0
- package/dist/search.js.map +1 -0
- package/dist/side-sheet.js +2 -2
- package/dist/src/__mixins/BaseButtonMixin.d.ts +20 -0
- package/dist/src/__mixins/BaseHyperlinkMixin.d.ts +18 -0
- package/dist/src/__mixins/MixinConstructor.d.ts +1 -0
- package/dist/src/__utils/cache-fetch.d.ts +1 -0
- package/dist/src/__utils/is-dark-mode.d.ts +1 -0
- package/dist/src/__utils/is-in-viewport.d.ts +1 -0
- package/dist/src/__utils/observe-slot-change.d.ts +1 -0
- package/dist/src/__utils/sanitize-svg.d.ts +1 -0
- package/dist/src/__utils/throttle.d.ts +4 -0
- package/dist/src/accordion/accordion-item.d.ts +33 -9
- package/dist/src/accordion/accordion.d.ts +21 -5
- package/dist/src/banner/banner.d.ts +43 -0
- package/dist/src/banner/index.d.ts +1 -0
- package/dist/src/button/BaseButton.d.ts +7 -57
- package/dist/src/button/button/button.d.ts +32 -3
- package/dist/src/button/button-group/button-group.d.ts +4 -4
- package/dist/src/button/icon-button/icon-button.d.ts +33 -8
- package/dist/src/card/card.d.ts +4 -15
- package/dist/src/empty-state/empty-state.d.ts +1 -1
- package/dist/src/fab/fab.d.ts +80 -0
- package/dist/src/fab/index.d.ts +1 -0
- package/dist/src/focus-ring/focus-ring.d.ts +11 -5
- package/dist/src/index.d.ts +8 -1
- package/dist/src/link/link.d.ts +3 -10
- package/dist/src/menu/menu/menu.d.ts +3 -2
- package/dist/src/menu/sub-menu/sub-menu.d.ts +1 -0
- package/dist/src/navigation-rail/index.d.ts +2 -0
- package/dist/src/navigation-rail/navigation-rail-item.d.ts +55 -0
- package/dist/src/navigation-rail/navigation-rail.d.ts +71 -0
- package/dist/src/notification/index.d.ts +1 -0
- package/dist/src/notification/notification.d.ts +69 -0
- package/dist/src/pagination/pagination.d.ts +8 -1
- package/dist/src/search/index.d.ts +1 -0
- package/dist/src/search/search.d.ts +76 -0
- package/dist/src/select/select.d.ts +3 -5
- package/dist/src/sidebar-menu/index.d.ts +3 -0
- package/dist/src/sidebar-menu/sidebar-menu-item.d.ts +58 -0
- package/dist/src/sidebar-menu/sidebar-menu.d.ts +38 -0
- package/dist/src/sidebar-menu/sidebar-sub-menu.d.ts +35 -0
- package/dist/src/slider/slider.d.ts +4 -0
- package/dist/src/snackbar/snackbar.d.ts +14 -1
- package/dist/src/toolbar/index.d.ts +1 -0
- package/dist/src/toolbar/toolbar.d.ts +86 -0
- package/dist/src/tooltip/tooltip.d.ts +3 -0
- package/dist/src/url-field/index.d.ts +1 -0
- package/dist/src/url-field/url-field.d.ts +48 -0
- package/dist/{style-map-CRFEoCEg.js → style-map-DVmWOuYy.js} +2 -2
- package/dist/{style-map-CRFEoCEg.js.map → style-map-DVmWOuYy.js.map} +1 -1
- package/dist/test/banner.test.d.ts +1 -0
- package/dist/test/search.test.d.ts +1 -0
- package/dist/test/sidebar-menu.test.d.ts +1 -0
- package/dist/test/toolbar.test.d.ts +1 -0
- package/dist/toolbar.js +306 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/{unsafe-html-D3GHRaGQ.js → unsafe-html-BsGUjx94.js} +2 -2
- package/dist/{unsafe-html-D3GHRaGQ.js.map → unsafe-html-BsGUjx94.js.map} +1 -1
- package/package.json +1 -1
- package/readme.md +73 -65
- package/scss/mixin.scss +16 -0
- package/scss/styles.scss +4 -0
- package/src/__mixins/BaseButtonMixin.ts +83 -0
- package/src/__mixins/BaseHyperlinkMixin.ts +68 -0
- package/src/__mixins/MixinConstructor.ts +1 -0
- package/src/__mixins/README.md +19 -0
- package/src/__utils/cache-fetch.ts +65 -0
- package/src/__utils/is-dark-mode.ts +3 -0
- package/src/__utils/is-in-viewport.ts +6 -0
- package/src/__utils/observe-slot-change.ts +38 -0
- package/src/__utils/sanitize-svg.ts +27 -0
- package/src/__utils/throttle.ts +27 -0
- package/src/accordion/accordion-item.scss +136 -65
- package/src/accordion/accordion-item.ts +117 -44
- package/src/accordion/accordion.scss +24 -5
- package/src/accordion/accordion.ts +29 -23
- package/src/accordion/demo/index.html +74 -35
- package/src/banner/banner.scss +83 -0
- package/src/banner/banner.ts +101 -0
- package/src/banner/index.ts +1 -0
- package/src/button/BaseButton.ts +13 -115
- package/src/button/button/button-colors.scss +14 -14
- package/src/button/button/button-sizes.scss +4 -2
- package/src/button/button/button.ts +80 -26
- package/src/button/button-group/button-group.ts +5 -5
- package/src/button/icon-button/icon-button.ts +79 -44
- package/src/card/card.ts +50 -100
- package/src/chart-bar/chart-bar.ts +10 -15
- package/src/chart-bar/chart-stacked-bar.ts +15 -19
- package/src/chart-doughnut/chart-doughnut.ts +24 -28
- package/src/chart-pie/chart-pie.ts +20 -24
- package/src/checkbox/checkbox.scss +17 -34
- package/src/checkbox/checkbox.ts +4 -2
- package/src/clock/clock.ts +1 -1
- package/src/code-editor/code-editor.ts +4 -4
- package/src/code-highlighter/code-highlighter.scss +1 -0
- package/src/code-highlighter/code-highlighter.ts +3 -3
- package/src/date-picker/date-picker.ts +6 -3
- package/src/divider/divider.ts +3 -1
- package/src/elevation/elevation.scss +5 -5
- package/src/empty-state/empty-state.scss +7 -9
- package/src/empty-state/empty-state.ts +1 -1
- package/src/fab/fab-colors.scss +49 -0
- package/src/fab/fab-sizes.scss +47 -0
- package/src/fab/fab.scss +137 -0
- package/src/fab/fab.ts +214 -0
- package/src/fab/index.ts +1 -0
- package/src/field/field.ts +3 -1
- package/src/focus-ring/focus-ring.ts +47 -40
- package/src/icon/datasource.ts +1 -1
- package/src/icon/icon.ts +3 -1
- package/src/image/image.ts +3 -2
- package/src/index.ts +8 -1
- package/src/input/input.ts +8 -3
- package/src/link/link.ts +2 -15
- package/src/menu/menu/menu.scss +7 -0
- package/src/menu/menu/menu.ts +7 -4
- package/src/menu/menu-item/menu-item.ts +3 -1
- package/src/menu/sub-menu/sub-menu.ts +1 -0
- package/src/navigation-rail/index.ts +2 -0
- package/src/navigation-rail/navigation-rail-item.scss +216 -0
- package/src/navigation-rail/navigation-rail-item.ts +223 -0
- package/src/navigation-rail/navigation-rail.scss +72 -0
- package/src/navigation-rail/navigation-rail.ts +149 -0
- package/src/notification/index.ts +1 -0
- package/src/notification/notification.scss +201 -0
- package/src/notification/notification.ts +207 -0
- package/src/number-counter/number-counter.ts +3 -1
- package/src/number-field/number-field.ts +10 -6
- package/src/pagination/pagination.scss +33 -24
- package/src/pagination/pagination.ts +115 -60
- package/src/peacock-loader.ts +42 -5
- package/src/radio/radio.ts +3 -1
- package/src/search/index.ts +1 -0
- package/src/search/search-colors.scss +14 -0
- package/src/search/search.scss +204 -0
- package/src/search/search.ts +244 -0
- package/src/select/option.ts +1 -1
- package/src/select/select.scss +5 -0
- package/src/select/select.ts +71 -37
- package/src/sidebar-menu/demo/index.html +68 -0
- package/src/sidebar-menu/index.ts +3 -0
- package/src/sidebar-menu/sidebar-menu-item.scss +102 -0
- package/src/sidebar-menu/sidebar-menu-item.ts +151 -0
- package/src/{tree-view/tree-view.scss → sidebar-menu/sidebar-menu.scss} +1 -1
- package/src/sidebar-menu/sidebar-menu.ts +182 -0
- package/src/sidebar-menu/sidebar-sub-menu.scss +130 -0
- package/src/sidebar-menu/sidebar-sub-menu.ts +160 -0
- package/src/skeleton/skeleton.scss +18 -24
- package/src/slider/slider.scss +19 -0
- package/src/slider/slider.ts +30 -19
- package/src/snackbar/snackbar.scss +62 -31
- package/src/snackbar/snackbar.ts +91 -11
- package/src/switch/switch.ts +3 -1
- package/src/table/table.ts +3 -1
- package/src/tabs/tab.ts +10 -6
- package/src/text/text.css-component.scss +7 -1
- package/src/textarea/textarea.ts +4 -2
- package/src/time-picker/time-picker.ts +5 -3
- package/src/toolbar/index.ts +1 -0
- package/src/toolbar/toolbar-colors.scss +16 -0
- package/src/toolbar/toolbar.scss +165 -0
- package/src/toolbar/toolbar.ts +137 -0
- package/src/tooltip/tooltip.ts +24 -0
- package/src/url-field/index.ts +1 -0
- package/src/url-field/url-field.scss +50 -0
- package/src/url-field/url-field.ts +239 -0
- package/dist/button-COYCtuA8.js.map +0 -1
- package/dist/button-group-DsXquZQn.js.map +0 -1
- package/dist/directive-Cuw6h7YA.js +0 -9
- package/dist/directive-Cuw6h7YA.js.map +0 -1
- package/dist/dispatch-event-utils-B4odODQf.js +0 -277
- package/dist/dispatch-event-utils-B4odODQf.js.map +0 -1
- package/dist/observe-theme-change-DKAIv5BB.js.map +0 -1
- package/dist/select-C3XAzenC.js.map +0 -1
- package/dist/src/styleMixins.css.d.ts +0 -9
- package/dist/src/tree-view/index.d.ts +0 -2
- package/dist/src/tree-view/tree-node.d.ts +0 -69
- package/dist/src/tree-view/tree-view.d.ts +0 -40
- package/dist/src/tree-view/wc-tree-view.d.ts +0 -6
- package/dist/src/utils.d.ts +0 -9
- package/dist/test/tree-view.test.d.ts +0 -1
- package/src/styleMixins.css.ts +0 -55
- package/src/tree-view/demo/index.html +0 -57
- package/src/tree-view/index.ts +0 -2
- package/src/tree-view/tree-node.scss +0 -101
- package/src/tree-view/tree-node.ts +0 -268
- package/src/tree-view/tree-view.ts +0 -182
- package/src/tree-view/wc-tree-view.ts +0 -9
- package/src/utils.ts +0 -193
- /package/dist/src/{spread.d.ts → __directive/spread.d.ts} +0 -0
- /package/dist/src/{utils → __utils}/copy-to-clipboard.d.ts +0 -0
- /package/dist/src/{utils → __utils}/dispatch-event-utils.d.ts +0 -0
- /package/dist/src/{utils → __utils}/observe-theme-change.d.ts +0 -0
- /package/src/{spread.ts → __directive/spread.ts} +0 -0
- /package/src/{utils → __utils}/copy-to-clipboard.ts +0 -0
- /package/src/{utils → __utils}/dispatch-event-utils.ts +0 -0
- /package/src/{utils → __utils}/observe-theme-change.ts +0 -0
package/src/slider/slider.scss
CHANGED
|
@@ -15,6 +15,17 @@
|
|
|
15
15
|
touch-action: none; // Prevent scrolling while dragging
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
.slider {
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
gap: var(--spacing-100, 0.5rem);
|
|
22
|
+
width: 100%;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.slider.with-value .slider-container {
|
|
26
|
+
flex: 1;
|
|
27
|
+
}
|
|
28
|
+
|
|
18
29
|
.slider-container {
|
|
19
30
|
position: relative;
|
|
20
31
|
display: flex;
|
|
@@ -29,6 +40,14 @@
|
|
|
29
40
|
}
|
|
30
41
|
}
|
|
31
42
|
|
|
43
|
+
.value-display {
|
|
44
|
+
min-width: 2.25rem;
|
|
45
|
+
text-align: end;
|
|
46
|
+
color: var(--color-on-surface-variant);
|
|
47
|
+
font-size: 0.875rem;
|
|
48
|
+
font-weight: 500;
|
|
49
|
+
}
|
|
50
|
+
|
|
32
51
|
.track {
|
|
33
52
|
position: absolute;
|
|
34
53
|
width: 100%;
|
package/src/slider/slider.ts
CHANGED
|
@@ -51,9 +51,15 @@ export class Slider extends LitElement {
|
|
|
51
51
|
*/
|
|
52
52
|
@property({ type: Boolean }) labeled = true;
|
|
53
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Whether to show the current value beside the slider.
|
|
56
|
+
*/
|
|
57
|
+
@property({ type: Boolean, attribute: 'show-value' }) showValue = false;
|
|
58
|
+
|
|
54
59
|
@state() private isDragging = false;
|
|
55
60
|
|
|
56
61
|
@query('.slider-container') private container!: HTMLElement;
|
|
62
|
+
|
|
57
63
|
@query('.thumb') private thumbElement!: HTMLElement;
|
|
58
64
|
|
|
59
65
|
private handleInput(event: MouseEvent | TouchEvent) {
|
|
@@ -150,28 +156,33 @@ export class Slider extends LitElement {
|
|
|
150
156
|
const percentage = ((this.value - this.min) / (this.max - this.min)) * 100;
|
|
151
157
|
|
|
152
158
|
return html`
|
|
153
|
-
<div
|
|
154
|
-
class="slider-container ${this.disabled ? 'disabled' : ''}"
|
|
155
|
-
@mousedown=${this.onMouseDown}
|
|
156
|
-
@touchstart=${this.onMouseDown}
|
|
157
|
-
>
|
|
158
|
-
<div class="track">
|
|
159
|
-
<div class="track-active" style=${styleMap({ width: `${percentage}%` })}></div>
|
|
160
|
-
</div>
|
|
161
|
-
|
|
159
|
+
<div class="slider ${this.showValue ? 'with-value' : ''}">
|
|
162
160
|
<div
|
|
163
|
-
class="
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
aria-valuemin=${this.min}
|
|
167
|
-
aria-valuemax=${this.max}
|
|
168
|
-
aria-valuenow=${this.value}
|
|
169
|
-
aria-disabled=${this.disabled}
|
|
170
|
-
style=${styleMap({ left: `calc(${percentage}% - var(--thumb-half))` })}
|
|
171
|
-
@keydown=${this.handleKeyDown}
|
|
161
|
+
class="slider-container ${this.disabled ? 'disabled' : ''}"
|
|
162
|
+
@mousedown=${this.onMouseDown}
|
|
163
|
+
@touchstart=${this.onMouseDown}
|
|
172
164
|
>
|
|
173
|
-
|
|
165
|
+
<div class="track">
|
|
166
|
+
<div class="track-active" style=${styleMap({ width: `${percentage}%` })}></div>
|
|
167
|
+
</div>
|
|
168
|
+
|
|
169
|
+
<div
|
|
170
|
+
class="thumb"
|
|
171
|
+
role="slider"
|
|
172
|
+
aria-label="Slider"
|
|
173
|
+
tabindex="${this.disabled ? -1 : 0}"
|
|
174
|
+
aria-valuemin=${this.min}
|
|
175
|
+
aria-valuemax=${this.max}
|
|
176
|
+
aria-valuenow=${this.value}
|
|
177
|
+
aria-disabled=${this.disabled}
|
|
178
|
+
style=${styleMap({ left: `calc(${percentage}% - var(--thumb-half))` })}
|
|
179
|
+
@keydown=${this.handleKeyDown}
|
|
180
|
+
>
|
|
181
|
+
${this.labeled ? html`<div class="value-label">${this.value}</div>` : ''}
|
|
182
|
+
</div>
|
|
174
183
|
</div>
|
|
184
|
+
|
|
185
|
+
${this.showValue ? html`<output class="value-display" aria-live="polite">${this.value}</output>` : ''}
|
|
175
186
|
</div>
|
|
176
187
|
`;
|
|
177
188
|
}
|
|
@@ -2,10 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
@include mixin.base-styles;
|
|
4
4
|
|
|
5
|
+
@keyframes snackbar-enter {
|
|
6
|
+
from {
|
|
7
|
+
opacity: 0;
|
|
8
|
+
transform: translateY(0.5rem);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
to {
|
|
12
|
+
opacity: 1;
|
|
13
|
+
transform: translateY(0);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@keyframes snackbar-exit {
|
|
18
|
+
from {
|
|
19
|
+
opacity: 1;
|
|
20
|
+
transform: translateY(0);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
to {
|
|
24
|
+
opacity: 0;
|
|
25
|
+
transform: translateY(0.5rem);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
5
29
|
:host {
|
|
6
|
-
display:
|
|
7
|
-
|
|
8
|
-
|
|
30
|
+
display: flex;
|
|
31
|
+
inset-block-end: calc(var(--snackbar-offset-bottom, 1rem) + env(safe-area-inset-bottom, 0px));
|
|
32
|
+
inset-inline: var(--snackbar-offset-inline, 1rem);
|
|
33
|
+
justify-content: center;
|
|
34
|
+
pointer-events: none;
|
|
35
|
+
position: fixed;
|
|
36
|
+
z-index: var(--snackbar-z-index, 1000);
|
|
9
37
|
|
|
10
38
|
--snackbar-container-color: var(--color-inverse-surface);
|
|
11
39
|
--snackbar-label-text-color: var(--color-inverse-on-surface);
|
|
@@ -20,54 +48,57 @@
|
|
|
20
48
|
background-color: var(--snackbar-container-color);
|
|
21
49
|
border-radius: var(--snackbar-border-radius);
|
|
22
50
|
color: var(--snackbar-label-text-color);
|
|
23
|
-
display:
|
|
51
|
+
display: none;
|
|
24
52
|
gap: var(--spacing-100);
|
|
53
|
+
max-width: min(42rem, 100%);
|
|
54
|
+
min-width: min(21.5rem, 100%);
|
|
25
55
|
min-height: 3rem;
|
|
26
|
-
opacity: 0;
|
|
27
56
|
padding: var(--spacing-100) var(--spacing-200);
|
|
28
57
|
pointer-events: none;
|
|
29
|
-
transform: translateY(0.5rem);
|
|
30
|
-
transition: opacity var(--duration-short2) var(--easing-standard),
|
|
31
|
-
transform var(--duration-short2) var(--easing-standard);
|
|
32
58
|
}
|
|
33
59
|
|
|
34
60
|
.snackbar.open {
|
|
35
|
-
|
|
61
|
+
animation: snackbar-enter var(--duration-medium1, 300ms) var(--easing-standard, cubic-bezier(0.2, 0, 0, 1)) both;
|
|
62
|
+
display: inline-flex;
|
|
36
63
|
pointer-events: auto;
|
|
37
|
-
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.snackbar.open.dismissing {
|
|
67
|
+
animation: snackbar-exit var(--duration-short2, 150ms) var(--easing-standard, cubic-bezier(0.2, 0, 0, 1)) forwards;
|
|
68
|
+
pointer-events: none;
|
|
38
69
|
}
|
|
39
70
|
|
|
40
71
|
.label {
|
|
41
72
|
flex: 1 1 auto;
|
|
42
73
|
color: inherit;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
.action,
|
|
46
|
-
.close {
|
|
47
|
-
@include mixin.get-typography(label-large);
|
|
74
|
+
min-height: 32px;
|
|
48
75
|
align-items: center;
|
|
49
|
-
|
|
50
|
-
border: none;
|
|
51
|
-
color: var(--snackbar-action-text-color);
|
|
52
|
-
cursor: pointer;
|
|
53
|
-
display: inline-flex;
|
|
54
|
-
justify-content: center;
|
|
55
|
-
margin: 0;
|
|
56
|
-
min-height: 2rem;
|
|
57
|
-
min-width: 2rem;
|
|
58
|
-
padding: 0 var(--spacing-100);
|
|
76
|
+
display: flex;
|
|
59
77
|
}
|
|
60
78
|
|
|
61
|
-
.
|
|
62
|
-
color: var(--snackbar-
|
|
63
|
-
padding: 0;
|
|
79
|
+
.action {
|
|
80
|
+
--text-button-label-text-color: var(--snackbar-action-text-color);
|
|
64
81
|
}
|
|
65
82
|
|
|
66
|
-
.close
|
|
67
|
-
--
|
|
68
|
-
color: inherit;
|
|
83
|
+
.close {
|
|
84
|
+
--text-button-label-text-color: var(--snackbar-close-icon-color);
|
|
69
85
|
}
|
|
70
86
|
|
|
71
87
|
.snackbar.multiline {
|
|
72
88
|
align-items: flex-start;
|
|
89
|
+
|
|
90
|
+
.label {
|
|
91
|
+
height: 100%;
|
|
92
|
+
}
|
|
73
93
|
}
|
|
94
|
+
|
|
95
|
+
:host([preview]) {
|
|
96
|
+
position: relative;
|
|
97
|
+
inset-inline: unset;
|
|
98
|
+
inset-block-end: unset;
|
|
99
|
+
|
|
100
|
+
.snackbar {
|
|
101
|
+
display: inline-flex;
|
|
102
|
+
pointer-events: auto;
|
|
103
|
+
}
|
|
104
|
+
}
|
package/src/snackbar/snackbar.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LitElement, html, nothing } from 'lit';
|
|
2
|
-
import { property } from 'lit/decorators.js';
|
|
2
|
+
import { property, state } from 'lit/decorators.js';
|
|
3
3
|
import { classMap } from 'lit/directives/class-map.js';
|
|
4
4
|
import styles from './snackbar.scss';
|
|
5
5
|
|
|
@@ -16,16 +16,23 @@ type SnackbarCloseReason = 'timeout' | 'dismiss' | 'action' | 'programmatic';
|
|
|
16
16
|
* @cssprop --snackbar-action-text-color - Action text color.
|
|
17
17
|
* @cssprop --snackbar-close-icon-color - Close icon color.
|
|
18
18
|
* @cssprop --snackbar-border-radius - Border radius of the snackbar surface.
|
|
19
|
+
* @cssprop --snackbar-offset-inline - Inline offset from viewport edges.
|
|
20
|
+
* @cssprop --snackbar-offset-bottom - Bottom offset from viewport edge.
|
|
21
|
+
* @cssprop --snackbar-z-index - Stacking order for the snackbar.
|
|
19
22
|
*
|
|
20
23
|
* @example
|
|
21
24
|
* ```html
|
|
22
|
-
* <wc-snackbar
|
|
25
|
+
* <wc-snackbar preview message="Message archived" action-label="Undo"></wc-snackbar>
|
|
23
26
|
* ```
|
|
24
27
|
* @tags display, feedback
|
|
25
28
|
*/
|
|
26
29
|
export class Snackbar extends LitElement {
|
|
27
30
|
static styles = [styles];
|
|
28
31
|
|
|
32
|
+
private static readonly GLOBAL_OPEN_EVENT = 'wc-snackbar-will-open';
|
|
33
|
+
|
|
34
|
+
private static readonly EXIT_ANIMATION_MS = 180;
|
|
35
|
+
|
|
29
36
|
@property({ type: Boolean, reflect: true }) open = false;
|
|
30
37
|
|
|
31
38
|
@property({ type: String }) message = '';
|
|
@@ -39,10 +46,41 @@ export class Snackbar extends LitElement {
|
|
|
39
46
|
|
|
40
47
|
@property({ type: Boolean, reflect: true }) multiline = false;
|
|
41
48
|
|
|
49
|
+
@property({ type: Boolean, reflect: true }) preview = false;
|
|
50
|
+
|
|
51
|
+
@state() private dismissing = false;
|
|
52
|
+
|
|
53
|
+
|
|
42
54
|
private hideTimer: ReturnType<typeof setTimeout> | null = null;
|
|
43
55
|
|
|
56
|
+
private exitTimer: ReturnType<typeof setTimeout> | null = null;
|
|
57
|
+
|
|
58
|
+
private readonly handleGlobalSnackbarOpen = (
|
|
59
|
+
event: Event,
|
|
60
|
+
) => {
|
|
61
|
+
const { source } = (event as CustomEvent<{ source?: Snackbar }>).detail;
|
|
62
|
+
if (source && source !== this) {
|
|
63
|
+
this.hide();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
connectedCallback() {
|
|
68
|
+
super.connectedCallback();
|
|
69
|
+
document.addEventListener(
|
|
70
|
+
Snackbar.GLOBAL_OPEN_EVENT,
|
|
71
|
+
this.handleGlobalSnackbarOpen,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
44
75
|
show() {
|
|
45
|
-
this.
|
|
76
|
+
this.dismissing = false;
|
|
77
|
+
this.clearExitTimer();
|
|
78
|
+
if (!this.open) {
|
|
79
|
+
this.open = true;
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
this.scheduleAutoHide();
|
|
46
84
|
}
|
|
47
85
|
|
|
48
86
|
hide() {
|
|
@@ -50,11 +88,17 @@ export class Snackbar extends LitElement {
|
|
|
50
88
|
}
|
|
51
89
|
|
|
52
90
|
private close(reason: SnackbarCloseReason) {
|
|
53
|
-
if (!this.open) {
|
|
91
|
+
if (!this.open || this.dismissing) {
|
|
54
92
|
return;
|
|
55
93
|
}
|
|
56
94
|
|
|
57
|
-
this.
|
|
95
|
+
this.clearTimer();
|
|
96
|
+
this.dismissing = true;
|
|
97
|
+
this.clearExitTimer();
|
|
98
|
+
this.exitTimer = setTimeout(() => {
|
|
99
|
+
this.completeDismiss();
|
|
100
|
+
}, Snackbar.EXIT_ANIMATION_MS);
|
|
101
|
+
|
|
58
102
|
this.dispatchEvent(
|
|
59
103
|
new CustomEvent('snackbar-close', {
|
|
60
104
|
detail: { reason },
|
|
@@ -64,6 +108,12 @@ export class Snackbar extends LitElement {
|
|
|
64
108
|
);
|
|
65
109
|
}
|
|
66
110
|
|
|
111
|
+
private completeDismiss() {
|
|
112
|
+
this.clearExitTimer();
|
|
113
|
+
this.dismissing = false;
|
|
114
|
+
this.open = false;
|
|
115
|
+
}
|
|
116
|
+
|
|
67
117
|
private dispatchActionEvent() {
|
|
68
118
|
this.dispatchEvent(
|
|
69
119
|
new CustomEvent('snackbar-action', {
|
|
@@ -89,6 +139,19 @@ export class Snackbar extends LitElement {
|
|
|
89
139
|
}
|
|
90
140
|
}
|
|
91
141
|
|
|
142
|
+
private clearExitTimer() {
|
|
143
|
+
if (this.exitTimer !== null) {
|
|
144
|
+
clearTimeout(this.exitTimer);
|
|
145
|
+
this.exitTimer = null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private handleAnimationEnd(event: AnimationEvent) {
|
|
150
|
+
if (event.animationName === 'snackbar-exit' && this.dismissing) {
|
|
151
|
+
this.completeDismiss();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
92
155
|
private scheduleAutoHide() {
|
|
93
156
|
this.clearTimer();
|
|
94
157
|
if (!this.open || this.duration <= 0) {
|
|
@@ -102,11 +165,24 @@ export class Snackbar extends LitElement {
|
|
|
102
165
|
|
|
103
166
|
protected updated(changedProperties: Map<string, unknown>) {
|
|
104
167
|
if (changedProperties.has('open')) {
|
|
168
|
+
if (this.open) {
|
|
169
|
+
document.dispatchEvent(
|
|
170
|
+
new CustomEvent(Snackbar.GLOBAL_OPEN_EVENT, {
|
|
171
|
+
detail: { source: this },
|
|
172
|
+
}),
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
|
|
105
176
|
this.scheduleAutoHide();
|
|
106
177
|
}
|
|
107
178
|
}
|
|
108
179
|
|
|
109
180
|
disconnectedCallback() {
|
|
181
|
+
document.removeEventListener(
|
|
182
|
+
Snackbar.GLOBAL_OPEN_EVENT,
|
|
183
|
+
this.handleGlobalSnackbarOpen,
|
|
184
|
+
);
|
|
185
|
+
this.clearExitTimer();
|
|
110
186
|
this.clearTimer();
|
|
111
187
|
super.disconnectedCallback();
|
|
112
188
|
}
|
|
@@ -119,31 +195,35 @@ export class Snackbar extends LitElement {
|
|
|
119
195
|
<div
|
|
120
196
|
class=${classMap({
|
|
121
197
|
snackbar: true,
|
|
122
|
-
open: this.open,
|
|
198
|
+
open: !this.preview && this.open,
|
|
199
|
+
preview: this.preview,
|
|
200
|
+
dismissing: this.dismissing,
|
|
123
201
|
multiline: this.multiline,
|
|
124
202
|
})}
|
|
125
203
|
role=${liveRole}
|
|
126
204
|
aria-live="polite"
|
|
205
|
+
@animationend=${this.handleAnimationEnd}
|
|
127
206
|
>
|
|
128
207
|
<div class="label">
|
|
129
208
|
<slot>${this.message}</slot>
|
|
130
209
|
</div>
|
|
131
210
|
|
|
132
211
|
${this.actionLabel
|
|
133
|
-
? html`<button class="action"
|
|
212
|
+
? html`<wc-button class="action" variant='text' size='small' @click=${this.handleActionClick}>
|
|
134
213
|
${this.actionLabel}
|
|
135
|
-
</button>`
|
|
214
|
+
</wc-button>`
|
|
136
215
|
: nothing}
|
|
137
216
|
|
|
138
217
|
${this.showCloseIcon
|
|
139
|
-
? html`<button
|
|
218
|
+
? html`<wc-icon-button
|
|
140
219
|
class="close"
|
|
141
|
-
|
|
220
|
+
variant='text'
|
|
221
|
+
size='small'
|
|
142
222
|
aria-label="Dismiss notification"
|
|
143
223
|
@click=${this.handleCloseClick}
|
|
144
224
|
>
|
|
145
225
|
<wc-icon name="close"></wc-icon>
|
|
146
|
-
</button>`
|
|
226
|
+
</wc-icon-button>`
|
|
147
227
|
: nothing}
|
|
148
228
|
</div>
|
|
149
229
|
`;
|
package/src/switch/switch.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { html, nothing } from 'lit';
|
|
2
2
|
import { property, query, state } from 'lit/decorators.js';
|
|
3
3
|
import { classMap } from 'lit/directives/class-map.js';
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
import { spread } from '@/__directive/spread.js';
|
|
6
|
+
|
|
5
7
|
import styles from './switch.scss';
|
|
6
8
|
import BaseInput from '../input/BaseInput.js';
|
|
7
9
|
|
package/src/table/table.ts
CHANGED
|
@@ -2,7 +2,9 @@ import { html, LitElement, nothing } from 'lit';
|
|
|
2
2
|
import { property, state } from 'lit/decorators.js';
|
|
3
3
|
import { classMap } from 'lit/directives/class-map.js';
|
|
4
4
|
import { unsafeHTML } from 'lit/directives/unsafe-html.js';
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
import { throttle } from '@/__utils/throttle.js';
|
|
7
|
+
|
|
6
8
|
import styles from './table.scss';
|
|
7
9
|
|
|
8
10
|
const DEFAULT_CELL_WIDTH = 16; // in rem
|
package/src/tabs/tab.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { html, LitElement, nothing } from 'lit';
|
|
2
2
|
import { property, query, state } from 'lit/decorators.js';
|
|
3
3
|
import { classMap } from 'lit/directives/class-map.js';
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
|
|
5
|
+
import { dispatchActivationClick, isActivationClick } from '@/__utils/dispatch-event-utils.js';
|
|
6
|
+
import { observerSlotChangesWithCallback } from '@/__utils/observe-slot-change.js';
|
|
7
|
+
import { throttle } from '@/__utils/throttle.js';
|
|
8
|
+
import { spread } from '@/__directive/spread.js';
|
|
9
|
+
|
|
7
10
|
import styles from './tab.scss';
|
|
8
11
|
import type { Tabs } from './tabs.js';
|
|
9
12
|
|
|
@@ -190,6 +193,7 @@ export class Tab extends LitElement {
|
|
|
190
193
|
|
|
191
194
|
if (!isLink) {
|
|
192
195
|
return html`<button
|
|
196
|
+
id="button"
|
|
193
197
|
class=${classMap(cssClasses)}
|
|
194
198
|
tabindex="0"
|
|
195
199
|
@mousedown=${this.__handlePress}
|
|
@@ -238,7 +242,7 @@ export class Tab extends LitElement {
|
|
|
238
242
|
|
|
239
243
|
renderPrimaryTabContent() {
|
|
240
244
|
return html`
|
|
241
|
-
<wc-focus-ring class="focus-ring"
|
|
245
|
+
<wc-focus-ring class="focus-ring" for='button'></wc-focus-ring>
|
|
242
246
|
<wc-elevation class="elevation"></wc-elevation>
|
|
243
247
|
<div class="background"></div>
|
|
244
248
|
<div class="outline"></div>
|
|
@@ -264,7 +268,7 @@ export class Tab extends LitElement {
|
|
|
264
268
|
|
|
265
269
|
renderSecondaryTabContent() {
|
|
266
270
|
return html`
|
|
267
|
-
<wc-focus-ring class="focus-ring"
|
|
271
|
+
<wc-focus-ring class="focus-ring" for='button'></wc-focus-ring>
|
|
268
272
|
<wc-elevation class="elevation"></wc-elevation>
|
|
269
273
|
<div class="background"></div>
|
|
270
274
|
<div class="outline"></div>
|
|
@@ -297,7 +301,7 @@ export class Tab extends LitElement {
|
|
|
297
301
|
|
|
298
302
|
renderSegmentedTabContent() {
|
|
299
303
|
return html`
|
|
300
|
-
<wc-focus-ring class="focus-ring"
|
|
304
|
+
<wc-focus-ring class="focus-ring" for='button'></wc-focus-ring>
|
|
301
305
|
<wc-elevation class="elevation"></wc-elevation>
|
|
302
306
|
<div class="background"></div>
|
|
303
307
|
<div class="outline"></div>
|
|
@@ -49,11 +49,17 @@ $sizes: "large", "medium", 'small';
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
.text-code-block {
|
|
52
|
-
display: inline-flex;
|
|
53
52
|
background-color: var(--color-surface-variant);
|
|
54
53
|
text-shadow: 0 1px 1px var(--color-surface-variant);
|
|
55
54
|
color: var(--color-on-surface);
|
|
56
55
|
border-radius: var(--shape-corner-extra-small);
|
|
57
56
|
padding: var(--spacing-050);
|
|
58
57
|
font-family: var(--font-family-monospace);
|
|
58
|
+
|
|
59
|
+
display: inline-block;
|
|
60
|
+
max-width: 100%;
|
|
61
|
+
white-space: pre-wrap;
|
|
62
|
+
word-break: break-word;
|
|
63
|
+
overflow-wrap: anywhere;
|
|
64
|
+
vertical-align: middle;
|
|
59
65
|
}
|
package/src/textarea/textarea.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { html } from 'lit';
|
|
2
2
|
import { property, query, state } from 'lit/decorators.js';
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
import { redispatchEvent } from '@/__utils/dispatch-event-utils.js';
|
|
5
|
+
import { spread } from '@/__directive/spread.js';
|
|
6
|
+
|
|
4
7
|
import BaseInput from '../input/BaseInput.js';
|
|
5
8
|
import styles from './textarea.scss';
|
|
6
|
-
import { spread } from '../spread.js';
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* @label Textarea
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { html } from 'lit';
|
|
2
2
|
import { property, query, state } from 'lit/decorators.js';
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
import { redispatchEvent } from '@/__utils/dispatch-event-utils.js';
|
|
5
|
+
import { spread } from '@/__directive/spread.js';
|
|
6
|
+
|
|
4
7
|
import BaseInput from '../input/BaseInput.js';
|
|
5
8
|
import styles from './time-picker.scss';
|
|
6
|
-
import { spread } from '../spread.js';
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* @label Time Picker
|
|
@@ -165,7 +167,6 @@ export class TimePicker extends BaseInput {
|
|
|
165
167
|
slot="field-end"
|
|
166
168
|
color="secondary"
|
|
167
169
|
variant="text"
|
|
168
|
-
name="calendar_today"
|
|
169
170
|
?disabled=${this.disabled}
|
|
170
171
|
@click=${() => {
|
|
171
172
|
setTimeout(() => {
|
|
@@ -174,6 +175,7 @@ export class TimePicker extends BaseInput {
|
|
|
174
175
|
});
|
|
175
176
|
}}
|
|
176
177
|
>
|
|
178
|
+
<wc-icon name="calendar_today"></wc-icon>
|
|
177
179
|
</wc-icon-button>
|
|
178
180
|
</wc-field>
|
|
179
181
|
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Toolbar } from './toolbar.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
/* Docked toolbar */
|
|
3
|
+
--toolbar-container-color: var(--color-surface-container);
|
|
4
|
+
--toolbar-title-color: var(--color-on-surface);
|
|
5
|
+
--toolbar-icon-color: var(--color-on-surface-variant);
|
|
6
|
+
|
|
7
|
+
/* Internal aliases used by styles */
|
|
8
|
+
--_toolbar-container-color: var(--toolbar-container-color);
|
|
9
|
+
--_toolbar-title-color: var(--toolbar-title-color);
|
|
10
|
+
--_toolbar-icon-color: var(--toolbar-icon-color);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/* Floating variant uses surface-container-high for a visible pill */
|
|
14
|
+
:host([variant='floating']) {
|
|
15
|
+
--toolbar-container-color: var(--color-surface-container-high);
|
|
16
|
+
}
|