@redvars/peacock 3.3.0 → 3.3.2
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/{IndividualComponent-tDnXrOLV.js → IndividualComponent-Dt5xirYG.js} +2 -2
- package/dist/{IndividualComponent-tDnXrOLV.js.map → IndividualComponent-Dt5xirYG.js.map} +1 -1
- package/dist/array-D5vjT2Xm.js +14 -0
- package/dist/array-D5vjT2Xm.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/{button-BGFJfbT2.js → button-ClzS8JLq.js} +3 -4
- package/dist/{button-BGFJfbT2.js.map → button-ClzS8JLq.js.map} +1 -1
- package/dist/button-group-BMS5WvaF.js +292 -0
- package/dist/button-group-BMS5WvaF.js.map +1 -0
- package/dist/button-group.js +6 -107
- package/dist/button-group.js.map +1 -1
- package/dist/button.js +3 -4
- package/dist/button.js.map +1 -1
- package/dist/card.js +104 -0
- package/dist/card.js.map +1 -0
- package/dist/chart-bar-DbnXQgvS.js +1121 -0
- package/dist/chart-bar-DbnXQgvS.js.map +1 -0
- package/dist/chart-bar.js +259 -0
- package/dist/chart-bar.js.map +1 -0
- package/dist/chart-donut.js +4 -2
- package/dist/chart-donut.js.map +1 -1
- package/dist/chart-doughnut.js +4 -2
- package/dist/chart-doughnut.js.map +1 -1
- package/dist/chart-pie.js +4 -2
- package/dist/chart-pie.js.map +1 -1
- package/dist/chart-stacked-bar.js +401 -0
- package/dist/chart-stacked-bar.js.map +1 -0
- package/dist/{class-map-DpeNtqCn.js → class-map-59YGWLnx.js} +9 -3
- package/dist/class-map-59YGWLnx.js.map +1 -0
- package/dist/clock.js +1 -1
- package/dist/code-editor.js +7 -7
- package/dist/code-editor.js.map +1 -1
- package/dist/code-highlighter.js +7 -25
- package/dist/code-highlighter.js.map +1 -1
- package/dist/custom-elements-jsdocs.json +8824 -5047
- package/dist/custom-elements.json +7468 -4147
- package/dist/index.js +16 -10
- package/dist/index.js.map +1 -1
- package/dist/number-counter.js +2 -2
- package/dist/{observe-theme-change-BISF-Gl5.js → observe-theme-change-pALI5fmV.js} +2 -2
- package/dist/{observe-theme-change-BISF-Gl5.js.map → observe-theme-change-pALI5fmV.js.map} +1 -1
- package/dist/peacock-loader.js +42 -1016
- package/dist/peacock-loader.js.map +1 -1
- package/dist/pie-Dz0IDiPt.js +537 -0
- package/dist/pie-Dz0IDiPt.js.map +1 -0
- package/dist/{slider-Dk9CFWTG.js → snackbar-74YCdMPL.js} +6205 -3206
- package/dist/snackbar-74YCdMPL.js.map +1 -0
- package/dist/src/accordion/accordion-item.d.ts +1 -0
- package/dist/src/breadcrumb/breadcrumb/breadcrumb.d.ts +2 -0
- package/dist/src/breadcrumb/breadcrumb-item/breadcrumb-item.d.ts +1 -0
- package/dist/src/button/button-group/button-group.d.ts +4 -0
- package/dist/src/card/card.d.ts +27 -0
- package/dist/src/card/index.d.ts +1 -0
- package/dist/src/chart-bar/chart-bar.d.ts +53 -0
- package/dist/src/chart-bar/chart-stacked-bar.d.ts +78 -0
- package/dist/src/chart-bar/index.d.ts +2 -0
- package/dist/src/code-editor/code-editor.d.ts +4 -3
- package/dist/src/code-highlighter/code-highlighter.d.ts +4 -7
- package/dist/src/index.d.ts +9 -0
- package/dist/src/menu/index.d.ts +3 -0
- package/dist/src/menu/menu/MenuSurfaceController.d.ts +18 -0
- package/dist/src/menu/menu/menu.d.ts +54 -12
- package/dist/src/menu/menu-item/menu-item.d.ts +12 -5
- package/dist/src/menu/sub-menu/sub-menu.d.ts +36 -0
- package/dist/src/pagination/index.d.ts +1 -0
- package/dist/src/pagination/pagination.d.ts +38 -0
- package/dist/src/popover/PopoverController.d.ts +4 -1
- package/dist/src/snackbar/index.d.ts +1 -0
- package/dist/src/snackbar/snackbar.d.ts +40 -0
- package/dist/src/table/index.d.ts +1 -0
- package/dist/src/table/table.d.ts +110 -0
- package/dist/src/tabs/tab-group.d.ts +5 -1
- package/dist/src/tabs/tab-panel.d.ts +2 -0
- package/dist/src/tabs/tab.d.ts +3 -1
- package/dist/src/tabs/tabs.d.ts +2 -0
- package/dist/src/tooltip/tooltip.d.ts +1 -3
- package/dist/src/tree-view/index.d.ts +2 -0
- package/dist/src/tree-view/tree-node.d.ts +69 -0
- package/dist/src/tree-view/tree-view.d.ts +40 -0
- package/dist/src/tree-view/wc-tree-view.d.ts +6 -0
- package/dist/{style-map-CfNHEkQp.js → style-map-DcB52w-l.js} +2 -2
- package/dist/{style-map-CfNHEkQp.js.map → style-map-DcB52w-l.js.map} +1 -1
- package/dist/test/card.test.d.ts +1 -0
- package/dist/test/chart-bar.test.d.ts +1 -0
- package/dist/test/icon.test.d.ts +1 -1
- package/dist/test/menu.test.d.ts +1 -0
- package/dist/test/snackbar.test.d.ts +1 -0
- package/dist/test/sub-menu.test.d.ts +1 -0
- package/dist/test/tree-view.test.d.ts +1 -0
- package/dist/{transform-DRuHEvar.js → transform-DSwFSqzD.js} +13 -558
- package/dist/transform-DSwFSqzD.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/{unsafe-html-CV6Je6HL.js → unsafe-html-C2r3PyzF.js} +2 -2
- package/dist/{unsafe-html-CV6Je6HL.js.map → unsafe-html-C2r3PyzF.js.map} +1 -1
- package/package.json +1 -1
- package/readme.md +40 -40
- package/src/accordion/accordion-item.ts +2 -1
- package/src/breadcrumb/breadcrumb/breadcrumb.ts +3 -0
- package/src/breadcrumb/breadcrumb-item/breadcrumb-item.ts +1 -0
- package/src/button/button-group/button-group.ts +6 -0
- package/src/card/card.scss +61 -0
- package/src/card/card.ts +38 -0
- package/src/card/index.ts +1 -0
- package/src/chart-bar/chart-bar.scss +58 -0
- package/src/chart-bar/chart-bar.ts +306 -0
- package/src/chart-bar/chart-stacked-bar.ts +402 -0
- package/src/chart-bar/index.ts +2 -0
- package/src/code-editor/code-editor.ts +4 -3
- package/src/code-highlighter/code-highlighter.ts +4 -22
- package/src/divider/divider.scss +2 -2
- package/src/empty-state/empty-state.scss +1 -1
- package/src/empty-state/empty-state.ts +1 -1
- package/src/index.ts +11 -2
- package/src/menu/index.ts +3 -0
- package/src/menu/menu/MenuSurfaceController.ts +61 -0
- package/src/menu/{menu-list/menu-list.scss → menu/menu.scss} +19 -4
- package/src/menu/menu/menu.ts +389 -81
- package/src/menu/menu-item/menu-item.ts +115 -36
- package/src/menu/sub-menu/sub-menu.scss +7 -0
- package/src/menu/sub-menu/sub-menu.ts +243 -0
- package/src/pagination/index.ts +1 -0
- package/src/pagination/pagination.scss +59 -0
- package/src/pagination/pagination.ts +135 -0
- package/src/peacock-loader.ts +39 -11
- package/src/popover/PopoverController.ts +13 -7
- package/src/snackbar/demo/index.html +29 -0
- package/src/snackbar/index.ts +1 -0
- package/src/snackbar/snackbar.scss +73 -0
- package/src/snackbar/snackbar.ts +151 -0
- package/src/table/index.ts +1 -0
- package/src/table/table.scss +174 -0
- package/src/table/table.ts +475 -0
- package/src/tabs/tab-group.ts +63 -28
- package/src/tabs/tab-panel.scss +3 -3
- package/src/tabs/tab-panel.ts +3 -0
- package/src/tabs/tab.scss +76 -2
- package/src/tabs/tab.ts +29 -6
- package/src/tabs/tabs.scss +6 -5
- package/src/tabs/tabs.ts +19 -5
- package/src/text/text.css-component.scss +6 -3
- package/src/tooltip/tooltip.scss +16 -13
- package/src/tooltip/tooltip.ts +7 -9
- package/src/tree-view/demo/index.html +57 -0
- package/src/tree-view/index.ts +2 -0
- package/src/tree-view/tree-node.scss +101 -0
- package/src/tree-view/tree-node.ts +268 -0
- package/src/tree-view/tree-view.scss +12 -0
- package/src/tree-view/tree-view.ts +182 -0
- package/src/tree-view/wc-tree-view.ts +9 -0
- package/dist/class-map-DpeNtqCn.js.map +0 -1
- package/dist/slider-Dk9CFWTG.js.map +0 -1
- package/dist/src/menu/menu-list/menu-list.d.ts +0 -22
- package/dist/state-8v48Exzh.js +0 -10
- package/dist/state-8v48Exzh.js.map +0 -1
- package/dist/transform-DRuHEvar.js.map +0 -1
- package/src/menu/menu-list/menu-list.ts +0 -48
package/src/tabs/tab.scss
CHANGED
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
display: flex;
|
|
35
35
|
align-items: center;
|
|
36
36
|
justify-content: center;
|
|
37
|
-
gap:
|
|
37
|
+
gap: 0;
|
|
38
38
|
width: 100%;
|
|
39
39
|
height: 100%;
|
|
40
40
|
z-index: 0;
|
|
@@ -47,6 +47,25 @@
|
|
|
47
47
|
.slot-container {
|
|
48
48
|
display: none;
|
|
49
49
|
}
|
|
50
|
+
|
|
51
|
+
::slotted([slot='icon']) {
|
|
52
|
+
flex: none;
|
|
53
|
+
color: var(--_label-text-color);
|
|
54
|
+
--icon-size: var(--tab-icon-size, var(--_tab-icon-size));
|
|
55
|
+
--icon-color: var(--_label-text-color);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
::slotted([slot='badge']) {
|
|
59
|
+
flex: none;
|
|
60
|
+
margin-inline-start: var(--_tab-badge-label-spacing, 0);
|
|
61
|
+
--badge-color: var(--_tab-badge-color, var(--color-error));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
&.has-icon {
|
|
66
|
+
.tab-content {
|
|
67
|
+
gap: var(--_tab-icon-label-spacing);
|
|
68
|
+
}
|
|
50
69
|
}
|
|
51
70
|
|
|
52
71
|
.indicator {
|
|
@@ -112,6 +131,10 @@
|
|
|
112
131
|
:host-context([variant='line']) .tab {
|
|
113
132
|
--_tab-height: 100%;
|
|
114
133
|
--_container-padding: 1rem;
|
|
134
|
+
--_tab-icon-size: 1.5rem;
|
|
135
|
+
--_tab-icon-label-spacing: 0.5rem;
|
|
136
|
+
--_tab-badge-label-spacing: 0.25rem;
|
|
137
|
+
--_tab-badge-color: var(--color-error);
|
|
115
138
|
|
|
116
139
|
--_label-text-color: var(--color-on-surface);
|
|
117
140
|
--_container-state-color: var(--_label-text-color);
|
|
@@ -121,7 +144,7 @@
|
|
|
121
144
|
--_container-shape-end-end: var(--shape-corner-small);
|
|
122
145
|
--_active-indicator-color: var(--color-primary);
|
|
123
146
|
--_active-indicator-shape: 3px 3px 0 0;
|
|
124
|
-
--_active-indicator-height:
|
|
147
|
+
--_active-indicator-height: 3px;
|
|
125
148
|
|
|
126
149
|
.focus-ring {
|
|
127
150
|
inset: 3px 3px 4px 3px;
|
|
@@ -146,6 +169,57 @@
|
|
|
146
169
|
--_container-state-opacity: 0.12;
|
|
147
170
|
}
|
|
148
171
|
|
|
172
|
+
&.disabled {
|
|
173
|
+
--_label-text-color: var(--color-on-surface);
|
|
174
|
+
--_label-text-opacity: 0.38;
|
|
175
|
+
|
|
176
|
+
.ripple {
|
|
177
|
+
display: none;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
:host-context([variant='line-secondary']) .tab {
|
|
183
|
+
--_tab-height: 100%;
|
|
184
|
+
--_container-padding: 1rem;
|
|
185
|
+
--_tab-icon-size: 1.25rem;
|
|
186
|
+
--_tab-icon-label-spacing: 0.5rem;
|
|
187
|
+
--_tab-badge-label-spacing: 0.25rem;
|
|
188
|
+
--_tab-badge-color: var(--color-error);
|
|
189
|
+
|
|
190
|
+
--_label-text-color: var(--color-on-surface);
|
|
191
|
+
--_container-state-color: var(--_label-text-color);
|
|
192
|
+
--_container-shape-start-start: var(--shape-corner-small);
|
|
193
|
+
--_container-shape-start-end: var(--shape-corner-small);
|
|
194
|
+
--_container-shape-end-start: var(--shape-corner-small);
|
|
195
|
+
--_container-shape-end-end: var(--shape-corner-small);
|
|
196
|
+
--_active-indicator-color: var(--color-primary);
|
|
197
|
+
--_active-indicator-shape: 0;
|
|
198
|
+
--_active-indicator-height: 2px;
|
|
199
|
+
|
|
200
|
+
.focus-ring {
|
|
201
|
+
inset: 3px 3px 4px 3px;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
&.active {
|
|
205
|
+
|
|
206
|
+
.indicator.secondary {
|
|
207
|
+
opacity: 1;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.focus-ring {
|
|
211
|
+
inset: 3px 3px calc(4px + var(--_active-indicator-height)) 3px;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
&:hover:not(:where(.disabled)) {
|
|
216
|
+
--_container-state-opacity: 0.08;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
&.pressed:not(:where(.disabled)) {
|
|
220
|
+
--_container-state-opacity: 0.12;
|
|
221
|
+
}
|
|
222
|
+
|
|
149
223
|
&.disabled {
|
|
150
224
|
--_label-text-color: var(--color-on-surface);
|
|
151
225
|
--_label-text-opacity: 0.38;
|
package/src/tabs/tab.ts
CHANGED
|
@@ -10,6 +10,7 @@ import styles from './tab.scss';
|
|
|
10
10
|
* @label Tab
|
|
11
11
|
* @tag wc-tab
|
|
12
12
|
* @rawTag tab
|
|
13
|
+
* @parentRawTag tabs
|
|
13
14
|
*
|
|
14
15
|
* @summary A tab component for use within tabs.
|
|
15
16
|
* @overview
|
|
@@ -33,8 +34,6 @@ export class Tab extends LitElement {
|
|
|
33
34
|
|
|
34
35
|
@property({ type: String }) disabledReason = '';
|
|
35
36
|
|
|
36
|
-
@property({ type: String }) icon?: string;
|
|
37
|
-
|
|
38
37
|
@property({ type: String }) label?: string;
|
|
39
38
|
|
|
40
39
|
@property({ type: String }) value?: string;
|
|
@@ -58,6 +57,10 @@ export class Tab extends LitElement {
|
|
|
58
57
|
|
|
59
58
|
@state() slotHasContent = false;
|
|
60
59
|
|
|
60
|
+
@state() slotHasIcon = false;
|
|
61
|
+
|
|
62
|
+
@state() slotHasBadge = false;
|
|
63
|
+
|
|
61
64
|
/**
|
|
62
65
|
* States
|
|
63
66
|
*/
|
|
@@ -94,6 +97,22 @@ export class Tab extends LitElement {
|
|
|
94
97
|
this.requestUpdate();
|
|
95
98
|
},
|
|
96
99
|
);
|
|
100
|
+
|
|
101
|
+
observerSlotChangesWithCallback(
|
|
102
|
+
this.renderRoot.querySelector('slot[name="icon"]'),
|
|
103
|
+
hasContent => {
|
|
104
|
+
this.slotHasIcon = hasContent;
|
|
105
|
+
this.requestUpdate();
|
|
106
|
+
},
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
observerSlotChangesWithCallback(
|
|
110
|
+
this.renderRoot.querySelector('slot[name="badge"]'),
|
|
111
|
+
hasContent => {
|
|
112
|
+
this.slotHasBadge = hasContent;
|
|
113
|
+
this.requestUpdate();
|
|
114
|
+
},
|
|
115
|
+
);
|
|
97
116
|
}
|
|
98
117
|
|
|
99
118
|
__dispatchClickWithThrottle: (event: MouseEvent | KeyboardEvent) => void =
|
|
@@ -158,7 +177,9 @@ export class Tab extends LitElement {
|
|
|
158
177
|
disabled: this.disabled,
|
|
159
178
|
pressed: this.isPressed,
|
|
160
179
|
active: this.active,
|
|
161
|
-
'has-content': this.slotHasContent
|
|
180
|
+
'has-content': this.slotHasContent || !!this.label,
|
|
181
|
+
'has-icon': this.slotHasIcon,
|
|
182
|
+
'has-badge': this.slotHasBadge,
|
|
162
183
|
};
|
|
163
184
|
|
|
164
185
|
|
|
@@ -205,16 +226,18 @@ export class Tab extends LitElement {
|
|
|
205
226
|
<wc-ripple class="ripple"></wc-ripple>
|
|
206
227
|
|
|
207
228
|
<div class="tab-content">
|
|
229
|
+
<slot name="icon"></slot>
|
|
230
|
+
|
|
208
231
|
<div class="slot-container">
|
|
209
|
-
<slot
|
|
232
|
+
<slot>${this.label || nothing}</slot>
|
|
210
233
|
</div>
|
|
211
234
|
|
|
212
|
-
<slot name="
|
|
235
|
+
<slot name="badge"></slot>
|
|
213
236
|
|
|
214
237
|
<div class="indicator"></div>
|
|
215
238
|
</div>
|
|
216
239
|
|
|
217
|
-
<div class="indicator"></div>
|
|
240
|
+
<div class="secondary indicator"></div>
|
|
218
241
|
|
|
219
242
|
${this.__renderDisabledReason()}
|
|
220
243
|
`;
|
package/src/tabs/tabs.scss
CHANGED
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
@include mixin.base-styles;
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
.tabs {
|
|
6
7
|
display: flex;
|
|
7
8
|
position: relative;
|
|
8
9
|
width: 100%;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
:host-context([variant='line']) {
|
|
12
|
-
--tabs-
|
|
12
|
+
:host-context([variant='line']), :host([variant='line']) {
|
|
13
|
+
--tabs-height: 3rem;
|
|
13
14
|
|
|
14
|
-
.tabs
|
|
15
|
-
height: var(--tabs-
|
|
15
|
+
.tabs {
|
|
16
|
+
height: var(--tabs-height);
|
|
16
17
|
border-bottom: 1px solid var(--color-surface-variant);
|
|
17
18
|
}
|
|
18
19
|
}
|
package/src/tabs/tabs.ts
CHANGED
|
@@ -24,6 +24,8 @@ import { Tab } from './tab.js';
|
|
|
24
24
|
export class Tabs extends LitElement {
|
|
25
25
|
static styles = [styles];
|
|
26
26
|
|
|
27
|
+
static Tab = Tab;
|
|
28
|
+
|
|
27
29
|
@property({ type: Boolean }) managed = false;
|
|
28
30
|
|
|
29
31
|
connectedCallback() {
|
|
@@ -42,21 +44,33 @@ export class Tabs extends LitElement {
|
|
|
42
44
|
const detailEvent = event as CustomEvent;
|
|
43
45
|
const path = detailEvent.composedPath();
|
|
44
46
|
const clickedTab: Tab | undefined = path.find(
|
|
45
|
-
node => node instanceof Element && (node as Element).tagName.toLowerCase() === '
|
|
47
|
+
node => node instanceof Element && (node as Element).tagName.toLowerCase() === 'wc-tab',
|
|
46
48
|
) as Tab | undefined;
|
|
47
49
|
|
|
48
50
|
if (!clickedTab) return;
|
|
49
51
|
|
|
50
|
-
const tabs
|
|
51
|
-
|
|
52
|
+
const tabs = Array.from(this.querySelectorAll('wc-tab')) as Tab[];
|
|
53
|
+
let clickedIndex = -1;
|
|
54
|
+
for (let index = 0; index < tabs.length; index += 1) {
|
|
55
|
+
const tab = tabs[index];
|
|
52
56
|
tab.active = false;
|
|
53
|
-
|
|
57
|
+
if (tab === clickedTab) clickedIndex = index;
|
|
58
|
+
}
|
|
54
59
|
(clickedTab as Tab).active = true;
|
|
60
|
+
|
|
61
|
+
this.dispatchEvent(new CustomEvent('tab-click', {
|
|
62
|
+
bubbles: true,
|
|
63
|
+
composed: true,
|
|
64
|
+
detail: {
|
|
65
|
+
index: clickedIndex,
|
|
66
|
+
value: (clickedTab as Tab).value,
|
|
67
|
+
},
|
|
68
|
+
}));
|
|
55
69
|
};
|
|
56
70
|
|
|
57
71
|
render() {
|
|
58
72
|
return html`
|
|
59
|
-
<div class="tabs
|
|
73
|
+
<div class="tabs">
|
|
60
74
|
<slot></slot>
|
|
61
75
|
</div>
|
|
62
76
|
`;
|
|
@@ -49,8 +49,11 @@ $sizes: "large", "medium", 'small';
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
.text-code-block {
|
|
52
|
-
|
|
53
|
-
background: var(--color-
|
|
52
|
+
display: inline-flex;
|
|
53
|
+
background-color: var(--color-surface-variant);
|
|
54
|
+
text-shadow: 0 1px 1px var(--color-surface-variant);
|
|
55
|
+
color: var(--color-on-surface);
|
|
54
56
|
border-radius: var(--shape-corner-extra-small);
|
|
55
|
-
padding
|
|
57
|
+
padding: var(--spacing-050);
|
|
58
|
+
font-family: var(--font-family-monospace);
|
|
56
59
|
}
|
package/src/tooltip/tooltip.scss
CHANGED
|
@@ -3,20 +3,23 @@
|
|
|
3
3
|
|
|
4
4
|
@include mixin.base-styles;
|
|
5
5
|
|
|
6
|
-
.tooltip {
|
|
7
|
-
pointer-events: none;
|
|
8
|
-
transition: transform var(--duration-short2) ease-in-out, opacity var(--duration-short2) ease-in-out;
|
|
9
|
-
transform: scale(0);
|
|
10
|
-
position: absolute;
|
|
11
|
-
top: 0;
|
|
12
|
-
left: 0;
|
|
13
|
-
opacity: 0;
|
|
14
|
-
}
|
|
15
6
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
7
|
+
:host(:not([preview])) {
|
|
8
|
+
.tooltip {
|
|
9
|
+
pointer-events: none;
|
|
10
|
+
transition: transform var(--duration-short2) ease-in-out, opacity var(--duration-short2) ease-in-out;
|
|
11
|
+
transform: scale(0);
|
|
12
|
+
position: absolute;
|
|
13
|
+
top: 0;
|
|
14
|
+
left: 0;
|
|
15
|
+
opacity: 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.tooltip.open {
|
|
19
|
+
pointer-events: auto;
|
|
20
|
+
transform: scale(1);
|
|
21
|
+
opacity: 1;
|
|
22
|
+
}
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
.variant-plain .tooltip-content {
|
package/src/tooltip/tooltip.ts
CHANGED
|
@@ -16,9 +16,7 @@ export type TooltipTrigger = 'hover' | 'focus' | 'click';
|
|
|
16
16
|
*
|
|
17
17
|
* @example
|
|
18
18
|
* ```html
|
|
19
|
-
* <wc-tooltip
|
|
20
|
-
* <button>Hover me</button>
|
|
21
|
-
* </wc-tooltip>
|
|
19
|
+
* <wc-tooltip preview>Tooltip</wc-tooltip>
|
|
22
20
|
* ```
|
|
23
21
|
*/
|
|
24
22
|
export class Tooltip extends LitElement {
|
|
@@ -58,13 +56,13 @@ export class Tooltip extends LitElement {
|
|
|
58
56
|
|
|
59
57
|
// Define listeners as arrow functions to maintain 'this' context
|
|
60
58
|
private _onMouseEnter = () => {
|
|
61
|
-
if (!this.hasTrigger('hover')) return;
|
|
59
|
+
if (this.preview || !this.hasTrigger('hover')) return;
|
|
62
60
|
window.clearTimeout(this._hideTimeout); // Cancel any pending close
|
|
63
61
|
this.show();
|
|
64
62
|
};
|
|
65
63
|
|
|
66
64
|
private _onMouseLeave = () => {
|
|
67
|
-
if (!this.hasTrigger('hover')) return;
|
|
65
|
+
if (this.preview || !this.hasTrigger('hover')) return;
|
|
68
66
|
|
|
69
67
|
// Small delay allows the mouse to move from target -> tooltip
|
|
70
68
|
// without the tooltip vanishing instantly.
|
|
@@ -79,17 +77,17 @@ export class Tooltip extends LitElement {
|
|
|
79
77
|
}, 100); // 100ms is usually enough for a smooth transition
|
|
80
78
|
};
|
|
81
79
|
|
|
82
|
-
private _onFocusIn = () => this.hasTrigger('focus') && this.show();
|
|
80
|
+
private _onFocusIn = () => this.preview && this.hasTrigger('focus') && this.show();
|
|
83
81
|
|
|
84
82
|
private _onFocusOut = (e: FocusEvent) => {
|
|
85
|
-
if (!this.hasTrigger('focus')) return;
|
|
83
|
+
if (this.preview || !this.hasTrigger('focus')) return;
|
|
86
84
|
if (this._target && !this._target.contains(e.relatedTarget as Node)) {
|
|
87
85
|
this.hide();
|
|
88
86
|
}
|
|
89
87
|
};
|
|
90
88
|
|
|
91
89
|
private _onClick = (e: MouseEvent) => {
|
|
92
|
-
if (!this.hasTrigger('click')) return;
|
|
90
|
+
if (this.preview || !this.hasTrigger('click')) return;
|
|
93
91
|
e.stopPropagation();
|
|
94
92
|
this.toggle();
|
|
95
93
|
};
|
|
@@ -176,7 +174,7 @@ export class Tooltip extends LitElement {
|
|
|
176
174
|
this.attachListeners();
|
|
177
175
|
}
|
|
178
176
|
|
|
179
|
-
if (changedProps.has('open') && this.open && this._target
|
|
177
|
+
if (changedProps.has('open') && this.open && this._target) {
|
|
180
178
|
this._popover.updatePosition(this._target, this.floatingEl);
|
|
181
179
|
}
|
|
182
180
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang='en-GB'>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset='utf-8'>
|
|
5
|
+
<meta name='viewport' content='width=device-width, initial-scale=1.0, viewport-fit=cover' />
|
|
6
|
+
<link rel='stylesheet' href='/dist/assets/styles/tokens.css' />
|
|
7
|
+
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+Mono:wght@100..900&family=Noto+Sans:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet">
|
|
8
|
+
|
|
9
|
+
<style>
|
|
10
|
+
body {
|
|
11
|
+
background: #fafafa;
|
|
12
|
+
padding: 2rem;
|
|
13
|
+
font-family: 'Noto Sans', sans-serif;
|
|
14
|
+
}
|
|
15
|
+
h2 {
|
|
16
|
+
margin-top: 2rem;
|
|
17
|
+
margin-bottom: 0.5rem;
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
20
|
+
</head>
|
|
21
|
+
<body>
|
|
22
|
+
|
|
23
|
+
<h2>Basic Tree View</h2>
|
|
24
|
+
<wc-tree-view>
|
|
25
|
+
<wc-tree-node label="Documents" icon="folder" expanded>
|
|
26
|
+
<wc-tree-node label="Work" icon="folder" expanded>
|
|
27
|
+
<wc-tree-node label="Project A" icon="description"></wc-tree-node>
|
|
28
|
+
<wc-tree-node label="Project B" icon="description"></wc-tree-node>
|
|
29
|
+
</wc-tree-node>
|
|
30
|
+
<wc-tree-node label="Personal" icon="folder">
|
|
31
|
+
<wc-tree-node label="Resume.pdf" icon="picture_as_pdf"></wc-tree-node>
|
|
32
|
+
</wc-tree-node>
|
|
33
|
+
</wc-tree-node>
|
|
34
|
+
<wc-tree-node label="Pictures" icon="photo_library">
|
|
35
|
+
<wc-tree-node label="Vacation.jpg" icon="image"></wc-tree-node>
|
|
36
|
+
<wc-tree-node label="Family.jpg" icon="image"></wc-tree-node>
|
|
37
|
+
</wc-tree-node>
|
|
38
|
+
<wc-tree-node label="Disabled Node" icon="block" disabled></wc-tree-node>
|
|
39
|
+
</wc-tree-view>
|
|
40
|
+
|
|
41
|
+
<h2>Tree View without Icons</h2>
|
|
42
|
+
<wc-tree-view>
|
|
43
|
+
<wc-tree-node label="Category 1" expanded>
|
|
44
|
+
<wc-tree-node label="Item 1.1"></wc-tree-node>
|
|
45
|
+
<wc-tree-node label="Item 1.2">
|
|
46
|
+
<wc-tree-node label="Item 1.2.1"></wc-tree-node>
|
|
47
|
+
<wc-tree-node label="Item 1.2.2"></wc-tree-node>
|
|
48
|
+
</wc-tree-node>
|
|
49
|
+
</wc-tree-node>
|
|
50
|
+
<wc-tree-node label="Category 2">
|
|
51
|
+
<wc-tree-node label="Item 2.1"></wc-tree-node>
|
|
52
|
+
</wc-tree-node>
|
|
53
|
+
</wc-tree-view>
|
|
54
|
+
|
|
55
|
+
<script type='module' src='/dist/peacock-loader.js'></script>
|
|
56
|
+
</body>
|
|
57
|
+
</html>
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
@use '../../scss/mixin';
|
|
2
|
+
|
|
3
|
+
@include mixin.base-styles;
|
|
4
|
+
|
|
5
|
+
:host {
|
|
6
|
+
display: block;
|
|
7
|
+
|
|
8
|
+
// M3 tree node sizing
|
|
9
|
+
--tree-node-height: 2.5rem;
|
|
10
|
+
--tree-node-icon-size: 1.25rem;
|
|
11
|
+
--tree-node-border-radius: var(--global-shape-corner-full, 9999px);
|
|
12
|
+
|
|
13
|
+
// M3 color tokens
|
|
14
|
+
--tree-node-label-color: var(--color-on-surface);
|
|
15
|
+
--tree-node-icon-color: var(--color-on-surface-variant);
|
|
16
|
+
--tree-node-selected-background: var(--color-secondary-container);
|
|
17
|
+
--tree-node-selected-color: var(--color-on-secondary-container);
|
|
18
|
+
--tree-node-hover-background: var(--color-inverse-primary);
|
|
19
|
+
--tree-node-focus-ring-color: var(--color-primary);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.tree-node {
|
|
23
|
+
display: block;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.tree-node-content {
|
|
27
|
+
display: flex;
|
|
28
|
+
align-items: center;
|
|
29
|
+
gap: 0.25rem;
|
|
30
|
+
height: var(--tree-node-height);
|
|
31
|
+
border-radius: var(--tree-node-border-radius);
|
|
32
|
+
color: var(--tree-node-label-color);
|
|
33
|
+
cursor: pointer;
|
|
34
|
+
user-select: none;
|
|
35
|
+
text-decoration: none;
|
|
36
|
+
outline: none;
|
|
37
|
+
|
|
38
|
+
@include mixin.get-typography(body-medium);
|
|
39
|
+
|
|
40
|
+
&:not(.disabled):hover {
|
|
41
|
+
background-color: var(--tree-node-hover-background);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
&:focus-visible {
|
|
45
|
+
@include mixin.focus-ring(var(--tree-node-focus-ring-color));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&.selected {
|
|
49
|
+
background-color: var(--tree-node-selected-background);
|
|
50
|
+
color: var(--tree-node-selected-color);
|
|
51
|
+
|
|
52
|
+
.node-icon {
|
|
53
|
+
--icon-color: var(--tree-node-selected-color);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&.disabled {
|
|
58
|
+
cursor: not-allowed;
|
|
59
|
+
opacity: 0.38;
|
|
60
|
+
pointer-events: none;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.expand-icon {
|
|
65
|
+
--icon-size: var(--tree-node-icon-size);
|
|
66
|
+
--icon-color: var(--tree-node-icon-color);
|
|
67
|
+
flex-shrink: 0;
|
|
68
|
+
transition: transform var(--duration-short2, 200ms) var(--easing-standard, ease);
|
|
69
|
+
|
|
70
|
+
&.expanded {
|
|
71
|
+
transform: rotate(90deg);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.icon-space {
|
|
76
|
+
display: inline-block;
|
|
77
|
+
width: var(--tree-node-icon-size);
|
|
78
|
+
height: var(--tree-node-icon-size);
|
|
79
|
+
flex-shrink: 0;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.node-icon {
|
|
83
|
+
--icon-size: var(--tree-node-icon-size);
|
|
84
|
+
--icon-color: var(--tree-node-icon-color);
|
|
85
|
+
flex-shrink: 0;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.tree-node-label {
|
|
89
|
+
flex: 1;
|
|
90
|
+
overflow: hidden;
|
|
91
|
+
text-overflow: ellipsis;
|
|
92
|
+
white-space: nowrap;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.node-children {
|
|
96
|
+
display: none;
|
|
97
|
+
|
|
98
|
+
&.expanded {
|
|
99
|
+
display: block;
|
|
100
|
+
}
|
|
101
|
+
}
|