plain-design 1.0.0-beta.32 → 1.0.0-beta.34

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/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
  }}