diginet-core-ui 1.4.50-beta.4 → 1.4.51

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.
@@ -7,7 +7,7 @@ import locale from "../../../locale";
7
7
  import PropTypes from 'prop-types';
8
8
  import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
9
9
  import { render } from 'react-dom';
10
- import { bgColor, borderRadius4px, cursorPointer, displayBlock, displayFlex, displayNone, flexCol, flexRow, invisible, justifyEnd, left, parseHeight, parseMaxWidth, parseMinWidth, pointerEventsNone, positionFixed, shadowLarge, textCenter, top, userSelectNone, whiteSpaceNoWrap, z } from "../../../styles/general";
10
+ import { bgColor, borderRadius4px, cursorPointer, displayBlock, displayFlex, displayNone, flexCol, flexRow, invisible, justifyBetween, justifyEnd, left, parseHeight, parseMaxWidth, parseMinWidth, pointerEventsNone, positionFixed, shadowLarge, textCenter, top, userSelectNone, whiteSpaceNoWrap, z } from "../../../styles/general";
11
11
  import { useTheme } from "../../../theme";
12
12
  import { capitalizeSentenceCase, classNames, isEqual, date as moment, randomString, updatePosition } from "../../../utils";
13
13
  import { generateCalendarCSS, onUpdateNavigator, renderHeader, renderNavigator } from "../calendar/function";
@@ -128,6 +128,7 @@ const DateRangePicker = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, refe
128
128
  const [, setValueFr] = useState(Date.now());
129
129
  const [, setValueTo] = useState(Date.now());
130
130
  const [, setSelected] = useState(Date.now());
131
+ const [focusBtn, setFocusBtn] = useState('today');
131
132
  const [valueState, setValueState] = useState();
