@kaizen/components 0.0.0-canary-v2-20250901045936 → 0.0.0-canary-debug-tab-20251015223744

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 (165) hide show
  1. package/alpha/README.md +28 -0
  2. package/alpha/package.json +5 -0
  3. package/dist/cjs/alpha.cjs +1 -0
  4. package/dist/cjs/src/Modal/GenericModal/GenericModal.cjs +33 -65
  5. package/dist/cjs/src/Modal/GenericModal/GenericModal.module.scss.cjs +1 -3
  6. package/dist/cjs/src/Notification/InlineNotification/InlineNotification.cjs +1 -1
  7. package/dist/cjs/src/SingleSelect/subcomponents/ListBox/ListBox.cjs +6 -2
  8. package/dist/cjs/src/Tabs/subcomponents/TabList/TabList.cjs +29 -21
  9. package/dist/cjs/src/__alpha__/SingleSelect/SingleSelect.cjs +35 -74
  10. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/ComboBox/ComboBox.cjs +105 -0
  11. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/ComboBox/ComboBox.module.css.cjs +11 -0
  12. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/ComboBoxTrigger/ComboBoxTrigger.cjs +112 -0
  13. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/ComboBoxTrigger/ComboBoxTrigger.module.css.cjs +16 -0
  14. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/List/List.cjs +35 -10
  15. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/ListItem/ListItem.cjs +61 -8
  16. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/ListItem/ListItem.module.css.cjs +10 -1
  17. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/ListSection/ListSection.cjs +38 -9
  18. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/ListSection/ListSection.module.css.cjs +4 -1
  19. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/Popover/Popover.cjs +60 -30
  20. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/Popover/Popover.module.css.cjs +2 -1
  21. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/Popover/utils/usePopoverPositioning.cjs +2 -1
  22. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/Popover/utils/usePositioningStyles.cjs +4 -2
  23. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/Select/Select.cjs +87 -0
  24. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/Select/Select.module.css.cjs +11 -0
  25. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/SelectTrigger/SelectTrigger.cjs +52 -0
  26. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/SelectTrigger/SelectTrigger.module.css.cjs +13 -0
  27. package/dist/esm/alpha.mjs +1 -1
  28. package/dist/esm/src/Modal/GenericModal/GenericModal.mjs +34 -65
  29. package/dist/esm/src/Modal/GenericModal/GenericModal.module.scss.mjs +1 -3
  30. package/dist/esm/src/Notification/InlineNotification/InlineNotification.mjs +1 -1
  31. package/dist/esm/src/SingleSelect/subcomponents/ListBox/ListBox.mjs +6 -2
  32. package/dist/esm/src/Tabs/subcomponents/TabList/TabList.mjs +29 -21
  33. package/dist/esm/src/__alpha__/SingleSelect/SingleSelect.mjs +39 -73
  34. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/ComboBox/ComboBox.mjs +96 -0
  35. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/ComboBox/ComboBox.module.css.mjs +9 -0
  36. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/ComboBoxTrigger/ComboBoxTrigger.mjs +103 -0
  37. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/ComboBoxTrigger/ComboBoxTrigger.module.css.mjs +14 -0
  38. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/List/List.mjs +37 -14
  39. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/ListItem/ListItem.mjs +63 -13
  40. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/ListItem/ListItem.module.css.mjs +10 -1
  41. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/ListSection/ListSection.mjs +41 -15
  42. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/ListSection/ListSection.module.css.mjs +4 -1
  43. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/Popover/Popover.mjs +69 -43
  44. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/Popover/Popover.module.css.mjs +2 -1
  45. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/Popover/utils/usePopoverPositioning.mjs +2 -1
  46. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/Popover/utils/usePositioningStyles.mjs +4 -2
  47. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/Select/Select.mjs +78 -0
  48. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/Select/Select.module.css.mjs +9 -0
  49. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/SelectTrigger/SelectTrigger.mjs +43 -0
  50. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/SelectTrigger/SelectTrigger.module.css.mjs +11 -0
  51. package/dist/styles.css +443 -79
  52. package/dist/types/__alpha__/SingleSelect/SingleSelect.d.ts +14 -19
  53. package/dist/types/__alpha__/SingleSelect/_docs/mockData.d.ts +3 -0
  54. package/dist/types/__alpha__/SingleSelect/context/SingleSelectContext.d.ts +15 -7
  55. package/dist/types/__alpha__/SingleSelect/subcomponents/ComboBox/ComboBox.d.ts +2 -0
  56. package/dist/types/__alpha__/SingleSelect/subcomponents/ComboBox/index.d.ts +1 -0
  57. package/dist/types/__alpha__/SingleSelect/subcomponents/ComboBoxTrigger/ComboBoxTrigger.d.ts +2 -0
  58. package/dist/types/__alpha__/SingleSelect/subcomponents/ComboBoxTrigger/index.d.ts +1 -0
  59. package/dist/types/__alpha__/SingleSelect/subcomponents/List/List.d.ts +2 -7
  60. package/dist/types/__alpha__/SingleSelect/subcomponents/ListItem/ListItem.d.ts +2 -7
  61. package/dist/types/__alpha__/SingleSelect/subcomponents/ListSection/ListSection.d.ts +2 -9
  62. package/dist/types/__alpha__/SingleSelect/subcomponents/Popover/Popover.d.ts +3 -6
  63. package/dist/types/__alpha__/SingleSelect/subcomponents/Popover/utils/index.d.ts +1 -0
  64. package/dist/types/__alpha__/SingleSelect/subcomponents/Popover/utils/usePopoverPositioning.d.ts +1 -0
  65. package/dist/types/__alpha__/SingleSelect/subcomponents/Popover/utils/usePositioningStyles.d.ts +1 -0
  66. package/dist/types/__alpha__/SingleSelect/subcomponents/Select/Select.d.ts +2 -0
  67. package/dist/types/__alpha__/SingleSelect/subcomponents/Select/index.d.ts +1 -0
  68. package/dist/types/__alpha__/SingleSelect/subcomponents/SelectTrigger/SelectTrigger.d.ts +2 -0
  69. package/dist/types/__alpha__/SingleSelect/subcomponents/SelectTrigger/index.d.ts +1 -0
  70. package/dist/types/__alpha__/SingleSelect/subcomponents/index.d.ts +4 -1
  71. package/dist/types/__alpha__/SingleSelect/types.d.ts +68 -11
  72. package/locales/ar.json +9 -1
  73. package/locales/bg.json +9 -1
  74. package/locales/cs.json +9 -1
  75. package/locales/cy.json +9 -1
  76. package/locales/da.json +9 -1
  77. package/locales/de.json +9 -1
  78. package/locales/el.json +9 -1
  79. package/locales/en-GB.json +9 -1
  80. package/locales/en.json +9 -1
  81. package/locales/es-419.json +9 -1
  82. package/locales/es.json +9 -1
  83. package/locales/et.json +9 -1
  84. package/locales/fi.json +9 -1
  85. package/locales/fr-CA.json +9 -1
  86. package/locales/fr.json +9 -1
  87. package/locales/he.json +9 -1
  88. package/locales/hi.json +9 -1
  89. package/locales/ht.json +9 -1
  90. package/locales/hu.json +9 -1
  91. package/locales/id.json +9 -1
  92. package/locales/it.json +9 -1
  93. package/locales/ja.json +9 -1
  94. package/locales/km-KH.json +9 -1
  95. package/locales/ko.json +9 -1
  96. package/locales/lt.json +9 -1
  97. package/locales/lv.json +9 -1
  98. package/locales/mi.json +10 -2
  99. package/locales/ms.json +9 -1
  100. package/locales/nb.json +9 -1
  101. package/locales/nl.json +9 -1
  102. package/locales/pl.json +9 -1
  103. package/locales/pt-BR.json +9 -1
  104. package/locales/pt.json +9 -1
  105. package/locales/ro.json +9 -1
  106. package/locales/ru.json +9 -1
  107. package/locales/si-LK.json +9 -1
  108. package/locales/sk.json +9 -1
  109. package/locales/sr.json +9 -1
  110. package/locales/sv.json +9 -1
  111. package/locales/th.json +9 -1
  112. package/locales/tl.json +9 -1
  113. package/locales/tr.json +9 -1
  114. package/locales/uk.json +9 -1
  115. package/locales/vi.json +9 -1
  116. package/locales/zh-TW.json +9 -1
  117. package/locales/zh.json +9 -1
  118. package/package.json +10 -3
  119. package/src/Modal/GenericModal/GenericModal.spec.tsx +1 -1
  120. package/src/Modal/GenericModal/GenericModal.tsx +38 -70
  121. package/src/Notification/InlineNotification/InlineNotification.tsx +1 -1
  122. package/src/RichTextEditor/RichTextEditor/RichTextEditor.spec.stories.tsx +10 -3
  123. package/src/SingleSelect/subcomponents/ListBox/ListBox.tsx +2 -2
  124. package/src/Tabs/subcomponents/TabList/TabList.tsx +40 -30
  125. package/src/__alpha__/SingleSelect/SingleSelect.tsx +35 -88
  126. package/src/__alpha__/SingleSelect/_docs/SingleSelect.mdx +96 -6
  127. package/src/__alpha__/SingleSelect/_docs/SingleSelect.spec.stories.tsx +22 -24
  128. package/src/__alpha__/SingleSelect/_docs/SingleSelect.stickersheet.stories.tsx +389 -33
  129. package/src/__alpha__/SingleSelect/_docs/SingleSelect.stories.tsx +41 -22
  130. package/src/__alpha__/SingleSelect/_docs/mockData.ts +20 -14
  131. package/src/__alpha__/SingleSelect/context/SingleSelectContext.tsx +18 -7
  132. package/src/__alpha__/SingleSelect/subcomponents/ComboBox/ComboBox.module.css +35 -0
  133. package/src/__alpha__/SingleSelect/subcomponents/ComboBox/ComboBox.tsx +106 -0
  134. package/src/__alpha__/SingleSelect/subcomponents/ComboBox/index.ts +1 -0
  135. package/src/__alpha__/SingleSelect/subcomponents/ComboBoxTrigger/ComboBoxTrigger.module.css +130 -0
  136. package/src/__alpha__/SingleSelect/subcomponents/ComboBoxTrigger/ComboBoxTrigger.tsx +121 -0
  137. package/src/__alpha__/SingleSelect/subcomponents/ComboBoxTrigger/index.ts +1 -0
  138. package/src/__alpha__/SingleSelect/subcomponents/List/List.module.css +5 -0
  139. package/src/__alpha__/SingleSelect/subcomponents/List/List.tsx +36 -13
  140. package/src/__alpha__/SingleSelect/subcomponents/ListItem/ListItem.module.css +84 -3
  141. package/src/__alpha__/SingleSelect/subcomponents/ListItem/ListItem.tsx +67 -11
  142. package/src/__alpha__/SingleSelect/subcomponents/ListSection/ListSection.module.css +20 -5
  143. package/src/__alpha__/SingleSelect/subcomponents/ListSection/ListSection.tsx +46 -19
  144. package/src/__alpha__/SingleSelect/subcomponents/Popover/Popover.module.css +7 -5
  145. package/src/__alpha__/SingleSelect/subcomponents/Popover/Popover.tsx +90 -37
  146. package/src/__alpha__/SingleSelect/subcomponents/Popover/utils/index.ts +1 -0
  147. package/src/__alpha__/SingleSelect/subcomponents/Popover/utils/usePopoverPositioning.ts +2 -2
  148. package/src/__alpha__/SingleSelect/subcomponents/Popover/utils/usePositioningStyles.ts +9 -8
  149. package/src/__alpha__/SingleSelect/subcomponents/Select/Select.module.css +35 -0
  150. package/src/__alpha__/SingleSelect/subcomponents/Select/Select.tsx +84 -0
  151. package/src/__alpha__/SingleSelect/subcomponents/Select/index.ts +1 -0
  152. package/src/__alpha__/SingleSelect/subcomponents/SelectTrigger/SelectTrigger.module.css +77 -0
  153. package/src/__alpha__/SingleSelect/subcomponents/SelectTrigger/SelectTrigger.tsx +52 -0
  154. package/src/__alpha__/SingleSelect/subcomponents/SelectTrigger/index.ts +1 -0
  155. package/src/__alpha__/SingleSelect/subcomponents/index.ts +4 -1
  156. package/src/__alpha__/SingleSelect/types.ts +94 -14
  157. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/Trigger/Trigger.cjs +0 -57
  158. package/dist/cjs/src/__alpha__/SingleSelect/subcomponents/Trigger/Trigger.module.css.cjs +0 -6
  159. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/Trigger/Trigger.mjs +0 -49
  160. package/dist/esm/src/__alpha__/SingleSelect/subcomponents/Trigger/Trigger.module.css.mjs +0 -4
  161. package/dist/types/__alpha__/SingleSelect/subcomponents/Trigger/Trigger.d.ts +0 -2
  162. package/dist/types/__alpha__/SingleSelect/subcomponents/Trigger/index.d.ts +0 -1
  163. package/src/__alpha__/SingleSelect/subcomponents/Trigger/Trigger.module.css +0 -19
  164. package/src/__alpha__/SingleSelect/subcomponents/Trigger/Trigger.tsx +0 -35
  165. package/src/__alpha__/SingleSelect/subcomponents/Trigger/index.ts +0 -1
