@kaizen/components 1.67.2 → 1.67.4

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 (43) hide show
  1. package/dist/cjs/Filter/FilterBar/context/FilterBarContext.cjs +17 -2
  2. package/dist/cjs/Filter/FilterBar/context/reducer/filterBarStateReducer.cjs +4 -0
  3. package/dist/cjs/Filter/FilterBar/context/reducer/setupFilterBarState.cjs +2 -1
  4. package/dist/cjs/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.cjs +12 -1
  5. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.cjs +12 -1
  6. package/dist/cjs/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.cjs +13 -2
  7. package/dist/cjs/Filter/FilterMultiSelect/FilterMultiSelect.cjs +4 -2
  8. package/dist/cjs/Filter/FilterMultiSelect/context/MenuTriggerProvider/MenuTriggerProvider.cjs +4 -2
  9. package/dist/cjs/TextArea/TextArea.cjs +20 -52
  10. package/dist/cjs/TextArea/TextArea.module.css.cjs +14 -0
  11. package/dist/esm/Filter/FilterBar/context/FilterBarContext.mjs +17 -2
  12. package/dist/esm/Filter/FilterBar/context/reducer/filterBarStateReducer.mjs +4 -0
  13. package/dist/esm/Filter/FilterBar/context/reducer/setupFilterBarState.mjs +2 -1
  14. package/dist/esm/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.mjs +13 -2
  15. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.mjs +13 -2
  16. package/dist/esm/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.mjs +14 -3
  17. package/dist/esm/Filter/FilterMultiSelect/FilterMultiSelect.mjs +4 -2
  18. package/dist/esm/Filter/FilterMultiSelect/context/MenuTriggerProvider/MenuTriggerProvider.mjs +4 -2
  19. package/dist/esm/TextArea/TextArea.mjs +21 -53
  20. package/dist/esm/TextArea/TextArea.module.css.mjs +12 -0
  21. package/dist/styles.css +208 -711
  22. package/dist/types/Filter/FilterBar/context/FilterBarContext.d.ts +2 -0
  23. package/dist/types/Filter/FilterBar/context/reducer/filterBarStateReducer.d.ts +3 -0
  24. package/dist/types/Filter/FilterBar/context/types.d.ts +1 -0
  25. package/dist/types/Filter/FilterMultiSelect/FilterMultiSelect.d.ts +2 -1
  26. package/dist/types/Filter/FilterMultiSelect/context/MenuTriggerProvider/MenuTriggerProvider.d.ts +2 -1
  27. package/dist/types/TextArea/TextArea.d.ts +4 -0
  28. package/package.json +1 -1
  29. package/src/Filter/FilterBar/FilterBar.spec.tsx +87 -0
  30. package/src/Filter/FilterBar/context/FilterBarContext.tsx +11 -2
  31. package/src/Filter/FilterBar/context/reducer/filterBarStateReducer.ts +7 -0
  32. package/src/Filter/FilterBar/context/reducer/setupFilterBarState.ts +1 -0
  33. package/src/Filter/FilterBar/context/types.ts +1 -0
  34. package/src/Filter/FilterBar/subcomponents/AddFiltersMenu/AddFiltersMenu.tsx +12 -2
  35. package/src/Filter/FilterBar/subcomponents/FilterBarButton/FilterBarButton.tsx +10 -2
  36. package/src/Filter/FilterBar/subcomponents/FilterBarMultiSelect/FilterBarMultiSelect.tsx +18 -3
  37. package/src/Filter/FilterMultiSelect/FilterMultiSelect.tsx +3 -1
  38. package/src/Filter/FilterMultiSelect/context/MenuTriggerProvider/MenuTriggerProvider.tsx +4 -1
  39. package/src/TextArea/TextArea.module.css +142 -0
  40. package/src/TextArea/TextArea.tsx +25 -53
  41. package/dist/cjs/TextArea/TextArea.module.scss.cjs +0 -13
  42. package/dist/esm/TextArea/TextArea.module.scss.mjs +0 -11
  43. package/src/TextArea/TextArea.module.scss +0 -137
@@ -80,16 +80,24 @@ var FilterBarProvider = function (_a) {
80
80
  });
81
81
  },
