@activecollab/components 2.0.74 → 2.0.76

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 (41) hide show
  1. package/dist/cjs/components/Autocomplete/Autocomplete.js +6 -3
  2. package/dist/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
  3. package/dist/cjs/components/Checkbox/Checkbox.js +29 -5
  4. package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -1
  5. package/dist/cjs/components/Checkbox/CheckboxIcon.js +4 -4
  6. package/dist/cjs/components/Checkbox/CheckboxIcon.js.map +1 -1
  7. package/dist/cjs/components/Checkbox/Styles.js +6 -6
  8. package/dist/cjs/components/Checkbox/Styles.js.map +1 -1
  9. package/dist/cjs/components/Select/Option/Option.js.map +1 -1
  10. package/dist/cjs/components/Select/OptionGroup/OptionGroup.js +11 -4
  11. package/dist/cjs/components/Select/OptionGroup/OptionGroup.js.map +1 -1
  12. package/dist/cjs/components/Select/Select.js +29 -4
  13. package/dist/cjs/components/Select/Select.js.map +1 -1
  14. package/dist/esm/components/Autocomplete/Autocomplete.d.ts +2 -0
  15. package/dist/esm/components/Autocomplete/Autocomplete.d.ts.map +1 -1
  16. package/dist/esm/components/Autocomplete/Autocomplete.js +5 -3
  17. package/dist/esm/components/Autocomplete/Autocomplete.js.map +1 -1
  18. package/dist/esm/components/Checkbox/Checkbox.d.ts +4 -2
  19. package/dist/esm/components/Checkbox/Checkbox.d.ts.map +1 -1
  20. package/dist/esm/components/Checkbox/Checkbox.js +18 -4
  21. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  22. package/dist/esm/components/Checkbox/CheckboxIcon.d.ts +1 -1
  23. package/dist/esm/components/Checkbox/CheckboxIcon.js +3 -3
  24. package/dist/esm/components/Checkbox/CheckboxIcon.js.map +1 -1
  25. package/dist/esm/components/Checkbox/Styles.js +1 -1
  26. package/dist/esm/components/Checkbox/Styles.js.map +1 -1
  27. package/dist/esm/components/Select/Option/Option.d.ts +2 -0
  28. package/dist/esm/components/Select/Option/Option.d.ts.map +1 -1
  29. package/dist/esm/components/Select/Option/Option.js.map +1 -1
  30. package/dist/esm/components/Select/OptionGroup/OptionGroup.d.ts +2 -0
  31. package/dist/esm/components/Select/OptionGroup/OptionGroup.d.ts.map +1 -1
  32. package/dist/esm/components/Select/OptionGroup/OptionGroup.js +6 -2
  33. package/dist/esm/components/Select/OptionGroup/OptionGroup.js.map +1 -1
  34. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  35. package/dist/esm/components/Select/Select.js +25 -4
  36. package/dist/esm/components/Select/Select.js.map +1 -1
  37. package/dist/index.js +79 -26
  38. package/dist/index.js.map +1 -1
  39. package/dist/index.min.js +1 -1
  40. package/dist/index.min.js.map +1 -1
  41. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -11141,7 +11141,7 @@
11141
11141
  };
11142
11142
  OptionContent.displayName = "OptionContent";
11143
11143
 
11144
- var _excluded$S = ["isIndeterminate", "data-testid"];
11144
+ var _excluded$S = ["mixed", "data-testid"];
11145
11145
 
11146
11146
  /**
11147
11147
  * @component CheckboxIcon
@@ -11163,7 +11163,7 @@
11163
11163
  * https://design.activecollab.com/docs/foundations/icons
11164
11164
  */