@@ -0,0 +1,52 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var classnames = require('classnames');
6
+ var reactAria = require('react-aria');
7
+ var Icon = require('../../../../Icon/Icon.cjs');
8
+ var Text = require('../../../../Text/Text.cjs');
9
+ var SingleSelectContext = require('../../context/SingleSelectContext.cjs');
10
+ var SelectTrigger_module = require('./SelectTrigger.module.css.cjs');
11
+ function _interopDefault(e) {
12
+ return e && e.__esModule ? e : {
13
+ default: e
14
+ };
15
+ }
16
+ var React__default = /*#__PURE__*/_interopDefault(React);
17
+ var classnames__default = /*#__PURE__*/_interopDefault(classnames);
18
+ var ChevronButton = function () {
19
+ var state = SingleSelectContext.useSingleSelectContext().state;
20
+ return React__default.default.createElement("div", {
21
+ className: SelectTrigger_module.chevronButton
22
+ }, React__default.default.createElement(Icon.Icon, {
23
+ isPresentational: true,
24
+ name: state.isOpen ? 'keyboard_arrow_up' : 'keyboard_arrow_down'
25
+ }));
26
+ };
27
+ var SelectTrigger = function (_a) {
28
+ var _b;
29
+ var triggerProps = _a.triggerProps,
30
+ valueProps = _a.valueProps,
31
+ buttonRef = _a.buttonRef;
32
+ var _c = SingleSelectContext.useSingleSelectContext(),
33
+ state = _c.state,
34
+ anchorName = _c.anchorName,
35
+ isDisabled = _c.isDisabled,
36
+ isReadOnly = _c.isReadOnly,
37
+ secondary = _c.secondary,
38
+ size = _c.size;
39
+ var buttonProps = reactAria.useButton(triggerProps, buttonRef).buttonProps;
40
+ return React__default.default.createElement("button", tslib.__assign({}, buttonProps, {
41
+ type: "button",
42
+ style: {
43
+ '--anchor-name': anchorName
44
+ },
45
+ className: classnames__default.default(SelectTrigger_module.trigger, (_b = {}, _b[SelectTrigger_module.disabled] = isDisabled, _b[SelectTrigger_module.readOnly] = isReadOnly, _b[SelectTrigger_module.secondary] = secondary, _b[SelectTrigger_module.small] = size === 'small', _b[SelectTrigger_module.large] = size === 'large', _b)),
46
+ ref: buttonRef
47
+ }), React__default.default.createElement(Text.Text, {
48
+ variant: size === 'small' ? 'small' : 'body',
49
+ classNameOverride: isDisabled ? SelectTrigger_module.disabledText : undefined
50
+ }, React__default.default.createElement("span", tslib.__assign({}, valueProps), state.selectedItem ? state.selectedItem.textValue : '')), !isReadOnly && React__default.default.createElement(ChevronButton, null));
51
+ };
52
+ exports.SelectTrigger = SelectTrigger;
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var styles = {
4
+ "trigger": "SelectTrigger-module_trigger__fIe03",
5
+ "disabled": "SelectTrigger-module_disabled__zfAoe",
6
+ "secondary": "SelectTrigger-module_secondary__eOquY",
7
+ "readOnly": "SelectTrigger-module_readOnly__q-Epr",
8
+ "disabledText": "SelectTrigger-module_disabledText__acP59",
9
+ "small": "SelectTrigger-module_small__jE-NG",
10
+ "large": "SelectTrigger-module_large__r93d8",
11
+ "chevronButton": "SelectTrigger-module_chevronButton__611jw"
12
+ };
13
+ module.exports = styles;
@@ -1 +1 @@
1
- export { SingleSelect } from './src/__alpha__/SingleSelect/SingleSelect.mjs';
1
+ export { Item, SingleSelect } from './src/__alpha__/SingleSelect/SingleSelect.mjs';
@@ -1,8 +1,8 @@
1
- import React, { useId, useState, useCallback, useEffect } from 'react';
1
+ import React, { useId, useRef } from 'react';
2
2
  import { createPortal } from 'react-dom';
