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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plain-design",
3
- "version": "1.0.0-beta.32",
3
+ "version": "1.0.0-beta.34",
4
4
  "description": "",
5
5
  "main": "dist/plain-design.min.js",
6
6
  "module": "dist/plain-design.commonjs.min.js",
@@ -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({
@@ -0,0 +1,8 @@
1
+ import {designComponent} from "plain-design-composition";
2
+
3
+ export const DropdownSeparator = designComponent({
4
+ name: 'dropdown-separator',
5
+ setup() {
6
+ return () => (<div className="dropdown-separator"/>);
7
+ },
8
+ });
@@ -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>输入框类型</div>
90
+ <div>{i18n('theme.inputMode').d('输入框类型')}</div>
90
91
  <div>
91
- <Select v-model={state.inputMode} onChange={handler.onInputModeChange} size="mini" placeholder="输入框" popperAttrs={publicPopperAttrs}>
92
- <SelectOption label="输入框:填充" val="flat"/>
93
- <SelectOption label="输入框:描边" val="stroke"/>
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>主题颜色</div>
100
+ <div>{i18n('theme.primaryColor').d('主题颜色')}</div>
100
101
  <div>
101
- <Select v-model={state.primaryKey} onChange={handler.onPrimaryChange} size="mini" placeholder="主题色" popperAttrs={publicPopperAttrs}>
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>大小尺寸</div>
116
+ <div>{i18n('theme.size').d('大小尺寸')}</div>
116
117
  <div>
117
- <Select v-model={state.size} onChange={handler.onSizeChange} size="mini" placeholder="主题尺寸" popperAttrs={publicPopperAttrs}>
118
- <SelectOption label="大尺寸" val="large"/>
119
- <SelectOption label="中等尺寸" val="normal"/>
120
- <SelectOption label="小尺寸" val="small"/>
121
- <SelectOption label="极小尺寸" val="mini"/>
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>黑白主题</div>
128
+ <div>{i18n('theme.darkMode').d('黑白主题')}</div>
128
129
  <div>
129
- <Select v-model={state.dark} onChange={handler.onDarkChange} size="mini" placeholder="黑白主题" popperAttrs={publicPopperAttrs}>
130
- <SelectOption label="黑色主题" val="dark"/>
131
- <SelectOption label="白色主题" val="light"/>
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>圆角类型</div>
138
+ <div>{i18n('theme.radiusMode').d('圆角类型')}</div>
138
139
  <div>
139
- <Select v-model={state.shape} onChange={handler.onShapeChange} size="mini" placeholder="圆角类型" popperAttrs={publicPopperAttrs}>
140
- <SelectOption label="圆角" val="round"/>
141
- <SelectOption label="小圆角" val="square"/>
142
- <SelectOption label="无圆角" val="none"/>
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>大小缩放</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}/>
@@ -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
  }}