plain-design 1.0.0-beta.32 → 1.0.0-beta.34
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/plain-design.commonjs.min.js +1 -1
- package/dist/plain-design.min.css +1 -1
- package/dist/plain-design.min.js +1 -1
- package/dist/report.html +2 -2
- package/package.json +1 -1
- package/src/packages/components/Dropdown/dropdown.public.scss +10 -0
- package/src/packages/components/Dropdown/dropdown.utils.tsx +3 -1
- package/src/packages/components/Dropdown/index.tsx +2 -2
- package/src/packages/components/DropdownSeparator/index.tsx +8 -0
- package/src/packages/components/ThemeEditor/index.tsx +25 -24
- package/src/packages/entry.tsx +1 -0
- package/src/packages/i18n/lang/en-us.ts +36 -0
- package/src/packages/i18n/lang/zh-cn.ts +36 -0
- package/src/pages/index/components/normal/DemoDropdown.tsx +3 -2
package/package.json
CHANGED
@@ -22,6 +22,16 @@
|
|
22
22
|
transform-origin: left;
|
23
23
|
font-weight: 700;
|
24
24
|
}
|
25
|
+
|
26
|
+
&.dropdown-panel-size-equal {
|
27
|
+
width: 100%;
|
28
|
+
}
|
29
|
+
|
30
|
+
.dropdown-separator {
|
31
|
+
height: 1px;
|
32
|
+
background-color: plv(border-color);
|
33
|
+
margin: 2px 0;
|
34
|
+
}
|
25
35
|
}
|
26
36
|
|
27
37
|
&.dropdown-panel-align-center {
|
@@ -89,17 +89,19 @@ export function renderDropdownPanel(
|
|
89
89
|
attrs,
|
90
90
|
externalClass,
|
91
91
|
content,
|
92
|
+
sizeEqual,
|
92
93
|
}: {
|
93
94
|
size: string,
|
94
95
|
align?: string,
|
95
96
|
attrs?: any,
|
96
97
|
externalClass?: any,
|
97
98
|
content: RenderNode,
|
99
|
+
sizeEqual?: boolean,
|
98
100
|
}
|
99
101
|
) {
|
100
102
|
return (
|
101
103
|
<div {...mergeAttrs({
|
102
|
-
class: [externalClass, getComponentCls('dropdown-panel'), `dropdown-panel-size-${size}`, `dropdown-panel-align-${align || DropdownOptionAlign.start}
|
104
|
+
class: [externalClass, getComponentCls('dropdown-panel'), `dropdown-panel-size-${size}`, `dropdown-panel-align-${align || DropdownOptionAlign.start}`, sizeEqual ? 'dropdown-panel-size-equal' : ''],
|
103
105
|
}, attrs)}>
|
104
106
|
{content}
|
105
107
|
</div>
|
@@ -44,7 +44,7 @@ export const Dropdown = designComponent({
|
|
44
44
|
scopeSlots: {
|
45
45
|
reference: (scope: { open?: boolean }) => {},
|
46
46
|
},
|
47
|
-
setup({ props, slots, event: { emit }, scopeSlots }) {
|
47
|
+
setup({ props, slots, event: { emit }, scopeSlots, attrs }) {
|
48
48
|
|
49
49
|
const { styleComputed } = useStyle();
|
50
50
|
|
@@ -99,7 +99,7 @@ export const Dropdown = designComponent({
|
|
99
99
|
return node?.type?.use?.name === DropdownOption.use.name || node?.type?.use?.name === DropdownGroup.use.name;
|
100
100
|
});
|
101
101
|
|
102
|
-
const publicDropdownPanelParams = { size: styleComputed.value.size, align: props.align };
|
102
|
+
const publicDropdownPanelParams = { size: styleComputed.value.size, align: props.align, sizeEqual: attrs.sizeEqual };
|
103
103
|
|
104
104
|
if (hasScroll || !dropdownOptions || dropdownOptions.length <= props.scrollOptionLength) {
|
105
105
|
return renderDropdownPanel({
|
@@ -8,6 +8,7 @@ import {SelectOption} from "../SelectOption";
|
|
8
8
|
import PageThemeUtils, {ThemePrimaryColors} from "../PageThemeUtils";
|
9
9
|
import ClientZoom from "../ClientZoom";
|
10
10
|
import {addWindowListener} from 'plain-utils/dom/addWindowListener';
|
11
|
+
import i18n from "../i18n";
|
11
12
|
|
12
13
|
export const ThemeEditor = designComponent({
|
13
14
|
name: 'theme-editor',
|
@@ -86,24 +87,24 @@ export const ThemeEditor = designComponent({
|
|
86
87
|
{state.isExpand && (
|
87
88
|
<div className="theme-editor-form">
|
88
89
|
<div>
|
89
|
-
<div
|
90
|
+
<div>{i18n('theme.inputMode').d('输入框类型')}</div>
|
90
91
|
<div>
|
91
|
-
<Select v-model={state.inputMode} onChange={handler.onInputModeChange} size="mini"
|
92
|
-
<SelectOption label=
|
93
|
-
<SelectOption label=
|
92
|
+
<Select v-model={state.inputMode} onChange={handler.onInputModeChange} size="mini" popperAttrs={publicPopperAttrs}>
|
93
|
+
<SelectOption label={i18n('theme.inputModeFlat').d('输入框:填充')} val="flat"/>
|
94
|
+
<SelectOption label={i18n('theme.inputModelStroke').d('输入框:描边')} val="stroke"/>
|
94
95
|
</Select>
|
95
96
|
</div>
|
96
97
|
</div>
|
97
98
|
|
98
99
|
<div>
|
99
|
-
<div
|
100
|
+
<div>{i18n('theme.primaryColor').d('主题颜色')}</div>
|
100
101
|
<div>
|
101
|
-
<Select v-model={state.primaryKey} onChange={handler.onPrimaryChange} size="mini"
|
102
|
+
<Select v-model={state.primaryKey} onChange={handler.onPrimaryChange} size="mini" popperAttrs={publicPopperAttrs}>
|
102
103
|
{Object.entries(ThemePrimaryColors).map(([key, value]) => (
|
103
|
-
<SelectOption label={value!.label} val={key} key={key}>
|
104
|
+
<SelectOption label={i18n('colorName.' + value!.label as any).d(value!.label)} val={key} key={key}>
|
104
105
|
<div className={getComponentCls('theme-editor-block-item')}>
|
105
106
|
{!!value!.primary && <span style={{ ...publicBlockStyles, background: value!.primary }}/>}
|
106
|
-
<span>{value!.label}</span>
|
107
|
+
<span>{i18n('colorName.' + value!.label as any).d(value!.label)}</span>
|
107
108
|
</div>
|
108
109
|
</SelectOption>
|
109
110
|
))}
|
@@ -112,40 +113,40 @@ export const ThemeEditor = designComponent({
|
|
112
113
|
</div>
|
113
114
|
|
114
115
|
<div>
|
115
|
-
<div
|
116
|
+
<div>{i18n('theme.size').d('大小尺寸')}</div>
|
116
117
|
<div>
|
117
|
-
<Select v-model={state.size} onChange={handler.onSizeChange} size="mini"
|
118
|
-
<SelectOption label=
|
119
|
-
<SelectOption label=
|
120
|
-
<SelectOption label=
|
121
|
-
<SelectOption label=
|
118
|
+
<Select v-model={state.size} onChange={handler.onSizeChange} size="mini" popperAttrs={publicPopperAttrs}>
|
119
|
+
<SelectOption label={i18n('theme.sizeLarge').d('大尺寸')} val="large"/>
|
120
|
+
<SelectOption label={i18n('theme.sizeNormal').d('中等尺寸')} val="normal"/>
|
121
|
+
<SelectOption label={i18n('theme.sizeSmall').d('小尺寸')} val="small"/>
|
122
|
+
<SelectOption label={i18n('theme.sizeMini').d('极小尺寸')} val="mini"/>
|
122
123
|
</Select>
|
123
124
|
</div>
|
124
125
|
</div>
|
125
126
|
|
126
127
|
<div>
|
127
|
-
<div
|
128
|
+
<div>{i18n('theme.darkMode').d('黑白主题')}</div>
|
128
129
|
<div>
|
129
|
-
<Select v-model={state.dark} onChange={handler.onDarkChange} size="mini"
|
130
|
-
<SelectOption label=
|
131
|
-
<SelectOption label=
|
130
|
+
<Select v-model={state.dark} onChange={handler.onDarkChange} size="mini" popperAttrs={publicPopperAttrs}>
|
131
|
+
<SelectOption label={i18n('theme.darkModeOn').d('黑色主题')} val="dark"/>
|
132
|
+
<SelectOption label={i18n('theme.darkModeOff').d('白色主题')} val="light"/>
|
132
133
|
</Select>
|
133
134
|
</div>
|
134
135
|
</div>
|
135
136
|
|
136
137
|
<div>
|
137
|
-
<div
|
138
|
+
<div>{i18n('theme.radiusMode').d('圆角类型')}</div>
|
138
139
|
<div>
|
139
|
-
<Select v-model={state.shape} onChange={handler.onShapeChange} size="mini"
|
140
|
-
<SelectOption label=
|
141
|
-
<SelectOption label=
|
142
|
-
<SelectOption label=
|
140
|
+
<Select v-model={state.shape} onChange={handler.onShapeChange} size="mini" popperAttrs={publicPopperAttrs}>
|
141
|
+
<SelectOption label={i18n('theme.radiusModeRound').d('圆角')} val="round"/>
|
142
|
+
<SelectOption label={i18n('theme.radiusModeNormal').d('小圆角')} val="square"/>
|
143
|
+
<SelectOption label={i18n('theme.radiusModeNone').d('无圆角')} val="none"/>
|
143
144
|
</Select>
|
144
145
|
</div>
|
145
146
|
</div>
|
146
147
|
|
147
148
|
<div>
|
148
|
-
<div
|
149
|
+
<div>{i18n('theme.scale').d('大小缩放')}</div>
|
149
150
|
<Select v-model={state.zoom} onChange={handler.onZoomChange} size="mini" placeholder="页面缩放" popperAttrs={publicPopperAttrs}>
|
150
151
|
<SelectOption label="0.6" val={0.6}/>
|
151
152
|
<SelectOption label="0.7" val={0.7}/>
|
package/src/packages/entry.tsx
CHANGED
@@ -27,6 +27,7 @@ export {RadioGroup} from "./components/RadioGroup";
|
|
27
27
|
export {DropdownOption} from "./components/DropdownOption";
|
28
28
|
export {Dropdown} from "./components/Dropdown";
|
29
29
|
export {DropdownGroup} from "./components/DropdownGroup";
|
30
|
+
export {DropdownSeparator} from "./components/DropdownSeparator";
|
30
31
|
export {VirtualList} from "./components/VirtualList";
|
31
32
|
export {Segment} from "./components/Segment";
|
32
33
|
export {SegmentGroup} from "./components/SegmentGroup";
|
@@ -244,4 +244,40 @@ export const EnUsLocale: tZhCnLocale = {
|
|
244
244
|
queryTotal: 'query total',
|
245
245
|
columnTitle: 'column title',
|
246
246
|
},
|
247
|
+
theme: {
|
248
|
+
inputMode: 'INPUT MODE',
|
249
|
+
inputModeFlat: 'flat',
|
250
|
+
inputModelStroke: 'stroke',
|
251
|
+
primaryColor: 'PRIMARY COLOR',
|
252
|
+
size: 'SIZE',
|
253
|
+
sizeLarge: 'large',
|
254
|
+
sizeNormal: 'normal',
|
255
|
+
sizeSmall: 'small',
|
256
|
+
sizeMini: 'mini',
|
257
|
+
darkMode: 'DARK MODE',
|
258
|
+
darkModeOn: 'dark',
|
259
|
+
darkModeOff: 'light',
|
260
|
+
radiusMode: 'RADIUS MODE',
|
261
|
+
radiusModeRound: 'round',
|
262
|
+
radiusModeNormal: 'filet',
|
263
|
+
radiusModeNone: 'none',
|
264
|
+
scale: 'SCALE'
|
265
|
+
},
|
266
|
+
colorName: {
|
267
|
+
默认主题: 'Default',
|
268
|
+
薄暮: 'Twilight',
|
269
|
+
火山: 'Volcano',
|
270
|
+
日暮: 'Sunset',
|
271
|
+
金盏花: 'MarigoldFlower',
|
272
|
+
日出: 'sunrise',
|
273
|
+
青柠: 'GreenLime',
|
274
|
+
极光绿: 'AuroraGreen',
|
275
|
+
明青: 'MingQing',
|
276
|
+
拂晓蓝: 'FuXiaolan',
|
277
|
+
极客蓝: 'GeekBlue',
|
278
|
+
酱紫: 'SaucePurple',
|
279
|
+
洋红: 'Magenta',
|
280
|
+
极昼: 'Light',
|
281
|
+
黑夜: 'Dark',
|
282
|
+
}
|
247
283
|
};
|
@@ -242,6 +242,42 @@ export const ZhCnLocale = {
|
|
242
242
|
queryTotal: '查询总数',
|
243
243
|
columnTitle: '列标题',
|
244
244
|
},
|
245
|
+
theme: {
|
246
|
+
inputMode: '输入框类型',
|
247
|
+
inputModeFlat: '填充',
|
248
|
+
inputModelStroke: '描边',
|
249
|
+
primaryColor: '主题色',
|
250
|
+
size: '大小尺寸',
|
251
|
+
sizeLarge: '大尺寸',
|
252
|
+
sizeNormal: '中等尺寸',
|
253
|
+
sizeSmall: '小尺寸',
|
254
|
+
sizeMini: '极小尺寸',
|
255
|
+
darkMode: '黑白主题',
|
256
|
+
darkModeOn: '黑色主题',
|
257
|
+
darkModeOff: '白色主题',
|
258
|
+
radiusMode: '圆角类型',
|
259
|
+
radiusModeRound: '圆角',
|
260
|
+
radiusModeNormal: '小圆角',
|
261
|
+
radiusModeNone: '无圆角',
|
262
|
+
scale: '大小缩放'
|
263
|
+
},
|
264
|
+
colorName: {
|
265
|
+
默认主题: '默认主题',
|
266
|
+
薄暮: '薄暮',
|
267
|
+
火山: '火山',
|
268
|
+
日暮: '日暮',
|
269
|
+
金盏花: '金盏花',
|
270
|
+
日出: '日出',
|
271
|
+
青柠: '青柠',
|
272
|
+
极光绿: '极光绿',
|
273
|
+
明青: '明青',
|
274
|
+
拂晓蓝: '拂晓蓝',
|
275
|
+
极客蓝: '极客蓝',
|
276
|
+
酱紫: '酱紫',
|
277
|
+
洋红: '洋红',
|
278
|
+
极昼: '极昼',
|
279
|
+
黑夜: '黑夜',
|
280
|
+
}
|
245
281
|
} as const;
|
246
282
|
|
247
283
|
type ZhCnLocaleUtils<T> = { [k in keyof T]: T[k] extends string ? string : ZhCnLocaleUtils<T[k]> }
|
@@ -1,17 +1,18 @@
|
|
1
1
|
import {designPage} from "plain-design-composition";
|
2
2
|
import {DemoRow} from "../../Demo/DemoRow";
|
3
|
-
import {$message, Button, ButtonGroup, Dropdown, DropdownGroup, DropdownOption, Scroll, VirtualList} from "../../../../packages";
|
3
|
+
import {$message, Button, ButtonGroup, Dropdown, DropdownGroup, DropdownOption, DropdownSeparator, Scroll, VirtualList} from "../../../../packages";
|
4
4
|
import AddressData from '../../../data/address.json';
|
5
5
|
|
6
6
|
export const demo1 = designPage(() => {
|
7
7
|
return () => (
|
8
8
|
<DemoRow title="基本用法">
|
9
|
-
<Dropdown onSelect={(data) => $message('select ' + data.props.val)}>
|
9
|
+
<Dropdown onSelect={(data) => $message('select ' + data.props.val)} sizeEqual>
|
10
10
|
{{
|
11
11
|
default: () => <Button label="Click to open dropdown"/>,
|
12
12
|
popper: () => <>
|
13
13
|
<DropdownOption label="选项一" val="tag-1" onClick={() => $message('click tag-1')}/>
|
14
14
|
<DropdownOption label="选项二" val="tag-2" onClick={() => $message('click tag-2')}/>
|
15
|
+
<DropdownSeparator/>
|
15
16
|
<DropdownOption label="选项三" val="tag-3" onClick={() => $message('click tag-3')}/>
|
16
17
|
</>
|
17
18
|
}}
|