82
82
  showFilter: function (id) {
83
- return dispatch({
83
+ dispatch({
84
84
  type: "activate_filter",
85
85
  id: id
86
86
  });
87
+ dispatch({
88
+ type: "set_focus",
89
+ id: id
90
+ });
87
91
  },
88
92
  hideFilter: function (id) {
89
93
  dispatch({
90
94
  type: "deactivate_filter",
91
95
  id: id
92
96
  });
97
+ dispatch({
98
+ type: "set_focus",
99
+ id: "add_filter"
100
+ });
93
101
  },
94
102
  getInactiveFilters: function () {
95
103
  return getInactiveFilters.getInactiveFilters(state);
@@ -105,7 +113,14 @@ var FilterBarProvider = function (_a) {
105
113
  type: "update_values",
106
114
  values: {}
107
115
  });
108
- }
116
+ },
117
+ setFocus: function (id) {
118
+ dispatch({
119
+ type: "set_focus",
120
+ id: id
121
+ });
122
+ },
123
+ focusId: state.focusId
109
124
  };
110
125
  React.useEffect(function () {
111
126
  var shouldUpdate = checkShouldUpdateValues.checkShouldUpdateValues(state, values);
@@ -6,6 +6,10 @@ var updateSingleFilter = require('./updateSingleFilter.cjs');
6
6
  var updateValues = require('./updateValues.cjs');
7
7
  var filterBarStateReducer = function (state, action) {
8
8
  switch (action.type) {
9
+ case "set_focus":
10
+ return tslib.__assign(tslib.__assign({}, state), {
11
+ focusId: action.id
12
+ });
9
13
  case "update_values":
10
14
  return tslib.__assign({}, updateValues.updateValues(state, action.values));
11
15
  case "complete_update_values":
@@ -28,7 +28,8 @@ var setupFilterBarState = function (filters, values) {
28
28
  activeFilterIds: new Set(),
29
29
  values: values,
30
30
  dependentFilterIds: new Set(),
31
- hasUpdatedValues: false
31
+ hasUpdatedValues: false,
32
+ focusId: undefined
32
33
  });
33
34
  return updateDependentFilters.updateDependentFilters(state);
34
35
  };
@@ -16,6 +16,7 @@ function _interopDefault(e) {
16
16
  var React__default = /*#__PURE__*/_interopDefault(React);
17
17
  var AddFiltersMenu = function () {
18
18
  var formatMessage = i18nReactIntl.useIntl().formatMessage;
19
+ var buttonRef = React.useRef(null);
19
20
  var menuButtonLabel = formatMessage({
20
21
  id: "filterBar.addFiltersMenu.buttonLabel",
21
22
  defaultMessage: "Add Filters",
@@ -23,10 +24,20 @@ var AddFiltersMenu = function () {
23
24
  });
24
25
  var _a = FilterBarContext.useFilterBarContext(),
25
26
  getInactiveFilters = _a.getInactiveFilters,
26
- showFilter = _a.showFilter;
27
+ showFilter = _a.showFilter,
28
+ focusId = _a.focusId,
29
+ setFocus = _a.setFocus;
27
30
  var inactiveFilters = getInactiveFilters();
31
+ React.useEffect(function () {
32
+ var _a;
33
+ if (focusId === "add_filter") {
34
+ (_a = buttonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
35
+ setFocus(undefined);
36
+ }
37
+ }, [focusId]);
28
38
  return React__default.default.createElement(Menu.Menu, {
29
39
  button: React__default.default.createElement(Button.Button, {
40
+ ref: buttonRef,
30
41
  label: menuButtonLabel,
31
42
  secondary: true,
32
43
  disabled: inactiveFilters.length === 0,
@@ -5,6 +5,7 @@ var React = require('react');
5
5
  var FilterBarContext = require('../../context/FilterBarContext.cjs');
6
6
  var FilterButton = require('../../../FilterButton/FilterButton/FilterButton.cjs');
7
7
  var FilterButtonRemovable = require('../../../FilterButton/FilterButtonRemovable/FilterButtonRemovable.cjs');
8
+ var isRefObject = require('../../../../utils/isRefObject.cjs');
8
9
  function _interopDefault(e) {
9
10
  return e && e.__esModule ? e : {
10
11
  default: e
@@ -16,7 +17,17 @@ var FilterBarButton = React.forwardRef(function (_a, ref) {
16
17
  _b = _a.isRemovable,
17
18
  isRemovable = _b === void 0 ? false : _b,
18
19
  props = tslib.__rest(_a, ["filterId", "isRemovable"]);
19
- var hideFilter = FilterBarContext.useFilterBarContext().hideFilter;
20
+ var _c = FilterBarContext.useFilterBarContext(),
21
+ hideFilter = _c.hideFilter,
22
+ focusId = _c.focusId,
23
+ setFocus = _c.setFocus;
24
+ React.useEffect(function () {
25
+ var _a, _b, _c;
26
+ if (focusId === filterId && isRefObject.isRefObject(ref)) {
27
+ (_c = (_b = (_a = ref === null || ref === void 0 ? void 0 : ref.current) === null || _a === void 0 ? void 0 : _a.triggerRef) === null || _b === void 0 ? void 0 : _b.current) === null || _c === void 0 ? void 0 : _c.focus();
28
+ setFocus(undefined);
29
+ }
30
+ }, [focusId]);
20
31
  return isRemovable ? React__default.default.createElement(FilterButtonRemovable.FilterButtonRemovable, {
21
32
  ref: ref,
22
33
  triggerButtonProps: props,
@@ -32,10 +32,13 @@ var FilterBarMultiSelect = function (_a) {
32
32
  getFilterState = _b.getFilterState,
33
33
  setFilterOpenState = _b.setFilterOpenState,
34
34
  updateValue = _b.updateValue,
35
- hideFilter = _b.hideFilter;
35
+ hideFilter = _b.hideFilter,
36
+ focusId = _b.focusId,
37
+ setFocus = _b.setFocus;
36
38
  var _c = React.useState(propsItems),
37
39
  items = _c[0],
38
40
  setItems = _c[1];
41
+ var buttonRef = React.useRef(null);
39
42
  if (!id) throw Error("Missing `id` prop in FilterBarMultiSelect");
40
43
  var filterState = getFilterState(id);
41
44
  React.useEffect(function () {
@@ -57,6 +60,13 @@ var FilterBarMultiSelect = function (_a) {
57
60
  }
58
61
  }
59
62
  }, [items]);
63
+ React.useEffect(function () {
64
+ var _a;
65
+ if (focusId === id) {
66
+ (_a = buttonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
67
+ setFocus(undefined);
68
+ }
69
+ }, [focusId]);
60
70
  return React__default.default.createElement(FilterMultiSelect.FilterMultiSelect, tslib.__assign({
61
71
  label: filterState.name,
62
72
  // Convert the incoming FilterBar state to a Set (internal FilterMultiSelect state)
@@ -81,7 +91,8 @@ var FilterBarMultiSelect = function (_a) {
81
91
  return hideFilter(id);
82
92
  }
83
93
  })) : React__default.default.createElement(FilterMultiSelect.FilterMultiSelect.TriggerButton, tslib.__assign({}, triggerProps));
84
- }
94
+ },
95
+ triggerRef: buttonRef
85
96
  }, props), children);
86
97
  };
87
98
  FilterBarMultiSelect.displayName = "FilterBar.MultiSelect";
@@ -39,11 +39,13 @@ var FilterMultiSelect = function (_a) {
39
39
  onSelectionChange = _a.onSelectionChange,
40
40
  _b = _a.selectionMode,
41
41
  selectionMode = _b === void 0 ? "multiple" : _b,
42
- onSearchInputChange = _a.onSearchInputChange;
42
+ onSearchInputChange = _a.onSearchInputChange,
43
+ triggerRef = _a.triggerRef;
43
44
  var menuTriggerProps = {
44
45
  isOpen: isOpen,
45
46
  defaultOpen: defaultOpen,
46
- onOpenChange: onOpenChange
47
+ onOpenChange: onOpenChange,
48
+ triggerRef: triggerRef
47
49
  };
48
50
  var menuPopupProps = {
49
51
  isLoading: isLoading,
@@ -15,7 +15,8 @@ function MenuTriggerProvider(_a) {
15
15
  var isOpen = _a.isOpen,
16
16
  defaultOpen = _a.defaultOpen,
17
17
  onOpenChange = _a.onOpenChange,
18
- children = _a.children;
18
+ children = _a.children,
19
+ triggerRef = _a.triggerRef;
19
20
  // Create state based on the incoming props to manage the open/close
20
21
  var state = menu.useMenuTriggerState({
21
22
  isOpen: isOpen,
@@ -23,7 +24,8 @@ function MenuTriggerProvider(_a) {
23
24
  onOpenChange: onOpenChange
24
25
  });
25
26
  // Get A11y attributes and events for the menu trigger and menu elements
26
- var ref = React.useRef(null);
27
+ var fallbackRef = React.useRef(null);
28
+ var ref = triggerRef || fallbackRef;
27
29
  var _b = menu$1.useMenuTrigger({}, state, ref),
28
30
  menuTriggerProps = _b.menuTriggerProps,
29
31
  menuProps = _b.menuProps;
@@ -3,7 +3,7 @@
3
3
  var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var classnames = require('classnames');
6
- var TextArea_module = require('./TextArea.module.scss.cjs');
6
+ var TextArea_module = require('./TextArea.module.css.cjs');
7
7
  function _interopDefault(e) {
8
8
  return e && e.__esModule ? e : {
9
9
  default: e
@@ -12,77 +12,45 @@ function _interopDefault(e) {
12
12
  var React__default = /*#__PURE__*/_interopDefault(React);
13
13
  var classnames__default = /*#__PURE__*/_interopDefault(classnames);
14
14
  var TextArea = function (_a) {
15
+ var _b, _c;
15
16
  var propsTextAreaRef = _a.textAreaRef,
16
- _b = _a.status,
17
- status = _b === void 0 ? "default" : _b,
18
- _c = _a.autogrow,
19
- autogrow = _c === void 0 ? false : _c,
20
- _d = _a.reversed,
21
- reversed = _d === void 0 ? false : _d,
22
- _e = _a.rows,
23
- rows = _e === void 0 ? 3 : _e,
17
+ _d = _a.status,
18
+ status = _d === void 0 ? "default" : _d,
19
+ _e = _a.autogrow,
20
+ autogrow = _e === void 0 ? false : _e,
21
+ _f = _a.reversed,
22
+ reversed = _f === void 0 ? false : _f,
23
+ _g = _a.rows,
24
+ rows = _g === void 0 ? 3 : _g,
24
25
  defaultValue = _a.defaultValue,
25
26
  value = _a.value,
26
27
  disabled = _a.disabled,
27
28
  propsOnChange = _a.onChange,
28
29
  restProps = tslib.__rest(_a, ["textAreaRef", "status", "autogrow", "reversed", "rows", "defaultValue", "value", "disabled", "onChange"]);
29
- var _f = React.useState("auto"),
30
- textAreaHeight = _f[0],
31
- setTextAreaHeight = _f[1];
32
- var _g = React.useState("auto"),
33
- parentHeight = _g[0],
34
- setParentHeight = _g[1];
35
- var _h = React.useState(autogrow ? defaultValue : undefined),
30
+ var _h = React.useState(autogrow && !value ? defaultValue : undefined),
36
31
  internalValue = _h[0],
37
32
  setInternalValue = _h[1];
38
33
  // ^ holds an internal state of the value so that autogrow can still work with uncontrolled textareas
39
- // essentially forces the textarea into an (interally) controlled mode if autogrow is true
34
+ // essentially forces the textarea into an (interally) controlled mode if autogrow is true and mode is uncontrolled
35
+ var controlledValue = value || internalValue;
40
36
  var textAreaRef = propsTextAreaRef || React.useRef(null);
41
- React.useEffect(function () {
42
- if (!autogrow) return;
43
- var scrollHeight = textAreaRef.current.scrollHeight;
44
- if (scrollHeight < 1) return;
45
- var borderWidth = textAreaRef.current ? parseInt(getComputedStyle(textAreaRef.current).borderTopWidth, 10) : 0;
46
- var newHeight = scrollHeight + borderWidth * 2;
47
- setParentHeight("".concat(newHeight, "px"));
48
- setTextAreaHeight("".concat(newHeight, "px"));
49
- }, [internalValue]);
50
- var onChange = !autogrow ? undefined : function (event) {
51
- setTextAreaHeight("auto");
52
- // ^ this is required to avoid the textarea height from building up indefinitely
53
- // see https://medium.com/@lucasalgus/creating-a-custom-auto-resize-textarea-component-for-your-react-web-application-6959c0ad68bc#2dee
37
+ var onChange = function (event) {
38
+ propsOnChange && propsOnChange(event);
54
39
  setInternalValue(event.target.value);
55
- if (propsOnChange) {
56
- propsOnChange(event);
57
- }
58
- };
59
- var getWrapperStyle = function () {
60
- return autogrow ? {
61
- minHeight: parentHeight
62
- } : undefined;
63
40
  };
64
- var getTextAreaStyle = function () {
65
- return autogrow ? {
66
- height: textAreaHeight
67
- } : undefined;
68
- };
69
- var controlledValue = value || internalValue;
70
41
  return React__default.default.createElement("div", {
71
- className: TextArea_module.wrapper,
72
- style: getWrapperStyle()
42
+ className: classnames__default.default(TextArea_module.wrapper, (_b = {}, _b[TextArea_module.wrapperAutogrow] = autogrow, _b)),
43
+ "data-value": autogrow ? controlledValue : undefined
73
44
  }, React__default.default.createElement("textarea", tslib.__assign({
74
- className: classnames__default.default(TextArea_module.textarea, TextArea_module[status], reversed ? TextArea_module.reversed : TextArea_module.default, disabled && TextArea_module.disabled),
45
+ className: classnames__default.default(TextArea_module.textarea, TextArea_module[status], reversed ? TextArea_module.reversed : TextArea_module.default, (_c = {}, _c[TextArea_module.disabled] = disabled, _c[TextArea_module.textareaAutogrow] = autogrow, _c)),
75
46
  rows: rows,
76
- onChange: onChange || propsOnChange,
47
+ onChange: onChange,
77
48
  value: controlledValue,
78
49
  defaultValue: controlledValue ? undefined : defaultValue,
79
50
  // ^ React throws a warning if you specify both a value and a defaultValue
80
51
  ref: textAreaRef,
81
- style: getTextAreaStyle(),
82
52
  disabled: disabled
83
- }, restProps)), React__default.default.createElement("div", {
84
- className: TextArea_module.focusRing
85
- }));
53
+ }, restProps)));
86
54
  };
87
55
  TextArea.displayName = "TextArea";
88
56
  exports.TextArea = TextArea;
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var styles = {
4
+ "wrapper": "TextArea-module_wrapper__FHfMG",
5
+ "wrapperAutogrow": "TextArea-module_wrapperAutogrow__f46bL",
6
+ "textarea": "TextArea-module_textarea__Ht-1a",
7
+ "textareaAutogrow": "TextArea-module_textareaAutogrow__ReEar",
8
+ "default": "TextArea-module_default__e1cis",
9
+ "error": "TextArea-module_error__bBmvS",
10
+ "caution": "TextArea-module_caution__aj4nR",
11
+ "disabled": "TextArea-module_disabled__XY39a",
12
+ "reversed": "TextArea-module_reversed__r-W3e"
13
+ };
14
+ module.exports = styles;
@@ -72,16 +72,24 @@ var FilterBarProvider = function (_a) {
72
72
  });
73
73
  },
74
74
  showFilter: function (id) {
75
- return dispatch({
75
+ dispatch({
76
76
  type: "activate_filter",
77
77
  id: id
78
78
  });
79
+ dispatch({
80
+ type: "set_focus",
81
+ id: id
82
+ });
79
83
  },
80
84
  hideFilter: function (id) {
81
85
  dispatch({
82
86
  type: "deactivate_filter",
83
87
  id: id
84
88
  });
89
+ dispatch({
90
+ type: "set_focus",
91
+ id: "add_filter"
92
+ });
85
93
  },
86
94
  getInactiveFilters: function () {
87
95
  return getInactiveFilters(state);
@@ -97,7 +105,14 @@ var FilterBarProvider = function (_a) {
97
105
  type: "update_values",
98
106
  values: {}
99
107
  });
100
- }
108
+ },
109
+ setFocus: function (id) {
110
+ dispatch({
111
+ type: "set_focus",
112
+ id: id
113
+ });
114
+ },
115
+ focusId: state.focusId
101
116
  };
102
117
  useEffect(function () {
103
118
  var shouldUpdate = checkShouldUpdateValues(state, values);
@@ -4,6 +4,10 @@ import { updateSingleFilter } from './updateSingleFilter.mjs';
4
4
  import { updateValues } from './updateValues.mjs';
5
5
  var filterBarStateReducer = function (state, action) {
6
6
  switch (action.type) {
7
+ case "set_focus":
8
+ return __assign(__assign({}, state), {
9
+ focusId: action.id
10
+ });
7
11
  case "update_values":
8
12
  return __assign({}, updateValues(state, action.values));
9
13
  case "complete_update_values":
@@ -26,7 +26,8 @@ var setupFilterBarState = function (filters, values) {
26
26
  activeFilterIds: new Set(),
27
27
  values: values,
28
28
  dependentFilterIds: new Set(),
29
- hasUpdatedValues: false
29
+ hasUpdatedValues: false,
30
+ focusId: undefined
30
31
  });
31
32
  return updateDependentFilters(state);
32
33
  };
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { useRef, useEffect } from 'react';
2
2
  import { useIntl } from '@cultureamp/i18n-react-intl';
3
3
  import { Icon } from '../../../../__future__/Icon/Icon.mjs';
4
4
  import { useFilterBarContext } from '../../context/FilterBarContext.mjs';
@@ -9,6 +9,7 @@ import { Button } from '../../../../__actions__/Button/v1/Button/Button.mjs';
9
9
  const AddFiltersMenu = /*#__PURE__*/function () {
10
10
  const AddFiltersMenu = function () {
11
11
  var formatMessage = useIntl().formatMessage;
12
+ var buttonRef = useRef(null);
12
13
  var menuButtonLabel = formatMessage({
13
14
  id: "filterBar.addFiltersMenu.buttonLabel",
14
15
  defaultMessage: "Add Filters",
@@ -16,10 +17,20 @@ const AddFiltersMenu = /*#__PURE__*/function () {
16
17
  });
17
18
  var _a = useFilterBarContext(),
18
19
  getInactiveFilters = _a.getInactiveFilters,
19
- showFilter = _a.showFilter;
20
+ showFilter = _a.showFilter,
21
+ focusId = _a.focusId,
22
+ setFocus = _a.setFocus;
20
23
  var inactiveFilters = getInactiveFilters();
24
+ useEffect(function () {
25
+ var _a;
26
+ if (focusId === "add_filter") {
27
+ (_a = buttonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
28
+ setFocus(undefined);
29
+ }
30
+ }, [focusId]);
21
31
  return /*#__PURE__*/React.createElement(Menu, {
22
32
  button: /*#__PURE__*/React.createElement(Button, {
33
+ ref: buttonRef,
23
34
  label: menuButtonLabel,
24
35
  secondary: true,
25
36
  disabled: inactiveFilters.length === 0,
@@ -1,15 +1,26 @@
1
1
  import { __rest, __assign } from 'tslib';
2
- import React, { forwardRef } from 'react';
2
+ import React, { forwardRef, useEffect } from 'react';
3
3
  import { useFilterBarContext } from '../../context/FilterBarContext.mjs';
4
4
  import { FilterButton } from '../../../FilterButton/FilterButton/FilterButton.mjs';
5
5
  import { FilterButtonRemovable } from '../../../FilterButton/FilterButtonRemovable/FilterButtonRemovable.mjs';
6
+ import { isRefObject } from '../../../../utils/isRefObject.mjs';
6
7
  const FilterBarButton = /*#__PURE__*/function () {
7
8
  const FilterBarButton = /*#__PURE__*/forwardRef(function (_a, ref) {
8
9
  var filterId = _a.filterId,
9
10
  _b = _a.isRemovable,
10
11
  isRemovable = _b === void 0 ? false : _b,
11
12
  props = __rest(_a, ["filterId", "isRemovable"]);
12
- var hideFilter = useFilterBarContext().hideFilter;
13
+ var _c = useFilterBarContext(),
14
+ hideFilter = _c.hideFilter,
15
+ focusId = _c.focusId,
16
+ setFocus = _c.setFocus;
17
+ useEffect(function () {
18
+ var _a, _b, _c;
19
+ if (focusId === filterId && isRefObject(ref)) {
20
+ (_c = (_b = (_a = ref === null || ref === void 0 ? void 0 : ref.current) === null || _a === void 0 ? void 0 : _a.triggerRef) === null || _b === void 0 ? void 0 : _b.current) === null || _c === void 0 ? void 0 : _c.focus();
21
+ setFocus(undefined);
22
+ }
23
+ }, [focusId]);
13
24
  return isRemovable ? ( /*#__PURE__*/React.createElement(FilterButtonRemovable, {
14
25
  ref: ref,
15
26
  triggerButtonProps: props,
@@ -1,5 +1,5 @@
1
1
  import { __rest, __assign } from 'tslib';
2
- import React, { useState, useEffect } from 'react';
2
+ import React, { useState, useRef, useEffect } from 'react';
3
3
  import { FilterMultiSelect } from '../../../FilterMultiSelect/FilterMultiSelect.mjs';
4
4
  import '../../../FilterMultiSelect/context/MenuTriggerProvider/MenuTriggerProvider.mjs';
5
5
  import '../../../FilterMultiSelect/context/SelectionProvider/SelectionProvider.mjs';
@@ -25,10 +25,13 @@ const FilterBarMultiSelect = /*#__PURE__*/function () {
25
25
  getFilterState = _b.getFilterState,
26
26
  setFilterOpenState = _b.setFilterOpenState,
27
27
  updateValue = _b.updateValue,
28
- hideFilter = _b.hideFilter;
28
+ hideFilter = _b.hideFilter,
29
+ focusId = _b.focusId,
30
+ setFocus = _b.setFocus;
29
31
  var _c = useState(propsItems),
30
32
  items = _c[0],
31
33
  setItems = _c[1];
34
+ var buttonRef = useRef(null);
32
35
  if (!id) throw Error("Missing `id` prop in FilterBarMultiSelect");
33
36
  var filterState = getFilterState(id);
34
37
  useEffect(function () {
@@ -50,6 +53,13 @@ const FilterBarMultiSelect = /*#__PURE__*/function () {
50
53
  }
51
54
  }
52
55
  }, [items]);
56
+ useEffect(function () {
57
+ var _a;
58
+ if (focusId === id) {
59
+ (_a = buttonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
60
+ setFocus(undefined);
61
+ }
62
+ }, [focusId]);
53
63
  return /*#__PURE__*/React.createElement(FilterMultiSelect, __assign({
54
64
  label: filterState.name,
55
65
  // Convert the incoming FilterBar state to a Set (internal FilterMultiSelect state)
@@ -74,7 +84,8 @@ const FilterBarMultiSelect = /*#__PURE__*/function () {
74
84
  return hideFilter(id);
75
85
  }
76
86
  }))) : ( /*#__PURE__*/React.createElement(FilterMultiSelect.TriggerButton, __assign({}, triggerProps)));
77
- }
87
+ },
88
+ triggerRef: buttonRef
78
89
  }, props), children);
79
90
  };
80
91
  FilterBarMultiSelect.displayName = "FilterBar.MultiSelect";
@@ -32,11 +32,13 @@ const FilterMultiSelect = /*#__PURE__*/function () {
32
32
  onSelectionChange = _a.onSelectionChange,
33
33
  _b = _a.selectionMode,
34
34
  selectionMode = _b === void 0 ? "multiple" : _b,
35
- onSearchInputChange = _a.onSearchInputChange;
35
+ onSearchInputChange = _a.onSearchInputChange,
36
+ triggerRef = _a.triggerRef;
36
37
  var menuTriggerProps = {
37
38
  isOpen: isOpen,
38
39
  defaultOpen: defaultOpen,
39
- onOpenChange: onOpenChange
40
+ onOpenChange: onOpenChange,
41
+ triggerRef: triggerRef
40
42
  };
41
43
  var menuPopupProps = {
42
44
  isLoading: isLoading,
@@ -7,7 +7,8 @@ function MenuTriggerProvider(_a) {
7
7
  var isOpen = _a.isOpen,
8
8
  defaultOpen = _a.defaultOpen,
9
9
  onOpenChange = _a.onOpenChange,
10
- children = _a.children;
10
+ children = _a.children,
11
+ triggerRef = _a.triggerRef;
11
12
  // Create state based on the incoming props to manage the open/close
12
13
  var state = useMenuTriggerState({
13
14
  isOpen: isOpen,
@@ -15,7 +16,8 @@ function MenuTriggerProvider(_a) {
15
16
  onOpenChange: onOpenChange
16
17
  });
17
18
  // Get A11y attributes and events for the menu trigger and menu elements
18
- var ref = useRef(null);
19
+ var fallbackRef = useRef(null);
20
+ var ref = triggerRef || fallbackRef;
19
21
  var _b = useMenuTrigger({}, state, ref),
20
22
  menuTriggerProps = _b.menuTriggerProps,
21
23
  menuProps = _b.menuProps;
@@ -1,80 +1,48 @@
1
1
  import { __rest, __assign } from 'tslib';
2
- import React, { useState, useRef, useEffect } from 'react';
2
+ import React, { useState, useRef } from 'react';
3
3
  import classnames from 'classnames';
4
- import styles from './TextArea.module.scss.mjs';
4
+ import styles from './TextArea.module.css.mjs';
5
5
  const TextArea = /*#__PURE__*/function () {
6
6
  const TextArea = function (_a) {
7
+ var _b, _c;
7
8
  var propsTextAreaRef = _a.textAreaRef,
8
- _b = _a.status,
9
- status = _b === void 0 ? "default" : _b,
10
- _c = _a.autogrow,
11
- autogrow = _c === void 0 ? false : _c,
12
- _d = _a.reversed,
13
- reversed = _d === void 0 ? false : _d,
14
- _e = _a.rows,
15
- rows = _e === void 0 ? 3 : _e,
9
+ _d = _a.status,
10
+ status = _d === void 0 ? "default" : _d,
11
+ _e = _a.autogrow,
12
+ autogrow = _e === void 0 ? false : _e,
13
+ _f = _a.reversed,
14
+ reversed = _f === void 0 ? false : _f,
15
+ _g = _a.rows,
16
+ rows = _g === void 0 ? 3 : _g,
16
17
  defaultValue = _a.defaultValue,
17
18
  value = _a.value,
18
19
  disabled = _a.disabled,
19
20
  propsOnChange = _a.onChange,
20
21
  restProps = __rest(_a, ["textAreaRef", "status", "autogrow", "reversed", "rows", "defaultValue", "value", "disabled", "onChange"]);
21
- var _f = useState("auto"),
22
- textAreaHeight = _f[0],
23
- setTextAreaHeight = _f[1];
24
- var _g = useState("auto"),
25
- parentHeight = _g[0],
26
- setParentHeight = _g[1];
27
- var _h = useState(autogrow ? defaultValue : undefined),
22
+ var _h = useState(autogrow && !value ? defaultValue : undefined),
28
23
  internalValue = _h[0],
29
24
  setInternalValue = _h[1];
30
25
  // ^ holds an internal state of the value so that autogrow can still work with uncontrolled textareas
31
- // essentially forces the textarea into an (interally) controlled mode if autogrow is true
26
+ // essentially forces the textarea into an (interally) controlled mode if autogrow is true and mode is uncontrolled
27
+ var controlledValue = value || internalValue;
32
28
  var textAreaRef = propsTextAreaRef || useRef(null);
33
- useEffect(function () {
34
- if (!autogrow) return;
35
- var scrollHeight = textAreaRef.current.scrollHeight;
36
- if (scrollHeight < 1) return;
37
- var borderWidth = textAreaRef.current ? parseInt(getComputedStyle(textAreaRef.current).borderTopWidth, 10) : 0;
38
- var newHeight = scrollHeight + borderWidth * 2;
39
- setParentHeight("".concat(newHeight, "px"));
40
- setTextAreaHeight("".concat(newHeight, "px"));
41
- }, [internalValue]);
42
- var onChange = !autogrow ? undefined : function (event) {
43
- setTextAreaHeight("auto");
44
- // ^ this is required to avoid the textarea height from building up indefinitely
45
- // see https://medium.com/@lucasalgus/creating-a-custom-auto-resize-textarea-component-for-your-react-web-application-6959c0ad68bc#2dee
29
+ var onChange = function (event) {
30
+ propsOnChange && propsOnChange(event);
46
31
  setInternalValue(event.target.value);
47
- if (propsOnChange) {
48
- propsOnChange(event);
49
- }
50
- };
51
- var getWrapperStyle = function () {
52
- return autogrow ? {
53
- minHeight: parentHeight
54
- } : undefined;
55
32
  };
56
- var getTextAreaStyle = function () {
57
- return autogrow ? {
58
- height: textAreaHeight
59
- } : undefined;
60
- };
61
- var controlledValue = value || internalValue;
62
33
  return /*#__PURE__*/React.createElement("div", {
63
- className: styles.wrapper,
64
- style: getWrapperStyle()
34
+ className: classnames(styles.wrapper, (_b = {}, _b[styles.wrapperAutogrow] = autogrow, _b)),
35
+ "data-value": autogrow ? controlledValue : undefined
65
36
  }, /*#__PURE__*/React.createElement("textarea", __assign({
66
- className: classnames(styles.textarea, styles[status], reversed ? styles.reversed : styles.default, disabled && styles.disabled),
37
+ className: classnames(styles.textarea, styles[status], reversed ? styles.reversed : styles.default, (_c = {}, _c[styles.disabled] = disabled, _c[styles.textareaAutogrow] = autogrow, _c)),
67
38
  rows: rows,
68
- onChange: onChange || propsOnChange,
39
+ onChange: onChange,
69
40
  value: controlledValue,
70
41
  defaultValue: controlledValue ? undefined : defaultValue,
71
42
  // ^ React throws a warning if you specify both a value and a defaultValue
72
43
  ref: textAreaRef,
73
- style: getTextAreaStyle(),
74
44
  disabled: disabled
75
- }, restProps)), /*#__PURE__*/React.createElement("div", {
76
- className: styles.focusRing
77
- }));
45
+ }, restProps)));
78
46
  };
79
47
  TextArea.displayName = "TextArea";
80
48
  return TextArea;
@@ -0,0 +1,12 @@
1
+ var styles = {
2
+ "wrapper": "TextArea-module_wrapper__FHfMG",
3
+ "wrapperAutogrow": "TextArea-module_wrapperAutogrow__f46bL",
4
+ "textarea": "TextArea-module_textarea__Ht-1a",
5
+ "textareaAutogrow": "TextArea-module_textareaAutogrow__ReEar",
6
+ "default": "TextArea-module_default__e1cis",
7
+ "error": "TextArea-module_error__bBmvS",
8
+ "caution": "TextArea-module_caution__aj4nR",
9
+ "disabled": "TextArea-module_disabled__XY39a",
10
+ "reversed": "TextArea-module_reversed__r-W3e"
11
+ };
12
+ export { styles as default };