11165
11165
  var CheckboxIcon = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, svgRef) {
11166
- var isIndeterminate = _ref.isIndeterminate,
11166
+ var mixed = _ref.mixed,
11167
11167
  testId = _ref["data-testid"],
11168
11168
  props = _objectWithoutProperties(_ref, _excluded$S);
11169
11169
  // const [animate, setAnimate] = useState(false);
@@ -11175,9 +11175,9 @@
11175
11175
  // } else {
11176
11176
  // mountRef.current = true;
11177
11177
  // }
11178
- // }, [isIndeterminate]);
11178
+ // }, [mixed]);
11179
11179
 
11180
- if (isIndeterminate) {
11180
+ if (mixed) {
11181
11181
  return /*#__PURE__*/React__default["default"].createElement("svg", {
11182
11182
  width: "16",
11183
11183
  height: "16",
@@ -11241,21 +11241,21 @@
11241
11241
  displayName: "Styles__StyledCheckbox",
11242
11242
  componentId: "sc-y7zymm-2"
11243
11243
  })(["height:16px;width:16px;position:relative;transition-duration:0.2s;border-radius:2px;path{transition-duration:0.2s;stroke:transparent;stroke-dashoffset:12;stroke-dasharray:12;}svg{cursor:pointer;border-radius:2px;fill:transparent;}rect{transition-duration:0.2s;", " ", "}", ":disabled ~ ", "{pointer-events:none;opacity:0.5;}", ":focus ~ ", "{rect{stroke:var(--color-secondary);stroke-width:3px;}}&:not(.c-checkbox__controlled) ", ":hover:not(:checked) ~ ", "{path{stroke:var(--color-secondary-500);stroke-dashoffset:24;}rect{stroke:var(--color-secondary);", " stroke-width:3px;}}", " ", ":checked ~ ", "{path{", "}rect{stroke:var(--color-secondary);stroke-width:19px;", "}}"], function (props) {
11244
- return !props.isIndeterminate && styled.css(["stroke:var(--color-theme-500);"]);
11244
+ return !props.mixed && styled.css(["stroke:var(--color-theme-500);"]);
11245
11245
  }, function (props) {
11246
- return props.isIndeterminate && styled.css(["stroke:transparent;"]);
11246
+ return props.mixed && styled.css(["stroke:transparent;"]);
11247
11247
  }, StyledInput$3, StyledLabel, StyledInput$3, StyledLabel, StyledInput$3, StyledLabel, function (props) {
11248
- return props.isIndeterminate && styled.css(["stroke:transparent;"]);
11248
+ return props.mixed && styled.css(["stroke:transparent;"]);
11249
11249
  }, function (props) {
11250
- return props.hover && !props.isIndeterminate && styled.css(["", ":not(:checked) ~ ", "{path{stroke:var(--color-secondary-500);stroke-dashoffset:24;}rect{stroke:var(--color-secondary);stroke-width:3px;}}"], StyledInput$3, StyledLabel);
11250
+ return props.hover && !props.mixed && styled.css(["", ":not(:checked) ~ ", "{path{stroke:var(--color-secondary-500);stroke-dashoffset:24;}rect{stroke:var(--color-secondary);stroke-width:3px;}}"], StyledInput$3, StyledLabel);
11251
11251
  }, StyledInput$3, StyledLabel, function (props) {
11252
- return !props.isIndeterminate && styled.css(["stroke:var(--page-paper-main);stroke-dashoffset:24;"]);
11252
+ return !props.mixed && styled.css(["stroke:var(--page-paper-main);stroke-dashoffset:24;"]);
11253
11253
  }, function (props) {
11254
- return props.isIndeterminate && styled.css(["stroke:transparent;"]);
11254
+ return props.mixed && styled.css(["stroke:transparent;"]);
11255
11255
  });
11256
11256
  StyledCheckbox$1.displayName = "StyledCheckbox";
11257
11257
 
11258
- var _excluded$R = ["className", "hover", "id", "isIndeterminate"];
11258
+ var _excluded$R = ["className", "hover", "id", "mixed", "onChange"];
11259
11259
  /**
11260
11260
  * Checkbox component
11261
11261
  */
@@ -11264,8 +11264,24 @@
11264
11264
  hover = _ref.hover,
11265
11265
  _ref$id = _ref.id,
11266
11266
  id = _ref$id === void 0 ? "checkbox" : _ref$id,
11267
- isIndeterminate = _ref.isIndeterminate,
11267
+ _ref$mixed = _ref.mixed,
11268
+ mixed = _ref$mixed === void 0 ? false : _ref$mixed,
11269
+ onChange = _ref.onChange,
11268
11270
  rest = _objectWithoutProperties(_ref, _excluded$R);
11271
+ var _useState = React.useState(mixed),
11272
+ _useState2 = _slicedToArray(_useState, 2),
11273
+ indeterminate = _useState2[0],
11274
+ setIndeterminate = _useState2[1];
11275
+ var handleChange = React.useCallback(function (e) {
11276
+ typeof onChange === "function" && onChange(e);
11277
+ setIndeterminate(false);
11278
+ }, [onChange]);
11279
+ React.useEffect(function () {
11280
+ if (mixed !== indeterminate) {
11281
+ setIndeterminate(mixed);
11282
+ }
11283
+ // eslint-disable-next-line react-hooks/exhaustive-deps
11284
+ }, [mixed]);
11269
11285
  return /*#__PURE__*/React__default["default"].createElement(StyledCheckbox$1, {
11270
11286
  className: classNames__default["default"]("c-checkbox", {
11271
11287
  "c-checkbox__hover": hover,
@@ -11273,21 +11289,23 @@
11273
11289
  }, className),
11274
11290
  hover: hover,
11275
11291
  tabIndex: -1,
11276
- isIndeterminate: isIndeterminate
11292
+ mixed: indeterminate
11277
11293
  }, /*#__PURE__*/React__default["default"].createElement(StyledInput$3, _extends({
11278
11294
  role: "checkbox",
11279
11295
  id: id,
11280
11296
  className: "c-checkbox--input",
11281
11297
  type: "checkbox",
11282
11298
  ref: ref
11283
- }, rest)), /*#__PURE__*/React__default["default"].createElement(StyledLabel, {
11299
+ }, rest, {
11300
+ onChange: handleChange
11301
+ })), /*#__PURE__*/React__default["default"].createElement(StyledLabel, {
11284
11302
  htmlFor: id,
11285
11303
  className: "c-checkbox--label"
11286
11304
  }, /*#__PURE__*/React__default["default"].createElement(CheckboxIcon$1, {
11287
11305
  "data-testid": "checkbox-icon",
11288
11306
  height: 16,
11289
11307
  width: 16,
11290
- isIndeterminate: isIndeterminate
11308
+ mixed: indeterminate
11291
11309
  })));
11292
11310
  });
