@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.
@@ -0,0 +1,2 @@
1
+ import { RefObject } from 'react';
2
+ export declare function useOnClickOutside(ref: RefObject<any>, handler: () => void): void;
@@ -531,7 +531,7 @@ var Dropdown = function Dropdown(_ref) {
531
531
  fontSize: "13px",
532
532
  px: "8px",
533
533
  py: "4px",
534
- width: "fit-content",
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
- react.useOutsideClick({
632
- ref: dropdownRef,
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
- react.useOutsideClick({
816
- ref: dropdownRef,
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(false),
1028
- shouldSideScroll = _useState4[0],
1029
- setShouldSideScroll = _useState4[1];
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
- if (shouldSideScroll) {
1043
- var _scrollRef$current;
1059
+ setLatestFormValueToArray(watchedValue.split(',').filter(Boolean));
1044
1060
 
1045
- scrollRef.current.scrollTo({
1046
- left: (_scrollRef$current = scrollRef.current) == null ? void 0 : _scrollRef$current.scrollWidth,
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
- }, [watchedValue, shouldSideScroll]);
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
- return setTokenIndex(function (prevTokenIndex) {
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
- return setTokenIndex(function (prevTokenIndex) {
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: "18px",
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
- width: "100%",
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() {