@redvars/peacock 3.2.3 → 3.2.5
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.js.map +1 -1
- package/dist/asciidoc-pJfx9Q5g.js +8 -0
- package/dist/asciidoc-pJfx9Q5g.js.map +1 -0
- package/dist/ayu-dark-B_QwGMx7.js +5 -0
- package/dist/ayu-dark-B_QwGMx7.js.map +1 -0
- package/dist/ayu-light-D3FWc2Ex.js +5 -0
- package/dist/ayu-light-D3FWc2Ex.js.map +1 -0
- package/dist/ayu-mirage-BmOeqvbN.js +5 -0
- package/dist/ayu-mirage-BmOeqvbN.js.map +1 -0
- package/dist/bird2-K3o4L1QD.js +8 -0
- package/dist/bird2-K3o4L1QD.js.map +1 -0
- package/dist/c3-B07AahKi.js +8 -0
- package/dist/c3-B07AahKi.js.map +1 -0
- package/dist/code-highlighter.js +46 -22
- package/dist/code-highlighter.js.map +1 -1
- package/dist/custom-elements-jsdocs.json +29 -2
- package/dist/custom-elements.json +241 -155
- package/dist/{erb-m-j2vBLm.js → erb-ChJ68mCV.js} +2 -2
- package/dist/{erb-m-j2vBLm.js.map → erb-ChJ68mCV.js.map} +1 -1
- package/dist/focus-ring.js +32 -17
- package/dist/focus-ring.js.map +1 -1
- package/dist/horizon-bright-BLApERHE.js +5 -0
- package/dist/horizon-bright-BLApERHE.js.map +1 -0
- package/dist/icon.js +1 -1
- package/dist/index.js +2 -2
- package/dist/just-B9LTc0LG.js +36 -0
- package/dist/just-B9LTc0LG.js.map +1 -0
- package/dist/latex-BlSVCRS1.js +12 -0
- package/dist/latex-BlSVCRS1.js.map +1 -0
- package/dist/llvm-DmXvUVfA.js +8 -0
- package/dist/llvm-DmXvUVfA.js.map +1 -0
- package/dist/marko-BmJxIfAg.js +17 -0
- package/dist/marko-BmJxIfAg.js.map +1 -0
- package/dist/{mdc-BrYnGSXv.js → mdc-C7Ba-c77.js} +2 -2
- package/dist/{mdc-BrYnGSXv.js.map → mdc-C7Ba-c77.js.map} +1 -1
- package/dist/menu-item.js +70 -20
- package/dist/menu-item.js.map +1 -1
- package/dist/mojo-DYU6y2W9.js +8 -0
- package/dist/{mojo-u5OgFbxC.js.map → mojo-DYU6y2W9.js.map} +1 -1
- package/dist/moonbit-CV1yN8C9.js +8 -0
- package/dist/moonbit-CV1yN8C9.js.map +1 -0
- package/dist/{nextflow-u9s9iK4L.js → nextflow-Dg6qlPoG.js} +5 -2
- package/dist/nextflow-Dg6qlPoG.js.map +1 -0
- package/dist/nextflow-groovy-CORam5Fa.js +8 -0
- package/dist/nextflow-groovy-CORam5Fa.js.map +1 -0
- package/dist/nushell-CljK3mss.js +8 -0
- package/dist/nushell-CljK3mss.js.map +1 -0
- package/dist/peacock-loader.js +2 -2
- package/dist/ron-BdzR44AN.js +8 -0
- package/dist/ron-BdzR44AN.js.map +1 -0
- package/dist/{rst-DF3hmW_x.js → rst-CFS_KoQV.js} +2 -2
- package/dist/{rst-DF3hmW_x.js.map → rst-CFS_KoQV.js.map} +1 -1
- package/dist/ruby-D6iviT7z.js +39 -0
- package/dist/ruby-D6iviT7z.js.map +1 -0
- package/dist/src/button/BaseButton.d.ts +1 -1
- package/dist/src/focus-ring/focus-ring.d.ts +4 -0
- package/dist/src/menu/menu-item/menu-item.d.ts +10 -0
- package/dist/svelte-BkSXBbLu.js +17 -0
- package/dist/svelte-BkSXBbLu.js.map +1 -0
- package/dist/{swift-BCgZrEcl.js → swift-DyFZxOd-.js} +2 -2
- package/dist/{swift-BCgZrEcl.js.map → swift-DyFZxOd-.js.map} +1 -1
- package/dist/{switch-CSs3KDGd.js → switch-CC-S5fbc.js} +5 -4
- package/dist/switch-CC-S5fbc.js.map +1 -0
- package/dist/tex-BbUv4agS.js +11 -0
- package/dist/tex-BbUv4agS.js.map +1 -0
- package/dist/tooltip.js +72 -64
- package/dist/tooltip.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/{twig-VqT-e9DI.js → twig-B60fOxJY.js} +2 -2
- package/dist/{twig-VqT-e9DI.js.map → twig-B60fOxJY.js.map} +1 -1
- package/dist/typedoc.json +73818 -73547
- package/dist/{unsafe-html-BIBrxtsS.js → unsafe-html-BS8X6Gto.js} +2 -2
- package/dist/{unsafe-html-BIBrxtsS.js.map → unsafe-html-BS8X6Gto.js.map} +1 -1
- package/package.json +5 -1
- package/readme.md +4 -4
- package/src/button/BaseButton.ts +1 -1
- package/src/button/button/button.scss +1 -0
- package/src/button/button/button.ts +1 -1
- package/src/button/icon-button/icon-button.ts +1 -1
- package/src/focus-ring/focus-ring.ts +34 -17
- package/src/menu/demo/index.html +36 -0
- package/src/menu/menu-item/menu-item.scss +13 -0
- package/src/menu/menu-item/menu-item.ts +65 -21
- package/dist/asciidoc-BDJTg1PM.js +0 -8
- package/dist/asciidoc-BDJTg1PM.js.map +0 -1
- package/dist/ayu-dark-ygzj7KbW.js +0 -5
- package/dist/ayu-dark-ygzj7KbW.js.map +0 -1
- package/dist/ayu-light-DsUL6vCY.js +0 -5
- package/dist/ayu-light-DsUL6vCY.js.map +0 -1
- package/dist/ayu-mirage-CyHYB1Vf.js +0 -5
- package/dist/ayu-mirage-CyHYB1Vf.js.map +0 -1
- package/dist/c3-CmLsUuAG.js +0 -8
- package/dist/c3-CmLsUuAG.js.map +0 -1
- package/dist/latex-Dym6_5Jv.js +0 -12
- package/dist/latex-Dym6_5Jv.js.map +0 -1
- package/dist/llvm-CPhCWK2d.js +0 -8
- package/dist/llvm-CPhCWK2d.js.map +0 -1
- package/dist/marko-C4cA5Esr.js +0 -17
- package/dist/marko-C4cA5Esr.js.map +0 -1
- package/dist/mojo-u5OgFbxC.js +0 -8
- package/dist/moonbit-aQWdlyG4.js +0 -8
- package/dist/moonbit-aQWdlyG4.js.map +0 -1
- package/dist/nextflow-u9s9iK4L.js.map +0 -1
- package/dist/nushell-Lv1Ave7e.js +0 -8
- package/dist/nushell-Lv1Ave7e.js.map +0 -1
- package/dist/ron-BKVA_67x.js +0 -8
- package/dist/ron-BKVA_67x.js.map +0 -1
- package/dist/ruby-w0WL1wp4.js +0 -39
- package/dist/ruby-w0WL1wp4.js.map +0 -1
- package/dist/svelte-CwlnTKtO.js +0 -17
- package/dist/svelte-CwlnTKtO.js.map +0 -1
- package/dist/switch-CSs3KDGd.js.map +0 -1
- package/dist/tex-C5wdBdOa.js +0 -11
- package/dist/tex-C5wdBdOa.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A, E } from './lit-element-CA46RFZ_.js';
|
|
2
|
-
import {
|
|
2
|
+
import { e as e$1, i, t } from './directive-Cuw6h7YA.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @license
|
|
@@ -8,4 +8,4 @@ import { i, t, e as e$1 } from './directive-Cuw6h7YA.js';
|
|
|
8
8
|
*/class e extends i{constructor(i){if(super(i),this.it=A,i.type!==t.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(r){if(r===A||null==r)return this._t=void 0,this.it=r;if(r===E)return r;if("string"!=typeof r)throw Error(this.constructor.directiveName+"() called with a non-string value");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName="unsafeHTML",e.resultType=1;const o=e$1(e);
|
|
9
9
|
|
|
10
10
|
export { e, o };
|
|
11
|
-
//# sourceMappingURL=unsafe-html-
|
|
11
|
+
//# sourceMappingURL=unsafe-html-BS8X6Gto.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsafe-html-
|
|
1
|
+
{"version":3,"file":"unsafe-html-BS8X6Gto.js","sources":["../node_modules/lit-html/directives/unsafe-html.js"],"sourcesContent":["import{nothing as t,noChange as i}from\"../lit-html.js\";import{directive as r,Directive as s,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends s{constructor(i){if(super(i),this.it=t,i.type!==n.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this._t=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=r(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n"],"names":["s","t","n","i","r"],"mappings":";;;AACA;AACA;AACA;AACA;AACA,GAAG,MAAM,CAAC,SAASA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAACC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAGC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,uCAAuC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAGD,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAGE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,mCAAmC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAM,MAAC,CAAC,CAACC,GAAC,CAAC,CAAC;;;;","x_google_ignoreList":[0]}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@redvars/peacock",
|
|
3
3
|
"description": "The foundation for beautiful user interfaces",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
|
-
"version": "3.2.
|
|
5
|
+
"version": "3.2.5",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"module": "dist/index.js",
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
"lit",
|
|
12
12
|
"web components"
|
|
13
13
|
],
|
|
14
|
+
"repository": {
|
|
15
|
+
"url": "https://github.com/redvars/peacock"
|
|
16
|
+
},
|
|
17
|
+
"private": false,
|
|
14
18
|
"exports": {
|
|
15
19
|
".": "./dist/src/index.js",
|
|
16
20
|
"./icon.js": "./dist/src/index.js"
|
package/readme.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Peacock
|
|
2
2
|
**The foundation for beautiful user interfaces.**
|
|
3
3
|
|
|
4
|
-
[](https://github.com/
|
|
4
|
+
[](https://github.com/redvars/peacock/actions?workflow=Build)
|
|
5
5
|
[](/LICENSE)
|
|
6
6
|

|
|
7
7
|
|
|
@@ -31,7 +31,7 @@ Vibrant & Consistent Design System: Every component—from buttons and cards to
|
|
|
31
31
|
**Responsive by Default:** Components are built with responsiveness baked in, guaranteeing a graceful display across all screen sizes and devices.
|
|
32
32
|
|
|
33
33
|
## Documentation
|
|
34
|
-
Visit [https://peacock.redvars.com](https://
|
|
34
|
+
Visit [https://peacock.redvars.com](https://peacock.redvars.com) to view the documentation.
|
|
35
35
|
|
|
36
36
|
## Getting Started
|
|
37
37
|
|
|
@@ -45,10 +45,10 @@ Visit [https://peacock.redvars.com](https://goatui.com) to view the documentatio
|
|
|
45
45
|
<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">
|
|
46
46
|
|
|
47
47
|
<script type='module'
|
|
48
|
-
src='https://cdn.jsdelivr.net/npm/@redvars/peacock@3.2.
|
|
48
|
+
src='https://cdn.jsdelivr.net/npm/@redvars/peacock@3.2.2/dist/peacock-loader.js'></script>
|
|
49
49
|
</head>
|
|
50
50
|
|
|
51
|
-
<
|
|
51
|
+
<base-button>Button</base-button>
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
# Components
|
package/src/button/BaseButton.ts
CHANGED
|
@@ -97,7 +97,7 @@ export class BaseButton extends LitElement {
|
|
|
97
97
|
@state()
|
|
98
98
|
isPressed = false;
|
|
99
99
|
|
|
100
|
-
@query('.button')
|
|
100
|
+
@query('.button') readonly buttonElement!: HTMLElement | null;
|
|
101
101
|
|
|
102
102
|
override focus() {
|
|
103
103
|
this.buttonElement?.focus();
|
|
@@ -85,6 +85,7 @@ slot::slotted(*) {
|
|
|
85
85
|
Background layers
|
|
86
86
|
*/
|
|
87
87
|
.focus-ring {
|
|
88
|
+
z-index: 2;
|
|
88
89
|
--focus-ring-container-shape-start-start: var(--_container-shape-start-start);
|
|
89
90
|
--focus-ring-container-shape-start-end: var(--_container-shape-start-end);
|
|
90
91
|
--focus-ring-container-shape-end-start: var(--_container-shape-end-start);
|
|
@@ -136,7 +136,7 @@ export class Button extends BaseButton {
|
|
|
136
136
|
|
|
137
137
|
renderButtonContent() {
|
|
138
138
|
return html`
|
|
139
|
-
<focus-ring class="focus-ring" .control=${this}></focus-ring>
|
|
139
|
+
<focus-ring class="focus-ring" .control=${this} element="buttonElement"></focus-ring>
|
|
140
140
|
<base-elevation class="elevation"></base-elevation>
|
|
141
141
|
<div class="neo-background"></div>
|
|
142
142
|
<div class="background"></div>
|
|
@@ -133,7 +133,7 @@ export class IconButton extends BaseButton {
|
|
|
133
133
|
|
|
134
134
|
renderButtonContent() {
|
|
135
135
|
return html`
|
|
136
|
-
<focus-ring class="focus-ring" .control=${this}></focus-ring>
|
|
136
|
+
<focus-ring class="focus-ring" .control=${this} element="buttonElement"></focus-ring>
|
|
137
137
|
<base-elevation class="elevation"></base-elevation>
|
|
138
138
|
<div class="neo-background"></div>
|
|
139
139
|
<div class="background"></div>
|
|
@@ -18,6 +18,9 @@ export class FocusRing extends LitElement {
|
|
|
18
18
|
|
|
19
19
|
@property({ type: Boolean, reflect: true }) visible: boolean = false;
|
|
20
20
|
|
|
21
|
+
@property({ type: String}) element = '';
|
|
22
|
+
|
|
23
|
+
|
|
21
24
|
render() {
|
|
22
25
|
return nothing;
|
|
23
26
|
}
|
|
@@ -46,27 +49,41 @@ export class FocusRing extends LitElement {
|
|
|
46
49
|
super.disconnectedCallback();
|
|
47
50
|
}
|
|
48
51
|
|
|
52
|
+
__focusin() {
|
|
53
|
+
// @ts-ignore
|
|
54
|
+
this.visible = this._control[this.element].matches(':focus-visible') ?? false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
__focusout() {
|
|
58
|
+
this.visible = false;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
__pointerdown() {
|
|
62
|
+
this.visible = false;
|
|
63
|
+
}
|
|
64
|
+
|
|
49
65
|
attach() {
|
|
50
|
-
// @ts-ignore
|
|
51
|
-
this._control
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
});
|
|
60
|
-
// @ts-ignore - buttonElement is not defined on the base class
|
|
61
|
-
this._control?.buttonElement?.addEventListener('pointerdown', () => {
|
|
62
|
-
this.visible = false;
|
|
63
|
-
});
|
|
66
|
+
// @ts-ignore
|
|
67
|
+
if (this._control && this._control[this.element]) {
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
this._control[this.element].addEventListener('focusin', this.__focusin.bind(this));
|
|
70
|
+
// @ts-ignore
|
|
71
|
+
this._control[this.element].addEventListener('focusout', this.__focusin.bind(this));
|
|
72
|
+
// @ts-ignore
|
|
73
|
+
this._control[this.element].addEventListener('pointerdown', this.__focusin.bind(this));
|
|
74
|
+
}
|
|
64
75
|
}
|
|
65
76
|
|
|
66
77
|
detach() {
|
|
67
|
-
|
|
68
|
-
this._control
|
|
69
|
-
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
if (this._control && this._control[this.element]) {
|
|
80
|
+
// @ts-ignore
|
|
81
|
+
this._control[this.element].removeEventListener('focusin', this.__focusin);
|
|
82
|
+
// @ts-ignore
|
|
83
|
+
this._control[this.element].removeEventListener('focusout', this.__focusout);
|
|
84
|
+
// @ts-ignore
|
|
85
|
+
this._control[this.element].removeEventListener('pointerdown', this.__pointerdown);
|
|
86
|
+
}
|
|
70
87
|
this._control = undefined;
|
|
71
88
|
}
|
|
72
89
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
|
|
7
|
+
<link rel='stylesheet' href='/dist/assets/styles/tokens.css' />
|
|
8
|
+
<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">
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
<style>
|
|
12
|
+
body {
|
|
13
|
+
background: #fafafa;
|
|
14
|
+
}
|
|
15
|
+
</style>
|
|
16
|
+
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
<p class='text-body'>
|
|
22
|
+
<p-link href='#' class='with-icon'><p-icon name='home'></p-icon> link</p-link>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
<p class='text-body'>
|
|
26
|
+
<p-link href='#' class='inherit'> Testing No Style</p-link>
|
|
27
|
+
</p>
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
<script type='module'>
|
|
31
|
+
import { MenuList, MenuItem } from '/dist/index.js';
|
|
32
|
+
window.customElements.define('menu-list', MenuList);
|
|
33
|
+
window.customElements.define('menu-item', MenuItem);
|
|
34
|
+
</script>
|
|
35
|
+
</body>
|
|
36
|
+
</html>
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
display: flex;
|
|
13
13
|
align-items: center;
|
|
14
14
|
padding-inline: 0.75rem;
|
|
15
|
+
outline: 0;
|
|
15
16
|
|
|
16
17
|
@include mixin.get-typography(label-large);
|
|
17
18
|
|
|
@@ -51,6 +52,18 @@
|
|
|
51
52
|
pointer-events: none;
|
|
52
53
|
}
|
|
53
54
|
|
|
55
|
+
/*
|
|
56
|
+
Background layers
|
|
57
|
+
*/
|
|
58
|
+
.focus-ring {
|
|
59
|
+
z-index: 2;
|
|
60
|
+
--focus-ring-container-shape-start-start: var(--_container-shape-start-start);
|
|
61
|
+
--focus-ring-container-shape-start-end: var(--_container-shape-start-end);
|
|
62
|
+
--focus-ring-container-shape-end-start: var(--_container-shape-end-start);
|
|
63
|
+
--focus-ring-container-shape-end-end: var(--_container-shape-end-end);
|
|
64
|
+
--focus-ring-container-shape-variant: var(--_container-corner-shape-variant);
|
|
65
|
+
}
|
|
66
|
+
|
|
54
67
|
.ripple {
|
|
55
68
|
--ripple-state-opacity: var(--_container-state-opacity, 0);
|
|
56
69
|
--ripple-pressed-color: var(--_container-state-color);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { html, LitElement } from 'lit';
|
|
2
|
-
import { property } from 'lit/decorators.js';
|
|
2
|
+
import { property, query } from 'lit/decorators.js';
|
|
3
3
|
import { classMap } from 'lit/directives/class-map.js';
|
|
4
4
|
import styles from './menu-item.scss';
|
|
5
5
|
import colorStyles from './menu-item-colors.scss';
|
|
@@ -11,6 +11,17 @@ export class MenuItem extends LitElement {
|
|
|
11
11
|
|
|
12
12
|
@property({ type: Boolean }) selected = false;
|
|
13
13
|
|
|
14
|
+
/*
|
|
15
|
+
* Hyperlink to navigate to on click.
|
|
16
|
+
*/
|
|
17
|
+
@property({ reflect: true }) href?: string;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Sets or retrieves the window or frame at which to target content.
|
|
21
|
+
*/
|
|
22
|
+
@property() target: string = '_self';
|
|
23
|
+
|
|
24
|
+
|
|
14
25
|
@property({ type: String, reflect: true }) variant: 'standard' | 'vibrant' =
|
|
15
26
|
'standard';
|
|
16
27
|
|
|
@@ -22,9 +33,6 @@ export class MenuItem extends LitElement {
|
|
|
22
33
|
if (!this.hasAttribute('role')) {
|
|
23
34
|
this.setAttribute('role', 'menuitem');
|
|
24
35
|
}
|
|
25
|
-
if (!this.hasAttribute('tabindex') && !this.disabled) {
|
|
26
|
-
this.setAttribute('tabindex', '0');
|
|
27
|
-
}
|
|
28
36
|
}
|
|
29
37
|
|
|
30
38
|
// Handle keyboard activation (Enter/Space)
|
|
@@ -35,30 +43,66 @@ export class MenuItem extends LitElement {
|
|
|
35
43
|
}
|
|
36
44
|
}
|
|
37
45
|
|
|
46
|
+
__isLink() {
|
|
47
|
+
return !!this.href;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@query('.menu-item') private readonly menuItemElement!: HTMLElement | null;
|
|
51
|
+
|
|
52
|
+
override focus() {
|
|
53
|
+
this.menuItemElement?.focus();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
override blur() {
|
|
57
|
+
this.menuItemElement?.blur();
|
|
58
|
+
}
|
|
59
|
+
|
|
38
60
|
render() {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
61
|
+
|
|
62
|
+
const isLink = this.__isLink();
|
|
63
|
+
|
|
64
|
+
const cssClasses = {
|
|
42
65
|
'menu-item': true,
|
|
43
66
|
disabled: this.disabled,
|
|
44
67
|
selected: this.selected,
|
|
45
|
-
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
if (isLink) {
|
|
71
|
+
return html`<a
|
|
72
|
+
class=${classMap(cssClasses)}
|
|
73
|
+
href=${this.href}
|
|
74
|
+
target=${this.target}
|
|
75
|
+
>
|
|
76
|
+
${this.renderContent()}
|
|
77
|
+
</a>
|
|
78
|
+
`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
return html`<div
|
|
83
|
+
class=${classMap(cssClasses)}
|
|
84
|
+
tabindex=${!this.disabled ? 0 : -1}
|
|
46
85
|
@keydown="${this._handleKeyDown}"
|
|
47
86
|
>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
87
|
+
${this.renderContent()}
|
|
88
|
+
</div>
|
|
89
|
+
`;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
renderContent() {
|
|
93
|
+
return html`
|
|
94
|
+
<focus-ring class="focus-ring" .control=${this} element="menuItemElement"></focus-ring>
|
|
95
|
+
<div class="background"></div>
|
|
96
|
+
<base-ripple class="ripple"></base-ripple>
|
|
97
|
+
|
|
98
|
+
<div class="menu-item-content">
|
|
99
|
+
<slot name="leading-icon"></slot>
|
|
100
|
+
<div class="slot-container">
|
|
101
|
+
<slot></slot>
|
|
61
102
|
</div>
|
|
103
|
+
<slot
|
|
104
|
+
name="trailing-supporting-text"
|
|
105
|
+
></slot>
|
|
62
106
|
</div>
|
|
63
107
|
`;
|
|
64
108
|
}
|