11293
11311
  Checkbox.displayName = "Checkbox";
@@ -12058,7 +12076,9 @@
12058
12076
  onChange = _ref.onChange,
12059
12077
  setHover = _ref.setHover,
12060
12078
  renderOptions = _ref.renderOptions,
12061
- optionGroupClassName = _ref.optionGroupClassName;
12079
+ optionGroupClassName = _ref.optionGroupClassName,
12080
+ _ref$mixedOptions = _ref.mixedOptions,
12081
+ mixedOptions = _ref$mixedOptions === void 0 ? [] : _ref$mixedOptions;
12062
12082
  var list = React.useMemo(function () {
12063
12083
  return filter ? options.filter(function (v) {
12064
12084
  return v.name.toLowerCase().includes(filter.trim().toLowerCase());
@@ -12088,6 +12108,13 @@
12088
12108
  return option.id;
12089
12109
  });
12090
12110
  }, [options]);
12111
+ var isMixed = React.useMemo(function () {
12112
+ return (options.some(function (option) {
12113
+ return checked.includes(option.id);
12114
+ }) || mixedOptions.some(function (item) {
12115
+ return allOptionValues.includes(item);
12116
+ })) && !isAllOptionsChecked;
12117
+ }, [allOptionValues, checked, isAllOptionsChecked, mixedOptions, options]);
12091
12118
  var handleClick = React.useCallback(function (e) {
12092
12119
  e.stopPropagation();
12093
12120
  if (onChange) {
@@ -12117,9 +12144,7 @@
12117
12144
  }, name), type === "multiple" && /*#__PURE__*/React__default["default"].createElement(Checkbox, {
12118
12145
  id: `${id}`,
12119
12146
  checked: isAllOptionsChecked,
12120
- isIndeterminate: options.some(function (option) {
12121
- return checked.includes(option.id);
12122
- }) && !isAllOptionsChecked,
12147
+ mixed: isMixed,
12123
12148
  onChange: handleClick,
12124
12149
  type: "checkbox"
12125
12150
  }))), /*#__PURE__*/React__default["default"].createElement(List, null, list.map(function (item, index) {
@@ -12158,7 +12183,9 @@
12158
12183
  keepSameOptionsOrder = _ref$keepSameOptionsO === void 0 ? false : _ref$keepSameOptionsO,
12159
12184
  _ref$autoHeightMax = _ref.autoHeightMax,
12160
12185
  autoHeightMax = _ref$autoHeightMax === void 0 ? 340 : _ref$autoHeightMax,
12161
- clearInputOnSelect = _ref.clearInputOnSelect;
12186
+ clearInputOnSelect = _ref.clearInputOnSelect,
12187
+ _ref$mixedOptions = _ref.mixedOptions,
12188
+ mixedOptions = _ref$mixedOptions === void 0 ? [] : _ref$mixedOptions;
12162
12189
  var itemRef = React.useRef(null);
12163
12190
  var listRef = React.useRef(null);
12164
12191
  var selectedOptions = React.useMemo(function () {
@@ -12402,7 +12429,8 @@
12402
12429
  renderOptions: handleRenderOption,
12403
12430
  type: type,
12404
12431
  onChange: handleChange,
12405
- filter: filter
12432
+ filter: filter,
12433
+ mixedOptions: mixedOptions
12406
12434
  });
12407
12435
  }
12408
12436
  return /*#__PURE__*/React__default["default"].createElement(Option, {
@@ -12425,7 +12453,7 @@
12425
12453
  }
12426
12454
  })
12427
12455
  });
