更新option
parent
1e70f5302f
commit
8c503de7c9
|
@ -5,11 +5,25 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { nextTick, css, html, Component, bind } from 'wkit'
|
import { nextTick, css, html, Component, bind } from 'wkit'
|
||||||
|
import '../icon/index.js'
|
||||||
|
|
||||||
|
const MACOS_KEYS = {
|
||||||
|
Command: '⌘',
|
||||||
|
Cmd: '⌘',
|
||||||
|
Option: '⌥',
|
||||||
|
Alt: '⌥',
|
||||||
|
Shift: '⇧',
|
||||||
|
Ctrl: '⌃',
|
||||||
|
Control: '⌃'
|
||||||
|
}
|
||||||
|
const UA = navigator.userAgent.toLowerCase()
|
||||||
|
const IS_MACOS = UA.includes('mac os x') || UA.includes('iphone')
|
||||||
|
|
||||||
class OptionGroup extends Component {
|
class OptionGroup extends Component {
|
||||||
//
|
//
|
||||||
static props = {
|
static props = {
|
||||||
label: ''
|
label: '',
|
||||||
|
fold: false
|
||||||
}
|
}
|
||||||
|
|
||||||
static styles = [
|
static styles = [
|
||||||
|
@ -21,18 +35,42 @@ class OptionGroup extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
label {
|
label {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
height: 24px;
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
line-height: 1;
|
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: var(--color-grey-2);
|
color: var(--color-grey-2);
|
||||||
|
|
||||||
|
.ico {
|
||||||
|
--size: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:host([fold]) {
|
||||||
|
label {
|
||||||
|
height: 32px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--color-plain-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
]
|
]
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return html`
|
return html`
|
||||||
<label>${this.label}</label>
|
<label
|
||||||
|
>${this.label}
|
||||||
|
${this.fold
|
||||||
|
? html`<wc-icon class="ico" name="right"></wc-icon>`
|
||||||
|
: ''}</label
|
||||||
|
>
|
||||||
|
<div class="sub-list">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
|
</div>
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,6 +79,24 @@ class Option extends Component {
|
||||||
//
|
//
|
||||||
static props = {
|
static props = {
|
||||||
action: '',
|
action: '',
|
||||||
|
icon: {
|
||||||
|
type: String,
|
||||||
|
default: null,
|
||||||
|
observer(val) {
|
||||||
|
if (val === '') {
|
||||||
|
this.icon = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
action: {
|
||||||
|
type: String,
|
||||||
|
default: null,
|
||||||
|
observer(val) {
|
||||||
|
if (val === '') {
|
||||||
|
this.action = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
disabled: false
|
disabled: false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,19 +104,56 @@ class Option extends Component {
|
||||||
css`
|
css`
|
||||||
.item {
|
.item {
|
||||||
display: flex;
|
display: flex;
|
||||||
padding: 0 16px;
|
align-items: center;
|
||||||
line-height: 2;
|
min-width: 128px;
|
||||||
|
height: 32px;
|
||||||
|
padding: 0 6px;
|
||||||
color: var(--color-dark-1);
|
color: var(--color-dark-1);
|
||||||
|
|
||||||
|
.ico {
|
||||||
|
--size: 12px;
|
||||||
|
color: var(--color-grey-2);
|
||||||
|
}
|
||||||
|
.name {
|
||||||
|
flex: 1;
|
||||||
|
margin: 0 8px;
|
||||||
|
}
|
||||||
|
.action {
|
||||||
|
font-size: 12px;
|
||||||
|
// font-family: Menlo;
|
||||||
|
white-space: nowrap;
|
||||||
|
color: var(--color-grey-2);
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--color-plain-1);
|
background: var(--color-plain-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:host([icon]) {
|
||||||
|
.item {
|
||||||
|
min-width: 144px;
|
||||||
|
padding: 0 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
`
|
`
|
||||||
]
|
]
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return html` <section class="item"><slot></slot></section> `
|
let action = (this.action || '').trim()
|
||||||
|
if (IS_MACOS && action) {
|
||||||
|
action = action
|
||||||
|
.split('+')
|
||||||
|
.map(s => MACOS_KEYS[s.trim()] || s.trim())
|
||||||
|
.join('+')
|
||||||
|
}
|
||||||
|
return html`
|
||||||
|
<section class="item">
|
||||||
|
<wc-icon class="ico" name=${this.icon}></wc-icon>
|
||||||
|
<span class="name"><slot></slot></span>
|
||||||
|
<span class="action">${action}</span>
|
||||||
|
</section>
|
||||||
|
`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue