@hazelcast/ui 3.0.13 → 4.0.1-canary.10

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 (240) hide show
  1. package/README.md +1 -29
  2. package/lib/components/Alert.js +2 -2
  3. package/lib/components/Alert.js.map +1 -1
  4. package/lib/components/AppHeader/AppHeaderMenu/AppHeaderMenu.js +1 -1
  5. package/lib/components/AppHeader/AppHeaderMenu/AppHeaderMenu.js.map +1 -1
  6. package/lib/components/AppHeader/SelectCluster/SelectCluster.js +1 -1
  7. package/lib/components/AppHeader/SelectCluster/SelectCluster.js.map +1 -1
  8. package/lib/components/AppSidebar/AppSidebar.js +1 -1
  9. package/lib/components/AppSidebar/AppSidebar.js.map +1 -1
  10. package/lib/components/AppSidebar/AppSidebarFavoriteButton/AppSidebarFavoriteButton.js +1 -1
  11. package/lib/components/AppSidebar/AppSidebarFavoriteButton/AppSidebarFavoriteButton.js.map +1 -1
  12. package/lib/components/AppSidebar/AppSidebarItem/AppSidebarItem.d.ts +1 -3
  13. package/lib/components/AppSidebar/AppSidebarItem/AppSidebarItem.js +11 -10
  14. package/lib/components/AppSidebar/AppSidebarItem/AppSidebarItem.js.map +1 -1
  15. package/lib/components/AutocompleteField.d.ts +1 -3
  16. package/lib/components/AutocompleteField.js +4 -5
  17. package/lib/components/AutocompleteField.js.map +1 -1
  18. package/lib/components/AutocompleteField.module.css +183 -0
  19. package/lib/components/Badge.d.ts +1 -2
  20. package/lib/components/Badge.js +3 -7
  21. package/lib/components/Badge.js.map +1 -1
  22. package/lib/components/Badge.module.scss +18 -29
  23. package/lib/components/Button.d.ts +10 -33
  24. package/lib/components/Button.js +31 -51
  25. package/lib/components/Button.js.map +1 -1
  26. package/lib/components/Button.module.css +188 -0
  27. package/lib/components/ButtonGroup.d.ts +10 -0
  28. package/lib/components/ButtonGroup.js +6 -0
  29. package/lib/components/ButtonGroup.js.map +1 -0
  30. package/lib/components/ButtonGroup.module.css +29 -0
  31. package/lib/components/Calendar/components/CalendarTime.js +1 -1
  32. package/lib/components/Calendar/components/CalendarTime.js.map +1 -1
  33. package/lib/components/Checkbox.js +1 -1
  34. package/lib/components/Checkbox.js.map +1 -1
  35. package/lib/components/Checkbox.module.css +97 -0
  36. package/lib/components/Dialog.js +1 -1
  37. package/lib/components/Dialog.js.map +1 -1
  38. package/lib/components/Error.d.ts +2 -2
  39. package/lib/components/Help.d.ts +2 -2
  40. package/lib/components/Help.js +3 -2
  41. package/lib/components/Help.js.map +1 -1
  42. package/lib/components/IconButton.d.ts +8 -8
  43. package/lib/components/IconButton.js +24 -13
  44. package/lib/components/IconButton.js.map +1 -1
  45. package/lib/components/IconButton.module.css +145 -0
  46. package/lib/components/InteractiveList.d.ts +1 -1
  47. package/lib/components/InteractiveList.js +5 -5
  48. package/lib/components/InteractiveList.js.map +1 -1
  49. package/lib/components/InteractiveList.module.css +59 -0
  50. package/lib/components/Modal.d.ts +19 -2
  51. package/lib/components/Modal.js +56 -25
  52. package/lib/components/Modal.js.map +1 -1
  53. package/lib/components/Modal.module.css +222 -0
  54. package/lib/components/NumberField.d.ts +2 -3
  55. package/lib/components/NumberField.js +7 -10
  56. package/lib/components/NumberField.js.map +1 -1
  57. package/lib/components/NumberField.module.css +73 -0
  58. package/lib/components/Pagination.js +7 -7
  59. package/lib/components/Pagination.js.map +1 -1
  60. package/lib/components/PasswordField.d.ts +1 -2
  61. package/lib/components/PasswordField.js +2 -2
  62. package/lib/components/PasswordField.js.map +1 -1
  63. package/lib/components/PasswordField.module.scss +3 -0
  64. package/lib/components/Select/CheckableSelectField.d.ts +0 -1
  65. package/lib/components/Select/CheckableSelectField.js +12 -6
  66. package/lib/components/Select/CheckableSelectField.js.map +1 -1
  67. package/lib/components/Select/CheckableSelectField.module.css +112 -0
  68. package/lib/components/Select/Common.js +3 -3
  69. package/lib/components/Select/Common.js.map +1 -1
  70. package/lib/components/Select/Common.module.css +35 -0
  71. package/lib/components/Select/MultiSelectField.d.ts +1 -1
  72. package/lib/components/Select/MultiSelectField.js +3 -5
  73. package/lib/components/Select/MultiSelectField.js.map +1 -1
  74. package/lib/components/Select/MultiSelectField.module.css +60 -0
  75. package/lib/components/Select/SelectField.d.ts +2 -3
  76. package/lib/components/Select/SelectField.js +4 -6
  77. package/lib/components/Select/SelectField.js.map +1 -1
  78. package/lib/components/Select/SelectField.module.css +202 -0
  79. package/lib/components/SimpleTable.d.ts +25 -6
  80. package/lib/components/SimpleTable.js +27 -12
  81. package/lib/components/SimpleTable.js.map +1 -1
  82. package/lib/components/SimpleTable.module.css +80 -0
  83. package/lib/components/Table/Cell.js +6 -7
  84. package/lib/components/Table/Cell.js.map +1 -1
  85. package/lib/components/Tabs/Tab.js +1 -1
  86. package/lib/components/Tabs/Tab.js.map +1 -1
  87. package/lib/components/Tabs/Tab.module.css +58 -0
  88. package/lib/components/Tabs/TabList.js +1 -1
  89. package/lib/components/Tabs/TabList.js.map +1 -1
  90. package/lib/components/Tabs/TabList.module.css +9 -0
  91. package/lib/components/Tabs/TabPanel.js +1 -1
  92. package/lib/components/Tabs/TabPanel.js.map +1 -1
  93. package/lib/components/Tabs/TabPanel.module.css +7 -0
  94. package/lib/components/TextArea.js +1 -1
  95. package/lib/components/TextArea.js.map +1 -1
  96. package/lib/components/TextArea.module.css +109 -0
  97. package/lib/components/TextField.d.ts +2 -2
  98. package/lib/components/TextField.js +2 -2
  99. package/lib/components/TextField.js.map +1 -1
  100. package/lib/components/TextField.module.css +195 -0
  101. package/lib/components/Toast/Toast.d.ts +12 -0
  102. package/lib/components/Toast/Toast.js +26 -0
  103. package/lib/components/Toast/Toast.js.map +1 -0
  104. package/lib/components/Toast/Toast.module.css +98 -0
  105. package/lib/components/Toast/index.d.ts +4 -0
  106. package/lib/components/Toast/index.js +5 -0
  107. package/lib/components/Toast/index.js.map +1 -0
  108. package/lib/components/Toggle.js +2 -3
  109. package/lib/components/Toggle.js.map +1 -1
  110. package/lib/components/Toggle.module.css +120 -0
  111. package/lib/components/Tooltip.d.ts +35 -22
  112. package/lib/components/Tooltip.js +22 -47
  113. package/lib/components/Tooltip.js.map +1 -1
  114. package/lib/components/Tooltip.module.css +128 -0
  115. package/lib/components/TruncatedText.d.ts +2 -2
  116. package/lib/components/TruncatedText.js +3 -3
  117. package/lib/components/TruncatedText.js.map +1 -1
  118. package/lib/index.d.ts +1 -0
  119. package/lib/index.js.map +1 -1
  120. package/lib/old/AutocompleteField.d.ts +49 -0
  121. package/lib/old/AutocompleteField.js +166 -0
  122. package/lib/old/AutocompleteField.js.map +1 -0
  123. package/lib/old/AutocompleteFieldFormik.d.ts +9 -0
  124. package/lib/old/AutocompleteFieldFormik.js +19 -0
  125. package/lib/old/AutocompleteFieldFormik.js.map +1 -0
  126. package/lib/old/Button.d.ts +75 -0
  127. package/lib/old/Button.js +37 -0
  128. package/lib/old/Button.js.map +1 -0
  129. package/lib/{components/Button.module.scss → old/ButtonLegacy.module.scss} +2 -8
  130. package/lib/old/Checkbox.d.ts +35 -0
  131. package/lib/old/Checkbox.js +38 -0
  132. package/lib/old/Checkbox.js.map +1 -0
  133. package/lib/old/CheckboxFormik.d.ts +10 -0
  134. package/lib/old/CheckboxFormik.js +17 -0
  135. package/lib/old/CheckboxFormik.js.map +1 -0
  136. package/lib/old/IconButton.d.ts +49 -0
  137. package/lib/old/IconButton.js +25 -0
  138. package/lib/old/IconButton.js.map +1 -0
  139. package/lib/old/InteractiveList.d.ts +34 -0
  140. package/lib/old/InteractiveList.js +43 -0
  141. package/lib/old/InteractiveList.js.map +1 -0
  142. package/lib/old/InteractiveListFormik.d.ts +10 -0
  143. package/lib/old/InteractiveListFormik.js +75 -0
  144. package/lib/old/InteractiveListFormik.js.map +1 -0
  145. package/lib/old/Modal.d.ts +26 -0
  146. package/lib/old/Modal.js +41 -0
  147. package/lib/old/Modal.js.map +1 -0
  148. package/lib/old/NumberField.d.ts +33 -0
  149. package/lib/old/NumberField.js +141 -0
  150. package/lib/old/NumberField.js.map +1 -0
  151. package/lib/old/NumberFieldFormik.d.ts +10 -0
  152. package/lib/old/NumberFieldFormik.js +52 -0
  153. package/lib/old/NumberFieldFormik.js.map +1 -0
  154. package/lib/old/PasswordField.d.ts +29 -0
  155. package/lib/old/PasswordField.js +26 -0
  156. package/lib/old/PasswordField.js.map +1 -0
  157. package/lib/old/PasswordFieldFormik.d.ts +10 -0
  158. package/lib/old/PasswordFieldFormik.js +17 -0
  159. package/lib/old/PasswordFieldFormik.js.map +1 -0
  160. package/lib/old/PasswordFieldLegacy.module.scss +26 -0
  161. package/lib/old/Select/CheckableSelectField.d.ts +40 -0
  162. package/lib/old/Select/CheckableSelectField.js +77 -0
  163. package/lib/old/Select/CheckableSelectField.js.map +1 -0
  164. package/lib/old/Select/CheckableSelectFieldFormik.d.ts +10 -0
  165. package/lib/old/Select/CheckableSelectFieldFormik.js +19 -0
  166. package/lib/old/Select/CheckableSelectFieldFormik.js.map +1 -0
  167. package/lib/old/Select/Common.d.ts +5 -0
  168. package/lib/old/Select/Common.js +54 -0
  169. package/lib/old/Select/Common.js.map +1 -0
  170. package/lib/old/Select/MultiSelectField.d.ts +28 -0
  171. package/lib/old/Select/MultiSelectField.js +113 -0
  172. package/lib/old/Select/MultiSelectField.js.map +1 -0
  173. package/lib/old/Select/MultiSelectFieldFormik.d.ts +11 -0
  174. package/lib/old/Select/MultiSelectFieldFormik.js +19 -0
  175. package/lib/old/Select/MultiSelectFieldFormik.js.map +1 -0
  176. package/lib/old/Select/SelectField.d.ts +43 -0
  177. package/lib/old/Select/SelectField.js +103 -0
  178. package/lib/old/Select/SelectField.js.map +1 -0
  179. package/lib/old/Select/SelectFieldFormik.d.ts +10 -0
  180. package/lib/old/Select/SelectFieldFormik.js +19 -0
  181. package/lib/old/Select/SelectFieldFormik.js.map +1 -0
  182. package/lib/old/Select/helpers.d.ts +12 -0
  183. package/lib/old/Select/helpers.js +29 -0
  184. package/lib/old/Select/helpers.js.map +1 -0
  185. package/lib/old/SimpleTable.d.ts +11 -0
  186. package/lib/old/SimpleTable.js +26 -0
  187. package/lib/old/SimpleTable.js.map +1 -0
  188. package/lib/old/Tabs.d.ts +53 -0
  189. package/lib/old/Tabs.js +92 -0
  190. package/lib/old/Tabs.js.map +1 -0
  191. package/lib/{components/Tabs/Tab.module.scss → old/TabsLegacy.module.scss} +14 -6
  192. package/lib/old/TextArea.d.ts +19 -0
  193. package/lib/old/TextArea.js +25 -0
  194. package/lib/old/TextArea.js.map +1 -0
  195. package/lib/old/TextAreaFormik.d.ts +9 -0
  196. package/lib/old/TextAreaFormik.js +11 -0
  197. package/lib/old/TextAreaFormik.js.map +1 -0
  198. package/lib/old/TextField.d.ts +50 -0
  199. package/lib/old/TextField.js +65 -0
  200. package/lib/old/TextField.js.map +1 -0
  201. package/lib/old/TextFieldFormik.d.ts +11 -0
  202. package/lib/old/TextFieldFormik.js +23 -0
  203. package/lib/old/TextFieldFormik.js.map +1 -0
  204. package/lib/{components/TextField.module.scss → old/TextFieldLegacy.module.scss} +0 -1
  205. package/lib/{components → old}/Toast.js +2 -2
  206. package/lib/old/Toast.js.map +1 -0
  207. package/lib/old/Toggle.d.ts +21 -0
  208. package/lib/old/Toggle.js +22 -0
  209. package/lib/old/Toggle.js.map +1 -0
  210. package/lib/old/ToggleFormik.d.ts +9 -0
  211. package/lib/old/ToggleFormik.js +12 -0
  212. package/lib/old/ToggleFormik.js.map +1 -0
  213. package/lib/{components/Toggle.module.scss → old/ToggleLegacy.module.scss} +0 -2
  214. package/lib/old/Tooltip.d.ts +34 -0
  215. package/lib/old/Tooltip.js +57 -0
  216. package/lib/old/Tooltip.js.map +1 -0
  217. package/lib/old/Tooltip.module.scss +45 -0
  218. package/lib/old/index.d.ts +58 -0
  219. package/lib/old/index.js +34 -0
  220. package/lib/old/index.js.map +1 -0
  221. package/package.json +5 -11
  222. package/styles/constants/_colors.scss +18 -0
  223. package/styles/variables.css +162 -0
  224. package/lib/components/Tabs/TabList.module.scss +0 -3
  225. package/lib/components/Tabs/TabPanel.module.scss +0 -7
  226. package/lib/components/Toast.js.map +0 -1
  227. /package/lib/{components/AutocompleteField.module.scss → old/AutocompleteFieldLegacy.module.scss} +0 -0
  228. /package/lib/{components/Checkbox.module.scss → old/CheckboxLegacy.module.scss} +0 -0
  229. /package/lib/{components/IconButton.module.scss → old/IconButtonLegacy.module.scss} +0 -0
  230. /package/lib/{components/InteractiveList.module.scss → old/InteractiveListLegacy.module.scss} +0 -0
  231. /package/lib/{components/Modal.module.scss → old/ModalLegacy.module.scss} +0 -0
  232. /package/lib/{components/NumberField.module.scss → old/NumberFieldLegacy.module.scss} +0 -0
  233. /package/lib/{components/Select/CheckableSelectField.module.scss → old/Select/CheckableSelectFieldLegacy.module.scss} +0 -0
  234. /package/lib/{components/Select/Common.module.scss → old/Select/CommonLegacy.module.scss} +0 -0
  235. /package/lib/{components/Select/MultiSelectField.module.scss → old/Select/MultiSelectFieldLegacy.module.scss} +0 -0
  236. /package/lib/{components/Select/SelectField.module.scss → old/Select/SelectFieldLegacy.module.scss} +0 -0
  237. /package/lib/{components/SimpleTable.module.scss → old/SimpleTableLegacy.module.scss} +0 -0
  238. /package/lib/{components/TextArea.module.scss → old/TextAreaLegacy.module.scss} +0 -0
  239. /package/lib/{components → old}/Toast.d.ts +0 -0
  240. /package/lib/{components/Toast.module.scss → old/ToastLegacy.module.scss} +0 -0
@@ -0,0 +1,28 @@
1
+ import { FocusEvent, InputHTMLAttributes, ReactElement } from 'react';
2
+ import { Props as ReactSelectProps, Options, SelectComponentsConfig, GroupBase } from 'react-select';
3
+ import { DataTestProp } from '../../helpers/types';
4
+ import { SelectFieldOption } from './helpers';
5
+ import { RenderMenuFooterFunction } from './Common';
6
+ import { FieldHeaderProps } from '../../components/FieldHeader';
7
+ export type MultiSelectFieldCoreStaticProps<V> = {
8
+ name: string;
9
+ onBlur?: (e: FocusEvent<HTMLElement>) => void;
10
+ error?: string;
11
+ value: V[];
12
+ onChange: (newValue: V[]) => void;
13
+ components?: Partial<SelectComponentsConfig<SelectFieldOption<V>, true, GroupBase<SelectFieldOption<V>>>>;
14
+ };
15
+ export type MultiSelectFieldExtraProps<V> = {
16
+ options: ReadonlyArray<GroupBase<SelectFieldOption<V>>> | Options<SelectFieldOption<V>>;
17
+ isCreatable?: V extends string ? boolean : false;
18
+ className?: string;
19
+ placeholder?: string;
20
+ errorClassName?: string;
21
+ menuPortalTarget?: 'body' | 'self' | HTMLElement | null;
22
+ formatGroupLabel?: ReactSelectProps<SelectFieldOption<V>, true>['formatGroupLabel'];
23
+ formatOptionLabel?: ReactSelectProps<SelectFieldOption<V>, true>['formatOptionLabel'];
24
+ renderMenuFooter?: RenderMenuFooterFunction;
25
+ styles?: ReactSelectProps<SelectFieldOption<V>, true>['styles'];
26
+ } & DataTestProp & Pick<InputHTMLAttributes<HTMLElement>, 'autoFocus' | 'disabled' | 'required' | 'placeholder' | 'aria-required'> & Pick<ReactSelectProps, 'isSearchable' | 'menuIsOpen' | 'menuPlacement' | 'noOptionsMessage' | 'inputValue' | 'closeMenuOnSelect' | 'hideSelectedOptions' | 'isClearable' | 'onInputChange'> & Omit<FieldHeaderProps, 'id'>;
27
+ export type MultiSelectProps<V> = MultiSelectFieldCoreStaticProps<V> & MultiSelectFieldExtraProps<V>;
28
+ export declare const MultiSelectField: <V extends string | number = number>(props: MultiSelectProps<V>) => ReactElement<MultiSelectProps<V>>;
@@ -0,0 +1,113 @@
1
+ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
2
+ import ReactSelect, { components as rsComponents, } from 'react-select';
3
+ import ReactSelectCreatable from 'react-select/creatable';
4
+ import { useUID } from 'react-uid';
5
+ import { X } from 'react-feather';
6
+ import useIsomorphicLayoutEffect from 'react-use/lib/useIsomorphicLayoutEffect';
7
+ import cn from 'classnames';
8
+ import { Error, errorId } from '../../components/Error';
9
+ import { Icon } from '../../components/Icon';
10
+ import { getMenuContainer, getOptionsMap } from './helpers';
11
+ import { components } from './Common';
12
+ import { FieldHeader } from '../../components/FieldHeader';
13
+ import { useCloseOnResize } from '../../hooks/useCloseOnResize';
14
+ import styles from './SelectFieldLegacy.module.scss';
15
+ import multiStyles from './MultiSelectFieldLegacy.module.scss';
16
+ // Self-styled version of the MultiValue/Label
17
+ const MultiValueLabel = ({ children }) => React.createElement("div", { className: multiStyles.multiValueLabel }, children);
18
+ // Self-styled version of the MultiValue/Remove button
19
+ const MultiValueRemove = (props) => {
20
+ // We have to pass down the onClick
21
+ const onClick = props.innerProps.onClick;
22
+ const handleMouseDown = (event) => {
23
+ // prevent opening the dropdown
24
+ event.preventDefault();
25
+ event.stopPropagation();
26
+ };
27
+ const handleClick = (event) => {
28
+ if (event.button === 0 && onClick) {
29
+ onClick(event);
30
+ }
31
+ };
32
+ return (React.createElement("div", { className: cn(multiStyles.multiValueRemove, { [multiStyles.disabled]: true }), onClick: handleClick, onMouseDown: handleMouseDown, role: "button", tabIndex: -1, "aria-label": "Remove" },
33
+ React.createElement(Icon, { icon: X, size: "small", ariaHidden: true })));
34
+ };
35
+ // We simply inject `.multiValueIsFocused`.
36
+ const MultiValue = (props) => (React.createElement(rsComponents.MultiValue, { ...props, className: cn(multiStyles.multiValue, { [multiStyles.multiValueIsFocused]: props.isFocused, [multiStyles.disabled]: props.isDisabled }) }));
37
+ export const MultiSelectField = (props) => {
38
+ const { 'data-test': dataTest = 'multi-select-field', className, disabled, error, errorClassName, helperText, isCreatable, isSearchable = true, label, labelClassName, showAriaLabel = false, menuIsOpen, menuPortalTarget = 'body', menuPlacement = 'auto', name, onChange, options, placeholder, value, formatGroupLabel, formatOptionLabel, renderMenuFooter, components: customComponents, ...rest } = props;
39
+ const id = useUID();
40
+ useIsomorphicLayoutEffect(() => {
41
+ const menuContainer = getMenuContainer(menuPortalTarget);
42
+ if (menuContainer && !menuContainer.className.includes(styles.menuContainer)) {
43
+ menuContainer.className = `${menuContainer.className} ${styles.menuContainer}`;
44
+ }
45
+ }, [menuPortalTarget]);
46
+ const optionsMap = useMemo(() => getOptionsMap(options), [options]);
47
+ const selectedOptions = useMemo(() => value.map((val) => { var _a; return (_a = optionsMap[val]) !== null && _a !== void 0 ? _a : { value: val, label: val }; }), [optionsMap, value]);
48
+ const onChangeWrapped = useCallback((selectedOptions) => {
49
+ onChange(selectedOptions.map(({ value }) => value));
50
+ }, [onChange]);
51
+ /** Recipe: https://react-select.com/advanced#controlled-props */
52
+ const selectRef = useRef(null);
53
+ useEffect(() => {
54
+ if (selectRef.current) {
55
+ if (menuIsOpen) {
56
+ selectRef.current.onMenuOpen();
57
+ }
58
+ else {
59
+ selectRef.current.onMenuClose();
60
+ }
61
+ }
62
+ }, [menuIsOpen]);
63
+ useCloseOnResize(selectRef);
64
+ const selectProps = {
65
+ inputId: id,
66
+ className: 'hz-select-field',
67
+ classNamePrefix: 'hz-select-field',
68
+ 'aria-label': showAriaLabel ? label : undefined,
69
+ // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-invalid_attribute
70
+ 'aria-errormessage': error && errorId(id),
71
+ 'aria-invalid': !!error,
72
+ isDisabled: disabled,
73
+ isSearchable: isSearchable,
74
+ isClearable: true,
75
+ isMulti: true,
76
+ name: name,
77
+ value: selectedOptions,
78
+ options,
79
+ onChange: onChangeWrapped,
80
+ placeholder,
81
+ menuIsOpen,
82
+ menuPlacement,
83
+ menuPortalTarget: getMenuContainer(menuPortalTarget),
84
+ components: {
85
+ MultiValueLabel,
86
+ MultiValueRemove,
87
+ MultiValue,
88
+ ...components,
89
+ ...customComponents,
90
+ },
91
+ formatGroupLabel,
92
+ formatOptionLabel,
93
+ // @ts-ignore
94
+ renderMenuFooter,
95
+ ...rest,
96
+ };
97
+ return (React.createElement("div", { "data-test": dataTest, className: cn(styles.container,
98
+ // Menu container is either this select itself or any other element
99
+ // We can always add this class to the select itself because even if the menu container is any parent it won't break it
100
+ // However, if it is the select itself, it will properly add necessary specificity level to the menu styles.
101
+ styles.menuContainer, {
102
+ [styles.disabled]: disabled,
103
+ [styles.hasError]: error,
104
+ [styles.empty]: !value,
105
+ [styles.withError]: 'error' in props,
106
+ [styles.small]: rest.size === 'small',
107
+ [multiStyles.small]: rest.size === 'small',
108
+ }, multiStyles.multiContainer, className) },
109
+ React.createElement(FieldHeader, { id: id, label: label, size: rest.size, helperText: helperText, showAriaLabel: showAriaLabel, labelClassName: labelClassName }),
110
+ React.createElement("div", { className: styles.selectBlock }, isCreatable ? (React.createElement(ReactSelectCreatable, { ref: selectRef, ...selectProps })) : (React.createElement(ReactSelect, { ref: selectRef, ...selectProps }))),
111
+ React.createElement(Error, { "data-test": `${dataTest}-error`, truncated: true, error: error, className: cn(styles.errorContainer, errorClassName), inputId: id })));
112
+ };
113
+ //# sourceMappingURL=MultiSelectField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelectField.js","sourceRoot":"","sources":["../../../src/old/Select/MultiSelectField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ReactElement } from 'react';
2
+ import { DataTestProp } from '../../helpers/types';
3
+ import { MultiSelectFieldExtraProps } from './MultiSelectField';
4
+ import { FieldValidatorGeneric } from '../../utils/formik';
5
+ import { ExtractKeysOfValueType } from '../../utils/types';
6
+ export type MultiSelectFieldFormikProps<V extends object, OV = string> = MultiSelectFieldExtraProps<OV> & {
7
+ name: ExtractKeysOfValueType<V, OV[]>;
8
+ validate?: FieldValidatorGeneric<OV[]>;
9
+ onChange?: (value: OV[]) => void;
10
+ } & DataTestProp;
11
+ export declare const MultiSelectFieldFormik: <V extends object, OV extends string | number = string>({ name, validate, onChange, ...props }: MultiSelectFieldFormikProps<V, OV>) => ReactElement;
@@ -0,0 +1,19 @@
1
+ import React, { useCallback, useMemo } from 'react';
2
+ import { useField } from 'formik';
3
+ import { MultiSelectField } from './MultiSelectField';
4
+ import { formikTouchAndUpdate, getFieldError } from '../../utils/formik';
5
+ export const MultiSelectFieldFormik = ({ name, validate, onChange, ...props }) => {
6
+ const [{ value, onBlur }, meta, { setValue, setTouched }] = useField({
7
+ name,
8
+ validate,
9
+ });
10
+ const setFormikValue = useMemo(() => formikTouchAndUpdate(setValue, setTouched), [setValue, setTouched]);
11
+ const handleChange = useCallback((newValue) => {
12
+ if (onChange) {
13
+ onChange(newValue);
14
+ }
15
+ setFormikValue(newValue);
16
+ }, [setFormikValue, onChange]);
17
+ return React.createElement(MultiSelectField, { ...props, name: name, value: value, onChange: handleChange, onBlur: onBlur, error: getFieldError(meta) });
18
+ };
19
+ //# sourceMappingURL=MultiSelectFieldFormik.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelectFieldFormik.js","sourceRoot":"","sources":["../../../src/old/Select/MultiSelectFieldFormik.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAgB,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAGjC,OAAO,EAAE,gBAAgB,EAA8B,MAAM,oBAAoB,CAAA;AACjF,OAAO,EAAyB,oBAAoB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAS/F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAwD,EAC5F,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EAC2B,EAAgB,EAAE;IACrD,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAO;QACzE,IAAI;QACJ,QAAQ;KACT,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAO,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IAC9G,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,QAAc,EAAE,EAAE;QACjB,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACpB,CAAC;QAED,cAAc,CAAC,QAAQ,CAAC,CAAA;IAC1B,CAAC,EACD,CAAC,cAAc,EAAE,QAAQ,CAAC,CAC3B,CAAA;IAED,OAAO,oBAAC,gBAAgB,OAAS,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,GAAI,CAAA;AAC1I,CAAC,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { FocusEvent, InputHTMLAttributes, ReactElement } from 'react';
2
+ import { Props as ReactSelectProps, Options, GroupBase } from 'react-select';
3
+ import { DataTestProp } from '../../helpers/types';
4
+ import { FieldHeaderProps } from '../../components/FieldHeader';
5
+ import { IconProps } from '../../components/Icon';
6
+ import { SelectFieldOption } from './helpers';
7
+ import { RenderMenuFooterFunction } from './Common';
8
+ export type SelectFieldCoreStaticProps<V> = {
9
+ name: string;
10
+ onBlur?: (e: FocusEvent<HTMLElement>) => void;
11
+ error?: string;
12
+ value: V | null;
13
+ onChange: (value: V | null) => void;
14
+ };
15
+ export type SelectFieldIconLeftProps = {
16
+ iconLeft: IconProps['icon'];
17
+ iconLeftAriaLabel: string;
18
+ iconLeftClassName?: string;
19
+ iconLeftContainerClassName?: string;
20
+ } | {
21
+ iconLeft?: never;
22
+ iconLeftAriaLabel?: never;
23
+ iconLeftClassName?: never;
24
+ iconLeftContainerClassName?: never;
25
+ };
26
+ export type SelectFieldSize = 'small' | 'medium';
27
+ export type SelectFieldExtraProps<V> = {
28
+ options: ReadonlyArray<GroupBase<SelectFieldOption<V>>> | Options<SelectFieldOption<V>>;
29
+ size?: SelectFieldSize;
30
+ isCreatable?: V extends string ? boolean : false;
31
+ className?: string;
32
+ placeholder?: string;
33
+ errorClassName?: string;
34
+ menuPortalTarget?: 'body' | 'self' | HTMLElement | null;
35
+ formatGroupLabel?: ReactSelectProps<SelectFieldOption<V>>['formatGroupLabel'];
36
+ formatOptionLabel?: ReactSelectProps<SelectFieldOption<V>>['formatOptionLabel'];
37
+ renderMenuFooter?: RenderMenuFooterFunction;
38
+ styles?: ReactSelectProps<SelectFieldOption<V>>['styles'];
39
+ classNames?: ReactSelectProps<SelectFieldOption<V>>['classNames'];
40
+ singleValueTooltipVisible?: boolean;
41
+ } & DataTestProp & Pick<InputHTMLAttributes<HTMLElement>, 'autoFocus' | 'disabled' | 'required' | 'placeholder' | 'aria-required'> & Pick<ReactSelectProps, 'isSearchable' | 'isClearable' | 'menuIsOpen' | 'menuPlacement' | 'closeMenuOnScroll' | 'noOptionsMessage' | 'inputValue' | 'menuShouldScrollIntoView' | 'menuShouldBlockScroll'> & SelectFieldIconLeftProps & Omit<FieldHeaderProps, 'id'>;
42
+ export type SelectFieldProps<V> = SelectFieldCoreStaticProps<V> & SelectFieldExtraProps<V>;
43
+ export declare const SelectField: <V extends string | number = string>(props: SelectFieldProps<V>) => ReactElement<SelectFieldProps<V>>;
@@ -0,0 +1,103 @@
1
+ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
2
+ import ReactSelect from 'react-select';
3
+ import ReactSelectCreatable from 'react-select/creatable';
4
+ import { useUID } from 'react-uid';
5
+ import useIsomorphicLayoutEffect from 'react-use/lib/useIsomorphicLayoutEffect';
6
+ import cn from 'classnames';
7
+ import { Error, errorId } from '../../components/Error';
8
+ import { FieldHeader } from '../../components/FieldHeader';
9
+ import { Icon } from '../../components/Icon';
10
+ import { getMenuContainer, getOptionsMap } from './helpers';
11
+ import { components } from './Common';
12
+ import { components as rsComponents } from 'react-select';
13
+ import { useCloseOnResize } from '../../hooks/useCloseOnResize';
14
+ import styles from './SelectFieldLegacy.module.scss';
15
+ export const SelectField = (props) => {
16
+ const { 'data-test': dataTest = 'select-field', className, disabled, error, errorClassName, helperText, isClearable = false, isCreatable, isSearchable = true, label, labelClassName, showAriaLabel = false, size = 'medium', menuIsOpen, menuPortalTarget = 'body', menuPlacement = 'auto', name, onChange, options, placeholder, required, value, formatGroupLabel, formatOptionLabel, renderMenuFooter, singleValueTooltipVisible = true, menuShouldScrollIntoView = false, ...iconAndRest } = props;
17
+ const id = useUID();
18
+ const { iconLeft, iconLeftAriaLabel, iconLeftClassName, iconLeftContainerClassName, ...rest } = iconAndRest;
19
+ useIsomorphicLayoutEffect(() => {
20
+ const menuContainer = getMenuContainer(menuPortalTarget);
21
+ if (menuContainer && !menuContainer.className.includes(styles.menuContainer)) {
22
+ menuContainer.className = `${menuContainer.className} ${styles.menuContainer}`;
23
+ }
24
+ }, [menuPortalTarget]);
25
+ const optionsMap = useMemo(() => getOptionsMap(options), [options]);
26
+ /**
27
+ * Three (3) cases here:
28
+ * 1. No option is selected
29
+ * 2. An existing option is selected
30
+ * 3. A created option is selected
31
+ */
32
+ const selectedOption = useMemo(() => { var _a; return (value === null ? null : ((_a = optionsMap[value]) !== null && _a !== void 0 ? _a : { value: value, label: value })); }, [optionsMap, value]);
33
+ const onChangeWrapped = useCallback((option) => {
34
+ var _a;
35
+ onChange((_a = option === null || option === void 0 ? void 0 : option.value) !== null && _a !== void 0 ? _a : null);
36
+ }, [onChange]);
37
+ /** Recipe: https://react-select.com/advanced#controlled-props */
38
+ const selectRef = useRef(null);
39
+ useEffect(() => {
40
+ if (selectRef.current) {
41
+ if (menuIsOpen) {
42
+ selectRef.current.onMenuOpen();
43
+ }
44
+ else {
45
+ selectRef.current.onMenuClose();
46
+ }
47
+ }
48
+ }, [menuIsOpen]);
49
+ const innerComponents = useMemo(() => singleValueTooltipVisible
50
+ ? components
51
+ : {
52
+ ...components,
53
+ SingleValue: rsComponents.SingleValue,
54
+ }, [singleValueTooltipVisible]);
55
+ useCloseOnResize(selectRef);
56
+ const selectProps = {
57
+ inputId: id,
58
+ className: 'hz-select-field',
59
+ classNamePrefix: 'hz-select-field',
60
+ 'aria-label': showAriaLabel ? label : 'select',
61
+ // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-invalid_attribute
62
+ 'aria-errormessage': error && errorId(id),
63
+ 'aria-invalid': !!error,
64
+ 'aria-required': required,
65
+ isClearable,
66
+ isSearchable,
67
+ isDisabled: disabled,
68
+ name: name,
69
+ value: selectedOption,
70
+ options,
71
+ onChange: onChangeWrapped,
72
+ placeholder,
73
+ menuIsOpen,
74
+ menuPlacement,
75
+ menuPortalTarget: getMenuContainer(menuPortalTarget),
76
+ components: innerComponents,
77
+ formatGroupLabel,
78
+ formatOptionLabel,
79
+ // @ts-ignore
80
+ renderMenuFooter,
81
+ menuShouldScrollIntoView,
82
+ classNames: { option: () => size },
83
+ ...rest,
84
+ };
85
+ return (React.createElement("div", { "data-test": dataTest, className: cn(styles.container,
86
+ // Menu container is either this select itself or any other element
87
+ // We can always add this class to the select itself because even if the menu container is any parent it won't break it
88
+ // However, if it is the select itself, it will properly add necessary specificity level to the menu styles.
89
+ styles.menuContainer, {
90
+ [styles.disabled]: disabled,
91
+ [styles.hasError]: error,
92
+ [styles.empty]: !value,
93
+ [styles.hasIcon]: !!iconLeft,
94
+ [styles.small]: size === 'small',
95
+ [styles.withError]: 'error' in props,
96
+ }, className) },
97
+ React.createElement(FieldHeader, { label: label, id: id, size: size, "data-test": dataTest, helperText: helperText, showAriaLabel: showAriaLabel, labelClassName: labelClassName }),
98
+ React.createElement("div", { className: styles.selectBlock },
99
+ iconLeft && iconLeftAriaLabel && (React.createElement(Icon, { containerClassName: cn(styles.iconLeftContainer, iconLeftContainerClassName), icon: iconLeft, size: size, ariaLabel: iconLeftAriaLabel, "data-test": `${dataTest}-icon-left`, className: cn(styles.iconLeft, iconLeftClassName) })),
100
+ isCreatable ? (React.createElement(ReactSelectCreatable, { ref: selectRef, ...selectProps })) : (React.createElement(ReactSelect, { ref: selectRef, ...selectProps }))),
101
+ React.createElement(Error, { "data-test": `${dataTest}-error`, truncated: true, error: error, className: cn(styles.errorContainer, errorClassName), inputId: id })));
102
+ };
103
+ //# sourceMappingURL=SelectField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectField.js","sourceRoot":"","sources":["../../../src/old/Select/SelectField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ReactElement } from 'react';
2
+ import { SelectFieldExtraProps } from './SelectField';
3
+ import { FieldValidatorGeneric } from '../../utils/formik';
4
+ import { ExtractKeysOfValueType } from '../../utils/types';
5
+ export type SelectFieldFormikProps<V extends object, OV = string> = SelectFieldExtraProps<OV> & {
6
+ name: ExtractKeysOfValueType<V, OV | null>;
7
+ validate?: FieldValidatorGeneric<OV | null>;
8
+ onChange?: (value: OV | null) => void;
9
+ };
10
+ export declare const SelectFieldFormik: <V extends object, OV extends string | number = string>({ name, validate, onChange, ...props }: SelectFieldFormikProps<V, OV>) => ReactElement;
@@ -0,0 +1,19 @@
1
+ import React, { useCallback, useMemo } from 'react';
2
+ import { useField } from 'formik';
3
+ import { SelectField } from './SelectField';
4
+ import { formikTouchAndUpdate, getFieldError } from '../../utils/formik';
5
+ export const SelectFieldFormik = ({ name, validate, onChange, ...props }) => {
6
+ const [field, meta, { setValue, setTouched }] = useField({
7
+ name,
8
+ validate,
9
+ });
10
+ const setFormikValue = useMemo(() => formikTouchAndUpdate(setValue, setTouched), [setValue, setTouched]);
11
+ const handleChange = useCallback((value) => {
12
+ if (onChange) {
13
+ onChange(value);
14
+ }
15
+ setFormikValue(value);
16
+ }, [setFormikValue, onChange]);
17
+ return (React.createElement(SelectField, { ...props, name: name, value: field.value, onChange: handleChange, onBlur: field.onBlur, error: getFieldError(meta) }));
18
+ };
19
+ //# sourceMappingURL=SelectFieldFormik.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectFieldFormik.js","sourceRoot":"","sources":["../../../src/old/Select/SelectFieldFormik.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAgB,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,WAAW,EAAyB,MAAM,eAAe,CAAA;AAClE,OAAO,EAAyB,oBAAoB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAS/F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAwD,EACvF,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACsB,EAAgB,EAAE;IAChD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAY;QAClE,IAAI;QACJ,QAAQ;KACT,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAY,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IACnH,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,KAAgB,EAAE,EAAE;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC;QAED,cAAc,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,EACD,CAAC,cAAc,EAAE,QAAQ,CAAC,CAC3B,CAAA;IAED,OAAO,CACL,oBAAC,WAAW,OAAS,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,GAAI,CACzI,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { ReactNode } from 'react';
2
+ import { Options, GroupBase } from 'react-select';
3
+ export type SelectFieldOption<V> = {
4
+ label: string;
5
+ value: V;
6
+ trailingNote?: ReactNode;
7
+ };
8
+ export type SelectFieldOptionsMap<V> = {
9
+ [key: string]: SelectFieldOption<V>;
10
+ };
11
+ export declare const getOptionsMap: <V extends string | number>(options: Options<SelectFieldOption<V>> | ReadonlyArray<GroupBase<SelectFieldOption<V>>>) => SelectFieldOptionsMap<V>;
12
+ export declare const getMenuContainer: (menuPortalTarget: "body" | "self" | HTMLElement | null) => HTMLElement | null | undefined;
@@ -0,0 +1,29 @@
1
+ import { canUseDOM } from '../../utils/ssr';
2
+ const isSimpleOption = (option) => !!option.value;
3
+ export const getOptionsMap = (options) =>
4
+ // need this type assertion because of the TS issue https://github.com/microsoft/TypeScript/issues/7294
5
+ options.reduce((acc, optionOrGroup) => {
6
+ // if it's a simple non-group option
7
+ if (isSimpleOption(optionOrGroup)) {
8
+ acc[optionOrGroup.value] = optionOrGroup;
9
+ // else it's a group option
10
+ }
11
+ else {
12
+ optionOrGroup.options.reduce((innerAcc, option) => {
13
+ innerAcc[option.value] = option;
14
+ return innerAcc;
15
+ }, acc);
16
+ }
17
+ return acc;
18
+ }, {});
19
+ export const getMenuContainer = (menuPortalTarget) => {
20
+ if (menuPortalTarget == 'body') {
21
+ // There is no document is SSR environment
22
+ return canUseDOM ? document.body : undefined;
23
+ }
24
+ if (menuPortalTarget == 'self') {
25
+ return undefined;
26
+ }
27
+ return menuPortalTarget;
28
+ };
29
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/old/Select/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAY3C,MAAM,cAAc,GAAG,CAAI,MAA8D,EAAkC,EAAE,CAC3H,CAAC,CAAE,MAA+B,CAAC,KAAK,CAAA;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAuF,EAC7D,EAAE;AAC5B,uGAAuG;AACtG,OAAyE,CAAC,MAAM,CAC/E,CAAC,GAA6B,EAAE,aAAqE,EAA4B,EAAE;IACjI,oCAAoC;IACpC,IAAI,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,aAAa,CAAA;QACxC,2BAA2B;IAC7B,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAkC,EAAE,MAA4B,EAAE,EAAE;YAChG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAA;YAC/B,OAAO,QAAQ,CAAA;QACjB,CAAC,EAAE,GAAG,CAAC,CAAA;IACT,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,EACD,EAA8B,CAC/B,CAAA;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,gBAAsD,EAAkC,EAAE;IACzH,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAAC;QAC/B,0CAA0C;QAC1C,OAAO,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9C,CAAC;IACD,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,gBAAgB,CAAA;AACzB,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import React, { HTMLAttributes, TdHTMLAttributes, ThHTMLAttributes } from 'react';
2
+ export type SimpleTableProps = HTMLAttributes<HTMLTableElement>;
3
+ export declare const SimpleTable: {
4
+ (props: SimpleTableProps): React.JSX.Element;
5
+ Body(props: HTMLAttributes<HTMLTableSectionElement>): React.JSX.Element;
6
+ Footer(props: HTMLAttributes<HTMLTableSectionElement>): React.JSX.Element;
7
+ Header(props: HTMLAttributes<HTMLTableSectionElement>): React.JSX.Element;
8
+ Row(props: HTMLAttributes<HTMLTableRowElement>): React.JSX.Element;
9
+ Td(props: TdHTMLAttributes<HTMLTableDataCellElement>): React.JSX.Element;
10
+ Th(props: ThHTMLAttributes<HTMLTableDataCellElement>): React.JSX.Element;
11
+ };
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import cls from 'classnames';
3
+ import styles from './SimpleTableLegacy.module.scss';
4
+ export const SimpleTable = (props) => {
5
+ const { className, ...rest } = props;
6
+ return React.createElement("table", { className: cls(className, styles.root), ...rest });
7
+ };
8
+ SimpleTable.Body = function SimpleTableBody(props) {
9
+ return React.createElement("tbody", { ...props });
10
+ };
11
+ SimpleTable.Footer = function SimpleTableFooter(props) {
12
+ return React.createElement("tfoot", { ...props });
13
+ };
14
+ SimpleTable.Header = function SimpleTableHeader(props) {
15
+ return React.createElement("thead", { ...props });
16
+ };
17
+ SimpleTable.Row = function SimpleTableRow(props) {
18
+ return React.createElement("tr", { ...props });
19
+ };
20
+ SimpleTable.Td = function SimpleTableTd(props) {
21
+ return React.createElement("td", { ...props });
22
+ };
23
+ SimpleTable.Th = function SimpleTableTh(props) {
24
+ return React.createElement("th", { ...props });
25
+ };
26
+ //# sourceMappingURL=SimpleTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleTable.js","sourceRoot":"","sources":["../../src/old/SimpleTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6D,MAAM,OAAO,CAAA;AACjF,OAAO,GAAG,MAAM,YAAY,CAAA;AAE5B,OAAO,MAAM,MAAM,iCAAiC,CAAA;AAIpD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAA;IAEpC,OAAO,+BAAO,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAM,IAAI,GAAI,CAAA;AACpE,CAAC,CAAA;AAED,WAAW,CAAC,IAAI,GAAG,SAAS,eAAe,CAAC,KAA8C;IACxF,OAAO,kCAAW,KAAK,GAAI,CAAA;AAC7B,CAAC,CAAA;AACD,WAAW,CAAC,MAAM,GAAG,SAAS,iBAAiB,CAAC,KAA8C;IAC5F,OAAO,kCAAW,KAAK,GAAI,CAAA;AAC7B,CAAC,CAAA;AACD,WAAW,CAAC,MAAM,GAAG,SAAS,iBAAiB,CAAC,KAA8C;IAC5F,OAAO,kCAAW,KAAK,GAAI,CAAA;AAC7B,CAAC,CAAA;AACD,WAAW,CAAC,GAAG,GAAG,SAAS,cAAc,CAAC,KAA0C;IAClF,OAAO,+BAAQ,KAAK,GAAI,CAAA;AAC1B,CAAC,CAAA;AACD,WAAW,CAAC,EAAE,GAAG,SAAS,aAAa,CAAC,KAAiD;IACvF,OAAO,+BAAQ,KAAK,GAAI,CAAA;AAC1B,CAAC,CAAA;AACD,WAAW,CAAC,EAAE,GAAG,SAAS,aAAa,CAAC,KAAiD;IACvF,OAAO,+BAAQ,KAAK,GAAI,CAAA;AAC1B,CAAC,CAAA"}
@@ -0,0 +1,53 @@
1
+ import React, { FC, ReactNode, MouseEvent, KeyboardEvent } from 'react';
2
+ import { DataTestProp } from '../helpers/types';
3
+ export type TabContextValue = {
4
+ onChange: (value: number) => void;
5
+ value: number;
6
+ idPrefix: string;
7
+ fullWidth?: boolean;
8
+ };
9
+ export declare const tabContextDefaultValue: TabContextValue;
10
+ export declare const TabContext: React.Context<TabContextValue>;
11
+ export declare const useTabContext: () => TabContextValue;
12
+ export type TabContextProviderProps = Pick<TabContextValue, 'fullWidth'> & {
13
+ children: ReactNode;
14
+ };
15
+ export declare const TabContextProvider: FC<TabContextProviderProps>;
16
+ export type TabContextProviderControlledProps = Omit<TabContextValue, 'idPrefix'> & {
17
+ children: ReactNode;
18
+ };
19
+ export declare const TabContextProviderControlled: FC<TabContextProviderControlledProps>;
20
+ export declare const getTabId: (prefix: string, value: string) => string;
21
+ export declare const getPanelId: (prefix: string, value: string) => string;
22
+ export type TabListProps = {
23
+ ariaLabel: string;
24
+ className?: string;
25
+ children: ReactNode;
26
+ };
27
+ export declare const TabList: FC<TabListProps>;
28
+ export type AnchorTabProps = {
29
+ component: 'a';
30
+ href: string;
31
+ };
32
+ export type ButtonTabProps = {
33
+ component?: 'button';
34
+ href?: never;
35
+ };
36
+ type TabTypeProps = AnchorTabProps | ButtonTabProps;
37
+ type TabLabelProps = {
38
+ children: ReactNode;
39
+ ariaLabel?: string;
40
+ };
41
+ export type TabCommonProps = {
42
+ value: number;
43
+ onClick?: (event: MouseEvent<HTMLButtonElement | HTMLAnchorElement> | KeyboardEvent<HTMLButtonElement | HTMLAnchorElement>) => void;
44
+ className?: string;
45
+ };
46
+ export type TabProps<T = TabTypeProps> = TabCommonProps & T & TabLabelProps;
47
+ export declare const Tab: FC<TabProps>;
48
+ export type TabPanelProps = {
49
+ value: number;
50
+ children: ReactNode;
51
+ } & DataTestProp;
52
+ export declare const TabPanel: FC<TabPanelProps>;
53
+ export {};
@@ -0,0 +1,92 @@
1
+ import React, { createContext, useContext, useMemo, useState, useCallback, useRef } from 'react';
2
+ import cn from 'classnames';
3
+ import { useUID } from 'react-uid';
4
+ import { keyIsOneOf } from '../utils/keyboard';
5
+ import styles from './TabsLegacy.module.scss';
6
+ export const tabContextDefaultValue = {
7
+ onChange: () => {
8
+ // default function - do nothing ¯\_(ツ)_/¯
9
+ },
10
+ value: 0,
11
+ idPrefix: '',
12
+ fullWidth: false,
13
+ };
14
+ export const TabContext = createContext(tabContextDefaultValue);
15
+ export const useTabContext = () => useContext(TabContext);
16
+ export const TabContextProvider = ({ fullWidth, children }) => {
17
+ const [value, setValue] = useState(0);
18
+ return (React.createElement(TabContextProviderControlled, { value: value, onChange: setValue, fullWidth: fullWidth }, children));
19
+ };
20
+ export const TabContextProviderControlled = ({ onChange, value, fullWidth, children }) => {
21
+ const id = useUID();
22
+ const contextValue = useMemo(() => ({
23
+ onChange,
24
+ value,
25
+ idPrefix: id,
26
+ fullWidth,
27
+ }), [onChange, value, id, fullWidth]);
28
+ return React.createElement(TabContext.Provider, { value: contextValue }, children);
29
+ };
30
+ export const getTabId = (prefix, value) => `${prefix}-tab-${value}`;
31
+ export const getPanelId = (prefix, value) => `${prefix}-panel-${value}`;
32
+ export const TabList = ({ ariaLabel, className, children }) => {
33
+ const tabListRef = useRef(null);
34
+ const handleKeyDown = useCallback((event) => {
35
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
36
+ const target = event.target;
37
+ const role = target.getAttribute('role');
38
+ if (role !== 'tab') {
39
+ console.warn('Children of TabList component do not have [role="tab"]. Keyboard navigation will not work as expected.');
40
+ return;
41
+ }
42
+ let newFocusTarget = null;
43
+ switch (event.key) {
44
+ case 'ArrowLeft':
45
+ newFocusTarget =
46
+ (_c = (_a = target.previousElementSibling) !== null && _a !== void 0 ? _a : (_b = tabListRef.current) === null || _b === void 0 ? void 0 : _b.lastChild) !== null && _c !== void 0 ? _c : null;
47
+ break;
48
+ case 'ArrowRight':
49
+ newFocusTarget = (_f = (_d = target.nextElementSibling) !== null && _d !== void 0 ? _d : (_e = tabListRef.current) === null || _e === void 0 ? void 0 : _e.firstChild) !== null && _f !== void 0 ? _f : null;
50
+ break;
51
+ case 'Home':
52
+ newFocusTarget = (_h = (_g = tabListRef.current) === null || _g === void 0 ? void 0 : _g.firstChild) !== null && _h !== void 0 ? _h : null;
53
+ break;
54
+ case 'End':
55
+ newFocusTarget = (_k = (_j = tabListRef.current) === null || _j === void 0 ? void 0 : _j.lastChild) !== null && _k !== void 0 ? _k : null;
56
+ break;
57
+ default:
58
+ break;
59
+ }
60
+ if (newFocusTarget !== null) {
61
+ newFocusTarget.focus();
62
+ event.preventDefault();
63
+ }
64
+ }, []);
65
+ return (React.createElement("div", { "data-test": "tab-list", className: cn(styles.tabList, className), "aria-label": ariaLabel, role: "tablist", ref: tabListRef, onKeyDown: handleKeyDown }, children));
66
+ };
67
+ export const Tab = ({ component: Component = 'button', value, href, onClick, children, ariaLabel, className }) => {
68
+ const { onChange, value: activeValue, idPrefix, fullWidth } = useTabContext();
69
+ const selected = value === activeValue;
70
+ const handleClick = useCallback((event) => {
71
+ if (selected) {
72
+ return;
73
+ }
74
+ if (onClick) {
75
+ onClick(event);
76
+ }
77
+ onChange(value);
78
+ }, [value, selected, onChange, onClick]);
79
+ const onKeyPress = useCallback((event) => {
80
+ event.preventDefault();
81
+ if (keyIsOneOf(event, 'Enter', 'Space')) {
82
+ handleClick(event);
83
+ }
84
+ }, [handleClick]);
85
+ return (React.createElement(Component, { className: cn(styles.tab, { [styles.selected]: selected, [styles.fullWidth]: fullWidth }, className), role: "tab", id: getTabId(idPrefix, value.toString()), "aria-controls": getPanelId(idPrefix, value.toString()), "aria-selected": selected, tabIndex: selected ? 0 : -1, onKeyPress: onKeyPress, onClick: handleClick, ...(Component === 'a' && !selected && { href }), "aria-label": ariaLabel }, children));
86
+ };
87
+ export const TabPanel = ({ value, children, 'data-test': dataTest }) => {
88
+ const { idPrefix, value: selectedValue } = useTabContext();
89
+ const selected = value === selectedValue;
90
+ return (React.createElement("div", { className: cn(styles.tabPanel, { [styles.hidden]: !selected }), role: "tabpanel", "data-test": dataTest, id: getPanelId(idPrefix, value.toString()), "aria-labelledby": getTabId(idPrefix, value.toString()) }, selected ? children : null));
91
+ };
92
+ //# sourceMappingURL=Tabs.js.map