12428
- }, [handleClick, handleMouseEnter, hover.item, optionClassName, renderOption, filter, selectedOptions, handleHoverCallback, type, handleChange]);
12456
+ }, [handleClick, handleMouseEnter, hover.item, optionClassName, renderOption, filter, selectedOptions, handleHoverCallback, type, handleChange, mixedOptions]);
12429
12457
  var handleOnMouseLeave = React.useCallback(function () {
12430
12458
  setHover({
12431
12459
  item: undefined,
@@ -12613,6 +12641,27 @@
12613
12641
  return [...acc, ...allGroupOptions];
12614
12642
  }, []);
12615
12643
  }, [selectOptions]);
12644
+ var getMixedOptionsRecursively = React.useCallback(function (options) {
12645
+ var mixedOptions = [];
12646
+ options.forEach(function (option) {
12647
+ if (option.mixed) {
12648
+ mixedOptions.push(option);
12649
+ }
12650
+ if (isOptionGroup(option) && option.options && option.options.length > 0) {
12651
+ var nestedMixedOptions = getMixedOptionsRecursively(option.options);
12652
+ mixedOptions = mixedOptions.concat(nestedMixedOptions);
12653
+ }
12654
+ });
12655
+ return mixedOptions;
12656
+ }, []);
12657
+ var mixedOptions = React.useRef(type === "multiple" && selectOptions ? getMixedOptionsRecursively(selectOptions).map(function (item) {
12658
+ return item.id;
12659
+ }) : []);
12660
+ var removeFromMixedOptions = React.useCallback(function (idsToRemove) {
12661
+ mixedOptions.current = mixedOptions.current.filter(function (mixedOption) {
12662
+ return !idsToRemove.includes(mixedOption);
12663
+ });
12664
+ }, []);
12616
12665
  var isAllOptionsChecked = React.useMemo(function () {
12617
12666
  return allOptionValues.every(function (option) {
12618
12667
  return selectedOptions.includes(option);
@@ -12636,8 +12685,9 @@
12636
12685
  }
12637
12686
  if (selectedValue !== undefined && selectedValue !== selected && !(selectedValue instanceof Array && selectedValue.includes(undefined))) {
12638
12687
  onChange(selectedValue);
12688
+ type === "multiple" && mixedOptions.current.length && removeFromMixedOptions(selectedValue);
12639
12689
  }
12640
- }, [forceCloseMenu, selected, onSelectClose, onChange]);
12690
+ }, [forceCloseMenu, selected, onSelectClose, onChange, type, removeFromMixedOptions]);
12641
12691
  var onClose = React.useCallback(function () {
12642
12692
  setOpen(false);
12643
12693
  if (onSelectClose) {
@@ -12716,11 +12766,13 @@
12716
12766
  additionalInfo: option.additionalInfo
12717
12767
  }), option.id === null ? type === "multiple" ? /*#__PURE__*/React__default["default"].createElement(StyledCheckbox, _extends({
12718
12768
  checked: isAllOptionsChecked,
12719
- isIndeterminate: someOptionsChecked && !isAllOptionsChecked
12769
+ mixed: someOptionsChecked && !isAllOptionsChecked
12720
12770
  }, props)) : /*#__PURE__*/React__default["default"].createElement(StyledRadioButton, _extends({
12721
12771
  checked: selectedOptions.length < 1 || !selectedOptions[0]
12722
- }, props)) : type === "multiple" ? /*#__PURE__*/React__default["default"].createElement(StyledCheckbox, props) : /*#__PURE__*/React__default["default"].createElement(StyledRadioButton, props));
12723
- }, [isAllOptionsChecked, renderOption, selectedOptions, type, someOptionsChecked]);
12772
+ }, props)) : type === "multiple" ? /*#__PURE__*/React__default["default"].createElement(StyledCheckbox, _extends({
12773
+ mixed: mixedOptions.current.includes(option.id)
12774
+ }, props)) : /*#__PURE__*/React__default["default"].createElement(StyledRadioButton, props));
12775
+ }, [isAllOptionsChecked, renderOption, type, someOptionsChecked, selectedOptions]);
12724
12776
  return /*#__PURE__*/React__default["default"].createElement(Tag, props, /*#__PURE__*/React__default["default"].createElement("div", null, !disableSearch ? /*#__PURE__*/React__default["default"].createElement(StyledSelectForm, {
12725
12777
  ref: formRef
12726
12778
  }, startAdornment ? /*#__PURE__*/React__default["default"].createElement(StyledStartAdornment, null, startAdornment) : null, /*#__PURE__*/React__default["default"].createElement(StyledSelectInput, {
@@ -12734,6 +12786,7 @@
12734
12786
  handleChange: handleChange,
12735
12787
  renderOption: handleRenderOption,
12736
12788
  options: options,
12789
+ mixedOptions: mixedOptions.current,
12737
12790
  handleDefaultOptionChange: handleDefaultOptionChangeCallback,
12738
12791
  type: type,
12739
12792
  preselectDefaultValue: preselectDefaultValue,