3
3
  import { Transition } from '@headlessui/react';
4
4
  import classnames from 'classnames';
5
- import FocusLock from 'react-focus-lock';
5
+ import { FocusOn } from 'react-focus-on';
6
6
  import { useIsClientReady } from '../../utils/useIsClientReady/useIsClientReady.mjs';
7
7
  import { warn } from '../util/console.mjs';
8
8
  import { ModalContext } from './context/ModalContext.mjs';
@@ -24,87 +24,60 @@ const GenericModal = /*#__PURE__*/function () {
24
24
  var labelledByID = useId();
25
25
  var describedByID = useId();
26
26
  var isClientReady = useIsClientReady();
27
- var _c = useState(null),
28
- scrollLayer = _c[0],
29
- setScrollLayer = _c[1];
30
- var _d = useState(null),
31
- modalLayer = _d[0],
32
- setModalLayer = _d[1];
27
+ var scrollLayerRef = useRef(null);
28
+ var modalLayerRef = useRef(null);
33
29
  var scrollModalToTop = function () {
34
30
  // If we have a really long modal, the autofocus could land on an element down below
35
31
  // causing the modal to scroll down and skipping over the content near the modal's top.
36
32
  // Ensure that when the modal opens, we are at the top of its content.
37
33
  requestAnimationFrame(function () {
38
- if (!scrollLayer) return;
39
- scrollLayer.scrollTop = 0;
34
+ var scrollElement = scrollLayerRef.current;
35
+ // This little verbose of a check but this ensures that the element is attached to the DOM as it animates in. This additional check aims to avoid race conditions
36
+ if (!(scrollElement === null || scrollElement === void 0 ? void 0 : scrollElement.isConnected)) return;
37
+ scrollElement.scrollTop = 0;
40
38
  });
41
39
  };
42
- var outsideModalClickHandler = function (event) {
43
- if (event.target === scrollLayer || event.target === modalLayer) {
44
- onOutsideModalClick === null || onOutsideModalClick === void 0 ? void 0 : onOutsideModalClick(event);
40
+ var a11yWarn = function () {
41
+ if (!isClientReady) return;
42
+ // Ensure that consumers have provided an element that labels the modal
43
+ // to meet ARIA accessibility guidelines.
44
+ if (!document.getElementById(labelledByID)) {
45
+ warn("When using the Modal component, you must provide a label for the modal.\n Make sure you have a <ModalAccessibleLabel /> component with content that labels the modal.");
45
46
  }
46
47
  };
47
48
  var focusOnAccessibleLabel = function () {
48
49
  if (!isClientReady) return;
50
+ var modalElement = modalLayerRef.current;
51
+ if (!(modalElement === null || modalElement === void 0 ? void 0 : modalElement.isConnected)) return;
49
52
  // Check if focus already exists within the modal
50
- if (modalLayer === null || modalLayer === void 0 ? void 0 : modalLayer.contains(document.activeElement)) {
53
+ if (modalElement.contains(document.activeElement)) {
51
54
  return;
52
55
  }
53
56
  var labelElement = document.getElementById(labelledByID);
54
- labelElement === null || labelElement === void 0 ? void 0 : labelElement.focus();
55
- };
56
- var a11yWarn = function () {
57
- if (!isClientReady) return;
58
- // Ensure that consumers have provided an element that labels the modal
59
- // to meet ARIA accessibility guidelines.
60
- if (!document.getElementById(labelledByID)) {
61
- warn("When using the Modal component, you must provide a label for the modal.\n Make sure you have a <ModalAccessibleLabel /> component with content that labels the modal.");
57
+ if (labelElement === null || labelElement === void 0 ? void 0 : labelElement.isConnected) {
58
+ labelElement.focus();
62
59
  }
63
60
  };
64
- var preventBodyScroll = function () {
65
- var _a;
66
- if (!isClientReady) return;
67
- var hasScrollbar = window.innerWidth > document.documentElement.clientWidth;
68
- var scrollStyles = [styles.unscrollable];
69
- if (hasScrollbar) {
70
- scrollStyles.push(styles.pseudoScrollbar);
61
+ var onEscapeKeyHandler = function (e) {
62
+ if (e instanceof KeyboardEvent) {
63
+ onEscapeKeyup === null || onEscapeKeyup === void 0 ? void 0 : onEscapeKeyup(e);
71
64
  }
72
- (_a = document.documentElement.classList).add.apply(_a, scrollStyles);
73
65
  };
74
66
  var onAfterEnterHandler = function () {
75
67
  scrollModalToTop();
76
- if (modalLayer) {
68
+ var modalElement = modalLayerRef.current;
69
+ if (modalElement) {
77
70
  onAfterEnter === null || onAfterEnter === void 0 ? void 0 : onAfterEnter();
78
71
  focusOnAccessibleLabel();
79
72
  a11yWarn();
80
73
  }
81
74
  };
82
- var escapeKeyHandler = useCallback(function (event) {
83
- if (event.key === 'Escape') {
84
- onEscapeKeyup === null || onEscapeKeyup === void 0 ? void 0 : onEscapeKeyup(event);
85
- }
86
- }, [onEscapeKeyup]);
87
- var onBeforeEnterHandler = function () {
88
- preventBodyScroll();
89
- if (onEscapeKeyup && isClientReady) {
90
- document.addEventListener('keyup', escapeKeyHandler);
75
+ var outsideModalClickHandler = function (e) {
76
+ if (e.target === scrollLayerRef.current || e.target === modalLayerRef.current) {
77
+ onOutsideModalClick === null || onOutsideModalClick === void 0 ? void 0 : onOutsideModalClick(e);
91
78
  }
92
79
  };
93
- var cleanUpAfterClose = useCallback(function () {
94
- if (!isClientReady) return;
95
- document.documentElement.classList.remove(styles.unscrollable, styles.pseudoScrollbar);
96
- if (onEscapeKeyup) {
97
- document.removeEventListener('keyup', escapeKeyHandler);
98
- }
99
- }, [escapeKeyHandler, onEscapeKeyup, isClientReady]);
100
- /* Ensure sure add-on styles (e.g. unscrollable) and key event is cleaned up when the modal is unmounted*/
101
- useEffect(function () {
102
- return function () {
103
- return cleanUpAfterClose();
104
- };
105
- }, [cleanUpAfterClose]);
106
80
  var onAfterLeaveHandler = function () {
107
- cleanUpAfterClose();
108
81
  propsOnAfterLeave === null || propsOnAfterLeave === void 0 ? void 0 : propsOnAfterLeave();
109
82
  };
110
83
  // Don't render portal during SSR
@@ -114,7 +87,6 @@ const GenericModal = /*#__PURE__*/function () {
114
87
  return /*#__PURE__*/createPortal(/*#__PURE__*/React.createElement(Transition, {
115
88
  appear: true,
116
89
  show: isOpen,
117
- beforeEnter: onBeforeEnterHandler,
118
90
  afterEnter: onAfterEnterHandler,
119
91
  afterLeave: onAfterLeaveHandler,
120
92
  "data-generic-modal-transition-wrapper": true,
@@ -122,9 +94,10 @@ const GenericModal = /*#__PURE__*/function () {
122
94
  leave: styles.animatingLeave,
123
95
  as: "div",
124
96
  className: classnames(styles.transitionLayer, className)
125
- }, /*#__PURE__*/React.createElement(FocusLock, {
126
- disabled: focusLockDisabled,
97
+ }, /*#__PURE__*/React.createElement(FocusOn, {
98
+ focusLock: focusLockDisabled,
127
99
  returnFocus: true,
100
+ onEscapeKey: onEscapeKeyHandler,
128
101
  // Disabling false positive
129
102
  // eslint-disable-next-line jsx-a11y/no-autofocus
130
103
  autoFocus: false
@@ -132,11 +105,9 @@ const GenericModal = /*#__PURE__*/function () {
132
105
  className: styles.backdropLayer
133
106
  }), /*#__PURE__*/React.createElement("div", {
134
107
  className: styles.scrollLayer,
135
- ref: function (scrollLayerRef) {
136
- setScrollLayer(scrollLayerRef);
137
- },
138
- onClick: outsideModalClickHandler,
139
- "data-testid": "".concat(id, "-scrollLayer")
108
+ ref: scrollLayerRef,
109
+ "data-testid": "".concat(id, "-scrollLayer"),
110
+ onClick: outsideModalClickHandler
140
111
  }, /*#__PURE__*/React.createElement(ModalContext.Provider, {
141
112
  value: {
142
113
  labelledByID: labelledByID,
@@ -147,9 +118,7 @@ const GenericModal = /*#__PURE__*/function () {
147
118
  className: styles.modalLayer,
148
119
  "aria-labelledby": labelledByID,
149
120
  "aria-describedby": describedByID,
150
- ref: function (modalLayerRef) {
151
- return setModalLayer(modalLayerRef);
152
- },
121
+ ref: modalLayerRef,
153
122
  "data-testid": id
154
123
  }, children))))), document.body);
155
124
  };
@@ -4,8 +4,6 @@ var styles = {
4
4
  "modalLayer": "GenericModal-module_modalLayer__WfD1U",
5
5
  "transitionLayer": "GenericModal-module_transitionLayer__zTH-C",
6
6
  "animatingEnter": "GenericModal-module_animatingEnter__P3wuk",
7
- "animatingLeave": "GenericModal-module_animatingLeave__rNkKX",
8
- "unscrollable": "GenericModal-module_unscrollable__HjRaW",
9
- "pseudoScrollbar": "GenericModal-module_pseudoScrollbar__BhRqh"
7
+ "animatingLeave": "GenericModal-module_animatingLeave__rNkKX"
10
8
  };
11
9
  export { styles as default };
@@ -19,7 +19,7 @@ const InlineNotification = /*#__PURE__*/function () {
19
19
  otherProps = __rest(_a, ["isSubtle", "hideCloseIcon", "persistent", "classNameOverride"]);
20
20
  return /*#__PURE__*/React.createElement(GenericNotification, __assign({
21
21
  style: "inline",
22
- persistent: persistent !== null && persistent !== void 0 ? persistent : hideCloseIcon,
22
+ persistent: persistent || hideCloseIcon,
23
23
  classNameOverride: classnames(classNameOverride, [isSubtle && styles.subtle]),
24
24
  ref: ref
25
25
  }, otherProps));
@@ -52,10 +52,14 @@ const ListBox = /*#__PURE__*/function () {
52
52
  var optionKey = getOptionKeyFromCollection(state);
53
53
  var focusToElement = safeQuerySelector("[data-key='".concat(optionKey, "']"));
54
54
  if (focusToElement) {
55
- focusToElement.focus();
55
+ focusToElement.focus({
56
+ preventScroll: true
57
+ });
56
58
  } else {
57
59
  // If an element is not found, focus on the listbox. This ensures the list can still be navigated to via keyboard if the keys do not align to the data attributes of the list items.
58
- (_a = ref.current) === null || _a === void 0 ? void 0 : _a.focus();
60
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.focus({
61
+ preventScroll: true
62
+ });
59
63
  }
60
64
  }
61
65
  // Only run this effect for checking the first successful render
@@ -54,31 +54,39 @@ var TabList = function (props) {
54
54
  if (!tabs || tabs.length === 0) {
55
55
  return;
56
56
  }
57
- var firstTabObserver = new IntersectionObserver(function (entries) {
58
- if (!entries[0].isIntersecting) {
59
- setLeftArrowEnabled(true);
57
+ var firstTabObserver = null;
58
+ var lastTabObserver = null;
59
+ requestAnimationFrame(function () {
60
+ var tabList = tabListRef.current;
61
+ if (!tabList) {
60
62
  return;
61
63
  }
62
- setLeftArrowEnabled(false);
63
- }, {
64
- threshold: 0.8,
65
- root: containerElement
64
+ firstTabObserver = new IntersectionObserver(function (entries) {
65
+ if (!entries[0].isIntersecting) {
66
+ setLeftArrowEnabled(true);
67
+ return;
68
+ }
69
+ setLeftArrowEnabled(false);
70
+ }, {
71
+ threshold: 0.8,
72
+ root: containerElement
73
+ });
74
+ firstTabObserver.observe(isRTL$1 ? tabs[tabs.length - 1] : tabs[0]);
75
+ lastTabObserver = new IntersectionObserver(function (entries) {
76
+ if (!entries[0].isIntersecting) {
77
+ setRightArrowEnabled(true);
78
+ return;
79
+ }
80
+ setRightArrowEnabled(false);
81
+ }, {
82
+ threshold: 0.8,
83
+ root: containerElement
84
+ });
85
+ lastTabObserver.observe(isRTL$1 ? tabs[0] : tabs[tabs.length - 1]);
66
86
  });
67
- firstTabObserver.observe(isRTL$1 ? tabs[tabs.length - 1] : tabs[0]);
68
- var lastTabObserver = new IntersectionObserver(function (entries) {
69
- if (!entries[0].isIntersecting) {
70
- setRightArrowEnabled(true);
71
- return;
72
- }
73
- setRightArrowEnabled(false);
74
- }, {
75
- threshold: 0.8,
76
- root: containerElement
77
- });
78
- lastTabObserver.observe(isRTL$1 ? tabs[0] : tabs[tabs.length - 1]);
79
87
  return function () {
80
- firstTabObserver.disconnect();
81
- lastTabObserver.disconnect();
88
+ firstTabObserver === null || firstTabObserver === void 0 ? void 0 : firstTabObserver.disconnect();
89
+ lastTabObserver === null || lastTabObserver === void 0 ? void 0 : lastTabObserver.disconnect();
82
90
  };
83
91
  }, [isDocumentReady, containerElement, isRTL$1, tabListContext === null || tabListContext === void 0 ? void 0 : tabListContext.collection.size]);
84
92
  useEffect(function () {
@@ -1,77 +1,43 @@
1
- import { __rest, __assign } from 'tslib';
2
- import React, { useId, useMemo, isValidElement, cloneElement } from 'react';
3
- import { useSelectState } from '@react-stately/select';
4
- import { Select } from 'react-aria-components';
5
- import { SingleSelectContext } from './context/SingleSelectContext.mjs';
6
- import { List } from './subcomponents/List/List.mjs';
7
- import { ListSection } from './subcomponents/ListSection/ListSection.mjs';
8
- import { ListItem } from './subcomponents/ListItem/ListItem.mjs';
9
- import { Trigger } from './subcomponents/Trigger/Trigger.mjs';
10
- import { Popover } from './subcomponents/Popover/Popover.mjs';
1
+ import { __assign, __rest } from 'tslib';
2
+ import React from 'react';
3
+ import { Item as Item$1, Section } from '@react-stately/collections';
4
+ import 'react-aria';
5
+ import 'classnames';
6
+ import '../../Radio/Radio/Radio.mjs';
7
+ import '../../Radio/RadioField/RadioField.mjs';
8
+ import '../../Radio/RadioGroup/RadioGroup.mjs';
9
+ import '../../Divider/Divider.mjs';
10
+ import '../../Text/Text.mjs';
11
+ import './context/SingleSelectContext.mjs';
12
+ import '@cultureamp/i18n-react-intl';
13
+ import '../../VisuallyHidden/VisuallyHidden.mjs';
14
+ import '@react-aria/i18n';
15
+ import { Select } from './subcomponents/Select/Select.mjs';
16
+ import { ComboBox } from './subcomponents/ComboBox/ComboBox.mjs';
11
17
  const SingleSelect = /*#__PURE__*/function () {
12
- const SingleSelect = function (_a) {
13
- var items = _a.items,
14
- onSelectionChange = _a.onSelectionChange,
15
- children = _a.children,
16
- restProps = __rest(_a, ["items", "onSelectionChange", "children"]);
17
- var buttonRef = React.useRef(null);
18
- var popoverRef = React.useRef(null);
19
- var racPopoverRef = React.useRef(null);
20
- var uniqueId = useId();
21
- var anchorName = "--trigger-".concat(uniqueId);
22
- var state = useSelectState({
23
- items: items
24
- });
25
- var handleOnSelectionChange = React.useCallback(function (keys) {
26
- var key = null;
27
- if (keys instanceof Set && keys.size > 0) {
28
- key = Array.from(keys)[0];
29
- }
30
- state.setSelectedKey(key);
31
- if (onSelectionChange) {
32
- onSelectionChange(key);
33
- }
34
- }, [state, onSelectionChange]);
35
- // Cloning children here to allow users to pass in a custom ListItem or ListSection
36
- // and still have the SingleSelect handle selection state
37
- var injectedChildren = useMemo(function () {
38
- if (! /*#__PURE__*/isValidElement(children)) return null;
39
- var selectedKeys = state.selectedKey ? new Set([state.selectedKey]) : new Set();
40
- return /*#__PURE__*/cloneElement(children, {
41
- selectionMode: 'single',
42
- selectedKeys: selectedKeys,
43
- onSelectionChange: handleOnSelectionChange,
44
- autoFocus: 'first'
45
- });
46
- }, [children, handleOnSelectionChange, state.selectedKey]);
47
- return /*#__PURE__*/React.createElement(SingleSelectContext.Provider, {
48
- value: {
49
- isOpen: state.isOpen,
50
- setOpen: state.setOpen,
51
- selectedKey: state.selectedKey,
52
- items: items,
53
- anchorName: anchorName
54
- }
55
- }, /*#__PURE__*/React.createElement(Select
56
- // TODO: allow user to pass in label
57
- , __assign({
58
- "aria-label": 'single-select',
59
- onSelectionChange: function (key) {
60
- return handleOnSelectionChange(key != null ? new Set([key]) : new Set());
61
- },
62
- placeholder: ""
63
- }, restProps), /*#__PURE__*/React.createElement(Trigger, {
64
- buttonRef: buttonRef
65
- }), state.isOpen && (/*#__PURE__*/React.createElement(Popover, {
66
- buttonRef: buttonRef,
67
- popoverRef: popoverRef,
68
- racPopoverRef: racPopoverRef
69
- }, injectedChildren))));
18
+ const SingleSelect = function (props) {
19
+ var isComboBox = props.isComboBox,
20
+ children = props.children,
21
+ rest = __rest(props, ["isComboBox", "children"]);
22
+ if (isComboBox) {
23
+ return /*#__PURE__*/React.createElement(ComboBox, __assign({}, rest), children);
24
+ }
25
+ return /*#__PURE__*/React.createElement(Select, __assign({}, rest), children);
70
26
  };
71
- SingleSelect.displayName = 'SingleSelect';
72
- SingleSelect.List = List;
73
- SingleSelect.ListItem = ListItem;
74
- SingleSelect.ListSection = ListSection;
27
+ SingleSelect.Item = Item;
28
+ SingleSelect.Section = Section;
75
29
  return SingleSelect;
76
30
  }();
77
- export { SingleSelect };
31
+ const Item = /*#__PURE__*/function () {
32
+ const Item = /*#__PURE__*/React.forwardRef(function (props, ref) {
33
+ // @ts-expect-error: StatelyItem doesn't know about our internal item props
34
+ return /*#__PURE__*/React.createElement(Item$1, __assign({}, props, {
35
+ ref: ref
36
+ }));
37
+ });
38
+ // @ts-expect-error: doesn't know that the Item can have this static property
39
+ Item.getCollectionNode = Item$1.getCollectionNode;
40
+ Item.displayName = 'SingleSelectItem';
41
+ return Item;
42
+ }();
43
+ export { Item, SingleSelect };
@@ -0,0 +1,96 @@
1
+ import { __assign } from 'tslib';
2
+ import React, { useRef, useId } from 'react';
3
+ import { useComboBoxState } from '@react-stately/combobox';
4
+ import classnames from 'classnames';
5
+ import { useFilter, useComboBox } from 'react-aria';
6
+ import { FieldMessage } from '../../../../FieldMessage/FieldMessage.mjs';
7
+ import { Label } from '../../../../Label/Label.mjs';
8
+ import { SingleSelectContext } from '../../context/SingleSelectContext.mjs';
9
+ import { ComboBoxTrigger } from '../ComboBoxTrigger/ComboBoxTrigger.mjs';
10
+ import { List } from '../List/List.mjs';
11
+ import { Popover } from '../Popover/Popover.mjs';
12
+ import styles from './ComboBox.module.css.mjs';
13
+ var ComboBox = function (props) {
14
+ var _a;
15
+ var items = props.items,
16
+ children = props.children,
17
+ label = props.label,
18
+ description = props.description,
19
+ labelHidden = props.labelHidden,
20
+ _b = props.labelPosition,
21
+ labelPosition = _b === void 0 ? 'top' : _b,
22
+ isReadOnly = props.isReadOnly,
23
+ isDisabled = props.isDisabled,
24
+ _c = props.size,
25
+ size = _c === void 0 ? 'medium' : _c,
26
+ _d = props.variant,
27
+ variant = _d === void 0 ? 'primary' : _d;
28
+ var contains = useFilter({
29
+ sensitivity: 'base'
30
+ }).contains;
31
+ var state = useComboBoxState(__assign(__assign({}, props), {
32
+ items: items,
33
+ defaultFilter: contains,
34
+ children: children,
35
+ menuTrigger: 'focus'
36
+ }));
37
+ var inputRef = useRef(null);
38
+ var popoverRef = useRef(null);
39
+ var listBoxRef = useRef(null);
40
+ var buttonRef = useRef(null);
41
+ var clearButtonRef = useRef(null);
42
+ var triggerWrapperRef = useRef(null);
43
+ var _e = useComboBox(__assign(__assign({}, props), {
44
+ 'aria-label': labelHidden ? label : undefined,
45
+ inputRef: inputRef,
46
+ buttonRef: buttonRef,
47
+ popoverRef: popoverRef,
48
+ listBoxRef: listBoxRef
49
+ }), state),
50
+ labelProps = _e.labelProps,
51
+ descriptionProps = _e.descriptionProps,
52
+ inputProps = _e.inputProps,
53
+ listBoxProps = _e.listBoxProps,
54
+ buttonProps = _e.buttonProps;
55
+ var uniqueId = useId();
56
+ var anchorName = "--trigger-".concat(uniqueId);
57
+ return /*#__PURE__*/React.createElement(SingleSelectContext.Provider, {
58
+ value: {
59
+ anchorName: anchorName,
60
+ state: state,
61
+ isComboBox: true,
62
+ isDisabled: isDisabled !== null && isDisabled !== void 0 ? isDisabled : false,
63
+ isReadOnly: isReadOnly !== null && isReadOnly !== void 0 ? isReadOnly : false,
64
+ secondary: variant === 'secondary',
65
+ size: size,
66
+ fieldLabel: label
67
+ }
68
+ }, /*#__PURE__*/React.createElement("div", {
69
+ className: labelPosition === 'top' ? styles.topLabel : styles.sideLabel
70
+ }, !labelHidden && (/*#__PURE__*/React.createElement("div", {
71
+ className: classnames(styles.label, (_a = {}, _a[styles.labelTop] = labelPosition === 'top', _a))
72
+ }, /*#__PURE__*/React.createElement(Label, __assign({}, labelProps), label))), /*#__PURE__*/React.createElement("div", {
73
+ className: styles.comboBoxTrigger
74
+ }, /*#__PURE__*/React.createElement(ComboBoxTrigger, {
75
+ inputProps: inputProps,
76
+ inputRef: inputRef,
77
+ buttonRef: buttonRef,
78
+ buttonProps: buttonProps,
79
+ clearButtonRef: clearButtonRef,
80
+ triggerWrapperRef: triggerWrapperRef
81
+ })), description && (/*#__PURE__*/React.createElement("div", {
82
+ className: styles.description
83
+ }, /*#__PURE__*/React.createElement(FieldMessage, __assign({
84
+ message: description
85
+ }, descriptionProps))))), /*#__PURE__*/React.createElement(Popover, {
86
+ state: state,
87
+ triggerRef: triggerWrapperRef,
88
+ popoverRef: popoverRef,
89
+ clearButtonRef: clearButtonRef
90
+ }, /*#__PURE__*/React.createElement(List, {
91
+ listBoxOptions: listBoxProps,
92
+ state: state,
93
+ listBoxRef: listBoxRef
94
+ })));
95
+ };
96
+ export { ComboBox };
@@ -0,0 +1,9 @@
1
+ var styles = {
2
+ "topLabel": "ComboBox-module_topLabel__a2t80",
3
+ "sideLabel": "ComboBox-module_sideLabel__B-jX4",
4
+ "label": "ComboBox-module_label__eTnD9",
5
+ "labelTop": "ComboBox-module_labelTop__h6r-z",
6
+ "comboBoxTrigger": "ComboBox-module_comboBoxTrigger__yvqGb",
7
+ "description": "ComboBox-module_description__MDKJ7"
8
+ };
9
+ export { styles as default };