@xqmsg/ui-core 0.15.1 → 0.15.3
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/dist/hooks/useOnOutsideClick.d.ts +2 -0
- package/dist/ui-core.cjs.development.js +70 -42
- package/dist/ui-core.cjs.development.js.map +1 -1
- package/dist/ui-core.cjs.production.min.js +1 -1
- package/dist/ui-core.cjs.production.min.js.map +1 -1
- package/dist/ui-core.esm.js +71 -43
- package/dist/ui-core.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/input/Input.stories.tsx +44 -68
- package/src/components/input/StackedMultiSelect/index.tsx +3 -12
- package/src/components/input/StackedPilledInput/index.tsx +53 -24
- package/src/components/input/StackedSelect/StackedSelect.tsx +2 -2
- package/src/components/input/components/dropdown/index.tsx +1 -1
- package/src/hooks/useOnOutsideClick.tsx +31 -0
|
@@ -531,7 +531,7 @@ var Dropdown = function Dropdown(_ref) {
|
|
|
531
531
|
fontSize: "13px",
|
|
532
532
|
px: "8px",
|
|
533
533
|
py: "4px",
|
|
534
|
-
width: "
|
|
534
|
+
width: "100%",
|
|
535
535
|
color: colors.label.primary.light,
|
|
536
536
|
_hover: {
|
|
537
537
|
color: colors.label.primary.dark,
|
|
@@ -576,6 +576,32 @@ var useDidMountEffect = function useDidMountEffect(func, deps) {
|
|
|
576
576
|
}, deps);
|
|
577
577
|
};
|
|
578
578
|
|
|
579
|
+
function useOnClickOutside(ref, handler) {
|
|
580
|
+
React.useEffect(function () {
|
|
581
|
+
var listener = function listener(event) {
|
|
582
|
+
// Do nothing if clicking ref's element or descendent elements
|
|
583
|
+
if (!ref.current || ref.current.contains(event.target)) {
|
|
584
|
+
return;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
handler();
|
|
588
|
+
};
|
|
589
|
+
|
|
590
|
+
document.addEventListener('mousedown', listener);
|
|
591
|
+
document.addEventListener('touchstart', listener);
|
|
592
|
+
return function () {
|
|
593
|
+
document.removeEventListener('mousedown', listener);
|
|
594
|
+
document.removeEventListener('touchstart', listener);
|
|
595
|
+
};
|
|
596
|
+
}, // Add ref and handler to effect dependencies
|
|
597
|
+
// It's worth noting that because passed in handler is a new ...
|
|
598
|
+
// ... function on every render that will cause this effect ...
|
|
599
|
+
// ... callback/cleanup to run every render. It's not a big deal ...
|
|
600
|
+
// ... but to optimize you can wrap handler in useCallback before ...
|
|
601
|
+
// ... passing it into this hook.
|
|
602
|
+
[ref, handler]);
|
|
603
|
+
}
|
|
604
|
+
|
|
579
605
|
var _excluded$1 = ["isRequired", "options", "name", "setValue", "handleOnChange", "value"];
|
|
580
606
|
/**
|
|
581
607
|
* A functional React component utilized to render the `StackedSelect` component.
|
|
@@ -628,11 +654,8 @@ var StackedSelect = /*#__PURE__*/React__default.forwardRef(function (_ref2, _ref
|
|
|
628
654
|
return option.value === value;
|
|
629
655
|
})) == null ? void 0 : _options$find2.label) != null ? _options$find$label2 : '');
|
|
630
656
|
}, [value]);
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
handler: function handler() {
|
|
634
|
-
return setIsFocussed(false);
|
|
635
|
-
}
|
|
657
|
+
useOnClickOutside(dropdownRef, function () {
|
|
658
|
+
return setIsFocussed(false);
|
|
636
659
|
});
|
|
637
660
|
|
|
638
661
|
var handleOnSelectItem = function handleOnSelectItem(option) {
|
|
@@ -812,11 +835,8 @@ var StackedMultiSelect = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
812
835
|
setPosition('bottom');
|
|
813
836
|
}
|
|
814
837
|
}, [boundingClientRect]);
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
handler: function handler() {
|
|
818
|
-
return setIsFocussed(false);
|
|
819
|
-
}
|
|
838
|
+
useOnClickOutside(dropdownRef, function () {
|
|
839
|
+
return setIsFocussed(false);
|
|
820
840
|
}); // gets latest watched form value (common delimited) from RHF state and creates a list
|
|
821
841
|
|
|
822
842
|
React.useEffect(function () {
|
|
@@ -1024,14 +1044,11 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1024
1044
|
isFocussed = _useState3[0],
|
|
1025
1045
|
setIsFocussed = _useState3[1];
|
|
1026
1046
|
|
|
1027
|
-
var _useState4 = React.useState(
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
var _useState5 = React.useState(''),
|
|
1032
|
-
localValue = _useState5[0],
|
|
1033
|
-
setLocalValue = _useState5[1]; // gets latest watched form value (common delimited) from RHF state and creates a list
|
|
1047
|
+
var _useState4 = React.useState(''),
|
|
1048
|
+
localValue = _useState4[0],
|
|
1049
|
+
setLocalValue = _useState4[1];
|
|
1034
1050
|
|
|
1051
|
+
var latestTokenElement = document.getElementById(name + "_token_" + (lastestFormValueToArray.length - 1)); // gets latest watched form value (common delimited) from RHF state and creates a list
|
|
1035
1052
|
|
|
1036
1053
|
React.useEffect(function () {
|
|
1037
1054
|
if (watchedValue !== undefined && !watchedValue.length) {
|
|
@@ -1039,23 +1056,19 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1039
1056
|
}
|
|
1040
1057
|
|
|
1041
1058
|
if (watchedValue !== undefined && watchedValue != null && watchedValue.length) {
|
|
1042
|
-
|
|
1043
|
-
var _scrollRef$current;
|
|
1059
|
+
setLatestFormValueToArray(watchedValue.split(',').filter(Boolean));
|
|
1044
1060
|
|
|
1045
|
-
|
|
1046
|
-
|
|
1061
|
+
if (latestTokenElement) {
|
|
1062
|
+
latestTokenElement.scrollIntoView({
|
|
1063
|
+
block: 'end',
|
|
1064
|
+
inline: 'center',
|
|
1047
1065
|
behavior: 'smooth'
|
|
1048
1066
|
});
|
|
1049
|
-
setShouldSideScroll(false);
|
|
1050
1067
|
}
|
|
1051
|
-
|
|
1052
|
-
setLatestFormValueToArray(watchedValue.split(',').filter(Boolean));
|
|
1053
1068
|
}
|
|
1054
|
-
}, [
|
|
1069
|
+
}, [latestTokenElement, watchedValue]);
|
|
1055
1070
|
|
|
1056
1071
|
var onHandleKeyDown = function onHandleKeyDown(e) {
|
|
1057
|
-
setShouldSideScroll(true);
|
|
1058
|
-
|
|
1059
1072
|
if (e.key === ' ' || e.key === 'Enter' || e.key === ',' || e.key === 'Tab') {
|
|
1060
1073
|
if (e.key === 'Enter' && !localValue.trim().length && tokenIndex !== null) {
|
|
1061
1074
|
setLocalValue(lastestFormValueToArray[tokenIndex]);
|
|
@@ -1073,11 +1086,10 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1073
1086
|
|
|
1074
1087
|
var filteredUniqueValues = Array.from(new Set([].concat(lastestFormValueToArray, localValue.trim().split(','))));
|
|
1075
1088
|
setLocalValue('');
|
|
1076
|
-
setValue(name, filteredUniqueValues.toString().replace(/\s/g, ''), {
|
|
1089
|
+
return setValue(name, filteredUniqueValues.toString().replace(/\s/g, ''), {
|
|
1077
1090
|
shouldValidate: true,
|
|
1078
1091
|
shouldDirty: true
|
|
1079
1092
|
});
|
|
1080
|
-
return setIsFocussed(false);
|
|
1081
1093
|
}
|
|
1082
1094
|
|
|
1083
1095
|
if (!localValue.trim().length && lastestFormValueToArray.length) {
|
|
@@ -1102,9 +1114,15 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1102
1114
|
return setTokenIndex(lastestFormValueToArray.length - 1);
|
|
1103
1115
|
}
|
|
1104
1116
|
|
|
1105
|
-
|
|
1117
|
+
setTokenIndex(function (prevTokenIndex) {
|
|
1106
1118
|
return prevTokenIndex - 1;
|
|
1107
1119
|
});
|
|
1120
|
+
var tokenElement = document.getElementById(name + "_token_" + tokenIndex);
|
|
1121
|
+
if (!tokenElement || !scrollRef.current) return;
|
|
1122
|
+
return scrollRef.current.scrollBy({
|
|
1123
|
+
left: -1 * tokenElement.getBoundingClientRect().width,
|
|
1124
|
+
behavior: 'smooth'
|
|
1125
|
+
});
|
|
1108
1126
|
}
|
|
1109
1127
|
|
|
1110
1128
|
if (e.key === 'ArrowRight') {
|
|
@@ -1114,9 +1132,17 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1114
1132
|
return setTokenIndex(null);
|
|
1115
1133
|
}
|
|
1116
1134
|
|
|
1117
|
-
|
|
1135
|
+
setTokenIndex(function (prevTokenIndex) {
|
|
1118
1136
|
return prevTokenIndex + 1;
|
|
1119
1137
|
});
|
|
1138
|
+
|
|
1139
|
+
var _tokenElement = document.getElementById(name + "_token_" + tokenIndex);
|
|
1140
|
+
|
|
1141
|
+
if (!_tokenElement || !scrollRef.current) return;
|
|
1142
|
+
return scrollRef.current.scrollBy({
|
|
1143
|
+
left: _tokenElement.getBoundingClientRect().width,
|
|
1144
|
+
behavior: 'smooth'
|
|
1145
|
+
});
|
|
1120
1146
|
}
|
|
1121
1147
|
}
|
|
1122
1148
|
};
|
|
@@ -1135,7 +1161,7 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1135
1161
|
var onBlur = function onBlur() {
|
|
1136
1162
|
clearErrors(name);
|
|
1137
1163
|
|
|
1138
|
-
if (localValue.trim()) {
|
|
1164
|
+
if (localValue.trim().length) {
|
|
1139
1165
|
var filteredUniqueValues = Array.from(new Set([].concat(lastestFormValueToArray, localValue.trim().split(','))));
|
|
1140
1166
|
setValue(name, filteredUniqueValues.toString().replace(/\s/g, ''), {
|
|
1141
1167
|
shouldValidate: true,
|
|
@@ -1157,7 +1183,6 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1157
1183
|
fontSize: "13px",
|
|
1158
1184
|
border: isFocussed ? '2px solid' : '1px solid',
|
|
1159
1185
|
borderColor: isFocussed ? colors.border.focus : colors.border["default"],
|
|
1160
|
-
py: "5px",
|
|
1161
1186
|
pl: "8px",
|
|
1162
1187
|
borderRadius: "4px",
|
|
1163
1188
|
alignItems: "center",
|
|
@@ -1174,11 +1199,11 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1174
1199
|
ref: inputWrapperRef,
|
|
1175
1200
|
h: "26px"
|
|
1176
1201
|
}, /*#__PURE__*/React__default.createElement(react.Flex, {
|
|
1177
|
-
h: "
|
|
1202
|
+
h: "100%",
|
|
1178
1203
|
alignItems: "center",
|
|
1179
|
-
// width="fit-content"
|
|
1180
|
-
// maxW="80%"
|
|
1181
1204
|
overflowX: "scroll",
|
|
1205
|
+
overflowY: "hidden",
|
|
1206
|
+
maxWidth: isFocussed ? '80%' : '100%',
|
|
1182
1207
|
style: {
|
|
1183
1208
|
scrollbarWidth: 'none'
|
|
1184
1209
|
/* Firefox */
|
|
@@ -1197,9 +1222,10 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1197
1222
|
border: tokenIndex === index ? "1px solid " + colors.border.focus : 'none',
|
|
1198
1223
|
borderRadius: "full",
|
|
1199
1224
|
onClick: function onClick() {
|
|
1200
|
-
return setTokenIndex(index);
|
|
1225
|
+
return isFocussed && setTokenIndex(index);
|
|
1201
1226
|
},
|
|
1202
|
-
width: "100%"
|
|
1227
|
+
width: "100%",
|
|
1228
|
+
id: name + "_token_" + index
|
|
1203
1229
|
}, /*#__PURE__*/React__default.createElement(Token, {
|
|
1204
1230
|
label: label,
|
|
1205
1231
|
onDelete: function onDelete(e) {
|
|
@@ -1212,12 +1238,14 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1212
1238
|
color: colors.label.secondary.light,
|
|
1213
1239
|
fontSize: "13px"
|
|
1214
1240
|
}, placeholder)), /*#__PURE__*/React__default.createElement(react.Flex, {
|
|
1215
|
-
flex: 1
|
|
1241
|
+
flex: 1,
|
|
1242
|
+
minWidth: isFocussed ? '20%' : 0
|
|
1216
1243
|
}, /*#__PURE__*/React__default.createElement(react.Input, {
|
|
1217
1244
|
onKeyDown: onHandleKeyDown,
|
|
1218
1245
|
type: "text",
|
|
1219
1246
|
padding: 0,
|
|
1220
|
-
|
|
1247
|
+
alignContent: "flex-start",
|
|
1248
|
+
"float": "right",
|
|
1221
1249
|
border: "none",
|
|
1222
1250
|
height: "auto",
|
|
1223
1251
|
color: tokenIndex !== null ? 'transparent' : colors.label.primary,
|
|
@@ -1226,7 +1254,7 @@ var StackedPilledInput = /*#__PURE__*/React__default.forwardRef(function (_ref2,
|
|
|
1226
1254
|
},
|
|
1227
1255
|
value: localValue,
|
|
1228
1256
|
onChange: function onChange(e) {
|
|
1229
|
-
return tokenIndex === null && setLocalValue(e.target.value);
|
|
1257
|
+
return tokenIndex === null && setLocalValue(e.target.value.trim().replace(',', '').length ? e.target.value : '');
|
|
1230
1258
|
},
|
|
1231
1259
|
ref: inputRef,
|
|
1232
1260
|
onFocus: function onFocus() {
|