@dckj-npm/dc-material 0.1.359 → 0.1.361

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.
Files changed (56) hide show
  1. package/build/docs/colorful-button.html +3 -3
  2. package/build/docs/colorful-input.html +3 -3
  3. package/build/docs/index.html +3 -3
  4. package/build/docs/{umi.d22560a0.css → umi.a2a18b22.css} +1 -1
  5. package/build/docs/umi.e8fefa28.js +1 -0
  6. package/build/docs/~demos/colorful-button-demo.html +3 -3
  7. package/build/docs/~demos/colorful-input-demo.html +3 -3
  8. package/build/lowcode/assets-daily.json +13 -13
  9. package/build/lowcode/assets-dev.json +2 -2
  10. package/build/lowcode/assets-prod.json +13 -13
  11. package/build/lowcode/index.js +1 -1
  12. package/build/lowcode/meta.design.js +1 -1
  13. package/build/lowcode/meta.js +1 -1
  14. package/build/lowcode/preview.js +6 -6
  15. package/build/lowcode/render/default/view.css +1 -1
  16. package/build/lowcode/render/default/view.js +5 -5
  17. package/build/lowcode/view.css +1 -1
  18. package/build/lowcode/view.js +5 -5
  19. package/dist/BizComps.css +1 -1
  20. package/dist/BizComps.js +2 -2
  21. package/dist/BizComps.js.map +1 -1
  22. package/es/components/custom-form/custom-form.d.ts +37 -0
  23. package/es/components/custom-form/custom-form.js +158 -0
  24. package/es/components/custom-form/index.d.ts +6 -0
  25. package/es/components/custom-form/index.js +6 -0
  26. package/es/components/custom-form/index.scss +25 -0
  27. package/es/components/teletext-list/schema.json +1278 -0
  28. package/es/components/teletext-list/teletext-list-item.js +13 -9
  29. package/es/components/teletext-list/teletext-list-item.scss +16 -0
  30. package/es/components/teletext-list/teletext-list.js +2 -1
  31. package/es/index.d.ts +2 -0
  32. package/es/index.js +4 -0
  33. package/es/style.js +8 -0
  34. package/es/utils/children-node-handle.js +5 -0
  35. package/lib/components/custom-form/custom-form.d.ts +37 -0
  36. package/lib/components/custom-form/custom-form.js +164 -0
  37. package/lib/components/custom-form/index.d.ts +6 -0
  38. package/lib/components/custom-form/index.js +6 -0
  39. package/lib/components/custom-form/index.scss +25 -0
  40. package/lib/components/teletext-list/schema.json +1278 -0
  41. package/lib/components/teletext-list/teletext-list-item.js +13 -9
  42. package/lib/components/teletext-list/teletext-list-item.scss +16 -0
  43. package/lib/components/teletext-list/teletext-list.js +2 -1
  44. package/lib/index.d.ts +2 -0
  45. package/lib/index.js +6 -1
  46. package/lib/style.js +8 -0
  47. package/lib/utils/children-node-handle.js +5 -0
  48. package/lowcode/custom-form/meta.ts +307 -0
  49. package/lowcode_es/custom-form/meta.d.ts +22 -0
  50. package/lowcode_es/custom-form/meta.js +302 -0
  51. package/lowcode_es/meta.js +3 -2
  52. package/lowcode_lib/custom-form/meta.d.ts +22 -0
  53. package/lowcode_lib/custom-form/meta.js +307 -0
  54. package/lowcode_lib/meta.js +41 -40
  55. package/package.json +3 -3
  56. package/build/docs/umi.d7be81d3.js +0 -1