132
133
  const navigatorFromRefs = {
133
134
  doubleLeft: useRef(null),
@@ -148,7 +149,13 @@ const DateRangePicker = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, refe
148
149
  const cancelText = getGlobal(['cancel']);
149
150
  const confirmText = getGlobal(['confirm']);
150
151
  const unitText = getGlobal([unitCount]);
152
+ const todayText = getGlobal(['today']);
153
+ const yesterdayText = getGlobal(['yesterday']);
154
+ const thisWeekText = getGlobal(['thisWeek']);
155
+ const thisMonthText = getGlobal(['thisMonth']);
151
156
  const _ControlContainerCSS = ControlContainerCSS(theme);
157
+ const _FooterContainerCSS = FooterContainerCSS(theme);
158
+ const _DateOptionsCSS = DateOptionsCSS(theme);
152
159
  const updateValues = useCallback(v => {
153
160
  values.current = v;
154
161
  setValues();
@@ -761,6 +768,46 @@ const DateRangePicker = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, refe
761
768
  !!onChange && onChange(e);
762
769
  onSwap(true);
763
770
  };
771
+ const onClickPresetDate = type => {
772
+ if (!type) return;
773
+ setFocusBtn(type);
774
+ let value = [];
775
+ const currentDay = new Date();
776
+ switch (type) {
777
+ case 'today':
778
+ value = [new Date(Date.now() - 25200000).valueOf()];
779
+ break;
780
+ case 'yesterday':
781
+ {
782
+ const yesterday = new Date(Date.now() - 86400000 - 25200000);
783
+ value = [new Date(Date.now() - 86400000 - 25200000).valueOf()];
784
+ valueFr.current = yesterday;
785
+ break;
786
+ }
787
+ case 'thisWeek':
788
+ {
789
+ const first = currentDay.getDate() - currentDay.getDay() + 1; // First day is the day of the month - the day of the week
790
+ const last = first + 6; // last day is the first day + 6
791
+ const firstday = new Date(currentDay.setDate(first)).setHours(0, 0, 0).valueOf();
792
+ const lastday = new Date(currentDay.setDate(last)).setHours(0, 0, 0).valueOf();
793
+ value = [firstday, lastday];
794
+ break;
795
+ }
796
+ case 'thisMonth':
797
+ {
798
+ let firstday = new Date(currentDay.getFullYear(), currentDay.getMonth(), 1).valueOf();
799
+ let lastday = new Date(currentDay.getFullYear(), currentDay.getMonth() + 1, 0).valueOf();
800
+ value = [firstday, lastday];
801
+ break;
802
+ }
803
+ default:
804
+ break;
805
+ }
806
+ updateValues(value);
807
+ updateSelected(countDay(values.current));
808
+ renderPicker();
809
+ controls ? setButtonState() : onChangeValue(values.current);
810
+ };
764
811
  useEffect(() => {
765
812
  update(defaultValue);
766
813
  return () => {
@@ -768,9 +815,11 @@ const DateRangePicker = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, refe
768
815
  };
769
816
  }, []);
770
817
  useEffect(() => {
771
- if (value) {
818
+ if (value && value[0] && value[1]) {
772
819
  update(value);
773
820
  closePicker();
821
+ } else {
822
+ ipRef.current.value = '';
774
823
  }
775
824
  }, [value]);
776
825
  useEffect(() => {
@@ -856,6 +905,50 @@ const DateRangePicker = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, refe
856
905
  const endIcon = actionIconAt === 'end' && iconComp;
857
906
  const startIcon = actionIconAt === 'start' && iconComp;
858
907
  const footerMemo = jsx("div", {
908
+ css: _FooterContainerCSS
909
+ }, jsx("div", {
910
+ css: _DateOptionsCSS
911
+ }, jsx(Button, {
912
+ size: "medium",
913
+ labelProps: {
914
+ type: 'h4',
915
+ style: {
916
+ textTransform: 'initial'
917
+ }
918
+ },
919
+ onClick: () => onClickPresetDate('today'),
920
+ color: focusBtn === 'today' && 'primary'
921
+ }, todayText), jsx(Button, {
922
+ size: "medium",
923
+ labelProps: {
924
+ type: 'h4',
925
+ style: {
926
+ textTransform: 'initial'
927
+ }
928
+ },
929
+ onClick: () => onClickPresetDate('yesterday'),
930
+ color: focusBtn === 'yesterday' && 'primary'
931
+ }, yesterdayText), jsx(Button, {
932
+ size: "medium",
933
+ labelProps: {
934
+ type: 'h4',
935
+ style: {
936
+ textTransform: 'initial'
937
+ }
938
+ },
939
+ onClick: () => onClickPresetDate('thisWeek'),
940
+ color: focusBtn === 'thisWeek' && 'primary'
941
+ }, thisWeekText), jsx(Button, {
942
+ size: "medium",
943
+ labelProps: {
944
+ type: 'h4',
945
+ style: {
946
+ textTransform: 'initial'
947
+ }
948
+ },
949
+ onClick: () => onClickPresetDate('thisMonth'),
950
+ color: focusBtn === 'thisMonth' && 'primary'
951
+ }, thisMonthText)), jsx("div", {
859
952
  css: _ControlContainerCSS,
860
953
  className: unique.footer,
861
954
  ref: footerRef
@@ -874,7 +967,7 @@ const DateRangePicker = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, refe
874
967
  color: 'info',
875
968
  className: unique.confirm,
876
969
  onClick: onConfirm
877
- }, confirmText));
970
+ }, confirmText)));
878
971
  const leftCalendarComp = jsx("div", {
879
972
  css: generateCalendarCSS(unique, false, false, theme)
880
973
  }, renderNavigator(unique, navigatorFromRefs, e => setPrevTime(e, 'year', valueFr.current, 'from'), e => setPrevTime(e, 'month', valueFr.current, 'from'), e => setNextTime(e, 'month', valueFr.current, 'from'), e => setNextTime(e, 'year', valueFr.current, 'from')), jsx("div", {
@@ -1029,6 +1122,16 @@ const ControlContainerCSS = ({
1029
1122
  ${justifyEnd};
1030
1123
  margin: ${spacing([0, 4, 4])};
1031
1124
  `;
1125
+ const FooterContainerCSS = () => css`
1126
+ ${displayFlex};
1127
+ ${justifyBetween};
1128
+ `;
1129
+ const DateOptionsCSS = ({
1130
+ spacing
1131
+ }) => css`
1132
+ ${displayFlex};
1133
+ padding-left: ${spacing(4)}px;
1134
+ `;
1032
1135
  const pickerCSS = {
1033
1136
  backGr: ({
1034
1137
  zIndex
@@ -1,15 +1,13 @@
1
1
  /** @jsxRuntime classic */
2
2
  /** @jsx jsx */
3
3
  import { css, jsx } from '@emotion/core';
4
- import { ButtonIcon, InputBase, Label, Popover, PopoverBody, HelperText } from "../..";
4
+ import { ButtonIcon, InputBase, Label, Popover, PopoverBody } from "../..";
5
5
  import PropTypes from 'prop-types';
6
- import { Fragment, forwardRef, memo, useEffect, useImperativeHandle, useLayoutEffect, useRef, useState, useMemo } from 'react';
6
+ import { Fragment, forwardRef, memo, useEffect, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';
7
7
  import { animation, borderColor, displayBlock, overflowHidden, parseHeight, parseMinWidth, positionRelative, scaleX } from "../../../styles/general";
8
8
  import { useTheme } from "../../../theme";
9
9
  import useThemeProps from "../../../theme/utils/useThemeProps";
10
10
  import { classNames, getProp } from "../../../utils";
11
- const regexBetween = /[^{}]+(?=})/g;
12
- const regexInclude = /{|}/g;
13
11
  const DropdownBox = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, reference) => {
14
12
  if (!reference) reference = useRef(null);
15
13
  const theme = useTheme();
@@ -24,14 +22,10 @@ const DropdownBox = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, referenc
24
22
  });
25
23
  const {
26
24
  action = {},
27
- allowInput,
28
25
  bgColor: bgColorProp,
29
26
  children,
30
27
  className,
31
28
  delayOnInput,
32
- disabled,
33
- displayExpr: displayExprProp,
34
- error,
35
29
  endIcon,
36
30
  inputProps,
37
31
  inputRef,
@@ -45,19 +39,10 @@ const DropdownBox = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, referenc
45
39
  placeholder,
46
40
  startIcon,
47
41
  style,
48
- value: valueProps,
49
- valueExpr,
50
- viewType,
51
- helperTextProps
42
+ value,
43
+ viewType
52
44
  } = props;
53
- let displayExpr = displayExprProp;
54
45
  const bgColor = typeof bgColorProp === 'string' ? getProp(colors, bgColorProp, bgColorProp) : bgColorProp;
55
- const ErrorView = useMemo(() => {
56
- return error ? jsx(HelperText, {
57
- ...helperTextProps,
58
- disabled: disabled
59
- }, error) : null;
60
- }, [disabled, error, helperTextProps]);
61
46
  const ref = useRef(null);
62
47
  const dropdownBoxRef = useRef(null);
63
48
  const timer = useRef(null);
@@ -100,28 +85,6 @@ const DropdownBox = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, referenc
100
85
  onClosed === null || onClosed === void 0 ? void 0 : onClosed();
101
86
  }
102
87
  };
103
-
104
- /**
105
- * Chuyển đổi data thành giá trị cần hiện thị dựa vào displayExpr [string, string object {field} - {field}], renderSelectedItem, displayExpr, valueExpr
106
- * @param data {object} rowData of dataSource
107
- * @return {string}
108
- */
109
- const displayValue = data => {
110
- let text = '';
111
- if (data || data === 0) {
112
- displayExpr = displayExpr || valueExpr;
113
- let mask = data === null || data === void 0 ? void 0 : data[displayExpr];
114
- // convert {id} - {name} to {<data[id]>} - {<data[name]>}
115
- if (!mask && regexBetween.test(displayExpr)) {
116
- var _displayExpr;
117
- mask = (_displayExpr = displayExpr) === null || _displayExpr === void 0 ? void 0 : _displayExpr.replace(regexBetween, _ => (data === null || data === void 0 ? void 0 : data[_]) || '');
118
- } else if (!mask) {
119
- mask = typeof data !== 'object' ? data : '';
120
- }
121
- text = mask.toString().replace(regexInclude, '');
122
- }
123
- return text;
124
- };
125
88
  useLayoutEffect(() => {
126
89
  if (ref.current) {
127
90
  const {
@@ -167,17 +130,15 @@ const DropdownBox = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, referenc
167
130
  onClick: openOnClickAt === 'icon' ? onTriggerDropdown : null
168
131
  }) : null;
169
132
  };
170
- const value = displayValue(valueProps);
171
133
  return jsx(Fragment, null, jsx("div", {
172
134
  ref: ref,
173
135
  css: _DropdownBoxRootCSS,
174
- className: classNames('DGN-UI-Dropdown-Box', className, error && 'error'),
136
+ className: classNames('DGN-UI-Dropdown-Box', className),
175
137
  style: style
176
138
  }, label ? jsx(Label, {
177
139
  ...labelProps
178
140
  }, label) : null, jsx(InputBase, {
179
141
  ...inputProps,
180
- readOnly: !allowInput,
181
142
  style: inputStyle,
182
143
  viewType: viewType,
183
144
  inputRef: inputRef,
@@ -196,7 +157,7 @@ const DropdownBox = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((inProps, referenc
196
157
  anchor: ref.current,
197
158
  width: popoverWidth,
198
159
  onClose: closeDropdownBox
199
- }, jsx(PopoverBody, null, children)), ErrorView);
160
+ }, jsx(PopoverBody, null, children)));
200
161
  }));
201
162
  const DropdownBoxRootCSS = (bgColorProp, {
202
163
  colors
@@ -205,17 +166,6 @@ const DropdownBoxRootCSS = (bgColorProp, {
205
166
  ${positionRelative};
206
167
  ${parseMinWidth(150)};
207
168
  ${parseHeight('max-content')};
208
- &.error {
209
- .DGN-UI-InputBase {
210
- ${borderColor(getProp(colors, 'semantic/danger'))};
211
- &::before {
212
- ${borderColor(getProp(colors, 'semantic/danger'))};
213
- }
214
- &::after {
215
- ${borderColor(getProp(colors, 'semantic/danger'))};
216
- }
217
- }
218
- }
219
169
  .DGN-UI-InputBase {
220
170
  background: ${bgColorProp ? bgColorProp === true ? getProp(colors, 'fill/disabled') : bgColorProp : 'inherit'} !important;
221
171
  ${openState && css`
@@ -233,6 +183,20 @@ const DropdownBoxCSS = ({
233
183
  margin-top: ${spacing([1])};
234
184
  ${overflowHidden};
235
185
  `;
186
+
187
+ // DropdownBox.defaultProps = {
188
+ // className: '',
189
+ // label: '',
190
+ // placeholder: '',
191
+ // startIcon: 'Search',
192
+ // endIcon: 'ArrowDown',
193
+ // openOnClickAt: 'icon',
194
+ // viewType: 'underlined',
195
+ // inputProps: {},
196
+ // delayOnInput: 700,
197
+ // zIndex: zIndexCORE(1),
198
+ // };
199
+
236
200
  DropdownBox.propTypes = {
237
201
  /** class for dropdown */
238
202
  className: PropTypes.string,
@@ -269,12 +233,6 @@ DropdownBox.propTypes = {
269
233
  /** the function will run after open */
270
234
  onOpened: PropTypes.func,
271
235
  /** the function will run after close */
272
- onClosed: PropTypes.func,
273
- /** Error message displayed below the input. */
274
- error: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
275
- /** If `true`, the component is disabled. */
276
- disabled: PropTypes.bool,
277
- /** If `true`, the input is enable. */
278
- allowInput: PropTypes.bool
236
+ onClosed: PropTypes.func
279
237
  };
280
238
  export default DropdownBox;
package/global/index.js CHANGED
@@ -45,6 +45,11 @@ const globalObject = {
45
45
  label: 'Thời gian',
46
46
  weekdaysLong: ['Hai', 'Ba', 'Tư', 'Năm', 'Sáu', 'Bảy', 'CN'],
47
47
  weekdaysShort: ['H', 'B', 'T', 'N', 'S', 'B', 'C'],
48
+ // Daterange Picker
49
+ today: 'Hôm nay',
50
+ yesterday: 'Hôm qua',
51
+ thisWeek: 'Tuần này',
52
+ thisMonth: 'Tháng này',
48
53
  // Time Picker
49
54
  months: {
50
55
  full: ['tháng 01', 'tháng 02', 'tháng 03', 'tháng 04', 'tháng 05', 'tháng 06', 'tháng 07', 'tháng 08', 'tháng 09', 'tháng 10', 'tháng 11', 'tháng 12'],
@@ -120,6 +125,11 @@ const globalObject = {
120
125
  label: 'Time',
121
126
  weekdaysLong: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
122
127
  weekdaysShort: ['M', 'T', 'W', 'T', 'F', 'S', 'S'],
128
+ // Daterange Picker
129
+ today: 'Today',
130
+ yesterday: 'Yesterday',
131
+ thisWeek: 'This week',
132
+ thisMonth: 'This month',
123
133
  // Time Picker
124
134
  months: {
125
135
  full: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
package/package.json CHANGED
@@ -1,78 +1,44 @@
1
- {
2
- "name": "diginet-core-ui",
3
- "version": "1.4.50-beta.4",
4
- "description": "",
5
- "main": "index.js",
6
- "license": "UNLICENSED",
7
- "scripts": {
8
- "start": "npm-run-all --parallel start-sb eslint-test",
9
- "start-sb": "start-storybook -p 9050",
10
- "build-storybook": "build-storybook -c .storybook -s src",
11
- "build": "run-script-os",
12
- "build:windows": "rimraf dist && mkdirp dist/components && npm run compile && sass --style=compressed src/scss:dist/css && xcopy src\\\\assets dist\\\\assets\\ /e /y",
13
- "build:darwin:linux:default": "rm -rf dist && npm run compile && sass --style=compressed src/scss:dist/css && cp -rf src/assets dist/assets",
14
- "compile": "babel src --out-dir dist --ignore **/*.stories.js",
15
- "pack": "npm run build && cp *.md dist/ && npm run version:bump --silent && npm run version:add --silent && cd dist && npm pack",
16
- "production-keep-version": "npm run build && cp *.md dist/ && cp package.json dist/ && cd dist && npm publish",
17
- "beta": "npm run build && cp *.md dist/ && cp package.json dist/ && cd dist && npm publish --tag beta",
18
- "production": "npm run build && cp *.md dist/ && npm run version:bump --silent && npm run version:add --silent && cd dist && npm publish",
19
- "version:add": "run-script-os",
20
- "version:add:windows": "cat package.json.tmp | sed \"s/0.0.0/%npm_package_version%/g\" > dist/package.json",
21
- "version:add:darwin:linux:default": "VERSION=$(npm run version:extract --silent) && cat package.json.tmp | sed \"s/0.0.0/${VERSION}/g\" > dist/package.json",
22
- "version:bump": "npm version patch --no-git-tag-version --silent",
23
- "version:extract": "cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[\",]//g' | tr -d '[[:space:]]'",
24
- "test": "echo \"Error: no test specified\" && exit 1",
25
- "lint": "eslint --fix --config .eslintrc.js \"**/*.js\"",
26
- "eslint-test": "onchange \"src/**/*.{js,jsx,json}\" -- eslint . --fix",
27
- "freshtall": "npm cache clean --force && rm -rf node_modules && rm -f package-lock.json && npm install",
28
- "test-storybook": "test-storybook --url http://localhost:9050",
29
- "preinstall": "echo {} > package-lock.json"
30
- },
31
- "dependencies": {
32
- "@emotion/core": "^10.0.35",
33
- "@emotion/css": "^11.11.0",
34
- "@emotion/react": "^11.10.6",
35
- "babel-plugin-module-resolver": "^4.1.0",
36
- "date-fns": "^2.30.0",
37
- "prop-types": "^15.7.2"
38
- },
39
- "lint-staged": {
40
- "*/**/*.{js,jsx,json}": [
41
- "prettier --write",
42
- "git add"
43
- ]
44
- },
45
- "devDependencies": {
46
- "@babel/cli": "^7.14.3",
47
- "@babel/plugin-proposal-class-properties": "^7.13.0",
48
- "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0",
49
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
50
- "@babel/plugin-proposal-optional-chaining": "^7.14.2",
51
- "@babel/plugin-proposal-private-methods": "^7.18.6",
52
- "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
53
- "@babel/preset-react": "^7.13.13",
54
- "@storybook/addon-actions": "6.2.9",
55
- "@storybook/addon-essentials": "6.2.9",
56
- "@storybook/addon-links": "6.2.9",
57
- "@storybook/addon-postcss": "^2.0.0",
58
- "@storybook/react": "6.2.9",
59
- "@storybook/test-runner": "^0.7.1",
60
- "autoprefixer": "^10.3.1",
61
- "babel-loader": "^8.2.2",
62
- "eslint": "^8.4.1",
63
- "eslint-plugin-react": "^7.27.1",
64
- "eslint-plugin-regex": "^1.10.0",
65
- "husky": "^7.0.4",
66
- "jest": "^27.5.1",
67
- "lint-staged": "^12.1.2",
68
- "mkdirp": "^1.0.4",
69
- "npm-run-all": "^4.1.5",
70
- "onchange": "^7.1.0",
71
- "postcss-flexbugs-fixes": "^5.0.2",
72
- "react": "^17.0.1",
73
- "react-dom": "^17.0.1",
74
- "rimraf": "^3.0.2",
75
- "run-script-os": "^1.1.6",
76
- "sass": "1.58.3"
77
- }
78
- }
1
+ {
2
+ "name": "diginet-core-ui",
3
+ "version": "1.4.51",
4
+ "description": "The DigiNet core ui",
5
+ "homepage": "https://diginet.com.vn",
6
+ "main": "index.js",
7
+ "scripts": {
8
+ "start-js": "react-scripts start --max_old_space_size=4096",
9
+ "start": "npx npm-run-all -p start-js",
10
+ "build": "GENERATE_SOURCEMAP=false && react-scripts build --env=production --max_old_space_size=8192",
11
+ "eject": "react-scripts eject",
12
+ "test": "echo \"Error: no test specified\" && exit 1"
13
+ },
14
+ "dependencies": {
15
+ "@emotion/core": "^10.0.35",
16
+ "prop-types": "^15.7.2",
17
+ "@emotion/css": "^11.11.0",
18
+ "@emotion/react": "^11.10.6"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://diginetvn@bitbucket.org/diginetvn/diginet-core-ui.git"
23
+ },
24
+ "keywords": [
25
+ "core ui",
26
+ "diginet"
27
+ ],
28
+ "author": "rocachien",
29
+ "contributors": [
30
+ {
31
+ "name": "Chien Do",
32
+ "email": "rocachien@gmail.com"
33
+ },
34
+ {
35
+ "name": "Nhat Tran",
36
+ "email": "tranminhnhat1005@gmail.com"
37
+ },
38
+ {
39
+ "name": "Thuan Nguyen",
40
+ "email": "nt.thuan.hutech@gmail.com"
41
+ }
42
+ ],
43
+ "license": "MIT"
44
+ }
package/readme.md CHANGED
@@ -42,6 +42,13 @@ npm test
42
42
 
43
43
  ## Changelog
44
44
 
45
+ ## 1.4.51
46
+ - \[Changed\]: Treeview - Treeview keeps the search bar visible while scrolling
47
+ - \[Changed\]: DateRangePicker - Quick-selection in DateRangePicker
48
+ - \[Fixed\]: Dropdown – Dropdown data lost in the Filter bar on the Web
49
+ - \[Fixed\]: DateRangePicker – When clearing the value in DateRangePicker CORE, the UI still displays the old value.
50
+ - \[Fixed\]: NumberInput – NumberInput Core when changing 'decimalDigit'
51
+
45
52
  ## 1.4.50
46
53
  - \[Added\]: Icon – Add IconMenu MHRP39N0025, MHRP39N0027, MHRP39N0028
47
54
  - \[Added\]: Attachment – Add HEIF support to getFileType in Attachment