diginet-core-ui 1.3.85 → 1.3.86

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 (51) hide show
  1. package/components/accordion/css.js +10 -10
  2. package/components/accordion/details.js +2 -2
  3. package/components/alert/index.js +3 -3
  4. package/components/alert/notify.js +2 -2
  5. package/components/avatar/index.js +3 -3
  6. package/components/badge/index.js +6 -6
  7. package/components/button/icon.js +9 -9
  8. package/components/button/index.js +9 -9
  9. package/components/button/more.js +2 -2
  10. package/components/card/index.js +6 -6
  11. package/components/chip/index.js +7 -7
  12. package/components/form-control/attachment/index.js +335 -479
  13. package/components/form-control/calendar/function.js +5 -5
  14. package/components/form-control/checkbox/index.js +6 -6
  15. package/components/form-control/date-picker/index.js +2 -2
  16. package/components/form-control/date-range-picker/index.js +2 -2
  17. package/components/form-control/dropdown/index.js +335 -451
  18. package/components/form-control/dropdown-box/index.js +2 -2
  19. package/components/form-control/input-base/index.js +52 -58
  20. package/components/form-control/radio/index.js +4 -4
  21. package/components/form-control/toggle/index.js +2 -2
  22. package/components/grid/index.js +2 -2
  23. package/components/image/index.js +3 -3
  24. package/components/modal/body.js +2 -2
  25. package/components/modal/footer.js +3 -3
  26. package/components/modal/header.js +3 -3
  27. package/components/modal/modal.js +2 -2
  28. package/components/paging/page-info.js +6 -6
  29. package/components/paging/page-selector2.js +3 -3
  30. package/components/popover/footer.js +3 -3
  31. package/components/popover/header.js +3 -3
  32. package/components/popup/v2/index.js +5 -5
  33. package/components/rating/index.js +4 -4
  34. package/components/slider/slider-container.js +5 -5
  35. package/components/status/index.js +4 -4
  36. package/components/tab/tab-header.js +2 -2
  37. package/components/tab/tab-panel.js +2 -2
  38. package/components/tab/tab.js +7 -7
  39. package/components/tooltip/index.js +2 -2
  40. package/components/tree-view/css.js +4 -4
  41. package/components/tree-view/index.js +4 -4
  42. package/global/index.js +12 -0
  43. package/icons/effect.js +57 -59
  44. package/package.json +1 -1
  45. package/readme.md +6 -0
  46. package/styles/general.js +280 -114
  47. package/styles/utils.js +10 -0
  48. package/utils/array/array.js +18 -25
  49. package/utils/sb-template.js +2 -2
  50. package/utils/string/string.js +1 -9
  51. package/utils/validate.js +2 -2
@@ -8,7 +8,7 @@ import { randomString } from "../../utils";
8
8
  import { hexToRGBA } from "../../styles/color-helper";
9
9
  import { color as colors } from "../../styles/colors";
10
10
  import theme from "../../theme/settings";
11
- import { alignCenter, border, cursorPointer, flexRow, flexRowReverse, inlineFlex, outlineNone, overflowHidden, pointerEventsNone, positionAbsolute, positionRelative } from "../../styles/general";
11
+ import { itemsCenter, border, cursorPointer, flexRow, flexRowReverse, displayInlineFlex, outlineNone, overflowHidden, pointerEventsNone, positionAbsolute, positionRelative } from "../../styles/general";
12
12
  const {
13
13
  colors: {
14
14
  system: {
@@ -133,7 +133,7 @@ const Rating = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(({
133
133
  }, [half, color, quantity, readOnly, disabled, selector, width, height, onRating, valueState]);
134
134
  }));
135
135
  const RatingRootCSS = css`
136
- ${inlineFlex};
136
+ ${displayInlineFlex};
137
137
  ${flexRowReverse};
138
138
  &.disabled,
139
139
  &.read-only {
@@ -188,9 +188,9 @@ const RatingItemHaftCSS = color => css`
188
188
  }
189
189
  `;
190
190
  const RatingItemCSS = (RatingItemHaftCSSName, color, half) => css`
191
- ${inlineFlex};
191
+ ${displayInlineFlex};
192
192
  ${positionRelative};
