@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
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { CSSResult } from 'lit';
|
|
2
|
-
export declare const focusRing: (color?: string) => CSSResult;
|
|
3
|
-
export declare const getTypography: (name: string) => CSSResult;
|
|
4
|
-
export declare const getTypographyNotImportant: (name: string) => CSSResult;
|
|
5
|
-
export declare const forPhoneOnly: (content: CSSResult) => CSSResult;
|
|
6
|
-
export declare const forTabletPortraitUp: (content: CSSResult) => CSSResult;
|
|
7
|
-
export declare const forTabletLandscapeUp: (content: CSSResult) => CSSResult;
|
|
8
|
-
export declare const forDesktopUp: (content: CSSResult) => CSSResult;
|
|
9
|
-
export declare const forBigDesktopUp: (content: CSSResult) => CSSResult;
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
2
|
-
/**
|
|
3
|
-
* @label Tree Node
|
|
4
|
-
* @tag wc-tree-node
|
|
5
|
-
* @rawTag tree-node
|
|
6
|
-
* @parentRawTag tree-view
|
|
7
|
-
* @summary A tree node represents a single item in a hierarchical tree structure. It supports nesting, icons, links, and keyboard navigation.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```html
|
|
11
|
-
* <wc-tree-view>
|
|
12
|
-
* <wc-tree-node label="Parent">
|
|
13
|
-
* <wc-tree-node label="Child"></wc-tree-node>
|
|
14
|
-
* </wc-tree-node>
|
|
15
|
-
* </wc-tree-view>
|
|
16
|
-
* ```
|
|
17
|
-
* @tags navigation
|
|
18
|
-
*/
|
|
19
|
-
export declare class TreeNode extends LitElement {
|
|
20
|
-
static styles: import("lit").CSSResultGroup[];
|
|
21
|
-
/**
|
|
22
|
-
* The value used to identify this node when selected.
|
|
23
|
-
*/
|
|
24
|
-
value: string;
|
|
25
|
-
/**
|
|
26
|
-
* The display label for this node.
|
|
27
|
-
*/
|
|
28
|
-
label: string;
|
|
29
|
-
/**
|
|
30
|
-
* Optional icon name to display before the label.
|
|
31
|
-
*/
|
|
32
|
-
icon: string;
|
|
33
|
-
/**
|
|
34
|
-
* Optional hyperlink to navigate to on click.
|
|
35
|
-
*/
|
|
36
|
-
href: string;
|
|
37
|
-
/**
|
|
38
|
-
* Sets or retrieves the window or frame at which to target content.
|
|
39
|
-
*/
|
|
40
|
-
target: string;
|
|
41
|
-
/**
|
|
42
|
-
* If true, the user cannot interact with the node.
|
|
43
|
-
*/
|
|
44
|
-
disabled: boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Whether the node is currently selected.
|
|
47
|
-
*/
|
|
48
|
-
selected: boolean;
|
|
49
|
-
/**
|
|
50
|
-
* Whether child nodes are visible.
|
|
51
|
-
*/
|
|
52
|
-
expanded: boolean;
|
|
53
|
-
/**
|
|
54
|
-
* The nesting depth level (set automatically by the parent tree-view).
|
|
55
|
-
*/
|
|
56
|
-
level: number;
|
|
57
|
-
private readonly _nativeElement;
|
|
58
|
-
focus(): void;
|
|
59
|
-
blur(): void;
|
|
60
|
-
private _getChildNodes;
|
|
61
|
-
connectedCallback(): void;
|
|
62
|
-
private _syncHostAria;
|
|
63
|
-
private _updateChildLevels;
|
|
64
|
-
private _handleClick;
|
|
65
|
-
private _handleKeyDown;
|
|
66
|
-
updated(changedProps: Map<string, unknown>): void;
|
|
67
|
-
private _renderContent;
|
|
68
|
-
render(): import("lit-html").TemplateResult<1>;
|
|
69
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
2
|
-
import { TreeNode } from './tree-node.js';
|
|
3
|
-
/**
|
|
4
|
-
* @label Tree View
|
|
5
|
-
* @tag wc-tree-view
|
|
6
|
-
* @rawTag tree-view
|
|
7
|
-
* @summary A tree view is a hierarchical structure that provides nested levels of navigation. It supports keyboard navigation, single/multi select, and expandable nodes.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```html
|
|
11
|
-
* <wc-tree-view>
|
|
12
|
-
* <wc-tree-node label="Parent" expanded>
|
|
13
|
-
* <wc-tree-node label="Child 1"></wc-tree-node>
|
|
14
|
-
* <wc-tree-node label="Child 2"></wc-tree-node>
|
|
15
|
-
* </wc-tree-node>
|
|
16
|
-
* </wc-tree-view>
|
|
17
|
-
* ```
|
|
18
|
-
* @tags navigation
|
|
19
|
-
*/
|
|
20
|
-
export declare class TreeView extends LitElement {
|
|
21
|
-
static styles: import("lit").CSSResultGroup[];
|
|
22
|
-
/**
|
|
23
|
-
* The value of the currently selected node.
|
|
24
|
-
*/
|
|
25
|
-
selectedNode: string;
|
|
26
|
-
connectedCallback(): void;
|
|
27
|
-
updated(changedProps: Map<string, unknown>): void;
|
|
28
|
-
disconnectedCallback(): void;
|
|
29
|
-
private _getTopLevelNodes;
|
|
30
|
-
private _getAllVisibleNodes;
|
|
31
|
-
private _onNodeClick;
|
|
32
|
-
private _updateSelectedState;
|
|
33
|
-
private _clearSelectedState;
|
|
34
|
-
private _syncSelectedStateFromProperty;
|
|
35
|
-
private _onSlotChange;
|
|
36
|
-
private _collectAllNodes;
|
|
37
|
-
private _onKeyDown;
|
|
38
|
-
render(): import("lit-html").TemplateResult<1>;
|
|
39
|
-
static Node: typeof TreeNode;
|
|
40
|
-
}
|
package/dist/src/utils.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare function createCacheFetch(name: string): Promise<(url: string) => Promise<string>>;
|
|
2
|
-
export declare function sanitizeSvg(rawSvg: string): string;
|
|
3
|
-
export declare function observerSlotChangesWithCallback(slot: HTMLSlotElement | null, callback: (hasContent: boolean) => void): void;
|
|
4
|
-
export declare function throttle(func: Function, delay: number, options?: {
|
|
5
|
-
leading: boolean;
|
|
6
|
-
trailing: boolean;
|
|
7
|
-
}): (...args: any[]) => void;
|
|
8
|
-
export declare function isInViewport(element: HTMLElement): boolean;
|
|
9
|
-
export declare function isDarkMode(): boolean;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '../src/tree-view/wc-tree-view.js';
|
package/src/styleMixins.css.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { css, unsafeCSS, CSSResult } from 'lit';
|
|
2
|
-
|
|
3
|
-
export const focusRing = (
|
|
4
|
-
color = 'var(--border-interactive)',
|
|
5
|
-
): CSSResult => css`
|
|
6
|
-
outline: 2px solid ${unsafeCSS(color)};
|
|
7
|
-
`;
|
|
8
|
-
|
|
9
|
-
export const getTypography = (name: string): CSSResult => css`
|
|
10
|
-
font-family: var(--typography-${unsafeCSS(name)}-font-family) !important;
|
|
11
|
-
font-size: var(--typography-${unsafeCSS(name)}-font-size) !important;
|
|
12
|
-
font-weight: var(--typography-${unsafeCSS(name)}-font-weight) !important;
|
|
13
|
-
line-height: var(--typography-${unsafeCSS(name)}-line-height) !important;
|
|
14
|
-
letter-spacing: var(
|
|
15
|
-
--typography-${unsafeCSS(name)}-letter-spacing
|
|
16
|
-
) !important;
|
|
17
|
-
`;
|
|
18
|
-
|
|
19
|
-
export const getTypographyNotImportant = (name: string): CSSResult => css`
|
|
20
|
-
font-family: var(--typography-${unsafeCSS(name)}-font-family);
|
|
21
|
-
font-size: var(--typography-${unsafeCSS(name)}-font-size);
|
|
22
|
-
font-weight: var(--typography-${unsafeCSS(name)}-font-weight);
|
|
23
|
-
line-height: var(--typography-${unsafeCSS(name)}-line-height);
|
|
24
|
-
letter-spacing: var(--typography-${unsafeCSS(name)}-letter-spacing);
|
|
25
|
-
`;
|
|
26
|
-
|
|
27
|
-
export const forPhoneOnly = (content: CSSResult): CSSResult => css`
|
|
28
|
-
@media (max-width: 671px) {
|
|
29
|
-
${content}
|
|
30
|
-
}
|
|
31
|
-
`;
|
|
32
|
-
|
|
33
|
-
export const forTabletPortraitUp = (content: CSSResult): CSSResult => css`
|
|
34
|
-
@media (min-width: 672px) {
|
|
35
|
-
${content}
|
|
36
|
-
}
|
|
37
|
-
`;
|
|
38
|
-
|
|
39
|
-
export const forTabletLandscapeUp = (content: CSSResult): CSSResult => css`
|
|
40
|
-
@media (min-width: 1056px) {
|
|
41
|
-
${content}
|
|
42
|
-
}
|
|
43
|
-
`;
|
|
44
|
-
|
|
45
|
-
export const forDesktopUp = (content: CSSResult): CSSResult => css`
|
|
46
|
-
@media (min-width: 1312px) {
|
|
47
|
-
${content}
|
|
48
|
-
}
|
|
49
|
-
`;
|
|
50
|
-
|
|
51
|
-
export const forBigDesktopUp = (content: CSSResult): CSSResult => css`
|
|
52
|
-
@media (min-width: 1584px) {
|
|
53
|
-
${content}
|
|
54
|
-
}
|
|
55
|
-
`;
|
|
@@ -1,57 +0,0 @@
|
|
|
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>
|
package/src/tree-view/index.ts
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
import { html, LitElement } from 'lit';
|
|
2
|
-
import { property, query } from 'lit/decorators.js';
|
|
3
|
-
import { classMap } from 'lit/directives/class-map.js';
|
|
4
|
-
import { styleMap } from 'lit/directives/style-map.js';
|
|
5
|
-
import styles from './tree-node.scss';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @label Tree Node
|
|
9
|
-
* @tag wc-tree-node
|
|
10
|
-
* @rawTag tree-node
|
|
11
|
-
* @parentRawTag tree-view
|
|
12
|
-
* @summary A tree node represents a single item in a hierarchical tree structure. It supports nesting, icons, links, and keyboard navigation.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```html
|
|
16
|
-
* <wc-tree-view>
|
|
17
|
-
* <wc-tree-node label="Parent">
|
|
18
|
-
* <wc-tree-node label="Child"></wc-tree-node>
|
|
19
|
-
* </wc-tree-node>
|
|
20
|
-
* </wc-tree-view>
|
|
21
|
-
* ```
|
|
22
|
-
* @tags navigation
|
|
23
|
-
*/
|
|
24
|
-
export class TreeNode extends LitElement {
|
|
25
|
-
static styles = [styles];
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* The value used to identify this node when selected.
|
|
29
|
-
*/
|
|
30
|
-
@property({ type: String, reflect: true })
|
|
31
|
-
value: string = '';
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* The display label for this node.
|
|
35
|
-
*/
|
|
36
|
-
@property({ type: String, reflect: true })
|
|
37
|
-
label: string = '';
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Optional icon name to display before the label.
|
|
41
|
-
*/
|
|
42
|
-
@property({ type: String, reflect: true })
|
|
43
|
-
icon: string = '';
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Optional hyperlink to navigate to on click.
|
|
47
|
-
*/
|
|
48
|
-
@property({ type: String, reflect: true })
|
|
49
|
-
href: string = '';
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Sets or retrieves the window or frame at which to target content.
|
|
53
|
-
*/
|
|
54
|
-
@property({ type: String, reflect: true })
|
|
55
|
-
target: string = '_self';
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* If true, the user cannot interact with the node.
|
|
59
|
-
*/
|
|
60
|
-
@property({ type: Boolean, reflect: true })
|
|
61
|
-
disabled: boolean = false;
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Whether the node is currently selected.
|
|
65
|
-
*/
|
|
66
|
-
@property({ type: Boolean, reflect: true })
|
|
67
|
-
selected: boolean = false;
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Whether child nodes are visible.
|
|
71
|
-
*/
|
|
72
|
-
@property({ type: Boolean, reflect: true })
|
|
73
|
-
expanded: boolean = false;
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* The nesting depth level (set automatically by the parent tree-view).
|
|
77
|
-
*/
|
|
78
|
-
@property({ type: Number, reflect: true })
|
|
79
|
-
level: number = 0;
|
|
80
|
-
|
|
81
|
-
@query('.tree-node-content')
|
|
82
|
-
private readonly _nativeElement!: HTMLElement | null;
|
|
83
|
-
|
|
84
|
-
override focus() {
|
|
85
|
-
this._nativeElement?.focus();
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
override blur() {
|
|
89
|
-
this._nativeElement?.blur();
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
private _getChildNodes(): TreeNode[] {
|
|
93
|
-
return Array.from(this.children).filter(
|
|
94
|
-
el => el.tagName.toLowerCase() === 'wc-tree-node',
|
|
95
|
-
) as TreeNode[];
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
connectedCallback() {
|
|
99
|
-
super.connectedCallback();
|
|
100
|
-
this._updateChildLevels();
|
|
101
|
-
this.setAttribute('role', 'treeitem');
|
|
102
|
-
this._syncHostAria();
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
private _syncHostAria() {
|
|
106
|
-
const hasChildren = this._getChildNodes().length > 0;
|
|
107
|
-
if (hasChildren) {
|
|
108
|
-
this.setAttribute('aria-expanded', String(this.expanded));
|
|
109
|
-
} else {
|
|
110
|
-
this.removeAttribute('aria-expanded');
|
|
111
|
-
}
|
|
112
|
-
this.setAttribute('aria-selected', String(this.selected));
|
|
113
|
-
this.setAttribute('aria-disabled', String(this.disabled));
|
|
114
|
-
this.setAttribute('aria-level', String(this.level + 1));
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
private _updateChildLevels() {
|
|
118
|
-
const children = this._getChildNodes();
|
|
119
|
-
children.forEach(child => {
|
|
120
|
-
// eslint-disable-next-line no-param-reassign
|
|
121
|
-
child.level = this.level + 1;
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
private _handleClick(event: Event) {
|
|
126
|
-
if (this.disabled) {
|
|
127
|
-
event.preventDefault();
|
|
128
|
-
event.stopPropagation();
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
const hasChildren = this._getChildNodes().length > 0;
|
|
133
|
-
if (hasChildren) {
|
|
134
|
-
this.expanded = !this.expanded;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
this.dispatchEvent(
|
|
138
|
-
new CustomEvent('tree-node:click', {
|
|
139
|
-
bubbles: true,
|
|
140
|
-
composed: true,
|
|
141
|
-
detail: {
|
|
142
|
-
value: this.value || this.label,
|
|
143
|
-
label: this.label,
|
|
144
|
-
expanded: this.expanded,
|
|
145
|
-
},
|
|
146
|
-
}),
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
private _handleKeyDown(event: KeyboardEvent) {
|
|
151
|
-
if (this.disabled) return;
|
|
152
|
-
|
|
153
|
-
const hasChildren = this._getChildNodes().length > 0;
|
|
154
|
-
|
|
155
|
-
switch (event.key) {
|
|
156
|
-
case ' ':
|
|
157
|
-
case 'Enter':
|
|
158
|
-
event.preventDefault();
|
|
159
|
-
if (hasChildren) {
|
|
160
|
-
this.expanded = !this.expanded;
|
|
161
|
-
}
|
|
162
|
-
this.dispatchEvent(
|
|
163
|
-
new CustomEvent('tree-node:click', {
|
|
164
|
-
bubbles: true,
|
|
165
|
-
composed: true,
|
|
166
|
-
detail: {
|
|
167
|
-
value: this.value || this.label,
|
|
168
|
-
label: this.label,
|
|
169
|
-
expanded: this.expanded,
|
|
170
|
-
},
|
|
171
|
-
}),
|
|
172
|
-
);
|
|
173
|
-
if (this.href) {
|
|
174
|
-
window.open(this.href, this.target);
|
|
175
|
-
}
|
|
176
|
-
break;
|
|
177
|
-
case 'ArrowLeft':
|
|
178
|
-
event.preventDefault();
|
|
179
|
-
if (this.expanded && hasChildren) {
|
|
180
|
-
this.expanded = false;
|
|
181
|
-
}
|
|
182
|
-
break;
|
|
183
|
-
case 'ArrowRight':
|
|
184
|
-
event.preventDefault();
|
|
185
|
-
if (hasChildren) {
|
|
186
|
-
if (!this.expanded) {
|
|
187
|
-
this.expanded = true;
|
|
188
|
-
} else {
|
|
189
|
-
const firstChild = this._getChildNodes()[0];
|
|
190
|
-
firstChild?.focus();
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
break;
|
|
194
|
-
default:
|
|
195
|
-
break;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
updated(changedProps: Map<string, unknown>) {
|
|
200
|
-
super.updated(changedProps);
|
|
201
|
-
if (changedProps.has('level')) {
|
|
202
|
-
this._updateChildLevels();
|
|
203
|
-
}
|
|
204
|
-
this._syncHostAria();
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
private _renderContent(hasChildren: boolean) {
|
|
208
|
-
// 0.125rem offset aligns text visually with the expand/icon space
|
|
209
|
-
const indentStyle = styleMap({
|
|
210
|
-
paddingInlineStart: `calc(${this.level + 1}rem - 0.125rem)`,
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
const contentClasses = classMap({
|
|
214
|
-
'tree-node-content': true,
|
|
215
|
-
selected: this.selected,
|
|
216
|
-
disabled: this.disabled,
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
const innerContent = html`
|
|
220
|
-
${hasChildren
|
|
221
|
-
? html`<wc-icon
|
|
222
|
-
class=${classMap({ 'expand-icon': true, expanded: this.expanded })}
|
|
223
|
-
name="arrow_right"
|
|
224
|
-
></wc-icon>`
|
|
225
|
-
: html`<span class="icon-space"></span>`}
|
|
226
|
-
${this.icon
|
|
227
|
-
? html`<wc-icon class="node-icon" name=${this.icon}></wc-icon>`
|
|
228
|
-
: ''}
|
|
229
|
-
<span class="tree-node-label">${this.label}<slot name="label"></slot></span>
|
|
230
|
-
`;
|
|
231
|
-
|
|
232
|
-
if (this.href) {
|
|
233
|
-
return html`<a
|
|
234
|
-
class=${contentClasses}
|
|
235
|
-
style=${indentStyle}
|
|
236
|
-
href=${this.href}
|
|
237
|
-
target=${this.target}
|
|
238
|
-
tabindex=${this.disabled ? '-1' : '0'}
|
|
239
|
-
@click=${this._handleClick}
|
|
240
|
-
@keydown=${this._handleKeyDown}
|
|
241
|
-
>${innerContent}</a>`;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
return html`<div
|
|
245
|
-
class=${contentClasses}
|
|
246
|
-
style=${indentStyle}
|
|
247
|
-
tabindex=${this.disabled ? '-1' : '0'}
|
|
248
|
-
@click=${this._handleClick}
|
|
249
|
-
@keydown=${this._handleKeyDown}
|
|
250
|
-
>${innerContent}</div>`;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
render() {
|
|
254
|
-
const hasChildren = this._getChildNodes().length > 0;
|
|
255
|
-
|
|
256
|
-
const nodeSlotClasses = classMap({
|
|
257
|
-
'node-children': true,
|
|
258
|
-
expanded: this.expanded,
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
return html`<div class="tree-node">
|
|
262
|
-
${this._renderContent(hasChildren)}
|
|
263
|
-
<div class=${nodeSlotClasses}>
|
|
264
|
-
<slot></slot>
|
|
265
|
-
</div>
|
|
266
|
-
</div>`;
|
|
267
|
-
}
|
|
268
|
-
}
|