@@ -39,8 +39,10 @@ var TeletextListItem = function TeletextListItem(_ref) {
39
39
  _ref$textImgGap = _ref.textImgGap,
40
40
  textImgGap = _ref$textImgGap === void 0 ? 16 : _ref$textImgGap,
41
41
  otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
42
- // 只获取第一张图片
43
- var resultImage = image && image.length > 0 ? image[0] : '';
42
+ // 处理图片地址,兼容字符串和数组,优先取第一个有效字符串
43
+ var resultImage = Array.isArray(image) ? image.find(function (item) {
44
+ return typeof item === 'string' && item.trim();
45
+ }) || '' : typeof image === 'string' ? image : '';
44
46
  var _otherProps = otherProps || {};
45
47
  var tagColorArray = ['orange', 'green'];
46
48
  var tagList = (typeof tags === 'string' ? tags.split(',') : []).map(function (tag) {
@@ -50,13 +52,17 @@ var TeletextListItem = function TeletextListItem(_ref) {
50
52
  });
51
53
 
52
54
  // console.log('itemType', itemType)
53
- var containerClass = "teletext-list__panel__item image-" + imagePlacement + " itemColumns-" + itemColumns;
55
+ var containerClass = "teletext-list__panel__item image-" + imagePlacement + " itemColumns-" + itemColumns + " type-" + type;
54
56
  var containerStyle = _extends({
55
57
  padding: itemPadding + "px",
56
58
  backgroundColor: itemBgColor,
57
59
  alignItems: textAlign,
58
60
  gap: textImgGap + "px"
59
61
  }, style);
62
+ var imageStyle = {
63
+ width: imgWidth + "px",
64
+ height: imgHeight + "px"
65
+ };
60
66
 
61
67
  // 生成图标样式
62
68
  var getIconStyle = function getIconStyle(icon) {
@@ -111,10 +117,7 @@ var TeletextListItem = function TeletextListItem(_ref) {
111
117
  }, _otherProps), resultImage && (imagePlacement === 'left' || imagePlacement === 'top') && type !== 'textOnly' ? convertChildren(children, 'image', {
112
118
  imgSrc: resultImage,
113
119
  className: 'teletext-list__panel__item_image',
114
- style: {
115
- width: imgWidth + "px",
116
- height: imgHeight + "px"
117
- }
120
+ style: imageStyle
118
121
  }) : null, type !== 'imgOnly' && itemType === '开关' && /*#__PURE__*/React.createElement("div", {
119
122
  className: "teletext-list__panel__item__switch",
120
123
  style: {
@@ -211,8 +214,9 @@ var TeletextListItem = function TeletextListItem(_ref) {
211
214
  src: "https://51ymb.com/source/api/upload/1075055372064133120/2025/202502/20250207/1085235703970926592.png",
212
215
  alt: ""
213
216
  }), "Remove"))), resultImage && (imagePlacement === 'right' || imagePlacement === 'bottom') && type !== 'textOnly' ? convertChildren(children, 'image', {
214
- src: resultImage,
215
- className: 'teletext-list__panel__item_image'
217
+ imgSrc: resultImage,
218
+ className: 'teletext-list__panel__item_image',
219
+ style: imageStyle
216
220
  }) : null, iconList === null || iconList === void 0 ? void 0 : iconList.map(function (icon, index) {
217
221
  return /*#__PURE__*/React.createElement("div", {
218
222
  key: index,
@@ -7,7 +7,22 @@
7
7
  gap: 5px;
8
8
  // padding-bottom: 10px;
9
9
  justify-content: flex-start;
10
+ align-items: flex-start;
10
11
  background-color: #f8f9fb;
12
+
13
+ &.type-imgOnly {
14
+ .teletext-list__panel__item_image {
15
+ width: 100%;
16
+ height: 100%;
17
+ }
18
+ }
19
+
20
+ &.type-textOnly {
21
+ .teletext-list__panel__item__text {
22
+ width: 100%;
23
+ flex: 1;
24
+ }
25
+ }
11
26
 
12
27
  .teletext-list__panel__item_image {
13
28
  width: 100px;
@@ -28,6 +43,7 @@
28
43
  .teletext-list__panel__item__text {
29
44
  display: flex;
30
45
  flex-direction: column;
46
+ flex: 1;
31
47
  gap: 3px;
32
48
 
33
49
  .teletext-list__panel__item__text__item {
@@ -74,6 +74,7 @@ var TeletextList = function TeletextList(_ref) {
74
74
  };
75
75
  var getDataList = function getDataList() {
76
76
  if (!dataList) return [];
77
+ console.log('dataList2', dataList);
77
78
  return Array.isArray(dataList) ? dataList : [dataList];
78
79
  };
79
80
  return /*#__PURE__*/React.createElement("div", _extends({
@@ -103,7 +104,7 @@ var TeletextList = function TeletextList(_ref) {
103
104
  style: getListStyle()
104
105
  }, dataList ? getDataList().map(function (item, index) {
105
106
  return /*#__PURE__*/React.createElement(TeletextListItem, _extends({
106
- key: index,
107
+ key: item.id || index,
107
108
  onClick: onClick,
108
109
  imagePlacement: imagePlacement,
109
110
  style: itemRowAlign === 'row' ? {
package/es/index.d.ts CHANGED
@@ -79,5 +79,7 @@ export type { CollapseSelectorProps } from './components/collapse-selector';
79
79
  export { CollapseSelector } from './components/collapse-selector';
80
80
  export type { CollapseSelectorItemProps } from './components/collapse-selector-item';
81
81
  export { CollapseSelectorItem } from './components/collapse-selector-item';
82
+ export type { CustomFormProps, CustomFormItemSchema, CustomFormItemType } from './components/custom-form';
83
+ export { CustomForm } from './components/custom-form';
82
84
  declare const bizCssPrefix = "bizpack";
83
85
  export { bizCssPrefix };
package/es/index.js CHANGED
@@ -161,5 +161,9 @@ export { CollapseSelector } from "./components/collapse-selector";
161
161
  // 折叠面板选择器2子项
162
162
 
163
163
  export { CollapseSelectorItem } from "./components/collapse-selector-item";
164
+
165
+ // 自定义表单
166
+
167
+ export { CustomForm } from "./components/custom-form";
164
168
  var bizCssPrefix = 'bizpack';
165
169
  export { bizCssPrefix };
package/es/style.js CHANGED
@@ -9,4 +9,12 @@ import '@alifd/next/es/switch/style';
9
9
  import '@alifd/next/es/breadcrumb/style';
10
10
  import '@alifd/next/es/collapse/style';
11
11
  import '@alifd/next/es/rating/style';
12
+ import '@alifd/next/es/upload/style';
13
+ import '@alifd/next/es/number-picker/style';
14
+ import '@alifd/next/es/date-picker/style';
15
+ import '@alifd/next/es/checkbox/style';
16
+ import '@alifd/next/es/radio/style';
17
+ import '@alifd/next/es/input/style';
18
+ import '@alifd/next/es/responsive-grid/style';
19
+ import '@alifd/next/es/form/style';
12
20
  import './index.scss';
@@ -14,8 +14,13 @@ export function convertChildren(children, key, props) {
14
14
  for (var i = 0; i < children.length; i++) {
15
15
  var child = children[i];
16
16
  if (child.key === key) {
17
+ var _child$props;
17
18
  // 属性融合
18
19
  var propsContact = props ? _extends({}, child.props, props) : child.props;
20
+ // 样式融合
21
+ if (props !== null && props !== void 0 && props.style && (_child$props = child.props) !== null && _child$props !== void 0 && _child$props.style) {
22
+ propsContact.style = _extends({}, child.props.style, props.style);
23
+ }
19
24
  node = /*#__PURE__*/React.cloneElement(child, propsContact);
20
25
  break;
21
26
  }
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import './index.scss';
3
+ import { FormProps } from '@alifd/next/lib/form';
4
+ export type CustomFormItemType = 'Input' | 'TextArea' | 'Select' | 'RadioGroup' | 'CheckboxGroup' | 'NumberPicker' | 'DatePicker' | 'Upload';
5
+ export interface CustomFormItemSchema {
6
+ field: string;
7
+ label?: string;
8
+ required?: boolean;
9
+ componentType?: CustomFormItemType;
10
+ componentProps?: Record<string, any>;
11
+ options?: Array<{
12
+ label: string;
13
+ value: any;
14
+ }>;
15
+ columnSpan?: number;
16
+ formItemProps?: Record<string, any>;
17
+ }
18
+ type GridSpacing = [number] | [number, number] | [number, number, number] | [number, number, number, number];
19
+ export interface CustomFormProps extends Omit<FormProps, 'onSubmit'> {
20
+ columns?: number;
21
+ spacing?: GridSpacing;
22
+ emptyContent?: React.ReactNode;
23
+ formItems?: CustomFormItemSchema[];
24
+ showSubmit?: boolean;
25
+ submitText?: string;
26
+ submitValidate?: boolean;
27
+ submitDataSource?: any;
28
+ submitButtonProps?: Record<string, any>;
29
+ showReset?: boolean;
30
+ resetText?: string;
31
+ resetButtonProps?: Record<string, any>;
32
+ onSubmit?: (values: any, errors: any, field: any) => void;
33
+ onSubmitFailed?: (values: any, errors: any, field: any) => void;
34
+ children?: React.ReactNode;
35
+ }
36
+ declare const CustomForm: React.FC<CustomFormProps>;
37
+ export default CustomForm;
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports["default"] = void 0;
6
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
7
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
+ var _upload = _interopRequireDefault(require("@alifd/next/lib/upload"));
9
+ var _numberPicker = _interopRequireDefault(require("@alifd/next/lib/number-picker"));
10
+ var _datePicker = _interopRequireDefault(require("@alifd/next/lib/date-picker"));
11
+ var _checkbox = _interopRequireDefault(require("@alifd/next/lib/checkbox"));
12
+ var _radio = _interopRequireDefault(require("@alifd/next/lib/radio"));
13
+ var _select = _interopRequireDefault(require("@alifd/next/lib/select"));
14
+ var _input = _interopRequireDefault(require("@alifd/next/lib/input"));
15
+ var _responsiveGrid = _interopRequireDefault(require("@alifd/next/lib/responsive-grid"));
16
+ var _form = _interopRequireDefault(require("@alifd/next/lib/form"));
17
+ var _react = _interopRequireWildcard(require("react"));
18
+ require("./index.scss");
19
+ var _excluded = ["columns", "spacing", "emptyContent", "formItems", "showSubmit", "submitText", "submitValidate", "submitDataSource", "submitButtonProps", "showReset", "resetText", "resetButtonProps", "onSubmit", "onSubmitFailed", "children"];
20
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
21
+ var NextFormAny = _form["default"];
22
+ var ResponsiveGridAny = _responsiveGrid["default"];
23
+ var ResponsiveGridCell = _responsiveGrid["default"].Cell;
24
+ var FormItemAny = _form["default"].Item;
25
+ var InputAny = _input["default"];
26
+ var TextAreaAny = _input["default"].TextArea;
27
+ var SelectAny = _select["default"];
28
+ var RadioGroupAny = _radio["default"].Group;
29
+ var CheckboxGroupAny = _checkbox["default"].Group;
30
+ var DatePickerAny = _datePicker["default"];
31
+ var NumberPickerAny = _numberPicker["default"];
32
+ var UploadAny = _upload["default"];
33
+ var runSubmitDataSource = function runSubmitDataSource(submitDataSource, values, errors, field) {
34
+ if (!submitDataSource) return;
35
+ if (typeof submitDataSource === 'function') {
36
+ submitDataSource(values, errors, field);
37
+ return;
38
+ }
39
+ if (typeof (submitDataSource === null || submitDataSource === void 0 ? void 0 : submitDataSource.run) === 'function') {
40
+ submitDataSource.run(values, errors, field);
41
+ return;
42
+ }
43
+ if (typeof (submitDataSource === null || submitDataSource === void 0 ? void 0 : submitDataSource.execute) === 'function') {
44
+ submitDataSource.execute(values, errors, field);
45
+ return;
46
+ }
47
+ if (typeof (submitDataSource === null || submitDataSource === void 0 ? void 0 : submitDataSource.request) === 'function') {
48
+ submitDataSource.request(values, errors, field);
49
+ return;
50
+ }
51
+ if (typeof (submitDataSource === null || submitDataSource === void 0 ? void 0 : submitDataSource.submit) === 'function') {
52
+ submitDataSource.submit(values, errors, field);
53
+ }
54
+ };
55
+ var renderFormItemComponent = function renderFormItemComponent(item) {
56
+ var componentProps = item.componentProps || {};
57
+ var dataSource = componentProps.dataSource || item.options || [];
58
+ switch (item.componentType) {
59
+ case 'TextArea':
60
+ return /*#__PURE__*/_react["default"].createElement(TextAreaAny, componentProps);
61
+ case 'Select':
62
+ return /*#__PURE__*/_react["default"].createElement(SelectAny, (0, _extends2["default"])({
63
+ dataSource: dataSource
64
+ }, componentProps));
65
+ case 'RadioGroup':
66
+ return /*#__PURE__*/_react["default"].createElement(RadioGroupAny, (0, _extends2["default"])({
67
+ dataSource: dataSource
68
+ }, componentProps));
69
+ case 'CheckboxGroup':
70
+ return /*#__PURE__*/_react["default"].createElement(CheckboxGroupAny, (0, _extends2["default"])({
71
+ dataSource: dataSource
72
+ }, componentProps));
73
+ case 'NumberPicker':
74
+ return /*#__PURE__*/_react["default"].createElement(NumberPickerAny, componentProps);
75
+ case 'DatePicker':
76
+ return /*#__PURE__*/_react["default"].createElement(DatePickerAny, componentProps);
77
+ case 'Upload':
78
+ return /*#__PURE__*/_react["default"].createElement(UploadAny, componentProps);
79
+ case 'Input':
80
+ default:
81
+ return /*#__PURE__*/_react["default"].createElement(InputAny, componentProps);
82
+ }
83
+ };
84
+ var CustomForm = function CustomForm(_ref) {
85
+ var _ref$columns = _ref.columns,
86
+ columns = _ref$columns === void 0 ? 1 : _ref$columns,
87
+ _ref$spacing = _ref.spacing,
88
+ spacing = _ref$spacing === void 0 ? [0, 16, 16, 0] : _ref$spacing,
89
+ _ref$emptyContent = _ref.emptyContent,
90
+ emptyContent = _ref$emptyContent === void 0 ? '添加表单项' : _ref$emptyContent,
91
+ _ref$formItems = _ref.formItems,
92
+ formItems = _ref$formItems === void 0 ? [] : _ref$formItems,
93
+ _ref$showSubmit = _ref.showSubmit,
94
+ showSubmit = _ref$showSubmit === void 0 ? true : _ref$showSubmit,
95
+ _ref$submitText = _ref.submitText,
96
+ submitText = _ref$submitText === void 0 ? '提交' : _ref$submitText,
97
+ _ref$submitValidate = _ref.submitValidate,
98
+ submitValidate = _ref$submitValidate === void 0 ? true : _ref$submitValidate,
99
+ submitDataSource = _ref.submitDataSource,
100
+ submitButtonProps = _ref.submitButtonProps,
101
+ _ref$showReset = _ref.showReset,
102
+ showReset = _ref$showReset === void 0 ? false : _ref$showReset,
103
+ _ref$resetText = _ref.resetText,
104
+ resetText = _ref$resetText === void 0 ? '重置' : _ref$resetText,
105
+ resetButtonProps = _ref.resetButtonProps,
106
+ onSubmit = _ref.onSubmit,
107
+ onSubmitFailed = _ref.onSubmitFailed,
108
+ children = _ref.children,
109
+ otherProps = (0, _objectWithoutPropertiesLoose2["default"])(_ref, _excluded);
110
+ var handleSubmit = (0, _react.useCallback)(function (values, errors, field) {
111
+ if (errors && Object.keys(errors).length) {
112
+ if (onSubmitFailed) {
113
+ onSubmitFailed(values, errors, field);
114
+ }
115
+ return;
116
+ }
117
+ if (onSubmit) {
118
+ onSubmit(values, errors, field);
119
+ }
120
+ runSubmitDataSource(submitDataSource, values, errors, field);
121
+ }, [onSubmit, onSubmitFailed, submitDataSource]);
122
+ var formItemNodes = formItems.map(function (item, index) {
123
+ var colSpan = Math.min(columns, Math.max(1, item.columnSpan || 1));
124
+ var formItemProps = item.formItemProps || {};
125
+ return /*#__PURE__*/_react["default"].createElement(ResponsiveGridCell, {
126
+ colSpan: colSpan,
127
+ key: (item.field || index) + "-form-item"
128
+ }, /*#__PURE__*/_react["default"].createElement(FormItemAny, (0, _extends2["default"])({
129
+ label: item.label,
130
+ name: item.field,
131
+ required: item.required
132
+ }, formItemProps), renderFormItemComponent(item)));
133
+ });
134
+ var childrenNodes = _react["default"].Children.toArray(children).map(function (child, index) {
135
+ if (/*#__PURE__*/_react["default"].isValidElement(child) && child.type === ResponsiveGridCell) {
136
+ return child;
137
+ }
138
+ return /*#__PURE__*/_react["default"].createElement(ResponsiveGridCell, {
139
+ colSpan: 1,
140
+ key: "custom-form-child-" + index
141
+ }, child);
142
+ });
143
+ var hasContent = formItemNodes.length > 0 || childrenNodes.length > 0;
144
+ return /*#__PURE__*/_react["default"].createElement(NextFormAny, (0, _extends2["default"])({
145
+ className: "custom-form"
146
+ }, otherProps), hasContent ? /*#__PURE__*/_react["default"].createElement(ResponsiveGridAny, {
147
+ className: "custom-form__grid",
148
+ gap: spacing,
149
+ columns: columns
150
+ }, formItemNodes, childrenNodes) : /*#__PURE__*/_react["default"].createElement("div", {
151
+ className: "custom-form__empty"
152
+ }, emptyContent), showSubmit || showReset ? /*#__PURE__*/_react["default"].createElement("div", {
153
+ className: "custom-form__actions"
154
+ }, showReset ? /*#__PURE__*/_react["default"].createElement(NextFormAny.Reset, (0, _extends2["default"])({
155
+ className: "custom-form__reset"
156
+ }, resetButtonProps), resetText) : null, showSubmit ? /*#__PURE__*/_react["default"].createElement(NextFormAny.Submit, (0, _extends2["default"])({
157
+ className: "custom-form__submit",
158
+ type: "primary",
159
+ validate: submitValidate,
160
+ onClick: handleSubmit
161
+ }, submitButtonProps), submitText) : null) : null);
162
+ };
163
+ CustomForm.displayName = 'CustomForm';
164
+ var _default = exports["default"] = CustomForm;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 自定义表单
3
+ */
4
+ import CustomForm from './custom-form';
5
+ export type { CustomFormProps, CustomFormItemSchema, CustomFormItemType } from './custom-form';
6
+ export { CustomForm };
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ var _customForm = _interopRequireDefault(require("./custom-form"));
6
+ exports.CustomForm = _customForm["default"];
@@ -0,0 +1,25 @@
1
+ .custom-form {
2
+ background-color: #fafafa;
3
+ }
4
+
5
+ .custom-form__grid {
6
+ width: 100%;
7
+ }
8
+
9
+ .custom-form__empty {
10
+ color: #999;
11
+ padding: 12px 0;
12
+ text-align: center;
13
+ }
14
+
15
+ .custom-form__actions {
16
+ display: flex;
17
+ justify-content: center;
18
+ gap: 12px;
19
+ padding: 12px 0 0;
20
+ }
21
+
22
+ .custom-form__submit,
23
+ .custom-form__reset {
24
+ min-width: 120px;
25
+ }