193
- ${alignCenter};
193
+ ${itemsCenter};
194
194
  svg {
195
195
  transition: color 0.15s linear;
196
196
  }
@@ -7,7 +7,7 @@ import { ButtonIcon } from '..';
7
7
  import { randomString } from "../../utils";
8
8
  import SliderItem from "./slider-item";
9
9
  import { color as colors } from "../../styles/colors";
10
- import { alignCenter, backgroundTransparent, borderBox, cursorPointer, displayNone, flexCol, flexRow, justifyCenter, overflowHidden, positionAbsolute, positionRelative, userSelectNone } from "../../styles/general";
10
+ import { itemsCenter, bgTransparent, boxBorder, cursorPointer, displayNone, flexCol, flexRow, justifyCenter, overflowHidden, positionAbsolute, positionRelative, userSelectNone } from "../../styles/general";
11
11
  const {
12
12
  system: {
13
13
  active,
@@ -238,15 +238,15 @@ const SliderContainer = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(({
238
238
  }));
239
239
  const containerCSS = IDs => css`
240
240
  * {
241
- ${borderBox};
241
+ ${boxBorder};
242
242
  margin: 0;
243
243
  padding: 0;
244
244
  }
245
245
  ${flexCol};
246
- ${alignCenter};
246
+ ${itemsCenter};
247
247
  ${justifyCenter};
248
248
  ${positionRelative};
249
- ${backgroundTransparent};
249
+ ${bgTransparent};
250
250
  height: 100%;
251
251
  resize: both;
252
252
  .${IDs.icon} {
@@ -275,7 +275,7 @@ const containerCSS = IDs => css`
275
275
  .${IDs.slideContainer} {
276
276
  ${overflowHidden};
277
277
  ${positionRelative};
278
- ${backgroundTransparent};
278
+ ${bgTransparent};
279
279
  height: 95%;
280
280
  margin: 0 auto;
281
281
  width: 100%;
@@ -5,7 +5,7 @@ import { Icon, Typography } from "./..";
5
5
  import OptionWrapper from "../others/option-wrapper";
6
6
  import PropTypes from 'prop-types';
7
7
  import { forwardRef, memo, useImperativeHandle, useMemo, useRef } from 'react';
8
- import { alignCenter, backgroundTransparent, borderBox, flexRow, parseMinHeight, parseWidth } from "../../styles/general";
8
+ import { itemsCenter, bgTransparent, boxBorder, flexRow, parseMinHeight, parseWidth } from "../../styles/general";
9
9
  import { useTheme, useColor as colors } from "../../theme";
10
10
  import { classNames } from "../../utils";
11
11
  const {
@@ -75,9 +75,9 @@ const Status = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(({
75
75
  }));
76
76
  const StatusRootCSS = (iconSize, color, size, outlinedPaddingSize) => css`
77
77
  ${flexRow};
78
- ${alignCenter};
79
- ${backgroundTransparent};
80
- ${borderBox};
78
+ ${itemsCenter};
79
+ ${bgTransparent};
80
+ ${boxBorder};
81
81
  ${parseWidth('fit-content')};
82
82
  ${parseMinHeight(iconSize)};
83
83
  gap: ${spacing([size === 'small' ? 0.5 : 1])};
@@ -5,7 +5,7 @@ import { jsx, css } from '@emotion/core';
5
5
  import PropTypes from 'prop-types';
6
6
  import TabContext from "./context";
7
7
  import ButtonIcon from "../button/icon";
8
- import { borderBox, displayNone, flexCol, flexRow, justifyCenter, overflowHidden, parseWidth, parseWidthHeight, positionRelative, whiteSpaceNoWrap } from "../../styles/general";
8
+ import { boxBorder, displayNone, flexCol, flexRow, justifyCenter, overflowHidden, parseWidth, parseWidthHeight, positionRelative, whiteSpaceNoWrap } from "../../styles/general";
9
9
  import { classNames, refType as ref } from "../../utils";
10
10
  import theme from "../../theme/settings";
11
11
  const {
@@ -90,7 +90,7 @@ const ContainerCSS = (centered, isVertical, width) => css`
90
90
  ${flexRow};
91
91
  ${overflowHidden};
92
92
  ${positionRelative};
93
- ${borderBox};
93
+ ${boxBorder};
94
94
  ${parseWidthHeight(width, 'auto')};
95
95
  ${centered && justifyCenter};
96
96
  flex-direction: ${isVertical ? 'column' : 'row'};
@@ -4,7 +4,7 @@ import { memo, forwardRef, useContext, useRef, useEffect, useState, useImperativ
4
4
  import { jsx, css } from '@emotion/core';
5
5
  import PropTypes from 'prop-types';
6
6
  import TabContext from "./context";
7
- import { borderBox, displayNone, flexCol, parseWidthHeight, positionRelative } from "../../styles/general";
7
+ import { boxBorder, displayNone, flexCol, parseWidthHeight, positionRelative } from "../../styles/general";
8
8
  import theme from "../../theme/settings";
9
9
  import { classNames, refType as ref } from "../../utils";
10
10
  const {
@@ -61,7 +61,7 @@ const TabPanel = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(({
61
61
  }));
62
62
  const TabPanelCSS = (isVertical, isActive) => css`
63
63
  ${flexCol};
64
- ${borderBox};
64
+ ${boxBorder};
65
65
  ${positionRelative};
66
66
  ${isActive ? flexCol : displayNone};
67
67
  ${parseWidthHeight('100%', isVertical ? 300 : '100%')}
@@ -8,7 +8,7 @@ import { color as colors } from "../../styles/colors";
8
8
  import Ripple from "../button/ripple-effect";
9
9
  import Typography from "../typography";
10
10
  import TabContext from "./context";
11
- import { alignCenter, backgroundTransparent, borderBox, boxShadowNone, breakWord, cursorDefault, cursorPointer, flexRow, justifyCenter, justifyStart, outlineNone, overflowHidden, pointerEventsNone, positionAbsolute, positionRelative, textCenter, whiteSpaceNoWrap } from "../../styles/general";
11
+ import { itemsCenter, bgTransparent, boxBorder, shadowNone, breakWord, cursorDefault, cursorPointer, flexRow, justifyCenter, justifyStart, outlineNone, overflowHidden, pointerEventsNone, positionAbsolute, positionRelative, textCenter, whiteSpaceNoWrap } from "../../styles/general";
12
12
  import { classNames, refType as ref } from "../../utils";
13
13
  import theme from "../../theme/settings";
14
14
  const {
@@ -107,15 +107,15 @@ const TabItem = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(({
107
107
  const TabButtonCSS = (color, isVertical) => css`
108
108
  ${flexRow};
109
109
  ${overflowHidden};
110
- ${alignCenter};
110
+ ${itemsCenter};
111
111
  ${isVertical ? justifyStart : justifyCenter};
112
- ${borderBox};
112
+ ${boxBorder};
113
113
  ${cursorPointer};
114
114
  ${positionRelative};
115
115
  ${outlineNone};
116
116
  ${breakWord};
117
117
  ${whiteSpaceNoWrap};
118
- ${boxShadowNone};
118
+ ${shadowNone};
119
119
  ${!isVertical && textCenter};
120
120
  flex: 0 0 auto;
121
121
  background-color: ${white};
@@ -128,7 +128,7 @@ const TabButtonCSS = (color, isVertical) => css`
128
128
  transition: all 0.2s ease-in-out, background-color 0.2s ease-in-out;
129
129
  &.disabled {
130
130
  ${pointerEventsNone};
131
- ${backgroundTransparent};
131
+ ${bgTransparent};
132
132
  ${cursorDefault};
133
133
  color: ${systemDisabled};
134
134
  }
@@ -162,10 +162,10 @@ const IndicatorCSS = isVertical => css`
162
162
  `;
163
163
  const ButtonIconCSS = css`
164
164
  ${flexRow};
165
- ${alignCenter};
165
+ ${itemsCenter};
166
166
  ${justifyCenter};
167
167
  ${positionRelative};
168
- ${borderBox};
168
+ ${boxBorder};
169
169
  max-height: 24px;
170
170
  max-width: 24px;
171
171
  margin-right: ${spacing([1])};
@@ -5,7 +5,7 @@ import PropTypes from 'prop-types';
5
5
  import { createPortal } from 'react-dom';
6
6
  import { classNames, randomString } from "../../utils";
7
7
  import { jsx, css } from '@emotion/core';
8
- import { borderBox, borderRadius4px, breakWord, displayInlineBlock, parseWidthHeight, positionAbsolute, userSelectNone } from "../../styles/general";
8
+ import { boxBorder, borderRadius4px, breakWord, displayInlineBlock, parseWidthHeight, positionAbsolute, userSelectNone } from "../../styles/general";
9
9
  import { useColor as colors, useTheme } from "../../theme";
10
10
  const {
11
11
  colors: {
@@ -453,7 +453,7 @@ const ArrowCSS = css`
453
453
  `;
454
454
  const MainCSS = (backgroundColor, color, size, padding, textAlign) => css`
455
455
  ${displayInlineBlock};
456
- ${borderBox};
456
+ ${boxBorder};
457
457
  ${positionAbsolute};
458
458
  ${userSelectNone};
459
459
  ${borderRadius4px};
@@ -1,5 +1,5 @@
1
1
  import { css } from '@emotion/core';
2
- import { alignCenter, borderBox, cursorPointer, displayBlock, displayInlineBlock, flexRow, positionRelative } from "../../styles/general";
2
+ import { itemsCenter, boxBorder, cursorPointer, displayBlock, displayInlineBlock, flexRow, positionRelative } from "../../styles/general";
3
3
  import theme from "../../theme/settings";
4
4
  const {
5
5
  colors: {
@@ -16,7 +16,7 @@ export const TreeViewRootCSS = css`
16
16
  .DGN-UI-Accordion {
17
17
  box-shadow: none !important;
18
18
  .DGN-UI-Accordion-Summary {
19
- ${alignCenter};
19
+ ${itemsCenter};
20
20
  min-height: 40px;
21
21
  padding: 0;
22
22
  border-radius: 0;
@@ -61,8 +61,8 @@ export const TreeViewRootCSS = css`
61
61
  .TreeView-Item {
62
62
  ${flexRow};
63
63
  ${positionRelative};
64
- ${alignCenter};
65
- ${borderBox};
64
+ ${itemsCenter};
65
+ ${boxBorder};
66
66
  min-height: 40px;
67
67
  text-align: left;
68
68
  color: ${theme.colors.text.main};
@@ -7,7 +7,7 @@ import { jsx, css } from '@emotion/core';
7
7
  import { Accordion, AccordionSummary, AccordionDetails, Typography, Checkbox, Divider, InputBase, ButtonIcon } from '..';
8
8
  import { classNames, mapParent, randomString, removeUnicode } from "../../utils";
9
9
  import { getGlobal } from "../../global";
10
- import { alignCenter, borderBox, cursorPointer, displayBlock, displayInlineBlock, flexRow, positionRelative } from "../../styles/general";
10
+ import { itemsCenter, boxBorder, cursorPointer, displayBlock, displayInlineBlock, flexRow, positionRelative } from "../../styles/general";
11
11
  import theme from "../../theme/settings";
12
12
  const {
13
13
  colors: {
@@ -801,7 +801,7 @@ const TreeViewRootCSS = css`
801
801
  .DGN-UI-Accordion {
802
802
  box-shadow: none !important;
803
803
  .DGN-UI-Accordion-Summary {
804
- ${alignCenter};
804
+ ${itemsCenter};
805
805
  min-height: 40px;
806
806
  padding: 0;
807
807
  border-radius: 0;
@@ -846,8 +846,8 @@ const TreeViewRootCSS = css`
846
846
  .TreeView-Item {
847
847
  ${flexRow};
848
848
  ${positionRelative};
849
- ${alignCenter};
850
- ${borderBox};
849
+ ${itemsCenter};
850
+ ${boxBorder};
851
851
  min-height: 40px;
852
852
  text-align: left;
853
853
  color: ${textMain};
package/global/index.js CHANGED
@@ -19,6 +19,12 @@ const globalObject = {
19
19
  dropFileHere: 'Kéo và thả tập tin đính kèm vào đây',
20
20
  deleteNotifyText: 'Bạn có chắc muốn xóa (những) đính kèm này?',
21
21
  attachText: 'Đính kèm',
22
+ noFileText: 'Không có file đính kèm',
23
+ byName: 'Theo tên',
24
+ byType: 'Theo loại',
25
+ bySize: 'Theo kích thước',
26
+ byDate: 'Theo ngày',
27
+ byOwner: 'Theo người tạo',
22
28
  errorDefault: {
23
29
  maxFile: ' vượt quá số lượng cho phép!',
24
30
  maxSize: ' quá dung lượng cho phép!',
@@ -85,6 +91,12 @@ const globalObject = {
85
91
  dropFileHere: 'Drop files here',
86
92
  deleteNotifyText: 'Are you sure you want to delete this attachment(s)?',
87
93
  attachText: 'Attachment',
94
+ noFileText: 'No attachments',
95
+ byName: 'By name',
96
+ byType: 'By type',
97
+ bySize: 'By size',
98
+ byDate: 'By date',
99
+ byOwner: 'By owner',
88
100
  errorDefault: {
89
101
  maxFile: ' exceeded the allowed number!',
90
102
  maxSize: ' is/are too large to allow!',
package/icons/effect.js CHANGED
@@ -1,50 +1,37 @@
1
1
  /** @jsxRuntime classic */
2
2
  /** @jsx jsx */
3
- import { memo, useRef, useMemo, forwardRef, useImperativeHandle } from 'react';
4
- import PropTypes from 'prop-types';
5
- import { jsx, css } from '@emotion/core';
3
+ import { css, jsx } from '@emotion/core';
6
4
  import OptionWrapper from "../components/others/option-wrapper";
7
- import { color as colors } from "../styles/colors";
5
+ import PropTypes from 'prop-types';
6
+ import { forwardRef, memo, useImperativeHandle, useMemo, useRef } from 'react';
7
+ import { itemsCenter, boxBorder, flexRow, justifyCenter, outlineNone, parseMinWidthHeight, parseWidthHeight, userSelectNone } from "../styles/general";
8
+ import { useColor as colors, useTheme } from "../theme";
9
+ import { capitalize, classNames, refType as ref } from "../utils";
8
10
  import * as Icons from "./basic";
9
- import { capitalize } from "../utils";
10
- import { alignCenter, borderBox, flexRow, justifyCenter, outlineNone, userSelectNone } from "../styles/general";
11
11
  const {
12
- system: {
13
- rest
12
+ colors: {
13
+ system: {
14
+ rest: systemRest
15
+ }
14
16
  }
15
- } = colors;
17
+ } = useTheme();
16
18
  const Icon = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(({
17
19
  action = {},
18
- name,
19
20
  className,
20
- style,
21
21
  color,
22
- width,
23
22
  height,
24
- viewBox,
23
+ id,
24
+ name,
25
25
  onClick,
26
+ style,
27
+ viewBox,
28
+ width,
26
29
  ...props
27
30
  }, reference) => {
31
+ if (!reference) reference = useRef(null);
28
32
  const ref = useRef(null);
29
- const IconCss = css`
30
- ${flexRow};
31
- ${justifyCenter};
32
- ${alignCenter};
33
- ${borderBox};
34
- ${outlineNone};
35
- ${userSelectNone};
36
- width: max-content;
37
- height: max-content;
38
- min-width: ${width ? isNaN(width) ? width : width + 'px' : '24px'};
39
- min-height: ${width ? isNaN(height) ? height : height + 'px' : '24px'};
40
- `;
41
- const NotFoundIcon = css`
42
- ${flexRow};
43
- ${borderBox};
44
- width: ${width ? isNaN(width) ? width : width + 'px' : '24px'};
45
- height: ${width ? isNaN(width) ? width : width + 'px' : '24px'};
46
- border: 1px dashed ${rest};
47
- `;
33
+ const _IconCSS = IconCSS(width, height);
34
+ const _NotFoundIconCSS = NotFoundIconCSS(width);
48
35
  useImperativeHandle(reference, () => {
49
36
  const currentRef = ref.current || {};
50
37
  currentRef.element = ref.current;
@@ -68,48 +55,61 @@ const Icon = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(({
68
55
  });
69
56
  } else {
70
57
  node = jsx("span", {
71
- css: NotFoundIcon
58
+ css: _NotFoundIconCSS
72
59
  });
73
60
  }
74
61
  return jsx("span", {
75
- className: 'DGN-UI-Icon ' + className,
76
- style: style,
77
- css: IconCss,
62
+ css: _IconCSS,
78
63
  ref: ref,
64
+ id: id,
65
+ className: classNames('DGN-UI-Icon', className),
66
+ style: style,
79
67
  onClick: onClick,
80
68
  ...props
81
69
  }, node);
82
- }, [name, color, width, height, className, style, viewBox, onClick]);
70
+ }, [className, color, height, id, name, onClick, style, viewBox, width, props]);
83
71
  }));
72
+ const IconCSS = (width = 24, height = 24) => css`
73
+ ${flexRow};
74
+ ${justifyCenter};
75
+ ${itemsCenter};
76
+ ${boxBorder};
77
+ ${outlineNone};
78
+ ${userSelectNone};
79
+ ${parseWidthHeight('max-content')};
80
+ ${parseMinWidthHeight(width, height)};
81
+ `;
82
+ const NotFoundIconCSS = (width = 24) => css`
83
+ ${flexRow};
84
+ ${boxBorder};
85
+ ${parseWidthHeight(width)};
86
+ border: 1px dashed ${systemRest};
87
+ `;
84
88
  Icon.defaultProps = {
85
89
  className: '',
86
- style: {},
87
90
  color: 'dark6',
91
+ height: 24,
92
+ style: {},
88
93
  viewBox: true,
89
- width: 24,
90
- height: 24
94
+ width: 24
91
95
  };
92
96
  Icon.propTypes = {
93
- /** name of icon in icons store */
94
- name: PropTypes.string.isRequired,
95
- /** color of icon<br />
96
- * default: #7F828E
97
- */
98
- color: PropTypes.string,
99
- /** className of icon in icons store */
97
+ /** Class for component. */
100
98
  className: PropTypes.string,
101
- /** style of icon in icons store */
102
- style: PropTypes.object,
103
- /** the width of icon */
104
- width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
105
- /** the height of icon */
99
+ /** The color of the component. */
100
+ color: PropTypes.string,
101
+ /** Height of the component. */
106
102
  height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
107
- /** have view box if true */
103
+ /** Name of icon in [Basic Icon](https://core.diginet.com.vn/ui/?path=/story/icon-basic) */
104
+ name: PropTypes.string.isRequired,
105
+ /** Style inline of component. */
106
+ style: PropTypes.object,
107
+ /** If `true`, component have view box. */
108
108
  viewBox: PropTypes.bool,
109
- /** have view box if true */
110
- onClick: PropTypes.func,
109
+ /** Width of the component. */
110
+ width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
111
111
  /**
112
- * ref methods
112
+ * ref methods (ref.current.instance.*method*)
113
113
  *
114
114
  * * option(): Gets all UI component properties
115
115
  * * Returns value - object
@@ -122,9 +122,7 @@ Icon.propTypes = {
122
122
  * * option(options): Updates the values of several properties
123
123
  * * @param {options} - object
124
124
  */
125
- reference: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
126
- current: PropTypes.instanceOf(Element)
127
- })])
125
+ reference: ref
128
126
  };
129
127
  export { Icon };
130
128
  export default OptionWrapper(Icon);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "diginet-core-ui",
3
- "version": "1.3.85",
3
+ "version": "1.3.86",
4
4
  "description": "The DigiNet core ui",
5
5
  "homepage": "https://diginet.com.vn",
6
6
  "main": "index.js",
package/readme.md CHANGED
@@ -38,6 +38,12 @@ npm test
38
38
  ```
39
39
 
40
40
  ## Changelog
41
+ ## 1.3.86
42
+ - \[Changed\]: Icon – Optimize code
43
+ - \[Fixed\]: Dropdown – Fix bug cannot select multiple after search
44
+ - \[Fixed\]: InputBase – Fix endIconProps not work when endIcon is string
45
+ - \[Fixed\]: Attachment – Fix not show Button Attachment when disabled, readOnly; Update design
46
+
41
47
  ## 1.3.85
42
48
  - \[Fixed\]: Attachment – Fix not fire onChange when select same file
43
49
  - \[Fixed\]: PagingInfo – Fix responsive auto hide element wrong